oh-my-agent 10.23.2 → 10.24.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.
Files changed (2) hide show
  1. package/bin/cli.js +3 -3
  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 h4.env){let z=$.attributeName();if(this.getOptionValue(z)===void 0||["default","config","env"].includes(this.getOptionValueSource(z)))if($.required||$.optional)this.emit(`optionEnv:${$.name()}`,h4.env[$.envVar]);else this.emit(`optionEnv:${$.name()}`)}})}_parseOptionsImplied(){let $=new kA5(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 Z=K.attributeName(),U=this.getOptionValue(Z),W=this.options.find((V)=>V.negate&&Z===V.attributeName()),Y=this.options.find((V)=>!V.negate&&Z===V.attributeName());if(W&&(W.presetArg===void 0&&U===!1||W.presetArg!==void 0&&U===W.presetArg))return W;return Y||K},J=(K)=>{let Z=G(K),U=Z.attributeName();if(this.getOptionValueSource(U)==="env")return`environment variable '${Z.envVar}'`;return`option '${Z.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((Z)=>Z.long).map((Z)=>Z.long);J=J.concat(K),Q=Q.parent}while(Q&&!Q._enablePositionalOptions);z=KY2($,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=KY2($,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 LA5(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=UG.basename($,UG.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=(Z)=>this._outputConfiguration.writeErr(Z),J=this._outputConfiguration.getErrHasColors(),Q=this._outputConfiguration.getErrHelpWidth();else G=(Z)=>this._outputConfiguration.writeOut(Z),J=this._outputConfiguration.getOutHasColors(),Q=this._outputConfiguration.getOutHelpWidth();return{error:z,write:(Z)=>{if(!J)Z=this._outputConfiguration.stripColor(Z);return G(Z)},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(h4.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 ZY2($){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 $m(){if(h4.env.NO_COLOR||h4.env.FORCE_COLOR==="0"||h4.env.FORCE_COLOR==="false")return!1;if(h4.env.FORCE_COLOR||h4.env.CLICOLOR_FORCE!==void 0)return!0;return}AA5.Command=zm;AA5.useColor=$m});var BY2=C((RA5)=>{var{Argument:WY2}=dR(),{Command:Gm}=UY2(),{CommanderError:OA5,InvalidArgumentError:YY2}=NF(),{Help:IA5}=rf(),{Option:VY2}=sf();RA5.program=new Gm;RA5.createCommand=($)=>new Gm($);RA5.createOption=($,z)=>new VY2($,z);RA5.createArgument=($,z)=>new WY2($,z);RA5.Command=Gm;RA5.Option=VY2;RA5.Argument=WY2;RA5.Help=IA5;RA5.CommanderError=OA5;RA5.InvalidArgumentError=YY2;RA5.InvalidOptionArgumentError=YY2});var XY2,Ao4,jo4,Mo4,Oo4,Io4,Ro4,Do4,aR,vo4,Eo4,wo4;var Jm=k(()=>{XY2=E2(BY2(),1),{program:Ao4,createCommand:jo4,createArgument:Mo4,createOption:Oo4,CommanderError:Io4,InvalidArgumentError:Ro4,InvalidOptionArgumentError:Do4,Command:aR,Argument:vo4,Option:Eo4,Help:wo4}=XY2.default});var oR;var Qm=k(()=>{oR={name:"oh-my-agent",version:"10.23.2",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"],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","check:emit-drift":"node ./scripts/check-emit-drift.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.5.4","@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"},homepage:"https://firstfluke.com/oh-my-agent",bugs:{url:"https://github.com/first-fluke/oh-my-agent/issues"},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 aY from"node:fs";import{homedir as uA5}from"node:os";import*as kF from"node:path";function qY2($){if(rR)throw Error("install context already set in this process");rR=$}function LY2(){if(rR===null)throw Error("install context not set — entry point must call setInstallContext()");return rR}function oY(){return LY2().installRoot}function Q6(){return LY2().mode}function rY(){try{return Q6()}catch{return"project"}}function FY2($){let z=process.env.OMA_HOME,G=$.global===!0||process.env.OMA_INSTALL_GLOBAL==="1";if(z!==void 0&&z!=="")return gA5(z),{installRoot:z,mode:G?"global":"project"};if(G)return{installRoot:uA5(),mode:"global"};return{installRoot:process.cwd(),mode:"project"}}function gA5($){if(!kF.isAbsolute($))throw Error("OMA_HOME must be absolute path");for(let G of HY2)if($===G||$.startsWith(G+kF.sep))throw Error(`OMA_HOME=${$} is forbidden (system path ${G})`);let z;try{z=aY.realpathSync($)}catch(G){let J=G instanceof Error?G.message:String(G);throw Error(`OMA_HOME=${$}: ${J}`)}for(let G of HY2)if(z===G||z.startsWith(G+kF.sep))throw Error(`OMA_HOME=${z} is forbidden (system path ${G})`);try{aY.accessSync(z,aY.constants.W_OK)}catch{throw Error(`OMA_HOME=${z} is not writable`)}}var rR=null,HY2;var WG=k(()=>{HY2=["/etc","/usr","/bin","/boot","/sys","/proc"]});import{join as hA5}from"node:path";function sY($){return $.endsWith("/")?$:`${$}/`}function T7($,z){let G=z.split("/").filter((J)=>J.length>0);return hA5($,...G)}var _0=".agents",sR,_3,gJ,NY2,kY2,tR,fA5=".antigravitycli",AY2,mA5=".migration-backup",cA5="docs/plans",lA5,iA5,pA5,dA5,nA5,aA5,Km;var x3=k(()=>{sR=`${_0}/skills`,_3=`${_0}/results`,gJ=`${_0}/state`,NY2=`${gJ}/sessions`,kY2=`${gJ}/retry`,tR=`${gJ}/archive`,AY2=`${_0}/backup`;lA5=sY(_3),iA5=sY(gJ),pA5=sY(fA5),dA5=sY(AY2),nA5=sY(mA5),aA5=sY(cA5),Km=[pA5,lA5,iA5,dA5,aA5,nA5]});var l1="first-fluke/oh-my-agent",f4,x0,eR,oA5,rA5,YG,G3;var y$=k(()=>{x3();f4=sR,x0=["antigravity","claude","codex","commandcode","cursor","grok","kimi","kiro","qwen"],eR=["pi","opencode"],oA5=["copilot","hermes"],rA5=["zcode"],YG=[...x0,...oA5,...rA5].sort(),G3={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"},hermes:{projectPath:".hermes/skills/oma",homePath:".hermes/skills/oma",requiresHomeConsent:!0},kimi:{projectPath:".kimi-code/skills",homePath:".kimi-code/skills",requiresHomeConsent:!0,optIn:!0},kiro:{projectPath:".kiro/skills",homePath:".kiro/skills",optIn:!0},opencode:{projectPath:".opencode/skills",homePath:".opencode/skills"},qwen:{projectPath:".qwen/skills",homePath:".qwen/skills"}}});var vY2={};z5(vY2,{runAction:()=>C2,resolveJsonMode:()=>A5,printDescribe:()=>Yj5,addOutputOptions:()=>j5});function j5($,z="Output as JSON"){return $.option("--json",z).option("--output <format>","Output format (text/json)",(G)=>{let J=G.trim().toLowerCase();if(!AF.includes(J))throw Error(`Invalid output format: ${G}. Expected one of ${AF.join(", ")}`);return J})}function sA5($){if($?.json)return"json";let z=$?.output?.trim().toLowerCase();if(z&&AF.includes(z))return z;if(process.env[OY2]?.trim().toLowerCase()==="json")return"json";return"text"}function A5($){return sA5($)==="json"}function IY2($){let z=$.at(-1);return z instanceof aR?z:null}function tA5($){let z=IY2($);if(z)return z.opts();let G=$.at(-1);return G&&typeof G==="object"?G:{}}function eA5($){if($ instanceof Error)return $.message;return String($)}function hJ($){throw Error($)}function Um($,z){for(let G of $){let J=G.charCodeAt(0);if(J>=0&&J<=31||J===127)hJ(`${z} must not contain control characters`)}}function $j5($,z){if(Um($,z),/[?#%]/.test($))hJ(`${z} must not contain ?, #, or %`);if($.includes(".."))hJ(`${z} must not contain '..'`)}function zj5($,z){Um($,z);try{new URL($)}catch{hJ(`${z} must be a valid absolute URL`)}}function Zm($,z,G="text"){if(typeof $==="string"){if(G==="identifier"){$j5($,z);return}if(G==="url"){zj5($,z);return}Um($,z);return}if(Array.isArray($))for(let[J,Q]of $.entries())Zm(Q,`${z}[${J}]`,G)}function MY2($){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 Gj5($){let z=$.vendor;if(typeof z==="string"){if(z.split(",").map((K)=>K.trim()).filter(Boolean).filter((K)=>!YG.includes(K)).length>0)hJ(`vendor must be one of ${YG.join(", ")}`)}let G=$.output;if(typeof G==="string"&&!AF.includes(G))hJ(`output must be one of ${AF.join(", ")}`)}function Jj5($){let z=$.processedArgs??$.args??[];($.registeredArguments??[]).forEach((Q,K)=>{let Z=Q.name?.()||String(K),U=z[K];if(Zm(U,Z,MY2(Z)),Z==="agent-type"&&typeof U==="string"&&!jY2.includes(U))hJ(`agent-type must be one of ${jY2.join(", ")}`)});let J=$.opts();Gj5(J);for(let[Q,K]of Object.entries(J))Zm(K,Q,MY2(Q))}function Qj5($){return($.registeredArguments??[]).map((z)=>({name:z.name?.()||"",required:!!z.required,variadic:!!z.variadic}))}function Kj5($){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 RY2($){let z=[],G=$;while(G?.parent)z.unshift(G.name()),G=G.parent;return z.join(" ")}function Zj5($){return $.options.some((z)=>z.long==="--json"||z.long==="--output")}function Uj5($){return $.options.some((z)=>z.long==="--dry-run")}function DY2($){return{name:$.name(),path:RY2($),summary:$.summary()||void 0,description:$.description(),arguments:Qj5($),options:Kj5($),supportsJsonOutput:Zj5($),supportsDryRun:Uj5($),subcommands:$.commands.map((z)=>DY2(z))}}function Wj5($,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||RY2(Q)===G)return Q;J.push(...Q.commands)}return null}function Yj5($,z){let G=Wj5($,z);if(!G)hJ(`Unknown command: ${z}`);let J={name:$.name(),version:$.version(),description:$.description(),env:{[OY2]:"Set to json to force machine-readable output on commands that support it."},command:DY2(G)};console.log(JSON.stringify(J,null,2))}function C2($,z={}){return async(...G)=>{let J=IY2(G);if(J&&G.length>=2)G[G.length-2]=J.optsWithGlobals();let Q=tA5(G);try{if(J)Jj5(J);await $(...G)}catch(K){let Z=eA5(K);if(z.supportsJsonOutput&&A5(Q))console.log(JSON.stringify({error:Z},null,2));else console.error(Z);process.exitCode=1}}}var OY2="OH_MY_AG_OUTPUT_FORMAT",AF,jY2;var m4=k(()=>{Jm();y$();AF=["text","json"],jY2=["backend","frontend","mobile","qa","debug","pm"]});var EY2,wY2=($)=>{return $===12288||$>=65281&&$<=65376||$>=65504&&$<=65510},CY2=($)=>{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 PY2=k(()=>{EY2=(()=>{let $=/[\uD800-\uDBFF][\uDC00-\uDFFF]/g;return(z)=>{let G=0;$.lastIndex=0;while($.test(z))G+=1;return z.length-G}})()});var Vj5,Bj5,TY2,Xj5,bY2,Hj5,qj5,Lj5,_Y2=($,z={},G={})=>{let J=z.limit??1/0,Q=z.ellipsis??"",K=z?.ellipsisWidth??(Q?_Y2(Q,Lj5,G).width:0),Z=0,U=G.controlWidth??0,W=G.tabWidth??8,Y=G.emojiWidth??2,V=2,B=G.regularWidth??1,H=G.wideWidth??2,X=[[Hj5,B],[Vj5,0],[Bj5,U],[Xj5,W],[bY2,Y],[TY2,H]],q=0,L=0,F=$.length,N=0,A=!1,j=F,M=Math.max(0,J-K),I=0,R=0,O=0,D=0;$:while(!0){if(R>I||L>=F&&L>q){let E=$.slice(I,R)||$.slice(q,L);N=0;for(let P of E.replaceAll(qj5,"")){let _=P.codePointAt(0)||0;if(wY2(_))D=2;else if(CY2(_))D=H;else D=B;if(O+D>M)j=Math.min(j,Math.max(I,q)+N);if(O+D>J){A=!0;break $}N+=P.length,O+=D}I=R=0}if(L>=F)break $;for(let E=0,P=X.length;E<P;E++){let[_,u]=X[E];if(_.lastIndex=L,_.test($)){if(N=_===TY2?EY2($.slice(L,_.lastIndex)):_===bY2?1:_.lastIndex-L,D=N*u,O+D>M)j=Math.min(j,L+Math.floor((M-O)/u));if(O+D>J){A=!0;break $}O+=D,I=q,R=L,L=q=_.lastIndex;continue $}}L+=1}return{width:A?M:O,index:A?j:F,truncated:A,ellipsed:A&&J>=K}},xY2;var SY2=k(()=>{PY2();Vj5=/[\u001b\u009b][[()#;?]*(?:[0-9]{1,4}(?:;[0-9]{0,4})*)?[0-9A-ORZcf-nqry=><]|\u001b\]8;[^;]*;.*?(?:\u0007|\u001b\u005c)/y,Bj5=/[\x00-\x08\x0A-\x1F\x7F-\x9F]{1,1000}/y,TY2=/(?:(?![\uFF61-\uFF9F\uFF00-\uFFEF])[\p{Script=Han}\p{Script=Hiragana}\p{Script=Katakana}\p{Script=Hangul}\p{Script=Tangut}]){1,1000}/yu,Xj5=/\t{1,1000}/y,bY2=/[\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,Hj5=/(?:[\x20-\x7E\xA0-\xFF](?!\uFE0F)){1,1000}/y,qj5=/\p{M}+/gu,Lj5={limit:1/0,ellipsis:""},xY2=_Y2});var Fj5,Nj5=($,z={})=>{return xY2($,Fj5,z).width},w6;var Wm=k(()=>{SY2();Fj5={limit:1/0,ellipsis:"",ellipsisWidth:0},w6=Nj5});function u$($,z,G){return String($).normalize().split(Oj5).map((J)=>Mj5(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 ZY2($){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 $m(){if(h4.env.NO_COLOR||h4.env.FORCE_COLOR==="0"||h4.env.FORCE_COLOR==="false")return!1;if(h4.env.FORCE_COLOR||h4.env.CLICOLOR_FORCE!==void 0)return!0;return}AA5.Command=zm;AA5.useColor=$m});var BY2=C((RA5)=>{var{Argument:WY2}=dR(),{Command:Gm}=UY2(),{CommanderError:OA5,InvalidArgumentError:YY2}=NF(),{Help:IA5}=rf(),{Option:VY2}=sf();RA5.program=new Gm;RA5.createCommand=($)=>new Gm($);RA5.createOption=($,z)=>new VY2($,z);RA5.createArgument=($,z)=>new WY2($,z);RA5.Command=Gm;RA5.Option=VY2;RA5.Argument=WY2;RA5.Help=IA5;RA5.CommanderError=OA5;RA5.InvalidArgumentError=YY2;RA5.InvalidOptionArgumentError=YY2});var XY2,Ao4,jo4,Mo4,Oo4,Io4,Ro4,Do4,aR,vo4,Eo4,wo4;var Jm=k(()=>{XY2=E2(BY2(),1),{program:Ao4,createCommand:jo4,createArgument:Mo4,createOption:Oo4,CommanderError:Io4,InvalidArgumentError:Ro4,InvalidOptionArgumentError:Do4,Command:aR,Argument:vo4,Option:Eo4,Help:wo4}=XY2.default});var oR;var Qm=k(()=>{oR={name:"oh-my-agent",version:"10.24.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"],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","check:emit-drift":"node ./scripts/check-emit-drift.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.5.4","@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"},homepage:"https://firstfluke.com/oh-my-agent",bugs:{url:"https://github.com/first-fluke/oh-my-agent/issues"},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 aY from"node:fs";import{homedir as uA5}from"node:os";import*as kF from"node:path";function qY2($){if(rR)throw Error("install context already set in this process");rR=$}function LY2(){if(rR===null)throw Error("install context not set — entry point must call setInstallContext()");return rR}function oY(){return LY2().installRoot}function Q6(){return LY2().mode}function rY(){try{return Q6()}catch{return"project"}}function FY2($){let z=process.env.OMA_HOME,G=$.global===!0||process.env.OMA_INSTALL_GLOBAL==="1";if(z!==void 0&&z!=="")return gA5(z),{installRoot:z,mode:G?"global":"project"};if(G)return{installRoot:uA5(),mode:"global"};return{installRoot:process.cwd(),mode:"project"}}function gA5($){if(!kF.isAbsolute($))throw Error("OMA_HOME must be absolute path");for(let G of HY2)if($===G||$.startsWith(G+kF.sep))throw Error(`OMA_HOME=${$} is forbidden (system path ${G})`);let z;try{z=aY.realpathSync($)}catch(G){let J=G instanceof Error?G.message:String(G);throw Error(`OMA_HOME=${$}: ${J}`)}for(let G of HY2)if(z===G||z.startsWith(G+kF.sep))throw Error(`OMA_HOME=${z} is forbidden (system path ${G})`);try{aY.accessSync(z,aY.constants.W_OK)}catch{throw Error(`OMA_HOME=${z} is not writable`)}}var rR=null,HY2;var WG=k(()=>{HY2=["/etc","/usr","/bin","/boot","/sys","/proc"]});import{join as hA5}from"node:path";function sY($){return $.endsWith("/")?$:`${$}/`}function T7($,z){let G=z.split("/").filter((J)=>J.length>0);return hA5($,...G)}var _0=".agents",sR,_3,gJ,NY2,kY2,tR,fA5=".antigravitycli",AY2,mA5=".migration-backup",cA5="docs/plans",lA5,iA5,pA5,dA5,nA5,aA5,Km;var x3=k(()=>{sR=`${_0}/skills`,_3=`${_0}/results`,gJ=`${_0}/state`,NY2=`${gJ}/sessions`,kY2=`${gJ}/retry`,tR=`${gJ}/archive`,AY2=`${_0}/backup`;lA5=sY(_3),iA5=sY(gJ),pA5=sY(fA5),dA5=sY(AY2),nA5=sY(mA5),aA5=sY(cA5),Km=[pA5,lA5,iA5,dA5,aA5,nA5]});var l1="first-fluke/oh-my-agent",f4,x0,eR,oA5,rA5,YG,G3;var y$=k(()=>{x3();f4=sR,x0=["antigravity","claude","codex","commandcode","cursor","grok","kimi","kiro","qwen"],eR=["pi","opencode"],oA5=["copilot","hermes"],rA5=["zcode"],YG=[...x0,...oA5,...rA5].sort(),G3={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"},hermes:{projectPath:".hermes/skills/oma",homePath:".hermes/skills/oma",requiresHomeConsent:!0},kimi:{projectPath:".kimi-code/skills",homePath:".kimi-code/skills",requiresHomeConsent:!0,optIn:!0},kiro:{projectPath:".kiro/skills",homePath:".kiro/skills",optIn:!0},opencode:{projectPath:".opencode/skills",homePath:".opencode/skills"},qwen:{projectPath:".qwen/skills",homePath:".qwen/skills"}}});var vY2={};z5(vY2,{runAction:()=>C2,resolveJsonMode:()=>A5,printDescribe:()=>Yj5,addOutputOptions:()=>j5});function j5($,z="Output as JSON"){return $.option("--json",z).option("--output <format>","Output format (text/json)",(G)=>{let J=G.trim().toLowerCase();if(!AF.includes(J))throw Error(`Invalid output format: ${G}. Expected one of ${AF.join(", ")}`);return J})}function sA5($){if($?.json)return"json";let z=$?.output?.trim().toLowerCase();if(z&&AF.includes(z))return z;if(process.env[OY2]?.trim().toLowerCase()==="json")return"json";return"text"}function A5($){return sA5($)==="json"}function IY2($){let z=$.at(-1);return z instanceof aR?z:null}function tA5($){let z=IY2($);if(z)return z.opts();let G=$.at(-1);return G&&typeof G==="object"?G:{}}function eA5($){if($ instanceof Error)return $.message;return String($)}function hJ($){throw Error($)}function Um($,z){for(let G of $){let J=G.charCodeAt(0);if(J>=0&&J<=31||J===127)hJ(`${z} must not contain control characters`)}}function $j5($,z){if(Um($,z),/[?#%]/.test($))hJ(`${z} must not contain ?, #, or %`);if($.includes(".."))hJ(`${z} must not contain '..'`)}function zj5($,z){Um($,z);try{new URL($)}catch{hJ(`${z} must be a valid absolute URL`)}}function Zm($,z,G="text"){if(typeof $==="string"){if(G==="identifier"){$j5($,z);return}if(G==="url"){zj5($,z);return}Um($,z);return}if(Array.isArray($))for(let[J,Q]of $.entries())Zm(Q,`${z}[${J}]`,G)}function MY2($){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 Gj5($){let z=$.vendor;if(typeof z==="string"){if(z.split(",").map((K)=>K.trim()).filter(Boolean).filter((K)=>!YG.includes(K)).length>0)hJ(`vendor must be one of ${YG.join(", ")}`)}let G=$.output;if(typeof G==="string"&&!AF.includes(G))hJ(`output must be one of ${AF.join(", ")}`)}function Jj5($){let z=$.processedArgs??$.args??[];($.registeredArguments??[]).forEach((Q,K)=>{let Z=Q.name?.()||String(K),U=z[K];if(Zm(U,Z,MY2(Z)),Z==="agent-type"&&typeof U==="string"&&!jY2.includes(U))hJ(`agent-type must be one of ${jY2.join(", ")}`)});let J=$.opts();Gj5(J);for(let[Q,K]of Object.entries(J))Zm(K,Q,MY2(Q))}function Qj5($){return($.registeredArguments??[]).map((z)=>({name:z.name?.()||"",required:!!z.required,variadic:!!z.variadic}))}function Kj5($){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 RY2($){let z=[],G=$;while(G?.parent)z.unshift(G.name()),G=G.parent;return z.join(" ")}function Zj5($){return $.options.some((z)=>z.long==="--json"||z.long==="--output")}function Uj5($){return $.options.some((z)=>z.long==="--dry-run")}function DY2($){return{name:$.name(),path:RY2($),summary:$.summary()||void 0,description:$.description(),arguments:Qj5($),options:Kj5($),supportsJsonOutput:Zj5($),supportsDryRun:Uj5($),subcommands:$.commands.map((z)=>DY2(z))}}function Wj5($,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||RY2(Q)===G)return Q;J.push(...Q.commands)}return null}function Yj5($,z){let G=Wj5($,z);if(!G)hJ(`Unknown command: ${z}`);let J={name:$.name(),version:$.version(),description:$.description(),env:{[OY2]:"Set to json to force machine-readable output on commands that support it."},command:DY2(G)};console.log(JSON.stringify(J,null,2))}function C2($,z={}){return async(...G)=>{let J=IY2(G);if(J&&G.length>=2)G[G.length-2]=J.optsWithGlobals();let Q=tA5(G);try{if(J)Jj5(J);await $(...G)}catch(K){let Z=eA5(K);if(z.supportsJsonOutput&&A5(Q))console.log(JSON.stringify({error:Z},null,2));else console.error(Z);process.exitCode=1}}}var OY2="OH_MY_AG_OUTPUT_FORMAT",AF,jY2;var m4=k(()=>{Jm();y$();AF=["text","json"],jY2=["backend","frontend","mobile","qa","debug","pm"]});var EY2,wY2=($)=>{return $===12288||$>=65281&&$<=65376||$>=65504&&$<=65510},CY2=($)=>{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 PY2=k(()=>{EY2=(()=>{let $=/[\uD800-\uDBFF][\uDC00-\uDFFF]/g;return(z)=>{let G=0;$.lastIndex=0;while($.test(z))G+=1;return z.length-G}})()});var Vj5,Bj5,TY2,Xj5,bY2,Hj5,qj5,Lj5,_Y2=($,z={},G={})=>{let J=z.limit??1/0,Q=z.ellipsis??"",K=z?.ellipsisWidth??(Q?_Y2(Q,Lj5,G).width:0),Z=0,U=G.controlWidth??0,W=G.tabWidth??8,Y=G.emojiWidth??2,V=2,B=G.regularWidth??1,H=G.wideWidth??2,X=[[Hj5,B],[Vj5,0],[Bj5,U],[Xj5,W],[bY2,Y],[TY2,H]],q=0,L=0,F=$.length,N=0,A=!1,j=F,M=Math.max(0,J-K),I=0,R=0,O=0,D=0;$:while(!0){if(R>I||L>=F&&L>q){let E=$.slice(I,R)||$.slice(q,L);N=0;for(let P of E.replaceAll(qj5,"")){let _=P.codePointAt(0)||0;if(wY2(_))D=2;else if(CY2(_))D=H;else D=B;if(O+D>M)j=Math.min(j,Math.max(I,q)+N);if(O+D>J){A=!0;break $}N+=P.length,O+=D}I=R=0}if(L>=F)break $;for(let E=0,P=X.length;E<P;E++){let[_,u]=X[E];if(_.lastIndex=L,_.test($)){if(N=_===TY2?EY2($.slice(L,_.lastIndex)):_===bY2?1:_.lastIndex-L,D=N*u,O+D>M)j=Math.min(j,L+Math.floor((M-O)/u));if(O+D>J){A=!0;break $}O+=D,I=q,R=L,L=q=_.lastIndex;continue $}}L+=1}return{width:A?M:O,index:A?j:F,truncated:A,ellipsed:A&&J>=K}},xY2;var SY2=k(()=>{PY2();Vj5=/[\u001b\u009b][[()#;?]*(?:[0-9]{1,4}(?:;[0-9]{0,4})*)?[0-9A-ORZcf-nqry=><]|\u001b\]8;[^;]*;.*?(?:\u0007|\u001b\u005c)/y,Bj5=/[\x00-\x08\x0A-\x1F\x7F-\x9F]{1,1000}/y,TY2=/(?:(?![\uFF61-\uFF9F\uFF00-\uFFEF])[\p{Script=Han}\p{Script=Hiragana}\p{Script=Katakana}\p{Script=Hangul}\p{Script=Tangut}]){1,1000}/yu,Xj5=/\t{1,1000}/y,bY2=/[\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,Hj5=/(?:[\x20-\x7E\xA0-\xFF](?!\uFE0F)){1,1000}/y,qj5=/\p{M}+/gu,Lj5={limit:1/0,ellipsis:""},xY2=_Y2});var Fj5,Nj5=($,z={})=>{return xY2($,Fj5,z).width},w6;var Wm=k(()=>{SY2();Fj5={limit:1/0,ellipsis:"",ellipsisWidth:0},w6=Nj5});function u$($,z,G){return String($).normalize().split(Oj5).map((J)=>Mj5(J,z,G)).join(`
28
28
  `)}var $D="\x1B",fY2="›",kj5=39,Vm="\x07",mY2="[",Aj5="]",cY2="m",Bm,yY2,uY2=($)=>{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},gY2=($)=>`${$D}${mY2}${$}${cY2}`,hY2=($)=>`${$D}${Bm}${$}${Vm}`,Ym=($,z,G)=>{let J=z[Symbol.iterator](),Q=!1,K=!1,Z=$.at(-1),U=Z===void 0?0:w6(Z),W=J.next(),Y=J.next(),V=0;while(!W.done){let B=W.value,H=w6(B);if(U+H<=G)$[$.length-1]+=B;else $.push(B),U=0;if(B===$D||B===fY2)Q=!0,K=z.startsWith(Bm,V+1);if(Q){if(K){if(B===Vm)Q=!1,K=!1}else if(B===cY2)Q=!1}else if(U+=H,U===G&&!Y.done)$.push(""),U=0;W=Y,Y=J.next(),V+=B.length}if(Z=$.at(-1),!U&&Z!==void 0&&Z.length&&$.length>1)$[$.length-2]+=$.pop()},jj5=($)=>{let z=$.split(" "),G=z.length;while(G){if(w6(z[G-1]))break;G--}if(G===z.length)return $;return z.slice(0,G).join(" ")+z.slice(G).join("")},Mj5=($,z,G={})=>{if(G.trim!==!1&&$.trim()==="")return"";let J="",Q,K,Z=$.split(" "),U=[""],W=0;for(let B=0;B<Z.length;B++){let H=Z[B];if(G.trim!==!1){let q=U.at(-1)??"",L=q.trimStart();if(q.length!==L.length)U[U.length-1]=L,W=w6(L)}if(B!==0){if(W>=z&&(G.wordWrap===!1||G.trim===!1))U.push(""),W=0;if(W||G.trim===!1)U[U.length-1]+=" ",W++}let X=w6(H);if(G.hard&&X>z){let q=z-W,L=1+Math.floor((X-q-1)/z);if(Math.floor((X-1)/z)<L)U.push("");Ym(U,H,z),W=w6(U.at(-1)??"");continue}if(W+X>z&&W&&X){if(G.wordWrap===!1&&W<z){Ym(U,H,z),W=w6(U.at(-1)??"");continue}U.push(""),W=0}if(W+X>z&&G.wordWrap===!1){Ym(U,H,z),W=w6(U.at(-1)??"");continue}U[U.length-1]+=H,W+=X}if(G.trim!==!1)U=U.map((B)=>jj5(B));let Y=U.join(`
29
29
  `),V=!1;for(let B=0;B<Y.length;B++){let H=Y[B];if(J+=H,!V){if(V=H>="\uD800"&&H<="\uDBFF",V)continue}else V=!1;if(H===$D||H===fY2){yY2.lastIndex=B+1;let q=yY2.exec(Y)?.groups;if(q?.code!==void 0){let L=Number.parseFloat(q.code);Q=L===kj5?void 0:L}else if(q?.uri!==void 0)K=q.uri.length===0?void 0:q.uri}if(Y[B+1]===`
30
30
  `){if(K)J+=hY2("");let X=Q?uY2(Q):void 0;if(Q&&X)J+=gY2(X)}else if(H===`
@@ -357,8 +357,8 @@ ${z}`;return`---
357
357
  ${hE.stringify(G).trimEnd()}
358
358
  ---
359
359
 
360
- ${z}`}var hE;var S8=k(()=>{Z3();hE=E2(Q3(),1)});import oZ from"node:fs";import aV from"node:path";function cN($){let z=aV.resolve($);if(oZ.existsSync(z)&&oZ.statSync(z).isFile())return oZ.readFileSync(z,"utf-8");return $}function lN($,z){let G=dV(z,aV.join(".agents","skills","_shared","runtime","execution-protocols",`${$}.md`));if(!G)return"";try{return oZ.readFileSync(G,"utf-8")}catch{return""}}function Wo($,z){let G=dV(z,aV.join(".agents","oma-config.yaml"));if(!G)return"";let J=aV.join(aV.dirname(G),"agents");if(!oZ.existsSync(J))return"";let Q=HV($)??$,K;try{K=oZ.readdirSync(J).filter((Z)=>Z.endsWith(".md")).find((Z)=>{let U=Z.replace(/\.md$/,"");return U===$||HV(U)===Q})}catch{return""}if(!K)return"";try{let{body:Z}=r1(oZ.readFileSync(aV.join(J,K),"utf-8"));return Z.trim()}catch{return""}}var iL2=k(()=>{S8();Gv();gE()});var Yo;var pL2=k(()=>{Yo=new Map([["anthropic/claude-opus-4-7",{cli:"claude",cli_model:"claude-opus-4-7",supports:{effort:{type:"cli-session",auto_default:"high"},apply_patch:!1,task_budget:!0,prompt_cache:!0,computer_use:!1,native_dispatch_from:["claude"],api_only:!1},pricing_note:"$5/$25 per Mtok (reference only; not subscription cost)",auth_hint:"Requires Claude Max subscription ($200/mo)",subscription_tier:"claude_max"}],["anthropic/claude-sonnet-4-6",{cli:"claude",cli_model:"claude-sonnet-4-6",supports:{effort:{type:"cli-session",auto_default:"high"},apply_patch:!1,task_budget:!0,prompt_cache:!0,computer_use:!1,native_dispatch_from:["claude"],api_only:!1},auth_hint:"Requires Claude Pro or Max subscription"}],["anthropic/claude-haiku-4-5",{cli:"claude",cli_model:"claude-haiku-4-5",supports:{effort:{type:"cli-session",auto_default:"high"},apply_patch:!1,task_budget:!1,prompt_cache:!0,computer_use:!1,native_dispatch_from:["claude"],api_only:!1},auth_hint:"Requires Claude Pro or Max subscription"}],["openai/gpt-5.5",{cli:"codex",cli_model:"gpt-5.5",supports:{effort:{type:"granular",levels:["none","low","medium","high","xhigh"]},apply_patch:!0,task_budget:!1,prompt_cache:!1,computer_use:!0,native_dispatch_from:["codex"],api_only:!1},pricing_note:"$5/$30 per Mtok (reference only; improved token efficiency vs 5.4)",auth_hint:"Requires ChatGPT Plus or Pro subscription (default Codex CLI model)"}],["openai/gpt-5.4",{cli:"codex",cli_model:"gpt-5.4",supports:{effort:{type:"granular",levels:["none","low","medium","high","xhigh"]},apply_patch:!0,task_budget:!1,prompt_cache:!1,computer_use:!0,native_dispatch_from:["codex"],api_only:!1},auth_hint:"Requires ChatGPT Plus or Pro subscription"}],["openai/gpt-5.4-pro",{cli:"codex",cli_model:"gpt-5.4-pro",supports:{effort:{type:"granular",levels:["none","low","medium","high","xhigh"]},apply_patch:!0,task_budget:!1,prompt_cache:!1,computer_use:!0,native_dispatch_from:["codex"],api_only:!1},pricing_note:"$30/$180 per Mtok (reference only; use for special cases)",auth_hint:"Requires ChatGPT Pro subscription ($200/mo)",subscription_tier:"chatgpt_pro"}],["openai/gpt-5.4-mini",{cli:"codex",cli_model:"gpt-5.4-mini",supports:{effort:{type:"granular",levels:["none","low","medium","high","xhigh"]},apply_patch:!0,task_budget:!1,prompt_cache:!1,computer_use:!1,native_dispatch_from:["codex"],api_only:!1},pricing_note:"Uses only 30% Codex quota; recommended for official subagents",auth_hint:"Requires ChatGPT Plus subscription"}],["openai/gpt-5.3-codex",{cli:"codex",cli_model:"gpt-5.3-codex",supports:{effort:{type:"granular",levels:["none","low","medium","high","xhigh"]},apply_patch:!0,task_budget:!1,prompt_cache:!1,computer_use:!1,native_dispatch_from:["codex"],api_only:!1},auth_hint:"Requires ChatGPT Plus or Pro subscription"}],["antigravity/gemini-3.1-pro",{cli:"antigravity",cli_model:"Gemini 3.1 Pro (High)",supports:{effort:{type:"granular",levels:["low","high"]},apply_patch:!1,task_budget:!1,prompt_cache:!0,computer_use:!1,native_dispatch_from:["antigravity"],api_only:!1},auth_hint:"Requires Antigravity CLI sign-in (Google AI Pro tier)",subscription_tier:"google_ai_pro"}],["antigravity/gemini-3.5-flash",{cli:"antigravity",cli_model:"Gemini 3.5 Flash (Medium)",supports:{effort:{type:"granular",levels:["low","medium","high"]},apply_patch:!1,task_budget:!1,prompt_cache:!0,computer_use:!1,native_dispatch_from:["antigravity"],api_only:!1},auth_hint:"Requires Antigravity CLI sign-in (Google AI Pro tier)",subscription_tier:"google_ai_pro"}],["cursor/composer-2.5",{cli:"cursor",cli_model:"composer-2.5",supports:{effort:null,apply_patch:!1,task_budget:!1,prompt_cache:!1,computer_use:!1,native_dispatch_from:["cursor"],api_only:!1},auth_hint:"Requires Cursor Pro or Pro Student subscription"}],["cursor/composer-2.5-fast",{cli:"cursor",cli_model:"composer-2.5-fast",supports:{effort:null,apply_patch:!1,task_budget:!1,prompt_cache:!1,computer_use:!1,native_dispatch_from:["cursor"],api_only:!1},auth_hint:"Requires Cursor Pro or Pro Student subscription"}],["cursor/composer-2",{cli:"cursor",cli_model:"composer-2",supports:{effort:null,apply_patch:!1,task_budget:!1,prompt_cache:!1,computer_use:!1,native_dispatch_from:["cursor"],api_only:!1},auth_hint:"Requires Cursor Pro or Pro Student subscription"}],["cursor/composer-2-fast",{cli:"cursor",cli_model:"composer-2-fast",supports:{effort:null,apply_patch:!1,task_budget:!1,prompt_cache:!1,computer_use:!1,native_dispatch_from:["cursor"],api_only:!1},auth_hint:"Requires Cursor Pro or Pro Student subscription"}],["cursor/auto",{cli:"cursor",cli_model:"auto",supports:{effort:null,apply_patch:!1,task_budget:!1,prompt_cache:!1,computer_use:!1,native_dispatch_from:["cursor"],api_only:!1},auth_hint:"Requires Cursor Pro or Pro Student subscription (auto routing; quota-friendly)"}],["kiro/claude-sonnet-4-5",{cli:"kiro",cli_model:"anthropic.claude-sonnet-4-5-20251001-v1:0",supports:{effort:null,apply_patch:!1,task_budget:!1,prompt_cache:!1,computer_use:!1,native_dispatch_from:["kiro"],api_only:!1},auth_hint:"Requires AWS Builder ID or IAM Identity Center (Kiro CLI)"}],["kiro/claude-haiku-3-5",{cli:"kiro",cli_model:"anthropic.claude-haiku-3-5-20241022-v1:0",supports:{effort:null,apply_patch:!1,task_budget:!1,prompt_cache:!1,computer_use:!1,native_dispatch_from:["kiro"],api_only:!1},auth_hint:"Requires AWS Builder ID or IAM Identity Center (Kiro CLI)"}],["kiro/auto",{cli:"kiro",cli_model:"auto",supports:{effort:null,apply_patch:!1,task_budget:!1,prompt_cache:!1,computer_use:!1,native_dispatch_from:["kiro"],api_only:!1},auth_hint:"Requires AWS Builder ID or IAM Identity Center (Kiro CLI — auto model selection)"}],["qwen/qwen3.6-plus",{cli:"qwen",cli_model:"qwen3.6-plus",supports:{effort:{type:"binary-thinking"},apply_patch:!1,task_budget:!1,prompt_cache:!1,computer_use:!1,native_dispatch_from:[],api_only:!1},pricing_note:"1M context, enhanced agentic coding (released 2026-04)",auth_hint:"Requires Qwen Code subscription or Bailian Coding Plan API key"}],["qwen/qwen3-coder-plus",{cli:"qwen",cli_model:"qwen3-coder-plus",supports:{effort:{type:"binary-thinking"},apply_patch:!1,task_budget:!1,prompt_cache:!1,computer_use:!1,native_dispatch_from:[],api_only:!1},auth_hint:"Requires Qwen Code subscription (API key re-authentication required; OAuth deprecated 2026-04-15)"}],["qwen/qwen3-coder-next",{cli:"qwen",cli_model:"qwen3-coder-next",supports:{effort:{type:"binary-thinking"},apply_patch:!1,task_budget:!1,prompt_cache:!1,computer_use:!1,native_dispatch_from:[],api_only:!1},auth_hint:"Requires Qwen Code subscription (API key re-authentication required; OAuth deprecated 2026-04-15)"}]])});var dL2;var nL2=k(()=>{dL2=["claude","codex","cursor","antigravity","qwen","kiro","kimi","opencode"]});var I_5,R_5,aL2,D_5,v_5,fE;var Vo=k(()=>{a$();y$();nL2();I_5=l.enum(dL2),R_5=l.enum([...x0,"opencode"]),aL2=l.enum(["none","low","medium","high","xhigh"]),D_5=l.enum(["none","dynamic","fixed"]),v_5=l.union([l.object({type:l.literal("granular"),levels:l.array(aL2)}),l.object({type:l.literal("cli-session"),auto_default:aL2}),l.object({type:l.literal("thinking-budget"),modes:l.array(D_5)}),l.object({type:l.literal("binary-thinking")}),l.null()]),fE=l.object({cli:R_5,cli_model:l.string().min(1),supports:l.object({effort:v_5,apply_patch:l.boolean(),task_budget:l.boolean(),prompt_cache:l.boolean(),computer_use:l.boolean(),native_dispatch_from:l.array(I_5),api_only:l.boolean()}),pricing_note:l.string().optional(),auth_hint:l.string().min(1),subscription_tier:l.string().optional()})});import oL2 from"node:fs";import iN from"node:path";function E_5($,z){let G=iN.resolve($),J=iN.parse(G).root;while(G!==J){let Q=iN.join(G,z);if(oL2.existsSync(Q))return Q;G=iN.dirname(G)}return null}function Bo($){let z=new Map,G=$??process.cwd(),J=E_5(G,iN.join(".agents","config","models.yaml"));if(!J)return z;let Q;try{let U=oL2.readFileSync(J,"utf-8");Q=rL2.parse(U)}catch(U){return console.error(`[model-registry] Failed to parse .agents/config/models.yaml: ${U instanceof Error?U.message:String(U)}`),z}if(!Q||typeof Q!=="object"||Array.isArray(Q))return console.error("[model-registry] .agents/config/models.yaml: root must be an object with a 'models' key."),z;let K=Q;if(!("models"in K)||typeof K.models!=="object"||K.models===null||Array.isArray(K.models))return z;let Z=K.models;for(let[U,W]of Object.entries(Z)){let Y=fE.safeParse(W);if(!Y.success){console.error(`[model-registry] User entry "${U}" failed validation — skipping. Errors: ${Y.error.issues.map((B)=>B.message).join("; ")}`);continue}let V=Y.data;if(V.supports.api_only){console.warn(`[model-registry] User entry "${U}": api_only=true is not supported in CLI-only mode — skipping.`);continue}z.set(U,V)}return z}var rL2;var Xo=k(()=>{Vo();rL2=E2(Q3(),1)});function w_5(){let $=new Map;for(let[z,G]of Yo){if(G.supports.api_only)continue;$.set(z,G)}return $}function cE(){if(mE!==null)return mE;return C_5()}function C_5($){let z=new Map(sL2),G=Bo($);for(let[J,Q]of G){if(sL2.has(J))console.warn(`[model-registry] User override for slug "${J}"`);z.set(J,Q)}return mE=z,mE}function UQ($,z){if(z&&Object.hasOwn(z,$)){let G=z[$],J=fE.safeParse(G);if(J.success){let Q=J.data;if(Q.supports.api_only)console.warn(`[model-registry] User inline model "${$}": api_only=true is not supported in CLI-only mode — falling back to core registry.`);else{if(cE().has($))console.warn(`[model-registry] User inline model "${$}" overrides a core registry entry.`);return Q}}else console.warn(`[model-registry] User inline model "${$}" failed validation — falling back to core registry. Errors: ${J.error.issues.map((Q)=>Q.message).join("; ")}`)}return cE().get($)}function WQ($){if($ in lE)return lE[$];if($.startsWith("opencode-"))return"opencode";return}function P_5($){let z=`${$}/`;return Array.from(Yo.keys()).filter((G)=>G.startsWith(z)).sort()}function eL2($,z){let G=z?`for agent "${z}"`:"",J=$.split("/"),Q=J[0]??"",K=J.slice(1).join("/"),Z=Q?lE[Q]:void 0,U=[`Unknown model slug "${$}"${G?` ${G}`:""}.`,""];if(Z&&K){let W=P_5(Q);if(U.push(`This looks like an OpenRouter slug for ${Q} (CLI: ${Z}).`,`If your ${Z} CLI accepts this model, register it in .agents/oma-config.yaml:`,"","models:",` ${$}:`,` cli: ${Z}`,` cli_model: ${K} # confirm via \`${Z} --help\``," supports:",` native_dispatch_from: [${Z}]`,""),W.length>0)U.push(`Built-in ${Q} slugs you can use without a models: block:`,...W.map((Y)=>` - ${Y}`),"");U.push("Browse all OpenRouter models: https://openrouter.ai/models")}else{let W=Object.entries(lE).map(([Y,V])=>`${Y} (${V})`).join(", ");U.push(`Owner "${Q??"<missing>"}" is not bundled with a forkable CLI.`,`Supported owners: ${W}.`,"",`If "${Q??"<missing>"}" has a CLI you can shell out to, register it manually:`,"models:",` ${$}:`," cli: <your-cli-binary>",` cli_model: ${K||"<model-name>"}`," supports:"," native_dispatch_from: [<your-cli-binary>]")}return U.join(`
361
- `)}var mE=null,sL2,tL2,lE;var rZ=k(()=>{pL2();Vo();Xo();Xo();sL2=w_5();tL2=new Proxy({},{get($,z,G){let J=cE(),Q=Reflect.get(J,z,J);if(typeof Q==="function")return Q.bind(J);return Q},has($,z){return Reflect.has(cE(),z)}});lE={anthropic:"claude",openai:"codex",antigravity:"antigravity",cursor:"cursor",qwen:"qwen",kiro:"kiro",opencode:"opencode"}});function T_5(){for(let[$,z]of Object.entries(s3))for(let G of $F2){let J=z.agent_defaults[G];if(!J)throw Error(`[built-in-presets] Preset "${$}" is missing agent_defaults for "${G}". All ${$F2.length} canonical agent roles are required for built-in presets.`);if(!UQ(J.model))throw Error(`[built-in-presets] Preset "${$}" agent "${G}" references unknown model slug "${J.model}". Add it to the model registry or update the preset.`)}}var s3,o$,$F2;var sZ=k(()=>{rZ();s3={antigravity:{description:"Antigravity CLI (agy) — nominal Gemini 3.1 Pro for impl/architecture, Gemini 3.5 Flash for orchestration & explore (agy 1.0 has no `--model` flag, so the model is selected by agy's own config)",agent_defaults:{orchestrator:{model:"antigravity/gemini-3.5-flash"},architecture:{model:"antigravity/gemini-3.1-pro"},qa:{model:"antigravity/gemini-3.1-pro"},pm:{model:"antigravity/gemini-3.5-flash"},backend:{model:"antigravity/gemini-3.1-pro"},frontend:{model:"antigravity/gemini-3.1-pro"},mobile:{model:"antigravity/gemini-3.1-pro"},db:{model:"antigravity/gemini-3.1-pro"},debug:{model:"antigravity/gemini-3.1-pro"},refactor:{model:"antigravity/gemini-3.1-pro"},docs:{model:"antigravity/gemini-3.5-flash"},"tf-infra":{model:"antigravity/gemini-3.1-pro"},explore:{model:"antigravity/gemini-3.5-flash"}}},claude:{description:"Claude — Max subscription holders",agent_defaults:{orchestrator:{model:"anthropic/claude-sonnet-4-6"},architecture:{model:"anthropic/claude-opus-4-7"},qa:{model:"anthropic/claude-sonnet-4-6"},pm:{model:"anthropic/claude-sonnet-4-6"},backend:{model:"anthropic/claude-sonnet-4-6"},frontend:{model:"anthropic/claude-sonnet-4-6"},mobile:{model:"anthropic/claude-sonnet-4-6"},db:{model:"anthropic/claude-sonnet-4-6"},debug:{model:"anthropic/claude-sonnet-4-6"},refactor:{model:"anthropic/claude-sonnet-4-6"},docs:{model:"anthropic/claude-sonnet-4-6"},"tf-infra":{model:"anthropic/claude-sonnet-4-6"},explore:{model:"anthropic/claude-haiku-4-5"}}},codex:{description:"Codex — ChatGPT Plus/Pro",agent_defaults:{orchestrator:{model:"openai/gpt-5.5",effort:"medium"},architecture:{model:"openai/gpt-5.5",effort:"high"},qa:{model:"openai/gpt-5.5",effort:"high"},pm:{model:"openai/gpt-5.5",effort:"medium"},backend:{model:"openai/gpt-5.5",effort:"high"},frontend:{model:"openai/gpt-5.5",effort:"high"},mobile:{model:"openai/gpt-5.5",effort:"high"},db:{model:"openai/gpt-5.5",effort:"high"},debug:{model:"openai/gpt-5.5",effort:"high"},refactor:{model:"openai/gpt-5.5",effort:"high"},docs:{model:"openai/gpt-5.5",effort:"medium"},"tf-infra":{model:"openai/gpt-5.5",effort:"high"},explore:{model:"openai/gpt-5.4-mini",effort:"low"}}},qwen:{description:"Qwen Code — all agents routed external (no native parallel); Qwen has no --effort, only binary --thinking",agent_defaults:{orchestrator:{model:"qwen/qwen3-coder-next",thinking:!1},architecture:{model:"qwen/qwen3.6-plus",thinking:!0},qa:{model:"qwen/qwen3.6-plus",thinking:!0},pm:{model:"qwen/qwen3-coder-next",thinking:!1},backend:{model:"qwen/qwen3.6-plus",thinking:!0},frontend:{model:"qwen/qwen3.6-plus",thinking:!0},mobile:{model:"qwen/qwen3.6-plus",thinking:!0},db:{model:"qwen/qwen3.6-plus",thinking:!0},debug:{model:"qwen/qwen3.6-plus",thinking:!0},refactor:{model:"qwen/qwen3.6-plus",thinking:!0},docs:{model:"qwen/qwen3-coder-next",thinking:!1},"tf-infra":{model:"qwen/qwen3.6-plus",thinking:!0},explore:{model:"qwen/qwen3-coder-next",thinking:!1}}},kiro:{description:"Kiro CLI — AWS Bedrock via CodeWhisperer/Q; sonnet for impl/architecture, haiku for explore/orchestration",agent_defaults:{orchestrator:{model:"kiro/claude-haiku-3-5"},architecture:{model:"kiro/claude-sonnet-4-5"},qa:{model:"kiro/claude-sonnet-4-5"},pm:{model:"kiro/claude-haiku-3-5"},backend:{model:"kiro/claude-sonnet-4-5"},frontend:{model:"kiro/claude-sonnet-4-5"},mobile:{model:"kiro/claude-sonnet-4-5"},db:{model:"kiro/claude-sonnet-4-5"},debug:{model:"kiro/claude-sonnet-4-5"},refactor:{model:"kiro/claude-sonnet-4-5"},docs:{model:"kiro/claude-haiku-3-5"},"tf-infra":{model:"kiro/claude-sonnet-4-5"},explore:{model:"kiro/claude-haiku-3-5"}}},cursor:{description:"Cursor — Cursor Pro / Pro Student",agent_defaults:{orchestrator:{model:"cursor/composer-2.5-fast"},architecture:{model:"cursor/composer-2.5"},qa:{model:"cursor/composer-2.5-fast"},pm:{model:"cursor/composer-2.5-fast"},backend:{model:"cursor/composer-2.5"},frontend:{model:"cursor/composer-2.5"},mobile:{model:"cursor/composer-2.5"},db:{model:"cursor/composer-2.5"},debug:{model:"cursor/composer-2.5"},refactor:{model:"cursor/composer-2.5"},docs:{model:"cursor/composer-2.5-fast"},"tf-infra":{model:"cursor/composer-2.5"},explore:{model:"cursor/composer-2.5-fast"}}},mixed:{description:"Mixed — role-optimal vendors per agent (Claude for orchestration/QA/PM, Codex for impl/explore)",agent_defaults:{orchestrator:{model:"anthropic/claude-sonnet-4-6"},architecture:{model:"anthropic/claude-opus-4-7"},qa:{model:"anthropic/claude-sonnet-4-6"},pm:{model:"anthropic/claude-sonnet-4-6"},backend:{model:"openai/gpt-5.5",effort:"high"},frontend:{model:"openai/gpt-5.5",effort:"high"},mobile:{model:"openai/gpt-5.5",effort:"high"},db:{model:"openai/gpt-5.5",effort:"high"},debug:{model:"openai/gpt-5.5",effort:"high"},refactor:{model:"openai/gpt-5.5",effort:"high"},docs:{model:"anthropic/claude-sonnet-4-6"},"tf-infra":{model:"openai/gpt-5.5",effort:"high"},explore:{model:"openai/gpt-5.4-mini",effort:"low"}}}},o$={"claude-only":"claude","codex-only":"codex",gemini:"antigravity","qwen-only":"qwen","cursor-only":"cursor"},$F2=["orchestrator","architecture","qa","pm","backend","frontend","mobile","db","debug","refactor","docs","tf-infra","explore"];T_5()});import b_5 from"node:fs";import __5 from"node:path";function x_5($,z){let G=UQ($,z);if(G?.cli)return G.cli;let J=$.split("/")[0]??$;return WQ(J)??J}function _7($){let z=[],G=/[^\s"']+|"([^"]*)"|'([^']*)'/g,J=G.exec($);while(J!==null){if(J[1]!==void 0)z.push(J[1]);else if(J[2]!==void 0)z.push(J[2]);else if(J[0])z.push(J[0]);J=G.exec($)}return z}function S_5($,z){let G=o$[$.model_preset]??$.model_preset,J=s3[G],Q=$.custom_presets?.[G],K;if(J)K=J;else if(Q)if(Q.extends){let Z=o$[Q.extends]??Q.extends,U=s3[Z]??$.custom_presets?.[Z];K=U?{...U,agent_defaults:{...U.agent_defaults,...Q.agent_defaults}}:Q}else K=Q;return K?.agent_defaults[z]??K?.agent_defaults.orchestrator}function x7($,z){let G=process.cwd(),J=lL2(G),Q=dV(G,__5.join(".agents","oma-config.yaml")),K=null,Z,U;if(Q)try{let q=b_5.readFileSync(Q,"utf-8");K=pV(q,Q),Z=K?.agents,U=K?.default_cli}catch{}let W=$.replace(/-agent$/i,""),Y=[$,W,...eF[$]??[],...eF[W]??[]],V=Y.find((q)=>q&&Z?.[q]),B=V?Z?.[V]:void 0;if(!B&&K){let q=Y.find((L)=>tF.has(L))??W;B=S_5(K,q)}let H=B?x_5(B.model,K?.models):void 0;return{vendor:(z||H||U||J?.active_vendor||"claude").toLowerCase(),config:J}}function r$($,z){if(z!==void 0)return z;let G={claude:"-p",qwen:"-p",codex:null,cursor:null,opencode:null};if(Object.hasOwn(G,$))return G[$];return"-p"}var zF2=k(()=>{sZ();rZ();Gv();gE()});var y8=k(()=>{Gv();gE();iL2();Zo();zF2()});function GF2($){let z=$.indexOf("/");if(z===-1)return $;let G=$.slice(0,z);if(y_5.has(G))return $;throw new X7(`Model "${$}" cannot be dispatched via pi: "${G}" is a CLI-proprietary owner, not an LLM provider pi proxies to. Use a real-provider preset (claude, codex, or mixed) when dispatching agents through pi.`)}function JF2($){if($.thinking===!1)return"off";if($.thinking===!0&&$.effort===void 0)return"high";switch($.effort){case"none":return"off";case"low":return"low";case"medium":return"medium";case"high":return"high";case"xhigh":return"xhigh";default:return null}}var y_5;var Ho=k(()=>{XV();y_5=new Set(["anthropic","openai","google"])});function QF2($,z,G,J){if(J.has(z))throw new X7(`Circular extends chain detected at preset "${z}". Chain: ${[...J].join(" → ")} → ${z}`);J.add(z);let Q=s3[z];if(Q)return{description:$.description,agent_defaults:{...Q.agent_defaults,...$.agent_defaults}};let K=G.custom_presets?.[z];if(K){let Z=K;if(K.extends)Z=QF2(K,K.extends,G,J);return{description:$.description,agent_defaults:{...Z.agent_defaults,...$.agent_defaults}}}throw new X7(`Preset "${z}" referenced in 'extends' is not a built-in preset and not found in custom_presets.`)}function iE($,z,G){let J=z.model_preset;if(!J)throw new X7("'model_preset' is missing from .agents/oma-config.yaml. Run 'oma install --preset <name>' to set one.");let Q=o$[J]??J,K=s3[Q],Z=z.custom_presets?.[Q],U;if(K){if(Q!==J)console.warn(`[resolve-agent-plan] Preset alias "${J}" redirected to "${Q}". Update your config to use the canonical key.`);U=K}else if(Z)if(Z.extends)U=QF2(Z,Z.extends,z,new Set([Q]));else U=Z;else{let A=Object.keys(s3).join(", ");throw new X7(`Unknown model_preset "${J}". Built-in presets: ${A}. Custom presets defined: ${Object.keys(z.custom_presets??{}).join(", ")||"(none)"}.`)}let W=HV($)??$,Y=U.agent_defaults[W]??U.agent_defaults.orchestrator;if(!Y)throw new X7(`Preset "${Q}" has no agent_defaults for "${$}" and no orchestrator fallback. Custom presets without 'extends' must define every canonical agent role.`);let V=z.agents?.[W],B=V?{...Y,...V}:Y;if(V&&JSON.stringify(V)===JSON.stringify(Y))console.debug(`[resolve-agent-plan] ${$}: override is identical to preset entry (no-op).`);let H=UQ(B.model,z.models);if(!H)throw new X7(eL2(B.model,$));if(H.supports.api_only)throw new X7(`Model "${B.model}" has api_only: true. CLI dispatch is not supported. Use a supported model.`);let X=G??process.env.OMA_RUNTIME_VENDOR?.trim().toLowerCase(),q=H.cli,L;if(X==="pi")q="pi",L=GF2(B.model);else if(X)if(H.supports.native_dispatch_from.includes(X))q=X;else console.warn(`[resolve-agent-plan] ${$} agent: "${X}" is not in native_dispatch_from [${H.supports.native_dispatch_from.join(", ")}]. Falling back to external subprocess.`);let F=B.effort;if(q!=="pi"&&H.supports.effort?.type==="cli-session"&&F!==void 0)console.warn(`[resolve-agent-plan] effort field is ignored for Claude CLI (cli-session model). Remove 'effort' from agents.${$} in .agents/oma-config.yaml.`),F=void 0;let N={cli:q,cliModel:L??H.cli_model,spec:H};if(F!==void 0)N.effort=F;if(B.thinking!==void 0)N.thinking=B.thinking;if(B.memory!==void 0)N.memory=B.memory;return N}function qo($,z){let G=process.cwd(),J=zv(G);return iE($,J,z)}var pE=k(()=>{y8();sZ();rZ();XV();ac();Ho()});import{isAbsolute as u_5,join as g_5,resolve as KF2,sep as h_5}from"node:path";function ZF2($){if(process.platform==="win32"||process.platform==="darwin")return $.toLowerCase();return $}function YQ($,z,G){if(typeof z!=="string"||z.length===0)throw Error(`Refusing ${G}: path is empty or not a string.`);if(u_5(z))throw Error(`Refusing ${G} with absolute path "${z}" — variant paths must be relative and stay inside the project.`);let J=KF2($),Q=KF2(g_5(J,z)),K=ZF2(J),Z=ZF2(Q);if(Z!==K&&!Z.startsWith(K+h_5))throw Error(`Refusing ${G} "${z}" — resolves outside the project root.`);return z}var dE=()=>{};import{readFileSync as f_5}from"node:fs";function nE($){let z;try{z=JSON.parse(f_5($.variantPath,"utf-8"))}catch(G){return console.warn(`[oma] Skipping malformed ${$.kind} variant ${$.variantPath}: ${G instanceof Error?G.message:String(G)}`),null}try{$.validate(z)}catch(G){return console.warn(`[oma] Skipping unsafe ${$.kind} variant ${$.variantPath}: ${G instanceof Error?G.message:String(G)}`),null}return z}var Lo=()=>{};import{existsSync as Fo,mkdirSync as m_5,readdirSync as c_5,readFileSync as l_5,writeFileSync as i_5}from"node:fs";import{join as oV}from"node:path";function d_5($){return"maxTurns"}function n_5($){return"timeoutMins"}function a_5($){return $!=="opencode"}function tZ($){return JSON.stringify($)}function o_5($){return`"""
360
+ ${z}`}var hE;var S8=k(()=>{Z3();hE=E2(Q3(),1)});import oZ from"node:fs";import aV from"node:path";function cN($){let z=aV.resolve($);if(oZ.existsSync(z)&&oZ.statSync(z).isFile())return oZ.readFileSync(z,"utf-8");return $}function lN($,z){let G=dV(z,aV.join(".agents","skills","_shared","runtime","execution-protocols",`${$}.md`));if(!G)return"";try{return oZ.readFileSync(G,"utf-8")}catch{return""}}function Wo($,z){let G=dV(z,aV.join(".agents","oma-config.yaml"));if(!G)return"";let J=aV.join(aV.dirname(G),"agents");if(!oZ.existsSync(J))return"";let Q=HV($)??$,K;try{K=oZ.readdirSync(J).filter((Z)=>Z.endsWith(".md")).find((Z)=>{let U=Z.replace(/\.md$/,"");return U===$||HV(U)===Q})}catch{return""}if(!K)return"";try{let{body:Z}=r1(oZ.readFileSync(aV.join(J,K),"utf-8"));return Z.trim()}catch{return""}}var iL2=k(()=>{S8();Gv();gE()});var Yo;var pL2=k(()=>{Yo=new Map([["anthropic/claude-opus-4-7",{cli:"claude",cli_model:"claude-opus-4-7",supports:{effort:{type:"cli-session",auto_default:"high"},apply_patch:!1,task_budget:!0,prompt_cache:!0,computer_use:!1,native_dispatch_from:["claude"],api_only:!1},pricing_note:"$5/$25 per Mtok (reference only; not subscription cost)",auth_hint:"Requires Claude Max subscription ($200/mo)",subscription_tier:"claude_max"}],["anthropic/claude-sonnet-4-6",{cli:"claude",cli_model:"claude-sonnet-4-6",supports:{effort:{type:"cli-session",auto_default:"high"},apply_patch:!1,task_budget:!0,prompt_cache:!0,computer_use:!1,native_dispatch_from:["claude"],api_only:!1},auth_hint:"Requires Claude Pro or Max subscription"}],["anthropic/claude-haiku-4-5",{cli:"claude",cli_model:"claude-haiku-4-5",supports:{effort:{type:"cli-session",auto_default:"high"},apply_patch:!1,task_budget:!1,prompt_cache:!0,computer_use:!1,native_dispatch_from:["claude"],api_only:!1},auth_hint:"Requires Claude Pro or Max subscription"}],["openai/gpt-5.5",{cli:"codex",cli_model:"gpt-5.5",supports:{effort:{type:"granular",levels:["none","low","medium","high","xhigh"]},apply_patch:!0,task_budget:!1,prompt_cache:!1,computer_use:!0,native_dispatch_from:["codex"],api_only:!1},pricing_note:"$5/$30 per Mtok (reference only; improved token efficiency vs 5.4)",auth_hint:"Requires ChatGPT Plus or Pro subscription (default Codex CLI model)"}],["openai/gpt-5.4",{cli:"codex",cli_model:"gpt-5.4",supports:{effort:{type:"granular",levels:["none","low","medium","high","xhigh"]},apply_patch:!0,task_budget:!1,prompt_cache:!1,computer_use:!0,native_dispatch_from:["codex"],api_only:!1},auth_hint:"Requires ChatGPT Plus or Pro subscription"}],["openai/gpt-5.4-pro",{cli:"codex",cli_model:"gpt-5.4-pro",supports:{effort:{type:"granular",levels:["none","low","medium","high","xhigh"]},apply_patch:!0,task_budget:!1,prompt_cache:!1,computer_use:!0,native_dispatch_from:["codex"],api_only:!1},pricing_note:"$30/$180 per Mtok (reference only; use for special cases)",auth_hint:"Requires ChatGPT Pro subscription ($200/mo)",subscription_tier:"chatgpt_pro"}],["openai/gpt-5.4-mini",{cli:"codex",cli_model:"gpt-5.4-mini",supports:{effort:{type:"granular",levels:["none","low","medium","high","xhigh"]},apply_patch:!0,task_budget:!1,prompt_cache:!1,computer_use:!1,native_dispatch_from:["codex"],api_only:!1},pricing_note:"Uses only 30% Codex quota; recommended for official subagents",auth_hint:"Requires ChatGPT Plus subscription"}],["openai/gpt-5.3-codex",{cli:"codex",cli_model:"gpt-5.3-codex",supports:{effort:{type:"granular",levels:["none","low","medium","high","xhigh"]},apply_patch:!0,task_budget:!1,prompt_cache:!1,computer_use:!1,native_dispatch_from:["codex"],api_only:!1},auth_hint:"Requires ChatGPT Plus or Pro subscription"}],["antigravity/gemini-3.1-pro",{cli:"antigravity",cli_model:"Gemini 3.1 Pro (High)",supports:{effort:{type:"granular",levels:["low","high"]},apply_patch:!1,task_budget:!1,prompt_cache:!0,computer_use:!1,native_dispatch_from:["antigravity"],api_only:!1},auth_hint:"Requires Antigravity CLI sign-in (Google AI Pro tier)",subscription_tier:"google_ai_pro"}],["antigravity/gemini-3.6-flash",{cli:"antigravity",cli_model:"Gemini 3.6 Flash (Medium)",supports:{effort:{type:"granular",levels:["low","medium","high"]},apply_patch:!1,task_budget:!1,prompt_cache:!0,computer_use:!1,native_dispatch_from:["antigravity"],api_only:!1},auth_hint:"Requires Antigravity CLI sign-in (Google AI Pro tier)",subscription_tier:"google_ai_pro"}],["cursor/composer-2.5",{cli:"cursor",cli_model:"composer-2.5",supports:{effort:null,apply_patch:!1,task_budget:!1,prompt_cache:!1,computer_use:!1,native_dispatch_from:["cursor"],api_only:!1},auth_hint:"Requires Cursor Pro or Pro Student subscription"}],["cursor/composer-2.5-fast",{cli:"cursor",cli_model:"composer-2.5-fast",supports:{effort:null,apply_patch:!1,task_budget:!1,prompt_cache:!1,computer_use:!1,native_dispatch_from:["cursor"],api_only:!1},auth_hint:"Requires Cursor Pro or Pro Student subscription"}],["cursor/composer-2",{cli:"cursor",cli_model:"composer-2",supports:{effort:null,apply_patch:!1,task_budget:!1,prompt_cache:!1,computer_use:!1,native_dispatch_from:["cursor"],api_only:!1},auth_hint:"Requires Cursor Pro or Pro Student subscription"}],["cursor/composer-2-fast",{cli:"cursor",cli_model:"composer-2-fast",supports:{effort:null,apply_patch:!1,task_budget:!1,prompt_cache:!1,computer_use:!1,native_dispatch_from:["cursor"],api_only:!1},auth_hint:"Requires Cursor Pro or Pro Student subscription"}],["cursor/auto",{cli:"cursor",cli_model:"auto",supports:{effort:null,apply_patch:!1,task_budget:!1,prompt_cache:!1,computer_use:!1,native_dispatch_from:["cursor"],api_only:!1},auth_hint:"Requires Cursor Pro or Pro Student subscription (auto routing; quota-friendly)"}],["kiro/claude-sonnet-4-5",{cli:"kiro",cli_model:"anthropic.claude-sonnet-4-5-20251001-v1:0",supports:{effort:null,apply_patch:!1,task_budget:!1,prompt_cache:!1,computer_use:!1,native_dispatch_from:["kiro"],api_only:!1},auth_hint:"Requires AWS Builder ID or IAM Identity Center (Kiro CLI)"}],["kiro/claude-haiku-3-5",{cli:"kiro",cli_model:"anthropic.claude-haiku-3-5-20241022-v1:0",supports:{effort:null,apply_patch:!1,task_budget:!1,prompt_cache:!1,computer_use:!1,native_dispatch_from:["kiro"],api_only:!1},auth_hint:"Requires AWS Builder ID or IAM Identity Center (Kiro CLI)"}],["kiro/auto",{cli:"kiro",cli_model:"auto",supports:{effort:null,apply_patch:!1,task_budget:!1,prompt_cache:!1,computer_use:!1,native_dispatch_from:["kiro"],api_only:!1},auth_hint:"Requires AWS Builder ID or IAM Identity Center (Kiro CLI — auto model selection)"}],["qwen/qwen3.6-plus",{cli:"qwen",cli_model:"qwen3.6-plus",supports:{effort:{type:"binary-thinking"},apply_patch:!1,task_budget:!1,prompt_cache:!1,computer_use:!1,native_dispatch_from:[],api_only:!1},pricing_note:"1M context, enhanced agentic coding (released 2026-04)",auth_hint:"Requires Qwen Code subscription or Bailian Coding Plan API key"}],["qwen/qwen3-coder-plus",{cli:"qwen",cli_model:"qwen3-coder-plus",supports:{effort:{type:"binary-thinking"},apply_patch:!1,task_budget:!1,prompt_cache:!1,computer_use:!1,native_dispatch_from:[],api_only:!1},auth_hint:"Requires Qwen Code subscription (API key re-authentication required; OAuth deprecated 2026-04-15)"}],["qwen/qwen3-coder-next",{cli:"qwen",cli_model:"qwen3-coder-next",supports:{effort:{type:"binary-thinking"},apply_patch:!1,task_budget:!1,prompt_cache:!1,computer_use:!1,native_dispatch_from:[],api_only:!1},auth_hint:"Requires Qwen Code subscription (API key re-authentication required; OAuth deprecated 2026-04-15)"}]])});var dL2;var nL2=k(()=>{dL2=["claude","codex","cursor","antigravity","qwen","kiro","kimi","opencode"]});var I_5,R_5,aL2,D_5,v_5,fE;var Vo=k(()=>{a$();y$();nL2();I_5=l.enum(dL2),R_5=l.enum([...x0,"opencode"]),aL2=l.enum(["none","low","medium","high","xhigh"]),D_5=l.enum(["none","dynamic","fixed"]),v_5=l.union([l.object({type:l.literal("granular"),levels:l.array(aL2)}),l.object({type:l.literal("cli-session"),auto_default:aL2}),l.object({type:l.literal("thinking-budget"),modes:l.array(D_5)}),l.object({type:l.literal("binary-thinking")}),l.null()]),fE=l.object({cli:R_5,cli_model:l.string().min(1),supports:l.object({effort:v_5,apply_patch:l.boolean(),task_budget:l.boolean(),prompt_cache:l.boolean(),computer_use:l.boolean(),native_dispatch_from:l.array(I_5),api_only:l.boolean()}),pricing_note:l.string().optional(),auth_hint:l.string().min(1),subscription_tier:l.string().optional()})});import oL2 from"node:fs";import iN from"node:path";function E_5($,z){let G=iN.resolve($),J=iN.parse(G).root;while(G!==J){let Q=iN.join(G,z);if(oL2.existsSync(Q))return Q;G=iN.dirname(G)}return null}function Bo($){let z=new Map,G=$??process.cwd(),J=E_5(G,iN.join(".agents","config","models.yaml"));if(!J)return z;let Q;try{let U=oL2.readFileSync(J,"utf-8");Q=rL2.parse(U)}catch(U){return console.error(`[model-registry] Failed to parse .agents/config/models.yaml: ${U instanceof Error?U.message:String(U)}`),z}if(!Q||typeof Q!=="object"||Array.isArray(Q))return console.error("[model-registry] .agents/config/models.yaml: root must be an object with a 'models' key."),z;let K=Q;if(!("models"in K)||typeof K.models!=="object"||K.models===null||Array.isArray(K.models))return z;let Z=K.models;for(let[U,W]of Object.entries(Z)){let Y=fE.safeParse(W);if(!Y.success){console.error(`[model-registry] User entry "${U}" failed validation — skipping. Errors: ${Y.error.issues.map((B)=>B.message).join("; ")}`);continue}let V=Y.data;if(V.supports.api_only){console.warn(`[model-registry] User entry "${U}": api_only=true is not supported in CLI-only mode — skipping.`);continue}z.set(U,V)}return z}var rL2;var Xo=k(()=>{Vo();rL2=E2(Q3(),1)});function w_5(){let $=new Map;for(let[z,G]of Yo){if(G.supports.api_only)continue;$.set(z,G)}return $}function cE(){if(mE!==null)return mE;return C_5()}function C_5($){let z=new Map(sL2),G=Bo($);for(let[J,Q]of G){if(sL2.has(J))console.warn(`[model-registry] User override for slug "${J}"`);z.set(J,Q)}return mE=z,mE}function UQ($,z){if(z&&Object.hasOwn(z,$)){let G=z[$],J=fE.safeParse(G);if(J.success){let Q=J.data;if(Q.supports.api_only)console.warn(`[model-registry] User inline model "${$}": api_only=true is not supported in CLI-only mode — falling back to core registry.`);else{if(cE().has($))console.warn(`[model-registry] User inline model "${$}" overrides a core registry entry.`);return Q}}else console.warn(`[model-registry] User inline model "${$}" failed validation — falling back to core registry. Errors: ${J.error.issues.map((Q)=>Q.message).join("; ")}`)}return cE().get($)}function WQ($){if($ in lE)return lE[$];if($.startsWith("opencode-"))return"opencode";return}function P_5($){let z=`${$}/`;return Array.from(Yo.keys()).filter((G)=>G.startsWith(z)).sort()}function eL2($,z){let G=z?`for agent "${z}"`:"",J=$.split("/"),Q=J[0]??"",K=J.slice(1).join("/"),Z=Q?lE[Q]:void 0,U=[`Unknown model slug "${$}"${G?` ${G}`:""}.`,""];if(Z&&K){let W=P_5(Q);if(U.push(`This looks like an OpenRouter slug for ${Q} (CLI: ${Z}).`,`If your ${Z} CLI accepts this model, register it in .agents/oma-config.yaml:`,"","models:",` ${$}:`,` cli: ${Z}`,` cli_model: ${K} # confirm via \`${Z} --help\``," supports:",` native_dispatch_from: [${Z}]`,""),W.length>0)U.push(`Built-in ${Q} slugs you can use without a models: block:`,...W.map((Y)=>` - ${Y}`),"");U.push("Browse all OpenRouter models: https://openrouter.ai/models")}else{let W=Object.entries(lE).map(([Y,V])=>`${Y} (${V})`).join(", ");U.push(`Owner "${Q??"<missing>"}" is not bundled with a forkable CLI.`,`Supported owners: ${W}.`,"",`If "${Q??"<missing>"}" has a CLI you can shell out to, register it manually:`,"models:",` ${$}:`," cli: <your-cli-binary>",` cli_model: ${K||"<model-name>"}`," supports:"," native_dispatch_from: [<your-cli-binary>]")}return U.join(`
361
+ `)}var mE=null,sL2,tL2,lE;var rZ=k(()=>{pL2();Vo();Xo();Xo();sL2=w_5();tL2=new Proxy({},{get($,z,G){let J=cE(),Q=Reflect.get(J,z,J);if(typeof Q==="function")return Q.bind(J);return Q},has($,z){return Reflect.has(cE(),z)}});lE={anthropic:"claude",openai:"codex",antigravity:"antigravity",cursor:"cursor",qwen:"qwen",kiro:"kiro",opencode:"opencode"}});function T_5(){for(let[$,z]of Object.entries(s3))for(let G of $F2){let J=z.agent_defaults[G];if(!J)throw Error(`[built-in-presets] Preset "${$}" is missing agent_defaults for "${G}". All ${$F2.length} canonical agent roles are required for built-in presets.`);if(!UQ(J.model))throw Error(`[built-in-presets] Preset "${$}" agent "${G}" references unknown model slug "${J.model}". Add it to the model registry or update the preset.`)}}var s3,o$,$F2;var sZ=k(()=>{rZ();s3={antigravity:{description:"Antigravity CLI (agy) — nominal Gemini 3.1 Pro for impl/architecture, Gemini 3.6 Flash for orchestration & explore (agy 1.0 has no `--model` flag, so the model is selected by agy's own config)",agent_defaults:{orchestrator:{model:"antigravity/gemini-3.6-flash"},architecture:{model:"antigravity/gemini-3.1-pro"},qa:{model:"antigravity/gemini-3.1-pro"},pm:{model:"antigravity/gemini-3.6-flash"},backend:{model:"antigravity/gemini-3.1-pro"},frontend:{model:"antigravity/gemini-3.1-pro"},mobile:{model:"antigravity/gemini-3.1-pro"},db:{model:"antigravity/gemini-3.1-pro"},debug:{model:"antigravity/gemini-3.1-pro"},refactor:{model:"antigravity/gemini-3.1-pro"},docs:{model:"antigravity/gemini-3.6-flash"},"tf-infra":{model:"antigravity/gemini-3.1-pro"},explore:{model:"antigravity/gemini-3.6-flash"}}},claude:{description:"Claude — Max subscription holders",agent_defaults:{orchestrator:{model:"anthropic/claude-sonnet-4-6"},architecture:{model:"anthropic/claude-opus-4-7"},qa:{model:"anthropic/claude-sonnet-4-6"},pm:{model:"anthropic/claude-sonnet-4-6"},backend:{model:"anthropic/claude-sonnet-4-6"},frontend:{model:"anthropic/claude-sonnet-4-6"},mobile:{model:"anthropic/claude-sonnet-4-6"},db:{model:"anthropic/claude-sonnet-4-6"},debug:{model:"anthropic/claude-sonnet-4-6"},refactor:{model:"anthropic/claude-sonnet-4-6"},docs:{model:"anthropic/claude-sonnet-4-6"},"tf-infra":{model:"anthropic/claude-sonnet-4-6"},explore:{model:"anthropic/claude-haiku-4-5"}}},codex:{description:"Codex — ChatGPT Plus/Pro",agent_defaults:{orchestrator:{model:"openai/gpt-5.5",effort:"medium"},architecture:{model:"openai/gpt-5.5",effort:"high"},qa:{model:"openai/gpt-5.5",effort:"high"},pm:{model:"openai/gpt-5.5",effort:"medium"},backend:{model:"openai/gpt-5.5",effort:"high"},frontend:{model:"openai/gpt-5.5",effort:"high"},mobile:{model:"openai/gpt-5.5",effort:"high"},db:{model:"openai/gpt-5.5",effort:"high"},debug:{model:"openai/gpt-5.5",effort:"high"},refactor:{model:"openai/gpt-5.5",effort:"high"},docs:{model:"openai/gpt-5.5",effort:"medium"},"tf-infra":{model:"openai/gpt-5.5",effort:"high"},explore:{model:"openai/gpt-5.4-mini",effort:"low"}}},qwen:{description:"Qwen Code — all agents routed external (no native parallel); Qwen has no --effort, only binary --thinking",agent_defaults:{orchestrator:{model:"qwen/qwen3-coder-next",thinking:!1},architecture:{model:"qwen/qwen3.6-plus",thinking:!0},qa:{model:"qwen/qwen3.6-plus",thinking:!0},pm:{model:"qwen/qwen3-coder-next",thinking:!1},backend:{model:"qwen/qwen3.6-plus",thinking:!0},frontend:{model:"qwen/qwen3.6-plus",thinking:!0},mobile:{model:"qwen/qwen3.6-plus",thinking:!0},db:{model:"qwen/qwen3.6-plus",thinking:!0},debug:{model:"qwen/qwen3.6-plus",thinking:!0},refactor:{model:"qwen/qwen3.6-plus",thinking:!0},docs:{model:"qwen/qwen3-coder-next",thinking:!1},"tf-infra":{model:"qwen/qwen3.6-plus",thinking:!0},explore:{model:"qwen/qwen3-coder-next",thinking:!1}}},kiro:{description:"Kiro CLI — AWS Bedrock via CodeWhisperer/Q; sonnet for impl/architecture, haiku for explore/orchestration",agent_defaults:{orchestrator:{model:"kiro/claude-haiku-3-5"},architecture:{model:"kiro/claude-sonnet-4-5"},qa:{model:"kiro/claude-sonnet-4-5"},pm:{model:"kiro/claude-haiku-3-5"},backend:{model:"kiro/claude-sonnet-4-5"},frontend:{model:"kiro/claude-sonnet-4-5"},mobile:{model:"kiro/claude-sonnet-4-5"},db:{model:"kiro/claude-sonnet-4-5"},debug:{model:"kiro/claude-sonnet-4-5"},refactor:{model:"kiro/claude-sonnet-4-5"},docs:{model:"kiro/claude-haiku-3-5"},"tf-infra":{model:"kiro/claude-sonnet-4-5"},explore:{model:"kiro/claude-haiku-3-5"}}},cursor:{description:"Cursor — Cursor Pro / Pro Student",agent_defaults:{orchestrator:{model:"cursor/composer-2.5-fast"},architecture:{model:"cursor/composer-2.5"},qa:{model:"cursor/composer-2.5-fast"},pm:{model:"cursor/composer-2.5-fast"},backend:{model:"cursor/composer-2.5"},frontend:{model:"cursor/composer-2.5"},mobile:{model:"cursor/composer-2.5"},db:{model:"cursor/composer-2.5"},debug:{model:"cursor/composer-2.5"},refactor:{model:"cursor/composer-2.5"},docs:{model:"cursor/composer-2.5-fast"},"tf-infra":{model:"cursor/composer-2.5"},explore:{model:"cursor/composer-2.5-fast"}}},mixed:{description:"Mixed — role-optimal vendors per agent (Claude for orchestration/QA/PM, Codex for impl/explore)",agent_defaults:{orchestrator:{model:"anthropic/claude-sonnet-4-6"},architecture:{model:"anthropic/claude-opus-4-7"},qa:{model:"anthropic/claude-sonnet-4-6"},pm:{model:"anthropic/claude-sonnet-4-6"},backend:{model:"openai/gpt-5.5",effort:"high"},frontend:{model:"openai/gpt-5.5",effort:"high"},mobile:{model:"openai/gpt-5.5",effort:"high"},db:{model:"openai/gpt-5.5",effort:"high"},debug:{model:"openai/gpt-5.5",effort:"high"},refactor:{model:"openai/gpt-5.5",effort:"high"},docs:{model:"anthropic/claude-sonnet-4-6"},"tf-infra":{model:"openai/gpt-5.5",effort:"high"},explore:{model:"openai/gpt-5.4-mini",effort:"low"}}}},o$={"claude-only":"claude","codex-only":"codex",gemini:"antigravity","qwen-only":"qwen","cursor-only":"cursor"},$F2=["orchestrator","architecture","qa","pm","backend","frontend","mobile","db","debug","refactor","docs","tf-infra","explore"];T_5()});import b_5 from"node:fs";import __5 from"node:path";function x_5($,z){let G=UQ($,z);if(G?.cli)return G.cli;let J=$.split("/")[0]??$;return WQ(J)??J}function _7($){let z=[],G=/[^\s"']+|"([^"]*)"|'([^']*)'/g,J=G.exec($);while(J!==null){if(J[1]!==void 0)z.push(J[1]);else if(J[2]!==void 0)z.push(J[2]);else if(J[0])z.push(J[0]);J=G.exec($)}return z}function S_5($,z){let G=o$[$.model_preset]??$.model_preset,J=s3[G],Q=$.custom_presets?.[G],K;if(J)K=J;else if(Q)if(Q.extends){let Z=o$[Q.extends]??Q.extends,U=s3[Z]??$.custom_presets?.[Z];K=U?{...U,agent_defaults:{...U.agent_defaults,...Q.agent_defaults}}:Q}else K=Q;return K?.agent_defaults[z]??K?.agent_defaults.orchestrator}function x7($,z){let G=process.cwd(),J=lL2(G),Q=dV(G,__5.join(".agents","oma-config.yaml")),K=null,Z,U;if(Q)try{let q=b_5.readFileSync(Q,"utf-8");K=pV(q,Q),Z=K?.agents,U=K?.default_cli}catch{}let W=$.replace(/-agent$/i,""),Y=[$,W,...eF[$]??[],...eF[W]??[]],V=Y.find((q)=>q&&Z?.[q]),B=V?Z?.[V]:void 0;if(!B&&K){let q=Y.find((L)=>tF.has(L))??W;B=S_5(K,q)}let H=B?x_5(B.model,K?.models):void 0;return{vendor:(z||H||U||J?.active_vendor||"claude").toLowerCase(),config:J}}function r$($,z){if(z!==void 0)return z;let G={claude:"-p",qwen:"-p",codex:null,cursor:null,opencode:null};if(Object.hasOwn(G,$))return G[$];return"-p"}var zF2=k(()=>{sZ();rZ();Gv();gE()});var y8=k(()=>{Gv();gE();iL2();Zo();zF2()});function GF2($){let z=$.indexOf("/");if(z===-1)return $;let G=$.slice(0,z);if(y_5.has(G))return $;throw new X7(`Model "${$}" cannot be dispatched via pi: "${G}" is a CLI-proprietary owner, not an LLM provider pi proxies to. Use a real-provider preset (claude, codex, or mixed) when dispatching agents through pi.`)}function JF2($){if($.thinking===!1)return"off";if($.thinking===!0&&$.effort===void 0)return"high";switch($.effort){case"none":return"off";case"low":return"low";case"medium":return"medium";case"high":return"high";case"xhigh":return"xhigh";default:return null}}var y_5;var Ho=k(()=>{XV();y_5=new Set(["anthropic","openai","google"])});function QF2($,z,G,J){if(J.has(z))throw new X7(`Circular extends chain detected at preset "${z}". Chain: ${[...J].join(" → ")} → ${z}`);J.add(z);let Q=s3[z];if(Q)return{description:$.description,agent_defaults:{...Q.agent_defaults,...$.agent_defaults}};let K=G.custom_presets?.[z];if(K){let Z=K;if(K.extends)Z=QF2(K,K.extends,G,J);return{description:$.description,agent_defaults:{...Z.agent_defaults,...$.agent_defaults}}}throw new X7(`Preset "${z}" referenced in 'extends' is not a built-in preset and not found in custom_presets.`)}function iE($,z,G){let J=z.model_preset;if(!J)throw new X7("'model_preset' is missing from .agents/oma-config.yaml. Run 'oma install --preset <name>' to set one.");let Q=o$[J]??J,K=s3[Q],Z=z.custom_presets?.[Q],U;if(K){if(Q!==J)console.warn(`[resolve-agent-plan] Preset alias "${J}" redirected to "${Q}". Update your config to use the canonical key.`);U=K}else if(Z)if(Z.extends)U=QF2(Z,Z.extends,z,new Set([Q]));else U=Z;else{let A=Object.keys(s3).join(", ");throw new X7(`Unknown model_preset "${J}". Built-in presets: ${A}. Custom presets defined: ${Object.keys(z.custom_presets??{}).join(", ")||"(none)"}.`)}let W=HV($)??$,Y=U.agent_defaults[W]??U.agent_defaults.orchestrator;if(!Y)throw new X7(`Preset "${Q}" has no agent_defaults for "${$}" and no orchestrator fallback. Custom presets without 'extends' must define every canonical agent role.`);let V=z.agents?.[W],B=V?{...Y,...V}:Y;if(V&&JSON.stringify(V)===JSON.stringify(Y))console.debug(`[resolve-agent-plan] ${$}: override is identical to preset entry (no-op).`);let H=UQ(B.model,z.models);if(!H)throw new X7(eL2(B.model,$));if(H.supports.api_only)throw new X7(`Model "${B.model}" has api_only: true. CLI dispatch is not supported. Use a supported model.`);let X=G??process.env.OMA_RUNTIME_VENDOR?.trim().toLowerCase(),q=H.cli,L;if(X==="pi")q="pi",L=GF2(B.model);else if(X)if(H.supports.native_dispatch_from.includes(X))q=X;else console.warn(`[resolve-agent-plan] ${$} agent: "${X}" is not in native_dispatch_from [${H.supports.native_dispatch_from.join(", ")}]. Falling back to external subprocess.`);let F=B.effort;if(q!=="pi"&&H.supports.effort?.type==="cli-session"&&F!==void 0)console.warn(`[resolve-agent-plan] effort field is ignored for Claude CLI (cli-session model). Remove 'effort' from agents.${$} in .agents/oma-config.yaml.`),F=void 0;let N={cli:q,cliModel:L??H.cli_model,spec:H};if(F!==void 0)N.effort=F;if(B.thinking!==void 0)N.thinking=B.thinking;if(B.memory!==void 0)N.memory=B.memory;return N}function qo($,z){let G=process.cwd(),J=zv(G);return iE($,J,z)}var pE=k(()=>{y8();sZ();rZ();XV();ac();Ho()});import{isAbsolute as u_5,join as g_5,resolve as KF2,sep as h_5}from"node:path";function ZF2($){if(process.platform==="win32"||process.platform==="darwin")return $.toLowerCase();return $}function YQ($,z,G){if(typeof z!=="string"||z.length===0)throw Error(`Refusing ${G}: path is empty or not a string.`);if(u_5(z))throw Error(`Refusing ${G} with absolute path "${z}" — variant paths must be relative and stay inside the project.`);let J=KF2($),Q=KF2(g_5(J,z)),K=ZF2(J),Z=ZF2(Q);if(Z!==K&&!Z.startsWith(K+h_5))throw Error(`Refusing ${G} "${z}" — resolves outside the project root.`);return z}var dE=()=>{};import{readFileSync as f_5}from"node:fs";function nE($){let z;try{z=JSON.parse(f_5($.variantPath,"utf-8"))}catch(G){return console.warn(`[oma] Skipping malformed ${$.kind} variant ${$.variantPath}: ${G instanceof Error?G.message:String(G)}`),null}try{$.validate(z)}catch(G){return console.warn(`[oma] Skipping unsafe ${$.kind} variant ${$.variantPath}: ${G instanceof Error?G.message:String(G)}`),null}return z}var Lo=()=>{};import{existsSync as Fo,mkdirSync as m_5,readdirSync as c_5,readFileSync as l_5,writeFileSync as i_5}from"node:fs";import{join as oV}from"node:path";function d_5($){return"maxTurns"}function n_5($){return"timeoutMins"}function a_5($){return $!=="opencode"}function tZ($){return JSON.stringify($)}function o_5($){return`"""
362
362
  ${$.replaceAll('"""',"\\\"\\\"\\\"").trim()}
363
363
  """`}function s_5($){let z=$.indexOf(r_5),G=$.indexOf(UF2);if(z===-1||G===-1||G<z)return $;let J=G+UF2.length,Q=$.slice(J).replace(/^\n/,"");return $.slice(0,z)+Q}function WF2($,z){return $.replace("Follow the vendor-specific execution protocol:",`Follow \`${z}\`:`)}function t_5($){let z=oV($,".agents","agents");if(!Fo(z))return[];return c_5(z,{withFileTypes:!0}).filter((G)=>G.isFile()&&G.name.endsWith(".md")).map((G)=>{let J=G.name,Q=J.replace(".md",""),K=l_5(oV(z,J),"utf-8"),{frontmatter:Z,body:U}=r1(K);return{agentKey:Q,entry:J,frontmatter:Z,body:U}})}function e_5($,z,G,J,Q){let{agentKey:K,entry:Z,frontmatter:U,body:W}=$,Y=p_5[J]||{},V=G.tools||U.tools||z.toolsDefault,H=(Array.isArray(V)?V:String(V||"").split(",").map((M)=>M.trim()).filter(Boolean)).map((M)=>Y[M.toLowerCase()]||M),X=Array.isArray(z.toolsDefault)?H:H.join(", "),q=Array.isArray(X)?X.length>0:X.trim().length>0,L=G.model||U.model||z.modelDefault,F={name:U.name||K,description:G.description||U.description,tools:q?X:void 0,model:J==="opencode"&&L==="inherit"?void 0:L};if(z.maxTurnsDefault||G.maxTurns||U.maxTurns)F[d_5(J)]=G.maxTurns||U.maxTurns||z.maxTurnsDefault;if(G.effort)if(J==="opencode")F.variant=G.effort;else F.effort=G.effort;if(G.kind)F.kind=G.kind;if(G.temperature!==void 0)F.temperature=G.temperature;if(G.timeoutMins!==void 0)F[n_5(J)]=G.timeoutMins;if(G.mcpServers)F.mcpServers=G.mcpServers;if(U.skills&&a_5(J))F.skills=U.skills;if(G.extra)Object.assign(F,G.extra);if(J==="opencode")F.mode="subagent";let N=Q==="Simple"?s_5(W):W,A=`<!-- Generated by oh-my-agent CLI. Source: .agents/agents/${Z} -->
364
364
  ${WF2(N,z.protocolPath)}`,j=Gx5(F,J);return{fileName:Z,content:nV(j,A)}}function $x5($,z,G){let{agentKey:J,entry:Q,frontmatter:K,body:Z}=$,U=K.name||J,W=String(G.description||K.description||U),Y=String(G.model||K.model||z.modelDefault),V=G.effort||"medium",B=typeof G.extra?.sandbox_mode==="string"?G.extra.sandbox_mode:"workspace-write",H=WF2(Z,z.protocolPath),X=Array.isArray(K.skills)?K.skills.map((L)=>String(L)).filter(Boolean):[],q=[`# Generated by oh-my-agent CLI. Source: .agents/agents/${Q}`,`name = ${tZ(U)}`,`description = ${tZ(W)}`,`model = ${tZ(Y)}`,`model_reasoning_effort = ${tZ(V)}`,`sandbox_mode = ${tZ(B)}`,`developer_instructions = ${o_5(H)}`];for(let L of X)q.push(""),q.push("[[skills.config]]"),q.push(`path = ${tZ(`.agents/skills/${L}/SKILL.md`)}`),q.push("enabled = true");if(G.mcpServers&&Object.keys(G.mcpServers).length>0){q.push(""),q.push("[mcp_servers]");for(let[L,F]of Object.entries(G.mcpServers))q.push(`${L} = ${tZ(String(F))}`)}return{fileName:`${J}.toml`,content:`${q.join(`
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "oh-my-agent",
3
- "version": "10.23.2",
3
+ "version": "10.24.0",
4
4
  "description": "Portable multi-agent harness for .agents-based skills and workflows across Antigravity, Claude Code, Codex, OpenCode, and more",
5
5
  "type": "module",
6
6
  "bin": {