oh-my-agent 10.1.0 → 10.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/bin/cli.js +2 -2
- package/package.json +1 -1
package/bin/cli.js
CHANGED
|
@@ -24,7 +24,7 @@ Expecting one of '${G.join("', '")}'`);if(this._lifeCycleHooks[$])this._lifeCycl
|
|
|
24
24
|
`),this.outputHelp({error:!0});let G=z||{},J=G.exitCode||1,Q=G.code||"commander.error";this._exit(J,Q,$)}_parseOptionsEnv(){this.options.forEach(($)=>{if($.envVar&&$.envVar in y4.env){let z=$.attributeName();if(this.getOptionValue(z)===void 0||["default","config","env"].includes(this.getOptionValueSource(z)))if($.required||$.optional)this.emit(`optionEnv:${$.name()}`,y4.env[$.envVar]);else this.emit(`optionEnv:${$.name()}`)}})}_parseOptionsImplied(){let $=new oq5(this.options),z=(G)=>{return this.getOptionValue(G)!==void 0&&!["default","implied"].includes(this.getOptionValueSource(G))};this.options.filter((G)=>G.implied!==void 0&&z(G.attributeName())&&$.valueFromOption(this.getOptionValue(G.attributeName()),G)).forEach((G)=>{Object.keys(G.implied).filter((J)=>!z(J)).forEach((J)=>{this.setOptionValueWithSource(J,G.implied[J],"implied")})})}missingArgument($){let z=`error: missing required argument '${$}'`;this.error(z,{code:"commander.missingArgument"})}optionMissingArgument($){let z=`error: option '${$.flags}' argument missing`;this.error(z,{code:"commander.optionMissingArgument"})}missingMandatoryOptionValue($){let z=`error: required option '${$.flags}' not specified`;this.error(z,{code:"commander.missingMandatoryOptionValue"})}_conflictingOption($,z){let G=(K)=>{let Z=K.attributeName(),U=this.getOptionValue(Z),W=this.options.find((V)=>V.negate&&Z===V.attributeName()),Y=this.options.find((V)=>!V.negate&&Z===V.attributeName());if(W&&(W.presetArg===void 0&&U===!1||W.presetArg!==void 0&&U===W.presetArg))return W;return Y||K},J=(K)=>{let Z=G(K),U=Z.attributeName();if(this.getOptionValueSource(U)==="env")return`environment variable '${Z.envVar}'`;return`option '${Z.flags}'`},Q=`error: ${J($)} cannot be used with ${J(z)}`;this.error(Q,{code:"commander.conflictingOption"})}unknownOption($){if(this._allowUnknownOption)return;let z="";if($.startsWith("--")&&this._showSuggestionAfterError){let J=[],Q=this;do{let K=Q.createHelp().visibleOptions(Q).filter((Z)=>Z.long).map((Z)=>Z.long);J=J.concat(K),Q=Q.parent}while(Q&&!Q._enablePositionalOptions);z=SU2($,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=SU2($,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 pq5(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=lz.basename($,lz.extname($)),this}executableDir($){if($===void 0)return this._executableDir;return this._executableDir=$,this}helpInformation($){let z=this.createHelp(),G=this._getOutputContext($);z.prepareContext({error:G.error,helpWidth:G.helpWidth,outputHasColors:G.hasColors});let J=z.formatHelp(this,z);if(G.hasColors)return J;return this._outputConfiguration.stripColor(J)}_getOutputContext($){$=$||{};let z=!!$.error,G,J,Q;if(z)G=(Z)=>this._outputConfiguration.writeErr(Z),J=this._outputConfiguration.getErrHasColors(),Q=this._outputConfiguration.getErrHelpWidth();else G=(Z)=>this._outputConfiguration.writeOut(Z),J=this._outputConfiguration.getOutHasColors(),Q=this._outputConfiguration.getOutHelpWidth();return{error:z,write:(Z)=>{if(!J)Z=this._outputConfiguration.stripColor(Z);return G(Z)},hasColors:J,helpWidth:Q}}outputHelp($){let z;if(typeof $==="function")z=$,$=void 0;let G=this._getOutputContext($),J={error:G.error,write:G.write,command:this};this._getCommandAndAncestors().reverse().forEach((K)=>K.emit("beforeAllHelp",J)),this.emit("beforeHelp",J);let Q=this.helpInformation({error:G.error});if(z){if(Q=z(Q),typeof Q!=="string"&&!Buffer.isBuffer(Q))throw Error("outputHelp callback must return a string or a Buffer")}if(G.write(Q),this._getHelpOption()?.long)this.emit(this._getHelpOption().long);this.emit("afterHelp",J),this._getCommandAndAncestors().forEach((K)=>K.emit("afterAllHelp",J))}helpOption($,z){if(typeof $==="boolean"){if($){if(this._helpOption===null)this._helpOption=void 0;if(this._defaultOptionGroup)this._initOptionGroup(this._getHelpOption())}else this._helpOption=null;return this}if(this._helpOption=this.createOption($??"-h, --help",z??"display help for command"),$||z)this._initOptionGroup(this._helpOption);return this}_getHelpOption(){if(this._helpOption===void 0)this.helpOption(void 0,void 0);return this._helpOption}addHelpOption($){return this._helpOption=$,this._initOptionGroup($),this}help($){this.outputHelp($);let z=Number(y4.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 xU2($){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 ah(){if(y4.env.NO_COLOR||y4.env.FORCE_COLOR==="0"||y4.env.FORCE_COLOR==="false")return!1;if(y4.env.FORCE_COLOR||y4.env.CLICOLOR_FORCE!==void 0)return!0;return}rq5.Command=oh;rq5.useColor=ah});var fU2=P((zF5)=>{var{Argument:uU2}=$R(),{Command:rh}=yU2(),{CommanderError:eq5,InvalidArgumentError:gU2}=Sq(),{Help:$F5}=lh(),{Option:hU2}=dh();zF5.program=new rh;zF5.createCommand=($)=>new rh($);zF5.createOption=($,z)=>new hU2($,z);zF5.createArgument=($,z)=>new uU2($,z);zF5.Command=rh;zF5.Option=hU2;zF5.Argument=uU2;zF5.Help=$F5;zF5.CommanderError=eq5;zF5.InvalidArgumentError=gU2;zF5.InvalidOptionArgumentError=gU2});var mU2,mi4,ci4,ii4,li4,di4,pi4,ni4,GR,ai4,oi4,ri4;var sh=N(()=>{mU2=E2(fU2(),1),{program:mi4,createCommand:ci4,createArgument:ii4,createOption:li4,CommanderError:di4,InvalidArgumentError:pi4,InvalidOptionArgumentError:ni4,Command:GR,Argument:ai4,Option:oi4,Help:ri4}=mU2.default});var JR;var th=N(()=>{JR={name:"oh-my-agent",version:"10.1.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",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"},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 MY from"node:fs";import{homedir as HF5}from"node:os";import*as xq from"node:path";function iU2($){if(QR)throw Error("install context already set in this process");QR=$}function lU2(){if(QR===null)throw Error("install context not set — entry point must call setInstallContext()");return QR}function OY(){return lU2().installRoot}function t7(){return lU2().mode}function KR(){try{return t7()}catch{return"project"}}function dU2($){let z=process.env.OMA_HOME,G=$.global===!0||process.env.OMA_INSTALL_GLOBAL==="1";if(z!==void 0&&z!=="")return qF5(z),{installRoot:z,mode:G?"global":"project"};if(G)return{installRoot:HF5(),mode:"global"};return{installRoot:process.cwd(),mode:"project"}}function qF5($){if(!xq.isAbsolute($))throw Error("OMA_HOME must be absolute path");for(let G of cU2)if($===G||$.startsWith(G+xq.sep))throw Error(`OMA_HOME=${$} is forbidden (system path ${G})`);let z;try{z=MY.realpathSync($)}catch(G){let J=G instanceof Error?G.message:String(G);throw Error(`OMA_HOME=${$}: ${J}`)}for(let G of cU2)if(z===G||z.startsWith(G+xq.sep))throw Error(`OMA_HOME=${z} is forbidden (system path ${G})`);try{MY.accessSync(z,MY.constants.W_OK)}catch{throw Error(`OMA_HOME=${z} is not writable`)}}var QR=null,cU2;var dz=N(()=>{cU2=["/etc","/usr","/bin","/boot","/sys","/proc"]});import{join as FF5}from"node:path";function yq($){return $.endsWith("/")?$:`${$}/`}function R7($,z){let G=z.split("/").filter((J)=>J.length>0);return FF5($,...G)}var j0=".agents",ZR,v3,OJ,pU2,nU2,UR,kF5=".antigravitycli",aU2,NF5=".migration-backup",AF5,jF5,MF5,OF5,IF5,eh;var E3=N(()=>{ZR=`${j0}/skills`,v3=`${j0}/results`,OJ=`${j0}/state`,pU2=`${OJ}/sessions`,nU2=`${OJ}/retry`,UR=`${OJ}/archive`,aU2=`${j0}/backup`;AF5=yq(v3),jF5=yq(OJ),MF5=yq(kF5),OF5=yq(aU2),IF5=yq(NF5),eh=[MF5,AF5,jF5,OF5,IF5]});var u1="first-fluke/oh-my-agent",e4,M0,WR,RF5,pz,s1;var nz=N(()=>{E3();e4=ZR,M0=["antigravity","claude","codex","commandcode","cursor","grok","kimi","kiro","qwen"],WR=["pi","opencode"],RF5=["copilot","hermes"],pz=[...M0,...RF5].sort(),s1={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 zW2={};z5(zW2,{runAction:()=>T2,resolveJsonMode:()=>A5,printDescribe:()=>uF5,addOutputOptions:()=>j5});function j5($,z="Output as JSON"){return $.option("--json",z).option("--output <format>","Output format (text/json)",(G)=>{let J=G.trim().toLowerCase();if(!uq.includes(J))throw Error(`Invalid output format: ${G}. Expected one of ${uq.join(", ")}`);return J})}function DF5($){if($?.json)return"json";let z=$?.output?.trim().toLowerCase();if(z&&uq.includes(z))return z;if(process.env[sU2]?.trim().toLowerCase()==="json")return"json";return"text"}function A5($){return DF5($)==="json"}function tU2($){let z=$.at(-1);return z instanceof GR?z:null}function vF5($){let z=tU2($);if(z)return z.opts();let G=$.at(-1);return G&&typeof G==="object"?G:{}}function EF5($){if($ instanceof Error)return $.message;return String($)}function IJ($){throw Error($)}function zf($,z){for(let G of $){let J=G.charCodeAt(0);if(J>=0&&J<=31||J===127)IJ(`${z} must not contain control characters`)}}function wF5($,z){if(zf($,z),/[?#%]/.test($))IJ(`${z} must not contain ?, #, or %`);if($.includes(".."))IJ(`${z} must not contain '..'`)}function PF5($,z){zf($,z);try{new URL($)}catch{IJ(`${z} must be a valid absolute URL`)}}function $f($,z,G="text"){if(typeof $==="string"){if(G==="identifier"){wF5($,z);return}if(G==="url"){PF5($,z);return}zf($,z);return}if(Array.isArray($))for(let[J,Q]of $.entries())$f(Q,`${z}[${J}]`,G)}function rU2($){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 CF5($){let z=$.vendor;if(typeof z==="string"){if(z.split(",").map((K)=>K.trim()).filter(Boolean).filter((K)=>!pz.includes(K)).length>0)IJ(`vendor must be one of ${pz.join(", ")}`)}let G=$.output;if(typeof G==="string"&&!uq.includes(G))IJ(`output must be one of ${uq.join(", ")}`)}function TF5($){let z=$.processedArgs??$.args??[];($.registeredArguments??[]).forEach((Q,K)=>{let Z=Q.name?.()||String(K),U=z[K];if($f(U,Z,rU2(Z)),Z==="agent-type"&&typeof U==="string"&&!oU2.includes(U))IJ(`agent-type must be one of ${oU2.join(", ")}`)});let J=$.opts();CF5(J);for(let[Q,K]of Object.entries(J))$f(K,Q,rU2(Q))}function bF5($){return($.registeredArguments??[]).map((z)=>({name:z.name?.()||"",required:!!z.required,variadic:!!z.variadic}))}function _F5($){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 eU2($){let z=[],G=$;while(G?.parent)z.unshift(G.name()),G=G.parent;return z.join(" ")}function SF5($){return $.options.some((z)=>z.long==="--json"||z.long==="--output")}function xF5($){return $.options.some((z)=>z.long==="--dry-run")}function $W2($){return{name:$.name(),path:eU2($),summary:$.summary()||void 0,description:$.description(),arguments:bF5($),options:_F5($),supportsJsonOutput:SF5($),supportsDryRun:xF5($),subcommands:$.commands.map((z)=>$W2(z))}}function yF5($,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||eU2(Q)===G)return Q;J.push(...Q.commands)}return null}function uF5($,z){let G=yF5($,z);if(!G)IJ(`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:$W2(G)};console.log(JSON.stringify(J,null,2))}function T2($,z={}){return async(...G)=>{let J=tU2(G);if(J&&G.length>=2)G[G.length-2]=J.optsWithGlobals();let Q=vF5(G);try{if(J)TF5(J);await $(...G)}catch(K){let Z=EF5(K);if(z.supportsJsonOutput&&A5(Q))console.log(JSON.stringify({error:Z},null,2));else console.error(Z);process.exitCode=1}}}var sU2="OH_MY_AG_OUTPUT_FORMAT",uq,oU2;var a4=N(()=>{sh();nz();uq=["text","json"],oU2=["backend","frontend","mobile","qa","debug","pm"]});var GW2,JW2=($)=>{return $===12288||$>=65281&&$<=65376||$>=65504&&$<=65510},QW2=($)=>{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 KW2=N(()=>{GW2=(()=>{let $=/[\uD800-\uDBFF][\uDC00-\uDFFF]/g;return(z)=>{let G=0;$.lastIndex=0;while($.test(z))G+=1;return z.length-G}})()});var gF5,hF5,ZW2,fF5,UW2,mF5,cF5,iF5,WW2=($,z={},G={})=>{let J=z.limit??1/0,Q=z.ellipsis??"",K=z?.ellipsisWidth??(Q?WW2(Q,iF5,G).width:0),Z=0,U=G.controlWidth??0,W=G.tabWidth??8,Y=G.emojiWidth??2,V=2,B=G.regularWidth??1,L=G.wideWidth??2,X=[[mF5,B],[gF5,0],[hF5,U],[fF5,W],[UW2,Y],[ZW2,L]],H=0,q=0,F=$.length,k=0,A=!1,j=F,M=Math.max(0,J-K),O=0,I=0,D=0,R=0;$:while(!0){if(I>O||q>=F&&q>H){let E=$.slice(O,I)||$.slice(H,q);k=0;for(let b of E.replaceAll(cF5,"")){let _=b.codePointAt(0)||0;if(JW2(_))R=2;else if(QW2(_))R=L;else R=B;if(D+R>M)j=Math.min(j,Math.max(O,H)+k);if(D+R>J){A=!0;break $}k+=b.length,D+=R}O=I=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=_===ZW2?GW2($.slice(q,_.lastIndex)):_===UW2?1:_.lastIndex-q,R=k*h,D+R>M)j=Math.min(j,q+Math.floor((M-D)/h));if(D+R>J){A=!0;break $}D+=R,O=H,I=q,q=H=_.lastIndex;continue $}}q+=1}return{width:A?M:D,index:A?j:F,truncated:A,ellipsed:A&&J>=K}},YW2;var VW2=N(()=>{KW2();gF5=/[\u001b\u009b][[()#;?]*(?:[0-9]{1,4}(?:;[0-9]{0,4})*)?[0-9A-ORZcf-nqry=><]|\u001b\]8;[^;]*;.*?(?:\u0007|\u001b\u005c)/y,hF5=/[\x00-\x08\x0A-\x1F\x7F-\x9F]{1,1000}/y,ZW2=/(?:(?![\uFF61-\uFF9F\uFF00-\uFFEF])[\p{Script=Han}\p{Script=Hiragana}\p{Script=Katakana}\p{Script=Hangul}\p{Script=Tangut}]){1,1000}/yu,fF5=/\t{1,1000}/y,UW2=/[\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,mF5=/(?:[\x20-\x7E\xA0-\xFF](?!\uFE0F)){1,1000}/y,cF5=/\p{M}+/gu,iF5={limit:1/0,ellipsis:""},YW2=WW2});var lF5,dF5=($,z={})=>{return YW2($,lF5,z).width},O6;var Gf=N(()=>{VW2();lF5={limit:1/0,ellipsis:"",ellipsisWidth:0},O6=dF5});function D$($,z,G){return String($).normalize().split(rF5).map((J)=>oF5(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 xU2($){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 ah(){if(y4.env.NO_COLOR||y4.env.FORCE_COLOR==="0"||y4.env.FORCE_COLOR==="false")return!1;if(y4.env.FORCE_COLOR||y4.env.CLICOLOR_FORCE!==void 0)return!0;return}rq5.Command=oh;rq5.useColor=ah});var fU2=P((zF5)=>{var{Argument:uU2}=$R(),{Command:rh}=yU2(),{CommanderError:eq5,InvalidArgumentError:gU2}=Sq(),{Help:$F5}=lh(),{Option:hU2}=dh();zF5.program=new rh;zF5.createCommand=($)=>new rh($);zF5.createOption=($,z)=>new hU2($,z);zF5.createArgument=($,z)=>new uU2($,z);zF5.Command=rh;zF5.Option=hU2;zF5.Argument=uU2;zF5.Help=$F5;zF5.CommanderError=eq5;zF5.InvalidArgumentError=gU2;zF5.InvalidOptionArgumentError=gU2});var mU2,mi4,ci4,ii4,li4,di4,pi4,ni4,GR,ai4,oi4,ri4;var sh=N(()=>{mU2=E2(fU2(),1),{program:mi4,createCommand:ci4,createArgument:ii4,createOption:li4,CommanderError:di4,InvalidArgumentError:pi4,InvalidOptionArgumentError:ni4,Command:GR,Argument:ai4,Option:oi4,Help:ri4}=mU2.default});var JR;var th=N(()=>{JR={name:"oh-my-agent",version:"10.2.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",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"},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 MY from"node:fs";import{homedir as HF5}from"node:os";import*as xq from"node:path";function iU2($){if(QR)throw Error("install context already set in this process");QR=$}function lU2(){if(QR===null)throw Error("install context not set — entry point must call setInstallContext()");return QR}function OY(){return lU2().installRoot}function t7(){return lU2().mode}function KR(){try{return t7()}catch{return"project"}}function dU2($){let z=process.env.OMA_HOME,G=$.global===!0||process.env.OMA_INSTALL_GLOBAL==="1";if(z!==void 0&&z!=="")return qF5(z),{installRoot:z,mode:G?"global":"project"};if(G)return{installRoot:HF5(),mode:"global"};return{installRoot:process.cwd(),mode:"project"}}function qF5($){if(!xq.isAbsolute($))throw Error("OMA_HOME must be absolute path");for(let G of cU2)if($===G||$.startsWith(G+xq.sep))throw Error(`OMA_HOME=${$} is forbidden (system path ${G})`);let z;try{z=MY.realpathSync($)}catch(G){let J=G instanceof Error?G.message:String(G);throw Error(`OMA_HOME=${$}: ${J}`)}for(let G of cU2)if(z===G||z.startsWith(G+xq.sep))throw Error(`OMA_HOME=${z} is forbidden (system path ${G})`);try{MY.accessSync(z,MY.constants.W_OK)}catch{throw Error(`OMA_HOME=${z} is not writable`)}}var QR=null,cU2;var dz=N(()=>{cU2=["/etc","/usr","/bin","/boot","/sys","/proc"]});import{join as FF5}from"node:path";function yq($){return $.endsWith("/")?$:`${$}/`}function R7($,z){let G=z.split("/").filter((J)=>J.length>0);return FF5($,...G)}var j0=".agents",ZR,v3,OJ,pU2,nU2,UR,kF5=".antigravitycli",aU2,NF5=".migration-backup",AF5,jF5,MF5,OF5,IF5,eh;var E3=N(()=>{ZR=`${j0}/skills`,v3=`${j0}/results`,OJ=`${j0}/state`,pU2=`${OJ}/sessions`,nU2=`${OJ}/retry`,UR=`${OJ}/archive`,aU2=`${j0}/backup`;AF5=yq(v3),jF5=yq(OJ),MF5=yq(kF5),OF5=yq(aU2),IF5=yq(NF5),eh=[MF5,AF5,jF5,OF5,IF5]});var u1="first-fluke/oh-my-agent",e4,M0,WR,RF5,pz,s1;var nz=N(()=>{E3();e4=ZR,M0=["antigravity","claude","codex","commandcode","cursor","grok","kimi","kiro","qwen"],WR=["pi","opencode"],RF5=["copilot","hermes"],pz=[...M0,...RF5].sort(),s1={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 zW2={};z5(zW2,{runAction:()=>T2,resolveJsonMode:()=>A5,printDescribe:()=>uF5,addOutputOptions:()=>j5});function j5($,z="Output as JSON"){return $.option("--json",z).option("--output <format>","Output format (text/json)",(G)=>{let J=G.trim().toLowerCase();if(!uq.includes(J))throw Error(`Invalid output format: ${G}. Expected one of ${uq.join(", ")}`);return J})}function DF5($){if($?.json)return"json";let z=$?.output?.trim().toLowerCase();if(z&&uq.includes(z))return z;if(process.env[sU2]?.trim().toLowerCase()==="json")return"json";return"text"}function A5($){return DF5($)==="json"}function tU2($){let z=$.at(-1);return z instanceof GR?z:null}function vF5($){let z=tU2($);if(z)return z.opts();let G=$.at(-1);return G&&typeof G==="object"?G:{}}function EF5($){if($ instanceof Error)return $.message;return String($)}function IJ($){throw Error($)}function zf($,z){for(let G of $){let J=G.charCodeAt(0);if(J>=0&&J<=31||J===127)IJ(`${z} must not contain control characters`)}}function wF5($,z){if(zf($,z),/[?#%]/.test($))IJ(`${z} must not contain ?, #, or %`);if($.includes(".."))IJ(`${z} must not contain '..'`)}function PF5($,z){zf($,z);try{new URL($)}catch{IJ(`${z} must be a valid absolute URL`)}}function $f($,z,G="text"){if(typeof $==="string"){if(G==="identifier"){wF5($,z);return}if(G==="url"){PF5($,z);return}zf($,z);return}if(Array.isArray($))for(let[J,Q]of $.entries())$f(Q,`${z}[${J}]`,G)}function rU2($){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 CF5($){let z=$.vendor;if(typeof z==="string"){if(z.split(",").map((K)=>K.trim()).filter(Boolean).filter((K)=>!pz.includes(K)).length>0)IJ(`vendor must be one of ${pz.join(", ")}`)}let G=$.output;if(typeof G==="string"&&!uq.includes(G))IJ(`output must be one of ${uq.join(", ")}`)}function TF5($){let z=$.processedArgs??$.args??[];($.registeredArguments??[]).forEach((Q,K)=>{let Z=Q.name?.()||String(K),U=z[K];if($f(U,Z,rU2(Z)),Z==="agent-type"&&typeof U==="string"&&!oU2.includes(U))IJ(`agent-type must be one of ${oU2.join(", ")}`)});let J=$.opts();CF5(J);for(let[Q,K]of Object.entries(J))$f(K,Q,rU2(Q))}function bF5($){return($.registeredArguments??[]).map((z)=>({name:z.name?.()||"",required:!!z.required,variadic:!!z.variadic}))}function _F5($){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 eU2($){let z=[],G=$;while(G?.parent)z.unshift(G.name()),G=G.parent;return z.join(" ")}function SF5($){return $.options.some((z)=>z.long==="--json"||z.long==="--output")}function xF5($){return $.options.some((z)=>z.long==="--dry-run")}function $W2($){return{name:$.name(),path:eU2($),summary:$.summary()||void 0,description:$.description(),arguments:bF5($),options:_F5($),supportsJsonOutput:SF5($),supportsDryRun:xF5($),subcommands:$.commands.map((z)=>$W2(z))}}function yF5($,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||eU2(Q)===G)return Q;J.push(...Q.commands)}return null}function uF5($,z){let G=yF5($,z);if(!G)IJ(`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:$W2(G)};console.log(JSON.stringify(J,null,2))}function T2($,z={}){return async(...G)=>{let J=tU2(G);if(J&&G.length>=2)G[G.length-2]=J.optsWithGlobals();let Q=vF5(G);try{if(J)TF5(J);await $(...G)}catch(K){let Z=EF5(K);if(z.supportsJsonOutput&&A5(Q))console.log(JSON.stringify({error:Z},null,2));else console.error(Z);process.exitCode=1}}}var sU2="OH_MY_AG_OUTPUT_FORMAT",uq,oU2;var a4=N(()=>{sh();nz();uq=["text","json"],oU2=["backend","frontend","mobile","qa","debug","pm"]});var GW2,JW2=($)=>{return $===12288||$>=65281&&$<=65376||$>=65504&&$<=65510},QW2=($)=>{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 KW2=N(()=>{GW2=(()=>{let $=/[\uD800-\uDBFF][\uDC00-\uDFFF]/g;return(z)=>{let G=0;$.lastIndex=0;while($.test(z))G+=1;return z.length-G}})()});var gF5,hF5,ZW2,fF5,UW2,mF5,cF5,iF5,WW2=($,z={},G={})=>{let J=z.limit??1/0,Q=z.ellipsis??"",K=z?.ellipsisWidth??(Q?WW2(Q,iF5,G).width:0),Z=0,U=G.controlWidth??0,W=G.tabWidth??8,Y=G.emojiWidth??2,V=2,B=G.regularWidth??1,L=G.wideWidth??2,X=[[mF5,B],[gF5,0],[hF5,U],[fF5,W],[UW2,Y],[ZW2,L]],H=0,q=0,F=$.length,k=0,A=!1,j=F,M=Math.max(0,J-K),O=0,I=0,D=0,R=0;$:while(!0){if(I>O||q>=F&&q>H){let E=$.slice(O,I)||$.slice(H,q);k=0;for(let b of E.replaceAll(cF5,"")){let _=b.codePointAt(0)||0;if(JW2(_))R=2;else if(QW2(_))R=L;else R=B;if(D+R>M)j=Math.min(j,Math.max(O,H)+k);if(D+R>J){A=!0;break $}k+=b.length,D+=R}O=I=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=_===ZW2?GW2($.slice(q,_.lastIndex)):_===UW2?1:_.lastIndex-q,R=k*h,D+R>M)j=Math.min(j,q+Math.floor((M-D)/h));if(D+R>J){A=!0;break $}D+=R,O=H,I=q,q=H=_.lastIndex;continue $}}q+=1}return{width:A?M:D,index:A?j:F,truncated:A,ellipsed:A&&J>=K}},YW2;var VW2=N(()=>{KW2();gF5=/[\u001b\u009b][[()#;?]*(?:[0-9]{1,4}(?:;[0-9]{0,4})*)?[0-9A-ORZcf-nqry=><]|\u001b\]8;[^;]*;.*?(?:\u0007|\u001b\u005c)/y,hF5=/[\x00-\x08\x0A-\x1F\x7F-\x9F]{1,1000}/y,ZW2=/(?:(?![\uFF61-\uFF9F\uFF00-\uFFEF])[\p{Script=Han}\p{Script=Hiragana}\p{Script=Katakana}\p{Script=Hangul}\p{Script=Tangut}]){1,1000}/yu,fF5=/\t{1,1000}/y,UW2=/[\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,mF5=/(?:[\x20-\x7E\xA0-\xFF](?!\uFE0F)){1,1000}/y,cF5=/\p{M}+/gu,iF5={limit:1/0,ellipsis:""},YW2=WW2});var lF5,dF5=($,z={})=>{return YW2($,lF5,z).width},O6;var Gf=N(()=>{VW2();lF5={limit:1/0,ellipsis:"",ellipsisWidth:0},O6=dF5});function D$($,z,G){return String($).normalize().split(rF5).map((J)=>oF5(J,z,G)).join(`
|
|
28
28
|
`)}var YR="\x1B",qW2="",pF5=39,Qf="\x07",FW2="[",nF5="]",kW2="m",Kf,BW2,XW2=($)=>{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},LW2=($)=>`${YR}${FW2}${$}${kW2}`,HW2=($)=>`${YR}${Kf}${$}${Qf}`,Jf=($,z,G)=>{let J=z[Symbol.iterator](),Q=!1,K=!1,Z=$.at(-1),U=Z===void 0?0:O6(Z),W=J.next(),Y=J.next(),V=0;while(!W.done){let B=W.value,L=O6(B);if(U+L<=G)$[$.length-1]+=B;else $.push(B),U=0;if(B===YR||B===qW2)Q=!0,K=z.startsWith(Kf,V+1);if(Q){if(K){if(B===Qf)Q=!1,K=!1}else if(B===kW2)Q=!1}else if(U+=L,U===G&&!Y.done)$.push(""),U=0;W=Y,Y=J.next(),V+=B.length}if(Z=$.at(-1),!U&&Z!==void 0&&Z.length&&$.length>1)$[$.length-2]+=$.pop()},aF5=($)=>{let z=$.split(" "),G=z.length;while(G){if(O6(z[G-1]))break;G--}if(G===z.length)return $;return z.slice(0,G).join(" ")+z.slice(G).join("")},oF5=($,z,G={})=>{if(G.trim!==!1&&$.trim()==="")return"";let J="",Q,K,Z=$.split(" "),U=[""],W=0;for(let B=0;B<Z.length;B++){let L=Z[B];if(G.trim!==!1){let H=U.at(-1)??"",q=H.trimStart();if(H.length!==q.length)U[U.length-1]=q,W=O6(q)}if(B!==0){if(W>=z&&(G.wordWrap===!1||G.trim===!1))U.push(""),W=0;if(W||G.trim===!1)U[U.length-1]+=" ",W++}let X=O6(L);if(G.hard&&X>z){let H=z-W,q=1+Math.floor((X-H-1)/z);if(Math.floor((X-1)/z)<q)U.push("");Jf(U,L,z),W=O6(U.at(-1)??"");continue}if(W+X>z&&W&&X){if(G.wordWrap===!1&&W<z){Jf(U,L,z),W=O6(U.at(-1)??"");continue}U.push(""),W=0}if(W+X>z&&G.wordWrap===!1){Jf(U,L,z),W=O6(U.at(-1)??"");continue}U[U.length-1]+=L,W+=X}if(G.trim!==!1)U=U.map((B)=>aF5(B));let Y=U.join(`
|
|
29
29
|
`),V=!1;for(let B=0;B<Y.length;B++){let L=Y[B];if(J+=L,!V){if(V=L>="\uD800"&&L<="\uDBFF",V)continue}else V=!1;if(L===YR||L===qW2){BW2.lastIndex=B+1;let H=BW2.exec(Y)?.groups;if(H?.code!==void 0){let q=Number.parseFloat(H.code);Q=q===pF5?void 0:q}else if(H?.uri!==void 0)K=H.uri.length===0?void 0:H.uri}if(Y[B+1]===`
|
|
30
30
|
`){if(K)J+=HW2("");let X=Q?XW2(Q):void 0;if(Q&&X)J+=LW2(X)}else if(L===`
|
|
@@ -343,7 +343,7 @@ Read and follow [.agents/workflows/${K}.md](../../.agents/workflows/${K}.md) ste
|
|
|
343
343
|
`;O1.writeFileSync(U,W)}}var Nc="<!-- oma:generated -->";var xB2=N(()=>{E$();HF();OD()});import{cpSync as on4,existsSync as yB2,mkdirSync as uB2,readdirSync as cE5,readFileSync as gB2,writeFileSync as RF}from"node:fs";import{join as OZ}from"node:path";function Mc($){let z=OZ($,DD);if(!yB2(z))return[];return cE5(z).filter((G)=>G.endsWith(".md")).sort().map((G)=>{let J=gB2(OZ(z,G),"utf-8"),{frontmatter:Q,body:K}=U9(J);return{name:G.replace(".md",""),description:Q.description||G.replace(".md",""),globs:Q.globs||"",alwaysApply:Q.alwaysApply||!1,body:K.trim()}})}function hB2($){let z=Mc($);if(z.length===0)return[];let G=OZ($,iE5);uB2(G,{recursive:!0});let J=[];for(let Q of z){let K=`<!-- Generated by oh-my-agent. Source: ${DD}/${Q.name}.md -->`,Z=["---",`description: ${JSON.stringify(Q.description)}`,`globs: ${Q.globs?JSON.stringify(Q.globs):""}`,`alwaysApply: ${Q.alwaysApply}`,"---","",K,"",Q.body,""].join(`
|
|
344
344
|
`);RF(OZ(G,`${Q.name}.mdc`),Z),J.push(Q.name)}return J}function fB2($){let z=Mc($);if(z.length===0)return[];let G=OZ($,lE5);uB2(G,{recursive:!0});let J=[];for(let Q of z){let K={description:Q.description};if(!Q.alwaysApply&&Q.globs)K.paths=Q.globs;let Z=XD(K,`
|
|
345
345
|
${Q.body}
|
|
346
|
-
`);RF(OZ(G,`${Q.name}.md`),Z),J.push(Q.name)}return J}function oE5($,z){let G=[dE5,"","# oh-my-agent","","## Architecture","","- **SSOT**: `.agents/` directory (do not modify directly)","- **Response language**: Follows `language` in `.agents/oma-config.yaml`","- **Skills**: `.agents/skills/` (domain specialists)","- **Workflows**: `.agents/workflows/` (multi-step orchestration)",`- **Subagents**: ${nE5[$]||"`oma agent:spawn`"}`,"","## Per-Agent Dispatch","","1. Resolve `target_vendor_for_agent` from `.agents/oma-config.yaml`.","2. If `target_vendor_for_agent === current_runtime_vendor`, use the runtime's native subagent path.","3. If vendors differ, or native subagents are unavailable, use `oma agent:spawn` for that agent only.","","## Code Search","","Prefer **serena MCP** tools over native find/grep when locating code — they are symbol-aware and faster on large repos. Fall back to native Read / Glob / Grep only when serena is unavailable or for plain file content reads.","","| Task | Preferred tool |","|------|----------------|","| Locate a symbol definition (class / function / variable) | `find_symbol` |","| Find references / callers of a symbol | `find_referencing_symbols` |","| Outline a file's top-level symbols | `get_symbols_overview` |","| Pattern or regex search across the codebase | `search_for_pattern` |","| Find a file by name | `find_file` |","| List directory contents | `list_dir` |","","## Workflows","","Execute by naming the workflow in your prompt. Keywords are auto-detected via hooks.","","| Workflow | File | Description |","|----------|------|-------------|","| orchestrate | `orchestrate.md` | Parallel subagents + Review Loop |","| work | `work.md` | Step-by-step with remediation loop |","| ultrawork | `ultrawork.md` | 5-Phase Gate Loop (11 reviews) |","| ralph | `ralph.md` | Persistent loop wrapping ultrawork with an independent judge |","| plan | `plan.md` | PM task breakdown |","| brainstorm | `brainstorm.md` | Design-first ideation |","| architecture | `architecture.md` | Architecture diagnosis, comparison, ADR |","| design | `design.md` | Design system + DESIGN.md with anti-pattern enforcement |","| review | `review.md` | QA audit |","| debug | `debug.md` | Root cause + minimal fix |","| deepsec | `deepsec.md` | Drive `oma-deepsec` end-to-end (setup / scan / pr-review / matchers / triage) |","| scm | `scm.md` | SCM + Git operations + Conventional Commits |","| docs | `docs.md` | Documentation drift verify + sync |","| recap | `recap.md` | Daily / period AI conversation recap |","| deepinit | `deepinit.md` | Project harness init (AGENTS.md / ARCHITECTURE.md / docs/) |","|
|
|
346
|
+
`);RF(OZ(G,`${Q.name}.md`),Z),J.push(Q.name)}return J}function oE5($,z){let G=[dE5,"","# oh-my-agent","","## Architecture","","- **SSOT**: `.agents/` directory (do not modify directly)","- **Response language**: Follows `language` in `.agents/oma-config.yaml`","- **Skills**: `.agents/skills/` (domain specialists)","- **Workflows**: `.agents/workflows/` (multi-step orchestration)",`- **Subagents**: ${nE5[$]||"`oma agent:spawn`"}`,"","## Per-Agent Dispatch","","1. Resolve `target_vendor_for_agent` from `.agents/oma-config.yaml`.","2. If `target_vendor_for_agent === current_runtime_vendor`, use the runtime's native subagent path.","3. If vendors differ, or native subagents are unavailable, use `oma agent:spawn` for that agent only.","","## Code Search","","Prefer **serena MCP** tools over native find/grep when locating code — they are symbol-aware and faster on large repos. Fall back to native Read / Glob / Grep only when serena is unavailable or for plain file content reads.","","| Task | Preferred tool |","|------|----------------|","| Locate a symbol definition (class / function / variable) | `find_symbol` |","| Find references / callers of a symbol | `find_referencing_symbols` |","| Outline a file's top-level symbols | `get_symbols_overview` |","| Pattern or regex search across the codebase | `search_for_pattern` |","| Find a file by name | `find_file` |","| List directory contents | `list_dir` |","","## Workflows","","Execute by naming the workflow in your prompt. Keywords are auto-detected via hooks.","","| Workflow | File | Description |","|----------|------|-------------|","| orchestrate | `orchestrate.md` | Parallel subagents + Review Loop |","| work | `work.md` | Step-by-step with remediation loop |","| ultrawork | `ultrawork.md` | 5-Phase Gate Loop (11 reviews) |","| ralph | `ralph.md` | Persistent loop wrapping ultrawork with an independent judge |","| plan | `plan.md` | PM task breakdown |","| brainstorm | `brainstorm.md` | Design-first ideation |","| architecture | `architecture.md` | Architecture diagnosis, comparison, ADR |","| design | `design.md` | Design system + DESIGN.md with anti-pattern enforcement |","| review | `review.md` | QA audit |","| debug | `debug.md` | Root cause + minimal fix |","| deepsec | `deepsec.md` | Drive `oma-deepsec` end-to-end (setup / scan / pr-review / matchers / triage) |","| scm | `scm.md` | SCM + Git operations + Conventional Commits |","| docs | `docs.md` | Documentation drift verify + sync |","| recap | `recap.md` | Daily / period AI conversation recap |","| deepinit | `deepinit.md` | Project harness init (AGENTS.md / ARCHITECTURE.md / docs/) |","| convert | `convert.md` | File format conversion by category: documents→Markdown (oma-pdf/oma-hwp), image/video/audio transcode (ffmpeg) |","| video | `video.md` | Brief → script → assets → render-spec → Remotion (oma-video) |","| schedule | `schedule.md` | Register & manage time-based agent jobs via `oma schedule:*` |","","(`tools` and `stack-set` are slash-invoked utilities, and `schedule` is a slash-invoked workflow (`oma schedule:*` time-based jobs); all are intentionally excluded from keyword detection.)","","To execute: read and follow `.agents/workflows/{name}.md` step by step.","","## Auto-Detection","",aE5[$]||"","Keywords defined in `.agents/hooks/core/triggers.json` (multi-language).","Persistent workflows (orchestrate, ultrawork, work, ralph) block termination until complete.",'Deactivate: say "workflow done".',"","## Rules","","1. **Do not modify `.agents/` files** (SSOT protection).","2. Workflows execute via keyword detection or explicit naming, never self-initiated.","3. Response language follows `.agents/oma-config.yaml`",""];if(z.length>0){G.push("## Project Rules","",`Read the relevant file from \`${DD}/\` when working on matching code.`,"","| Rule | File | Scope |","|------|------|-------|");for(let J of z){let Q=J.globs||(J.alwaysApply?"always":"on request");G.push(`| ${J.name} | \`${DD}/${J.name}.md\` | ${Q} |`)}G.push("")}return G.push(jc),G.join(`
|
|
347
347
|
`)}function sE5($,z){if(yB2($)){let G=gB2($,"utf-8"),J=G.indexOf(rE5),Q=G.indexOf(jc);if(J!==-1&&Q!==-1){let K=G.slice(0,J),Z=G.slice(Q+jc.length);RF($,`${K}${z}${Z}`)}else RF($,`${G.trimEnd()}
|
|
348
348
|
|
|
349
349
|
${z}
|
package/package.json
CHANGED