oh-my-agent 10.2.0 → 10.2.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.
Files changed (2) hide show
  1. package/bin/cli.js +2 -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.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(`
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.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 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===`
@@ -1461,7 +1461,7 @@ ${_7.default.dim(`closest pair: ${K.a} ↔ ${K.b} (${(K.similarity*100).toFixed(
1461
1461
  `)}})),$.command("hook:probe").description("Probe per-vendor L1 hook compatibility and print a matrix (D63)").option("--vendor <list>",`Comma-separated vendors (default: ${bU.join(",")})`).option("--format <fmt>","Output format: text | md | json","text").option("--hooks-dir <dir>","Override the .agents/hooks/core directory").action(T2(async(z)=>{let G=f14(z.format),J=Fh2({vendors:m14(z.vendor),hooksDir:z.hooksDir});if(G==="json")console.log(JSON.stringify(J,null,2));else if(G==="md")console.log(X42(J));else console.log(B42(J));if(J.results.some((Q)=>Q.status==="failed"))process.exitCode=1}))}var Mh2,c14=2000;var H42=N(()=>{nz();a4();S52();kh2();jh2();Mh2=["text","md","json"]});import{mkdirSync as d14,writeFileSync as p14}from"node:fs";import{join as n14}from"node:path";function Oh2($){return $.trim().toLowerCase().replace(/[^a-z0-9._-]+/g,"-").replace(/^-+|-+$/g,"")||"session"}function o14($,z){return`session-${Oh2($)}-${Oh2(z)}`}function r14($,z,G){let J=G.filter((U)=>U.kind==="gate.passed"),Q=G.filter((U)=>U.kind==="decision.made"),K=G.filter((U)=>U.kind==="boundary"),Z=[`# OMA Session Mirror: ${z.workflow||"(unknown)"} ${$}`,"",`- workflow: ${z.workflow||"(unknown)"}`,`- status: ${z.status}`,`- phase: ${z.currentPhase||"(none)"}`,`- created: ${z.createdAt||"(unknown)"}`,`- events: ${G.length}`,"","## Decisions"];if(Q.length===0)Z.push("- (none recorded)");else for(let U of Q){let W=$z(U,"subject","(unspecified)"),Y=$z(U,"decision","(unspecified)"),V=$z(U,"rationale");Z.push(`- **${W}** → ${Y}${V?` _(${V})_`:""}`)}if(Z.push("","## Gates"),J.length===0)Z.push("- (none recorded)");else for(let U of J){let W=$z(U,"gate","(unnamed)"),Y=$z(U,"by");Z.push(`- ${W}${Y?` by ${Y}`:""} (${U.ts})`)}if(K.length>0){Z.push("","## Vendor Boundaries");for(let U of K){let W=$z(U,"fromVendor","(new)"),Y=$z(U,"toVendor",U.vendor??"(unknown)");Z.push(`- ${W} → ${Y} (${U.ts})`)}}Z.push("","## Recent Events");for(let U of G.slice(-20))Z.push(`- ${U.ts} \`${U.kind}\``);return Z.push(""),Z.join(`
1462
1462
  `)}async function uT($){let z=$.projectDir??process.cwd(),G=d0(z,$.sid),J=p0($.sid,G),Q=J.workflow||"session",K=o14(Q,$.sid),Z=n14(RG(z),`${K}.md`),U=r14($.sid,J,G),W={sid:$.sid,workflow:Q,memoryName:K,path:Z};if($.writer)try{if(await $.writer.write(K,U))return{...W,method:"serena-mcp",written:!0}}catch{}try{return d14(RG(z),{recursive:!0}),p14(Z,U,"utf-8"),{...W,method:"direct-fs",written:!0}}catch(Y){let V=Y instanceof Error?Y.message:String(Y);return await s14(z,$.sid,K,V),{...W,method:"none",written:!1,warning:V}}}async function s14($,z,G,J){try{l22($,z,{kind:a14,payload:{memoryName:G,warning:J}})}catch{process.stderr.write(`[oma] Serena mirror failed and warning event could not be written: ${J}
1463
1463
  `)}}function Ih2($){if($.written)return`Mirrored ${$.sid} → ${$.memoryName} (${$.method})
1464
- ${$.path}`;return`Serena mirror skipped for ${$.sid}: ${$.warning??"unknown error"}`}var a14="mirror.warning";var q42=N(()=>{lB();g8()});var vh2={};z5(vh2,{resolveEmitSid:()=>Dh2,registerEmit:()=>t14,parsePayload:()=>Rh2});function Rh2($){if(!$)return;let z=JSON.parse($);if(!z||typeof z!=="object"||Array.isArray(z))throw Error("payload must be a JSON object");return z}function Dh2($,z){if(z.sid)return z.sid;let G=uB(l0($),z.category??"main");if(!G)throw Error("No active L1 session found. Pass --sid or run a workflow first.");return G}function t14($){j5($.command("state:emit <kind> [payload]").description("Append an OMA L1 workflow event").option("--sid <sid>","Target session id").option("--category <category>","Active category lookup","main").option("--vendor <vendor>","Runtime/vendor name").option("--vendor-sid <vendorSid>","Runtime/vendor session id").option("--parent-event-id <eventId>","Parent event id").option("--causality-key <key>","Causality grouping key").option("--ts <iso>","Override event timestamp").option("--no-mirror","Skip the Serena mirror on session.ended (D25/D67)")).action(T2(async(z,G,J)=>{let Q=A5(J),K=J,Z=Dh2(process.cwd(),K),U=await gB(process.cwd(),Z,{kind:z,ts:K.ts,vendor:K.vendor,vendorSid:K.vendorSid,parentEventId:K.parentEventId,causalityKey:K.causalityKey,payload:Rh2(G)}),W;if(z==="session.ended"&&J.mirror!==!1)W=await uT({projectDir:process.cwd(),sid:Z});if(Q)console.log(JSON.stringify({event:U,mirror:W},null,2));else if(console.log(`Emitted ${U.kind} ${U.eventId} -> ${Z}`),W)console.log(W.written?`Mirrored to ${W.memoryName} (${W.method})`:`Serena mirror skipped: ${W.warning??"unknown error"}`)},{supportsJsonOutput:!0}))}var Eh2=N(()=>{g8();q42();a4()});function wh2($){if(!$)return F42;return{[$]:F42[$]??{}}}function k42($){if($.sid)return $.sid;let z=uB(l0($.projectDir),$.category??"main");if(!z)throw Error("No active L1 session found. Pass --sid or run a workflow first.");return z}async function Ph2($){let z=F42[$.workflow]?.[$.checkpoint];if(!z)throw Error(`Unknown required decision checkpoint: ${$.workflow}/${$.checkpoint}`);let J=d0($.projectDir,$.sid).filter((U)=>U.kind==="decision.made").map((U)=>U.payload?.subject).filter((U)=>typeof U==="string"),Q=new Set(J),K=z.filter((U)=>!Q.has(U.subject)),Z={sid:$.sid,workflow:$.workflow,checkpoint:$.checkpoint,ok:K.length===0,required:z,presentSubjects:J,missing:K};if(!Z.ok&&$.emitMissing!==!1)await gB($.projectDir,$.sid,{kind:"decision.missing",payload:{workflow:$.workflow,checkpoint:$.checkpoint,missing:K,remediation:"Emit the required decision.made event with oma_emit, then rerun this verifier."}});return Z}var F42;var Ch2=N(()=>{g8();F42={ultrawork:{"plan-approved":[{subject:"ultrawork.plan-approved",description:"Architecture and plan decision captured after PLAN_GATE approval."}],"impl-plan-locked":[{subject:"ultrawork.impl-plan-locked",description:"Task decomposition and implementation scope locked before IMPL work."}],"refine-outcome":[{subject:"ultrawork.refine-outcome",description:"REFINE experiment outcome captured before shipping or skipping refinement."}]},ralph:{"exec-delegated":[{subject:"ralph.exec-delegated",description:"EXEC iteration delegated to the full ultrawork 5-phase workflow before any agent is spawned; abridging or substituting ultrawork without user approval is forbidden."}]},orchestrate:{"fanout-strategy":[{subject:"orchestrate.fanout-strategy",description:"Parallel agent fan-out strategy captured after the plan is loaded."}],"qa-verdict":[{subject:"orchestrate.qa-verdict",description:"Verification gate verdict captured after completed agents are checked."}]},work:{"remediation-choice":[{subject:"work.remediation-choice",description:"QA remediation decision captured before ignored or fixed findings are accepted."}]},plan:{"api-contract":[{subject:"plan.api-contract",description:"Endpoint and contract shape captured after API contract approval."}]},brainstorm:{"option-selection":[{subject:"brainstorm.option-selection",description:"Selected option and considered alternatives captured after user choice."}]},architecture:{"adr-complete":[{subject:"architecture.adr-complete",description:"Architecture decision and tradeoffs captured after ADR completion."}]},debug:{"root-cause":[{subject:"debug.root-cause",description:"Confirmed root cause and minimal fix scope captured after diagnosis."}]},review:{"severity-classification":[{subject:"review.severity-classification",description:"Per-finding severity assignment rationale captured after review classification."}]},deepsec:{"triage-outcome":[{subject:"deepsec.triage-outcome",description:"Security finding triage verdict captured as true-positive or false-positive with rationale."}]},scm:{"commit-split":[{subject:"scm.commit-split",description:"Commit grouping decision captured after SCM split strategy is chosen."}]},docs:{"sync-patch-approval":[{subject:"docs.sync-patch-approval",description:"Documentation sync decision captured for docs auto-applied versus skipped."}]},video:{"mode-selection":[{subject:"video.mode-selection",description:"Confirmed video mode, aspect, visual track, and compositor captured before asset generation."}],"cost-confirmation":[{subject:"video.cost-confirmation",description:"Paid-cost confirmation or key-free fallback decision captured when the estimate crosses the guardrail."}]}}});import{existsSync as eB,readdirSync as N42,readFileSync as A42}from"node:fs";import{join as tB}from"node:path";function e14($,z){let G=tB(b7($),z,"meta.json");if(eB(G))try{return JSON.parse(A42(G,"utf-8"))}catch{return HA($,z)}return p0(z,d0($,z))}function Th2($){let z=tB($,"events.jsonl");if(!eB(z))return[];let G=[];for(let J of A42(z,"utf-8").split(`
1464
+ ${$.path}`;return`Serena mirror skipped for ${$.sid}: ${$.warning??"unknown error"}`}var a14="mirror.warning";var q42=N(()=>{lB();g8()});var vh2={};z5(vh2,{resolveEmitSid:()=>Dh2,registerEmit:()=>t14,parsePayload:()=>Rh2});function Rh2($){if(!$)return;let z=JSON.parse($);if(!z||typeof z!=="object"||Array.isArray(z))throw Error("payload must be a JSON object");return z}function Dh2($,z){if(z.sid)return z.sid;let G=uB(l0($),z.category??"main");if(!G)throw Error("No active L1 session found. Pass --sid or run a workflow first.");return G}function t14($){j5($.command("state:emit <kind> [payload]").description("Append an OMA L1 workflow event").option("--sid <sid>","Target session id").option("--category <category>","Active category lookup","main").option("--vendor <vendor>","Runtime/vendor name").option("--vendor-sid <vendorSid>","Runtime/vendor session id").option("--parent-event-id <eventId>","Parent event id").option("--causality-key <key>","Causality grouping key").option("--ts <iso>","Override event timestamp").option("--no-mirror","Skip the Serena mirror on session.ended (D25/D67)")).action(T2(async(z,G,J)=>{let Q=A5(J),K=J,Z=Dh2(process.cwd(),K),U=await gB(process.cwd(),Z,{kind:z,ts:K.ts,vendor:K.vendor,vendorSid:K.vendorSid,parentEventId:K.parentEventId,causalityKey:K.causalityKey,payload:Rh2(G)}),W;if(z==="session.ended"&&J.mirror!==!1)W=await uT({projectDir:process.cwd(),sid:Z});if(Q)console.log(JSON.stringify({event:U,mirror:W},null,2));else if(console.log(`Emitted ${U.kind} ${U.eventId} -> ${Z}`),W)console.log(W.written?`Mirrored to ${W.memoryName} (${W.method})`:`Serena mirror skipped: ${W.warning??"unknown error"}`)},{supportsJsonOutput:!0}))}var Eh2=N(()=>{g8();q42();a4()});function wh2($){if(!$)return F42;return{[$]:F42[$]??{}}}function k42($){if($.sid)return $.sid;let z=uB(l0($.projectDir),$.category??"main");if(!z)throw Error("No active L1 session found. Pass --sid or run a workflow first.");return z}async function Ph2($){let z=F42[$.workflow]?.[$.checkpoint];if(!z)throw Error(`Unknown required decision checkpoint: ${$.workflow}/${$.checkpoint}`);let J=d0($.projectDir,$.sid).filter((U)=>U.kind==="decision.made").map((U)=>U.payload?.subject).filter((U)=>typeof U==="string"),Q=new Set(J),K=z.filter((U)=>!Q.has(U.subject)),Z={sid:$.sid,workflow:$.workflow,checkpoint:$.checkpoint,ok:K.length===0,required:z,presentSubjects:J,missing:K};if(!Z.ok&&$.emitMissing!==!1)await gB($.projectDir,$.sid,{kind:"decision.missing",payload:{workflow:$.workflow,checkpoint:$.checkpoint,missing:K,remediation:"Emit the required decision.made event with oma state:emit, then rerun this verifier."}});return Z}var F42;var Ch2=N(()=>{g8();F42={ultrawork:{"plan-approved":[{subject:"ultrawork.plan-approved",description:"Architecture and plan decision captured after PLAN_GATE approval."}],"impl-plan-locked":[{subject:"ultrawork.impl-plan-locked",description:"Task decomposition and implementation scope locked before IMPL work."}],"refine-outcome":[{subject:"ultrawork.refine-outcome",description:"REFINE experiment outcome captured before shipping or skipping refinement."}]},ralph:{"exec-delegated":[{subject:"ralph.exec-delegated",description:"EXEC iteration delegated to the full ultrawork 5-phase workflow before any agent is spawned; abridging or substituting ultrawork without user approval is forbidden."}]},orchestrate:{"fanout-strategy":[{subject:"orchestrate.fanout-strategy",description:"Parallel agent fan-out strategy captured after the plan is loaded."}],"qa-verdict":[{subject:"orchestrate.qa-verdict",description:"Verification gate verdict captured after completed agents are checked."}]},work:{"remediation-choice":[{subject:"work.remediation-choice",description:"QA remediation decision captured before ignored or fixed findings are accepted."}]},plan:{"api-contract":[{subject:"plan.api-contract",description:"Endpoint and contract shape captured after API contract approval."}]},brainstorm:{"option-selection":[{subject:"brainstorm.option-selection",description:"Selected option and considered alternatives captured after user choice."}]},architecture:{"adr-complete":[{subject:"architecture.adr-complete",description:"Architecture decision and tradeoffs captured after ADR completion."}]},debug:{"root-cause":[{subject:"debug.root-cause",description:"Confirmed root cause and minimal fix scope captured after diagnosis."}]},review:{"severity-classification":[{subject:"review.severity-classification",description:"Per-finding severity assignment rationale captured after review classification."}]},deepsec:{"triage-outcome":[{subject:"deepsec.triage-outcome",description:"Security finding triage verdict captured as true-positive or false-positive with rationale."}]},scm:{"commit-split":[{subject:"scm.commit-split",description:"Commit grouping decision captured after SCM split strategy is chosen."}]},docs:{"sync-patch-approval":[{subject:"docs.sync-patch-approval",description:"Documentation sync decision captured for docs auto-applied versus skipped."}]},video:{"mode-selection":[{subject:"video.mode-selection",description:"Confirmed video mode, aspect, visual track, and compositor captured before asset generation."}],"cost-confirmation":[{subject:"video.cost-confirmation",description:"Paid-cost confirmation or key-free fallback decision captured when the estimate crosses the guardrail."}]}}});import{existsSync as eB,readdirSync as N42,readFileSync as A42}from"node:fs";import{join as tB}from"node:path";function e14($,z){let G=tB(b7($),z,"meta.json");if(eB(G))try{return JSON.parse(A42(G,"utf-8"))}catch{return HA($,z)}return p0(z,d0($,z))}function Th2($){let z=tB($,"events.jsonl");if(!eB(z))return[];let G=[];for(let J of A42(z,"utf-8").split(`
1465
1465
  `)){if(!J.trim())continue;try{let Q=JSON.parse(J);if(Q.sid&&Q.kind&&Q.eventId&&Q.ts)G.push(Q)}catch{}}return tC(G)}function $34($,z,G){let J=tB(G,"meta.json");if(eB(J))try{return{bucket:$,sid:z,archivePath:G,meta:JSON.parse(A42(J,"utf-8"))}}catch{}let Q=Th2(G);return{bucket:$,sid:z,archivePath:G,meta:p0(z,Q)}}function $X($=process.cwd()){let z=l0($),G=b7($),J=[];if(eB(G))for(let Q of N42(G,{withFileTypes:!0})){if(!Q.isDirectory())continue;if(!_A(Q.name))continue;J.push(e14($,Q.name))}return J.sort((Q,K)=>(K.createdAt??"").localeCompare(Q.createdAt??"")),{index:z,sessions:J}}function zX($=process.cwd()){let z=xA($),G=[];if(eB(z))for(let J of N42(z,{withFileTypes:!0})){if(!J.isDirectory())continue;let Q=J.name,K=tB(z,Q);for(let Z of N42(K,{withFileTypes:!0})){if(!Z.isDirectory())continue;G.push($34(Q,Z.name,tB(K,Z.name)))}}return G.sort((J,Q)=>(Q.meta.createdAt??"").localeCompare(J.meta.createdAt??"")),{sessions:G}}function j42($,z=process.cwd()){let G=tB(b7(z),$);if(eB(G)){let K=d0(z,$);return{meta:p0($,K),events:K,archived:!1}}let J=zX(z).sessions.find((K)=>K.sid===$);if(J){let K=Th2(J.archivePath);return{meta:p0($,K),events:K,archived:!0,archivePath:J.archivePath}}let Q=d0(z,$);return{meta:p0($,Q),events:Q,archived:!1}}function M42($,z="main",G=process.cwd()){ux2(G,z,$)}function _A($){return $.length>0&&$.length<=128&&!$.includes("..")&&/^[A-Za-z0-9._-]+$/.test($)}function SA($){let z=$.trim().match(/^(\d+)([dhm]?)$/i);if(!z)throw Error("older-than must be a duration like 90d, 24h, or 30m");let G=Number(z[1]??"0"),J=(z[2]??"d").toLowerCase()||"d",Q={d:86400000,h:3600000,m:60000},K=Q[J]??Q.d;return G*K}function xA($){return R7($,UR)}var gT=N(()=>{E3();g8()});import{existsSync as bh2,readdirSync as z34,readFileSync as G34}from"node:fs";import{join as O42}from"node:path";function _h2($,z){let G=O42(b7($),z,"inject-log");if(bh2(G))return G;let J=zX($).sessions.find((Q)=>Q.sid===z);if(J){let Q=O42(J.archivePath,"inject-log");if(bh2(Q))return Q}return null}function I42($,z=process.cwd()){let G=_h2(z,$);if(!G)return[];return z34(G).filter((J)=>J.endsWith(".md")).sort().map((J)=>({file:J,path:O42(G,J)}))}function R42($,z={}){let G=z.projectDir??process.cwd(),J=_h2(G,$),Q=I42($,G);if(!z.entry)return{sid:$,dir:J,entries:Q};let K=Q.find((U)=>U.file===z.entry||U.file===`${z.entry}.md`),Z=K?G34(K.path,"utf-8"):void 0;return{sid:$,dir:J,entries:Q,content:Z}}var Sh2=N(()=>{g8();gT()});import{appendFileSync as J34,existsSync as D42,mkdirSync as xh2,readdirSync as Q34,readFileSync as uh2,renameSync as K34,rmSync as Z34,statSync as U34,writeFileSync as W34}from"node:fs";import{join as GX}from"node:path";function Y34($){if(typeof $!=="object"||$===null)return!1;let z=$;return typeof z.sid==="string"&&typeof z.kind==="string"&&typeof z.eventId==="string"&&typeof z.ts==="string"}function V34($){let z=[],G=[];for(let J of $.split(`
1466
1466
  `)){if(!J.trim())continue;try{let Q=JSON.parse(J);if(Y34(Q))z.push(JSON.stringify(Q));else G.push(J)}catch{G.push(J)}}return{validLines:z,invalidLines:G}}function B34($,z){let G=c22($,z);if(!D42(G))return!0;try{return JSON.parse(uh2(G,"utf-8")),!1}catch{return!0}}function X34($,z){return[...z].sort((J,Q)=>{if(J.status!==Q.status)return J.status==="active"?-1:1;return hT($,Q.sid,Q)-hT($,J.sid,J)})[0]?.sid??null}function hT($,z,G){let J=G.createdAt?Date.parse(G.createdAt):Number.NaN;if(!Number.isNaN(J))return J;return U34(GX(b7($),z)).mtimeMs}function fT($={}){let z=$.projectDir??process.cwd(),G=$.dryRun===!0,J={dryRun:G,repairedMeta:[],quarantinedEvents:[],removedActive:[],reassignedActive:[],unchanged:!0},Q=b7(z),K=D42(Q)?Q34(Q,{withFileTypes:!0}).filter((Y)=>Y.isDirectory()&&_A(Y.name)).map((Y)=>Y.name):[];for(let Y of K){let V=sC(z,Y);if(D42(V)){let B=V34(uh2(V,"utf-8"));if(B.invalidLines.length>0){let L=GX(b7(z),Y,"events.bad.jsonl");if(J.quarantinedEvents.push({sid:Y,invalidLines:B.invalidLines.length,badPath:L}),!G)W34(V,B.validLines.length>0?`${B.validLines.join(`
1467
1467
  `)}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "oh-my-agent",
3
- "version": "10.2.0",
3
+ "version": "10.2.1",
4
4
  "description": "Portable multi-agent harness for .agents-based skills and workflows across Antigravity, Claude Code, Codex, OpenCode, and more",
5
5
  "type": "module",
6
6
  "bin": {