oh-my-agent 9.3.1 → 9.4.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 +1 -1
  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 rX5(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=kU2($,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=kU2($,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 nX5(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=Sz.basename($,Sz.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 NU2($){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 Hh(){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}sX5.Command=qh;sX5.useColor=Hh});var IU2=P((GL5)=>{var{Argument:jU2}=II(),{Command:Fh}=AU2(),{CommanderError:$L5,InvalidArgumentError:MU2}=qq(),{Help:zL5}=Bh(),{Option:OU2}=Vh();GL5.program=new Fh;GL5.createCommand=($)=>new Fh($);GL5.createOption=($,z)=>new OU2($,z);GL5.createArgument=($,z)=>new jU2($,z);GL5.Command=Fh;GL5.Option=OU2;GL5.Argument=jU2;GL5.Help=zL5;GL5.CommanderError=$L5;GL5.InvalidArgumentError=MU2;GL5.InvalidOptionArgumentError=MU2});var RU2,kh4,Nh4,Ah4,jh4,Mh4,Oh4,Ih4,DI,Rh4,Dh4,vh4;var kh=N(()=>{RU2=E2(IU2(),1),{program:kh4,createCommand:Nh4,createArgument:Ah4,createOption:jh4,CommanderError:Mh4,InvalidArgumentError:Oh4,InvalidOptionArgumentError:Ih4,Command:DI,Argument:Rh4,Option:Dh4,Help:vh4}=RU2.default});var vI;var Nh=N(()=>{vI={name:"oh-my-agent",version:"9.3.1",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 HY from"node:fs";import{homedir as qL5}from"node:os";import*as Fq from"node:path";function vU2($){if(EI)throw Error("install context already set in this process");EI=$}function EU2(){if(EI===null)throw Error("install context not set — entry point must call setInstallContext()");return EI}function qY(){return EU2().installRoot}function O7(){return EU2().mode}function wU2($){let z=process.env.OMA_HOME,G=$.global===!0||process.env.OMA_INSTALL_GLOBAL==="1";if(z!==void 0&&z!=="")return FL5(z),{installRoot:z,mode:G?"global":"project"};if(G)return{installRoot:qL5(),mode:"global"};return{installRoot:process.cwd(),mode:"project"}}function FL5($){if(!Fq.isAbsolute($))throw Error("OMA_HOME must be absolute path");for(let G of DU2)if($===G||$.startsWith(G+Fq.sep))throw Error(`OMA_HOME=${$} is forbidden (system path ${G})`);let z;try{z=HY.realpathSync($)}catch(G){let J=G instanceof Error?G.message:String(G);throw Error(`OMA_HOME=${$}: ${J}`)}for(let G of DU2)if(z===G||z.startsWith(G+Fq.sep))throw Error(`OMA_HOME=${z} is forbidden (system path ${G})`);try{HY.accessSync(z,HY.constants.W_OK)}catch{throw Error(`OMA_HOME=${z} is not writable`)}}var EI=null,DU2;var LJ=N(()=>{DU2=["/etc","/usr","/bin","/boot","/sys","/proc"]});import{join as kL5}from"node:path";function kq($){return $.endsWith("/")?$:`${$}/`}function I7($,z){let G=z.split("/").filter((J)=>J.length>0);return kL5($,...G)}var L0=".agents",wI,I3,HJ,PU2,CU2,PI,NL5=".antigravitycli",TU2,AL5=".migration-backup",jL5,ML5,OL5,IL5,RL5,Ah;var R3=N(()=>{wI=`${L0}/skills`,I3=`${L0}/results`,HJ=`${L0}/state`,PU2=`${HJ}/sessions`,CU2=`${HJ}/retry`,PI=`${HJ}/archive`,TU2=`${L0}/backup`;jL5=kq(I3),ML5=kq(HJ),OL5=kq(NL5),IL5=kq(TU2),RL5=kq(AL5),Ah=[OL5,jL5,ML5,IL5,RL5]});var y1="first-fluke/oh-my-agent",t4,xz,CI,DL5,uz,o1;var yz=N(()=>{R3();t4=wI,xz=["antigravity","claude","codex","commandcode","cursor","gemini","grok","kiro","qwen"],CI=["pi"],DL5=["copilot","hermes"],uz=[...xz,...DL5].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 gU2={};K5(gU2,{runAction:()=>c2,resolveJsonMode:()=>M5,printDescribe:()=>gL5,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(!Nq.includes(J))throw Error(`Invalid output format: ${G}. Expected one of ${Nq.join(", ")}`);return J})}function vL5($){if($?.json)return"json";let z=$?.output?.trim().toLowerCase();if(z&&Nq.includes(z))return z;if(process.env[SU2]?.trim().toLowerCase()==="json")return"json";return"text"}function M5($){return vL5($)==="json"}function xU2($){let z=$.at(-1);return z instanceof DI?z:null}function EL5($){let z=xU2($);if(z)return z.opts();let G=$.at(-1);return G&&typeof G==="object"?G:{}}function wL5($){if($ instanceof Error)return $.message;return String($)}function qJ($){throw Error($)}function Mh($,z){for(let G of $){let J=G.charCodeAt(0);if(J>=0&&J<=31||J===127)qJ(`${z} must not contain control characters`)}}function PL5($,z){if(Mh($,z),/[?#%]/.test($))qJ(`${z} must not contain ?, #, or %`);if($.includes(".."))qJ(`${z} must not contain '..'`)}function CL5($,z){Mh($,z);try{new URL($)}catch{qJ(`${z} must be a valid absolute URL`)}}function jh($,z,G="text"){if(typeof $==="string"){if(G==="identifier"){PL5($,z);return}if(G==="url"){CL5($,z);return}Mh($,z);return}if(Array.isArray($))for(let[J,Q]of $.entries())jh(Q,`${z}[${J}]`,G)}function _U2($){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 TL5($){let z=$.vendor;if(typeof z==="string"){if(z.split(",").map((K)=>K.trim()).filter(Boolean).filter((K)=>!uz.includes(K)).length>0)qJ(`vendor must be one of ${uz.join(", ")}`)}let G=$.output;if(typeof G==="string"&&!Nq.includes(G))qJ(`output must be one of ${Nq.join(", ")}`)}function bL5($){let z=$.processedArgs??$.args??[];($.registeredArguments??[]).forEach((Q,K)=>{let U=Q.name?.()||String(K),Z=z[K];if(jh(Z,U,_U2(U)),U==="agent-type"&&typeof Z==="string"&&!bU2.includes(Z))qJ(`agent-type must be one of ${bU2.join(", ")}`)});let J=$.opts();TL5(J);for(let[Q,K]of Object.entries(J))jh(K,Q,_U2(Q))}function _L5($){return($.registeredArguments??[]).map((z)=>({name:z.name?.()||"",required:!!z.required,variadic:!!z.variadic}))}function SL5($){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 uU2($){let z=[],G=$;while(G?.parent)z.unshift(G.name()),G=G.parent;return z.join(" ")}function xL5($){return $.options.some((z)=>z.long==="--json"||z.long==="--output")}function uL5($){return $.options.some((z)=>z.long==="--dry-run")}function yU2($){return{name:$.name(),path:uU2($),summary:$.summary()||void 0,description:$.description(),arguments:_L5($),options:SL5($),supportsJsonOutput:xL5($),supportsDryRun:uL5($),subcommands:$.commands.map((z)=>yU2(z))}}function yL5($,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||uU2(Q)===G)return Q;J.push(...Q.commands)}return null}function gL5($,z){let G=yL5($,z);if(!G)qJ(`Unknown command: ${z}`);let J={name:$.name(),version:$.version(),description:$.description(),env:{[SU2]:"Set to json to force machine-readable output on commands that support it."},command:yU2(G)};console.log(JSON.stringify(J,null,2))}function c2($,z={}){return async(...G)=>{let J=xU2(G);if(J&&G.length>=2)G[G.length-2]=J.optsWithGlobals();let Q=EL5(G);try{if(J)bL5(J);await $(...G)}catch(K){let U=wL5(K);if(z.supportsJsonOutput&&M5(Q))console.log(JSON.stringify({error:U},null,2));else console.error(U);process.exitCode=1}}}var SU2="OH_MY_AG_OUTPUT_FORMAT",Nq,bU2;var z1=N(()=>{kh();yz();Nq=["text","json"],bU2=["backend","frontend","mobile","qa","debug","pm"]});var hU2,fU2=($)=>{return $===12288||$>=65281&&$<=65376||$>=65504&&$<=65510},mU2=($)=>{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 iU2=N(()=>{hU2=(()=>{let $=/[\uD800-\uDBFF][\uDC00-\uDFFF]/g;return(z)=>{let G=0;$.lastIndex=0;while($.test(z))G+=1;return z.length-G}})()});var hL5,fL5,cU2,mL5,lU2,iL5,cL5,lL5,dU2=($,z={},G={})=>{let J=z.limit??1/0,Q=z.ellipsis??"",K=z?.ellipsisWidth??(Q?dU2(Q,lL5,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=[[iL5,V],[hL5,0],[fL5,Z],[mL5,Y],[lU2,W],[cU2,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(cL5,"")){let _=b.codePointAt(0)||0;if(fU2(_))I=2;else if(mU2(_))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=_===cU2?hU2($.slice(q,_.lastIndex)):_===lU2?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}},pU2;var nU2=N(()=>{iU2();hL5=/[\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,cU2=/(?:(?![\uFF61-\uFF9F\uFF00-\uFFEF])[\p{Script=Han}\p{Script=Hiragana}\p{Script=Katakana}\p{Script=Hangul}\p{Script=Tangut}]){1,1000}/yu,mL5=/\t{1,1000}/y,lU2=/[\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,iL5=/(?:[\x20-\x7E\xA0-\xFF](?!\uFE0F)){1,1000}/y,cL5=/\p{M}+/gu,lL5={limit:1/0,ellipsis:""},pU2=dU2});var dL5,pL5=($,z={})=>{return pU2($,dL5,z).width},j6;var Oh=N(()=>{nU2();dL5={limit:1/0,ellipsis:"",ellipsisWidth:0},j6=pL5});function q$($,z,G){return String($).normalize().split(sL5).map((J)=>rL5(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 NU2($){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 Hh(){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}sX5.Command=qh;sX5.useColor=Hh});var IU2=P((GL5)=>{var{Argument:jU2}=II(),{Command:Fh}=AU2(),{CommanderError:$L5,InvalidArgumentError:MU2}=qq(),{Help:zL5}=Bh(),{Option:OU2}=Vh();GL5.program=new Fh;GL5.createCommand=($)=>new Fh($);GL5.createOption=($,z)=>new OU2($,z);GL5.createArgument=($,z)=>new jU2($,z);GL5.Command=Fh;GL5.Option=OU2;GL5.Argument=jU2;GL5.Help=zL5;GL5.CommanderError=$L5;GL5.InvalidArgumentError=MU2;GL5.InvalidOptionArgumentError=MU2});var RU2,kh4,Nh4,Ah4,jh4,Mh4,Oh4,Ih4,DI,Rh4,Dh4,vh4;var kh=N(()=>{RU2=E2(IU2(),1),{program:kh4,createCommand:Nh4,createArgument:Ah4,createOption:jh4,CommanderError:Mh4,InvalidArgumentError:Oh4,InvalidOptionArgumentError:Ih4,Command:DI,Argument:Rh4,Option:Dh4,Help:vh4}=RU2.default});var vI;var Nh=N(()=>{vI={name:"oh-my-agent",version:"9.4.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 HY from"node:fs";import{homedir as qL5}from"node:os";import*as Fq from"node:path";function vU2($){if(EI)throw Error("install context already set in this process");EI=$}function EU2(){if(EI===null)throw Error("install context not set — entry point must call setInstallContext()");return EI}function qY(){return EU2().installRoot}function O7(){return EU2().mode}function wU2($){let z=process.env.OMA_HOME,G=$.global===!0||process.env.OMA_INSTALL_GLOBAL==="1";if(z!==void 0&&z!=="")return FL5(z),{installRoot:z,mode:G?"global":"project"};if(G)return{installRoot:qL5(),mode:"global"};return{installRoot:process.cwd(),mode:"project"}}function FL5($){if(!Fq.isAbsolute($))throw Error("OMA_HOME must be absolute path");for(let G of DU2)if($===G||$.startsWith(G+Fq.sep))throw Error(`OMA_HOME=${$} is forbidden (system path ${G})`);let z;try{z=HY.realpathSync($)}catch(G){let J=G instanceof Error?G.message:String(G);throw Error(`OMA_HOME=${$}: ${J}`)}for(let G of DU2)if(z===G||z.startsWith(G+Fq.sep))throw Error(`OMA_HOME=${z} is forbidden (system path ${G})`);try{HY.accessSync(z,HY.constants.W_OK)}catch{throw Error(`OMA_HOME=${z} is not writable`)}}var EI=null,DU2;var LJ=N(()=>{DU2=["/etc","/usr","/bin","/boot","/sys","/proc"]});import{join as kL5}from"node:path";function kq($){return $.endsWith("/")?$:`${$}/`}function I7($,z){let G=z.split("/").filter((J)=>J.length>0);return kL5($,...G)}var L0=".agents",wI,I3,HJ,PU2,CU2,PI,NL5=".antigravitycli",TU2,AL5=".migration-backup",jL5,ML5,OL5,IL5,RL5,Ah;var R3=N(()=>{wI=`${L0}/skills`,I3=`${L0}/results`,HJ=`${L0}/state`,PU2=`${HJ}/sessions`,CU2=`${HJ}/retry`,PI=`${HJ}/archive`,TU2=`${L0}/backup`;jL5=kq(I3),ML5=kq(HJ),OL5=kq(NL5),IL5=kq(TU2),RL5=kq(AL5),Ah=[OL5,jL5,ML5,IL5,RL5]});var y1="first-fluke/oh-my-agent",t4,xz,CI,DL5,uz,o1;var yz=N(()=>{R3();t4=wI,xz=["antigravity","claude","codex","commandcode","cursor","gemini","grok","kiro","qwen"],CI=["pi"],DL5=["copilot","hermes"],uz=[...xz,...DL5].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 gU2={};K5(gU2,{runAction:()=>c2,resolveJsonMode:()=>M5,printDescribe:()=>gL5,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(!Nq.includes(J))throw Error(`Invalid output format: ${G}. Expected one of ${Nq.join(", ")}`);return J})}function vL5($){if($?.json)return"json";let z=$?.output?.trim().toLowerCase();if(z&&Nq.includes(z))return z;if(process.env[SU2]?.trim().toLowerCase()==="json")return"json";return"text"}function M5($){return vL5($)==="json"}function xU2($){let z=$.at(-1);return z instanceof DI?z:null}function EL5($){let z=xU2($);if(z)return z.opts();let G=$.at(-1);return G&&typeof G==="object"?G:{}}function wL5($){if($ instanceof Error)return $.message;return String($)}function qJ($){throw Error($)}function Mh($,z){for(let G of $){let J=G.charCodeAt(0);if(J>=0&&J<=31||J===127)qJ(`${z} must not contain control characters`)}}function PL5($,z){if(Mh($,z),/[?#%]/.test($))qJ(`${z} must not contain ?, #, or %`);if($.includes(".."))qJ(`${z} must not contain '..'`)}function CL5($,z){Mh($,z);try{new URL($)}catch{qJ(`${z} must be a valid absolute URL`)}}function jh($,z,G="text"){if(typeof $==="string"){if(G==="identifier"){PL5($,z);return}if(G==="url"){CL5($,z);return}Mh($,z);return}if(Array.isArray($))for(let[J,Q]of $.entries())jh(Q,`${z}[${J}]`,G)}function _U2($){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 TL5($){let z=$.vendor;if(typeof z==="string"){if(z.split(",").map((K)=>K.trim()).filter(Boolean).filter((K)=>!uz.includes(K)).length>0)qJ(`vendor must be one of ${uz.join(", ")}`)}let G=$.output;if(typeof G==="string"&&!Nq.includes(G))qJ(`output must be one of ${Nq.join(", ")}`)}function bL5($){let z=$.processedArgs??$.args??[];($.registeredArguments??[]).forEach((Q,K)=>{let U=Q.name?.()||String(K),Z=z[K];if(jh(Z,U,_U2(U)),U==="agent-type"&&typeof Z==="string"&&!bU2.includes(Z))qJ(`agent-type must be one of ${bU2.join(", ")}`)});let J=$.opts();TL5(J);for(let[Q,K]of Object.entries(J))jh(K,Q,_U2(Q))}function _L5($){return($.registeredArguments??[]).map((z)=>({name:z.name?.()||"",required:!!z.required,variadic:!!z.variadic}))}function SL5($){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 uU2($){let z=[],G=$;while(G?.parent)z.unshift(G.name()),G=G.parent;return z.join(" ")}function xL5($){return $.options.some((z)=>z.long==="--json"||z.long==="--output")}function uL5($){return $.options.some((z)=>z.long==="--dry-run")}function yU2($){return{name:$.name(),path:uU2($),summary:$.summary()||void 0,description:$.description(),arguments:_L5($),options:SL5($),supportsJsonOutput:xL5($),supportsDryRun:uL5($),subcommands:$.commands.map((z)=>yU2(z))}}function yL5($,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||uU2(Q)===G)return Q;J.push(...Q.commands)}return null}function gL5($,z){let G=yL5($,z);if(!G)qJ(`Unknown command: ${z}`);let J={name:$.name(),version:$.version(),description:$.description(),env:{[SU2]:"Set to json to force machine-readable output on commands that support it."},command:yU2(G)};console.log(JSON.stringify(J,null,2))}function c2($,z={}){return async(...G)=>{let J=xU2(G);if(J&&G.length>=2)G[G.length-2]=J.optsWithGlobals();let Q=EL5(G);try{if(J)bL5(J);await $(...G)}catch(K){let U=wL5(K);if(z.supportsJsonOutput&&M5(Q))console.log(JSON.stringify({error:U},null,2));else console.error(U);process.exitCode=1}}}var SU2="OH_MY_AG_OUTPUT_FORMAT",Nq,bU2;var z1=N(()=>{kh();yz();Nq=["text","json"],bU2=["backend","frontend","mobile","qa","debug","pm"]});var hU2,fU2=($)=>{return $===12288||$>=65281&&$<=65376||$>=65504&&$<=65510},mU2=($)=>{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 iU2=N(()=>{hU2=(()=>{let $=/[\uD800-\uDBFF][\uDC00-\uDFFF]/g;return(z)=>{let G=0;$.lastIndex=0;while($.test(z))G+=1;return z.length-G}})()});var hL5,fL5,cU2,mL5,lU2,iL5,cL5,lL5,dU2=($,z={},G={})=>{let J=z.limit??1/0,Q=z.ellipsis??"",K=z?.ellipsisWidth??(Q?dU2(Q,lL5,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=[[iL5,V],[hL5,0],[fL5,Z],[mL5,Y],[lU2,W],[cU2,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(cL5,"")){let _=b.codePointAt(0)||0;if(fU2(_))I=2;else if(mU2(_))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=_===cU2?hU2($.slice(q,_.lastIndex)):_===lU2?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}},pU2;var nU2=N(()=>{iU2();hL5=/[\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,cU2=/(?:(?![\uFF61-\uFF9F\uFF00-\uFFEF])[\p{Script=Han}\p{Script=Hiragana}\p{Script=Katakana}\p{Script=Hangul}\p{Script=Tangut}]){1,1000}/yu,mL5=/\t{1,1000}/y,lU2=/[\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,iL5=/(?:[\x20-\x7E\xA0-\xFF](?!\uFE0F)){1,1000}/y,cL5=/\p{M}+/gu,lL5={limit:1/0,ellipsis:""},pU2=dU2});var dL5,pL5=($,z={})=>{return pU2($,dL5,z).width},j6;var Oh=N(()=>{nU2();dL5={limit:1/0,ellipsis:"",ellipsisWidth:0},j6=pL5});function q$($,z,G){return String($).normalize().split(sL5).map((J)=>rL5(J,z,G)).join(`
28
28
  `)}var TI="\x1B",tU2="›",nL5=39,Rh="\x07",eU2="[",aL5="]",$Z2="m",Dh,aU2,oU2=($)=>{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},rU2=($)=>`${TI}${eU2}${$}${$Z2}`,sU2=($)=>`${TI}${Dh}${$}${Rh}`,Ih=($,z,G)=>{let J=z[Symbol.iterator](),Q=!1,K=!1,U=$.at(-1),Z=U===void 0?0:j6(U),Y=J.next(),W=J.next(),B=0;while(!Y.done){let V=Y.value,L=j6(V);if(Z+L<=G)$[$.length-1]+=V;else $.push(V),Z=0;if(V===TI||V===tU2)Q=!0,K=z.startsWith(Dh,B+1);if(Q){if(K){if(V===Rh)Q=!1,K=!1}else if(V===$Z2)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()},oL5=($)=>{let z=$.split(" "),G=z.length;while(G){if(j6(z[G-1]))break;G--}if(G===z.length)return $;return z.slice(0,G).join(" ")+z.slice(G).join("")},rL5=($,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=j6(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=j6(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("");Ih(Z,L,z),Y=j6(Z.at(-1)??"");continue}if(Y+X>z&&Y&&X){if(G.wordWrap===!1&&Y<z){Ih(Z,L,z),Y=j6(Z.at(-1)??"");continue}Z.push(""),Y=0}if(Y+X>z&&G.wordWrap===!1){Ih(Z,L,z),Y=j6(Z.at(-1)??"");continue}Z[Z.length-1]+=L,Y+=X}if(G.trim!==!1)Z=Z.map((V)=>oL5(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===TI||L===tU2){aU2.lastIndex=V+1;let H=aU2.exec(W)?.groups;if(H?.code!==void 0){let q=Number.parseFloat(H.code);Q=q===nL5?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+=sU2("");let X=Q?oU2(Q):void 0;if(Q&&X)J+=rU2(X)}else if(L===`
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "oh-my-agent",
3
- "version": "9.3.1",
3
+ "version": "9.4.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": {