oh-my-agent 8.52.9 → 8.53.0
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/bin/cli.js +2 -2
- package/package.json +1 -1
package/bin/cli.js
CHANGED
|
@@ -24,7 +24,7 @@ Expecting one of '${G.join("', '")}'`);if(this._lifeCycleHooks[$])this._lifeCycl
|
|
|
24
24
|
`),this.outputHelp({error:!0});let G=z||{},J=G.exitCode||1,Q=G.code||"commander.error";this._exit(J,Q,$)}_parseOptionsEnv(){this.options.forEach(($)=>{if($.envVar&&$.envVar in u4.env){let z=$.attributeName();if(this.getOptionValue(z)===void 0||["default","config","env"].includes(this.getOptionValueSource(z)))if($.required||$.optional)this.emit(`optionEnv:${$.name()}`,u4.env[$.envVar]);else this.emit(`optionEnv:${$.name()}`)}})}_parseOptionsImplied(){let $=new vX5(this.options),z=(G)=>{return this.getOptionValue(G)!==void 0&&!["default","implied"].includes(this.getOptionValueSource(G))};this.options.filter((G)=>G.implied!==void 0&&z(G.attributeName())&&$.valueFromOption(this.getOptionValue(G.attributeName()),G)).forEach((G)=>{Object.keys(G.implied).filter((J)=>!z(J)).forEach((J)=>{this.setOptionValueWithSource(J,G.implied[J],"implied")})})}missingArgument($){let z=`error: missing required argument '${$}'`;this.error(z,{code:"commander.missingArgument"})}optionMissingArgument($){let z=`error: option '${$.flags}' argument missing`;this.error(z,{code:"commander.optionMissingArgument"})}missingMandatoryOptionValue($){let z=`error: required option '${$.flags}' not specified`;this.error(z,{code:"commander.missingMandatoryOptionValue"})}_conflictingOption($,z){let G=(K)=>{let U=K.attributeName(),Z=this.getOptionValue(U),Y=this.options.find((B)=>B.negate&&U===B.attributeName()),W=this.options.find((B)=>!B.negate&&U===B.attributeName());if(Y&&(Y.presetArg===void 0&&Z===!1||Y.presetArg!==void 0&&Z===Y.presetArg))return Y;return W||K},J=(K)=>{let U=G(K),Z=U.attributeName();if(this.getOptionValueSource(Z)==="env")return`environment variable '${U.envVar}'`;return`option '${U.flags}'`},Q=`error: ${J($)} cannot be used with ${J(z)}`;this.error(Q,{code:"commander.conflictingOption"})}unknownOption($){if(this._allowUnknownOption)return;let z="";if($.startsWith("--")&&this._showSuggestionAfterError){let J=[],Q=this;do{let K=Q.createHelp().visibleOptions(Q).filter((U)=>U.long).map((U)=>U.long);J=J.concat(K),Q=Q.parent}while(Q&&!Q._enablePositionalOptions);z=LU2($,J)}let G=`error: unknown option '${$}'${z}`;this.error(G,{code:"commander.unknownOption"})}_excessArguments($){if(this._allowExcessArguments)return;let z=this.registeredArguments.length,G=z===1?"":"s",Q=`error: too many arguments${this.parent?` for '${this.name()}'`:""}. Expected ${z} argument${G} but got ${$.length}.`;this.error(Q,{code:"commander.excessArguments"})}unknownCommand(){let $=this.args[0],z="";if(this._showSuggestionAfterError){let J=[];this.createHelp().visibleCommands(this).forEach((Q)=>{if(J.push(Q.name()),Q.alias())J.push(Q.alias())}),z=LU2($,J)}let G=`error: unknown command '${$}'${z}`;this.error(G,{code:"commander.unknownCommand"})}version($,z,G){if($===void 0)return this._version;this._version=$,z=z||"-V, --version",G=G||"output the version number";let J=this.createOption(z,G);return this._versionOptionName=J.attributeName(),this._registerOption(J),this.on("option:"+J.name(),()=>{this._outputConfiguration.writeOut(`${$}
|
|
25
25
|
`),this._exit(0,"commander.version",$)}),this}description($,z){if($===void 0&&z===void 0)return this._description;if(this._description=$,z)this._argsDescription=z;return this}summary($){if($===void 0)return this._summary;return this._summary=$,this}alias($){if($===void 0)return this._aliases[0];let z=this;if(this.commands.length!==0&&this.commands[this.commands.length-1]._executableHandler)z=this.commands[this.commands.length-1];if($===z._name)throw Error("Command alias can't be the same as its name");let G=this.parent?._findCommand($);if(G){let J=[G.name()].concat(G.aliases()).join("|");throw Error(`cannot add alias '${$}' to command '${this.name()}' as already have command '${J}'`)}return z._aliases.push($),this}aliases($){if($===void 0)return this._aliases;return $.forEach((z)=>this.alias(z)),this}usage($){if($===void 0){if(this._usage)return this._usage;let z=this.registeredArguments.map((G)=>{return IX5(G)});return[].concat(this.options.length||this._helpOption!==null?"[options]":[],this.commands.length?"[command]":[],this.registeredArguments.length?z:[]).join(" ")}return this._usage=$,this}name($){if($===void 0)return this._name;return this._name=$,this}helpGroup($){if($===void 0)return this._helpGroupHeading??"";return this._helpGroupHeading=$,this}commandsGroup($){if($===void 0)return this._defaultCommandGroup??"";return this._defaultCommandGroup=$,this}optionsGroup($){if($===void 0)return this._defaultOptionGroup??"";return this._defaultOptionGroup=$,this}_initOptionGroup($){if(this._defaultOptionGroup&&!$.helpGroupHeading)$.helpGroup(this._defaultOptionGroup)}_initCommandGroup($){if(this._defaultCommandGroup&&!$.helpGroup())$.helpGroup(this._defaultCommandGroup)}nameFromFilename($){return this._name=bz.basename($,bz.extname($)),this}executableDir($){if($===void 0)return this._executableDir;return this._executableDir=$,this}helpInformation($){let z=this.createHelp(),G=this._getOutputContext($);z.prepareContext({error:G.error,helpWidth:G.helpWidth,outputHasColors:G.hasColors});let J=z.formatHelp(this,z);if(G.hasColors)return J;return this._outputConfiguration.stripColor(J)}_getOutputContext($){$=$||{};let z=!!$.error,G,J,Q;if(z)G=(U)=>this._outputConfiguration.writeErr(U),J=this._outputConfiguration.getErrHasColors(),Q=this._outputConfiguration.getErrHelpWidth();else G=(U)=>this._outputConfiguration.writeOut(U),J=this._outputConfiguration.getOutHasColors(),Q=this._outputConfiguration.getOutHelpWidth();return{error:z,write:(U)=>{if(!J)U=this._outputConfiguration.stripColor(U);return G(U)},hasColors:J,helpWidth:Q}}outputHelp($){let z;if(typeof $==="function")z=$,$=void 0;let G=this._getOutputContext($),J={error:G.error,write:G.write,command:this};this._getCommandAndAncestors().reverse().forEach((K)=>K.emit("beforeAllHelp",J)),this.emit("beforeHelp",J);let Q=this.helpInformation({error:G.error});if(z){if(Q=z(Q),typeof Q!=="string"&&!Buffer.isBuffer(Q))throw Error("outputHelp callback must return a string or a Buffer")}if(G.write(Q),this._getHelpOption()?.long)this.emit(this._getHelpOption().long);this.emit("afterHelp",J),this._getCommandAndAncestors().forEach((K)=>K.emit("afterAllHelp",J))}helpOption($,z){if(typeof $==="boolean"){if($){if(this._helpOption===null)this._helpOption=void 0;if(this._defaultOptionGroup)this._initOptionGroup(this._getHelpOption())}else this._helpOption=null;return this}if(this._helpOption=this.createOption($??"-h, --help",z??"display help for command"),$||z)this._initOptionGroup(this._helpOption);return this}_getHelpOption(){if(this._helpOption===void 0)this.helpOption(void 0,void 0);return this._helpOption}addHelpOption($){return this._helpOption=$,this._initOptionGroup($),this}help($){this.outputHelp($);let z=Number(u4.exitCode??0);if(z===0&&$&&typeof $!=="function"&&$.error)z=1;this._exit(z,"commander.help","(outputHelp)")}addHelpText($,z){let G=["beforeAll","before","after","afterAll"];if(!G.includes($))throw Error(`Unexpected value for position to addHelpText.
|
|
26
26
|
Expecting one of '${G.join("', '")}'`);let J=`${$}Help`;return this.on(J,(Q)=>{let K;if(typeof z==="function")K=z({error:Q.error,command:Q.command});else K=z;if(K)Q.write(`${K}
|
|
27
|
-
`)}),this}_outputHelpIfRequested($){let z=this._getHelpOption();if(z&&$.find((J)=>z.is(J)))this.outputHelp(),this._exit(0,"commander.helpDisplayed","(outputHelp)")}}function HU2($){return $.map((z)=>{if(!z.startsWith("--inspect"))return z;let G,J="127.0.0.1",Q="9229",K;if((K=z.match(/^(--inspect(-brk)?)$/))!==null)G=K[1];else if((K=z.match(/^(--inspect(-brk|-port)?)=([^:]+)$/))!==null)if(G=K[1],/^\d+$/.test(K[3]))Q=K[3];else J=K[3];else if((K=z.match(/^(--inspect(-brk|-port)?)=([^:]+):(\d+)$/))!==null)G=K[1],J=K[3],Q=K[4];if(G&&Q!=="0")return`${G}=${J}:${parseInt(Q)+1}`;return z})}function zh(){if(u4.env.NO_COLOR||u4.env.FORCE_COLOR==="0"||u4.env.FORCE_COLOR==="false")return!1;if(u4.env.FORCE_COLOR||u4.env.CLICOLOR_FORCE!==void 0)return!0;return}EX5.Command=Gh;EX5.useColor=zh});var AU2=P((bX5)=>{var{Argument:FU2}=NI(),{Command:Jh}=qU2(),{CommanderError:CX5,InvalidArgumentError:kU2}=Xq(),{Help:TX5}=sg(),{Option:NU2}=tg();bX5.program=new Jh;bX5.createCommand=($)=>new Jh($);bX5.createOption=($,z)=>new NU2($,z);bX5.createArgument=($,z)=>new FU2($,z);bX5.Command=Jh;bX5.Option=NU2;bX5.Argument=FU2;bX5.Help=TX5;bX5.CommanderError=CX5;bX5.InvalidArgumentError=kU2;bX5.InvalidOptionArgumentError=kU2});var jU2,Lg4,Hg4,qg4,Fg4,kg4,Ng4,Ag4,jI,jg4,Mg4,Og4;var Qh=N(()=>{jU2=w2(AU2(),1),{program:Lg4,createCommand:Hg4,createArgument:qg4,createOption:Fg4,CommanderError:kg4,InvalidArgumentError:Ng4,InvalidOptionArgumentError:Ag4,Command:jI,Argument:jg4,Option:Mg4,Help:Og4}=jU2.default});var MI;var Kh=N(()=>{MI={name:"oh-my-agent",version:"8.52.9",description:"Portable multi-agent harness for .agents-based skills and workflows across Antigravity, Claude Code, Codex, OpenCode, and more",type:"module",bin:{"oh-my-agent":"./bin/cli.js",oma:"./bin/cli.js"},files:["bin"],keywords:["oh-my-agent","antigravity",".agents","agent","skills","agent-skills","multi-agent","orchestrator","claude","claude-code","codex","opencode","copilot","cursor","chatgpt","pm","frontend","backend","mobile","qa","debug","terraform","database","workflow","bug-fixing","gemini"],author:"our.first.fluke <our.first.fluke@gmail.com>",contributors:["gracefullight <gracefullight.dev@gmail.com>","gahyun-git <go4it.gh@gmail.com>"],license:"MIT",funding:[{type:"github",url:"https://github.com/sponsors/first-fluke"},{type:"buymeacoffee",url:"https://buymeacoffee.com/firstfluke"}],scripts:{"sync:readme":"node ./scripts/sync-readme.mjs","generate:skill-data":"node ./scripts/generate-skill-data.mjs",build:"bun run generate:skill-data && bun run sync:readme && bun build cli.ts --outfile bin/cli.js --target node --minify --external @napi-rs/keyring",dev:"bun run generate:skill-data && bun run cli.ts",lint:"biome check .","lint:fix":"biome check --write --unsafe .","check:boundaries":"node ./scripts/check-boundaries.mjs",test:"vitest run","test:coverage":"vitest run --coverage",prepublishOnly:"bun run build"},dependencies:{"@clack/prompts":"^1.1.0","@date-fns/tz":"^1.4.1","@napi-rs/keyring":"^1.3.0",axios:"^1.15.0","better-sqlite3":"^12.9.0",chokidar:"^5.0.0",commander:"^14.0.3","date-fns":"^4.2.1",eld:"^2.0.3","fast-xml-parser":"^5",minimatch:"^10.2.5","p-map":"^7.0.4",picocolors:"^1.1.1","puppeteer-core":"^24",remark:"^15.0.1","remark-frontmatter":"^5.0.0","remark-parse":"^11.0.0","smol-toml":"^1.6.1",unified:"^11.0.5",ws:"^8.18.0",yaml:"^2.8.2",zod:"^4.3.6"},optionalDependencies:{pptxgenjs:"^3.12.0"},devDependencies:{"@biomejs/biome":"^2.4.15","@types/better-sqlite3":"^7.6.13","@types/mdast":"^4.0.4","@types/node":"^24","@types/ws":"^8.18.1","@vitest/coverage-v8":"^4.1.4",typescript:"^6",vitest:"^4.0.18"},repository:{type:"git",url:"https://github.com/first-fluke/oh-my-agent"},antigravity:{skillsPath:".agents/skills",skills:["oma-architecture","oma-brainstorm","oma-coordination","oma-pm","oma-frontend","oma-backend","oma-db","oma-mobile","oma-qa","oma-debug","oma-orchestrator","oma-dev-workflow","oma-tf-infra","oma-scm","oma-pdf","oma-recap"]}}});import*as LY from"node:fs";import{homedir as dX5}from"node:os";import*as Lq from"node:path";function OU2($){if(OI)throw Error("install context already set in this process");OI=$}function IU2(){if(OI===null)throw Error("install context not set — entry point must call setInstallContext()");return OI}function HY(){return IU2().installRoot}function j7(){return IU2().mode}function RU2($){let z=process.env.OMA_HOME,G=$.global===!0||process.env.OMA_INSTALL_GLOBAL==="1";if(z!==void 0&&z!=="")return pX5(z),{installRoot:z,mode:G?"global":"project"};if(G)return{installRoot:dX5(),mode:"global"};return{installRoot:process.cwd(),mode:"project"}}function pX5($){if(!Lq.isAbsolute($))throw Error("OMA_HOME must be absolute path");for(let G of MU2)if($===G||$.startsWith(G+Lq.sep))throw Error(`OMA_HOME=${$} is forbidden (system path ${G})`);let z;try{z=LY.realpathSync($)}catch(G){let J=G instanceof Error?G.message:String(G);throw Error(`OMA_HOME=${$}: ${J}`)}for(let G of MU2)if(z===G||z.startsWith(G+Lq.sep))throw Error(`OMA_HOME=${z} is forbidden (system path ${G})`);try{LY.accessSync(z,LY.constants.W_OK)}catch{throw Error(`OMA_HOME=${z} is not writable`)}}var OI=null,MU2;var VJ=N(()=>{MU2=["/etc","/usr","/bin","/boot","/sys","/proc"]});import{join as nX5}from"node:path";function Hq($){return $.endsWith("/")?$:`${$}/`}function M7($,z){let G=z.split("/").filter((J)=>J.length>0);return nX5($,...G)}var X0=".agents",II,O3,XJ,DU2,vU2,RI,aX5=".antigravitycli",EU2,oX5=".migration-backup",rX5,sX5,tX5,eX5,$L5,Uh;var I3=N(()=>{II=`${X0}/skills`,O3=`${X0}/results`,XJ=`${X0}/state`,DU2=`${XJ}/sessions`,vU2=`${XJ}/retry`,RI=`${XJ}/archive`,EU2=`${X0}/backup`;rX5=Hq(O3),sX5=Hq(XJ),tX5=Hq(aX5),eX5=Hq(EU2),$L5=Hq(oX5),Uh=[tX5,rX5,sX5,eX5,$L5]});var y1="first-fluke/oh-my-agent",t4,_z,DI,zL5,Sz,o1;var xz=N(()=>{I3();t4=II,_z=["antigravity","claude","codex","commandcode","cursor","gemini","grok","kiro","qwen"],DI=["pi"],zL5=["copilot","hermes"],Sz=[..._z,...zL5].sort(),o1={antigravity:{projectPath:".gemini/antigravity-cli/skills",homePath:".gemini/antigravity-cli/skills",requiresHomeConsent:!0},claude:{projectPath:".claude/skills",homePath:".claude/skills"},codex:{projectPath:".codex/skills",homePath:".codex/skills"},commandcode:{projectPath:".commandcode/skills",homePath:".commandcode/skills",optIn:!0},copilot:{projectPath:".github/skills",homePath:".copilot/skills"},cursor:{projectPath:".cursor/skills",homePath:".cursor/skills"},gemini:{projectPath:".gemini/skills",homePath:".gemini/skills"},hermes:{projectPath:".hermes/skills/oma",homePath:".hermes/skills/oma",requiresHomeConsent:!0},kiro:{projectPath:".kiro/skills",homePath:".kiro/skills",optIn:!0},qwen:{projectPath:".qwen/skills",homePath:".qwen/skills"}}});var SU2={};K5(SU2,{runAction:()=>d2,resolveJsonMode:()=>R5,printDescribe:()=>HL5,addOutputOptions:()=>D5});function D5($,z="Output as JSON"){return $.option("--json",z).option("--output <format>","Output format (text/json)",(G)=>{let J=G.trim().toLowerCase();if(!qq.includes(J))throw Error(`Invalid output format: ${G}. Expected one of ${qq.join(", ")}`);return J})}function GL5($){if($?.json)return"json";let z=$?.output?.trim().toLowerCase();if(z&&qq.includes(z))return z;if(process.env[CU2]?.trim().toLowerCase()==="json")return"json";return"text"}function R5($){return GL5($)==="json"}function TU2($){let z=$.at(-1);return z instanceof jI?z:null}function JL5($){let z=TU2($);if(z)return z.opts();let G=$.at(-1);return G&&typeof G==="object"?G:{}}function QL5($){if($ instanceof Error)return $.message;return String($)}function LJ($){throw Error($)}function Wh($,z){for(let G of $){let J=G.charCodeAt(0);if(J>=0&&J<=31||J===127)LJ(`${z} must not contain control characters`)}}function KL5($,z){if(Wh($,z),/[?#%]/.test($))LJ(`${z} must not contain ?, #, or %`);if($.includes(".."))LJ(`${z} must not contain '..'`)}function UL5($,z){Wh($,z);try{new URL($)}catch{LJ(`${z} must be a valid absolute URL`)}}function Zh($,z,G="text"){if(typeof $==="string"){if(G==="identifier"){KL5($,z);return}if(G==="url"){UL5($,z);return}Wh($,z);return}if(Array.isArray($))for(let[J,Q]of $.entries())Zh(Q,`${z}[${J}]`,G)}function PU2($){let z=$.toLowerCase();if(z==="url"||z.endsWith("url"))return"url";if(z.includes("id")||z.includes("type")||z.includes("vendor")||z.includes("session"))return"identifier";return"text"}function ZL5($){let z=$.vendor;if(typeof z==="string"){if(z.split(",").map((K)=>K.trim()).filter(Boolean).filter((K)=>!Sz.includes(K)).length>0)LJ(`vendor must be one of ${Sz.join(", ")}`)}let G=$.output;if(typeof G==="string"&&!qq.includes(G))LJ(`output must be one of ${qq.join(", ")}`)}function WL5($){let z=$.processedArgs??$.args??[];($.registeredArguments??[]).forEach((Q,K)=>{let U=Q.name?.()||String(K),Z=z[K];if(Zh(Z,U,PU2(U)),U==="agent-type"&&typeof Z==="string"&&!wU2.includes(Z))LJ(`agent-type must be one of ${wU2.join(", ")}`)});let J=$.opts();ZL5(J);for(let[Q,K]of Object.entries(J))Zh(K,Q,PU2(Q))}function YL5($){return($.registeredArguments??[]).map((z)=>({name:z.name?.()||"",required:!!z.required,variadic:!!z.variadic}))}function BL5($){return $.options.map((z)=>({flags:z.flags,long:z.long||void 0,short:z.short||void 0,description:z.description||"",required:!!z.required||!!z.mandatory,optional:!!z.optional,defaultValue:z.defaultValue}))}function bU2($){let z=[],G=$;while(G?.parent)z.unshift(G.name()),G=G.parent;return z.join(" ")}function VL5($){return $.options.some((z)=>z.long==="--json"||z.long==="--output")}function XL5($){return $.options.some((z)=>z.long==="--dry-run")}function _U2($){return{name:$.name(),path:bU2($),summary:$.summary()||void 0,description:$.description(),arguments:YL5($),options:BL5($),supportsJsonOutput:VL5($),supportsDryRun:XL5($),subcommands:$.commands.map((z)=>_U2(z))}}function LL5($,z){if(!z?.trim())return $;let G=z.trim(),J=[...$.commands];while(J.length>0){let Q=J.shift();if(!Q)continue;if(Q.name()===G||bU2(Q)===G)return Q;J.push(...Q.commands)}return null}function HL5($,z){let G=LL5($,z);if(!G)LJ(`Unknown command: ${z}`);let J={name:$.name(),version:$.version(),description:$.description(),env:{[CU2]:"Set to json to force machine-readable output on commands that support it."},command:_U2(G)};console.log(JSON.stringify(J,null,2))}function d2($,z={}){return async(...G)=>{let J=TU2(G);if(J&&G.length>=2)G[G.length-2]=J.optsWithGlobals();let Q=JL5(G);try{if(J)WL5(J);await $(...G)}catch(K){let U=QL5(K);if(z.supportsJsonOutput&&R5(Q))console.log(JSON.stringify({error:U},null,2));else console.error(U);process.exitCode=1}}}var CU2="OH_MY_AG_OUTPUT_FORMAT",qq,wU2;var z1=N(()=>{Qh();xz();qq=["text","json"],wU2=["backend","frontend","mobile","qa","debug","pm"]});var xU2,uU2=($)=>{return $===12288||$>=65281&&$<=65376||$>=65504&&$<=65510},yU2=($)=>{return $===8987||$===9001||$>=12272&&$<=12287||$>=12289&&$<=12350||$>=12441&&$<=12543||$>=12549&&$<=12591||$>=12593&&$<=12686||$>=12688&&$<=12771||$>=12783&&$<=12830||$>=12832&&$<=12871||$>=12880&&$<=19903||$>=65040&&$<=65049||$>=65072&&$<=65106||$>=65108&&$<=65126||$>=65128&&$<=65131||$>=127488&&$<=127490||$>=127504&&$<=127547||$>=127552&&$<=127560||$>=131072&&$<=196605||$>=196608&&$<=262141};var gU2=N(()=>{xU2=(()=>{let $=/[\uD800-\uDBFF][\uDC00-\uDFFF]/g;return(z)=>{let G=0;$.lastIndex=0;while($.test(z))G+=1;return z.length-G}})()});var qL5,FL5,hU2,kL5,fU2,NL5,AL5,jL5,mU2=($,z={},G={})=>{let J=z.limit??1/0,Q=z.ellipsis??"",K=z?.ellipsisWidth??(Q?mU2(Q,jL5,G).width:0),U=0,Z=G.controlWidth??0,Y=G.tabWidth??8,W=G.emojiWidth??2,B=2,V=G.regularWidth??1,L=G.wideWidth??2,X=[[NL5,V],[qL5,0],[FL5,Z],[kL5,Y],[fU2,W],[hU2,L]],H=0,q=0,F=$.length,k=0,A=!1,j=F,M=Math.max(0,J-K),O=0,D=0,R=0,I=0;$:while(!0){if(D>O||q>=F&&q>H){let E=$.slice(O,D)||$.slice(H,q);k=0;for(let b of E.replaceAll(AL5,"")){let _=b.codePointAt(0)||0;if(uU2(_))I=2;else if(yU2(_))I=L;else I=V;if(R+I>M)j=Math.min(j,Math.max(O,H)+k);if(R+I>J){A=!0;break $}k+=b.length,R+=I}O=D=0}if(q>=F)break $;for(let E=0,b=X.length;E<b;E++){let[_,h]=X[E];if(_.lastIndex=q,_.test($)){if(k=_===hU2?xU2($.slice(q,_.lastIndex)):_===fU2?1:_.lastIndex-q,I=k*h,R+I>M)j=Math.min(j,q+Math.floor((M-R)/h));if(R+I>J){A=!0;break $}R+=I,O=H,D=q,q=H=_.lastIndex;continue $}}q+=1}return{width:A?M:R,index:A?j:F,truncated:A,ellipsed:A&&J>=K}},iU2;var cU2=N(()=>{gU2();qL5=/[\u001b\u009b][[()#;?]*(?:[0-9]{1,4}(?:;[0-9]{0,4})*)?[0-9A-ORZcf-nqry=><]|\u001b\]8;[^;]*;.*?(?:\u0007|\u001b\u005c)/y,FL5=/[\x00-\x08\x0A-\x1F\x7F-\x9F]{1,1000}/y,hU2=/(?:(?![\uFF61-\uFF9F\uFF00-\uFFEF])[\p{Script=Han}\p{Script=Hiragana}\p{Script=Katakana}\p{Script=Hangul}\p{Script=Tangut}]){1,1000}/yu,kL5=/\t{1,1000}/y,fU2=/[\u{1F1E6}-\u{1F1FF}]{2}|\u{1F3F4}[\u{E0061}-\u{E007A}]{2}[\u{E0030}-\u{E0039}\u{E0061}-\u{E007A}]{1,3}\u{E007F}|(?:\p{Emoji}\uFE0F\u20E3?|\p{Emoji_Modifier_Base}\p{Emoji_Modifier}?|\p{Emoji_Presentation})(?:\u200D(?:\p{Emoji_Modifier_Base}\p{Emoji_Modifier}?|\p{Emoji_Presentation}|\p{Emoji}\uFE0F\u20E3?))*/yu,NL5=/(?:[\x20-\x7E\xA0-\xFF](?!\uFE0F)){1,1000}/y,AL5=/\p{M}+/gu,jL5={limit:1/0,ellipsis:""},iU2=mU2});var ML5,OL5=($,z={})=>{return iU2($,ML5,z).width},M6;var Yh=N(()=>{cU2();ML5={limit:1/0,ellipsis:"",ellipsisWidth:0},M6=OL5});function L$($,z,G){return String($).normalize().split(EL5).map((J)=>vL5(J,z,G)).join(`
|
|
27
|
+
`)}),this}_outputHelpIfRequested($){let z=this._getHelpOption();if(z&&$.find((J)=>z.is(J)))this.outputHelp(),this._exit(0,"commander.helpDisplayed","(outputHelp)")}}function HU2($){return $.map((z)=>{if(!z.startsWith("--inspect"))return z;let G,J="127.0.0.1",Q="9229",K;if((K=z.match(/^(--inspect(-brk)?)$/))!==null)G=K[1];else if((K=z.match(/^(--inspect(-brk|-port)?)=([^:]+)$/))!==null)if(G=K[1],/^\d+$/.test(K[3]))Q=K[3];else J=K[3];else if((K=z.match(/^(--inspect(-brk|-port)?)=([^:]+):(\d+)$/))!==null)G=K[1],J=K[3],Q=K[4];if(G&&Q!=="0")return`${G}=${J}:${parseInt(Q)+1}`;return z})}function zh(){if(u4.env.NO_COLOR||u4.env.FORCE_COLOR==="0"||u4.env.FORCE_COLOR==="false")return!1;if(u4.env.FORCE_COLOR||u4.env.CLICOLOR_FORCE!==void 0)return!0;return}EX5.Command=Gh;EX5.useColor=zh});var AU2=P((bX5)=>{var{Argument:FU2}=NI(),{Command:Jh}=qU2(),{CommanderError:CX5,InvalidArgumentError:kU2}=Xq(),{Help:TX5}=sg(),{Option:NU2}=tg();bX5.program=new Jh;bX5.createCommand=($)=>new Jh($);bX5.createOption=($,z)=>new NU2($,z);bX5.createArgument=($,z)=>new FU2($,z);bX5.Command=Jh;bX5.Option=NU2;bX5.Argument=FU2;bX5.Help=TX5;bX5.CommanderError=CX5;bX5.InvalidArgumentError=kU2;bX5.InvalidOptionArgumentError=kU2});var jU2,Lg4,Hg4,qg4,Fg4,kg4,Ng4,Ag4,jI,jg4,Mg4,Og4;var Qh=N(()=>{jU2=w2(AU2(),1),{program:Lg4,createCommand:Hg4,createArgument:qg4,createOption:Fg4,CommanderError:kg4,InvalidArgumentError:Ng4,InvalidOptionArgumentError:Ag4,Command:jI,Argument:jg4,Option:Mg4,Help:Og4}=jU2.default});var MI;var Kh=N(()=>{MI={name:"oh-my-agent",version:"8.53.0",description:"Portable multi-agent harness for .agents-based skills and workflows across Antigravity, Claude Code, Codex, OpenCode, and more",type:"module",bin:{"oh-my-agent":"./bin/cli.js",oma:"./bin/cli.js"},files:["bin"],keywords:["oh-my-agent","antigravity",".agents","agent","skills","agent-skills","multi-agent","orchestrator","claude","claude-code","codex","opencode","copilot","cursor","chatgpt","pm","frontend","backend","mobile","qa","debug","terraform","database","workflow","bug-fixing","gemini"],author:"our.first.fluke <our.first.fluke@gmail.com>",contributors:["gracefullight <gracefullight.dev@gmail.com>","gahyun-git <go4it.gh@gmail.com>"],license:"MIT",funding:[{type:"github",url:"https://github.com/sponsors/first-fluke"},{type:"buymeacoffee",url:"https://buymeacoffee.com/firstfluke"}],scripts:{"sync:readme":"node ./scripts/sync-readme.mjs","generate:skill-data":"node ./scripts/generate-skill-data.mjs",build:"bun run generate:skill-data && bun run sync:readme && bun build cli.ts --outfile bin/cli.js --target node --minify --external @napi-rs/keyring",dev:"bun run generate:skill-data && bun run cli.ts",lint:"biome check .","lint:fix":"biome check --write --unsafe .","check:boundaries":"node ./scripts/check-boundaries.mjs",test:"vitest run","test:coverage":"vitest run --coverage",prepublishOnly:"bun run build"},dependencies:{"@clack/prompts":"^1.1.0","@date-fns/tz":"^1.4.1","@napi-rs/keyring":"^1.3.0",axios:"^1.15.0","better-sqlite3":"^12.9.0",chokidar:"^5.0.0",commander:"^14.0.3","date-fns":"^4.2.1",eld:"^2.0.3","fast-xml-parser":"^5",minimatch:"^10.2.5","p-map":"^7.0.4",picocolors:"^1.1.1","puppeteer-core":"^24",remark:"^15.0.1","remark-frontmatter":"^5.0.0","remark-parse":"^11.0.0","smol-toml":"^1.6.1",unified:"^11.0.5",ws:"^8.18.0",yaml:"^2.8.2",zod:"^4.3.6"},optionalDependencies:{pptxgenjs:"^3.12.0"},devDependencies:{"@biomejs/biome":"^2.4.15","@types/better-sqlite3":"^7.6.13","@types/mdast":"^4.0.4","@types/node":"^24","@types/ws":"^8.18.1","@vitest/coverage-v8":"^4.1.4",typescript:"^6",vitest:"^4.0.18"},repository:{type:"git",url:"https://github.com/first-fluke/oh-my-agent"},antigravity:{skillsPath:".agents/skills",skills:["oma-architecture","oma-brainstorm","oma-coordination","oma-pm","oma-frontend","oma-backend","oma-db","oma-mobile","oma-qa","oma-debug","oma-orchestrator","oma-dev-workflow","oma-tf-infra","oma-scm","oma-pdf","oma-recap"]}}});import*as LY from"node:fs";import{homedir as dX5}from"node:os";import*as Lq from"node:path";function OU2($){if(OI)throw Error("install context already set in this process");OI=$}function IU2(){if(OI===null)throw Error("install context not set — entry point must call setInstallContext()");return OI}function HY(){return IU2().installRoot}function j7(){return IU2().mode}function RU2($){let z=process.env.OMA_HOME,G=$.global===!0||process.env.OMA_INSTALL_GLOBAL==="1";if(z!==void 0&&z!=="")return pX5(z),{installRoot:z,mode:G?"global":"project"};if(G)return{installRoot:dX5(),mode:"global"};return{installRoot:process.cwd(),mode:"project"}}function pX5($){if(!Lq.isAbsolute($))throw Error("OMA_HOME must be absolute path");for(let G of MU2)if($===G||$.startsWith(G+Lq.sep))throw Error(`OMA_HOME=${$} is forbidden (system path ${G})`);let z;try{z=LY.realpathSync($)}catch(G){let J=G instanceof Error?G.message:String(G);throw Error(`OMA_HOME=${$}: ${J}`)}for(let G of MU2)if(z===G||z.startsWith(G+Lq.sep))throw Error(`OMA_HOME=${z} is forbidden (system path ${G})`);try{LY.accessSync(z,LY.constants.W_OK)}catch{throw Error(`OMA_HOME=${z} is not writable`)}}var OI=null,MU2;var VJ=N(()=>{MU2=["/etc","/usr","/bin","/boot","/sys","/proc"]});import{join as nX5}from"node:path";function Hq($){return $.endsWith("/")?$:`${$}/`}function M7($,z){let G=z.split("/").filter((J)=>J.length>0);return nX5($,...G)}var X0=".agents",II,O3,XJ,DU2,vU2,RI,aX5=".antigravitycli",EU2,oX5=".migration-backup",rX5,sX5,tX5,eX5,$L5,Uh;var I3=N(()=>{II=`${X0}/skills`,O3=`${X0}/results`,XJ=`${X0}/state`,DU2=`${XJ}/sessions`,vU2=`${XJ}/retry`,RI=`${XJ}/archive`,EU2=`${X0}/backup`;rX5=Hq(O3),sX5=Hq(XJ),tX5=Hq(aX5),eX5=Hq(EU2),$L5=Hq(oX5),Uh=[tX5,rX5,sX5,eX5,$L5]});var y1="first-fluke/oh-my-agent",t4,_z,DI,zL5,Sz,o1;var xz=N(()=>{I3();t4=II,_z=["antigravity","claude","codex","commandcode","cursor","gemini","grok","kiro","qwen"],DI=["pi"],zL5=["copilot","hermes"],Sz=[..._z,...zL5].sort(),o1={antigravity:{projectPath:".gemini/antigravity-cli/skills",homePath:".gemini/antigravity-cli/skills",requiresHomeConsent:!0},claude:{projectPath:".claude/skills",homePath:".claude/skills"},codex:{projectPath:".codex/skills",homePath:".codex/skills"},commandcode:{projectPath:".commandcode/skills",homePath:".commandcode/skills",optIn:!0},copilot:{projectPath:".github/skills",homePath:".copilot/skills"},cursor:{projectPath:".cursor/skills",homePath:".cursor/skills"},gemini:{projectPath:".gemini/skills",homePath:".gemini/skills"},hermes:{projectPath:".hermes/skills/oma",homePath:".hermes/skills/oma",requiresHomeConsent:!0},kiro:{projectPath:".kiro/skills",homePath:".kiro/skills",optIn:!0},qwen:{projectPath:".qwen/skills",homePath:".qwen/skills"}}});var SU2={};K5(SU2,{runAction:()=>d2,resolveJsonMode:()=>R5,printDescribe:()=>HL5,addOutputOptions:()=>D5});function D5($,z="Output as JSON"){return $.option("--json",z).option("--output <format>","Output format (text/json)",(G)=>{let J=G.trim().toLowerCase();if(!qq.includes(J))throw Error(`Invalid output format: ${G}. Expected one of ${qq.join(", ")}`);return J})}function GL5($){if($?.json)return"json";let z=$?.output?.trim().toLowerCase();if(z&&qq.includes(z))return z;if(process.env[CU2]?.trim().toLowerCase()==="json")return"json";return"text"}function R5($){return GL5($)==="json"}function TU2($){let z=$.at(-1);return z instanceof jI?z:null}function JL5($){let z=TU2($);if(z)return z.opts();let G=$.at(-1);return G&&typeof G==="object"?G:{}}function QL5($){if($ instanceof Error)return $.message;return String($)}function LJ($){throw Error($)}function Wh($,z){for(let G of $){let J=G.charCodeAt(0);if(J>=0&&J<=31||J===127)LJ(`${z} must not contain control characters`)}}function KL5($,z){if(Wh($,z),/[?#%]/.test($))LJ(`${z} must not contain ?, #, or %`);if($.includes(".."))LJ(`${z} must not contain '..'`)}function UL5($,z){Wh($,z);try{new URL($)}catch{LJ(`${z} must be a valid absolute URL`)}}function Zh($,z,G="text"){if(typeof $==="string"){if(G==="identifier"){KL5($,z);return}if(G==="url"){UL5($,z);return}Wh($,z);return}if(Array.isArray($))for(let[J,Q]of $.entries())Zh(Q,`${z}[${J}]`,G)}function PU2($){let z=$.toLowerCase();if(z==="url"||z.endsWith("url"))return"url";if(z.includes("id")||z.includes("type")||z.includes("vendor")||z.includes("session"))return"identifier";return"text"}function ZL5($){let z=$.vendor;if(typeof z==="string"){if(z.split(",").map((K)=>K.trim()).filter(Boolean).filter((K)=>!Sz.includes(K)).length>0)LJ(`vendor must be one of ${Sz.join(", ")}`)}let G=$.output;if(typeof G==="string"&&!qq.includes(G))LJ(`output must be one of ${qq.join(", ")}`)}function WL5($){let z=$.processedArgs??$.args??[];($.registeredArguments??[]).forEach((Q,K)=>{let U=Q.name?.()||String(K),Z=z[K];if(Zh(Z,U,PU2(U)),U==="agent-type"&&typeof Z==="string"&&!wU2.includes(Z))LJ(`agent-type must be one of ${wU2.join(", ")}`)});let J=$.opts();ZL5(J);for(let[Q,K]of Object.entries(J))Zh(K,Q,PU2(Q))}function YL5($){return($.registeredArguments??[]).map((z)=>({name:z.name?.()||"",required:!!z.required,variadic:!!z.variadic}))}function BL5($){return $.options.map((z)=>({flags:z.flags,long:z.long||void 0,short:z.short||void 0,description:z.description||"",required:!!z.required||!!z.mandatory,optional:!!z.optional,defaultValue:z.defaultValue}))}function bU2($){let z=[],G=$;while(G?.parent)z.unshift(G.name()),G=G.parent;return z.join(" ")}function VL5($){return $.options.some((z)=>z.long==="--json"||z.long==="--output")}function XL5($){return $.options.some((z)=>z.long==="--dry-run")}function _U2($){return{name:$.name(),path:bU2($),summary:$.summary()||void 0,description:$.description(),arguments:YL5($),options:BL5($),supportsJsonOutput:VL5($),supportsDryRun:XL5($),subcommands:$.commands.map((z)=>_U2(z))}}function LL5($,z){if(!z?.trim())return $;let G=z.trim(),J=[...$.commands];while(J.length>0){let Q=J.shift();if(!Q)continue;if(Q.name()===G||bU2(Q)===G)return Q;J.push(...Q.commands)}return null}function HL5($,z){let G=LL5($,z);if(!G)LJ(`Unknown command: ${z}`);let J={name:$.name(),version:$.version(),description:$.description(),env:{[CU2]:"Set to json to force machine-readable output on commands that support it."},command:_U2(G)};console.log(JSON.stringify(J,null,2))}function d2($,z={}){return async(...G)=>{let J=TU2(G);if(J&&G.length>=2)G[G.length-2]=J.optsWithGlobals();let Q=JL5(G);try{if(J)WL5(J);await $(...G)}catch(K){let U=QL5(K);if(z.supportsJsonOutput&&R5(Q))console.log(JSON.stringify({error:U},null,2));else console.error(U);process.exitCode=1}}}var CU2="OH_MY_AG_OUTPUT_FORMAT",qq,wU2;var z1=N(()=>{Qh();xz();qq=["text","json"],wU2=["backend","frontend","mobile","qa","debug","pm"]});var xU2,uU2=($)=>{return $===12288||$>=65281&&$<=65376||$>=65504&&$<=65510},yU2=($)=>{return $===8987||$===9001||$>=12272&&$<=12287||$>=12289&&$<=12350||$>=12441&&$<=12543||$>=12549&&$<=12591||$>=12593&&$<=12686||$>=12688&&$<=12771||$>=12783&&$<=12830||$>=12832&&$<=12871||$>=12880&&$<=19903||$>=65040&&$<=65049||$>=65072&&$<=65106||$>=65108&&$<=65126||$>=65128&&$<=65131||$>=127488&&$<=127490||$>=127504&&$<=127547||$>=127552&&$<=127560||$>=131072&&$<=196605||$>=196608&&$<=262141};var gU2=N(()=>{xU2=(()=>{let $=/[\uD800-\uDBFF][\uDC00-\uDFFF]/g;return(z)=>{let G=0;$.lastIndex=0;while($.test(z))G+=1;return z.length-G}})()});var qL5,FL5,hU2,kL5,fU2,NL5,AL5,jL5,mU2=($,z={},G={})=>{let J=z.limit??1/0,Q=z.ellipsis??"",K=z?.ellipsisWidth??(Q?mU2(Q,jL5,G).width:0),U=0,Z=G.controlWidth??0,Y=G.tabWidth??8,W=G.emojiWidth??2,B=2,V=G.regularWidth??1,L=G.wideWidth??2,X=[[NL5,V],[qL5,0],[FL5,Z],[kL5,Y],[fU2,W],[hU2,L]],H=0,q=0,F=$.length,k=0,A=!1,j=F,M=Math.max(0,J-K),O=0,D=0,R=0,I=0;$:while(!0){if(D>O||q>=F&&q>H){let E=$.slice(O,D)||$.slice(H,q);k=0;for(let b of E.replaceAll(AL5,"")){let _=b.codePointAt(0)||0;if(uU2(_))I=2;else if(yU2(_))I=L;else I=V;if(R+I>M)j=Math.min(j,Math.max(O,H)+k);if(R+I>J){A=!0;break $}k+=b.length,R+=I}O=D=0}if(q>=F)break $;for(let E=0,b=X.length;E<b;E++){let[_,h]=X[E];if(_.lastIndex=q,_.test($)){if(k=_===hU2?xU2($.slice(q,_.lastIndex)):_===fU2?1:_.lastIndex-q,I=k*h,R+I>M)j=Math.min(j,q+Math.floor((M-R)/h));if(R+I>J){A=!0;break $}R+=I,O=H,D=q,q=H=_.lastIndex;continue $}}q+=1}return{width:A?M:R,index:A?j:F,truncated:A,ellipsed:A&&J>=K}},iU2;var cU2=N(()=>{gU2();qL5=/[\u001b\u009b][[()#;?]*(?:[0-9]{1,4}(?:;[0-9]{0,4})*)?[0-9A-ORZcf-nqry=><]|\u001b\]8;[^;]*;.*?(?:\u0007|\u001b\u005c)/y,FL5=/[\x00-\x08\x0A-\x1F\x7F-\x9F]{1,1000}/y,hU2=/(?:(?![\uFF61-\uFF9F\uFF00-\uFFEF])[\p{Script=Han}\p{Script=Hiragana}\p{Script=Katakana}\p{Script=Hangul}\p{Script=Tangut}]){1,1000}/yu,kL5=/\t{1,1000}/y,fU2=/[\u{1F1E6}-\u{1F1FF}]{2}|\u{1F3F4}[\u{E0061}-\u{E007A}]{2}[\u{E0030}-\u{E0039}\u{E0061}-\u{E007A}]{1,3}\u{E007F}|(?:\p{Emoji}\uFE0F\u20E3?|\p{Emoji_Modifier_Base}\p{Emoji_Modifier}?|\p{Emoji_Presentation})(?:\u200D(?:\p{Emoji_Modifier_Base}\p{Emoji_Modifier}?|\p{Emoji_Presentation}|\p{Emoji}\uFE0F\u20E3?))*/yu,NL5=/(?:[\x20-\x7E\xA0-\xFF](?!\uFE0F)){1,1000}/y,AL5=/\p{M}+/gu,jL5={limit:1/0,ellipsis:""},iU2=mU2});var ML5,OL5=($,z={})=>{return iU2($,ML5,z).width},M6;var Yh=N(()=>{cU2();ML5={limit:1/0,ellipsis:"",ellipsisWidth:0},M6=OL5});function L$($,z,G){return String($).normalize().split(EL5).map((J)=>vL5(J,z,G)).join(`
|
|
28
28
|
`)}var vI="\x1B",aU2="",IL5=39,Vh="\x07",oU2="[",RL5="]",rU2="m",Xh,lU2,dU2=($)=>{if($>=30&&$<=37)return 39;if($>=90&&$<=97)return 39;if($>=40&&$<=47)return 49;if($>=100&&$<=107)return 49;if($===1||$===2)return 22;if($===3)return 23;if($===4)return 24;if($===7)return 27;if($===8)return 28;if($===9)return 29;if($===0)return 0;return},pU2=($)=>`${vI}${oU2}${$}${rU2}`,nU2=($)=>`${vI}${Xh}${$}${Vh}`,Bh=($,z,G)=>{let J=z[Symbol.iterator](),Q=!1,K=!1,U=$.at(-1),Z=U===void 0?0:M6(U),Y=J.next(),W=J.next(),B=0;while(!Y.done){let V=Y.value,L=M6(V);if(Z+L<=G)$[$.length-1]+=V;else $.push(V),Z=0;if(V===vI||V===aU2)Q=!0,K=z.startsWith(Xh,B+1);if(Q){if(K){if(V===Vh)Q=!1,K=!1}else if(V===rU2)Q=!1}else if(Z+=L,Z===G&&!W.done)$.push(""),Z=0;Y=W,W=J.next(),B+=V.length}if(U=$.at(-1),!Z&&U!==void 0&&U.length&&$.length>1)$[$.length-2]+=$.pop()},DL5=($)=>{let z=$.split(" "),G=z.length;while(G){if(M6(z[G-1]))break;G--}if(G===z.length)return $;return z.slice(0,G).join(" ")+z.slice(G).join("")},vL5=($,z,G={})=>{if(G.trim!==!1&&$.trim()==="")return"";let J="",Q,K,U=$.split(" "),Z=[""],Y=0;for(let V=0;V<U.length;V++){let L=U[V];if(G.trim!==!1){let H=Z.at(-1)??"",q=H.trimStart();if(H.length!==q.length)Z[Z.length-1]=q,Y=M6(q)}if(V!==0){if(Y>=z&&(G.wordWrap===!1||G.trim===!1))Z.push(""),Y=0;if(Y||G.trim===!1)Z[Z.length-1]+=" ",Y++}let X=M6(L);if(G.hard&&X>z){let H=z-Y,q=1+Math.floor((X-H-1)/z);if(Math.floor((X-1)/z)<q)Z.push("");Bh(Z,L,z),Y=M6(Z.at(-1)??"");continue}if(Y+X>z&&Y&&X){if(G.wordWrap===!1&&Y<z){Bh(Z,L,z),Y=M6(Z.at(-1)??"");continue}Z.push(""),Y=0}if(Y+X>z&&G.wordWrap===!1){Bh(Z,L,z),Y=M6(Z.at(-1)??"");continue}Z[Z.length-1]+=L,Y+=X}if(G.trim!==!1)Z=Z.map((V)=>DL5(V));let W=Z.join(`
|
|
29
29
|
`),B=!1;for(let V=0;V<W.length;V++){let L=W[V];if(J+=L,!B){if(B=L>="\uD800"&&L<="\uDBFF",B)continue}else B=!1;if(L===vI||L===aU2){lU2.lastIndex=V+1;let H=lU2.exec(W)?.groups;if(H?.code!==void 0){let q=Number.parseFloat(H.code);Q=q===IL5?void 0:q}else if(H?.uri!==void 0)K=H.uri.length===0?void 0:H.uri}if(W[V+1]===`
|
|
30
30
|
`){if(K)J+=nU2("");let X=Q?dU2(Q):void 0;if(Q&&X)J+=pU2(X)}else if(L===`
|
|
@@ -138,7 +138,7 @@ read_only_memory_patterns: []
|
|
|
138
138
|
line_ending:
|
|
139
139
|
ignored_memory_patterns: []
|
|
140
140
|
ls_specific_settings: {}
|
|
141
|
-
`;var _h=N(()=>{Th=q$(WH5(),".serena","serena_config.yml"),MZ2={"oma-frontend":["typescript"],"oma-mobile":["dart"],"oma-tf-infra":["terraform"]},bh={python:"python",node:"typescript",rust:"rust"}});var D9,RZ2;var DZ2=N(()=>{D9={domain:[{name:"oma-architecture",desc:"Architecture specialist for software/system design, module and service boundaries, tradeoff analysis, and stakeholder synthesis. Uses context-aware methods such as diagnostic routing, design-twice comparison, ATAM-style risk analysis, CBAM-style prioritization, and ADR-style decision records."},{name:"oma-backend",desc:"Backend specialist for APIs, databases, authentication with clean architecture (Repository/Service/Router pattern). Use for API, endpoint, REST, database, server, migration, and auth work."},{name:"oma-db",desc:"Database specialist for SQL, NoSQL, and vector database modeling, schema design, normalization, indexing, transactions, integrity, concurrency control, backup, capacity planning, data standards, anti-pattern review, and compliance-aware database design. Use for database, schema, ERD, table design, document model, vector index design, RAG retrieval architecture, migration, query tuning, glossary, capacity estimation, backup strategy, database anti-pattern remediation work, and ISO 27001, ISO 27002, or ISO 22301-aware database recommendations."},{name:"oma-frontend",desc:"Frontend specialist for React, Next.js, TypeScript with FSD-lite architecture, shadcn/ui, and design system alignment. Use for UI, component, page, layout, CSS, Tailwind, and shadcn work."},{name:"oma-mobile",desc:"Mobile specialist for Flutter, React Native, and Swift native iOS development. Use for mobile app, Flutter, Dart, React Native, Swift, SwiftUI, iOS, Android, Riverpod, swift-openapi-generator, and widget work."}],design:[{name:"oma-design",desc:"AI design specialist skill with DESIGN.md management, anti-pattern enforcement, optional Stitch MCP integration, and component library guidance. Covers typography, color systems, motion design (motion/react, GSAP, Three.js), responsive-first layouts, and accessibility (WCAG 2.2)."}],coordination:[{name:"oma-brainstorm",desc:"Design-first ideation that explores user intent, constraints, and approaches before any planning or implementation. Use for brainstorming, ideation, exploring concepts, and evaluating approaches."},{name:"oma-coordination",desc:"Guide for coordinating PM, Frontend, Backend, Mobile, and QA agents on complex projects via CLI. Use for manual step-by-step coordination and workflow guidance."},{name:"oma-orchestrator",desc:"Automated multi-agent orchestrator that spawns CLI subagents in parallel, coordinates via MCP Memory, and monitors progress. Use for orchestration, parallel execution, and automated multi-agent workflows."},{name:"oma-pm",desc:"Product manager that decomposes requirements into actionable tasks with priorities and dependencies. Use for planning, requirements, specification, scope, prioritization, task breakdown, and ISO 21500, ISO 31000, or ISO 38500-aligned planning recommendations."},{name:"oma-qa",desc:"Quality assurance specialist for security, performance, accessibility, comprehensive testing, and quality standard alignment. Use for test, review, security audit, OWASP, coverage, lint work, and ISO/IEC 25010 or ISO/IEC 29119-aligned QA recommendations."}],utility:[{name:"oma-academic-writer",desc:"Academic writing specialist for publication-grade English prose. Drafts, revises, and audits essays, reports, analysis sections, executive summaries, conclusions, and literature reviews while enforcing sentence-structure variation, high-frequency academic verbs, calibrated hedging, and anti-AI stylistic compliance. USE for academic writing, essay polish, paragraph rewrite, prose revision against any rubric tier (HD/D/C, A/B/C, top-band/mid-band, etc.), anti-AI audit, reverse outlining, claim-evidence mapping, and rubric enforcement on assignments."},{name:"oma-debug",desc:"Bug diagnosis and fixing specialist - analyzes errors, identifies root causes, provides fixes, and writes regression tests. Use for bug, debug, error, crash, traceback, exception, and regression work."},{name:"oma-deepsec",desc:"Drive Vercel's `deepsec` agent-powered vulnerability scanner end-to-end: installing the `.deepsec/` workspace, bootstrapping `INFO.md`, running cost-aware `scan` / `process` / `triage` / `revalidate` / `export` passes, gating PRs with `process --diff`, writing custom matchers, and triaging findings. Use whenever the user mentions deepsec, asks an agent to scan a repo for vulnerabilities, runs into `pnpm deepsec` / `bunx deepsec` commands, wants a CI-based PR security review, sees a `.deepsec/` directory, or asks about `INFO.md` / matchers / `process --diff` / `revalidate`, even when the tool name is not spoken. Deepsec scans are expensive (a single full scan can cost hundreds to tens of thousands of dollars) so the skill exists in part to keep the user from getting surprised."},{name:"oma-docs",desc:"Verify documentation references against the current codebase and propose updates for diff-affected docs. Use to check if docs still match reality (broken file paths, CLI commands, config keys, env vars, scripts) and to surface docs that may need updating after code changes."},{name:"oma-hwp",desc:"Convert HWP / HWPX / HWPML files to Markdown using kordoc. Extracts text, headings, tables, lists, images, footnotes, and hyperlinks. Use for Korean word processor files (Hangul), government documents, and AI-ready data preparation."},{name:"oma-image",desc:"Multi-vendor AI image generation with authentication-aware parallel dispatch. Routes to Codex (gpt-image-2 via ChatGPT OAuth), Antigravity (gemini-2.5-flash-image aka nano-banana via `agy` CLI + Gemini Code Assist), and Pollinations (flux/zimage, free with signup). Use for image generation, image creation, visual asset generation, and AI art."},{name:"oma-market",desc:"Market research skill for pain-point extraction, trend detection, competitor positioning, and discovery across community sources (Reddit, HN, Bluesky, Mastodon, GitHub Issues, web). Routes via oma-search transport, deterministic CLI compute, intent-auto SWOT/Porter's 5F/PESTEL frameworks. Use for market research, pain point analysis, trend detection, competitor research, user complaints, voice-of-customer, 시장조사, 사용자 페인, 트렌드, 경쟁구도."},{name:"oma-pdf",desc:"Convert PDF files to Markdown using opendataloader-pdf. Extracts text, tables, headings, lists, and images with correct reading order. Use for PDF parsing, PDF to Markdown conversion, document extraction, and AI-ready data preparation."},{name:"oma-recap",desc:"Analyze conversation histories from multiple AI tools (Grok, Claude, Codex, Qwen, Cursor, Antigravity) and generate themed daily/period work summaries. Filter by date or time window."},{name:"oma-scholar",desc:"Scholarly research companion using Knows sidecar spec (.knows.yaml). Generates, validates, reviews, queries, and compares structured research-paper sidecars, and fetches them from knows.academy. Use for academic literature search, survey synthesis, paper authoring assistance, and peer review with token-efficient claim/evidence/relation access."},{name:"oma-scm",desc:"SCM (software configuration management) and Git: branching, merges, conflicts, worktrees, baselines, audit readiness, plus Conventional Commits and safe staging."},{name:"oma-search",desc:"Intent-based search router with trust scoring. Routes queries to optimal channels (Context7 docs, native web search, gh/glab code search, Serena local) and attaches domain trust labels. Use for search, find, lookup, reference, docs, code search, and web research."},{name:"oma-skill-creator",desc:"Create or update OMA skills in the SSL-lite human-readable format. Use when adding a new `.agents/skills/{skill-name}/SKILL.md`, converting an existing skill to the standardized Scheduling / Structural Flow / Logical Operations / References structure, or validating whether a skill has enough routing, execution, resource, and safety detail."},{name:"oma-slide",desc:"HTML presentation deck generator and multi-format exporter. Generates distinctive, animation-rich HTML decks at a fixed 1920×1080 stage, then deterministically validates, bundles, and exports them to PDF/PNG/PPTX via the `oma slide` CLI. Use for slide, deck, presentation, slides, pptx, keynote, 슬라이드, 발표자료, プレゼン, 幻灯片 requests. Produces self-contained single-file HTML with keyboard/touch nav, speaker notes, and print-to-PDF support."},{name:"oma-translator",desc:"Context-aware translation that preserves tone, style, and natural word order. Use when translating UI strings, documentation, marketing copy, or any multilingual content. Infers register, domain, and style from the source text and surrounding codebase context."},{name:"oma-video",desc:"Short-form, explainer, and demo video generation via a key-optional 3-tier router. Composes scripts, oma-voice narration, oma-image/oma-slide/stock visuals, key-free captions, and a vendored Remotion compositor into reproducible run directories. Routes three modes — shorts/reels (9:16), explainer (16:9 README/code/data), and demo/walkthrough (screen capture, incl. supervised headed web-app capture of any URL). Use for video, shorts, reels, short-form, demo, explainer, walkthrough, screencast, web capture, video generation, 영상, 숏폼, 쇼츠, 릴스, 데모, 설명 영상."},{name:"oma-voice",desc:"Local-first text-to-speech and speech-to-text via the Voicebox MCP server. Generates speech from cloned or preset voice profiles for agent notifications, content voiceovers, and audio asset creation, and transcribes audio files for meeting notes or memos. Runs entirely on-device with no cloud, no API keys, no per-call cost. Use for voice generation, TTS, STT, transcription, voiceover, narration, dictation, audio asset work."}],infrastructure:[{name:"oma-dev-workflow",desc:"Use when setting up or optimizing developer workflows in a monorepo, managing mise tasks, git hooks, CI/CD pipelines, database migrations, or release automation. Invoke for development environment setup, build automation, testing workflows, and release coordination."},{name:"oma-observability",desc:"Intent-based observability + traceability router across layers, boundaries, and signals. Routes to vendor-specific skills via category taxonomy; owns transport tuning, meta-observability, incident forensics. Use for observability, traceability, telemetry, APM, RUM, metrics, logs, traces, profiles, SLO, incident forensics, tracing architecture work."},{name:"oma-tf-infra",desc:"Infrastructure-as-code specialist for multi-cloud provisioning using Terraform across any provider (AWS, GCP, Azure, Oracle Cloud). Use for terraform plan/apply, state management, compute, databases, storage, networking, IAM, OIDC, cost optimization, policy-as-code, ISO/IEC 42001 AI controls, ISO 22301 continuity, and ISO/IEC/IEEE 42010 architecture documentation."}]},RZ2={fullstack:["oma-architecture","oma-brainstorm","oma-design","oma-frontend","oma-backend","oma-mobile","oma-db","oma-pm","oma-qa","oma-debug","oma-scm","oma-tf-infra","oma-dev-workflow"],"fullstack-web":["oma-architecture","oma-brainstorm","oma-design","oma-frontend","oma-backend","oma-db","oma-pm","oma-qa","oma-debug","oma-scm","oma-dev-workflow"],"fullstack-mobile":["oma-architecture","oma-brainstorm","oma-design","oma-mobile","oma-backend","oma-db","oma-pm","oma-qa","oma-debug","oma-scm","oma-dev-workflow"],frontend:["oma-architecture","oma-brainstorm","oma-design","oma-frontend","oma-pm","oma-qa","oma-debug","oma-scm"],backend:["oma-architecture","oma-brainstorm","oma-backend","oma-db","oma-pm","oma-qa","oma-debug","oma-scm","oma-dev-workflow"],mobile:["oma-architecture","oma-brainstorm","oma-mobile","oma-pm","oma-qa","oma-debug","oma-scm"],devops:["oma-architecture","oma-brainstorm","oma-tf-infra","oma-dev-workflow","oma-observability","oma-pm","oma-qa","oma-debug","oma-scm"],research:["oma-scholar","oma-market","oma-pdf","oma-hwp","oma-academic-writer","oma-search","oma-translator","oma-scm"],content:["oma-design","oma-image","oma-voice","oma-academic-writer","oma-translator","oma-scm"],all:[...D9.domain,...D9.design,...D9.coordination,...D9.utility,...D9.infrastructure].map(($)=>$.name)}});var F$=N(()=>{I3();DZ2();xz()});import*as sK from"node:fs";import{dirname as XH5,join as LH5,parse as HH5,resolve as qH5,sep as vZ2}from"node:path";function v9($){return vZ2==="/"?$:$.split(vZ2).join("/")}function E9($){try{if(!sK.lstatSync($).isDirectory())sK.unlinkSync($)}catch{}}function tK($,z){let G=qH5($),J=HH5(G).root;while(G!==J){let Q=LH5(G,z);if(sK.existsSync(Q))return Q;G=XH5(G)}return null}var t6=()=>{};var I4=P((IH5)=>{var Sh=Symbol.for("yaml.alias"),EZ2=Symbol.for("yaml.document"),gI=Symbol.for("yaml.map"),wZ2=Symbol.for("yaml.pair"),xh=Symbol.for("yaml.scalar"),hI=Symbol.for("yaml.seq"),hz=Symbol.for("yaml.node.type"),FH5=($)=>!!$&&typeof $==="object"&&$[hz]===Sh,kH5=($)=>!!$&&typeof $==="object"&&$[hz]===EZ2,NH5=($)=>!!$&&typeof $==="object"&&$[hz]===gI,AH5=($)=>!!$&&typeof $==="object"&&$[hz]===wZ2,PZ2=($)=>!!$&&typeof $==="object"&&$[hz]===xh,jH5=($)=>!!$&&typeof $==="object"&&$[hz]===hI;function CZ2($){if($&&typeof $==="object")switch($[hz]){case gI:case hI:return!0}return!1}function MH5($){if($&&typeof $==="object")switch($[hz]){case Sh:case gI:case xh:case hI:return!0}return!1}var OH5=($)=>(PZ2($)||CZ2($))&&!!$.anchor;IH5.ALIAS=Sh;IH5.DOC=EZ2;IH5.MAP=gI;IH5.NODE_TYPE=hz;IH5.PAIR=wZ2;IH5.SCALAR=xh;IH5.SEQ=hI;IH5.hasAnchor=OH5;IH5.isAlias=FH5;IH5.isCollection=CZ2;IH5.isDocument=kH5;IH5.isMap=NH5;IH5.isNode=MH5;IH5.isPair=AH5;IH5.isScalar=PZ2;IH5.isSeq=jH5});var Mq=P((fH5)=>{var f3=I4(),e6=Symbol("break visit"),TZ2=Symbol("skip children"),k$=Symbol("remove node");function fI($,z){let G=bZ2(z);if(f3.isDocument($)){if(FY(null,$.contents,G,Object.freeze([$]))===k$)$.contents=null}else FY(null,$,G,Object.freeze([]))}fI.BREAK=e6;fI.SKIP=TZ2;fI.REMOVE=k$;function FY($,z,G,J){let Q=_Z2($,z,G,J);if(f3.isNode(Q)||f3.isPair(Q))return SZ2($,J,Q),FY($,Q,G,J);if(typeof Q!=="symbol"){if(f3.isCollection(z)){J=Object.freeze(J.concat(z));for(let K=0;K<z.items.length;++K){let U=FY(K,z.items[K],G,J);if(typeof U==="number")K=U-1;else if(U===e6)return e6;else if(U===k$)z.items.splice(K,1),K-=1}}else if(f3.isPair(z)){J=Object.freeze(J.concat(z));let K=FY("key",z.key,G,J);if(K===e6)return e6;else if(K===k$)z.key=null;let U=FY("value",z.value,G,J);if(U===e6)return e6;else if(U===k$)z.value=null}}return Q}async function mI($,z){let G=bZ2(z);if(f3.isDocument($)){if(await kY(null,$.contents,G,Object.freeze([$]))===k$)$.contents=null}else await kY(null,$,G,Object.freeze([]))}mI.BREAK=e6;mI.SKIP=TZ2;mI.REMOVE=k$;async function kY($,z,G,J){let Q=await _Z2($,z,G,J);if(f3.isNode(Q)||f3.isPair(Q))return SZ2($,J,Q),kY($,Q,G,J);if(typeof Q!=="symbol"){if(f3.isCollection(z)){J=Object.freeze(J.concat(z));for(let K=0;K<z.items.length;++K){let U=await kY(K,z.items[K],G,J);if(typeof U==="number")K=U-1;else if(U===e6)return e6;else if(U===k$)z.items.splice(K,1),K-=1}}else if(f3.isPair(z)){J=Object.freeze(J.concat(z));let K=await kY("key",z.key,G,J);if(K===e6)return e6;else if(K===k$)z.key=null;let U=await kY("value",z.value,G,J);if(U===e6)return e6;else if(U===k$)z.value=null}}return Q}function bZ2($){if(typeof $==="object"&&($.Collection||$.Node||$.Value))return Object.assign({Alias:$.Node,Map:$.Node,Scalar:$.Node,Seq:$.Node},$.Value&&{Map:$.Value,Scalar:$.Value,Seq:$.Value},$.Collection&&{Map:$.Collection,Seq:$.Collection},$);return $}function _Z2($,z,G,J){if(typeof G==="function")return G($,z,J);if(f3.isMap(z))return G.Map?.($,z,J);if(f3.isSeq(z))return G.Seq?.($,z,J);if(f3.isPair(z))return G.Pair?.($,z,J);if(f3.isScalar(z))return G.Scalar?.($,z,J);if(f3.isAlias(z))return G.Alias?.($,z,J);return}function SZ2($,z,G){let J=z[z.length-1];if(f3.isCollection(J))J.items[$]=G;else if(f3.isPair(J))if($==="key")J.key=G;else J.value=G;else if(f3.isDocument(J))J.contents=G;else{let Q=f3.isAlias(J)?"alias":"scalar";throw Error(`Cannot replace node with ${Q} parent`)}}fH5.visit=fI;fH5.visitAsync=mI});var uh=P((pH5)=>{var xZ2=I4(),cH5=Mq(),lH5={"!":"%21",",":"%2C","[":"%5B","]":"%5D","{":"%7B","}":"%7D"},dH5=($)=>$.replace(/[!,[\]{}]/g,(z)=>lH5[z]);class k8{constructor($,z){this.docStart=null,this.docEnd=!1,this.yaml=Object.assign({},k8.defaultYaml,$),this.tags=Object.assign({},k8.defaultTags,z)}clone(){let $=new k8(this.yaml,this.tags);return $.docStart=this.docStart,$}atDocument(){let $=new k8(this.yaml,this.tags);switch(this.yaml.version){case"1.1":this.atNextDocument=!0;break;case"1.2":this.atNextDocument=!1,this.yaml={explicit:k8.defaultYaml.explicit,version:"1.2"},this.tags=Object.assign({},k8.defaultTags);break}return $}add($,z){if(this.atNextDocument)this.yaml={explicit:k8.defaultYaml.explicit,version:"1.1"},this.tags=Object.assign({},k8.defaultTags),this.atNextDocument=!1;let G=$.trim().split(/[ \t]+/),J=G.shift();switch(J){case"%TAG":{if(G.length!==2){if(z(0,"%TAG directive should contain exactly two parts"),G.length<2)return!1}let[Q,K]=G;return this.tags[Q]=K,!0}case"%YAML":{if(this.yaml.explicit=!0,G.length!==1)return z(0,"%YAML directive should contain exactly one part"),!1;let[Q]=G;if(Q==="1.1"||Q==="1.2")return this.yaml.version=Q,!0;else{let K=/^\d+\.\d+$/.test(Q);return z(6,`Unsupported YAML version ${Q}`,K),!1}}default:return z(0,`Unknown directive ${J}`,!0),!1}}tagName($,z){if($==="!")return"!";if($[0]!=="!")return z(`Not a valid tag: ${$}`),null;if($[1]==="<"){let K=$.slice(2,-1);if(K==="!"||K==="!!")return z(`Verbatim tags aren't resolved, so ${$} is invalid.`),null;if($[$.length-1]!==">")z("Verbatim tags must end with a >");return K}let[,G,J]=$.match(/^(.*!)([^!]*)$/s);if(!J)z(`The ${$} tag has no suffix`);let Q=this.tags[G];if(Q)try{return Q+decodeURIComponent(J)}catch(K){return z(String(K)),null}if(G==="!")return $;return z(`Could not resolve tag: ${$}`),null}tagString($){for(let[z,G]of Object.entries(this.tags))if($.startsWith(G))return z+dH5($.substring(G.length));return $[0]==="!"?$:`!<${$}>`}toString($){let z=this.yaml.explicit?[`%YAML ${this.yaml.version||"1.2"}`]:[],G=Object.entries(this.tags),J;if($&&G.length>0&&xZ2.isNode($.contents)){let Q={};cH5.visit($.contents,(K,U)=>{if(xZ2.isNode(U)&&U.tag)Q[U.tag]=!0}),J=Object.keys(Q)}else J=[];for(let[Q,K]of G){if(Q==="!!"&&K==="tag:yaml.org,2002:")continue;if(!$||J.some((U)=>U.startsWith(K)))z.push(`%TAG ${Q} ${K}`)}return z.join(`
|
|
141
|
+
`;var _h=N(()=>{Th=q$(WH5(),".serena","serena_config.yml"),MZ2={"oma-frontend":["typescript"],"oma-mobile":["dart"],"oma-tf-infra":["terraform"]},bh={python:"python",node:"typescript",rust:"rust"}});var D9,RZ2;var DZ2=N(()=>{D9={domain:[{name:"oma-architecture",desc:"Architecture specialist for software/system design, module and service boundaries, tradeoff analysis, and stakeholder synthesis. Uses context-aware methods such as diagnostic routing, design-twice comparison, ATAM-style risk analysis, CBAM-style prioritization, and ADR-style decision records."},{name:"oma-backend",desc:"Backend specialist for APIs, databases, authentication with clean architecture (Repository/Service/Router pattern). Use for API, endpoint, REST, database, server, migration, and auth work."},{name:"oma-db",desc:"Database specialist for SQL, NoSQL, and vector database modeling, schema design, normalization, indexing, transactions, integrity, concurrency control, backup, capacity planning, data standards, anti-pattern review, and compliance-aware database design. Use for database, schema, ERD, table design, document model, vector index design, RAG retrieval architecture, migration, query tuning, glossary, capacity estimation, backup strategy, database anti-pattern remediation work, and ISO 27001, ISO 27002, or ISO 22301-aware database recommendations."},{name:"oma-frontend",desc:"Frontend specialist for React, Next.js, TypeScript with FSD-lite architecture, shadcn/ui, and design system alignment. Use for UI, component, page, layout, CSS, Tailwind, and shadcn work."},{name:"oma-mobile",desc:"Mobile specialist for Flutter, React Native, and Swift native iOS development. Use for mobile app, Flutter, Dart, React Native, Swift, SwiftUI, iOS, Android, Riverpod, swift-openapi-generator, and widget work."}],design:[{name:"oma-design",desc:"AI design specialist skill with DESIGN.md management, anti-pattern enforcement, optional Stitch MCP integration, and component library guidance. Covers typography, color systems, motion design (motion/react, GSAP, Three.js), responsive-first layouts, and accessibility (WCAG 2.2)."}],coordination:[{name:"oma-brainstorm",desc:"Design-first ideation that explores user intent, constraints, and approaches before any planning or implementation. Use for brainstorming, ideation, exploring concepts, and evaluating approaches."},{name:"oma-coordination",desc:"Guide for coordinating PM, Frontend, Backend, Mobile, and QA agents on complex projects via CLI. Use for manual step-by-step coordination and workflow guidance."},{name:"oma-orchestrator",desc:"Automated multi-agent orchestrator that spawns CLI subagents in parallel, coordinates via MCP Memory, and monitors progress. Use for orchestration, parallel execution, and automated multi-agent workflows."},{name:"oma-pm",desc:"Product manager that decomposes requirements into actionable tasks with priorities and dependencies. Use for planning, requirements, specification, scope, prioritization, task breakdown, and ISO 21500, ISO 31000, or ISO 38500-aligned planning recommendations."},{name:"oma-qa",desc:"Quality assurance specialist for security, performance, accessibility, comprehensive testing, and quality standard alignment. Use for test, review, security audit, OWASP, coverage, lint work, and ISO/IEC 25010 or ISO/IEC 29119-aligned QA recommendations."}],utility:[{name:"oma-academic-writer",desc:"Academic writing specialist for publication-grade English prose. Drafts, revises, and audits essays, reports, analysis sections, executive summaries, conclusions, and literature reviews while enforcing sentence-structure variation, high-frequency academic verbs, calibrated hedging, and anti-AI stylistic compliance. USE for academic writing, essay polish, paragraph rewrite, prose revision against any rubric tier (HD/D/C, A/B/C, top-band/mid-band, etc.), anti-AI audit, reverse outlining, claim-evidence mapping, and rubric enforcement on assignments."},{name:"oma-debug",desc:"Bug diagnosis and fixing specialist - analyzes errors, identifies root causes, provides fixes, and writes regression tests. Use for bug, debug, error, crash, traceback, exception, and regression work."},{name:"oma-deepsec",desc:"Drive Vercel's `deepsec` agent-powered vulnerability scanner end-to-end: installing the `.deepsec/` workspace, bootstrapping `INFO.md`, running cost-aware `scan` / `process` / `triage` / `revalidate` / `export` passes, gating PRs with `process --diff`, writing custom matchers, and triaging findings. Use whenever the user mentions deepsec, asks an agent to scan a repo for vulnerabilities, runs into `pnpm deepsec` / `bunx deepsec` commands, wants a CI-based PR security review, sees a `.deepsec/` directory, or asks about `INFO.md` / matchers / `process --diff` / `revalidate`, even when the tool name is not spoken. Deepsec scans are expensive (a single full scan can cost hundreds to tens of thousands of dollars) so the skill exists in part to keep the user from getting surprised."},{name:"oma-docs",desc:"Verify documentation references against the current codebase and propose updates for diff-affected docs. Use to check if docs still match reality (broken file paths, CLI commands, config keys, env vars, scripts) and to surface docs that may need updating after code changes."},{name:"oma-hwp",desc:"Convert HWP / HWPX / HWPML files to Markdown using kordoc. Extracts text, headings, tables, lists, images, footnotes, and hyperlinks. Use for Korean word processor files (Hangul), government documents, and AI-ready data preparation."},{name:"oma-image",desc:"Multi-vendor AI image generation with authentication-aware parallel dispatch. Routes to Codex (gpt-image-2 via ChatGPT OAuth), Antigravity (gemini-2.5-flash-image aka nano-banana via `agy` CLI + Gemini Code Assist), and Pollinations (flux/zimage, free with signup). Use for image generation, image creation, visual asset generation, and AI art."},{name:"oma-market",desc:"Market research skill for pain-point extraction, trend detection, competitor positioning, and discovery across community sources (Reddit, HN, Bluesky, Mastodon, GitHub Issues, web). Routes via oma-search transport, deterministic CLI compute, intent-auto SWOT/Porter's 5F/PESTEL frameworks. Use for market research, pain point analysis, trend detection, competitor research, user complaints, voice-of-customer, 시장조사, 사용자 페인, 트렌드, 경쟁구도."},{name:"oma-pdf",desc:"Convert PDF files to Markdown using opendataloader-pdf. Extracts text, tables, headings, lists, and images with correct reading order. Use for PDF parsing, PDF to Markdown conversion, document extraction, and AI-ready data preparation."},{name:"oma-recap",desc:"Analyze conversation histories from multiple AI tools (Grok, Claude, Codex, Qwen, Cursor, Antigravity) and generate themed daily/period work summaries. Filter by date or time window."},{name:"oma-refactor",desc:"Behavior-preserving refactoring specialist - plans and executes safe incremental restructuring with code smell / SATD / hotspot targeting, characterization-test safety nets, metric and coverage gates, and refactor-only commits. Use for refactor, refactoring, code smell, technical debt, legacy code modernization, extract method, hotspot, and characterization test work."},{name:"oma-scholar",desc:"Scholarly research companion using Knows sidecar spec (.knows.yaml). Generates, validates, reviews, queries, and compares structured research-paper sidecars, and fetches them from knows.academy. Use for academic literature search, survey synthesis, paper authoring assistance, and peer review with token-efficient claim/evidence/relation access."},{name:"oma-scm",desc:"SCM (software configuration management) and Git: branching, merges, conflicts, worktrees, baselines, audit readiness, plus Conventional Commits and safe staging."},{name:"oma-search",desc:"Intent-based search router with trust scoring. Routes queries to optimal channels (Context7 docs, native web search, gh/glab code search, Serena local) and attaches domain trust labels. Use for search, find, lookup, reference, docs, code search, and web research."},{name:"oma-skill-creator",desc:"Create or update OMA skills in the SSL-lite human-readable format. Use when adding a new `.agents/skills/{skill-name}/SKILL.md`, converting an existing skill to the standardized Scheduling / Structural Flow / Logical Operations / References structure, or validating whether a skill has enough routing, execution, resource, and safety detail."},{name:"oma-slide",desc:"HTML presentation deck generator and multi-format exporter. Generates distinctive, animation-rich HTML decks at a fixed 1920×1080 stage, then deterministically validates, bundles, and exports them to PDF/PNG/PPTX via the `oma slide` CLI. Use for slide, deck, presentation, slides, pptx, keynote, 슬라이드, 발표자료, プレゼン, 幻灯片 requests. Produces self-contained single-file HTML with keyboard/touch nav, speaker notes, and print-to-PDF support."},{name:"oma-translator",desc:"Context-aware translation that preserves tone, style, and natural word order. Use when translating UI strings, documentation, marketing copy, or any multilingual content. Infers register, domain, and style from the source text and surrounding codebase context."},{name:"oma-video",desc:"Short-form, explainer, and demo video generation via a key-optional 3-tier router. Composes scripts, oma-voice narration, oma-image/oma-slide/stock visuals, key-free captions, and a vendored Remotion compositor into reproducible run directories. Routes three modes — shorts/reels (9:16), explainer (16:9 README/code/data), and demo/walkthrough (screen capture, incl. supervised headed web-app capture of any URL). Use for video, shorts, reels, short-form, demo, explainer, walkthrough, screencast, web capture, video generation, 영상, 숏폼, 쇼츠, 릴스, 데모, 설명 영상."},{name:"oma-voice",desc:"Local-first text-to-speech and speech-to-text via the Voicebox MCP server. Generates speech from cloned or preset voice profiles for agent notifications, content voiceovers, and audio asset creation, and transcribes audio files for meeting notes or memos. Runs entirely on-device with no cloud, no API keys, no per-call cost. Use for voice generation, TTS, STT, transcription, voiceover, narration, dictation, audio asset work."}],infrastructure:[{name:"oma-dev-workflow",desc:"Use when setting up or optimizing developer workflows in a monorepo, managing mise tasks, git hooks, CI/CD pipelines, database migrations, or release automation. Invoke for development environment setup, build automation, testing workflows, and release coordination."},{name:"oma-observability",desc:"Intent-based observability + traceability router across layers, boundaries, and signals. Routes to vendor-specific skills via category taxonomy; owns transport tuning, meta-observability, incident forensics. Use for observability, traceability, telemetry, APM, RUM, metrics, logs, traces, profiles, SLO, incident forensics, tracing architecture work."},{name:"oma-tf-infra",desc:"Infrastructure-as-code specialist for multi-cloud provisioning using Terraform across any provider (AWS, GCP, Azure, Oracle Cloud). Use for terraform plan/apply, state management, compute, databases, storage, networking, IAM, OIDC, cost optimization, policy-as-code, ISO/IEC 42001 AI controls, ISO 22301 continuity, and ISO/IEC/IEEE 42010 architecture documentation."}]},RZ2={fullstack:["oma-architecture","oma-brainstorm","oma-design","oma-frontend","oma-backend","oma-mobile","oma-db","oma-pm","oma-qa","oma-debug","oma-scm","oma-tf-infra","oma-dev-workflow"],"fullstack-web":["oma-architecture","oma-brainstorm","oma-design","oma-frontend","oma-backend","oma-db","oma-pm","oma-qa","oma-debug","oma-scm","oma-dev-workflow"],"fullstack-mobile":["oma-architecture","oma-brainstorm","oma-design","oma-mobile","oma-backend","oma-db","oma-pm","oma-qa","oma-debug","oma-scm","oma-dev-workflow"],frontend:["oma-architecture","oma-brainstorm","oma-design","oma-frontend","oma-pm","oma-qa","oma-debug","oma-scm"],backend:["oma-architecture","oma-brainstorm","oma-backend","oma-db","oma-pm","oma-qa","oma-debug","oma-scm","oma-dev-workflow"],mobile:["oma-architecture","oma-brainstorm","oma-mobile","oma-pm","oma-qa","oma-debug","oma-scm"],devops:["oma-architecture","oma-brainstorm","oma-tf-infra","oma-dev-workflow","oma-observability","oma-pm","oma-qa","oma-debug","oma-scm"],research:["oma-scholar","oma-market","oma-pdf","oma-hwp","oma-academic-writer","oma-search","oma-translator","oma-scm"],content:["oma-design","oma-image","oma-voice","oma-academic-writer","oma-translator","oma-scm"],all:[...D9.domain,...D9.design,...D9.coordination,...D9.utility,...D9.infrastructure].map(($)=>$.name)}});var F$=N(()=>{I3();DZ2();xz()});import*as sK from"node:fs";import{dirname as XH5,join as LH5,parse as HH5,resolve as qH5,sep as vZ2}from"node:path";function v9($){return vZ2==="/"?$:$.split(vZ2).join("/")}function E9($){try{if(!sK.lstatSync($).isDirectory())sK.unlinkSync($)}catch{}}function tK($,z){let G=qH5($),J=HH5(G).root;while(G!==J){let Q=LH5(G,z);if(sK.existsSync(Q))return Q;G=XH5(G)}return null}var t6=()=>{};var I4=P((IH5)=>{var Sh=Symbol.for("yaml.alias"),EZ2=Symbol.for("yaml.document"),gI=Symbol.for("yaml.map"),wZ2=Symbol.for("yaml.pair"),xh=Symbol.for("yaml.scalar"),hI=Symbol.for("yaml.seq"),hz=Symbol.for("yaml.node.type"),FH5=($)=>!!$&&typeof $==="object"&&$[hz]===Sh,kH5=($)=>!!$&&typeof $==="object"&&$[hz]===EZ2,NH5=($)=>!!$&&typeof $==="object"&&$[hz]===gI,AH5=($)=>!!$&&typeof $==="object"&&$[hz]===wZ2,PZ2=($)=>!!$&&typeof $==="object"&&$[hz]===xh,jH5=($)=>!!$&&typeof $==="object"&&$[hz]===hI;function CZ2($){if($&&typeof $==="object")switch($[hz]){case gI:case hI:return!0}return!1}function MH5($){if($&&typeof $==="object")switch($[hz]){case Sh:case gI:case xh:case hI:return!0}return!1}var OH5=($)=>(PZ2($)||CZ2($))&&!!$.anchor;IH5.ALIAS=Sh;IH5.DOC=EZ2;IH5.MAP=gI;IH5.NODE_TYPE=hz;IH5.PAIR=wZ2;IH5.SCALAR=xh;IH5.SEQ=hI;IH5.hasAnchor=OH5;IH5.isAlias=FH5;IH5.isCollection=CZ2;IH5.isDocument=kH5;IH5.isMap=NH5;IH5.isNode=MH5;IH5.isPair=AH5;IH5.isScalar=PZ2;IH5.isSeq=jH5});var Mq=P((fH5)=>{var f3=I4(),e6=Symbol("break visit"),TZ2=Symbol("skip children"),k$=Symbol("remove node");function fI($,z){let G=bZ2(z);if(f3.isDocument($)){if(FY(null,$.contents,G,Object.freeze([$]))===k$)$.contents=null}else FY(null,$,G,Object.freeze([]))}fI.BREAK=e6;fI.SKIP=TZ2;fI.REMOVE=k$;function FY($,z,G,J){let Q=_Z2($,z,G,J);if(f3.isNode(Q)||f3.isPair(Q))return SZ2($,J,Q),FY($,Q,G,J);if(typeof Q!=="symbol"){if(f3.isCollection(z)){J=Object.freeze(J.concat(z));for(let K=0;K<z.items.length;++K){let U=FY(K,z.items[K],G,J);if(typeof U==="number")K=U-1;else if(U===e6)return e6;else if(U===k$)z.items.splice(K,1),K-=1}}else if(f3.isPair(z)){J=Object.freeze(J.concat(z));let K=FY("key",z.key,G,J);if(K===e6)return e6;else if(K===k$)z.key=null;let U=FY("value",z.value,G,J);if(U===e6)return e6;else if(U===k$)z.value=null}}return Q}async function mI($,z){let G=bZ2(z);if(f3.isDocument($)){if(await kY(null,$.contents,G,Object.freeze([$]))===k$)$.contents=null}else await kY(null,$,G,Object.freeze([]))}mI.BREAK=e6;mI.SKIP=TZ2;mI.REMOVE=k$;async function kY($,z,G,J){let Q=await _Z2($,z,G,J);if(f3.isNode(Q)||f3.isPair(Q))return SZ2($,J,Q),kY($,Q,G,J);if(typeof Q!=="symbol"){if(f3.isCollection(z)){J=Object.freeze(J.concat(z));for(let K=0;K<z.items.length;++K){let U=await kY(K,z.items[K],G,J);if(typeof U==="number")K=U-1;else if(U===e6)return e6;else if(U===k$)z.items.splice(K,1),K-=1}}else if(f3.isPair(z)){J=Object.freeze(J.concat(z));let K=await kY("key",z.key,G,J);if(K===e6)return e6;else if(K===k$)z.key=null;let U=await kY("value",z.value,G,J);if(U===e6)return e6;else if(U===k$)z.value=null}}return Q}function bZ2($){if(typeof $==="object"&&($.Collection||$.Node||$.Value))return Object.assign({Alias:$.Node,Map:$.Node,Scalar:$.Node,Seq:$.Node},$.Value&&{Map:$.Value,Scalar:$.Value,Seq:$.Value},$.Collection&&{Map:$.Collection,Seq:$.Collection},$);return $}function _Z2($,z,G,J){if(typeof G==="function")return G($,z,J);if(f3.isMap(z))return G.Map?.($,z,J);if(f3.isSeq(z))return G.Seq?.($,z,J);if(f3.isPair(z))return G.Pair?.($,z,J);if(f3.isScalar(z))return G.Scalar?.($,z,J);if(f3.isAlias(z))return G.Alias?.($,z,J);return}function SZ2($,z,G){let J=z[z.length-1];if(f3.isCollection(J))J.items[$]=G;else if(f3.isPair(J))if($==="key")J.key=G;else J.value=G;else if(f3.isDocument(J))J.contents=G;else{let Q=f3.isAlias(J)?"alias":"scalar";throw Error(`Cannot replace node with ${Q} parent`)}}fH5.visit=fI;fH5.visitAsync=mI});var uh=P((pH5)=>{var xZ2=I4(),cH5=Mq(),lH5={"!":"%21",",":"%2C","[":"%5B","]":"%5D","{":"%7B","}":"%7D"},dH5=($)=>$.replace(/[!,[\]{}]/g,(z)=>lH5[z]);class k8{constructor($,z){this.docStart=null,this.docEnd=!1,this.yaml=Object.assign({},k8.defaultYaml,$),this.tags=Object.assign({},k8.defaultTags,z)}clone(){let $=new k8(this.yaml,this.tags);return $.docStart=this.docStart,$}atDocument(){let $=new k8(this.yaml,this.tags);switch(this.yaml.version){case"1.1":this.atNextDocument=!0;break;case"1.2":this.atNextDocument=!1,this.yaml={explicit:k8.defaultYaml.explicit,version:"1.2"},this.tags=Object.assign({},k8.defaultTags);break}return $}add($,z){if(this.atNextDocument)this.yaml={explicit:k8.defaultYaml.explicit,version:"1.1"},this.tags=Object.assign({},k8.defaultTags),this.atNextDocument=!1;let G=$.trim().split(/[ \t]+/),J=G.shift();switch(J){case"%TAG":{if(G.length!==2){if(z(0,"%TAG directive should contain exactly two parts"),G.length<2)return!1}let[Q,K]=G;return this.tags[Q]=K,!0}case"%YAML":{if(this.yaml.explicit=!0,G.length!==1)return z(0,"%YAML directive should contain exactly one part"),!1;let[Q]=G;if(Q==="1.1"||Q==="1.2")return this.yaml.version=Q,!0;else{let K=/^\d+\.\d+$/.test(Q);return z(6,`Unsupported YAML version ${Q}`,K),!1}}default:return z(0,`Unknown directive ${J}`,!0),!1}}tagName($,z){if($==="!")return"!";if($[0]!=="!")return z(`Not a valid tag: ${$}`),null;if($[1]==="<"){let K=$.slice(2,-1);if(K==="!"||K==="!!")return z(`Verbatim tags aren't resolved, so ${$} is invalid.`),null;if($[$.length-1]!==">")z("Verbatim tags must end with a >");return K}let[,G,J]=$.match(/^(.*!)([^!]*)$/s);if(!J)z(`The ${$} tag has no suffix`);let Q=this.tags[G];if(Q)try{return Q+decodeURIComponent(J)}catch(K){return z(String(K)),null}if(G==="!")return $;return z(`Could not resolve tag: ${$}`),null}tagString($){for(let[z,G]of Object.entries(this.tags))if($.startsWith(G))return z+dH5($.substring(G.length));return $[0]==="!"?$:`!<${$}>`}toString($){let z=this.yaml.explicit?[`%YAML ${this.yaml.version||"1.2"}`]:[],G=Object.entries(this.tags),J;if($&&G.length>0&&xZ2.isNode($.contents)){let Q={};cH5.visit($.contents,(K,U)=>{if(xZ2.isNode(U)&&U.tag)Q[U.tag]=!0}),J=Object.keys(Q)}else J=[];for(let[Q,K]of G){if(Q==="!!"&&K==="tag:yaml.org,2002:")continue;if(!$||J.some((U)=>U.startsWith(K)))z.push(`%TAG ${Q} ${K}`)}return z.join(`
|
|
142
142
|
`)}}k8.defaultYaml={explicit:!1,version:"1.2"};k8.defaultTags={"!!":"tag:yaml.org,2002:"};pH5.Directives=k8});var iI=P((sH5)=>{var uZ2=I4(),aH5=Mq();function oH5($){if(/[\x00-\x19\s,[\]{}]/.test($)){let G=`Anchor must not contain whitespace or control characters: ${JSON.stringify($)}`;throw Error(G)}return!0}function yZ2($){let z=new Set;return aH5.visit($,{Value(G,J){if(J.anchor)z.add(J.anchor)}}),z}function gZ2($,z){for(let G=1;;++G){let J=`${$}${G}`;if(!z.has(J))return J}}function rH5($,z){let G=[],J=new Map,Q=null;return{onAnchor:(K)=>{G.push(K),Q??(Q=yZ2($));let U=gZ2(z,Q);return Q.add(U),U},setAnchors:()=>{for(let K of G){let U=J.get(K);if(typeof U==="object"&&U.anchor&&(uZ2.isScalar(U.node)||uZ2.isCollection(U.node)))U.node.anchor=U.anchor;else{let Z=Error("Failed to resolve repeated object (this should not happen)");throw Z.source=K,Z}}},sourceObjects:J}}sH5.anchorIsValid=oH5;sH5.anchorNames=yZ2;sH5.createNodeAnchors=rH5;sH5.findNewAnchor=gZ2});var yh=P((Gq5)=>{function Oq($,z,G,J){if(J&&typeof J==="object")if(Array.isArray(J))for(let Q=0,K=J.length;Q<K;++Q){let U=J[Q],Z=Oq($,J,String(Q),U);if(Z===void 0)delete J[Q];else if(Z!==U)J[Q]=Z}else if(J instanceof Map)for(let Q of Array.from(J.keys())){let K=J.get(Q),U=Oq($,J,Q,K);if(U===void 0)J.delete(Q);else if(U!==K)J.set(Q,U)}else if(J instanceof Set)for(let Q of Array.from(J)){let K=Oq($,J,Q,Q);if(K===void 0)J.delete(Q);else if(K!==Q)J.delete(Q),J.add(K)}else for(let[Q,K]of Object.entries(J)){let U=Oq($,J,Q,K);if(U===void 0)delete J[Q];else if(U!==K)J[Q]=U}return $.call(z,G,J)}Gq5.applyReviver=Oq});var FJ=P((Kq5)=>{var Qq5=I4();function hZ2($,z,G){if(Array.isArray($))return $.map((J,Q)=>hZ2(J,String(Q),G));if($&&typeof $.toJSON==="function"){if(!G||!Qq5.hasAnchor($))return $.toJSON(z,G);let J={aliasCount:0,count:1,res:void 0};G.anchors.set($,J),G.onCreate=(K)=>{J.res=K,delete G.onCreate};let Q=$.toJSON(z,G);if(G.onCreate)G.onCreate(Q);return Q}if(typeof $==="bigint"&&!G?.keep)return Number($);return $}Kq5.toJS=hZ2});var cI=P((Yq5)=>{var Zq5=yh(),fZ2=I4(),Wq5=FJ();class mZ2{constructor($){Object.defineProperty(this,fZ2.NODE_TYPE,{value:$})}clone(){let $=Object.create(Object.getPrototypeOf(this),Object.getOwnPropertyDescriptors(this));if(this.range)$.range=this.range.slice();return $}toJS($,{mapAsMap:z,maxAliasCount:G,onAnchor:J,reviver:Q}={}){if(!fZ2.isDocument($))throw TypeError("A document argument is required");let K={anchors:new Map,doc:$,keep:!0,mapAsMap:z===!0,mapKeyWarned:!1,maxAliasCount:typeof G==="number"?G:100},U=Wq5.toJS(this,"",K);if(typeof J==="function")for(let{count:Z,res:Y}of K.anchors.values())J(Y,Z);return typeof Q==="function"?Zq5.applyReviver(Q,{"":U},"",U):U}}Yq5.NodeBase=mZ2});var Iq=P((qq5)=>{var Vq5=iI(),Xq5=Mq(),NY=I4(),Lq5=cI(),Hq5=FJ();class iZ2 extends Lq5.NodeBase{constructor($){super(NY.ALIAS);this.source=$,Object.defineProperty(this,"tag",{set(){throw Error("Alias nodes cannot have tags")}})}resolve($,z){if(z?.maxAliasCount===0)throw ReferenceError("Alias resolution is disabled");let G;if(z?.aliasResolveCache)G=z.aliasResolveCache;else if(G=[],Xq5.visit($,{Node:(Q,K)=>{if(NY.isAlias(K)||NY.hasAnchor(K))G.push(K)}}),z)z.aliasResolveCache=G;let J=void 0;for(let Q of G){if(Q===this)break;if(Q.anchor===this.source)J=Q}return J}toJSON($,z){if(!z)return{source:this.source};let{anchors:G,doc:J,maxAliasCount:Q}=z,K=this.resolve(J,z);if(!K){let Z=`Unresolved alias (the anchor must be set before the alias): ${this.source}`;throw ReferenceError(Z)}let U=G.get(K);if(!U)Hq5.toJS(K,null,z),U=G.get(K);if(U?.res===void 0)throw ReferenceError("This should not happen: Alias anchor was not resolved?");if(Q>=0){if(U.count+=1,U.aliasCount===0)U.aliasCount=lI(J,K,G);if(U.count*U.aliasCount>Q)throw ReferenceError("Excessive alias count indicates a resource exhaustion attack")}return U.res}toString($,z,G){let J=`*${this.source}`;if($){if(Vq5.anchorIsValid(this.source),$.options.verifyAliasOrder&&!$.anchors.has(this.source)){let Q=`Unresolved alias (the anchor must be set before the alias): ${this.source}`;throw Error(Q)}if($.implicitKey)return`${J} `}return J}}function lI($,z,G){if(NY.isAlias(z)){let J=z.resolve($),Q=G&&J&&G.get(J);return Q?Q.count*Q.aliasCount:0}else if(NY.isCollection(z)){let J=0;for(let Q of z.items){let K=lI($,Q,G);if(K>J)J=K}return J}else if(NY.isPair(z)){let J=lI($,z.key,G),Q=lI($,z.value,G);return Math.max(J,Q)}return 1}qq5.Alias=iZ2});var R3=P((Mq5)=>{var kq5=I4(),Nq5=cI(),Aq5=FJ(),jq5=($)=>!$||typeof $!=="function"&&typeof $!=="object";class eK extends Nq5.NodeBase{constructor($){super(kq5.SCALAR);this.value=$}toJSON($,z){return z?.keep?this.value:Aq5.toJS(this.value,$,z)}toString(){return String(this.value)}}eK.BLOCK_FOLDED="BLOCK_FOLDED";eK.BLOCK_LITERAL="BLOCK_LITERAL";eK.PLAIN="PLAIN";eK.QUOTE_DOUBLE="QUOTE_DOUBLE";eK.QUOTE_SINGLE="QUOTE_SINGLE";Mq5.Scalar=eK;Mq5.isScalarValue=jq5});var Rq=P((wq5)=>{var Rq5=Iq(),$U=I4(),cZ2=R3(),Dq5="tag:yaml.org,2002:";function vq5($,z,G){if(z){let J=G.filter((K)=>K.tag===z),Q=J.find((K)=>!K.format)??J[0];if(!Q)throw Error(`Tag ${z} not found`);return Q}return G.find((J)=>J.identify?.($)&&!J.format)}function Eq5($,z,G){if($U.isDocument($))$=$.contents;if($U.isNode($))return $;if($U.isPair($)){let V=G.schema[$U.MAP].createNode?.(G.schema,null,G);return V.items.push($),V}if($ instanceof String||$ instanceof Number||$ instanceof Boolean||typeof BigInt<"u"&&$ instanceof BigInt)$=$.valueOf();let{aliasDuplicateObjects:J,onAnchor:Q,onTagObj:K,schema:U,sourceObjects:Z}=G,Y=void 0;if(J&&$&&typeof $==="object")if(Y=Z.get($),Y)return Y.anchor??(Y.anchor=Q($)),new Rq5.Alias(Y.anchor);else Y={anchor:null,node:null},Z.set($,Y);if(z?.startsWith("!!"))z=Dq5+z.slice(2);let W=vq5($,z,U.tags);if(!W){if($&&typeof $.toJSON==="function")$=$.toJSON();if(!$||typeof $!=="object"){let V=new cZ2.Scalar($);if(Y)Y.node=V;return V}W=$ instanceof Map?U[$U.MAP]:(Symbol.iterator in Object($))?U[$U.SEQ]:U[$U.MAP]}if(K)K(W),delete G.onTagObj;let B=W?.createNode?W.createNode(G.schema,$,G):typeof W?.nodeClass?.from==="function"?W.nodeClass.from(G.schema,$,G):new cZ2.Scalar($);if(z)B.tag=z;else if(!W.default)B.tag=W.tag;if(Y)Y.node=B;return B}wq5.createNode=Eq5});var dI=P((bq5)=>{var Cq5=Rq(),N$=I4(),Tq5=cI();function gh($,z,G){let J=G;for(let Q=z.length-1;Q>=0;--Q){let K=z[Q];if(typeof K==="number"&&Number.isInteger(K)&&K>=0){let U=[];U[K]=J,J=U}else J=new Map([[K,J]])}return Cq5.createNode(J,void 0,{aliasDuplicateObjects:!1,keepUndefined:!1,onAnchor:()=>{throw Error("This should not happen, please report a bug.")},schema:$,sourceObjects:new Map})}var lZ2=($)=>$==null||typeof $==="object"&&!!$[Symbol.iterator]().next().done;class dZ2 extends Tq5.NodeBase{constructor($,z){super($);Object.defineProperty(this,"schema",{value:z,configurable:!0,enumerable:!1,writable:!0})}clone($){let z=Object.create(Object.getPrototypeOf(this),Object.getOwnPropertyDescriptors(this));if($)z.schema=$;if(z.items=z.items.map((G)=>N$.isNode(G)||N$.isPair(G)?G.clone($):G),this.range)z.range=this.range.slice();return z}addIn($,z){if(lZ2($))this.add(z);else{let[G,...J]=$,Q=this.get(G,!0);if(N$.isCollection(Q))Q.addIn(J,z);else if(Q===void 0&&this.schema)this.set(G,gh(this.schema,J,z));else throw Error(`Expected YAML collection at ${G}. Remaining path: ${J}`)}}deleteIn($){let[z,...G]=$;if(G.length===0)return this.delete(z);let J=this.get(z,!0);if(N$.isCollection(J))return J.deleteIn(G);else throw Error(`Expected YAML collection at ${z}. Remaining path: ${G}`)}getIn($,z){let[G,...J]=$,Q=this.get(G,!0);if(J.length===0)return!z&&N$.isScalar(Q)?Q.value:Q;else return N$.isCollection(Q)?Q.getIn(J,z):void 0}hasAllNullValues($){return this.items.every((z)=>{if(!N$.isPair(z))return!1;let G=z.value;return G==null||$&&N$.isScalar(G)&&G.value==null&&!G.commentBefore&&!G.comment&&!G.tag})}hasIn($){let[z,...G]=$;if(G.length===0)return this.has(z);let J=this.get(z,!0);return N$.isCollection(J)?J.hasIn(G):!1}setIn($,z){let[G,...J]=$;if(J.length===0)this.set(G,z);else{let Q=this.get(G,!0);if(N$.isCollection(Q))Q.setIn(J,z);else if(Q===void 0&&this.schema)this.set(G,gh(this.schema,J,z));else throw Error(`Expected YAML collection at ${G}. Remaining path: ${J}`)}}}bq5.Collection=dZ2;bq5.collectionFromPath=gh;bq5.isEmptyPath=lZ2});var Dq=P((gq5)=>{var uq5=($)=>$.replace(/^(?!$)(?: $)?/gm,"#");function hh($,z){if(/^\n+$/.test($))return $.substring(1);return z?$.replace(/^(?! *$)/gm,z):$}var yq5=($,z,G)=>$.endsWith(`
|
|
143
143
|
`)?hh(G,z):G.includes(`
|
|
144
144
|
`)?`
|
package/package.json
CHANGED