@truenine/memory-sync-cli 2026.10314.10606 → 2026.10314.10724

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.cjs CHANGED
@@ -1 +1 @@
1
- Object.defineProperties(exports,{__esModule:{value:!0},[Symbol.toStringTag]:{value:`Module`}});const e=require(`./plugin.config-DOVAlPZZ.cjs`);let t=require(`node:process`);t=e.y(t);async function n(){let n=new e.s(...t.default.argv),{default:r}=await Promise.resolve().then(()=>require(`./plugin.config-DOVAlPZZ.cjs`)).then(e=>e.n),i=await r;(await n.run(i)).success||t.default.exit(1)}function r(e){return e.some(e=>e===`--json`||e===`-j`||/^-[^-]*j/.test(e))}function i(e){t.default.stdout.write(`${JSON.stringify({success:!1,filesAffected:0,dirsAffected:0,message:e,pluginResults:[],errors:[e]})}\n`)}n().catch(n=>{let a=n instanceof Error?n.message:String(n);r(t.default.argv)&&(i(a),t.default.exit(1)),e.v(`main`,`error`).error(`unhandled error`,{error:a}),t.default.exit(1)}),exports.ConfigLoader=e.c,exports.DEFAULT_CONFIG_FILE_NAME=e.l,exports.DEFAULT_GLOBAL_CONFIG_DIR=e.u,exports.DEFAULT_USER_CONFIG=e.g,exports.PathPlaceholders=e._,exports.checkVersionControl=e.a,exports.default=e.t,exports.defineConfig=e.r,exports.ensureConfigLink=e.d,exports.generateAindex=e.o,exports.getConfigLoader=e.f,exports.getGlobalConfigPath=e.p,exports.loadUserConfig=e.m,exports.mergeConfig=e.i,exports.validateGlobalConfig=e.h;
1
+ Object.defineProperties(exports,{__esModule:{value:!0},[Symbol.toStringTag]:{value:`Module`}});const e=require(`./plugin.config-BtcHaSXj.cjs`);let t=require(`node:process`);t=e.y(t);async function n(){let n=new e.s(...t.default.argv),{default:r}=await Promise.resolve().then(()=>require(`./plugin.config-BtcHaSXj.cjs`)).then(e=>e.n),i=await r;(await n.run(i)).success||t.default.exit(1)}function r(e){return e.some(e=>e===`--json`||e===`-j`||/^-[^-]*j/.test(e))}function i(e){t.default.stdout.write(`${JSON.stringify({success:!1,filesAffected:0,dirsAffected:0,message:e,pluginResults:[],errors:[e]})}\n`)}n().catch(n=>{let a=n instanceof Error?n.message:String(n);r(t.default.argv)&&(i(a),t.default.exit(1)),e.v(`main`,`error`).error(`unhandled error`,{error:a}),t.default.exit(1)}),exports.ConfigLoader=e.c,exports.DEFAULT_CONFIG_FILE_NAME=e.l,exports.DEFAULT_GLOBAL_CONFIG_DIR=e.u,exports.DEFAULT_USER_CONFIG=e.g,exports.PathPlaceholders=e._,exports.checkVersionControl=e.a,exports.default=e.t,exports.defineConfig=e.r,exports.ensureConfigLink=e.d,exports.generateAindex=e.o,exports.getConfigLoader=e.f,exports.getGlobalConfigPath=e.p,exports.loadUserConfig=e.m,exports.mergeConfig=e.i,exports.validateGlobalConfig=e.h;
package/dist/index.mjs CHANGED
@@ -1 +1 @@
1
- import{_ as e,a as t,c as n,d as r,f as i,g as a,h as o,i as s,l as c,m as l,o as u,p as d,r as f,s as p,t as m,u as h,v as g}from"./plugin.config-B70HHuPF.mjs";import _ from"node:process";async function v(){let e=new p(..._.argv),{default:t}=await import(`./plugin.config-B70HHuPF.mjs`).then(e=>e.n),n=await t;(await e.run(n)).success||_.exit(1)}function y(e){return e.some(e=>e===`--json`||e===`-j`||/^-[^-]*j/.test(e))}function b(e){_.stdout.write(`${JSON.stringify({success:!1,filesAffected:0,dirsAffected:0,message:e,pluginResults:[],errors:[e]})}\n`)}v().catch(e=>{let t=e instanceof Error?e.message:String(e);y(_.argv)&&(b(t),_.exit(1)),g(`main`,`error`).error(`unhandled error`,{error:t}),_.exit(1)});export{n as ConfigLoader,c as DEFAULT_CONFIG_FILE_NAME,h as DEFAULT_GLOBAL_CONFIG_DIR,a as DEFAULT_USER_CONFIG,e as PathPlaceholders,t as checkVersionControl,m as default,f as defineConfig,r as ensureConfigLink,u as generateAindex,i as getConfigLoader,d as getGlobalConfigPath,l as loadUserConfig,s as mergeConfig,o as validateGlobalConfig};
1
+ import{_ as e,a as t,c as n,d as r,f as i,g as a,h as o,i as s,l as c,m as l,o as u,p as d,r as f,s as p,t as m,u as h,v as g}from"./plugin.config-BA0zCzeY.mjs";import _ from"node:process";async function v(){let e=new p(..._.argv),{default:t}=await import(`./plugin.config-BA0zCzeY.mjs`).then(e=>e.n),n=await t;(await e.run(n)).success||_.exit(1)}function y(e){return e.some(e=>e===`--json`||e===`-j`||/^-[^-]*j/.test(e))}function b(e){_.stdout.write(`${JSON.stringify({success:!1,filesAffected:0,dirsAffected:0,message:e,pluginResults:[],errors:[e]})}\n`)}v().catch(e=>{let t=e instanceof Error?e.message:String(e);y(_.argv)&&(b(t),_.exit(1)),g(`main`,`error`).error(`unhandled error`,{error:t}),_.exit(1)});export{n as ConfigLoader,c as DEFAULT_CONFIG_FILE_NAME,h as DEFAULT_GLOBAL_CONFIG_DIR,a as DEFAULT_USER_CONFIG,e as PathPlaceholders,t as checkVersionControl,m as default,f as defineConfig,r as ensureConfigLink,u as generateAindex,i as getConfigLoader,d as getGlobalConfigPath,l as loadUserConfig,s as mergeConfig,o as validateGlobalConfig};
@@ -95,4 +95,4 @@ Defaulting to 2020, but this will stop working in the future.`)),t.ecmaVersion=1
95
95
  `).replaceAll(`\\r`,`\r`).replaceAll(`\\t`,` `).replaceAll(`\\"`,`"`).replaceAll(`\\'`,`'`).replaceAll(`\\\\`,`\\`)}function qh(e,t,n){if(t==null){let t=n==null?``:` in file "${n}"`;throw Error(`Variable reference "${e}" cannot be resolved without scope${t}`)}let r=e.split(`.`),i=r[0];if(i==null||!(i in t)){let r=n==null?``:` in file "${n}"`,a=Object.keys(t).join(`, `);throw Error(`Undefined namespace "${i}" in expression "${e}"${r}. Available: ${a}`)}let a=t[i];for(let t=1;t<r.length;t++){let i=r[t];if(i==null)continue;if(a==null){let t=n==null?``:` in file "${n}"`;throw Error(`Cannot read property "${i}" of null/undefined in "${e}"${t}`)}if(typeof a!=`object`){let t=n==null?``:` in file "${n}"`;throw Error(`Cannot read property "${i}" of ${typeof a} in "${e}"${t}`)}let o=a;if(!(i in o)){let t=n==null?``:` in file "${n}"`,r=Object.keys(o).join(`, `);throw Error(`Undefined property "${i}" in "${e}"${t}. Available: ${r}`)}a=o[i]}if(typeof a==`string`||typeof a==`number`||typeof a==`boolean`||a===null||Array.isArray(a)||typeof a==`object`)return a;let o=n==null?``:` in file "${n}"`;throw Error(`Variable "${e}" resolved to unsupported type: ${typeof a}${o}`)}function Jh(e,t,n){let r=e.slice(1,-1).trim();if(r===``)return[];if(t==null)try{let t=Xh(e),n=JSON.parse(t);if(Array.isArray(n))return n}catch{}return Zh(r).map(e=>Gh(e.trim(),t,n))}function Yh(e,t,n){let r=e.slice(1,-1).trim();if(r===``)return{};if(t==null)try{let t=Xh(e),n=JSON.parse(t);if(typeof n==`object`&&n&&!Array.isArray(n))return n}catch{}let i={},a=Qh(r);for(let e of a){let r=$h(e);if(r===-1)continue;let a=e.slice(0,r).trim(),o=e.slice(r+1).trim();(a.startsWith(`"`)&&a.endsWith(`"`)||a.startsWith(`'`)&&a.endsWith(`'`))&&(a=a.slice(1,-1)),i[a]=Gh(o,t,n)}return i}function Xh(e){let t=``,n=null,r=!1;for(let i=0;i<e.length;i++){let a=e[i];if(r){t+=a,r=!1;continue}if(a===`\\`){t+=a,r=!0;continue}if(n!=null){a===n?(t+=`"`,n=null):a===`"`&&n===`'`?t+=`\\"`:t+=a;continue}if(a===`"`||a===`'`){t+=`"`,n=a;continue}if(a===`:`&&i>0){let e=t.length-1;for(;e>=0&&/\s/.test(t.charAt(e));)e--;let n=e+1;for(;e>=0&&/[\w$]/.test(t.charAt(e));)e--;if(e++,e>0&&t.charAt(e-1)!==`"`){let r=t.slice(e,n);r.length>0&&/^[\w$]+$/.test(r)&&(t=`${t.slice(0,e)}"${r}"`)}}t+=a}return t}function Zh(e){let t=[],n=``,r=0,i=null,a=!1;for(let o of e){if(a){n+=o,a=!1;continue}if(o===`\\`){n+=o,a=!0;continue}if(i!=null){n+=o,o===i&&(i=null);continue}if(o===`"`||o===`'`||o==="`"){n+=o,i=o;continue}if(o===`[`||o===`{`){r++,n+=o;continue}if(o===`]`||o===`}`){r--,n+=o;continue}if(o===`,`&&r===0){n.trim()!==``&&t.push(n.trim()),n=``;continue}n+=o}return n.trim()!==``&&t.push(n.trim()),t}function Qh(e){return Zh(e)}function $h(e){let t=null,n=!1;for(let r=0;r<e.length;r++){let i=e[r];if(n){n=!1;continue}if(i===`\\`){n=!0;continue}if(t!=null){i===t&&(t=null);continue}if(i===`"`||i===`'`||i==="`"){t=i;continue}if(i===`:`)return r}return-1}function eg(e,t){let n=e.attributes.find(e=>e.type===`mdxJsxAttribute`&&e.name===`when`);if(n?.type!==`mdxJsxAttribute`)return!0;if(typeof n.value==`string`)return n.value===`true`;if(n.value!=null&&typeof n.value==`object`&&n.value.type===`mdxJsxAttributeValueExpression`)try{let e=$m(n.value.value,t.scope);return e===`true`||e===`1`}catch{return!1}return!1}async function tg(e,t,n){return!eg(e,t)||e.children.length===0?[]:n(e.children,t)}async function ng(e,t){if(!eg(e,t)||e.children.length===0)return[];let n=rg(e.children,t);return n===``?[]:[{type:`text`,value:n}]}function rg(e,t){let n=``;for(let r of e)if(r.type===`text`)n+=r.value;else if(r.type===`mdxTextExpression`)try{n+=$m(r.value,t.scope)}catch{}else `children`in r&&Array.isArray(r.children)&&(n+=rg(r.children,t));return n}function ig(){Xm(`Md`,tg),Xm(`Md.Line`,ng)}ig();function ag(e,t){let n={};if(e!=null&&(n.os={...e.os},n.env={...e.env},n.profile={...e.profile},n.tool={...e.tool}),t!=null)for(let[e,r]of Object.entries(t)){let t=n[e];n[e]=typeof r==`object`&&r&&!Array.isArray(r)&&typeof t==`object`&&t&&!Array.isArray(t)?{...t,...r}:r}return n}async function og(e,t){let n=Gf(e),r=ag(t?.globalScope,t?.scope),i=Zm(),a;if(t?.extractMetadata===!0){let e=n.children.find(e=>e.type===`yaml`),i;if(e!=null)try{i=f.parse(e.value)}catch{}a=Hh(n.children.filter(e=>e.type===`mdxjsEsm`),{...i!=null&&{yamlFrontMatter:i},scope:r,...t?.basePath!=null&&{filePath:t.basePath}}),n.children=n.children.filter(e=>e.type!==`yaml`&&e.type!==`mdxjsEsm`)}let o=await Ih(n,{scope:r,components:i,processingStack:[],...t?.basePath!=null&&{basePath:t.basePath}}),s=Ff().use(Lt,[`yaml`]).use(Es).use(Vh,{bullet:`-`,fence:"`",fences:!0,emphasis:`*`,strong:`*`,rule:`-`,handlers:{text(e){return e.value}}}).stringify(o).trim();return t?.extractMetadata===!0&&a!=null?{content:s,metadata:a}:s}let sg=null;try{let t=e(import.meta.url),{platform:n,arch:r}=o,i={"win32-x64":[`napi-md-compiler.win32-x64-msvc`,`win32-x64-msvc`],"linux-x64":[`napi-md-compiler.linux-x64-gnu`,`linux-x64-gnu`],"linux-arm64":[`napi-md-compiler.linux-arm64-gnu`,`linux-arm64-gnu`],"darwin-arm64":[`napi-md-compiler.darwin-arm64`,`darwin-arm64`],"darwin-x64":[`napi-md-compiler.darwin-x64`,`darwin-x64`]}[`${n}-${r}`];if(i!=null){let[e,n]=i;try{sg=t(`./${e}.node`)}catch{try{sg=t(`@truenine/memory-sync-cli-${n}`).mdCompiler}catch{}}}}catch{}async function cg(e,t){let n=t?.extractMetadata===!0?{...t,extractMetadata:!0}:null,r=lg(e,t);if(r!=null){if(n!=null){let{metadata:t}=r;return t==null?og(e,n):{content:r.content,metadata:t}}return r.content}return n==null?t==null?og(e):og(e,{...t,extractMetadata:!1}):og(e,n)}function lg(e,t){if(sg==null)return null;try{let n=sg.compileMdxToMd(e,ug(t)),r=JSON.parse(n);return t?.extractMetadata===!0&&r.metadata==null?null:r}catch{return null}}function ug(e){if(e==null)return null;let t={...e,...e.globalScope==null?{}:{globalScope:{os:e.globalScope.os,env:e.globalScope.env,profile:e.globalScope.profile,tool:e.globalScope.tool}}};return JSON.stringify(t)}function dg(e,t){return e==null&&t==null?[]:[...new Set([...e??[],...t??[]])]}function fg(e,t){return e==null||t.length===0?!0:typeof e==`string`?t.includes(e):e.some(e=>t.includes(e))}function pg(e,t){if(e==null&&t==null)return{};let n={};for(let[t,r]of Object.entries(e??{}))n[t]=[...r];for(let[e,r]of Object.entries(t??{}))n[e]=Object.hasOwn(n,e)?[...new Set([...n[e],...r])]:[...r];return n}function mg(e){if(typeof e!=`object`||!e)return!1;let t=e;return typeof t.matchesSeries==`function`&&typeof t.resolveEffectiveIncludeSeries==`function`&&typeof t.resolveSubSeries==`function`}function hg(){let t={"win32-x64":`win32-x64-msvc`,"linux-x64":`linux-x64-gnu`,"linux-arm64":`linux-arm64-gnu`,"darwin-arm64":`darwin-arm64`,"darwin-x64":`darwin-x64`}[`${o.platform}-${o.arch}`];if(t==null)return;let n=`@truenine/memory-sync-cli-${t}`,r=`napi-memory-sync-cli.${t}.node`;try{let t=e(import.meta.url),i=[n,`${n}/${r}`,`./${r}`];for(let e of i)try{let n=t(e),r=[n,n?.default,n?.config];for(let e of r)if(mg(e))return e}catch{}}catch{}}const{resolveEffectiveIncludeSeries:gg,matchesSeries:_g,resolveSubSeries:vg}=hg()??{resolveEffectiveIncludeSeries:dg,matchesSeries:fg,resolveSubSeries:pg};function yg(e,t,n){let r=gg(t?.includeSeries,t?.[n]?.includeSeries);return e.filter(e=>_g(e.seriName,r))}function bg(e){let t=e.replaceAll(/\.\/+/g,``);return t=t.replaceAll(/\/+$/g,``),t}function xg(e,t){return t.startsWith(`**/`)?`${e}/${t}`:t.startsWith(`*`)?`${e}/**/${t}`:`${e}/${t}`}function Sg(e,t){for(let n of t){let t=n.replaceAll(/\/+$/g,``),r=[{prefix:t,pattern:`${t}/`},{prefix:t,pattern:`${t}\\`}];for(let{prefix:t,pattern:n}of r)if(e.startsWith(n))return{prefix:t,baseGlob:e.slice(n.length)};if(e===t)return{prefix:t,baseGlob:`**/*`}}return{prefix:null,baseGlob:e}}function Cg(e,t){let n=vg(t?.subSeries,t?.rules?.subSeries);if(Object.keys(n).length===0)return e;let r={};for(let[e,t]of Object.entries(n)){let n=bg(e);r[n]=t}let i=Object.keys(r);return e.map(e=>{if(e.seriName==null)return e;let t=[];for(let[n,i]of Object.entries(r))(Array.isArray(e.seriName)?e.seriName.some(e=>i.includes(e)):i.includes(e.seriName))&&t.push(n);if(t.length===0)return e;let n=[];for(let r of e.globs){let{prefix:e,baseGlob:a}=Sg(r,i);e!=null&&n.push(r);for(let r of t){if(r===e)continue;let t=xg(r,a);n.includes(t)||n.push(t)}}return{...e,globs:n}})}function wg(e){let r=n.join(e,`.git`);if(!t.existsSync(r))return null;let i=t.lstatSync(r);if(i.isDirectory())return n.join(r,`info`);if(i.isFile())try{let i=t.readFileSync(r,`utf8`).trim(),a=/^gitdir: (.+)$/.exec(i);if(a?.[1]!=null){let t=n.resolve(e,a[1]);return n.join(t,`info`)}}catch{}return null}function Tg(e,r=5){let i=[],a=new Set([`node_modules`,`.turbo`,`dist`,`build`,`out`,`.cache`]);function o(s,c){if(c>r)return;let l;try{let e=t.readdirSync(s,{withFileTypes:!0});if(!Array.isArray(e))return;l=e}catch{return}l.some(e=>e.name===`.git`)&&s!==e&&i.push(s);for(let e of l)e.isDirectory()&&(e.name===`.git`||a.has(e.name)||o(n.join(s,e.name),c+1))}return o(e,0),i}function Eg(e){let r=n.join(e,`modules`);if(!t.existsSync(r))return[];let i=[];function a(e){let r;try{let n=t.readdirSync(e,{withFileTypes:!0});if(!Array.isArray(n))return;r=n}catch{return}if(r.some(e=>e.name===`info`&&e.isDirectory())&&i.push(n.join(e,`info`)),r.find(e=>e.name===`modules`&&e.isDirectory())==null)return;let o;try{let r=t.readdirSync(n.join(e,`modules`),{withFileTypes:!0});if(!Array.isArray(r))return;o=r}catch{return}for(let t of o)t.isDirectory()&&a(n.join(e,`modules`,t.name))}let o;try{let e=t.readdirSync(r,{withFileTypes:!0});if(!Array.isArray(e))return i;o=e}catch{return i}for(let e of o)e.isDirectory()&&a(n.join(r,e.name));return i}const Dg={default:{websearch:`web_search`,webfetch:`web_fetch`,readFile:`read_file`,writeFile:`write_file`,executeCommand:`execute_command`,todolistWrite:`todolist_write`,grep:`grep`,listDirectory:`list_directory`},claudeCode:{readFile:`Read`,writeFile:`Write`,executeCommand:`Execute`,todolistWrite:`TodoWrite`,listDirectory:`List`},kiro:{websearch:`remote_web_search`,webfetch:`webFetch`,readFile:`readFile`,writeFile:`fsWrite`,executeCommand:`executeBash`,todolistWrite:`todolistWrite`,grep:`grepSearch`,listDirectory:`listDir`}};let Og=function(e){return e.Bash=`bash`,e.Zsh=`zsh`,e.Fish=`fish`,e.Sh=`sh`,e.PowerShell=`powershell`,e.Pwsh=`pwsh`,e.Cmd=`cmd`,e.Unknown=`unknown`,e}({}),kg=function(e){return e.Win=`win`,e.Mac=`mac`,e.Linux=`linux`,e.Unknown=`unknown`,e}({});var Ag=class{userConfig;toolPreset;constructor(e={}){this.userConfig=e.userConfig,this.toolPreset=e.toolPreset??`default`}collect(){return{os:this.collectOsInfo(),env:this.collectEnvContext(),profile:this.collectProfile(),tool:this.collectToolReferences(),Md:this.createMdComponent()}}collectOsInfo(){let e=s.platform();return{platform:e,arch:s.arch(),hostname:s.hostname(),homedir:s.homedir(),tmpdir:s.tmpdir(),type:s.type(),release:s.release(),shellKind:this.detectShellKind(),kind:this.detectOsKind(e)}}detectOsKind(e){switch(e){case`win32`:return kg.Win;case`darwin`:return kg.Mac;case`linux`:case`freebsd`:case`openbsd`:case`sunos`:case`aix`:return kg.Linux;default:return kg.Unknown}}detectShellKind(){let e=(o.env.SHELL??o.env.ComSpec??``).toLowerCase();return e.includes(`bash`)?Og.Bash:e.includes(`zsh`)?Og.Zsh:e.includes(`fish`)?Og.Fish:e.includes(`pwsh`)?Og.Pwsh:e.includes(`powershell`)?Og.PowerShell:e.includes(`cmd`)?Og.Cmd:e.endsWith(`/sh`)?Og.Sh:Og.Unknown}collectEnvContext(){return{...o.env}}collectProfile(){return this.userConfig?.profile==null?{}:this.userConfig.profile}collectToolReferences(){let e={...Dg.default};return this.toolPreset===`claudeCode`?{...e,...Dg.claudeCode}:this.toolPreset===`kiro`?{...e,...Dg.kiro}:e}createMdComponent(){let e=(e=>e.when===!1?null:e.children);return e.Line=e=>e.when===!1?null:e.children,e}};let jg=function(e){return e[e.SystemDefault=0]=`SystemDefault`,e[e.UserConfig=10]=`UserConfig`,e[e.PluginRegistered=20]=`PluginRegistered`,e[e.CompileTime=30]=`CompileTime`,e}({});var Mg=class{registrations=[];globalScope=null;setGlobalScope(e){this.globalScope=e}getGlobalScope(){return this.globalScope}register(e,t,n=jg.PluginRegistered){this.registrations.push({namespace:e,values:t,priority:n})}getRegistrations(){return this.registrations}merge(e){let t={};this.globalScope!=null&&(t.os={...this.globalScope.os},t.env={...this.globalScope.env},t.profile={...this.globalScope.profile},t.tool={...this.globalScope.tool});let n=[...this.registrations].sort((e,t)=>e.priority-t.priority);for(let e of n)t[e.namespace]=this.deepMerge(t[e.namespace],e.values);if(e!=null)for(let[n,r]of Object.entries(e))t[n]=typeof r==`object`&&r&&!Array.isArray(r)?this.deepMerge(t[n],r):r;return t}deepMerge(e,t){if(e==null)return{...t};let n={...e};for(let[e,r]of Object.entries(t))n[e]=typeof r==`object`&&r&&!Array.isArray(r)&&typeof n[e]==`object`&&n[e]!==null&&!Array.isArray(n[e])?this.deepMerge(n[e],r):r;return n}resolve(e){let t=this.merge();return e.replaceAll(/\$\{([^}]+)\}/g,(e,n)=>{let r=n.split(`.`),i=t;for(let e of r)i=i?.[e];return i==null?`\${${n}}`:String(i)})}clear(){this.registrations.length=0,this.globalScope=null}};const Ng=[`project`,`workspace`,`global`];function Pg(e){if(e==null)return[];if(typeof e==`string`)return[e];let t=[];for(let n of e)t.includes(n)||t.push(n);return t}function Fg(e,t){let n=new Map;for(let[e,r]of t.entries())n.set(r,e);return[...e].sort((e,t)=>(n.get(e)??2**53-1)-(n.get(t)??2**53-1))}function Ig(e){let{requestedScopes:t,defaultScopes:n,supportedScopes:r,singleScope:i,availableScopes:a,priority:o=Ng}=e,s=Pg(t),c=Pg(n),l=new Set(Pg(r)),u=(s.length>0?s:c).filter(e=>l.has(e));if(u.length===0)return[];let d=Fg(u,o);if(!i)return d;if(a!=null&&a.length>0){let e=new Set(a),t=d.find(t=>e.has(t));return t==null?[]:[t]}let[f]=d;return f==null?[]:[f]}const Lg=m.object({src:m.string(),dist:m.string()}),Rg=m.object({dir:m.string().default(`aindex`),skills:Lg,commands:Lg,subAgents:Lg,rules:Lg,globalPrompt:Lg,workspacePrompt:Lg,app:Lg,ext:Lg,arch:Lg}),zg=m.object({includeSeriesPrefix:m.boolean().optional(),seriesSeparator:m.string().optional()}),Bg=m.object({includeSeriesPrefix:m.boolean().optional(),pluginOverrides:m.record(m.string(),zg).optional()}),Vg=m.enum([`project`,`workspace`,`global`]),Hg=m.union([Vg,m.array(Vg).min(1)]),Ug=m.object({prompt:Hg.optional(),rules:Hg.optional(),commands:Hg.optional(),subagents:Hg.optional(),skills:Hg.optional(),mcp:Hg.optional()}),Wg=m.object({plugins:m.record(m.string(),Ug).optional()}),Gg=m.enum([`direct`,`recursive`]),Kg=m.enum([`path`,`glob`]),qg=m.object({path:m.string(),protectionMode:Gg,matcher:Kg.optional(),reason:m.string().optional()}),Jg=m.object({rules:m.array(qg).optional()}),Yg=m.object({name:m.string().optional(),username:m.string().optional(),gender:m.string().optional(),birthday:m.string().optional()}).catchall(m.unknown()),Xg=m.object({version:m.string().optional(),workspaceDir:m.string().optional(),aindex:Rg.optional(),logLevel:m.enum([`trace`,`debug`,`info`,`warn`,`error`]).optional(),commandSeriesOptions:Bg.optional(),outputScopes:Wg.optional(),cleanupProtection:Jg.optional(),profile:Yg.optional()}),Zg=m.object({names:m.array(m.string()).optional()}),Qg=m.object({includeSeries:m.array(m.string()).optional(),subSeries:m.record(m.string(),m.array(m.string())).optional()});m.object({mcp:Zg.optional(),includeSeries:m.array(m.string()).optional(),subSeries:m.record(m.string(),m.array(m.string())).optional(),rules:Qg.optional(),skills:Qg.optional(),subAgents:Qg.optional(),commands:Qg.optional()}),m.object({configFileName:m.string().optional(),searchPaths:m.array(m.string()).optional(),searchCwd:m.boolean().optional(),searchGlobal:m.boolean().optional()});function $g(e,t){let n=t==null?``:` in ${t}`,r=[],i=[];return(!(`name`in e)||e.name==null)&&r.push(`Missing required field "name"${n}`),!(`description`in e)||e.description==null?r.push(`Missing required field "description"${n}`):(typeof e.description!=`string`||e.description.trim().length===0)&&r.push(`Required field "description" cannot be empty${n}`),e.enabled??i.push(`Using default value for optional field "enabled": true${n}`),e.keywords??i.push(`Using default value for optional field "keywords": []${n}`),{valid:r.length===0,errors:r,warnings:i}}function e_(e){return{workspace:{directory:e.workspace.directory,projects:[...e.workspace.projects]},...e.skills!=null&&{skills:[...e.skills]},...e.commands!=null&&{commands:[...e.commands]},...e.subAgents!=null&&{subAgents:[...e.subAgents]},...e.rules!=null&&{rules:[...e.rules]},...e.readmePrompts!=null&&{readmePrompts:[...e.readmePrompts]},...e.globalMemory!=null&&{globalMemory:e.globalMemory},...e.vscodeConfigFiles!=null&&{vscodeConfigFiles:[...e.vscodeConfigFiles]},...e.jetbrainsConfigFiles!=null&&{jetbrainsConfigFiles:[...e.jetbrainsConfigFiles]},...e.editorConfigFiles!=null&&{editorConfigFiles:[...e.editorConfigFiles]},...e.aiAgentIgnoreConfigFiles!=null&&{aiAgentIgnoreConfigFiles:[...e.aiAgentIgnoreConfigFiles]},...e.globalGitIgnore!=null&&{globalGitIgnore:e.globalGitIgnore},...e.shadowGitExclude!=null&&{shadowGitExclude:e.shadowGitExclude},...e.aindexDir!=null&&{aindexDir:e.aindexDir}}}const t_={Readme:{src:`rdm.mdx`,out:`README.md`},CodeOfConduct:{src:`coc.mdx`,out:`CODE_OF_CONDUCT.md`},Security:{src:`security.mdx`,out:`SECURITY.md`}},n_=[`prompt`,`rules`,`commands`,`subagents`,`skills`,`mcp`];function r_(e){return p.isBuffer(e)}function i_(e){if(typeof e==`string`)return[e];let t=[];for(let n of e)t.includes(n)||t.push(n);return t}function a_(e,t){return t?.outputScopes?.plugins?.[e]}function o_(e){for(let t of n_){let n=e.outputCapabilities[t];if(n!=null&&n.scopes.length===0)throw Error(`Plugin ${e.name} declares empty scopes for topic "${t}"`)}}function s_(e,t){let n=a_(e.name,t);if(n!=null)for(let t of n_){let r=n[t];if(r==null)continue;let i=e.outputCapabilities[t];if(i==null)throw Error(`Invalid outputScopes configuration: outputScopes.plugins.${e.name}.${t} is set, but plugin ${e.name} does not support topic "${t}".`);let a=i_(r);if(i.singleScope&&a.length>1){let n=a.join(`, `);throw Error(`Invalid outputScopes configuration: outputScopes.plugins.${e.name}.${t} is single-scope and cannot request multiple scopes [${n}].`)}let o=new Set(i.scopes),s=a.filter(e=>!o.has(e));if(s.length>0){let n=i.scopes.join(`, `),r=s.join(`, `);throw Error(`Invalid outputScopes configuration: outputScopes.plugins.${e.name}.${t} requests unsupported scopes [${r}]. Allowed scopes: [${n}].`)}}}function c_(e,t){for(let n of e)o_(n),s_(n,t)}async function l_(e,t){let n=new Map;c_(e,t.pluginOptions);for(let r of e){let e=await r.declareOutputFiles(t),i=[];for(let n of e){if(t.dryRun===!0){i.push({path:n.path,success:!0,skipped:!1});continue}try{let e=t.path.dirname(n.path);if(t.fs.mkdirSync(e,{recursive:!0}),n.ifExists===`skip`&&t.fs.existsSync(n.path)){i.push({path:n.path,success:!0,skipped:!0});continue}if(n.ifExists===`error`&&t.fs.existsSync(n.path))throw Error(`Refusing to overwrite existing file: ${n.path}`);if(n.symlinkTarget!=null){t.fs.existsSync(n.path)&&t.fs.rmSync(n.path,{force:!0,recursive:!1}),t.fs.symlinkSync(n.symlinkTarget,n.path,`file`),i.push({path:n.path,success:!0});continue}let a=await r.convertContent(n,t);r_(a)?t.fs.writeFileSync(n.path,a):t.fs.writeFileSync(n.path,a,`utf8`),i.push({path:n.path,success:!0})}catch(e){i.push({path:n.path,success:!1,error:e})}}let a={files:i,dirs:[]};n.set(r.name,a)}return n}async function u_(e,t){let n=[],r=[],i=[],a=[],o=[],s=[];c_(e,t.pluginOptions);for(let n of e){let e=await n.declareOutputFiles({...t,dryRun:!0});for(let t of e)t.scope===`global`?s.push(t.path):t.scope===`workspace`?a.push(t.path):r.push(t.path)}return{projectDirs:n,projectFiles:r,workspaceDirs:i,workspaceFiles:a,globalDirs:o,globalFiles:s}}var d_=class extends Error{pluginName;missingDependency;constructor(e,t){super(`Plugin "${e}" depends on missing plugin "${t}"`),this.name=`MissingDependencyError`,this.pluginName=e,this.missingDependency=t}},f_=class extends Error{cyclePath;constructor(e){super(`Circular plugin dependency detected: ${e.join(` -> `)}`),this.name=`CircularDependencyError`,this.cyclePath=[...e]}},p_=class extends Am{declarativeOutput=!0;outputCapabilities;globalConfigDir;outputFileName;indexignore;commandsConfig;subAgentsConfig;commandOutputEnabled;subAgentOutputEnabled;skillsConfig;skillOutputEnabled;toolPreset;rulesConfig;ruleOutputEnabled;cleanupConfig;registryWriterCache=new Map;constructor(e,t){super(e,fp.Output,t?.dependsOn),this.globalConfigDir=t?.globalConfigDir??``,this.outputFileName=t?.outputFileName??``,this.indexignore=t?.indexignore;let n=t?.commands?.transformFrontMatter;this.commandOutputEnabled=t?.commands!=null,this.commandsConfig={subDir:t?.commands?.subDir??`commands`,sourceScopes:t?.commands?.sourceScopes??[`project`,`workspace`,`global`],...n!=null&&{transformFrontMatter:n}},this.subAgentOutputEnabled=t?.subagents!=null,this.subAgentsConfig={subDir:t?.subagents?.subDir??`agents`,sourceScopes:t?.subagents?.sourceScopes??[`project`,`workspace`,`global`],includePrefix:t?.subagents?.includePrefix??!0,linkSymbol:t?.subagents?.linkSymbol??`-`,ext:t?.subagents?.ext??`.md`,...t?.subagents?.transformFrontMatter!=null&&{transformFrontMatter:t.subagents.transformFrontMatter}},this.skillOutputEnabled=t?.skills!=null,this.skillsConfig={subDir:t?.skills?.subDir??`skills`,sourceScopes:t?.skills?.sourceScopes??[`project`,`workspace`,`global`]},this.toolPreset=t?.toolPreset,this.ruleOutputEnabled=t?.rules!=null,this.rulesConfig={...t?.rules,sourceScopes:t?.rules?.sourceScopes??[`project`,`workspace`,`global`]},this.cleanupConfig=t?.cleanup??{},this.outputCapabilities=t?.capabilities==null?this.buildInferredCapabilities():this.normalizeCapabilities(t.capabilities)}buildInferredCapabilities(){let e={};return this.outputFileName.length>0&&(e.prompt={scopes:[`project`,`global`],singleScope:!1}),this.ruleOutputEnabled&&(e.rules={scopes:this.rulesConfig.sourceScopes??[`project`,`workspace`,`global`],singleScope:!1}),this.commandOutputEnabled&&(e.commands={scopes:this.commandsConfig.sourceScopes,singleScope:!0}),this.subAgentOutputEnabled&&(e.subagents={scopes:this.subAgentsConfig.sourceScopes,singleScope:!0}),this.skillOutputEnabled&&(e.skills={scopes:this.skillsConfig.sourceScopes,singleScope:!0}),e}normalizeCapabilities(e){let t={};for(let n of n_){let r=e[n];if(r==null)continue;let i=this.normalizeCapability(r);i!=null&&(t[n]=i)}return t}normalizeCapability(e){let t=[];for(let n of e.scopes)t.includes(n)||t.push(n);if(t.length!==0)return{scopes:t,singleScope:e.singleScope}}resolvePromptSourceProjectConfig(e){let{projects:t}=e.collectedOutputContext.workspace;return t.find(e=>e.isPromptSourceProject===!0)?.projectConfig??t[0]?.projectConfig}isRelativePath(e){return e.pathKind===mp.Relative}toRelativePath(e){return e.path}resolveFullPath(e,t){let r=this.resolveDirectoryPath(e),i=t??this.outputFileName;return i?n.join(r,i):r}resolveDirectoryPath(e){return e.pathKind===mp.Absolute?e.path:`basePath`in e?n.resolve(e.basePath,e.path):n.resolve(o.cwd(),e.path)}getWorkspaceConfigDir(e){let t=this.resolveDirectoryPath(e.collectedOutputContext.workspace.directory);return n.join(t,this.globalConfigDir)}createRelativePath(e,t,r){return n.join(t,e)}createFileRelativePath(e,t){return n.join(e,t)}getGlobalConfigDir(){return n.join(this.getHomeDir(),this.globalConfigDir)}getXdgConfigHomeDir(){let e=o.env.XDG_CONFIG_HOME;return typeof e==`string`&&e.trim().length>0?e:n.join(this.getHomeDir(),`.config`)}getHomeDir(){return s.homedir()}joinPath(...e){return n.join(...e)}resolvePath(...e){return n.resolve(...e)}dirname(e){return n.dirname(e)}basename(e,t){return n.basename(e,t)}existsSync(e){return t.existsSync(e)}lstatSync(e){return t.lstatSync(e)}readdirSync(e,n){return n?.withFileTypes===!0?t.readdirSync(e,{withFileTypes:!0}):t.readdirSync(e)}getIgnoreOutputPath(){if(this.indexignore!=null)return this.indexignore}resolveCleanupScopeBasePaths(e,t){if(e===`global`)return[this.getHomeDir()];if(e===`workspace`)return[this.resolveDirectoryPath(t.collectedOutputContext.workspace.directory)];if(e===`xdgConfig`)return[this.getXdgConfigHomeDir()];let n=[];for(let e of t.collectedOutputContext.workspace.projects){let t=e.dirFromWorkspacePath;t!=null&&n.push(this.resolveDirectoryPath(t))}return n}resolveCleanupDeclaredPath(e,t){return n.isAbsolute(t)?n.resolve(t):t===`~`?this.getHomeDir():t.startsWith(`~/`)||t.startsWith(`~\\`)?n.resolve(this.getHomeDir(),t.slice(2)):n.resolve(e,t)}normalizeGlobPattern(e){return e.replaceAll(`\\`,`/`)}buildCleanupTargetsFromScopeConfig(e,t,r){if(e==null)return[];let i=[],a=[`project`,`workspace`,`global`,`xdgConfig`],o=(e,a,o)=>{if(o==null||o.length===0)return;let s=this.resolveCleanupScopeBasePaths(e,r);for(let r of o)for(let o of s){let s=n.isAbsolute(r)?n.resolve(r):this.resolveCleanupDeclaredPath(o,r);i.push({path:a===`glob`?this.normalizeGlobPattern(s):s,kind:a,scope:e,label:`${t}.${e}`})}};for(let t of a){let n=e[t];n!=null&&(o(t,`file`,n.files),o(t,`directory`,n.dirs),o(t,`glob`,n.globs))}return i}buildMarkdownContent(e,t){return Jf(t,e)}buildMarkdownContentWithRaw(e,t,n){return t!=null&&Object.keys(t).length>0?Jf(t,e):n!=null&&n.length>0?Xf(n,e):e}extractGlobalMemoryContent(e){return e.collectedOutputContext.globalMemory?.content}combineGlobalWithContent(e,t,n){let{separator:r=`
96
96
 
97
97
  `,skipIfEmpty:i=!0,position:a=`before`}=n??{};if(i&&(e==null||e.trim().length===0))return t;let o=e??``;return a===`after`?`${t}${r}${o}`:`${o}${r}${t}`}transformCommandName(e,t){let{includeSeriesPrefix:n=!0,seriesSeparator:r=`-`}=t??{};return!n||e.commandPrefix==null?`${e.commandName}.md`:`${e.commandPrefix}${r}${e.commandName}.md`}transformSubAgentName(e,t){let n=t?.includePrefix??this.subAgentsConfig.includePrefix,r=t?.linkSymbol??this.subAgentsConfig.linkSymbol,i=t?.ext??this.subAgentsConfig.ext,a=i.startsWith(`.`)?i:`.${i}`;return n&&e.agentPrefix!=null&&e.agentPrefix.length>0?`${e.agentPrefix}${r}${e.agentName}${a}`:`${e.agentName}${a}`}getCommandSeriesOptions(e){let t=e.pluginOptions?.commandSeriesOptions,n=t?.pluginOverrides?.[this.name],r=n?.includeSeriesPrefix??t?.includeSeriesPrefix,i=n?.seriesSeparator;return r!=null&&i!=null?{includeSeriesPrefix:r,seriesSeparator:i}:r==null?i==null?{}:{seriesSeparator:i}:{includeSeriesPrefix:r}}getTransformOptionsFromContext(e,t){let n=this.getCommandSeriesOptions(e),r=n.includeSeriesPrefix??t?.includeSeriesPrefix,i=n.seriesSeparator??t?.seriesSeparator;return r!=null&&i!=null?{includeSeriesPrefix:r,seriesSeparator:i}:r==null?i==null?{}:{seriesSeparator:i}:{includeSeriesPrefix:r}}shouldSkipDueToPlugin(e,t){let n=e.registeredPluginNames;return n==null?!1:n.includes(t)}getRegistryWriter(e){let t=e.name,n=this.registryWriterCache.get(t);if(n!=null)return n;let r=new e(this.log);return this.registryWriterCache.set(t,r),r}async registerInRegistry(e,t,n){return e.register(t,n.dryRun)}normalizeRuleScope(e){return e.scope??`project`}normalizeSourceScope(e){return e===`workspace`||e===`global`||e===`project`?e:`project`}resolveCommandSourceScope(e){if(e.globalOnly===!0)return`global`;let t=e.yamlFrontMatter?.scope;return this.normalizeSourceScope(t)}resolveSubAgentSourceScope(e){let t=e.yamlFrontMatter?.scope;return this.normalizeSourceScope(t)}resolveSkillSourceScope(e){let t=e.yamlFrontMatter?.scope;return this.normalizeSourceScope(t)}selectSingleScopeItems(e,t,n,r){if(e.length===0)return{items:[]};let[i]=Ig({requestedScopes:r,defaultScopes:t,supportedScopes:t,singleScope:!0,availableScopes:[...new Set(e.map(n))]});return i==null?{items:[]}:{selectedScope:i,items:e.filter(e=>n(e)===i)}}selectRuleScopes(e,t){let n=[...new Set(t.map(e=>this.normalizeSourceScope(this.normalizeRuleScope(e))))];return Ig({requestedScopes:this.getTopicScopeOverride(e,`rules`),defaultScopes:this.rulesConfig.sourceScopes??[`project`,`workspace`,`global`],supportedScopes:this.rulesConfig.sourceScopes??[`project`,`workspace`,`global`],singleScope:!1,availableScopes:n})}selectPromptScopes(e,t=[`project`,`global`],n=t){return Ig({requestedScopes:this.getTopicScopeOverride(e,`prompt`),defaultScopes:n,supportedScopes:t,singleScope:!1})}getTopicScopeOverride(e,t){return e.pluginOptions?.outputScopes?.plugins?.[this.name]?.[t]}buildSkillFrontMatter(e,t){let n=e.yamlFrontMatter,r={name:n.name,description:n.description};return`displayName`in n&&n.displayName!=null&&(r.displayName=n.displayName),`keywords`in n&&n.keywords!=null&&n.keywords.length>0&&(r.keywords=n.keywords),`author`in n&&n.author!=null&&(r.author=n.author),`version`in n&&n.version!=null&&(r.version=n.version),(t?.includeTools??!0)&&`allowTools`in n&&n.allowTools!=null&&n.allowTools.length>0&&(r.allowTools=(t?.toolFormat??`array`)===`string`?n.allowTools.join(`,`):n.allowTools),t?.additionalFields!=null&&Object.assign(r,t.additionalFields),r}buildRuleContent(e){let t=this.rulesConfig.transformFrontMatter?this.rulesConfig.transformFrontMatter(e):{globs:e.globs.join(`, `)};return Jf(t==null||Object.keys(t).length===0?void 0:t,e.content)}buildRuleFileName(e){let t=`${`${this.rulesConfig.prefix??`rule`}${this.rulesConfig.linkSymbol??`-`}`}${e.prefix}${this.rulesConfig.linkSymbol??`-`}${e.ruleName}${this.rulesConfig.ext??`.md`}`;return this.log.trace(`buildRuleFileName`,{plugin:this.name,rulePrefix:e.prefix,ruleName:e.ruleName,prefix:this.rulesConfig.prefix??`rule`,linkSymbol:this.rulesConfig.linkSymbol??`-`,ext:this.rulesConfig.ext??`.md`,result:t}),t}async declareOutputFiles(e){return this.buildDefaultOutputDeclarations(e)}async declareCleanupPaths(e){let t=this.buildCleanupTargetsFromScopeConfig(this.cleanupConfig.delete,`delete`,e),n=this.buildCleanupTargetsFromScopeConfig(this.cleanupConfig.protect,`protect`,e),{excludeScanGlobs:r}=this.cleanupConfig;return t.length===0&&n.length===0&&(r==null||r.length===0)?{}:{...t.length>0&&{delete:t},...n.length>0&&{protect:n},...r!=null&&r.length>0&&{excludeScanGlobs:r}}}async convertContent(e,t){let n=e.source;switch(n.kind){case`projectRootMemory`:case`projectChildMemory`:case`globalMemory`:case`skillReference`:case`ignoreFile`:return n.content;case`command`:return this.buildCommandContent(n.command);case`subAgent`:return this.buildSubAgentContent(n.subAgent);case`skillMain`:return this.buildSkillMainContent(n.skill);case`skillResource`:return n.encoding===`base64`?p.from(n.content,`base64`):n.content;case`rule`:return this.buildRuleContent(n.rule);default:throw Error(`Unsupported declaration source for plugin ${this.name}`)}}async buildDefaultOutputDeclarations(e){let t=[],{workspace:r,globalMemory:i,commands:a,subAgents:o,skills:s,rules:c,aiAgentIgnoreConfigFiles:l}=e.collectedOutputContext,u=this.getTransformOptionsFromContext(e),d=this.getIgnoreOutputPath(),f=this.indexignore==null?void 0:l?.find(e=>e.fileName===this.indexignore),p=this.commandOutputEnabled&&a!=null?this.selectSingleScopeItems(a,this.commandsConfig.sourceScopes,e=>this.resolveCommandSourceScope(e),this.getTopicScopeOverride(e,`commands`)):{items:[]},m=this.subAgentOutputEnabled&&o!=null?this.selectSingleScopeItems(o,this.subAgentsConfig.sourceScopes,e=>this.resolveSubAgentSourceScope(e),this.getTopicScopeOverride(e,`subagents`)):{items:[]},h=this.skillOutputEnabled&&s!=null?this.selectSingleScopeItems(s,this.skillsConfig.sourceScopes,e=>this.resolveSkillSourceScope(e),this.getTopicScopeOverride(e,`skills`)):{items:[]},g=c??[],_=this.ruleOutputEnabled&&g.length>0?new Set(this.selectRuleScopes(e,g)):new Set,v=new Set(this.selectPromptScopes(e)),y={project:[],workspace:[],global:[]};for(let e of g)y[this.normalizeSourceScope(this.normalizeRuleScope(e))].push(e);for(let e of r.projects){let r=e.dirFromWorkspacePath;if(r==null)continue;if(this.outputFileName.length>0&&v.has(`project`)&&(e.rootMemoryPrompt!=null&&t.push({path:this.resolveFullPath(r),scope:`project`,source:{kind:`projectRootMemory`,content:e.rootMemoryPrompt.content}}),e.childMemoryPrompts!=null))for(let n of e.childMemoryPrompts)t.push({path:this.resolveFullPath(n.dir),scope:`project`,source:{kind:`projectChildMemory`,content:n.content}});let i=n.join(r.basePath,r.path,this.globalConfigDir),{projectConfig:a}=e;if(p.selectedScope===`project`&&p.items.length>0){let e=yg(p.items,a,`commands`);for(let r of e){let e=this.transformCommandName(r,u);t.push({path:n.join(i,this.commandsConfig.subDir,e),scope:`project`,source:{kind:`command`,command:r}})}}if(m.selectedScope===`project`&&m.items.length>0){let e=yg(m.items,a,`subAgents`);for(let r of e){let e=this.transformSubAgentName(r);t.push({path:n.join(i,this.subAgentsConfig.subDir,e),scope:`project`,source:{kind:`subAgent`,subAgent:r}})}}if(h.selectedScope===`project`&&h.items.length>0){let e=yg(h.items,a,`skills`);for(let r of e){let e=r.yamlFrontMatter?.name??r.dir.getDirectoryName(),a=n.join(i,this.skillsConfig.subDir,e);if(t.push({path:n.join(a,`SKILL.md`),scope:`project`,source:{kind:`skillMain`,skill:r}}),r.childDocs!=null)for(let e of r.childDocs)t.push({path:n.join(a,e.dir.path.replace(/\.mdx$/,`.md`)),scope:`project`,source:{kind:`skillReference`,content:e.content}});if(r.resources!=null)for(let e of r.resources)t.push({path:n.join(a,e.relativePath),scope:`project`,source:{kind:`skillResource`,content:e.content,encoding:e.encoding}})}}if(_.has(`project`)){let e=Cg(yg(y.project,a,`rules`),a),r=n.join(i,this.rulesConfig.subDir??`rules`);for(let i of e)t.push({path:n.join(r,this.buildRuleFileName(i)),scope:`project`,source:{kind:`rule`,rule:i}})}d!=null&&f!=null&&e.isPromptSourceProject!==!0&&t.push({path:n.join(r.basePath,r.path,d),scope:`project`,source:{kind:`ignoreFile`,content:f.content}})}let b=this.resolvePromptSourceProjectConfig(e),x=t=>t===`global`?this.getGlobalConfigDir():this.getWorkspaceConfigDir(e);if((p.selectedScope===`global`||p.selectedScope===`workspace`)&&p.items.length>0){let e=yg(p.items,b,`commands`),r=x(p.selectedScope);for(let i of e){let e=this.transformCommandName(i,u);t.push({path:n.join(r,this.commandsConfig.subDir,e),scope:p.selectedScope,source:{kind:`command`,command:i}})}}if((m.selectedScope===`global`||m.selectedScope===`workspace`)&&m.items.length>0){let e=yg(m.items,b,`subAgents`),r=x(m.selectedScope);for(let i of e){let e=this.transformSubAgentName(i);t.push({path:n.join(r,this.subAgentsConfig.subDir,e),scope:m.selectedScope,source:{kind:`subAgent`,subAgent:i}})}}if((h.selectedScope===`global`||h.selectedScope===`workspace`)&&h.items.length>0){let e=yg(h.items,b,`skills`),r=x(h.selectedScope);for(let i of e){let e=i.yamlFrontMatter?.name??i.dir.getDirectoryName(),a=n.join(r,this.skillsConfig.subDir,e);if(t.push({path:n.join(a,`SKILL.md`),scope:h.selectedScope,source:{kind:`skillMain`,skill:i}}),i.childDocs!=null)for(let e of i.childDocs)t.push({path:n.join(a,e.dir.path.replace(/\.mdx$/,`.md`)),scope:h.selectedScope,source:{kind:`skillReference`,content:e.content}});if(i.resources!=null)for(let e of i.resources)t.push({path:n.join(a,e.relativePath),scope:h.selectedScope,source:{kind:`skillResource`,content:e.content,encoding:e.encoding}})}}for(let e of[`global`,`workspace`]){if(!_.has(e))continue;let r=x(e),i=Cg(yg(y[e],b,`rules`),b),a=n.join(r,this.rulesConfig.subDir??`rules`);for(let r of i)t.push({path:n.join(a,this.buildRuleFileName(r)),scope:e,source:{kind:`rule`,rule:r}})}return i!=null&&this.outputFileName.length>0&&v.has(`global`)&&t.push({path:n.join(this.getGlobalConfigDir(),this.outputFileName),scope:`global`,source:{kind:`globalMemory`,content:i.content}}),t}async buildCommandContent(e){let t=e.content,n=e.yamlFrontMatter,r=!1;if(e.rawMdxContent!=null&&this.toolPreset!=null){this.log.debug(`recompiling command with tool preset`,{file:e.dir.getAbsolutePath(),toolPreset:this.toolPreset,hasRawContent:!0});let i=new Ag({toolPreset:this.toolPreset}).collect(),a=await cg(e.rawMdxContent,{globalScope:i,extractMetadata:!0,basePath:e.dir.basePath});t=a.content,n=a.metadata.fields,r=!0}let i=this.commandsConfig.transformFrontMatter;if(i==null)throw Error(`commands.transformFrontMatter is required for command output plugin: ${this.name}`);let a=i(e,{isRecompiled:r,...n!=null&&{sourceFrontMatter:n}});return this.buildMarkdownContent(t,a)}buildSubAgentContent(e){let t=this.subAgentsConfig.transformFrontMatter;if(t!=null){let n=t(e,{...e.yamlFrontMatter!=null&&{sourceFrontMatter:e.yamlFrontMatter}});return this.buildMarkdownContent(e.content,n)}return this.buildMarkdownContentWithRaw(e.content,e.yamlFrontMatter,e.rawFrontMatter)}buildSkillMainContent(e){return this.buildMarkdownContentWithRaw(e.content,e.yamlFrontMatter,e.rawFrontMatter)}},m_=class{constructor(e,t,n,r){this.fs=e,this.path=t,this.logger=n,this.globalScope=r}async readDirectoryStructure(e,t,n){let r=[],i=[];if(!this.exists(e))return{prompts:r,errors:i};try{let a=this.fs.readdirSync(e,{withFileTypes:!0});for(let o of a){if(!o.isDirectory())continue;let{name:a}=o,s=this.path.join(e,a),c=this.path.join(t,a);try{let e=await this.readEntry(a,s,c,n,!0);e&&r.push(e)}catch(e){i.push({path:s,error:e,phase:`read`}),this.logger.error(`Failed to read entry: ${a}`,{error:e})}}}catch(t){i.push({path:e,error:t,phase:`scan`}),this.logger.error(`Failed to scan directory: ${e}`,{error:t})}return{prompts:r,errors:i}}async readFlatFiles(e,t,n){let r=[],i=[],a=this.exists(e),o=this.exists(t);if(this.logger.debug(`readFlatFiles: srcDir=${e}, exists=${a}`),this.logger.debug(`readFlatFiles: distDir=${t}, exists=${o}`),!a&&!o)return{prompts:r,errors:i};let s=this.normalizeExtensions(n.localeExtensions.zh),c=new Set,l=async(a,o)=>{if(!c.has(a)){c.add(a);try{let i=await this.readFlatEntry(a,e,t,a,n);i&&r.push(i)}catch(e){i.push({path:o,error:e,phase:`read`}),this.logger.error(`Failed to read file: ${o}`,{error:e})}}},u=async(e,t=``)=>{if(this.exists(e))try{let n=this.fs.readdirSync(e,{withFileTypes:!0});for(let r of n){let n=t?this.path.join(t,r.name):r.name;if(r.isDirectory()){await u(this.path.join(e,r.name),n);continue}let i=this.findMatchingExtension(r.name,s);if(!r.isFile()||i==null)continue;let a=r.name.slice(0,-i.length);await l(t?this.path.join(t,a):a,this.path.join(e,r.name))}}catch(t){i.push({path:e,error:t,phase:`scan`}),this.logger.error(`Failed to scan directory: ${e}`,{error:t})}},d=async(e,t=``)=>{if(this.exists(e))try{let n=this.fs.readdirSync(e,{withFileTypes:!0});for(let r of n){let n=t?this.path.join(t,r.name):r.name;if(r.isDirectory()){await d(this.path.join(e,r.name),n);continue}if(!r.isFile()||!r.name.endsWith(`.mdx`))continue;let i=r.name.slice(0,-4);await l(t?this.path.join(t,i):i,this.path.join(e,r.name))}}catch(t){i.push({path:e,error:t,phase:`scan`}),this.logger.error(`Failed to scan directory: ${e}`,{error:t})}};return a&&await u(e),o&&await d(t),{prompts:r,errors:i}}async readSingleFile(e,t,n){let r=this.path.basename(e);return this.readFlatEntry(r,this.path.dirname(e),this.path.dirname(t),e,n,!0)}async readEntry(e,t,n,r,i=!0){let{localeExtensions:a,entryFileName:o,createPrompt:s,kind:c}=r,l=o??e,u=this.normalizeExtensions(a.zh),d=this.normalizeExtensions(a.en),f=this.resolveLocalizedPath(t,l,u),p=this.resolveLocalizedPath(t,l,d),m=this.path.join(n,`${l}.mdx`),h=await this.readDistContent(m,s,e),g=await this.readLocaleContent(f,`zh`,s,e),_=await this.readLocaleContent(p,`en`,s,e),v=h!=null,y=g!=null,b=_!=null;if(!v&&!y)return this.logger.warn(`Missing both dist and source file for: ${e}`),null;let x=y?{zh:g,...b&&{en:_},default:g,defaultLocale:`zh`}:{zh:h,default:h,defaultLocale:`zh`},S;if(i){let e=v?n:t;S=this.scanChildren(e,l,u)}return{name:e,type:c,src:x,...v&&{dist:h},metadata:{hasDist:v,hasMultipleLocales:b,isDirectoryStructure:i,...S&&S.length>0&&{children:S}},paths:{...(y||!v)&&{zh:f},...b&&{en:p},...v&&{dist:m}}}}async readFlatEntry(e,t,n,r,i,a=!1){let{localeExtensions:o,createPrompt:s,kind:c}=i,l=this.normalizeExtensions(o.zh),u=this.normalizeExtensions(o.en),d=this.resolveLocalizedPath(``,r,l),f=this.resolveLocalizedPath(``,r,u),p=this.path.join(n,`${e}.mdx`),m=a?d:this.path.join(t,d),h=a?f:this.path.join(t,f),g=await this.readDistContent(p,s,e),_=await this.readLocaleContent(m,`zh`,s,e),v=await this.readLocaleContent(h,`en`,s,e),y=g!=null,b=_!=null,x=v!=null;return!y&&!b?(this.logger.warn(`Missing both dist and source file for: ${e}`),null):{name:e,type:c,src:b?{zh:_,...x&&{en:v},default:_,defaultLocale:`zh`}:{zh:g,default:g,defaultLocale:`zh`},...y&&{dist:g},metadata:{hasDist:y,hasMultipleLocales:x,isDirectoryStructure:!1},paths:{...(b||!y)&&{zh:m},...x&&{en:h},...y&&{dist:p}}}}async readLocaleContent(e,t,n,r){if(!this.exists(e))return null;try{let i=this.fs.readFileSync(e,`utf8`),a=this.fs.statSync(e),o=await cg(i,{globalScope:this.globalScope,extractMetadata:!0,basePath:this.path.dirname(e)}),s=Qf(i),c=await n(o.content,t,r,o.metadata.fields),l={content:o.content,lastModified:a.mtime,filePath:e};return i.length>0&&Object.assign(l,{rawMdx:i}),s.yamlFrontMatter!=null&&Object.assign(l,{frontMatter:s.yamlFrontMatter}),c!=null&&Object.assign(l,{prompt:c}),l}catch(t){throw this.logger.error(`Failed to read locale content: ${e}`,{error:t}),t}}async readDistContent(e,t,n){if(!this.exists(e))return null;try{let r=this.fs.readFileSync(e,`utf8`),i=this.fs.statSync(e),a=await cg(r,{globalScope:this.globalScope,extractMetadata:!0,basePath:this.path.dirname(e)}),o=Qf(r),s=await t(a.content,`zh`,n,a.metadata.fields),c={content:a.content,lastModified:i.mtime,prompt:s,filePath:e,rawMdx:r};return o.yamlFrontMatter!=null&&Object.assign(c,{frontMatter:o.yamlFrontMatter}),c}catch(t){return this.logger.warn(`Failed to read dist content: ${e}`,{error:t}),null}}scanChildren(e,t,n){let r=[];if(!this.exists(e))return r;let i=new Set(n.map(e=>`${t}${e}`));try{let t=(e,a)=>{let o=this.fs.readdirSync(e,{withFileTypes:!0});for(let s of o){let o=this.path.join(e,s.name),c=a?this.path.join(a,s.name):s.name;if(s.isDirectory())t(o,c);else{let e=this.findMatchingExtension(s.name,n);if(e==null||i.has(s.name))continue;let t=s.name.slice(0,-e.length),a=this.path.dirname(c),o=a===`.`?t:this.path.join(a,t);r.push(o)}}};t(e,``)}catch(t){this.logger.warn(`Failed to scan children: ${e}`,{error:t})}return r}exists(e){try{return this.fs.existsSync(e)}catch{return!1}}normalizeExtensions(e){return typeof e==`string`?[e]:e}findMatchingExtension(e,t){return t.find(t=>e.endsWith(t))}resolveLocalizedPath(e,t,n){let r=e===``?`${t}${n[0]}`:this.path.join(e,`${t}${n[0]}`);for(let r of n){let n=e===``?`${t}${r}`:this.path.join(e,`${t}${r}`);if(this.exists(n))return n}return r}};function h_(e,t,n,r){return new m_(e,t,n,r)}var g_=class{fs;logger;constructor(e){this.fs=e.fs,this.logger=e.logger}collectMcpServers(e){let t=new Map;for(let n of e)if(n.mcpConfig!=null)for(let[e,r]of Object.entries(n.mcpConfig.mcpServers))t.set(e,r),this.logger.debug(`mcp server collected`,{skill:n.yamlFrontMatter.name,mcpName:e});return t}transformMcpServers(e,t){let n={};for(let[r,i]of e)n[r]=t(i);return n}readExistingConfig(e){try{if(this.fs.existsSync(e)){let t=this.fs.readFileSync(e,`utf8`);return JSON.parse(t)}}catch{this.logger.warn(`failed to read existing mcp config, starting fresh`,{path:e})}return{}}writeCursorMcpConfig(e,t,n){let r=this.readExistingConfig(e);r.mcpServers={...r.mcpServers??{},...t};let i=JSON.stringify(r,null,2);return this.writeConfigFile(e,i,Object.keys(t).length,n)}writeOpencodeMcpConfig(e,t,n,r){let i={...this.readExistingConfig(e),...r,mcp:t},a=JSON.stringify(i,null,2);return this.writeConfigFile(e,a,Object.keys(t).length,n)}writeSkillMcpConfig(e,t,n){return this.writeConfigFile(e,t,1,n)}ensureDirectory(e){this.fs.existsSync(e)||this.fs.mkdirSync(e,{recursive:!0})}writeConfigFile(e,t,r,i){if(i)return this.logger.trace({action:`dryRun`,type:`mcpConfig`,path:e,serverCount:r}),{success:!0,path:e,serverCount:r,skipped:!0};try{return this.ensureDirectory(n.dirname(e)),this.fs.writeFileSync(e,t),this.logger.trace({action:`write`,type:`mcpConfig`,path:e,serverCount:r}),{success:!0,path:e,serverCount:r}}catch(t){let n=t instanceof Error?t.message:String(t);return this.logger.error({action:`write`,type:`mcpConfig`,path:e,error:n}),{success:!1,path:e,serverCount:0,error:t}}}};function __(e){let t={};if(e.command!=null)return t.command=e.command,e.args!=null&&(t.args=e.args),e.env!=null&&(t.env=e.env),t;let n=e,r=n.url??n.serverUrl;if(r==null)return t;t.url=r;let{headers:i}=n;return i!=null&&(t.headers=i),t}function v_(e){let t={};if(e.command!=null){t.type=`local`;let n=[e.command];e.args!=null&&n.push(...e.args),t.command=n,e.env!=null&&(t.environment=e.env)}else{t.type=`remote`;let n=e;n.url==null?n.serverUrl!=null&&(t.url=n.serverUrl):t.url=n.url}return t.enabled=e.disabled!==!0,t}var y_=class extends Error{conflicts;constructor(e){super(D_(e)),this.name=`CleanupProtectionConflictError`,this.conflicts=e}};const b_=[`**/node_modules/**`,`**/.git/**`,`**/.turbo/**`,`**/.pnpm-store/**`,`**/.yarn/**`,`**/.next/**`];function x_(e){return Hp(e).replaceAll(`\\`,`/`)}function S_(e){let{root:t}=n.parse(e);return e===t?e:e.endsWith(n.sep)?e.slice(0,-1):e}function C_(e,t){let r=S_(e),i=S_(t);return r===i?!0:r.startsWith(`${i}${n.sep}`)}function w_(e,t,n){let r=x_(e);return t.glob.sync(r,{onlyFiles:!1,dot:!0,absolute:!0,followSymbolicLinks:!1,ignore:[...n]})}async function T_(e,t){return e.declareCleanupPaths==null?{}:e.declareCleanupPaths({...t,dryRun:!0})}function E_(e,t){let n=new Map,r=[...t.entries()].sort((e,t)=>e[0].length-t[0].length);for(let[e,t]of r){let r=!1;for(let t of n.keys())if(C_(e,t)){r=!0;break}r||n.set(e,t)}let i=[];for(let[t,r]of e){let e=!1;for(let r of n.keys())if(C_(t,r)){e=!0;break}e||i.push(r)}return i.sort((e,t)=>e.localeCompare(t)),{files:i,dirs:[...n.values()].sort((e,t)=>e.localeCompare(t))}}function D_(e){let t=e.map(e=>e.outputPath).join(`, `);return`Cleanup protection conflict: ${e.length} output path(s) are also protected: ${t}`}function O_(e,t){let n=[];for(let[r,i]of e.entries()){let e=new Set(Kp(r));for(let a of t.compiledRules)if(a.comparisonKeys.some(t=>e.has(t)))for(let e of i)n.push({outputPath:r,outputPlugin:e,protectedPath:a.path,protectionMode:a.protectionMode,protectedBy:a.source,reason:a.reason})}return n.sort((e,t)=>{let n=e.outputPath.localeCompare(t.outputPath);return n===0?e.protectedPath.localeCompare(t.protectedPath):n})}function k_(e,t){e.error(`cleanup protection conflict detected`,{count:t.length,conflicts:t.map(e=>({outputPath:e.outputPath,outputPlugin:e.outputPlugin,protectedPath:e.protectedPath,protectionMode:e.protectionMode,protectedBy:e.protectedBy,reason:e.reason}))})}async function A_(e,n){let r=new Set,i=new Set,a=new Map,o=new Set(b_),s=new Map,c=[],l=(e,t)=>{t===`directory`?i.add(Hp(e)):r.add(Hp(e))},u=(e,t,n,r,i=`path`)=>{let o=Hp(e);a.set(`${i}:${t}:${o}`,{path:o,protectionMode:t,reason:n,source:r,matcher:i})},d=e=>e.protectionMode==null?e.kind===`file`?`direct`:`recursive`:e.protectionMode;for(let e of im(n.collectedOutputContext))u(e.path,e.protectionMode,e.reason,e.source);for(let e of n.pluginOptions?.cleanupProtection?.rules??[])u(e.path,e.protectionMode,e.reason??`configured cleanup protection rule`,`configured-cleanup-protection`,e.matcher??`path`);for(let t of e){let e=await t.declareOutputFiles({...n,dryRun:!0});for(let n of e){let e=Hp(n.path);l(e,`file`);let r=s.get(e);r==null?s.set(e,[t.name]):r.includes(t.name)||r.push(t.name)}let r=await T_(t,n);for(let e of r.excludeScanGlobs??[])o.add(x_(e));c.push({plugin:t,cleanup:r})}let f=[...o],p=e=>{for(let r of w_(e.path,n,f))try{t.lstatSync(r).isDirectory()?l(r,`directory`):l(r,`file`)}catch{}},m=(e,t)=>{let r=d(e),i=e.label==null?`plugin cleanup protect declaration`:`plugin cleanup protect declaration (${e.label})`;for(let a of w_(e.path,n,f))u(a,r,i,`plugin-cleanup-protect:${t}`)};for(let{plugin:e,cleanup:t}of c){for(let n of t.protect??[]){if(n.kind===`glob`){m(n,e.name);continue}u(n.path,d(n),n.label==null?`plugin cleanup protect declaration`:`plugin cleanup protect declaration (${n.label})`,`plugin-cleanup-protect:${e.name}`)}for(let e of t.delete??[]){if(e.kind===`glob`){p(e);continue}e.kind===`directory`?l(e.path,`directory`):l(e.path,`file`)}}let h=om({workspaceDir:n.collectedOutputContext.workspace.directory.path,projectRoots:sm(n.collectedOutputContext),rules:[...a.values()],...n.collectedOutputContext.aindexDir==null?{}:{aindexDir:n.collectedOutputContext.aindexDir}}),g=O_(s,h);if(g.length>0)throw new y_(g);let _=um([...r],h),v=um([...i],h),y=E_(new Map(_.safePaths.map(e=>[e,e])),new Map(v.safePaths.map(e=>[e,e])));return{filesToDelete:y.files,dirsToDelete:y.dirs,violations:[..._.violations,...v.violations].sort((e,t)=>e.targetPath.localeCompare(t.targetPath)),conflicts:[],excludedScanGlobs:[...o].sort((e,t)=>e.localeCompare(t))}}function j_(e,t){let r=e.map(e=>n.isAbsolute(e)?e:n.resolve(e)),i=ot(r);for(let e of r)i.errors.some(t=>t.path===e)||t.debug({action:`delete`,type:`file`,path:e});let a=i.errors.map(e=>{let n=e.error instanceof Error?e.error.message:String(e.error);return t.warn(`failed to delete file`,{path:e.path,error:n}),{path:e.path,type:`file`,error:e.error}});return{deleted:i.deleted,errors:a}}function M_(e,t){let r=e.map(e=>n.isAbsolute(e)?e:n.resolve(e)),i=st(r);for(let e of r)i.errors.some(t=>t.path===e)||t.debug({action:`delete`,type:`directory`,path:e});let a=i.errors.map(e=>{let n=e.error instanceof Error?e.error.message:String(e.error);return t.warn(`failed to delete directory`,{path:e.path,error:n}),{path:e.path,type:`directory`,error:e.error}});return{deleted:i.deleted,errors:a}}function N_(e,t){e.debug(`cleanup plan built`,{filesToDelete:t.filesToDelete.length,dirsToDelete:t.dirsToDelete.length,violations:t.violations.length,conflicts:t.conflicts.length,excludedScanGlobs:t.excludedScanGlobs})}async function P_(e,t,n){let r=await u_(e,t);n.debug(`Collected outputs for cleanup`,{projectDirs:r.projectDirs.length,projectFiles:r.projectFiles.length,workspaceDirs:r.workspaceDirs.length,workspaceFiles:r.workspaceFiles.length,globalDirs:r.globalDirs.length,globalFiles:r.globalFiles.length});let i;try{i=await A_(e,t)}catch(e){if(e instanceof y_)return k_(n,e.conflicts),{deletedFiles:0,deletedDirs:0,errors:[],violations:[],conflicts:e.conflicts,message:e.message};throw e}let a={filesToDelete:i.filesToDelete,dirsToDelete:i.dirsToDelete,violations:i.violations,conflicts:i.conflicts,excludedScanGlobs:i.excludedScanGlobs};if(N_(n,a),a.violations.length>0)return fm(n,`cleanup`,a.violations),{deletedFiles:0,deletedDirs:0,errors:[],violations:a.violations,conflicts:[],message:`Protected deletion guard blocked cleanup for ${a.violations.length} path(s)`};let o=j_(a.filesToDelete,n),s=M_(a.dirsToDelete,n);return{deletedFiles:o.deleted,deletedDirs:s.deleted,errors:[...o.errors,...s.errors],violations:[],conflicts:[]}}var F_=class{name=`clean`;async execute(e){let{logger:t,outputPlugins:n,createCleanContext:r}=e;t.info(`running clean pipeline`,{command:`clean`});let i=await P_(n,r(!1),t);return i.violations.length>0||i.conflicts.length>0?{success:!1,filesAffected:0,dirsAffected:0,...i.message==null?{}:{message:i.message}}:(t.info(`clean complete`,{deletedFiles:i.deletedFiles,deletedDirs:i.deletedDirs}),{success:!0,filesAffected:i.deletedFiles,dirsAffected:i.deletedDirs})}},I_=class{name=`dry-run-clean`;async execute(e){let{logger:t,outputPlugins:n,createCleanContext:r}=e;t.info(`running clean pipeline`,{command:`dry-run-clean`,dryRun:!0});let i=r(!0),a=await u_(n,i);t.info(`collected outputs for cleanup`,{dryRun:!0,projectDirs:a.projectDirs.length,projectFiles:a.projectFiles.length,workspaceDirs:a.workspaceDirs.length,workspaceFiles:a.workspaceFiles.length,globalDirs:a.globalDirs.length,globalFiles:a.globalFiles.length});let{filesToDelete:o,dirsToDelete:s,violations:c,excludedScanGlobs:l}=await A_(n,i);return c.length>0?(fm(t,`dry-run-cleanup`,c),{success:!1,filesAffected:0,dirsAffected:0,message:`Protected deletion guard blocked cleanup for ${c.length} path(s)`}):(this.logDryRunFiles(o,t),this.logDryRunDirectories(s,t),t.info(`clean complete`,{dryRun:!0,filesAffected:o.length,dirsAffected:s.length,violations:0,excludedScanGlobs:l}),{success:!0,filesAffected:o.length,dirsAffected:s.length,message:`Dry-run complete, no files were deleted`})}logDryRunFiles(e,t){for(let r of e){let e=n.isAbsolute(r)?r:n.resolve(r);t.info(`would delete file`,{path:e,dryRun:!0})}}logDryRunDirectories(e,t){let r=[...e].sort((e,t)=>t.length-e.length);for(let e of r){let r=n.isAbsolute(e)?e:n.resolve(e);t.info(`would delete directory`,{path:r,dryRun:!0})}}},L_=class{name=`dry-run-output`;async execute(e){let{logger:t,outputPlugins:n,createWriteContext:r}=e;t.info(`started`,{command:`dry-run-output`,dryRun:!0});let i=await l_(n,r(!0)),a=0,o=0;for(let[e,n]of i)a+=n.files.length,o+=n.dirs.length,t.info(`plugin result`,{plugin:e,files:n.files.length,dirs:n.dirs.length,dryRun:!0});return t.info(`complete`,{command:`dry-run-output`,totalFiles:a,totalDirs:o,dryRun:!0}),{success:!0,filesAffected:a,dirsAffected:o,message:`Dry-run complete, no files were written`}}},R_=class{name=`execute`;async execute(e){let{logger:t,outputPlugins:n,createCleanContext:r,createWriteContext:i}=e;t.info(`started`,{command:`execute`});let a=await P_(n,r(!1),t);if(a.violations.length>0||a.conflicts.length>0)return{success:!1,filesAffected:0,dirsAffected:0,...a.message==null?{}:{message:a.message}};t.info(`cleanup complete`,{deletedFiles:a.deletedFiles,deletedDirs:a.deletedDirs});let o=await l_(n,i(!1)),s=0,c=0,l=[];for(let e of o.values()){s+=e.files.length,c+=e.dirs.length;for(let t of e.files)t.success||l.push(t.error?.message??`Failed to write ${t.path}`)}return l.length>0?{success:!1,filesAffected:s,dirsAffected:c,message:l.join(`
98
- `)}:(t.info(`complete`,{command:`execute`,pluginCount:o.size}),{success:!0,filesAffected:s,dirsAffected:c})}},z_=class{name;inner;constructor(e){this.inner=e,this.name=`json:${e.name}`}async execute(e){let t=await this.inner.execute(e),n=B_(t);return o.stdout.write(`${JSON.stringify(n)}\n`),t}};function B_(e){return{success:e.success,filesAffected:e.filesAffected,dirsAffected:e.dirsAffected,...e.message!=null&&{message:e.message},pluginResults:[],errors:e.success||e.message==null?[]:[e.message]}}var V_=class{name=`plugins`;async execute(e){let{logger:t,outputPlugins:n,userConfigOptions:r}=e,i=r.plugins,a=[];for(let e of i)a.push({name:e.name,kind:e.type===fp.Input?`Input`:`Output`,description:e.name,dependencies:[...e.dependsOn??[]]});let s=new Set(a.map(e=>e.name));for(let e of n)s.has(e.name)||a.push({name:e.name,kind:`Output`,description:e.name,dependencies:[...e.dependsOn??[]]});return o.stdout.write(`${JSON.stringify(a)}\n`),t.info(`plugins listed`,{count:a.length}),{success:!0,filesAffected:0,dirsAffected:0,message:`Listed ${a.length} plugin(s)`}}};function H_(e){let t=e.slice(2),n=`execute`,r=!1,i=!1;for(let e of t)e===`--json`||e===`-j`?r=!0:e===`--dry-run`||e===`-n`?i=!0:e.startsWith(`-`)||(n=e);return{subcommand:n,json:r,dryRun:i}}function U_(e,t){switch(e){case`execute`:return new R_;case`dry-run`:return new L_;case`clean`:return t?new I_:new F_;case`plugins`:return new V_;default:return new R_}}async function W_(){let{subcommand:e,json:r,dryRun:i}=H_(o.argv);r&&Om(`silent`);let{default:a}=await import(`./plugin.config-BXOtQDvz.mjs`),s=await a,c=U_(e,i);r&&(new Set([`plugins`]).has(c.name)||(c=new z_(c)));let{context:l,outputPlugins:u,userConfigOptions:d}=s,f=km(`PluginRuntime`),p=e=>({logger:f,fs:t,path:n,glob:nt.default,collectedOutputContext:l,pluginOptions:d,dryRun:e}),m=e=>({logger:f,fs:t,path:n,glob:nt.default,collectedOutputContext:l,dryRun:e,registeredPluginNames:[...u].map(e=>e.name)}),h={logger:f,outputPlugins:[...u],collectedOutputContext:l,userConfigOptions:d,createCleanContext:p,createWriteContext:m};(await c.execute(h)).success||o.exit(1)}function G_(e){o.stdout.write(`${JSON.stringify({success:!1,filesAffected:0,dirsAffected:0,message:e,pluginResults:[],errors:[e]})}\n`)}W_().catch(e=>{let t=e instanceof Error?e.message:String(e),{json:n}=H_(o.argv);n&&(G_(t),o.exit(1)),km(`plugin-runtime`,`error`).error(`unhandled error`,{error:t}),o.exit(1)});export{hp as $,Hm as A,km as B,yg as C,cg as D,wg as E,Mm as F,um as G,Np as H,Vm as I,vp as J,bp as K,Lm as L,Bm as M,Nm as N,Km as O,Pm as P,gp as Q,Im as R,Cg as S,Eg as T,rm as U,Om as V,om as W,Ap as X,Mp as Y,mp as Z,$g as _,I_ as a,$f as at,jg as b,__ as c,w as ct,p_ as d,fp as et,f_ as f,e_ as g,t_ as h,L_ as i,Qf as it,zm as j,Um as k,v_ as l,c_ as m,z_ as n,Jf as nt,F_ as o,it as ot,d_ as p,yp as q,R_ as r,Zf as rt,g_ as s,tt as st,V_ as t,pp as tt,h_ as u,Xg as v,Tg as w,Mg as x,Ag as y,Rm as z};
98
+ `)}:(t.info(`complete`,{command:`execute`,pluginCount:o.size}),{success:!0,filesAffected:s,dirsAffected:c})}},z_=class{name;inner;constructor(e){this.inner=e,this.name=`json:${e.name}`}async execute(e){let t=await this.inner.execute(e),n=B_(t);return o.stdout.write(`${JSON.stringify(n)}\n`),t}};function B_(e){return{success:e.success,filesAffected:e.filesAffected,dirsAffected:e.dirsAffected,...e.message!=null&&{message:e.message},pluginResults:[],errors:e.success||e.message==null?[]:[e.message]}}var V_=class{name=`plugins`;async execute(e){let{logger:t,outputPlugins:n,userConfigOptions:r}=e,i=r.plugins,a=[];for(let e of i)a.push({name:e.name,kind:e.type===fp.Input?`Input`:`Output`,description:e.name,dependencies:[...e.dependsOn??[]]});let s=new Set(a.map(e=>e.name));for(let e of n)s.has(e.name)||a.push({name:e.name,kind:`Output`,description:e.name,dependencies:[...e.dependsOn??[]]});return o.stdout.write(`${JSON.stringify(a)}\n`),t.info(`plugins listed`,{count:a.length}),{success:!0,filesAffected:0,dirsAffected:0,message:`Listed ${a.length} plugin(s)`}}};function H_(e){let t=e.slice(2),n=`execute`,r=!1,i=!1;for(let e of t)e===`--json`||e===`-j`?r=!0:e===`--dry-run`||e===`-n`?i=!0:e.startsWith(`-`)||(n=e);return{subcommand:n,json:r,dryRun:i}}function U_(e,t){switch(e){case`execute`:return new R_;case`dry-run`:return new L_;case`clean`:return t?new I_:new F_;case`plugins`:return new V_;default:return new R_}}async function W_(){let{subcommand:e,json:r,dryRun:i}=H_(o.argv);r&&Om(`silent`);let{default:a}=await import(`./plugin.config-C0SNNaU8.mjs`),s=await a,c=U_(e,i);r&&(new Set([`plugins`]).has(c.name)||(c=new z_(c)));let{context:l,outputPlugins:u,userConfigOptions:d}=s,f=km(`PluginRuntime`),p=e=>({logger:f,fs:t,path:n,glob:nt.default,collectedOutputContext:l,pluginOptions:d,dryRun:e}),m=e=>({logger:f,fs:t,path:n,glob:nt.default,collectedOutputContext:l,dryRun:e,registeredPluginNames:[...u].map(e=>e.name)}),h={logger:f,outputPlugins:[...u],collectedOutputContext:l,userConfigOptions:d,createCleanContext:p,createWriteContext:m};(await c.execute(h)).success||o.exit(1)}function G_(e){o.stdout.write(`${JSON.stringify({success:!1,filesAffected:0,dirsAffected:0,message:e,pluginResults:[],errors:[e]})}\n`)}W_().catch(e=>{let t=e instanceof Error?e.message:String(e),{json:n}=H_(o.argv);n&&(G_(t),o.exit(1)),km(`plugin-runtime`,`error`).error(`unhandled error`,{error:t}),o.exit(1)});export{hp as $,Hm as A,km as B,yg as C,cg as D,wg as E,Mm as F,um as G,Np as H,Vm as I,vp as J,bp as K,Lm as L,Bm as M,Nm as N,Km as O,Pm as P,gp as Q,Im as R,Cg as S,Eg as T,rm as U,Om as V,om as W,Ap as X,Mp as Y,mp as Z,$g as _,I_ as a,$f as at,jg as b,__ as c,w as ct,p_ as d,fp as et,f_ as f,e_ as g,t_ as h,L_ as i,Qf as it,zm as j,Um as k,v_ as l,c_ as m,z_ as n,Jf as nt,F_ as o,it as ot,d_ as p,yp as q,R_ as r,Zf as rt,g_ as s,tt as st,V_ as t,pp as tt,h_ as u,Xg as v,Tg as w,Mg as x,Ag as y,Rm as z};
@@ -96,7 +96,7 @@ Defaulting to 2020, but this will stop working in the future.`)),t.ecmaVersion=1
96
96
 
97
97
  `,skipIfEmpty:i=!0,position:a=`before`}=n??{};if(i&&(e==null||e.trim().length===0))return t;let o=e??``;return a===`after`?`${t}${r}${o}`:`${o}${r}${t}`}transformCommandName(e,t){let{includeSeriesPrefix:n=!0,seriesSeparator:r=`-`}=t??{};return!n||e.commandPrefix==null?`${e.commandName}.md`:`${e.commandPrefix}${r}${e.commandName}.md`}transformSubAgentName(e,t){let n=t?.includePrefix??this.subAgentsConfig.includePrefix,r=t?.linkSymbol??this.subAgentsConfig.linkSymbol,i=t?.ext??this.subAgentsConfig.ext,a=i.startsWith(`.`)?i:`.${i}`;return n&&e.agentPrefix!=null&&e.agentPrefix.length>0?`${e.agentPrefix}${r}${e.agentName}${a}`:`${e.agentName}${a}`}getCommandSeriesOptions(e){let t=e.pluginOptions?.commandSeriesOptions,n=t?.pluginOverrides?.[this.name],r=n?.includeSeriesPrefix??t?.includeSeriesPrefix,i=n?.seriesSeparator;return r!=null&&i!=null?{includeSeriesPrefix:r,seriesSeparator:i}:r==null?i==null?{}:{seriesSeparator:i}:{includeSeriesPrefix:r}}getTransformOptionsFromContext(e,t){let n=this.getCommandSeriesOptions(e),r=n.includeSeriesPrefix??t?.includeSeriesPrefix,i=n.seriesSeparator??t?.seriesSeparator;return r!=null&&i!=null?{includeSeriesPrefix:r,seriesSeparator:i}:r==null?i==null?{}:{seriesSeparator:i}:{includeSeriesPrefix:r}}shouldSkipDueToPlugin(e,t){let n=e.registeredPluginNames;return n==null?!1:n.includes(t)}getRegistryWriter(e){let t=e.name,n=this.registryWriterCache.get(t);if(n!=null)return n;let r=new e(this.log);return this.registryWriterCache.set(t,r),r}async registerInRegistry(e,t,n){return e.register(t,n.dryRun)}normalizeRuleScope(e){return e.scope??`project`}normalizeSourceScope(e){return e===`workspace`||e===`global`||e===`project`?e:`project`}resolveCommandSourceScope(e){if(e.globalOnly===!0)return`global`;let t=e.yamlFrontMatter?.scope;return this.normalizeSourceScope(t)}resolveSubAgentSourceScope(e){let t=e.yamlFrontMatter?.scope;return this.normalizeSourceScope(t)}resolveSkillSourceScope(e){let t=e.yamlFrontMatter?.scope;return this.normalizeSourceScope(t)}selectSingleScopeItems(e,t,n,r){if(e.length===0)return{items:[]};let[i]=Ug({requestedScopes:r,defaultScopes:t,supportedScopes:t,singleScope:!0,availableScopes:[...new Set(e.map(n))]});return i==null?{items:[]}:{selectedScope:i,items:e.filter(e=>n(e)===i)}}selectRuleScopes(e,t){let n=[...new Set(t.map(e=>this.normalizeSourceScope(this.normalizeRuleScope(e))))];return Ug({requestedScopes:this.getTopicScopeOverride(e,`rules`),defaultScopes:this.rulesConfig.sourceScopes??[`project`,`workspace`,`global`],supportedScopes:this.rulesConfig.sourceScopes??[`project`,`workspace`,`global`],singleScope:!1,availableScopes:n})}selectPromptScopes(e,t=[`project`,`global`],n=t){return Ug({requestedScopes:this.getTopicScopeOverride(e,`prompt`),defaultScopes:n,supportedScopes:t,singleScope:!1})}getTopicScopeOverride(e,t){return e.pluginOptions?.outputScopes?.plugins?.[this.name]?.[t]}buildSkillFrontMatter(e,t){let n=e.yamlFrontMatter,r={name:n.name,description:n.description};return`displayName`in n&&n.displayName!=null&&(r.displayName=n.displayName),`keywords`in n&&n.keywords!=null&&n.keywords.length>0&&(r.keywords=n.keywords),`author`in n&&n.author!=null&&(r.author=n.author),`version`in n&&n.version!=null&&(r.version=n.version),(t?.includeTools??!0)&&`allowTools`in n&&n.allowTools!=null&&n.allowTools.length>0&&(r.allowTools=(t?.toolFormat??`array`)===`string`?n.allowTools.join(`,`):n.allowTools),t?.additionalFields!=null&&Object.assign(r,t.additionalFields),r}buildRuleContent(e){let t=this.rulesConfig.transformFrontMatter?this.rulesConfig.transformFrontMatter(e):{globs:e.globs.join(`, `)};return ep(t==null||Object.keys(t).length===0?void 0:t,e.content)}buildRuleFileName(e){let t=`${`${this.rulesConfig.prefix??`rule`}${this.rulesConfig.linkSymbol??`-`}`}${e.prefix}${this.rulesConfig.linkSymbol??`-`}${e.ruleName}${this.rulesConfig.ext??`.md`}`;return this.log.trace(`buildRuleFileName`,{plugin:this.name,rulePrefix:e.prefix,ruleName:e.ruleName,prefix:this.rulesConfig.prefix??`rule`,linkSymbol:this.rulesConfig.linkSymbol??`-`,ext:this.rulesConfig.ext??`.md`,result:t}),t}async declareOutputFiles(e){return this.buildDefaultOutputDeclarations(e)}async declareCleanupPaths(e){let t=this.buildCleanupTargetsFromScopeConfig(this.cleanupConfig.delete,`delete`,e),n=this.buildCleanupTargetsFromScopeConfig(this.cleanupConfig.protect,`protect`,e),{excludeScanGlobs:r}=this.cleanupConfig;return t.length===0&&n.length===0&&(r==null||r.length===0)?{}:{...t.length>0&&{delete:t},...n.length>0&&{protect:n},...r!=null&&r.length>0&&{excludeScanGlobs:r}}}async convertContent(e,t){let n=e.source;switch(n.kind){case`projectRootMemory`:case`projectChildMemory`:case`globalMemory`:case`skillReference`:case`ignoreFile`:return n.content;case`command`:return this.buildCommandContent(n.command);case`subAgent`:return this.buildSubAgentContent(n.subAgent);case`skillMain`:return this.buildSkillMainContent(n.skill);case`skillResource`:return n.encoding===`base64`?p.from(n.content,`base64`):n.content;case`rule`:return this.buildRuleContent(n.rule);default:throw Error(`Unsupported declaration source for plugin ${this.name}`)}}async buildDefaultOutputDeclarations(e){let t=[],{workspace:n,globalMemory:r,commands:a,subAgents:o,skills:s,rules:c,aiAgentIgnoreConfigFiles:l}=e.collectedOutputContext,u=this.getTransformOptionsFromContext(e),d=this.getIgnoreOutputPath(),f=this.indexignore==null?void 0:l?.find(e=>e.fileName===this.indexignore),p=this.commandOutputEnabled&&a!=null?this.selectSingleScopeItems(a,this.commandsConfig.sourceScopes,e=>this.resolveCommandSourceScope(e),this.getTopicScopeOverride(e,`commands`)):{items:[]},m=this.subAgentOutputEnabled&&o!=null?this.selectSingleScopeItems(o,this.subAgentsConfig.sourceScopes,e=>this.resolveSubAgentSourceScope(e),this.getTopicScopeOverride(e,`subagents`)):{items:[]},h=this.skillOutputEnabled&&s!=null?this.selectSingleScopeItems(s,this.skillsConfig.sourceScopes,e=>this.resolveSkillSourceScope(e),this.getTopicScopeOverride(e,`skills`)):{items:[]},g=c??[],_=this.ruleOutputEnabled&&g.length>0?new Set(this.selectRuleScopes(e,g)):new Set,v=new Set(this.selectPromptScopes(e)),y={project:[],workspace:[],global:[]};for(let e of g)y[this.normalizeSourceScope(this.normalizeRuleScope(e))].push(e);for(let e of n.projects){let n=e.dirFromWorkspacePath;if(n==null)continue;if(this.outputFileName.length>0&&v.has(`project`)&&(e.rootMemoryPrompt!=null&&t.push({path:this.resolveFullPath(n),scope:`project`,source:{kind:`projectRootMemory`,content:e.rootMemoryPrompt.content}}),e.childMemoryPrompts!=null))for(let n of e.childMemoryPrompts)t.push({path:this.resolveFullPath(n.dir),scope:`project`,source:{kind:`projectChildMemory`,content:n.content}});let r=i.join(n.basePath,n.path,this.globalConfigDir),{projectConfig:a}=e;if(p.selectedScope===`project`&&p.items.length>0){let e=$(p.items,a,`commands`);for(let n of e){let e=this.transformCommandName(n,u);t.push({path:i.join(r,this.commandsConfig.subDir,e),scope:`project`,source:{kind:`command`,command:n}})}}if(m.selectedScope===`project`&&m.items.length>0){let e=$(m.items,a,`subAgents`);for(let n of e){let e=this.transformSubAgentName(n);t.push({path:i.join(r,this.subAgentsConfig.subDir,e),scope:`project`,source:{kind:`subAgent`,subAgent:n}})}}if(h.selectedScope===`project`&&h.items.length>0){let e=$(h.items,a,`skills`);for(let n of e){let e=n.yamlFrontMatter?.name??n.dir.getDirectoryName(),a=i.join(r,this.skillsConfig.subDir,e);if(t.push({path:i.join(a,`SKILL.md`),scope:`project`,source:{kind:`skillMain`,skill:n}}),n.childDocs!=null)for(let e of n.childDocs)t.push({path:i.join(a,e.dir.path.replace(/\.mdx$/,`.md`)),scope:`project`,source:{kind:`skillReference`,content:e.content}});if(n.resources!=null)for(let e of n.resources)t.push({path:i.join(a,e.relativePath),scope:`project`,source:{kind:`skillResource`,content:e.content,encoding:e.encoding}})}}if(_.has(`project`)){let e=Ag($(y.project,a,`rules`),a),n=i.join(r,this.rulesConfig.subDir??`rules`);for(let r of e)t.push({path:i.join(n,this.buildRuleFileName(r)),scope:`project`,source:{kind:`rule`,rule:r}})}d!=null&&f!=null&&e.isPromptSourceProject!==!0&&t.push({path:i.join(n.basePath,n.path,d),scope:`project`,source:{kind:`ignoreFile`,content:f.content}})}let b=this.resolvePromptSourceProjectConfig(e),x=t=>t===`global`?this.getGlobalConfigDir():this.getWorkspaceConfigDir(e);if((p.selectedScope===`global`||p.selectedScope===`workspace`)&&p.items.length>0){let e=$(p.items,b,`commands`),n=x(p.selectedScope);for(let r of e){let e=this.transformCommandName(r,u);t.push({path:i.join(n,this.commandsConfig.subDir,e),scope:p.selectedScope,source:{kind:`command`,command:r}})}}if((m.selectedScope===`global`||m.selectedScope===`workspace`)&&m.items.length>0){let e=$(m.items,b,`subAgents`),n=x(m.selectedScope);for(let r of e){let e=this.transformSubAgentName(r);t.push({path:i.join(n,this.subAgentsConfig.subDir,e),scope:m.selectedScope,source:{kind:`subAgent`,subAgent:r}})}}if((h.selectedScope===`global`||h.selectedScope===`workspace`)&&h.items.length>0){let e=$(h.items,b,`skills`),n=x(h.selectedScope);for(let r of e){let e=r.yamlFrontMatter?.name??r.dir.getDirectoryName(),a=i.join(n,this.skillsConfig.subDir,e);if(t.push({path:i.join(a,`SKILL.md`),scope:h.selectedScope,source:{kind:`skillMain`,skill:r}}),r.childDocs!=null)for(let e of r.childDocs)t.push({path:i.join(a,e.dir.path.replace(/\.mdx$/,`.md`)),scope:h.selectedScope,source:{kind:`skillReference`,content:e.content}});if(r.resources!=null)for(let e of r.resources)t.push({path:i.join(a,e.relativePath),scope:h.selectedScope,source:{kind:`skillResource`,content:e.content,encoding:e.encoding}})}}for(let e of[`global`,`workspace`]){if(!_.has(e))continue;let n=x(e),r=Ag($(y[e],b,`rules`),b),a=i.join(n,this.rulesConfig.subDir??`rules`);for(let n of r)t.push({path:i.join(a,this.buildRuleFileName(n)),scope:e,source:{kind:`rule`,rule:n}})}return r!=null&&this.outputFileName.length>0&&v.has(`global`)&&t.push({path:i.join(this.getGlobalConfigDir(),this.outputFileName),scope:`global`,source:{kind:`globalMemory`,content:r.content}}),t}async buildCommandContent(e){let t=e.content,n=e.yamlFrontMatter,r=!1;if(e.rawMdxContent!=null&&this.toolPreset!=null){this.log.debug(`recompiling command with tool preset`,{file:e.dir.getAbsolutePath(),toolPreset:this.toolPreset,hasRawContent:!0});let i=new Lg({toolPreset:this.toolPreset}).collect(),a=await gg(e.rawMdxContent,{globalScope:i,extractMetadata:!0,basePath:e.dir.basePath});t=a.content,n=a.metadata.fields,r=!0}let i=this.commandsConfig.transformFrontMatter;if(i==null)throw Error(`commands.transformFrontMatter is required for command output plugin: ${this.name}`);let a=i(e,{isRecompiled:r,...n!=null&&{sourceFrontMatter:n}});return this.buildMarkdownContent(t,a)}buildSubAgentContent(e){let t=this.subAgentsConfig.transformFrontMatter;if(t!=null){let n=t(e,{...e.yamlFrontMatter!=null&&{sourceFrontMatter:e.yamlFrontMatter}});return this.buildMarkdownContent(e.content,n)}return this.buildMarkdownContentWithRaw(e.content,e.yamlFrontMatter,e.rawFrontMatter)}buildSkillMainContent(e){return this.buildMarkdownContentWithRaw(e.content,e.yamlFrontMatter,e.rawFrontMatter)}},x_=class{constructor(e,t,n,r){this.fs=e,this.path=t,this.logger=n,this.globalScope=r}async readDirectoryStructure(e,t,n){let r=[],i=[];if(!this.exists(e))return{prompts:r,errors:i};try{let a=this.fs.readdirSync(e,{withFileTypes:!0});for(let o of a){if(!o.isDirectory())continue;let{name:a}=o,s=this.path.join(e,a),c=this.path.join(t,a);try{let e=await this.readEntry(a,s,c,n,!0);e&&r.push(e)}catch(e){i.push({path:s,error:e,phase:`read`}),this.logger.error(`Failed to read entry: ${a}`,{error:e})}}}catch(t){i.push({path:e,error:t,phase:`scan`}),this.logger.error(`Failed to scan directory: ${e}`,{error:t})}return{prompts:r,errors:i}}async readFlatFiles(e,t,n){let r=[],i=[],a=this.exists(e),o=this.exists(t);if(this.logger.debug(`readFlatFiles: srcDir=${e}, exists=${a}`),this.logger.debug(`readFlatFiles: distDir=${t}, exists=${o}`),!a&&!o)return{prompts:r,errors:i};let s=this.normalizeExtensions(n.localeExtensions.zh),c=new Set,l=async(a,o)=>{if(!c.has(a)){c.add(a);try{let i=await this.readFlatEntry(a,e,t,a,n);i&&r.push(i)}catch(e){i.push({path:o,error:e,phase:`read`}),this.logger.error(`Failed to read file: ${o}`,{error:e})}}},u=async(e,t=``)=>{if(this.exists(e))try{let n=this.fs.readdirSync(e,{withFileTypes:!0});for(let r of n){let n=t?this.path.join(t,r.name):r.name;if(r.isDirectory()){await u(this.path.join(e,r.name),n);continue}let i=this.findMatchingExtension(r.name,s);if(!r.isFile()||i==null)continue;let a=r.name.slice(0,-i.length);await l(t?this.path.join(t,a):a,this.path.join(e,r.name))}}catch(t){i.push({path:e,error:t,phase:`scan`}),this.logger.error(`Failed to scan directory: ${e}`,{error:t})}},d=async(e,t=``)=>{if(this.exists(e))try{let n=this.fs.readdirSync(e,{withFileTypes:!0});for(let r of n){let n=t?this.path.join(t,r.name):r.name;if(r.isDirectory()){await d(this.path.join(e,r.name),n);continue}if(!r.isFile()||!r.name.endsWith(`.mdx`))continue;let i=r.name.slice(0,-4);await l(t?this.path.join(t,i):i,this.path.join(e,r.name))}}catch(t){i.push({path:e,error:t,phase:`scan`}),this.logger.error(`Failed to scan directory: ${e}`,{error:t})}};return a&&await u(e),o&&await d(t),{prompts:r,errors:i}}async readSingleFile(e,t,n){let r=this.path.basename(e);return this.readFlatEntry(r,this.path.dirname(e),this.path.dirname(t),e,n,!0)}async readEntry(e,t,n,r,i=!0){let{localeExtensions:a,entryFileName:o,createPrompt:s,kind:c}=r,l=o??e,u=this.normalizeExtensions(a.zh),d=this.normalizeExtensions(a.en),f=this.resolveLocalizedPath(t,l,u),p=this.resolveLocalizedPath(t,l,d),m=this.path.join(n,`${l}.mdx`),h=await this.readDistContent(m,s,e),g=await this.readLocaleContent(f,`zh`,s,e),_=await this.readLocaleContent(p,`en`,s,e),v=h!=null,y=g!=null,b=_!=null;if(!v&&!y)return this.logger.warn(`Missing both dist and source file for: ${e}`),null;let x=y?{zh:g,...b&&{en:_},default:g,defaultLocale:`zh`}:{zh:h,default:h,defaultLocale:`zh`},S;if(i){let e=v?n:t;S=this.scanChildren(e,l,u)}return{name:e,type:c,src:x,...v&&{dist:h},metadata:{hasDist:v,hasMultipleLocales:b,isDirectoryStructure:i,...S&&S.length>0&&{children:S}},paths:{...(y||!v)&&{zh:f},...b&&{en:p},...v&&{dist:m}}}}async readFlatEntry(e,t,n,r,i,a=!1){let{localeExtensions:o,createPrompt:s,kind:c}=i,l=this.normalizeExtensions(o.zh),u=this.normalizeExtensions(o.en),d=this.resolveLocalizedPath(``,r,l),f=this.resolveLocalizedPath(``,r,u),p=this.path.join(n,`${e}.mdx`),m=a?d:this.path.join(t,d),h=a?f:this.path.join(t,f),g=await this.readDistContent(p,s,e),_=await this.readLocaleContent(m,`zh`,s,e),v=await this.readLocaleContent(h,`en`,s,e),y=g!=null,b=_!=null,x=v!=null;return!y&&!b?(this.logger.warn(`Missing both dist and source file for: ${e}`),null):{name:e,type:c,src:b?{zh:_,...x&&{en:v},default:_,defaultLocale:`zh`}:{zh:g,default:g,defaultLocale:`zh`},...y&&{dist:g},metadata:{hasDist:y,hasMultipleLocales:x,isDirectoryStructure:!1},paths:{...(b||!y)&&{zh:m},...x&&{en:h},...y&&{dist:p}}}}async readLocaleContent(e,t,n,r){if(!this.exists(e))return null;try{let i=this.fs.readFileSync(e,`utf8`),a=this.fs.statSync(e),o=await gg(i,{globalScope:this.globalScope,extractMetadata:!0,basePath:this.path.dirname(e)}),s=ip(i),c=await n(o.content,t,r,o.metadata.fields),l={content:o.content,lastModified:a.mtime,filePath:e};return i.length>0&&Object.assign(l,{rawMdx:i}),s.yamlFrontMatter!=null&&Object.assign(l,{frontMatter:s.yamlFrontMatter}),c!=null&&Object.assign(l,{prompt:c}),l}catch(t){throw this.logger.error(`Failed to read locale content: ${e}`,{error:t}),t}}async readDistContent(e,t,n){if(!this.exists(e))return null;try{let r=this.fs.readFileSync(e,`utf8`),i=this.fs.statSync(e),a=await gg(r,{globalScope:this.globalScope,extractMetadata:!0,basePath:this.path.dirname(e)}),o=ip(r),s=await t(a.content,`zh`,n,a.metadata.fields),c={content:a.content,lastModified:i.mtime,prompt:s,filePath:e,rawMdx:r};return o.yamlFrontMatter!=null&&Object.assign(c,{frontMatter:o.yamlFrontMatter}),c}catch(t){return this.logger.warn(`Failed to read dist content: ${e}`,{error:t}),null}}scanChildren(e,t,n){let r=[];if(!this.exists(e))return r;let i=new Set(n.map(e=>`${t}${e}`));try{let t=(e,a)=>{let o=this.fs.readdirSync(e,{withFileTypes:!0});for(let s of o){let o=this.path.join(e,s.name),c=a?this.path.join(a,s.name):s.name;if(s.isDirectory())t(o,c);else{let e=this.findMatchingExtension(s.name,n);if(e==null||i.has(s.name))continue;let t=s.name.slice(0,-e.length),a=this.path.dirname(c),o=a===`.`?t:this.path.join(a,t);r.push(o)}}};t(e,``)}catch(t){this.logger.warn(`Failed to scan children: ${e}`,{error:t})}return r}exists(e){try{return this.fs.existsSync(e)}catch{return!1}}normalizeExtensions(e){return typeof e==`string`?[e]:e}findMatchingExtension(e,t){return t.find(t=>e.endsWith(t))}resolveLocalizedPath(e,t,n){let r=e===``?`${t}${n[0]}`:this.path.join(e,`${t}${n[0]}`);for(let r of n){let n=e===``?`${t}${r}`:this.path.join(e,`${t}${r}`);if(this.exists(n))return n}return r}};function S_(e,t,n,r){return new x_(e,t,n,r)}var C_=class{fs;logger;constructor(e){this.fs=e.fs,this.logger=e.logger}collectMcpServers(e){let t=new Map;for(let n of e)if(n.mcpConfig!=null)for(let[e,r]of Object.entries(n.mcpConfig.mcpServers))t.set(e,r),this.logger.debug(`mcp server collected`,{skill:n.yamlFrontMatter.name,mcpName:e});return t}transformMcpServers(e,t){let n={};for(let[r,i]of e)n[r]=t(i);return n}readExistingConfig(e){try{if(this.fs.existsSync(e)){let t=this.fs.readFileSync(e,`utf8`);return JSON.parse(t)}}catch{this.logger.warn(`failed to read existing mcp config, starting fresh`,{path:e})}return{}}writeCursorMcpConfig(e,t,n){let r=this.readExistingConfig(e);r.mcpServers={...r.mcpServers??{},...t};let i=JSON.stringify(r,null,2);return this.writeConfigFile(e,i,Object.keys(t).length,n)}writeOpencodeMcpConfig(e,t,n,r){let i={...this.readExistingConfig(e),...r,mcp:t},a=JSON.stringify(i,null,2);return this.writeConfigFile(e,a,Object.keys(t).length,n)}writeSkillMcpConfig(e,t,n){return this.writeConfigFile(e,t,1,n)}ensureDirectory(e){this.fs.existsSync(e)||this.fs.mkdirSync(e,{recursive:!0})}writeConfigFile(e,t,n,r){if(r)return this.logger.trace({action:`dryRun`,type:`mcpConfig`,path:e,serverCount:n}),{success:!0,path:e,serverCount:n,skipped:!0};try{return this.ensureDirectory(i.dirname(e)),this.fs.writeFileSync(e,t),this.logger.trace({action:`write`,type:`mcpConfig`,path:e,serverCount:n}),{success:!0,path:e,serverCount:n}}catch(t){let n=t instanceof Error?t.message:String(t);return this.logger.error({action:`write`,type:`mcpConfig`,path:e,error:n}),{success:!1,path:e,serverCount:0,error:t}}}};function w_(e){let t={};if(e.command!=null)return t.command=e.command,e.args!=null&&(t.args=e.args),e.env!=null&&(t.env=e.env),t;let n=e,r=n.url??n.serverUrl;if(r==null)return t;t.url=r;let{headers:i}=n;return i!=null&&(t.headers=i),t}function T_(e){let t={};if(e.command!=null){t.type=`local`;let n=[e.command];e.args!=null&&n.push(...e.args),t.command=n,e.env!=null&&(t.environment=e.env)}else{t.type=`remote`;let n=e;n.url==null?n.serverUrl!=null&&(t.url=n.serverUrl):t.url=n.url}return t.enabled=e.disabled!==!0,t}var E_=class extends Error{conflicts;constructor(e){super(P_(e)),this.name=`CleanupProtectionConflictError`,this.conflicts=e}};const D_=[`**/node_modules/**`,`**/.git/**`,`**/.turbo/**`,`**/.pnpm-store/**`,`**/.yarn/**`,`**/.next/**`];function O_(e){return Jp(e).replaceAll(`\\`,`/`)}function k_(e){let{root:t}=i.parse(e);return e===t?e:e.endsWith(i.sep)?e.slice(0,-1):e}function A_(e,t){let n=k_(e),r=k_(t);return n===r?!0:n.startsWith(`${r}${i.sep}`)}function j_(e,t,n){let r=O_(e);return t.glob.sync(r,{onlyFiles:!1,dot:!0,absolute:!0,followSymbolicLinks:!1,ignore:[...n]})}async function M_(e,t){return e.declareCleanupPaths==null?{}:e.declareCleanupPaths({...t,dryRun:!0})}function N_(e,t){let n=new Map,r=[...t.entries()].sort((e,t)=>e[0].length-t[0].length);for(let[e,t]of r){let r=!1;for(let t of n.keys())if(A_(e,t)){r=!0;break}r||n.set(e,t)}let i=[];for(let[t,r]of e){let e=!1;for(let r of n.keys())if(A_(t,r)){e=!0;break}e||i.push(r)}return i.sort((e,t)=>e.localeCompare(t)),{files:i,dirs:[...n.values()].sort((e,t)=>e.localeCompare(t))}}function P_(e){let t=e.map(e=>e.outputPath).join(`, `);return`Cleanup protection conflict: ${e.length} output path(s) are also protected: ${t}`}function F_(e,t){let n=[];for(let[r,i]of e.entries()){let e=new Set(Qp(r));for(let a of t.compiledRules)if(a.comparisonKeys.some(t=>e.has(t)))for(let e of i)n.push({outputPath:r,outputPlugin:e,protectedPath:a.path,protectionMode:a.protectionMode,protectedBy:a.source,reason:a.reason})}return n.sort((e,t)=>{let n=e.outputPath.localeCompare(t.outputPath);return n===0?e.protectedPath.localeCompare(t.protectedPath):n})}function I_(e,t){e.error(`cleanup protection conflict detected`,{count:t.length,conflicts:t.map(e=>({outputPath:e.outputPath,outputPlugin:e.outputPlugin,protectedPath:e.protectedPath,protectionMode:e.protectionMode,protectedBy:e.protectedBy,reason:e.reason}))})}async function L_(e,t){let n=new Set,i=new Set,a=new Map,o=new Set(D_),s=new Map,c=[],l=(e,t)=>{t===`directory`?i.add(Jp(e)):n.add(Jp(e))},u=(e,t,n,r,i=`path`)=>{let o=Jp(e);a.set(`${i}:${t}:${o}`,{path:o,protectionMode:t,reason:n,source:r,matcher:i})},d=e=>e.protectionMode==null?e.kind===`file`?`direct`:`recursive`:e.protectionMode;for(let e of dm(t.collectedOutputContext))u(e.path,e.protectionMode,e.reason,e.source);for(let e of t.pluginOptions?.cleanupProtection?.rules??[])u(e.path,e.protectionMode,e.reason??`configured cleanup protection rule`,`configured-cleanup-protection`,e.matcher??`path`);for(let n of e){let e=await n.declareOutputFiles({...t,dryRun:!0});for(let t of e){let e=Jp(t.path);l(e,`file`);let r=s.get(e);r==null?s.set(e,[n.name]):r.includes(n.name)||r.push(n.name)}let r=await M_(n,t);for(let e of r.excludeScanGlobs??[])o.add(O_(e));c.push({plugin:n,cleanup:r})}let f=[...o],p=e=>{for(let n of j_(e.path,t,f))try{r.lstatSync(n).isDirectory()?l(n,`directory`):l(n,`file`)}catch{}},m=(e,n)=>{let r=d(e),i=e.label==null?`plugin cleanup protect declaration`:`plugin cleanup protect declaration (${e.label})`;for(let a of j_(e.path,t,f))u(a,r,i,`plugin-cleanup-protect:${n}`)};for(let{plugin:e,cleanup:t}of c){for(let n of t.protect??[]){if(n.kind===`glob`){m(n,e.name);continue}u(n.path,d(n),n.label==null?`plugin cleanup protect declaration`:`plugin cleanup protect declaration (${n.label})`,`plugin-cleanup-protect:${e.name}`)}for(let e of t.delete??[]){if(e.kind===`glob`){p(e);continue}e.kind===`directory`?l(e.path,`directory`):l(e.path,`file`)}}let h=pm({workspaceDir:t.collectedOutputContext.workspace.directory.path,projectRoots:mm(t.collectedOutputContext),rules:[...a.values()],...t.collectedOutputContext.aindexDir==null?{}:{aindexDir:t.collectedOutputContext.aindexDir}}),g=F_(s,h);if(g.length>0)throw new E_(g);let _=_m([...n],h),v=_m([...i],h),y=N_(new Map(_.safePaths.map(e=>[e,e])),new Map(v.safePaths.map(e=>[e,e])));return{filesToDelete:y.files,dirsToDelete:y.dirs,violations:[..._.violations,...v.violations].sort((e,t)=>e.targetPath.localeCompare(t.targetPath)),conflicts:[],excludedScanGlobs:[...o].sort((e,t)=>e.localeCompare(t))}}function R_(e,t){let n=e.map(e=>i.isAbsolute(e)?e:i.resolve(e)),r=dt(n);for(let e of n)r.errors.some(t=>t.path===e)||t.debug({action:`delete`,type:`file`,path:e});let a=r.errors.map(e=>{let n=e.error instanceof Error?e.error.message:String(e.error);return t.warn(`failed to delete file`,{path:e.path,error:n}),{path:e.path,type:`file`,error:e.error}});return{deleted:r.deleted,errors:a}}function z_(e,t){let n=e.map(e=>i.isAbsolute(e)?e:i.resolve(e)),r=ft(n);for(let e of n)r.errors.some(t=>t.path===e)||t.debug({action:`delete`,type:`directory`,path:e});let a=r.errors.map(e=>{let n=e.error instanceof Error?e.error.message:String(e.error);return t.warn(`failed to delete directory`,{path:e.path,error:n}),{path:e.path,type:`directory`,error:e.error}});return{deleted:r.deleted,errors:a}}function B_(e,t){e.debug(`cleanup plan built`,{filesToDelete:t.filesToDelete.length,dirsToDelete:t.dirsToDelete.length,violations:t.violations.length,conflicts:t.conflicts.length,excludedScanGlobs:t.excludedScanGlobs})}async function V_(e,t,n){let r=await __(e,t);n.debug(`Collected outputs for cleanup`,{projectDirs:r.projectDirs.length,projectFiles:r.projectFiles.length,workspaceDirs:r.workspaceDirs.length,workspaceFiles:r.workspaceFiles.length,globalDirs:r.globalDirs.length,globalFiles:r.globalFiles.length});let i;try{i=await L_(e,t)}catch(e){if(e instanceof E_)return I_(n,e.conflicts),{deletedFiles:0,deletedDirs:0,errors:[],violations:[],conflicts:e.conflicts,message:e.message};throw e}let a={filesToDelete:i.filesToDelete,dirsToDelete:i.dirsToDelete,violations:i.violations,conflicts:i.conflicts,excludedScanGlobs:i.excludedScanGlobs};if(B_(n,a),a.violations.length>0)return ym(n,`cleanup`,a.violations),{deletedFiles:0,deletedDirs:0,errors:[],violations:a.violations,conflicts:[],message:`Protected deletion guard blocked cleanup for ${a.violations.length} path(s)`};let o=R_(a.filesToDelete,n),s=z_(a.dirsToDelete,n);return{deletedFiles:o.deleted,deletedDirs:s.deleted,errors:[...o.errors,...s.errors],violations:[],conflicts:[]}}var H_=class{name=`clean`;async execute(e){let{logger:t,outputPlugins:n,createCleanContext:r}=e;t.info(`running clean pipeline`,{command:`clean`});let i=await V_(n,r(!1),t);return i.violations.length>0||i.conflicts.length>0?{success:!1,filesAffected:0,dirsAffected:0,...i.message==null?{}:{message:i.message}}:(t.info(`clean complete`,{deletedFiles:i.deletedFiles,deletedDirs:i.deletedDirs}),{success:!0,filesAffected:i.deletedFiles,dirsAffected:i.deletedDirs})}},U_=class{name=`dry-run-clean`;async execute(e){let{logger:t,outputPlugins:n,createCleanContext:r}=e;t.info(`running clean pipeline`,{command:`dry-run-clean`,dryRun:!0});let i=r(!0),a=await __(n,i);t.info(`collected outputs for cleanup`,{dryRun:!0,projectDirs:a.projectDirs.length,projectFiles:a.projectFiles.length,workspaceDirs:a.workspaceDirs.length,workspaceFiles:a.workspaceFiles.length,globalDirs:a.globalDirs.length,globalFiles:a.globalFiles.length});let{filesToDelete:o,dirsToDelete:s,violations:c,excludedScanGlobs:l}=await L_(n,i);return c.length>0?(ym(t,`dry-run-cleanup`,c),{success:!1,filesAffected:0,dirsAffected:0,message:`Protected deletion guard blocked cleanup for ${c.length} path(s)`}):(this.logDryRunFiles(o,t),this.logDryRunDirectories(s,t),t.info(`clean complete`,{dryRun:!0,filesAffected:o.length,dirsAffected:s.length,violations:0,excludedScanGlobs:l}),{success:!0,filesAffected:o.length,dirsAffected:s.length,message:`Dry-run complete, no files were deleted`})}logDryRunFiles(e,t){for(let n of e){let e=i.isAbsolute(n)?n:i.resolve(n);t.info(`would delete file`,{path:e,dryRun:!0})}}logDryRunDirectories(e,t){let n=[...e].sort((e,t)=>t.length-e.length);for(let e of n){let n=i.isAbsolute(e)?e:i.resolve(e);t.info(`would delete directory`,{path:n,dryRun:!0})}}},W_=class{canHandle(e){return e.subcommand===`clean`}createCommand(e){return e.dryRun?new U_:new H_}};const G_=`.tnmsc.json`,K_=`.aindex`;function q_(){return i.join(s.homedir(),K_,G_)}var J_=class{configFileName;searchCwd;searchGlobal;customSearchPaths;logger;constructor(e={}){this.configFileName=e.configFileName??G_,this.searchCwd=e.searchCwd??!0,this.searchGlobal=e.searchGlobal??!0,this.customSearchPaths=e.searchPaths??[],this.logger=Im(`ConfigLoader`)}getSearchPaths(e=n.cwd()){let t=[];for(let e of this.customSearchPaths)t.push(this.resolveTilde(e));return this.searchCwd&&t.push(i.join(e,this.configFileName)),this.searchGlobal&&t.push(i.join(s.homedir(),K_,this.configFileName)),t}loadFromFile(e){let t=this.resolveTilde(e);try{if(!r.existsSync(t))return{config:{},source:null,found:!1};let e=r.readFileSync(t,`utf8`),n=this.parseConfig(e,t);return this.logger.debug(`loaded`,{source:t}),{config:n,source:t,found:!0}}catch(e){return this.logger.warn(`load failed`,{path:t,error:e}),{config:{},source:null,found:!1}}}load(e=n.cwd()){let t=this.getSearchPaths(e),r=[];for(let e of t){let t=this.loadFromFile(e);t.found&&r.push(t)}return{config:this.mergeConfigs(r.map(e=>e.config)),sources:r.map(e=>e.source).filter(e=>e!==null),found:r.length>0}}parseConfig(e,t){let n;try{n=JSON.parse(e)}catch(e){throw e instanceof SyntaxError?Error(`Invalid JSON in ${t}: ${e.message}`):e}let r=r_.safeParse(n);if(r.success)return r.data;let i=r.error.issues.map(e=>`${e.path.join(`.`)}: ${e.message}`);throw Error(`Config validation failed in ${t}:\n${i.join(`
98
98
  `)}`)}mergeConfigs(e){if(e.length===0)return{};let t=e[0];return e.length===1&&t!=null?t:[...e].reverse().reduce((e,t)=>{let n=this.mergeAindex(e.aindex,t.aindex),r=this.mergeOutputScopeOptions(e.outputScopes,t.outputScopes),i=this.mergeCleanupProtectionOptions(e.cleanupProtection,t.cleanupProtection);return{...e,...t,...n==null?{}:{aindex:n},...r==null?{}:{outputScopes:r},...i==null?{}:{cleanupProtection:i}}},{})}mergeAindex(e,t){if(!(e==null&&t==null))return e==null?t:t==null?e:{dir:t.dir??e.dir,skills:{...e.skills,...t.skills},commands:{...e.commands,...t.commands},subAgents:{...e.subAgents,...t.subAgents},rules:{...e.rules,...t.rules},globalPrompt:{...e.globalPrompt,...t.globalPrompt},workspacePrompt:{...e.workspacePrompt,...t.workspacePrompt},app:{...e.app,...t.app},ext:{...e.ext,...t.ext},arch:{...e.arch,...t.arch}}}mergeOutputScopeTopics(e,t){if(!(e==null&&t==null))return e==null?t:t==null?e:{...e,...t}}mergeOutputScopeOptions(e,t){if(e==null&&t==null)return;if(e==null)return t;if(t==null)return e;let n={};for(let[t,r]of Object.entries(e.plugins??{}))r!=null&&(n[t]={...r});for(let[e,r]of Object.entries(t.plugins??{})){let t=this.mergeOutputScopeTopics(n[e],r);t!=null&&(n[e]=t)}return Object.keys(n).length===0?{}:{plugins:n}}mergeCleanupProtectionOptions(e,t){if(!(e==null&&t==null))return e==null?t:t==null?e:{rules:[...e.rules??[],...t.rules??[]]}}resolveTilde(e){return e.startsWith(`~`)?i.join(s.homedir(),e.slice(1)):e}};let Y_=null;function X_(e){return(e||!Y_)&&(Y_=new J_(e)),Y_}function Z_(e){return X_().load(e)}function Q_(e){try{return r.lstatSync(e).isSymbolicLink()}catch{return!1}}function $_(e){try{return r.readlinkSync(e)}catch{return null}}function ev(e,t){let n=gm(e,pm());if(n!=null)throw ym(t,`config-link-replacement`,[n]),new zp(`config-link-replacement`,[n])}function tv(e,t,n){if(r.existsSync(t)){if(r.existsSync(e)||Q_(e))if(Q_(e)){let a=$_(e);if(a!==null&&i.resolve(i.dirname(e),a)===i.resolve(t))return;ev(e,n),r.rmSync(e,{force:!0})}else r.readFileSync(e,`utf8`)!==r.readFileSync(t,`utf8`)&&(r.copyFileSync(e,t),n.debug(`synced local config back to global`,{src:e,dest:t})),ev(e,n),r.rmSync(e,{force:!0});try{r.symlinkSync(t,e,`file`),n.debug(`linked config`,{link:e,target:t})}catch{try{r.copyFileSync(t,e),n.warn(`symlink unavailable, copied config (auto-sync disabled)`,{dest:e})}catch(t){n.warn(`failed to link or copy config`,{path:e,error:t instanceof Error?t.message:String(t)})}}}}function nv(){let e=Im(`ConfigLoader`),t=q_();if(!r.existsSync(t)){let n=`Global config not found at ${t}. Please create it manually.`;return e.error(n),{valid:!1,exists:!1,errors:[n],shouldExit:!0}}let n;try{n=r.readFileSync(t,`utf8`)}catch(n){let r=n instanceof Error?n.message:String(n);return e.error(`failed to read global config`,{path:t,error:r}),{valid:!1,exists:!0,errors:[`Failed to read config: ${r}`],shouldExit:!0}}let i;try{i=JSON.parse(n)}catch(n){let r=n instanceof Error?n.message:String(n);return e.error(`invalid JSON in global config`,{path:t,error:r}),{valid:!1,exists:!0,errors:[`Invalid JSON: ${r}`],shouldExit:!0}}if(typeof i!=`object`||!i||Array.isArray(i))return e.error(`global config must be a JSON object`,{path:t}),{valid:!1,exists:!0,errors:[`Config must be a JSON object`],shouldExit:!0};let a=r_.safeParse(i);if(!a.success){let n=a.error.issues.map(e=>`${e.path.join(`.`)}: ${e.message}`);for(let r of n)e.error(`config validation error`,{path:t,error:r});return{valid:!1,exists:!0,errors:n,shouldExit:!0}}return{valid:!0,exists:!0,errors:[],shouldExit:!1}}const rv=[`workspaceDir`,`aindex.skills.src`,`aindex.skills.dist`,`aindex.commands.src`,`aindex.commands.dist`,`aindex.subAgents.src`,`aindex.subAgents.dist`,`aindex.rules.src`,`aindex.rules.dist`,`aindex.globalPrompt.src`,`aindex.globalPrompt.dist`,`aindex.workspacePrompt.src`,`aindex.workspacePrompt.dist`,`aindex.app.src`,`aindex.app.dist`,`aindex.ext.src`,`aindex.ext.dist`,`aindex.arch.src`,`aindex.arch.dist`,`logLevel`];function iv(e){return rv.includes(e)}function av(e){return[`trace`,`debug`,`info`,`warn`,`error`].includes(e)}function ov(){return i.join(s.homedir(),K_,G_)}function sv(){let e=ov();if(!r.existsSync(e))return{};try{let t=r.readFileSync(e,`utf8`);return JSON.parse(t)}catch{return{}}}function cv(e){let t=ov(),n=i.dirname(t);r.existsSync(n)||r.mkdirSync(n,{recursive:!0}),r.writeFileSync(t,`${JSON.stringify(e,null,2)}\n`,`utf8`)}function lv(e,t,n){let r=t.split(`.`),i=e;for(let e=0;e<r.length-1;e++){let t=r[e],n=i[t];(typeof n!=`object`||!n||Array.isArray(n))&&(i[t]={}),i=i[t]}i[r.at(-1)]=n}function uv(e,t){let n=t.split(`.`),r=e;for(let e of n){if(typeof r!=`object`||!r||Array.isArray(r))return;r=r[e]}return r}var dv=class{name=`config`;constructor(e){this.options=e}async execute(e){let{logger:t}=e;if(this.options.length===0)return t.error(`No configuration key-value pairs provided`),t.info(`Usage: tnmsc config key=value`),t.info(`Valid keys: ${rv.join(`, `)}`),{success:!1,filesAffected:0,dirsAffected:0,message:`No options provided`};let n=sv(),r=[],i=[];for(let[e,a]of this.options){if(!iv(e)){r.push(`Invalid key: ${e} (valid keys: ${rv.join(`, `)})`);continue}if(e===`logLevel`&&!av(a)){r.push(`Invalid logLevel value: ${a} (must be: trace, debug, info, warn, or error)`);continue}let o=uv(n,e);lv(n,e,a),o!==a&&i.push(`${e}=${a}`),t.info(`configuration updated`,{key:e,value:a})}if(i.length>0&&(cv(n),t.info(`global config written`,{path:ov()})),r.length>0)for(let e of r)t.error(e);let a=r.length===0,o=a?`Configuration updated: ${i.join(`, `)}`:`Partial update: ${i.join(`, `)}. Errors: ${r.join(`, `)}`;return{success:a,filesAffected:i.length>0?1:0,dirsAffected:0,message:o}}},fv=class{name=`config-show`;async execute(e){let{logger:t}=e,r=new J_,i=r.load(),a=i.sources.map(e=>{let t=r.loadFromFile(e);return{path:e,layer:this.inferLayer(e),config:t.config}}),o={merged:i.config,sources:a};return n.stdout.write(`${JSON.stringify(o)}\n`),t.info(`config shown`,{sources:i.sources.length}),{success:!0,filesAffected:0,dirsAffected:0,message:`Configuration displayed (${a.length} source(s))`}}inferLayer(e){let t=n.cwd();return e.startsWith(t)?`cwd`:`global`}},pv=class{canHandle(e){return e.subcommand===`config`}createCommand(e){if(e.showFlag)return new fv;let t=[];for(let n of e.positional){let e=n.indexOf(`=`);e>0&&t.push([n.slice(0,e),n.slice(e+1)])}return new dv([...e.setOption,...t])}},mv=class{name=`dry-run-output`;async execute(e){let{logger:t,outputPlugins:n,createWriteContext:r}=e;t.info(`started`,{command:`dry-run-output`,dryRun:!0});let i=await g_(n,r(!0)),a=0,o=0;for(let[e,n]of i)a+=n.files.length,o+=n.dirs.length,t.info(`plugin result`,{plugin:e,files:n.files.length,dirs:n.dirs.length,dryRun:!0});return t.info(`complete`,{command:`dry-run-output`,totalFiles:a,totalDirs:o,dryRun:!0}),{success:!0,filesAffected:a,dirsAffected:o,message:`Dry-run complete, no files were written`}}},hv=class{canHandle(e){return e.subcommand===`dry-run`}createCommand(e){return new mv}},gv=class{name=`execute`;async execute(e){let{logger:t,outputPlugins:n,createCleanContext:r,createWriteContext:i}=e;t.info(`started`,{command:`execute`});let a=await V_(n,r(!1),t);if(a.violations.length>0||a.conflicts.length>0)return{success:!1,filesAffected:0,dirsAffected:0,...a.message==null?{}:{message:a.message}};t.info(`cleanup complete`,{deletedFiles:a.deletedFiles,deletedDirs:a.deletedDirs});let o=await g_(n,i(!1)),s=0,c=0,l=[];for(let e of o.values()){s+=e.files.length,c+=e.dirs.length;for(let t of e.files)t.success||l.push(t.error?.message??`Failed to write ${t.path}`)}return l.length>0?{success:!1,filesAffected:s,dirsAffected:c,message:l.join(`
99
- `)}:(t.info(`complete`,{command:`execute`,pluginCount:o.size}),{success:!0,filesAffected:s,dirsAffected:c})}},_v=class{canHandle(e){return!0}createCommand(e){return new gv}};function vv(){return`2026.10314.10606`}var yv=class{name=`version`;async execute(e){return e.logger.error(`tnmsc v${vv()}`),{success:!0,filesAffected:0,dirsAffected:0,message:`Version displayed`}}};const bv=`tnmsc`,xv=`
99
+ `)}:(t.info(`complete`,{command:`execute`,pluginCount:o.size}),{success:!0,filesAffected:s,dirsAffected:c})}},_v=class{canHandle(e){return!0}createCommand(e){return new gv}};function vv(){return`2026.10314.10724`}var yv=class{name=`version`;async execute(e){return e.logger.error(`tnmsc v${vv()}`),{success:!0,filesAffected:0,dirsAffected:0,message:`Version displayed`}}};const bv=`tnmsc`,xv=`
100
100
  ${bv} v${vv()} - Memory Sync CLI
101
101
 
102
102
  Synchronize AI memory and configuration files across projects.
@@ -96,7 +96,7 @@ Defaulting to 2020, but this will stop working in the future.`)),t.ecmaVersion=1
96
96
 
97
97
  `,skipIfEmpty:i=!0,position:a=`before`}=n??{};if(i&&(e==null||e.trim().length===0))return t;let o=e??``;return a===`after`?`${t}${r}${o}`:`${o}${r}${t}`}transformCommandName(e,t){let{includeSeriesPrefix:n=!0,seriesSeparator:r=`-`}=t??{};return!n||e.commandPrefix==null?`${e.commandName}.md`:`${e.commandPrefix}${r}${e.commandName}.md`}transformSubAgentName(e,t){let n=t?.includePrefix??this.subAgentsConfig.includePrefix,r=t?.linkSymbol??this.subAgentsConfig.linkSymbol,i=t?.ext??this.subAgentsConfig.ext,a=i.startsWith(`.`)?i:`.${i}`;return n&&e.agentPrefix!=null&&e.agentPrefix.length>0?`${e.agentPrefix}${r}${e.agentName}${a}`:`${e.agentName}${a}`}getCommandSeriesOptions(e){let t=e.pluginOptions?.commandSeriesOptions,n=t?.pluginOverrides?.[this.name],r=n?.includeSeriesPrefix??t?.includeSeriesPrefix,i=n?.seriesSeparator;return r!=null&&i!=null?{includeSeriesPrefix:r,seriesSeparator:i}:r==null?i==null?{}:{seriesSeparator:i}:{includeSeriesPrefix:r}}getTransformOptionsFromContext(e,t){let n=this.getCommandSeriesOptions(e),r=n.includeSeriesPrefix??t?.includeSeriesPrefix,i=n.seriesSeparator??t?.seriesSeparator;return r!=null&&i!=null?{includeSeriesPrefix:r,seriesSeparator:i}:r==null?i==null?{}:{seriesSeparator:i}:{includeSeriesPrefix:r}}shouldSkipDueToPlugin(e,t){let n=e.registeredPluginNames;return n==null?!1:n.includes(t)}getRegistryWriter(e){let t=e.name,n=this.registryWriterCache.get(t);if(n!=null)return n;let r=new e(this.log);return this.registryWriterCache.set(t,r),r}async registerInRegistry(e,t,n){return e.register(t,n.dryRun)}normalizeRuleScope(e){return e.scope??`project`}normalizeSourceScope(e){return e===`workspace`||e===`global`||e===`project`?e:`project`}resolveCommandSourceScope(e){if(e.globalOnly===!0)return`global`;let t=e.yamlFrontMatter?.scope;return this.normalizeSourceScope(t)}resolveSubAgentSourceScope(e){let t=e.yamlFrontMatter?.scope;return this.normalizeSourceScope(t)}resolveSkillSourceScope(e){let t=e.yamlFrontMatter?.scope;return this.normalizeSourceScope(t)}selectSingleScopeItems(e,t,n,r){if(e.length===0)return{items:[]};let[i]=Lg({requestedScopes:r,defaultScopes:t,supportedScopes:t,singleScope:!0,availableScopes:[...new Set(e.map(n))]});return i==null?{items:[]}:{selectedScope:i,items:e.filter(e=>n(e)===i)}}selectRuleScopes(e,t){let n=[...new Set(t.map(e=>this.normalizeSourceScope(this.normalizeRuleScope(e))))];return Lg({requestedScopes:this.getTopicScopeOverride(e,`rules`),defaultScopes:this.rulesConfig.sourceScopes??[`project`,`workspace`,`global`],supportedScopes:this.rulesConfig.sourceScopes??[`project`,`workspace`,`global`],singleScope:!1,availableScopes:n})}selectPromptScopes(e,t=[`project`,`global`],n=t){return Lg({requestedScopes:this.getTopicScopeOverride(e,`prompt`),defaultScopes:n,supportedScopes:t,singleScope:!1})}getTopicScopeOverride(e,t){return e.pluginOptions?.outputScopes?.plugins?.[this.name]?.[t]}buildSkillFrontMatter(e,t){let n=e.yamlFrontMatter,r={name:n.name,description:n.description};return`displayName`in n&&n.displayName!=null&&(r.displayName=n.displayName),`keywords`in n&&n.keywords!=null&&n.keywords.length>0&&(r.keywords=n.keywords),`author`in n&&n.author!=null&&(r.author=n.author),`version`in n&&n.version!=null&&(r.version=n.version),(t?.includeTools??!0)&&`allowTools`in n&&n.allowTools!=null&&n.allowTools.length>0&&(r.allowTools=(t?.toolFormat??`array`)===`string`?n.allowTools.join(`,`):n.allowTools),t?.additionalFields!=null&&Object.assign(r,t.additionalFields),r}buildRuleContent(e){let t=this.rulesConfig.transformFrontMatter?this.rulesConfig.transformFrontMatter(e):{globs:e.globs.join(`, `)};return Jf(t==null||Object.keys(t).length===0?void 0:t,e.content)}buildRuleFileName(e){let t=`${`${this.rulesConfig.prefix??`rule`}${this.rulesConfig.linkSymbol??`-`}`}${e.prefix}${this.rulesConfig.linkSymbol??`-`}${e.ruleName}${this.rulesConfig.ext??`.md`}`;return this.log.trace(`buildRuleFileName`,{plugin:this.name,rulePrefix:e.prefix,ruleName:e.ruleName,prefix:this.rulesConfig.prefix??`rule`,linkSymbol:this.rulesConfig.linkSymbol??`-`,ext:this.rulesConfig.ext??`.md`,result:t}),t}async declareOutputFiles(e){return this.buildDefaultOutputDeclarations(e)}async declareCleanupPaths(e){let t=this.buildCleanupTargetsFromScopeConfig(this.cleanupConfig.delete,`delete`,e),n=this.buildCleanupTargetsFromScopeConfig(this.cleanupConfig.protect,`protect`,e),{excludeScanGlobs:r}=this.cleanupConfig;return t.length===0&&n.length===0&&(r==null||r.length===0)?{}:{...t.length>0&&{delete:t},...n.length>0&&{protect:n},...r!=null&&r.length>0&&{excludeScanGlobs:r}}}async convertContent(e,t){let n=e.source;switch(n.kind){case`projectRootMemory`:case`projectChildMemory`:case`globalMemory`:case`skillReference`:case`ignoreFile`:return n.content;case`command`:return this.buildCommandContent(n.command);case`subAgent`:return this.buildSubAgentContent(n.subAgent);case`skillMain`:return this.buildSkillMainContent(n.skill);case`skillResource`:return n.encoding===`base64`?v.Buffer.from(n.content,`base64`):n.content;case`rule`:return this.buildRuleContent(n.rule);default:throw Error(`Unsupported declaration source for plugin ${this.name}`)}}async buildDefaultOutputDeclarations(e){let t=[],{workspace:n,globalMemory:r,commands:i,subAgents:a,skills:o,rules:s,aiAgentIgnoreConfigFiles:c}=e.collectedOutputContext,l=this.getTransformOptionsFromContext(e),u=this.getIgnoreOutputPath(),d=this.indexignore==null?void 0:c?.find(e=>e.fileName===this.indexignore),p=this.commandOutputEnabled&&i!=null?this.selectSingleScopeItems(i,this.commandsConfig.sourceScopes,e=>this.resolveCommandSourceScope(e),this.getTopicScopeOverride(e,`commands`)):{items:[]},m=this.subAgentOutputEnabled&&a!=null?this.selectSingleScopeItems(a,this.subAgentsConfig.sourceScopes,e=>this.resolveSubAgentSourceScope(e),this.getTopicScopeOverride(e,`subagents`)):{items:[]},h=this.skillOutputEnabled&&o!=null?this.selectSingleScopeItems(o,this.skillsConfig.sourceScopes,e=>this.resolveSkillSourceScope(e),this.getTopicScopeOverride(e,`skills`)):{items:[]},g=s??[],_=this.ruleOutputEnabled&&g.length>0?new Set(this.selectRuleScopes(e,g)):new Set,v=new Set(this.selectPromptScopes(e)),y={project:[],workspace:[],global:[]};for(let e of g)y[this.normalizeSourceScope(this.normalizeRuleScope(e))].push(e);for(let e of n.projects){let n=e.dirFromWorkspacePath;if(n==null)continue;if(this.outputFileName.length>0&&v.has(`project`)&&(e.rootMemoryPrompt!=null&&t.push({path:this.resolveFullPath(n),scope:`project`,source:{kind:`projectRootMemory`,content:e.rootMemoryPrompt.content}}),e.childMemoryPrompts!=null))for(let n of e.childMemoryPrompts)t.push({path:this.resolveFullPath(n.dir),scope:`project`,source:{kind:`projectChildMemory`,content:n.content}});let r=f.join(n.basePath,n.path,this.globalConfigDir),{projectConfig:i}=e;if(p.selectedScope===`project`&&p.items.length>0){let e=$(p.items,i,`commands`);for(let n of e){let e=this.transformCommandName(n,l);t.push({path:f.join(r,this.commandsConfig.subDir,e),scope:`project`,source:{kind:`command`,command:n}})}}if(m.selectedScope===`project`&&m.items.length>0){let e=$(m.items,i,`subAgents`);for(let n of e){let e=this.transformSubAgentName(n);t.push({path:f.join(r,this.subAgentsConfig.subDir,e),scope:`project`,source:{kind:`subAgent`,subAgent:n}})}}if(h.selectedScope===`project`&&h.items.length>0){let e=$(h.items,i,`skills`);for(let n of e){let e=n.yamlFrontMatter?.name??n.dir.getDirectoryName(),i=f.join(r,this.skillsConfig.subDir,e);if(t.push({path:f.join(i,`SKILL.md`),scope:`project`,source:{kind:`skillMain`,skill:n}}),n.childDocs!=null)for(let e of n.childDocs)t.push({path:f.join(i,e.dir.path.replace(/\.mdx$/,`.md`)),scope:`project`,source:{kind:`skillReference`,content:e.content}});if(n.resources!=null)for(let e of n.resources)t.push({path:f.join(i,e.relativePath),scope:`project`,source:{kind:`skillResource`,content:e.content,encoding:e.encoding}})}}if(_.has(`project`)){let e=wg($(y.project,i,`rules`),i),n=f.join(r,this.rulesConfig.subDir??`rules`);for(let r of e)t.push({path:f.join(n,this.buildRuleFileName(r)),scope:`project`,source:{kind:`rule`,rule:r}})}u!=null&&d!=null&&e.isPromptSourceProject!==!0&&t.push({path:f.join(n.basePath,n.path,u),scope:`project`,source:{kind:`ignoreFile`,content:d.content}})}let b=this.resolvePromptSourceProjectConfig(e),x=t=>t===`global`?this.getGlobalConfigDir():this.getWorkspaceConfigDir(e);if((p.selectedScope===`global`||p.selectedScope===`workspace`)&&p.items.length>0){let e=$(p.items,b,`commands`),n=x(p.selectedScope);for(let r of e){let e=this.transformCommandName(r,l);t.push({path:f.join(n,this.commandsConfig.subDir,e),scope:p.selectedScope,source:{kind:`command`,command:r}})}}if((m.selectedScope===`global`||m.selectedScope===`workspace`)&&m.items.length>0){let e=$(m.items,b,`subAgents`),n=x(m.selectedScope);for(let r of e){let e=this.transformSubAgentName(r);t.push({path:f.join(n,this.subAgentsConfig.subDir,e),scope:m.selectedScope,source:{kind:`subAgent`,subAgent:r}})}}if((h.selectedScope===`global`||h.selectedScope===`workspace`)&&h.items.length>0){let e=$(h.items,b,`skills`),n=x(h.selectedScope);for(let r of e){let e=r.yamlFrontMatter?.name??r.dir.getDirectoryName(),i=f.join(n,this.skillsConfig.subDir,e);if(t.push({path:f.join(i,`SKILL.md`),scope:h.selectedScope,source:{kind:`skillMain`,skill:r}}),r.childDocs!=null)for(let e of r.childDocs)t.push({path:f.join(i,e.dir.path.replace(/\.mdx$/,`.md`)),scope:h.selectedScope,source:{kind:`skillReference`,content:e.content}});if(r.resources!=null)for(let e of r.resources)t.push({path:f.join(i,e.relativePath),scope:h.selectedScope,source:{kind:`skillResource`,content:e.content,encoding:e.encoding}})}}for(let e of[`global`,`workspace`]){if(!_.has(e))continue;let n=x(e),r=wg($(y[e],b,`rules`),b),i=f.join(n,this.rulesConfig.subDir??`rules`);for(let n of r)t.push({path:f.join(i,this.buildRuleFileName(n)),scope:e,source:{kind:`rule`,rule:n}})}return r!=null&&this.outputFileName.length>0&&v.has(`global`)&&t.push({path:f.join(this.getGlobalConfigDir(),this.outputFileName),scope:`global`,source:{kind:`globalMemory`,content:r.content}}),t}async buildCommandContent(e){let t=e.content,n=e.yamlFrontMatter,r=!1;if(e.rawMdxContent!=null&&this.toolPreset!=null){this.log.debug(`recompiling command with tool preset`,{file:e.dir.getAbsolutePath(),toolPreset:this.toolPreset,hasRawContent:!0});let i=new jg({toolPreset:this.toolPreset}).collect(),a=await ug(e.rawMdxContent,{globalScope:i,extractMetadata:!0,basePath:e.dir.basePath});t=a.content,n=a.metadata.fields,r=!0}let i=this.commandsConfig.transformFrontMatter;if(i==null)throw Error(`commands.transformFrontMatter is required for command output plugin: ${this.name}`);let a=i(e,{isRecompiled:r,...n!=null&&{sourceFrontMatter:n}});return this.buildMarkdownContent(t,a)}buildSubAgentContent(e){let t=this.subAgentsConfig.transformFrontMatter;if(t!=null){let n=t(e,{...e.yamlFrontMatter!=null&&{sourceFrontMatter:e.yamlFrontMatter}});return this.buildMarkdownContent(e.content,n)}return this.buildMarkdownContentWithRaw(e.content,e.yamlFrontMatter,e.rawFrontMatter)}buildSkillMainContent(e){return this.buildMarkdownContentWithRaw(e.content,e.yamlFrontMatter,e.rawFrontMatter)}},h_=class{constructor(e,t,n,r){this.fs=e,this.path=t,this.logger=n,this.globalScope=r}async readDirectoryStructure(e,t,n){let r=[],i=[];if(!this.exists(e))return{prompts:r,errors:i};try{let a=this.fs.readdirSync(e,{withFileTypes:!0});for(let o of a){if(!o.isDirectory())continue;let{name:a}=o,s=this.path.join(e,a),c=this.path.join(t,a);try{let e=await this.readEntry(a,s,c,n,!0);e&&r.push(e)}catch(e){i.push({path:s,error:e,phase:`read`}),this.logger.error(`Failed to read entry: ${a}`,{error:e})}}}catch(t){i.push({path:e,error:t,phase:`scan`}),this.logger.error(`Failed to scan directory: ${e}`,{error:t})}return{prompts:r,errors:i}}async readFlatFiles(e,t,n){let r=[],i=[],a=this.exists(e),o=this.exists(t);if(this.logger.debug(`readFlatFiles: srcDir=${e}, exists=${a}`),this.logger.debug(`readFlatFiles: distDir=${t}, exists=${o}`),!a&&!o)return{prompts:r,errors:i};let s=this.normalizeExtensions(n.localeExtensions.zh),c=new Set,l=async(a,o)=>{if(!c.has(a)){c.add(a);try{let i=await this.readFlatEntry(a,e,t,a,n);i&&r.push(i)}catch(e){i.push({path:o,error:e,phase:`read`}),this.logger.error(`Failed to read file: ${o}`,{error:e})}}},u=async(e,t=``)=>{if(this.exists(e))try{let n=this.fs.readdirSync(e,{withFileTypes:!0});for(let r of n){let n=t?this.path.join(t,r.name):r.name;if(r.isDirectory()){await u(this.path.join(e,r.name),n);continue}let i=this.findMatchingExtension(r.name,s);if(!r.isFile()||i==null)continue;let a=r.name.slice(0,-i.length);await l(t?this.path.join(t,a):a,this.path.join(e,r.name))}}catch(t){i.push({path:e,error:t,phase:`scan`}),this.logger.error(`Failed to scan directory: ${e}`,{error:t})}},d=async(e,t=``)=>{if(this.exists(e))try{let n=this.fs.readdirSync(e,{withFileTypes:!0});for(let r of n){let n=t?this.path.join(t,r.name):r.name;if(r.isDirectory()){await d(this.path.join(e,r.name),n);continue}if(!r.isFile()||!r.name.endsWith(`.mdx`))continue;let i=r.name.slice(0,-4);await l(t?this.path.join(t,i):i,this.path.join(e,r.name))}}catch(t){i.push({path:e,error:t,phase:`scan`}),this.logger.error(`Failed to scan directory: ${e}`,{error:t})}};return a&&await u(e),o&&await d(t),{prompts:r,errors:i}}async readSingleFile(e,t,n){let r=this.path.basename(e);return this.readFlatEntry(r,this.path.dirname(e),this.path.dirname(t),e,n,!0)}async readEntry(e,t,n,r,i=!0){let{localeExtensions:a,entryFileName:o,createPrompt:s,kind:c}=r,l=o??e,u=this.normalizeExtensions(a.zh),d=this.normalizeExtensions(a.en),f=this.resolveLocalizedPath(t,l,u),p=this.resolveLocalizedPath(t,l,d),m=this.path.join(n,`${l}.mdx`),h=await this.readDistContent(m,s,e),g=await this.readLocaleContent(f,`zh`,s,e),_=await this.readLocaleContent(p,`en`,s,e),v=h!=null,y=g!=null,b=_!=null;if(!v&&!y)return this.logger.warn(`Missing both dist and source file for: ${e}`),null;let x=y?{zh:g,...b&&{en:_},default:g,defaultLocale:`zh`}:{zh:h,default:h,defaultLocale:`zh`},S;if(i){let e=v?n:t;S=this.scanChildren(e,l,u)}return{name:e,type:c,src:x,...v&&{dist:h},metadata:{hasDist:v,hasMultipleLocales:b,isDirectoryStructure:i,...S&&S.length>0&&{children:S}},paths:{...(y||!v)&&{zh:f},...b&&{en:p},...v&&{dist:m}}}}async readFlatEntry(e,t,n,r,i,a=!1){let{localeExtensions:o,createPrompt:s,kind:c}=i,l=this.normalizeExtensions(o.zh),u=this.normalizeExtensions(o.en),d=this.resolveLocalizedPath(``,r,l),f=this.resolveLocalizedPath(``,r,u),p=this.path.join(n,`${e}.mdx`),m=a?d:this.path.join(t,d),h=a?f:this.path.join(t,f),g=await this.readDistContent(p,s,e),_=await this.readLocaleContent(m,`zh`,s,e),v=await this.readLocaleContent(h,`en`,s,e),y=g!=null,b=_!=null,x=v!=null;return!y&&!b?(this.logger.warn(`Missing both dist and source file for: ${e}`),null):{name:e,type:c,src:b?{zh:_,...x&&{en:v},default:_,defaultLocale:`zh`}:{zh:g,default:g,defaultLocale:`zh`},...y&&{dist:g},metadata:{hasDist:y,hasMultipleLocales:x,isDirectoryStructure:!1},paths:{...(b||!y)&&{zh:m},...x&&{en:h},...y&&{dist:p}}}}async readLocaleContent(e,t,n,r){if(!this.exists(e))return null;try{let i=this.fs.readFileSync(e,`utf8`),a=this.fs.statSync(e),o=await ug(i,{globalScope:this.globalScope,extractMetadata:!0,basePath:this.path.dirname(e)}),s=Qf(i),c=await n(o.content,t,r,o.metadata.fields),l={content:o.content,lastModified:a.mtime,filePath:e};return i.length>0&&Object.assign(l,{rawMdx:i}),s.yamlFrontMatter!=null&&Object.assign(l,{frontMatter:s.yamlFrontMatter}),c!=null&&Object.assign(l,{prompt:c}),l}catch(t){throw this.logger.error(`Failed to read locale content: ${e}`,{error:t}),t}}async readDistContent(e,t,n){if(!this.exists(e))return null;try{let r=this.fs.readFileSync(e,`utf8`),i=this.fs.statSync(e),a=await ug(r,{globalScope:this.globalScope,extractMetadata:!0,basePath:this.path.dirname(e)}),o=Qf(r),s=await t(a.content,`zh`,n,a.metadata.fields),c={content:a.content,lastModified:i.mtime,prompt:s,filePath:e,rawMdx:r};return o.yamlFrontMatter!=null&&Object.assign(c,{frontMatter:o.yamlFrontMatter}),c}catch(t){return this.logger.warn(`Failed to read dist content: ${e}`,{error:t}),null}}scanChildren(e,t,n){let r=[];if(!this.exists(e))return r;let i=new Set(n.map(e=>`${t}${e}`));try{let t=(e,a)=>{let o=this.fs.readdirSync(e,{withFileTypes:!0});for(let s of o){let o=this.path.join(e,s.name),c=a?this.path.join(a,s.name):s.name;if(s.isDirectory())t(o,c);else{let e=this.findMatchingExtension(s.name,n);if(e==null||i.has(s.name))continue;let t=s.name.slice(0,-e.length),a=this.path.dirname(c),o=a===`.`?t:this.path.join(a,t);r.push(o)}}};t(e,``)}catch(t){this.logger.warn(`Failed to scan children: ${e}`,{error:t})}return r}exists(e){try{return this.fs.existsSync(e)}catch{return!1}}normalizeExtensions(e){return typeof e==`string`?[e]:e}findMatchingExtension(e,t){return t.find(t=>e.endsWith(t))}resolveLocalizedPath(e,t,n){let r=e===``?`${t}${n[0]}`:this.path.join(e,`${t}${n[0]}`);for(let r of n){let n=e===``?`${t}${r}`:this.path.join(e,`${t}${r}`);if(this.exists(n))return n}return r}};function g_(e,t,n,r){return new h_(e,t,n,r)}var __=class{fs;logger;constructor(e){this.fs=e.fs,this.logger=e.logger}collectMcpServers(e){let t=new Map;for(let n of e)if(n.mcpConfig!=null)for(let[e,r]of Object.entries(n.mcpConfig.mcpServers))t.set(e,r),this.logger.debug(`mcp server collected`,{skill:n.yamlFrontMatter.name,mcpName:e});return t}transformMcpServers(e,t){let n={};for(let[r,i]of e)n[r]=t(i);return n}readExistingConfig(e){try{if(this.fs.existsSync(e)){let t=this.fs.readFileSync(e,`utf8`);return JSON.parse(t)}}catch{this.logger.warn(`failed to read existing mcp config, starting fresh`,{path:e})}return{}}writeCursorMcpConfig(e,t,n){let r=this.readExistingConfig(e);r.mcpServers={...r.mcpServers??{},...t};let i=JSON.stringify(r,null,2);return this.writeConfigFile(e,i,Object.keys(t).length,n)}writeOpencodeMcpConfig(e,t,n,r){let i={...this.readExistingConfig(e),...r,mcp:t},a=JSON.stringify(i,null,2);return this.writeConfigFile(e,a,Object.keys(t).length,n)}writeSkillMcpConfig(e,t,n){return this.writeConfigFile(e,t,1,n)}ensureDirectory(e){this.fs.existsSync(e)||this.fs.mkdirSync(e,{recursive:!0})}writeConfigFile(e,t,n,r){if(r)return this.logger.trace({action:`dryRun`,type:`mcpConfig`,path:e,serverCount:n}),{success:!0,path:e,serverCount:n,skipped:!0};try{return this.ensureDirectory(f.dirname(e)),this.fs.writeFileSync(e,t),this.logger.trace({action:`write`,type:`mcpConfig`,path:e,serverCount:n}),{success:!0,path:e,serverCount:n}}catch(t){let n=t instanceof Error?t.message:String(t);return this.logger.error({action:`write`,type:`mcpConfig`,path:e,error:n}),{success:!1,path:e,serverCount:0,error:t}}}};function v_(e){let t={};if(e.command!=null)return t.command=e.command,e.args!=null&&(t.args=e.args),e.env!=null&&(t.env=e.env),t;let n=e,r=n.url??n.serverUrl;if(r==null)return t;t.url=r;let{headers:i}=n;return i!=null&&(t.headers=i),t}function y_(e){let t={};if(e.command!=null){t.type=`local`;let n=[e.command];e.args!=null&&n.push(...e.args),t.command=n,e.env!=null&&(t.environment=e.env)}else{t.type=`remote`;let n=e;n.url==null?n.serverUrl!=null&&(t.url=n.serverUrl):t.url=n.url}return t.enabled=e.disabled!==!0,t}var b_=class extends Error{conflicts;constructor(e){super(O_(e)),this.name=`CleanupProtectionConflictError`,this.conflicts=e}};const x_=[`**/node_modules/**`,`**/.git/**`,`**/.turbo/**`,`**/.pnpm-store/**`,`**/.yarn/**`,`**/.next/**`];function S_(e){return Hp(e).replaceAll(`\\`,`/`)}function C_(e){let{root:t}=f.parse(e);return e===t?e:e.endsWith(f.sep)?e.slice(0,-1):e}function w_(e,t){let n=C_(e),r=C_(t);return n===r?!0:n.startsWith(`${r}${f.sep}`)}function T_(e,t,n){let r=S_(e);return t.glob.sync(r,{onlyFiles:!1,dot:!0,absolute:!0,followSymbolicLinks:!1,ignore:[...n]})}async function E_(e,t){return e.declareCleanupPaths==null?{}:e.declareCleanupPaths({...t,dryRun:!0})}function D_(e,t){let n=new Map,r=[...t.entries()].sort((e,t)=>e[0].length-t[0].length);for(let[e,t]of r){let r=!1;for(let t of n.keys())if(w_(e,t)){r=!0;break}r||n.set(e,t)}let i=[];for(let[t,r]of e){let e=!1;for(let r of n.keys())if(w_(t,r)){e=!0;break}e||i.push(r)}return i.sort((e,t)=>e.localeCompare(t)),{files:i,dirs:[...n.values()].sort((e,t)=>e.localeCompare(t))}}function O_(e){let t=e.map(e=>e.outputPath).join(`, `);return`Cleanup protection conflict: ${e.length} output path(s) are also protected: ${t}`}function k_(e,t){let n=[];for(let[r,i]of e.entries()){let e=new Set(Kp(r));for(let a of t.compiledRules)if(a.comparisonKeys.some(t=>e.has(t)))for(let e of i)n.push({outputPath:r,outputPlugin:e,protectedPath:a.path,protectionMode:a.protectionMode,protectedBy:a.source,reason:a.reason})}return n.sort((e,t)=>{let n=e.outputPath.localeCompare(t.outputPath);return n===0?e.protectedPath.localeCompare(t.protectedPath):n})}function A_(e,t){e.error(`cleanup protection conflict detected`,{count:t.length,conflicts:t.map(e=>({outputPath:e.outputPath,outputPlugin:e.outputPlugin,protectedPath:e.protectedPath,protectionMode:e.protectionMode,protectedBy:e.protectedBy,reason:e.reason}))})}async function j_(e,t){let n=new Set,r=new Set,i=new Map,a=new Set(x_),o=new Map,s=[],c=(e,t)=>{t===`directory`?r.add(Hp(e)):n.add(Hp(e))},l=(e,t,n,r,a=`path`)=>{let o=Hp(e);i.set(`${a}:${t}:${o}`,{path:o,protectionMode:t,reason:n,source:r,matcher:a})},u=e=>e.protectionMode==null?e.kind===`file`?`direct`:`recursive`:e.protectionMode;for(let e of am(t.collectedOutputContext))l(e.path,e.protectionMode,e.reason,e.source);for(let e of t.pluginOptions?.cleanupProtection?.rules??[])l(e.path,e.protectionMode,e.reason??`configured cleanup protection rule`,`configured-cleanup-protection`,e.matcher??`path`);for(let n of e){let e=await n.declareOutputFiles({...t,dryRun:!0});for(let t of e){let e=Hp(t.path);c(e,`file`);let r=o.get(e);r==null?o.set(e,[n.name]):r.includes(n.name)||r.push(n.name)}let r=await E_(n,t);for(let e of r.excludeScanGlobs??[])a.add(S_(e));s.push({plugin:n,cleanup:r})}let f=[...a],p=e=>{for(let n of T_(e.path,t,f))try{d.lstatSync(n).isDirectory()?c(n,`directory`):c(n,`file`)}catch{}},m=(e,n)=>{let r=u(e),i=e.label==null?`plugin cleanup protect declaration`:`plugin cleanup protect declaration (${e.label})`;for(let a of T_(e.path,t,f))l(a,r,i,`plugin-cleanup-protect:${n}`)};for(let{plugin:e,cleanup:t}of s){for(let n of t.protect??[]){if(n.kind===`glob`){m(n,e.name);continue}l(n.path,u(n),n.label==null?`plugin cleanup protect declaration`:`plugin cleanup protect declaration (${n.label})`,`plugin-cleanup-protect:${e.name}`)}for(let e of t.delete??[]){if(e.kind===`glob`){p(e);continue}e.kind===`directory`?c(e.path,`directory`):c(e.path,`file`)}}let h=sm({workspaceDir:t.collectedOutputContext.workspace.directory.path,projectRoots:cm(t.collectedOutputContext),rules:[...i.values()],...t.collectedOutputContext.aindexDir==null?{}:{aindexDir:t.collectedOutputContext.aindexDir}}),g=k_(o,h);if(g.length>0)throw new b_(g);let _=dm([...n],h),v=dm([...r],h),y=D_(new Map(_.safePaths.map(e=>[e,e])),new Map(v.safePaths.map(e=>[e,e])));return{filesToDelete:y.files,dirsToDelete:y.dirs,violations:[..._.violations,...v.violations].sort((e,t)=>e.targetPath.localeCompare(t.targetPath)),conflicts:[],excludedScanGlobs:[...a].sort((e,t)=>e.localeCompare(t))}}function M_(e,t){let n=e.map(e=>f.isAbsolute(e)?e:f.resolve(e)),r=ot(n);for(let e of n)r.errors.some(t=>t.path===e)||t.debug({action:`delete`,type:`file`,path:e});let i=r.errors.map(e=>{let n=e.error instanceof Error?e.error.message:String(e.error);return t.warn(`failed to delete file`,{path:e.path,error:n}),{path:e.path,type:`file`,error:e.error}});return{deleted:r.deleted,errors:i}}function N_(e,t){let n=e.map(e=>f.isAbsolute(e)?e:f.resolve(e)),r=st(n);for(let e of n)r.errors.some(t=>t.path===e)||t.debug({action:`delete`,type:`directory`,path:e});let i=r.errors.map(e=>{let n=e.error instanceof Error?e.error.message:String(e.error);return t.warn(`failed to delete directory`,{path:e.path,error:n}),{path:e.path,type:`directory`,error:e.error}});return{deleted:r.deleted,errors:i}}function P_(e,t){e.debug(`cleanup plan built`,{filesToDelete:t.filesToDelete.length,dirsToDelete:t.dirsToDelete.length,violations:t.violations.length,conflicts:t.conflicts.length,excludedScanGlobs:t.excludedScanGlobs})}async function F_(e,t,n){let r=await d_(e,t);n.debug(`Collected outputs for cleanup`,{projectDirs:r.projectDirs.length,projectFiles:r.projectFiles.length,workspaceDirs:r.workspaceDirs.length,workspaceFiles:r.workspaceFiles.length,globalDirs:r.globalDirs.length,globalFiles:r.globalFiles.length});let i;try{i=await j_(e,t)}catch(e){if(e instanceof b_)return A_(n,e.conflicts),{deletedFiles:0,deletedDirs:0,errors:[],violations:[],conflicts:e.conflicts,message:e.message};throw e}let a={filesToDelete:i.filesToDelete,dirsToDelete:i.dirsToDelete,violations:i.violations,conflicts:i.conflicts,excludedScanGlobs:i.excludedScanGlobs};if(P_(n,a),a.violations.length>0)return pm(n,`cleanup`,a.violations),{deletedFiles:0,deletedDirs:0,errors:[],violations:a.violations,conflicts:[],message:`Protected deletion guard blocked cleanup for ${a.violations.length} path(s)`};let o=M_(a.filesToDelete,n),s=N_(a.dirsToDelete,n);return{deletedFiles:o.deleted,deletedDirs:s.deleted,errors:[...o.errors,...s.errors],violations:[],conflicts:[]}}var I_=class{name=`clean`;async execute(e){let{logger:t,outputPlugins:n,createCleanContext:r}=e;t.info(`running clean pipeline`,{command:`clean`});let i=await F_(n,r(!1),t);return i.violations.length>0||i.conflicts.length>0?{success:!1,filesAffected:0,dirsAffected:0,...i.message==null?{}:{message:i.message}}:(t.info(`clean complete`,{deletedFiles:i.deletedFiles,deletedDirs:i.deletedDirs}),{success:!0,filesAffected:i.deletedFiles,dirsAffected:i.deletedDirs})}},L_=class{name=`dry-run-clean`;async execute(e){let{logger:t,outputPlugins:n,createCleanContext:r}=e;t.info(`running clean pipeline`,{command:`dry-run-clean`,dryRun:!0});let i=r(!0),a=await d_(n,i);t.info(`collected outputs for cleanup`,{dryRun:!0,projectDirs:a.projectDirs.length,projectFiles:a.projectFiles.length,workspaceDirs:a.workspaceDirs.length,workspaceFiles:a.workspaceFiles.length,globalDirs:a.globalDirs.length,globalFiles:a.globalFiles.length});let{filesToDelete:o,dirsToDelete:s,violations:c,excludedScanGlobs:l}=await j_(n,i);return c.length>0?(pm(t,`dry-run-cleanup`,c),{success:!1,filesAffected:0,dirsAffected:0,message:`Protected deletion guard blocked cleanup for ${c.length} path(s)`}):(this.logDryRunFiles(o,t),this.logDryRunDirectories(s,t),t.info(`clean complete`,{dryRun:!0,filesAffected:o.length,dirsAffected:s.length,violations:0,excludedScanGlobs:l}),{success:!0,filesAffected:o.length,dirsAffected:s.length,message:`Dry-run complete, no files were deleted`})}logDryRunFiles(e,t){for(let n of e){let e=f.isAbsolute(n)?n:f.resolve(n);t.info(`would delete file`,{path:e,dryRun:!0})}}logDryRunDirectories(e,t){let n=[...e].sort((e,t)=>t.length-e.length);for(let e of n){let n=f.isAbsolute(e)?e:f.resolve(e);t.info(`would delete directory`,{path:n,dryRun:!0})}}},R_=class{canHandle(e){return e.subcommand===`clean`}createCommand(e){return e.dryRun?new L_:new I_}};const z_=`.tnmsc.json`,B_=`.aindex`;function V_(){return f.join(p.homedir(),B_,z_)}var H_=class{configFileName;searchCwd;searchGlobal;customSearchPaths;logger;constructor(e={}){this.configFileName=e.configFileName??z_,this.searchCwd=e.searchCwd??!0,this.searchGlobal=e.searchGlobal??!0,this.customSearchPaths=e.searchPaths??[],this.logger=Am(`ConfigLoader`)}getSearchPaths(e=u.default.cwd()){let t=[];for(let e of this.customSearchPaths)t.push(this.resolveTilde(e));return this.searchCwd&&t.push(f.join(e,this.configFileName)),this.searchGlobal&&t.push(f.join(p.homedir(),B_,this.configFileName)),t}loadFromFile(e){let t=this.resolveTilde(e);try{if(!d.existsSync(t))return{config:{},source:null,found:!1};let e=d.readFileSync(t,`utf8`),n=this.parseConfig(e,t);return this.logger.debug(`loaded`,{source:t}),{config:n,source:t,found:!0}}catch(e){return this.logger.warn(`load failed`,{path:t,error:e}),{config:{},source:null,found:!1}}}load(e=u.default.cwd()){let t=this.getSearchPaths(e),n=[];for(let e of t){let t=this.loadFromFile(e);t.found&&n.push(t)}return{config:this.mergeConfigs(n.map(e=>e.config)),sources:n.map(e=>e.source).filter(e=>e!==null),found:n.length>0}}parseConfig(e,t){let n;try{n=JSON.parse(e)}catch(e){throw e instanceof SyntaxError?Error(`Invalid JSON in ${t}: ${e.message}`):e}let r=Zg.safeParse(n);if(r.success)return r.data;let i=r.error.issues.map(e=>`${e.path.join(`.`)}: ${e.message}`);throw Error(`Config validation failed in ${t}:\n${i.join(`
98
98
  `)}`)}mergeConfigs(e){if(e.length===0)return{};let t=e[0];return e.length===1&&t!=null?t:[...e].reverse().reduce((e,t)=>{let n=this.mergeAindex(e.aindex,t.aindex),r=this.mergeOutputScopeOptions(e.outputScopes,t.outputScopes),i=this.mergeCleanupProtectionOptions(e.cleanupProtection,t.cleanupProtection);return{...e,...t,...n==null?{}:{aindex:n},...r==null?{}:{outputScopes:r},...i==null?{}:{cleanupProtection:i}}},{})}mergeAindex(e,t){if(!(e==null&&t==null))return e==null?t:t==null?e:{dir:t.dir??e.dir,skills:{...e.skills,...t.skills},commands:{...e.commands,...t.commands},subAgents:{...e.subAgents,...t.subAgents},rules:{...e.rules,...t.rules},globalPrompt:{...e.globalPrompt,...t.globalPrompt},workspacePrompt:{...e.workspacePrompt,...t.workspacePrompt},app:{...e.app,...t.app},ext:{...e.ext,...t.ext},arch:{...e.arch,...t.arch}}}mergeOutputScopeTopics(e,t){if(!(e==null&&t==null))return e==null?t:t==null?e:{...e,...t}}mergeOutputScopeOptions(e,t){if(e==null&&t==null)return;if(e==null)return t;if(t==null)return e;let n={};for(let[t,r]of Object.entries(e.plugins??{}))r!=null&&(n[t]={...r});for(let[e,r]of Object.entries(t.plugins??{})){let t=this.mergeOutputScopeTopics(n[e],r);t!=null&&(n[e]=t)}return Object.keys(n).length===0?{}:{plugins:n}}mergeCleanupProtectionOptions(e,t){if(!(e==null&&t==null))return e==null?t:t==null?e:{rules:[...e.rules??[],...t.rules??[]]}}resolveTilde(e){return e.startsWith(`~`)?f.join(p.homedir(),e.slice(1)):e}};let U_=null;function W_(e){return(e||!U_)&&(U_=new H_(e)),U_}function G_(e){return W_().load(e)}function K_(e){try{return d.lstatSync(e).isSymbolicLink()}catch{return!1}}function q_(e){try{return d.readlinkSync(e)}catch{return null}}function J_(e,t){let n=um(e,sm());if(n!=null)throw pm(t,`config-link-replacement`,[n]),new Np(`config-link-replacement`,[n])}function Y_(e,t,n){if(d.existsSync(t)){if(d.existsSync(e)||K_(e))if(K_(e)){let r=q_(e);if(r!==null&&f.resolve(f.dirname(e),r)===f.resolve(t))return;J_(e,n),d.rmSync(e,{force:!0})}else d.readFileSync(e,`utf8`)!==d.readFileSync(t,`utf8`)&&(d.copyFileSync(e,t),n.debug(`synced local config back to global`,{src:e,dest:t})),J_(e,n),d.rmSync(e,{force:!0});try{d.symlinkSync(t,e,`file`),n.debug(`linked config`,{link:e,target:t})}catch{try{d.copyFileSync(t,e),n.warn(`symlink unavailable, copied config (auto-sync disabled)`,{dest:e})}catch(t){n.warn(`failed to link or copy config`,{path:e,error:t instanceof Error?t.message:String(t)})}}}}function X_(){let e=Am(`ConfigLoader`),t=V_();if(!d.existsSync(t)){let n=`Global config not found at ${t}. Please create it manually.`;return e.error(n),{valid:!1,exists:!1,errors:[n],shouldExit:!0}}let n;try{n=d.readFileSync(t,`utf8`)}catch(n){let r=n instanceof Error?n.message:String(n);return e.error(`failed to read global config`,{path:t,error:r}),{valid:!1,exists:!0,errors:[`Failed to read config: ${r}`],shouldExit:!0}}let r;try{r=JSON.parse(n)}catch(n){let r=n instanceof Error?n.message:String(n);return e.error(`invalid JSON in global config`,{path:t,error:r}),{valid:!1,exists:!0,errors:[`Invalid JSON: ${r}`],shouldExit:!0}}if(typeof r!=`object`||!r||Array.isArray(r))return e.error(`global config must be a JSON object`,{path:t}),{valid:!1,exists:!0,errors:[`Config must be a JSON object`],shouldExit:!0};let i=Zg.safeParse(r);if(!i.success){let n=i.error.issues.map(e=>`${e.path.join(`.`)}: ${e.message}`);for(let r of n)e.error(`config validation error`,{path:t,error:r});return{valid:!1,exists:!0,errors:n,shouldExit:!0}}return{valid:!0,exists:!0,errors:[],shouldExit:!1}}const Z_=[`workspaceDir`,`aindex.skills.src`,`aindex.skills.dist`,`aindex.commands.src`,`aindex.commands.dist`,`aindex.subAgents.src`,`aindex.subAgents.dist`,`aindex.rules.src`,`aindex.rules.dist`,`aindex.globalPrompt.src`,`aindex.globalPrompt.dist`,`aindex.workspacePrompt.src`,`aindex.workspacePrompt.dist`,`aindex.app.src`,`aindex.app.dist`,`aindex.ext.src`,`aindex.ext.dist`,`aindex.arch.src`,`aindex.arch.dist`,`logLevel`];function Q_(e){return Z_.includes(e)}function $_(e){return[`trace`,`debug`,`info`,`warn`,`error`].includes(e)}function ev(){return f.join(p.homedir(),B_,z_)}function tv(){let e=ev();if(!d.existsSync(e))return{};try{let t=d.readFileSync(e,`utf8`);return JSON.parse(t)}catch{return{}}}function nv(e){let t=ev(),n=f.dirname(t);d.existsSync(n)||d.mkdirSync(n,{recursive:!0}),d.writeFileSync(t,`${JSON.stringify(e,null,2)}\n`,`utf8`)}function rv(e,t,n){let r=t.split(`.`),i=e;for(let e=0;e<r.length-1;e++){let t=r[e],n=i[t];(typeof n!=`object`||!n||Array.isArray(n))&&(i[t]={}),i=i[t]}i[r.at(-1)]=n}function iv(e,t){let n=t.split(`.`),r=e;for(let e of n){if(typeof r!=`object`||!r||Array.isArray(r))return;r=r[e]}return r}var av=class{name=`config`;constructor(e){this.options=e}async execute(e){let{logger:t}=e;if(this.options.length===0)return t.error(`No configuration key-value pairs provided`),t.info(`Usage: tnmsc config key=value`),t.info(`Valid keys: ${Z_.join(`, `)}`),{success:!1,filesAffected:0,dirsAffected:0,message:`No options provided`};let n=tv(),r=[],i=[];for(let[e,a]of this.options){if(!Q_(e)){r.push(`Invalid key: ${e} (valid keys: ${Z_.join(`, `)})`);continue}if(e===`logLevel`&&!$_(a)){r.push(`Invalid logLevel value: ${a} (must be: trace, debug, info, warn, or error)`);continue}let o=iv(n,e);rv(n,e,a),o!==a&&i.push(`${e}=${a}`),t.info(`configuration updated`,{key:e,value:a})}if(i.length>0&&(nv(n),t.info(`global config written`,{path:ev()})),r.length>0)for(let e of r)t.error(e);let a=r.length===0,o=a?`Configuration updated: ${i.join(`, `)}`:`Partial update: ${i.join(`, `)}. Errors: ${r.join(`, `)}`;return{success:a,filesAffected:i.length>0?1:0,dirsAffected:0,message:o}}},ov=class{name=`config-show`;async execute(e){let{logger:t}=e,n=new H_,r=n.load(),i=r.sources.map(e=>{let t=n.loadFromFile(e);return{path:e,layer:this.inferLayer(e),config:t.config}}),a={merged:r.config,sources:i};return u.default.stdout.write(`${JSON.stringify(a)}\n`),t.info(`config shown`,{sources:r.sources.length}),{success:!0,filesAffected:0,dirsAffected:0,message:`Configuration displayed (${i.length} source(s))`}}inferLayer(e){let t=u.default.cwd();return e.startsWith(t)?`cwd`:`global`}},sv=class{canHandle(e){return e.subcommand===`config`}createCommand(e){if(e.showFlag)return new ov;let t=[];for(let n of e.positional){let e=n.indexOf(`=`);e>0&&t.push([n.slice(0,e),n.slice(e+1)])}return new av([...e.setOption,...t])}},cv=class{name=`dry-run-output`;async execute(e){let{logger:t,outputPlugins:n,createWriteContext:r}=e;t.info(`started`,{command:`dry-run-output`,dryRun:!0});let i=await u_(n,r(!0)),a=0,o=0;for(let[e,n]of i)a+=n.files.length,o+=n.dirs.length,t.info(`plugin result`,{plugin:e,files:n.files.length,dirs:n.dirs.length,dryRun:!0});return t.info(`complete`,{command:`dry-run-output`,totalFiles:a,totalDirs:o,dryRun:!0}),{success:!0,filesAffected:a,dirsAffected:o,message:`Dry-run complete, no files were written`}}},lv=class{canHandle(e){return e.subcommand===`dry-run`}createCommand(e){return new cv}},uv=class{name=`execute`;async execute(e){let{logger:t,outputPlugins:n,createCleanContext:r,createWriteContext:i}=e;t.info(`started`,{command:`execute`});let a=await F_(n,r(!1),t);if(a.violations.length>0||a.conflicts.length>0)return{success:!1,filesAffected:0,dirsAffected:0,...a.message==null?{}:{message:a.message}};t.info(`cleanup complete`,{deletedFiles:a.deletedFiles,deletedDirs:a.deletedDirs});let o=await u_(n,i(!1)),s=0,c=0,l=[];for(let e of o.values()){s+=e.files.length,c+=e.dirs.length;for(let t of e.files)t.success||l.push(t.error?.message??`Failed to write ${t.path}`)}return l.length>0?{success:!1,filesAffected:s,dirsAffected:c,message:l.join(`
99
- `)}:(t.info(`complete`,{command:`execute`,pluginCount:o.size}),{success:!0,filesAffected:s,dirsAffected:c})}},dv=class{canHandle(e){return!0}createCommand(e){return new uv}};function fv(){return`2026.10314.10606`}var pv=class{name=`version`;async execute(e){return e.logger.error(`tnmsc v${fv()}`),{success:!0,filesAffected:0,dirsAffected:0,message:`Version displayed`}}};const mv=`tnmsc`,hv=`
99
+ `)}:(t.info(`complete`,{command:`execute`,pluginCount:o.size}),{success:!0,filesAffected:s,dirsAffected:c})}},dv=class{canHandle(e){return!0}createCommand(e){return new uv}};function fv(){return`2026.10314.10724`}var pv=class{name=`version`;async execute(e){return e.logger.error(`tnmsc v${fv()}`),{success:!0,filesAffected:0,dirsAffected:0,message:`Version displayed`}}};const mv=`tnmsc`,hv=`
100
100
  ${mv} v${fv()} - Memory Sync CLI
101
101
 
102
102
  Synchronize AI memory and configuration files across projects.
@@ -7,7 +7,7 @@ import{$ as e,A as t,B as n,C as r,D as i,E as a,F as o,G as s,H as c,I as l,J a
7
7
  `)}buildProjectRelativeGlobPattern(e){return e.length===0?`**/*`:`${e}/**`}};const xt=`.vscode`;var St=class extends T{constructor(){super(`VisualStudioCodeIDEConfigOutputPlugin`,{cleanup:{delete:{project:{files:[`.vscode/settings.json`,`.vscode/extensions.json`]}}},capabilities:{}})}async declareOutputFiles(e){let t=[],{projects:n}=e.collectedOutputContext.workspace,{vscodeConfigFiles:r}=e.collectedOutputContext,i=r??[];for(let e of n){let n=e.dirFromWorkspacePath;if(n!=null)for(let e of i){let r=this.getTargetRelativePath(e);t.push({path:this.resolvePath(n.basePath,n.path,r),scope:`project`,source:{content:e.content}})}}return t}async convertContent(e,t){let n=e.source;if(n.content==null)throw Error(`Unsupported declaration source for ${this.name}`);return n.content}getTargetRelativePath(t){let n=t.dir.path;if(t.type!==e.VSCode)return this.basename(n);let r=n.indexOf(xt);return r===-1?this.joinPath(xt,this.basename(n)):n.slice(Math.max(0,r))}};const Ct=`WARP.md`;var wt=class extends T{constructor(){super(`WarpIDEOutputPlugin`,{outputFileName:Ct,indexignore:`.warpindexignore`,cleanup:{delete:{project:{files:[Ct]}}},capabilities:{prompt:{scopes:[`project`,`global`],singleScope:!1}}})}async declareOutputFiles(e){let t=[],{workspace:n,globalMemory:r,aiAgentIgnoreConfigFiles:i}=e.collectedOutputContext,{projects:a}=n,s=this.shouldSkipDueToPlugin(e,o.AgentsOutput),c=new Set(this.selectPromptScopes(e,[`project`,`global`]));if(s){if(r!=null&&c.has(`global`))for(let e of a){let n=e.dirFromWorkspacePath;n!=null&&t.push({path:this.resolveFullPath(n),scope:`project`,source:{content:r.content}})}}else{let n=this.extractGlobalMemoryContent(e);for(let e of a){let r=e.dirFromWorkspacePath;if(r!=null){if(e.rootMemoryPrompt!=null&&c.has(`project`)){let i=this.combineGlobalWithContent(n,e.rootMemoryPrompt.content);t.push({path:this.resolveFullPath(r),scope:`project`,source:{content:i}})}if(e.childMemoryPrompts!=null&&c.has(`project`))for(let n of e.childMemoryPrompts)t.push({path:this.resolveFullPath(n.dir),scope:`project`,source:{content:n.content}})}}}let l=this.getIgnoreOutputPath(),u=this.indexignore==null?void 0:i?.find(e=>e.fileName===this.indexignore);if(l!=null&&u!=null)for(let e of a){let n=e.dirFromWorkspacePath;n==null||e.isPromptSourceProject===!0||t.push({path:this.resolvePath(n.basePath,n.path,l),scope:`project`,source:{content:u.content}})}return t}async convertContent(e,t){let n=e.source;if(n.content==null)throw Error(`Unsupported declaration source for ${this.name}`);return n.content}};const G=`.codeium/windsurf`,Tt=`global_workflows`,Et=`memories`,Dt=`skills`,Ot=`.windsurf`;var kt=class extends T{constructor(){super(`WindsurfOutputPlugin`,{globalConfigDir:G,outputFileName:``,dependsOn:[o.AgentsOutput],indexignore:`.codeiumignore`,commands:{subDir:Tt,transformFrontMatter:(e,t)=>t.sourceFrontMatter??{}},skills:{subDir:Dt},rules:{sourceScopes:[`project`,`global`]},cleanup:{delete:{project:{dirs:[`.windsurf/rules`,`.windsurf/workflows`,`.windsurf/global_workflows`,`.windsurf/skills`,`.codeium/windsurf/global_workflows`,`.codeium/windsurf/skills`]},workspace:{dirs:[`.codeium/windsurf/global_workflows`,`.codeium/windsurf/skills`]},global:{dirs:[`.codeium/windsurf/global_workflows`,`.codeium/windsurf/memories`,`.codeium/windsurf/skills`]}}},capabilities:{prompt:{scopes:[`global`],singleScope:!1},rules:{scopes:[`project`,`global`],singleScope:!1},commands:{scopes:[`project`,`workspace`,`global`],singleScope:!0},skills:{scopes:[`project`,`workspace`,`global`],singleScope:!0}}})}async declareOutputFiles(e){let t=[],{workspace:n,commands:i,skills:a,globalMemory:o,rules:s,aiAgentIgnoreConfigFiles:c}=e.collectedOutputContext,l=this.resolvePromptSourceProjectConfig(e),u=this.getCodeiumWindsurfDir(),d=this.resolveDirectoryPath(n.directory),f=new Set(this.selectPromptScopes(e,[`global`])),p=(e,t)=>{if(e===`global`)return u;if(e===`workspace`)return M.join(d,G);if(t!=null)return M.join(t.basePath,t.path,Ot)};if(o!=null&&f.has(`global`)&&t.push({path:M.join(u,Et,`global_rules.md`),scope:`global`,source:{kind:`globalMemory`,content:o.content}}),a!=null&&a.length>0){let i=this.selectSingleScopeItems(a,this.skillsConfig.sourceScopes,e=>this.resolveSkillSourceScope(e),this.getTopicScopeOverride(e,`skills`)),o=(e,n,r)=>{let i=r.yamlFrontMatter.name,a=M.join(e,Dt,i);if(t.push({path:M.join(a,`SKILL.md`),scope:n,source:{kind:`skillMain`,skill:r}}),r.childDocs!=null)for(let e of r.childDocs)t.push({path:M.join(a,e.relativePath.replace(/\.mdx$/,`.md`)),scope:n,source:{kind:`skillChildDoc`,content:e.content}});if(r.resources!=null)for(let e of r.resources)t.push({path:M.join(a,e.relativePath),scope:n,source:{kind:`skillResource`,content:e.content,encoding:e.encoding}})};if(i.selectedScope===`project`)for(let e of n.projects){let t=e.dirFromWorkspacePath,n=p(`project`,t);if(n==null)continue;let a=r(i.items,e.projectConfig,`skills`);for(let e of a)o(n,`project`,e)}else if(i.selectedScope!=null){let e=p(i.selectedScope);if(e!=null){let t=r(i.items,l,`skills`);for(let n of t)o(e,i.selectedScope,n)}}}if(i!=null&&i.length>0){let a=this.selectSingleScopeItems(i,this.commandsConfig.sourceScopes,e=>this.resolveCommandSourceScope(e),this.getTopicScopeOverride(e,`commands`)),o=this.getTransformOptionsFromContext(e,{includeSeriesPrefix:!0});if(a.selectedScope===`project`)for(let e of n.projects){let n=e.dirFromWorkspacePath,i=p(`project`,n);if(i==null)continue;let s=r(a.items,e.projectConfig,`commands`);for(let e of s)t.push({path:M.join(i,`workflows`,this.transformCommandName(e,o)),scope:`project`,source:{kind:`command`,command:e}})}else if(a.selectedScope!=null){let e=p(a.selectedScope);if(e!=null){let n=r(a.items,l,`commands`);for(let r of n)t.push({path:M.join(e,Tt,this.transformCommandName(r,o)),scope:a.selectedScope,source:{kind:`command`,command:r}})}}}if(s!=null&&s.length>0){let i=new Set(this.selectRuleScopes(e,s)),a=s.filter(e=>this.normalizeSourceScope(this.normalizeRuleScope(e))===`global`);if(i.has(`global`))for(let e of a)t.push({path:M.join(u,Et,this.buildRuleFileName(e)),scope:`global`,source:{kind:`rule`,rule:e}});if(i.has(`project`))for(let e of n.projects){let n=e.dirFromWorkspacePath;if(n==null)continue;let i=y(r(s.filter(e=>this.normalizeSourceScope(this.normalizeRuleScope(e))===`project`),e.projectConfig,`rules`),e.projectConfig);for(let e of i)t.push({path:M.join(n.basePath,n.path,Ot,`rules`,this.buildRuleFileName(e)),scope:`project`,source:{kind:`rule`,rule:e}})}}let m=this.getIgnoreOutputPath(),h=this.indexignore==null?void 0:c?.find(e=>e.fileName===this.indexignore);if(m!=null&&h!=null)for(let e of n.projects){let n=e.dirFromWorkspacePath;n==null||e.isPromptSourceProject===!0||t.push({path:M.join(n.basePath,n.path,m),scope:`project`,source:{kind:`ignoreFile`,content:h.content}})}return t}async convertContent(e,t){let n=e.source;switch(n.kind){case`globalMemory`:case`skillChildDoc`:case`ignoreFile`:return n.content;case`command`:return this.buildCommandContent(n.command);case`skillMain`:return O(this.buildSkillFrontMatter(n.skill),n.skill.content);case`skillResource`:return n.encoding===`base64`?F.from(n.content,`base64`):n.content;case`rule`:return this.buildRuleContent(n.rule);default:throw Error(`Unsupported declaration source for ${this.name}`)}}getCodeiumWindsurfDir(){return M.join(this.getHomeDir(),G)}buildRuleFileName(e,t=`rule-`){return`${t}${e.prefix}-${e.ruleName}.md`}buildRuleContent(e,t){return O({trigger:`glob`,globs:e.globs.length>0?e.globs.join(`, `):``},e.content).split(`
8
8
  `).map(e=>{let t=/^(\s*globs:\s*)(['"])(.*)\2\s*$/.exec(e);if(t==null)return e;let n=t[1]??`globs: `,r=t[3]??``;return r.trim().length===0?e:`${n}${r}`}).join(`
9
9
  `)}},K=se(we(),1);function At(e,t){let n=M.join(e,`.git`),r=j.existsSync(n);return r?t?.info(`version control detected`,{path:n}):t?.warn(`no version control detected, please use git to manage your aindex`,{path:e}),{hasGit:r,gitPath:n}}const jt=`.tnmsc.json`,Mt=`.aindex`;var Nt=class{configFileName;searchCwd;searchGlobal;customSearchPaths;logger;constructor(e={}){this.configFileName=e.configFileName??jt,this.searchCwd=e.searchCwd??!0,this.searchGlobal=e.searchGlobal??!0,this.customSearchPaths=e.searchPaths??[],this.logger=n(`ConfigLoader`)}getSearchPaths(e=N.cwd()){let t=[];for(let e of this.customSearchPaths)t.push(this.resolveTilde(e));return this.searchCwd&&t.push(M.join(e,this.configFileName)),this.searchGlobal&&t.push(M.join(P.homedir(),Mt,this.configFileName)),t}loadFromFile(e){let t=this.resolveTilde(e);try{if(!j.existsSync(t))return{config:{},source:null,found:!1};let e=j.readFileSync(t,`utf8`),n=this.parseConfig(e,t);return this.logger.debug(`loaded`,{source:t}),{config:n,source:t,found:!0}}catch(e){return this.logger.warn(`load failed`,{path:t,error:e}),{config:{},source:null,found:!1}}}load(e=N.cwd()){let t=this.getSearchPaths(e),n=[];for(let e of t){let t=this.loadFromFile(e);t.found&&n.push(t)}return{config:this.mergeConfigs(n.map(e=>e.config)),sources:n.map(e=>e.source).filter(e=>e!==null),found:n.length>0}}parseConfig(e,t){let n;try{n=JSON.parse(e)}catch(e){throw e instanceof SyntaxError?Error(`Invalid JSON in ${t}: ${e.message}`):e}let r=Ee.safeParse(n);if(r.success)return r.data;let i=r.error.issues.map(e=>`${e.path.join(`.`)}: ${e.message}`);throw Error(`Config validation failed in ${t}:\n${i.join(`
10
- `)}`)}mergeConfigs(e){if(e.length===0)return{};let t=e[0];return e.length===1&&t!=null?t:[...e].reverse().reduce((e,t)=>{let n=this.mergeAindex(e.aindex,t.aindex),r=this.mergeOutputScopeOptions(e.outputScopes,t.outputScopes),i=this.mergeCleanupProtectionOptions(e.cleanupProtection,t.cleanupProtection);return{...e,...t,...n==null?{}:{aindex:n},...r==null?{}:{outputScopes:r},...i==null?{}:{cleanupProtection:i}}},{})}mergeAindex(e,t){if(!(e==null&&t==null))return e==null?t:t==null?e:{dir:t.dir??e.dir,skills:{...e.skills,...t.skills},commands:{...e.commands,...t.commands},subAgents:{...e.subAgents,...t.subAgents},rules:{...e.rules,...t.rules},globalPrompt:{...e.globalPrompt,...t.globalPrompt},workspacePrompt:{...e.workspacePrompt,...t.workspacePrompt},app:{...e.app,...t.app},ext:{...e.ext,...t.ext},arch:{...e.arch,...t.arch}}}mergeOutputScopeTopics(e,t){if(!(e==null&&t==null))return e==null?t:t==null?e:{...e,...t}}mergeOutputScopeOptions(e,t){if(e==null&&t==null)return;if(e==null)return t;if(t==null)return e;let n={};for(let[t,r]of Object.entries(e.plugins??{}))r!=null&&(n[t]={...r});for(let[e,r]of Object.entries(t.plugins??{})){let t=this.mergeOutputScopeTopics(n[e],r);t!=null&&(n[e]=t)}return Object.keys(n).length===0?{}:{plugins:n}}mergeCleanupProtectionOptions(e,t){if(!(e==null&&t==null))return e==null?t:t==null?e:{rules:[...e.rules??[],...t.rules??[]]}}resolveTilde(e){return e.startsWith(`~`)?M.join(P.homedir(),e.slice(1)):e}};let q=null;function Pt(e){return(e||!q)&&(q=new Nt(e)),q}let J=function(e){return e[e.Flags=0]=`Flags`,e[e.Unknown=1]=`Unknown`,e[e.Subcommand=2]=`Subcommand`,e}({});var Ft=class{factories=[];register(e){this.factories.push(e),this.factories.sort((e,t)=>e.priority-t.priority)}registerWithPriority(e,t){let n={priority:t,canHandle:t=>e.canHandle(t),createCommand:t=>e.createCommand(t)};this.factories.push(n),this.factories.sort((e,t)=>e.priority-t.priority)}resolve(e){for(let t of this.factories)if(t.priority<=J.Unknown&&t.canHandle(e))return t.createCommand(e);for(let t of this.factories)if(t.priority===J.Subcommand&&t.canHandle(e))return t.createCommand(e);for(let t of this.factories)if(t.canHandle(e))return t.createCommand(e);throw Error(`No command factory found for the given arguments`)}},It=class{canHandle(e){return e.subcommand===`clean`}createCommand(e){return e.dryRun?new ie:new _e}};const Y=[`workspaceDir`,`aindex.skills.src`,`aindex.skills.dist`,`aindex.commands.src`,`aindex.commands.dist`,`aindex.subAgents.src`,`aindex.subAgents.dist`,`aindex.rules.src`,`aindex.rules.dist`,`aindex.globalPrompt.src`,`aindex.globalPrompt.dist`,`aindex.workspacePrompt.src`,`aindex.workspacePrompt.dist`,`aindex.app.src`,`aindex.app.dist`,`aindex.ext.src`,`aindex.ext.dist`,`aindex.arch.src`,`aindex.arch.dist`,`logLevel`];function Lt(e){return Y.includes(e)}function Rt(e){return[`trace`,`debug`,`info`,`warn`,`error`].includes(e)}function X(){return M.join(P.homedir(),Mt,jt)}function zt(){let e=X();if(!j.existsSync(e))return{};try{let t=j.readFileSync(e,`utf8`);return JSON.parse(t)}catch{return{}}}function Bt(e){let t=X(),n=M.dirname(t);j.existsSync(n)||j.mkdirSync(n,{recursive:!0}),j.writeFileSync(t,`${JSON.stringify(e,null,2)}\n`,`utf8`)}function Vt(e,t,n){let r=t.split(`.`),i=e;for(let e=0;e<r.length-1;e++){let t=r[e],n=i[t];(typeof n!=`object`||!n||Array.isArray(n))&&(i[t]={}),i=i[t]}i[r.at(-1)]=n}function Ht(e,t){let n=t.split(`.`),r=e;for(let e of n){if(typeof r!=`object`||!r||Array.isArray(r))return;r=r[e]}return r}var Ut=class{name=`config`;constructor(e){this.options=e}async execute(e){let{logger:t}=e;if(this.options.length===0)return t.error(`No configuration key-value pairs provided`),t.info(`Usage: tnmsc config key=value`),t.info(`Valid keys: ${Y.join(`, `)}`),{success:!1,filesAffected:0,dirsAffected:0,message:`No options provided`};let n=zt(),r=[],i=[];for(let[e,a]of this.options){if(!Lt(e)){r.push(`Invalid key: ${e} (valid keys: ${Y.join(`, `)})`);continue}if(e===`logLevel`&&!Rt(a)){r.push(`Invalid logLevel value: ${a} (must be: trace, debug, info, warn, or error)`);continue}let o=Ht(n,e);Vt(n,e,a),o!==a&&i.push(`${e}=${a}`),t.info(`configuration updated`,{key:e,value:a})}if(i.length>0&&(Bt(n),t.info(`global config written`,{path:X()})),r.length>0)for(let e of r)t.error(e);let a=r.length===0,o=a?`Configuration updated: ${i.join(`, `)}`:`Partial update: ${i.join(`, `)}. Errors: ${r.join(`, `)}`;return{success:a,filesAffected:i.length>0?1:0,dirsAffected:0,message:o}}},Wt=class{name=`config-show`;async execute(e){let{logger:t}=e,n=new Nt,r=n.load(),i=r.sources.map(e=>{let t=n.loadFromFile(e);return{path:e,layer:this.inferLayer(e),config:t.config}}),a={merged:r.config,sources:i};return N.stdout.write(`${JSON.stringify(a)}\n`),t.info(`config shown`,{sources:r.sources.length}),{success:!0,filesAffected:0,dirsAffected:0,message:`Configuration displayed (${i.length} source(s))`}}inferLayer(e){let t=N.cwd();return e.startsWith(t)?`cwd`:`global`}},Gt=class{canHandle(e){return e.subcommand===`config`}createCommand(e){if(e.showFlag)return new Wt;let t=[];for(let n of e.positional){let e=n.indexOf(`=`);e>0&&t.push([n.slice(0,e),n.slice(e+1)])}return new Ut([...e.setOption,...t])}},Kt=class{canHandle(e){return e.subcommand===`dry-run`}createCommand(e){return new fe}},qt=class{canHandle(e){return!0}createCommand(e){return new xe}};function Jt(){return`2026.10314.10606`}var Yt=class{name=`version`;async execute(e){return e.logger.error(`tnmsc v${Jt()}`),{success:!0,filesAffected:0,dirsAffected:0,message:`Version displayed`}}};const Z=`tnmsc`,Xt=`
10
+ `)}`)}mergeConfigs(e){if(e.length===0)return{};let t=e[0];return e.length===1&&t!=null?t:[...e].reverse().reduce((e,t)=>{let n=this.mergeAindex(e.aindex,t.aindex),r=this.mergeOutputScopeOptions(e.outputScopes,t.outputScopes),i=this.mergeCleanupProtectionOptions(e.cleanupProtection,t.cleanupProtection);return{...e,...t,...n==null?{}:{aindex:n},...r==null?{}:{outputScopes:r},...i==null?{}:{cleanupProtection:i}}},{})}mergeAindex(e,t){if(!(e==null&&t==null))return e==null?t:t==null?e:{dir:t.dir??e.dir,skills:{...e.skills,...t.skills},commands:{...e.commands,...t.commands},subAgents:{...e.subAgents,...t.subAgents},rules:{...e.rules,...t.rules},globalPrompt:{...e.globalPrompt,...t.globalPrompt},workspacePrompt:{...e.workspacePrompt,...t.workspacePrompt},app:{...e.app,...t.app},ext:{...e.ext,...t.ext},arch:{...e.arch,...t.arch}}}mergeOutputScopeTopics(e,t){if(!(e==null&&t==null))return e==null?t:t==null?e:{...e,...t}}mergeOutputScopeOptions(e,t){if(e==null&&t==null)return;if(e==null)return t;if(t==null)return e;let n={};for(let[t,r]of Object.entries(e.plugins??{}))r!=null&&(n[t]={...r});for(let[e,r]of Object.entries(t.plugins??{})){let t=this.mergeOutputScopeTopics(n[e],r);t!=null&&(n[e]=t)}return Object.keys(n).length===0?{}:{plugins:n}}mergeCleanupProtectionOptions(e,t){if(!(e==null&&t==null))return e==null?t:t==null?e:{rules:[...e.rules??[],...t.rules??[]]}}resolveTilde(e){return e.startsWith(`~`)?M.join(P.homedir(),e.slice(1)):e}};let q=null;function Pt(e){return(e||!q)&&(q=new Nt(e)),q}let J=function(e){return e[e.Flags=0]=`Flags`,e[e.Unknown=1]=`Unknown`,e[e.Subcommand=2]=`Subcommand`,e}({});var Ft=class{factories=[];register(e){this.factories.push(e),this.factories.sort((e,t)=>e.priority-t.priority)}registerWithPriority(e,t){let n={priority:t,canHandle:t=>e.canHandle(t),createCommand:t=>e.createCommand(t)};this.factories.push(n),this.factories.sort((e,t)=>e.priority-t.priority)}resolve(e){for(let t of this.factories)if(t.priority<=J.Unknown&&t.canHandle(e))return t.createCommand(e);for(let t of this.factories)if(t.priority===J.Subcommand&&t.canHandle(e))return t.createCommand(e);for(let t of this.factories)if(t.canHandle(e))return t.createCommand(e);throw Error(`No command factory found for the given arguments`)}},It=class{canHandle(e){return e.subcommand===`clean`}createCommand(e){return e.dryRun?new ie:new _e}};const Y=[`workspaceDir`,`aindex.skills.src`,`aindex.skills.dist`,`aindex.commands.src`,`aindex.commands.dist`,`aindex.subAgents.src`,`aindex.subAgents.dist`,`aindex.rules.src`,`aindex.rules.dist`,`aindex.globalPrompt.src`,`aindex.globalPrompt.dist`,`aindex.workspacePrompt.src`,`aindex.workspacePrompt.dist`,`aindex.app.src`,`aindex.app.dist`,`aindex.ext.src`,`aindex.ext.dist`,`aindex.arch.src`,`aindex.arch.dist`,`logLevel`];function Lt(e){return Y.includes(e)}function Rt(e){return[`trace`,`debug`,`info`,`warn`,`error`].includes(e)}function X(){return M.join(P.homedir(),Mt,jt)}function zt(){let e=X();if(!j.existsSync(e))return{};try{let t=j.readFileSync(e,`utf8`);return JSON.parse(t)}catch{return{}}}function Bt(e){let t=X(),n=M.dirname(t);j.existsSync(n)||j.mkdirSync(n,{recursive:!0}),j.writeFileSync(t,`${JSON.stringify(e,null,2)}\n`,`utf8`)}function Vt(e,t,n){let r=t.split(`.`),i=e;for(let e=0;e<r.length-1;e++){let t=r[e],n=i[t];(typeof n!=`object`||!n||Array.isArray(n))&&(i[t]={}),i=i[t]}i[r.at(-1)]=n}function Ht(e,t){let n=t.split(`.`),r=e;for(let e of n){if(typeof r!=`object`||!r||Array.isArray(r))return;r=r[e]}return r}var Ut=class{name=`config`;constructor(e){this.options=e}async execute(e){let{logger:t}=e;if(this.options.length===0)return t.error(`No configuration key-value pairs provided`),t.info(`Usage: tnmsc config key=value`),t.info(`Valid keys: ${Y.join(`, `)}`),{success:!1,filesAffected:0,dirsAffected:0,message:`No options provided`};let n=zt(),r=[],i=[];for(let[e,a]of this.options){if(!Lt(e)){r.push(`Invalid key: ${e} (valid keys: ${Y.join(`, `)})`);continue}if(e===`logLevel`&&!Rt(a)){r.push(`Invalid logLevel value: ${a} (must be: trace, debug, info, warn, or error)`);continue}let o=Ht(n,e);Vt(n,e,a),o!==a&&i.push(`${e}=${a}`),t.info(`configuration updated`,{key:e,value:a})}if(i.length>0&&(Bt(n),t.info(`global config written`,{path:X()})),r.length>0)for(let e of r)t.error(e);let a=r.length===0,o=a?`Configuration updated: ${i.join(`, `)}`:`Partial update: ${i.join(`, `)}. Errors: ${r.join(`, `)}`;return{success:a,filesAffected:i.length>0?1:0,dirsAffected:0,message:o}}},Wt=class{name=`config-show`;async execute(e){let{logger:t}=e,n=new Nt,r=n.load(),i=r.sources.map(e=>{let t=n.loadFromFile(e);return{path:e,layer:this.inferLayer(e),config:t.config}}),a={merged:r.config,sources:i};return N.stdout.write(`${JSON.stringify(a)}\n`),t.info(`config shown`,{sources:r.sources.length}),{success:!0,filesAffected:0,dirsAffected:0,message:`Configuration displayed (${i.length} source(s))`}}inferLayer(e){let t=N.cwd();return e.startsWith(t)?`cwd`:`global`}},Gt=class{canHandle(e){return e.subcommand===`config`}createCommand(e){if(e.showFlag)return new Wt;let t=[];for(let n of e.positional){let e=n.indexOf(`=`);e>0&&t.push([n.slice(0,e),n.slice(e+1)])}return new Ut([...e.setOption,...t])}},Kt=class{canHandle(e){return e.subcommand===`dry-run`}createCommand(e){return new fe}},qt=class{canHandle(e){return!0}createCommand(e){return new xe}};function Jt(){return`2026.10314.10724`}var Yt=class{name=`version`;async execute(e){return e.logger.error(`tnmsc v${Jt()}`),{success:!0,filesAffected:0,dirsAffected:0,message:`Version displayed`}}};const Z=`tnmsc`,Xt=`
11
11
  ${Z} v${Jt()} - Memory Sync CLI
12
12
 
13
13
  Synchronize AI memory and configuration files across projects.
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@truenine/memory-sync-cli",
3
3
  "type": "module",
4
- "version": "2026.10314.10606",
4
+ "version": "2026.10314.10724",
5
5
  "description": "TrueNine Memory Synchronization CLI",
6
6
  "author": "TrueNine",
7
7
  "license": "AGPL-3.0-only",
@@ -61,22 +61,22 @@
61
61
  "vitest": "^4.0.18",
62
62
  "yaml": "2.8.2",
63
63
  "zod": "^4.3.6",
64
- "@truenine/script-runtime": "2026.10314.10606"
64
+ "@truenine/script-runtime": "2026.10314.10724"
65
65
  },
66
66
  "optionalDependencies": {
67
- "@truenine/memory-sync-cli-darwin-x64": "2026.10314.10606",
68
- "@truenine/memory-sync-cli-darwin-arm64": "2026.10314.10606",
69
- "@truenine/memory-sync-cli-linux-arm64-gnu": "2026.10314.10606",
70
- "@truenine/memory-sync-cli-win32-x64-msvc": "2026.10314.10606",
71
- "@truenine/memory-sync-cli-linux-x64-gnu": "2026.10314.10606"
67
+ "@truenine/memory-sync-cli-darwin-x64": "2026.10314.10724",
68
+ "@truenine/memory-sync-cli-darwin-arm64": "2026.10314.10724",
69
+ "@truenine/memory-sync-cli-linux-arm64-gnu": "2026.10314.10724",
70
+ "@truenine/memory-sync-cli-linux-x64-gnu": "2026.10314.10724",
71
+ "@truenine/memory-sync-cli-win32-x64-msvc": "2026.10314.10724"
72
72
  },
73
73
  "devDependencies": {
74
74
  "@types/fs-extra": "^11.0.4",
75
75
  "@types/picomatch": "^4.0.2",
76
76
  "@vitest/coverage-v8": "4.0.18",
77
77
  "zod-to-json-schema": "^3.25.1",
78
- "@truenine/logger": "2026.10314.10606",
79
- "@truenine/md-compiler": "2026.10314.10606"
78
+ "@truenine/logger": "2026.10314.10724",
79
+ "@truenine/md-compiler": "2026.10314.10724"
80
80
  },
81
81
  "scripts": {
82
82
  "build": "run-s build:deps build:napi bundle generate:schema check",