oh-my-agent 13.1.1 → 13.1.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (3) hide show
  1. package/README.md +21 -21
  2. package/bin/cli.js +1 -1
  3. package/package.json +1 -1
package/README.md CHANGED
@@ -14,27 +14,6 @@ oh-my-agent makes the claim falsifiable. A Stop hook refuses to end your session
14
14
 
15
15
  [Watch the full video (35s)](https://github.com/first-fluke/oh-my-agent/blob/main/docs/assets/video/oh-my-agent-explainer.mp4)
16
16
 
17
- ## Verification, Not Narration
18
-
19
- Each mechanism below is mechanical: a command exits 0 or it doesn't, a file is on disk or it isn't. No LLM is asked whether the work "looks correct."
20
-
21
- | Mechanism | What it mechanically checks | Where it lives |
22
- |-----------|------------------------------|----------------|
23
- | **Stop-hook gate** | Blocks session termination while a persistent workflow is active, and runs the configured gate script before allowing a stop. Only `typecheck`, `test`, and `lint` are executable — an agent that writes anything else into the state file gets it ignored, never run. Capped at 5 reinforcements so a permanently red gate can't trap you. | [`.agents/hooks/core/persistent-mode.ts`](https://github.com/first-fluke/oh-my-agent/blob/main/.agents/hooks/core/persistent-mode.ts) |
24
- | **Anti-Circumvention Gate** | `oma ralph:verify --json` checks four artifacts a shortcut can't fake: ultrawork's phase records, the plan JSON, a **distinct QA agent's** result file, and a **distinct refactor agent's** result file. Missing artifacts mean the phase did not run, whatever the narration says. | [`.agents/workflows/ralph.md`](https://github.com/first-fluke/oh-my-agent/blob/main/.agents/workflows/ralph.md) |
25
- | **Independent judge** | Spawned as a separate agent with fresh context, briefed on the criteria only — never on what the implementer claims it fixed. Re-verifies **every** criterion each iteration, including prior PASSes, because fixing C2 is how C1 silently regresses. | [`judge-protocol.md`](https://github.com/first-fluke/oh-my-agent/blob/main/.agents/workflows/ralph/resources/judge-protocol.md) |
26
- | **Event-sourced state** | Every gate pass, gate failure, and decision appends one JSON line to `.agents/state/sessions/{sid}/events.jsonl`, stamped with vendor and runtime session id. Append-only, cross-vendor, auditable after the run. | [`event-spec.md`](https://github.com/first-fluke/oh-my-agent/blob/main/.agents/skills/_shared/runtime/event-spec.md) |
27
- | **Per-agent check battery** | `oma verify <agent>` runs a shared core (scope violation, charter alignment, hardcoded secrets, TODO scan, declared outputs) plus type-specific checks (TypeScript strict, tests, raw SQL, Flutter analyze, inline styles). | `oma verify <agent>` |
28
- | **Skill eval harness** | `oma skills eval` measures utility lift on held-out tasks — treatment vs. baseline — instead of assuming a skill helps. `oma skills opt` keeps only edits that improve the measured lift. | [skill-eval guide](https://github.com/first-fluke/oh-my-agent/blob/main/web/docs/guide/skill-eval.md) |
29
-
30
- Budgets are enforced the same way. `session.quota_cap` caps tokens, spawn count, and per-vendor spend; the orchestrator refuses the next spawn when a dimension is exceeded. When the wall-clock budget runs out, the Stop hook stops honestly with partial status recorded on the event log, rather than pretending completion.
31
-
32
- ### Control Boundary
33
-
34
- oh-my-agent leaves open-ended planning and next-action selection to the host LLM. It does not replace that judgment with a universal workflow graph or policy engine. Instead, it externalizes the invariants that must hold regardless of the model: tool guardrails, permissions, budgets, retry and stop limits, durable events, and mechanically verified completion. Structured events record decisions and gate outcomes; they do not act as a second planner.
35
-
36
- Deterministic SLM execution is therefore a separate, optional product direction rather than missing infrastructure in the current harness.
37
-
38
17
  ## Quick Start
39
18
 
40
19
  The install scripts below auto-install bun, uv, and serena if they're missing.
@@ -270,6 +249,27 @@ agents:
270
249
  - `oma doctor --profile` — prints the per-role resolved model matrix
271
250
  - Full guide: [`web/docs/guide/per-agent-models.md`](https://github.com/first-fluke/oh-my-agent/blob/main/web/docs/guide/per-agent-models.md)
272
251
 
252
+ ## Verification, Not Narration
253
+
254
+ Each mechanism below is mechanical: a command exits 0 or it doesn't, a file is on disk or it isn't. No LLM is asked whether the work "looks correct."
255
+
256
+ | Mechanism | What it mechanically checks | Where it lives |
257
+ |-----------|------------------------------|----------------|
258
+ | **Stop-hook gate** | Blocks session termination while a persistent workflow is active, and runs the configured gate script before allowing a stop. Only `typecheck`, `test`, and `lint` are executable — an agent that writes anything else into the state file gets it ignored, never run. Capped at 5 reinforcements so a permanently red gate can't trap you. | [`.agents/hooks/core/persistent-mode.ts`](https://github.com/first-fluke/oh-my-agent/blob/main/.agents/hooks/core/persistent-mode.ts) |
259
+ | **Anti-Circumvention Gate** | `oma ralph:verify --json` checks four artifacts a shortcut can't fake: ultrawork's phase records, the plan JSON, a **distinct QA agent's** result file, and a **distinct refactor agent's** result file. Missing artifacts mean the phase did not run, whatever the narration says. | [`.agents/workflows/ralph.md`](https://github.com/first-fluke/oh-my-agent/blob/main/.agents/workflows/ralph.md) |
260
+ | **Independent judge** | Spawned as a separate agent with fresh context, briefed on the criteria only — never on what the implementer claims it fixed. Re-verifies **every** criterion each iteration, including prior PASSes, because fixing C2 is how C1 silently regresses. | [`judge-protocol.md`](https://github.com/first-fluke/oh-my-agent/blob/main/.agents/workflows/ralph/resources/judge-protocol.md) |
261
+ | **Event-sourced state** | Every gate pass, gate failure, and decision appends one JSON line to `.agents/state/sessions/{sid}/events.jsonl`, stamped with vendor and runtime session id. Append-only, cross-vendor, auditable after the run. | [`event-spec.md`](https://github.com/first-fluke/oh-my-agent/blob/main/.agents/skills/_shared/runtime/event-spec.md) |
262
+ | **Per-agent check battery** | `oma verify <agent>` runs a shared core (scope violation, charter alignment, hardcoded secrets, TODO scan, declared outputs) plus type-specific checks (TypeScript strict, tests, raw SQL, Flutter analyze, inline styles). | `oma verify <agent>` |
263
+ | **Skill eval harness** | `oma skills eval` measures utility lift on held-out tasks — treatment vs. baseline — instead of assuming a skill helps. `oma skills opt` keeps only edits that improve the measured lift. | [skill-eval guide](https://github.com/first-fluke/oh-my-agent/blob/main/web/docs/guide/skill-eval.md) |
264
+
265
+ Budgets are enforced the same way. `session.quota_cap` caps tokens, spawn count, and per-vendor spend; the orchestrator refuses the next spawn when a dimension is exceeded. When the wall-clock budget runs out, the Stop hook stops honestly with partial status recorded on the event log, rather than pretending completion.
266
+
267
+ ### Control Boundary
268
+
269
+ oh-my-agent leaves open-ended planning and next-action selection to the host LLM. It does not replace that judgment with a universal workflow graph or policy engine. Instead, it externalizes the invariants that must hold regardless of the model: tool guardrails, permissions, budgets, retry and stop limits, durable events, and mechanically verified completion. Structured events record decisions and gate outcomes; they do not act as a second planner.
270
+
271
+ Deterministic SLM execution is therefore a separate, optional product direction rather than missing infrastructure in the current harness.
272
+
273
273
  ## Why oh-my-agent?
274
274
 
275
275
  - **Role-based** — agents modeled like a real engineering team, not a pile of prompts
package/bin/cli.js CHANGED
@@ -24,7 +24,7 @@ Expecting one of '${r.join("', '")}'`);if(this._lifeCycleHooks[e])this._lifeCycl
24
24
  `),this.outputHelp({error:!0});let r=t||{},n=r.exitCode||1,i=r.code||"commander.error";this._exit(n,i,e)}_parseOptionsEnv(){this.options.forEach((e)=>{if(e.envVar&&e.envVar in kr.env){let t=e.attributeName();if(this.getOptionValue(t)===void 0||["default","config","env"].includes(this.getOptionValueSource(t)))if(e.required||e.optional)this.emit(`optionEnv:${e.name()}`,kr.env[e.envVar]);else this.emit(`optionEnv:${e.name()}`)}})}_parseOptionsImplied(){let e=new rN(this.options),t=(r)=>this.getOptionValue(r)!==void 0&&!["default","implied"].includes(this.getOptionValueSource(r));this.options.filter((r)=>r.implied!==void 0&&t(r.attributeName())&&e.valueFromOption(this.getOptionValue(r.attributeName()),r)).forEach((r)=>{Object.keys(r.implied).filter((n)=>!t(n)).forEach((n)=>{this.setOptionValueWithSource(n,r.implied[n],"implied")})})}missingArgument(e){let t=`error: missing required argument '${e}'`;this.error(t,{code:"commander.missingArgument"})}optionMissingArgument(e){let t=`error: option '${e.flags}' argument missing`;this.error(t,{code:"commander.optionMissingArgument"})}missingMandatoryOptionValue(e){let t=`error: required option '${e.flags}' not specified`;this.error(t,{code:"commander.missingMandatoryOptionValue"})}_conflictingOption(e,t){let r=(o)=>{let s=o.attributeName(),a=this.getOptionValue(s),l=this.options.find((u)=>u.negate&&s===u.attributeName()),c=this.options.find((u)=>!u.negate&&s===u.attributeName());if(l&&(l.presetArg===void 0&&a===!1||l.presetArg!==void 0&&a===l.presetArg))return l;return c||o},n=(o)=>{let s=r(o),a=s.attributeName();if(this.getOptionValueSource(a)==="env")return`environment variable '${s.envVar}'`;return`option '${s.flags}'`},i=`error: ${n(e)} cannot be used with ${n(t)}`;this.error(i,{code:"commander.conflictingOption"})}unknownOption(e){if(this._allowUnknownOption)return;let t="";if(e.startsWith("--")&&this._showSuggestionAfterError){let n=[],i=this;do{let o=i.createHelp().visibleOptions(i).filter((s)=>s.long).map((s)=>s.long);n=n.concat(o),i=i.parent}while(i&&!i._enablePositionalOptions);t=iN(e,n)}let r=`error: unknown option '${e}'${t}`;this.error(r,{code:"commander.unknownOption"})}_excessArguments(e){if(this._allowExcessArguments)return;let t=this.registeredArguments.length,r=t===1?"":"s",n=e.length,i=this.parent?` for '${this.name()}'`:"",o=e.join(", "),s=`error: too many arguments${i}. Expected ${t} argument${r} but got ${n}: ${o}.`;this.error(s,{code:"commander.excessArguments"})}unknownCommand(){let e=this.args[0],t="";if(this._showSuggestionAfterError){let n=[];this.createHelp().visibleCommands(this).forEach((i)=>{if(n.push(i.name()),i.alias())n.push(i.alias())}),t=iN(e,n)}let r=`error: unknown command '${e}'${t}`;this.error(r,{code:"commander.unknownCommand"})}version(e,t,r){if(e===void 0)return this._version;this._version=e,t=t||"-V, --version",r=r||"output the version number";let n=this.createOption(t,r);return this._versionOptionName=n.attributeName(),this._registerOption(n),this.on("option:"+n.name(),()=>{this._outputConfiguration.writeOut(`${e}
25
25
  `),this._exit(0,"commander.version",e)}),this}description(e,t){if(e===void 0&&t===void 0)return this._description;if(this._description=e,t)this._argsDescription=t;return this}summary(e){if(e===void 0)return this._summary;return this._summary=e,this}alias(e){if(e===void 0)return this._aliases[0];let t=this;if(this.commands.length!==0&&this.commands[this.commands.length-1]._executableHandler)t=this.commands[this.commands.length-1];if(e===t._name)throw Error("Command alias can't be the same as its name");let r=this.parent?._findCommand(e);if(r){let n=[r.name()].concat(r.aliases()).join("|");throw Error(`cannot add alias '${e}' to command '${this.name()}' as already have command '${n}'`)}return t._aliases.push(e),this}aliases(e){if(e===void 0)return this._aliases;return e.forEach((t)=>this.alias(t)),this}usage(e){if(e===void 0){if(this._usage)return this._usage;let t=this.registeredArguments.map((r)=>vx(r));return[].concat(this.options.length||this._helpOption!==null?"[options]":[],this.commands.length?"[command]":[],this.registeredArguments.length?t:[]).join(" ")}return this._usage=e,this}name(e){if(e===void 0)return this._name;return this._name=e,this}helpGroup(e){if(e===void 0)return this._helpGroupHeading??"";return this._helpGroupHeading=e,this}commandsGroup(e){if(e===void 0)return this._defaultCommandGroup??"";return this._defaultCommandGroup=e,this}optionsGroup(e){if(e===void 0)return this._defaultOptionGroup??"";return this._defaultOptionGroup=e,this}_initOptionGroup(e){if(this._defaultOptionGroup&&!e.helpGroupHeading)e.helpGroup(this._defaultOptionGroup)}_initCommandGroup(e){if(this._defaultCommandGroup&&!e.helpGroup())e.helpGroup(this._defaultCommandGroup)}nameFromFilename(e){return this._name=gc.basename(e,gc.extname(e)),this}executableDir(e){if(e===void 0)return this._executableDir;return this._executableDir=e,this}helpInformation(e){let t=this.createHelp(),r=this._getOutputContext(e);t.prepareContext({error:r.error,helpWidth:r.helpWidth,outputHasColors:r.hasColors});let n=t.formatHelp(this,t);if(r.hasColors)return n;return this._outputConfiguration.stripColor(n)}_getOutputContext(e){e=e||{};let t=!!e.error,r,n,i;if(t)r=(s)=>this._outputConfiguration.writeErr(s),n=this._outputConfiguration.getErrHasColors(),i=this._outputConfiguration.getErrHelpWidth();else r=(s)=>this._outputConfiguration.writeOut(s),n=this._outputConfiguration.getOutHasColors(),i=this._outputConfiguration.getOutHelpWidth();return{error:t,write:(s)=>{if(!n)s=this._outputConfiguration.stripColor(s);return r(s)},hasColors:n,helpWidth:i}}outputHelp(e){let t;if(typeof e==="function")t=e,e=void 0;let r=this._getOutputContext(e),n={error:r.error,write:r.write,command:this};this._getCommandAndAncestors().reverse().forEach((o)=>o.emit("beforeAllHelp",n)),this.emit("beforeHelp",n);let i=this.helpInformation({error:r.error});if(t){if(i=t(i),typeof i!=="string"&&!Buffer.isBuffer(i))throw Error("outputHelp callback must return a string or a Buffer")}if(r.write(i),this._getHelpOption()?.long)this.emit(this._getHelpOption().long);this.emit("afterHelp",n),this._getCommandAndAncestors().forEach((o)=>o.emit("afterAllHelp",n))}helpOption(e,t){if(typeof e==="boolean"){if(e){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(e??"-h, --help",t??"display help for command"),e||t)this._initOptionGroup(this._helpOption);return this}_getHelpOption(){if(this._helpOption===void 0)this.helpOption(void 0,void 0);return this._helpOption}addHelpOption(e){return this._helpOption=e,this._initOptionGroup(e),this}help(e){this.outputHelp(e);let t=Number(kr.exitCode??0);if(t===0&&e&&typeof e!=="function"&&e.error)t=1;this._exit(t,"commander.help","(outputHelp)")}addHelpText(e,t){let r=["beforeAll","before","after","afterAll"];if(!r.includes(e))throw Error(`Unexpected value for position to addHelpText.
26
26
  Expecting one of '${r.join("', '")}'`);let n=`${e}Help`;return this.on(n,(i)=>{let o;if(typeof t==="function")o=t({error:i.error,command:i.command});else o=t;if(o)i.write(`${o}
27
- `)}),this}_outputHelpIfRequested(e){let t=this._getHelpOption();if(t&&e.find((n)=>t.is(n)))this.outputHelp(),this._exit(0,"commander.helpDisplayed","(outputHelp)")}}});var cyr;var sN=g(()=>{bx();Qde();f8();tN();nN();cyr=new eu});var h8;var aN=g(()=>{h8={name:"oh-my-agent",version:"13.1.1",description:"Portable multi-agent harness for .agents-based skills and workflows across Antigravity, Claude Code, Codex, OpenCode, and more",type:"module",bin:{"oh-my-agent":"./bin/cli.js",oma:"./bin/cli.js"},files:["bin"],keywords:["oh-my-agent","antigravity",".agents","agent","skills","agent-skills","multi-agent","orchestrator","claude","claude-code","codex","opencode","copilot","cursor","chatgpt","pm","frontend","backend","mobile","qa","debug","terraform","database","workflow","bug-fixing"],author:"our.first.fluke <our.first.fluke@gmail.com>",contributors:["gracefullight <gracefullight.dev@gmail.com>","gahyun-git <go4it.gh@gmail.com>"],license:"MIT",funding:[{type:"github",url:"https://github.com/sponsors/first-fluke"},{type:"buymeacoffee",url:"https://buymeacoffee.com/firstfluke"}],scripts:{"sync:readme":"node ./scripts/sync-readme.mjs","generate:skill-data":"node ./scripts/generate-skill-data.mjs",build:"bun run generate:skill-data && bun run sync:readme && bun build cli.ts --outfile bin/cli.js --target node --minify --external @napi-rs/keyring",dev:"bun run generate:skill-data && bun run cli.ts",lint:"biome check .","lint:fix":"biome check --write --unsafe .","check:boundaries":"node ./scripts/check-boundaries.mjs","check:emit-drift":"node ./scripts/check-emit-drift.mjs",test:"vitest run","test:coverage":"vitest run --coverage",prepublishOnly:"bun run build"},dependencies:{"@clack/prompts":"^1.7.0","@date-fns/tz":"^1.5.0","@napi-rs/keyring":"^1.3.0",axios:"^1.18.1","better-sqlite3":"^13.0.2",chokidar:"^5.0.0",commander:"^15.0.0","date-fns":"^4.4.0",eld:"^2.0.3","fast-xml-parser":"^5.10.1",minimatch:"^10.2.6","p-map":"^7.0.6",picocolors:"^1.1.1","puppeteer-core":"^25.4.0",remark:"^15.0.1","remark-frontmatter":"^5.0.0","remark-parse":"^11.0.0","smol-toml":"^1.7.1",unified:"^11.0.5",ws:"^8.21.1",yaml:"^2.9.0",zod:"^4.4.3"},optionalDependencies:{pptxgenjs:"^4.0.1"},devDependencies:{"@biomejs/biome":"^2.5.6","@types/better-sqlite3":"^7.6.13","@types/mdast":"^4.0.4","@types/node":"^26.1.2","@types/ws":"^8.18.1","@vitest/coverage-v8":"^4.1.10",typescript:"^7.0.2",vitest:"^4.1.10"},repository:{type:"git",url:"https://github.com/first-fluke/oh-my-agent"},homepage:"https://firstfluke.com/oh-my-agent",bugs:{url:"https://github.com/first-fluke/oh-my-agent/issues"},antigravity:{skillsPath:".agents/skills",skills:["oma-architecture","oma-brainstorm","oma-coordination","oma-pm","oma-frontend","oma-backend","oma-db","oma-mobile","oma-qa","oma-debug","oma-orchestration","oma-dev-workflow","oma-tf-infra","oma-scm","oma-pdf","oma-recap"]}}});import*as sm from"node:fs";import{homedir as Qut}from"node:os";import*as g8 from"node:path";function tpe(e){if(Ax)throw Error("install context already set in this process");Ax=e}function rpe(){if(Ax===null)throw Error("install context not set — entry point must call setInstallContext()");return Ax}function Ld(){return rpe().installRoot}function Ko(){return rpe().mode}function Fd(){try{return Ko()}catch{return"project"}}function am(){try{return Ld()}catch{return process.cwd()}}function npe(e){let t=process.env.OMA_HOME,r=e.global===!0||process.env.OMA_INSTALL_GLOBAL==="1";if(t!==void 0&&t!=="")return e1t(t),{installRoot:t,mode:r?"global":"project"};if(r)return{installRoot:Qut(),mode:"global"};return{installRoot:process.cwd(),mode:"project"}}function e1t(e){if(!g8.isAbsolute(e))throw Error("OMA_HOME must be absolute path");for(let r of epe)if(e===r||e.startsWith(r+g8.sep))throw Error(`OMA_HOME=${e} is forbidden (system path ${r})`);let t;try{t=sm.realpathSync(e)}catch(r){let n=r instanceof Error?r.message:String(r);throw Error(`OMA_HOME=${e}: ${n}`)}for(let r of epe)if(t===r||t.startsWith(r+g8.sep))throw Error(`OMA_HOME=${t} is forbidden (system path ${r})`);try{sm.accessSync(t,sm.constants.W_OK)}catch{throw Error(`OMA_HOME=${t} is not writable`)}}var Ax=null,epe;var o5=g(()=>{epe=["/etc","/usr","/bin","/boot","/sys","/proc"]});import{join as t1t}from"node:path";function Md(e){return e.endsWith("/")?e:`${e}/`}function wi(e,t){let r=t.split("/").filter((n)=>n.length>0);return t1t(e,...r)}var s5=".agents",xx,ai,tu,ipe,ope,Sx,r1t=".antigravitycli",spe,n1t=".migration-backup",i1t="docs/plans",o1t=".qwen/tmp",s1t,a1t,l1t,c1t,u1t,d1t,p1t,lN;var li=g(()=>{xx=`${s5}/skills`,ai=`${s5}/results`,tu=`${s5}/state`,ipe=`${tu}/sessions`,ope=`${tu}/retry`,Sx=`${tu}/archive`,spe=`${s5}/backup`;s1t=Md(ai),a1t=Md(tu),l1t=Md(r1t),c1t=Md(spe),u1t=Md(n1t),d1t=Md(i1t),p1t=Md(o1t),lN=[l1t,s1t,a1t,c1t,d1t,u1t,p1t]});var wn="first-fluke/oh-my-agent",wr,a5,cN,f1t,m1t,yc,on;var sl=g(()=>{li();wr=xx,a5=["antigravity","claude","codex","commandcode","cursor","grok","kimi","kiro","qwen"],cN=["pi","opencode"],f1t=["copilot","hermes"],m1t=["zcode"],yc=[...a5,...cN,...f1t,...m1t].sort(),on={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 fpe={};Re(fpe,{addOutputOptions:()=>Ge,printDescribe:()=>C1t,resolveJsonMode:()=>Ue,runAction:()=>he});function Ge(e,t="Output as JSON"){return e.option("--json",t).option("--output <format>","Output format (text/json)",(r)=>{let n=r.trim().toLowerCase();if(!y8.includes(n))throw Error(`Invalid output format: ${r}. Expected one of ${y8.join(", ")}`);return n})}function h1t(e){if(e?.json)return"json";let t=e?.output?.trim().toLowerCase();if(t&&y8.includes(t))return t;if(process.env[cpe]?.trim().toLowerCase()==="json")return"json";return"text"}function Ue(e){return h1t(e)==="json"}function upe(e){let t=e.at(-1);return t instanceof eu?t:null}function g1t(e){let t=upe(e);if(t)return t.opts();let r=e.at(-1);return r&&typeof r==="object"?r:{}}function y1t(e){if(e instanceof Error)return e.message;return String(e)}function ru(e){throw Error(e)}function dN(e,t){for(let r of e){let n=r.charCodeAt(0);if(n>=0&&n<=31||n===127)ru(`${t} must not contain control characters`)}}function v1t(e,t){if(dN(e,t),/[?#%]/.test(e))ru(`${t} must not contain ?, #, or %`);if(e.includes(".."))ru(`${t} must not contain '..'`)}function b1t(e,t){dN(e,t);try{new URL(e)}catch{ru(`${t} must be a valid absolute URL`)}}function uN(e,t,r="text"){if(typeof e==="string"){if(r==="identifier"){v1t(e,t);return}if(r==="url"){b1t(e,t);return}dN(e,t);return}if(Array.isArray(e))for(let[n,i]of e.entries())uN(i,`${t}[${n}]`,r)}function lpe(e){let t=e.toLowerCase();if(t==="url"||t.endsWith("url"))return"url";if(t.includes("id")||t.includes("type")||t.includes("vendor")||t.includes("session"))return"identifier";return"text"}function k1t(e){let t=e.vendor;if(typeof t==="string"){if(t.split(",").map((o)=>o.trim()).filter(Boolean).filter((o)=>!yc.includes(o)).length>0)ru(`vendor must be one of ${yc.join(", ")}`)}let r=e.output;if(typeof r==="string"&&!y8.includes(r))ru(`output must be one of ${y8.join(", ")}`)}function w1t(e){let t=e.processedArgs??e.args??[];(e.registeredArguments??[]).forEach((i,o)=>{let s=i.name?.()||String(o),a=t[o];if(uN(a,s,lpe(s)),s==="agent-type"&&typeof a==="string"&&!ape.includes(a))ru(`agent-type must be one of ${ape.join(", ")}`)});let n=e.opts();k1t(n);for(let[i,o]of Object.entries(n))uN(o,i,lpe(i))}function A1t(e){return(e.registeredArguments??[]).map((t)=>({name:t.name?.()||"",required:!!t.required,variadic:!!t.variadic}))}function x1t(e){return e.options.map((t)=>({flags:t.flags,long:t.long||void 0,short:t.short||void 0,description:t.description||"",required:!!t.required||!!t.mandatory,optional:!!t.optional,defaultValue:t.defaultValue}))}function dpe(e){let t=[],r=e;while(r?.parent)t.unshift(r.name()),r=r.parent;return t.join(" ")}function S1t(e){return e.options.some((t)=>t.long==="--json"||t.long==="--output")}function $1t(e){return e.options.some((t)=>t.long==="--dry-run")}function ppe(e){return{name:e.name(),path:dpe(e),summary:e.summary()||void 0,description:e.description(),arguments:A1t(e),options:x1t(e),supportsJsonOutput:S1t(e),supportsDryRun:$1t(e),subcommands:e.commands.map((t)=>ppe(t))}}function E1t(e,t){if(!t?.trim())return e;let r=t.trim(),n=[...e.commands];while(n.length>0){let i=n.shift();if(!i)continue;if(i.name()===r||dpe(i)===r)return i;n.push(...i.commands)}return null}function C1t(e,t){let r=E1t(e,t);if(!r)ru(`Unknown command: ${t}`);let n={name:e.name(),version:e.version(),description:e.description(),env:{[cpe]:"Set to json to force machine-readable output on commands that support it."},command:ppe(r)};console.log(JSON.stringify(n,null,2))}function he(e,t={}){return async(...r)=>{let n=upe(r);if(n&&r.length>=2)r[r.length-2]=n.optsWithGlobals();let i=g1t(r);try{if(n)w1t(n);await e(...r)}catch(o){let s=y1t(o);if(t.supportsJsonOutput&&Ue(i))console.log(JSON.stringify({error:s},null,2));else console.error(s);process.exitCode=1}}}var cpe="OH_MY_AG_OUTPUT_FORMAT",y8,ape;var Jt=g(()=>{sN();sl();y8=["text","json"],ape=["backend","frontend","mobile","qa","debug","pm"]});var mpe,hpe=(e)=>e===12288||e>=65281&&e<=65376||e>=65504&&e<=65510,gpe=(e)=>e===8987||e===9001||e>=12272&&e<=12287||e>=12289&&e<=12350||e>=12441&&e<=12543||e>=12549&&e<=12591||e>=12593&&e<=12686||e>=12688&&e<=12771||e>=12783&&e<=12830||e>=12832&&e<=12871||e>=12880&&e<=19903||e>=65040&&e<=65049||e>=65072&&e<=65106||e>=65108&&e<=65126||e>=65128&&e<=65131||e>=127488&&e<=127490||e>=127504&&e<=127547||e>=127552&&e<=127560||e>=131072&&e<=196605||e>=196608&&e<=262141;var ype=g(()=>{mpe=(()=>{let e=/[\uD800-\uDBFF][\uDC00-\uDFFF]/g;return(t)=>{let r=0;e.lastIndex=0;while(e.test(t))r+=1;return t.length-r}})()});var _1t,D1t,vpe,P1t,bpe,T1t,I1t,R1t,kpe=(e,t={},r={})=>{let n=t.limit??1/0,i=t.ellipsis??"",o=t?.ellipsisWidth??(i?kpe(i,R1t,r).width:0),s=0,a=r.controlWidth??0,l=r.tabWidth??8,c=r.emojiWidth??2,u=2,d=r.regularWidth??1,p=r.wideWidth??2,f=[[T1t,d],[_1t,0],[D1t,a],[P1t,l],[bpe,c],[vpe,p]],m=0,h=0,y=e.length,v=0,b=!1,k=y,x=Math.max(0,n-o),E=0,A=0,w=0,S=0;e:while(!0){if(A>E||h>=y&&h>m){let _=e.slice(E,A)||e.slice(m,h);v=0;for(let T of _.replaceAll(I1t,"")){let D=T.codePointAt(0)||0;if(hpe(D))S=2;else if(gpe(D))S=p;else S=d;if(w+S>x)k=Math.min(k,Math.max(E,m)+v);if(w+S>n){b=!0;break e}v+=T.length,w+=S}E=A=0}if(h>=y)break e;for(let _=0,T=f.length;_<T;_++){let[D,P]=f[_];if(D.lastIndex=h,D.test(e)){if(v=D===vpe?mpe(e.slice(h,D.lastIndex)):D===bpe?1:D.lastIndex-h,S=v*P,w+S>x)k=Math.min(k,h+Math.floor((x-w)/P));if(w+S>n){b=!0;break e}w+=S,E=m,A=h,h=m=D.lastIndex;continue e}}h+=1}return{width:b?x:w,index:b?k:y,truncated:b,ellipsed:b&&n>=o}},wpe;var Ape=g(()=>{ype();_1t=/[\u001b\u009b][[()#;?]*(?:[0-9]{1,4}(?:;[0-9]{0,4})*)?[0-9A-ORZcf-nqry=><]|\u001b\]8;[^;]*;.*?(?:\u0007|\u001b\u005c)/y,D1t=/[\x00-\x08\x0A-\x1F\x7F-\x9F]{1,1000}/y,vpe=/(?:(?![\uFF61-\uFF9F\uFF00-\uFFEF])[\p{Script=Han}\p{Script=Hiragana}\p{Script=Katakana}\p{Script=Hangul}\p{Script=Tangut}]){1,1000}/yu,P1t=/\t{1,1000}/y,bpe=/[\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,T1t=/(?:[\x20-\x7E\xA0-\xFF](?!\uFE0F)){1,1000}/y,I1t=/\p{M}+/gu,R1t={limit:1/0,ellipsis:""},wpe=kpe});var O1t,j1t=(e,t={})=>wpe(e,O1t,t).width,Jo;var pN=g(()=>{Ape();O1t={limit:1/0,ellipsis:"",ellipsisWidth:0},Jo=j1t});function al(e,t,r){return String(e).normalize().split(z1t).map((n)=>N1t(n,t,r)).join(`
27
+ `)}),this}_outputHelpIfRequested(e){let t=this._getHelpOption();if(t&&e.find((n)=>t.is(n)))this.outputHelp(),this._exit(0,"commander.helpDisplayed","(outputHelp)")}}});var cyr;var sN=g(()=>{bx();Qde();f8();tN();nN();cyr=new eu});var h8;var aN=g(()=>{h8={name:"oh-my-agent",version:"13.1.2",description:"Portable multi-agent harness for .agents-based skills and workflows across Antigravity, Claude Code, Codex, OpenCode, and more",type:"module",bin:{"oh-my-agent":"./bin/cli.js",oma:"./bin/cli.js"},files:["bin"],keywords:["oh-my-agent","antigravity",".agents","agent","skills","agent-skills","multi-agent","orchestrator","claude","claude-code","codex","opencode","copilot","cursor","chatgpt","pm","frontend","backend","mobile","qa","debug","terraform","database","workflow","bug-fixing"],author:"our.first.fluke <our.first.fluke@gmail.com>",contributors:["gracefullight <gracefullight.dev@gmail.com>","gahyun-git <go4it.gh@gmail.com>"],license:"MIT",funding:[{type:"github",url:"https://github.com/sponsors/first-fluke"},{type:"buymeacoffee",url:"https://buymeacoffee.com/firstfluke"}],scripts:{"sync:readme":"node ./scripts/sync-readme.mjs","generate:skill-data":"node ./scripts/generate-skill-data.mjs",build:"bun run generate:skill-data && bun run sync:readme && bun build cli.ts --outfile bin/cli.js --target node --minify --external @napi-rs/keyring",dev:"bun run generate:skill-data && bun run cli.ts",lint:"biome check .","lint:fix":"biome check --write --unsafe .","check:boundaries":"node ./scripts/check-boundaries.mjs","check:emit-drift":"node ./scripts/check-emit-drift.mjs",test:"vitest run","test:coverage":"vitest run --coverage",prepublishOnly:"bun run build"},dependencies:{"@clack/prompts":"^1.7.0","@date-fns/tz":"^1.5.0","@napi-rs/keyring":"^1.3.0",axios:"^1.18.1","better-sqlite3":"^13.0.2",chokidar:"^5.0.0",commander:"^15.0.0","date-fns":"^4.4.0",eld:"^2.0.3","fast-xml-parser":"^5.10.1",minimatch:"^10.2.6","p-map":"^7.0.6",picocolors:"^1.1.1","puppeteer-core":"^25.4.0",remark:"^15.0.1","remark-frontmatter":"^5.0.0","remark-parse":"^11.0.0","smol-toml":"^1.7.1",unified:"^11.0.5",ws:"^8.21.1",yaml:"^2.9.0",zod:"^4.4.3"},optionalDependencies:{pptxgenjs:"^4.0.1"},devDependencies:{"@biomejs/biome":"^2.5.6","@types/better-sqlite3":"^7.6.13","@types/mdast":"^4.0.4","@types/node":"^26.1.2","@types/ws":"^8.18.1","@vitest/coverage-v8":"^4.1.10",typescript:"^7.0.2",vitest:"^4.1.10"},repository:{type:"git",url:"https://github.com/first-fluke/oh-my-agent"},homepage:"https://firstfluke.com/oh-my-agent",bugs:{url:"https://github.com/first-fluke/oh-my-agent/issues"},antigravity:{skillsPath:".agents/skills",skills:["oma-architecture","oma-brainstorm","oma-coordination","oma-pm","oma-frontend","oma-backend","oma-db","oma-mobile","oma-qa","oma-debug","oma-orchestration","oma-dev-workflow","oma-tf-infra","oma-scm","oma-pdf","oma-recap"]}}});import*as sm from"node:fs";import{homedir as Qut}from"node:os";import*as g8 from"node:path";function tpe(e){if(Ax)throw Error("install context already set in this process");Ax=e}function rpe(){if(Ax===null)throw Error("install context not set — entry point must call setInstallContext()");return Ax}function Ld(){return rpe().installRoot}function Ko(){return rpe().mode}function Fd(){try{return Ko()}catch{return"project"}}function am(){try{return Ld()}catch{return process.cwd()}}function npe(e){let t=process.env.OMA_HOME,r=e.global===!0||process.env.OMA_INSTALL_GLOBAL==="1";if(t!==void 0&&t!=="")return e1t(t),{installRoot:t,mode:r?"global":"project"};if(r)return{installRoot:Qut(),mode:"global"};return{installRoot:process.cwd(),mode:"project"}}function e1t(e){if(!g8.isAbsolute(e))throw Error("OMA_HOME must be absolute path");for(let r of epe)if(e===r||e.startsWith(r+g8.sep))throw Error(`OMA_HOME=${e} is forbidden (system path ${r})`);let t;try{t=sm.realpathSync(e)}catch(r){let n=r instanceof Error?r.message:String(r);throw Error(`OMA_HOME=${e}: ${n}`)}for(let r of epe)if(t===r||t.startsWith(r+g8.sep))throw Error(`OMA_HOME=${t} is forbidden (system path ${r})`);try{sm.accessSync(t,sm.constants.W_OK)}catch{throw Error(`OMA_HOME=${t} is not writable`)}}var Ax=null,epe;var o5=g(()=>{epe=["/etc","/usr","/bin","/boot","/sys","/proc"]});import{join as t1t}from"node:path";function Md(e){return e.endsWith("/")?e:`${e}/`}function wi(e,t){let r=t.split("/").filter((n)=>n.length>0);return t1t(e,...r)}var s5=".agents",xx,ai,tu,ipe,ope,Sx,r1t=".antigravitycli",spe,n1t=".migration-backup",i1t="docs/plans",o1t=".qwen/tmp",s1t,a1t,l1t,c1t,u1t,d1t,p1t,lN;var li=g(()=>{xx=`${s5}/skills`,ai=`${s5}/results`,tu=`${s5}/state`,ipe=`${tu}/sessions`,ope=`${tu}/retry`,Sx=`${tu}/archive`,spe=`${s5}/backup`;s1t=Md(ai),a1t=Md(tu),l1t=Md(r1t),c1t=Md(spe),u1t=Md(n1t),d1t=Md(i1t),p1t=Md(o1t),lN=[l1t,s1t,a1t,c1t,d1t,u1t,p1t]});var wn="first-fluke/oh-my-agent",wr,a5,cN,f1t,m1t,yc,on;var sl=g(()=>{li();wr=xx,a5=["antigravity","claude","codex","commandcode","cursor","grok","kimi","kiro","qwen"],cN=["pi","opencode"],f1t=["copilot","hermes"],m1t=["zcode"],yc=[...a5,...cN,...f1t,...m1t].sort(),on={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 fpe={};Re(fpe,{addOutputOptions:()=>Ge,printDescribe:()=>C1t,resolveJsonMode:()=>Ue,runAction:()=>he});function Ge(e,t="Output as JSON"){return e.option("--json",t).option("--output <format>","Output format (text/json)",(r)=>{let n=r.trim().toLowerCase();if(!y8.includes(n))throw Error(`Invalid output format: ${r}. Expected one of ${y8.join(", ")}`);return n})}function h1t(e){if(e?.json)return"json";let t=e?.output?.trim().toLowerCase();if(t&&y8.includes(t))return t;if(process.env[cpe]?.trim().toLowerCase()==="json")return"json";return"text"}function Ue(e){return h1t(e)==="json"}function upe(e){let t=e.at(-1);return t instanceof eu?t:null}function g1t(e){let t=upe(e);if(t)return t.opts();let r=e.at(-1);return r&&typeof r==="object"?r:{}}function y1t(e){if(e instanceof Error)return e.message;return String(e)}function ru(e){throw Error(e)}function dN(e,t){for(let r of e){let n=r.charCodeAt(0);if(n>=0&&n<=31||n===127)ru(`${t} must not contain control characters`)}}function v1t(e,t){if(dN(e,t),/[?#%]/.test(e))ru(`${t} must not contain ?, #, or %`);if(e.includes(".."))ru(`${t} must not contain '..'`)}function b1t(e,t){dN(e,t);try{new URL(e)}catch{ru(`${t} must be a valid absolute URL`)}}function uN(e,t,r="text"){if(typeof e==="string"){if(r==="identifier"){v1t(e,t);return}if(r==="url"){b1t(e,t);return}dN(e,t);return}if(Array.isArray(e))for(let[n,i]of e.entries())uN(i,`${t}[${n}]`,r)}function lpe(e){let t=e.toLowerCase();if(t==="url"||t.endsWith("url"))return"url";if(t.includes("id")||t.includes("type")||t.includes("vendor")||t.includes("session"))return"identifier";return"text"}function k1t(e){let t=e.vendor;if(typeof t==="string"){if(t.split(",").map((o)=>o.trim()).filter(Boolean).filter((o)=>!yc.includes(o)).length>0)ru(`vendor must be one of ${yc.join(", ")}`)}let r=e.output;if(typeof r==="string"&&!y8.includes(r))ru(`output must be one of ${y8.join(", ")}`)}function w1t(e){let t=e.processedArgs??e.args??[];(e.registeredArguments??[]).forEach((i,o)=>{let s=i.name?.()||String(o),a=t[o];if(uN(a,s,lpe(s)),s==="agent-type"&&typeof a==="string"&&!ape.includes(a))ru(`agent-type must be one of ${ape.join(", ")}`)});let n=e.opts();k1t(n);for(let[i,o]of Object.entries(n))uN(o,i,lpe(i))}function A1t(e){return(e.registeredArguments??[]).map((t)=>({name:t.name?.()||"",required:!!t.required,variadic:!!t.variadic}))}function x1t(e){return e.options.map((t)=>({flags:t.flags,long:t.long||void 0,short:t.short||void 0,description:t.description||"",required:!!t.required||!!t.mandatory,optional:!!t.optional,defaultValue:t.defaultValue}))}function dpe(e){let t=[],r=e;while(r?.parent)t.unshift(r.name()),r=r.parent;return t.join(" ")}function S1t(e){return e.options.some((t)=>t.long==="--json"||t.long==="--output")}function $1t(e){return e.options.some((t)=>t.long==="--dry-run")}function ppe(e){return{name:e.name(),path:dpe(e),summary:e.summary()||void 0,description:e.description(),arguments:A1t(e),options:x1t(e),supportsJsonOutput:S1t(e),supportsDryRun:$1t(e),subcommands:e.commands.map((t)=>ppe(t))}}function E1t(e,t){if(!t?.trim())return e;let r=t.trim(),n=[...e.commands];while(n.length>0){let i=n.shift();if(!i)continue;if(i.name()===r||dpe(i)===r)return i;n.push(...i.commands)}return null}function C1t(e,t){let r=E1t(e,t);if(!r)ru(`Unknown command: ${t}`);let n={name:e.name(),version:e.version(),description:e.description(),env:{[cpe]:"Set to json to force machine-readable output on commands that support it."},command:ppe(r)};console.log(JSON.stringify(n,null,2))}function he(e,t={}){return async(...r)=>{let n=upe(r);if(n&&r.length>=2)r[r.length-2]=n.optsWithGlobals();let i=g1t(r);try{if(n)w1t(n);await e(...r)}catch(o){let s=y1t(o);if(t.supportsJsonOutput&&Ue(i))console.log(JSON.stringify({error:s},null,2));else console.error(s);process.exitCode=1}}}var cpe="OH_MY_AG_OUTPUT_FORMAT",y8,ape;var Jt=g(()=>{sN();sl();y8=["text","json"],ape=["backend","frontend","mobile","qa","debug","pm"]});var mpe,hpe=(e)=>e===12288||e>=65281&&e<=65376||e>=65504&&e<=65510,gpe=(e)=>e===8987||e===9001||e>=12272&&e<=12287||e>=12289&&e<=12350||e>=12441&&e<=12543||e>=12549&&e<=12591||e>=12593&&e<=12686||e>=12688&&e<=12771||e>=12783&&e<=12830||e>=12832&&e<=12871||e>=12880&&e<=19903||e>=65040&&e<=65049||e>=65072&&e<=65106||e>=65108&&e<=65126||e>=65128&&e<=65131||e>=127488&&e<=127490||e>=127504&&e<=127547||e>=127552&&e<=127560||e>=131072&&e<=196605||e>=196608&&e<=262141;var ype=g(()=>{mpe=(()=>{let e=/[\uD800-\uDBFF][\uDC00-\uDFFF]/g;return(t)=>{let r=0;e.lastIndex=0;while(e.test(t))r+=1;return t.length-r}})()});var _1t,D1t,vpe,P1t,bpe,T1t,I1t,R1t,kpe=(e,t={},r={})=>{let n=t.limit??1/0,i=t.ellipsis??"",o=t?.ellipsisWidth??(i?kpe(i,R1t,r).width:0),s=0,a=r.controlWidth??0,l=r.tabWidth??8,c=r.emojiWidth??2,u=2,d=r.regularWidth??1,p=r.wideWidth??2,f=[[T1t,d],[_1t,0],[D1t,a],[P1t,l],[bpe,c],[vpe,p]],m=0,h=0,y=e.length,v=0,b=!1,k=y,x=Math.max(0,n-o),E=0,A=0,w=0,S=0;e:while(!0){if(A>E||h>=y&&h>m){let _=e.slice(E,A)||e.slice(m,h);v=0;for(let T of _.replaceAll(I1t,"")){let D=T.codePointAt(0)||0;if(hpe(D))S=2;else if(gpe(D))S=p;else S=d;if(w+S>x)k=Math.min(k,Math.max(E,m)+v);if(w+S>n){b=!0;break e}v+=T.length,w+=S}E=A=0}if(h>=y)break e;for(let _=0,T=f.length;_<T;_++){let[D,P]=f[_];if(D.lastIndex=h,D.test(e)){if(v=D===vpe?mpe(e.slice(h,D.lastIndex)):D===bpe?1:D.lastIndex-h,S=v*P,w+S>x)k=Math.min(k,h+Math.floor((x-w)/P));if(w+S>n){b=!0;break e}w+=S,E=m,A=h,h=m=D.lastIndex;continue e}}h+=1}return{width:b?x:w,index:b?k:y,truncated:b,ellipsed:b&&n>=o}},wpe;var Ape=g(()=>{ype();_1t=/[\u001b\u009b][[()#;?]*(?:[0-9]{1,4}(?:;[0-9]{0,4})*)?[0-9A-ORZcf-nqry=><]|\u001b\]8;[^;]*;.*?(?:\u0007|\u001b\u005c)/y,D1t=/[\x00-\x08\x0A-\x1F\x7F-\x9F]{1,1000}/y,vpe=/(?:(?![\uFF61-\uFF9F\uFF00-\uFFEF])[\p{Script=Han}\p{Script=Hiragana}\p{Script=Katakana}\p{Script=Hangul}\p{Script=Tangut}]){1,1000}/yu,P1t=/\t{1,1000}/y,bpe=/[\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,T1t=/(?:[\x20-\x7E\xA0-\xFF](?!\uFE0F)){1,1000}/y,I1t=/\p{M}+/gu,R1t={limit:1/0,ellipsis:""},wpe=kpe});var O1t,j1t=(e,t={})=>wpe(e,O1t,t).width,Jo;var pN=g(()=>{Ape();O1t={limit:1/0,ellipsis:"",ellipsisWidth:0},Jo=j1t});function al(e,t,r){return String(e).normalize().split(z1t).map((n)=>N1t(n,t,r)).join(`
28
28
  `)}var $x="\x1B",Cpe="›",L1t=39,mN="\x07",_pe="[",F1t="]",Dpe="m",hN,xpe,Spe=(e)=>{if(e>=30&&e<=37)return 39;if(e>=90&&e<=97)return 39;if(e>=40&&e<=47)return 49;if(e>=100&&e<=107)return 49;if(e===1||e===2)return 22;if(e===3)return 23;if(e===4)return 24;if(e===7)return 27;if(e===8)return 28;if(e===9)return 29;if(e===0)return 0;return},$pe=(e)=>`${$x}${_pe}${e}${Dpe}`,Epe=(e)=>`${$x}${hN}${e}${mN}`,fN=(e,t,r)=>{let n=t[Symbol.iterator](),i=!1,o=!1,s=e.at(-1),a=s===void 0?0:Jo(s),l=n.next(),c=n.next(),u=0;while(!l.done){let d=l.value,p=Jo(d);if(a+p<=r)e[e.length-1]+=d;else e.push(d),a=0;if(d===$x||d===Cpe)i=!0,o=t.startsWith(hN,u+1);if(i){if(o){if(d===mN)i=!1,o=!1}else if(d===Dpe)i=!1}else if(a+=p,a===r&&!c.done)e.push(""),a=0;l=c,c=n.next(),u+=d.length}if(s=e.at(-1),!a&&s!==void 0&&s.length&&e.length>1)e[e.length-2]+=e.pop()},M1t=(e)=>{let t=e.split(" "),r=t.length;while(r){if(Jo(t[r-1]))break;r--}if(r===t.length)return e;return t.slice(0,r).join(" ")+t.slice(r).join("")},N1t=(e,t,r={})=>{if(r.trim!==!1&&e.trim()==="")return"";let n="",i,o,s=e.split(" "),a=[""],l=0;for(let d=0;d<s.length;d++){let p=s[d];if(r.trim!==!1){let m=a.at(-1)??"",h=m.trimStart();if(m.length!==h.length)a[a.length-1]=h,l=Jo(h)}if(d!==0){if(l>=t&&(r.wordWrap===!1||r.trim===!1))a.push(""),l=0;if(l||r.trim===!1)a[a.length-1]+=" ",l++}let f=Jo(p);if(r.hard&&f>t){let m=t-l,h=1+Math.floor((f-m-1)/t);if(Math.floor((f-1)/t)<h)a.push("");fN(a,p,t),l=Jo(a.at(-1)??"");continue}if(l+f>t&&l&&f){if(r.wordWrap===!1&&l<t){fN(a,p,t),l=Jo(a.at(-1)??"");continue}a.push(""),l=0}if(l+f>t&&r.wordWrap===!1){fN(a,p,t),l=Jo(a.at(-1)??"");continue}a[a.length-1]+=p,l+=f}if(r.trim!==!1)a=a.map((d)=>M1t(d));let c=a.join(`
29
29
  `),u=!1;for(let d=0;d<c.length;d++){let p=c[d];if(n+=p,!u){if(u=p>="\uD800"&&p<="\uDBFF",u)continue}else u=!1;if(p===$x||p===Cpe){xpe.lastIndex=d+1;let m=xpe.exec(c)?.groups;if(m?.code!==void 0){let h=Number.parseFloat(m.code);i=h===L1t?void 0:h}else if(m?.uri!==void 0)o=m.uri.length===0?void 0:m.uri}if(c[d+1]===`
30
30
  `){if(o)n+=Epe("");let f=i?Spe(i):void 0;if(i&&f)n+=$pe(f)}else if(p===`
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "oh-my-agent",
3
- "version": "13.1.1",
3
+ "version": "13.1.2",
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": {