oh-my-agent 20.10.0 → 20.10.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -4,7 +4,9 @@
4
4
 
5
5
  [한국어](https://github.com/first-fluke/oh-my-agent/blob/main/docs/README.ko.md) | [中文](https://github.com/first-fluke/oh-my-agent/blob/main/docs/README.zh.md) | [Português](https://github.com/first-fluke/oh-my-agent/blob/main/docs/README.pt.md) | [日本語](https://github.com/first-fluke/oh-my-agent/blob/main/docs/README.ja.md) | [Français](https://github.com/first-fluke/oh-my-agent/blob/main/docs/README.fr.md) | [Español](https://github.com/first-fluke/oh-my-agent/blob/main/docs/README.es.md) | [Nederlands](https://github.com/first-fluke/oh-my-agent/blob/main/docs/README.nl.md) | [Polski](https://github.com/first-fluke/oh-my-agent/blob/main/docs/README.pl.md) | [Русский](https://github.com/first-fluke/oh-my-agent/blob/main/docs/README.ru.md) | [Deutsch](https://github.com/first-fluke/oh-my-agent/blob/main/docs/README.de.md) | [Tiếng Việt](https://github.com/first-fluke/oh-my-agent/blob/main/docs/README.vi.md) | [ภาษาไทย](https://github.com/first-fluke/oh-my-agent/blob/main/docs/README.th.md)
6
6
 
7
- **oh-my-agent (`oma`) adds a team of specialists to the coding agent you already use: Claude Code, Codex CLI, Cursor, and 11 more.** A planner breaks the work down, engineers build in parallel, a reviewer checks the result, and a debugger fixes root causes. It also does cited research, slide decks, videos and images. Most steps leave a file you can open, and in the long-running workflows a gate can send the agent back to work until your own `test`, `lint` or `typecheck` script passes.
7
+ **oh-my-agent (`oma`) is a vendor-agnostic harness that adds a team of specialists to the coding agent you already use: Claude Code, Codex CLI, Cursor, and 11 more.** A planner breaks the work down, engineers build in parallel, a reviewer checks the result, and a debugger fixes root causes. It also does cited research, slide decks, videos and images. Most steps leave a file you can open, and in the long-running workflows a gate can send the agent back to work until your own `test`, `lint` or `typecheck` script passes.
8
+
9
+ [![Oh-My-Agent: A 6+1-Layer Harness Architecture](https://github.com/first-fluke/oh-my-agent/raw/main/docs/assets/architecture/oh-my-agent-architecture.png)](https://github.com/first-fluke/oh-my-agent/blob/main/docs/assets/architecture/oh-my-agent-architecture.svg)
8
10
 
9
11
  Run this from your project root:
10
12
 
@@ -28,7 +30,7 @@ Then run `oma doctor` and type `/plan add user accounts with a settings page` in
28
30
  | **21 workflows** | Slash commands from `/brainstorm` and `/plan` to `/review`, `/debug` and `/scm`. Most also start from a plain request (keyword banks in up to 11 languages) | "review this PR" |
29
31
  | **33 skills** | Domain know-how that loads only when a task needs it: UI, APIs, schemas, Terraform, CI, security, git, observability | loads by itself, e.g. "add a Terraform S3 bucket" |
30
32
  | **Files you can open** | Plans, design docs, API contracts, ADRs, bug notes, per-agent results, security evidence, HTML explainers, recaps | `ls .agents/results` |
31
- | **Checks that don't take the agent's word** | In a long-running workflow, your own `test`, `lint` or `typecheck` script must pass before the agent may stop; `oma ralph verify` checks that a `/ralph` run left its plan, QA and refactor files | `/ultrawork …`, then `oma goal set --gate test` |
33
+ | **Workflow checks** | In a long-running workflow, your own `test`, `lint` or `typecheck` script must pass before the agent may stop; `oma ralph verify` checks that a `/ralph` run left its plan, QA and refactor files | `/ultrawork …`, then `oma goal set --gate test` |
32
34
  | **Research and content** | Cited search, market research, papers, slide decks, MP4 videos, images, local voice, PDF/HWP to Markdown | `/video`, `/convert` |
33
35
  | **One folder, 14 runtimes** | One portable `.agents/` directory, written into each runtime's own config files | `oma link cursor` |
34
36
 
@@ -36,7 +38,7 @@ Then run `oma doctor` and type `/plan add user accounts with a settings page` in
36
38
 
37
39
  ## Install
38
40
 
39
- The script installs [bun](https://bun.sh) if it is missing, installs the `oma` command globally (`bun install --global oh-my-agent`, skipped when `oma` is already on your PATH), then starts the interactive setup. The global command matters: the hooks (keyword detection, the Stop gate) and several workflows call `oma`, and the hooks silently do nothing when they cannot find it. If you skip the script, install it yourself with `bun install --global oh-my-agent` (`npm install --global oh-my-agent` or `brew install oh-my-agent` also work).
41
+ The script installs [bun](https://bun.sh) if it is missing, installs the `oma` command globally (`bun install --global oh-my-agent`, skipped when `oma` is already on your PATH), then starts the interactive setup. The hooks (keyword detection and the Stop gate) and several workflows call the globally installed `oma` command. The hooks silently do nothing if they cannot find it. If you skip the script, install it yourself with `bun install --global oh-my-agent` (`npm install --global oh-my-agent` or `brew install oh-my-agent` also work).
40
42
 
41
43
  <details>
42
44
  <summary>Windows, or without the install script</summary>
@@ -117,7 +119,7 @@ Of the named presets, only `All` includes coordination, orchestration, docs, sec
117
119
  Or just write "plan user accounts with a settings page": on runtimes with a prompt hook, the keyword starts the same workflow.
118
120
  4. **Check what you got.** `/plan` runs in the current session. For work that spans several areas, like this one, it writes `.agents/results/plan-<session-id>.json` and a tracker at `docs/plans/work/<NNN>-<name>.md`. A small, single-area request gets a direct recommendation instead of a plan file.
119
121
 
120
- Stop there. You will know whether this is for you. When you want more, run `/work` or `/orchestrate` on the plan.
122
+ For larger tasks, continue with `/work` or `/orchestrate` using the plan.
121
123
 
122
124
  ## Meet the team
123
125
 
@@ -164,7 +166,7 @@ Each step hands a file to the next. `/brainstorm` saves a design that `/plan` re
164
166
  | Just a plan | `/plan` | A plan file for multi-area work, or a direct recommendation for small work |
165
167
  | A PM-led build you follow step by step | `/work` | PM, then engineers tier by tier, then QA. CRITICAL and HIGH findings go into a fix loop (up to 5 cycles) |
166
168
  | A hands-off parallel build | `/orchestrate` | Only tasks whose checks pass count as done; each task gets up to 3 attempts, then is marked partial or failed |
167
- | Maximum care | `/ultrawork` | Five gated phases (PLAN, IMPL, VERIFY, REFINE, SHIP); every review runs in a fresh reviewer session |
169
+ | Five-phase workflow | `/ultrawork` | Five gated phases (PLAN, IMPL, VERIFY, REFINE, SHIP); every review runs in a fresh reviewer session |
168
170
  | "Don't stop until it's really done" | `/ralph` | Repeats `/ultrawork` with a separately spawned, fresh-context judge until every criterion passes; stops with a partial report when criteria are blocked or after 5 iterations |
169
171
  | The team on a timer | `oma schedule create qa-reviewer "review open PRs" --every 2h` | One Markdown log per run in `~/.oma/schedule/runs/<id>/` |
170
172
 
@@ -201,7 +203,7 @@ You don't need slash commands. On runtimes with a prompt hook, plain requests (k
201
203
  | `/video` | Turns a brief into a finished MP4 through a key-optional pipeline |
202
204
  | `/work` | Coordinates several agents on a multi-domain project with PM planning and QA review (persistent) |
203
205
 
204
- Trigger accuracy is measured, not assumed: `oma verify triggers` scores the detector against a labeled English and Korean corpus of 212 prompts, and CI fails above 10% false fires or 20% missed fires. Last measured: **0% missed-fire, 5.3% false-fire**. Full reference: [Workflows](https://first-fluke.github.io/oh-my-agent/docs/core-concepts/workflows/).
206
+ `oma verify triggers` evaluates the detector against a labeled English and Korean corpus of 212 prompts. CI fails above 10% false fires or 20% missed fires. Last measured: **0% missed-fire, 5.3% false-fire**. Full reference: [Workflows](https://first-fluke.github.io/oh-my-agent/docs/core-concepts/workflows/).
205
207
 
206
208
  </details>
207
209
 
@@ -339,7 +341,7 @@ These pipelines report a missing source or vendor key instead of silently return
339
341
  <details>
340
342
  <summary><strong>Parallel agents, sessions and dashboards</strong></summary>
341
343
 
342
- - `oma agent spawn <role> "<task>" <sid>` runs a role on Antigravity, Claude, Codex, Cursor, OpenCode, Qwen, Grok or Pi, with `--isolation worktree` and `--fallback-vendors`. `oma agent parallel` runs several at once.
344
+ - `oma agent spawn <role> "<task>" <sid>` runs a role on Antigravity, Claude Code, Codex, Cursor, Grok, Kimi Code, Kiro, OpenCode, pi or Qwen Code, with `--isolation worktree` and `--fallback-vendors`. `oma agent parallel` runs several at once. These 10 dispatch targets are a subset of the 14 installer integrations.
343
345
  - Add `--read-only` to require a vendor restriction before launch. Codex uses its read-only sandbox, Claude uses plan mode, and Pi excludes `edit`, `write`, `bash`, and `powershell`. Other CLIs require an explicit `read_only_flag`; missing, empty, or known conflicting flags stop dispatch. Custom flags declare support in your CLI or wrapper. Pi's tool exclusions do not restrict arbitrary extension or MCP tools; OMA does not add an operating-system sandbox.
344
346
  - `oma state list --all-projects` and `oma state get <sid>`: sessions and every recorded event.
345
347
  - `oma dashboard terminal` / `oma dashboard web`: live agent status (the web dashboard listens on `127.0.0.1` only). [Dashboard guide](https://github.com/first-fluke/oh-my-agent/blob/main/web/docs/guide/dashboard-monitoring.md).
@@ -354,10 +356,13 @@ These pipelines report a missing source or vendor key instead of silently return
354
356
  | Slot | Default | Alternatives |
355
357
  |---|---|---|
356
358
  | Docs | Context7 | — |
359
+ | Web search | Runtime native search | Brave Search |
357
360
  | Code intelligence | Serena, one shared server per project | Gortex (experimental) |
358
361
  | Semantic memory | AgentMemory | Honcho (experimental), none |
359
362
  | Browser MCP | Aside | Chrome DevTools, Firefox DevTools |
360
363
 
364
+ Serena supplies LSP-based code navigation and diagnostics, including native-edit feedback where supported. Provider selection is independent of the agent runtime; capabilities vary by provider and host.
365
+
361
366
  Agents coordinate through plain files in `.agents/state/`, with no outside service. `/tools` turns MCP tools on or off in plain language. Details: [Capability Providers](https://github.com/first-fluke/oh-my-agent/blob/main/docs/capability-providers.md).
362
367
 
363
368
  </details>
@@ -546,11 +551,14 @@ agents:
546
551
 
547
552
  </details>
548
553
 
549
- ## Verification, Not Narration
554
+ <a id="verification-not-narration"></a>
555
+ ## Verification
556
+
557
+ OMA checks the artifacts produced by its workflows. [See it work](#see-it-work) shows the Stop gate in action.
550
558
 
551
- Agents narrate success. oh-my-agent checks the artifacts. [See it work](#see-it-work) shows the Stop gate in action; here is every check oma runs, and what each one proves.
559
+ OMA also records tool-call metadata and payload digests for tracked Claude Code and Codex harness runs, distinguishes reported token usage from estimates, and evaluates skill regressions. These +1 functions span the layers; trace coverage varies by runtime and run.
552
560
 
553
- Every mechanism below except the prompted judge is mechanical: a command exits 0 or it doesn't, a file is on disk or it isn't. None of those asks an LLM whether the work "looks correct."
561
+ Most checks are mechanical. Commands exit with status 0 or another status, and artifacts are either on disk or absent. The prompted judge is the exception. The mechanical checks do not ask an LLM whether the work "looks correct."
554
562
 
555
563
  | Mechanism | What it checks | Source |
556
564
  |-----------|----------------|--------|
@@ -560,32 +568,35 @@ Every mechanism below except the prompted judge is mechanical: a command exits 0
560
568
  | **Event log** | In an OMA session, gate passes, gate failures, and decisions append one JSON line each to the session's `events.jsonl`. | [`state-core.ts`](https://github.com/first-fluke/oh-my-agent/blob/main/.agents/hooks/core/state-core.ts) · [`event-spec.md`](https://github.com/first-fluke/oh-my-agent/blob/main/.agents/skills/_shared/runtime/event-spec.md) |
561
569
  | **Per-agent checks** | `oma verify agent <type>` runs Scope Check, Charter Preflight, Hardcoded Secrets, TODO/FIXME Comments, Declared outputs, and TDD Evidence, plus per-type checks such as TypeScript, Any Types, SQL Injection, and tests. | `oma verify agent --help` |
562
570
 
563
- > **No session, no trail.** The Stop hook records gate events under the OMA session opened when the persistent workflow started. Event writes are best-effort. If that session could not be created (stderr shows `[oma] L1 session activation failed`), a failing gate still blocks the stop, but no `gate.failed` line is written. Before you rely on the trail, or demo it, check that `oma state list` shows an active session; `oma state get <sid>` then shows its events.
571
+ > **Session event logging.** The Stop hook records gate events under the OMA session opened when the persistent workflow started. Event writes are best-effort. If that session could not be created (stderr shows `[oma] L1 session activation failed`), a failing gate still blocks the stop, but no `gate.failed` line is written. Before you rely on the trail, or demo it, check that `oma state list` shows an active session; `oma state get <sid>` then shows its events.
564
572
 
565
573
  <details>
566
574
  <summary>Limits, details, and how the Stop hook decides</summary>
567
575
 
568
- **Limits to know:**
576
+ **Limits:**
569
577
 
570
578
  - The Stop gate applies only to the persistent workflows (`/orchestrate`, `/work`, `/ultrawork`, `/ralph`). Without `oma goal set --gate`, it only re-prompts the agent to continue. `/ultrawork` tells the agent to set a gate when the project has a cheap check, but nothing enforces it. Run `oma goal set --gate test` yourself if you want to be sure; the other persistent workflows never set one.
571
579
  - Only the `typecheck`, `test`, and `lint` keywords are accepted, and they run the package.json script of that name. No package.json, or no script with that name, means the gate is not run. Non-JS projects need a package.json wrapper script.
572
- - The block is released and logged as failed after 5 reinforcements, after 2 hours, or when `--budget-minutes` runs out, so a permanently red gate cannot trap you.
580
+ - The gate releases and logs a failure after 5 reinforcements, 2 hours, or when `--budget-minutes` runs out.
573
581
  - Budgets: `session.quota_cap` caps tokens, spawn count, and per-vendor tokens; the orchestrator refuses the next spawn when a dimension is exceeded.
574
582
 
575
- **Artifact gate.** A missing artifact means the phase did not run, whatever the narration says. The refactor check also passes as `skip-recorded` when the session log records a REFINE skip reason.
583
+ **Artifact gate.** A missing artifact means the phase did not run. The refactor check also passes as `skip-recorded` when the session log records a REFINE skip reason.
576
584
 
577
- **Prompted judge.** The `/ralph` workflow prompt tells the orchestrator to spawn the judge as a separate agent with fresh context, briefed on the criteria only (never on what the implementer claims it fixed), and to re-verify **every** criterion each iteration, including earlier PASSes, because fixing C2 is how C1 silently regresses. Nothing checks that the spawn happened: `oma ralph verify` gates the EXEC artifacts, not the judge, and a runtime that cannot spawn subagents is told to judge inline and record `ralph.judge-inline-fallback`. `/ralph` stops after 5 iterations with a partial report.
585
+ **Prompted judge.** The `/ralph` workflow prompt tells the orchestrator to spawn the judge as a separate agent with fresh context, briefed on the criteria only (never on what the implementer claims it fixed), and to re-verify **every** criterion each iteration, including earlier PASSes, because fixing one criterion can cause another to regress. Nothing checks that the spawn happened: `oma ralph verify` gates the EXEC artifacts, not the judge, and a runtime that cannot spawn subagents is told to judge inline and record `ralph.judge-inline-fallback`. `/ralph` stops after 5 iterations with a partial report.
578
586
 
579
587
  **Event log.** Find the session with `oma state list` and read it with `oma state get <sid>`. Each event is stamped with vendor and runtime session id. The file's location depends on `OMA_HOME`, `OMA_STATE_HOME`, `OMA_PROFILE`, and older project-local session folders, so don't hard-code it.
580
588
 
581
589
  **Per-agent checks.** Types: `backend`, `frontend`, `mobile`, `qa`, `debug`, `pm`. The command exits 1 when any check fails; TODO/FIXME Comments and Inline Styles only warn.
582
590
 
591
+ <!-- Stack manifests in this list are optional outputs of /stack-set, not shipped files. -->
592
+ <!-- oma-docs:ignore-start -->
583
593
  - `backend`: `<Language> Syntax`, `SQL Injection` (raw SQL patterns), and `<Language> Tests`, from the commands in `stack/stack.yaml`. Without that file (generate it with `/stack-set`) they are skipped.
584
594
  - `frontend`: the `stack/stack.yaml` syntax and test commands (under `oma-frontend`, or `angular-developer` when that skill is installed), or TypeScript (`tsc --noEmit`) and Frontend Tests (Vitest). Inline Styles and Any Types always run.
585
595
  - `mobile`: the `stack/stack.yaml` syntax and test commands, or Flutter/Dart Analysis and Flutter Tests.
586
596
  - `debug`: Python Tests (pytest through uv) or Frontend Tests (Vitest).
587
597
  - `pm`: PM Plan (the plan file is valid JSON).
588
598
  - `qa`: no mechanical checks.
599
+ <!-- oma-docs:ignore-end -->
589
600
 
590
601
  ```mermaid
591
602
  flowchart TD
@@ -648,7 +659,7 @@ Planning and choosing the next step stay with your agent's model; oma has no fix
648
659
 
649
660
  </details>
650
661
 
651
- ## Learn More
662
+ ## Learn more
652
663
 
653
664
  - **[Docs site](https://first-fluke.github.io/oh-my-agent/)**: guides, tutorials, and CLI reference. Start with [Quick Start](https://first-fluke.github.io/oh-my-agent/docs/getting-started/quick-start/) and [Installation](https://first-fluke.github.io/oh-my-agent/docs/getting-started/installation/).
654
665
  - **[Why oh-my-agent](https://first-fluke.github.io/oh-my-agent/docs/getting-started/why-oh-my-agent/)**: when to choose it and the trade-offs
@@ -658,13 +669,13 @@ Planning and choosing the next step stay with your agent's model; oma has no fix
658
669
  - **[Capability Providers](https://github.com/first-fluke/oh-my-agent/blob/main/docs/capability-providers.md)**: experimental Gortex and Honcho configuration, routing, and limits
659
670
  - **[Skill Compatibility Matrix](https://github.com/first-fluke/oh-my-agent/blob/main/docs/skills-matrix.md)**: native skill content, references, and response contracts in Claude and Codex
660
671
 
661
- > **Like this project?** Give it a star!
672
+ > Star the project on GitHub:
662
673
  >
663
674
  > ```bash
664
675
  > gh api --method PUT /user/starred/first-fluke/oh-my-agent
665
676
  > ```
666
677
  >
667
- > Try our optimized starter template: [fullstack-starter](https://github.com/first-fluke/fullstack-starter)
678
+ > Starter template: [fullstack-starter](https://github.com/first-fluke/fullstack-starter)
668
679
 
669
680
  ## Star History
670
681
 
package/bin/cli-main.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 Lr.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()}`,Lr.env[e.envVar]);else this.emit(`optionEnv:${e.name()}`)}})}_parseOptionsImplied(){let e=new Aq(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),c=this.options.find((u)=>u.negate&&s===u.attributeName()),l=this.options.find((u)=>!u.negate&&s===u.attributeName());if(c&&(c.presetArg===void 0&&a===!1||c.presetArg!==void 0&&a===c.presetArg))return c;return l||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=Eq(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=Eq(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)=>gT(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=_4.basename(e,_4.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(Lr.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 NZr;var Mm=v(()=>{yT();A6e();Pb();xq();Sq();NZr=new qu});var T4;var Ib=v(()=>{T4={name:"oh-my-agent",version:"20.10.0",description:"A specialist team for the coding agent you already use: 12 roles, 21 workflows and 33 skills that plan, build in parallel, review and debug, leaving plans, ADRs and results as files. Gates wait for your own tests. Also research, slides and video. One .agents/ folder for Claude Code, Codex, Cursor and 11 more.",type:"module",bin:{"oh-my-agent":"./bin/cli.js",oma:"./bin/cli.js"},files:["bin","assets/serena"],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-main.js --target node --minify --external @napi-rs/keyring --external jsonc-parser && node ./scripts/write-bin-entry.mjs && bun run check:bundle",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:bundle":"node ./scripts/check-bundle.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","@dagrejs/dagre":"^3.1.1","@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","jsonc-parser":"^3.3.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-gfm":"^4.0.1","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:{"@babel/parser":"7.29.3","@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{homedir as S6e}from"node:os";import{isAbsolute as NAt,join as FAt,resolve as zAt}from"node:path";function E6e(e,t){let r=Array.from(e).some((n)=>{let i=n.charCodeAt(0);return i<32||i===127});if(!NAt(e)||r)throw Error(`${t} must be an absolute path without control characters`);return zAt(e)}function Jr(e=process.env,t=S6e()){return E6e(e.OMA_HOME||FAt(t,".oma"),"OMA_HOME")}function ws(e=process.env,t=S6e()){return e.OMA_STATE_HOME===void 0?Jr(e,t):E6e(e.OMA_STATE_HOME,"OMA_STATE_HOME")}var kT=()=>{};import{homedir as BAt}from"node:os";import{join as Ob}from"node:path";function hc(e=process.env,t=BAt()){let r=Jr(e,t),n=Ob(r,"state");return{home:r,definitions:Ob(r,".agents"),state:n,serena:Ob(n,"serena"),schedule:Ob(r,"schedule"),backup:Ob(r,"backup")}}var pi=v(()=>{kT();kT()});import*as Ku from"node:fs";import{homedir as UAt}from"node:os";import*as _l from"node:path";function C6e(e){if(wT)throw Error("install context already set in this process");wT=e}function _6e(){if(wT===null)throw Error("install context not set — entry point must call setInstallContext()");return wT}function R4(){return _6e().installRoot}function fi(){return _6e().mode}function wt(){try{return fi()}catch{return"project"}}function Ng(){try{return R4()}catch{return process.cwd()}}function xT(e,t,r=UAt()){return t==="project"&&_l.resolve(e)===_l.resolve(r)}function T6e(e){if(e.global===!0||process.env.OMA_INSTALL_GLOBAL==="1"){let r=Jr();return HAt(r),{installRoot:r,mode:"global"}}return{installRoot:process.cwd(),mode:"project"}}function HAt(e){if(!_l.isAbsolute(e))throw Error("OMA_HOME must be absolute path");for(let n of $6e)if(e===n||e.startsWith(n+_l.sep))throw Error(`OMA_HOME=${e} is forbidden (system path ${n})`);let t,r=_l.resolve(e);try{while(!Ku.existsSync(r)){let n=_l.dirname(r);if(n===r)break;r=n}if(t=Ku.realpathSync(r),!Ku.statSync(t).isDirectory())throw Error("nearest existing ancestor is not a directory")}catch(n){let i=n instanceof Error?n.message:String(n);throw Error(`OMA_HOME=${e}: ${i}`)}for(let n of $6e)if(t===n||t.startsWith(n+_l.sep))throw Error(`OMA_HOME=${e} is forbidden (system path ${n})`);try{Ku.accessSync(t,Ku.constants.W_OK)}catch{throw Error(`OMA_HOME=${e} is not writable`)}}var wT=null,$6e;var mi=v(()=>{pi();$6e=["/etc","/usr","/bin","/boot","/sys","/proc"]});import{join as JAt}from"node:path";function jm(e){return e.endsWith("/")?e:`${e}/`}function h2(e,t){let r=t.split("/").filter((n)=>n.length>0);return JAt(e,...r)}var lr=".agents",Dm,In,jp,nQr,iQr,oQr,YAt=".antigravitycli",P6e,XAt=".migration-backup",ZAt="docs/plans",QAt=".qwen/tmp",eSt,tSt,rSt,nSt,iSt,oSt,sSt,Cq;var Yr=v(()=>{Dm=`${lr}/skills`,In=`${lr}/results`,jp=`${lr}/state`,nQr=`${jp}/sessions`,iQr=`${jp}/retry`,oQr=`${jp}/archive`,P6e=`${lr}/backup`;eSt=jm(In),tSt=jm(jp),rSt=jm(YAt),nSt=jm(P6e),iSt=jm(XAt),oSt=jm(ZAt),sSt=jm(QAt),Cq=[".agents/oma-config.local.cue",".agents/oma-config.local.yaml",rSt,eSt,tSt,nSt,oSt,iSt,sSt]});var cn="first-fluke/oh-my-agent",qt,Tl,_q,aSt,cSt,P4,Zn;var g2=v(()=>{Yr();qt=Dm,Tl=["antigravity","claude","codex","commandcode","cursor","grok","kimi","kiro","qwen"],_q=["pi","opencode"],aSt=["copilot","hermes"],cSt=["zcode"],P4=[...Tl,..._q,...aSt,...cSt].sort(),Zn={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"}}});function de(e,t="Output as JSON"){return e.option("--json",t).option("--output <format>","Output format (text/json)",(r)=>{let n=r.trim().toLowerCase();if(!Mb.includes(n))throw Error(`Invalid output format: ${r}. Expected one of ${Mb.join(", ")}`);return n})}function lSt(e){if(e?.json)return"json";let t=e?.output?.trim().toLowerCase();if(t&&Mb.includes(t))return t;if(process.env[M6e]?.trim().toLowerCase()==="json")return"json";return"text"}function pe(e){return lSt(e)==="json"}function D6e(e){let t=e.at(-1);return t instanceof qu?t:null}function uSt(e){let t=D6e(e);if(t)return t.opts();let r=e.at(-1);return r&&typeof r==="object"?r:{}}function dSt(e){if(e instanceof Error)return e.message;return String(e)}function Lp(e){throw Error(e)}function Rq(e,t){for(let r of e){let n=r.charCodeAt(0);if(n>=0&&n<=31||n===127)Lp(`${t} must not contain control characters`)}}function pSt(e,t){if(Rq(e,t),/[?#%]/.test(e))Lp(`${t} must not contain ?, #, or %`);if(e.includes(".."))Lp(`${t} must not contain '..'`)}function fSt(e,t){Rq(e,t);try{new URL(e)}catch{Lp(`${t} must be a valid absolute URL`)}}function Tq(e,t,r="text"){if(typeof e==="string"){if(r==="identifier"){pSt(e,t);return}if(r==="url"){fSt(e,t);return}Rq(e,t);return}if(Array.isArray(e))for(let[n,i]of e.entries())Tq(i,`${t}[${n}]`,r)}function O6e(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 mSt(e){let t=e.vendor;if(typeof t==="string"){if(t.split(",").map((o)=>o.trim()).filter(Boolean).filter((o)=>!P4.includes(o)).length>0)Lp(`vendor must be one of ${P4.join(", ")}`)}let r=e.output;if(typeof r==="string"&&!Mb.includes(r))Lp(`output must be one of ${Mb.join(", ")}`)}function hSt(e){let t=e.processedArgs??e.args??[];(e.registeredArguments??[]).forEach((i,o)=>{let s=i.name?.()||String(o),a=t[o];if(Tq(a,s,O6e(s)),s==="agent-type"&&typeof a==="string"&&!I6e.includes(a))Lp(`agent-type must be one of ${I6e.join(", ")}`)});let n=e.opts();mSt(n);for(let[i,o]of Object.entries(n))Tq(o,i,O6e(i))}function gSt(e){return(e.registeredArguments??[]).map((t)=>({name:t.name?.()||"",required:!!t.required,variadic:!!t.variadic}))}function ySt(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 j6e(e){let t=[],r=e;while(r?.parent)t.unshift(r.name()),r=r.parent;return t.join(" ")}function vSt(e){return e.options.some((t)=>t.long==="--json"||t.long==="--output")}function bSt(e){return e.options.some((t)=>t.long==="--dry-run")}function L6e(e){return{name:e.name(),path:j6e(e),summary:e.summary()||void 0,description:e.description(),arguments:gSt(e),options:ySt(e),supportsJsonOutput:vSt(e),supportsDryRun:bSt(e),subcommands:e.commands.filter((t)=>!t._hidden).map((t)=>L6e(t))}}function kSt(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||j6e(i)===r)return i;n.push(...i.commands)}return null}function N6e(e,t){let r=kSt(e,t);if(!r)Lp(`Unknown command: ${t}`);let n={name:e.name(),version:e.version(),description:e.description(),env:{[M6e]:"Set to json to force machine-readable output on commands that support it."},command:L6e(r)};console.log(JSON.stringify(n,null,2))}function Y(e,t={}){return async(...r)=>{let n=D6e(r);if(n&&r.length>=2)r[r.length-2]=n.optsWithGlobals();let i=uSt(r);try{if(n)hSt(n);await e(...r)}catch(o){let s=dSt(o);if(t.supportsJsonOutput&&pe(i))console.log(JSON.stringify({error:s},null,2));else console.error(s);process.exitCode=1}}}var M6e="OH_MY_AG_OUTPUT_FORMAT",Mb,I6e;var Et=v(()=>{Mm();g2();Mb=["text","json"],I6e=["backend","frontend","mobile","qa","debug","pm"]});function ne(e,t,r){function n(a,c){if(!a._zod)Object.defineProperty(a,"_zod",{value:{def:c,constr:s,traits:new Set},enumerable:!1});if(a._zod.traits.has(e))return;a._zod.traits.add(e),t(a,c);let l=s.prototype,u=Object.keys(l);for(let d=0;d<u.length;d++){let p=u[d];if(!(p in a))a[p]=l[p].bind(a)}}let i=r?.Parent??Object;class o extends i{}Object.defineProperty(o,"name",{value:e});function s(a){var c;let l=r?.Parent?new o:this;n(l,a),(c=l._zod).deferred??(c.deferred=[]);for(let u of l._zod.deferred)u();return l}return Object.defineProperty(s,"init",{value:n}),Object.defineProperty(s,Symbol.hasInstance,{value:(a)=>{if(r?.Parent&&a instanceof r.Parent)return!0;return a?._zod?.traits?.has(e)}}),Object.defineProperty(s,"name",{value:e}),s}function y2(e){if(e)Object.assign(Fg,e);return Fg}var F6e,pQr,I4,Db,Fg;var Lm=v(()=>{pQr=Symbol("zod_brand");I4=class I4 extends Error{constructor(){super("Encountered Promise during synchronous parse. Use .parseAsync() instead.")}};Db=class Db extends Error{constructor(e){super(`Encountered unidirectional transform during encode: ${e}`);this.name="ZodEncodeError"}};(F6e=globalThis).__zod_globalConfig??(F6e.__zod_globalConfig={});Fg=globalThis.__zod_globalConfig});function ST(e){let t=Object.values(e).filter((n)=>typeof n==="number");return Object.entries(e).filter(([n,i])=>t.indexOf(+n)===-1).map(([n,i])=>i)}function Iq(e,t="|"){return e.map((r)=>jq(r)).join(t)}function Lb(e,t){if(typeof t==="bigint")return t.toString();return t}function ET(e){return{get value(){{let r=e();return Object.defineProperty(this,"value",{value:r}),r}throw Error("cached value already set")}}}function $T(e){return e===null||e===void 0}function CT(e){let t=e.startsWith("^")?1:0,r=e.endsWith("$")?e.length-1:e.length;return e.slice(t,r)}function B6e(e,t){let r=e/t,n=Math.round(r),i=Number.EPSILON*Math.max(Math.abs(r),1);if(Math.abs(r-n)<i)return 0;return r-n}function hr(e,t,r){let n=void 0;Object.defineProperty(e,t,{get(){if(n===z6e)return;if(n===void 0)n=z6e,n=r();return n},set(i){Object.defineProperty(e,t,{value:i})},configurable:!0})}function Nm(e,t,r){Object.defineProperty(e,t,{value:r,writable:!0,enumerable:!0,configurable:!0})}function Np(...e){let t={};for(let r of e){let n=Object.getOwnPropertyDescriptors(r);Object.assign(t,n)}return Object.defineProperties({},t)}function Oq(e){return JSON.stringify(e)}function U6e(e){return e.toLowerCase().trim().replace(/[^\w\s-]/g,"").replace(/[\s_-]+/g,"-").replace(/^-+|-+$/g,"")}function jb(e){return typeof e==="object"&&e!==null&&!Array.isArray(e)}function Fm(e){if(jb(e)===!1)return!1;let t=e.constructor;if(t===void 0)return!0;if(typeof t!=="function")return!0;let r=t.prototype;if(jb(r)===!1)return!1;if(Object.prototype.hasOwnProperty.call(r,"isPrototypeOf")===!1)return!1;return!0}function Dq(e){if(Fm(e))return{...e};if(Array.isArray(e))return[...e];if(e instanceof Map)return new Map(e);if(e instanceof Set)return new Set(e);return e}function Fp(e){return e.replace(/[.*+?^${}()|[\]\\]/g,"\\$&")}function Ju(e,t,r){let n=new e._zod.constr(t??e._zod.def);if(!t||r?.parent)n._zod.parent=e;return n}function Ge(e){let t=e;if(!t)return{};if(typeof t==="string")return{error:()=>t};if(t?.message!==void 0){if(t?.error!==void 0)throw Error("Cannot specify both `message` and `error` params");t.error=t.message}if(delete t.message,typeof t.error==="string")return{...t,error:()=>t.error};return t}function jq(e){if(typeof e==="bigint")return e.toString()+"n";if(typeof e==="string")return`"${e}"`;return`${e}`}function W6e(e){return Object.keys(e).filter((t)=>e[t]._zod.optin==="optional"&&e[t]._zod.optout==="optional")}function wSt(e,t){let r=e._zod.def,n=r.checks;if(n&&n.length>0)throw Error(".pick() cannot be used on object schemas containing refinements");let o=Np(e._zod.def,{get shape(){let s={};for(let a in t){if(!(a in r.shape))throw Error(`Unrecognized key: "${a}"`);if(!t[a])continue;s[a]=r.shape[a]}return Nm(this,"shape",s),s},checks:[]});return Ju(e,o)}function xSt(e,t){let r=e._zod.def,n=r.checks;if(n&&n.length>0)throw Error(".omit() cannot be used on object schemas containing refinements");let o=Np(e._zod.def,{get shape(){let s={...e._zod.def.shape};for(let a in t){if(!(a in r.shape))throw Error(`Unrecognized key: "${a}"`);if(!t[a])continue;delete s[a]}return Nm(this,"shape",s),s},checks:[]});return Ju(e,o)}function ASt(e,t){if(!Fm(t))throw Error("Invalid input to extend: expected a plain object");let r=e._zod.def.checks;if(r&&r.length>0){let o=e._zod.def.shape;for(let s in t)if(Object.getOwnPropertyDescriptor(o,s)!==void 0)throw Error("Cannot overwrite keys on object schemas containing refinements. Use `.safeExtend()` instead.")}let i=Np(e._zod.def,{get shape(){let o={...e._zod.def.shape,...t};return Nm(this,"shape",o),o}});return Ju(e,i)}function SSt(e,t){if(!Fm(t))throw Error("Invalid input to safeExtend: expected a plain object");let r=Np(e._zod.def,{get shape(){let n={...e._zod.def.shape,...t};return Nm(this,"shape",n),n}});return Ju(e,r)}function ESt(e,t){if(e._zod.def.checks?.length)throw Error(".merge() cannot be used on object schemas containing refinements. Use .safeExtend() instead.");let r=Np(e._zod.def,{get shape(){let n={...e._zod.def.shape,...t._zod.def.shape};return Nm(this,"shape",n),n},get catchall(){return t._zod.def.catchall},checks:t._zod.def.checks??[]});return Ju(e,r)}function $St(e,t,r){let i=t._zod.def.checks;if(i&&i.length>0)throw Error(".partial() cannot be used on object schemas containing refinements");let s=Np(t._zod.def,{get shape(){let a=t._zod.def.shape,c={...a};if(r)for(let l in r){if(!(l in a))throw Error(`Unrecognized key: "${l}"`);if(!r[l])continue;c[l]=e?new e({type:"optional",innerType:a[l]}):a[l]}else for(let l in a)c[l]=e?new e({type:"optional",innerType:a[l]}):a[l];return Nm(this,"shape",c),c},checks:[]});return Ju(t,s)}function CSt(e,t,r){let n=Np(t._zod.def,{get shape(){let i=t._zod.def.shape,o={...i};if(r)for(let s in r){if(!(s in o))throw Error(`Unrecognized key: "${s}"`);if(!r[s])continue;o[s]=new e({type:"nonoptional",innerType:i[s]})}else for(let s in i)o[s]=new e({type:"nonoptional",innerType:i[s]});return Nm(this,"shape",o),o}});return Ju(t,n)}function zm(e,t=0){if(e.aborted===!0)return!0;for(let r=t;r<e.issues.length;r++)if(e.issues[r]?.continue!==!0)return!0;return!1}function q6e(e,t=0){if(e.aborted===!0)return!0;for(let r=t;r<e.issues.length;r++)if(e.issues[r]?.continue===!1)return!0;return!1}function zp(e,t){return t.map((r)=>{var n;return(n=r).path??(n.path=[]),r.path.unshift(e),r})}function AT(e){return typeof e==="string"?e:e?.message}function Rl(e,t,r){let n=e.message?e.message:AT(e.inst?._zod.def?.error?.(e))??AT(t?.error?.(e))??AT(r.customError?.(e))??AT(r.localeError?.(e))??"Invalid input",{inst:i,continue:o,input:s,...a}=e;if(a.path??(a.path=[]),a.message=n,t?.reportInput)a.input=s;return a}function _T(e){if(Array.isArray(e))return"array";if(typeof e==="string")return"string";return"unknown"}function K6e(e){let t=typeof e;switch(t){case"number":return Number.isNaN(e)?"nan":"number";case"object":{if(e===null)return"null";if(Array.isArray(e))return"array";let r=e;if(r&&Object.getPrototypeOf(r)!==Object.prototype&&"constructor"in r&&r.constructor)return r.constructor.name}}return t}function Bm(...e){let[t,r,n]=e;if(typeof t==="string")return{message:t,code:"custom",input:r,inst:n};return{...t}}var z6e,Mq,H6e,G6e,V6e;var Pl=v(()=>{Lm();z6e=Symbol("evaluating");Mq="captureStackTrace"in Error?Error.captureStackTrace:(...e)=>{};H6e=ET(()=>{if(Fg.jitless)return!1;if(typeof navigator<"u"&&navigator?.userAgent?.includes("Cloudflare"))return!1;try{return new Function(""),!0}catch(e){return!1}});G6e=new Set(["string","number","symbol"]);V6e={safeint:[Number.MIN_SAFE_INTEGER,Number.MAX_SAFE_INTEGER],int32:[-2147483648,2147483647],uint32:[0,4294967295],float32:[-340282346638528860000000000000000000000,340282346638528860000000000000000000000],float64:[-Number.MAX_VALUE,Number.MAX_VALUE]}});function Y6e(e,t=(r)=>r.message){let r={},n=[];for(let i of e.issues)if(i.path.length>0)r[i.path[0]]=r[i.path[0]]||[],r[i.path[0]].push(t(i));else n.push(t(i));return{formErrors:n,fieldErrors:r}}function X6e(e,t=(r)=>r.message){let r={_errors:[]},n=(i,o=[])=>{for(let s of i.issues)if(s.code==="invalid_union"&&s.errors.length)s.errors.map((a)=>n({issues:a},[...o,...s.path]));else if(s.code==="invalid_key")n({issues:s.issues},[...o,...s.path]);else if(s.code==="invalid_element")n({issues:s.issues},[...o,...s.path]);else{let a=[...o,...s.path];if(a.length===0)r._errors.push(t(s));else{let c=r,l=0;while(l<a.length){let u=a[l];if(l!==a.length-1)c[u]=c[u]||{_errors:[]};else c[u]=c[u]||{_errors:[]},c[u]._errors.push(t(s));c=c[u],l++}}}};return n(e),r}var J6e=(e,t)=>{e.name="$ZodError",Object.defineProperty(e,"_zod",{value:e._zod,enumerable:!1}),Object.defineProperty(e,"issues",{value:t,enumerable:!1}),e.message=JSON.stringify(t,Lb,2),Object.defineProperty(e,"toString",{value:()=>e.message,enumerable:!1})},TT,Lq;var Nq=v(()=>{Lm();Pl();TT=ne("$ZodError",J6e),Lq=ne("$ZodError",J6e,{Parent:Error})});var RT=(e)=>(t,r,n,i)=>{let o=n?{...n,async:!1}:{async:!1},s=t._zod.run({value:r,issues:[]},o);if(s instanceof Promise)throw new I4;if(s.issues.length){let a=new(i?.Err??e)(s.issues.map((c)=>Rl(c,o,y2())));throw Mq(a,i?.callee),a}return s.value},PT=(e)=>async(t,r,n,i)=>{let o=n?{...n,async:!0}:{async:!0},s=t._zod.run({value:r,issues:[]},o);if(s instanceof Promise)s=await s;if(s.issues.length){let a=new(i?.Err??e)(s.issues.map((c)=>Rl(c,o,y2())));throw Mq(a,i?.callee),a}return s.value},Nb=(e)=>(t,r,n)=>{let i=n?{...n,async:!1}:{async:!1},o=t._zod.run({value:r,issues:[]},i);if(o instanceof Promise)throw new I4;return o.issues.length?{success:!1,error:new(e??TT)(o.issues.map((s)=>Rl(s,i,y2())))}:{success:!0,data:o.value}},Z6e,Fb=(e)=>async(t,r,n)=>{let i=n?{...n,async:!0}:{async:!0},o=t._zod.run({value:r,issues:[]},i);if(o instanceof Promise)o=await o;return o.issues.length?{success:!1,error:new e(o.issues.map((s)=>Rl(s,i,y2())))}:{success:!0,data:o.value}},Q6e,e9e=(e)=>(t,r,n)=>{let i=n?{...n,direction:"backward"}:{direction:"backward"};return RT(e)(t,r,i)},t9e=(e)=>(t,r,n)=>RT(e)(t,r,n),r9e=(e)=>async(t,r,n)=>{let i=n?{...n,direction:"backward"}:{direction:"backward"};return PT(e)(t,r,i)},n9e=(e)=>async(t,r,n)=>PT(e)(t,r,n),i9e=(e)=>(t,r,n)=>{let i=n?{...n,direction:"backward"}:{direction:"backward"};return Nb(e)(t,r,i)},o9e=(e)=>(t,r,n)=>Nb(e)(t,r,n),s9e=(e)=>async(t,r,n)=>{let i=n?{...n,direction:"backward"}:{direction:"backward"};return Fb(e)(t,r,i)},a9e=(e)=>async(t,r,n)=>Fb(e)(t,r,n);var Fq=v(()=>{Lm();Nq();Pl();Z6e=Nb(Lq),Q6e=Fb(Lq)});function y9e(){return new RegExp(TSt,"u")}function C9e(e){return typeof e.precision==="number"?e.precision===-1?"(?:[01]\\d|2[0-3]):[0-5]\\d":e.precision===0?"(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d":`(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d\\.\\d{${e.precision}}`:"(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?"}function _9e(e){return new RegExp(`^${C9e(e)}$`)}function T9e(e){let t=C9e({precision:e.precision}),r=["Z"];if(e.local)r.push("");if(e.offset)r.push("([+-](?:[01]\\d|2[0-3]):[0-5]\\d)");let n=`${t}(?:${r.join("|")})`;return new RegExp(`^${E9e}T(?:${n})$`)}var c9e,l9e,u9e,d9e,p9e,f9e,m9e,h9e,zq=(e)=>{if(!e)return/^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$/;return new RegExp(`^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-${e}[0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12})$`)},g9e,TSt="^(\\p{Extended_Pictographic}|\\p{Emoji_Component})+$",v9e,b9e,k9e,w9e,x9e,Bq,A9e,S9e,E9e="(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))",$9e,R9e=(e)=>{let t=e?`[\\s\\S]{${e?.minimum??0},${e?.maximum??""}}`:"[\\s\\S]*";return new RegExp(`^${t}$`)},P9e,Uq,I9e,O9e,M9e,D9e;var OT=v(()=>{c9e=/^[cC][0-9a-z]{6,}$/,l9e=/^[0-9a-z]+$/,u9e=/^[0-9A-HJKMNP-TV-Za-hjkmnp-tv-z]{26}$/,d9e=/^[0-9a-vA-V]{20}$/,p9e=/^[A-Za-z0-9]{27}$/,f9e=/^[a-zA-Z0-9_-]{21}$/,m9e=/^P(?:(\d+W)|(?!.*W)(?=\d|T\d)(\d+Y)?(\d+M)?(\d+D)?(T(?=\d)(\d+H)?(\d+M)?(\d+([.,]\d+)?S)?)?)$/,h9e=/^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12})$/,g9e=/^(?!\.)(?!.*\.\.)([A-Za-z0-9_'+\-\.]*)[A-Za-z0-9_+-]@([A-Za-z0-9][A-Za-z0-9\-]*\.)+[A-Za-z]{2,}$/;v9e=/^(?:(?:25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])\.){3}(?:25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])$/,b9e=/^(([0-9a-fA-F]{1,4}:){7}[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,7}:|([0-9a-fA-F]{1,4}:){1,6}:[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,5}(:[0-9a-fA-F]{1,4}){1,2}|([0-9a-fA-F]{1,4}:){1,4}(:[0-9a-fA-F]{1,4}){1,3}|([0-9a-fA-F]{1,4}:){1,3}(:[0-9a-fA-F]{1,4}){1,4}|([0-9a-fA-F]{1,4}:){1,2}(:[0-9a-fA-F]{1,4}){1,5}|[0-9a-fA-F]{1,4}:((:[0-9a-fA-F]{1,4}){1,6})|:((:[0-9a-fA-F]{1,4}){1,7}|:))$/,k9e=/^((25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])\.){3}(25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])\/([0-9]|[1-2][0-9]|3[0-2])$/,w9e=/^(([0-9a-fA-F]{1,4}:){7}[0-9a-fA-F]{1,4}|::|([0-9a-fA-F]{1,4})?::([0-9a-fA-F]{1,4}:?){0,6})\/(12[0-8]|1[01][0-9]|[1-9]?[0-9])$/,x9e=/^$|^(?:[0-9a-zA-Z+/]{4})*(?:(?:[0-9a-zA-Z+/]{2}==)|(?:[0-9a-zA-Z+/]{3}=))?$/,Bq=/^[A-Za-z0-9_-]*$/,A9e=/^https?$/,S9e=/^\+[1-9]\d{6,14}$/,$9e=new RegExp(`^${E9e}$`);P9e=/^-?\d+$/,Uq=/^-?\d+(?:\.\d+)?$/,I9e=/^(?:true|false)$/i,O9e=/^null$/i,M9e=/^[^A-Z]*$/,D9e=/^[^a-z]*$/});var Yo,j9e,Hq,Gq,L9e,N9e,F9e,z9e,B9e,zb,U9e,H9e,G9e,W9e,V9e,q9e,K9e;var MT=v(()=>{Lm();OT();Pl();Yo=ne("$ZodCheck",(e,t)=>{var r;e._zod??(e._zod={}),e._zod.def=t,(r=e._zod).onattach??(r.onattach=[])}),j9e={number:"number",bigint:"bigint",object:"date"},Hq=ne("$ZodCheckLessThan",(e,t)=>{Yo.init(e,t);let r=j9e[typeof t.value];e._zod.onattach.push((n)=>{let i=n._zod.bag,o=(t.inclusive?i.maximum:i.exclusiveMaximum)??Number.POSITIVE_INFINITY;if(t.value<o)if(t.inclusive)i.maximum=t.value;else i.exclusiveMaximum=t.value}),e._zod.check=(n)=>{if(t.inclusive?n.value<=t.value:n.value<t.value)return;n.issues.push({origin:r,code:"too_big",maximum:typeof t.value==="object"?t.value.getTime():t.value,input:n.value,inclusive:t.inclusive,inst:e,continue:!t.abort})}}),Gq=ne("$ZodCheckGreaterThan",(e,t)=>{Yo.init(e,t);let r=j9e[typeof t.value];e._zod.onattach.push((n)=>{let i=n._zod.bag,o=(t.inclusive?i.minimum:i.exclusiveMinimum)??Number.NEGATIVE_INFINITY;if(t.value>o)if(t.inclusive)i.minimum=t.value;else i.exclusiveMinimum=t.value}),e._zod.check=(n)=>{if(t.inclusive?n.value>=t.value:n.value>t.value)return;n.issues.push({origin:r,code:"too_small",minimum:typeof t.value==="object"?t.value.getTime():t.value,input:n.value,inclusive:t.inclusive,inst:e,continue:!t.abort})}}),L9e=ne("$ZodCheckMultipleOf",(e,t)=>{Yo.init(e,t),e._zod.onattach.push((r)=>{var n;(n=r._zod.bag).multipleOf??(n.multipleOf=t.value)}),e._zod.check=(r)=>{if(typeof r.value!==typeof t.value)throw Error("Cannot mix number and bigint in multiple_of check.");if(typeof r.value==="bigint"?r.value%t.value===BigInt(0):B6e(r.value,t.value)===0)return;r.issues.push({origin:typeof r.value,code:"not_multiple_of",divisor:t.value,input:r.value,inst:e,continue:!t.abort})}}),N9e=ne("$ZodCheckNumberFormat",(e,t)=>{Yo.init(e,t),t.format=t.format||"float64";let r=t.format?.includes("int"),n=r?"int":"number",[i,o]=V6e[t.format];e._zod.onattach.push((s)=>{let a=s._zod.bag;if(a.format=t.format,a.minimum=i,a.maximum=o,r)a.pattern=P9e}),e._zod.check=(s)=>{let a=s.value;if(r){if(!Number.isInteger(a)){s.issues.push({expected:n,format:t.format,code:"invalid_type",continue:!1,input:a,inst:e});return}if(!Number.isSafeInteger(a)){if(a>0)s.issues.push({input:a,code:"too_big",maximum:Number.MAX_SAFE_INTEGER,note:"Integers must be within the safe integer range.",inst:e,origin:n,inclusive:!0,continue:!t.abort});else s.issues.push({input:a,code:"too_small",minimum:Number.MIN_SAFE_INTEGER,note:"Integers must be within the safe integer range.",inst:e,origin:n,inclusive:!0,continue:!t.abort});return}}if(a<i)s.issues.push({origin:"number",input:a,code:"too_small",minimum:i,inclusive:!0,inst:e,continue:!t.abort});if(a>o)s.issues.push({origin:"number",input:a,code:"too_big",maximum:o,inclusive:!0,inst:e,continue:!t.abort})}}),F9e=ne("$ZodCheckMaxLength",(e,t)=>{var r;Yo.init(e,t),(r=e._zod.def).when??(r.when=(n)=>{let i=n.value;return!$T(i)&&i.length!==void 0}),e._zod.onattach.push((n)=>{let i=n._zod.bag.maximum??Number.POSITIVE_INFINITY;if(t.maximum<i)n._zod.bag.maximum=t.maximum}),e._zod.check=(n)=>{let i=n.value;if(i.length<=t.maximum)return;let s=_T(i);n.issues.push({origin:s,code:"too_big",maximum:t.maximum,inclusive:!0,input:i,inst:e,continue:!t.abort})}}),z9e=ne("$ZodCheckMinLength",(e,t)=>{var r;Yo.init(e,t),(r=e._zod.def).when??(r.when=(n)=>{let i=n.value;return!$T(i)&&i.length!==void 0}),e._zod.onattach.push((n)=>{let i=n._zod.bag.minimum??Number.NEGATIVE_INFINITY;if(t.minimum>i)n._zod.bag.minimum=t.minimum}),e._zod.check=(n)=>{let i=n.value;if(i.length>=t.minimum)return;let s=_T(i);n.issues.push({origin:s,code:"too_small",minimum:t.minimum,inclusive:!0,input:i,inst:e,continue:!t.abort})}}),B9e=ne("$ZodCheckLengthEquals",(e,t)=>{var r;Yo.init(e,t),(r=e._zod.def).when??(r.when=(n)=>{let i=n.value;return!$T(i)&&i.length!==void 0}),e._zod.onattach.push((n)=>{let i=n._zod.bag;i.minimum=t.length,i.maximum=t.length,i.length=t.length}),e._zod.check=(n)=>{let i=n.value,o=i.length;if(o===t.length)return;let s=_T(i),a=o>t.length;n.issues.push({origin:s,...a?{code:"too_big",maximum:t.length}:{code:"too_small",minimum:t.length},inclusive:!0,exact:!0,input:n.value,inst:e,continue:!t.abort})}}),zb=ne("$ZodCheckStringFormat",(e,t)=>{var r,n;if(Yo.init(e,t),e._zod.onattach.push((i)=>{let o=i._zod.bag;if(o.format=t.format,t.pattern)o.patterns??(o.patterns=new Set),o.patterns.add(t.pattern)}),t.pattern)(r=e._zod).check??(r.check=(i)=>{if(t.pattern.lastIndex=0,t.pattern.test(i.value))return;i.issues.push({origin:"string",code:"invalid_format",format:t.format,input:i.value,...t.pattern?{pattern:t.pattern.toString()}:{},inst:e,continue:!t.abort})});else(n=e._zod).check??(n.check=()=>{})}),U9e=ne("$ZodCheckRegex",(e,t)=>{zb.init(e,t),e._zod.check=(r)=>{if(t.pattern.lastIndex=0,t.pattern.test(r.value))return;r.issues.push({origin:"string",code:"invalid_format",format:"regex",input:r.value,pattern:t.pattern.toString(),inst:e,continue:!t.abort})}}),H9e=ne("$ZodCheckLowerCase",(e,t)=>{t.pattern??(t.pattern=M9e),zb.init(e,t)}),G9e=ne("$ZodCheckUpperCase",(e,t)=>{t.pattern??(t.pattern=D9e),zb.init(e,t)}),W9e=ne("$ZodCheckIncludes",(e,t)=>{Yo.init(e,t);let r=Fp(t.includes),n=new RegExp(typeof t.position==="number"?`^.{${t.position}}${r}`:r);t.pattern=n,e._zod.onattach.push((i)=>{let o=i._zod.bag;o.patterns??(o.patterns=new Set),o.patterns.add(n)}),e._zod.check=(i)=>{if(i.value.includes(t.includes,t.position))return;i.issues.push({origin:"string",code:"invalid_format",format:"includes",includes:t.includes,input:i.value,inst:e,continue:!t.abort})}}),V9e=ne("$ZodCheckStartsWith",(e,t)=>{Yo.init(e,t);let r=new RegExp(`^${Fp(t.prefix)}.*`);t.pattern??(t.pattern=r),e._zod.onattach.push((n)=>{let i=n._zod.bag;i.patterns??(i.patterns=new Set),i.patterns.add(r)}),e._zod.check=(n)=>{if(n.value.startsWith(t.prefix))return;n.issues.push({origin:"string",code:"invalid_format",format:"starts_with",prefix:t.prefix,input:n.value,inst:e,continue:!t.abort})}}),q9e=ne("$ZodCheckEndsWith",(e,t)=>{Yo.init(e,t);let r=new RegExp(`.*${Fp(t.suffix)}$`);t.pattern??(t.pattern=r),e._zod.onattach.push((n)=>{let i=n._zod.bag;i.patterns??(i.patterns=new Set),i.patterns.add(r)}),e._zod.check=(n)=>{if(n.value.endsWith(t.suffix))return;n.issues.push({origin:"string",code:"invalid_format",format:"ends_with",suffix:t.suffix,input:n.value,inst:e,continue:!t.abort})}}),K9e=ne("$ZodCheckOverwrite",(e,t)=>{Yo.init(e,t),e._zod.check=(r)=>{r.value=t.tx(r.value)}})});class Wq{constructor(e=[]){if(this.content=[],this.indent=0,this)this.args=e}indented(e){this.indent+=1,e(this),this.indent-=1}write(e){if(typeof e==="function"){e(this,{execution:"sync"}),e(this,{execution:"async"});return}let r=e.split(`
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 NZr;var Mm=v(()=>{yT();A6e();Pb();xq();Sq();NZr=new qu});var T4;var Ib=v(()=>{T4={name:"oh-my-agent",version:"20.10.1",description:"A specialist team for the coding agent you already use: 12 roles, 21 workflows and 33 skills that plan, build in parallel, review and debug, leaving plans, ADRs and results as files. Gates wait for your own tests. Also research, slides and video. One .agents/ folder for Claude Code, Codex, Cursor and 11 more.",type:"module",bin:{"oh-my-agent":"./bin/cli.js",oma:"./bin/cli.js"},files:["bin","assets/serena"],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-main.js --target node --minify --external @napi-rs/keyring --external jsonc-parser && node ./scripts/write-bin-entry.mjs && bun run check:bundle",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:bundle":"node ./scripts/check-bundle.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","@dagrejs/dagre":"^3.1.1","@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","jsonc-parser":"^3.3.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-gfm":"^4.0.1","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:{"@babel/parser":"7.29.3","@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{homedir as S6e}from"node:os";import{isAbsolute as NAt,join as FAt,resolve as zAt}from"node:path";function E6e(e,t){let r=Array.from(e).some((n)=>{let i=n.charCodeAt(0);return i<32||i===127});if(!NAt(e)||r)throw Error(`${t} must be an absolute path without control characters`);return zAt(e)}function Jr(e=process.env,t=S6e()){return E6e(e.OMA_HOME||FAt(t,".oma"),"OMA_HOME")}function ws(e=process.env,t=S6e()){return e.OMA_STATE_HOME===void 0?Jr(e,t):E6e(e.OMA_STATE_HOME,"OMA_STATE_HOME")}var kT=()=>{};import{homedir as BAt}from"node:os";import{join as Ob}from"node:path";function hc(e=process.env,t=BAt()){let r=Jr(e,t),n=Ob(r,"state");return{home:r,definitions:Ob(r,".agents"),state:n,serena:Ob(n,"serena"),schedule:Ob(r,"schedule"),backup:Ob(r,"backup")}}var pi=v(()=>{kT();kT()});import*as Ku from"node:fs";import{homedir as UAt}from"node:os";import*as _l from"node:path";function C6e(e){if(wT)throw Error("install context already set in this process");wT=e}function _6e(){if(wT===null)throw Error("install context not set — entry point must call setInstallContext()");return wT}function R4(){return _6e().installRoot}function fi(){return _6e().mode}function wt(){try{return fi()}catch{return"project"}}function Ng(){try{return R4()}catch{return process.cwd()}}function xT(e,t,r=UAt()){return t==="project"&&_l.resolve(e)===_l.resolve(r)}function T6e(e){if(e.global===!0||process.env.OMA_INSTALL_GLOBAL==="1"){let r=Jr();return HAt(r),{installRoot:r,mode:"global"}}return{installRoot:process.cwd(),mode:"project"}}function HAt(e){if(!_l.isAbsolute(e))throw Error("OMA_HOME must be absolute path");for(let n of $6e)if(e===n||e.startsWith(n+_l.sep))throw Error(`OMA_HOME=${e} is forbidden (system path ${n})`);let t,r=_l.resolve(e);try{while(!Ku.existsSync(r)){let n=_l.dirname(r);if(n===r)break;r=n}if(t=Ku.realpathSync(r),!Ku.statSync(t).isDirectory())throw Error("nearest existing ancestor is not a directory")}catch(n){let i=n instanceof Error?n.message:String(n);throw Error(`OMA_HOME=${e}: ${i}`)}for(let n of $6e)if(t===n||t.startsWith(n+_l.sep))throw Error(`OMA_HOME=${e} is forbidden (system path ${n})`);try{Ku.accessSync(t,Ku.constants.W_OK)}catch{throw Error(`OMA_HOME=${e} is not writable`)}}var wT=null,$6e;var mi=v(()=>{pi();$6e=["/etc","/usr","/bin","/boot","/sys","/proc"]});import{join as JAt}from"node:path";function jm(e){return e.endsWith("/")?e:`${e}/`}function h2(e,t){let r=t.split("/").filter((n)=>n.length>0);return JAt(e,...r)}var lr=".agents",Dm,In,jp,nQr,iQr,oQr,YAt=".antigravitycli",P6e,XAt=".migration-backup",ZAt="docs/plans",QAt=".qwen/tmp",eSt,tSt,rSt,nSt,iSt,oSt,sSt,Cq;var Yr=v(()=>{Dm=`${lr}/skills`,In=`${lr}/results`,jp=`${lr}/state`,nQr=`${jp}/sessions`,iQr=`${jp}/retry`,oQr=`${jp}/archive`,P6e=`${lr}/backup`;eSt=jm(In),tSt=jm(jp),rSt=jm(YAt),nSt=jm(P6e),iSt=jm(XAt),oSt=jm(ZAt),sSt=jm(QAt),Cq=[".agents/oma-config.local.cue",".agents/oma-config.local.yaml",rSt,eSt,tSt,nSt,oSt,iSt,sSt]});var cn="first-fluke/oh-my-agent",qt,Tl,_q,aSt,cSt,P4,Zn;var g2=v(()=>{Yr();qt=Dm,Tl=["antigravity","claude","codex","commandcode","cursor","grok","kimi","kiro","qwen"],_q=["pi","opencode"],aSt=["copilot","hermes"],cSt=["zcode"],P4=[...Tl,..._q,...aSt,...cSt].sort(),Zn={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"}}});function de(e,t="Output as JSON"){return e.option("--json",t).option("--output <format>","Output format (text/json)",(r)=>{let n=r.trim().toLowerCase();if(!Mb.includes(n))throw Error(`Invalid output format: ${r}. Expected one of ${Mb.join(", ")}`);return n})}function lSt(e){if(e?.json)return"json";let t=e?.output?.trim().toLowerCase();if(t&&Mb.includes(t))return t;if(process.env[M6e]?.trim().toLowerCase()==="json")return"json";return"text"}function pe(e){return lSt(e)==="json"}function D6e(e){let t=e.at(-1);return t instanceof qu?t:null}function uSt(e){let t=D6e(e);if(t)return t.opts();let r=e.at(-1);return r&&typeof r==="object"?r:{}}function dSt(e){if(e instanceof Error)return e.message;return String(e)}function Lp(e){throw Error(e)}function Rq(e,t){for(let r of e){let n=r.charCodeAt(0);if(n>=0&&n<=31||n===127)Lp(`${t} must not contain control characters`)}}function pSt(e,t){if(Rq(e,t),/[?#%]/.test(e))Lp(`${t} must not contain ?, #, or %`);if(e.includes(".."))Lp(`${t} must not contain '..'`)}function fSt(e,t){Rq(e,t);try{new URL(e)}catch{Lp(`${t} must be a valid absolute URL`)}}function Tq(e,t,r="text"){if(typeof e==="string"){if(r==="identifier"){pSt(e,t);return}if(r==="url"){fSt(e,t);return}Rq(e,t);return}if(Array.isArray(e))for(let[n,i]of e.entries())Tq(i,`${t}[${n}]`,r)}function O6e(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 mSt(e){let t=e.vendor;if(typeof t==="string"){if(t.split(",").map((o)=>o.trim()).filter(Boolean).filter((o)=>!P4.includes(o)).length>0)Lp(`vendor must be one of ${P4.join(", ")}`)}let r=e.output;if(typeof r==="string"&&!Mb.includes(r))Lp(`output must be one of ${Mb.join(", ")}`)}function hSt(e){let t=e.processedArgs??e.args??[];(e.registeredArguments??[]).forEach((i,o)=>{let s=i.name?.()||String(o),a=t[o];if(Tq(a,s,O6e(s)),s==="agent-type"&&typeof a==="string"&&!I6e.includes(a))Lp(`agent-type must be one of ${I6e.join(", ")}`)});let n=e.opts();mSt(n);for(let[i,o]of Object.entries(n))Tq(o,i,O6e(i))}function gSt(e){return(e.registeredArguments??[]).map((t)=>({name:t.name?.()||"",required:!!t.required,variadic:!!t.variadic}))}function ySt(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 j6e(e){let t=[],r=e;while(r?.parent)t.unshift(r.name()),r=r.parent;return t.join(" ")}function vSt(e){return e.options.some((t)=>t.long==="--json"||t.long==="--output")}function bSt(e){return e.options.some((t)=>t.long==="--dry-run")}function L6e(e){return{name:e.name(),path:j6e(e),summary:e.summary()||void 0,description:e.description(),arguments:gSt(e),options:ySt(e),supportsJsonOutput:vSt(e),supportsDryRun:bSt(e),subcommands:e.commands.filter((t)=>!t._hidden).map((t)=>L6e(t))}}function kSt(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||j6e(i)===r)return i;n.push(...i.commands)}return null}function N6e(e,t){let r=kSt(e,t);if(!r)Lp(`Unknown command: ${t}`);let n={name:e.name(),version:e.version(),description:e.description(),env:{[M6e]:"Set to json to force machine-readable output on commands that support it."},command:L6e(r)};console.log(JSON.stringify(n,null,2))}function Y(e,t={}){return async(...r)=>{let n=D6e(r);if(n&&r.length>=2)r[r.length-2]=n.optsWithGlobals();let i=uSt(r);try{if(n)hSt(n);await e(...r)}catch(o){let s=dSt(o);if(t.supportsJsonOutput&&pe(i))console.log(JSON.stringify({error:s},null,2));else console.error(s);process.exitCode=1}}}var M6e="OH_MY_AG_OUTPUT_FORMAT",Mb,I6e;var Et=v(()=>{Mm();g2();Mb=["text","json"],I6e=["backend","frontend","mobile","qa","debug","pm"]});function ne(e,t,r){function n(a,c){if(!a._zod)Object.defineProperty(a,"_zod",{value:{def:c,constr:s,traits:new Set},enumerable:!1});if(a._zod.traits.has(e))return;a._zod.traits.add(e),t(a,c);let l=s.prototype,u=Object.keys(l);for(let d=0;d<u.length;d++){let p=u[d];if(!(p in a))a[p]=l[p].bind(a)}}let i=r?.Parent??Object;class o extends i{}Object.defineProperty(o,"name",{value:e});function s(a){var c;let l=r?.Parent?new o:this;n(l,a),(c=l._zod).deferred??(c.deferred=[]);for(let u of l._zod.deferred)u();return l}return Object.defineProperty(s,"init",{value:n}),Object.defineProperty(s,Symbol.hasInstance,{value:(a)=>{if(r?.Parent&&a instanceof r.Parent)return!0;return a?._zod?.traits?.has(e)}}),Object.defineProperty(s,"name",{value:e}),s}function y2(e){if(e)Object.assign(Fg,e);return Fg}var F6e,pQr,I4,Db,Fg;var Lm=v(()=>{pQr=Symbol("zod_brand");I4=class I4 extends Error{constructor(){super("Encountered Promise during synchronous parse. Use .parseAsync() instead.")}};Db=class Db extends Error{constructor(e){super(`Encountered unidirectional transform during encode: ${e}`);this.name="ZodEncodeError"}};(F6e=globalThis).__zod_globalConfig??(F6e.__zod_globalConfig={});Fg=globalThis.__zod_globalConfig});function ST(e){let t=Object.values(e).filter((n)=>typeof n==="number");return Object.entries(e).filter(([n,i])=>t.indexOf(+n)===-1).map(([n,i])=>i)}function Iq(e,t="|"){return e.map((r)=>jq(r)).join(t)}function Lb(e,t){if(typeof t==="bigint")return t.toString();return t}function ET(e){return{get value(){{let r=e();return Object.defineProperty(this,"value",{value:r}),r}throw Error("cached value already set")}}}function $T(e){return e===null||e===void 0}function CT(e){let t=e.startsWith("^")?1:0,r=e.endsWith("$")?e.length-1:e.length;return e.slice(t,r)}function B6e(e,t){let r=e/t,n=Math.round(r),i=Number.EPSILON*Math.max(Math.abs(r),1);if(Math.abs(r-n)<i)return 0;return r-n}function hr(e,t,r){let n=void 0;Object.defineProperty(e,t,{get(){if(n===z6e)return;if(n===void 0)n=z6e,n=r();return n},set(i){Object.defineProperty(e,t,{value:i})},configurable:!0})}function Nm(e,t,r){Object.defineProperty(e,t,{value:r,writable:!0,enumerable:!0,configurable:!0})}function Np(...e){let t={};for(let r of e){let n=Object.getOwnPropertyDescriptors(r);Object.assign(t,n)}return Object.defineProperties({},t)}function Oq(e){return JSON.stringify(e)}function U6e(e){return e.toLowerCase().trim().replace(/[^\w\s-]/g,"").replace(/[\s_-]+/g,"-").replace(/^-+|-+$/g,"")}function jb(e){return typeof e==="object"&&e!==null&&!Array.isArray(e)}function Fm(e){if(jb(e)===!1)return!1;let t=e.constructor;if(t===void 0)return!0;if(typeof t!=="function")return!0;let r=t.prototype;if(jb(r)===!1)return!1;if(Object.prototype.hasOwnProperty.call(r,"isPrototypeOf")===!1)return!1;return!0}function Dq(e){if(Fm(e))return{...e};if(Array.isArray(e))return[...e];if(e instanceof Map)return new Map(e);if(e instanceof Set)return new Set(e);return e}function Fp(e){return e.replace(/[.*+?^${}()|[\]\\]/g,"\\$&")}function Ju(e,t,r){let n=new e._zod.constr(t??e._zod.def);if(!t||r?.parent)n._zod.parent=e;return n}function Ge(e){let t=e;if(!t)return{};if(typeof t==="string")return{error:()=>t};if(t?.message!==void 0){if(t?.error!==void 0)throw Error("Cannot specify both `message` and `error` params");t.error=t.message}if(delete t.message,typeof t.error==="string")return{...t,error:()=>t.error};return t}function jq(e){if(typeof e==="bigint")return e.toString()+"n";if(typeof e==="string")return`"${e}"`;return`${e}`}function W6e(e){return Object.keys(e).filter((t)=>e[t]._zod.optin==="optional"&&e[t]._zod.optout==="optional")}function wSt(e,t){let r=e._zod.def,n=r.checks;if(n&&n.length>0)throw Error(".pick() cannot be used on object schemas containing refinements");let o=Np(e._zod.def,{get shape(){let s={};for(let a in t){if(!(a in r.shape))throw Error(`Unrecognized key: "${a}"`);if(!t[a])continue;s[a]=r.shape[a]}return Nm(this,"shape",s),s},checks:[]});return Ju(e,o)}function xSt(e,t){let r=e._zod.def,n=r.checks;if(n&&n.length>0)throw Error(".omit() cannot be used on object schemas containing refinements");let o=Np(e._zod.def,{get shape(){let s={...e._zod.def.shape};for(let a in t){if(!(a in r.shape))throw Error(`Unrecognized key: "${a}"`);if(!t[a])continue;delete s[a]}return Nm(this,"shape",s),s},checks:[]});return Ju(e,o)}function ASt(e,t){if(!Fm(t))throw Error("Invalid input to extend: expected a plain object");let r=e._zod.def.checks;if(r&&r.length>0){let o=e._zod.def.shape;for(let s in t)if(Object.getOwnPropertyDescriptor(o,s)!==void 0)throw Error("Cannot overwrite keys on object schemas containing refinements. Use `.safeExtend()` instead.")}let i=Np(e._zod.def,{get shape(){let o={...e._zod.def.shape,...t};return Nm(this,"shape",o),o}});return Ju(e,i)}function SSt(e,t){if(!Fm(t))throw Error("Invalid input to safeExtend: expected a plain object");let r=Np(e._zod.def,{get shape(){let n={...e._zod.def.shape,...t};return Nm(this,"shape",n),n}});return Ju(e,r)}function ESt(e,t){if(e._zod.def.checks?.length)throw Error(".merge() cannot be used on object schemas containing refinements. Use .safeExtend() instead.");let r=Np(e._zod.def,{get shape(){let n={...e._zod.def.shape,...t._zod.def.shape};return Nm(this,"shape",n),n},get catchall(){return t._zod.def.catchall},checks:t._zod.def.checks??[]});return Ju(e,r)}function $St(e,t,r){let i=t._zod.def.checks;if(i&&i.length>0)throw Error(".partial() cannot be used on object schemas containing refinements");let s=Np(t._zod.def,{get shape(){let a=t._zod.def.shape,c={...a};if(r)for(let l in r){if(!(l in a))throw Error(`Unrecognized key: "${l}"`);if(!r[l])continue;c[l]=e?new e({type:"optional",innerType:a[l]}):a[l]}else for(let l in a)c[l]=e?new e({type:"optional",innerType:a[l]}):a[l];return Nm(this,"shape",c),c},checks:[]});return Ju(t,s)}function CSt(e,t,r){let n=Np(t._zod.def,{get shape(){let i=t._zod.def.shape,o={...i};if(r)for(let s in r){if(!(s in o))throw Error(`Unrecognized key: "${s}"`);if(!r[s])continue;o[s]=new e({type:"nonoptional",innerType:i[s]})}else for(let s in i)o[s]=new e({type:"nonoptional",innerType:i[s]});return Nm(this,"shape",o),o}});return Ju(t,n)}function zm(e,t=0){if(e.aborted===!0)return!0;for(let r=t;r<e.issues.length;r++)if(e.issues[r]?.continue!==!0)return!0;return!1}function q6e(e,t=0){if(e.aborted===!0)return!0;for(let r=t;r<e.issues.length;r++)if(e.issues[r]?.continue===!1)return!0;return!1}function zp(e,t){return t.map((r)=>{var n;return(n=r).path??(n.path=[]),r.path.unshift(e),r})}function AT(e){return typeof e==="string"?e:e?.message}function Rl(e,t,r){let n=e.message?e.message:AT(e.inst?._zod.def?.error?.(e))??AT(t?.error?.(e))??AT(r.customError?.(e))??AT(r.localeError?.(e))??"Invalid input",{inst:i,continue:o,input:s,...a}=e;if(a.path??(a.path=[]),a.message=n,t?.reportInput)a.input=s;return a}function _T(e){if(Array.isArray(e))return"array";if(typeof e==="string")return"string";return"unknown"}function K6e(e){let t=typeof e;switch(t){case"number":return Number.isNaN(e)?"nan":"number";case"object":{if(e===null)return"null";if(Array.isArray(e))return"array";let r=e;if(r&&Object.getPrototypeOf(r)!==Object.prototype&&"constructor"in r&&r.constructor)return r.constructor.name}}return t}function Bm(...e){let[t,r,n]=e;if(typeof t==="string")return{message:t,code:"custom",input:r,inst:n};return{...t}}var z6e,Mq,H6e,G6e,V6e;var Pl=v(()=>{Lm();z6e=Symbol("evaluating");Mq="captureStackTrace"in Error?Error.captureStackTrace:(...e)=>{};H6e=ET(()=>{if(Fg.jitless)return!1;if(typeof navigator<"u"&&navigator?.userAgent?.includes("Cloudflare"))return!1;try{return new Function(""),!0}catch(e){return!1}});G6e=new Set(["string","number","symbol"]);V6e={safeint:[Number.MIN_SAFE_INTEGER,Number.MAX_SAFE_INTEGER],int32:[-2147483648,2147483647],uint32:[0,4294967295],float32:[-340282346638528860000000000000000000000,340282346638528860000000000000000000000],float64:[-Number.MAX_VALUE,Number.MAX_VALUE]}});function Y6e(e,t=(r)=>r.message){let r={},n=[];for(let i of e.issues)if(i.path.length>0)r[i.path[0]]=r[i.path[0]]||[],r[i.path[0]].push(t(i));else n.push(t(i));return{formErrors:n,fieldErrors:r}}function X6e(e,t=(r)=>r.message){let r={_errors:[]},n=(i,o=[])=>{for(let s of i.issues)if(s.code==="invalid_union"&&s.errors.length)s.errors.map((a)=>n({issues:a},[...o,...s.path]));else if(s.code==="invalid_key")n({issues:s.issues},[...o,...s.path]);else if(s.code==="invalid_element")n({issues:s.issues},[...o,...s.path]);else{let a=[...o,...s.path];if(a.length===0)r._errors.push(t(s));else{let c=r,l=0;while(l<a.length){let u=a[l];if(l!==a.length-1)c[u]=c[u]||{_errors:[]};else c[u]=c[u]||{_errors:[]},c[u]._errors.push(t(s));c=c[u],l++}}}};return n(e),r}var J6e=(e,t)=>{e.name="$ZodError",Object.defineProperty(e,"_zod",{value:e._zod,enumerable:!1}),Object.defineProperty(e,"issues",{value:t,enumerable:!1}),e.message=JSON.stringify(t,Lb,2),Object.defineProperty(e,"toString",{value:()=>e.message,enumerable:!1})},TT,Lq;var Nq=v(()=>{Lm();Pl();TT=ne("$ZodError",J6e),Lq=ne("$ZodError",J6e,{Parent:Error})});var RT=(e)=>(t,r,n,i)=>{let o=n?{...n,async:!1}:{async:!1},s=t._zod.run({value:r,issues:[]},o);if(s instanceof Promise)throw new I4;if(s.issues.length){let a=new(i?.Err??e)(s.issues.map((c)=>Rl(c,o,y2())));throw Mq(a,i?.callee),a}return s.value},PT=(e)=>async(t,r,n,i)=>{let o=n?{...n,async:!0}:{async:!0},s=t._zod.run({value:r,issues:[]},o);if(s instanceof Promise)s=await s;if(s.issues.length){let a=new(i?.Err??e)(s.issues.map((c)=>Rl(c,o,y2())));throw Mq(a,i?.callee),a}return s.value},Nb=(e)=>(t,r,n)=>{let i=n?{...n,async:!1}:{async:!1},o=t._zod.run({value:r,issues:[]},i);if(o instanceof Promise)throw new I4;return o.issues.length?{success:!1,error:new(e??TT)(o.issues.map((s)=>Rl(s,i,y2())))}:{success:!0,data:o.value}},Z6e,Fb=(e)=>async(t,r,n)=>{let i=n?{...n,async:!0}:{async:!0},o=t._zod.run({value:r,issues:[]},i);if(o instanceof Promise)o=await o;return o.issues.length?{success:!1,error:new e(o.issues.map((s)=>Rl(s,i,y2())))}:{success:!0,data:o.value}},Q6e,e9e=(e)=>(t,r,n)=>{let i=n?{...n,direction:"backward"}:{direction:"backward"};return RT(e)(t,r,i)},t9e=(e)=>(t,r,n)=>RT(e)(t,r,n),r9e=(e)=>async(t,r,n)=>{let i=n?{...n,direction:"backward"}:{direction:"backward"};return PT(e)(t,r,i)},n9e=(e)=>async(t,r,n)=>PT(e)(t,r,n),i9e=(e)=>(t,r,n)=>{let i=n?{...n,direction:"backward"}:{direction:"backward"};return Nb(e)(t,r,i)},o9e=(e)=>(t,r,n)=>Nb(e)(t,r,n),s9e=(e)=>async(t,r,n)=>{let i=n?{...n,direction:"backward"}:{direction:"backward"};return Fb(e)(t,r,i)},a9e=(e)=>async(t,r,n)=>Fb(e)(t,r,n);var Fq=v(()=>{Lm();Nq();Pl();Z6e=Nb(Lq),Q6e=Fb(Lq)});function y9e(){return new RegExp(TSt,"u")}function C9e(e){return typeof e.precision==="number"?e.precision===-1?"(?:[01]\\d|2[0-3]):[0-5]\\d":e.precision===0?"(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d":`(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d\\.\\d{${e.precision}}`:"(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?"}function _9e(e){return new RegExp(`^${C9e(e)}$`)}function T9e(e){let t=C9e({precision:e.precision}),r=["Z"];if(e.local)r.push("");if(e.offset)r.push("([+-](?:[01]\\d|2[0-3]):[0-5]\\d)");let n=`${t}(?:${r.join("|")})`;return new RegExp(`^${E9e}T(?:${n})$`)}var c9e,l9e,u9e,d9e,p9e,f9e,m9e,h9e,zq=(e)=>{if(!e)return/^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$/;return new RegExp(`^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-${e}[0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12})$`)},g9e,TSt="^(\\p{Extended_Pictographic}|\\p{Emoji_Component})+$",v9e,b9e,k9e,w9e,x9e,Bq,A9e,S9e,E9e="(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))",$9e,R9e=(e)=>{let t=e?`[\\s\\S]{${e?.minimum??0},${e?.maximum??""}}`:"[\\s\\S]*";return new RegExp(`^${t}$`)},P9e,Uq,I9e,O9e,M9e,D9e;var OT=v(()=>{c9e=/^[cC][0-9a-z]{6,}$/,l9e=/^[0-9a-z]+$/,u9e=/^[0-9A-HJKMNP-TV-Za-hjkmnp-tv-z]{26}$/,d9e=/^[0-9a-vA-V]{20}$/,p9e=/^[A-Za-z0-9]{27}$/,f9e=/^[a-zA-Z0-9_-]{21}$/,m9e=/^P(?:(\d+W)|(?!.*W)(?=\d|T\d)(\d+Y)?(\d+M)?(\d+D)?(T(?=\d)(\d+H)?(\d+M)?(\d+([.,]\d+)?S)?)?)$/,h9e=/^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12})$/,g9e=/^(?!\.)(?!.*\.\.)([A-Za-z0-9_'+\-\.]*)[A-Za-z0-9_+-]@([A-Za-z0-9][A-Za-z0-9\-]*\.)+[A-Za-z]{2,}$/;v9e=/^(?:(?:25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])\.){3}(?:25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])$/,b9e=/^(([0-9a-fA-F]{1,4}:){7}[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,7}:|([0-9a-fA-F]{1,4}:){1,6}:[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,5}(:[0-9a-fA-F]{1,4}){1,2}|([0-9a-fA-F]{1,4}:){1,4}(:[0-9a-fA-F]{1,4}){1,3}|([0-9a-fA-F]{1,4}:){1,3}(:[0-9a-fA-F]{1,4}){1,4}|([0-9a-fA-F]{1,4}:){1,2}(:[0-9a-fA-F]{1,4}){1,5}|[0-9a-fA-F]{1,4}:((:[0-9a-fA-F]{1,4}){1,6})|:((:[0-9a-fA-F]{1,4}){1,7}|:))$/,k9e=/^((25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])\.){3}(25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])\/([0-9]|[1-2][0-9]|3[0-2])$/,w9e=/^(([0-9a-fA-F]{1,4}:){7}[0-9a-fA-F]{1,4}|::|([0-9a-fA-F]{1,4})?::([0-9a-fA-F]{1,4}:?){0,6})\/(12[0-8]|1[01][0-9]|[1-9]?[0-9])$/,x9e=/^$|^(?:[0-9a-zA-Z+/]{4})*(?:(?:[0-9a-zA-Z+/]{2}==)|(?:[0-9a-zA-Z+/]{3}=))?$/,Bq=/^[A-Za-z0-9_-]*$/,A9e=/^https?$/,S9e=/^\+[1-9]\d{6,14}$/,$9e=new RegExp(`^${E9e}$`);P9e=/^-?\d+$/,Uq=/^-?\d+(?:\.\d+)?$/,I9e=/^(?:true|false)$/i,O9e=/^null$/i,M9e=/^[^A-Z]*$/,D9e=/^[^a-z]*$/});var Yo,j9e,Hq,Gq,L9e,N9e,F9e,z9e,B9e,zb,U9e,H9e,G9e,W9e,V9e,q9e,K9e;var MT=v(()=>{Lm();OT();Pl();Yo=ne("$ZodCheck",(e,t)=>{var r;e._zod??(e._zod={}),e._zod.def=t,(r=e._zod).onattach??(r.onattach=[])}),j9e={number:"number",bigint:"bigint",object:"date"},Hq=ne("$ZodCheckLessThan",(e,t)=>{Yo.init(e,t);let r=j9e[typeof t.value];e._zod.onattach.push((n)=>{let i=n._zod.bag,o=(t.inclusive?i.maximum:i.exclusiveMaximum)??Number.POSITIVE_INFINITY;if(t.value<o)if(t.inclusive)i.maximum=t.value;else i.exclusiveMaximum=t.value}),e._zod.check=(n)=>{if(t.inclusive?n.value<=t.value:n.value<t.value)return;n.issues.push({origin:r,code:"too_big",maximum:typeof t.value==="object"?t.value.getTime():t.value,input:n.value,inclusive:t.inclusive,inst:e,continue:!t.abort})}}),Gq=ne("$ZodCheckGreaterThan",(e,t)=>{Yo.init(e,t);let r=j9e[typeof t.value];e._zod.onattach.push((n)=>{let i=n._zod.bag,o=(t.inclusive?i.minimum:i.exclusiveMinimum)??Number.NEGATIVE_INFINITY;if(t.value>o)if(t.inclusive)i.minimum=t.value;else i.exclusiveMinimum=t.value}),e._zod.check=(n)=>{if(t.inclusive?n.value>=t.value:n.value>t.value)return;n.issues.push({origin:r,code:"too_small",minimum:typeof t.value==="object"?t.value.getTime():t.value,input:n.value,inclusive:t.inclusive,inst:e,continue:!t.abort})}}),L9e=ne("$ZodCheckMultipleOf",(e,t)=>{Yo.init(e,t),e._zod.onattach.push((r)=>{var n;(n=r._zod.bag).multipleOf??(n.multipleOf=t.value)}),e._zod.check=(r)=>{if(typeof r.value!==typeof t.value)throw Error("Cannot mix number and bigint in multiple_of check.");if(typeof r.value==="bigint"?r.value%t.value===BigInt(0):B6e(r.value,t.value)===0)return;r.issues.push({origin:typeof r.value,code:"not_multiple_of",divisor:t.value,input:r.value,inst:e,continue:!t.abort})}}),N9e=ne("$ZodCheckNumberFormat",(e,t)=>{Yo.init(e,t),t.format=t.format||"float64";let r=t.format?.includes("int"),n=r?"int":"number",[i,o]=V6e[t.format];e._zod.onattach.push((s)=>{let a=s._zod.bag;if(a.format=t.format,a.minimum=i,a.maximum=o,r)a.pattern=P9e}),e._zod.check=(s)=>{let a=s.value;if(r){if(!Number.isInteger(a)){s.issues.push({expected:n,format:t.format,code:"invalid_type",continue:!1,input:a,inst:e});return}if(!Number.isSafeInteger(a)){if(a>0)s.issues.push({input:a,code:"too_big",maximum:Number.MAX_SAFE_INTEGER,note:"Integers must be within the safe integer range.",inst:e,origin:n,inclusive:!0,continue:!t.abort});else s.issues.push({input:a,code:"too_small",minimum:Number.MIN_SAFE_INTEGER,note:"Integers must be within the safe integer range.",inst:e,origin:n,inclusive:!0,continue:!t.abort});return}}if(a<i)s.issues.push({origin:"number",input:a,code:"too_small",minimum:i,inclusive:!0,inst:e,continue:!t.abort});if(a>o)s.issues.push({origin:"number",input:a,code:"too_big",maximum:o,inclusive:!0,inst:e,continue:!t.abort})}}),F9e=ne("$ZodCheckMaxLength",(e,t)=>{var r;Yo.init(e,t),(r=e._zod.def).when??(r.when=(n)=>{let i=n.value;return!$T(i)&&i.length!==void 0}),e._zod.onattach.push((n)=>{let i=n._zod.bag.maximum??Number.POSITIVE_INFINITY;if(t.maximum<i)n._zod.bag.maximum=t.maximum}),e._zod.check=(n)=>{let i=n.value;if(i.length<=t.maximum)return;let s=_T(i);n.issues.push({origin:s,code:"too_big",maximum:t.maximum,inclusive:!0,input:i,inst:e,continue:!t.abort})}}),z9e=ne("$ZodCheckMinLength",(e,t)=>{var r;Yo.init(e,t),(r=e._zod.def).when??(r.when=(n)=>{let i=n.value;return!$T(i)&&i.length!==void 0}),e._zod.onattach.push((n)=>{let i=n._zod.bag.minimum??Number.NEGATIVE_INFINITY;if(t.minimum>i)n._zod.bag.minimum=t.minimum}),e._zod.check=(n)=>{let i=n.value;if(i.length>=t.minimum)return;let s=_T(i);n.issues.push({origin:s,code:"too_small",minimum:t.minimum,inclusive:!0,input:i,inst:e,continue:!t.abort})}}),B9e=ne("$ZodCheckLengthEquals",(e,t)=>{var r;Yo.init(e,t),(r=e._zod.def).when??(r.when=(n)=>{let i=n.value;return!$T(i)&&i.length!==void 0}),e._zod.onattach.push((n)=>{let i=n._zod.bag;i.minimum=t.length,i.maximum=t.length,i.length=t.length}),e._zod.check=(n)=>{let i=n.value,o=i.length;if(o===t.length)return;let s=_T(i),a=o>t.length;n.issues.push({origin:s,...a?{code:"too_big",maximum:t.length}:{code:"too_small",minimum:t.length},inclusive:!0,exact:!0,input:n.value,inst:e,continue:!t.abort})}}),zb=ne("$ZodCheckStringFormat",(e,t)=>{var r,n;if(Yo.init(e,t),e._zod.onattach.push((i)=>{let o=i._zod.bag;if(o.format=t.format,t.pattern)o.patterns??(o.patterns=new Set),o.patterns.add(t.pattern)}),t.pattern)(r=e._zod).check??(r.check=(i)=>{if(t.pattern.lastIndex=0,t.pattern.test(i.value))return;i.issues.push({origin:"string",code:"invalid_format",format:t.format,input:i.value,...t.pattern?{pattern:t.pattern.toString()}:{},inst:e,continue:!t.abort})});else(n=e._zod).check??(n.check=()=>{})}),U9e=ne("$ZodCheckRegex",(e,t)=>{zb.init(e,t),e._zod.check=(r)=>{if(t.pattern.lastIndex=0,t.pattern.test(r.value))return;r.issues.push({origin:"string",code:"invalid_format",format:"regex",input:r.value,pattern:t.pattern.toString(),inst:e,continue:!t.abort})}}),H9e=ne("$ZodCheckLowerCase",(e,t)=>{t.pattern??(t.pattern=M9e),zb.init(e,t)}),G9e=ne("$ZodCheckUpperCase",(e,t)=>{t.pattern??(t.pattern=D9e),zb.init(e,t)}),W9e=ne("$ZodCheckIncludes",(e,t)=>{Yo.init(e,t);let r=Fp(t.includes),n=new RegExp(typeof t.position==="number"?`^.{${t.position}}${r}`:r);t.pattern=n,e._zod.onattach.push((i)=>{let o=i._zod.bag;o.patterns??(o.patterns=new Set),o.patterns.add(n)}),e._zod.check=(i)=>{if(i.value.includes(t.includes,t.position))return;i.issues.push({origin:"string",code:"invalid_format",format:"includes",includes:t.includes,input:i.value,inst:e,continue:!t.abort})}}),V9e=ne("$ZodCheckStartsWith",(e,t)=>{Yo.init(e,t);let r=new RegExp(`^${Fp(t.prefix)}.*`);t.pattern??(t.pattern=r),e._zod.onattach.push((n)=>{let i=n._zod.bag;i.patterns??(i.patterns=new Set),i.patterns.add(r)}),e._zod.check=(n)=>{if(n.value.startsWith(t.prefix))return;n.issues.push({origin:"string",code:"invalid_format",format:"starts_with",prefix:t.prefix,input:n.value,inst:e,continue:!t.abort})}}),q9e=ne("$ZodCheckEndsWith",(e,t)=>{Yo.init(e,t);let r=new RegExp(`.*${Fp(t.suffix)}$`);t.pattern??(t.pattern=r),e._zod.onattach.push((n)=>{let i=n._zod.bag;i.patterns??(i.patterns=new Set),i.patterns.add(r)}),e._zod.check=(n)=>{if(n.value.endsWith(t.suffix))return;n.issues.push({origin:"string",code:"invalid_format",format:"ends_with",suffix:t.suffix,input:n.value,inst:e,continue:!t.abort})}}),K9e=ne("$ZodCheckOverwrite",(e,t)=>{Yo.init(e,t),e._zod.check=(r)=>{r.value=t.tx(r.value)}})});class Wq{constructor(e=[]){if(this.content=[],this.indent=0,this)this.args=e}indented(e){this.indent+=1,e(this),this.indent-=1}write(e){if(typeof e==="function"){e(this,{execution:"sync"}),e(this,{execution:"async"});return}let r=e.split(`
28
28
  `).filter((o)=>o),n=Math.min(...r.map((o)=>o.length-o.trimStart().length)),i=r.map((o)=>o.slice(n)).map((o)=>" ".repeat(this.indent*2)+o);for(let o of i)this.content.push(o)}compile(){let e=Function,t=this?.args,n=[...(this?.content??[""]).map((i)=>` ${i}`)];return new e(...t,n.join(`
29
29
  `))}}var Y9e;var Vq=v(()=>{Y9e={major:4,minor:4,patch:3}});function Sye(e){if(e==="")return!0;if(/\s/.test(e))return!1;if(e.length%4!==0)return!1;try{return atob(e),!0}catch{return!1}}function RSt(e){if(!Bq.test(e))return!1;let t=e.replace(/[-_]/g,(n)=>n==="-"?"+":"/"),r=t.padEnd(Math.ceil(t.length/4)*4,"=");return Sye(r)}function PSt(e,t=null){try{let r=e.split(".");if(r.length!==3)return!1;let[n]=r;if(!n)return!1;let i=JSON.parse(atob(n));if("typ"in i&&i?.typ!=="JWT")return!1;if(!i.alg)return!1;if(t&&(!("alg"in i)||i.alg!==t))return!1;return!0}catch{return!1}}function X9e(e,t,r){if(e.issues.length)t.issues.push(...zp(r,e.issues));t.value[r]=e.value}function jT(e,t,r,n,i,o){let s=r in n;if(e.issues.length){if(i&&o&&!s)return;t.issues.push(...zp(r,e.issues))}if(!s&&!i){if(!e.issues.length)t.issues.push({code:"invalid_type",expected:"nonoptional",input:void 0,path:[r]});return}if(e.value===void 0){if(s)t.value[r]=void 0}else t.value[r]=e.value}function Dye(e){let t=Object.keys(e.shape);for(let n of t)if(!e.shape?.[n]?._zod?.traits?.has("$ZodType"))throw Error(`Invalid element at key "${n}": expected a Zod schema`);let r=W6e(e.shape);return{...e,keys:t,keySet:new Set(t),numKeys:t.length,optionalKeys:new Set(r)}}function jye(e,t,r,n,i,o){let s=[],a=i.keySet,c=i.catchall._zod,l=c.def.type,u=c.optin==="optional",d=c.optout==="optional";for(let p in t){if(p==="__proto__")continue;if(a.has(p))continue;if(l==="never"){s.push(p);continue}let f=c.run({value:t[p],issues:[]},n);if(f instanceof Promise)e.push(f.then((m)=>jT(m,r,p,t,u,d)));else jT(f,r,p,t,u,d)}if(s.length)r.issues.push({code:"unrecognized_keys",keys:s,input:t,inst:o});if(!e.length)return r;return Promise.all(e).then(()=>r)}function Z9e(e,t,r,n){for(let o of e)if(o.issues.length===0)return t.value=o.value,t;let i=e.filter((o)=>!zm(o));if(i.length===1)return t.value=i[0].value,i[0];return t.issues.push({code:"invalid_union",input:t.value,inst:r,errors:e.map((o)=>o.issues.map((s)=>Rl(s,n,y2())))}),t}function qq(e,t){if(e===t)return{valid:!0,data:e};if(e instanceof Date&&t instanceof Date&&+e===+t)return{valid:!0,data:e};if(Fm(e)&&Fm(t)){let r=Object.keys(t),n=Object.keys(e).filter((o)=>r.indexOf(o)!==-1),i={...e,...t};for(let o of n){let s=qq(e[o],t[o]);if(!s.valid)return{valid:!1,mergeErrorPath:[o,...s.mergeErrorPath]};i[o]=s.data}return{valid:!0,data:i}}if(Array.isArray(e)&&Array.isArray(t)){if(e.length!==t.length)return{valid:!1,mergeErrorPath:[]};let r=[];for(let n=0;n<e.length;n++){let i=e[n],o=t[n],s=qq(i,o);if(!s.valid)return{valid:!1,mergeErrorPath:[n,...s.mergeErrorPath]};r.push(s.data)}return{valid:!0,data:r}}return{valid:!1,mergeErrorPath:[]}}function Q9e(e,t,r){let n=new Map,i;for(let a of t.issues)if(a.code==="unrecognized_keys"){i??(i=a);for(let c of a.keys){if(!n.has(c))n.set(c,{});n.get(c).l=!0}}else e.issues.push(a);for(let a of r.issues)if(a.code==="unrecognized_keys")for(let c of a.keys){if(!n.has(c))n.set(c,{});n.get(c).r=!0}else e.issues.push(a);let o=[...n].filter(([,a])=>a.l&&a.r).map(([a])=>a);if(o.length&&i)e.issues.push({...i,keys:o});if(zm(e))return e;let s=qq(t.value,r.value);if(!s.valid)throw Error(`Unmergable intersection. Error path: ${JSON.stringify(s.mergeErrorPath)}`);return e.value=s.data,e}function eye(e,t){if(t===void 0&&(e.issues.length||e.fallback))return{issues:[],value:void 0};return e}function tye(e,t){if(e.value===void 0)e.value=t.defaultValue;return e}function rye(e,t){if(!e.issues.length&&e.value===void 0)e.issues.push({code:"invalid_type",expected:"nonoptional",input:e.value,inst:t});return e}function DT(e,t,r){if(e.issues.length)return e.aborted=!0,e;return t._zod.run({value:e.value,issues:e.issues,fallback:e.fallback},r)}function nye(e){return e.value=Object.freeze(e.value),e}function iye(e,t,r,n){if(!e){let i={code:"custom",input:r,inst:n,path:[...n._zod.def.path??[]],continue:!n._zod.def.abort};if(n._zod.def.params)i.params=n._zod.def.params;t.issues.push(Bm(i))}}var En,LT,On,oye,sye,aye,cye,lye,uye,dye,pye,fye,mye,hye,gye,yye,vye,bye,kye,wye,xye,Aye,Eye,$ye,Cye,_ye,Kq,Tye,Rye,Pye,Iye,Oye,Mye,ISt,Lye,Nye,Fye,zye,Bye,Uye,Hye,Jq,Gye,Wye,Vye,qye,Kye,Jye,Yye,Xye,Zye,Qye;var e0e=v(()=>{MT();Lm();Fq();OT();Pl();Vq();Pl();En=ne("$ZodType",(e,t)=>{var r;e??(e={}),e._zod.def=t,e._zod.bag=e._zod.bag||{},e._zod.version=Y9e;let n=[...e._zod.def.checks??[]];if(e._zod.traits.has("$ZodCheck"))n.unshift(e);for(let i of n)for(let o of i._zod.onattach)o(e);if(n.length===0)(r=e._zod).deferred??(r.deferred=[]),e._zod.deferred?.push(()=>{e._zod.run=e._zod.parse});else{let i=(s,a,c)=>{let l=zm(s),u;for(let d of a){if(d._zod.def.when){if(q6e(s))continue;if(!d._zod.def.when(s))continue}else if(l)continue;let p=s.issues.length,f=d._zod.check(s);if(f instanceof Promise&&c?.async===!1)throw new I4;if(u||f instanceof Promise)u=(u??Promise.resolve()).then(async()=>{if(await f,s.issues.length===p)return;if(!l)l=zm(s,p)});else{if(s.issues.length===p)continue;if(!l)l=zm(s,p)}}if(u)return u.then(()=>s);return s},o=(s,a,c)=>{if(zm(s))return s.aborted=!0,s;let l=i(a,n,c);if(l instanceof Promise){if(c.async===!1)throw new I4;return l.then((u)=>e._zod.parse(u,c))}return e._zod.parse(l,c)};e._zod.run=(s,a)=>{if(a.skipChecks)return e._zod.parse(s,a);if(a.direction==="backward"){let l=e._zod.parse({value:s.value,issues:[]},{...a,skipChecks:!0});if(l instanceof Promise)return l.then((u)=>o(u,s,a));return o(l,s,a)}let c=e._zod.parse(s,a);if(c instanceof Promise){if(a.async===!1)throw new I4;return c.then((l)=>i(l,n,a))}return i(c,n,a)}}hr(e,"~standard",()=>({validate:(i)=>{try{let o=Z6e(e,i);return o.success?{value:o.data}:{issues:o.error?.issues}}catch(o){return Q6e(e,i).then((s)=>s.success?{value:s.data}:{issues:s.error?.issues})}},vendor:"zod",version:1}))}),LT=ne("$ZodString",(e,t)=>{En.init(e,t),e._zod.pattern=[...e?._zod.bag?.patterns??[]].pop()??R9e(e._zod.bag),e._zod.parse=(r,n)=>{if(t.coerce)try{r.value=String(r.value)}catch(i){}if(typeof r.value==="string")return r;return r.issues.push({expected:"string",code:"invalid_type",input:r.value,inst:e}),r}}),On=ne("$ZodStringFormat",(e,t)=>{zb.init(e,t),LT.init(e,t)}),oye=ne("$ZodGUID",(e,t)=>{t.pattern??(t.pattern=h9e),On.init(e,t)}),sye=ne("$ZodUUID",(e,t)=>{if(t.version){let n={v1:1,v2:2,v3:3,v4:4,v5:5,v6:6,v7:7,v8:8}[t.version];if(n===void 0)throw Error(`Invalid UUID version: "${t.version}"`);t.pattern??(t.pattern=zq(n))}else t.pattern??(t.pattern=zq());On.init(e,t)}),aye=ne("$ZodEmail",(e,t)=>{t.pattern??(t.pattern=g9e),On.init(e,t)}),cye=ne("$ZodURL",(e,t)=>{On.init(e,t),e._zod.check=(r)=>{try{let n=r.value.trim();if(!t.normalize&&t.protocol?.source===A9e.source){if(!/^https?:\/\//i.test(n)){r.issues.push({code:"invalid_format",format:"url",note:"Invalid URL format",input:r.value,inst:e,continue:!t.abort});return}}let i=new URL(n);if(t.hostname){if(t.hostname.lastIndex=0,!t.hostname.test(i.hostname))r.issues.push({code:"invalid_format",format:"url",note:"Invalid hostname",pattern:t.hostname.source,input:r.value,inst:e,continue:!t.abort})}if(t.protocol){if(t.protocol.lastIndex=0,!t.protocol.test(i.protocol.endsWith(":")?i.protocol.slice(0,-1):i.protocol))r.issues.push({code:"invalid_format",format:"url",note:"Invalid protocol",pattern:t.protocol.source,input:r.value,inst:e,continue:!t.abort})}if(t.normalize)r.value=i.href;else r.value=n;return}catch(n){r.issues.push({code:"invalid_format",format:"url",input:r.value,inst:e,continue:!t.abort})}}}),lye=ne("$ZodEmoji",(e,t)=>{t.pattern??(t.pattern=y9e()),On.init(e,t)}),uye=ne("$ZodNanoID",(e,t)=>{t.pattern??(t.pattern=f9e),On.init(e,t)}),dye=ne("$ZodCUID",(e,t)=>{t.pattern??(t.pattern=c9e),On.init(e,t)}),pye=ne("$ZodCUID2",(e,t)=>{t.pattern??(t.pattern=l9e),On.init(e,t)}),fye=ne("$ZodULID",(e,t)=>{t.pattern??(t.pattern=u9e),On.init(e,t)}),mye=ne("$ZodXID",(e,t)=>{t.pattern??(t.pattern=d9e),On.init(e,t)}),hye=ne("$ZodKSUID",(e,t)=>{t.pattern??(t.pattern=p9e),On.init(e,t)}),gye=ne("$ZodISODateTime",(e,t)=>{t.pattern??(t.pattern=T9e(t)),On.init(e,t)}),yye=ne("$ZodISODate",(e,t)=>{t.pattern??(t.pattern=$9e),On.init(e,t)}),vye=ne("$ZodISOTime",(e,t)=>{t.pattern??(t.pattern=_9e(t)),On.init(e,t)}),bye=ne("$ZodISODuration",(e,t)=>{t.pattern??(t.pattern=m9e),On.init(e,t)}),kye=ne("$ZodIPv4",(e,t)=>{t.pattern??(t.pattern=v9e),On.init(e,t),e._zod.bag.format="ipv4"}),wye=ne("$ZodIPv6",(e,t)=>{t.pattern??(t.pattern=b9e),On.init(e,t),e._zod.bag.format="ipv6",e._zod.check=(r)=>{try{new URL(`http://[${r.value}]`)}catch{r.issues.push({code:"invalid_format",format:"ipv6",input:r.value,inst:e,continue:!t.abort})}}}),xye=ne("$ZodCIDRv4",(e,t)=>{t.pattern??(t.pattern=k9e),On.init(e,t)}),Aye=ne("$ZodCIDRv6",(e,t)=>{t.pattern??(t.pattern=w9e),On.init(e,t),e._zod.check=(r)=>{let n=r.value.split("/");try{if(n.length!==2)throw Error();let[i,o]=n;if(!o)throw Error();let s=Number(o);if(`${s}`!==o)throw Error();if(s<0||s>128)throw Error();new URL(`http://[${i}]`)}catch{r.issues.push({code:"invalid_format",format:"cidrv6",input:r.value,inst:e,continue:!t.abort})}}});Eye=ne("$ZodBase64",(e,t)=>{t.pattern??(t.pattern=x9e),On.init(e,t),e._zod.bag.contentEncoding="base64",e._zod.check=(r)=>{if(Sye(r.value))return;r.issues.push({code:"invalid_format",format:"base64",input:r.value,inst:e,continue:!t.abort})}});$ye=ne("$ZodBase64URL",(e,t)=>{t.pattern??(t.pattern=Bq),On.init(e,t),e._zod.bag.contentEncoding="base64url",e._zod.check=(r)=>{if(RSt(r.value))return;r.issues.push({code:"invalid_format",format:"base64url",input:r.value,inst:e,continue:!t.abort})}}),Cye=ne("$ZodE164",(e,t)=>{t.pattern??(t.pattern=S9e),On.init(e,t)});_ye=ne("$ZodJWT",(e,t)=>{On.init(e,t),e._zod.check=(r)=>{if(PSt(r.value,t.alg))return;r.issues.push({code:"invalid_format",format:"jwt",input:r.value,inst:e,continue:!t.abort})}}),Kq=ne("$ZodNumber",(e,t)=>{En.init(e,t),e._zod.pattern=e._zod.bag.pattern??Uq,e._zod.parse=(r,n)=>{if(t.coerce)try{r.value=Number(r.value)}catch(s){}let i=r.value;if(typeof i==="number"&&!Number.isNaN(i)&&Number.isFinite(i))return r;let o=typeof i==="number"?Number.isNaN(i)?"NaN":!Number.isFinite(i)?"Infinity":void 0:void 0;return r.issues.push({expected:"number",code:"invalid_type",input:i,inst:e,...o?{received:o}:{}}),r}}),Tye=ne("$ZodNumberFormat",(e,t)=>{N9e.init(e,t),Kq.init(e,t)}),Rye=ne("$ZodBoolean",(e,t)=>{En.init(e,t),e._zod.pattern=I9e,e._zod.parse=(r,n)=>{if(t.coerce)try{r.value=Boolean(r.value)}catch(o){}let i=r.value;if(typeof i==="boolean")return r;return r.issues.push({expected:"boolean",code:"invalid_type",input:i,inst:e}),r}}),Pye=ne("$ZodNull",(e,t)=>{En.init(e,t),e._zod.pattern=O9e,e._zod.values=new Set([null]),e._zod.parse=(r,n)=>{let i=r.value;if(i===null)return r;return r.issues.push({expected:"null",code:"invalid_type",input:i,inst:e}),r}}),Iye=ne("$ZodUnknown",(e,t)=>{En.init(e,t),e._zod.parse=(r)=>r}),Oye=ne("$ZodNever",(e,t)=>{En.init(e,t),e._zod.parse=(r,n)=>(r.issues.push({expected:"never",code:"invalid_type",input:r.value,inst:e}),r)});Mye=ne("$ZodArray",(e,t)=>{En.init(e,t),e._zod.parse=(r,n)=>{let i=r.value;if(!Array.isArray(i))return r.issues.push({expected:"array",code:"invalid_type",input:i,inst:e}),r;r.value=Array(i.length);let o=[];for(let s=0;s<i.length;s++){let a=i[s],c=t.element._zod.run({value:a,issues:[]},n);if(c instanceof Promise)o.push(c.then((l)=>X9e(l,r,s)));else X9e(c,r,s)}if(o.length)return Promise.all(o).then(()=>r);return r}});ISt=ne("$ZodObject",(e,t)=>{if(En.init(e,t),!Object.getOwnPropertyDescriptor(t,"shape")?.get){let a=t.shape;Object.defineProperty(t,"shape",{get:()=>{let c={...a};return Object.defineProperty(t,"shape",{value:c}),c}})}let n=ET(()=>Dye(t));hr(e._zod,"propValues",()=>{let a=t.shape,c={};for(let l in a){let u=a[l]._zod;if(u.values){c[l]??(c[l]=new Set);for(let d of u.values)c[l].add(d)}}return c});let i=jb,o=t.catchall,s;e._zod.parse=(a,c)=>{s??(s=n.value);let l=a.value;if(!i(l))return a.issues.push({expected:"object",code:"invalid_type",input:l,inst:e}),a;a.value={};let u=[],d=s.shape;for(let p of s.keys){let f=d[p],m=f._zod.optin==="optional",h=f._zod.optout==="optional",g=f._zod.run({value:l[p],issues:[]},c);if(g instanceof Promise)u.push(g.then((y)=>jT(y,a,p,l,m,h)));else jT(g,a,p,l,m,h)}if(!o)return u.length?Promise.all(u).then(()=>a):a;return jye(u,l,a,c,n.value,e)}}),Lye=ne("$ZodObjectJIT",(e,t)=>{ISt.init(e,t);let r=e._zod.parse,n=ET(()=>Dye(t)),i=(p)=>{let f=new Wq(["shape","payload","ctx"]),m=n.value,h=(b)=>{let x=Oq(b);return`shape[${x}]._zod.run({ value: input[${x}], issues: [] }, ctx)`};f.write("const input = payload.value;");let g=Object.create(null),y=0;for(let b of m.keys)g[b]=`key_${y++}`;f.write("const newResult = {};");for(let b of m.keys){let x=g[b],S=Oq(b),A=p[b],E=A?._zod?.optin==="optional",w=A?._zod?.optout==="optional";if(f.write(`const ${x} = ${h(b)};`),E&&w)f.write(`
30
30
  if (${x}.issues.length) {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "oh-my-agent",
3
- "version": "20.10.0",
3
+ "version": "20.10.1",
4
4
  "description": "A specialist team for the coding agent you already use: 12 roles, 21 workflows and 33 skills that plan, build in parallel, review and debug, leaving plans, ADRs and results as files. Gates wait for your own tests. Also research, slides and video. One .agents/ folder for Claude Code, Codex, Cursor and 11 more.",
5
5
  "type": "module",
6
6
  "bin": {