oh-my-agent 11.10.0 → 11.10.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +3 -0
- package/bin/cli.js +1 -1
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -4,6 +4,9 @@
|
|
|
4
4
|
|
|
5
5
|
[한국어](https://github.com/first-fluke/oh-my-agent/blob/main/docs/README.ko.md) | [中文](https://github.com/first-fluke/oh-my-agent/blob/main/docs/README.zh.md) | [Português](https://github.com/first-fluke/oh-my-agent/blob/main/docs/README.pt.md) | [日本語](https://github.com/first-fluke/oh-my-agent/blob/main/docs/README.ja.md) | [Français](https://github.com/first-fluke/oh-my-agent/blob/main/docs/README.fr.md) | [Español](https://github.com/first-fluke/oh-my-agent/blob/main/docs/README.es.md) | [Nederlands](https://github.com/first-fluke/oh-my-agent/blob/main/docs/README.nl.md) | [Polski](https://github.com/first-fluke/oh-my-agent/blob/main/docs/README.pl.md) | [Русский](https://github.com/first-fluke/oh-my-agent/blob/main/docs/README.ru.md) | [Deutsch](https://github.com/first-fluke/oh-my-agent/blob/main/docs/README.de.md) | [Tiếng Việt](https://github.com/first-fluke/oh-my-agent/blob/main/docs/README.vi.md) | [ภาษาไทย](https://github.com/first-fluke/oh-my-agent/blob/main/docs/README.th.md)
|
|
6
6
|
|
|
7
|
+
**The hardcore multi-agent orchestrator for production-grade software.**
|
|
8
|
+
Not just another chat wrapper—oh-my-agent is a professional harness that gives your AI assistant an entire engineering team.
|
|
9
|
+
|
|
7
10
|
Ever wished your AI assistant had coworkers? That's what oh-my-agent does.
|
|
8
11
|
|
|
9
12
|
Instead of one AI doing everything (and getting confused halfway through), oh-my-agent splits work across **specialized agents** — frontend, backend, architecture, QA, PM, DB, mobile, infra, debug, design, and more. Each one knows its domain deeply, has its own tools and checklists, and stays in its lane.
|
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 iS(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=lS($,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=lS($,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 uu(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=Gz.basename($,Gz.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(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 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 sV4;var dS=q(()=>{Mu();BQ2();MX();mS();cS();sV4=new PG});var vu;var nS=q(()=>{vu={name:"oh-my-agent",version:"11.10.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.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 wW from"node:fs";import{homedir as bz5}from"node:os";import*as IX from"node:path";function FQ2($){if(Ru)throw Error("install context already set in this process");Ru=$}function VQ2(){if(Ru===null)throw Error("install context not set — entry point must call setInstallContext()");return Ru}function BU(){return VQ2().installRoot}function l3(){return VQ2().mode}function YU(){try{return l3()}catch{return"project"}}function CW(){try{return BU()}catch{return process.cwd()}}function XQ2($){let z=process.env.OMA_HOME,G=$.global===!0||process.env.OMA_INSTALL_GLOBAL==="1";if(z!==void 0&&z!=="")return _z5(z),{installRoot:z,mode:G?"global":"project"};if(G)return{installRoot:bz5(),mode:"global"};return{installRoot:process.cwd(),mode:"project"}}function _z5($){if(!IX.isAbsolute($))throw Error("OMA_HOME must be absolute path");for(let G of YQ2)if($===G||$.startsWith(G+IX.sep))throw Error(`OMA_HOME=${$} is forbidden (system path ${G})`);let z;try{z=wW.realpathSync($)}catch(G){let J=G instanceof Error?G.message:String(G);throw Error(`OMA_HOME=${$}: ${J}`)}for(let G of YQ2)if(z===G||z.startsWith(G+IX.sep))throw Error(`OMA_HOME=${z} is forbidden (system path ${G})`);try{wW.accessSync(z,wW.constants.W_OK)}catch{throw Error(`OMA_HOME=${z} is not writable`)}}var Ru=null,YQ2;var b8=q(()=>{YQ2=["/etc","/usr","/bin","/boot","/sys","/proc"]});import{join as xz5}from"node:path";function FU($){return $.endsWith("/")?$:`${$}/`}function p3($,z){let G=z.split("/").filter((J)=>J.length>0);return xz5($,...G)}var _8=".agents",wu,e1,EG,HQ2,LQ2,Cu,yz5=".antigravitycli",qQ2,Sz5=".migration-backup",hz5="docs/plans",gz5=".qwen/tmp",fz5,mz5,iz5,cz5,lz5,pz5,dz5,aS;var $3=q(()=>{wu=`${_8}/skills`,e1=`${_8}/results`,EG=`${_8}/state`,HQ2=`${EG}/sessions`,LQ2=`${EG}/retry`,Cu=`${EG}/archive`,qQ2=`${_8}/backup`;fz5=FU(e1),mz5=FU(EG),iz5=FU(yz5),cz5=FU(qQ2),lz5=FU(Sz5),pz5=FU(hz5),dz5=FU(gz5),aS=[iz5,fz5,mz5,cz5,pz5,lz5,dz5]});var Y1="first-fluke/oh-my-agent",L4,x8,Tu,nz5,az5,Jz,E1;var b0=q(()=>{$3();L4=wu,x8=["antigravity","claude","codex","commandcode","cursor","grok","kimi","kiro","qwen"],Tu=["pi","opencode"],nz5=["copilot","hermes"],az5=["zcode"],Jz=[...x8,...nz5,...az5].sort(),E1={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 OQ2={};C2(OQ2,{runAction:()=>V2,resolveJsonMode:()=>s2,printDescribe:()=>ZG5,addOutputOptions:()=>e2});function e2($,z="Output as JSON"){return $.option("--json",z).option("--output <format>","Output format (text/json)",(G)=>{let J=G.trim().toLowerCase();if(!vX.includes(J))throw Error(`Invalid output format: ${G}. Expected one of ${vX.join(", ")}`);return J})}function oz5($){if($?.json)return"json";let z=$?.output?.trim().toLowerCase();if(z&&vX.includes(z))return z;if(process.env[DQ2]?.trim().toLowerCase()==="json")return"json";return"text"}function s2($){return oz5($)==="json"}function jQ2($){let z=$.at(-1);return z instanceof PG?z:null}function rz5($){let z=jQ2($);if(z)return z.opts();let G=$.at(-1);return G&&typeof G==="object"?G:{}}function sz5($){if($ instanceof Error)return $.message;return String($)}function bG($){throw Error($)}function rS($,z){for(let G of $){let J=G.charCodeAt(0);if(J>=0&&J<=31||J===127)bG(`${z} must not contain control characters`)}}function tz5($,z){if(rS($,z),/[?#%]/.test($))bG(`${z} must not contain ?, #, or %`);if($.includes(".."))bG(`${z} must not contain '..'`)}function ez5($,z){rS($,z);try{new URL($)}catch{bG(`${z} must be a valid absolute URL`)}}function oS($,z,G="text"){if(typeof $==="string"){if(G==="identifier"){tz5($,z);return}if(G==="url"){ez5($,z);return}rS($,z);return}if(Array.isArray($))for(let[J,Q]of $.entries())oS(Q,`${z}[${J}]`,G)}function AQ2($){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 $G5($){let z=$.vendor;if(typeof z==="string"){if(z.split(",").map((U)=>U.trim()).filter(Boolean).filter((U)=>!Jz.includes(U)).length>0)bG(`vendor must be one of ${Jz.join(", ")}`)}let G=$.output;if(typeof G==="string"&&!vX.includes(G))bG(`output must be one of ${vX.join(", ")}`)}function zG5($){let z=$.processedArgs??$.args??[];($.registeredArguments??[]).forEach((Q,U)=>{let K=Q.name?.()||String(U),Z=z[U];if(oS(Z,K,AQ2(K)),K==="agent-type"&&typeof Z==="string"&&!NQ2.includes(Z))bG(`agent-type must be one of ${NQ2.join(", ")}`)});let J=$.opts();$G5(J);for(let[Q,U]of Object.entries(J))oS(U,Q,AQ2(Q))}function GG5($){return($.registeredArguments??[]).map((z)=>({name:z.name?.()||"",required:!!z.required,variadic:!!z.variadic}))}function JG5($){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 uQ2($){let z=[],G=$;while(G?.parent)z.unshift(G.name()),G=G.parent;return z.join(" ")}function QG5($){return $.options.some((z)=>z.long==="--json"||z.long==="--output")}function UG5($){return $.options.some((z)=>z.long==="--dry-run")}function MQ2($){return{name:$.name(),path:uQ2($),summary:$.summary()||void 0,description:$.description(),arguments:GG5($),options:JG5($),supportsJsonOutput:QG5($),supportsDryRun:UG5($),subcommands:$.commands.map((z)=>MQ2(z))}}function KG5($,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||uQ2(Q)===G)return Q;J.push(...Q.commands)}return null}function ZG5($,z){let G=KG5($,z);if(!G)bG(`Unknown command: ${z}`);let J={name:$.name(),version:$.version(),description:$.description(),env:{[DQ2]:"Set to json to force machine-readable output on commands that support it."},command:MQ2(G)};console.log(JSON.stringify(J,null,2))}function V2($,z={}){return async(...G)=>{let J=jQ2(G);if(J&&G.length>=2)G[G.length-2]=J.optsWithGlobals();let Q=rz5(G);try{if(J)zG5(J);await $(...G)}catch(U){let K=sz5(U);if(z.supportsJsonOutput&&s2(Q))console.log(JSON.stringify({error:K},null,2));else console.error(K);process.exitCode=1}}}var DQ2="OH_MY_AG_OUTPUT_FORMAT",vX,NQ2;var K4=q(()=>{dS();b0();vX=["text","json"],NQ2=["backend","frontend","mobile","qa","debug","pm"]});var IQ2,vQ2=($)=>{return $===12288||$>=65281&&$<=65376||$>=65504&&$<=65510},RQ2=($)=>{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 wQ2=q(()=>{IQ2=(()=>{let $=/[\uD800-\uDBFF][\uDC00-\uDFFF]/g;return(z)=>{let G=0;$.lastIndex=0;while($.test(z))G+=1;return z.length-G}})()});var WG5,kG5,CQ2,BG5,TQ2,YG5,FG5,VG5,PQ2=($,z={},G={})=>{let J=z.limit??1/0,Q=z.ellipsis??"",U=z?.ellipsisWidth??(Q?PQ2(Q,VG5,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=[[YG5,Y],[WG5,0],[kG5,Z],[BG5,W],[TQ2,k],[CQ2,F]],X=0,H=0,L=$.length,N=0,A=!1,D=L,u=Math.max(0,J-U),I=0,j=0,M=0,O=0;$:while(!0){if(j>I||H>=L&&H>X){let R=$.slice(I,j)||$.slice(X,H);N=0;for(let C of R.replaceAll(FG5,"")){let v=C.codePointAt(0)||0;if(vQ2(v))O=2;else if(RQ2(v))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+=C.length,M+=O}I=j=0}if(H>=L)break $;for(let R=0,C=V.length;R<C;R++){let[v,T]=V[R];if(v.lastIndex=H,v.test($)){if(N=v===CQ2?IQ2($.slice(H,v.lastIndex)):v===TQ2?1:v.lastIndex-H,O=N*T,M+O>u)D=Math.min(D,H+Math.floor((u-M)/T));if(M+O>J){A=!0;break $}M+=O,I=X,j=H,H=X=v.lastIndex;continue $}}H+=1}return{width:A?u:M,index:A?D:L,truncated:A,ellipsed:A&&J>=U}},EQ2;var bQ2=q(()=>{wQ2();WG5=/[\u001b\u009b][[()#;?]*(?:[0-9]{1,4}(?:;[0-9]{0,4})*)?[0-9A-ORZcf-nqry=><]|\u001b\]8;[^;]*;.*?(?:\u0007|\u001b\u005c)/y,kG5=/[\x00-\x08\x0A-\x1F\x7F-\x9F]{1,1000}/y,CQ2=/(?:(?![\uFF61-\uFF9F\uFF00-\uFFEF])[\p{Script=Han}\p{Script=Hiragana}\p{Script=Katakana}\p{Script=Hangul}\p{Script=Tangut}]){1,1000}/yu,BG5=/\t{1,1000}/y,TQ2=/[\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,YG5=/(?:[\x20-\x7E\xA0-\xFF](?!\uFE0F)){1,1000}/y,FG5=/\p{M}+/gu,VG5={limit:1/0,ellipsis:""},EQ2=PQ2});var XG5,HG5=($,z={})=>{return EQ2($,XG5,z).width},h7;var sS=q(()=>{bQ2();XG5={limit:1/0,ellipsis:"",ellipsisWidth:0},h7=HG5});function _0($,z,G){return String($).normalize().split(DG5).map((J)=>AG5(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 sV4;var dS=q(()=>{Mu();BQ2();MX();mS();cS();sV4=new PG});var vu;var nS=q(()=>{vu={name:"oh-my-agent",version:"11.10.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"],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 wW from"node:fs";import{homedir as bz5}from"node:os";import*as IX from"node:path";function FQ2($){if(Ru)throw Error("install context already set in this process");Ru=$}function VQ2(){if(Ru===null)throw Error("install context not set — entry point must call setInstallContext()");return Ru}function BU(){return VQ2().installRoot}function l3(){return VQ2().mode}function YU(){try{return l3()}catch{return"project"}}function CW(){try{return BU()}catch{return process.cwd()}}function XQ2($){let z=process.env.OMA_HOME,G=$.global===!0||process.env.OMA_INSTALL_GLOBAL==="1";if(z!==void 0&&z!=="")return _z5(z),{installRoot:z,mode:G?"global":"project"};if(G)return{installRoot:bz5(),mode:"global"};return{installRoot:process.cwd(),mode:"project"}}function _z5($){if(!IX.isAbsolute($))throw Error("OMA_HOME must be absolute path");for(let G of YQ2)if($===G||$.startsWith(G+IX.sep))throw Error(`OMA_HOME=${$} is forbidden (system path ${G})`);let z;try{z=wW.realpathSync($)}catch(G){let J=G instanceof Error?G.message:String(G);throw Error(`OMA_HOME=${$}: ${J}`)}for(let G of YQ2)if(z===G||z.startsWith(G+IX.sep))throw Error(`OMA_HOME=${z} is forbidden (system path ${G})`);try{wW.accessSync(z,wW.constants.W_OK)}catch{throw Error(`OMA_HOME=${z} is not writable`)}}var Ru=null,YQ2;var b8=q(()=>{YQ2=["/etc","/usr","/bin","/boot","/sys","/proc"]});import{join as xz5}from"node:path";function FU($){return $.endsWith("/")?$:`${$}/`}function p3($,z){let G=z.split("/").filter((J)=>J.length>0);return xz5($,...G)}var _8=".agents",wu,e1,EG,HQ2,LQ2,Cu,yz5=".antigravitycli",qQ2,Sz5=".migration-backup",hz5="docs/plans",gz5=".qwen/tmp",fz5,mz5,iz5,cz5,lz5,pz5,dz5,aS;var $3=q(()=>{wu=`${_8}/skills`,e1=`${_8}/results`,EG=`${_8}/state`,HQ2=`${EG}/sessions`,LQ2=`${EG}/retry`,Cu=`${EG}/archive`,qQ2=`${_8}/backup`;fz5=FU(e1),mz5=FU(EG),iz5=FU(yz5),cz5=FU(qQ2),lz5=FU(Sz5),pz5=FU(hz5),dz5=FU(gz5),aS=[iz5,fz5,mz5,cz5,pz5,lz5,dz5]});var Y1="first-fluke/oh-my-agent",L4,x8,Tu,nz5,az5,Jz,E1;var b0=q(()=>{$3();L4=wu,x8=["antigravity","claude","codex","commandcode","cursor","grok","kimi","kiro","qwen"],Tu=["pi","opencode"],nz5=["copilot","hermes"],az5=["zcode"],Jz=[...x8,...nz5,...az5].sort(),E1={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 OQ2={};C2(OQ2,{runAction:()=>V2,resolveJsonMode:()=>s2,printDescribe:()=>ZG5,addOutputOptions:()=>e2});function e2($,z="Output as JSON"){return $.option("--json",z).option("--output <format>","Output format (text/json)",(G)=>{let J=G.trim().toLowerCase();if(!vX.includes(J))throw Error(`Invalid output format: ${G}. Expected one of ${vX.join(", ")}`);return J})}function oz5($){if($?.json)return"json";let z=$?.output?.trim().toLowerCase();if(z&&vX.includes(z))return z;if(process.env[DQ2]?.trim().toLowerCase()==="json")return"json";return"text"}function s2($){return oz5($)==="json"}function jQ2($){let z=$.at(-1);return z instanceof PG?z:null}function rz5($){let z=jQ2($);if(z)return z.opts();let G=$.at(-1);return G&&typeof G==="object"?G:{}}function sz5($){if($ instanceof Error)return $.message;return String($)}function bG($){throw Error($)}function rS($,z){for(let G of $){let J=G.charCodeAt(0);if(J>=0&&J<=31||J===127)bG(`${z} must not contain control characters`)}}function tz5($,z){if(rS($,z),/[?#%]/.test($))bG(`${z} must not contain ?, #, or %`);if($.includes(".."))bG(`${z} must not contain '..'`)}function ez5($,z){rS($,z);try{new URL($)}catch{bG(`${z} must be a valid absolute URL`)}}function oS($,z,G="text"){if(typeof $==="string"){if(G==="identifier"){tz5($,z);return}if(G==="url"){ez5($,z);return}rS($,z);return}if(Array.isArray($))for(let[J,Q]of $.entries())oS(Q,`${z}[${J}]`,G)}function AQ2($){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 $G5($){let z=$.vendor;if(typeof z==="string"){if(z.split(",").map((U)=>U.trim()).filter(Boolean).filter((U)=>!Jz.includes(U)).length>0)bG(`vendor must be one of ${Jz.join(", ")}`)}let G=$.output;if(typeof G==="string"&&!vX.includes(G))bG(`output must be one of ${vX.join(", ")}`)}function zG5($){let z=$.processedArgs??$.args??[];($.registeredArguments??[]).forEach((Q,U)=>{let K=Q.name?.()||String(U),Z=z[U];if(oS(Z,K,AQ2(K)),K==="agent-type"&&typeof Z==="string"&&!NQ2.includes(Z))bG(`agent-type must be one of ${NQ2.join(", ")}`)});let J=$.opts();$G5(J);for(let[Q,U]of Object.entries(J))oS(U,Q,AQ2(Q))}function GG5($){return($.registeredArguments??[]).map((z)=>({name:z.name?.()||"",required:!!z.required,variadic:!!z.variadic}))}function JG5($){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 uQ2($){let z=[],G=$;while(G?.parent)z.unshift(G.name()),G=G.parent;return z.join(" ")}function QG5($){return $.options.some((z)=>z.long==="--json"||z.long==="--output")}function UG5($){return $.options.some((z)=>z.long==="--dry-run")}function MQ2($){return{name:$.name(),path:uQ2($),summary:$.summary()||void 0,description:$.description(),arguments:GG5($),options:JG5($),supportsJsonOutput:QG5($),supportsDryRun:UG5($),subcommands:$.commands.map((z)=>MQ2(z))}}function KG5($,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||uQ2(Q)===G)return Q;J.push(...Q.commands)}return null}function ZG5($,z){let G=KG5($,z);if(!G)bG(`Unknown command: ${z}`);let J={name:$.name(),version:$.version(),description:$.description(),env:{[DQ2]:"Set to json to force machine-readable output on commands that support it."},command:MQ2(G)};console.log(JSON.stringify(J,null,2))}function V2($,z={}){return async(...G)=>{let J=jQ2(G);if(J&&G.length>=2)G[G.length-2]=J.optsWithGlobals();let Q=rz5(G);try{if(J)zG5(J);await $(...G)}catch(U){let K=sz5(U);if(z.supportsJsonOutput&&s2(Q))console.log(JSON.stringify({error:K},null,2));else console.error(K);process.exitCode=1}}}var DQ2="OH_MY_AG_OUTPUT_FORMAT",vX,NQ2;var K4=q(()=>{dS();b0();vX=["text","json"],NQ2=["backend","frontend","mobile","qa","debug","pm"]});var IQ2,vQ2=($)=>{return $===12288||$>=65281&&$<=65376||$>=65504&&$<=65510},RQ2=($)=>{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 wQ2=q(()=>{IQ2=(()=>{let $=/[\uD800-\uDBFF][\uDC00-\uDFFF]/g;return(z)=>{let G=0;$.lastIndex=0;while($.test(z))G+=1;return z.length-G}})()});var WG5,kG5,CQ2,BG5,TQ2,YG5,FG5,VG5,PQ2=($,z={},G={})=>{let J=z.limit??1/0,Q=z.ellipsis??"",U=z?.ellipsisWidth??(Q?PQ2(Q,VG5,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=[[YG5,Y],[WG5,0],[kG5,Z],[BG5,W],[TQ2,k],[CQ2,F]],X=0,H=0,L=$.length,N=0,A=!1,D=L,u=Math.max(0,J-U),I=0,j=0,M=0,O=0;$:while(!0){if(j>I||H>=L&&H>X){let R=$.slice(I,j)||$.slice(X,H);N=0;for(let C of R.replaceAll(FG5,"")){let v=C.codePointAt(0)||0;if(vQ2(v))O=2;else if(RQ2(v))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+=C.length,M+=O}I=j=0}if(H>=L)break $;for(let R=0,C=V.length;R<C;R++){let[v,T]=V[R];if(v.lastIndex=H,v.test($)){if(N=v===CQ2?IQ2($.slice(H,v.lastIndex)):v===TQ2?1:v.lastIndex-H,O=N*T,M+O>u)D=Math.min(D,H+Math.floor((u-M)/T));if(M+O>J){A=!0;break $}M+=O,I=X,j=H,H=X=v.lastIndex;continue $}}H+=1}return{width:A?u:M,index:A?D:L,truncated:A,ellipsed:A&&J>=U}},EQ2;var bQ2=q(()=>{wQ2();WG5=/[\u001b\u009b][[()#;?]*(?:[0-9]{1,4}(?:;[0-9]{0,4})*)?[0-9A-ORZcf-nqry=><]|\u001b\]8;[^;]*;.*?(?:\u0007|\u001b\u005c)/y,kG5=/[\x00-\x08\x0A-\x1F\x7F-\x9F]{1,1000}/y,CQ2=/(?:(?![\uFF61-\uFF9F\uFF00-\uFFEF])[\p{Script=Han}\p{Script=Hiragana}\p{Script=Katakana}\p{Script=Hangul}\p{Script=Tangut}]){1,1000}/yu,BG5=/\t{1,1000}/y,TQ2=/[\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,YG5=/(?:[\x20-\x7E\xA0-\xFF](?!\uFE0F)){1,1000}/y,FG5=/\p{M}+/gu,VG5={limit:1/0,ellipsis:""},EQ2=PQ2});var XG5,HG5=($,z={})=>{return EQ2($,XG5,z).width},h7;var sS=q(()=>{bQ2();XG5={limit:1/0,ellipsis:"",ellipsisWidth:0},h7=HG5});function _0($,z,G){return String($).normalize().split(DG5).map((J)=>AG5(J,z,G)).join(`
|
|
28
28
|
`)}var Pu="\x1B",hQ2="",LG5=39,eS="\x07",gQ2="[",qG5="]",fQ2="m",$h,_Q2,xQ2=($)=>{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},yQ2=($)=>`${Pu}${gQ2}${$}${fQ2}`,SQ2=($)=>`${Pu}${$h}${$}${eS}`,tS=($,z,G)=>{let J=z[Symbol.iterator](),Q=!1,U=!1,K=$.at(-1),Z=K===void 0?0:h7(K),W=J.next(),k=J.next(),B=0;while(!W.done){let Y=W.value,F=h7(Y);if(Z+F<=G)$[$.length-1]+=Y;else $.push(Y),Z=0;if(Y===Pu||Y===hQ2)Q=!0,U=z.startsWith($h,B+1);if(Q){if(U){if(Y===eS)Q=!1,U=!1}else if(Y===fQ2)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()},NG5=($)=>{let z=$.split(" "),G=z.length;while(G){if(h7(z[G-1]))break;G--}if(G===z.length)return $;return z.slice(0,G).join(" ")+z.slice(G).join("")},AG5=($,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=h7(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=h7(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("");tS(Z,F,z),W=h7(Z.at(-1)??"");continue}if(W+V>z&&W&&V){if(G.wordWrap===!1&&W<z){tS(Z,F,z),W=h7(Z.at(-1)??"");continue}Z.push(""),W=0}if(W+V>z&&G.wordWrap===!1){tS(Z,F,z),W=h7(Z.at(-1)??"");continue}Z[Z.length-1]+=F,W+=V}if(G.trim!==!1)Z=Z.map((Y)=>NG5(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===Pu||F===hQ2){_Q2.lastIndex=Y+1;let X=_Q2.exec(k)?.groups;if(X?.code!==void 0){let H=Number.parseFloat(X.code);Q=H===LG5?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+=SQ2("");let V=Q?xQ2(Q):void 0;if(Q&&V)J+=yQ2(V)}else if(F===`
|
package/package.json
CHANGED