@truenine/memory-sync-cli 2026.10219.12050 → 2026.10219.12358

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
@@ -433,7 +433,7 @@ node_modules/
433
433
  pnpm-lock.yaml
434
434
  .DS_Store
435
435
  `,"public/tnmsc.example.json":`{
436
- "version": "2026.10219.12050",
436
+ "version": "2026.10219.12358",
437
437
  "workspaceDir": "~/project",
438
438
  "shadowSourceProject": {
439
439
  "name": "tnmsc-shadow",
@@ -978,7 +978,7 @@ API 接口 (Spring WebFlux 6.2)
978
978
  - \`controllers/\`: 控制器
979
979
  - \`dto/\`: 数据传输对象
980
980
  \`\`\`
981
- `};const z=Object.fromEntries(Vt.map(e=>[e,{path:e,content:Ht[e]??``}])),Ut={USER_HOME:`~`,WORKSPACE:`$WORKSPACE`},Wt=JSON.parse(z[`public/tnmsc.example.json`].content),Gt={reset:`\x1B[0m`,red:`\x1B[31m`,yellow:`\x1B[33m`,cyan:`\x1B[36m`,magenta:`\x1B[35m`,gray:`\x1B[90m`,blue:`\x1B[34m`,green:`\x1B[32m`,white:`\x1B[37m`,dim:`\x1B[2m`,bgRed:`\x1B[41m`},Kt={red:e=>`${Gt.red}${e}${Gt.reset}`,yellow:e=>`${Gt.yellow}${e}${Gt.reset}`,cyan:e=>`${Gt.cyan}${e}${Gt.reset}`,magenta:e=>`${Gt.magenta}${e}${Gt.reset}`,gray:e=>`${Gt.gray}${e}${Gt.reset}`,blue:e=>`${Gt.blue}${e}${Gt.reset}`,green:e=>`${Gt.green}${e}${Gt.reset}`,white:e=>`${Gt.white}${e}${Gt.reset}`,dim:e=>`${Gt.dim}${e}${Gt.reset}`,bgRed:e=>`${Gt.bgRed}${e}${Gt.reset}`};let qt;const Jt={error:Kt.red,warn:Kt.yellow,info:Kt.cyan,debug:Kt.magenta,trace:Kt.gray,fatal:Kt.bgRed},Yt={silent:0,fatal:1,error:2,warn:3,info:4,debug:5,trace:6};function Xt(e){if(e===null)return Kt.dim(`null`);if(e===void 0)return Kt.dim(`undefined`);if(typeof e==`boolean`)return Kt.yellow(String(e));if(typeof e==`number`)return Kt.blue(String(e));if(typeof e==`string`)return Kt.green(`"${e}"`);if(Array.isArray(e))return e.length===0?`[]`:`[${e.map(e=>Xt(e)).join(`,`)}]`;if(e instanceof Error){let t={name:e.name,message:e.message,stack:e.stack};for(let n of Object.getOwnPropertyNames(e))n!==`name`&&n!==`message`&&n!==`stack`&&(t[n]=e[n]);return Zt(t)}return typeof e==`object`?Zt(e):String(e)}function Zt(e){let t=Object.entries(e);return t.length===0?`{}`:`{${t.map(([e,t])=>`${/^[\w$]+$/.test(e)?Kt.magenta(e):Kt.yellow(`"${e}"`)}:${Xt(t)}`).join(`,`)}}`}function Qt(){let e=new Date;return`${String(e.getHours()).padStart(2,`0`)}:${String(e.getMinutes()).padStart(2,`0`)}:${String(e.getSeconds()).padStart(2,`0`)}.${String(e.getMilliseconds()).padStart(3,`0`)}`}function $t(e,t,n,r){let i=Qt(),a=Jt[e]??Kt.white,o=String(n),s=r!=null&&Object.keys(r).length>0,c=o===``,l={$:[i,e,t],_:s?c?r:{[o]:r}:n},u={$:[i,a(e.toUpperCase()),t]},d=s?c?r:{[o]:r}:n,f=Zt({...u,_:d});return e===`error`||e===`fatal`?console.error(f):e===`warn`?console.warn(f):e===`debug`||e===`trace`?console.debug(f):console.log(f),l}function en(e,t,n){let r=Yt[e],i=Yt[n];return(n,...a)=>r>i?{$:[Qt(),e,t],_:n}:typeof n==`string`?$t(e,t,n,a.length===1&&typeof a[0]==`object`&&a[0]!==null?a[0]:a.length>0?{args:a}:void 0):typeof n==`object`&&n?$t(e,t,``,n):$t(e,t,n)}function tn(e){qt=e}function nn(){return qt}function rn(e,t){let n=t??qt??process.env.LOG_LEVEL??`info`;return{error:en(`error`,e,n),warn:en(`warn`,e,n),info:en(`info`,e,n),debug:en(`debug`,e,n),trace:en(`trace`,e,n),fatal:en(`fatal`,e,n)}}const an=`.tnmsc.json`,on=`.aindex`;function sn(){return f.join(p.homedir(),on,an)}function cn(){return{...Wt}}function ln(e,t){let n=sn(),r=f.dirname(n);d.existsSync(r)||d.mkdirSync(r,{recursive:!0}),d.writeFileSync(n,`${JSON.stringify(e,null,2)}\n`,`utf8`),t.info(`global config created`,{path:n})}function un(e,t){let n=[];if(typeof e!=`object`||!e||Array.isArray(e))return n.push(`${t} must be an object with "src" and "dist" string fields`),n;let r=e;return(!(`src`in r)||typeof r.src!=`string`)&&n.push(`${t}.src must be a string`),(!(`dist`in r)||typeof r.dist!=`string`)&&n.push(`${t}.dist must be a string`),n}function dn(e,t){let n=[];if(typeof e!=`object`||!e||Array.isArray(e))return n.push(`${t} must be an object`),{errors:n,config:void 0};let r=e;(!(`name`in r)||typeof r.name!=`string`)&&n.push(`${t}.name must be a string`);let i=[`skill`,`fastCommand`,`subAgent`,`rule`,`globalMemory`,`workspaceMemory`,`project`],a={};for(let e of i)if(e in r){let i=un(r[e],`${t}.${e}`);if(n.push(...i),i.length===0){let t=r[e];a[e]={src:t.src,dist:t.dist}}}return n.length>0?{errors:n,config:void 0}:{errors:n,config:{name:r.name,skill:a.skill??{src:`src/skills`,dist:`dist/skills`},fastCommand:a.fastCommand??{src:`src/commands`,dist:`dist/commands`},subAgent:a.subAgent??{src:`src/agents`,dist:`dist/agents`},rule:a.rule??{src:`src/rules`,dist:`dist/rules`},globalMemory:a.globalMemory??{src:`app/global.cn.mdx`,dist:`dist/global.mdx`},workspaceMemory:a.workspaceMemory??{src:`app/workspace.cn.mdx`,dist:`dist/app/workspace.mdx`},project:a.project??{src:`app`,dist:`dist/app`}}}}var fn=class{configFileName;searchCwd;searchGlobal;customSearchPaths;logger;constructor(e={}){this.configFileName=e.configFileName??an,this.searchCwd=e.searchCwd??!0,this.searchGlobal=e.searchGlobal??!0,this.customSearchPaths=e.searchPaths??[],this.logger=rn(`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(),on,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){try{let n=JSON.parse(e);if(typeof n!=`object`||!n||Array.isArray(n))throw Error(`Config must be a JSON object`);return this.validateConfig(n,t)}catch(e){throw e instanceof SyntaxError?Error(`Invalid JSON in ${t}: ${e.message}`):e}}validateConfig(e,t){let n={},r=[];if(`version`in e&&(typeof e.version==`string`?n.version=e.version:r.push(`version must be a string`)),`workspaceDir`in e&&(typeof e.workspaceDir==`string`?n.workspaceDir=e.workspaceDir:r.push(`workspaceDir must be a string`)),`shadowSourceProject`in e){let{errors:t,config:i}=dn(e.shadowSourceProject,`shadowSourceProject`);r.push(...t),i!=null&&(n.shadowSourceProject=i)}if(`logLevel`in e){let t=[`trace`,`debug`,`info`,`warn`,`error`],i=e.logLevel;typeof i==`string`&&t.includes(i)?n.logLevel=i:r.push(`logLevel must be one of: ${t.join(`, `)}`)}if(`profile`in e){let t=e.profile;typeof t==`object`&&t&&!Array.isArray(t)?n.profile=t:r.push(`profile must be an object`)}if(`tool`in e){let t=e.tool;if(typeof t==`object`&&t&&!Array.isArray(t)){let e=t,i={},a=!0;for(let[t,n]of Object.entries(e))typeof n==`string`||n===void 0?i[t]=n:(r.push(`tool.${t} must be a string`),a=!1);a&&(n.tool=i)}else r.push(`tool must be an object`)}if(`fastCommandSeriesOptions`in e){let t=e.fastCommandSeriesOptions;typeof t==`object`&&t&&!Array.isArray(t)?n.fastCommandSeriesOptions=t:r.push(`fastCommandSeriesOptions must be an object`)}return r.length>0&&this.logger.warn(`validation warnings`,{path:t,errors:r}),n}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.mergeShadowSourceProject(e.shadowSourceProject,t.shadowSourceProject);return{...e,...t,...n==null?{}:{shadowSourceProject:n}}},{})}mergeShadowSourceProject(e,t){if(!(e==null&&t==null))return e==null?t:t==null?e:{name:t.name??e.name,skill:{...e.skill,...t.skill},fastCommand:{...e.fastCommand,...t.fastCommand},subAgent:{...e.subAgent,...t.subAgent},rule:{...e.rule,...t.rule},globalMemory:{...e.globalMemory,...t.globalMemory},workspaceMemory:{...e.workspaceMemory,...t.workspaceMemory},project:{...e.project,...t.project}}}resolveTilde(e){return e.startsWith(`~`)?f.join(p.homedir(),e.slice(1)):e}};let pn=null;function mn(e){return(e||!pn)&&(pn=new fn(e)),pn}function hn(e){return mn().load(e)}function gn(){let e=rn(`ConfigLoader`),t=sn();if(!d.existsSync(t))return e.warn(`global config not found, creating default config`,{path:t}),ln(cn(),e),{valid:!0,exists:!1,errors:[],shouldExit:!1};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}),vn(t,e,[`Failed to read config: ${r}`])}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}),vn(t,e,[`Invalid JSON: ${r}`])}if(typeof r!=`object`||!r||Array.isArray(r))return e.error(`global config must be a JSON object`,{path:t}),vn(t,e,[`Config must be a JSON object`]);let i=_n(r);if(i.length>0){for(let n of i)e.error(`config validation error`,{path:t,error:n});return vn(t,e,i)}return{valid:!0,exists:!0,errors:[],shouldExit:!1}}function _n(e){let t=[];if(`version`in e&&typeof e.version!=`string`&&t.push(`version must be a string`),`workspaceDir`in e&&typeof e.workspaceDir!=`string`&&t.push(`workspaceDir must be a string`),`shadowSourceProject`in e){let{errors:n}=dn(e.shadowSourceProject,`shadowSourceProject`);t.push(...n)}if(`logLevel`in e){let n=[`trace`,`debug`,`info`,`warn`,`error`],r=e.logLevel;(typeof r!=`string`||!n.includes(r))&&t.push(`logLevel must be one of: ${n.join(`, `)}`)}if(`profile`in e){let n=e.profile;(typeof n!=`object`||!n||Array.isArray(n))&&t.push(`profile must be an object`)}if(!(`tool`in e))return t;let n=e.tool;if(typeof n!=`object`||!n||Array.isArray(n))t.push(`tool must be an object`);else{let e=n;for(let[n,r]of Object.entries(e))typeof r!=`string`&&r!==void 0&&t.push(`tool.${n} must be a string`)}return t}function vn(e,t,n){try{d.unlinkSync(e),t.info(`deleted invalid config`,{path:e})}catch{t.warn(`failed to delete invalid config`,{path:e})}return ln(cn(),t),t.error(`recreated default config, please review and restart`,{path:e}),{valid:!1,exists:!0,errors:n,shouldExit:!0}}const yn=[`workspaceDir`,`shadowSourceProject.name`,`shadowSourceProject.skill.src`,`shadowSourceProject.skill.dist`,`shadowSourceProject.fastCommand.src`,`shadowSourceProject.fastCommand.dist`,`shadowSourceProject.subAgent.src`,`shadowSourceProject.subAgent.dist`,`shadowSourceProject.rule.src`,`shadowSourceProject.rule.dist`,`shadowSourceProject.globalMemory.src`,`shadowSourceProject.globalMemory.dist`,`shadowSourceProject.workspaceMemory.src`,`shadowSourceProject.workspaceMemory.dist`,`shadowSourceProject.project.src`,`shadowSourceProject.project.dist`,`logLevel`];function bn(e){return yn.includes(e)}function xn(e){return[`trace`,`debug`,`info`,`warn`,`error`].includes(e)}function Sn(){return f.join(p.homedir(),on,an)}function Cn(){let e=Sn();if(!d.existsSync(e))return{};try{let t=d.readFileSync(e,`utf8`);return JSON.parse(t)}catch{return{}}}function wn(e){let t=Sn(),n=f.dirname(t);d.existsSync(n)||d.mkdirSync(n,{recursive:!0}),d.writeFileSync(t,`${JSON.stringify(e,null,2)}\n`,`utf8`)}function Tn(e,t,n){let r=t.split(`.`),i=e;for(let e=0;e<r.length-1;e++){let t=r[e];(typeof i[t]!=`object`||i[t]===null)&&(i[t]={}),i=i[t]}i[r.at(-1)]=n}function En(e,t){let n=t.split(`.`),r=e;for(let e of n){if(typeof r!=`object`||!r)return;r=r[e]}return r}var Dn=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: ${yn.join(`, `)}`),{success:!1,filesAffected:0,dirsAffected:0,message:`No options provided`};let n=Cn(),r=[],i=[];for(let[e,a]of this.options){if(!bn(e)){r.push(`Invalid key: ${e} (valid keys: ${yn.join(`, `)})`);continue}if(e===`logLevel`&&!xn(a)){r.push(`Invalid logLevel value: ${a} (must be: trace, debug, info, warn, or error)`);continue}let o=En(n,e);Tn(n,e,a),o!==a&&i.push(`${e}=${a}`),t.info(`configuration updated`,{key:e,value:a})}if(i.length>0&&(wn(n),t.info(`global config written`,{path:Sn()})),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}}},On=class{name=`config-show`;async execute(e){let{logger:t}=e,n=new fn,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`}},kn=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 ut(n,i);t.info(`collected outputs for cleanup`,{dryRun:!0,projectDirs:a.projectDirs.length,projectFiles:a.projectFiles.length,globalDirs:a.globalDirs.length,globalFiles:a.globalFiles.length});let{filesToDelete:o,dirsToDelete:s}=await ht(n,await dt(n,i),i);return this.logDryRunFiles(o,t),this.logDryRunDirectories(s,t),await ft(n,i),t.info(`clean complete`,{dryRun:!0,filesAffected:o.length,dirsAffected:s.length}),{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})}}},An=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=r(!0),a=await pt(n,i),o=await mt(n.filter(e=>!!(a.get(e.name)?.project??!0)),i),s=0,c=0;for(let[e,n]of o)s+=n.files.length,c+=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:s,totalDirs:c,dryRun:!0}),{success:!0,filesAffected:s,dirsAffected:c,message:`Dry-run complete, no files were written`}}},jn=class{name=`execute`;async execute(e){let{logger:t,outputPlugins:n,createCleanContext:r,createWriteContext:i}=e;t.info(`started`,{command:`execute`});let a=await vt(n,r(!1),t,{executeHooks:!1});t.info(`cleanup complete`,{deletedFiles:a.deletedFiles,deletedDirs:a.deletedDirs});let o=i(!1),s=await pt(n,o),c=await mt(n.filter(e=>s.get(e.name)?.project??!0),o),l=0,u=0;for(let e of c.values())l+=e.files.length,u+=e.dirs.length;return t.info(`complete`,{command:`execute`,pluginCount:c.size}),{success:!0,filesAffected:l,dirsAffected:u}}};function Mn(){return`2026.10219.12050`}var Nn=class{name=`version`;async execute(e){return e.logger.error(`tnmsc v${Mn()}`),{success:!0,filesAffected:0,dirsAffected:0,message:`Version displayed`}}};const Pn=`tnmsc`,Fn=`
981
+ `};const z=Object.fromEntries(Vt.map(e=>[e,{path:e,content:Ht[e]??``}])),Ut={USER_HOME:`~`,WORKSPACE:`$WORKSPACE`},Wt=JSON.parse(z[`public/tnmsc.example.json`].content),Gt={reset:`\x1B[0m`,red:`\x1B[31m`,yellow:`\x1B[33m`,cyan:`\x1B[36m`,magenta:`\x1B[35m`,gray:`\x1B[90m`,blue:`\x1B[34m`,green:`\x1B[32m`,white:`\x1B[37m`,dim:`\x1B[2m`,bgRed:`\x1B[41m`},Kt={red:e=>`${Gt.red}${e}${Gt.reset}`,yellow:e=>`${Gt.yellow}${e}${Gt.reset}`,cyan:e=>`${Gt.cyan}${e}${Gt.reset}`,magenta:e=>`${Gt.magenta}${e}${Gt.reset}`,gray:e=>`${Gt.gray}${e}${Gt.reset}`,blue:e=>`${Gt.blue}${e}${Gt.reset}`,green:e=>`${Gt.green}${e}${Gt.reset}`,white:e=>`${Gt.white}${e}${Gt.reset}`,dim:e=>`${Gt.dim}${e}${Gt.reset}`,bgRed:e=>`${Gt.bgRed}${e}${Gt.reset}`};let qt;const Jt={error:Kt.red,warn:Kt.yellow,info:Kt.cyan,debug:Kt.magenta,trace:Kt.gray,fatal:Kt.bgRed},Yt={silent:0,fatal:1,error:2,warn:3,info:4,debug:5,trace:6};function Xt(e){if(e===null)return Kt.dim(`null`);if(e===void 0)return Kt.dim(`undefined`);if(typeof e==`boolean`)return Kt.yellow(String(e));if(typeof e==`number`)return Kt.blue(String(e));if(typeof e==`string`)return Kt.green(`"${e}"`);if(Array.isArray(e))return e.length===0?`[]`:`[${e.map(e=>Xt(e)).join(`,`)}]`;if(e instanceof Error){let t={name:e.name,message:e.message,stack:e.stack};for(let n of Object.getOwnPropertyNames(e))n!==`name`&&n!==`message`&&n!==`stack`&&(t[n]=e[n]);return Zt(t)}return typeof e==`object`?Zt(e):String(e)}function Zt(e){let t=Object.entries(e);return t.length===0?`{}`:`{${t.map(([e,t])=>`${/^[\w$]+$/.test(e)?Kt.magenta(e):Kt.yellow(`"${e}"`)}:${Xt(t)}`).join(`,`)}}`}function Qt(){let e=new Date;return`${String(e.getHours()).padStart(2,`0`)}:${String(e.getMinutes()).padStart(2,`0`)}:${String(e.getSeconds()).padStart(2,`0`)}.${String(e.getMilliseconds()).padStart(3,`0`)}`}function $t(e,t,n,r){let i=Qt(),a=Jt[e]??Kt.white,o=String(n),s=r!=null&&Object.keys(r).length>0,c=o===``,l={$:[i,e,t],_:s?c?r:{[o]:r}:n},u={$:[i,a(e.toUpperCase()),t]},d=s?c?r:{[o]:r}:n,f=Zt({...u,_:d});return e===`error`||e===`fatal`?console.error(f):e===`warn`?console.warn(f):e===`debug`||e===`trace`?console.debug(f):console.log(f),l}function en(e,t,n){let r=Yt[e],i=Yt[n];return(n,...a)=>r>i?{$:[Qt(),e,t],_:n}:typeof n==`string`?$t(e,t,n,a.length===1&&typeof a[0]==`object`&&a[0]!==null?a[0]:a.length>0?{args:a}:void 0):typeof n==`object`&&n?$t(e,t,``,n):$t(e,t,n)}function tn(e){qt=e}function nn(){return qt}function rn(e,t){let n=t??qt??process.env.LOG_LEVEL??`info`;return{error:en(`error`,e,n),warn:en(`warn`,e,n),info:en(`info`,e,n),debug:en(`debug`,e,n),trace:en(`trace`,e,n),fatal:en(`fatal`,e,n)}}const an=`.tnmsc.json`,on=`.aindex`;function sn(){return f.join(p.homedir(),on,an)}function cn(){return{...Wt}}function ln(e,t){let n=sn(),r=f.dirname(n);d.existsSync(r)||d.mkdirSync(r,{recursive:!0}),d.writeFileSync(n,`${JSON.stringify(e,null,2)}\n`,`utf8`),t.info(`global config created`,{path:n})}function un(e,t){let n=[];if(typeof e!=`object`||!e||Array.isArray(e))return n.push(`${t} must be an object with "src" and "dist" string fields`),n;let r=e;return(!(`src`in r)||typeof r.src!=`string`)&&n.push(`${t}.src must be a string`),(!(`dist`in r)||typeof r.dist!=`string`)&&n.push(`${t}.dist must be a string`),n}function dn(e,t){let n=[];if(typeof e!=`object`||!e||Array.isArray(e))return n.push(`${t} must be an object`),{errors:n,config:void 0};let r=e;(!(`name`in r)||typeof r.name!=`string`)&&n.push(`${t}.name must be a string`);let i=[`skill`,`fastCommand`,`subAgent`,`rule`,`globalMemory`,`workspaceMemory`,`project`],a={};for(let e of i)if(e in r){let i=un(r[e],`${t}.${e}`);if(n.push(...i),i.length===0){let t=r[e];a[e]={src:t.src,dist:t.dist}}}return n.length>0?{errors:n,config:void 0}:{errors:n,config:{name:r.name,skill:a.skill??{src:`src/skills`,dist:`dist/skills`},fastCommand:a.fastCommand??{src:`src/commands`,dist:`dist/commands`},subAgent:a.subAgent??{src:`src/agents`,dist:`dist/agents`},rule:a.rule??{src:`src/rules`,dist:`dist/rules`},globalMemory:a.globalMemory??{src:`app/global.cn.mdx`,dist:`dist/global.mdx`},workspaceMemory:a.workspaceMemory??{src:`app/workspace.cn.mdx`,dist:`dist/app/workspace.mdx`},project:a.project??{src:`app`,dist:`dist/app`}}}}var fn=class{configFileName;searchCwd;searchGlobal;customSearchPaths;logger;constructor(e={}){this.configFileName=e.configFileName??an,this.searchCwd=e.searchCwd??!0,this.searchGlobal=e.searchGlobal??!0,this.customSearchPaths=e.searchPaths??[],this.logger=rn(`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(),on,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){try{let n=JSON.parse(e);if(typeof n!=`object`||!n||Array.isArray(n))throw Error(`Config must be a JSON object`);return this.validateConfig(n,t)}catch(e){throw e instanceof SyntaxError?Error(`Invalid JSON in ${t}: ${e.message}`):e}}validateConfig(e,t){let n={},r=[];if(`version`in e&&(typeof e.version==`string`?n.version=e.version:r.push(`version must be a string`)),`workspaceDir`in e&&(typeof e.workspaceDir==`string`?n.workspaceDir=e.workspaceDir:r.push(`workspaceDir must be a string`)),`shadowSourceProject`in e){let{errors:t,config:i}=dn(e.shadowSourceProject,`shadowSourceProject`);r.push(...t),i!=null&&(n.shadowSourceProject=i)}if(`logLevel`in e){let t=[`trace`,`debug`,`info`,`warn`,`error`],i=e.logLevel;typeof i==`string`&&t.includes(i)?n.logLevel=i:r.push(`logLevel must be one of: ${t.join(`, `)}`)}if(`profile`in e){let t=e.profile;typeof t==`object`&&t&&!Array.isArray(t)?n.profile=t:r.push(`profile must be an object`)}if(`tool`in e){let t=e.tool;if(typeof t==`object`&&t&&!Array.isArray(t)){let e=t,i={},a=!0;for(let[t,n]of Object.entries(e))typeof n==`string`||n===void 0?i[t]=n:(r.push(`tool.${t} must be a string`),a=!1);a&&(n.tool=i)}else r.push(`tool must be an object`)}if(`fastCommandSeriesOptions`in e){let t=e.fastCommandSeriesOptions;typeof t==`object`&&t&&!Array.isArray(t)?n.fastCommandSeriesOptions=t:r.push(`fastCommandSeriesOptions must be an object`)}return r.length>0&&this.logger.warn(`validation warnings`,{path:t,errors:r}),n}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.mergeShadowSourceProject(e.shadowSourceProject,t.shadowSourceProject);return{...e,...t,...n==null?{}:{shadowSourceProject:n}}},{})}mergeShadowSourceProject(e,t){if(!(e==null&&t==null))return e==null?t:t==null?e:{name:t.name??e.name,skill:{...e.skill,...t.skill},fastCommand:{...e.fastCommand,...t.fastCommand},subAgent:{...e.subAgent,...t.subAgent},rule:{...e.rule,...t.rule},globalMemory:{...e.globalMemory,...t.globalMemory},workspaceMemory:{...e.workspaceMemory,...t.workspaceMemory},project:{...e.project,...t.project}}}resolveTilde(e){return e.startsWith(`~`)?f.join(p.homedir(),e.slice(1)):e}};let pn=null;function mn(e){return(e||!pn)&&(pn=new fn(e)),pn}function hn(e){return mn().load(e)}function gn(){let e=rn(`ConfigLoader`),t=sn();if(!d.existsSync(t))return e.warn(`global config not found, creating default config`,{path:t}),ln(cn(),e),{valid:!0,exists:!1,errors:[],shouldExit:!1};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}),vn(t,e,[`Failed to read config: ${r}`])}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}),vn(t,e,[`Invalid JSON: ${r}`])}if(typeof r!=`object`||!r||Array.isArray(r))return e.error(`global config must be a JSON object`,{path:t}),vn(t,e,[`Config must be a JSON object`]);let i=_n(r);if(i.length>0){for(let n of i)e.error(`config validation error`,{path:t,error:n});return vn(t,e,i)}return{valid:!0,exists:!0,errors:[],shouldExit:!1}}function _n(e){let t=[];if(`version`in e&&typeof e.version!=`string`&&t.push(`version must be a string`),`workspaceDir`in e&&typeof e.workspaceDir!=`string`&&t.push(`workspaceDir must be a string`),`shadowSourceProject`in e){let{errors:n}=dn(e.shadowSourceProject,`shadowSourceProject`);t.push(...n)}if(`logLevel`in e){let n=[`trace`,`debug`,`info`,`warn`,`error`],r=e.logLevel;(typeof r!=`string`||!n.includes(r))&&t.push(`logLevel must be one of: ${n.join(`, `)}`)}if(`profile`in e){let n=e.profile;(typeof n!=`object`||!n||Array.isArray(n))&&t.push(`profile must be an object`)}if(!(`tool`in e))return t;let n=e.tool;if(typeof n!=`object`||!n||Array.isArray(n))t.push(`tool must be an object`);else{let e=n;for(let[n,r]of Object.entries(e))typeof r!=`string`&&r!==void 0&&t.push(`tool.${n} must be a string`)}return t}function vn(e,t,n){try{d.unlinkSync(e),t.info(`deleted invalid config`,{path:e})}catch{t.warn(`failed to delete invalid config`,{path:e})}return ln(cn(),t),t.error(`recreated default config, please review and restart`,{path:e}),{valid:!1,exists:!0,errors:n,shouldExit:!0}}const yn=[`workspaceDir`,`shadowSourceProject.name`,`shadowSourceProject.skill.src`,`shadowSourceProject.skill.dist`,`shadowSourceProject.fastCommand.src`,`shadowSourceProject.fastCommand.dist`,`shadowSourceProject.subAgent.src`,`shadowSourceProject.subAgent.dist`,`shadowSourceProject.rule.src`,`shadowSourceProject.rule.dist`,`shadowSourceProject.globalMemory.src`,`shadowSourceProject.globalMemory.dist`,`shadowSourceProject.workspaceMemory.src`,`shadowSourceProject.workspaceMemory.dist`,`shadowSourceProject.project.src`,`shadowSourceProject.project.dist`,`logLevel`];function bn(e){return yn.includes(e)}function xn(e){return[`trace`,`debug`,`info`,`warn`,`error`].includes(e)}function Sn(){return f.join(p.homedir(),on,an)}function Cn(){let e=Sn();if(!d.existsSync(e))return{};try{let t=d.readFileSync(e,`utf8`);return JSON.parse(t)}catch{return{}}}function wn(e){let t=Sn(),n=f.dirname(t);d.existsSync(n)||d.mkdirSync(n,{recursive:!0}),d.writeFileSync(t,`${JSON.stringify(e,null,2)}\n`,`utf8`)}function Tn(e,t,n){let r=t.split(`.`),i=e;for(let e=0;e<r.length-1;e++){let t=r[e];(typeof i[t]!=`object`||i[t]===null)&&(i[t]={}),i=i[t]}i[r.at(-1)]=n}function En(e,t){let n=t.split(`.`),r=e;for(let e of n){if(typeof r!=`object`||!r)return;r=r[e]}return r}var Dn=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: ${yn.join(`, `)}`),{success:!1,filesAffected:0,dirsAffected:0,message:`No options provided`};let n=Cn(),r=[],i=[];for(let[e,a]of this.options){if(!bn(e)){r.push(`Invalid key: ${e} (valid keys: ${yn.join(`, `)})`);continue}if(e===`logLevel`&&!xn(a)){r.push(`Invalid logLevel value: ${a} (must be: trace, debug, info, warn, or error)`);continue}let o=En(n,e);Tn(n,e,a),o!==a&&i.push(`${e}=${a}`),t.info(`configuration updated`,{key:e,value:a})}if(i.length>0&&(wn(n),t.info(`global config written`,{path:Sn()})),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}}},On=class{name=`config-show`;async execute(e){let{logger:t}=e,n=new fn,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`}},kn=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 ut(n,i);t.info(`collected outputs for cleanup`,{dryRun:!0,projectDirs:a.projectDirs.length,projectFiles:a.projectFiles.length,globalDirs:a.globalDirs.length,globalFiles:a.globalFiles.length});let{filesToDelete:o,dirsToDelete:s}=await ht(n,await dt(n,i),i);return this.logDryRunFiles(o,t),this.logDryRunDirectories(s,t),await ft(n,i),t.info(`clean complete`,{dryRun:!0,filesAffected:o.length,dirsAffected:s.length}),{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})}}},An=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=r(!0),a=await pt(n,i),o=await mt(n.filter(e=>!!(a.get(e.name)?.project??!0)),i),s=0,c=0;for(let[e,n]of o)s+=n.files.length,c+=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:s,totalDirs:c,dryRun:!0}),{success:!0,filesAffected:s,dirsAffected:c,message:`Dry-run complete, no files were written`}}},jn=class{name=`execute`;async execute(e){let{logger:t,outputPlugins:n,createCleanContext:r,createWriteContext:i}=e;t.info(`started`,{command:`execute`});let a=await vt(n,r(!1),t,{executeHooks:!1});t.info(`cleanup complete`,{deletedFiles:a.deletedFiles,deletedDirs:a.deletedDirs});let o=i(!1),s=await pt(n,o),c=await mt(n.filter(e=>s.get(e.name)?.project??!0),o),l=0,u=0;for(let e of c.values())l+=e.files.length,u+=e.dirs.length;return t.info(`complete`,{command:`execute`,pluginCount:c.size}),{success:!0,filesAffected:l,dirsAffected:u}}};function Mn(){return`2026.10219.12358`}var Nn=class{name=`version`;async execute(e){return e.logger.error(`tnmsc v${Mn()}`),{success:!0,filesAffected:0,dirsAffected:0,message:`Version displayed`}}};const Pn=`tnmsc`,Fn=`
982
982
  ${Pn} v${Mn()} - Memory Sync CLI
983
983
 
984
984
  Synchronize AI memory and configuration files across projects.
@@ -1039,7 +1039,7 @@ CONFIG OPTIONS:
1039
1039
  CONFIGURATION:
1040
1040
  Configure via plugin.config.ts in your project root.
1041
1041
  See documentation for detailed configuration options.
1042
- `.trim();var In=class{name=`help`;async execute(e){return console.log(Fn),{success:!0,filesAffected:0,dirsAffected:0,message:`Help displayed`}}};function Ln(e,t){let n=f.join(e,`.git`),r=d.existsSync(n);return r?t?.info(`version control detected`,{path:n}):t?.warn(`no version control detected, please use git to manage your shadow source project`,{path:e}),{hasGit:r,gitPath:n}}function Rn(e,t,n,r,i){if(n==null)return r;let a=f.relative(t,e),o=f.join(n,a);return d.existsSync(o)&&d.statSync(o).isFile()?(i?.debug(`copying from source`,{path:o}),d.readFileSync(o,`utf8`)):r}function zn(e,t={}){let{sourceDir:n,logger:r}=t,i=[],a=[],o=[],s=[],c=new Set;d.existsSync(e)?(o.push(e),r?.debug(`directory exists`,{path:e})):(d.mkdirSync(e,{recursive:!0}),i.push(e),c.add(e),r?.info(`created directory`,{path:e}));for(let t of Object.values(z)){let o=t.path,l=f.join(e,o),u=f.dirname(l);if(!d.existsSync(u)){d.mkdirSync(u,{recursive:!0});let t=u;for(;t!==e&&!c.has(t);)c.add(t),i.push(t),r?.info(`created directory`,{path:t}),t=f.dirname(t)}if(d.existsSync(l))s.push(l),r?.debug(`file exists`,{path:l});else{let i=Rn(l,e,n,t.content,r);d.writeFileSync(l,i,`utf8`),a.push(l),r?.info(`created file`,{path:l})}}return{success:!0,rootPath:e,createdDirs:i,createdFiles:a,existedDirs:o,existedFiles:s}}function Bn(e){let t=e;return t.startsWith(`~`)&&(t=f.join(p.homedir(),t.slice(1))),f.normalize(t)}var Vn=class{name=`init`;async execute(e){let{logger:t,userConfigOptions:n}=e;t.info(`initializing shadow source project structure`,{command:`init`});let r=Bn(n.workspaceDir),i=zn(f.join(r,n.shadowSourceProject.name),{logger:t}),a=i.createdDirs.length===0&&i.createdFiles.length===0?`All ${i.existedDirs.length} directories and ${i.existedFiles.length} files already exist`:`Created ${i.createdDirs.length} directories and ${i.createdFiles.length} files (${i.existedDirs.length} dirs, ${i.existedFiles.length} files already existed)`;return t.info(`initialization complete`,{dirsCreated:i.createdDirs.length,filesCreated:i.createdFiles.length,dirsExisted:i.existedDirs.length,filesExisted:i.existedFiles.length}),{success:i.success,filesAffected:i.createdFiles.length,dirsAffected:i.createdDirs.length,message:a}}},Hn=class{name;inner;constructor(e){this.inner=e,this.name=`json:${e.name}`}async execute(e){let t=await this.inner.execute(e),n=Un(t);return u.default.stdout.write(`${JSON.stringify(n)}\n`),t}};function Un(e){return{success:e.success,filesAffected:e.filesAffected,dirsAffected:e.dirsAffected,...e.message!=null&&{message:e.message},pluginResults:[],errors:[]}}function Wn(){return`@truenine/memory-sync-cli`}function Gn(){return`https://registry.npmjs.org/${Wn()}/latest`}function Kn(e){let t=e.replace(/^v/,``),n=/^(\d+)\.(\d+)\.(\d+)/.exec(t);return n==null?null:[Number.parseInt(n[1],10),Number.parseInt(n[2],10),Number.parseInt(n[3],10)]}function qn(e,t){let n=Kn(e),r=Kn(t);if(n==null||r==null)return 0;for(let e=0;e<3;e++){if(n[e]<r[e])return-1;if(n[e]>r[e])return 1}return 0}const Jn=3e3;async function Yn(){let e=new AbortController,t=setTimeout(()=>e.abort(),Jn);typeof t==`object`&&`unref`in t&&t.unref();try{let n=await fetch(Gn(),{headers:{Accept:`application/json`},signal:e.signal});if(clearTimeout(t),!n.ok)return{error:`HTTP ${n.status}: ${n.statusText}`};let r=await n.json();return r.version==null?{error:`Invalid response: missing version field`}:{version:r.version}}catch(e){return clearTimeout(t),e instanceof Error?e.name===`TimeoutError`||e.name===`AbortError`?{error:`Request timeout after ${Jn}ms`}:{error:e.message}:{error:`Unknown network error`}}}function Xn(){return`2026.10219.12050`}async function Zn(){let e=Xn();if(e===`dev`)return{status:`development`,localVersion:e,remoteVersion:null};let t=await Yn();if(`error`in t)return{status:`current`,localVersion:e,remoteVersion:null,error:t.error};let n=t.version,r=qn(e,n);return r<0?{status:`outdated`,localVersion:e,remoteVersion:n}:r>0?{status:`development`,localVersion:e,remoteVersion:n}:{status:`current`,localVersion:e,remoteVersion:n}}function Qn(e,t){let{status:n,localVersion:r,remoteVersion:i}=e;switch(n){case`outdated`:t.warn(`Version outdated: ${r} → ${i}. Run 'npm i -g ${Wn()}@latest' to update.`);break;case`current`:e.error==null?t.info(`Version ${r} is up to date.`):t.error(`Version check failed: ${e.error}`);break;case`development`:i==null?t.debug(`Running in development mode, version check skipped.`):t.info(`Development version detected: ${r} > ${i}. Thanks for contributing!`);break}}function $n(){return new Date().getMinutes()%2==0}function er(e){$n()&&Zn().then(t=>{(t.status===`outdated`||t.error!=null)&&Qn(t,e)}).catch(t=>{let n=t instanceof Error?t.message:`Unknown error`;e.error(`Version check failed: ${n}`)})}var tr=class{name=`outdated`;async execute(e){let t=await Zn();return Qn(t,e.logger),{success:!0,filesAffected:0,dirsAffected:0,message:`Version status: ${t.status}`}}},nr=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===bt.Input?`Input`:`Output`,description:e.name,dependencies:[...e.dependsOn??[]]});let o=new Set(a.map(e=>e.name));for(let e of n)o.has(e.name)||a.push({name:e.name,kind:`Output`,description:e.name,dependencies:[...e.dependsOn??[]]});return u.default.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)`}}},rr=class{name=`unknown`;constructor(e){this.unknownCmd=e}async execute(e){return console.error(`Unknown command: ${this.unknownCmd}`),console.error(`Run "tnmsc help" for available commands.`),{success:!1,filesAffected:0,dirsAffected:0}}};const ir={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 ar=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}({}),or=function(e){return e.Win=`win`,e.Mac=`mac`,e.Linux=`linux`,e.Unknown=`unknown`,e}({});var sr=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=p.platform();return{platform:e,arch:p.arch(),hostname:p.hostname(),homedir:p.homedir(),tmpdir:p.tmpdir(),type:p.type(),release:p.release(),shellKind:this.detectShellKind(),kind:this.detectOsKind(e)}}detectOsKind(e){switch(e){case`win32`:return or.Win;case`darwin`:return or.Mac;case`linux`:case`freebsd`:case`openbsd`:case`sunos`:case`aix`:return or.Linux;default:return or.Unknown}}detectShellKind(){let e=(u.default.env.SHELL??u.default.env.ComSpec??``).toLowerCase();return e.includes(`bash`)?ar.Bash:e.includes(`zsh`)?ar.Zsh:e.includes(`fish`)?ar.Fish:e.includes(`pwsh`)?ar.Pwsh:e.includes(`powershell`)?ar.PowerShell:e.includes(`cmd`)?ar.Cmd:e.endsWith(`/sh`)?ar.Sh:ar.Unknown}collectEnvContext(){return{...u.default.env}}collectProfile(){return this.userConfig?.profile==null?{}:this.userConfig.profile}collectToolReferences(){let e={...ir.default};return this.toolPreset===`claudeCode`?{...e,...ir.claudeCode}:this.toolPreset===`kiro`?{...e,...ir.kiro}:e}createMdComponent(){let e=(e=>e.when===!1?null:e.children);return e.Line=e=>e.when===!1?null:e.children,e}};let cr=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 lr=class{registrations=[];globalScope=null;setGlobalScope(e){this.globalScope=e}getGlobalScope(){return this.globalScope}register(e,t,n=cr.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}clear(){this.registrations.length=0,this.globalScope=null}};function ur(e){let t=[...e],n=t[0];n!=null&&dr(n)&&t.shift();let r=t[0];return r!=null&&fr(r)&&t.shift(),t}function dr(e){let t=[`node`,`nodejs`,`bun`,`deno`,`tsx`,`ts-node`,`npx`,`pnpx`,`yarn`,`pnpm`],n=e.toLowerCase().replaceAll(`\\`,`/`);return t.some(e=>RegExp(`(?:^|/)${e}(?:\\.exe|\\.cmd|\\.ps1)?$`,`i`).test(n)||n===e)}function fr(e){return/\.(?:m?[jt]s|cjs)$/.test(e)||/[/\\]/.test(e)&&!e.startsWith(`-`)?!0:/^(?:@[\w-]+\/)?[\w-]+$/.test(e)&&!e.startsWith(`-`)}const pr=new Set([`help`,`version`,`outdated`,`init`,`dry-run`,`clean`,`config`,`plugins`]),mr=new Map([[`--trace`,`trace`],[`--debug`,`debug`],[`--info`,`info`],[`--warn`,`warn`],[`--error`,`error`]]),hr=new Map([[`trace`,0],[`debug`,1],[`info`,2],[`warn`,3],[`error`,4]]);function gr(e){let{logLevelFlags:t}=e;if(t.length===0)return;let n=t[0],r=hr.get(n)??4;for(let e of t){let t=hr.get(e)??4;t<r&&(r=t,n=e)}return n}function _r(e){let{helpFlag:t,versionFlag:n,subcommand:r,dryRun:i,unknownCommand:a,setOption:o,positional:s,showFlag:c}=e;if(n)return new Nn;if(t)return new In;if(a!=null)return new rr(a);if(r===`version`)return new Nn;if(r===`help`)return new In;if(r===`outdated`)return new tr;if(r===`init`)return new Vn;if(r===`dry-run`)return new An;if(r===`clean`)return i?new kn:new yt;if(r===`plugins`)return new nr;if(r===`config`&&c)return new On;if(r!==`config`||o.length>0)return new jn;let l=[];for(let e of s){let t=e.indexOf(`=`);t>0&&l.push([e.slice(0,t),e.slice(t+1)])}return new Dn([...o,...l])}function vr(e){let t={subcommand:void 0,helpFlag:!1,versionFlag:!1,dryRun:!1,jsonFlag:!1,showFlag:!1,logLevel:void 0,logLevelFlags:[],setOption:[],unknownCommand:void 0,positional:[],unknown:[]},n=!1;for(let r=0;r<e.length;r++){let i=e[r];if(i!=null){if(i===`--`){t.positional.push(...e.slice(r+1).filter(e=>e!=null));break}if(i.startsWith(`--`)){let n=i.split(`=`),a=n[0]??``,o=mr.get(a);if(o!=null){t.logLevelFlags.push(o),t.logLevel=o;continue}switch(a){case`--help`:t.helpFlag=!0;break;case`--version`:t.versionFlag=!0;break;case`--dry-run`:t.dryRun=!0;break;case`--json`:t.jsonFlag=!0;break;case`--show`:t.showFlag=!0;break;case`--set`:if(n.length>1){let e=n.slice(1).join(`=`),r=e.indexOf(`=`);r>0&&t.setOption.push([e.slice(0,r),e.slice(r+1)])}else{let n=e[r+1];if(n!=null){let e=n.indexOf(`=`);e>0&&(t.setOption.push([n.slice(0,e),n.slice(e+1)]),r++)}}break;default:t.unknown.push(i)}continue}if(i.startsWith(`-`)&&i.length>1){let e=i.slice(1);for(let n of e)switch(n){case`h`:t.helpFlag=!0;break;case`v`:t.versionFlag=!0;break;case`n`:t.dryRun=!0;break;case`j`:t.jsonFlag=!0;break;default:t.unknown.push(`-${n}`)}continue}if(!n){n=!0,pr.has(i)?t.subcommand=i:t.unknownCommand=i;continue}t.positional.push(i)}}return t}var yr=class{logger;args;outputPlugins=[];constructor(...e){this.args=vr(ur(e.filter(e=>e!=null)));let t=gr(this.args);t!=null&&tn(t),this.logger=rn(`PluginPipeline`,t),this.logger.debug(`initialized`,{args:this.args})}registerOutputPlugins(e){return this.outputPlugins.push(...e),this}async run(e){er(this.logger);let{context:t,outputPlugins:n,userConfigOptions:r}=e;this.registerOutputPlugins([...n]);let i=this.resolveCommand();this.args.jsonFlag&&(tn(`silent`),new Set([`config-show`,`plugins`]).has(i.name)||(i=new Hn(i)));let a=this.createCommandContext(t,r);await i.execute(a)}resolveCommand(){return _r(this.args)}createCommandContext(e,t){return{logger:this.logger,outputPlugins:this.outputPlugins,collectedInputContext:e,userConfigOptions:t,createCleanContext:t=>this.createCleanContext(e,t),createWriteContext:t=>this.createWriteContext(e,t)}}createCleanContext(e,t){return{logger:this.logger,fs:d,path:f,glob:Je.default,collectedInputContext:e,dryRun:t}}createWriteContext(e,t){return{logger:this.logger,fs:d,path:f,glob:Je.default,collectedInputContext:e,dryRun:t,registeredPluginNames:this.outputPlugins.map(e=>e.name)}}buildDependencyGraph(e){let t=new Map;for(let n of e){let e=n.dependsOn??[];t.set(n.name,[...e])}return t}validateDependencies(e){let t=new Set(e.map(e=>e.name));for(let n of e){let e=n.dependsOn??[];for(let r of e)if(!t.has(r))throw new Dt(n.name,r)}}topologicalSort(e){this.validateDependencies(e);let t=new Map;for(let n of e)t.set(n.name,n);let n=new Map;for(let t of e)n.set(t.name,0);let r=new Map;for(let t of e)r.set(t.name,[]);for(let t of e){let e=t.dependsOn??[];for(let i of e){n.set(t.name,(n.get(t.name)??0)+1);let e=r.get(i)??[];e.push(t.name),r.set(i,e)}}let i=[];for(let t of e)n.get(t.name)===0&&i.push(t.name);let a=[];for(;i.length>0;){let o=i.shift(),s=t.get(o);a.push(s);let c=(r.get(o)??[]).sort((t,n)=>e.findIndex(e=>e.name===t)-e.findIndex(e=>e.name===n));for(let e of c){let t=(n.get(e)??0)-1;n.set(e,t),t===0&&i.push(e)}}if(a.length===e.length)return a;throw new Et(this.findCyclePath(e,n))}findCyclePath(e,t){let n=new Set;for(let[e,r]of t)r>0&&n.add(e);let r=new Map;for(let t of e)if(n.has(t.name)){let e=(t.dependsOn??[]).filter(e=>n.has(e));r.set(t.name,e)}let i=new Set,a=[],o=e=>{if(a.includes(e))return a.push(e),!0;if(i.has(e))return!1;i.add(e),a.push(e);for(let t of r.get(e)??[])if(o(t))return!0;return a.pop(),!1};for(let e of n){if(o(e)){let e=a.indexOf(a.at(-1));return a.slice(e)}i.clear(),a.length=0}return[...n]}async executePluginsInOrder(e,t,n=!1,r){if(e.length===0)return{};let i=this.topologicalSort(e),a=new sr({userConfig:r}).collect(),o=new lr;o.setGlobalScope(a),this.logger.debug(`global scope collected`,{osInfo:{platform:a.os.platform,arch:a.os.arch,shellKind:a.os.shellKind},hasProfile:Object.keys(a.profile).length>0,hasTool:Object.keys(a.tool).length>0});let s=new Map,c={};for(let e of i){let r=this.buildDependencyContext(e,s),i={...t,dependencyContext:r,globalScope:a,scopeRegistry:o},l=e;l.executeEffects!=null&&await l.executeEffects(i,n);let u=await e.collect(i);s.set(e.name,u),c=this.mergeContexts(c,u);let d=e;if(d.getRegisteredScopes!=null){let t=d.getRegisteredScopes();for(let{namespace:n,values:r}of t)o.register(n,r,cr.PluginRegistered),this.logger.debug(`plugin scope registered`,{plugin:e.name,namespace:n,keys:Object.keys(r)})}}return c}buildDependencyContext(e,t){if((e.dependsOn??[]).length===0)return{};let n=this.collectTransitiveDependencies(e,t),r={};for(let e of n){let n=t.get(e);n!=null&&(r=this.mergeContexts(r,n))}return r}collectTransitiveDependencies(e,t){let n=new Set,r=[];return(e=>{for(let i of e)n.has(i)||(n.add(i),t.get(i)!=null&&r.push(i))})(e.dependsOn??[]),r}mergeContexts(e,t){let{workspace:n}=e;if(t.workspace!=null)if(n!=null){let e=new Map;for(let t of n.projects)e.set(t.name,t);for(let n of t.workspace.projects)e.set(n.name,n);n={directory:t.workspace.directory??n.directory,projects:[...e.values()]}}else ({workspace:n}=t);let r=t.ideConfigFiles==null?e.ideConfigFiles:[...e.ideConfigFiles??[],...t.ideConfigFiles],i=t.fastCommands==null?e.fastCommands:[...e.fastCommands??[],...t.fastCommands],a=t.subAgents==null?e.subAgents:[...e.subAgents??[],...t.subAgents],o=t.skills==null?e.skills:[...e.skills??[],...t.skills],s=t.rules==null?e.rules:[...e.rules??[],...t.rules],c=t.aiAgentIgnoreConfigFiles==null?e.aiAgentIgnoreConfigFiles:[...e.aiAgentIgnoreConfigFiles??[],...t.aiAgentIgnoreConfigFiles],l=t.globalMemory??e.globalMemory,u=t.shadowSourceProjectDir??e.shadowSourceProjectDir,d=t.readmePrompts==null?e.readmePrompts:[...e.readmePrompts??[],...t.readmePrompts],f=t.globalGitIgnore??e.globalGitIgnore,p=t.shadowGitExclude??e.shadowGitExclude;return{...n==null?{}:{workspace:n},...r==null?{}:{ideConfigFiles:r},...i==null?{}:{fastCommands:i},...a==null?{}:{subAgents:a},...o==null?{}:{skills:o},...s==null?{}:{rules:s},...c==null?{}:{aiAgentIgnoreConfigFiles:c},...l==null?{}:{globalMemory:l},...u==null?{}:{shadowSourceProjectDir:u},...d==null?{}:{readmePrompts:d},...f==null?{}:{globalGitIgnore:f},...p==null?{}:{shadowGitExclude:p}}}};const br={name:`tnmsc-shadow`,skill:{src:`src/skills`,dist:`dist/skills`},fastCommand:{src:`src/commands`,dist:`dist/commands`},subAgent:{src:`src/agents`,dist:`dist/agents`},rule:{src:`src/rules`,dist:`dist/rules`},globalMemory:{src:`app/global.cn.mdx`,dist:`dist/global.mdx`},workspaceMemory:{src:`app/workspace.cn.mdx`,dist:`dist/app/workspace.mdx`},project:{src:`app`,dist:`dist/app`}},xr={...Wt,shadowSourceProject:br,fastCommandSeriesOptions:{},plugins:[]};function Sr(e){return{...e.version==null?{}:{version:e.version},...e.workspaceDir==null?{}:{workspaceDir:e.workspaceDir},...e.shadowSourceProject==null?{}:{shadowSourceProject:e.shadowSourceProject},...e.fastCommandSeriesOptions==null?{}:{fastCommandSeriesOptions:e.fastCommandSeriesOptions},...e.logLevel==null?{}:{logLevel:e.logLevel}}}function Cr(...e){return e.reduce((e,t)=>wr(e,t),{...xr})}function wr(e,t){let n=t.plugins,r=t.fastCommandSeriesOptions;return{...e,...t,shadowSourceProject:Tr(e.shadowSourceProject,t.shadowSourceProject),plugins:[...e.plugins,...n??[]],fastCommandSeriesOptions:Er(e.fastCommandSeriesOptions,r)}}function Tr(e,t){return t==null?e:{name:t.name??e.name,skill:{...e.skill,...t.skill},fastCommand:{...e.fastCommand,...t.fastCommand},subAgent:{...e.subAgent,...t.subAgent},rule:{...e.rule,...t.rule},globalMemory:{...e.globalMemory,...t.globalMemory},workspaceMemory:{...e.workspaceMemory,...t.workspaceMemory},project:{...e.project,...t.project}}}function Er(e,t){if(t==null)return e??{};if(e==null)return t;let n={};if(e.pluginOverrides!=null)for(let[t,r]of Object.entries(e.pluginOverrides))n[t]={...r};if(t.pluginOverrides!=null)for(let[e,r]of Object.entries(t.pluginOverrides))n[e]={...n[e],...r};let r=t.includeSeriesPrefix??e.includeSeriesPrefix,i=Object.keys(n).length>0;return r!=null&&i?{includeSeriesPrefix:r,pluginOverrides:n}:r==null?i?{pluginOverrides:n}:{}:{includeSeriesPrefix:r}}function Dr(e){return`pluginOptions`in e||`configLoaderOptions`in e||`loadUserConfig`in e}async function Or(e={}){gn().shouldExit&&u.default.exit(1);let t,n,r;Dr(e)?({pluginOptions:r={},cwd:n}={pluginOptions:e.pluginOptions,cwd:e.cwd},t=e.loadUserConfig??!0):(r=e,t=!0);let i={},a=!1,o=[],s;if(t){let e=hn(n);a=e.found,o=e.sources,e.found&&(i=Sr(e.config),s=e.config)}let c=Cr(i,r),{plugins:l=[],logLevel:p}=c,m=rn(`defineConfig`,p);a?m.info(`user config loaded`,{sources:o}):m.info(`no user config found, using defaults`,{workspaceDir:xr.workspaceDir,shadowSourceProjectName:xr.shadowSourceProject.name,logLevel:xr.logLevel});let h={logger:m,userConfigOptions:c,fs:d,path:f,glob:Je.default},g=l.filter(e=>e.type===bt.Input),_=l.filter(e=>e.type===bt.Output),v=await new yr().executePluginsInOrder(g,h,!1,s);if(v.workspace==null)throw Error(`Workspace not initialized by any plugin`);let y={workspace:v.workspace,ideConfigFiles:v.ideConfigFiles??[],...v.fastCommands!=null&&{fastCommands:v.fastCommands},...v.subAgents!=null&&{subAgents:v.subAgents},...v.skills!=null&&{skills:v.skills},...v.rules!=null&&{rules:v.rules},...v.globalMemory!=null&&{globalMemory:v.globalMemory},...v.aiAgentIgnoreConfigFiles!=null&&{aiAgentIgnoreConfigFiles:v.aiAgentIgnoreConfigFiles},...v.shadowSourceProjectDir!=null&&{shadowSourceProjectDir:v.shadowSourceProjectDir},...v.readmePrompts!=null&&{readmePrompts:v.readmePrompts},...v.globalGitIgnore!=null&&{globalGitIgnore:v.globalGitIgnore},...v.shadowGitExclude!=null&&{shadowGitExclude:v.shadowGitExclude}};return v.shadowSourceProjectDir!=null&&Ln(v.shadowSourceProjectDir,m),{context:y,outputPlugins:_,userConfigOptions:c}}const kr=Rr(/[A-Za-z]/),Ar=Rr(/[\dA-Za-z]/),jr=Rr(/[#-'*+\--9=?A-Z^-~]/);function Mr(e){return e!==null&&(e<32||e===127)}const Nr=Rr(/\d/),Pr=Rr(/[\dA-Fa-f]/),Fr=Rr(/[!-/:-@[-`{-~]/);function B(e){return e!==null&&e<-2}function V(e){return e!==null&&(e<0||e===32)}function H(e){return e===-2||e===-1||e===32}const Ir=Rr(/\p{P}|\p{S}/u),Lr=Rr(/\s/);function Rr(e){return t;function t(t){return t!==null&&t>-1&&e.test(String.fromCharCode(t))}}var zr=l(o(((e,t)=>{(function(){var e=t===void 0?function(){return this||(0,eval)(`this`)}():t.exports=i;e.format=i,e.vsprintf=r,typeof console<`u`&&typeof console.log==`function`&&(e.printf=n);function n(){console.log(i.apply(null,arguments))}function r(e,t){return i.apply(null,[e].concat(t))}function i(e){for(var t=1,n=[].slice.call(arguments),r=0,i=e.length,a=``,o,s=!1,c,l,u=!1,d,f=function(){return n[t++]},p=function(){for(var t=``;/\d/.test(e[r]);)t+=e[r++],o=e[r];return t.length>0?parseInt(t):null};r<i;++r)if(o=e[r],s)switch(s=!1,o==`.`?(u=!1,o=e[++r]):o==`0`&&e[r+1]==`.`?(u=!0,r+=2,o=e[r]):u=!0,d=p(),o){case`b`:a+=parseInt(f(),10).toString(2);break;case`c`:c=f(),typeof c==`string`||c instanceof String?a+=c:a+=String.fromCharCode(parseInt(c,10));break;case`d`:a+=parseInt(f(),10);break;case`f`:l=String(parseFloat(f()).toFixed(d||6)),a+=u?l:l.replace(/^0/,``);break;case`j`:a+=JSON.stringify(f());break;case`o`:a+=`0`+parseInt(f(),10).toString(8);break;case`s`:a+=f();break;case`x`:a+=`0x`+parseInt(f(),10).toString(16);break;case`X`:a+=`0x`+parseInt(f(),10).toString(16).toUpperCase();break;default:a+=o;break}else o===`%`?s=!0:a+=o;return a}})()}))(),1);const Br=Object.assign(Vr(Error),{eval:Vr(EvalError),range:Vr(RangeError),reference:Vr(ReferenceError),syntax:Vr(SyntaxError),type:Vr(TypeError),uri:Vr(URIError)});function Vr(e){return t.displayName=e.displayName||e.name,t;function t(t,...n){return new e(t&&(0,zr.default)(t,...n))}}const Hr={}.hasOwnProperty,Ur={yaml:`-`,toml:`+`};function Wr(e){let t=[],n=-1,r=Array.isArray(e)?e:e?[e]:[`yaml`];for(;++n<r.length;)t[n]=Gr(r[n]);return t}function Gr(e){let t=e;if(typeof t==`string`){if(!Hr.call(Ur,t))throw Br("Missing matter definition for `%s`",t);t={type:t,marker:Ur[t]}}else if(typeof t!=`object`)throw Br("Expected matter to be an object, not `%j`",t);if(!Hr.call(t,`type`))throw Br("Missing `type` in matter `%j`",t);if(!Hr.call(t,`fence`)&&!Hr.call(t,`marker`))throw Br("Missing `marker` or `fence` in matter `%j`",t);return t}function Kr(e){let t=Wr(e),n={},r=-1;for(;++r<t.length;){let e=t[r],i=Jr(e,`open`).charCodeAt(0),a=qr(e),o=n[i];Array.isArray(o)?o.push(a):n[i]=[a]}return{flow:n}}function qr(e){let t=e.anywhere,n=e.type,r=n+`Fence`,i=r+`Sequence`,a=n+`Value`,o={tokenize:u,partial:!0},s,c=0;return{tokenize:l,concrete:!0};function l(l,u,d){let f=this;return p;function p(a){let o=f.now();return o.column===1&&(o.line===1||t)&&(s=Jr(e,`open`),c=0,a===s.charCodeAt(c))?(l.enter(n),l.enter(r),l.enter(i),m(a)):d(a)}function m(e){return c===s.length?(l.exit(i),H(e)?(l.enter(`whitespace`),h(e)):g(e)):e===s.charCodeAt(c++)?(l.consume(e),m):d(e)}function h(e){return H(e)?(l.consume(e),h):(l.exit(`whitespace`),g(e))}function g(t){return B(t)?(l.exit(r),l.enter(`lineEnding`),l.consume(t),l.exit(`lineEnding`),s=Jr(e,`close`),c=0,l.attempt(o,b,_)):d(t)}function _(e){return e===null||B(e)?y(e):(l.enter(a),v(e))}function v(e){return e===null||B(e)?(l.exit(a),y(e)):(l.consume(e),v)}function y(e){return e===null?d(e):(l.enter(`lineEnding`),l.consume(e),l.exit(`lineEnding`),l.attempt(o,b,_))}function b(e){return l.exit(n),u(e)}}function u(e,t,n){let a=0;return o;function o(t){return t===s.charCodeAt(a)?(e.enter(r),e.enter(i),c(t)):n(t)}function c(t){return a===s.length?(e.exit(i),H(t)?(e.enter(`whitespace`),l(t)):u(t)):t===s.charCodeAt(a++)?(e.consume(t),c):n(t)}function l(t){return H(t)?(e.consume(t),l):(e.exit(`whitespace`),u(t))}function u(i){return i===null||B(i)?(e.exit(r),t(i)):n(i)}}}function Jr(e,t){return e.marker?Yr(e.marker,t).repeat(3):Yr(e.fence,t)}function Yr(e,t){return typeof e==`string`?e:e[t]}function Xr(e){if(typeof e!=`string`)throw TypeError(`Expected a string`);return e.replace(/[|\\{}()[\]^$+*?.]/g,`\\$&`).replace(/-/g,`\\x2d`)}function Zr(e){let t=Wr(e),n={},r={},i=-1;for(;++i<t.length;){let e=t[i];n[e.type]=Qr(e),r[e.type]=$r,r[e.type+`Value`]=ei}return{enter:n,exit:r}}function Qr(e){return t;function t(t){this.enter({type:e.type,value:``},t),this.buffer()}}function $r(e){let t=this.resume(),n=this.stack[this.stack.length-1];`value`in n,this.exit(e),n.value=t.replace(/^(\r?\n|\r)|(\r?\n|\r)$/g,``)}function ei(e){this.config.enter.data.call(this,e),this.config.exit.data.call(this,e)}function ti(e){let t=[],n={},r=Wr(e),i=-1;for(;++i<r.length;){let e=r[i];n[e.type]=ni(e);let a=ri(e,`open`);t.push({atBreak:!0,character:a.charAt(0),after:Xr(a.charAt(1))})}return{unsafe:t,handlers:n}}function ni(e){let t=ri(e,`open`),n=ri(e,`close`);return r;function r(e){return t+(e.value?`
1042
+ `.trim();var In=class{name=`help`;async execute(e){return console.log(Fn),{success:!0,filesAffected:0,dirsAffected:0,message:`Help displayed`}}};function Ln(e,t){let n=f.join(e,`.git`),r=d.existsSync(n);return r?t?.info(`version control detected`,{path:n}):t?.warn(`no version control detected, please use git to manage your shadow source project`,{path:e}),{hasGit:r,gitPath:n}}function Rn(e,t,n,r,i){if(n==null)return r;let a=f.relative(t,e),o=f.join(n,a);return d.existsSync(o)&&d.statSync(o).isFile()?(i?.debug(`copying from source`,{path:o}),d.readFileSync(o,`utf8`)):r}function zn(e,t={}){let{sourceDir:n,logger:r}=t,i=[],a=[],o=[],s=[],c=new Set;d.existsSync(e)?(o.push(e),r?.debug(`directory exists`,{path:e})):(d.mkdirSync(e,{recursive:!0}),i.push(e),c.add(e),r?.info(`created directory`,{path:e}));for(let t of Object.values(z)){let o=t.path,l=f.join(e,o),u=f.dirname(l);if(!d.existsSync(u)){d.mkdirSync(u,{recursive:!0});let t=u;for(;t!==e&&!c.has(t);)c.add(t),i.push(t),r?.info(`created directory`,{path:t}),t=f.dirname(t)}if(d.existsSync(l))s.push(l),r?.debug(`file exists`,{path:l});else{let i=Rn(l,e,n,t.content,r);d.writeFileSync(l,i,`utf8`),a.push(l),r?.info(`created file`,{path:l})}}return{success:!0,rootPath:e,createdDirs:i,createdFiles:a,existedDirs:o,existedFiles:s}}function Bn(e){let t=e;return t.startsWith(`~`)&&(t=f.join(p.homedir(),t.slice(1))),f.normalize(t)}var Vn=class{name=`init`;async execute(e){let{logger:t,userConfigOptions:n}=e;t.info(`initializing shadow source project structure`,{command:`init`});let r=Bn(n.workspaceDir),i=zn(f.join(r,n.shadowSourceProject.name),{logger:t}),a=i.createdDirs.length===0&&i.createdFiles.length===0?`All ${i.existedDirs.length} directories and ${i.existedFiles.length} files already exist`:`Created ${i.createdDirs.length} directories and ${i.createdFiles.length} files (${i.existedDirs.length} dirs, ${i.existedFiles.length} files already existed)`;return t.info(`initialization complete`,{dirsCreated:i.createdDirs.length,filesCreated:i.createdFiles.length,dirsExisted:i.existedDirs.length,filesExisted:i.existedFiles.length}),{success:i.success,filesAffected:i.createdFiles.length,dirsAffected:i.createdDirs.length,message:a}}},Hn=class{name;inner;constructor(e){this.inner=e,this.name=`json:${e.name}`}async execute(e){let t=await this.inner.execute(e),n=Un(t);return u.default.stdout.write(`${JSON.stringify(n)}\n`),t}};function Un(e){return{success:e.success,filesAffected:e.filesAffected,dirsAffected:e.dirsAffected,...e.message!=null&&{message:e.message},pluginResults:[],errors:[]}}function Wn(){return`@truenine/memory-sync-cli`}function Gn(){return`https://registry.npmjs.org/${Wn()}/latest`}function Kn(e){let t=e.replace(/^v/,``),n=/^(\d+)\.(\d+)\.(\d+)/.exec(t);return n==null?null:[Number.parseInt(n[1],10),Number.parseInt(n[2],10),Number.parseInt(n[3],10)]}function qn(e,t){let n=Kn(e),r=Kn(t);if(n==null||r==null)return 0;for(let e=0;e<3;e++){if(n[e]<r[e])return-1;if(n[e]>r[e])return 1}return 0}const Jn=3e3;async function Yn(){let e=new AbortController,t=setTimeout(()=>e.abort(),Jn);typeof t==`object`&&`unref`in t&&t.unref();try{let n=await fetch(Gn(),{headers:{Accept:`application/json`},signal:e.signal});if(clearTimeout(t),!n.ok)return{error:`HTTP ${n.status}: ${n.statusText}`};let r=await n.json();return r.version==null?{error:`Invalid response: missing version field`}:{version:r.version}}catch(e){return clearTimeout(t),e instanceof Error?e.name===`TimeoutError`||e.name===`AbortError`?{error:`Request timeout after ${Jn}ms`}:{error:e.message}:{error:`Unknown network error`}}}function Xn(){return`2026.10219.12358`}async function Zn(){let e=Xn();if(e===`dev`)return{status:`development`,localVersion:e,remoteVersion:null};let t=await Yn();if(`error`in t)return{status:`current`,localVersion:e,remoteVersion:null,error:t.error};let n=t.version,r=qn(e,n);return r<0?{status:`outdated`,localVersion:e,remoteVersion:n}:r>0?{status:`development`,localVersion:e,remoteVersion:n}:{status:`current`,localVersion:e,remoteVersion:n}}function Qn(e,t){let{status:n,localVersion:r,remoteVersion:i}=e;switch(n){case`outdated`:t.warn(`Version outdated: ${r} → ${i}. Run 'npm i -g ${Wn()}@latest' to update.`);break;case`current`:e.error==null?t.info(`Version ${r} is up to date.`):t.error(`Version check failed: ${e.error}`);break;case`development`:i==null?t.debug(`Running in development mode, version check skipped.`):t.info(`Development version detected: ${r} > ${i}. Thanks for contributing!`);break}}function $n(){return new Date().getMinutes()%2==0}function er(e){$n()&&Zn().then(t=>{(t.status===`outdated`||t.error!=null)&&Qn(t,e)}).catch(t=>{let n=t instanceof Error?t.message:`Unknown error`;e.error(`Version check failed: ${n}`)})}var tr=class{name=`outdated`;async execute(e){let t=await Zn();return Qn(t,e.logger),{success:!0,filesAffected:0,dirsAffected:0,message:`Version status: ${t.status}`}}},nr=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===bt.Input?`Input`:`Output`,description:e.name,dependencies:[...e.dependsOn??[]]});let o=new Set(a.map(e=>e.name));for(let e of n)o.has(e.name)||a.push({name:e.name,kind:`Output`,description:e.name,dependencies:[...e.dependsOn??[]]});return u.default.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)`}}},rr=class{name=`unknown`;constructor(e){this.unknownCmd=e}async execute(e){return console.error(`Unknown command: ${this.unknownCmd}`),console.error(`Run "tnmsc help" for available commands.`),{success:!1,filesAffected:0,dirsAffected:0}}};const ir={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 ar=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}({}),or=function(e){return e.Win=`win`,e.Mac=`mac`,e.Linux=`linux`,e.Unknown=`unknown`,e}({});var sr=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=p.platform();return{platform:e,arch:p.arch(),hostname:p.hostname(),homedir:p.homedir(),tmpdir:p.tmpdir(),type:p.type(),release:p.release(),shellKind:this.detectShellKind(),kind:this.detectOsKind(e)}}detectOsKind(e){switch(e){case`win32`:return or.Win;case`darwin`:return or.Mac;case`linux`:case`freebsd`:case`openbsd`:case`sunos`:case`aix`:return or.Linux;default:return or.Unknown}}detectShellKind(){let e=(u.default.env.SHELL??u.default.env.ComSpec??``).toLowerCase();return e.includes(`bash`)?ar.Bash:e.includes(`zsh`)?ar.Zsh:e.includes(`fish`)?ar.Fish:e.includes(`pwsh`)?ar.Pwsh:e.includes(`powershell`)?ar.PowerShell:e.includes(`cmd`)?ar.Cmd:e.endsWith(`/sh`)?ar.Sh:ar.Unknown}collectEnvContext(){return{...u.default.env}}collectProfile(){return this.userConfig?.profile==null?{}:this.userConfig.profile}collectToolReferences(){let e={...ir.default};return this.toolPreset===`claudeCode`?{...e,...ir.claudeCode}:this.toolPreset===`kiro`?{...e,...ir.kiro}:e}createMdComponent(){let e=(e=>e.when===!1?null:e.children);return e.Line=e=>e.when===!1?null:e.children,e}};let cr=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 lr=class{registrations=[];globalScope=null;setGlobalScope(e){this.globalScope=e}getGlobalScope(){return this.globalScope}register(e,t,n=cr.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}clear(){this.registrations.length=0,this.globalScope=null}};function ur(e){let t=[...e],n=t[0];n!=null&&dr(n)&&t.shift();let r=t[0];return r!=null&&fr(r)&&t.shift(),t}function dr(e){let t=[`node`,`nodejs`,`bun`,`deno`,`tsx`,`ts-node`,`npx`,`pnpx`,`yarn`,`pnpm`],n=e.toLowerCase().replaceAll(`\\`,`/`);return t.some(e=>RegExp(`(?:^|/)${e}(?:\\.exe|\\.cmd|\\.ps1)?$`,`i`).test(n)||n===e)}function fr(e){return/\.(?:m?[jt]s|cjs)$/.test(e)||/[/\\]/.test(e)&&!e.startsWith(`-`)?!0:/^(?:@[\w-]+\/)?[\w-]+$/.test(e)&&!e.startsWith(`-`)}const pr=new Set([`help`,`version`,`outdated`,`init`,`dry-run`,`clean`,`config`,`plugins`]),mr=new Map([[`--trace`,`trace`],[`--debug`,`debug`],[`--info`,`info`],[`--warn`,`warn`],[`--error`,`error`]]),hr=new Map([[`trace`,0],[`debug`,1],[`info`,2],[`warn`,3],[`error`,4]]);function gr(e){let{logLevelFlags:t}=e;if(t.length===0)return;let n=t[0],r=hr.get(n)??4;for(let e of t){let t=hr.get(e)??4;t<r&&(r=t,n=e)}return n}function _r(e){let{helpFlag:t,versionFlag:n,subcommand:r,dryRun:i,unknownCommand:a,setOption:o,positional:s,showFlag:c}=e;if(n)return new Nn;if(t)return new In;if(a!=null)return new rr(a);if(r===`version`)return new Nn;if(r===`help`)return new In;if(r===`outdated`)return new tr;if(r===`init`)return new Vn;if(r===`dry-run`)return new An;if(r===`clean`)return i?new kn:new yt;if(r===`plugins`)return new nr;if(r===`config`&&c)return new On;if(r!==`config`||o.length>0)return new jn;let l=[];for(let e of s){let t=e.indexOf(`=`);t>0&&l.push([e.slice(0,t),e.slice(t+1)])}return new Dn([...o,...l])}function vr(e){let t={subcommand:void 0,helpFlag:!1,versionFlag:!1,dryRun:!1,jsonFlag:!1,showFlag:!1,logLevel:void 0,logLevelFlags:[],setOption:[],unknownCommand:void 0,positional:[],unknown:[]},n=!1;for(let r=0;r<e.length;r++){let i=e[r];if(i!=null){if(i===`--`){t.positional.push(...e.slice(r+1).filter(e=>e!=null));break}if(i.startsWith(`--`)){let n=i.split(`=`),a=n[0]??``,o=mr.get(a);if(o!=null){t.logLevelFlags.push(o),t.logLevel=o;continue}switch(a){case`--help`:t.helpFlag=!0;break;case`--version`:t.versionFlag=!0;break;case`--dry-run`:t.dryRun=!0;break;case`--json`:t.jsonFlag=!0;break;case`--show`:t.showFlag=!0;break;case`--set`:if(n.length>1){let e=n.slice(1).join(`=`),r=e.indexOf(`=`);r>0&&t.setOption.push([e.slice(0,r),e.slice(r+1)])}else{let n=e[r+1];if(n!=null){let e=n.indexOf(`=`);e>0&&(t.setOption.push([n.slice(0,e),n.slice(e+1)]),r++)}}break;default:t.unknown.push(i)}continue}if(i.startsWith(`-`)&&i.length>1){let e=i.slice(1);for(let n of e)switch(n){case`h`:t.helpFlag=!0;break;case`v`:t.versionFlag=!0;break;case`n`:t.dryRun=!0;break;case`j`:t.jsonFlag=!0;break;default:t.unknown.push(`-${n}`)}continue}if(!n){n=!0,pr.has(i)?t.subcommand=i:t.unknownCommand=i;continue}t.positional.push(i)}}return t}var yr=class{logger;args;outputPlugins=[];constructor(...e){this.args=vr(ur(e.filter(e=>e!=null)));let t=gr(this.args);t!=null&&tn(t),this.logger=rn(`PluginPipeline`,t),this.logger.debug(`initialized`,{args:this.args})}registerOutputPlugins(e){return this.outputPlugins.push(...e),this}async run(e){er(this.logger);let{context:t,outputPlugins:n,userConfigOptions:r}=e;this.registerOutputPlugins([...n]);let i=this.resolveCommand();this.args.jsonFlag&&(tn(`silent`),new Set([`config-show`,`plugins`]).has(i.name)||(i=new Hn(i)));let a=this.createCommandContext(t,r);await i.execute(a)}resolveCommand(){return _r(this.args)}createCommandContext(e,t){return{logger:this.logger,outputPlugins:this.outputPlugins,collectedInputContext:e,userConfigOptions:t,createCleanContext:t=>this.createCleanContext(e,t),createWriteContext:t=>this.createWriteContext(e,t)}}createCleanContext(e,t){return{logger:this.logger,fs:d,path:f,glob:Je.default,collectedInputContext:e,dryRun:t}}createWriteContext(e,t){return{logger:this.logger,fs:d,path:f,glob:Je.default,collectedInputContext:e,dryRun:t,registeredPluginNames:this.outputPlugins.map(e=>e.name)}}buildDependencyGraph(e){let t=new Map;for(let n of e){let e=n.dependsOn??[];t.set(n.name,[...e])}return t}validateDependencies(e){let t=new Set(e.map(e=>e.name));for(let n of e){let e=n.dependsOn??[];for(let r of e)if(!t.has(r))throw new Dt(n.name,r)}}topologicalSort(e){this.validateDependencies(e);let t=new Map;for(let n of e)t.set(n.name,n);let n=new Map;for(let t of e)n.set(t.name,0);let r=new Map;for(let t of e)r.set(t.name,[]);for(let t of e){let e=t.dependsOn??[];for(let i of e){n.set(t.name,(n.get(t.name)??0)+1);let e=r.get(i)??[];e.push(t.name),r.set(i,e)}}let i=[];for(let t of e)n.get(t.name)===0&&i.push(t.name);let a=[];for(;i.length>0;){let o=i.shift(),s=t.get(o);a.push(s);let c=(r.get(o)??[]).sort((t,n)=>e.findIndex(e=>e.name===t)-e.findIndex(e=>e.name===n));for(let e of c){let t=(n.get(e)??0)-1;n.set(e,t),t===0&&i.push(e)}}if(a.length===e.length)return a;throw new Et(this.findCyclePath(e,n))}findCyclePath(e,t){let n=new Set;for(let[e,r]of t)r>0&&n.add(e);let r=new Map;for(let t of e)if(n.has(t.name)){let e=(t.dependsOn??[]).filter(e=>n.has(e));r.set(t.name,e)}let i=new Set,a=[],o=e=>{if(a.includes(e))return a.push(e),!0;if(i.has(e))return!1;i.add(e),a.push(e);for(let t of r.get(e)??[])if(o(t))return!0;return a.pop(),!1};for(let e of n){if(o(e)){let e=a.indexOf(a.at(-1));return a.slice(e)}i.clear(),a.length=0}return[...n]}async executePluginsInOrder(e,t,n=!1,r){if(e.length===0)return{};let i=this.topologicalSort(e),a=new sr({userConfig:r}).collect(),o=new lr;o.setGlobalScope(a),this.logger.debug(`global scope collected`,{osInfo:{platform:a.os.platform,arch:a.os.arch,shellKind:a.os.shellKind},hasProfile:Object.keys(a.profile).length>0,hasTool:Object.keys(a.tool).length>0});let s=new Map,c={};for(let e of i){let r=this.buildDependencyContext(e,s),i={...t,dependencyContext:r,globalScope:a,scopeRegistry:o},l=e;l.executeEffects!=null&&await l.executeEffects(i,n);let u=await e.collect(i);s.set(e.name,u),c=this.mergeContexts(c,u);let d=e;if(d.getRegisteredScopes!=null){let t=d.getRegisteredScopes();for(let{namespace:n,values:r}of t)o.register(n,r,cr.PluginRegistered),this.logger.debug(`plugin scope registered`,{plugin:e.name,namespace:n,keys:Object.keys(r)})}}return c}buildDependencyContext(e,t){if((e.dependsOn??[]).length===0)return{};let n=this.collectTransitiveDependencies(e,t),r={};for(let e of n){let n=t.get(e);n!=null&&(r=this.mergeContexts(r,n))}return r}collectTransitiveDependencies(e,t){let n=new Set,r=[];return(e=>{for(let i of e)n.has(i)||(n.add(i),t.get(i)!=null&&r.push(i))})(e.dependsOn??[]),r}mergeContexts(e,t){let{workspace:n}=e;if(t.workspace!=null)if(n!=null){let e=new Map;for(let t of n.projects)e.set(t.name,t);for(let n of t.workspace.projects)e.set(n.name,n);n={directory:t.workspace.directory??n.directory,projects:[...e.values()]}}else ({workspace:n}=t);let r=t.ideConfigFiles==null?e.ideConfigFiles:[...e.ideConfigFiles??[],...t.ideConfigFiles],i=t.fastCommands==null?e.fastCommands:[...e.fastCommands??[],...t.fastCommands],a=t.subAgents==null?e.subAgents:[...e.subAgents??[],...t.subAgents],o=t.skills==null?e.skills:[...e.skills??[],...t.skills],s=t.rules==null?e.rules:[...e.rules??[],...t.rules],c=t.aiAgentIgnoreConfigFiles==null?e.aiAgentIgnoreConfigFiles:[...e.aiAgentIgnoreConfigFiles??[],...t.aiAgentIgnoreConfigFiles],l=t.globalMemory??e.globalMemory,u=t.shadowSourceProjectDir??e.shadowSourceProjectDir,d=t.readmePrompts==null?e.readmePrompts:[...e.readmePrompts??[],...t.readmePrompts],f=t.globalGitIgnore??e.globalGitIgnore,p=t.shadowGitExclude??e.shadowGitExclude;return{...n==null?{}:{workspace:n},...r==null?{}:{ideConfigFiles:r},...i==null?{}:{fastCommands:i},...a==null?{}:{subAgents:a},...o==null?{}:{skills:o},...s==null?{}:{rules:s},...c==null?{}:{aiAgentIgnoreConfigFiles:c},...l==null?{}:{globalMemory:l},...u==null?{}:{shadowSourceProjectDir:u},...d==null?{}:{readmePrompts:d},...f==null?{}:{globalGitIgnore:f},...p==null?{}:{shadowGitExclude:p}}}};const br={name:`tnmsc-shadow`,skill:{src:`src/skills`,dist:`dist/skills`},fastCommand:{src:`src/commands`,dist:`dist/commands`},subAgent:{src:`src/agents`,dist:`dist/agents`},rule:{src:`src/rules`,dist:`dist/rules`},globalMemory:{src:`app/global.cn.mdx`,dist:`dist/global.mdx`},workspaceMemory:{src:`app/workspace.cn.mdx`,dist:`dist/app/workspace.mdx`},project:{src:`app`,dist:`dist/app`}},xr={...Wt,shadowSourceProject:br,fastCommandSeriesOptions:{},plugins:[]};function Sr(e){return{...e.version==null?{}:{version:e.version},...e.workspaceDir==null?{}:{workspaceDir:e.workspaceDir},...e.shadowSourceProject==null?{}:{shadowSourceProject:e.shadowSourceProject},...e.fastCommandSeriesOptions==null?{}:{fastCommandSeriesOptions:e.fastCommandSeriesOptions},...e.logLevel==null?{}:{logLevel:e.logLevel}}}function Cr(...e){return e.reduce((e,t)=>wr(e,t),{...xr})}function wr(e,t){let n=t.plugins,r=t.fastCommandSeriesOptions;return{...e,...t,shadowSourceProject:Tr(e.shadowSourceProject,t.shadowSourceProject),plugins:[...e.plugins,...n??[]],fastCommandSeriesOptions:Er(e.fastCommandSeriesOptions,r)}}function Tr(e,t){return t==null?e:{name:t.name??e.name,skill:{...e.skill,...t.skill},fastCommand:{...e.fastCommand,...t.fastCommand},subAgent:{...e.subAgent,...t.subAgent},rule:{...e.rule,...t.rule},globalMemory:{...e.globalMemory,...t.globalMemory},workspaceMemory:{...e.workspaceMemory,...t.workspaceMemory},project:{...e.project,...t.project}}}function Er(e,t){if(t==null)return e??{};if(e==null)return t;let n={};if(e.pluginOverrides!=null)for(let[t,r]of Object.entries(e.pluginOverrides))n[t]={...r};if(t.pluginOverrides!=null)for(let[e,r]of Object.entries(t.pluginOverrides))n[e]={...n[e],...r};let r=t.includeSeriesPrefix??e.includeSeriesPrefix,i=Object.keys(n).length>0;return r!=null&&i?{includeSeriesPrefix:r,pluginOverrides:n}:r==null?i?{pluginOverrides:n}:{}:{includeSeriesPrefix:r}}function Dr(e){return`pluginOptions`in e||`configLoaderOptions`in e||`loadUserConfig`in e}async function Or(e={}){gn().shouldExit&&u.default.exit(1);let t,n,r;Dr(e)?({pluginOptions:r={},cwd:n}={pluginOptions:e.pluginOptions,cwd:e.cwd},t=e.loadUserConfig??!0):(r=e,t=!0);let i={},a=!1,o=[],s;if(t){let e=hn(n);a=e.found,o=e.sources,e.found&&(i=Sr(e.config),s=e.config)}let c=Cr(i,r),{plugins:l=[],logLevel:p}=c,m=rn(`defineConfig`,p);a?m.info(`user config loaded`,{sources:o}):m.info(`no user config found, using defaults`,{workspaceDir:xr.workspaceDir,shadowSourceProjectName:xr.shadowSourceProject.name,logLevel:xr.logLevel});let h={logger:m,userConfigOptions:c,fs:d,path:f,glob:Je.default},g=l.filter(e=>e.type===bt.Input),_=l.filter(e=>e.type===bt.Output),v=await new yr().executePluginsInOrder(g,h,!1,s);if(v.workspace==null)throw Error(`Workspace not initialized by any plugin`);let y={workspace:v.workspace,ideConfigFiles:v.ideConfigFiles??[],...v.fastCommands!=null&&{fastCommands:v.fastCommands},...v.subAgents!=null&&{subAgents:v.subAgents},...v.skills!=null&&{skills:v.skills},...v.rules!=null&&{rules:v.rules},...v.globalMemory!=null&&{globalMemory:v.globalMemory},...v.aiAgentIgnoreConfigFiles!=null&&{aiAgentIgnoreConfigFiles:v.aiAgentIgnoreConfigFiles},...v.shadowSourceProjectDir!=null&&{shadowSourceProjectDir:v.shadowSourceProjectDir},...v.readmePrompts!=null&&{readmePrompts:v.readmePrompts},...v.globalGitIgnore!=null&&{globalGitIgnore:v.globalGitIgnore},...v.shadowGitExclude!=null&&{shadowGitExclude:v.shadowGitExclude}};return v.shadowSourceProjectDir!=null&&Ln(v.shadowSourceProjectDir,m),{context:y,outputPlugins:_,userConfigOptions:c}}const kr=Rr(/[A-Za-z]/),Ar=Rr(/[\dA-Za-z]/),jr=Rr(/[#-'*+\--9=?A-Z^-~]/);function Mr(e){return e!==null&&(e<32||e===127)}const Nr=Rr(/\d/),Pr=Rr(/[\dA-Fa-f]/),Fr=Rr(/[!-/:-@[-`{-~]/);function B(e){return e!==null&&e<-2}function V(e){return e!==null&&(e<0||e===32)}function H(e){return e===-2||e===-1||e===32}const Ir=Rr(/\p{P}|\p{S}/u),Lr=Rr(/\s/);function Rr(e){return t;function t(t){return t!==null&&t>-1&&e.test(String.fromCharCode(t))}}var zr=l(o(((e,t)=>{(function(){var e=t===void 0?function(){return this||(0,eval)(`this`)}():t.exports=i;e.format=i,e.vsprintf=r,typeof console<`u`&&typeof console.log==`function`&&(e.printf=n);function n(){console.log(i.apply(null,arguments))}function r(e,t){return i.apply(null,[e].concat(t))}function i(e){for(var t=1,n=[].slice.call(arguments),r=0,i=e.length,a=``,o,s=!1,c,l,u=!1,d,f=function(){return n[t++]},p=function(){for(var t=``;/\d/.test(e[r]);)t+=e[r++],o=e[r];return t.length>0?parseInt(t):null};r<i;++r)if(o=e[r],s)switch(s=!1,o==`.`?(u=!1,o=e[++r]):o==`0`&&e[r+1]==`.`?(u=!0,r+=2,o=e[r]):u=!0,d=p(),o){case`b`:a+=parseInt(f(),10).toString(2);break;case`c`:c=f(),typeof c==`string`||c instanceof String?a+=c:a+=String.fromCharCode(parseInt(c,10));break;case`d`:a+=parseInt(f(),10);break;case`f`:l=String(parseFloat(f()).toFixed(d||6)),a+=u?l:l.replace(/^0/,``);break;case`j`:a+=JSON.stringify(f());break;case`o`:a+=`0`+parseInt(f(),10).toString(8);break;case`s`:a+=f();break;case`x`:a+=`0x`+parseInt(f(),10).toString(16);break;case`X`:a+=`0x`+parseInt(f(),10).toString(16).toUpperCase();break;default:a+=o;break}else o===`%`?s=!0:a+=o;return a}})()}))(),1);const Br=Object.assign(Vr(Error),{eval:Vr(EvalError),range:Vr(RangeError),reference:Vr(ReferenceError),syntax:Vr(SyntaxError),type:Vr(TypeError),uri:Vr(URIError)});function Vr(e){return t.displayName=e.displayName||e.name,t;function t(t,...n){return new e(t&&(0,zr.default)(t,...n))}}const Hr={}.hasOwnProperty,Ur={yaml:`-`,toml:`+`};function Wr(e){let t=[],n=-1,r=Array.isArray(e)?e:e?[e]:[`yaml`];for(;++n<r.length;)t[n]=Gr(r[n]);return t}function Gr(e){let t=e;if(typeof t==`string`){if(!Hr.call(Ur,t))throw Br("Missing matter definition for `%s`",t);t={type:t,marker:Ur[t]}}else if(typeof t!=`object`)throw Br("Expected matter to be an object, not `%j`",t);if(!Hr.call(t,`type`))throw Br("Missing `type` in matter `%j`",t);if(!Hr.call(t,`fence`)&&!Hr.call(t,`marker`))throw Br("Missing `marker` or `fence` in matter `%j`",t);return t}function Kr(e){let t=Wr(e),n={},r=-1;for(;++r<t.length;){let e=t[r],i=Jr(e,`open`).charCodeAt(0),a=qr(e),o=n[i];Array.isArray(o)?o.push(a):n[i]=[a]}return{flow:n}}function qr(e){let t=e.anywhere,n=e.type,r=n+`Fence`,i=r+`Sequence`,a=n+`Value`,o={tokenize:u,partial:!0},s,c=0;return{tokenize:l,concrete:!0};function l(l,u,d){let f=this;return p;function p(a){let o=f.now();return o.column===1&&(o.line===1||t)&&(s=Jr(e,`open`),c=0,a===s.charCodeAt(c))?(l.enter(n),l.enter(r),l.enter(i),m(a)):d(a)}function m(e){return c===s.length?(l.exit(i),H(e)?(l.enter(`whitespace`),h(e)):g(e)):e===s.charCodeAt(c++)?(l.consume(e),m):d(e)}function h(e){return H(e)?(l.consume(e),h):(l.exit(`whitespace`),g(e))}function g(t){return B(t)?(l.exit(r),l.enter(`lineEnding`),l.consume(t),l.exit(`lineEnding`),s=Jr(e,`close`),c=0,l.attempt(o,b,_)):d(t)}function _(e){return e===null||B(e)?y(e):(l.enter(a),v(e))}function v(e){return e===null||B(e)?(l.exit(a),y(e)):(l.consume(e),v)}function y(e){return e===null?d(e):(l.enter(`lineEnding`),l.consume(e),l.exit(`lineEnding`),l.attempt(o,b,_))}function b(e){return l.exit(n),u(e)}}function u(e,t,n){let a=0;return o;function o(t){return t===s.charCodeAt(a)?(e.enter(r),e.enter(i),c(t)):n(t)}function c(t){return a===s.length?(e.exit(i),H(t)?(e.enter(`whitespace`),l(t)):u(t)):t===s.charCodeAt(a++)?(e.consume(t),c):n(t)}function l(t){return H(t)?(e.consume(t),l):(e.exit(`whitespace`),u(t))}function u(i){return i===null||B(i)?(e.exit(r),t(i)):n(i)}}}function Jr(e,t){return e.marker?Yr(e.marker,t).repeat(3):Yr(e.fence,t)}function Yr(e,t){return typeof e==`string`?e:e[t]}function Xr(e){if(typeof e!=`string`)throw TypeError(`Expected a string`);return e.replace(/[|\\{}()[\]^$+*?.]/g,`\\$&`).replace(/-/g,`\\x2d`)}function Zr(e){let t=Wr(e),n={},r={},i=-1;for(;++i<t.length;){let e=t[i];n[e.type]=Qr(e),r[e.type]=$r,r[e.type+`Value`]=ei}return{enter:n,exit:r}}function Qr(e){return t;function t(t){this.enter({type:e.type,value:``},t),this.buffer()}}function $r(e){let t=this.resume(),n=this.stack[this.stack.length-1];`value`in n,this.exit(e),n.value=t.replace(/^(\r?\n|\r)|(\r?\n|\r)$/g,``)}function ei(e){this.config.enter.data.call(this,e),this.config.exit.data.call(this,e)}function ti(e){let t=[],n={},r=Wr(e),i=-1;for(;++i<r.length;){let e=r[i];n[e.type]=ni(e);let a=ri(e,`open`);t.push({atBreak:!0,character:a.charAt(0),after:Xr(a.charAt(1))})}return{unsafe:t,handlers:n}}function ni(e){let t=ri(e,`open`),n=ri(e,`close`);return r;function r(e){return t+(e.value?`
1043
1043
  `+e.value:``)+`
1044
1044
  `+n}}function ri(e,t){return e.marker?ii(e.marker,t).repeat(3):ii(e.fence,t)}function ii(e,t){return typeof e==`string`?e:e[t]}function ai(e){let t=this,n=e||`yaml`,r=t.data(),i=r.micromarkExtensions||=[],a=r.fromMarkdownExtensions||=[],o=r.toMarkdownExtensions||=[];i.push(Kr(n)),a.push(Zr(n)),o.push(ti(n))}function oi(e,t){let n=String(e);if(typeof t!=`string`)throw TypeError(`Expected character`);let r=0,i=n.indexOf(t);for(;i!==-1;)r++,i=n.indexOf(t,i+t.length);return r}const si=(function(e){if(e==null)return fi;if(typeof e==`function`)return di(e);if(typeof e==`object`)return Array.isArray(e)?ci(e):li(e);if(typeof e==`string`)return ui(e);throw Error(`Expected function, string, or object as test`)});function ci(e){let t=[],n=-1;for(;++n<e.length;)t[n]=si(e[n]);return di(r);function r(...e){let n=-1;for(;++n<t.length;)if(t[n].apply(this,e))return!0;return!1}}function li(e){let t=e;return di(n);function n(n){let r=n,i;for(i in e)if(r[i]!==t[i])return!1;return!0}}function ui(e){return di(t);function t(t){return t&&t.type===e}}function di(e){return t;function t(t,n,r){return!!(pi(t)&&e.call(this,t,typeof n==`number`?n:void 0,r||void 0))}}function fi(){return!0}function pi(e){return typeof e==`object`&&!!e&&`type`in e}function mi(e){return`\x1B[33m`+e+`\x1B[39m`}const hi=[];function gi(e,t,n,r){let i;typeof t==`function`&&typeof n!=`function`?(r=n,n=t):i=t;let a=si(i),o=r?-1:1;s(e,void 0,[])();function s(e,i,c){let l=e&&typeof e==`object`?e:{};if(typeof l.type==`string`){let t=typeof l.tagName==`string`?l.tagName:typeof l.name==`string`?l.name:void 0;Object.defineProperty(u,`name`,{value:`node (`+mi(e.type+(t?`<`+t+`>`:``))+`)`})}return u;function u(){let l=hi,u,d,f;if((!t||a(e,i,c[c.length-1]||void 0))&&(l=_i(n(e,c)),l[0]===!1))return l;if(`children`in e&&e.children){let t=e;if(t.children&&l[0]!==`skip`)for(d=(r?t.children.length:-1)+o,f=c.concat(t);d>-1&&d<t.children.length;){let e=t.children[d];if(u=s(e,d,f)(),u[0]===!1)return u;d=typeof u[1]==`number`?u[1]:d+o}}return l}}}function _i(e){return Array.isArray(e)?e:typeof e==`number`?[!0,e]:e==null?hi:[e]}function vi(e,t,n){let r=si((n||{}).ignore||[]),i=yi(t),a=-1;for(;++a<i.length;)gi(e,`text`,o);function o(e,t){let n=-1,i;for(;++n<t.length;){let e=t[n],a=i?i.children:void 0;if(r(e,a?a.indexOf(e):void 0,i))return;i=e}if(i)return s(e,t)}function s(e,t){let n=t[t.length-1],r=i[a][0],o=i[a][1],s=0,c=n.children.indexOf(e),l=!1,u=[];r.lastIndex=0;let d=r.exec(e.value);for(;d;){let n=d.index,i={index:d.index,input:d.input,stack:[...t,e]},a=o(...d,i);if(typeof a==`string`&&(a=a.length>0?{type:`text`,value:a}:void 0),a===!1?r.lastIndex=n+1:(s!==n&&u.push({type:`text`,value:e.value.slice(s,n)}),Array.isArray(a)?u.push(...a):a&&u.push(a),s=n+d[0].length,l=!0),!r.global)break;d=r.exec(e.value)}return l?(s<e.value.length&&u.push({type:`text`,value:e.value.slice(s)}),n.children.splice(c,1,...u)):u=[e],c+u.length}}function yi(e){let t=[];if(!Array.isArray(e))throw TypeError(`Expected find and replace tuple or list of tuples`);let n=!e[0]||Array.isArray(e[0])?e:[e],r=-1;for(;++r<n.length;){let e=n[r];t.push([bi(e[0]),xi(e[1])])}return t}function bi(e){return typeof e==`string`?new RegExp(Xr(e),`g`):e}function xi(e){return typeof e==`function`?e:function(){return e}}const Si=`phrasing`,Ci=[`autolink`,`link`,`image`,`label`];function wi(){return{transforms:[Mi],enter:{literalAutolink:Ei,literalAutolinkEmail:Di,literalAutolinkHttp:Di,literalAutolinkWww:Di},exit:{literalAutolink:ji,literalAutolinkEmail:Ai,literalAutolinkHttp:Oi,literalAutolinkWww:ki}}}function Ti(){return{unsafe:[{character:`@`,before:`[+\\-.\\w]`,after:`[\\-.\\w]`,inConstruct:Si,notInConstruct:Ci},{character:`.`,before:`[Ww]`,after:`[\\-.\\w]`,inConstruct:Si,notInConstruct:Ci},{character:`:`,before:`[ps]`,after:`\\/`,inConstruct:Si,notInConstruct:Ci}]}}function Ei(e){this.enter({type:`link`,title:null,url:``,children:[]},e)}function Di(e){this.config.enter.autolinkProtocol.call(this,e)}function Oi(e){this.config.exit.autolinkProtocol.call(this,e)}function ki(e){this.config.exit.data.call(this,e);let t=this.stack[this.stack.length-1];t.type,t.url=`http://`+this.sliceSerialize(e)}function Ai(e){this.config.exit.autolinkEmail.call(this,e)}function ji(e){this.exit(e)}function Mi(e){vi(e,[[/(https?:\/\/|www(?=\.))([-.\w]+)([^ \t\r\n]*)/gi,Ni],[/(?<=^|\s|\p{P}|\p{S})([-.\w+]+)@([-\w]+(?:\.[-\w]+)+)/gu,Pi]],{ignore:[`link`,`linkReference`]})}function Ni(e,t,n,r,i){let a=``;if(!Li(i)||(/^w/i.test(t)&&(n=t+n,t=``,a=`http://`),!Fi(n)))return!1;let o=Ii(n+r);if(!o[0])return!1;let s={type:`link`,title:null,url:a+t+o[0],children:[{type:`text`,value:t+o[0]}]};return o[1]?[s,{type:`text`,value:o[1]}]:s}function Pi(e,t,n,r){return!Li(r,!0)||/[-\d_]$/.test(n)?!1:{type:`link`,title:null,url:`mailto:`+t+`@`+n,children:[{type:`text`,value:t+`@`+n}]}}function Fi(e){let t=e.split(`.`);return!(t.length<2||t[t.length-1]&&(/_/.test(t[t.length-1])||!/[a-zA-Z\d]/.test(t[t.length-1]))||t[t.length-2]&&(/_/.test(t[t.length-2])||!/[a-zA-Z\d]/.test(t[t.length-2])))}function Ii(e){let t=/[!"&'),.:;<>?\]}]+$/.exec(e);if(!t)return[e,void 0];e=e.slice(0,t.index);let n=t[0],r=n.indexOf(`)`),i=oi(e,`(`),a=oi(e,`)`);for(;r!==-1&&i>a;)e+=n.slice(0,r+1),n=n.slice(r+1),r=n.indexOf(`)`),a++;return[e,n]}function Li(e,t){let n=e.input.charCodeAt(e.index-1);return(e.index===0||Lr(n)||Ir(n))&&(!t||n!==47)}function Ri(e){return e.replace(/[\t\n\r ]+/g,` `).replace(/^ | $/g,``).toLowerCase().toUpperCase()}Ji.peek=qi;function zi(){this.buffer()}function Bi(e){this.enter({type:`footnoteReference`,identifier:``,label:``},e)}function Vi(){this.buffer()}function Hi(e){this.enter({type:`footnoteDefinition`,identifier:``,label:``,children:[]},e)}function Ui(e){let t=this.resume(),n=this.stack[this.stack.length-1];n.type,n.identifier=Ri(this.sliceSerialize(e)).toLowerCase(),n.label=t}function Wi(e){this.exit(e)}function Gi(e){let t=this.resume(),n=this.stack[this.stack.length-1];n.type,n.identifier=Ri(this.sliceSerialize(e)).toLowerCase(),n.label=t}function Ki(e){this.exit(e)}function qi(){return`[`}function Ji(e,t,n,r){let i=n.createTracker(r),a=i.move(`[^`),o=n.enter(`footnoteReference`),s=n.enter(`reference`);return a+=i.move(n.safe(n.associationId(e),{after:`]`,before:a})),s(),o(),a+=i.move(`]`),a}function Yi(){return{enter:{gfmFootnoteCallString:zi,gfmFootnoteCall:Bi,gfmFootnoteDefinitionLabelString:Vi,gfmFootnoteDefinition:Hi},exit:{gfmFootnoteCallString:Ui,gfmFootnoteCall:Wi,gfmFootnoteDefinitionLabelString:Gi,gfmFootnoteDefinition:Ki}}}function Xi(e){let t=!1;return e&&e.firstLineBlank&&(t=!0),{handlers:{footnoteDefinition:n,footnoteReference:Ji},unsafe:[{character:`[`,inConstruct:[`label`,`phrasing`,`reference`]}]};function n(e,n,r,i){let a=r.createTracker(i),o=a.move(`[^`),s=r.enter(`footnoteDefinition`),c=r.enter(`label`);return o+=a.move(r.safe(r.associationId(e),{before:o,after:`]`})),c(),o+=a.move(`]:`),e.children&&e.children.length>0&&(a.shift(4),o+=a.move((t?`
1045
1045
  `:` `)+r.indentLines(r.containerFlow(e,a.current()),t?Qi:Zi))),s(),o}}function Zi(e,t,n){return t===0?e:Qi(e,t,n)}function Qi(e,t,n){return(n?``:` `)+e}const $i=[`autolink`,`destinationLiteral`,`destinationRaw`,`reference`,`titleQuote`,`titleApostrophe`];ia.peek=aa;function ea(){return{canContainEols:[`delete`],enter:{strikethrough:na},exit:{strikethrough:ra}}}function ta(){return{unsafe:[{character:`~`,inConstruct:`phrasing`,notInConstruct:$i}],handlers:{delete:ia}}}function na(e){this.enter({type:`delete`,children:[]},e)}function ra(e){this.exit(e)}function ia(e,t,n,r){let i=n.createTracker(r),a=n.enter(`strikethrough`),o=i.move(`~~`);return o+=n.containerPhrasing(e,{...i.current(),before:o,after:`~`}),o+=i.move(`~~`),a(),o}function aa(){return`~`}function oa(e){return e.length}function sa(e,t){let n=t||{},r=(n.align||[]).concat(),i=n.stringLength||oa,a=[],o=[],s=[],c=[],l=0,u=-1;for(;++u<e.length;){let t=[],r=[],a=-1;for(e[u].length>l&&(l=e[u].length);++a<e[u].length;){let o=ca(e[u][a]);if(n.alignDelimiters!==!1){let e=i(o);r[a]=e,(c[a]===void 0||e>c[a])&&(c[a]=e)}t.push(o)}o[u]=t,s[u]=r}let d=-1;if(typeof r==`object`&&`length`in r)for(;++d<l;)a[d]=la(r[d]);else{let e=la(r);for(;++d<l;)a[d]=e}d=-1;let f=[],p=[];for(;++d<l;){let e=a[d],t=``,r=``;e===99?(t=`:`,r=`:`):e===108?t=`:`:e===114&&(r=`:`);let i=n.alignDelimiters===!1?1:Math.max(1,c[d]-t.length-r.length),o=t+`-`.repeat(i)+r;n.alignDelimiters!==!1&&(i=t.length+i+r.length,i>c[d]&&(c[d]=i),p[d]=i),f[d]=o}o.splice(1,0,f),s.splice(1,0,p),u=-1;let m=[];for(;++u<o.length;){let e=o[u],t=s[u];d=-1;let r=[];for(;++d<l;){let i=e[d]||``,o=``,s=``;if(n.alignDelimiters!==!1){let e=c[d]-(t[d]||0),n=a[d];n===114?o=` `.repeat(e):n===99?e%2?(o=` `.repeat(e/2+.5),s=` `.repeat(e/2-.5)):(o=` `.repeat(e/2),s=o):s=` `.repeat(e)}n.delimiterStart!==!1&&!d&&r.push(`|`),n.padding!==!1&&!(n.alignDelimiters===!1&&i===``)&&(n.delimiterStart!==!1||d)&&r.push(` `),n.alignDelimiters!==!1&&r.push(o),r.push(i),n.alignDelimiters!==!1&&r.push(s),n.padding!==!1&&r.push(` `),(n.delimiterEnd!==!1||d!==l-1)&&r.push(`|`)}m.push(n.delimiterEnd===!1?r.join(``).replace(/ +$/,``):r.join(``))}return m.join(`
@@ -1234,6 +1234,7 @@ $&`).replace(/(?:^|\n)([\t ].*)(?:([\n\t ]*)\n(?![\n\t ]))?/g,`$1$2`).replace(/\
1234
1234
  `).trim()}normalizeContent(e){let t=e.trim();return t.length===0?``:`${t}\n`}async writeGitExcludeFile(e,t,n,r){let i=e.collectedInputContext.workspace.directory.path,a={pathKind:R.Relative,path:f.relative(i,t),basePath:i,getDirectoryName:()=>f.basename(f.dirname(t)),getAbsolutePath:()=>t};if(e.dryRun===!0)return this.log.trace({action:`dryRun`,type:`gitExclude`,path:t,label:r}),{path:a,success:!0,skipped:!1};try{let e=f.dirname(t);d.existsSync(e)||(d.mkdirSync(e,{recursive:!0}),this.log.debug({action:`mkdir`,path:e,message:`Created .git/info directory`}));let i=this.normalizeContent(n);return d.writeFileSync(t,i,`utf8`),this.log.trace({action:`write`,type:`gitExclude`,path:t,label:r}),{path:a,success:!0}}catch(e){let n=e instanceof Error?e.message:String(e);return this.log.error({action:`write`,type:`gitExclude`,path:t,label:r,error:n}),{path:a,success:!1,error:e}}}};const Xv=z;function Zv(){return Xv[`public/gitignore`]?.content??``}var Qv=class extends Wv{constructor(){super(`GitIgnoreInputPlugin`,{fallbackContent:Zv()})}getFilePath(e){return f.join(e,`public`,`gitignore`)}getResultKey(){return`globalGitIgnore`}},$v=class extends zg{constructor(){super(`GlobalMemoryInputPlugin`)}async collect(e){let{userConfigOptions:t,fs:n,path:r,globalScope:i}=e,{shadowProjectDir:a}=this.resolveBasePaths(t),o=this.resolveShadowPath(t.shadowSourceProject.globalMemory.dist,a);if(!n.existsSync(o))return this.log.warn({action:`collect`,reason:`fileNotFound`,path:o}),{};if(!n.statSync(o).isFile())return this.log.warn({action:`collect`,reason:`notAFile`,path:o}),{};let s=n.readFileSync(o,`utf8`),c=Ng(s),l;if(i!=null)try{l=await _v(s,{globalScope:i,basePath:r.dirname(o)})}catch(e){throw e instanceof e_&&(this.log.error(`MDX compilation failed: ${e.message}`),this.log.error(`Please check your configuration file (~/.aindex/.tnmsc.json) and ensure all required variables are defined.`),this.log.error(`For example, if using {profile.name}, add a "profile" section with "name" field to your config.`),u.default.exit(1)),e}else l=c.contentWithoutFrontMatter;return this.log.debug({action:`collect`,path:o,contentLength:l.length}),{globalMemory:{type:L.GlobalMemory,content:l,length:l.length,filePathKind:R.Relative,...c.rawFrontMatter!=null&&{rawFrontMatter:c.rawFrontMatter},markdownAst:c.markdownAst,markdownContents:c.markdownContents,dir:{pathKind:R.Relative,path:r.basename(o),basePath:r.dirname(o),getDirectoryName:()=>r.basename(o),getAbsolutePath:()=>o},parentDirectoryPath:{type:wt.UserHome,directory:{pathKind:R.Relative,path:``,basePath:p.homedir(),getDirectoryName:()=>r.basename(p.homedir()),getAbsolutePath:()=>p.homedir()}}}}}},ey=class extends zg{constructor(){super(`IdeConfigInputPlugin`)}collect(e){let{userConfigOptions:t,fs:n,path:r}=e,{shadowProjectDir:i}=this.resolveBasePaths(t),a=[`.editorconfig`,`.idea/codeStyles/Project.xml`,`.idea/codeStyles/codeStyleConfig.xml`,`.idea/.gitignore`,`.vscode/settings.json`,`.vscode/extensions.json`],o=[];for(let e of a){let t=r.join(i,e);if(n.existsSync(t)&&n.statSync(t).isFile()){let i=n.readFileSync(t,`utf8`),a=Tt.Original;e.includes(`.vscode`)?a=Tt.VSCode:e.includes(`.idea`)?a=Tt.IntellijIDEA:e.includes(`.editorconfig`)&&(a=Tt.EditorConfig),o.push({type:a,content:i,length:i.length,filePathKind:R.Absolute,dir:{pathKind:R.Absolute,path:t,getDirectoryName:()=>r.basename(t)}})}}return{ideConfigFiles:o}}};const ty=`AGENTS.md`,ny=`prompts`,ry=`skills`,iy=`SKILL.md`,ay=`.aiassistant`,oy=`rules`,sy=`always.md`,cy=`codex`,ly=[`IntelliJIdea`,`WebStorm`,`RustRover`,`PyCharm`,`PyCharmCE`,`PhpStorm`,`GoLand`,`CLion`,`DataGrip`,`RubyMine`,`Rider`,`DataSpell`,`Aqua`];var uy=class extends Ig{constructor(){super(`JetBrainsAIAssistantCodexOutputPlugin`,{outputFileName:ty,dependsOn:[`AgentsOutputPlugin`],indexignore:`.aiignore`})}async registerProjectOutputDirs(e){let t=[],{projects:n}=e.collectedInputContext.workspace;for(let e of n)e.dirFromWorkspacePath!=null&&t.push(this.createProjectRulesDirRelativePath(e.dirFromWorkspacePath));return t}async registerProjectOutputFiles(e){let t=[],{projects:n}=e.collectedInputContext.workspace;for(let e of n){let n=e.dirFromWorkspacePath;if(n!=null&&(e.rootMemoryPrompt!=null&&t.push(this.createProjectRuleFileRelativePath(n,sy)),e.childMemoryPrompts!=null))for(let r of e.childMemoryPrompts){let e=this.buildChildRuleFileName(r);t.push(this.createProjectRuleFileRelativePath(n,e))}}return t.push(...this.registerProjectIgnoreOutputFiles(n)),t}async registerGlobalOutputDirs(e){let t=[],n=this.resolveCodexDirs();for(let r of n){let n=f.join(r,ny);t.push({pathKind:R.Relative,path:ny,basePath:r,getDirectoryName:()=>ny,getAbsolutePath:()=>n});let{skills:i}=e.collectedInputContext;if(!(i==null||i.length===0))for(let e of i){let n=e.yamlFrontMatter?.name??e.dir.getDirectoryName(),i=f.join(r,ry,n);t.push({pathKind:R.Relative,path:f.join(ry,n),basePath:r,getDirectoryName:()=>n,getAbsolutePath:()=>i})}}return t}async registerGlobalOutputFiles(){return this.resolveCodexDirs().map(e=>({pathKind:R.Relative,path:ty,basePath:e,getDirectoryName:()=>cy,getAbsolutePath:()=>f.join(e,ty)}))}async canWrite(e){let{globalMemory:t,fastCommands:n,skills:r,workspace:i,aiAgentIgnoreConfigFiles:a}=e.collectedInputContext,o=t!=null,s=(n?.length??0)>0,c=(r?.length??0)>0,l=i.projects.some(e=>e.rootMemoryPrompt!=null||(e.childMemoryPrompts?.length??0)>0),u=a?.some(e=>e.fileName===`.aiignore`)??!1;return o||s||c||l||u?!0:(this.log.trace({action:`skip`,reason:`noOutputs`}),!1)}async writeProjectOutputs(e){let{projects:t}=e.collectedInputContext.workspace,n=[],r=[];for(let r of t)if(r.dirFromWorkspacePath!=null){if(r.rootMemoryPrompt!=null){let t=this.buildAlwaysRuleContent(r.rootMemoryPrompt.content),i=await this.writeProjectRuleFile(e,r,sy,t,`projectRootRule`);n.push(i)}if(r.childMemoryPrompts!=null)for(let t of r.childMemoryPrompts){let i=this.buildChildRuleFileName(t),a=this.buildGlobRuleContent(t),o=await this.writeProjectRuleFile(e,r,i,a,`projectChildRule`);n.push(o)}}let i=await this.writeProjectIgnoreFiles(e);return n.push(...i),{files:n,dirs:r}}async writeGlobalOutputs(e){let{globalMemory:t,fastCommands:n,skills:r}=e.collectedInputContext,i=[],a=[],o=this.resolveCodexDirs();if(o.length===0)return{files:i,dirs:a};for(let a of o){if(t!=null){let n=f.join(a,ty),r={pathKind:R.Relative,path:ty,basePath:a,getDirectoryName:()=>cy,getAbsolutePath:()=>n};if(e.dryRun===!0)this.log.trace({action:`dryRun`,type:`globalMemory`,path:n}),i.push({path:r,success:!0,skipped:!1});else try{this.ensureDirectory(a),d.writeFileSync(n,t.content,`utf8`),this.log.trace({action:`write`,type:`globalMemory`,path:n}),i.push({path:r,success:!0})}catch(e){let t=e instanceof Error?e.message:String(e);this.log.error({action:`write`,type:`globalMemory`,path:n,error:t}),i.push({path:r,success:!1,error:e})}}if(n!=null&&n.length>0)for(let t of n){let n=await this.writeGlobalFastCommand(e,a,t);i.push(...n)}if(!(r==null||r.length===0))for(let t of r){let n=await this.writeGlobalSkill(e,a,t);i.push(...n)}}return{files:i,dirs:a}}resolveCodexDirs(){let e=f.join(Xe(),`JetBrains`);if(!this.existsSync(e))return[];try{return this.readdirSync(e,{withFileTypes:!0}).filter(e=>e.isDirectory()?this.isSupportedIdeDir(e.name):!1).map(t=>f.join(e,t.name,`aia`,cy))}catch(t){let n=t instanceof Error?t.message:String(t);return this.log.warn({action:`scan`,type:`jetbrains`,path:e,error:n}),[]}}createProjectRulesDirRelativePath(e){let t=f.join(e.path,ay,oy);return{pathKind:R.Relative,path:t,basePath:e.basePath,getDirectoryName:()=>oy,getAbsolutePath:()=>f.join(e.basePath,t)}}createProjectRuleFileRelativePath(e,t){let n=f.join(e.path,ay,oy,t);return{pathKind:R.Relative,path:n,basePath:e.basePath,getDirectoryName:()=>oy,getAbsolutePath:()=>f.join(e.basePath,n)}}buildChildRuleFileName(e){let t=(e.workingChildDirectoryPath?.path??e.dir.path).replaceAll(`\\`,`/`).replaceAll(/^\/+|\/+$/g,``).replaceAll(`/`,`-`);return`glob-${t.length>0?t:`root`}.md`}buildChildRulePattern(e){let t=(e.workingChildDirectoryPath?.path??e.dir.path).replaceAll(`\\`,`/`).replaceAll(/^\/+|\/+$/g,``);return t.length===0?`**/*`:`${t}/**`}buildAlwaysRuleContent(e){return jg({apply:`始终`},e)}buildGlobRuleContent(e){return jg({apply:`按文件模式`,模式:this.buildChildRulePattern(e)},e.content)}async writeProjectRuleFile(e,t,n,r,i){let a=t.dirFromWorkspacePath,o=f.join(a.basePath,a.path,ay,oy),s=f.join(o,n),c=this.createProjectRuleFileRelativePath(a,n);if(e.dryRun===!0)return this.log.trace({action:`dryRun`,type:i,path:s}),{path:c,success:!0,skipped:!1};try{return this.ensureDirectory(o),d.writeFileSync(s,r,`utf8`),this.log.trace({action:`write`,type:i,path:s}),{path:c,success:!0}}catch(e){let t=e instanceof Error?e.message:String(e);return this.log.error({action:`write`,type:i,path:s,error:t}),{path:c,success:!1,error:e}}}isSupportedIdeDir(e){return ly.some(t=>e.startsWith(t))}async writeGlobalFastCommand(e,t,n){let r=[],i=this.getTransformOptionsFromContext(e),a=this.transformFastCommandName(n,i),o=f.join(t,ny),s=f.join(o,a),c={pathKind:R.Relative,path:f.join(ny,a),basePath:t,getDirectoryName:()=>ny,getAbsolutePath:()=>s},l=this.buildMarkdownContentWithRaw(n.content,n.yamlFrontMatter,n.rawFrontMatter);if(e.dryRun===!0)return this.log.trace({action:`dryRun`,type:`globalFastCommand`,path:s}),[{path:c,success:!0,skipped:!1}];try{this.ensureDirectory(o),d.writeFileSync(s,l,`utf8`),this.log.trace({action:`write`,type:`globalFastCommand`,path:s}),r.push({path:c,success:!0})}catch(e){let t=e instanceof Error?e.message:String(e);this.log.error({action:`write`,type:`globalFastCommand`,path:s,error:t}),r.push({path:c,success:!1,error:e})}return r}async writeGlobalSkill(e,t,n){let r=[],i=n.yamlFrontMatter?.name??n.dir.getDirectoryName(),a=f.join(t,ry,i),o=f.join(a,iy),s={pathKind:R.Relative,path:f.join(ry,i,iy),basePath:t,getDirectoryName:()=>i,getAbsolutePath:()=>o},c=this.buildCodexSkillContent(n);if(e.dryRun===!0)return this.log.trace({action:`dryRun`,type:`globalSkill`,path:o}),[{path:s,success:!0,skipped:!1}];try{if(this.ensureDirectory(a),d.writeFileSync(o,c,`utf8`),this.log.trace({action:`write`,type:`globalSkill`,path:o}),r.push({path:s,success:!0}),n.childDocs!=null)for(let o of n.childDocs){let n=await this.writeSkillReferenceDocument(e,a,i,o,t);r.push(...n)}if(n.resources!=null)for(let o of n.resources){let n=await this.writeSkillResource(e,a,i,o,t);r.push(...n)}}catch(e){let t=e instanceof Error?e.message:String(e);this.log.error({action:`write`,type:`globalSkill`,path:o,error:t}),r.push({path:s,success:!1,error:e})}return r}buildCodexSkillContent(e){let t=e.yamlFrontMatter,n=this.normalizeSkillName(t.name,64),r=this.normalizeToSingleLine(t.description,1024),i={};t.displayName!=null&&(i[`short-description`]=t.displayName),t.version!=null&&(i.version=t.version),t.author!=null&&(i.author=t.author),t.keywords!=null&&t.keywords.length>0&&(i.keywords=[...t.keywords]);let a={name:n,description:r};return Object.keys(i).length>0&&(a.metadata=i),t.allowTools!=null&&t.allowTools.length>0&&(a[`allowed-tools`]=t.allowTools.join(` `)),jg(a,e.content)}normalizeSkillName(e,t){let n=e.toLowerCase().replaceAll(/[^a-z0-9-]/g,`-`).replaceAll(/-+/g,`-`).replaceAll(/^-+|-+$/g,``);return n.length>t&&(n=n.slice(0,t).replace(/-+$/,``)),n}normalizeToSingleLine(e,t){let n=e.replaceAll(/[\r\n]+/g,` `).replaceAll(/\s+/g,` `).trim();return n.length>t?`${n.slice(0,t-3)}...`:n}async writeSkillReferenceDocument(e,t,n,r,i){let a=[],o=r.dir.path.replace(/\.mdx$/,`.md`),s=f.join(t,o),c={pathKind:R.Relative,path:f.join(ry,n,o),basePath:i,getDirectoryName:()=>n,getAbsolutePath:()=>s};if(e.dryRun===!0)return this.log.trace({action:`dryRun`,type:`skillRefDoc`,path:s}),[{path:c,success:!0,skipped:!1}];try{let e=f.dirname(s);this.ensureDirectory(e),d.writeFileSync(s,r.content,`utf8`),this.log.trace({action:`write`,type:`skillRefDoc`,path:s}),a.push({path:c,success:!0})}catch(e){let t=e instanceof Error?e.message:String(e);this.log.error({action:`write`,type:`skillRefDoc`,path:s,error:t}),a.push({path:c,success:!1,error:e})}return a}async writeSkillResource(e,t,n,r,i){let a=[],o=f.join(t,r.relativePath),s={pathKind:R.Relative,path:f.join(ry,n,r.relativePath),basePath:i,getDirectoryName:()=>n,getAbsolutePath:()=>o};if(e.dryRun===!0)return this.log.trace({action:`dryRun`,type:`skillResource`,path:o}),[{path:s,success:!0,skipped:!1}];try{let e=f.dirname(o);this.ensureDirectory(e),d.writeFileSync(o,r.content,`utf8`),this.log.trace({action:`write`,type:`skillResource`,path:o}),a.push({path:s,success:!0})}catch(e){let t=e instanceof Error?e.message:String(e);this.log.error({action:`write`,type:`skillResource`,path:o,error:t}),a.push({path:s,success:!1,error:e})}return a}};const dy=`.idea`,fy=[`.editorconfig`,`.idea/codeStyles/Project.xml`,`.idea/codeStyles/codeStyleConfig.xml`,`.idea/.gitignore`];var py=class extends Ig{constructor(){super(`JetBrainsIDECodeStyleConfigOutputPlugin`)}async registerProjectOutputFiles(e){let t=[],{projects:n}=e.collectedInputContext.workspace,{ideConfigFiles:r}=e.collectedInputContext;if(!r.some(e=>e.type===Tt.IntellijIDEA||e.type===Tt.EditorConfig))return t;for(let e of n){let n=e.dirFromWorkspacePath;if(n!=null&&e.isPromptSourceProject!==!0)for(let e of fy){let r=this.joinPath(n.path,e);t.push({pathKind:R.Relative,path:r,basePath:n.basePath,getDirectoryName:()=>this.dirname(e),getAbsolutePath:()=>this.resolvePath(n.basePath,r)})}}return t}async canWrite(e){let{ideConfigFiles:t}=e.collectedInputContext;return t.some(e=>e.type===Tt.IntellijIDEA||e.type===Tt.EditorConfig)?!0:(this.log.debug(`skipped`,{reason:`no JetBrains IDE config files found`}),!1)}async writeProjectOutputs(e){let{projects:t}=e.collectedInputContext.workspace,{ideConfigFiles:n}=e.collectedInputContext,r=[],i=[],a=n.filter(e=>e.type===Tt.IntellijIDEA||e.type===Tt.EditorConfig);for(let n of t){let t=n.dirFromWorkspacePath;if(t==null)continue;let i=n.name??`unknown`;for(let n of a){let a=await this.writeConfigFile(e,t,n,`project:${i}`);r.push(a)}}return{files:r,dirs:i}}async writeConfigFile(e,t,n,r){let i=this.getTargetRelativePath(n),a=this.resolvePath(t.basePath,t.path,i),o={pathKind:R.Relative,path:this.joinPath(t.path,i),basePath:t.basePath,getDirectoryName:()=>this.dirname(i),getAbsolutePath:()=>a};if(e.dryRun===!0)return this.log.trace({action:`dryRun`,type:`config`,path:a,label:r}),{path:o,success:!0,skipped:!1};try{let e=this.dirname(a);return this.ensureDirectory(e),this.writeFileSync(a,n.content),this.log.trace({action:`write`,type:`config`,path:a,label:r}),{path:o,success:!0}}catch(e){let t=e instanceof Error?e.message:String(e);return this.log.error({action:`write`,type:`config`,path:a,label:r,error:t}),{path:o,success:!1,error:e}}}getTargetRelativePath(e){let t=e.dir.path;if(e.type===Tt.EditorConfig)return`.editorconfig`;if(e.type!==Tt.IntellijIDEA)return this.basename(t);let n=t.indexOf(dy);return n===-1?this.joinPath(dy,`codeStyles`,this.basename(t)):t.slice(Math.max(0,n))}},my=class extends zg{constructor(){super(`MarkdownWhitespaceCleanupEffectInputPlugin`),this.registerEffect(`markdown-whitespace-cleanup`,this.cleanupWhitespace.bind(this),30)}async cleanupWhitespace(e){let{fs:t,path:n,shadowProjectDir:r,dryRun:i,logger:a}=e,o=[],s=[],c=[],l=[n.join(r,`src`),n.join(r,`app`),n.join(r,`dist`)];for(let n of l){if(!t.existsSync(n)){a.debug({action:`whitespace-cleanup`,message:`Directory does not exist, skipping`,dir:n});continue}this.processDirectory(e,n,o,s,c,i??!1)}let u=c.length>0;return u&&a.warn({action:`whitespace-cleanup`,errors:c.map(e=>({path:e.path,error:e.error.message}))}),{success:!u,description:i?`Would modify ${o.length} files, skip ${s.length} files`:`Modified ${o.length} files, skipped ${s.length} files`,modifiedFiles:o,skippedFiles:s,...u&&{error:Error(`${c.length} errors occurred during cleanup`)}}}processDirectory(e,t,n,r,i,a){let{fs:o,path:s,logger:c}=e,l;try{l=o.readdirSync(t,{withFileTypes:!0})}catch(e){i.push({path:t,error:e}),c.warn({action:`whitespace-cleanup`,message:`Failed to read directory`,path:t,error:e.message});return}for(let o of l){let c=s.join(t,o.name);o.isDirectory()?this.processDirectory(e,c,n,r,i,a):o.isFile()&&o.name.endsWith(`.md`)&&this.processMarkdownFile(e,c,n,r,i,a)}}processMarkdownFile(e,t,n,r,i,a){let{fs:o,logger:s}=e;try{let e=o.readFileSync(t,`utf8`),i=this.cleanMarkdownContent(e);if(e===i){r.push(t),s.debug({action:`whitespace-cleanup`,skipped:t,reason:`no changes needed`});return}a?(s.debug({action:`whitespace-cleanup`,dryRun:!0,wouldModify:t}),n.push(t)):(o.writeFileSync(t,i,`utf8`),n.push(t),s.debug({action:`whitespace-cleanup`,modified:t}))}catch(e){i.push({path:t,error:e}),s.warn({action:`whitespace-cleanup`,message:`Failed to process file`,path:t,error:e.message})}}cleanMarkdownContent(e){let t=this.detectLineEnding(e),n=e.split(/\r?\n/).map(e=>e.replace(/[ \t]+$/,``)),r=[],i=0;for(let e of n)e===``?(i++,i<=2&&r.push(e)):(i=0,r.push(e));return r.join(t)}detectLineEnding(e){return e.includes(`\r
1235
1235
  `)?`\r
1236
1236
  `:`
1237
- `}collect(e){return{}}};const hy=`.config/opencode`,gy=`opencode.json`,_y=`opencode-rules@latest`,vy=`.opencode`,yy=`rules`;var by=class extends vv{constructor(){super(`OpencodeCLIOutputPlugin`,{globalConfigDir:hy,outputFileName:`AGENTS.md`,commandsSubDir:`commands`,agentsSubDir:`agents`,skillsSubDir:`skills`,supportsFastCommands:!0,supportsSubAgents:!0,supportsSkills:!0,dependsOn:[`AgentsOutputPlugin`]}),this.registerCleanEffect(`mcp-config-cleanup`,async e=>{let t=this.getGlobalConfigDir(),n=f.join(t,gy);if(e.dryRun===!0)return this.log.trace({action:`dryRun`,type:`mcpConfigCleanup`,path:n}),{success:!0,description:`Would reset opencode.json mcp to empty`};try{if(d.existsSync(n)){let e=d.readFileSync(n,`utf8`),t=JSON.parse(e);t.mcp={};let r=t.plugin;if(Array.isArray(r)){let e=r.filter(e=>e!==_y);e.length>0?t.plugin=e:delete t.plugin}d.writeFileSync(n,JSON.stringify(t,null,2))}return this.log.trace({action:`clean`,type:`mcpConfigCleanup`,path:n}),{success:!0,description:`Reset opencode.json mcp to empty`}}catch(e){let t=e instanceof Error?e.message:String(e);return this.log.error({action:`clean`,type:`mcpConfigCleanup`,path:n,error:t}),{success:!1,error:e,description:`Failed to reset opencode.json mcp`}}})}async registerGlobalOutputFiles(e){let t=await super.registerGlobalOutputFiles(e),n=this.getGlobalConfigDir();if(e.collectedInputContext.skills?.some(e=>e.mcpConfig!=null)??!1){let e=f.join(n,gy);t.push({pathKind:R.Relative,path:gy,basePath:n,getDirectoryName:()=>hy,getAbsolutePath:()=>e})}let r=e.collectedInputContext.rules?.filter(e=>this.normalizeRuleScope(e)===`global`);if(r!=null&&r.length>0){let e=f.join(n,yy);for(let n of r)t.push(this.createRelativePath(this.buildRuleFileName(n),e,()=>yy))}return t.map(e=>{let t=e.path.replaceAll(`\\`,`/`),r=`/${this.skillsSubDir}/`,i=`${this.skillsSubDir}/`;if(!(t.includes(r)||t.startsWith(i)))return e;let a=t.split(`/`),o=a.indexOf(this.skillsSubDir);if(o<0||o+1>=a.length)return e;let s=a[o+1];if(s==null)return e;let c=this.validateAndNormalizeSkillName(s),l=[...a];l[o+1]=c;let u=l.join(`/`);return{...e,path:u,getDirectoryName:()=>c,getAbsolutePath:()=>f.join(n,u.replaceAll(`/`,f.sep))}})}async writeGlobalOutputs(e){let t=await super.writeGlobalOutputs(e),n=[...t.files],{skills:r}=e.collectedInputContext;if(r!=null){let t=await this.writeGlobalMcpConfig(e,r);t!=null&&n.push(t)}let i=e.collectedInputContext.rules?.filter(e=>this.normalizeRuleScope(e)===`global`);if(i==null||i.length===0)return{files:n,dirs:t.dirs};let a=f.join(this.getGlobalConfigDir(),yy);for(let t of i)n.push(await this.writeFile(e,f.join(a,this.buildRuleFileName(t)),this.buildRuleContent(t),`rule`));return{files:n,dirs:t.dirs}}async writeGlobalMcpConfig(e,t){let n={};for(let e of t){if(e.mcpConfig==null)continue;let{mcpServers:t}=e.mcpConfig;for(let[e,r]of Object.entries(t))n[e]=this.transformMcpConfigForOpencode(r)}if(Object.keys(n).length===0)return null;let r=this.getGlobalConfigDir(),i=f.join(r,gy),a={pathKind:R.Relative,path:gy,basePath:r,getDirectoryName:()=>hy,getAbsolutePath:()=>i},o={};try{if(d.existsSync(i)){let e=d.readFileSync(i,`utf8`);o=JSON.parse(e)}}catch{o={}}o.$schema=`https://opencode.ai/config.json`,o.mcp=n;let s=o.plugin,c=Array.isArray(s)?s.map(e=>String(e)):[];c.includes(_y)||c.push(_y),o.plugin=c;let l=JSON.stringify(o,null,2);if(e.dryRun===!0)return this.log.trace({action:`dryRun`,type:`globalMcpConfig`,path:i,serverCount:Object.keys(n).length}),{path:a,success:!0,skipped:!1};try{return this.ensureDirectory(r),d.writeFileSync(i,l),this.log.trace({action:`write`,type:`globalMcpConfig`,path:i,serverCount:Object.keys(n).length}),{path:a,success:!0}}catch(e){let t=e instanceof Error?e.message:String(e);return this.log.error({action:`write`,type:`globalMcpConfig`,path:i,error:t}),{path:a,success:!1,error:e}}}transformMcpConfigForOpencode(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}async writeSubAgent(e,t,n){let r=n.dir.path.replace(/\.mdx$/,`.md`),i=f.join(t,this.agentsSubDir),a=f.join(i,r),o=this.buildOpencodeAgentFrontMatter(n),s=this.buildMarkdownContent(n.content,o);return[await this.writeFile(e,a,s,`subAgent`)]}buildOpencodeAgentFrontMatter(e){let t={},n=e.yamlFrontMatter;if(n?.description!=null&&(t.description=n.description),t.mode=n?.mode??`subagent`,n?.model!=null&&(t.model=n.model),n?.temperature!=null&&(t.temperature=n.temperature),n?.maxSteps!=null&&(t.maxSteps=n.maxSteps),n?.hidden!=null&&(t.hidden=n.hidden),n?.allowTools!=null&&Array.isArray(n.allowTools)){let e={};for(let t of n.allowTools)e[String(t)]=!0;t.tools=e}n?.permission!=null&&typeof n.permission==`object`&&(t.permission=n.permission);for(let[e,r]of Object.entries(n??{}))[`description`,`mode`,`model`,`temperature`,`maxSteps`,`hidden`,`allowTools`,`permission`,`namingCase`,`name`,`color`].includes(e)||(t[e]=r);return t}async writeFastCommand(e,t,n){let r=this.getTransformOptionsFromContext(e),i=this.transformFastCommandName(n,r),a=f.join(t,this.commandsSubDir),o=f.join(a,i),s=this.buildOpencodeCommandFrontMatter(n),c=this.buildMarkdownContent(n.content,s);return[await this.writeFile(e,o,c,`fastCommand`)]}buildOpencodeCommandFrontMatter(e){let t={},n=e.yamlFrontMatter;if(n?.description!=null&&(t.description=n.description),n?.agent!=null&&(t.agent=n.agent),n?.model!=null&&(t.model=n.model),n?.allowTools!=null&&Array.isArray(n.allowTools)){let e={};for(let t of n.allowTools)e[String(t)]=!0;t.tools=e}for(let[e,r]of Object.entries(n??{}))[`description`,`agent`,`model`,`allowTools`,`namingCase`,`argumentHint`].includes(e)||(t[e]=r);return t}async writeSkill(e,t,n){let r=[],i=this.validateAndNormalizeSkillName(n.yamlFrontMatter?.name??n.dir.getDirectoryName()),a=f.join(t,this.skillsSubDir,i),o=f.join(a,`SKILL.md`),s=this.buildOpencodeSkillFrontMatter(n,i),c=this.buildMarkdownContent(n.content,s),l=await this.writeFile(e,o,c,`skill`);if(r.push(l),n.childDocs!=null)for(let o of n.childDocs){let n=await this.writeSkillReferenceDocument(e,a,i,o,t);r.push(...n)}if(n.resources!=null)for(let o of n.resources){let n=await this.writeSkillResource(e,a,i,o,t);r.push(...n)}return r}buildOpencodeSkillFrontMatter(e,t){let n={},r=e.yamlFrontMatter;n.name=t,r?.description!=null&&(n.description=r.description),n.license=r?.license??`MIT`,n.compatibility=r?.compatibility??`opencode`;let i={};for(let e of[`author`,`version`,`keywords`,`category`,`repository`,`displayName`])r?.[e]!=null&&(i[e]=r[e]);let a=new Set([`name`,`description`,`license`,`compatibility`,`namingCase`,`allowTools`,`keywords`,`displayName`,`author`,`version`]);for(let[e,t]of Object.entries(r??{}))a.has(e)||(i[e]=t);return Object.keys(i).length>0&&(n.metadata=i),n}validateAndNormalizeSkillName(e){let t=e.toLowerCase();return t=t.replaceAll(/[^a-z0-9-]+/g,`-`),t=t.replaceAll(/-+/g,`-`),t=t.replaceAll(/^-|-$/g,``),t.length===0?t=`skill`:t.length>64&&(t=t.slice(0,64),t=t.replace(/-$/,``)),t}buildRuleFileName(e){return`rule-${e.series}-${e.ruleName}.md`}buildRuleContent(e){return e.globs.length===0?e.content:this.buildMarkdownContent(e.content,{globs:[...e.globs]})}async registerGlobalOutputDirs(e){let t=await super.registerGlobalOutputDirs(e),n=e.collectedInputContext.rules?.filter(e=>this.normalizeRuleScope(e)===`global`);return n!=null&&n.length>0&&t.push(this.createRelativePath(yy,this.getGlobalConfigDir(),()=>yy)),t}async registerProjectOutputDirs(e){let t=await super.registerProjectOutputDirs(e),{rules:n}=e.collectedInputContext;if(n==null||n.length===0)return t;for(let r of e.collectedInputContext.workspace.projects){if(r.dirFromWorkspacePath==null||Qg($g(n.filter(e=>this.normalizeRuleScope(e)===`project`),r.projectConfig),r.projectConfig).length===0)continue;let e=f.join(r.dirFromWorkspacePath.path,vy,yy);t.push(this.createRelativePath(e,r.dirFromWorkspacePath.basePath,()=>yy))}return t}async registerProjectOutputFiles(e){let t=await super.registerProjectOutputFiles(e),{rules:n}=e.collectedInputContext;if(n==null||n.length===0)return t;for(let r of e.collectedInputContext.workspace.projects){if(r.dirFromWorkspacePath==null)continue;let e=Qg($g(n.filter(e=>this.normalizeRuleScope(e)===`project`),r.projectConfig),r.projectConfig);for(let n of e){let e=f.join(r.dirFromWorkspacePath.path,vy,yy,this.buildRuleFileName(n));t.push(this.createRelativePath(e,r.dirFromWorkspacePath.basePath,()=>yy))}}return t}async canWrite(e){return(e.collectedInputContext.rules?.length??0)>0?!0:super.canWrite(e)}async writeProjectOutputs(e){let t=await super.writeProjectOutputs(e),{rules:n}=e.collectedInputContext;if(n==null||n.length===0)return t;let r=[];for(let t of e.collectedInputContext.workspace.projects){if(t.dirFromWorkspacePath==null)continue;let i=Qg($g(n.filter(e=>this.normalizeRuleScope(e)===`project`),t.projectConfig),t.projectConfig);if(i.length===0)continue;let a=f.join(t.dirFromWorkspacePath.basePath,t.dirFromWorkspacePath.path,vy,yy);for(let t of i)r.push(await this.writeFile(e,f.join(a,this.buildRuleFileName(t)),this.buildRuleContent(t),`rule`))}return{files:[...t.files,...r],dirs:t.dirs}}},xy=class extends zg{constructor(){super(`OrphanFileCleanupEffectInputPlugin`),this.registerEffect(`orphan-file-cleanup`,this.cleanupOrphanFiles.bind(this),20)}async cleanupOrphanFiles(e){let{fs:t,path:n,shadowProjectDir:r,dryRun:i,logger:a}=e,o=n.join(r,`dist`),s=[],c=[],l=[];if(!t.existsSync(o))return a.debug({action:`orphan-cleanup`,message:`dist/ directory does not exist, skipping`,distDir:o}),{success:!0,description:`dist/ directory does not exist, nothing to clean`,deletedFiles:s,deletedDirs:c};for(let r of[`skills`,`commands`,`agents`,`app`]){let a=n.join(o,r);t.existsSync(a)&&this.cleanupDirectory(e,a,r,s,c,l,i??!1)}let u=l.length>0;return u&&a.warn({action:`orphan-cleanup`,errors:l.map(e=>({path:e.path,error:e.error.message}))}),{success:!u,description:i?`Would delete ${s.length} files and ${c.length} directories`:`Deleted ${s.length} files and ${c.length} directories`,deletedFiles:s,deletedDirs:c,...u&&{error:Error(`${l.length} errors occurred during cleanup`)}}}cleanupDirectory(e,t,n,r,i,a,o){let{fs:s,path:c,shadowProjectDir:l,logger:u}=e,d;try{d=s.readdirSync(t,{withFileTypes:!0})}catch(e){a.push({path:t,error:e}),u.warn({action:`orphan-cleanup`,message:`Failed to read directory`,path:t,error:e.message});return}for(let f of d){let d=c.join(t,f.name);if(f.isDirectory())this.cleanupDirectory(e,d,n,r,i,a,o),this.removeEmptyDirectory(e,d,i,a,o);else if(f.isFile()&&this.isOrphanFile(e,d,n,l))if(o)u.debug({action:`orphan-cleanup`,dryRun:!0,wouldDelete:d}),r.push(d);else try{s.unlinkSync(d),r.push(d),u.debug({action:`orphan-cleanup`,deleted:d})}catch(e){a.push({path:d,error:e}),u.warn({action:`orphan-cleanup`,message:`Failed to delete file`,path:d,error:e.message})}}}isOrphanFile(e,t,n,r){let{fs:i,path:a}=e,o=a.basename(t),s=o.endsWith(`.mdx`),c=a.join(r,`dist`,n),l=a.relative(c,t),u=a.dirname(l),d=o.replace(/\.mdx$/,``);if(s)return!this.getPossibleSourcePaths(a,r,n,d,u).some(e=>i.existsSync(e));let f=[];return n===`app`?f.push(a.join(r,`app`,l)):f.push(a.join(r,`src`,n,l)),!f.some(e=>i.existsSync(e))}getPossibleSourcePaths(e,t,n,r,i){switch(n){case`skills`:return i===`.`?[e.join(t,`src`,`skills`,r,`SKILL.cn.mdx`),e.join(t,`src`,`skills`,`${r}.cn.mdx`)]:[e.join(t,`src`,`skills`,i,`${r}.cn.mdx`)];case`commands`:return i===`.`?[e.join(t,`src`,`commands`,`${r}.cn.mdx`)]:[e.join(t,`src`,`commands`,i,`${r}.cn.mdx`)];case`agents`:return i===`.`?[e.join(t,`src`,`agents`,`${r}.cn.mdx`)]:[e.join(t,`src`,`agents`,i,`${r}.cn.mdx`)];case`app`:return i===`.`?[e.join(t,`app`,`${r}.cn.mdx`)]:[e.join(t,`app`,i,`${r}.cn.mdx`)];default:return[]}}removeEmptyDirectory(e,t,n,r,i){let{fs:a,logger:o}=e;try{a.readdirSync(t).length===0&&(i?(o.debug({action:`orphan-cleanup`,dryRun:!0,wouldDeleteDir:t}),n.push(t)):(a.rmdirSync(t),n.push(t),o.debug({action:`orphan-cleanup`,deletedDir:t})))}catch(e){r.push({path:t,error:e}),o.warn({action:`orphan-cleanup`,message:`Failed to check/remove directory`,path:t,error:e.message})}}collect(e){return{}}},Sy=class{registryPath;log;constructor(e,t){this.registryPath=this.resolvePath(e),this.log=t??rn(this.constructor.name)}resolvePath(e){return e.startsWith(`~`)?f.join(p.homedir(),e.slice(1)):f.resolve(e)}getRegistryDir(){return f.dirname(this.registryPath)}ensureRegistryDir(){let e=this.getRegistryDir();d.existsSync(e)||d.mkdirSync(e,{recursive:!0})}read(){if(!d.existsSync(this.registryPath))return this.log.debug(`registry not found`,{path:this.registryPath}),this.createInitialRegistry();try{let e=d.readFileSync(this.registryPath,`utf8`);return JSON.parse(e)}catch(e){let t=e instanceof Error?e.message:String(e);return this.log.error(`parse failed`,{path:this.registryPath,error:t}),this.createInitialRegistry()}}write(e,t){let n={...e,lastUpdated:new Date().toISOString()};if(t===!0)return this.log.trace({action:`dryRun`,type:`registry`,path:this.registryPath}),!0;let r=`${this.registryPath}.tmp.${Date.now()}`;try{this.ensureRegistryDir();let e=JSON.stringify(n,null,2);return d.writeFileSync(r,e,`utf8`),d.renameSync(r,this.registryPath),this.log.trace({action:`write`,type:`registry`,path:this.registryPath}),!0}catch(e){let t=e instanceof Error?e.message:String(e);this.log.error({action:`write`,type:`registry`,path:this.registryPath,error:t});try{d.existsSync(r)&&d.unlinkSync(r)}catch{}return!1}}register(e,t){let n=[],r=this.read(),i=this.merge(r,e),a=this.write(i,t);for(let r of e){let e=this.getEntryName(r);a?(n.push({success:!0,entryName:e}),t===!0?this.log.trace({action:`dryRun`,type:`registerEntry`,entryName:e}):this.log.trace({action:`register`,type:`entry`,entryName:e})):(n.push({success:!1,entryName:e,error:Error(`Failed to write registry file`)}),this.log.error(`register entry failed`,{entryName:e}))}return n}generateEntryId(e){let t=`${Date.now()}-${Math.random().toString(36).slice(2,8)}`;return e==null?t:`${e}-${t}`}},Cy=class extends zg{constructor(){super(`SkillNonSrcFileSyncEffectInputPlugin`),this.registerEffect(`skill-non-src-file-sync`,this.syncNonSrcFiles.bind(this),10)}async syncNonSrcFiles(e){let{fs:t,path:n,shadowProjectDir:r,dryRun:i,logger:a}=e,o=n.join(r,`src`,`skills`),s=n.join(r,`dist`,`skills`),c=[],l=[],u=[],d=[];if(!t.existsSync(o))return a.debug({action:`skill-sync`,message:`src/skills/ directory does not exist, skipping`,srcSkillsDir:o}),{success:!0,description:`src/skills/ directory does not exist, nothing to sync`,copiedFiles:c,skippedFiles:l,createdDirs:u};this.syncDirectoryRecursive(e,o,s,``,c,l,u,d,i??!1);let f=d.length>0;return f&&a.warn({action:`skill-sync`,errors:d.map(e=>({path:e.path,error:e.error.message}))}),{success:!f,description:i?`Would copy ${c.length} files, skip ${l.length} files`:`Copied ${c.length} files, skipped ${l.length} files`,copiedFiles:c,skippedFiles:l,createdDirs:u,...f&&{error:Error(`${d.length} errors occurred during sync`)},modifiedFiles:c}}syncDirectoryRecursive(e,t,n,r,i,a,o,s,c){let{fs:l,path:u,logger:d}=e,f=r?u.join(t,r):t;if(!l.existsSync(f))return;let p;try{p=l.readdirSync(f,{withFileTypes:!0})}catch(e){s.push({path:f,error:e}),d.warn({action:`skill-sync`,message:`Failed to read directory`,path:f,error:e.message});return}for(let f of p){let p=r?u.join(r,f.name):f.name,m=u.join(t,p),h=u.join(n,p);if(f.isDirectory())this.syncDirectoryRecursive(e,t,n,p,i,a,o,s,c);else if(f.isFile()){if(f.name.endsWith(`.cn.mdx`))continue;let e=u.dirname(h);if(!l.existsSync(e))if(c)d.debug({action:`skill-sync`,dryRun:!0,wouldCreateDir:e}),o.push(e);else try{l.mkdirSync(e,{recursive:!0}),o.push(e),d.debug({action:`skill-sync`,createdDir:e})}catch(t){s.push({path:e,error:t}),d.warn({action:`skill-sync`,message:`Failed to create directory`,path:e,error:t.message});continue}if(l.existsSync(h))try{let e=l.readFileSync(m),t=l.readFileSync(h);if(this.computeHash(e)===this.computeHash(t)){a.push(h),d.debug({action:`skill-sync`,skipped:h,reason:`identical content`});continue}}catch(e){d.debug({action:`skill-sync`,message:`Could not compare files, will copy`,path:h,error:e.message})}if(c)d.debug({action:`skill-sync`,dryRun:!0,wouldCopy:{from:m,to:h}}),i.push(h);else try{l.copyFileSync(m,h),i.push(h),d.debug({action:`skill-sync`,copied:{from:m,to:h}})}catch(e){s.push({path:h,error:e}),d.warn({action:`skill-sync`,message:`Failed to copy file`,from:m,to:h,error:e.message})}}}}computeHash(e){return(0,g.createHash)(`sha256`).update(e).digest(`hex`)}collect(e){return{}}};const wy=`.codeium/windsurf`,Ty=`global_workflows`,Ey=`memories`,Dy=`global_rules.md`,Oy=`skills`,ky=`SKILL.md`,Ay=`.windsurf`,jy=`rules`;var My=class extends Ig{constructor(){super(`WindsurfOutputPlugin`,{globalConfigDir:wy,outputFileName:``,dependsOn:[`AgentsOutputPlugin`],indexignore:`.codeignore`})}async registerGlobalOutputDirs(e){let t=[],{fastCommands:n,skills:r,rules:i}=e.collectedInputContext;if(n!=null&&n.length>0){let e=this.getGlobalWorkflowsDir();t.push({pathKind:R.Relative,path:Ty,basePath:this.getCodeiumWindsurfDir(),getDirectoryName:()=>Ty,getAbsolutePath:()=>e})}if(r!=null&&r.length>0)for(let e of r){let n=e.yamlFrontMatter.name,r=f.join(this.getCodeiumWindsurfDir(),Oy,n);t.push({pathKind:R.Relative,path:f.join(Oy,n),basePath:this.getCodeiumWindsurfDir(),getDirectoryName:()=>n,getAbsolutePath:()=>r})}let a=i?.filter(e=>e.scope===`global`);if(a==null||a.length===0)return t;let o=this.getCodeiumWindsurfDir(),s=f.join(o,Ey);return t.push({pathKind:R.Relative,path:Ey,basePath:o,getDirectoryName:()=>Ey,getAbsolutePath:()=>s}),t}async registerGlobalOutputFiles(e){let t=[],{skills:n,fastCommands:r}=e.collectedInputContext;if(r!=null&&r.length>0){let n=this.getGlobalWorkflowsDir(),i=this.getTransformOptionsFromContext(e,{includeSeriesPrefix:!0});for(let e of r){let r=this.transformFastCommandName(e,i),a=f.join(n,r);t.push({pathKind:R.Relative,path:f.join(Ty,r),basePath:this.getCodeiumWindsurfDir(),getDirectoryName:()=>Ty,getAbsolutePath:()=>a})}}let i=e.collectedInputContext.rules?.filter(e=>e.scope===`global`);if(i!=null&&i.length>0){let e=this.getCodeiumWindsurfDir(),n=f.join(e,Ey);for(let r of i){let i=this.buildRuleFileName(r),a=f.join(n,i);t.push({pathKind:R.Relative,path:f.join(Ey,i),basePath:e,getDirectoryName:()=>Ey,getAbsolutePath:()=>a})}}if(n==null||n.length===0)return t;let a=this.getSkillsDir(),o=this.getCodeiumWindsurfDir();for(let e of n){let n=e.yamlFrontMatter.name,r=f.join(a,n);if(t.push({pathKind:R.Relative,path:f.join(Oy,n,ky),basePath:o,getDirectoryName:()=>n,getAbsolutePath:()=>f.join(r,ky)}),e.childDocs!=null)for(let i of e.childDocs){let e=i.relativePath.replace(/\.mdx$/,`.md`);t.push({pathKind:R.Relative,path:f.join(Oy,n,e),basePath:o,getDirectoryName:()=>n,getAbsolutePath:()=>f.join(r,e)})}if(e.resources!=null)for(let i of e.resources)t.push({pathKind:R.Relative,path:f.join(Oy,n,i.relativePath),basePath:o,getDirectoryName:()=>n,getAbsolutePath:()=>f.join(r,i.relativePath)})}return t}async canWrite(e){let{skills:t,fastCommands:n,globalMemory:r,rules:i,aiAgentIgnoreConfigFiles:a}=e.collectedInputContext,o=(t?.length??0)>0,s=(n?.length??0)>0,c=(i?.length??0)>0,l=r!=null,u=a?.some(e=>e.fileName===`.codeignore`)??!1;return o||s||l||c||u?!0:(this.log.trace({action:`skip`,reason:`noOutputs`}),!1)}async writeGlobalOutputs(e){let{skills:t,fastCommands:n,globalMemory:r,rules:i}=e.collectedInputContext,a=[],o=[];if(r!=null){let t=await this.writeGlobalMemory(e,r.content);a.push(t)}if(t!=null&&t.length>0){let n=this.getSkillsDir();for(let r of t){let t=await this.writeGlobalSkill(e,n,r);a.push(...t)}}if(n!=null&&n.length>0){let t=this.getGlobalWorkflowsDir();for(let r of n){let n=await this.writeGlobalWorkflow(e,t,r);a.push(n)}}let s=i?.filter(e=>e.scope===`global`);if(s==null||s.length===0)return{files:a,dirs:o};let c=this.getGlobalMemoriesDir();for(let t of s){let n=await this.writeRuleFile(e,c,t,this.getCodeiumWindsurfDir(),Ey);a.push(n)}return{files:a,dirs:o}}async registerProjectOutputDirs(e){let t=[],{workspace:n,rules:r}=e.collectedInputContext;if(r==null||r.length===0)return t;for(let e of n.projects){let n=e.dirFromWorkspacePath;if(n==null||Qg($g(r.filter(e=>e.scope===`project`),e.projectConfig),e.projectConfig).length===0)continue;let i=f.join(n.path,Ay,jy);t.push({pathKind:R.Relative,path:i,basePath:n.basePath,getDirectoryName:()=>jy,getAbsolutePath:()=>f.join(n.basePath,i)})}return t}async registerProjectOutputFiles(e){let t=[],{workspace:n,rules:r}=e.collectedInputContext;if(r!=null&&r.length>0)for(let e of n.projects){let n=e.dirFromWorkspacePath;if(n==null)continue;let i=Qg($g(r.filter(e=>e.scope===`project`),e.projectConfig),e.projectConfig);for(let e of i){let r=this.buildRuleFileName(e),i=f.join(n.path,Ay,jy,r);t.push({pathKind:R.Relative,path:i,basePath:n.basePath,getDirectoryName:()=>jy,getAbsolutePath:()=>f.join(n.basePath,i)})}}return t.push(...this.registerProjectIgnoreOutputFiles(n.projects)),t}async writeProjectOutputs(e){let t=[],{workspace:n,rules:r}=e.collectedInputContext;if(r!=null&&r.length>0)for(let i of n.projects){let n=i.dirFromWorkspacePath;if(n==null)continue;let a=Qg($g(r.filter(e=>e.scope===`project`),i.projectConfig),i.projectConfig);if(a.length===0)continue;let o=f.join(n.basePath,n.path,Ay,jy);for(let r of a){let i=await this.writeRuleFile(e,o,r,n.basePath,f.join(n.path,Ay,jy));t.push(i)}}let i=await this.writeProjectIgnoreFiles(e);return t.push(...i),{files:t,dirs:[]}}getSkillsDir(){return f.join(this.getCodeiumWindsurfDir(),Oy)}getCodeiumWindsurfDir(){return f.join(this.getHomeDir(),wy)}getGlobalMemoriesDir(){return f.join(this.getCodeiumWindsurfDir(),Ey)}getGlobalWorkflowsDir(){return f.join(this.getCodeiumWindsurfDir(),Ty)}async writeGlobalMemory(e,t){let n=this.getGlobalMemoriesDir(),r=f.join(n,Dy),i=this.getCodeiumWindsurfDir(),a={pathKind:R.Relative,path:f.join(Ey,Dy),basePath:i,getDirectoryName:()=>Ey,getAbsolutePath:()=>r};if(e.dryRun===!0)return this.log.trace({action:`dryRun`,type:`globalMemory`,path:r}),{path:a,success:!0,skipped:!1};try{return this.ensureDirectory(n),this.writeFileSync(r,t),this.log.trace({action:`write`,type:`globalMemory`,path:r}),{path:a,success:!0}}catch(e){let t=e instanceof Error?e.message:String(e);return this.log.error({action:`write`,type:`globalMemory`,path:r,error:t}),{path:a,success:!1,error:e}}}async writeGlobalWorkflow(e,t,n){let r=this.getTransformOptionsFromContext(e,{includeSeriesPrefix:!0}),i=this.transformFastCommandName(n,r),a=f.join(t,i),o={pathKind:R.Relative,path:f.join(Ty,i),basePath:this.getCodeiumWindsurfDir(),getDirectoryName:()=>Ty,getAbsolutePath:()=>a},s=this.buildMarkdownContentWithRaw(n.content,n.yamlFrontMatter,n.rawFrontMatter);if(e.dryRun===!0)return this.log.trace({action:`dryRun`,type:`globalWorkflow`,path:a}),{path:o,success:!0,skipped:!1};try{return this.ensureDirectory(t),d.writeFileSync(a,s),this.log.trace({action:`write`,type:`globalWorkflow`,path:a}),{path:o,success:!0}}catch(e){let t=e instanceof Error?e.message:String(e);return this.log.error({action:`write`,type:`globalWorkflow`,path:a,error:t}),{path:o,success:!1,error:e}}}async writeGlobalSkill(e,t,n){let r=[],i=n.yamlFrontMatter.name,a=f.join(t,i),o=f.join(a,ky),s=this.getCodeiumWindsurfDir(),c={pathKind:R.Relative,path:f.join(Oy,i,ky),basePath:s,getDirectoryName:()=>i,getAbsolutePath:()=>o},l=this.buildSkillFrontMatter(n),u=n.content,d=jg(l,u);if(e.dryRun===!0)this.log.trace({action:`dryRun`,type:`skill`,path:o}),r.push({path:c,success:!0,skipped:!1});else try{this.ensureDirectory(a),this.writeFileSync(o,d),this.log.trace({action:`write`,type:`skill`,path:o}),r.push({path:c,success:!0})}catch(e){let t=e instanceof Error?e.message:String(e);this.log.error({action:`write`,type:`skill`,path:o,error:t}),r.push({path:c,success:!1,error:e})}if(n.childDocs!=null)for(let t of n.childDocs){let n=await this.writeSkillChildDoc(e,t,a,i,s);r.push(n)}if(n.resources!=null)for(let t of n.resources){let n=await this.writeSkillResource(e,t,a,i,s);r.push(n)}return r}buildSkillFrontMatter(e){let t=e.yamlFrontMatter;return{name:t.name,description:t.description,...t.displayName!=null&&{displayName:t.displayName},...t.keywords!=null&&t.keywords.length>0&&{keywords:t.keywords},...t.author!=null&&{author:t.author},...t.version!=null&&{version:t.version},...t.allowTools!=null&&t.allowTools.length>0&&{allowTools:t.allowTools}}}async writeSkillChildDoc(e,t,n,r,i){let a=t.relativePath.replace(/\.mdx$/,`.md`),o=f.join(n,a),s={pathKind:R.Relative,path:f.join(Oy,r,a),basePath:i,getDirectoryName:()=>r,getAbsolutePath:()=>o},c=t.content;if(e.dryRun===!0)return this.log.trace({action:`dryRun`,type:`childDoc`,path:o}),{path:s,success:!0,skipped:!1};try{let e=f.dirname(o);return this.ensureDirectory(e),this.writeFileSync(o,c),this.log.trace({action:`write`,type:`childDoc`,path:o}),{path:s,success:!0}}catch(e){let t=e instanceof Error?e.message:String(e);return this.log.error({action:`write`,type:`childDoc`,path:o,error:t}),{path:s,success:!1,error:e}}}async writeSkillResource(e,t,n,r,i){let a=f.join(n,t.relativePath),o={pathKind:R.Relative,path:f.join(Oy,r,t.relativePath),basePath:i,getDirectoryName:()=>r,getAbsolutePath:()=>a};if(e.dryRun===!0)return this.log.trace({action:`dryRun`,type:`resource`,path:a}),{path:o,success:!0,skipped:!1};try{let e=f.dirname(a);if(this.ensureDirectory(e),t.encoding===`base64`){let e=h.Buffer.from(t.content,`base64`);this.writeFileSyncBuffer(a,e)}else this.writeFileSync(a,t.content);return this.log.trace({action:`write`,type:`resource`,path:a}),{path:o,success:!0}}catch(e){let t=e instanceof Error?e.message:String(e);return this.log.error({action:`write`,type:`resource`,path:a,error:t}),{path:o,success:!1,error:e}}}buildRuleFileName(e){return`rule-${e.series}-${e.ruleName}.md`}buildRuleContent(e){let t=e.yamlFrontMatter?.description??``;return`${[`<!-- Activation: Glob | Patterns: ${e.globs.join(`, `)} -->`,`<!-- Description: ${t} -->`,`<!-- Configure activation mode in Windsurf UI: Customizations > Rules -->`].join(`
1238
- `)}\n\n${e.content}`}async writeRuleFile(e,t,n,r,i){let a=this.buildRuleFileName(n),o=f.join(t,a),s={pathKind:R.Relative,path:f.join(i,a),basePath:r,getDirectoryName:()=>jy,getAbsolutePath:()=>o},c=this.buildRuleContent(n);if(e.dryRun===!0)return this.log.trace({action:`dryRun`,type:`ruleFile`,path:o}),{path:s,success:!0,skipped:!1};try{return this.ensureDirectory(t),this.writeFileSync(o,c),this.log.trace({action:`write`,type:`ruleFile`,path:o}),{path:s,success:!0}}catch(e){let t=e instanceof Error?e.message:String(e);return this.log.error({action:`write`,type:`ruleFile`,path:o,error:t}),{path:s,success:!1,error:e}}}},Ny=class e extends Sy{static REGISTRY_PATH=`~/.kiro/powers/registry.json`;static DEFAULT_VERSION=`1.0.0`;constructor(t){super(e.REGISTRY_PATH,t)}createInitialRegistry(){return{version:e.DEFAULT_VERSION,powers:{},repoSources:{},lastUpdated:new Date().toISOString()}}getEntryName(e){return e.name}merge(e,t){let n={...e.powers},r={...e.repoSources};for(let e of t){n[e.name]=e;let t=this.buildRepoSource(e),i=e.source.repoId??e.name;r[i]=t}return{version:e.version,powers:n,repoSources:r,...e.kiroRecommendedRepo!=null&&{kiroRecommendedRepo:e.kiroRecommendedRepo},lastUpdated:e.lastUpdated}}buildPowerEntry(e,t){let{yamlFrontMatter:n,mcpConfig:r}=e,i={type:`repo`,repoId:this.generateEntryId(`local`),repoName:t},a=r==null?null:Object.keys(r.mcpServers);return{name:n.name,description:n.description,...a!=null&&a.length>0&&{mcpServers:a},...n.author!=null&&{author:n.author},keywords:n.keywords??[],...n.displayName!=null&&{displayName:n.displayName},installed:!0,installedAt:new Date().toISOString(),installPath:t,source:i,sourcePath:t}}getOfficialRegistry(){try{return JSON.parse({version:`1.0.0`,powers:{postman:{name:`postman`,description:`Automate API testing and collection management with Postman - create workspaces, collections, environments, and run tests programmatically`,displayName:`API Testing with Postman`,author:`Postman`,iconUrl:`https://prod.download.desktop.kiro.dev/powers/icons/postman.png`,repositoryUrl:`https://github.com/kirodotdev/powers/tree/main/postman`,license:``,repositoryCloneUrl:`git@github.com:kirodotdev/powers.git`,pathInRepo:`postman`,repositoryBranch:`main`,installed:!1,keywords:[],source:{type:`registry`}},figma:{name:`figma`,description:`Connect Figma designs to code components - automatically generate design system rules, map UI components to Figma designs, and maintain design-code consistency`,displayName:`Design to Code with Figma`,author:`Figma`,iconUrl:`https://prod.download.desktop.kiro.dev/powers/icons/figma.png`,repositoryUrl:`https://github.com/kirodotdev/powers/tree/main/figma`,license:``,repositoryCloneUrl:`git@github.com:kirodotdev/powers.git`,pathInRepo:`figma`,repositoryBranch:`main`,installed:!1,keywords:[],source:{type:`registry`}},"netlify-deployment":{name:`netlify-deployment`,description:`Deploy React, Next.js, Vue, and other modern web apps to Netlify's global CDN with automatic builds.`,displayName:`Deploy web apps with Netlify`,author:`Netlify`,iconUrl:`https://prod.download.desktop.kiro.dev/powers/icons/netlify.png`,repositoryUrl:`https://github.com/netlify/context-and-tools/tree/main/context/steering/netlify-deployment-power`,license:``,repositoryCloneUrl:`git@github.com:netlify/context-and-tools.git`,pathInRepo:`context/steering/netlify-deployment-power`,repositoryBranch:`main`,installed:!1,keywords:[],source:{type:`registry`}},"amazon-aurora-postgresql":{name:`amazon-aurora-postgresql`,description:`Build applications backed by Aurora PostgreSQL by leveraging Aurora PostgreSQL specific best practices.`,displayName:`Build applications with Aurora PostgreSQL`,author:`AWS`,iconUrl:`https://prod.download.desktop.kiro.dev/powers/icons/amazon-aurora.png`,repositoryUrl:`https://github.com/awslabs/mcp/tree/main/src/postgres-mcp-server/kiro_power`,license:``,repositoryCloneUrl:`git@github.com:awslabs/mcp.git`,pathInRepo:`src/postgres-mcp-server/kiro_power`,repositoryBranch:`main`,installed:!1,keywords:[],source:{type:`registry`}},"supabase-hosted":{name:`supabase-hosted`,description:`Build applications with Supabase's Postgres database, authentication, storage, and real-time subscriptions`,displayName:`Build a backend with Supabase`,author:`Supabase`,iconUrl:`https://prod.download.desktop.kiro.dev/powers/icons/supabase.png`,repositoryUrl:`https://github.com/supabase-community/kiro-powers/tree/main/powers/supabase-hosted`,license:``,repositoryCloneUrl:`git@github.com:supabase-community/kiro-powers.git`,pathInRepo:`powers/supabase-hosted`,repositoryBranch:`main`,installed:!1,keywords:[],source:{type:`registry`}},"supabase-local":{name:`supabase-local`,description:`Local development with Supabase allows you to work on your projects in a self-contained environment on your local machine.`,displayName:`Build a backend (local) with Supabase`,author:`Supabase`,iconUrl:`https://prod.download.desktop.kiro.dev/powers/icons/supabase.png`,repositoryUrl:`https://github.com/supabase-community/kiro-powers/tree/main/powers/supabase-local`,license:``,repositoryCloneUrl:`git@github.com:supabase-community/kiro-powers.git`,pathInRepo:`powers/supabase-local`,repositoryBranch:`main`,installed:!1,keywords:[],source:{type:`registry`}},terraform:{name:`terraform`,description:`Build and manage Infrastructure as Code with Terraform - access registry providers, modules, policies, and HCP Terraform workflow management`,displayName:`Deploy infrastructure with Terraform`,author:`HashiCorp`,iconUrl:`https://prod.download.desktop.kiro.dev/powers/icons/terraform.png`,repositoryUrl:`https://github.com/kirodotdev/powers/tree/main/terraform`,license:``,repositoryCloneUrl:`git@github.com:kirodotdev/powers.git`,pathInRepo:`terraform`,repositoryBranch:`main`,installed:!1,keywords:[],source:{type:`registry`}},strands:{name:`strands`,description:`Build AI agents with Strands Agent SDK using Bedrock, Anthropic, OpenAI, Gemini, or Llama models`,displayName:`Build an agent with Strands`,author:`AWS`,iconUrl:`https://prod.download.desktop.kiro.dev/powers/icons/strands.png`,repositoryUrl:`https://github.com/kirodotdev/powers/tree/main/strands`,license:``,repositoryCloneUrl:`git@github.com:kirodotdev/powers.git`,pathInRepo:`strands`,repositoryBranch:`main`,installed:!1,keywords:[],source:{type:`registry`}},"aws-agentcore":{name:`aws-agentcore`,description:`Amazon Bedrock AgentCore is an agentic platform for building, deploying, and operating effective agents.`,displayName:`Build an agent with Amazon Bedrock AgentCore`,author:`AWS`,iconUrl:`https://prod.download.desktop.kiro.dev/powers/icons/agentcore.png`,repositoryUrl:`https://github.com/kirodotdev/powers/tree/main/aws-agentcore`,license:``,repositoryCloneUrl:`git@github.com:kirodotdev/powers.git`,pathInRepo:`aws-agentcore`,repositoryBranch:`main`,installed:!1,keywords:[],source:{type:`registry`}},neon:{name:`neon`,description:`Serverless Postgres with database branching, autoscaling, and scale-to-zero - perfect for modern development workflows`,displayName:`Build a database with Neon`,author:`Neon`,iconUrl:`https://prod.download.desktop.kiro.dev/powers/icons/neon.png`,repositoryUrl:`https://github.com/kirodotdev/powers/tree/main/neon`,license:``,repositoryCloneUrl:`git@github.com:kirodotdev/powers.git`,pathInRepo:`neon`,repositoryBranch:`main`,installed:!1,keywords:[],source:{type:`registry`}},datadog:{name:`datadog`,description:`Query logs, metrics, traces, RUM events, incidents, and monitors from Datadog for production debugging and performance analysis`,displayName:`Datadog Observability`,author:`Datadog`,iconUrl:`https://prod.download.desktop.kiro.dev/powers/icons/datadog.png`,repositoryUrl:`https://github.com/kirodotdev/powers/tree/main/datadog`,license:``,repositoryCloneUrl:`git@github.com:kirodotdev/powers.git`,pathInRepo:`datadog`,repositoryBranch:`main`,installed:!1,keywords:[],source:{type:`registry`}},dynatrace:{name:`dynatrace`,description:`Query logs, metrics, traces, problems, and Kubernetes events from Dynatrace using DQL for production debugging and performance analysis`,displayName:`Dynatrace Observability`,author:`Dynatrace`,iconUrl:`https://prod.download.desktop.kiro.dev/powers/icons/dynatrace.png`,repositoryUrl:`https://github.com/kirodotdev/powers/tree/main/dynatrace`,license:``,repositoryCloneUrl:`git@github.com:kirodotdev/powers.git`,pathInRepo:`dynatrace`,repositoryBranch:`main`,installed:!1,keywords:[],source:{type:`registry`}},stripe:{name:`stripe`,description:`Build payment integrations with Stripe - accept payments, manage subscriptions, handle billing, and process refunds`,displayName:`Stripe Payments`,author:`Stripe`,iconUrl:`https://prod.download.desktop.kiro.dev/powers/icons/stripe.png`,repositoryUrl:`https://github.com/kirodotdev/powers/tree/main/stripe`,license:``,repositoryCloneUrl:`git@github.com:kirodotdev/powers.git`,pathInRepo:`stripe`,repositoryBranch:`main`,installed:!1,keywords:[],source:{type:`registry`}},"aws-infrastructure-as-code":{name:`aws-infrastructure-as-code`,description:`Build well-architected AWS infrastructure with CDK using latest documentation, best practices, and code samples. Validate CloudFormation templates, check resource configuration security compliance, and troubleshoot deployments.`,displayName:`Build AWS infrastructure with CDK and CloudFormation`,author:`AWS`,iconUrl:`https://prod.download.desktop.kiro.dev/powers/icons/iac.png`,repositoryUrl:`https://github.com/kirodotdev/powers/tree/main/aws-infrastructure-as-code`,license:``,repositoryCloneUrl:`git@github.com:kirodotdev/powers.git`,pathInRepo:`aws-infrastructure-as-code`,repositoryBranch:`main`,installed:!1,keywords:[],source:{type:`registry`}},"power-builder":{name:`power-builder`,description:`Complete guide for building and testing new Kiro Powers with templates, best practices, and validation`,displayName:`Build a Power`,author:`Kiro Team`,iconUrl:`https://prod.download.desktop.kiro.dev/powers/icons/power.png`,repositoryUrl:`https://github.com/kirodotdev/powers/tree/main/power-builder`,license:``,repositoryCloneUrl:`git@github.com:kirodotdev/powers.git`,pathInRepo:`power-builder`,repositoryBranch:`main`,installed:!1,keywords:[],source:{type:`registry`}},"saas-builder":{name:`saas-builder`,description:`Build production ready multi-tenant SaaS applications with serverless architecture, integrated billing, and enterprise grade security`,displayName:`SaaS Builder`,author:`Allen Helton`,iconUrl:`https://prod.download.desktop.kiro.dev/powers/icons/power.png`,repositoryUrl:`https://github.com/kirodotdev/powers/tree/main/saas-builder`,license:``,repositoryCloneUrl:`git@github.com:kirodotdev/powers.git`,pathInRepo:`saas-builder`,repositoryBranch:`main`,installed:!1,keywords:[],source:{type:`registry`}},"cloud-architect":{name:`cloud-architect`,description:`Build AWS infrastructure with CDK in Python following AWS Well-Architected framework best practices`,displayName:`Build infrastructure on AWS`,author:`Christian Bonzelet`,iconUrl:`https://prod.download.desktop.kiro.dev/powers/icons/power.png`,repositoryUrl:`https://github.com/kirodotdev/powers/tree/main/cloud-architect`,license:``,repositoryCloneUrl:`git@github.com:kirodotdev/powers.git`,pathInRepo:`cloud-architect`,repositoryBranch:`main`,installed:!1,keywords:[],source:{type:`registry`}},"aurora-dsql":{name:`aurora-dsql`,description:`For PostgreSQL compatible serverless distributed SQL database with Aurora DSQL, manage schemas, execute queries, and handle migrations with DSQL-specific constraints`,displayName:`Deploy a distributed SQL database on AWS`,author:`Rolf Koski`,iconUrl:`https://prod.download.desktop.kiro.dev/powers/icons/power.png`,repositoryUrl:`https://github.com/kirodotdev/powers/tree/main/aurora-dsql`,license:``,repositoryCloneUrl:`git@github.com:kirodotdev/powers.git`,pathInRepo:`aurora-dsql`,repositoryBranch:`main`,installed:!1,keywords:[],source:{type:`registry`}}},repoSources:{},lastUpdated:`2025-12-28T20:19:10.824Z`,kiroRecommendedRepo:{url:`https://prod.download.desktop.kiro.dev/powers/default_registry.json`,lastFetch:`2025-12-28T20:19:10.823Z`,powerCount:18}})}catch{this.log.debug(`Failed to parse official registry, using empty registry`)}return this.createInitialRegistry()}unregisterLocalPowers(e){let t={...this.getOfficialRegistry(),lastUpdated:new Date().toISOString()};return this.log.trace({action:e===!0?`dryRun`:`reset`,type:`registry`,powerCount:Object.keys(t.powers).length}),this.write(t,e)}buildRepoSource(e){let t=new Date().toISOString();return{name:e.sourcePath??e.installPath??e.name,type:`local`,enabled:!0,addedAt:t,powerCount:1,...e.sourcePath!=null&&{path:e.sourcePath},lastSync:t}}};const Py=`GLOBAL.md`,Fy=`.kiro`,Iy=`steering`,Ly=`settings`,Ry=`mcp.json`,zy=`POWER.md`,By=`SKILL.md`;var Vy=class extends Ig{constructor(){super(`KiroCLIOutputPlugin`,{globalConfigDir:Fy,outputFileName:Py,indexignore:`.kiroignore`}),this.registerCleanEffect(`registry-cleanup`,async e=>this.getRegistryWriter(Ny).unregisterLocalPowers(e.dryRun)?{success:!0,description:`Reset registry`}:{success:!1,description:`Failed`,error:Error(`Registry cleanup failed`)}),this.registerCleanEffect(`mcp-settings-cleanup`,async e=>{let t=this.joinPath(this.getGlobalSettingsDir(),Ry),n=JSON.stringify({mcpServers:{},powers:{mcpServers:{}}},null,2);if(e.dryRun===!0)return this.log.trace({action:`dryRun`,type:`mcpSettingsCleanup`,path:t}),{success:!0,description:`Would reset mcp.json`};let r=await this.writeFile(e,t,n,`mcpSettingsCleanup`);return r.success?{success:!0,description:`Reset mcp.json`}:{success:!1,description:`Failed`,error:r.error??Error(`Cleanup failed`)}})}getGlobalSettingsDir(){return this.joinPath(this.getHomeDir(),Fy,Ly)}getGlobalSteeringDir(){return this.joinPath(this.getGlobalConfigDir(),Iy)}getKiroPowersDir(){return this.joinPath(this.getHomeDir(),`.kiro/powers/installed`)}getKiroSkillsDir(){return this.joinPath(this.getHomeDir(),`.kiro/skills`)}async registerProjectOutputDirs(e){let{projects:t}=e.collectedInputContext.workspace;return t.filter(e=>e.dirFromWorkspacePath!=null).map(e=>this.createRelativePath(this.joinPath(e.dirFromWorkspacePath.path,Fy,Iy),e.dirFromWorkspacePath.basePath,()=>Iy))}async registerProjectOutputFiles(e){let{projects:t}=e.collectedInputContext.workspace,{rules:n}=e.collectedInputContext,r=[];for(let e of t)if(e.dirFromWorkspacePath!=null){if(e.childMemoryPrompts!=null)for(let t of e.childMemoryPrompts)r.push(this.createRelativePath(this.joinPath(e.dirFromWorkspacePath.path,Fy,Iy,this.buildSteeringFileName(t)),e.dirFromWorkspacePath.basePath,()=>Iy));if(n!=null&&n.length>0){let t=Qg($g(n.filter(e=>e.scope===`project`),e.projectConfig),e.projectConfig);for(let n of t){let t=this.buildRuleSteeringFileName(n);r.push(this.createRelativePath(this.joinPath(e.dirFromWorkspacePath.path,Fy,Iy,t),e.dirFromWorkspacePath.basePath,()=>Iy))}}}return r.push(...this.registerProjectIgnoreOutputFiles(t)),r}async registerGlobalOutputDirs(){let e=[this.createRelativePath(Iy,this.getGlobalConfigDir(),()=>Iy)],t=this.getKiroPowersDir();for(let n of this.listInstalledPowers(t))e.push(this.createRelativePath(n,t,()=>n));let n=this.getKiroSkillsDir();for(let t of this.listInstalledPowers(n))e.push(this.createRelativePath(t,n,()=>t));return e.push(this.createRelativePath(`repos`,this.joinPath(this.getHomeDir(),`.kiro/powers`),()=>`repos`)),e}listInstalledPowers(e){try{return this.existsSync(e)?this.readdirSync(e,{withFileTypes:!0}).filter(e=>e.isDirectory()).map(e=>e.name):[]}catch{return[]}}async registerGlobalOutputFiles(e){let{globalMemory:t,fastCommands:n,skills:r,rules:i}=e.collectedInputContext,a=this.getGlobalSteeringDir(),o=[];if(t!=null&&o.push(this.createRelativePath(Py,a,()=>Iy)),n!=null)for(let e of n)o.push(this.createRelativePath(this.buildFastCommandSteeringFileName(e),a,()=>Iy));let s=i?.filter(e=>e.scope===`global`);if(s!=null&&s.length>0)for(let e of s)o.push(this.createRelativePath(this.buildRuleSteeringFileName(e),a,()=>Iy));if(r==null)return o;let c=this.getKiroPowersDir(),l=this.getKiroSkillsDir();for(let e of r){let t=e.yamlFrontMatter.name;if(e.mcpConfig!=null){let n=this.joinPath(c,t);if(o.push(this.createRelativePath(zy,n,()=>t)),o.push(this.createRelativePath(Ry,n,()=>t)),e.childDocs!=null)for(let t of e.childDocs)o.push(this.createRelativePath(this.joinPath(Iy,t.dir.path.replace(/\.mdx$/,`.md`)),n,()=>Iy));if(e.resources!=null)for(let t of e.resources)o.push(this.createRelativePath(this.joinPath(Iy,t.relativePath),n,()=>Iy))}else{let n=this.joinPath(l,t);if(o.push(this.createRelativePath(By,n,()=>t)),e.childDocs!=null)for(let r of e.childDocs)o.push(this.createRelativePath(r.dir.path.replace(/\.mdx$/,`.md`),n,()=>t));if(e.resources!=null)for(let r of e.resources)o.push(this.createRelativePath(r.relativePath,n,()=>t))}}return r.some(e=>e.mcpConfig!=null)&&o.push(this.createRelativePath(Ry,this.getGlobalSettingsDir(),()=>Ly)),o}async canWrite(e){let{workspace:t,globalMemory:n,fastCommands:r,skills:i,rules:a,aiAgentIgnoreConfigFiles:o}=e.collectedInputContext,s=t.projects.some(e=>(e.childMemoryPrompts?.length??0)>0),c=(a?.length??0)>0,l=o?.some(e=>e.fileName===`.kiroignore`)??!1;return s||n!=null||(r?.length??0)>0||(i?.length??0)>0||c||l?!0:(this.log.trace({action:`skip`,reason:`noOutputs`}),!1)}async writeProjectOutputs(e){let{projects:t}=e.collectedInputContext.workspace,{rules:n}=e.collectedInputContext,r=[];for(let i of t)if(i.dirFromWorkspacePath!=null){if(i.childMemoryPrompts!=null)for(let t of i.childMemoryPrompts)r.push(await this.writeSteeringFile(e,i,t));if(n!=null&&n.length>0){let t=Qg($g(n.filter(e=>e.scope===`project`),i.projectConfig),i.projectConfig);for(let n of t)r.push(await this.writeRuleSteeringFile(e,i,n))}}let i=await this.writeProjectIgnoreFiles(e);return r.push(...i),{files:r,dirs:[]}}async writeGlobalOutputs(e){let{globalMemory:t,fastCommands:n,skills:r,rules:i}=e.collectedInputContext,a=[],o=[],s=this.getGlobalSteeringDir();if(t!=null&&a.push(await this.writeFile(e,this.joinPath(s,Py),t.content,`globalMemory`)),n!=null)for(let t of n)a.push(await this.writeFastCommandSteeringFile(e,t));let c=i?.filter(e=>e.scope===`global`);if(c!=null&&c.length>0)for(let t of c){let n=this.buildRuleSteeringFileName(t),r=this.joinPath(s,n),i=this.buildRuleSteeringContent(t);a.push(await this.writeFile(e,r,i,`ruleSteeringFile`))}if(r==null||r.length===0)return{files:a,dirs:[]};let l=r.filter(e=>e.mcpConfig!=null),u=r.filter(e=>e.mcpConfig==null);for(let t of l){let{fileResults:n,registryResult:r}=await this.writeSkillAsPower(e,t);a.push(...n),o.push(r)}for(let t of u){let n=await this.writeSkillAsKiroSkill(e,t);a.push(...n)}let d=await this.writeGlobalMcpSettings(e,r);return d!=null&&a.push(d),this.logRegistryResults(o,e.dryRun),{files:a,dirs:[]}}async writeGlobalMcpSettings(e,t){let n={};for(let e of t)if(e.mcpConfig!=null)for(let[t,r]of Object.entries(e.mcpConfig.mcpServers))n[`power-${e.yamlFrontMatter.name}-${t}`]=r;if(Object.keys(n).length===0)return null;let r=JSON.stringify({mcpServers:{},powers:{mcpServers:n}},null,2);return this.writeFile(e,this.joinPath(this.getGlobalSettingsDir(),Ry),r,`globalMcpSettings`)}logRegistryResults(e,t){let n=e.filter(e=>e.success).length,r=e.filter(e=>!e.success).length;n>0&&this.log.trace({action:t===!0?`dryRun`:`register`,type:`registrySummary`,successCount:n}),r>0&&this.log.error({action:`register`,type:`registrySummary`,failCount:r})}async writeSkillAsPower(e,t){let n=[],r=t.yamlFrontMatter.name,i=this.joinPath(this.getKiroPowersDir(),r),a=this.joinPath(i,zy),o=`${this.buildPowerFrontMatter(t.yamlFrontMatter)}\n${t.content}`;if(n.push(await this.writeFile(e,a,o,`skillPower`)),t.childDocs!=null){let r=this.joinPath(i,Iy);for(let i of t.childDocs){let t=i.dir.path.replace(/\.mdx$/,`.md`);n.push(await this.writeFile(e,this.joinPath(r,t),i.content,`refDoc`))}}if(t.resources!=null){let r=this.joinPath(i,Iy);for(let i of t.resources)n.push(await this.writeFile(e,this.joinPath(r,i.relativePath),i.content,`resource`))}t.mcpConfig!=null&&n.push(await this.writeFile(e,this.joinPath(i,Ry),t.mcpConfig.rawContent,`mcpConfig`));let s=this.getRegistryWriter(Ny),c=s.buildPowerEntry(t,i);return{fileResults:n,registryResult:(await this.registerInRegistry(s,[c],e))[0]??{success:!1,entryName:r,error:Error(`No registry result`)}}}async writeSkillAsKiroSkill(e,t){let n=[],r=t.yamlFrontMatter.name,i=this.joinPath(this.getKiroSkillsDir(),r),a=this.joinPath(i,By),o=`${this.buildSkillFrontMatter(t.yamlFrontMatter)}\n${t.content}`;if(n.push(await this.writeFile(e,a,o,`kiroSkill`)),t.childDocs!=null)for(let r of t.childDocs){let t=r.dir.path.replace(/\.mdx$/,`.md`);n.push(await this.writeFile(e,this.joinPath(i,t),r.content,`refDoc`))}if(t.resources!=null)for(let r of t.resources)n.push(await this.writeFile(e,this.joinPath(i,r.relativePath),r.content,`resource`));return n}buildSkillFrontMatter(e){return this.buildMarkdownContent(``,{name:e.name,description:e.description,...e.displayName!=null&&{displayName:e.displayName},...e.keywords!=null&&e.keywords.length>0&&{keywords:e.keywords},...e.author!=null&&{author:e.author}}).trimEnd()}buildPowerFrontMatter(e){return this.buildMarkdownContent(``,{name:e.name,displayName:e.displayName,description:e.description,keywords:e.keywords,author:e.author}).trimEnd()}buildFastCommandSteeringFileName(e){return this.transformFastCommandName(e,{includeSeriesPrefix:!0,seriesSeparator:`-`})}async writeFastCommandSteeringFile(e,t){let n=this.buildFastCommandSteeringFileName(t),r=this.joinPath(this.getGlobalSteeringDir(),n),i=t.yamlFrontMatter?.description,a=this.buildMarkdownContent(t.content,{inclusion:`manual`,description:i!=null&&i.length>0?i:null});return this.writeFile(e,r,a,`fastCommandSteering`)}buildSteeringFileName(e){return`kiro-${(e.workingChildDirectoryPath?.path??e.dir.path).replaceAll(`\\`,`/`).replaceAll(/^\/+|\/+$/g,``).replaceAll(`/`,`-`)}.md`}buildRuleSteeringFileName(e){return`rule-${e.series}-${e.ruleName}.md`}buildRuleSteeringContent(e){let t=e.globs.length===1?e.globs[0]:`{${e.globs.join(`,`)}}`;return this.buildMarkdownContent(e.content,{inclusion:`fileMatch`,fileMatchPattern:t})}async writeRuleSteeringFile(e,t,n){let r=t.dirFromWorkspacePath,i=this.buildRuleSteeringFileName(n),a=this.joinPath(r.basePath,r.path,Fy,Iy),o=this.joinPath(a,i),s=this.buildRuleSteeringContent(n);return this.writeFile(e,o,s,`ruleSteeringFile`)}async writeSteeringFile(e,t,n){let r=t.dirFromWorkspacePath,i=this.buildSteeringFileName(n),a=this.joinPath(r.basePath,r.path,Fy,Iy),o=this.joinPath(a,i),s=n.workingChildDirectoryPath?.path??n.dir.path,c=this.buildMarkdownContent(n.content,{inclusion:`fileMatch`,fileMatchPattern:`${s.replaceAll(`\\`,`/`)}/**`});return this.writeFile(e,o,c,`steeringFile`)}};const Hy=`agt.mdx`,Uy=[`node_modules`,`.git`];var Wy=class extends zg{constructor(){super(`ProjectPromptInputPlugin`,[`ShadowProjectInputPlugin`])}async collect(e){let{dependencyContext:t,fs:n,userConfigOptions:r,path:i,globalScope:a}=e,{shadowProjectDir:o}=this.resolveBasePaths(r),s=this.resolveShadowPath(r.shadowSourceProject.project.dist,o),c=t.workspace;if(c==null)return this.log.warn(`No workspace found in dependency context, skipping project prompt enhancement`),{};let l=c.projects??[],u=await Promise.all(l.map(async t=>{let r=t.name;if(r==null)return t;let o=i.join(s,r);if(!n.existsSync(o)||!n.statSync(o).isDirectory())return t;let c=t.dirFromWorkspacePath?.getAbsolutePath(),l=await this.readRootMemoryPrompt(e,o,a),u=c==null?[]:await this.scanChildMemoryPrompts(e,o,c,a);return{...t,...l!=null&&{rootMemoryPrompt:l},...u.length>0&&{childMemoryPrompts:u}}}));return{workspace:{directory:c.directory,projects:u}}}async readRootMemoryPrompt(e,t,n){let{fs:r,path:i,logger:a}=e,o=i.join(t,Hy);if(!(!r.existsSync(o)||!r.statSync(o).isFile()))try{let e=r.readFileSync(o,`utf8`),i=Ng(e),s;try{s=await _v(e,{globalScope:n,basePath:t})}catch(e){throw e instanceof e_&&(a.error(`MDX compilation failed in ${o}: ${e.message}`),a.error(`Please check your configuration file (~/.aindex/.tnmsc.json) and ensure all required variables are defined.`),u.default.exit(1)),e}return{type:L.ProjectRootMemory,content:s,length:s.length,filePathKind:R.Relative,...i.yamlFrontMatter!=null&&{yamlFrontMatter:i.yamlFrontMatter},...i.rawFrontMatter!=null&&{rawFrontMatter:i.rawFrontMatter},markdownAst:i.markdownAst,markdownContents:i.markdownContents,dir:{pathKind:R.Root,path:``,getDirectoryName:()=>``}}}catch(e){a.error(`Failed to read root memory prompt at ${o}`,{error:e});return}}async scanChildMemoryPrompts(e,t,n,r){let{logger:i}=e,a=[];try{await this.scanDirectoryRecursive(e,t,t,n,a,r)}catch(e){i.error(`Failed to scan child memory prompts at ${t}`,{error:e})}return a}async scanDirectoryRecursive(e,t,n,r,i,a){let{fs:o,path:s}=e,c=o.readdirSync(n,{withFileTypes:!0});for(let l of c){if(!l.isDirectory()||Uy.includes(l.name))continue;let c=s.join(n,l.name),u=s.join(c,Hy);if(o.existsSync(u)&&o.statSync(u).isFile()){let n=await this.readChildMemoryPrompt(e,t,c,r,a);n!=null&&i.push(n)}await this.scanDirectoryRecursive(e,t,c,r,i,a)}}async readChildMemoryPrompt(e,t,n,r,i){let{fs:a,path:o,logger:s}=e,c=o.join(n,Hy);try{let e=a.readFileSync(c,`utf8`),l=Ng(e),d;try{d=await _v(e,{globalScope:i,basePath:n})}catch(e){throw e instanceof e_&&(s.error(`MDX compilation failed in ${c}: ${e.message}`),s.error(`Please check your configuration file (~/.aindex/.tnmsc.json) and ensure all required variables are defined.`),u.default.exit(1)),e}let f=o.relative(t,n),p=o.join(r,f),m=o.basename(n);return{type:L.ProjectChildrenMemory,content:d,length:d.length,filePathKind:R.Relative,...l.yamlFrontMatter!=null&&{yamlFrontMatter:l.yamlFrontMatter},...l.rawFrontMatter!=null&&{rawFrontMatter:l.rawFrontMatter},markdownAst:l.markdownAst,markdownContents:l.markdownContents,dir:{pathKind:R.Relative,path:f,basePath:r,getDirectoryName:()=>m,getAbsolutePath:()=>p},workingChildDirectoryPath:{pathKind:R.Relative,path:f,basePath:r,getDirectoryName:()=>m,getAbsolutePath:()=>p}}}catch(e){s.error(`Failed to read child memory prompt at ${c}`,{error:e});return}}};const Gy=`.qoder`,Ky=`rules`,qy=`commands`,Jy=`skills`,Yy=`global.md`,Xy=`always.md`,Zy=`SKILL.md`,Qy=`mcp.json`,$y=`glob`,eb=`glob`;var tb=class extends Ig{constructor(){super(`QoderIDEPluginOutputPlugin`,{globalConfigDir:Gy,indexignore:`.qoderignore`})}async registerProjectOutputDirs(e){let{projects:t}=e.collectedInputContext.workspace;return t.filter(e=>e.dirFromWorkspacePath!=null).map(e=>this.createProjectRulesDirPath(e.dirFromWorkspacePath))}async registerProjectOutputFiles(e){let t=[],{workspace:n,rules:r}=e.collectedInputContext,{projects:i}=n,{globalMemory:a}=e.collectedInputContext;for(let e of i){let n=e.dirFromWorkspacePath;if(n!=null){if(a!=null&&t.push(this.createProjectRuleFilePath(n,Yy)),e.rootMemoryPrompt!=null&&t.push(this.createProjectRuleFilePath(n,Xy)),e.childMemoryPrompts!=null)for(let r of e.childMemoryPrompts)t.push(this.createProjectRuleFilePath(n,this.buildChildRuleFileName(r)));if(r!=null&&r.length>0){let i=Qg($g(r.filter(e=>this.normalizeRuleScope(e)===`project`),e.projectConfig),e.projectConfig);for(let e of i){let r=this.buildRuleFileName(e);t.push(this.createProjectRuleFilePath(n,r))}}}}return t.push(...this.registerProjectIgnoreOutputFiles(i)),t}async registerGlobalOutputDirs(e){let t=this.getGlobalConfigDir(),{fastCommands:n,skills:r,rules:i}=e.collectedInputContext,a=[];if(n!=null&&n.length>0&&a.push(this.createRelativePath(qy,t,()=>qy)),r!=null&&r.length>0)for(let e of r){let n=e.yamlFrontMatter.name;a.push(this.createRelativePath(f.join(Jy,n),t,()=>n))}let o=i?.filter(e=>this.normalizeRuleScope(e)===`global`);return o!=null&&o.length>0&&a.push(this.createRelativePath(f.join(Ky),t,()=>Ky)),a}async registerGlobalOutputFiles(e){let t=this.getGlobalConfigDir(),{fastCommands:n,skills:r,rules:i}=e.collectedInputContext,a=[],o=this.getTransformOptionsFromContext(e,{includeSeriesPrefix:!0});if(n!=null&&n.length>0)for(let e of n){let n=this.transformFastCommandName(e,o);a.push(this.createRelativePath(f.join(qy,n),t,()=>qy))}let s=i?.filter(e=>this.normalizeRuleScope(e)===`global`);if(s!=null&&s.length>0)for(let e of s){let n=this.buildRuleFileName(e);a.push(this.createRelativePath(f.join(Ky,n),t,()=>Ky))}if(r!=null&&r.length>0)for(let e of r){let n=e.yamlFrontMatter.name;if(a.push(this.createRelativePath(f.join(Jy,n,Zy),t,()=>n)),e.mcpConfig!=null&&a.push(this.createRelativePath(f.join(Jy,n,Qy),t,()=>n)),e.childDocs!=null)for(let r of e.childDocs)a.push(this.createRelativePath(f.join(Jy,n,r.relativePath.replace(/\.mdx$/,`.md`)),t,()=>n));if(e.resources!=null)for(let r of e.resources)a.push(this.createRelativePath(f.join(Jy,n,r.relativePath),t,()=>n))}return a}async canWrite(e){let{workspace:t,globalMemory:n,fastCommands:r,skills:i,rules:a,aiAgentIgnoreConfigFiles:o}=e.collectedInputContext,s=t.projects.some(e=>e.rootMemoryPrompt!=null||(e.childMemoryPrompts?.length??0)>0),c=(a?.length??0)>0,l=o?.some(e=>e.fileName===`.qoderignore`)??!1;return s||n!=null||(r?.length??0)>0||(i?.length??0)>0||c||l?!0:(this.log.trace({action:`skip`,reason:`noOutputs`}),!1)}async writeProjectOutputs(e){let{workspace:t,globalMemory:n,rules:r}=e.collectedInputContext,{projects:i}=t,a=[];for(let t of i){if(t.dirFromWorkspacePath==null)continue;let i=t.dirFromWorkspacePath;if(n!=null){let t=this.buildAlwaysRuleContent(n.content);a.push(await this.writeProjectRuleFile(e,i,Yy,t,`globalRule`))}if(t.rootMemoryPrompt!=null){let n=this.buildAlwaysRuleContent(t.rootMemoryPrompt.content);a.push(await this.writeProjectRuleFile(e,i,Xy,n,`projectRootRule`))}if(t.childMemoryPrompts!=null)for(let n of t.childMemoryPrompts){let t=this.buildChildRuleFileName(n),r=this.buildGlobRuleContent(n);a.push(await this.writeProjectRuleFile(e,i,t,r,`projectChildRule`))}if(r!=null&&r.length>0){let n=Qg($g(r.filter(e=>this.normalizeRuleScope(e)===`project`),t.projectConfig),t.projectConfig);for(let t of n){let n=this.buildRuleFileName(t),r=this.buildRuleContent(t);a.push(await this.writeProjectRuleFile(e,i,n,r,`projectRule`))}}}let o=await this.writeProjectIgnoreFiles(e);return a.push(...o),{files:a,dirs:[]}}async writeGlobalOutputs(e){let{fastCommands:t,skills:n,rules:r}=e.collectedInputContext,i=[],a=this.getGlobalConfigDir(),o=f.join(a,qy),s=f.join(a,Jy),c=f.join(a,Ky);if(t!=null&&t.length>0)for(let n of t)i.push(await this.writeGlobalFastCommand(e,o,n));if(r!=null&&r.length>0){let t=r.filter(e=>this.normalizeRuleScope(e)===`global`);for(let n of t)i.push(await this.writeRuleFile(e,c,n))}if(n!=null&&n.length>0)for(let t of n)i.push(...await this.writeGlobalSkill(e,s,t));return{files:i,dirs:[]}}createProjectRulesDirPath(e){return this.createRelativePath(f.join(e.path,Gy,Ky),e.basePath,()=>Ky)}createProjectRuleFilePath(e,t){return this.createRelativePath(f.join(e.path,Gy,Ky,t),e.basePath,()=>Ky)}buildChildRuleFileName(e){let t=(e.workingChildDirectoryPath?.path??e.dir.path).replaceAll(`\\`,`/`).replaceAll(/^\/+|\/+$/g,``).replaceAll(`/`,`-`);return`glob-${t.length>0?t:`root`}.md`}buildAlwaysRuleContent(e){return jg({trigger:`always_on`,type:`user_command`},e)}buildGlobRuleContent(e){let t=(e.workingChildDirectoryPath?.path??e.dir.path).replaceAll(`\\`,`/`).replaceAll(/^\/+|\/+$/g,``),n=t.length===0?`**/*`:`${t}/**`;return jg({trigger:$y,[eb]:n,type:`user_command`},e.content)}async writeProjectRuleFile(e,t,n,r,i){let a=f.join(t.basePath,t.path,Gy,Ky),o=f.join(a,n);return this.writeFile(e,o,r,i)}async writeGlobalFastCommand(e,t,n){let r=this.getTransformOptionsFromContext(e,{includeSeriesPrefix:!0}),i=this.transformFastCommandName(n,r),a=f.join(t,i),o=jg(this.buildFastCommandFrontMatter(n),n.content);return this.writeFile(e,a,o,`globalFastCommand`)}async writeRuleFile(e,t,n){let r=this.buildRuleFileName(n),i=f.join(t,r),a=this.buildRuleContent(n);return this.writeFile(e,i,a,`rule`)}async writeGlobalSkill(e,t,n){let r=[],i=n.yamlFrontMatter.name,a=f.join(t,i),o=f.join(a,Zy),s=jg(this.buildSkillFrontMatter(n),n.content);if(r.push(await this.writeFile(e,o,s,`skill`)),n.mcpConfig!=null){let t=f.join(a,Qy);r.push(await this.writeFile(e,t,n.mcpConfig.rawContent,`mcpConfig`))}if(n.childDocs!=null)for(let t of n.childDocs){let n=f.join(a,t.relativePath.replace(/\.mdx$/,`.md`));r.push(await this.writeFile(e,n,t.content,`childDoc`))}if(n.resources!=null)for(let t of n.resources){let n=f.join(a,t.relativePath);if(t.encoding===`base64`){let e=h.Buffer.from(t.content,`base64`),o=f.dirname(n);this.ensureDirectory(o),this.writeFileSyncBuffer(n,e),r.push({path:this.createRelativePath(t.relativePath,a,()=>i),success:!0})}else r.push(await this.writeFile(e,n,t.content,`resource`))}return r}buildSkillFrontMatter(e){let t=e.yamlFrontMatter;return{name:t.name,description:t.description,type:`user_command`,...t.displayName!=null&&{displayName:t.displayName},...t.keywords!=null&&t.keywords.length>0&&{keywords:t.keywords},...t.author!=null&&{author:t.author},...t.version!=null&&{version:t.version},...t.allowTools!=null&&t.allowTools.length>0&&{allowTools:t.allowTools}}}buildFastCommandFrontMatter(e){let t=e.yamlFrontMatter;return t==null?{description:`Fast command`,type:`user_command`}:{description:t.description,type:`user_command`,...t.argumentHint!=null&&{argumentHint:t.argumentHint},...t.allowTools!=null&&t.allowTools.length>0&&{allowTools:t.allowTools}}}buildRuleFileName(e){return`rule-${e.series}-${e.ruleName}.md`}buildRuleContent(e){return jg({trigger:$y,[eb]:e.globs.length>0?e.globs.join(`, `):`**/*`,type:`user_command`},e.content)}normalizeRuleScope(e){return e.scope||`global`}};const nb=`README.md`;var rb=class extends Ig{constructor(){super(`ReadmeMdConfigFileOutputPlugin`,{outputFileName:nb})}async registerProjectOutputFiles(e){let t=[],{readmePrompts:n}=e.collectedInputContext;if(n==null||n.length===0)return t;for(let e of n){let{targetDir:n}=e,r=f.join(n.path,nb);t.push({pathKind:R.Relative,path:r,basePath:n.basePath,getDirectoryName:()=>n.getDirectoryName(),getAbsolutePath:()=>f.join(n.basePath,r)})}return t}async canWrite(e){let{readmePrompts:t}=e.collectedInputContext;return t?.length===0?(this.log.debug(`skipped`,{reason:`no README prompts to write`}),!1):!0}async writeProjectOutputs(e){let t=[],n=[],{readmePrompts:r}=e.collectedInputContext;if(r==null||r.length===0)return{files:t,dirs:n};for(let n of r){let r=await this.writeReadmeFile(e,n);t.push(r)}return{files:t,dirs:n}}async writeReadmeFile(e,t){let{targetDir:n}=t,r=f.join(n.path,nb),i=f.join(n.basePath,r),a=t.content,o={pathKind:R.Relative,path:r,basePath:n.basePath,getDirectoryName:()=>n.getDirectoryName(),getAbsolutePath:()=>i},s=t.isRoot?`project:${t.projectName}/README.md`:`project:${t.projectName}/${n.path}/README.md`;if(e.dryRun===!0)return this.log.trace({action:`dryRun`,type:`readme`,path:i,label:s}),{path:o,success:!0,skipped:!1};try{let e=f.dirname(i);return d.existsSync(e)||d.mkdirSync(e,{recursive:!0}),d.writeFileSync(i,a,`utf8`),this.log.trace({action:`write`,type:`readme`,path:i,label:s}),{path:o,success:!0}}catch(e){let t=e instanceof Error?e.message:String(e);return this.log.error({action:`write`,type:`readme`,path:i,label:s,error:t}),{path:o,success:!1,error:e}}}},ib=class extends zg{constructor(){super(`ReadmeMdInputPlugin`,[`ShadowProjectInputPlugin`])}async collect(e){let{userConfigOptions:t,logger:n,fs:r,path:i,globalScope:a}=e,{workspaceDir:o,shadowProjectDir:s}=this.resolveBasePaths(t),c=this.resolveShadowPath(t.shadowSourceProject.project.dist,s),l=[];if(!r.existsSync(c)||!r.statSync(c).isDirectory())return n.debug(`shadow projects directory does not exist`,{path:c}),{readmePrompts:l};try{let t=r.readdirSync(c,{withFileTypes:!0});for(let n of t){if(!n.isDirectory())continue;let t=n.name,r=i.join(c,t);await this.collectReadmeFiles(e,r,t,o,``,l,a)}}catch(e){n.error(`failed to scan shadow projects`,{path:c,error:e})}return{readmePrompts:l}}async collectReadmeFiles(e,t,n,r,i,a,o){let{fs:s,path:c,logger:l}=e,d=i===``,f=c.join(t,`rdm.mdx`);if(s.existsSync(f)&&s.statSync(f).isFile())try{let e=s.readFileSync(f,`utf8`),p;if(o!=null)try{p=await _v(e,{globalScope:o,basePath:t})}catch(e){throw e instanceof e_&&(l.error(`MDX compilation failed in ${f}: ${e.message}`),l.error(`Please check your configuration file (~/.aindex/.tnmsc.json) and ensure all required variables are defined.`),u.default.exit(1)),e}else p=e;let m=d?n:c.join(n,i),h={pathKind:R.Relative,path:m,basePath:r,getDirectoryName:()=>d?n:c.basename(i),getAbsolutePath:()=>c.resolve(r,m)},g={pathKind:R.Relative,path:c.dirname(f),basePath:r,getDirectoryName:()=>c.basename(c.dirname(f)),getAbsolutePath:()=>c.dirname(f)};a.push({type:L.Readme,content:p,length:p.length,filePathKind:R.Relative,projectName:n,targetDir:h,isRoot:d,markdownContents:[],dir:g})}catch(e){l.warn(`failed to read readme`,{path:f,error:e})}try{let l=s.readdirSync(t,{withFileTypes:!0});for(let s of l)if(s.isDirectory()){let l=d?s.name:c.join(i,s.name),u=c.join(t,s.name);await this.collectReadmeFiles(e,u,n,r,l,a,o)}}catch(e){l.warn(`failed to scan directory`,{path:t,error:e})}}},ab=class extends Iv{constructor(){super(`RuleInputPlugin`,{configKey:`shadowSourceProject.rule.dist`})}getTargetDir(e,t){return this.resolveShadowPath(e.shadowSourceProject.rule.dist,t.shadowProjectDir)}validateMetadata(e,t){return Nt(e,t)}createResult(e){return{rules:e}}createPrompt(e,t,n,r,i,a,o,s){let c=e.indexOf(`/`),l=c===-1?``:e.slice(0,c),u=(c===-1?e:e.slice(c+1)).replace(/\.mdx$/,``),d=r?.globs??[],f=r?.scope??`project`,p=r?.seriName;return{type:L.Rule,content:n,length:n.length,filePathKind:R.Relative,...r!=null&&{yamlFrontMatter:r},...i!=null&&{rawFrontMatter:i},markdownAst:a.markdownAst,markdownContents:a.markdownContents,dir:{pathKind:R.Relative,path:e,basePath:o,getDirectoryName:()=>e.replace(/\.mdx$/,``),getAbsolutePath:()=>t},series:l,ruleName:u,globs:d,scope:f,...p!=null&&{seriName:p},rawMdxContent:s}}async collect(e){let{userConfigOptions:t,logger:n,path:r,fs:i}=e,a=this.resolveBasePaths(t),o=this.getTargetDir(t,a),s=[];if(!(i.existsSync(o)&&i.statSync(o).isDirectory()))return this.createResult(s);try{let t=i.readdirSync(o,{withFileTypes:!0});for(let a of t)if(a.isDirectory()){let t=r.join(o,a.name);try{let n=i.readdirSync(t,{withFileTypes:!0});for(let i of n)if(i.isFile()&&i.name.endsWith(this.extension)){let n=await this.processFile(i.name,r.join(t,i.name),o,a.name,e);n!=null&&s.push(n)}}catch(e){n.error(`Failed to scan subdirectory at ${t}`,{error:e})}}}catch(e){n.error(`Failed to scan directory at ${o}`,{error:e})}return this.createResult(s)}async processFile(e,t,n,r,i){let{logger:a,globalScope:o}=i,s=i.fs.readFileSync(t,`utf8`);try{let c=Ng(s),l=await _v(s,{globalScope:o,extractMetadata:!0,basePath:i.path.join(n,r)}),u=c.yamlFrontMatter!=null||Object.keys(l.metadata.fields).length>0?{...c.yamlFrontMatter,...l.metadata.fields}:void 0;if(u!=null){let e=this.validateMetadata(u,t);for(let t of e.warnings)a.debug(t);if(!e.valid)throw new r_([...e.errors],t)}let{content:d}=l,f=`${r}/${e}`;return a.debug(`${this.name} metadata extracted`,{file:f,source:l.metadata.source,hasYaml:c.yamlFrontMatter!=null,hasExport:Object.keys(l.metadata.fields).length>0}),this.createPrompt(f,t,d,u,c.rawFrontMatter,c,n,s)}catch(e){a.error(`failed to parse ${this.name} item`,{file:t,error:e});return}}},ob=class extends zg{constructor(){super(`ShadowProjectInputPlugin`)}loadProjectConfig(e,t,n,r,i,a){let o=i.join(t,n,e,`project.jsonc`);if(r.existsSync(o))try{let t=r.readFileSync(o,`utf8`),n=[],i=(0,_.parse)(t,n);if(n.length>0){a.warn(`failed to parse project.jsonc for ${e}`,{path:o,errors:n});return}return i}catch(t){a.warn(`failed to parse project.jsonc for ${e}`,{path:o,error:t});return}}collect(e){let{userConfigOptions:t,logger:n,fs:r,path:i}=e,{workspaceDir:a,shadowProjectDir:o}=this.resolveBasePaths(t),s=this.resolveShadowPath(t.shadowSourceProject.project.dist,o),c=i.basename(o),l=[];if(r.existsSync(s)&&r.statSync(s).isDirectory())try{let e=r.readdirSync(s,{withFileTypes:!0});for(let s of e)if(s.isDirectory()){let e=s.name===c,u=this.loadProjectConfig(s.name,o,t.shadowSourceProject.project.src,r,i,n);l.push({name:s.name,...e&&{isPromptSourceProject:!0},...u!=null&&{projectConfig:u},dirFromWorkspacePath:{pathKind:R.Relative,path:s.name,basePath:a,getDirectoryName:()=>s.name,getAbsolutePath:()=>i.resolve(a,s.name)}})}}catch(e){n.error(`failed to scan shadow projects`,{path:s,error:e})}if(l.length===0&&r.existsSync(a)&&r.statSync(a).isDirectory()){n.debug(`no projects in dist/app/, falling back to workspace scan`,{workspaceDir:a});try{let e=r.readdirSync(a,{withFileTypes:!0});for(let s of e)if(s.isDirectory()&&!s.name.startsWith(`.`)){let e=s.name===c,u=this.loadProjectConfig(s.name,o,t.shadowSourceProject.project.src,r,i,n);l.push({name:s.name,...e&&{isPromptSourceProject:!0},...u!=null&&{projectConfig:u},dirFromWorkspacePath:{pathKind:R.Relative,path:s.name,basePath:a,getDirectoryName:()=>s.name,getAbsolutePath:()=>i.resolve(a,s.name)}})}}catch(e){n.error(`failed to scan workspace directory`,{path:a,error:e})}}return{workspace:{directory:{pathKind:R.Absolute,path:a,getDirectoryName:()=>i.basename(a)},projects:l}}}};function sb(e){return It.includes(e.toLowerCase())}function cb(e){let t=e.toLowerCase();return[`.png`,`.jpg`,`.jpeg`,`.gif`,`.webp`,`.ico`,`.bmp`,`.tiff`,`.svg`].includes(t)?`image`:`.kt,.java,.py,.pyi,.pyx,.ts,.tsx,.js,.jsx,.mjs,.cjs,.go,.rs,.c,.cpp,.cc,.h,.hpp,.hxx,.cs,.fs,.fsx,.vb,.rb,.php,.swift,.scala,.groovy,.lua,.r,.jl,.ex,.exs,.erl,.clj,.cljs,.hs,.ml,.mli,.nim,.zig,.v,.dart,.vue,.svelte,.d.ts,.d.mts,.d.cts`.split(`,`).includes(t)?`code`:[`.sql`,`.json`,`.jsonc`,`.json5`,`.xml`,`.xsd`,`.xsl`,`.xslt`,`.yaml`,`.yml`,`.toml`,`.csv`,`.tsv`,`.graphql`,`.gql`,`.proto`].includes(t)?`data`:[`.txt`,`.text`,`.rtf`,`.log`,`.docx`,`.doc`,`.xlsx`,`.xls`,`.pptx`,`.ppt`,`.pdf`,`.odt`,`.ods`,`.odp`].includes(t)?`document`:[`.ini`,`.conf`,`.cfg`,`.config`,`.properties`,`.env`,`.envrc`,`.editorconfig`,`.gitignore`,`.gitattributes`,`.npmrc`,`.nvmrc`,`.npmignore`,`.eslintrc`,`.prettierrc`,`.stylelintrc`,`.babelrc`,`.browserslistrc`].includes(t)?`config`:[`.sh`,`.bash`,`.zsh`,`.fish`,`.ps1`,`.psm1`,`.psd1`,`.bat`,`.cmd`].includes(t)?`script`:`.exe,.dll,.so,.dylib,.bin,.wasm,.class,.jar,.war,.pyd,.pyc,.pyo,.zip,.tar,.gz,.bz2,.7z,.rar,.ttf,.otf,.woff,.woff2,.eot,.db,.sqlite,.sqlite3`.split(`,`).includes(t)?`binary`:`other`}function lb(e){return{".ts":`text/typescript`,".tsx":`text/typescript`,".js":`text/javascript`,".jsx":`text/javascript`,".json":`application/json`,".py":`text/x-python`,".java":`text/x-java`,".kt":`text/x-kotlin`,".go":`text/x-go`,".rs":`text/x-rust`,".c":`text/x-c`,".cpp":`text/x-c++`,".cs":`text/x-csharp`,".rb":`text/x-ruby`,".php":`text/x-php`,".swift":`text/x-swift`,".scala":`text/x-scala`,".sql":`application/sql`,".xml":`application/xml`,".yaml":`text/yaml`,".yml":`text/yaml`,".toml":`text/toml`,".csv":`text/csv`,".graphql":`application/graphql`,".txt":`text/plain`,".pdf":`application/pdf`,".docx":`application/vnd.openxmlformats-officedocument.wordprocessingml.document`,".xlsx":`application/vnd.openxmlformats-officedocument.spreadsheetml.sheet`,".html":`text/html`,".css":`text/css`,".svg":`image/svg+xml`,".png":`image/png`,".jpg":`image/jpeg`,".jpeg":`image/jpeg`,".gif":`image/gif`,".webp":`image/webp`,".ico":`image/x-icon`,".bmp":`image/bmp`}[e.toLowerCase()]}var ub=class extends zg{constructor(){super(`SkillInputPlugin`)}readMcpConfig(e,t,n){let r=f.join(e,`mcp.json`);if(t.existsSync(r)){if(!t.statSync(r).isFile()){n.warn(`mcp.json is not a file`,{skillDir:e});return}try{let i=t.readFileSync(r,`utf8`),a=JSON.parse(i);if(a.mcpServers==null||typeof a.mcpServers!=`object`){n.warn(`mcp.json missing mcpServers field`,{skillDir:e});return}return{type:L.SkillMcpConfig,mcpServers:a.mcpServers,rawContent:i}}catch(t){n.warn(`failed to parse mcp.json`,{skillDir:e,error:t});return}}}scanSkillDirectory(e,t,n,r=``){let i=[],a=[],o=r?f.join(e,r):e;try{let s=t.readdirSync(o,{withFileTypes:!0});for(let c of s){let s=r?`${r}/${c.name}`:c.name;if(c.isDirectory()){let r=this.scanSkillDirectory(e,t,n,s);i.push(...r.childDocs),a.push(...r.resources)}else if(c.isFile()){let l=f.join(o,c.name);if(c.name.endsWith(`.mdx`)){if(r===``&&c.name===`skill.mdx`)continue;try{let n=Ng(t.readFileSync(l,`utf8`)),r=Pg(n.contentWithoutFrontMatter);i.push({type:L.SkillChildDoc,content:r,length:r.length,filePathKind:R.Relative,markdownAst:n.markdownAst,markdownContents:n.markdownContents,...n.rawFrontMatter!=null&&{rawFrontMatter:n.rawFrontMatter},relativePath:s,dir:{pathKind:R.Relative,path:s,basePath:e,getDirectoryName:()=>f.dirname(s),getAbsolutePath:()=>l}})}catch(e){n.warn(`failed to read child doc`,{path:s,error:e})}}else{if(r===``&&c.name===`mcp.json`)continue;let e=f.extname(c.name),i,o,u;try{if(sb(e)){let e=t.readFileSync(l);i=e.toString(`base64`),o=`base64`,{length:u}=e}else i=t.readFileSync(l,`utf8`),o=`text`,{length:u}=h.Buffer.from(i,`utf8`);let n=lb(e),r={type:L.SkillResource,extension:e,fileName:c.name,relativePath:s,content:i,encoding:o,category:cb(e),length:u};n==null?a.push(r):a.push({...r,mimeType:n})}catch(e){n.warn(`failed to read resource file`,{path:s,error:e})}}}}}catch(e){n.warn(`failed to scan directory`,{path:o,error:e})}return{childDocs:i,resources:a}}async collect(e){let{userConfigOptions:t,logger:n,globalScope:r}=e,{shadowProjectDir:i}=this.resolveBasePaths(t),a=this.resolveShadowPath(t.shadowSourceProject.skill.dist,i),o=[];if(!(e.fs.existsSync(a)&&e.fs.statSync(a).isDirectory()))return{skills:o};let s=e.fs.readdirSync(a,{withFileTypes:!0});for(let t of s)if(t.isDirectory()){let i=e.path.join(a,t.name,`skill.mdx`);if(e.fs.existsSync(i)&&e.fs.statSync(i).isFile())try{let s=e.fs.readFileSync(i,`utf8`),c=Ng(s),l=await _v(s,{globalScope:r,extractMetadata:!0,basePath:e.path.join(a,t.name)}),u={...c.yamlFrontMatter,...l.metadata.fields},d=At(u,i);for(let e of d.warnings)n.debug(e);if(!d.valid)throw new r_(d.errors,i);let p=Pg(l.content),m=e.path.join(a,t.name),h=this.readMcpConfig(m,e.fs,n),{childDocs:g,resources:_}=this.scanSkillDirectory(m,e.fs,n);n.debug(`skill metadata extracted`,{skill:t.name,source:l.metadata.source,hasYaml:c.yamlFrontMatter!=null,hasExport:Object.keys(l.metadata.fields).length>0}),o.push({type:L.Skill,content:p,length:p.length,filePathKind:R.Relative,yamlFrontMatter:u.name==null?{name:t.name,description:``}:u,...c.rawFrontMatter!=null&&{rawFrontMatter:c.rawFrontMatter},markdownAst:c.markdownAst,markdownContents:c.markdownContents,...h!=null&&{mcpConfig:h},...g.length>0&&{childDocs:g},..._.length>0&&{resources:_},dir:{pathKind:R.Relative,path:t.name,basePath:a,getDirectoryName:()=>t.name,getAbsolutePath:()=>f.join(a,t.name)}})}catch(e){n.error(`failed to parse skill`,{file:i,error:e})}}return{skills:o}}},db=class extends Iv{constructor(){super(`SubAgentInputPlugin`,{configKey:`shadowSourceProject.subAgent.dist`})}getTargetDir(e,t){return this.resolveShadowPath(e.shadowSourceProject.subAgent.dist,t.shadowProjectDir)}validateMetadata(e,t){return Mt(e,t)}createResult(e){return{subAgents:e}}extractSeriesInfo(e,t){let n=e.replace(/\.mdx$/,``);if(t!=null)return{series:t,agentName:n};let r=n.indexOf(`_`);return r===-1?{agentName:n}:{series:n.slice(0,Math.max(0,r)),agentName:n.slice(Math.max(0,r+1))}}async collect(e){let{userConfigOptions:t,logger:n,path:r,fs:i}=e,a=this.resolveBasePaths(t),o=this.getTargetDir(t,a),s=[];if(!(i.existsSync(o)&&i.statSync(o).isDirectory()))return this.createResult(s);try{let t=i.readdirSync(o,{withFileTypes:!0});for(let a of t)if(a.isFile()&&a.name.endsWith(this.extension)){let t=await this.processFile(a.name,r.join(o,a.name),o,void 0,e);t!=null&&s.push(t)}else if(a.isDirectory()){let t=r.join(o,a.name);try{let n=i.readdirSync(t,{withFileTypes:!0});for(let i of n)if(i.isFile()&&i.name.endsWith(this.extension)){let n=await this.processFile(i.name,r.join(t,i.name),o,a.name,e);n!=null&&s.push(n)}}catch(e){n.error(`Failed to scan subdirectory at ${t}`,{error:e})}}}catch(e){n.error(`Failed to scan directory at ${o}`,{error:e})}return this.createResult(s)}async processFile(e,t,n,r,i){let{logger:a,globalScope:o}=i,s=i.fs.readFileSync(t,`utf8`);try{let c=Ng(s),l=await _v(s,{globalScope:o,extractMetadata:!0,basePath:r==null?n:i.path.join(n,r)}),u=c.yamlFrontMatter!=null||Object.keys(l.metadata.fields).length>0?{...c.yamlFrontMatter,...l.metadata.fields}:void 0;if(u!=null){let e=this.validateMetadata(u,t);for(let t of e.warnings)a.debug(t);if(!e.valid)throw new r_([...e.errors],t)}let{content:d}=l,f=r==null?e:`${r}/${e}`;return a.debug(`${this.name} metadata extracted`,{file:f,source:l.metadata.source,hasYaml:c.yamlFrontMatter!=null,hasExport:Object.keys(l.metadata.fields).length>0}),this.createPrompt(f,t,d,u,c.rawFrontMatter,c,n,s)}catch(e){a.error(`failed to parse ${this.name} item`,{file:t,error:e});return}}createPrompt(e,t,n,r,i,a,o,s){let c=e.indexOf(`/`),l=c===-1?void 0:e.slice(0,c),u=c===-1?e:e.slice(c+1),d=this.extractSeriesInfo(u,l);return{type:L.SubAgent,content:n,length:n.length,filePathKind:R.Relative,...r!=null&&{yamlFrontMatter:r},...i!=null&&{rawFrontMatter:i},markdownAst:a.markdownAst,markdownContents:a.markdownContents,dir:{pathKind:R.Relative,path:e,basePath:o,getDirectoryName:()=>e.replace(/\.mdx$/,``),getAbsolutePath:()=>t},...d.series!=null&&{series:d.series},agentName:d.agentName,rawMdxContent:s}}};const fb=`GLOBAL.md`,pb=`.trae`,mb=`steering`,hb=`rules`;var gb=class extends Ig{constructor(){super(`TraeIDEOutputPlugin`,{globalConfigDir:pb,outputFileName:fb,indexignore:`.traeignore`})}getGlobalSteeringDir(){return this.joinPath(this.getGlobalConfigDir(),mb)}async registerProjectOutputDirs(e){let{projects:t}=e.collectedInputContext.workspace;return t.filter(e=>e.dirFromWorkspacePath!=null).map(e=>this.createRelativePath(this.joinPath(e.dirFromWorkspacePath.path,pb,hb),e.dirFromWorkspacePath.basePath,()=>hb))}async registerProjectOutputFiles(e){let{projects:t}=e.collectedInputContext.workspace,n=[];for(let e of t)if(!(e.dirFromWorkspacePath==null||e.childMemoryPrompts==null))for(let t of e.childMemoryPrompts)n.push(this.createRelativePath(this.joinPath(e.dirFromWorkspacePath.path,pb,hb,this.buildSteeringFileName(t)),e.dirFromWorkspacePath.basePath,()=>hb));return n.push(...this.registerProjectIgnoreOutputFiles(t)),n}async registerGlobalOutputDirs(){return[this.createRelativePath(mb,this.getGlobalConfigDir(),()=>mb)]}async registerGlobalOutputFiles(e){let{globalMemory:t,fastCommands:n}=e.collectedInputContext,r=this.getGlobalSteeringDir(),i=[];if(t!=null&&i.push(this.createRelativePath(fb,r,()=>mb)),n!=null)for(let e of n)i.push(this.createRelativePath(this.buildFastCommandSteeringFileName(e),r,()=>mb));return i}async canWrite(e){let{workspace:t,globalMemory:n,fastCommands:r,aiAgentIgnoreConfigFiles:i}=e.collectedInputContext,a=t.projects.some(e=>(e.childMemoryPrompts?.length??0)>0),o=i?.some(e=>e.fileName===`.traeignore`)??!1;return a||n!=null||(r?.length??0)>0||o?!0:(this.log.trace({action:`skip`,reason:`noOutputs`}),!1)}async writeProjectOutputs(e){let{projects:t}=e.collectedInputContext.workspace,n=[];for(let r of t)if(!(r.dirFromWorkspacePath==null||r.childMemoryPrompts==null))for(let t of r.childMemoryPrompts)n.push(await this.writeSteeringFile(e,r,t));let r=await this.writeProjectIgnoreFiles(e);return n.push(...r),{files:n,dirs:[]}}async writeGlobalOutputs(e){let{globalMemory:t,fastCommands:n}=e.collectedInputContext,r=[],i=this.getGlobalSteeringDir();if(t!=null&&r.push(await this.writeFile(e,this.joinPath(i,fb),t.content,`globalMemory`)),n!=null)for(let t of n)r.push(await this.writeFastCommandSteeringFile(e,t));return{files:r,dirs:[]}}buildFastCommandSteeringFileName(e){return this.transformFastCommandName(e,{includeSeriesPrefix:!0,seriesSeparator:`-`})}async writeFastCommandSteeringFile(e,t){let n=this.buildFastCommandSteeringFileName(t),r=this.joinPath(this.getGlobalSteeringDir(),n),i=t.yamlFrontMatter?.description,a=this.buildMarkdownContent(t.content,{inclusion:`manual`,description:i!=null&&i.length>0?i:null});return this.writeFile(e,r,a,`fastCommandSteering`)}buildSteeringFileName(e){return`trae-${(e.workingChildDirectoryPath?.path??e.dir.path).replaceAll(`\\`,`/`).replaceAll(/^\/+|\/+$/g,``).replaceAll(`/`,`-`)}.md`}async writeSteeringFile(e,t,n){let r=t.dirFromWorkspacePath,i=this.buildSteeringFileName(n),a=this.joinPath(r.basePath,r.path,pb,hb),o=this.joinPath(a,i),s=[`---`,`alwaysApply: false`,`globs: ${`${(n.workingChildDirectoryPath?.path??n.dir.path).replaceAll(`\\`,`/`)}/**`}`,`---`,``,n.content].join(`
1237
+ `}collect(e){return{}}};const hy=`.config/opencode`,gy=`opencode.json`,_y=`opencode-rules@latest`,vy=`.opencode`,yy=`rules`;var by=class extends vv{constructor(){super(`OpencodeCLIOutputPlugin`,{globalConfigDir:hy,outputFileName:`AGENTS.md`,commandsSubDir:`commands`,agentsSubDir:`agents`,skillsSubDir:`skills`,supportsFastCommands:!0,supportsSubAgents:!0,supportsSkills:!0,dependsOn:[`AgentsOutputPlugin`]}),this.registerCleanEffect(`mcp-config-cleanup`,async e=>{let t=this.getGlobalConfigDir(),n=f.join(t,gy);if(e.dryRun===!0)return this.log.trace({action:`dryRun`,type:`mcpConfigCleanup`,path:n}),{success:!0,description:`Would reset opencode.json mcp to empty`};try{if(d.existsSync(n)){let e=d.readFileSync(n,`utf8`),t=JSON.parse(e);t.mcp={};let r=t.plugin;if(Array.isArray(r)){let e=r.filter(e=>e!==_y);e.length>0?t.plugin=e:delete t.plugin}d.writeFileSync(n,JSON.stringify(t,null,2))}return this.log.trace({action:`clean`,type:`mcpConfigCleanup`,path:n}),{success:!0,description:`Reset opencode.json mcp to empty`}}catch(e){let t=e instanceof Error?e.message:String(e);return this.log.error({action:`clean`,type:`mcpConfigCleanup`,path:n,error:t}),{success:!1,error:e,description:`Failed to reset opencode.json mcp`}}})}async registerGlobalOutputFiles(e){let t=await super.registerGlobalOutputFiles(e),n=this.getGlobalConfigDir();if(e.collectedInputContext.skills?.some(e=>e.mcpConfig!=null)??!1){let e=f.join(n,gy);t.push({pathKind:R.Relative,path:gy,basePath:n,getDirectoryName:()=>hy,getAbsolutePath:()=>e})}let r=e.collectedInputContext.rules?.filter(e=>this.normalizeRuleScope(e)===`global`);if(r!=null&&r.length>0){let e=f.join(n,yy);for(let n of r)t.push(this.createRelativePath(this.buildRuleFileName(n),e,()=>yy))}return t.map(e=>{let t=e.path.replaceAll(`\\`,`/`),r=`/${this.skillsSubDir}/`,i=`${this.skillsSubDir}/`;if(!(t.includes(r)||t.startsWith(i)))return e;let a=t.split(`/`),o=a.indexOf(this.skillsSubDir);if(o<0||o+1>=a.length)return e;let s=a[o+1];if(s==null)return e;let c=this.validateAndNormalizeSkillName(s),l=[...a];l[o+1]=c;let u=l.join(`/`);return{...e,path:u,getDirectoryName:()=>c,getAbsolutePath:()=>f.join(n,u.replaceAll(`/`,f.sep))}})}async writeGlobalOutputs(e){let t=await super.writeGlobalOutputs(e),n=[...t.files],{skills:r}=e.collectedInputContext;if(r!=null){let t=await this.writeGlobalMcpConfig(e,r);t!=null&&n.push(t)}let i=e.collectedInputContext.rules?.filter(e=>this.normalizeRuleScope(e)===`global`);if(i==null||i.length===0)return{files:n,dirs:t.dirs};let a=f.join(this.getGlobalConfigDir(),yy);for(let t of i)n.push(await this.writeFile(e,f.join(a,this.buildRuleFileName(t)),this.buildRuleContent(t),`rule`));return{files:n,dirs:t.dirs}}async writeGlobalMcpConfig(e,t){let n={};for(let e of t){if(e.mcpConfig==null)continue;let{mcpServers:t}=e.mcpConfig;for(let[e,r]of Object.entries(t))n[e]=this.transformMcpConfigForOpencode(r)}if(Object.keys(n).length===0)return null;let r=this.getGlobalConfigDir(),i=f.join(r,gy),a={pathKind:R.Relative,path:gy,basePath:r,getDirectoryName:()=>hy,getAbsolutePath:()=>i},o={};try{if(d.existsSync(i)){let e=d.readFileSync(i,`utf8`);o=JSON.parse(e)}}catch{o={}}o.$schema=`https://opencode.ai/config.json`,o.mcp=n;let s=o.plugin,c=Array.isArray(s)?s.map(e=>String(e)):[];c.includes(_y)||c.push(_y),o.plugin=c;let l=JSON.stringify(o,null,2);if(e.dryRun===!0)return this.log.trace({action:`dryRun`,type:`globalMcpConfig`,path:i,serverCount:Object.keys(n).length}),{path:a,success:!0,skipped:!1};try{return this.ensureDirectory(r),d.writeFileSync(i,l),this.log.trace({action:`write`,type:`globalMcpConfig`,path:i,serverCount:Object.keys(n).length}),{path:a,success:!0}}catch(e){let t=e instanceof Error?e.message:String(e);return this.log.error({action:`write`,type:`globalMcpConfig`,path:i,error:t}),{path:a,success:!1,error:e}}}transformMcpConfigForOpencode(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}async writeSubAgent(e,t,n){let r=n.dir.path.replace(/\.mdx$/,`.md`),i=f.join(t,this.agentsSubDir),a=f.join(i,r),o=this.buildOpencodeAgentFrontMatter(n),s=this.buildMarkdownContent(n.content,o);return[await this.writeFile(e,a,s,`subAgent`)]}buildOpencodeAgentFrontMatter(e){let t={},n=e.yamlFrontMatter;if(n?.description!=null&&(t.description=n.description),t.mode=n?.mode??`subagent`,n?.model!=null&&(t.model=n.model),n?.temperature!=null&&(t.temperature=n.temperature),n?.maxSteps!=null&&(t.maxSteps=n.maxSteps),n?.hidden!=null&&(t.hidden=n.hidden),n?.allowTools!=null&&Array.isArray(n.allowTools)){let e={};for(let t of n.allowTools)e[String(t)]=!0;t.tools=e}n?.permission!=null&&typeof n.permission==`object`&&(t.permission=n.permission);for(let[e,r]of Object.entries(n??{}))[`description`,`mode`,`model`,`temperature`,`maxSteps`,`hidden`,`allowTools`,`permission`,`namingCase`,`name`,`color`].includes(e)||(t[e]=r);return t}async writeFastCommand(e,t,n){let r=this.getTransformOptionsFromContext(e),i=this.transformFastCommandName(n,r),a=f.join(t,this.commandsSubDir),o=f.join(a,i),s=this.buildOpencodeCommandFrontMatter(n),c=this.buildMarkdownContent(n.content,s);return[await this.writeFile(e,o,c,`fastCommand`)]}buildOpencodeCommandFrontMatter(e){let t={},n=e.yamlFrontMatter;if(n?.description!=null&&(t.description=n.description),n?.agent!=null&&(t.agent=n.agent),n?.model!=null&&(t.model=n.model),n?.allowTools!=null&&Array.isArray(n.allowTools)){let e={};for(let t of n.allowTools)e[String(t)]=!0;t.tools=e}for(let[e,r]of Object.entries(n??{}))[`description`,`agent`,`model`,`allowTools`,`namingCase`,`argumentHint`].includes(e)||(t[e]=r);return t}async writeSkill(e,t,n){let r=[],i=this.validateAndNormalizeSkillName(n.yamlFrontMatter?.name??n.dir.getDirectoryName()),a=f.join(t,this.skillsSubDir,i),o=f.join(a,`SKILL.md`),s=this.buildOpencodeSkillFrontMatter(n,i),c=this.buildMarkdownContent(n.content,s),l=await this.writeFile(e,o,c,`skill`);if(r.push(l),n.childDocs!=null)for(let o of n.childDocs){let n=await this.writeSkillReferenceDocument(e,a,i,o,t);r.push(...n)}if(n.resources!=null)for(let o of n.resources){let n=await this.writeSkillResource(e,a,i,o,t);r.push(...n)}return r}buildOpencodeSkillFrontMatter(e,t){let n={},r=e.yamlFrontMatter;n.name=t,r?.description!=null&&(n.description=r.description),n.license=r?.license??`MIT`,n.compatibility=r?.compatibility??`opencode`;let i={};for(let e of[`author`,`version`,`keywords`,`category`,`repository`,`displayName`])r?.[e]!=null&&(i[e]=r[e]);let a=new Set([`name`,`description`,`license`,`compatibility`,`namingCase`,`allowTools`,`keywords`,`displayName`,`author`,`version`]);for(let[e,t]of Object.entries(r??{}))a.has(e)||(i[e]=t);return Object.keys(i).length>0&&(n.metadata=i),n}validateAndNormalizeSkillName(e){let t=e.toLowerCase();return t=t.replaceAll(/[^a-z0-9-]+/g,`-`),t=t.replaceAll(/-+/g,`-`),t=t.replaceAll(/^-|-$/g,``),t.length===0?t=`skill`:t.length>64&&(t=t.slice(0,64),t=t.replace(/-$/,``)),t}buildRuleFileName(e){return`rule-${e.series}-${e.ruleName}.md`}buildRuleContent(e){return e.globs.length===0?e.content:this.buildMarkdownContent(e.content,{globs:[...e.globs]})}async registerGlobalOutputDirs(e){let t=await super.registerGlobalOutputDirs(e),n=e.collectedInputContext.rules?.filter(e=>this.normalizeRuleScope(e)===`global`);return n!=null&&n.length>0&&t.push(this.createRelativePath(yy,this.getGlobalConfigDir(),()=>yy)),t}async registerProjectOutputDirs(e){let t=await super.registerProjectOutputDirs(e),{rules:n}=e.collectedInputContext;if(n==null||n.length===0)return t;for(let r of e.collectedInputContext.workspace.projects){if(r.dirFromWorkspacePath==null||Qg($g(n.filter(e=>this.normalizeRuleScope(e)===`project`),r.projectConfig),r.projectConfig).length===0)continue;let e=f.join(r.dirFromWorkspacePath.path,vy,yy);t.push(this.createRelativePath(e,r.dirFromWorkspacePath.basePath,()=>yy))}return t}async registerProjectOutputFiles(e){let t=await super.registerProjectOutputFiles(e),{rules:n}=e.collectedInputContext;if(n==null||n.length===0)return t;for(let r of e.collectedInputContext.workspace.projects){if(r.dirFromWorkspacePath==null)continue;let e=Qg($g(n.filter(e=>this.normalizeRuleScope(e)===`project`),r.projectConfig),r.projectConfig);for(let n of e){let e=f.join(r.dirFromWorkspacePath.path,vy,yy,this.buildRuleFileName(n));t.push(this.createRelativePath(e,r.dirFromWorkspacePath.basePath,()=>yy))}}return t}async canWrite(e){return(e.collectedInputContext.rules?.length??0)>0?!0:super.canWrite(e)}async writeProjectOutputs(e){let t=await super.writeProjectOutputs(e),{rules:n}=e.collectedInputContext;if(n==null||n.length===0)return t;let r=[];for(let t of e.collectedInputContext.workspace.projects){if(t.dirFromWorkspacePath==null)continue;let i=Qg($g(n.filter(e=>this.normalizeRuleScope(e)===`project`),t.projectConfig),t.projectConfig);if(i.length===0)continue;let a=f.join(t.dirFromWorkspacePath.basePath,t.dirFromWorkspacePath.path,vy,yy);for(let t of i)r.push(await this.writeFile(e,f.join(a,this.buildRuleFileName(t)),this.buildRuleContent(t),`rule`))}return{files:[...t.files,...r],dirs:t.dirs}}},xy=class extends zg{constructor(){super(`OrphanFileCleanupEffectInputPlugin`),this.registerEffect(`orphan-file-cleanup`,this.cleanupOrphanFiles.bind(this),20)}async cleanupOrphanFiles(e){let{fs:t,path:n,shadowProjectDir:r,dryRun:i,logger:a}=e,o=n.join(r,`dist`),s=[],c=[],l=[];if(!t.existsSync(o))return a.debug({action:`orphan-cleanup`,message:`dist/ directory does not exist, skipping`,distDir:o}),{success:!0,description:`dist/ directory does not exist, nothing to clean`,deletedFiles:s,deletedDirs:c};for(let r of[`skills`,`commands`,`agents`,`app`]){let a=n.join(o,r);t.existsSync(a)&&this.cleanupDirectory(e,a,r,s,c,l,i??!1)}let u=l.length>0;return u&&a.warn({action:`orphan-cleanup`,errors:l.map(e=>({path:e.path,error:e.error.message}))}),{success:!u,description:i?`Would delete ${s.length} files and ${c.length} directories`:`Deleted ${s.length} files and ${c.length} directories`,deletedFiles:s,deletedDirs:c,...u&&{error:Error(`${l.length} errors occurred during cleanup`)}}}cleanupDirectory(e,t,n,r,i,a,o){let{fs:s,path:c,shadowProjectDir:l,logger:u}=e,d;try{d=s.readdirSync(t,{withFileTypes:!0})}catch(e){a.push({path:t,error:e}),u.warn({action:`orphan-cleanup`,message:`Failed to read directory`,path:t,error:e.message});return}for(let f of d){let d=c.join(t,f.name);if(f.isDirectory())this.cleanupDirectory(e,d,n,r,i,a,o),this.removeEmptyDirectory(e,d,i,a,o);else if(f.isFile()&&this.isOrphanFile(e,d,n,l))if(o)u.debug({action:`orphan-cleanup`,dryRun:!0,wouldDelete:d}),r.push(d);else try{s.unlinkSync(d),r.push(d),u.debug({action:`orphan-cleanup`,deleted:d})}catch(e){a.push({path:d,error:e}),u.warn({action:`orphan-cleanup`,message:`Failed to delete file`,path:d,error:e.message})}}}isOrphanFile(e,t,n,r){let{fs:i,path:a}=e,o=a.basename(t),s=o.endsWith(`.mdx`),c=a.join(r,`dist`,n),l=a.relative(c,t),u=a.dirname(l),d=o.replace(/\.mdx$/,``);if(s)return!this.getPossibleSourcePaths(a,r,n,d,u).some(e=>i.existsSync(e));let f=[];return n===`app`?f.push(a.join(r,`app`,l)):f.push(a.join(r,`src`,n,l)),!f.some(e=>i.existsSync(e))}getPossibleSourcePaths(e,t,n,r,i){switch(n){case`skills`:return i===`.`?[e.join(t,`src`,`skills`,r,`SKILL.cn.mdx`),e.join(t,`src`,`skills`,`${r}.cn.mdx`)]:[e.join(t,`src`,`skills`,i,`${r}.cn.mdx`)];case`commands`:return i===`.`?[e.join(t,`src`,`commands`,`${r}.cn.mdx`)]:[e.join(t,`src`,`commands`,i,`${r}.cn.mdx`)];case`agents`:return i===`.`?[e.join(t,`src`,`agents`,`${r}.cn.mdx`)]:[e.join(t,`src`,`agents`,i,`${r}.cn.mdx`)];case`app`:return i===`.`?[e.join(t,`app`,`${r}.cn.mdx`)]:[e.join(t,`app`,i,`${r}.cn.mdx`)];default:return[]}}removeEmptyDirectory(e,t,n,r,i){let{fs:a,logger:o}=e;try{a.readdirSync(t).length===0&&(i?(o.debug({action:`orphan-cleanup`,dryRun:!0,wouldDeleteDir:t}),n.push(t)):(a.rmdirSync(t),n.push(t),o.debug({action:`orphan-cleanup`,deletedDir:t})))}catch(e){r.push({path:t,error:e}),o.warn({action:`orphan-cleanup`,message:`Failed to check/remove directory`,path:t,error:e.message})}}collect(e){return{}}},Sy=class{registryPath;log;constructor(e,t){this.registryPath=this.resolvePath(e),this.log=t??rn(this.constructor.name)}resolvePath(e){return e.startsWith(`~`)?f.join(p.homedir(),e.slice(1)):f.resolve(e)}getRegistryDir(){return f.dirname(this.registryPath)}ensureRegistryDir(){let e=this.getRegistryDir();d.existsSync(e)||d.mkdirSync(e,{recursive:!0})}read(){if(!d.existsSync(this.registryPath))return this.log.debug(`registry not found`,{path:this.registryPath}),this.createInitialRegistry();try{let e=d.readFileSync(this.registryPath,`utf8`);return JSON.parse(e)}catch(e){let t=e instanceof Error?e.message:String(e);return this.log.error(`parse failed`,{path:this.registryPath,error:t}),this.createInitialRegistry()}}write(e,t){let n={...e,lastUpdated:new Date().toISOString()};if(t===!0)return this.log.trace({action:`dryRun`,type:`registry`,path:this.registryPath}),!0;let r=`${this.registryPath}.tmp.${Date.now()}`;try{this.ensureRegistryDir();let e=JSON.stringify(n,null,2);return d.writeFileSync(r,e,`utf8`),d.renameSync(r,this.registryPath),this.log.trace({action:`write`,type:`registry`,path:this.registryPath}),!0}catch(e){let t=e instanceof Error?e.message:String(e);this.log.error({action:`write`,type:`registry`,path:this.registryPath,error:t});try{d.existsSync(r)&&d.unlinkSync(r)}catch{}return!1}}register(e,t){let n=[],r=this.read(),i=this.merge(r,e),a=this.write(i,t);for(let r of e){let e=this.getEntryName(r);a?(n.push({success:!0,entryName:e}),t===!0?this.log.trace({action:`dryRun`,type:`registerEntry`,entryName:e}):this.log.trace({action:`register`,type:`entry`,entryName:e})):(n.push({success:!1,entryName:e,error:Error(`Failed to write registry file`)}),this.log.error(`register entry failed`,{entryName:e}))}return n}generateEntryId(e){let t=`${Date.now()}-${Math.random().toString(36).slice(2,8)}`;return e==null?t:`${e}-${t}`}},Cy=class extends zg{constructor(){super(`SkillNonSrcFileSyncEffectInputPlugin`),this.registerEffect(`skill-non-src-file-sync`,this.syncNonSrcFiles.bind(this),10)}async syncNonSrcFiles(e){let{fs:t,path:n,shadowProjectDir:r,dryRun:i,logger:a}=e,o=n.join(r,`src`,`skills`),s=n.join(r,`dist`,`skills`),c=[],l=[],u=[],d=[];if(!t.existsSync(o))return a.debug({action:`skill-sync`,message:`src/skills/ directory does not exist, skipping`,srcSkillsDir:o}),{success:!0,description:`src/skills/ directory does not exist, nothing to sync`,copiedFiles:c,skippedFiles:l,createdDirs:u};this.syncDirectoryRecursive(e,o,s,``,c,l,u,d,i??!1);let f=d.length>0;return f&&a.warn({action:`skill-sync`,errors:d.map(e=>({path:e.path,error:e.error.message}))}),{success:!f,description:i?`Would copy ${c.length} files, skip ${l.length} files`:`Copied ${c.length} files, skipped ${l.length} files`,copiedFiles:c,skippedFiles:l,createdDirs:u,...f&&{error:Error(`${d.length} errors occurred during sync`)},modifiedFiles:c}}syncDirectoryRecursive(e,t,n,r,i,a,o,s,c){let{fs:l,path:u,logger:d}=e,f=r?u.join(t,r):t;if(!l.existsSync(f))return;let p;try{p=l.readdirSync(f,{withFileTypes:!0})}catch(e){s.push({path:f,error:e}),d.warn({action:`skill-sync`,message:`Failed to read directory`,path:f,error:e.message});return}for(let f of p){let p=r?u.join(r,f.name):f.name,m=u.join(t,p),h=u.join(n,p);if(f.isDirectory())this.syncDirectoryRecursive(e,t,n,p,i,a,o,s,c);else if(f.isFile()){if(f.name.endsWith(`.cn.mdx`))continue;let e=u.dirname(h);if(!l.existsSync(e))if(c)d.debug({action:`skill-sync`,dryRun:!0,wouldCreateDir:e}),o.push(e);else try{l.mkdirSync(e,{recursive:!0}),o.push(e),d.debug({action:`skill-sync`,createdDir:e})}catch(t){s.push({path:e,error:t}),d.warn({action:`skill-sync`,message:`Failed to create directory`,path:e,error:t.message});continue}if(l.existsSync(h))try{let e=l.readFileSync(m),t=l.readFileSync(h);if(this.computeHash(e)===this.computeHash(t)){a.push(h),d.debug({action:`skill-sync`,skipped:h,reason:`identical content`});continue}}catch(e){d.debug({action:`skill-sync`,message:`Could not compare files, will copy`,path:h,error:e.message})}if(c)d.debug({action:`skill-sync`,dryRun:!0,wouldCopy:{from:m,to:h}}),i.push(h);else try{l.copyFileSync(m,h),i.push(h),d.debug({action:`skill-sync`,copied:{from:m,to:h}})}catch(e){s.push({path:h,error:e}),d.warn({action:`skill-sync`,message:`Failed to copy file`,from:m,to:h,error:e.message})}}}}computeHash(e){return(0,g.createHash)(`sha256`).update(e).digest(`hex`)}collect(e){return{}}};const wy=`.codeium/windsurf`,Ty=`global_workflows`,Ey=`memories`,Dy=`global_rules.md`,Oy=`skills`,ky=`SKILL.md`,Ay=`.windsurf`,jy=`rules`;var My=class extends Ig{constructor(){super(`WindsurfOutputPlugin`,{globalConfigDir:wy,outputFileName:``,dependsOn:[`AgentsOutputPlugin`],indexignore:`.codeignore`})}async registerGlobalOutputDirs(e){let t=[],{fastCommands:n,skills:r,rules:i}=e.collectedInputContext;if(n!=null&&n.length>0){let e=this.getGlobalWorkflowsDir();t.push({pathKind:R.Relative,path:Ty,basePath:this.getCodeiumWindsurfDir(),getDirectoryName:()=>Ty,getAbsolutePath:()=>e})}if(r!=null&&r.length>0)for(let e of r){let n=e.yamlFrontMatter.name,r=f.join(this.getCodeiumWindsurfDir(),Oy,n);t.push({pathKind:R.Relative,path:f.join(Oy,n),basePath:this.getCodeiumWindsurfDir(),getDirectoryName:()=>n,getAbsolutePath:()=>r})}let a=i?.filter(e=>this.normalizeRuleScope(e)===`global`);if(a==null||a.length===0)return t;let o=this.getCodeiumWindsurfDir(),s=f.join(o,Ey);return t.push({pathKind:R.Relative,path:Ey,basePath:o,getDirectoryName:()=>Ey,getAbsolutePath:()=>s}),t}async registerGlobalOutputFiles(e){let t=[],{skills:n,fastCommands:r}=e.collectedInputContext;if(r!=null&&r.length>0){let n=this.getGlobalWorkflowsDir(),i=this.getTransformOptionsFromContext(e,{includeSeriesPrefix:!0});for(let e of r){let r=this.transformFastCommandName(e,i),a=f.join(n,r);t.push({pathKind:R.Relative,path:f.join(Ty,r),basePath:this.getCodeiumWindsurfDir(),getDirectoryName:()=>Ty,getAbsolutePath:()=>a})}}let i=e.collectedInputContext.rules?.filter(e=>this.normalizeRuleScope(e)===`global`);if(i!=null&&i.length>0){let e=this.getCodeiumWindsurfDir(),n=f.join(e,Ey);for(let r of i){let i=this.buildRuleFileName(r),a=f.join(n,i);t.push({pathKind:R.Relative,path:f.join(Ey,i),basePath:e,getDirectoryName:()=>Ey,getAbsolutePath:()=>a})}}if(n==null||n.length===0)return t;let a=this.getSkillsDir(),o=this.getCodeiumWindsurfDir();for(let e of n){let n=e.yamlFrontMatter.name,r=f.join(a,n);if(t.push({pathKind:R.Relative,path:f.join(Oy,n,ky),basePath:o,getDirectoryName:()=>n,getAbsolutePath:()=>f.join(r,ky)}),e.childDocs!=null)for(let i of e.childDocs){let e=i.relativePath.replace(/\.mdx$/,`.md`);t.push({pathKind:R.Relative,path:f.join(Oy,n,e),basePath:o,getDirectoryName:()=>n,getAbsolutePath:()=>f.join(r,e)})}if(e.resources!=null)for(let i of e.resources)t.push({pathKind:R.Relative,path:f.join(Oy,n,i.relativePath),basePath:o,getDirectoryName:()=>n,getAbsolutePath:()=>f.join(r,i.relativePath)})}return t}async canWrite(e){let{skills:t,fastCommands:n,globalMemory:r,rules:i,aiAgentIgnoreConfigFiles:a}=e.collectedInputContext,o=(t?.length??0)>0,s=(n?.length??0)>0,c=(i?.length??0)>0,l=r!=null,u=a?.some(e=>e.fileName===`.codeignore`)??!1;return o||s||l||c||u?!0:(this.log.trace({action:`skip`,reason:`noOutputs`}),!1)}async writeGlobalOutputs(e){let{skills:t,fastCommands:n,globalMemory:r,rules:i}=e.collectedInputContext,a=[],o=[];if(r!=null){let t=await this.writeGlobalMemory(e,r.content);a.push(t)}if(t!=null&&t.length>0){let n=this.getSkillsDir();for(let r of t){let t=await this.writeGlobalSkill(e,n,r);a.push(...t)}}if(n!=null&&n.length>0){let t=this.getGlobalWorkflowsDir();for(let r of n){let n=await this.writeGlobalWorkflow(e,t,r);a.push(n)}}let s=i?.filter(e=>this.normalizeRuleScope(e)===`global`);if(s==null||s.length===0)return{files:a,dirs:o};let c=this.getGlobalMemoriesDir();for(let t of s){let n=await this.writeRuleFile(e,c,t,this.getCodeiumWindsurfDir(),Ey);a.push(n)}return{files:a,dirs:o}}async registerProjectOutputDirs(e){let t=[],{workspace:n,rules:r}=e.collectedInputContext;if(r==null||r.length===0)return t;for(let e of n.projects){let n=e.dirFromWorkspacePath;if(n==null||Qg($g(r.filter(e=>this.normalizeRuleScope(e)===`project`),e.projectConfig),e.projectConfig).length===0)continue;let i=f.join(n.path,Ay,jy);t.push({pathKind:R.Relative,path:i,basePath:n.basePath,getDirectoryName:()=>jy,getAbsolutePath:()=>f.join(n.basePath,i)})}return t}async registerProjectOutputFiles(e){let t=[],{workspace:n,rules:r}=e.collectedInputContext;if(r!=null&&r.length>0)for(let e of n.projects){let n=e.dirFromWorkspacePath;if(n==null)continue;let i=Qg($g(r.filter(e=>this.normalizeRuleScope(e)===`project`),e.projectConfig),e.projectConfig);for(let e of i){let r=this.buildRuleFileName(e),i=f.join(n.path,Ay,jy,r);t.push({pathKind:R.Relative,path:i,basePath:n.basePath,getDirectoryName:()=>jy,getAbsolutePath:()=>f.join(n.basePath,i)})}}return t.push(...this.registerProjectIgnoreOutputFiles(n.projects)),t}async writeProjectOutputs(e){let t=[],{workspace:n,rules:r}=e.collectedInputContext;if(r!=null&&r.length>0)for(let i of n.projects){let n=i.dirFromWorkspacePath;if(n==null)continue;let a=Qg($g(r.filter(e=>this.normalizeRuleScope(e)===`project`),i.projectConfig),i.projectConfig);if(a.length===0)continue;let o=f.join(n.basePath,n.path,Ay,jy);for(let r of a){let i=await this.writeRuleFile(e,o,r,n.basePath,f.join(n.path,Ay,jy));t.push(i)}}let i=await this.writeProjectIgnoreFiles(e);return t.push(...i),{files:t,dirs:[]}}getSkillsDir(){return f.join(this.getCodeiumWindsurfDir(),Oy)}getCodeiumWindsurfDir(){return f.join(this.getHomeDir(),wy)}getGlobalMemoriesDir(){return f.join(this.getCodeiumWindsurfDir(),Ey)}getGlobalWorkflowsDir(){return f.join(this.getCodeiumWindsurfDir(),Ty)}async writeGlobalMemory(e,t){let n=this.getGlobalMemoriesDir(),r=f.join(n,Dy),i=this.getCodeiumWindsurfDir(),a={pathKind:R.Relative,path:f.join(Ey,Dy),basePath:i,getDirectoryName:()=>Ey,getAbsolutePath:()=>r};if(e.dryRun===!0)return this.log.trace({action:`dryRun`,type:`globalMemory`,path:r}),{path:a,success:!0,skipped:!1};try{return this.ensureDirectory(n),this.writeFileSync(r,t),this.log.trace({action:`write`,type:`globalMemory`,path:r}),{path:a,success:!0}}catch(e){let t=e instanceof Error?e.message:String(e);return this.log.error({action:`write`,type:`globalMemory`,path:r,error:t}),{path:a,success:!1,error:e}}}async writeGlobalWorkflow(e,t,n){let r=this.getTransformOptionsFromContext(e,{includeSeriesPrefix:!0}),i=this.transformFastCommandName(n,r),a=f.join(t,i),o={pathKind:R.Relative,path:f.join(Ty,i),basePath:this.getCodeiumWindsurfDir(),getDirectoryName:()=>Ty,getAbsolutePath:()=>a},s=this.buildMarkdownContentWithRaw(n.content,n.yamlFrontMatter,n.rawFrontMatter);if(e.dryRun===!0)return this.log.trace({action:`dryRun`,type:`globalWorkflow`,path:a}),{path:o,success:!0,skipped:!1};try{return this.ensureDirectory(t),d.writeFileSync(a,s),this.log.trace({action:`write`,type:`globalWorkflow`,path:a}),{path:o,success:!0}}catch(e){let t=e instanceof Error?e.message:String(e);return this.log.error({action:`write`,type:`globalWorkflow`,path:a,error:t}),{path:o,success:!1,error:e}}}async writeGlobalSkill(e,t,n){let r=[],i=n.yamlFrontMatter.name,a=f.join(t,i),o=f.join(a,ky),s=this.getCodeiumWindsurfDir(),c={pathKind:R.Relative,path:f.join(Oy,i,ky),basePath:s,getDirectoryName:()=>i,getAbsolutePath:()=>o},l=this.buildSkillFrontMatter(n),u=n.content,d=jg(l,u);if(e.dryRun===!0)this.log.trace({action:`dryRun`,type:`skill`,path:o}),r.push({path:c,success:!0,skipped:!1});else try{this.ensureDirectory(a),this.writeFileSync(o,d),this.log.trace({action:`write`,type:`skill`,path:o}),r.push({path:c,success:!0})}catch(e){let t=e instanceof Error?e.message:String(e);this.log.error({action:`write`,type:`skill`,path:o,error:t}),r.push({path:c,success:!1,error:e})}if(n.childDocs!=null)for(let t of n.childDocs){let n=await this.writeSkillChildDoc(e,t,a,i,s);r.push(n)}if(n.resources!=null)for(let t of n.resources){let n=await this.writeSkillResource(e,t,a,i,s);r.push(n)}return r}buildSkillFrontMatter(e){let t=e.yamlFrontMatter;return{name:t.name,description:t.description,...t.displayName!=null&&{displayName:t.displayName},...t.keywords!=null&&t.keywords.length>0&&{keywords:t.keywords},...t.author!=null&&{author:t.author},...t.version!=null&&{version:t.version},...t.allowTools!=null&&t.allowTools.length>0&&{allowTools:t.allowTools}}}async writeSkillChildDoc(e,t,n,r,i){let a=t.relativePath.replace(/\.mdx$/,`.md`),o=f.join(n,a),s={pathKind:R.Relative,path:f.join(Oy,r,a),basePath:i,getDirectoryName:()=>r,getAbsolutePath:()=>o},c=t.content;if(e.dryRun===!0)return this.log.trace({action:`dryRun`,type:`childDoc`,path:o}),{path:s,success:!0,skipped:!1};try{let e=f.dirname(o);return this.ensureDirectory(e),this.writeFileSync(o,c),this.log.trace({action:`write`,type:`childDoc`,path:o}),{path:s,success:!0}}catch(e){let t=e instanceof Error?e.message:String(e);return this.log.error({action:`write`,type:`childDoc`,path:o,error:t}),{path:s,success:!1,error:e}}}async writeSkillResource(e,t,n,r,i){let a=f.join(n,t.relativePath),o={pathKind:R.Relative,path:f.join(Oy,r,t.relativePath),basePath:i,getDirectoryName:()=>r,getAbsolutePath:()=>a};if(e.dryRun===!0)return this.log.trace({action:`dryRun`,type:`resource`,path:a}),{path:o,success:!0,skipped:!1};try{let e=f.dirname(a);if(this.ensureDirectory(e),t.encoding===`base64`){let e=h.Buffer.from(t.content,`base64`);this.writeFileSyncBuffer(a,e)}else this.writeFileSync(a,t.content);return this.log.trace({action:`write`,type:`resource`,path:a}),{path:o,success:!0}}catch(e){let t=e instanceof Error?e.message:String(e);return this.log.error({action:`write`,type:`resource`,path:a,error:t}),{path:o,success:!1,error:e}}}buildRuleFileName(e){return`rule-${e.series}-${e.ruleName}.md`}buildRuleContent(e){return jg({trigger:`glob`,globs:e.globs.length>0?e.globs.join(`, `):``},e.content).split(`
1238
+ `).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(`
1239
+ `)}async writeRuleFile(e,t,n,r,i){let a=this.buildRuleFileName(n),o=f.join(t,a),s={pathKind:R.Relative,path:f.join(i,a),basePath:r,getDirectoryName:()=>jy,getAbsolutePath:()=>o},c=this.buildRuleContent(n);if(e.dryRun===!0)return this.log.trace({action:`dryRun`,type:`ruleFile`,path:o}),{path:s,success:!0,skipped:!1};try{return this.ensureDirectory(t),this.writeFileSync(o,c),this.log.trace({action:`write`,type:`ruleFile`,path:o}),{path:s,success:!0}}catch(e){let t=e instanceof Error?e.message:String(e);return this.log.error({action:`write`,type:`ruleFile`,path:o,error:t}),{path:s,success:!1,error:e}}}},Ny=class e extends Sy{static REGISTRY_PATH=`~/.kiro/powers/registry.json`;static DEFAULT_VERSION=`1.0.0`;constructor(t){super(e.REGISTRY_PATH,t)}createInitialRegistry(){return{version:e.DEFAULT_VERSION,powers:{},repoSources:{},lastUpdated:new Date().toISOString()}}getEntryName(e){return e.name}merge(e,t){let n={...e.powers},r={...e.repoSources};for(let e of t){n[e.name]=e;let t=this.buildRepoSource(e),i=e.source.repoId??e.name;r[i]=t}return{version:e.version,powers:n,repoSources:r,...e.kiroRecommendedRepo!=null&&{kiroRecommendedRepo:e.kiroRecommendedRepo},lastUpdated:e.lastUpdated}}buildPowerEntry(e,t){let{yamlFrontMatter:n,mcpConfig:r}=e,i={type:`repo`,repoId:this.generateEntryId(`local`),repoName:t},a=r==null?null:Object.keys(r.mcpServers);return{name:n.name,description:n.description,...a!=null&&a.length>0&&{mcpServers:a},...n.author!=null&&{author:n.author},keywords:n.keywords??[],...n.displayName!=null&&{displayName:n.displayName},installed:!0,installedAt:new Date().toISOString(),installPath:t,source:i,sourcePath:t}}getOfficialRegistry(){try{return JSON.parse({version:`1.0.0`,powers:{postman:{name:`postman`,description:`Automate API testing and collection management with Postman - create workspaces, collections, environments, and run tests programmatically`,displayName:`API Testing with Postman`,author:`Postman`,iconUrl:`https://prod.download.desktop.kiro.dev/powers/icons/postman.png`,repositoryUrl:`https://github.com/kirodotdev/powers/tree/main/postman`,license:``,repositoryCloneUrl:`git@github.com:kirodotdev/powers.git`,pathInRepo:`postman`,repositoryBranch:`main`,installed:!1,keywords:[],source:{type:`registry`}},figma:{name:`figma`,description:`Connect Figma designs to code components - automatically generate design system rules, map UI components to Figma designs, and maintain design-code consistency`,displayName:`Design to Code with Figma`,author:`Figma`,iconUrl:`https://prod.download.desktop.kiro.dev/powers/icons/figma.png`,repositoryUrl:`https://github.com/kirodotdev/powers/tree/main/figma`,license:``,repositoryCloneUrl:`git@github.com:kirodotdev/powers.git`,pathInRepo:`figma`,repositoryBranch:`main`,installed:!1,keywords:[],source:{type:`registry`}},"netlify-deployment":{name:`netlify-deployment`,description:`Deploy React, Next.js, Vue, and other modern web apps to Netlify's global CDN with automatic builds.`,displayName:`Deploy web apps with Netlify`,author:`Netlify`,iconUrl:`https://prod.download.desktop.kiro.dev/powers/icons/netlify.png`,repositoryUrl:`https://github.com/netlify/context-and-tools/tree/main/context/steering/netlify-deployment-power`,license:``,repositoryCloneUrl:`git@github.com:netlify/context-and-tools.git`,pathInRepo:`context/steering/netlify-deployment-power`,repositoryBranch:`main`,installed:!1,keywords:[],source:{type:`registry`}},"amazon-aurora-postgresql":{name:`amazon-aurora-postgresql`,description:`Build applications backed by Aurora PostgreSQL by leveraging Aurora PostgreSQL specific best practices.`,displayName:`Build applications with Aurora PostgreSQL`,author:`AWS`,iconUrl:`https://prod.download.desktop.kiro.dev/powers/icons/amazon-aurora.png`,repositoryUrl:`https://github.com/awslabs/mcp/tree/main/src/postgres-mcp-server/kiro_power`,license:``,repositoryCloneUrl:`git@github.com:awslabs/mcp.git`,pathInRepo:`src/postgres-mcp-server/kiro_power`,repositoryBranch:`main`,installed:!1,keywords:[],source:{type:`registry`}},"supabase-hosted":{name:`supabase-hosted`,description:`Build applications with Supabase's Postgres database, authentication, storage, and real-time subscriptions`,displayName:`Build a backend with Supabase`,author:`Supabase`,iconUrl:`https://prod.download.desktop.kiro.dev/powers/icons/supabase.png`,repositoryUrl:`https://github.com/supabase-community/kiro-powers/tree/main/powers/supabase-hosted`,license:``,repositoryCloneUrl:`git@github.com:supabase-community/kiro-powers.git`,pathInRepo:`powers/supabase-hosted`,repositoryBranch:`main`,installed:!1,keywords:[],source:{type:`registry`}},"supabase-local":{name:`supabase-local`,description:`Local development with Supabase allows you to work on your projects in a self-contained environment on your local machine.`,displayName:`Build a backend (local) with Supabase`,author:`Supabase`,iconUrl:`https://prod.download.desktop.kiro.dev/powers/icons/supabase.png`,repositoryUrl:`https://github.com/supabase-community/kiro-powers/tree/main/powers/supabase-local`,license:``,repositoryCloneUrl:`git@github.com:supabase-community/kiro-powers.git`,pathInRepo:`powers/supabase-local`,repositoryBranch:`main`,installed:!1,keywords:[],source:{type:`registry`}},terraform:{name:`terraform`,description:`Build and manage Infrastructure as Code with Terraform - access registry providers, modules, policies, and HCP Terraform workflow management`,displayName:`Deploy infrastructure with Terraform`,author:`HashiCorp`,iconUrl:`https://prod.download.desktop.kiro.dev/powers/icons/terraform.png`,repositoryUrl:`https://github.com/kirodotdev/powers/tree/main/terraform`,license:``,repositoryCloneUrl:`git@github.com:kirodotdev/powers.git`,pathInRepo:`terraform`,repositoryBranch:`main`,installed:!1,keywords:[],source:{type:`registry`}},strands:{name:`strands`,description:`Build AI agents with Strands Agent SDK using Bedrock, Anthropic, OpenAI, Gemini, or Llama models`,displayName:`Build an agent with Strands`,author:`AWS`,iconUrl:`https://prod.download.desktop.kiro.dev/powers/icons/strands.png`,repositoryUrl:`https://github.com/kirodotdev/powers/tree/main/strands`,license:``,repositoryCloneUrl:`git@github.com:kirodotdev/powers.git`,pathInRepo:`strands`,repositoryBranch:`main`,installed:!1,keywords:[],source:{type:`registry`}},"aws-agentcore":{name:`aws-agentcore`,description:`Amazon Bedrock AgentCore is an agentic platform for building, deploying, and operating effective agents.`,displayName:`Build an agent with Amazon Bedrock AgentCore`,author:`AWS`,iconUrl:`https://prod.download.desktop.kiro.dev/powers/icons/agentcore.png`,repositoryUrl:`https://github.com/kirodotdev/powers/tree/main/aws-agentcore`,license:``,repositoryCloneUrl:`git@github.com:kirodotdev/powers.git`,pathInRepo:`aws-agentcore`,repositoryBranch:`main`,installed:!1,keywords:[],source:{type:`registry`}},neon:{name:`neon`,description:`Serverless Postgres with database branching, autoscaling, and scale-to-zero - perfect for modern development workflows`,displayName:`Build a database with Neon`,author:`Neon`,iconUrl:`https://prod.download.desktop.kiro.dev/powers/icons/neon.png`,repositoryUrl:`https://github.com/kirodotdev/powers/tree/main/neon`,license:``,repositoryCloneUrl:`git@github.com:kirodotdev/powers.git`,pathInRepo:`neon`,repositoryBranch:`main`,installed:!1,keywords:[],source:{type:`registry`}},datadog:{name:`datadog`,description:`Query logs, metrics, traces, RUM events, incidents, and monitors from Datadog for production debugging and performance analysis`,displayName:`Datadog Observability`,author:`Datadog`,iconUrl:`https://prod.download.desktop.kiro.dev/powers/icons/datadog.png`,repositoryUrl:`https://github.com/kirodotdev/powers/tree/main/datadog`,license:``,repositoryCloneUrl:`git@github.com:kirodotdev/powers.git`,pathInRepo:`datadog`,repositoryBranch:`main`,installed:!1,keywords:[],source:{type:`registry`}},dynatrace:{name:`dynatrace`,description:`Query logs, metrics, traces, problems, and Kubernetes events from Dynatrace using DQL for production debugging and performance analysis`,displayName:`Dynatrace Observability`,author:`Dynatrace`,iconUrl:`https://prod.download.desktop.kiro.dev/powers/icons/dynatrace.png`,repositoryUrl:`https://github.com/kirodotdev/powers/tree/main/dynatrace`,license:``,repositoryCloneUrl:`git@github.com:kirodotdev/powers.git`,pathInRepo:`dynatrace`,repositoryBranch:`main`,installed:!1,keywords:[],source:{type:`registry`}},stripe:{name:`stripe`,description:`Build payment integrations with Stripe - accept payments, manage subscriptions, handle billing, and process refunds`,displayName:`Stripe Payments`,author:`Stripe`,iconUrl:`https://prod.download.desktop.kiro.dev/powers/icons/stripe.png`,repositoryUrl:`https://github.com/kirodotdev/powers/tree/main/stripe`,license:``,repositoryCloneUrl:`git@github.com:kirodotdev/powers.git`,pathInRepo:`stripe`,repositoryBranch:`main`,installed:!1,keywords:[],source:{type:`registry`}},"aws-infrastructure-as-code":{name:`aws-infrastructure-as-code`,description:`Build well-architected AWS infrastructure with CDK using latest documentation, best practices, and code samples. Validate CloudFormation templates, check resource configuration security compliance, and troubleshoot deployments.`,displayName:`Build AWS infrastructure with CDK and CloudFormation`,author:`AWS`,iconUrl:`https://prod.download.desktop.kiro.dev/powers/icons/iac.png`,repositoryUrl:`https://github.com/kirodotdev/powers/tree/main/aws-infrastructure-as-code`,license:``,repositoryCloneUrl:`git@github.com:kirodotdev/powers.git`,pathInRepo:`aws-infrastructure-as-code`,repositoryBranch:`main`,installed:!1,keywords:[],source:{type:`registry`}},"power-builder":{name:`power-builder`,description:`Complete guide for building and testing new Kiro Powers with templates, best practices, and validation`,displayName:`Build a Power`,author:`Kiro Team`,iconUrl:`https://prod.download.desktop.kiro.dev/powers/icons/power.png`,repositoryUrl:`https://github.com/kirodotdev/powers/tree/main/power-builder`,license:``,repositoryCloneUrl:`git@github.com:kirodotdev/powers.git`,pathInRepo:`power-builder`,repositoryBranch:`main`,installed:!1,keywords:[],source:{type:`registry`}},"saas-builder":{name:`saas-builder`,description:`Build production ready multi-tenant SaaS applications with serverless architecture, integrated billing, and enterprise grade security`,displayName:`SaaS Builder`,author:`Allen Helton`,iconUrl:`https://prod.download.desktop.kiro.dev/powers/icons/power.png`,repositoryUrl:`https://github.com/kirodotdev/powers/tree/main/saas-builder`,license:``,repositoryCloneUrl:`git@github.com:kirodotdev/powers.git`,pathInRepo:`saas-builder`,repositoryBranch:`main`,installed:!1,keywords:[],source:{type:`registry`}},"cloud-architect":{name:`cloud-architect`,description:`Build AWS infrastructure with CDK in Python following AWS Well-Architected framework best practices`,displayName:`Build infrastructure on AWS`,author:`Christian Bonzelet`,iconUrl:`https://prod.download.desktop.kiro.dev/powers/icons/power.png`,repositoryUrl:`https://github.com/kirodotdev/powers/tree/main/cloud-architect`,license:``,repositoryCloneUrl:`git@github.com:kirodotdev/powers.git`,pathInRepo:`cloud-architect`,repositoryBranch:`main`,installed:!1,keywords:[],source:{type:`registry`}},"aurora-dsql":{name:`aurora-dsql`,description:`For PostgreSQL compatible serverless distributed SQL database with Aurora DSQL, manage schemas, execute queries, and handle migrations with DSQL-specific constraints`,displayName:`Deploy a distributed SQL database on AWS`,author:`Rolf Koski`,iconUrl:`https://prod.download.desktop.kiro.dev/powers/icons/power.png`,repositoryUrl:`https://github.com/kirodotdev/powers/tree/main/aurora-dsql`,license:``,repositoryCloneUrl:`git@github.com:kirodotdev/powers.git`,pathInRepo:`aurora-dsql`,repositoryBranch:`main`,installed:!1,keywords:[],source:{type:`registry`}}},repoSources:{},lastUpdated:`2025-12-28T20:19:10.824Z`,kiroRecommendedRepo:{url:`https://prod.download.desktop.kiro.dev/powers/default_registry.json`,lastFetch:`2025-12-28T20:19:10.823Z`,powerCount:18}})}catch{this.log.debug(`Failed to parse official registry, using empty registry`)}return this.createInitialRegistry()}unregisterLocalPowers(e){let t={...this.getOfficialRegistry(),lastUpdated:new Date().toISOString()};return this.log.trace({action:e===!0?`dryRun`:`reset`,type:`registry`,powerCount:Object.keys(t.powers).length}),this.write(t,e)}buildRepoSource(e){let t=new Date().toISOString();return{name:e.sourcePath??e.installPath??e.name,type:`local`,enabled:!0,addedAt:t,powerCount:1,...e.sourcePath!=null&&{path:e.sourcePath},lastSync:t}}};const Py=`GLOBAL.md`,Fy=`.kiro`,Iy=`steering`,Ly=`settings`,Ry=`mcp.json`,zy=`POWER.md`,By=`SKILL.md`;var Vy=class extends Ig{constructor(){super(`KiroCLIOutputPlugin`,{globalConfigDir:Fy,outputFileName:Py,indexignore:`.kiroignore`}),this.registerCleanEffect(`registry-cleanup`,async e=>this.getRegistryWriter(Ny).unregisterLocalPowers(e.dryRun)?{success:!0,description:`Reset registry`}:{success:!1,description:`Failed`,error:Error(`Registry cleanup failed`)}),this.registerCleanEffect(`mcp-settings-cleanup`,async e=>{let t=this.joinPath(this.getGlobalSettingsDir(),Ry),n=JSON.stringify({mcpServers:{},powers:{mcpServers:{}}},null,2);if(e.dryRun===!0)return this.log.trace({action:`dryRun`,type:`mcpSettingsCleanup`,path:t}),{success:!0,description:`Would reset mcp.json`};let r=await this.writeFile(e,t,n,`mcpSettingsCleanup`);return r.success?{success:!0,description:`Reset mcp.json`}:{success:!1,description:`Failed`,error:r.error??Error(`Cleanup failed`)}})}getGlobalSettingsDir(){return this.joinPath(this.getHomeDir(),Fy,Ly)}getGlobalSteeringDir(){return this.joinPath(this.getGlobalConfigDir(),Iy)}getKiroPowersDir(){return this.joinPath(this.getHomeDir(),`.kiro/powers/installed`)}getKiroSkillsDir(){return this.joinPath(this.getHomeDir(),`.kiro/skills`)}async registerProjectOutputDirs(e){let{projects:t}=e.collectedInputContext.workspace;return t.filter(e=>e.dirFromWorkspacePath!=null).map(e=>this.createRelativePath(this.joinPath(e.dirFromWorkspacePath.path,Fy,Iy),e.dirFromWorkspacePath.basePath,()=>Iy))}async registerProjectOutputFiles(e){let{projects:t}=e.collectedInputContext.workspace,{rules:n}=e.collectedInputContext,r=[];for(let e of t)if(e.dirFromWorkspacePath!=null){if(e.childMemoryPrompts!=null)for(let t of e.childMemoryPrompts)r.push(this.createRelativePath(this.joinPath(e.dirFromWorkspacePath.path,Fy,Iy,this.buildSteeringFileName(t)),e.dirFromWorkspacePath.basePath,()=>Iy));if(n!=null&&n.length>0){let t=Qg($g(n.filter(e=>e.scope===`project`),e.projectConfig),e.projectConfig);for(let n of t){let t=this.buildRuleSteeringFileName(n);r.push(this.createRelativePath(this.joinPath(e.dirFromWorkspacePath.path,Fy,Iy,t),e.dirFromWorkspacePath.basePath,()=>Iy))}}}return r.push(...this.registerProjectIgnoreOutputFiles(t)),r}async registerGlobalOutputDirs(){let e=[this.createRelativePath(Iy,this.getGlobalConfigDir(),()=>Iy)],t=this.getKiroPowersDir();for(let n of this.listInstalledPowers(t))e.push(this.createRelativePath(n,t,()=>n));let n=this.getKiroSkillsDir();for(let t of this.listInstalledPowers(n))e.push(this.createRelativePath(t,n,()=>t));return e.push(this.createRelativePath(`repos`,this.joinPath(this.getHomeDir(),`.kiro/powers`),()=>`repos`)),e}listInstalledPowers(e){try{return this.existsSync(e)?this.readdirSync(e,{withFileTypes:!0}).filter(e=>e.isDirectory()).map(e=>e.name):[]}catch{return[]}}async registerGlobalOutputFiles(e){let{globalMemory:t,fastCommands:n,skills:r,rules:i}=e.collectedInputContext,a=this.getGlobalSteeringDir(),o=[];if(t!=null&&o.push(this.createRelativePath(Py,a,()=>Iy)),n!=null)for(let e of n)o.push(this.createRelativePath(this.buildFastCommandSteeringFileName(e),a,()=>Iy));let s=i?.filter(e=>e.scope===`global`);if(s!=null&&s.length>0)for(let e of s)o.push(this.createRelativePath(this.buildRuleSteeringFileName(e),a,()=>Iy));if(r==null)return o;let c=this.getKiroPowersDir(),l=this.getKiroSkillsDir();for(let e of r){let t=e.yamlFrontMatter.name;if(e.mcpConfig!=null){let n=this.joinPath(c,t);if(o.push(this.createRelativePath(zy,n,()=>t)),o.push(this.createRelativePath(Ry,n,()=>t)),e.childDocs!=null)for(let t of e.childDocs)o.push(this.createRelativePath(this.joinPath(Iy,t.dir.path.replace(/\.mdx$/,`.md`)),n,()=>Iy));if(e.resources!=null)for(let t of e.resources)o.push(this.createRelativePath(this.joinPath(Iy,t.relativePath),n,()=>Iy))}else{let n=this.joinPath(l,t);if(o.push(this.createRelativePath(By,n,()=>t)),e.childDocs!=null)for(let r of e.childDocs)o.push(this.createRelativePath(r.dir.path.replace(/\.mdx$/,`.md`),n,()=>t));if(e.resources!=null)for(let r of e.resources)o.push(this.createRelativePath(r.relativePath,n,()=>t))}}return r.some(e=>e.mcpConfig!=null)&&o.push(this.createRelativePath(Ry,this.getGlobalSettingsDir(),()=>Ly)),o}async canWrite(e){let{workspace:t,globalMemory:n,fastCommands:r,skills:i,rules:a,aiAgentIgnoreConfigFiles:o}=e.collectedInputContext,s=t.projects.some(e=>(e.childMemoryPrompts?.length??0)>0),c=(a?.length??0)>0,l=o?.some(e=>e.fileName===`.kiroignore`)??!1;return s||n!=null||(r?.length??0)>0||(i?.length??0)>0||c||l?!0:(this.log.trace({action:`skip`,reason:`noOutputs`}),!1)}async writeProjectOutputs(e){let{projects:t}=e.collectedInputContext.workspace,{rules:n}=e.collectedInputContext,r=[];for(let i of t)if(i.dirFromWorkspacePath!=null){if(i.childMemoryPrompts!=null)for(let t of i.childMemoryPrompts)r.push(await this.writeSteeringFile(e,i,t));if(n!=null&&n.length>0){let t=Qg($g(n.filter(e=>e.scope===`project`),i.projectConfig),i.projectConfig);for(let n of t)r.push(await this.writeRuleSteeringFile(e,i,n))}}let i=await this.writeProjectIgnoreFiles(e);return r.push(...i),{files:r,dirs:[]}}async writeGlobalOutputs(e){let{globalMemory:t,fastCommands:n,skills:r,rules:i}=e.collectedInputContext,a=[],o=[],s=this.getGlobalSteeringDir();if(t!=null&&a.push(await this.writeFile(e,this.joinPath(s,Py),t.content,`globalMemory`)),n!=null)for(let t of n)a.push(await this.writeFastCommandSteeringFile(e,t));let c=i?.filter(e=>e.scope===`global`);if(c!=null&&c.length>0)for(let t of c){let n=this.buildRuleSteeringFileName(t),r=this.joinPath(s,n),i=this.buildRuleSteeringContent(t);a.push(await this.writeFile(e,r,i,`ruleSteeringFile`))}if(r==null||r.length===0)return{files:a,dirs:[]};let l=r.filter(e=>e.mcpConfig!=null),u=r.filter(e=>e.mcpConfig==null);for(let t of l){let{fileResults:n,registryResult:r}=await this.writeSkillAsPower(e,t);a.push(...n),o.push(r)}for(let t of u){let n=await this.writeSkillAsKiroSkill(e,t);a.push(...n)}let d=await this.writeGlobalMcpSettings(e,r);return d!=null&&a.push(d),this.logRegistryResults(o,e.dryRun),{files:a,dirs:[]}}async writeGlobalMcpSettings(e,t){let n={};for(let e of t)if(e.mcpConfig!=null)for(let[t,r]of Object.entries(e.mcpConfig.mcpServers))n[`power-${e.yamlFrontMatter.name}-${t}`]=r;if(Object.keys(n).length===0)return null;let r=JSON.stringify({mcpServers:{},powers:{mcpServers:n}},null,2);return this.writeFile(e,this.joinPath(this.getGlobalSettingsDir(),Ry),r,`globalMcpSettings`)}logRegistryResults(e,t){let n=e.filter(e=>e.success).length,r=e.filter(e=>!e.success).length;n>0&&this.log.trace({action:t===!0?`dryRun`:`register`,type:`registrySummary`,successCount:n}),r>0&&this.log.error({action:`register`,type:`registrySummary`,failCount:r})}async writeSkillAsPower(e,t){let n=[],r=t.yamlFrontMatter.name,i=this.joinPath(this.getKiroPowersDir(),r),a=this.joinPath(i,zy),o=`${this.buildPowerFrontMatter(t.yamlFrontMatter)}\n${t.content}`;if(n.push(await this.writeFile(e,a,o,`skillPower`)),t.childDocs!=null){let r=this.joinPath(i,Iy);for(let i of t.childDocs){let t=i.dir.path.replace(/\.mdx$/,`.md`);n.push(await this.writeFile(e,this.joinPath(r,t),i.content,`refDoc`))}}if(t.resources!=null){let r=this.joinPath(i,Iy);for(let i of t.resources)n.push(await this.writeFile(e,this.joinPath(r,i.relativePath),i.content,`resource`))}t.mcpConfig!=null&&n.push(await this.writeFile(e,this.joinPath(i,Ry),t.mcpConfig.rawContent,`mcpConfig`));let s=this.getRegistryWriter(Ny),c=s.buildPowerEntry(t,i);return{fileResults:n,registryResult:(await this.registerInRegistry(s,[c],e))[0]??{success:!1,entryName:r,error:Error(`No registry result`)}}}async writeSkillAsKiroSkill(e,t){let n=[],r=t.yamlFrontMatter.name,i=this.joinPath(this.getKiroSkillsDir(),r),a=this.joinPath(i,By),o=`${this.buildSkillFrontMatter(t.yamlFrontMatter)}\n${t.content}`;if(n.push(await this.writeFile(e,a,o,`kiroSkill`)),t.childDocs!=null)for(let r of t.childDocs){let t=r.dir.path.replace(/\.mdx$/,`.md`);n.push(await this.writeFile(e,this.joinPath(i,t),r.content,`refDoc`))}if(t.resources!=null)for(let r of t.resources)n.push(await this.writeFile(e,this.joinPath(i,r.relativePath),r.content,`resource`));return n}buildSkillFrontMatter(e){return this.buildMarkdownContent(``,{name:e.name,description:e.description,...e.displayName!=null&&{displayName:e.displayName},...e.keywords!=null&&e.keywords.length>0&&{keywords:e.keywords},...e.author!=null&&{author:e.author}}).trimEnd()}buildPowerFrontMatter(e){return this.buildMarkdownContent(``,{name:e.name,displayName:e.displayName,description:e.description,keywords:e.keywords,author:e.author}).trimEnd()}buildFastCommandSteeringFileName(e){return this.transformFastCommandName(e,{includeSeriesPrefix:!0,seriesSeparator:`-`})}async writeFastCommandSteeringFile(e,t){let n=this.buildFastCommandSteeringFileName(t),r=this.joinPath(this.getGlobalSteeringDir(),n),i=t.yamlFrontMatter?.description,a=this.buildMarkdownContent(t.content,{inclusion:`manual`,description:i!=null&&i.length>0?i:null});return this.writeFile(e,r,a,`fastCommandSteering`)}buildSteeringFileName(e){return`kiro-${(e.workingChildDirectoryPath?.path??e.dir.path).replaceAll(`\\`,`/`).replaceAll(/^\/+|\/+$/g,``).replaceAll(`/`,`-`)}.md`}buildRuleSteeringFileName(e){return`rule-${e.series}-${e.ruleName}.md`}buildRuleSteeringContent(e){let t=e.globs.length===1?e.globs[0]:`{${e.globs.join(`,`)}}`;return this.buildMarkdownContent(e.content,{inclusion:`fileMatch`,fileMatchPattern:t})}async writeRuleSteeringFile(e,t,n){let r=t.dirFromWorkspacePath,i=this.buildRuleSteeringFileName(n),a=this.joinPath(r.basePath,r.path,Fy,Iy),o=this.joinPath(a,i),s=this.buildRuleSteeringContent(n);return this.writeFile(e,o,s,`ruleSteeringFile`)}async writeSteeringFile(e,t,n){let r=t.dirFromWorkspacePath,i=this.buildSteeringFileName(n),a=this.joinPath(r.basePath,r.path,Fy,Iy),o=this.joinPath(a,i),s=n.workingChildDirectoryPath?.path??n.dir.path,c=this.buildMarkdownContent(n.content,{inclusion:`fileMatch`,fileMatchPattern:`${s.replaceAll(`\\`,`/`)}/**`});return this.writeFile(e,o,c,`steeringFile`)}};const Hy=`agt.mdx`,Uy=[`node_modules`,`.git`];var Wy=class extends zg{constructor(){super(`ProjectPromptInputPlugin`,[`ShadowProjectInputPlugin`])}async collect(e){let{dependencyContext:t,fs:n,userConfigOptions:r,path:i,globalScope:a}=e,{shadowProjectDir:o}=this.resolveBasePaths(r),s=this.resolveShadowPath(r.shadowSourceProject.project.dist,o),c=t.workspace;if(c==null)return this.log.warn(`No workspace found in dependency context, skipping project prompt enhancement`),{};let l=c.projects??[],u=await Promise.all(l.map(async t=>{let r=t.name;if(r==null)return t;let o=i.join(s,r);if(!n.existsSync(o)||!n.statSync(o).isDirectory())return t;let c=t.dirFromWorkspacePath?.getAbsolutePath(),l=await this.readRootMemoryPrompt(e,o,a),u=c==null?[]:await this.scanChildMemoryPrompts(e,o,c,a);return{...t,...l!=null&&{rootMemoryPrompt:l},...u.length>0&&{childMemoryPrompts:u}}}));return{workspace:{directory:c.directory,projects:u}}}async readRootMemoryPrompt(e,t,n){let{fs:r,path:i,logger:a}=e,o=i.join(t,Hy);if(!(!r.existsSync(o)||!r.statSync(o).isFile()))try{let e=r.readFileSync(o,`utf8`),i=Ng(e),s;try{s=await _v(e,{globalScope:n,basePath:t})}catch(e){throw e instanceof e_&&(a.error(`MDX compilation failed in ${o}: ${e.message}`),a.error(`Please check your configuration file (~/.aindex/.tnmsc.json) and ensure all required variables are defined.`),u.default.exit(1)),e}return{type:L.ProjectRootMemory,content:s,length:s.length,filePathKind:R.Relative,...i.yamlFrontMatter!=null&&{yamlFrontMatter:i.yamlFrontMatter},...i.rawFrontMatter!=null&&{rawFrontMatter:i.rawFrontMatter},markdownAst:i.markdownAst,markdownContents:i.markdownContents,dir:{pathKind:R.Root,path:``,getDirectoryName:()=>``}}}catch(e){a.error(`Failed to read root memory prompt at ${o}`,{error:e});return}}async scanChildMemoryPrompts(e,t,n,r){let{logger:i}=e,a=[];try{await this.scanDirectoryRecursive(e,t,t,n,a,r)}catch(e){i.error(`Failed to scan child memory prompts at ${t}`,{error:e})}return a}async scanDirectoryRecursive(e,t,n,r,i,a){let{fs:o,path:s}=e,c=o.readdirSync(n,{withFileTypes:!0});for(let l of c){if(!l.isDirectory()||Uy.includes(l.name))continue;let c=s.join(n,l.name),u=s.join(c,Hy);if(o.existsSync(u)&&o.statSync(u).isFile()){let n=await this.readChildMemoryPrompt(e,t,c,r,a);n!=null&&i.push(n)}await this.scanDirectoryRecursive(e,t,c,r,i,a)}}async readChildMemoryPrompt(e,t,n,r,i){let{fs:a,path:o,logger:s}=e,c=o.join(n,Hy);try{let e=a.readFileSync(c,`utf8`),l=Ng(e),d;try{d=await _v(e,{globalScope:i,basePath:n})}catch(e){throw e instanceof e_&&(s.error(`MDX compilation failed in ${c}: ${e.message}`),s.error(`Please check your configuration file (~/.aindex/.tnmsc.json) and ensure all required variables are defined.`),u.default.exit(1)),e}let f=o.relative(t,n),p=o.join(r,f),m=o.basename(n);return{type:L.ProjectChildrenMemory,content:d,length:d.length,filePathKind:R.Relative,...l.yamlFrontMatter!=null&&{yamlFrontMatter:l.yamlFrontMatter},...l.rawFrontMatter!=null&&{rawFrontMatter:l.rawFrontMatter},markdownAst:l.markdownAst,markdownContents:l.markdownContents,dir:{pathKind:R.Relative,path:f,basePath:r,getDirectoryName:()=>m,getAbsolutePath:()=>p},workingChildDirectoryPath:{pathKind:R.Relative,path:f,basePath:r,getDirectoryName:()=>m,getAbsolutePath:()=>p}}}catch(e){s.error(`Failed to read child memory prompt at ${c}`,{error:e});return}}};const Gy=`.qoder`,Ky=`rules`,qy=`commands`,Jy=`skills`,Yy=`global.md`,Xy=`always.md`,Zy=`SKILL.md`,Qy=`mcp.json`,$y=`glob`,eb=`glob`;var tb=class extends Ig{constructor(){super(`QoderIDEPluginOutputPlugin`,{globalConfigDir:Gy,indexignore:`.qoderignore`})}async registerProjectOutputDirs(e){let{projects:t}=e.collectedInputContext.workspace;return t.filter(e=>e.dirFromWorkspacePath!=null).map(e=>this.createProjectRulesDirPath(e.dirFromWorkspacePath))}async registerProjectOutputFiles(e){let t=[],{workspace:n,rules:r}=e.collectedInputContext,{projects:i}=n,{globalMemory:a}=e.collectedInputContext;for(let e of i){let n=e.dirFromWorkspacePath;if(n!=null){if(a!=null&&t.push(this.createProjectRuleFilePath(n,Yy)),e.rootMemoryPrompt!=null&&t.push(this.createProjectRuleFilePath(n,Xy)),e.childMemoryPrompts!=null)for(let r of e.childMemoryPrompts)t.push(this.createProjectRuleFilePath(n,this.buildChildRuleFileName(r)));if(r!=null&&r.length>0){let i=Qg($g(r.filter(e=>this.normalizeRuleScope(e)===`project`),e.projectConfig),e.projectConfig);for(let e of i){let r=this.buildRuleFileName(e);t.push(this.createProjectRuleFilePath(n,r))}}}}return t.push(...this.registerProjectIgnoreOutputFiles(i)),t}async registerGlobalOutputDirs(e){let t=this.getGlobalConfigDir(),{fastCommands:n,skills:r,rules:i}=e.collectedInputContext,a=[];if(n!=null&&n.length>0&&a.push(this.createRelativePath(qy,t,()=>qy)),r!=null&&r.length>0)for(let e of r){let n=e.yamlFrontMatter.name;a.push(this.createRelativePath(f.join(Jy,n),t,()=>n))}let o=i?.filter(e=>this.normalizeRuleScope(e)===`global`);return o!=null&&o.length>0&&a.push(this.createRelativePath(f.join(Ky),t,()=>Ky)),a}async registerGlobalOutputFiles(e){let t=this.getGlobalConfigDir(),{fastCommands:n,skills:r,rules:i}=e.collectedInputContext,a=[],o=this.getTransformOptionsFromContext(e,{includeSeriesPrefix:!0});if(n!=null&&n.length>0)for(let e of n){let n=this.transformFastCommandName(e,o);a.push(this.createRelativePath(f.join(qy,n),t,()=>qy))}let s=i?.filter(e=>this.normalizeRuleScope(e)===`global`);if(s!=null&&s.length>0)for(let e of s){let n=this.buildRuleFileName(e);a.push(this.createRelativePath(f.join(Ky,n),t,()=>Ky))}if(r!=null&&r.length>0)for(let e of r){let n=e.yamlFrontMatter.name;if(a.push(this.createRelativePath(f.join(Jy,n,Zy),t,()=>n)),e.mcpConfig!=null&&a.push(this.createRelativePath(f.join(Jy,n,Qy),t,()=>n)),e.childDocs!=null)for(let r of e.childDocs)a.push(this.createRelativePath(f.join(Jy,n,r.relativePath.replace(/\.mdx$/,`.md`)),t,()=>n));if(e.resources!=null)for(let r of e.resources)a.push(this.createRelativePath(f.join(Jy,n,r.relativePath),t,()=>n))}return a}async canWrite(e){let{workspace:t,globalMemory:n,fastCommands:r,skills:i,rules:a,aiAgentIgnoreConfigFiles:o}=e.collectedInputContext,s=t.projects.some(e=>e.rootMemoryPrompt!=null||(e.childMemoryPrompts?.length??0)>0),c=(a?.length??0)>0,l=o?.some(e=>e.fileName===`.qoderignore`)??!1;return s||n!=null||(r?.length??0)>0||(i?.length??0)>0||c||l?!0:(this.log.trace({action:`skip`,reason:`noOutputs`}),!1)}async writeProjectOutputs(e){let{workspace:t,globalMemory:n,rules:r}=e.collectedInputContext,{projects:i}=t,a=[];for(let t of i){if(t.dirFromWorkspacePath==null)continue;let i=t.dirFromWorkspacePath;if(n!=null){let t=this.buildAlwaysRuleContent(n.content);a.push(await this.writeProjectRuleFile(e,i,Yy,t,`globalRule`))}if(t.rootMemoryPrompt!=null){let n=this.buildAlwaysRuleContent(t.rootMemoryPrompt.content);a.push(await this.writeProjectRuleFile(e,i,Xy,n,`projectRootRule`))}if(t.childMemoryPrompts!=null)for(let n of t.childMemoryPrompts){let t=this.buildChildRuleFileName(n),r=this.buildGlobRuleContent(n);a.push(await this.writeProjectRuleFile(e,i,t,r,`projectChildRule`))}if(r!=null&&r.length>0){let n=Qg($g(r.filter(e=>this.normalizeRuleScope(e)===`project`),t.projectConfig),t.projectConfig);for(let t of n){let n=this.buildRuleFileName(t),r=this.buildRuleContent(t);a.push(await this.writeProjectRuleFile(e,i,n,r,`projectRule`))}}}let o=await this.writeProjectIgnoreFiles(e);return a.push(...o),{files:a,dirs:[]}}async writeGlobalOutputs(e){let{fastCommands:t,skills:n,rules:r}=e.collectedInputContext,i=[],a=this.getGlobalConfigDir(),o=f.join(a,qy),s=f.join(a,Jy),c=f.join(a,Ky);if(t!=null&&t.length>0)for(let n of t)i.push(await this.writeGlobalFastCommand(e,o,n));if(r!=null&&r.length>0){let t=r.filter(e=>this.normalizeRuleScope(e)===`global`);for(let n of t)i.push(await this.writeRuleFile(e,c,n))}if(n!=null&&n.length>0)for(let t of n)i.push(...await this.writeGlobalSkill(e,s,t));return{files:i,dirs:[]}}createProjectRulesDirPath(e){return this.createRelativePath(f.join(e.path,Gy,Ky),e.basePath,()=>Ky)}createProjectRuleFilePath(e,t){return this.createRelativePath(f.join(e.path,Gy,Ky,t),e.basePath,()=>Ky)}buildChildRuleFileName(e){let t=(e.workingChildDirectoryPath?.path??e.dir.path).replaceAll(`\\`,`/`).replaceAll(/^\/+|\/+$/g,``).replaceAll(`/`,`-`);return`glob-${t.length>0?t:`root`}.md`}buildAlwaysRuleContent(e){return jg({trigger:`always_on`,type:`user_command`},e)}buildGlobRuleContent(e){let t=(e.workingChildDirectoryPath?.path??e.dir.path).replaceAll(`\\`,`/`).replaceAll(/^\/+|\/+$/g,``),n=t.length===0?`**/*`:`${t}/**`;return jg({trigger:$y,[eb]:n,type:`user_command`},e.content)}async writeProjectRuleFile(e,t,n,r,i){let a=f.join(t.basePath,t.path,Gy,Ky),o=f.join(a,n);return this.writeFile(e,o,r,i)}async writeGlobalFastCommand(e,t,n){let r=this.getTransformOptionsFromContext(e,{includeSeriesPrefix:!0}),i=this.transformFastCommandName(n,r),a=f.join(t,i),o=jg(this.buildFastCommandFrontMatter(n),n.content);return this.writeFile(e,a,o,`globalFastCommand`)}async writeRuleFile(e,t,n){let r=this.buildRuleFileName(n),i=f.join(t,r),a=this.buildRuleContent(n);return this.writeFile(e,i,a,`rule`)}async writeGlobalSkill(e,t,n){let r=[],i=n.yamlFrontMatter.name,a=f.join(t,i),o=f.join(a,Zy),s=jg(this.buildSkillFrontMatter(n),n.content);if(r.push(await this.writeFile(e,o,s,`skill`)),n.mcpConfig!=null){let t=f.join(a,Qy);r.push(await this.writeFile(e,t,n.mcpConfig.rawContent,`mcpConfig`))}if(n.childDocs!=null)for(let t of n.childDocs){let n=f.join(a,t.relativePath.replace(/\.mdx$/,`.md`));r.push(await this.writeFile(e,n,t.content,`childDoc`))}if(n.resources!=null)for(let t of n.resources){let n=f.join(a,t.relativePath);if(t.encoding===`base64`){let e=h.Buffer.from(t.content,`base64`),o=f.dirname(n);this.ensureDirectory(o),this.writeFileSyncBuffer(n,e),r.push({path:this.createRelativePath(t.relativePath,a,()=>i),success:!0})}else r.push(await this.writeFile(e,n,t.content,`resource`))}return r}buildSkillFrontMatter(e){let t=e.yamlFrontMatter;return{name:t.name,description:t.description,type:`user_command`,...t.displayName!=null&&{displayName:t.displayName},...t.keywords!=null&&t.keywords.length>0&&{keywords:t.keywords},...t.author!=null&&{author:t.author},...t.version!=null&&{version:t.version},...t.allowTools!=null&&t.allowTools.length>0&&{allowTools:t.allowTools}}}buildFastCommandFrontMatter(e){let t=e.yamlFrontMatter;return t==null?{description:`Fast command`,type:`user_command`}:{description:t.description,type:`user_command`,...t.argumentHint!=null&&{argumentHint:t.argumentHint},...t.allowTools!=null&&t.allowTools.length>0&&{allowTools:t.allowTools}}}buildRuleFileName(e){return`rule-${e.series}-${e.ruleName}.md`}buildRuleContent(e){return jg({trigger:$y,[eb]:e.globs.length>0?e.globs.join(`, `):`**/*`,type:`user_command`},e.content)}normalizeRuleScope(e){return e.scope||`global`}};const nb=`README.md`;var rb=class extends Ig{constructor(){super(`ReadmeMdConfigFileOutputPlugin`,{outputFileName:nb})}async registerProjectOutputFiles(e){let t=[],{readmePrompts:n}=e.collectedInputContext;if(n==null||n.length===0)return t;for(let e of n){let{targetDir:n}=e,r=f.join(n.path,nb);t.push({pathKind:R.Relative,path:r,basePath:n.basePath,getDirectoryName:()=>n.getDirectoryName(),getAbsolutePath:()=>f.join(n.basePath,r)})}return t}async canWrite(e){let{readmePrompts:t}=e.collectedInputContext;return t?.length===0?(this.log.debug(`skipped`,{reason:`no README prompts to write`}),!1):!0}async writeProjectOutputs(e){let t=[],n=[],{readmePrompts:r}=e.collectedInputContext;if(r==null||r.length===0)return{files:t,dirs:n};for(let n of r){let r=await this.writeReadmeFile(e,n);t.push(r)}return{files:t,dirs:n}}async writeReadmeFile(e,t){let{targetDir:n}=t,r=f.join(n.path,nb),i=f.join(n.basePath,r),a=t.content,o={pathKind:R.Relative,path:r,basePath:n.basePath,getDirectoryName:()=>n.getDirectoryName(),getAbsolutePath:()=>i},s=t.isRoot?`project:${t.projectName}/README.md`:`project:${t.projectName}/${n.path}/README.md`;if(e.dryRun===!0)return this.log.trace({action:`dryRun`,type:`readme`,path:i,label:s}),{path:o,success:!0,skipped:!1};try{let e=f.dirname(i);return d.existsSync(e)||d.mkdirSync(e,{recursive:!0}),d.writeFileSync(i,a,`utf8`),this.log.trace({action:`write`,type:`readme`,path:i,label:s}),{path:o,success:!0}}catch(e){let t=e instanceof Error?e.message:String(e);return this.log.error({action:`write`,type:`readme`,path:i,label:s,error:t}),{path:o,success:!1,error:e}}}},ib=class extends zg{constructor(){super(`ReadmeMdInputPlugin`,[`ShadowProjectInputPlugin`])}async collect(e){let{userConfigOptions:t,logger:n,fs:r,path:i,globalScope:a}=e,{workspaceDir:o,shadowProjectDir:s}=this.resolveBasePaths(t),c=this.resolveShadowPath(t.shadowSourceProject.project.dist,s),l=[];if(!r.existsSync(c)||!r.statSync(c).isDirectory())return n.debug(`shadow projects directory does not exist`,{path:c}),{readmePrompts:l};try{let t=r.readdirSync(c,{withFileTypes:!0});for(let n of t){if(!n.isDirectory())continue;let t=n.name,r=i.join(c,t);await this.collectReadmeFiles(e,r,t,o,``,l,a)}}catch(e){n.error(`failed to scan shadow projects`,{path:c,error:e})}return{readmePrompts:l}}async collectReadmeFiles(e,t,n,r,i,a,o){let{fs:s,path:c,logger:l}=e,d=i===``,f=c.join(t,`rdm.mdx`);if(s.existsSync(f)&&s.statSync(f).isFile())try{let e=s.readFileSync(f,`utf8`),p;if(o!=null)try{p=await _v(e,{globalScope:o,basePath:t})}catch(e){throw e instanceof e_&&(l.error(`MDX compilation failed in ${f}: ${e.message}`),l.error(`Please check your configuration file (~/.aindex/.tnmsc.json) and ensure all required variables are defined.`),u.default.exit(1)),e}else p=e;let m=d?n:c.join(n,i),h={pathKind:R.Relative,path:m,basePath:r,getDirectoryName:()=>d?n:c.basename(i),getAbsolutePath:()=>c.resolve(r,m)},g={pathKind:R.Relative,path:c.dirname(f),basePath:r,getDirectoryName:()=>c.basename(c.dirname(f)),getAbsolutePath:()=>c.dirname(f)};a.push({type:L.Readme,content:p,length:p.length,filePathKind:R.Relative,projectName:n,targetDir:h,isRoot:d,markdownContents:[],dir:g})}catch(e){l.warn(`failed to read readme`,{path:f,error:e})}try{let l=s.readdirSync(t,{withFileTypes:!0});for(let s of l)if(s.isDirectory()){let l=d?s.name:c.join(i,s.name),u=c.join(t,s.name);await this.collectReadmeFiles(e,u,n,r,l,a,o)}}catch(e){l.warn(`failed to scan directory`,{path:t,error:e})}}},ab=class extends Iv{constructor(){super(`RuleInputPlugin`,{configKey:`shadowSourceProject.rule.dist`})}getTargetDir(e,t){return this.resolveShadowPath(e.shadowSourceProject.rule.dist,t.shadowProjectDir)}validateMetadata(e,t){return Nt(e,t)}createResult(e){return{rules:e}}createPrompt(e,t,n,r,i,a,o,s){let c=e.indexOf(`/`),l=c===-1?``:e.slice(0,c),u=(c===-1?e:e.slice(c+1)).replace(/\.mdx$/,``),d=r?.globs??[],f=r?.scope??`project`,p=r?.seriName;return{type:L.Rule,content:n,length:n.length,filePathKind:R.Relative,...r!=null&&{yamlFrontMatter:r},...i!=null&&{rawFrontMatter:i},markdownAst:a.markdownAst,markdownContents:a.markdownContents,dir:{pathKind:R.Relative,path:e,basePath:o,getDirectoryName:()=>e.replace(/\.mdx$/,``),getAbsolutePath:()=>t},series:l,ruleName:u,globs:d,scope:f,...p!=null&&{seriName:p},rawMdxContent:s}}async collect(e){let{userConfigOptions:t,logger:n,path:r,fs:i}=e,a=this.resolveBasePaths(t),o=this.getTargetDir(t,a),s=[];if(!(i.existsSync(o)&&i.statSync(o).isDirectory()))return this.createResult(s);try{let t=i.readdirSync(o,{withFileTypes:!0});for(let a of t)if(a.isDirectory()){let t=r.join(o,a.name);try{let n=i.readdirSync(t,{withFileTypes:!0});for(let i of n)if(i.isFile()&&i.name.endsWith(this.extension)){let n=await this.processFile(i.name,r.join(t,i.name),o,a.name,e);n!=null&&s.push(n)}}catch(e){n.error(`Failed to scan subdirectory at ${t}`,{error:e})}}}catch(e){n.error(`Failed to scan directory at ${o}`,{error:e})}return this.createResult(s)}async processFile(e,t,n,r,i){let{logger:a,globalScope:o}=i,s=i.fs.readFileSync(t,`utf8`);try{let c=Ng(s),l=await _v(s,{globalScope:o,extractMetadata:!0,basePath:i.path.join(n,r)}),u=c.yamlFrontMatter!=null||Object.keys(l.metadata.fields).length>0?{...c.yamlFrontMatter,...l.metadata.fields}:void 0;if(u!=null){let e=this.validateMetadata(u,t);for(let t of e.warnings)a.debug(t);if(!e.valid)throw new r_([...e.errors],t)}let{content:d}=l,f=`${r}/${e}`;return a.debug(`${this.name} metadata extracted`,{file:f,source:l.metadata.source,hasYaml:c.yamlFrontMatter!=null,hasExport:Object.keys(l.metadata.fields).length>0}),this.createPrompt(f,t,d,u,c.rawFrontMatter,c,n,s)}catch(e){a.error(`failed to parse ${this.name} item`,{file:t,error:e});return}}},ob=class extends zg{constructor(){super(`ShadowProjectInputPlugin`)}loadProjectConfig(e,t,n,r,i,a){let o=i.join(t,n,e,`project.jsonc`);if(r.existsSync(o))try{let t=r.readFileSync(o,`utf8`),n=[],i=(0,_.parse)(t,n);if(n.length>0){a.warn(`failed to parse project.jsonc for ${e}`,{path:o,errors:n});return}return i}catch(t){a.warn(`failed to parse project.jsonc for ${e}`,{path:o,error:t});return}}collect(e){let{userConfigOptions:t,logger:n,fs:r,path:i}=e,{workspaceDir:a,shadowProjectDir:o}=this.resolveBasePaths(t),s=this.resolveShadowPath(t.shadowSourceProject.project.dist,o),c=i.basename(o),l=[];if(r.existsSync(s)&&r.statSync(s).isDirectory())try{let e=r.readdirSync(s,{withFileTypes:!0});for(let s of e)if(s.isDirectory()){let e=s.name===c,u=this.loadProjectConfig(s.name,o,t.shadowSourceProject.project.src,r,i,n);l.push({name:s.name,...e&&{isPromptSourceProject:!0},...u!=null&&{projectConfig:u},dirFromWorkspacePath:{pathKind:R.Relative,path:s.name,basePath:a,getDirectoryName:()=>s.name,getAbsolutePath:()=>i.resolve(a,s.name)}})}}catch(e){n.error(`failed to scan shadow projects`,{path:s,error:e})}if(l.length===0&&r.existsSync(a)&&r.statSync(a).isDirectory()){n.debug(`no projects in dist/app/, falling back to workspace scan`,{workspaceDir:a});try{let e=r.readdirSync(a,{withFileTypes:!0});for(let s of e)if(s.isDirectory()&&!s.name.startsWith(`.`)){let e=s.name===c,u=this.loadProjectConfig(s.name,o,t.shadowSourceProject.project.src,r,i,n);l.push({name:s.name,...e&&{isPromptSourceProject:!0},...u!=null&&{projectConfig:u},dirFromWorkspacePath:{pathKind:R.Relative,path:s.name,basePath:a,getDirectoryName:()=>s.name,getAbsolutePath:()=>i.resolve(a,s.name)}})}}catch(e){n.error(`failed to scan workspace directory`,{path:a,error:e})}}return{workspace:{directory:{pathKind:R.Absolute,path:a,getDirectoryName:()=>i.basename(a)},projects:l}}}};function sb(e){return It.includes(e.toLowerCase())}function cb(e){let t=e.toLowerCase();return[`.png`,`.jpg`,`.jpeg`,`.gif`,`.webp`,`.ico`,`.bmp`,`.tiff`,`.svg`].includes(t)?`image`:`.kt,.java,.py,.pyi,.pyx,.ts,.tsx,.js,.jsx,.mjs,.cjs,.go,.rs,.c,.cpp,.cc,.h,.hpp,.hxx,.cs,.fs,.fsx,.vb,.rb,.php,.swift,.scala,.groovy,.lua,.r,.jl,.ex,.exs,.erl,.clj,.cljs,.hs,.ml,.mli,.nim,.zig,.v,.dart,.vue,.svelte,.d.ts,.d.mts,.d.cts`.split(`,`).includes(t)?`code`:[`.sql`,`.json`,`.jsonc`,`.json5`,`.xml`,`.xsd`,`.xsl`,`.xslt`,`.yaml`,`.yml`,`.toml`,`.csv`,`.tsv`,`.graphql`,`.gql`,`.proto`].includes(t)?`data`:[`.txt`,`.text`,`.rtf`,`.log`,`.docx`,`.doc`,`.xlsx`,`.xls`,`.pptx`,`.ppt`,`.pdf`,`.odt`,`.ods`,`.odp`].includes(t)?`document`:[`.ini`,`.conf`,`.cfg`,`.config`,`.properties`,`.env`,`.envrc`,`.editorconfig`,`.gitignore`,`.gitattributes`,`.npmrc`,`.nvmrc`,`.npmignore`,`.eslintrc`,`.prettierrc`,`.stylelintrc`,`.babelrc`,`.browserslistrc`].includes(t)?`config`:[`.sh`,`.bash`,`.zsh`,`.fish`,`.ps1`,`.psm1`,`.psd1`,`.bat`,`.cmd`].includes(t)?`script`:`.exe,.dll,.so,.dylib,.bin,.wasm,.class,.jar,.war,.pyd,.pyc,.pyo,.zip,.tar,.gz,.bz2,.7z,.rar,.ttf,.otf,.woff,.woff2,.eot,.db,.sqlite,.sqlite3`.split(`,`).includes(t)?`binary`:`other`}function lb(e){return{".ts":`text/typescript`,".tsx":`text/typescript`,".js":`text/javascript`,".jsx":`text/javascript`,".json":`application/json`,".py":`text/x-python`,".java":`text/x-java`,".kt":`text/x-kotlin`,".go":`text/x-go`,".rs":`text/x-rust`,".c":`text/x-c`,".cpp":`text/x-c++`,".cs":`text/x-csharp`,".rb":`text/x-ruby`,".php":`text/x-php`,".swift":`text/x-swift`,".scala":`text/x-scala`,".sql":`application/sql`,".xml":`application/xml`,".yaml":`text/yaml`,".yml":`text/yaml`,".toml":`text/toml`,".csv":`text/csv`,".graphql":`application/graphql`,".txt":`text/plain`,".pdf":`application/pdf`,".docx":`application/vnd.openxmlformats-officedocument.wordprocessingml.document`,".xlsx":`application/vnd.openxmlformats-officedocument.spreadsheetml.sheet`,".html":`text/html`,".css":`text/css`,".svg":`image/svg+xml`,".png":`image/png`,".jpg":`image/jpeg`,".jpeg":`image/jpeg`,".gif":`image/gif`,".webp":`image/webp`,".ico":`image/x-icon`,".bmp":`image/bmp`}[e.toLowerCase()]}var ub=class extends zg{constructor(){super(`SkillInputPlugin`)}readMcpConfig(e,t,n){let r=f.join(e,`mcp.json`);if(t.existsSync(r)){if(!t.statSync(r).isFile()){n.warn(`mcp.json is not a file`,{skillDir:e});return}try{let i=t.readFileSync(r,`utf8`),a=JSON.parse(i);if(a.mcpServers==null||typeof a.mcpServers!=`object`){n.warn(`mcp.json missing mcpServers field`,{skillDir:e});return}return{type:L.SkillMcpConfig,mcpServers:a.mcpServers,rawContent:i}}catch(t){n.warn(`failed to parse mcp.json`,{skillDir:e,error:t});return}}}scanSkillDirectory(e,t,n,r=``){let i=[],a=[],o=r?f.join(e,r):e;try{let s=t.readdirSync(o,{withFileTypes:!0});for(let c of s){let s=r?`${r}/${c.name}`:c.name;if(c.isDirectory()){let r=this.scanSkillDirectory(e,t,n,s);i.push(...r.childDocs),a.push(...r.resources)}else if(c.isFile()){let l=f.join(o,c.name);if(c.name.endsWith(`.mdx`)){if(r===``&&c.name===`skill.mdx`)continue;try{let n=Ng(t.readFileSync(l,`utf8`)),r=Pg(n.contentWithoutFrontMatter);i.push({type:L.SkillChildDoc,content:r,length:r.length,filePathKind:R.Relative,markdownAst:n.markdownAst,markdownContents:n.markdownContents,...n.rawFrontMatter!=null&&{rawFrontMatter:n.rawFrontMatter},relativePath:s,dir:{pathKind:R.Relative,path:s,basePath:e,getDirectoryName:()=>f.dirname(s),getAbsolutePath:()=>l}})}catch(e){n.warn(`failed to read child doc`,{path:s,error:e})}}else{if(r===``&&c.name===`mcp.json`)continue;let e=f.extname(c.name),i,o,u;try{if(sb(e)){let e=t.readFileSync(l);i=e.toString(`base64`),o=`base64`,{length:u}=e}else i=t.readFileSync(l,`utf8`),o=`text`,{length:u}=h.Buffer.from(i,`utf8`);let n=lb(e),r={type:L.SkillResource,extension:e,fileName:c.name,relativePath:s,content:i,encoding:o,category:cb(e),length:u};n==null?a.push(r):a.push({...r,mimeType:n})}catch(e){n.warn(`failed to read resource file`,{path:s,error:e})}}}}}catch(e){n.warn(`failed to scan directory`,{path:o,error:e})}return{childDocs:i,resources:a}}async collect(e){let{userConfigOptions:t,logger:n,globalScope:r}=e,{shadowProjectDir:i}=this.resolveBasePaths(t),a=this.resolveShadowPath(t.shadowSourceProject.skill.dist,i),o=[];if(!(e.fs.existsSync(a)&&e.fs.statSync(a).isDirectory()))return{skills:o};let s=e.fs.readdirSync(a,{withFileTypes:!0});for(let t of s)if(t.isDirectory()){let i=e.path.join(a,t.name,`skill.mdx`);if(e.fs.existsSync(i)&&e.fs.statSync(i).isFile())try{let s=e.fs.readFileSync(i,`utf8`),c=Ng(s),l=await _v(s,{globalScope:r,extractMetadata:!0,basePath:e.path.join(a,t.name)}),u={...c.yamlFrontMatter,...l.metadata.fields},d=At(u,i);for(let e of d.warnings)n.debug(e);if(!d.valid)throw new r_(d.errors,i);let p=Pg(l.content),m=e.path.join(a,t.name),h=this.readMcpConfig(m,e.fs,n),{childDocs:g,resources:_}=this.scanSkillDirectory(m,e.fs,n);n.debug(`skill metadata extracted`,{skill:t.name,source:l.metadata.source,hasYaml:c.yamlFrontMatter!=null,hasExport:Object.keys(l.metadata.fields).length>0}),o.push({type:L.Skill,content:p,length:p.length,filePathKind:R.Relative,yamlFrontMatter:u.name==null?{name:t.name,description:``}:u,...c.rawFrontMatter!=null&&{rawFrontMatter:c.rawFrontMatter},markdownAst:c.markdownAst,markdownContents:c.markdownContents,...h!=null&&{mcpConfig:h},...g.length>0&&{childDocs:g},..._.length>0&&{resources:_},dir:{pathKind:R.Relative,path:t.name,basePath:a,getDirectoryName:()=>t.name,getAbsolutePath:()=>f.join(a,t.name)}})}catch(e){n.error(`failed to parse skill`,{file:i,error:e})}}return{skills:o}}},db=class extends Iv{constructor(){super(`SubAgentInputPlugin`,{configKey:`shadowSourceProject.subAgent.dist`})}getTargetDir(e,t){return this.resolveShadowPath(e.shadowSourceProject.subAgent.dist,t.shadowProjectDir)}validateMetadata(e,t){return Mt(e,t)}createResult(e){return{subAgents:e}}extractSeriesInfo(e,t){let n=e.replace(/\.mdx$/,``);if(t!=null)return{series:t,agentName:n};let r=n.indexOf(`_`);return r===-1?{agentName:n}:{series:n.slice(0,Math.max(0,r)),agentName:n.slice(Math.max(0,r+1))}}async collect(e){let{userConfigOptions:t,logger:n,path:r,fs:i}=e,a=this.resolveBasePaths(t),o=this.getTargetDir(t,a),s=[];if(!(i.existsSync(o)&&i.statSync(o).isDirectory()))return this.createResult(s);try{let t=i.readdirSync(o,{withFileTypes:!0});for(let a of t)if(a.isFile()&&a.name.endsWith(this.extension)){let t=await this.processFile(a.name,r.join(o,a.name),o,void 0,e);t!=null&&s.push(t)}else if(a.isDirectory()){let t=r.join(o,a.name);try{let n=i.readdirSync(t,{withFileTypes:!0});for(let i of n)if(i.isFile()&&i.name.endsWith(this.extension)){let n=await this.processFile(i.name,r.join(t,i.name),o,a.name,e);n!=null&&s.push(n)}}catch(e){n.error(`Failed to scan subdirectory at ${t}`,{error:e})}}}catch(e){n.error(`Failed to scan directory at ${o}`,{error:e})}return this.createResult(s)}async processFile(e,t,n,r,i){let{logger:a,globalScope:o}=i,s=i.fs.readFileSync(t,`utf8`);try{let c=Ng(s),l=await _v(s,{globalScope:o,extractMetadata:!0,basePath:r==null?n:i.path.join(n,r)}),u=c.yamlFrontMatter!=null||Object.keys(l.metadata.fields).length>0?{...c.yamlFrontMatter,...l.metadata.fields}:void 0;if(u!=null){let e=this.validateMetadata(u,t);for(let t of e.warnings)a.debug(t);if(!e.valid)throw new r_([...e.errors],t)}let{content:d}=l,f=r==null?e:`${r}/${e}`;return a.debug(`${this.name} metadata extracted`,{file:f,source:l.metadata.source,hasYaml:c.yamlFrontMatter!=null,hasExport:Object.keys(l.metadata.fields).length>0}),this.createPrompt(f,t,d,u,c.rawFrontMatter,c,n,s)}catch(e){a.error(`failed to parse ${this.name} item`,{file:t,error:e});return}}createPrompt(e,t,n,r,i,a,o,s){let c=e.indexOf(`/`),l=c===-1?void 0:e.slice(0,c),u=c===-1?e:e.slice(c+1),d=this.extractSeriesInfo(u,l);return{type:L.SubAgent,content:n,length:n.length,filePathKind:R.Relative,...r!=null&&{yamlFrontMatter:r},...i!=null&&{rawFrontMatter:i},markdownAst:a.markdownAst,markdownContents:a.markdownContents,dir:{pathKind:R.Relative,path:e,basePath:o,getDirectoryName:()=>e.replace(/\.mdx$/,``),getAbsolutePath:()=>t},...d.series!=null&&{series:d.series},agentName:d.agentName,rawMdxContent:s}}};const fb=`GLOBAL.md`,pb=`.trae`,mb=`steering`,hb=`rules`;var gb=class extends Ig{constructor(){super(`TraeIDEOutputPlugin`,{globalConfigDir:pb,outputFileName:fb,indexignore:`.traeignore`})}getGlobalSteeringDir(){return this.joinPath(this.getGlobalConfigDir(),mb)}async registerProjectOutputDirs(e){let{projects:t}=e.collectedInputContext.workspace;return t.filter(e=>e.dirFromWorkspacePath!=null).map(e=>this.createRelativePath(this.joinPath(e.dirFromWorkspacePath.path,pb,hb),e.dirFromWorkspacePath.basePath,()=>hb))}async registerProjectOutputFiles(e){let{projects:t}=e.collectedInputContext.workspace,n=[];for(let e of t)if(!(e.dirFromWorkspacePath==null||e.childMemoryPrompts==null))for(let t of e.childMemoryPrompts)n.push(this.createRelativePath(this.joinPath(e.dirFromWorkspacePath.path,pb,hb,this.buildSteeringFileName(t)),e.dirFromWorkspacePath.basePath,()=>hb));return n.push(...this.registerProjectIgnoreOutputFiles(t)),n}async registerGlobalOutputDirs(){return[this.createRelativePath(mb,this.getGlobalConfigDir(),()=>mb)]}async registerGlobalOutputFiles(e){let{globalMemory:t,fastCommands:n}=e.collectedInputContext,r=this.getGlobalSteeringDir(),i=[];if(t!=null&&i.push(this.createRelativePath(fb,r,()=>mb)),n!=null)for(let e of n)i.push(this.createRelativePath(this.buildFastCommandSteeringFileName(e),r,()=>mb));return i}async canWrite(e){let{workspace:t,globalMemory:n,fastCommands:r,aiAgentIgnoreConfigFiles:i}=e.collectedInputContext,a=t.projects.some(e=>(e.childMemoryPrompts?.length??0)>0),o=i?.some(e=>e.fileName===`.traeignore`)??!1;return a||n!=null||(r?.length??0)>0||o?!0:(this.log.trace({action:`skip`,reason:`noOutputs`}),!1)}async writeProjectOutputs(e){let{projects:t}=e.collectedInputContext.workspace,n=[];for(let r of t)if(!(r.dirFromWorkspacePath==null||r.childMemoryPrompts==null))for(let t of r.childMemoryPrompts)n.push(await this.writeSteeringFile(e,r,t));let r=await this.writeProjectIgnoreFiles(e);return n.push(...r),{files:n,dirs:[]}}async writeGlobalOutputs(e){let{globalMemory:t,fastCommands:n}=e.collectedInputContext,r=[],i=this.getGlobalSteeringDir();if(t!=null&&r.push(await this.writeFile(e,this.joinPath(i,fb),t.content,`globalMemory`)),n!=null)for(let t of n)r.push(await this.writeFastCommandSteeringFile(e,t));return{files:r,dirs:[]}}buildFastCommandSteeringFileName(e){return this.transformFastCommandName(e,{includeSeriesPrefix:!0,seriesSeparator:`-`})}async writeFastCommandSteeringFile(e,t){let n=this.buildFastCommandSteeringFileName(t),r=this.joinPath(this.getGlobalSteeringDir(),n),i=t.yamlFrontMatter?.description,a=this.buildMarkdownContent(t.content,{inclusion:`manual`,description:i!=null&&i.length>0?i:null});return this.writeFile(e,r,a,`fastCommandSteering`)}buildSteeringFileName(e){return`trae-${(e.workingChildDirectoryPath?.path??e.dir.path).replaceAll(`\\`,`/`).replaceAll(/^\/+|\/+$/g,``).replaceAll(`/`,`-`)}.md`}async writeSteeringFile(e,t,n){let r=t.dirFromWorkspacePath,i=this.buildSteeringFileName(n),a=this.joinPath(r.basePath,r.path,pb,hb),o=this.joinPath(a,i),s=[`---`,`alwaysApply: false`,`globs: ${`${(n.workingChildDirectoryPath?.path??n.dir.path).replaceAll(`\\`,`/`)}/**`}`,`---`,``,n.content].join(`
1239
1240
  `);return this.writeFile(e,o,s,`steeringFile`)}};const _b=`.vscode`,vb=[`.vscode/settings.json`,`.vscode/extensions.json`];var yb=class extends Ig{constructor(){super(`VisualStudioCodeIDEConfigOutputPlugin`)}async registerProjectOutputFiles(e){let t=[],{projects:n}=e.collectedInputContext.workspace,{ideConfigFiles:r}=e.collectedInputContext;if(!r.some(e=>e.type===Tt.VSCode))return t;for(let e of n){let n=e.dirFromWorkspacePath;if(n!=null&&e.isPromptSourceProject!==!0)for(let e of vb){let r=this.joinPath(n.path,e);t.push({pathKind:R.Relative,path:r,basePath:n.basePath,getDirectoryName:()=>this.dirname(e),getAbsolutePath:()=>this.resolvePath(n.basePath,r)})}}return t}async canWrite(e){let{ideConfigFiles:t}=e.collectedInputContext;return t.some(e=>e.type===Tt.VSCode)?!0:(this.log.debug(`skipped`,{reason:`no VS Code config files found`}),!1)}async writeProjectOutputs(e){let{projects:t}=e.collectedInputContext.workspace,{ideConfigFiles:n}=e.collectedInputContext,r=[],i=[],a=n.filter(e=>e.type===Tt.VSCode);for(let n of t){let t=n.dirFromWorkspacePath;if(t==null)continue;let i=n.name??`unknown`;for(let n of a){let a=await this.writeConfigFile(e,t,n,`project:${i}`);r.push(a)}}return{files:r,dirs:i}}async writeConfigFile(e,t,n,r){let i=this.getTargetRelativePath(n),a=this.resolvePath(t.basePath,t.path,i),o={pathKind:R.Relative,path:this.joinPath(t.path,i),basePath:t.basePath,getDirectoryName:()=>this.dirname(i),getAbsolutePath:()=>a};if(e.dryRun===!0)return this.log.trace({action:`dryRun`,type:`config`,path:a,label:r}),{path:o,success:!0,skipped:!1};try{let e=this.dirname(a);return this.ensureDirectory(e),this.writeFileSync(a,n.content),this.log.trace({action:`write`,type:`config`,path:a,label:r}),{path:o,success:!0}}catch(e){let t=e instanceof Error?e.message:String(e);return this.log.error({action:`write`,type:`config`,path:a,label:r,error:t}),{path:o,success:!1,error:e}}}getTargetRelativePath(e){let t=e.dir.path;if(e.type!==Tt.VSCode)return this.basename(t);let n=t.indexOf(_b);return n===-1?this.joinPath(_b,this.basename(t)):t.slice(Math.max(0,n))}};const bb=`WARP.md`;var xb=class extends Ig{constructor(){super(`WarpIDEOutputPlugin`,{outputFileName:bb,indexignore:`.warpindexignore`})}isAgentsPluginRegistered(e){return`registeredPluginNames`in e&&e.registeredPluginNames!=null?e.registeredPluginNames.includes(`AgentsOutputPlugin`):!1}async registerProjectOutputFiles(e){let t=[],{projects:n}=e.collectedInputContext.workspace,r=this.isAgentsPluginRegistered(e);for(let e of n)if(e.dirFromWorkspacePath!=null){if(r)t.push(this.createFileRelativePath(e.dirFromWorkspacePath,bb));else if(e.rootMemoryPrompt!=null&&t.push(this.createFileRelativePath(e.dirFromWorkspacePath,bb)),e.childMemoryPrompts!=null)for(let n of e.childMemoryPrompts)n.dir!=null&&this.isRelativePath(n.dir)&&t.push(this.createFileRelativePath(n.dir,bb))}return t.push(...this.registerProjectIgnoreOutputFiles(n)),t}async canWrite(e){let t=this.isAgentsPluginRegistered(e),{workspace:n,globalMemory:r,aiAgentIgnoreConfigFiles:i}=e.collectedInputContext;if(t)return r==null?(this.log.debug(`skipped`,{reason:`AgentsOutputPlugin registered but no global memory`}),!1):!0;let a=n.projects.some(e=>e.rootMemoryPrompt!=null||(e.childMemoryPrompts?.length??0)>0),o=i?.some(e=>e.fileName===`.warpindexignore`)??!1;return a||o?!0:(this.log.debug(`skipped`,{reason:`no outputs to write`}),!1)}async writeProjectOutputs(e){let t=this.isAgentsPluginRegistered(e),{workspace:n,globalMemory:r}=e.collectedInputContext,{projects:i}=n,a=[],o=[];if(t){if(r!=null)for(let t of i){let n=t.dirFromWorkspacePath;if(n==null)continue;let i=t.name??`unknown`,o=await this.writePromptFile(e,n,r.content,`project:${i}/global-warp`);a.push(o)}let t=await this.writeProjectIgnoreFiles(e);return a.push(...t),{files:a,dirs:o}}let s=this.extractGlobalMemoryContent(e);for(let t of i){let n=t.name??`unknown`,r=t.dirFromWorkspacePath;if(r!=null){if(t.rootMemoryPrompt!=null){let i=this.combineGlobalWithContent(s,t.rootMemoryPrompt.content),o=await this.writePromptFile(e,r,i,`project:${n}/root`);a.push(o)}if(t.childMemoryPrompts!=null)for(let r of t.childMemoryPrompts){let t=await this.writePromptFile(e,r.dir,r.content,`project:${n}/child:${r.workingChildDirectoryPath?.path??`unknown`}`);a.push(t)}}}let c=await this.writeProjectIgnoreFiles(e);return a.push(...c),{files:a,dirs:o}}},Sb=class extends zg{constructor(){super(`WorkspaceInputPlugin`)}collect(e){let{userConfigOptions:t}=e,{workspaceDir:n,shadowProjectDir:r}=this.resolveBasePaths(t);return{workspace:{directory:{pathKind:R.Absolute,path:n,getDirectoryName:()=>f.basename(n)},projects:[]},shadowSourceProjectDir:r}}},Cb=Or({plugins:[new Rg,new Jg,new bv,new Tv,new uy,new Fv,new Rv,new Uv,new Vy,new by,new tb,new gb,new xb,new My,new Pv,new Yv,new py,new yb,new rb,new Cy,new xy,new my,new Sb,new ob,new Vg,new ey,new ub,new Lv,new db,new ab,new $v,new Wy,new ib,new Qv,new Gv]});async function wb(){let e=await Cb;await new yr(...u.default.argv).run(e)}wb().catch(e=>console.error(e)),exports.CircularDependencyError=Et,exports.ClaudeCodeCLISubAgentColors=xt,exports.CodingAgentTools=St,exports.ConfigLoader=fn,exports.ConfigValidationError=Ot,exports.DEFAULT_CONFIG_FILE_NAME=an,exports.DEFAULT_GLOBAL_CONFIG_DIR=on,exports.DEFAULT_SHADOW_SOURCE_PROJECT_STRUCTURE=Bt,exports.DEFAULT_USER_CONFIG=Wt,exports.FilePathKind=R,exports.GlobalConfigDirectoryType=wt,exports.IDEKind=Tt,exports.MissingDependencyError=Dt,exports.NamingCaseKind=Ct,exports.PathPlaceholders=Ut,exports.PluginKind=bt,exports.PromptKind=L,exports.SHADOW_SOURCE_DIR_NAMES=Lt,exports.SHADOW_SOURCE_FILE_NAMES=Rt,exports.SHADOW_SOURCE_RELATIVE_PATHS=zt,exports.SKILL_RESOURCE_BINARY_EXTENSIONS=It,exports.SKILL_RESOURCE_TEXT_EXTENSIONS=Ft,exports.applyMetadataDefaults=Pt,exports.checkCanClean=dt,exports.checkCanWrite=pt,exports.checkVersionControl=Ln,exports.collectAllPluginOutputs=ut,exports.createLogger=rn,exports.default=Cb,exports.defineConfig=Or,exports.executeOnCleanComplete=ft,exports.executeWriteOutputs=mt,exports.generateShadowSourceProject=zn,exports.getConfigLoader=mn,exports.getDefaultUserConfig=cn,exports.getGlobalConfigPath=sn,exports.getGlobalLogLevel=nn,exports.loadUserConfig=hn,exports.mergeConfig=Cr,exports.setGlobalLogLevel=tn,exports.validateAndEnsureGlobalConfig=gn,exports.validateExportMetadata=kt,exports.validateFastCommandMetadata=jt,exports.validateRuleMetadata=Nt,exports.validateSkillMetadata=At,exports.validateSubAgentMetadata=Mt;