oh-my-agent 10.0.0 → 10.0.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 +15 -14
- package/bin/cli.js +2 -2
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -193,20 +193,21 @@ Or use slash commands for structured workflows:
|
|
|
193
193
|
|
|
194
194
|
| Step | Command | What It Does |
|
|
195
195
|
|------|---------|-------------|
|
|
196
|
-
| 0 | `/deepinit` |
|
|
197
|
-
| 1 | `/brainstorm` |
|
|
198
|
-
| 2 | `/architecture` |
|
|
199
|
-
| 2 | `/design` |
|
|
200
|
-
| 2 | `/plan` |
|
|
201
|
-
| 3 | `/work` |
|
|
202
|
-
| 3 | `/orchestrate` |
|
|
203
|
-
| 3 | `/ultrawork` |
|
|
204
|
-
| 3 | `/ralph` |
|
|
205
|
-
| 4 | `/review` |
|
|
206
|
-
| 4 | `/deepsec` |
|
|
207
|
-
| 5 | `/debug` |
|
|
208
|
-
| 5 | `/docs` |
|
|
209
|
-
| 6 | `/scm` |
|
|
196
|
+
| 0 | `/deepinit` | Maps your existing codebase into AGENTS.md, ARCHITECTURE.md, and docs |
|
|
197
|
+
| 1 | `/brainstorm` | Explores ideas with you before you commit to building |
|
|
198
|
+
| 2 | `/architecture` | Weighs your design tradeoffs and draws clean module boundaries |
|
|
199
|
+
| 2 | `/design` | Builds your design system with tokens, accessibility, and responsive layouts |
|
|
200
|
+
| 2 | `/plan` | Breaks your feature down into prioritized tasks |
|
|
201
|
+
| 3 | `/work` | Builds your feature step by step across multiple agents |
|
|
202
|
+
| 3 | `/orchestrate` | Runs multiple agents in parallel to build your feature faster |
|
|
203
|
+
| 3 | `/ultrawork` | Builds your feature through five quality phases and eleven review gates |
|
|
204
|
+
| 3 | `/ralph` | Repeats `/ultrawork` until an independent verifier passes every criterion |
|
|
205
|
+
| 4 | `/review` | Reviews your code for security, performance, and accessibility issues |
|
|
206
|
+
| 4 | `/deepsec` | Runs a deep security scan and blocks risky pull requests |
|
|
207
|
+
| 5 | `/debug` | Finds the root cause, fixes the bug, and writes a regression test |
|
|
208
|
+
| 5 | `/docs` | Checks your docs for broken references and patches the ones your code changes touched |
|
|
209
|
+
| 6 | `/scm` | Manages your branches, merges, and Conventional Commits |
|
|
210
|
+
| - | `/schedule` | Schedules an agent job to run on a recurring interval |
|
|
210
211
|
|
|
211
212
|
**Auto-detection**: You don't even need slash commands — keywords like "architecture", "plan", "review", and "debug" in your message (in 11 languages!) auto-activate the right workflow.
|
|
212
213
|
|
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 pq5(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),Y=this.options.find((B)=>B.negate&&Z===B.attributeName()),W=this.options.find((B)=>!B.negate&&Z===B.attributeName());if(Y&&(Y.presetArg===void 0&&U===!1||Y.presetArg!==void 0&&U===Y.presetArg))return Y;return W||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=_U2($,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=_U2($,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 iq5(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 SU2($){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 oh(){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}nq5.Command=rh;nq5.useColor=oh});var hU2=P((tq5)=>{var{Argument:yU2}=sI(),{Command:sh}=xU2(),{CommanderError:rq5,InvalidArgumentError:uU2}=Cq(),{Help:sq5}=dh(),{Option:gU2}=ph();tq5.program=new sh;tq5.createCommand=($)=>new sh($);tq5.createOption=($,z)=>new gU2($,z);tq5.createArgument=($,z)=>new yU2($,z);tq5.Command=sh;tq5.Option=gU2;tq5.Argument=yU2;tq5.Help=sq5;tq5.CommanderError=rq5;tq5.InvalidArgumentError=uU2;tq5.InvalidOptionArgumentError=uU2});var fU2,Ti4,bi4,_i4,Si4,xi4,yi4,ui4,eI,gi4,hi4,fi4;var th=N(()=>{fU2=E2(hU2(),1),{program:Ti4,createCommand:bi4,createArgument:_i4,createOption:Si4,CommanderError:xi4,InvalidArgumentError:yi4,InvalidOptionArgumentError:ui4,Command:eI,Argument:gi4,Option:hi4,Help:fi4}=fU2.default});var $R;var eh=N(()=>{$R={name:"oh-my-agent",version:"10.0.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 VF5}from"node:os";import*as Tq from"node:path";function cU2($){if(zR)throw Error("install context already set in this process");zR=$}function iU2(){if(zR===null)throw Error("install context not set — entry point must call setInstallContext()");return zR}function OY(){return iU2().installRoot}function t7(){return iU2().mode}function GR(){try{return t7()}catch{return"project"}}function lU2($){let z=process.env.OMA_HOME,G=$.global===!0||process.env.OMA_INSTALL_GLOBAL==="1";if(z!==void 0&&z!=="")return XF5(z),{installRoot:z,mode:G?"global":"project"};if(G)return{installRoot:VF5(),mode:"global"};return{installRoot:process.cwd(),mode:"project"}}function XF5($){if(!Tq.isAbsolute($))throw Error("OMA_HOME must be absolute path");for(let G of mU2)if($===G||$.startsWith(G+Tq.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 mU2)if(z===G||z.startsWith(G+Tq.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 zR=null,mU2;var dz=N(()=>{mU2=["/etc","/usr","/bin","/boot","/sys","/proc"]});import{join as LF5}from"node:path";function bq($){return $.endsWith("/")?$:`${$}/`}function R7($,z){let G=z.split("/").filter((J)=>J.length>0);return LF5($,...G)}var j0=".agents",JR,D3,OJ,dU2,pU2,QR,HF5=".antigravitycli",nU2,qF5=".migration-backup",FF5,kF5,NF5,AF5,jF5,$f;var v3=N(()=>{JR=`${j0}/skills`,D3=`${j0}/results`,OJ=`${j0}/state`,dU2=`${OJ}/sessions`,pU2=`${OJ}/retry`,QR=`${OJ}/archive`,nU2=`${j0}/backup`;FF5=bq(D3),kF5=bq(OJ),NF5=bq(HF5),AF5=bq(nU2),jF5=bq(qF5),$f=[NF5,FF5,kF5,AF5,jF5]});var u1="first-fluke/oh-my-agent",e4,M0,KR,MF5,pz,s1;var nz=N(()=>{v3();e4=JR,M0=["antigravity","claude","codex","commandcode","cursor","grok","kimi","kiro","qwen"],KR=["pi","opencode"],MF5=["copilot","hermes"],pz=[...M0,...MF5].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 $W2={};z5($W2,{runAction:()=>T2,resolveJsonMode:()=>A5,printDescribe:()=>SF5,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(!_q.includes(J))throw Error(`Invalid output format: ${G}. Expected one of ${_q.join(", ")}`);return J})}function OF5($){if($?.json)return"json";let z=$?.output?.trim().toLowerCase();if(z&&_q.includes(z))return z;if(process.env[rU2]?.trim().toLowerCase()==="json")return"json";return"text"}function A5($){return OF5($)==="json"}function sU2($){let z=$.at(-1);return z instanceof eI?z:null}function IF5($){let z=sU2($);if(z)return z.opts();let G=$.at(-1);return G&&typeof G==="object"?G:{}}function RF5($){if($ instanceof Error)return $.message;return String($)}function IJ($){throw Error($)}function Gf($,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 DF5($,z){if(Gf($,z),/[?#%]/.test($))IJ(`${z} must not contain ?, #, or %`);if($.includes(".."))IJ(`${z} must not contain '..'`)}function vF5($,z){Gf($,z);try{new URL($)}catch{IJ(`${z} must be a valid absolute URL`)}}function zf($,z,G="text"){if(typeof $==="string"){if(G==="identifier"){DF5($,z);return}if(G==="url"){vF5($,z);return}Gf($,z);return}if(Array.isArray($))for(let[J,Q]of $.entries())zf(Q,`${z}[${J}]`,G)}function oU2($){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 EF5($){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"&&!_q.includes(G))IJ(`output must be one of ${_q.join(", ")}`)}function wF5($){let z=$.processedArgs??$.args??[];($.registeredArguments??[]).forEach((Q,K)=>{let Z=Q.name?.()||String(K),U=z[K];if(zf(U,Z,oU2(Z)),Z==="agent-type"&&typeof U==="string"&&!aU2.includes(U))IJ(`agent-type must be one of ${aU2.join(", ")}`)});let J=$.opts();EF5(J);for(let[Q,K]of Object.entries(J))zf(K,Q,oU2(Q))}function PF5($){return($.registeredArguments??[]).map((z)=>({name:z.name?.()||"",required:!!z.required,variadic:!!z.variadic}))}function CF5($){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 tU2($){let z=[],G=$;while(G?.parent)z.unshift(G.name()),G=G.parent;return z.join(" ")}function TF5($){return $.options.some((z)=>z.long==="--json"||z.long==="--output")}function bF5($){return $.options.some((z)=>z.long==="--dry-run")}function eU2($){return{name:$.name(),path:tU2($),summary:$.summary()||void 0,description:$.description(),arguments:PF5($),options:CF5($),supportsJsonOutput:TF5($),supportsDryRun:bF5($),subcommands:$.commands.map((z)=>eU2(z))}}function _F5($,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||tU2(Q)===G)return Q;J.push(...Q.commands)}return null}function SF5($,z){let G=_F5($,z);if(!G)IJ(`Unknown command: ${z}`);let J={name:$.name(),version:$.version(),description:$.description(),env:{[rU2]:"Set to json to force machine-readable output on commands that support it."},command:eU2(G)};console.log(JSON.stringify(J,null,2))}function T2($,z={}){return async(...G)=>{let J=sU2(G);if(J&&G.length>=2)G[G.length-2]=J.optsWithGlobals();let Q=IF5(G);try{if(J)wF5(J);await $(...G)}catch(K){let Z=RF5(K);if(z.supportsJsonOutput&&A5(Q))console.log(JSON.stringify({error:Z},null,2));else console.error(Z);process.exitCode=1}}}var rU2="OH_MY_AG_OUTPUT_FORMAT",_q,aU2;var a4=N(()=>{th();nz();_q=["text","json"],aU2=["backend","frontend","mobile","qa","debug","pm"]});var zW2,GW2=($)=>{return $===12288||$>=65281&&$<=65376||$>=65504&&$<=65510},JW2=($)=>{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 QW2=N(()=>{zW2=(()=>{let $=/[\uD800-\uDBFF][\uDC00-\uDFFF]/g;return(z)=>{let G=0;$.lastIndex=0;while($.test(z))G+=1;return z.length-G}})()});var xF5,yF5,KW2,uF5,ZW2,gF5,hF5,fF5,UW2=($,z={},G={})=>{let J=z.limit??1/0,Q=z.ellipsis??"",K=z?.ellipsisWidth??(Q?UW2(Q,fF5,G).width:0),Z=0,U=G.controlWidth??0,Y=G.tabWidth??8,W=G.emojiWidth??2,B=2,V=G.regularWidth??1,L=G.wideWidth??2,X=[[gF5,V],[xF5,0],[yF5,U],[uF5,Y],[ZW2,W],[KW2,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(hF5,"")){let _=b.codePointAt(0)||0;if(GW2(_))R=2;else if(JW2(_))R=L;else R=V;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=_===KW2?zW2($.slice(q,_.lastIndex)):_===ZW2?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}},WW2;var YW2=N(()=>{QW2();xF5=/[\u001b\u009b][[()#;?]*(?:[0-9]{1,4}(?:;[0-9]{0,4})*)?[0-9A-ORZcf-nqry=><]|\u001b\]8;[^;]*;.*?(?:\u0007|\u001b\u005c)/y,yF5=/[\x00-\x08\x0A-\x1F\x7F-\x9F]{1,1000}/y,KW2=/(?:(?![\uFF61-\uFF9F\uFF00-\uFFEF])[\p{Script=Han}\p{Script=Hiragana}\p{Script=Katakana}\p{Script=Hangul}\p{Script=Tangut}]){1,1000}/yu,uF5=/\t{1,1000}/y,ZW2=/[\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,gF5=/(?:[\x20-\x7E\xA0-\xFF](?!\uFE0F)){1,1000}/y,hF5=/\p{M}+/gu,fF5={limit:1/0,ellipsis:""},WW2=UW2});var mF5,cF5=($,z={})=>{return WW2($,mF5,z).width},O6;var Jf=N(()=>{YW2();mF5={limit:1/0,ellipsis:"",ellipsisWidth:0},O6=cF5});function D$($,z,G){return String($).normalize().split(nF5).map((J)=>pF5(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 SU2($){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 oh(){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}nq5.Command=rh;nq5.useColor=oh});var hU2=P((tq5)=>{var{Argument:yU2}=sI(),{Command:sh}=xU2(),{CommanderError:rq5,InvalidArgumentError:uU2}=Cq(),{Help:sq5}=dh(),{Option:gU2}=ph();tq5.program=new sh;tq5.createCommand=($)=>new sh($);tq5.createOption=($,z)=>new gU2($,z);tq5.createArgument=($,z)=>new yU2($,z);tq5.Command=sh;tq5.Option=gU2;tq5.Argument=yU2;tq5.Help=sq5;tq5.CommanderError=rq5;tq5.InvalidArgumentError=uU2;tq5.InvalidOptionArgumentError=uU2});var fU2,Ti4,bi4,_i4,Si4,xi4,yi4,ui4,eI,gi4,hi4,fi4;var th=N(()=>{fU2=E2(hU2(),1),{program:Ti4,createCommand:bi4,createArgument:_i4,createOption:Si4,CommanderError:xi4,InvalidArgumentError:yi4,InvalidOptionArgumentError:ui4,Command:eI,Argument:gi4,Option:hi4,Help:fi4}=fU2.default});var $R;var eh=N(()=>{$R={name:"oh-my-agent",version:"10.0.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",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 VF5}from"node:os";import*as Tq from"node:path";function cU2($){if(zR)throw Error("install context already set in this process");zR=$}function iU2(){if(zR===null)throw Error("install context not set — entry point must call setInstallContext()");return zR}function OY(){return iU2().installRoot}function t7(){return iU2().mode}function GR(){try{return t7()}catch{return"project"}}function lU2($){let z=process.env.OMA_HOME,G=$.global===!0||process.env.OMA_INSTALL_GLOBAL==="1";if(z!==void 0&&z!=="")return XF5(z),{installRoot:z,mode:G?"global":"project"};if(G)return{installRoot:VF5(),mode:"global"};return{installRoot:process.cwd(),mode:"project"}}function XF5($){if(!Tq.isAbsolute($))throw Error("OMA_HOME must be absolute path");for(let G of mU2)if($===G||$.startsWith(G+Tq.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 mU2)if(z===G||z.startsWith(G+Tq.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 zR=null,mU2;var dz=N(()=>{mU2=["/etc","/usr","/bin","/boot","/sys","/proc"]});import{join as LF5}from"node:path";function bq($){return $.endsWith("/")?$:`${$}/`}function R7($,z){let G=z.split("/").filter((J)=>J.length>0);return LF5($,...G)}var j0=".agents",JR,D3,OJ,dU2,pU2,QR,HF5=".antigravitycli",nU2,qF5=".migration-backup",FF5,kF5,NF5,AF5,jF5,$f;var v3=N(()=>{JR=`${j0}/skills`,D3=`${j0}/results`,OJ=`${j0}/state`,dU2=`${OJ}/sessions`,pU2=`${OJ}/retry`,QR=`${OJ}/archive`,nU2=`${j0}/backup`;FF5=bq(D3),kF5=bq(OJ),NF5=bq(HF5),AF5=bq(nU2),jF5=bq(qF5),$f=[NF5,FF5,kF5,AF5,jF5]});var u1="first-fluke/oh-my-agent",e4,M0,KR,MF5,pz,s1;var nz=N(()=>{v3();e4=JR,M0=["antigravity","claude","codex","commandcode","cursor","grok","kimi","kiro","qwen"],KR=["pi","opencode"],MF5=["copilot","hermes"],pz=[...M0,...MF5].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 $W2={};z5($W2,{runAction:()=>T2,resolveJsonMode:()=>A5,printDescribe:()=>SF5,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(!_q.includes(J))throw Error(`Invalid output format: ${G}. Expected one of ${_q.join(", ")}`);return J})}function OF5($){if($?.json)return"json";let z=$?.output?.trim().toLowerCase();if(z&&_q.includes(z))return z;if(process.env[rU2]?.trim().toLowerCase()==="json")return"json";return"text"}function A5($){return OF5($)==="json"}function sU2($){let z=$.at(-1);return z instanceof eI?z:null}function IF5($){let z=sU2($);if(z)return z.opts();let G=$.at(-1);return G&&typeof G==="object"?G:{}}function RF5($){if($ instanceof Error)return $.message;return String($)}function IJ($){throw Error($)}function Gf($,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 DF5($,z){if(Gf($,z),/[?#%]/.test($))IJ(`${z} must not contain ?, #, or %`);if($.includes(".."))IJ(`${z} must not contain '..'`)}function vF5($,z){Gf($,z);try{new URL($)}catch{IJ(`${z} must be a valid absolute URL`)}}function zf($,z,G="text"){if(typeof $==="string"){if(G==="identifier"){DF5($,z);return}if(G==="url"){vF5($,z);return}Gf($,z);return}if(Array.isArray($))for(let[J,Q]of $.entries())zf(Q,`${z}[${J}]`,G)}function oU2($){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 EF5($){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"&&!_q.includes(G))IJ(`output must be one of ${_q.join(", ")}`)}function wF5($){let z=$.processedArgs??$.args??[];($.registeredArguments??[]).forEach((Q,K)=>{let Z=Q.name?.()||String(K),U=z[K];if(zf(U,Z,oU2(Z)),Z==="agent-type"&&typeof U==="string"&&!aU2.includes(U))IJ(`agent-type must be one of ${aU2.join(", ")}`)});let J=$.opts();EF5(J);for(let[Q,K]of Object.entries(J))zf(K,Q,oU2(Q))}function PF5($){return($.registeredArguments??[]).map((z)=>({name:z.name?.()||"",required:!!z.required,variadic:!!z.variadic}))}function CF5($){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 tU2($){let z=[],G=$;while(G?.parent)z.unshift(G.name()),G=G.parent;return z.join(" ")}function TF5($){return $.options.some((z)=>z.long==="--json"||z.long==="--output")}function bF5($){return $.options.some((z)=>z.long==="--dry-run")}function eU2($){return{name:$.name(),path:tU2($),summary:$.summary()||void 0,description:$.description(),arguments:PF5($),options:CF5($),supportsJsonOutput:TF5($),supportsDryRun:bF5($),subcommands:$.commands.map((z)=>eU2(z))}}function _F5($,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||tU2(Q)===G)return Q;J.push(...Q.commands)}return null}function SF5($,z){let G=_F5($,z);if(!G)IJ(`Unknown command: ${z}`);let J={name:$.name(),version:$.version(),description:$.description(),env:{[rU2]:"Set to json to force machine-readable output on commands that support it."},command:eU2(G)};console.log(JSON.stringify(J,null,2))}function T2($,z={}){return async(...G)=>{let J=sU2(G);if(J&&G.length>=2)G[G.length-2]=J.optsWithGlobals();let Q=IF5(G);try{if(J)wF5(J);await $(...G)}catch(K){let Z=RF5(K);if(z.supportsJsonOutput&&A5(Q))console.log(JSON.stringify({error:Z},null,2));else console.error(Z);process.exitCode=1}}}var rU2="OH_MY_AG_OUTPUT_FORMAT",_q,aU2;var a4=N(()=>{th();nz();_q=["text","json"],aU2=["backend","frontend","mobile","qa","debug","pm"]});var zW2,GW2=($)=>{return $===12288||$>=65281&&$<=65376||$>=65504&&$<=65510},JW2=($)=>{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 QW2=N(()=>{zW2=(()=>{let $=/[\uD800-\uDBFF][\uDC00-\uDFFF]/g;return(z)=>{let G=0;$.lastIndex=0;while($.test(z))G+=1;return z.length-G}})()});var xF5,yF5,KW2,uF5,ZW2,gF5,hF5,fF5,UW2=($,z={},G={})=>{let J=z.limit??1/0,Q=z.ellipsis??"",K=z?.ellipsisWidth??(Q?UW2(Q,fF5,G).width:0),Z=0,U=G.controlWidth??0,Y=G.tabWidth??8,W=G.emojiWidth??2,B=2,V=G.regularWidth??1,L=G.wideWidth??2,X=[[gF5,V],[xF5,0],[yF5,U],[uF5,Y],[ZW2,W],[KW2,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(hF5,"")){let _=b.codePointAt(0)||0;if(GW2(_))R=2;else if(JW2(_))R=L;else R=V;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=_===KW2?zW2($.slice(q,_.lastIndex)):_===ZW2?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}},WW2;var YW2=N(()=>{QW2();xF5=/[\u001b\u009b][[()#;?]*(?:[0-9]{1,4}(?:;[0-9]{0,4})*)?[0-9A-ORZcf-nqry=><]|\u001b\]8;[^;]*;.*?(?:\u0007|\u001b\u005c)/y,yF5=/[\x00-\x08\x0A-\x1F\x7F-\x9F]{1,1000}/y,KW2=/(?:(?![\uFF61-\uFF9F\uFF00-\uFFEF])[\p{Script=Han}\p{Script=Hiragana}\p{Script=Katakana}\p{Script=Hangul}\p{Script=Tangut}]){1,1000}/yu,uF5=/\t{1,1000}/y,ZW2=/[\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,gF5=/(?:[\x20-\x7E\xA0-\xFF](?!\uFE0F)){1,1000}/y,hF5=/\p{M}+/gu,fF5={limit:1/0,ellipsis:""},WW2=UW2});var mF5,cF5=($,z={})=>{return WW2($,mF5,z).width},O6;var Jf=N(()=>{YW2();mF5={limit:1/0,ellipsis:"",ellipsisWidth:0},O6=cF5});function D$($,z,G){return String($).normalize().split(nF5).map((J)=>pF5(J,z,G)).join(`
|
|
28
28
|
`)}var ZR="\x1B",HW2="",iF5=39,Kf="\x07",qW2="[",lF5="]",FW2="m",Zf,BW2,VW2=($)=>{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},XW2=($)=>`${ZR}${qW2}${$}${FW2}`,LW2=($)=>`${ZR}${Zf}${$}${Kf}`,Qf=($,z,G)=>{let J=z[Symbol.iterator](),Q=!1,K=!1,Z=$.at(-1),U=Z===void 0?0:O6(Z),Y=J.next(),W=J.next(),B=0;while(!Y.done){let V=Y.value,L=O6(V);if(U+L<=G)$[$.length-1]+=V;else $.push(V),U=0;if(V===ZR||V===HW2)Q=!0,K=z.startsWith(Zf,B+1);if(Q){if(K){if(V===Kf)Q=!1,K=!1}else if(V===FW2)Q=!1}else if(U+=L,U===G&&!W.done)$.push(""),U=0;Y=W,W=J.next(),B+=V.length}if(Z=$.at(-1),!U&&Z!==void 0&&Z.length&&$.length>1)$[$.length-2]+=$.pop()},dF5=($)=>{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("")},pF5=($,z,G={})=>{if(G.trim!==!1&&$.trim()==="")return"";let J="",Q,K,Z=$.split(" "),U=[""],Y=0;for(let V=0;V<Z.length;V++){let L=Z[V];if(G.trim!==!1){let H=U.at(-1)??"",q=H.trimStart();if(H.length!==q.length)U[U.length-1]=q,Y=O6(q)}if(V!==0){if(Y>=z&&(G.wordWrap===!1||G.trim===!1))U.push(""),Y=0;if(Y||G.trim===!1)U[U.length-1]+=" ",Y++}let X=O6(L);if(G.hard&&X>z){let H=z-Y,q=1+Math.floor((X-H-1)/z);if(Math.floor((X-1)/z)<q)U.push("");Qf(U,L,z),Y=O6(U.at(-1)??"");continue}if(Y+X>z&&Y&&X){if(G.wordWrap===!1&&Y<z){Qf(U,L,z),Y=O6(U.at(-1)??"");continue}U.push(""),Y=0}if(Y+X>z&&G.wordWrap===!1){Qf(U,L,z),Y=O6(U.at(-1)??"");continue}U[U.length-1]+=L,Y+=X}if(G.trim!==!1)U=U.map((V)=>dF5(V));let W=U.join(`
|
|
29
29
|
`),B=!1;for(let V=0;V<W.length;V++){let L=W[V];if(J+=L,!B){if(B=L>="\uD800"&&L<="\uDBFF",B)continue}else B=!1;if(L===ZR||L===HW2){BW2.lastIndex=V+1;let H=BW2.exec(W)?.groups;if(H?.code!==void 0){let q=Number.parseFloat(H.code);Q=q===iF5?void 0:q}else if(H?.uri!==void 0)K=H.uri.length===0?void 0:H.uri}if(W[V+1]===`
|
|
30
30
|
`){if(K)J+=LW2("");let X=Q?VW2(Q):void 0;if(Q&&X)J+=XW2(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,Y)}}var Ac="<!-- oma:generated -->";var SV2=N(()=>{E$();BF();AD()});import{cpSync as hn4,existsSync as xV2,mkdirSync as yV2,readdirSync as hE5,readFileSync as uV2,writeFileSync as jF}from"node:fs";import{join as MZ}from"node:path";function Oc($){let z=MZ($,OD);if(!xV2(z))return[];return hE5(z).filter((G)=>G.endsWith(".md")).sort().map((G)=>{let J=uV2(MZ(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 gV2($){let z=Oc($);if(z.length===0)return[];let G=MZ($,fE5);yV2(G,{recursive:!0});let J=[];for(let Q of z){let K=`<!-- Generated by oh-my-agent. Source: ${OD}/${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
|
`);jF(MZ(G,`${Q.name}.mdc`),Z),J.push(Q.name)}return J}function hV2($){let z=Oc($);if(z.length===0)return[];let G=MZ($,mE5);yV2(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=YD(K,`
|
|
345
345
|
${Q.body}
|
|
346
|
-
`);jF(MZ(G,`${Q.name}.md`),Z),J.push(Q.name)}return J}function pE5($,z){let G=[cE5,"","# 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**: ${lE5[$]||"`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/) |","| pdf | `pdf.md` | PDF → Markdown via opendataloader-pdf |","| video | `video.md` | Brief → script → assets → render-spec → Remotion (oma-video) |","","(`tools` and `stack-set` are slash-invoked utilities, and `schedule` is a slash-invoked workflow (`oma schedule:*` time-based jobs)
|
|
346
|
+
`);jF(MZ(G,`${Q.name}.md`),Z),J.push(Q.name)}return J}function pE5($,z){let G=[cE5,"","# 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**: ${lE5[$]||"`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/) |","| pdf | `pdf.md` | PDF → Markdown via opendataloader-pdf |","| 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","",dE5[$]||"","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 \`${OD}/\` 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} | \`${OD}/${J.name}.md\` | ${Q} |`)}G.push("")}return G.push(Mc),G.join(`
|
|
347
347
|
`)}function aE5($,z){if(xV2($)){let G=uV2($,"utf-8"),J=G.indexOf(nE5),Q=G.indexOf(Mc);if(J!==-1&&Q!==-1){let K=G.slice(0,J),Z=G.slice(Q+Mc.length);jF($,`${K}${z}${Z}`)}else jF($,`${G.trimEnd()}
|
|
348
348
|
|
|
349
349
|
${z}
|
package/package.json
CHANGED