oh-my-agent 20.10.0 → 20.10.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +29 -22
- package/bin/cli-main.js +1 -1
- package/package.json +1 -1
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
|
+
[](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
|
|
|
@@ -14,10 +16,6 @@ curl -fsSL https://raw.githubusercontent.com/first-fluke/oh-my-agent/main/cli/in
|
|
|
14
16
|
|
|
15
17
|
Then run `oma doctor` and type `/plan add user accounts with a settings page` in your agent. [Your first 5 minutes](#your-first-5-minutes) walks through it.
|
|
16
18
|
|
|
17
|
-

|
|
18
|
-
|
|
19
|
-
[Watch the full video (35s)](https://github.com/first-fluke/oh-my-agent/blob/main/docs/assets/video/oh-my-agent-explainer.mp4)
|
|
20
|
-
|
|
21
19
|
## What you get
|
|
22
20
|
|
|
23
21
|
**Workflows** are what you type (or just say). They call in **roles**, the specialists. **Skills** are the know-how: each role carries its own, and your agent loads the rest whenever a task needs them.
|
|
@@ -28,7 +26,7 @@ Then run `oma doctor` and type `/plan add user accounts with a settings page` in
|
|
|
28
26
|
| **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
27
|
| **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
28
|
| **Files you can open** | Plans, design docs, API contracts, ADRs, bug notes, per-agent results, security evidence, HTML explainers, recaps | `ls .agents/results` |
|
|
31
|
-
| **
|
|
29
|
+
| **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
30
|
| **Research and content** | Cited search, market research, papers, slide decks, MP4 videos, images, local voice, PDF/HWP to Markdown | `/video`, `/convert` |
|
|
33
31
|
| **One folder, 14 runtimes** | One portable `.agents/` directory, written into each runtime's own config files | `oma link cursor` |
|
|
34
32
|
|
|
@@ -36,7 +34,7 @@ Then run `oma doctor` and type `/plan add user accounts with a settings page` in
|
|
|
36
34
|
|
|
37
35
|
## Install
|
|
38
36
|
|
|
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
|
|
37
|
+
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
38
|
|
|
41
39
|
<details>
|
|
42
40
|
<summary>Windows, or without the install script</summary>
|
|
@@ -117,7 +115,7 @@ Of the named presets, only `All` includes coordination, orchestration, docs, sec
|
|
|
117
115
|
Or just write "plan user accounts with a settings page": on runtimes with a prompt hook, the keyword starts the same workflow.
|
|
118
116
|
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
117
|
|
|
120
|
-
|
|
118
|
+
For larger tasks, continue with `/work` or `/orchestrate` using the plan.
|
|
121
119
|
|
|
122
120
|
## Meet the team
|
|
123
121
|
|
|
@@ -164,7 +162,7 @@ Each step hands a file to the next. `/brainstorm` saves a design that `/plan` re
|
|
|
164
162
|
| Just a plan | `/plan` | A plan file for multi-area work, or a direct recommendation for small work |
|
|
165
163
|
| 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
164
|
| 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
|
-
|
|
|
165
|
+
| Five-phase workflow | `/ultrawork` | Five gated phases (PLAN, IMPL, VERIFY, REFINE, SHIP); every review runs in a fresh reviewer session |
|
|
168
166
|
| "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
167
|
| 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
168
|
|
|
@@ -201,7 +199,7 @@ You don't need slash commands. On runtimes with a prompt hook, plain requests (k
|
|
|
201
199
|
| `/video` | Turns a brief into a finished MP4 through a key-optional pipeline |
|
|
202
200
|
| `/work` | Coordinates several agents on a multi-domain project with PM planning and QA review (persistent) |
|
|
203
201
|
|
|
204
|
-
|
|
202
|
+
`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
203
|
|
|
206
204
|
</details>
|
|
207
205
|
|
|
@@ -339,7 +337,7 @@ These pipelines report a missing source or vendor key instead of silently return
|
|
|
339
337
|
<details>
|
|
340
338
|
<summary><strong>Parallel agents, sessions and dashboards</strong></summary>
|
|
341
339
|
|
|
342
|
-
- `oma agent spawn <role> "<task>" <sid>` runs a role on Antigravity, Claude, Codex, Cursor,
|
|
340
|
+
- `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
341
|
- 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
342
|
- `oma state list --all-projects` and `oma state get <sid>`: sessions and every recorded event.
|
|
345
343
|
- `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 +352,13 @@ These pipelines report a missing source or vendor key instead of silently return
|
|
|
354
352
|
| Slot | Default | Alternatives |
|
|
355
353
|
|---|---|---|
|
|
356
354
|
| Docs | Context7 | — |
|
|
355
|
+
| Web search | Runtime native search | Brave Search |
|
|
357
356
|
| Code intelligence | Serena, one shared server per project | Gortex (experimental) |
|
|
358
357
|
| Semantic memory | AgentMemory | Honcho (experimental), none |
|
|
359
358
|
| Browser MCP | Aside | Chrome DevTools, Firefox DevTools |
|
|
360
359
|
|
|
360
|
+
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.
|
|
361
|
+
|
|
361
362
|
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
363
|
|
|
363
364
|
</details>
|
|
@@ -546,11 +547,14 @@ agents:
|
|
|
546
547
|
|
|
547
548
|
</details>
|
|
548
549
|
|
|
549
|
-
|
|
550
|
+
<a id="verification-not-narration"></a>
|
|
551
|
+
## Verification
|
|
552
|
+
|
|
553
|
+
OMA checks the artifacts produced by its workflows. [See it work](#see-it-work) shows the Stop gate in action.
|
|
550
554
|
|
|
551
|
-
|
|
555
|
+
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
556
|
|
|
553
|
-
|
|
557
|
+
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
558
|
|
|
555
559
|
| Mechanism | What it checks | Source |
|
|
556
560
|
|-----------|----------------|--------|
|
|
@@ -560,32 +564,35 @@ Every mechanism below except the prompted judge is mechanical: a command exits 0
|
|
|
560
564
|
| **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
565
|
| **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
566
|
|
|
563
|
-
> **
|
|
567
|
+
> **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
568
|
|
|
565
569
|
<details>
|
|
566
570
|
<summary>Limits, details, and how the Stop hook decides</summary>
|
|
567
571
|
|
|
568
|
-
**Limits
|
|
572
|
+
**Limits:**
|
|
569
573
|
|
|
570
574
|
- 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
575
|
- 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
|
|
576
|
+
- The gate releases and logs a failure after 5 reinforcements, 2 hours, or when `--budget-minutes` runs out.
|
|
573
577
|
- Budgets: `session.quota_cap` caps tokens, spawn count, and per-vendor tokens; the orchestrator refuses the next spawn when a dimension is exceeded.
|
|
574
578
|
|
|
575
|
-
**Artifact gate.** A missing artifact means the phase did not run
|
|
579
|
+
**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
580
|
|
|
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
|
|
581
|
+
**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
582
|
|
|
579
583
|
**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
584
|
|
|
581
585
|
**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
586
|
|
|
587
|
+
<!-- Stack manifests in this list are optional outputs of /stack-set, not shipped files. -->
|
|
588
|
+
<!-- oma-docs:ignore-start -->
|
|
583
589
|
- `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
590
|
- `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
591
|
- `mobile`: the `stack/stack.yaml` syntax and test commands, or Flutter/Dart Analysis and Flutter Tests.
|
|
586
592
|
- `debug`: Python Tests (pytest through uv) or Frontend Tests (Vitest).
|
|
587
593
|
- `pm`: PM Plan (the plan file is valid JSON).
|
|
588
594
|
- `qa`: no mechanical checks.
|
|
595
|
+
<!-- oma-docs:ignore-end -->
|
|
589
596
|
|
|
590
597
|
```mermaid
|
|
591
598
|
flowchart TD
|
|
@@ -648,7 +655,7 @@ Planning and choosing the next step stay with your agent's model; oma has no fix
|
|
|
648
655
|
|
|
649
656
|
</details>
|
|
650
657
|
|
|
651
|
-
## Learn
|
|
658
|
+
## Learn more
|
|
652
659
|
|
|
653
660
|
- **[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
661
|
- **[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 +665,13 @@ Planning and choosing the next step stay with your agent's model; oma has no fix
|
|
|
658
665
|
- **[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
666
|
- **[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
667
|
|
|
661
|
-
>
|
|
668
|
+
> Star the project on GitHub:
|
|
662
669
|
>
|
|
663
670
|
> ```bash
|
|
664
671
|
> gh api --method PUT /user/starred/first-fluke/oh-my-agent
|
|
665
672
|
> ```
|
|
666
673
|
>
|
|
667
|
-
>
|
|
674
|
+
> Starter template: [fullstack-starter](https://github.com/first-fluke/fullstack-starter)
|
|
668
675
|
|
|
669
676
|
## Star History
|
|
670
677
|
|
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.2",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.
|
|
3
|
+
"version": "20.10.2",
|
|
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": {
|