oh-my-agent 12.4.2 → 12.4.3

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 (3) hide show
  1. package/README.md +0 -5
  2. package/bin/cli.js +1 -1
  3. package/package.json +1 -1
package/README.md CHANGED
@@ -362,11 +362,6 @@ This project is maintained thanks to our generous sponsors.
362
362
 
363
363
  See [SPONSORS.md](https://github.com/first-fluke/oh-my-agent/blob/main/SPONSORS.md) for a full list of supporters.
364
364
 
365
- ## Star History
366
-
367
- [![Star History Chart](https://api.star-history.com/svg?repos=first-fluke/oh-my-agent&type=date&legend=bottom-right)](https://www.star-history.com/#first-fluke/oh-my-agent&type=date&legend=bottom-right)
368
-
369
-
370
365
  ## References
371
366
 
372
367
  - Li, X., Liu, Y., Chen, W., You, B., Di, Z., He, Y., Zheng, S., Choe, K. W., Sun, J., Wang, S., Tao, C., Li, B., Zhao, X., Geng, H., Wu, X., Zhou, J., Chen, X., Xing, H., Li, Y., … Song, D. (2026). *SkillsBench: Benchmarking how well agent skills work across diverse tasks* (Version 4) [Preprint]. arXiv. https://doi.org/10.48550/arXiv.2602.12670
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 q4.env){let z=$.attributeName();if(this.getOptionValue(z)===void 0||["default","config","env"].includes(this.getOptionValueSource(z)))if($.required||$.optional)this.emit(`optionEnv:${$.name()}`,q4.env[$.envVar]);else this.emit(`optionEnv:${$.name()}`)}})}_parseOptionsImplied(){let $=new Ch(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=(U)=>{let K=U.attributeName(),Z=this.getOptionValue(K),W=this.options.find((B)=>B.negate&&K===B.attributeName()),k=this.options.find((B)=>!B.negate&&K===B.attributeName());if(W&&(W.presetArg===void 0&&Z===!1||W.presetArg!==void 0&&Z===W.presetArg))return W;return k||U},J=(U)=>{let K=G(U),Z=K.attributeName();if(this.getOptionValueSource(Z)==="env")return`environment variable '${K.envVar}'`;return`option '${K.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 U=Q.createHelp().visibleOptions(Q).filter((K)=>K.long).map((K)=>K.long);J=J.concat(U),Q=Q.parent}while(Q&&!Q._enablePositionalOptions);z=Ph($,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",J=$.length,Q=this.parent?` for '${this.name()}'`:"",U=$.join(", "),K=`error: too many arguments${Q}. Expected ${z} argument${G} but got ${J}: ${U}.`;this.error(K,{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=Ph($,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 ru(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=kz.basename($,kz.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=(K)=>this._outputConfiguration.writeErr(K),J=this._outputConfiguration.getErrHasColors(),Q=this._outputConfiguration.getErrHelpWidth();else G=(K)=>this._outputConfiguration.writeOut(K),J=this._outputConfiguration.getOutHasColors(),Q=this._outputConfiguration.getOutHelpWidth();return{error:z,write:(K)=>{if(!J)K=this._outputConfiguration.stripColor(K);return G(K)},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((U)=>U.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((U)=>U.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(q4.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 U;if(typeof z==="function")U=z({error:Q.error,command:Q.command});else U=z;if(U)Q.write(`${U}
27
- `)}),this}_outputHelpIfRequested($){let z=this._getHelpOption();if(z&&$.find((J)=>z.is(J)))this.outputHelp(),this._exit(0,"commander.helpDisplayed","(outputHelp)")}}});var dq4;var bh=L(()=>{su();KU2();lX();wh();Th();dq4=new fG});var dX;var _h=L(()=>{dX={name:"oh-my-agent",version:"12.4.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.7.0","@date-fns/tz":"^1.5.0","@napi-rs/keyring":"^1.3.0",axios:"^1.18.1","better-sqlite3":"^13.0.2",chokidar:"^5.0.0",commander:"^15.0.0","date-fns":"^4.4.0",eld:"^2.0.3","fast-xml-parser":"^5.10.1",minimatch:"^10.2.6","p-map":"^7.0.6",picocolors:"^1.1.1","puppeteer-core":"^25.4.0",remark:"^15.0.1","remark-frontmatter":"^5.0.0","remark-parse":"^11.0.0","smol-toml":"^1.7.1",unified:"^11.0.5",ws:"^8.21.1",yaml:"^2.9.0",zod:"^4.4.3"},optionalDependencies:{pptxgenjs:"^4.0.1"},devDependencies:{"@biomejs/biome":"^2.5.6","@types/better-sqlite3":"^7.6.13","@types/mdast":"^4.0.4","@types/node":"^26.1.2","@types/ws":"^8.18.1","@vitest/coverage-v8":"^4.1.10",typescript:"^7.0.2",vitest:"^4.1.10"},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 fW from"node:fs";import{homedir as SJ5}from"node:os";import*as nX from"node:path";function WU2($){if($M)throw Error("install context already set in this process");$M=$}function kU2(){if($M===null)throw Error("install context not set — entry point must call setInstallContext()");return $M}function uU(){return kU2().installRoot}function m7(){return kU2().mode}function MU(){try{return m7()}catch{return"project"}}function mW(){try{return uU()}catch{return process.cwd()}}function BU2($){let z=process.env.OMA_HOME,G=$.global===!0||process.env.OMA_INSTALL_GLOBAL==="1";if(z!==void 0&&z!=="")return hJ5(z),{installRoot:z,mode:G?"global":"project"};if(G)return{installRoot:SJ5(),mode:"global"};return{installRoot:process.cwd(),mode:"project"}}function hJ5($){if(!nX.isAbsolute($))throw Error("OMA_HOME must be absolute path");for(let G of ZU2)if($===G||$.startsWith(G+nX.sep))throw Error(`OMA_HOME=${$} is forbidden (system path ${G})`);let z;try{z=fW.realpathSync($)}catch(G){let J=G instanceof Error?G.message:String(G);throw Error(`OMA_HOME=${$}: ${J}`)}for(let G of ZU2)if(z===G||z.startsWith(G+nX.sep))throw Error(`OMA_HOME=${z} is forbidden (system path ${G})`);try{fW.accessSync(z,fW.constants.W_OK)}catch{throw Error(`OMA_HOME=${z} is not writable`)}}var $M=null,ZU2;var l8=L(()=>{ZU2=["/etc","/usr","/bin","/boot","/sys","/proc"]});import{join as gJ5}from"node:path";function OU($){return $.endsWith("/")?$:`${$}/`}function o3($,z){let G=z.split("/").filter((J)=>J.length>0);return gJ5($,...G)}var p8=".agents",zM,G3,mG,YU2,FU2,GM,fJ5=".antigravitycli",VU2,mJ5=".migration-backup",iJ5="docs/plans",cJ5=".qwen/tmp",lJ5,pJ5,dJ5,nJ5,aJ5,oJ5,rJ5,xh;var J3=L(()=>{zM=`${p8}/skills`,G3=`${p8}/results`,mG=`${p8}/state`,YU2=`${mG}/sessions`,FU2=`${mG}/retry`,GM=`${mG}/archive`,VU2=`${p8}/backup`;lJ5=OU(G3),pJ5=OU(mG),dJ5=OU(fJ5),nJ5=OU(VU2),aJ5=OU(mJ5),oJ5=OU(iJ5),rJ5=OU(cJ5),xh=[dJ5,lJ5,pJ5,nJ5,oJ5,aJ5,rJ5]});var H1="first-fluke/oh-my-agent",N4,d8,JM,sJ5,tJ5,Bz,$1;var p0=L(()=>{J3();N4=zM,d8=["antigravity","claude","codex","commandcode","cursor","grok","kimi","kiro","qwen"],JM=["pi","opencode"],sJ5=["copilot","hermes"],tJ5=["zcode"],Bz=[...d8,...sJ5,...tJ5].sort(),$1={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 DU2={};w2(DU2,{runAction:()=>V2,resolveJsonMode:()=>n2,printDescribe:()=>YQ5,addOutputOptions:()=>o2});function o2($,z="Output as JSON"){return $.option("--json",z).option("--output <format>","Output format (text/json)",(G)=>{let J=G.trim().toLowerCase();if(!aX.includes(J))throw Error(`Invalid output format: ${G}. Expected one of ${aX.join(", ")}`);return J})}function eJ5($){if($?.json)return"json";let z=$?.output?.trim().toLowerCase();if(z&&aX.includes(z))return z;if(process.env[LU2]?.trim().toLowerCase()==="json")return"json";return"text"}function n2($){return eJ5($)==="json"}function qU2($){let z=$.at(-1);return z instanceof fG?z:null}function $Q5($){let z=qU2($);if(z)return z.opts();let G=$.at(-1);return G&&typeof G==="object"?G:{}}function zQ5($){if($ instanceof Error)return $.message;return String($)}function iG($){throw Error($)}function Sh($,z){for(let G of $){let J=G.charCodeAt(0);if(J>=0&&J<=31||J===127)iG(`${z} must not contain control characters`)}}function GQ5($,z){if(Sh($,z),/[?#%]/.test($))iG(`${z} must not contain ?, #, or %`);if($.includes(".."))iG(`${z} must not contain '..'`)}function JQ5($,z){Sh($,z);try{new URL($)}catch{iG(`${z} must be a valid absolute URL`)}}function yh($,z,G="text"){if(typeof $==="string"){if(G==="identifier"){GQ5($,z);return}if(G==="url"){JQ5($,z);return}Sh($,z);return}if(Array.isArray($))for(let[J,Q]of $.entries())yh(Q,`${z}[${J}]`,G)}function HU2($){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 QQ5($){let z=$.vendor;if(typeof z==="string"){if(z.split(",").map((U)=>U.trim()).filter(Boolean).filter((U)=>!Bz.includes(U)).length>0)iG(`vendor must be one of ${Bz.join(", ")}`)}let G=$.output;if(typeof G==="string"&&!aX.includes(G))iG(`output must be one of ${aX.join(", ")}`)}function UQ5($){let z=$.processedArgs??$.args??[];($.registeredArguments??[]).forEach((Q,U)=>{let K=Q.name?.()||String(U),Z=z[U];if(yh(Z,K,HU2(K)),K==="agent-type"&&typeof Z==="string"&&!XU2.includes(Z))iG(`agent-type must be one of ${XU2.join(", ")}`)});let J=$.opts();QQ5(J);for(let[Q,U]of Object.entries(J))yh(U,Q,HU2(Q))}function KQ5($){return($.registeredArguments??[]).map((z)=>({name:z.name?.()||"",required:!!z.required,variadic:!!z.variadic}))}function ZQ5($){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 NU2($){let z=[],G=$;while(G?.parent)z.unshift(G.name()),G=G.parent;return z.join(" ")}function WQ5($){return $.options.some((z)=>z.long==="--json"||z.long==="--output")}function kQ5($){return $.options.some((z)=>z.long==="--dry-run")}function AU2($){return{name:$.name(),path:NU2($),summary:$.summary()||void 0,description:$.description(),arguments:KQ5($),options:ZQ5($),supportsJsonOutput:WQ5($),supportsDryRun:kQ5($),subcommands:$.commands.map((z)=>AU2(z))}}function BQ5($,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||NU2(Q)===G)return Q;J.push(...Q.commands)}return null}function YQ5($,z){let G=BQ5($,z);if(!G)iG(`Unknown command: ${z}`);let J={name:$.name(),version:$.version(),description:$.description(),env:{[LU2]:"Set to json to force machine-readable output on commands that support it."},command:AU2(G)};console.log(JSON.stringify(J,null,2))}function V2($,z={}){return async(...G)=>{let J=qU2(G);if(J&&G.length>=2)G[G.length-2]=J.optsWithGlobals();let Q=$Q5(G);try{if(J)UQ5(J);await $(...G)}catch(U){let K=zQ5(U);if(z.supportsJsonOutput&&n2(Q))console.log(JSON.stringify({error:K},null,2));else console.error(K);process.exitCode=1}}}var LU2="OH_MY_AG_OUTPUT_FORMAT",aX,XU2;var G4=L(()=>{bh();p0();aX=["text","json"],XU2=["backend","frontend","mobile","qa","debug","pm"]});var jU2,uU2=($)=>{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 OU2=L(()=>{jU2=(()=>{let $=/[\uD800-\uDBFF][\uDC00-\uDFFF]/g;return(z)=>{let G=0;$.lastIndex=0;while($.test(z))G+=1;return z.length-G}})()});var FQ5,VQ5,IU2,XQ5,vU2,HQ5,LQ5,qQ5,RU2=($,z={},G={})=>{let J=z.limit??1/0,Q=z.ellipsis??"",U=z?.ellipsisWidth??(Q?RU2(Q,qQ5,G).width:0),K=0,Z=G.controlWidth??0,W=G.tabWidth??8,k=G.emojiWidth??2,B=2,Y=G.regularWidth??1,F=G.wideWidth??2,V=[[HQ5,Y],[FQ5,0],[VQ5,Z],[XQ5,W],[vU2,k],[IU2,F]],X=0,H=0,q=$.length,N=0,A=!1,D=q,u=Math.max(0,J-U),I=0,j=0,M=0,O=0;$:while(!0){if(j>I||H>=q&&H>X){let w=$.slice(I,j)||$.slice(X,H);N=0;for(let T of w.replaceAll(LQ5,"")){let R=T.codePointAt(0)||0;if(uU2(R))O=2;else if(MU2(R))O=F;else O=Y;if(M+O>u)D=Math.min(D,Math.max(I,X)+N);if(M+O>J){A=!0;break $}N+=T.length,M+=O}I=j=0}if(H>=q)break $;for(let w=0,T=V.length;w<T;w++){let[R,v]=V[w];if(R.lastIndex=H,R.test($)){if(N=R===IU2?jU2($.slice(H,R.lastIndex)):R===vU2?1:R.lastIndex-H,O=N*v,M+O>u)D=Math.min(D,H+Math.floor((u-M)/v));if(M+O>J){A=!0;break $}M+=O,I=X,j=H,H=X=R.lastIndex;continue $}}H+=1}return{width:A?u:M,index:A?D:q,truncated:A,ellipsed:A&&J>=U}},wU2;var CU2=L(()=>{OU2();FQ5=/[\u001b\u009b][[()#;?]*(?:[0-9]{1,4}(?:;[0-9]{0,4})*)?[0-9A-ORZcf-nqry=><]|\u001b\]8;[^;]*;.*?(?:\u0007|\u001b\u005c)/y,VQ5=/[\x00-\x08\x0A-\x1F\x7F-\x9F]{1,1000}/y,IU2=/(?:(?![\uFF61-\uFF9F\uFF00-\uFFEF])[\p{Script=Han}\p{Script=Hiragana}\p{Script=Katakana}\p{Script=Hangul}\p{Script=Tangut}]){1,1000}/yu,XQ5=/\t{1,1000}/y,vU2=/[\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,HQ5=/(?:[\x20-\x7E\xA0-\xFF](?!\uFE0F)){1,1000}/y,LQ5=/\p{M}+/gu,qQ5={limit:1/0,ellipsis:""},wU2=RU2});var NQ5,AQ5=($,z={})=>{return wU2($,NQ5,z).width},i7;var hh=L(()=>{CU2();NQ5={limit:1/0,ellipsis:"",ellipsisWidth:0},i7=AQ5});function d0($,z,G){return String($).normalize().split(OQ5).map((J)=>MQ5(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)")}}});var dq4;var bh=L(()=>{su();KU2();lX();wh();Th();dq4=new fG});var dX;var _h=L(()=>{dX={name:"oh-my-agent",version:"12.4.3",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.7.0","@date-fns/tz":"^1.5.0","@napi-rs/keyring":"^1.3.0",axios:"^1.18.1","better-sqlite3":"^13.0.2",chokidar:"^5.0.0",commander:"^15.0.0","date-fns":"^4.4.0",eld:"^2.0.3","fast-xml-parser":"^5.10.1",minimatch:"^10.2.6","p-map":"^7.0.6",picocolors:"^1.1.1","puppeteer-core":"^25.4.0",remark:"^15.0.1","remark-frontmatter":"^5.0.0","remark-parse":"^11.0.0","smol-toml":"^1.7.1",unified:"^11.0.5",ws:"^8.21.1",yaml:"^2.9.0",zod:"^4.4.3"},optionalDependencies:{pptxgenjs:"^4.0.1"},devDependencies:{"@biomejs/biome":"^2.5.6","@types/better-sqlite3":"^7.6.13","@types/mdast":"^4.0.4","@types/node":"^26.1.2","@types/ws":"^8.18.1","@vitest/coverage-v8":"^4.1.10",typescript:"^7.0.2",vitest:"^4.1.10"},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 fW from"node:fs";import{homedir as SJ5}from"node:os";import*as nX from"node:path";function WU2($){if($M)throw Error("install context already set in this process");$M=$}function kU2(){if($M===null)throw Error("install context not set — entry point must call setInstallContext()");return $M}function uU(){return kU2().installRoot}function m7(){return kU2().mode}function MU(){try{return m7()}catch{return"project"}}function mW(){try{return uU()}catch{return process.cwd()}}function BU2($){let z=process.env.OMA_HOME,G=$.global===!0||process.env.OMA_INSTALL_GLOBAL==="1";if(z!==void 0&&z!=="")return hJ5(z),{installRoot:z,mode:G?"global":"project"};if(G)return{installRoot:SJ5(),mode:"global"};return{installRoot:process.cwd(),mode:"project"}}function hJ5($){if(!nX.isAbsolute($))throw Error("OMA_HOME must be absolute path");for(let G of ZU2)if($===G||$.startsWith(G+nX.sep))throw Error(`OMA_HOME=${$} is forbidden (system path ${G})`);let z;try{z=fW.realpathSync($)}catch(G){let J=G instanceof Error?G.message:String(G);throw Error(`OMA_HOME=${$}: ${J}`)}for(let G of ZU2)if(z===G||z.startsWith(G+nX.sep))throw Error(`OMA_HOME=${z} is forbidden (system path ${G})`);try{fW.accessSync(z,fW.constants.W_OK)}catch{throw Error(`OMA_HOME=${z} is not writable`)}}var $M=null,ZU2;var l8=L(()=>{ZU2=["/etc","/usr","/bin","/boot","/sys","/proc"]});import{join as gJ5}from"node:path";function OU($){return $.endsWith("/")?$:`${$}/`}function o3($,z){let G=z.split("/").filter((J)=>J.length>0);return gJ5($,...G)}var p8=".agents",zM,G3,mG,YU2,FU2,GM,fJ5=".antigravitycli",VU2,mJ5=".migration-backup",iJ5="docs/plans",cJ5=".qwen/tmp",lJ5,pJ5,dJ5,nJ5,aJ5,oJ5,rJ5,xh;var J3=L(()=>{zM=`${p8}/skills`,G3=`${p8}/results`,mG=`${p8}/state`,YU2=`${mG}/sessions`,FU2=`${mG}/retry`,GM=`${mG}/archive`,VU2=`${p8}/backup`;lJ5=OU(G3),pJ5=OU(mG),dJ5=OU(fJ5),nJ5=OU(VU2),aJ5=OU(mJ5),oJ5=OU(iJ5),rJ5=OU(cJ5),xh=[dJ5,lJ5,pJ5,nJ5,oJ5,aJ5,rJ5]});var H1="first-fluke/oh-my-agent",N4,d8,JM,sJ5,tJ5,Bz,$1;var p0=L(()=>{J3();N4=zM,d8=["antigravity","claude","codex","commandcode","cursor","grok","kimi","kiro","qwen"],JM=["pi","opencode"],sJ5=["copilot","hermes"],tJ5=["zcode"],Bz=[...d8,...sJ5,...tJ5].sort(),$1={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 DU2={};w2(DU2,{runAction:()=>V2,resolveJsonMode:()=>n2,printDescribe:()=>YQ5,addOutputOptions:()=>o2});function o2($,z="Output as JSON"){return $.option("--json",z).option("--output <format>","Output format (text/json)",(G)=>{let J=G.trim().toLowerCase();if(!aX.includes(J))throw Error(`Invalid output format: ${G}. Expected one of ${aX.join(", ")}`);return J})}function eJ5($){if($?.json)return"json";let z=$?.output?.trim().toLowerCase();if(z&&aX.includes(z))return z;if(process.env[LU2]?.trim().toLowerCase()==="json")return"json";return"text"}function n2($){return eJ5($)==="json"}function qU2($){let z=$.at(-1);return z instanceof fG?z:null}function $Q5($){let z=qU2($);if(z)return z.opts();let G=$.at(-1);return G&&typeof G==="object"?G:{}}function zQ5($){if($ instanceof Error)return $.message;return String($)}function iG($){throw Error($)}function Sh($,z){for(let G of $){let J=G.charCodeAt(0);if(J>=0&&J<=31||J===127)iG(`${z} must not contain control characters`)}}function GQ5($,z){if(Sh($,z),/[?#%]/.test($))iG(`${z} must not contain ?, #, or %`);if($.includes(".."))iG(`${z} must not contain '..'`)}function JQ5($,z){Sh($,z);try{new URL($)}catch{iG(`${z} must be a valid absolute URL`)}}function yh($,z,G="text"){if(typeof $==="string"){if(G==="identifier"){GQ5($,z);return}if(G==="url"){JQ5($,z);return}Sh($,z);return}if(Array.isArray($))for(let[J,Q]of $.entries())yh(Q,`${z}[${J}]`,G)}function HU2($){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 QQ5($){let z=$.vendor;if(typeof z==="string"){if(z.split(",").map((U)=>U.trim()).filter(Boolean).filter((U)=>!Bz.includes(U)).length>0)iG(`vendor must be one of ${Bz.join(", ")}`)}let G=$.output;if(typeof G==="string"&&!aX.includes(G))iG(`output must be one of ${aX.join(", ")}`)}function UQ5($){let z=$.processedArgs??$.args??[];($.registeredArguments??[]).forEach((Q,U)=>{let K=Q.name?.()||String(U),Z=z[U];if(yh(Z,K,HU2(K)),K==="agent-type"&&typeof Z==="string"&&!XU2.includes(Z))iG(`agent-type must be one of ${XU2.join(", ")}`)});let J=$.opts();QQ5(J);for(let[Q,U]of Object.entries(J))yh(U,Q,HU2(Q))}function KQ5($){return($.registeredArguments??[]).map((z)=>({name:z.name?.()||"",required:!!z.required,variadic:!!z.variadic}))}function ZQ5($){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 NU2($){let z=[],G=$;while(G?.parent)z.unshift(G.name()),G=G.parent;return z.join(" ")}function WQ5($){return $.options.some((z)=>z.long==="--json"||z.long==="--output")}function kQ5($){return $.options.some((z)=>z.long==="--dry-run")}function AU2($){return{name:$.name(),path:NU2($),summary:$.summary()||void 0,description:$.description(),arguments:KQ5($),options:ZQ5($),supportsJsonOutput:WQ5($),supportsDryRun:kQ5($),subcommands:$.commands.map((z)=>AU2(z))}}function BQ5($,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||NU2(Q)===G)return Q;J.push(...Q.commands)}return null}function YQ5($,z){let G=BQ5($,z);if(!G)iG(`Unknown command: ${z}`);let J={name:$.name(),version:$.version(),description:$.description(),env:{[LU2]:"Set to json to force machine-readable output on commands that support it."},command:AU2(G)};console.log(JSON.stringify(J,null,2))}function V2($,z={}){return async(...G)=>{let J=qU2(G);if(J&&G.length>=2)G[G.length-2]=J.optsWithGlobals();let Q=$Q5(G);try{if(J)UQ5(J);await $(...G)}catch(U){let K=zQ5(U);if(z.supportsJsonOutput&&n2(Q))console.log(JSON.stringify({error:K},null,2));else console.error(K);process.exitCode=1}}}var LU2="OH_MY_AG_OUTPUT_FORMAT",aX,XU2;var G4=L(()=>{bh();p0();aX=["text","json"],XU2=["backend","frontend","mobile","qa","debug","pm"]});var jU2,uU2=($)=>{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 OU2=L(()=>{jU2=(()=>{let $=/[\uD800-\uDBFF][\uDC00-\uDFFF]/g;return(z)=>{let G=0;$.lastIndex=0;while($.test(z))G+=1;return z.length-G}})()});var FQ5,VQ5,IU2,XQ5,vU2,HQ5,LQ5,qQ5,RU2=($,z={},G={})=>{let J=z.limit??1/0,Q=z.ellipsis??"",U=z?.ellipsisWidth??(Q?RU2(Q,qQ5,G).width:0),K=0,Z=G.controlWidth??0,W=G.tabWidth??8,k=G.emojiWidth??2,B=2,Y=G.regularWidth??1,F=G.wideWidth??2,V=[[HQ5,Y],[FQ5,0],[VQ5,Z],[XQ5,W],[vU2,k],[IU2,F]],X=0,H=0,q=$.length,N=0,A=!1,D=q,u=Math.max(0,J-U),I=0,j=0,M=0,O=0;$:while(!0){if(j>I||H>=q&&H>X){let w=$.slice(I,j)||$.slice(X,H);N=0;for(let T of w.replaceAll(LQ5,"")){let R=T.codePointAt(0)||0;if(uU2(R))O=2;else if(MU2(R))O=F;else O=Y;if(M+O>u)D=Math.min(D,Math.max(I,X)+N);if(M+O>J){A=!0;break $}N+=T.length,M+=O}I=j=0}if(H>=q)break $;for(let w=0,T=V.length;w<T;w++){let[R,v]=V[w];if(R.lastIndex=H,R.test($)){if(N=R===IU2?jU2($.slice(H,R.lastIndex)):R===vU2?1:R.lastIndex-H,O=N*v,M+O>u)D=Math.min(D,H+Math.floor((u-M)/v));if(M+O>J){A=!0;break $}M+=O,I=X,j=H,H=X=R.lastIndex;continue $}}H+=1}return{width:A?u:M,index:A?D:q,truncated:A,ellipsed:A&&J>=U}},wU2;var CU2=L(()=>{OU2();FQ5=/[\u001b\u009b][[()#;?]*(?:[0-9]{1,4}(?:;[0-9]{0,4})*)?[0-9A-ORZcf-nqry=><]|\u001b\]8;[^;]*;.*?(?:\u0007|\u001b\u005c)/y,VQ5=/[\x00-\x08\x0A-\x1F\x7F-\x9F]{1,1000}/y,IU2=/(?:(?![\uFF61-\uFF9F\uFF00-\uFFEF])[\p{Script=Han}\p{Script=Hiragana}\p{Script=Katakana}\p{Script=Hangul}\p{Script=Tangut}]){1,1000}/yu,XQ5=/\t{1,1000}/y,vU2=/[\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,HQ5=/(?:[\x20-\x7E\xA0-\xFF](?!\uFE0F)){1,1000}/y,LQ5=/\p{M}+/gu,qQ5={limit:1/0,ellipsis:""},wU2=RU2});var NQ5,AQ5=($,z={})=>{return wU2($,NQ5,z).width},i7;var hh=L(()=>{CU2();NQ5={limit:1/0,ellipsis:"",ellipsisWidth:0},i7=AQ5});function d0($,z,G){return String($).normalize().split(OQ5).map((J)=>MQ5(J,z,G)).join(`
28
28
  `)}var QM="\x1B",_U2="›",DQ5=39,fh="\x07",xU2="[",jQ5="]",yU2="m",mh,TU2,PU2=($)=>{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},EU2=($)=>`${QM}${xU2}${$}${yU2}`,bU2=($)=>`${QM}${mh}${$}${fh}`,gh=($,z,G)=>{let J=z[Symbol.iterator](),Q=!1,U=!1,K=$.at(-1),Z=K===void 0?0:i7(K),W=J.next(),k=J.next(),B=0;while(!W.done){let Y=W.value,F=i7(Y);if(Z+F<=G)$[$.length-1]+=Y;else $.push(Y),Z=0;if(Y===QM||Y===_U2)Q=!0,U=z.startsWith(mh,B+1);if(Q){if(U){if(Y===fh)Q=!1,U=!1}else if(Y===yU2)Q=!1}else if(Z+=F,Z===G&&!k.done)$.push(""),Z=0;W=k,k=J.next(),B+=Y.length}if(K=$.at(-1),!Z&&K!==void 0&&K.length&&$.length>1)$[$.length-2]+=$.pop()},uQ5=($)=>{let z=$.split(" "),G=z.length;while(G){if(i7(z[G-1]))break;G--}if(G===z.length)return $;return z.slice(0,G).join(" ")+z.slice(G).join("")},MQ5=($,z,G={})=>{if(G.trim!==!1&&$.trim()==="")return"";let J="",Q,U,K=$.split(" "),Z=[""],W=0;for(let Y=0;Y<K.length;Y++){let F=K[Y];if(G.trim!==!1){let X=Z.at(-1)??"",H=X.trimStart();if(X.length!==H.length)Z[Z.length-1]=H,W=i7(H)}if(Y!==0){if(W>=z&&(G.wordWrap===!1||G.trim===!1))Z.push(""),W=0;if(W||G.trim===!1)Z[Z.length-1]+=" ",W++}let V=i7(F);if(G.hard&&V>z){let X=z-W,H=1+Math.floor((V-X-1)/z);if(Math.floor((V-1)/z)<H)Z.push("");gh(Z,F,z),W=i7(Z.at(-1)??"");continue}if(W+V>z&&W&&V){if(G.wordWrap===!1&&W<z){gh(Z,F,z),W=i7(Z.at(-1)??"");continue}Z.push(""),W=0}if(W+V>z&&G.wordWrap===!1){gh(Z,F,z),W=i7(Z.at(-1)??"");continue}Z[Z.length-1]+=F,W+=V}if(G.trim!==!1)Z=Z.map((Y)=>uQ5(Y));let k=Z.join(`
29
29
  `),B=!1;for(let Y=0;Y<k.length;Y++){let F=k[Y];if(J+=F,!B){if(B=F>="\uD800"&&F<="\uDBFF",B)continue}else B=!1;if(F===QM||F===_U2){TU2.lastIndex=Y+1;let X=TU2.exec(k)?.groups;if(X?.code!==void 0){let H=Number.parseFloat(X.code);Q=H===DQ5?void 0:H}else if(X?.uri!==void 0)U=X.uri.length===0?void 0:X.uri}if(k[Y+1]===`
30
30
  `){if(U)J+=bU2("");let V=Q?PU2(Q):void 0;if(Q&&V)J+=EU2(V)}else if(F===`
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "oh-my-agent",
3
- "version": "12.4.2",
3
+ "version": "12.4.3",
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": {