agent-mcp-hub 0.5.3 → 0.6.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -1,7 +1,7 @@
1
1
  # agent-mcp-hub
2
2
 
3
3
  One MCP server that bridges multiple CLI coding agents — **Codex**, **Cursor**,
4
- **OpenCode**, and **Claude** — into any MCP client.
4
+ **OpenCode**, **Claude**, and **Antigravity** — into any MCP client.
5
5
 
6
6
  > **stdio only — by design.** The hub ships no Docker image and no HTTP
7
7
  > transport (both were removed during the 0.5.x line). A containerised or remote
@@ -17,6 +17,7 @@ One MCP server that bridges multiple CLI coding agents — **Codex**, **Cursor**
17
17
  | `cursor` | Delegate a prompt to `cursor-agent -p` (prompt piped via stdin) |
18
18
  | `opencode` | Delegate a prompt to `opencode run` |
19
19
  | `claude` | Delegate a prompt to the Claude Code CLI (prompt piped via stdin) |
20
+ | `agy` | Delegate a prompt to Google Antigravity (`agy --print=…`, prompt passed as a flag value) |
20
21
  | `run_all` | Same prompt to all agents in parallel, results side by side |
21
22
  | `list_agents` | Which agent CLIs are installed and on PATH |
22
23
  | `ping` | Health check |
@@ -28,6 +29,39 @@ cap, default 1800000 = 30 min), and `idleTimeoutMs` (inactivity cap, default 300
28
29
  Known limitation: `opencode` prompts may not start with `-` (its CLI could parse
29
30
  them as flags); the tool returns an actionable error instead of guessing.
30
31
 
32
+ ### Choosing models per agent
33
+
34
+ **Model ids are agent-specific and do not overlap.** `o3` means nothing to
35
+ `agy`, `gemini-3.6-flash-low` means nothing to `codex`, and `opencode` namespaces
36
+ its own (`opencode/big-pickle`). So a single `model` value is valid for at most
37
+ one agent in a fan-out.
38
+
39
+ - `run_all` takes **`models`** — a per-agent map. Agents you don't list fall back
40
+ to `model`, then to their own CLI default.
41
+ - `review_change` takes **`runnerModel`** and **`reviewerModel`**, so the agent
42
+ writing the change and the agent judging it can use different engines *and*
43
+ tiers. `model` remains a fallback for both.
44
+
45
+ ```json
46
+ {
47
+ "tool": "run_all",
48
+ "arguments": {
49
+ "prompt": "Explain the retry logic in src/exec.ts",
50
+ "models": { "codex": "o3", "agy": "gemini-3.6-flash-low", "claude": "haiku" }
51
+ }
52
+ }
53
+ ```
54
+
55
+ An unknown agent name in `models` is rejected with the list of enabled agents —
56
+ a typo never silently falls back to the default model.
57
+
58
+ Where to find valid ids: `opencode models`, `cursor-agent models` and
59
+ `agy models` list them. `codex` and `claude` have no such command — codex reads
60
+ its default from `~/.codex/config.toml`, and claude accepts the documented
61
+ aliases (`opus`, `sonnet`, `haiku`, `fable`). Note `claude models` is **not** a
62
+ subcommand: it is treated as a prompt, so its "model list" is generated text,
63
+ not a source of truth.
64
+
31
65
  ### Error handling
32
66
 
33
67
  When a wrapped CLI fails, the hub classifies the failure and returns a clean,
@@ -37,7 +71,7 @@ class and the exact fix:
37
71
  | Class | Example remediation |
38
72
  |---|---|
39
73
  | `not_installed` | install the CLI (e.g. `npm i -g @openai/codex`) / fix PATH |
40
- | `not_authenticated` | `codex login` · `cursor-agent login` · `opencode auth login` · `claude` → `/login` (or set the matching API key) |
74
+ | `not_authenticated` | `codex login` · `cursor-agent login` · `opencode auth login` · `claude` → `/login` · `agy` → sign in on first run (or set the matching API key) |
41
75
  | `not_configured` | set a model/provider in the CLI's config |
42
76
  | `timed_out` | raise `timeoutMs`, or check the agent/model is responsive |
43
77
  | `stream_stalled` | the agent reached the network but its stream keeps dropping (e.g. `cursor` behind a TLS-intercepting proxy) — treat that agent as unavailable; raising `timeoutMs` will not help |
@@ -56,7 +90,8 @@ the runner's output, the diff (`--stat`), and a **PASS / WARN / FAIL** verdict
56
90
  with findings.
57
91
 
58
92
  **Inputs:** `runner`, `reviewer` (agent names), `prompt`, `cwd` (must be a git
59
- worktree), optional `model`, `timeoutMs`.
93
+ worktree), optional `runnerModel`, `reviewerModel`, `model` (fallback for both),
94
+ `timeoutMs`.
60
95
 
61
96
  **Key notes:**
62
97
 
@@ -69,6 +104,22 @@ worktree), optional `model`, `timeoutMs`.
69
104
  (noted in the output).
70
105
  - Complements — does not replace — client-side stop-hooks or PR-time CI review.
71
106
  - The confirm gate (`MCP_CONFIRM`) applies.
107
+ - **The reviewer runs least-privilege — but how much that guarantees depends on the
108
+ agent.** The reviewer's prompt embeds an attacker-influenced diff, so it is run
109
+ read-only rather than with the write grant the runner gets. Only two of the five
110
+ are real restrictions:
111
+
112
+ | Reviewer | Read-only mechanism | Enforced? |
113
+ |---|---|---|
114
+ | `codex` | `-s read-only` | **Yes — OS-level sandbox** |
115
+ | `claude` | `--disallowedTools Write,Edit,…,Bash` | **Yes — harness-level deny** |
116
+ | `cursor` | `--trust --mode plan` (no `--force`) | No — model-advisory only |
117
+ | `agy` | permission grant withheld | Partly — headless auto-deny, not a sandbox |
118
+ | `opencode` | *none available* | **No — unrestricted** |
119
+
120
+ Pick `codex` or `claude` as the reviewer if you want the restriction to be real.
121
+ This is defense-in-depth alongside the nonce-fenced diff and the throwaway temp
122
+ cwd; none of it is a sandbox.
72
123
 
73
124
  ```json
74
125
  {
@@ -90,6 +141,9 @@ Install and authenticate the CLIs you want to use (any subset works):
90
141
  - Cursor: `curl https://cursor.com/install -fsS | bash && cursor-agent login`
91
142
  - OpenCode: `npm i -g opencode-ai && opencode auth login`
92
143
  - Claude Code: `npm i -g @anthropic-ai/claude-code && claude` (first run logs in)
144
+ - Antigravity: install the Antigravity CLI (e.g. `brew install --cask antigravity-cli`),
145
+ then run `agy` once and sign in — it has no `login` subcommand and stores
146
+ credentials in the OS keyring, so there is no API-key env var to set
93
147
 
94
148
  ## Install
95
149
 
@@ -139,7 +193,7 @@ claude mcp add agent-hub -- npx -y agent-mcp-hub@0.5.0
139
193
  ## Configuration
140
194
 
141
195
  **`MCP_AGENTS`** — comma-separated allowlist of the agents to expose
142
- (`codex,cursor,opencode,claude`). Unset or empty exposes all agents. Disabled
196
+ (`codex,cursor,opencode,claude,agy`). Unset or empty exposes all agents. Disabled
143
197
  agents get no tool and are absent from `list_agents`/`run_all`. An unknown name
144
198
  fails at startup with an error listing the valid names, so typos never silently
145
199
  disable an agent.
@@ -199,10 +253,17 @@ fails fast:
199
253
  default **1800000 (30 min)**. A hard upper bound regardless of activity.
200
254
 
201
255
  Whichever fires first kills the agent's process group. **Tradeoff:** the idle reset
202
- assumes the CLI streams intermediate output. `codex` and `opencode` do; `claude -p`
203
- and `cursor-agent -p` may emit only the final result, so a long **silent** task on
204
- those can be idle-killed at 5 min — raise `idleTimeoutMs` / `MCP_AGENT_IDLE_TIMEOUT_MS`
205
- for such tasks, or rely on the total cap.
256
+ assumes the CLI streams intermediate output. `codex` and `opencode` do; `claude -p`,
257
+ `cursor-agent -p` and `agy --print` may emit only the final result, so a long
258
+ **silent** task on those can be idle-killed at 5 min — raise `idleTimeoutMs` /
259
+ `MCP_AGENT_IDLE_TIMEOUT_MS` for such tasks, or rely on the total cap.
260
+
261
+ `agy` is the strongest case here: it emits its entire answer in one flush at the
262
+ end (measured — every line of a 12-line reply arrived at the same instant), and
263
+ the hub raises its internal `--print-timeout` to 48h so that agy's own 5-minute
264
+ default can never truncate a run. The idle timer is therefore agy's only
265
+ protection against a genuine hang; budget `idleTimeoutMs` accordingly for long
266
+ autonomous agy tasks.
206
267
 
207
268
  While an agent runs, the hub emits MCP **progress notifications** to clients that
208
269
  request them (`_meta.progressToken`) — live feedback during long runs. Note: on
@@ -0,0 +1,2 @@
1
+ import type { AgentAdapter } from "../types.js";
2
+ export declare const agyAdapter: AgentAdapter;
@@ -0,0 +1,56 @@
1
+ /**
2
+ * Cap agy applies to its OWN print-mode run. Deliberately ABOVE `MAX_TIMEOUT_MS`
3
+ * (24h, `exec.ts`) so agy's internal timer can never fire before the hub's total/
4
+ * idle timers — the hub stays the single source of timeout truth, exactly as for
5
+ * the other four agents.
6
+ *
7
+ * This flag is load-bearing: `--print-timeout` defaults to **5 minutes**, so
8
+ * without it agy silently kills every longer run with an opaque
9
+ * `Error: timeout waiting for response` (exit 1) no matter what `timeoutMs` the
10
+ * caller asked for — making this tool's documented timeout a lie for this agent.
11
+ */
12
+ const PRINT_TIMEOUT = "48h";
13
+ export const agyAdapter = {
14
+ name: "agy",
15
+ summary: "Google Antigravity (agy) — Gemini-powered autonomous coding agent that reads and edits files to implement, refactor, and fix code.",
16
+ binary: "agy",
17
+ // agy has NO `login` subcommand: it authenticates on first interactive run and
18
+ // stores credentials in the OS keyring. There is therefore no API-key env var,
19
+ // so `apiKeyEnv` stays undefined — which also means every OTHER agent's key is
20
+ // stripped from its environment (see `credentialStripKeys`), same as opencode.
21
+ loginCommand: "agy (then sign in when prompted)",
22
+ // `agy models` prints bare model ids ("gemini-3.1-pro-high"), one per line, and
23
+ // exercises account eligibility rather than merely starting the binary — the
24
+ // same reasoning that makes `opencode models` a better probe than `--version`.
25
+ probeArgs: ["models"],
26
+ probeRequiresOutput: true,
27
+ buildInvocation(prompt, options = {}) {
28
+ // `--new-project` is LOAD-BEARING. Without it agy ignores the process working
29
+ // directory entirely and runs in ~/.gemini/antigravity-cli/scratch, so the
30
+ // hub's `cwd` contract would silently not hold for this agent and it would
31
+ // edit files somewhere the caller never named. Verified against agy 1.1.7.
32
+ const args = ["--new-project", "--print-timeout", PRINT_TIMEOUT];
33
+ // Headless agy cannot prompt for tool permission, so it auto-DENIES and then
34
+ // exits 0 with EMPTY stdout — a failure that reads as success. Auto-approving
35
+ // is what lets agy actually read and edit files (cursor's `--force` plays the
36
+ // same role). Withheld only when the run is JUDGING attacker-controlled
37
+ // content — the `review_change` reviewer passes `permissionMode: "read-only"`.
38
+ // `--sandbox` is NEVER emitted: upstream #36 reports that combining it with
39
+ // the skip flag lets the agent auto-approve its own sandbox escape, and alone
40
+ // it does not produce a usable read-only mode.
41
+ if (options.permissionMode !== "read-only")
42
+ args.push("--dangerously-skip-permissions");
43
+ if (options.model)
44
+ args.push("--model", options.model);
45
+ // The prompt is the GLUED value of `--print`. Glued (`--print=x`) rather than
46
+ // `-p x` on purpose: the value is physically part of a single argv token, so
47
+ // it can never be re-parsed as a flag regardless of how agy's flag library
48
+ // treats a dash-leading value now or in a future release. That makes the
49
+ // dash-prompt guarantee a property of OUR argv, not of a third-party parser —
50
+ // which is why this adapter needs no opencode-style dash-guard.
51
+ // No stdin: agy takes the prompt here, not on stdin.
52
+ args.push(`--print=${prompt}`);
53
+ return { args };
54
+ },
55
+ };
56
+ //# sourceMappingURL=agy.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"agy.js","sourceRoot":"","sources":["../../src/adapters/agy.ts"],"names":[],"mappings":"AAEA;;;;;;;;;;GAUG;AACH,MAAM,aAAa,GAAG,KAAK,CAAC;AAE5B,MAAM,CAAC,MAAM,UAAU,GAAiB;IACtC,IAAI,EAAE,KAAK;IACX,OAAO,EACL,oIAAoI;IACtI,MAAM,EAAE,KAAK;IACb,+EAA+E;IAC/E,+EAA+E;IAC/E,+EAA+E;IAC/E,+EAA+E;IAC/E,YAAY,EAAE,mCAAmC;IACjD,gFAAgF;IAChF,6EAA6E;IAC7E,+EAA+E;IAC/E,SAAS,EAAE,CAAC,QAAQ,CAAC;IACrB,mBAAmB,EAAE,IAAI;IACzB,eAAe,CAAC,MAAc,EAAE,UAA2B,EAAE;QAC3D,8EAA8E;QAC9E,2EAA2E;QAC3E,2EAA2E;QAC3E,2EAA2E;QAC3E,MAAM,IAAI,GAAG,CAAC,eAAe,EAAE,iBAAiB,EAAE,aAAa,CAAC,CAAC;QACjE,6EAA6E;QAC7E,8EAA8E;QAC9E,8EAA8E;QAC9E,wEAAwE;QACxE,+EAA+E;QAC/E,4EAA4E;QAC5E,8EAA8E;QAC9E,+CAA+C;QAC/C,IAAI,OAAO,CAAC,cAAc,KAAK,WAAW;YAAE,IAAI,CAAC,IAAI,CAAC,gCAAgC,CAAC,CAAC;QACxF,IAAI,OAAO,CAAC,KAAK;YAAE,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,OAAO,CAAC,KAAK,CAAC,CAAC;QACvD,8EAA8E;QAC9E,6EAA6E;QAC7E,2EAA2E;QAC3E,yEAAyE;QACzE,8EAA8E;QAC9E,gEAAgE;QAChE,qDAAqD;QACrD,IAAI,CAAC,IAAI,CAAC,WAAW,MAAM,EAAE,CAAC,CAAC;QAC/B,OAAO,EAAE,IAAI,EAAE,CAAC;IAClB,CAAC;CACF,CAAC"}
@@ -6,6 +6,25 @@ export const claudeAdapter = {
6
6
  apiKeyEnv: "ANTHROPIC_API_KEY",
7
7
  buildInvocation(prompt, options = {}) {
8
8
  const args = ["-p", "--output-format", "text"];
9
+ if (options.permissionMode === "read-only") {
10
+ // Deny rules are evaluated BEFORE the tool runs and hold in every permission
11
+ // mode, so this is a genuine harness-level restriction rather than advice —
12
+ // the strongest read-only lever of the five after codex's OS sandbox.
13
+ // Verified live: with this list the Write/Edit/Bash tools are absent from the
14
+ // session entirely, while normal verdict output is unaffected.
15
+ //
16
+ // GLUED (`--disallowedTools=<list>`) on purpose: the flag is variadic
17
+ // (`<tools...>`), so as a separate token it greedily consumes following
18
+ // non-flag argv entries — observed swallowing a positional prompt and
19
+ // killing the run. Gluing makes correctness a property of OUR argv rather
20
+ // than of argument order.
21
+ //
22
+ // Every name here must be a REAL tool: an unknown one only prints
23
+ // `Permission deny rule "X" matches no known tool` and silently protects
24
+ // nothing. `MultiEdit` was in this list and does not exist in current
25
+ // Claude Code — do not re-add a name without checking for that warning.
26
+ args.push("--disallowedTools=Write,Edit,NotebookEdit,Bash");
27
+ }
9
28
  if (options.model)
10
29
  args.push("--model", options.model);
11
30
  // No positional prompt: claude reads it from piped stdin in print mode.
@@ -1 +1 @@
1
- {"version":3,"file":"claude.js","sourceRoot":"","sources":["../../src/adapters/claude.ts"],"names":[],"mappings":"AAEA,MAAM,CAAC,MAAM,aAAa,GAAiB;IACzC,IAAI,EAAE,QAAQ;IACd,OAAO,EACL,kGAAkG;IACpG,MAAM,EAAE,QAAQ;IAChB,YAAY,EAAE,uBAAuB;IACrC,SAAS,EAAE,mBAAmB;IAC9B,eAAe,CAAC,MAAc,EAAE,UAA2B,EAAE;QAC3D,MAAM,IAAI,GAAG,CAAC,IAAI,EAAE,iBAAiB,EAAE,MAAM,CAAC,CAAC;QAC/C,IAAI,OAAO,CAAC,KAAK;YAAE,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,OAAO,CAAC,KAAK,CAAC,CAAC;QACvD,wEAAwE;QACxE,OAAO,EAAE,IAAI,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC;IACjC,CAAC;CACF,CAAC"}
1
+ {"version":3,"file":"claude.js","sourceRoot":"","sources":["../../src/adapters/claude.ts"],"names":[],"mappings":"AAEA,MAAM,CAAC,MAAM,aAAa,GAAiB;IACzC,IAAI,EAAE,QAAQ;IACd,OAAO,EACL,kGAAkG;IACpG,MAAM,EAAE,QAAQ;IAChB,YAAY,EAAE,uBAAuB;IACrC,SAAS,EAAE,mBAAmB;IAC9B,eAAe,CAAC,MAAc,EAAE,UAA2B,EAAE;QAC3D,MAAM,IAAI,GAAG,CAAC,IAAI,EAAE,iBAAiB,EAAE,MAAM,CAAC,CAAC;QAC/C,IAAI,OAAO,CAAC,cAAc,KAAK,WAAW,EAAE,CAAC;YAC3C,6EAA6E;YAC7E,4EAA4E;YAC5E,sEAAsE;YACtE,8EAA8E;YAC9E,+DAA+D;YAC/D,EAAE;YACF,sEAAsE;YACtE,wEAAwE;YACxE,sEAAsE;YACtE,0EAA0E;YAC1E,0BAA0B;YAC1B,EAAE;YACF,kEAAkE;YAClE,yEAAyE;YACzE,sEAAsE;YACtE,wEAAwE;YACxE,IAAI,CAAC,IAAI,CAAC,gDAAgD,CAAC,CAAC;QAC9D,CAAC;QACD,IAAI,OAAO,CAAC,KAAK;YAAE,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,OAAO,CAAC,KAAK,CAAC,CAAC;QACvD,wEAAwE;QACxE,OAAO,EAAE,IAAI,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC;IACjC,CAAC;CACF,CAAC"}
@@ -8,6 +8,14 @@ export const codexAdapter = {
8
8
  const args = ["exec", "--skip-git-repo-check"];
9
9
  if (options.model)
10
10
  args.push("--model", options.model);
11
+ // LOAD-BEARING. `codex exec` defaults to a **read-only** sandbox, so without
12
+ // an explicit `-s` this tool silently reported success while writing nothing
13
+ // — verified live: it answered "DONE" and created no file anywhere on disk.
14
+ // `workspace-write` is the least-privilege setting that still delivers what
15
+ // the tool description promises. `--dangerously-bypass-approvals-and-sandbox`
16
+ // is deliberately NEVER emitted: it nullifies `--sandbox` entirely.
17
+ // Emitted BEFORE the "-" sentinel so the prompt is never taken positionally.
18
+ args.push("-s", options.permissionMode === "read-only" ? "read-only" : "workspace-write");
11
19
  // "-" = read the prompt from stdin (documented Codex CLI sentinel).
12
20
  args.push("-");
13
21
  return { args, stdin: prompt };
@@ -1 +1 @@
1
- {"version":3,"file":"codex.js","sourceRoot":"","sources":["../../src/adapters/codex.ts"],"names":[],"mappings":"AAEA,MAAM,CAAC,MAAM,YAAY,GAAiB;IACxC,IAAI,EAAE,OAAO;IACb,OAAO,EACL,qIAAqI;IACvI,MAAM,EAAE,OAAO;IACf,YAAY,EAAE,aAAa;IAC3B,SAAS,EAAE,gBAAgB;IAC3B,eAAe,CAAC,MAAc,EAAE,UAA2B,EAAE;QAC3D,MAAM,IAAI,GAAG,CAAC,MAAM,EAAE,uBAAuB,CAAC,CAAC;QAC/C,IAAI,OAAO,CAAC,KAAK;YAAE,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,OAAO,CAAC,KAAK,CAAC,CAAC;QACvD,oEAAoE;QACpE,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QACf,OAAO,EAAE,IAAI,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC;IACjC,CAAC;CACF,CAAC"}
1
+ {"version":3,"file":"codex.js","sourceRoot":"","sources":["../../src/adapters/codex.ts"],"names":[],"mappings":"AAEA,MAAM,CAAC,MAAM,YAAY,GAAiB;IACxC,IAAI,EAAE,OAAO;IACb,OAAO,EACL,qIAAqI;IACvI,MAAM,EAAE,OAAO;IACf,YAAY,EAAE,aAAa;IAC3B,SAAS,EAAE,gBAAgB;IAC3B,eAAe,CAAC,MAAc,EAAE,UAA2B,EAAE;QAC3D,MAAM,IAAI,GAAG,CAAC,MAAM,EAAE,uBAAuB,CAAC,CAAC;QAC/C,IAAI,OAAO,CAAC,KAAK;YAAE,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,OAAO,CAAC,KAAK,CAAC,CAAC;QACvD,6EAA6E;QAC7E,6EAA6E;QAC7E,4EAA4E;QAC5E,4EAA4E;QAC5E,8EAA8E;QAC9E,oEAAoE;QACpE,6EAA6E;QAC7E,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,OAAO,CAAC,cAAc,KAAK,WAAW,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,iBAAiB,CAAC,CAAC;QAC1F,oEAAoE;QACpE,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QACf,OAAO,EAAE,IAAI,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC;IACjC,CAAC;CACF,CAAC"}
@@ -17,13 +17,27 @@ export const cursorAdapter = {
17
17
  /^retriable\s*error:\s*connection stalled\b/i,
18
18
  ],
19
19
  buildInvocation(prompt, options = {}) {
20
- // --force: cursor-agent otherwise blocks on an interactive permission prompt
21
- // ("Workspace Trust Required" / command approval) in any directory it has not
22
- // seen before, which for a server invoked against arbitrary cwds is most of
23
- // them. There is no stdin to answer it with in print mode, so the run would
24
- // hang until the timeout kills it. (`--trust` is NOT a cursor-agent flag —
25
- // passing it makes the CLI exit 1 with "unknown option '--trust'".)
26
- const args = ["-p", "--output-format", "text", "--force"];
20
+ const args = ["-p", "--output-format", "text"];
21
+ if (options.permissionMode === "read-only") {
22
+ // Reviewer role. `--mode plan` answers without editing, and `--trust` is
23
+ // REQUIRED alongside it: without a trust/force flag cursor-agent refuses to
24
+ // proceed in an unfamiliar directory, printing "Pass --trust, --yolo, or -f
25
+ // if you trust this directory" and returning NO answer at all (exit 0).
26
+ // `--force` is deliberately omitted here — it is the write grant.
27
+ // ADVISORY ONLY: plan mode is not an enforced sandbox (Cursor staff have
28
+ // confirmed "plan mode is not respected"), so do not describe a cursor
29
+ // reviewer as sandboxed. It narrows behavior; it does not guarantee it.
30
+ args.push("--trust", "--mode", "plan");
31
+ }
32
+ else {
33
+ // --force: cursor-agent otherwise blocks on an interactive permission prompt
34
+ // ("Workspace Trust Required" / command approval) in any directory it has not
35
+ // seen before, which for a server invoked against arbitrary cwds is most of
36
+ // them. There is no stdin to answer it with in print mode, so the run would
37
+ // hang until the timeout kills it. Verified live: with `--force` on a normal
38
+ // path the agent does create files.
39
+ args.push("--force");
40
+ }
27
41
  if (options.model)
28
42
  args.push("--model", options.model);
29
43
  // No positional prompt: cursor-agent reads it from piped stdin in print mode.
@@ -1 +1 @@
1
- {"version":3,"file":"cursor.js","sourceRoot":"","sources":["../../src/adapters/cursor.ts"],"names":[],"mappings":"AAEA,MAAM,CAAC,MAAM,aAAa,GAAiB;IACzC,IAAI,EAAE,QAAQ;IACd,OAAO,EACL,oIAAoI;IACtI,MAAM,EAAE,cAAc;IACtB,YAAY,EAAE,oBAAoB;IAClC,SAAS,EAAE,gBAAgB;IAC3B,kFAAkF;IAClF,kFAAkF;IAClF,2EAA2E;IAC3E,qEAAqE;IACrE,SAAS,EAAE,CAAC,QAAQ,CAAC;IACrB,+EAA+E;IAC/E,0EAA0E;IAC1E,eAAe,EAAE;QACf,4DAA4D;QAC5D,yBAAyB;QACzB,6CAA6C;KAC9C;IACD,eAAe,CAAC,MAAc,EAAE,UAA2B,EAAE;QAC3D,6EAA6E;QAC7E,8EAA8E;QAC9E,4EAA4E;QAC5E,4EAA4E;QAC5E,2EAA2E;QAC3E,oEAAoE;QACpE,MAAM,IAAI,GAAG,CAAC,IAAI,EAAE,iBAAiB,EAAE,MAAM,EAAE,SAAS,CAAC,CAAC;QAC1D,IAAI,OAAO,CAAC,KAAK;YAAE,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,OAAO,CAAC,KAAK,CAAC,CAAC;QACvD,8EAA8E;QAC9E,OAAO,EAAE,IAAI,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC;IACjC,CAAC;CACF,CAAC"}
1
+ {"version":3,"file":"cursor.js","sourceRoot":"","sources":["../../src/adapters/cursor.ts"],"names":[],"mappings":"AAEA,MAAM,CAAC,MAAM,aAAa,GAAiB;IACzC,IAAI,EAAE,QAAQ;IACd,OAAO,EACL,oIAAoI;IACtI,MAAM,EAAE,cAAc;IACtB,YAAY,EAAE,oBAAoB;IAClC,SAAS,EAAE,gBAAgB;IAC3B,kFAAkF;IAClF,kFAAkF;IAClF,2EAA2E;IAC3E,qEAAqE;IACrE,SAAS,EAAE,CAAC,QAAQ,CAAC;IACrB,+EAA+E;IAC/E,0EAA0E;IAC1E,eAAe,EAAE;QACf,4DAA4D;QAC5D,yBAAyB;QACzB,6CAA6C;KAC9C;IACD,eAAe,CAAC,MAAc,EAAE,UAA2B,EAAE;QAC3D,MAAM,IAAI,GAAG,CAAC,IAAI,EAAE,iBAAiB,EAAE,MAAM,CAAC,CAAC;QAC/C,IAAI,OAAO,CAAC,cAAc,KAAK,WAAW,EAAE,CAAC;YAC3C,yEAAyE;YACzE,4EAA4E;YAC5E,4EAA4E;YAC5E,wEAAwE;YACxE,kEAAkE;YAClE,yEAAyE;YACzE,uEAAuE;YACvE,wEAAwE;YACxE,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,QAAQ,EAAE,MAAM,CAAC,CAAC;QACzC,CAAC;aAAM,CAAC;YACN,6EAA6E;YAC7E,8EAA8E;YAC9E,4EAA4E;YAC5E,4EAA4E;YAC5E,6EAA6E;YAC7E,oCAAoC;YACpC,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;QACvB,CAAC;QACD,IAAI,OAAO,CAAC,KAAK;YAAE,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,OAAO,CAAC,KAAK,CAAC,CAAC;QACvD,8EAA8E;QAC9E,OAAO,EAAE,IAAI,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC;IACjC,CAAC;CACF,CAAC"}
@@ -13,6 +13,14 @@ export const opencodeAdapter = {
13
13
  // dash-leading prompt could be parsed as a flag by its CLI.
14
14
  throw new Error("opencode cannot safely run prompts that start with '-' (its CLI may parse them as flags). Rephrase the prompt to start with a word, e.g. \"explain --help ...\".");
15
15
  }
16
+ // NOTE: `permissionMode` is deliberately IGNORED here — opencode exposes no
17
+ // read-only lever on `run`. `--agent <name>` could point at a restricted
18
+ // agent, but that agent must already exist in the operator's own config, so
19
+ // this adapter cannot rely on it. `--auto` is also never emitted: opencode
20
+ // already writes files without it (verified), so it would only widen
21
+ // permissions. Consequence: an opencode REVIEWER is not restricted. That gap
22
+ // is documented rather than papered over — see the enforcement table in
23
+ // AGENTS.md.
16
24
  const args = ["run"];
17
25
  if (options.model)
18
26
  args.push("--model", options.model);
@@ -1 +1 @@
1
- {"version":3,"file":"opencode.js","sourceRoot":"","sources":["../../src/adapters/opencode.ts"],"names":[],"mappings":"AAEA,MAAM,CAAC,MAAM,eAAe,GAAiB;IAC3C,IAAI,EAAE,UAAU;IAChB,OAAO,EACL,mMAAmM;IACrM,MAAM,EAAE,UAAU;IAClB,+EAA+E;IAC/E,+EAA+E;IAC/E,SAAS,EAAE,CAAC,QAAQ,CAAC;IACrB,mBAAmB,EAAE,IAAI;IACzB,YAAY,EAAE,qBAAqB;IACnC,eAAe,CAAC,MAAc,EAAE,UAA2B,EAAE;QAC3D,IAAI,MAAM,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;YAC3B,oEAAoE;YACpE,4DAA4D;YAC5D,MAAM,IAAI,KAAK,CACb,kKAAkK,CACnK,CAAC;QACJ,CAAC;QACD,MAAM,IAAI,GAAG,CAAC,KAAK,CAAC,CAAC;QACrB,IAAI,OAAO,CAAC,KAAK;YAAE,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,OAAO,CAAC,KAAK,CAAC,CAAC;QACvD,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QAClB,OAAO,EAAE,IAAI,EAAE,CAAC;IAClB,CAAC;CACF,CAAC"}
1
+ {"version":3,"file":"opencode.js","sourceRoot":"","sources":["../../src/adapters/opencode.ts"],"names":[],"mappings":"AAEA,MAAM,CAAC,MAAM,eAAe,GAAiB;IAC3C,IAAI,EAAE,UAAU;IAChB,OAAO,EACL,mMAAmM;IACrM,MAAM,EAAE,UAAU;IAClB,+EAA+E;IAC/E,+EAA+E;IAC/E,SAAS,EAAE,CAAC,QAAQ,CAAC;IACrB,mBAAmB,EAAE,IAAI;IACzB,YAAY,EAAE,qBAAqB;IACnC,eAAe,CAAC,MAAc,EAAE,UAA2B,EAAE;QAC3D,IAAI,MAAM,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;YAC3B,oEAAoE;YACpE,4DAA4D;YAC5D,MAAM,IAAI,KAAK,CACb,kKAAkK,CACnK,CAAC;QACJ,CAAC;QACD,4EAA4E;QAC5E,yEAAyE;QACzE,4EAA4E;QAC5E,2EAA2E;QAC3E,qEAAqE;QACrE,6EAA6E;QAC7E,wEAAwE;QACxE,aAAa;QACb,MAAM,IAAI,GAAG,CAAC,KAAK,CAAC,CAAC;QACrB,IAAI,OAAO,CAAC,KAAK;YAAE,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,OAAO,CAAC,KAAK,CAAC,CAAC;QACvD,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QAClB,OAAO,EAAE,IAAI,EAAE,CAAC;IAClB,CAAC;CACF,CAAC"}
package/dist/confirm.d.ts CHANGED
@@ -27,6 +27,7 @@ export declare function buildRunAllMessage(agentNames: string[], opts: {
27
27
  prompt: string;
28
28
  cwd?: string;
29
29
  model?: string;
30
+ models?: Record<string, string>;
30
31
  }): string;
31
32
  /** requestedSchema for elicitInput: a single required boolean the client renders.
32
33
  * Typed against the SDK so a malformed edit fails typecheck (drift-safe). The
package/dist/confirm.js CHANGED
@@ -44,6 +44,12 @@ export function buildRunAllMessage(agentNames, opts) {
44
44
  // it is attacker-influenceable and must not be hidden from the human gate.
45
45
  if (opts.model !== undefined)
46
46
  lines.push(`model: ${opts.model}`);
47
+ // Same reasoning for the per-agent overrides: each one ends up as `--model
48
+ // <value>` on some CLI's argv, so every one of them must be visible here.
49
+ const entries = Object.entries(opts.models ?? {});
50
+ if (entries.length > 0) {
51
+ lines.push(`models: ${entries.map(([agent, id]) => `${agent}=${id}`).join(", ")}`);
52
+ }
47
53
  return lines.join("\n");
48
54
  }
49
55
  /** requestedSchema for elicitInput: a single required boolean the client renders.
@@ -1 +1 @@
1
- {"version":3,"file":"confirm.js","sourceRoot":"","sources":["../src/confirm.ts"],"names":[],"mappings":"AAIA,MAAM,QAAQ,GAAG,IAAI,GAAG,CAAC,CAAC,GAAG,EAAE,MAAM,EAAE,IAAI,EAAE,KAAK,CAAC,CAAC,CAAC;AAYrD,MAAM,UAAU,WAAW,CAAC,MAAyB,OAAO,CAAC,GAAG;IAC9D,MAAM,GAAG,GAAG,GAAG,CAAC,WAAW,EAAE,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;IAClD,IAAI,GAAG,KAAK,SAAS;QAAE,OAAO,KAAK,CAAC;IACpC,IAAI,GAAG,KAAK,QAAQ;QAAE,OAAO,QAAQ,CAAC;IACtC,OAAO,QAAQ,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC;AAC1C,CAAC;AAED,0EAA0E;AAC1E,MAAM,UAAU,cAAc,CAAC,MAAyB,OAAO,CAAC,GAAG;IACjE,OAAO,WAAW,CAAC,GAAG,CAAC,KAAK,KAAK,CAAC;AACpC,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,QAAQ,CAAC,KAAa,EAAE,GAAW;IACjD,IAAI,GAAG,GAAG,CAAC;QAAE,OAAO,EAAE,CAAC;IACvB,IAAI,KAAK,CAAC,MAAM,IAAI,GAAG;QAAE,OAAO,KAAK,CAAC;IACtC,OAAO,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,GAAG,CAAC,CAAC,GAAG,GAAG,CAAC;AACvC,CAAC;AAED,MAAM,UAAU,GAAG,GAAG,CAAC;AAEvB,oFAAoF;AACpF,MAAM,UAAU,mBAAmB,CACjC,SAAiB,EACjB,IAAsD;IAEtD,MAAM,KAAK,GAAG,CAAC,cAAc,SAAS,IAAI,EAAE,WAAW,QAAQ,CAAC,IAAI,CAAC,MAAM,EAAE,UAAU,CAAC,EAAE,CAAC,CAAC;IAC5F,IAAI,IAAI,CAAC,GAAG,KAAK,SAAS;QAAE,KAAK,CAAC,IAAI,CAAC,QAAQ,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC;IAC3D,IAAI,IAAI,CAAC,KAAK,KAAK,SAAS;QAAE,KAAK,CAAC,IAAI,CAAC,UAAU,IAAI,CAAC,KAAK,EAAE,CAAC,CAAC;IACjE,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAC1B,CAAC;AAED,kFAAkF;AAClF,MAAM,UAAU,kBAAkB,CAChC,UAAoB,EACpB,IAAsD;IAEtD,MAAM,KAAK,GAAG;QACZ,mBAAmB,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI;QAC5C,WAAW,QAAQ,CAAC,IAAI,CAAC,MAAM,EAAE,UAAU,CAAC,EAAE;KAC/C,CAAC;IACF,IAAI,IAAI,CAAC,GAAG,KAAK,SAAS;QAAE,KAAK,CAAC,IAAI,CAAC,QAAQ,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC;IAC3D,4EAA4E;IAC5E,2EAA2E;IAC3E,IAAI,IAAI,CAAC,KAAK,KAAK,SAAS;QAAE,KAAK,CAAC,IAAI,CAAC,UAAU,IAAI,CAAC,KAAK,EAAE,CAAC,CAAC;IACjE,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAC1B,CAAC;AAED;;0EAE0E;AAC1E,MAAM,CAAC,MAAM,cAAc,GAA+C;IACxE,IAAI,EAAE,QAAQ;IACd,UAAU,EAAE;QACV,OAAO,EAAE;YACP,IAAI,EAAE,SAAS;YACf,KAAK,EAAE,iBAAiB;YACxB,WAAW,EAAE,oCAAoC;SAClD;KACF;IACD,QAAQ,EAAE,CAAC,SAAS,CAAC;CACtB,CAAC;AAEF,uFAAuF;AACvF,MAAM,CAAC,MAAM,WAAW,GACtB,kFAAkF,CAAC"}
1
+ {"version":3,"file":"confirm.js","sourceRoot":"","sources":["../src/confirm.ts"],"names":[],"mappings":"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"}
@@ -65,6 +65,6 @@ export type ResolveBinary = (binary: string) => string | undefined;
65
65
  * Probes one adapter. Never throws: a probe failure is data, not an exception.
66
66
  * The probe command is per-adapter because the CLIs disagree — `opencode models`
67
67
  * lists models, `codex models` is not a subcommand at all — so there is no single
68
- * command that proves usability across all four.
68
+ * command that proves usability across every wrapped CLI.
69
69
  */
70
70
  export declare function checkAvailability(adapter: AgentAdapter, exec: Exec, resolve?: ResolveBinary): Promise<AgentAvailability>;
package/dist/registry.js CHANGED
@@ -1,12 +1,13 @@
1
1
  import { accessSync, constants, statSync } from "node:fs";
2
2
  import { delimiter, isAbsolute, join } from "node:path";
3
+ import { agyAdapter } from "./adapters/agy.js";
3
4
  import { claudeAdapter } from "./adapters/claude.js";
4
5
  import { codexAdapter } from "./adapters/codex.js";
5
6
  import { cursorAdapter } from "./adapters/cursor.js";
6
7
  import { opencodeAdapter } from "./adapters/opencode.js";
7
8
  import { classifyFailure } from "./failure.js";
8
9
  export function allAdapters() {
9
- return [codexAdapter, cursorAdapter, opencodeAdapter, claudeAdapter];
10
+ return [codexAdapter, cursorAdapter, opencodeAdapter, claudeAdapter, agyAdapter];
10
11
  }
11
12
  /**
12
13
  * Union of every adapter's credential env var, DERIVED from the adapter list so a
@@ -122,7 +123,7 @@ function result(name, installed, usable, reason) {
122
123
  * Probes one adapter. Never throws: a probe failure is data, not an exception.
123
124
  * The probe command is per-adapter because the CLIs disagree — `opencode models`
124
125
  * lists models, `codex models` is not a subcommand at all — so there is no single
125
- * command that proves usability across all four.
126
+ * command that proves usability across every wrapped CLI.
126
127
  */
127
128
  export async function checkAvailability(adapter, exec, resolve = resolveOnPath) {
128
129
  if (resolve(adapter.binary) === undefined) {
@@ -1 +1 @@
1
- {"version":3,"file":"registry.js","sourceRoot":"","sources":["../src/registry.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"registry.js","sourceRoot":"","sources":["../src/registry.ts"],"names":[],"mappings":"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"}
package/dist/server.js CHANGED
@@ -33,7 +33,10 @@ async function runAdapter(adapter, exec, params, onActivity) {
33
33
  try {
34
34
  // Inside the try so a buildInvocation throw (e.g. opencode's dash-guard) is
35
35
  // audited too, rather than escaping with no run-log trace.
36
- const invocation = adapter.buildInvocation(params.prompt, { model: params.model });
36
+ const invocation = adapter.buildInvocation(params.prompt, {
37
+ model: params.model,
38
+ permissionMode: params.permissionMode,
39
+ });
37
40
  const result = await exec(adapter.binary, invocation.args, {
38
41
  cwd: params.cwd,
39
42
  timeoutMs: params.timeoutMs,
@@ -99,12 +102,52 @@ function makeProgressEmitter(extra, label) {
99
102
  * all pass.
100
103
  */
101
104
  export const MODEL_RE = /^[A-Za-z0-9][A-Za-z0-9._:/-]{0,127}$/;
102
- const modelArg = z
103
- .string()
104
- .refine((v) => MODEL_RE.test(v), {
105
+ const modelValue = z.string().refine((v) => MODEL_RE.test(v), {
105
106
  message: "invalid model id: must start with a letter or digit and contain only letters, digits, and . _ : / - (≤128 chars). A flag-shaped value (leading '-') is rejected to prevent CLI argument injection.",
106
- })
107
- .optional();
107
+ });
108
+ const modelArg = modelValue.optional();
109
+ /**
110
+ * Per-agent model overrides, `{ "<agent>": "<model id>" }`. Every VALUE goes
111
+ * through the same `MODEL_RE` allowlist as the scalar `model` — a map must not
112
+ * become a hole in the argument-injection defence. Unknown KEYS are rejected in
113
+ * the handler (which knows the enabled set) rather than here.
114
+ *
115
+ * This exists because model namespaces do NOT overlap between agents — `o3` is
116
+ * meaningless to `agy`, `gemini-3.6-flash-low` is meaningless to `codex` — so a
117
+ * single scalar `model` can be valid for at most one agent in a fan-out.
118
+ */
119
+ const modelsArg = z.record(z.string(), modelValue).optional();
120
+ /** `models[agent]` wins over the shared `model`; undefined means the CLI's default. */
121
+ function resolveModel(agentName, models, model) {
122
+ // `Object.hasOwn`, not a bare lookup: `models` is caller-controlled, so a bare
123
+ // `models[agentName]` would consult Object.prototype. Safe today only because
124
+ // no adapter is named `toString`/`constructor`/`valueOf` — this makes the
125
+ // guarantee explicit instead of resting on that coincidence.
126
+ if (models && Object.hasOwn(models, agentName))
127
+ return models[agentName];
128
+ return model;
129
+ }
130
+ /**
131
+ * Reject agent names that are not enabled, so a typo fails fast with the valid
132
+ * list instead of silently doing nothing — the same contract `MCP_AGENTS` has.
133
+ *
134
+ * KNOWN LIMIT, one key only: `z.record` rebuilds its output by assigning each
135
+ * key onto a fresh object, and assigning `__proto__` invokes the inherited
136
+ * setter — so a literal `{"__proto__": …}` key is gone before this runs and is
137
+ * silently ignored rather than reported. Verified that `toString`,
138
+ * `constructor` and `valueOf` all survive intact and ARE rejected here.
139
+ *
140
+ * Left as-is deliberately: `__proto__` can never name an agent, so it cannot
141
+ * select a model and no value from it reaches argv — the only cost is a missing
142
+ * error message on an input nobody types by accident. The alternative
143
+ * (hand-rolling the schema with `z.custom`) makes the tool's inputSchema
144
+ * unrepresentable in JSON Schema — "Custom types cannot be represented in JSON
145
+ * Schema" — which breaks `tools/list` for every MCP client. That cure is far
146
+ * worse than the disease.
147
+ */
148
+ function unknownAgentKeys(models, known) {
149
+ return Object.keys(models ?? {}).filter((k) => !known.includes(k));
150
+ }
108
151
  const agentInputSchema = {
109
152
  prompt: z.string().describe("The task or question for the agent, in natural language."),
110
153
  model: modelArg.describe('Optional model id passed through to the CLI, overriding that CLI\'s configured/default model (e.g. "o3"). Model names are agent-specific. Must match [A-Za-z0-9][A-Za-z0-9._:/-]{0,127} — a flag-shaped value is rejected.'),
@@ -223,7 +266,8 @@ resolve = resolveOnPath) {
223
266
  prompt: z
224
267
  .string()
225
268
  .describe("The task or question to send to every agent, in natural language."),
226
- model: modelArg.describe("Optional model id override passed through to each agent CLI. Names are agent-specific. Must match [A-Za-z0-9][A-Za-z0-9._:/-]{0,127} — a flag-shaped value is rejected."),
269
+ model: modelArg.describe("Optional model id applied to EVERY agent as a fallback. Model namespaces do not overlap between agents, so a single value is usually valid for only one of them — prefer `models` for a fan-out. Must match [A-Za-z0-9][A-Za-z0-9._:/-]{0,127} — a flag-shaped value is rejected."),
270
+ models: modelsArg.describe('Per-agent model overrides, e.g. {"codex":"o3","agy":"gemini-3.6-flash-low"}. Takes precedence over `model` for the agents named; any agent not listed falls back to `model`, then to its own CLI default. Keys must be enabled agent names (an unknown name is rejected with the valid list). Each value must match [A-Za-z0-9][A-Za-z0-9._:/-]{0,127}.'),
227
271
  cwd: z
228
272
  .string()
229
273
  .optional()
@@ -242,15 +286,37 @@ resolve = resolveOnPath) {
242
286
  .describe("Per-agent idle/inactivity timeout in milliseconds — killed only if the agent produces NO output for this long (resets on each output chunk; default 300000 = 5 minutes)."),
243
287
  },
244
288
  annotations: { readOnlyHint: false, destructiveHint: true, openWorldHint: true },
245
- }, async ({ prompt, model, cwd, timeoutMs, idleTimeoutMs }, extra) => {
246
- if (!(await confirmOrCancel(buildRunAllMessage(adapters.map((a) => a.name), { prompt, cwd, model })))) {
289
+ }, async ({ prompt, model, models, cwd, timeoutMs, idleTimeoutMs }, extra) => {
290
+ const names = adapters.map((a) => a.name);
291
+ const unknown = unknownAgentKeys(models, names);
292
+ if (unknown.length > 0) {
293
+ return {
294
+ isError: true,
295
+ content: [
296
+ {
297
+ type: "text",
298
+ text: `run_all: unknown agent${unknown.length > 1 ? "s" : ""} in \`models\`: ${unknown.join(", ")}; enabled agents: ${names.join(", ")}`,
299
+ },
300
+ ],
301
+ };
302
+ }
303
+ if (!(await confirmOrCancel(
304
+ // Per-agent models are as attacker-influenceable as the scalar and are
305
+ // forwarded to a CLI, so the human gate must show them too.
306
+ buildRunAllMessage(names, { prompt, cwd, model, models })))) {
247
307
  return { isError: true, content: [{ type: "text", text: `run_all: ${CANCEL_TAIL}` }] };
248
308
  }
249
309
  // One shared emitter for the whole batch: a single progressToken and a
250
310
  // single monotonic counter, so 4 concurrent adapters cannot emit colliding
251
311
  // progress values.
252
312
  const onActivity = makeProgressEmitter(extra, "run_all");
253
- const settled = await Promise.allSettled(adapters.map((adapter) => runAdapter(adapter, exec, { prompt, model, cwd, timeoutMs, idleTimeoutMs }, onActivity)));
313
+ const settled = await Promise.allSettled(adapters.map((adapter) => runAdapter(adapter, exec, {
314
+ prompt,
315
+ model: resolveModel(adapter.name, models, model),
316
+ cwd,
317
+ timeoutMs,
318
+ idleTimeoutMs,
319
+ }, onActivity)));
254
320
  const content = settled.map((outcome, i) => {
255
321
  const adapter = adapters[i];
256
322
  const name = adapter.name;
@@ -273,11 +339,17 @@ resolve = resolveOnPath) {
273
339
  reviewer: z.string().describe("Adapter name of the agent that judges the change"),
274
340
  prompt: z.string().describe("Task or question to send to the runner agent"),
275
341
  cwd: z.string().describe("Git working tree the runner operates in (REQUIRED)"),
276
- model: modelArg.describe("Model override passed to both agents. Must match [A-Za-z0-9][A-Za-z0-9._:/-]{0,127} — a flag-shaped value is rejected."),
342
+ model: modelArg.describe("Fallback model for BOTH agents. Only useful when runner and reviewer are the same agent — model namespaces do not overlap, so one value cannot be valid for two different CLIs. For the cross-agent setup this tool recommends, use `runnerModel` / `reviewerModel`. Must match [A-Za-z0-9][A-Za-z0-9._:/-]{0,127}."),
343
+ runnerModel: modelArg.describe("Model for the RUNNER agent, overriding `model`. Use this (not `model`) when runner and reviewer are different agents."),
344
+ reviewerModel: modelArg.describe("Model for the REVIEWER agent, overriding `model`. Lets you review with a different engine/tier than the one that wrote the change."),
277
345
  timeoutMs: z.number().int().positive().optional().describe("Per-agent timeout in ms"),
278
346
  },
279
347
  annotations: { readOnlyHint: false, destructiveHint: true, openWorldHint: true },
280
- }, async ({ runner, reviewer, prompt, cwd, model, timeoutMs }) => {
348
+ }, async ({ runner, reviewer, prompt, cwd, model, runnerModel, reviewerModel, timeoutMs }) => {
349
+ // Each role resolves independently: the whole point is that runner and
350
+ // reviewer are usually DIFFERENT CLIs with disjoint model namespaces.
351
+ const runnerModelId = runnerModel ?? model;
352
+ const reviewerModelId = reviewerModel ?? model;
281
353
  const runnerAdapter = adapters.find((a) => a.name === runner);
282
354
  const reviewerAdapter = adapters.find((a) => a.name === reviewer);
283
355
  if (!runnerAdapter || !reviewerAdapter) {
@@ -297,7 +369,10 @@ resolve = resolveOnPath) {
297
369
  ],
298
370
  };
299
371
  }
300
- if (!(await confirmOrCancel(`review_change: run ${runner} in ${cwd}, then review with ${reviewer}\nprompt: ${prompt}${model === undefined ? "" : `\nmodel: ${model}`}`))) {
372
+ if (!(await confirmOrCancel(
373
+ // Both resolved models are shown: they are attacker-influenceable and
374
+ // are forwarded to a CLI, so neither may be hidden from the human gate.
375
+ `review_change: run ${runner} in ${cwd}, then review with ${reviewer}\nprompt: ${prompt}${runnerModelId === undefined ? "" : `\nrunner model: ${runnerModelId}`}${reviewerModelId === undefined ? "" : `\nreviewer model: ${reviewerModelId}`}`))) {
301
376
  return {
302
377
  isError: true,
303
378
  content: [{ type: "text", text: `review_change: ${CANCEL_TAIL}` }],
@@ -346,7 +421,12 @@ resolve = resolveOnPath) {
346
421
  }
347
422
  let runnerResult;
348
423
  try {
349
- runnerResult = await runAdapter(runnerAdapter, exec, { prompt, model, cwd, timeoutMs });
424
+ runnerResult = await runAdapter(runnerAdapter, exec, {
425
+ prompt,
426
+ model: runnerModelId,
427
+ cwd,
428
+ timeoutMs,
429
+ });
350
430
  }
351
431
  catch (err) {
352
432
  const { message } = classifyFailure(runnerAdapter, { error: err });
@@ -446,9 +526,17 @@ resolve = resolveOnPath) {
446
526
  try {
447
527
  reviewResult = await runAdapter(reviewerAdapter, exec, {
448
528
  prompt: reviewPrompt,
449
- model,
529
+ model: reviewerModelId,
450
530
  cwd: reviewerCwd,
451
531
  timeoutMs,
532
+ // The reviewer only needs to READ the fenced diff and return a verdict,
533
+ // yet its prompt is the most attacker-influenced input in the server.
534
+ // So it runs least-privilege. How much that actually BUYS differs per
535
+ // CLI — codex gets an OS sandbox, claude gets harness-level deny rules,
536
+ // cursor/agy get advisory narrowing, and opencode gets nothing at all.
537
+ // Defense-in-depth alongside the nonce fence and the temp cwd; for three
538
+ // of the five this is narrowing, not a guarantee. See AGENTS.md.
539
+ permissionMode: "read-only",
452
540
  });
453
541
  }
454
542
  catch (err) {
@@ -1 +1 @@
1
- {"version":3,"file":"server.js","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"server.js","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAC5C,OAAO,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAC1C,OAAO,EAAE,OAAO,EAAE,EAAE,EAAE,MAAM,kBAAkB,CAAC;AAC/C,OAAO,EAAE,MAAM,EAAE,MAAM,SAAS,CAAC;AACjC,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACjC,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AACpE,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,UAAU,EAA8B,gBAAgB,EAAE,MAAM,WAAW,CAAC;AACrF,OAAO,EACL,WAAW,EACX,mBAAmB,EACnB,kBAAkB,EAClB,cAAc,EACd,WAAW,GACZ,MAAM,cAAc,CAAC;AACtB,OAAO,EAAE,eAAe,EAAE,MAAM,cAAc,CAAC;AAC/C,OAAO,EAAE,SAAS,EAAE,aAAa,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AACnE,OAAO,EACL,iBAAiB,EACjB,mBAAmB,EACnB,aAAa,GAEd,MAAM,eAAe,CAAC;AAIvB,MAAM,EAAE,OAAO,EAAE,GAAG,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,iBAAiB,CAAwB,CAAC;AAE7F;;;;;;GAMG;AACH,KAAK,UAAU,UAAU,CACvB,OAAqB,EACrB,IAAU,EACV,MAQC,EACD,UAAuB;IAEvB,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;IACzB,uEAAuE;IACvE,+EAA+E;IAC/E,2EAA2E;IAC3E,MAAM,KAAK,GAAG,CAAC,MAAgE,EAAE,EAAE,CACjF,OAAO,CAAC,KAAK,CACX,IAAI,CAAC,SAAS,CAAC;QACb,GAAG,EAAE,WAAW;QAChB,KAAK,EAAE,OAAO,CAAC,IAAI;QACnB,GAAG,EAAE,MAAM,CAAC,GAAG,IAAI,IAAI;QACvB,EAAE,EAAE,IAAI,CAAC,GAAG,EAAE,GAAG,KAAK;QACtB,GAAG,MAAM;KACV,CAAC,CACH,CAAC;IACJ,IAAI,CAAC;QACH,4EAA4E;QAC5E,2DAA2D;QAC3D,MAAM,UAAU,GAAG,OAAO,CAAC,eAAe,CAAC,MAAM,CAAC,MAAM,EAAE;YACxD,KAAK,EAAE,MAAM,CAAC,KAAK;YACnB,cAAc,EAAE,MAAM,CAAC,cAAc;SACtC,CAAC,CAAC;QACH,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,UAAU,CAAC,IAAI,EAAE;YACzD,GAAG,EAAE,MAAM,CAAC,GAAG;YACf,SAAS,EAAE,MAAM,CAAC,SAAS;YAC3B,aAAa,EAAE,MAAM,CAAC,aAAa;YACnC,KAAK,EAAE,UAAU,CAAC,KAAK;YACvB,UAAU;YACV,eAAe,EAAE,OAAO,CAAC,eAAe;YACxC,iEAAiE;YACjE,2EAA2E;YAC3E,2EAA2E;YAC3E,6CAA6C;YAC7C,YAAY,EAAE,mBAAmB,CAAC,OAAO,CAAC;SAC3C,CAAC,CAAC;QACH,KAAK,CAAC,EAAE,QAAQ,EAAE,MAAM,CAAC,QAAQ,EAAE,EAAE,EAAE,MAAM,CAAC,QAAQ,KAAK,CAAC,EAAE,CAAC,CAAC;QAChE,OAAO,MAAM,CAAC;IAChB,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,MAAM,IAAI,GAAG,GAAG,YAAY,KAAK,IAAI,MAAM,IAAI,GAAG,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC;QAChF,KAAK,CAAC,EAAE,QAAQ,EAAE,IAAI,EAAE,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;QAClD,MAAM,GAAG,CAAC;IACZ,CAAC;AACH,CAAC;AAgBD;;;;;;;;;;GAUG;AACH,SAAS,mBAAmB,CAC1B,KAAgC,EAChC,KAAa;IAEb,MAAM,aAAa,GAAG,KAAK,EAAE,KAAK,EAAE,aAAa,CAAC;IAClD,IAAI,aAAa,KAAK,SAAS;QAAE,OAAO,SAAS,CAAC;IAClD,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;IACzB,IAAI,WAAW,GAAG,CAAC,QAAQ,CAAC;IAC5B,IAAI,YAAY,GAAG,CAAC,CAAC;IACrB,OAAO,GAAG,EAAE;QACV,MAAM,UAAU,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,KAAK,CAAC,GAAG,IAAI,CAAC,CAAC;QAC3D,IAAI,UAAU,GAAG,WAAW,GAAG,EAAE;YAAE,OAAO;QAC1C,WAAW,GAAG,UAAU,CAAC;QACzB,MAAM,QAAQ,GAAG,IAAI,CAAC,GAAG,CAAC,YAAY,GAAG,CAAC,EAAE,UAAU,CAAC,CAAC;QACxD,YAAY,GAAG,QAAQ,CAAC;QACxB,KAAK,KAAM;aACR,gBAAgB,CAAC;YAChB,MAAM,EAAE,wBAAwB;YAChC,MAAM,EAAE,EAAE,aAAa,EAAE,QAAQ,EAAE,OAAO,EAAE,GAAG,KAAK,aAAa,UAAU,GAAG,EAAE;SACjF,CAAC;aACD,KAAK,CAAC,GAAG,EAAE,GAAE,CAAC,CAAC,CAAC;IACrB,CAAC,CAAC;AACJ,CAAC;AAED;;;;;;;;GAQG;AACH,MAAM,CAAC,MAAM,QAAQ,GAAG,sCAAsC,CAAC;AAC/D,MAAM,UAAU,GAAG,CAAC,CAAC,MAAM,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE;IAC5D,OAAO,EACL,oMAAoM;CACvM,CAAC,CAAC;AACH,MAAM,QAAQ,GAAG,UAAU,CAAC,QAAQ,EAAE,CAAC;AAEvC;;;;;;;;;GASG;AACH,MAAM,SAAS,GAAG,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,EAAE,EAAE,UAAU,CAAC,CAAC,QAAQ,EAAE,CAAC;AAE9D,uFAAuF;AACvF,SAAS,YAAY,CACnB,SAAiB,EACjB,MAA0C,EAC1C,KAAyB;IAEzB,+EAA+E;IAC/E,8EAA8E;IAC9E,0EAA0E;IAC1E,6DAA6D;IAC7D,IAAI,MAAM,IAAI,MAAM,CAAC,MAAM,CAAC,MAAM,EAAE,SAAS,CAAC;QAAE,OAAO,MAAM,CAAC,SAAS,CAAC,CAAC;IACzE,OAAO,KAAK,CAAC;AACf,CAAC;AAED;;;;;;;;;;;;;;;;;GAiBG;AACH,SAAS,gBAAgB,CAAC,MAA0C,EAAE,KAAe;IACnF,OAAO,MAAM,CAAC,IAAI,CAAC,MAAM,IAAI,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC;AACrE,CAAC;AAED,MAAM,gBAAgB,GAAG;IACvB,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,0DAA0D,CAAC;IACvF,KAAK,EAAE,QAAQ,CAAC,QAAQ,CACtB,4NAA4N,CAC7N;IACD,GAAG,EAAE,CAAC;SACH,MAAM,EAAE;SACR,QAAQ,EAAE;SACV,QAAQ,CACP,kLAAkL,CACnL;IACH,SAAS,EAAE,CAAC;SACT,MAAM,EAAE;SACR,GAAG,EAAE;SACL,QAAQ,EAAE;SACV,QAAQ,EAAE;SACV,QAAQ,CACP,4NAA4N,CAC7N;IACH,aAAa,EAAE,CAAC;SACb,MAAM,EAAE;SACR,GAAG,EAAE;SACL,QAAQ,EAAE;SACV,QAAQ,EAAE;SACV,QAAQ,CACP,qLAAqL,CACtL;CACJ,CAAC;AAEF,MAAM,UAAU,WAAW,CACzB,QAAwB,EACxB,OAAa,UAAU;AACvB,6EAA6E;AAC7E,sEAAsE;AACtE,UAAyB,aAAa;IAEtC,MAAM,MAAM,GAAG,IAAI,SAAS,CAAC,EAAE,IAAI,EAAE,eAAe,EAAE,OAAO,EAAE,CAAC,CAAC;IAEjE;;;;OAIG;IACH,0EAA0E;IAC1E,mEAAmE;IACnE,IAAI,oBAAoB,GAAG,KAAK,CAAC;IACjC,KAAK,UAAU,eAAe,CAAC,OAAe;QAC5C,MAAM,IAAI,GAAG,WAAW,EAAE,CAAC;QAC3B,IAAI,IAAI,KAAK,KAAK;YAAE,OAAO,IAAI,CAAC;QAChC,MAAM,IAAI,GAAG,MAAM,CAAC,MAAM,CAAC,qBAAqB,EAAE,CAAC;QACnD,6EAA6E;QAC7E,wDAAwD;QACxD,IAAI,IAAI,EAAE,WAAW,EAAE,IAAI,KAAK,SAAS,EAAE,CAAC;YAC1C,wEAAwE;YACxE,4EAA4E;YAC5E,8DAA8D;YAC9D,IAAI,IAAI,KAAK,QAAQ,EAAE,CAAC;gBACtB,OAAO,CAAC,KAAK,CACX,sGAAsG,CACvG,CAAC;gBACF,OAAO,KAAK,CAAC;YACf,CAAC;YACD,IAAI,CAAC,oBAAoB,EAAE,CAAC;gBAC1B,oBAAoB,GAAG,IAAI,CAAC;gBAC5B,OAAO,CAAC,KAAK,CACX,yJAAyJ,CAC1J,CAAC;YACJ,CAAC;YACD,OAAO,IAAI,CAAC;QACd,CAAC;QACD,IAAI,CAAC;YACH,MAAM,MAAM,GAA4B;gBACtC,IAAI,EAAE,MAAM;gBACZ,OAAO,EAAE,OAAO;gBAChB,eAAe,EAAE,cAAc;aAChC,CAAC;YACF,MAAM,CAAC,GAAG,MAAM,MAAM,CAAC,MAAM,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC;YAClD,OAAO,CAAC,CAAC,MAAM,KAAK,QAAQ,IAAI,CAAC,CAAC,OAAO,EAAE,OAAO,KAAK,IAAI,CAAC;QAC9D,CAAC;QAAC,MAAM,CAAC;YACP,OAAO,KAAK,CAAC;QACf,CAAC;IACH,CAAC;IAED,MAAM,CAAC,YAAY,CACjB,MAAM,EACN;QACE,WAAW,EAAE,gFAAgF;QAC7F,WAAW,EAAE,EAAE;QACf,WAAW,EAAE,EAAE,YAAY,EAAE,IAAI,EAAE,aAAa,EAAE,KAAK,EAAE;KAC1D,EACD,KAAK,IAAI,EAAE,CAAC,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC,EAAE,CAAC,CAC5D,CAAC;IAEF,MAAM,CAAC,YAAY,CACjB,aAAa,EACb;QACE,WAAW,EACT,wFAAwF;YACxF,0FAA0F;YAC1F,yFAAyF;YACzF,0FAA0F;YAC1F,uFAAuF;YACvF,6CAA6C;QAC/C,WAAW,EAAE,EAAE;QACf,WAAW,EAAE,EAAE,YAAY,EAAE,IAAI,EAAE,aAAa,EAAE,KAAK,EAAE;KAC1D,EACD,KAAK,IAAI,EAAE;QACT,MAAM,QAAQ,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,iBAAiB,CAAC,CAAC,EAAE,IAAI,EAAE,OAAO,CAAC,CAAC,CAAC,CAAC;QAC7F,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC;IAClF,CAAC,CACF,CAAC;IAEF,KAAK,MAAM,OAAO,IAAI,QAAQ,EAAE,CAAC;QAC/B,MAAM,CAAC,YAAY,CACjB,OAAO,CAAC,IAAI,EACZ;YACE,WAAW,EAAE,GAAG,OAAO,CAAC,OAAO,eAAe,OAAO,CAAC,MAAM,2aAA2a;YACve,WAAW,EAAE,gBAAgB;YAC7B,WAAW,EAAE,EAAE,YAAY,EAAE,KAAK,EAAE,eAAe,EAAE,IAAI,EAAE,aAAa,EAAE,IAAI,EAAE;SACjF,EACD,KAAK,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE,GAAG,EAAE,SAAS,EAAE,aAAa,EAAE,EAAE,KAAK,EAAE,EAAE;YAChE,IAAI,CAAC,CAAC,MAAM,eAAe,CAAC,mBAAmB,CAAC,OAAO,CAAC,IAAI,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE,GAAG,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;gBACxF,OAAO;oBACL,OAAO,EAAE,IAAI;oBACb,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,GAAG,OAAO,CAAC,IAAI,KAAK,WAAW,EAAE,EAAE,CAAC;iBACrE,CAAC;YACJ,CAAC;YACD,IAAI,CAAC;gBACH,MAAM,UAAU,GAAG,mBAAmB,CAAC,KAAK,EAAE,OAAO,CAAC,IAAI,CAAC,CAAC;gBAC5D,MAAM,MAAM,GAAG,MAAM,UAAU,CAC7B,OAAO,EACP,IAAI,EACJ,EAAE,MAAM,EAAE,KAAK,EAAE,GAAG,EAAE,SAAS,EAAE,aAAa,EAAE,EAChD,UAAU,CACX,CAAC;gBACF,IAAI,MAAM,CAAC,QAAQ,KAAK,CAAC,EAAE,CAAC;oBAC1B,MAAM,EAAE,OAAO,EAAE,GAAG,eAAe,CAAC,OAAO,EAAE,EAAE,MAAM,EAAE,CAAC,CAAC;oBACzD,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC;gBACvE,CAAC;gBACD,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,EAAE,CAAC,EAAE,CAAC;YACrE,CAAC;YAAC,OAAO,GAAG,EAAE,CAAC;gBACb,MAAM,EAAE,OAAO,EAAE,GAAG,eAAe,CAAC,OAAO,EAAE,EAAE,KAAK,EAAE,GAAG,EAAE,CAAC,CAAC;gBAC7D,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC;YACvE,CAAC;QACH,CAAC,CACF,CAAC;IACJ,CAAC;IAED,MAAM,CAAC,YAAY,CACjB,SAAS,EACT;QACE,WAAW,EACT,kTAAkT;QACpT,WAAW,EAAE;YACX,MAAM,EAAE,CAAC;iBACN,MAAM,EAAE;iBACR,QAAQ,CAAC,mEAAmE,CAAC;YAChF,KAAK,EAAE,QAAQ,CAAC,QAAQ,CACtB,mRAAmR,CACpR;YACD,MAAM,EAAE,SAAS,CAAC,QAAQ,CACxB,yVAAyV,CAC1V;YACD,GAAG,EAAE,CAAC;iBACH,MAAM,EAAE;iBACR,QAAQ,EAAE;iBACV,QAAQ,CACP,kIAAkI,CACnI;YACH,SAAS,EAAE,CAAC;iBACT,MAAM,EAAE;iBACR,GAAG,EAAE;iBACL,QAAQ,EAAE;iBACV,QAAQ,EAAE;iBACV,QAAQ,CACP,oIAAoI,CACrI;YACH,aAAa,EAAE,CAAC;iBACb,MAAM,EAAE;iBACR,GAAG,EAAE;iBACL,QAAQ,EAAE;iBACV,QAAQ,EAAE;iBACV,QAAQ,CACP,0KAA0K,CAC3K;SACJ;QACD,WAAW,EAAE,EAAE,YAAY,EAAE,KAAK,EAAE,eAAe,EAAE,IAAI,EAAE,aAAa,EAAE,IAAI,EAAE;KACjF,EACD,KAAK,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,EAAE,SAAS,EAAE,aAAa,EAAE,EAAE,KAAK,EAAE,EAAE;QACxE,MAAM,KAAK,GAAG,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;QAC1C,MAAM,OAAO,GAAG,gBAAgB,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC;QAChD,IAAI,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACvB,OAAO;gBACL,OAAO,EAAE,IAAI;gBACb,OAAO,EAAE;oBACP;wBACE,IAAI,EAAE,MAAM;wBACZ,IAAI,EAAE,yBAAyB,OAAO,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,mBAAmB,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,qBAAqB,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE;qBACzI;iBACF;aACF,CAAC;QACJ,CAAC;QACD,IACE,CAAC,CAAC,MAAM,eAAe;QACrB,uEAAuE;QACvE,4DAA4D;QAC5D,kBAAkB,CAAC,KAAK,EAAE,EAAE,MAAM,EAAE,GAAG,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC,CAC1D,CAAC,EACF,CAAC;YACD,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,YAAY,WAAW,EAAE,EAAE,CAAC,EAAE,CAAC;QACzF,CAAC;QACD,uEAAuE;QACvE,2EAA2E;QAC3E,mBAAmB;QACnB,MAAM,UAAU,GAAG,mBAAmB,CAAC,KAAK,EAAE,SAAS,CAAC,CAAC;QACzD,MAAM,OAAO,GAAG,MAAM,OAAO,CAAC,UAAU,CACtC,QAAQ,CAAC,GAAG,CAAC,CAAC,OAAO,EAAE,EAAE,CACvB,UAAU,CACR,OAAO,EACP,IAAI,EACJ;YACE,MAAM;YACN,KAAK,EAAE,YAAY,CAAC,OAAO,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,CAAC;YAChD,GAAG;YACH,SAAS;YACT,aAAa;SACd,EACD,UAAU,CACX,CACF,CACF,CAAC;QACF,MAAM,OAAO,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC,OAAO,EAAE,CAAC,EAAE,EAAE;YACzC,MAAM,OAAO,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAC;YAC5B,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC;YAC1B,IAAI,OAAO,CAAC,MAAM,KAAK,UAAU,EAAE,CAAC;gBAClC,MAAM,EAAE,OAAO,EAAE,GAAG,eAAe,CAAC,OAAO,EAAE,EAAE,KAAK,EAAE,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC;gBACxE,OAAO,EAAE,IAAI,EAAE,MAAe,EAAE,IAAI,EAAE,MAAM,IAAI,cAAc,OAAO,EAAE,EAAE,CAAC;YAC5E,CAAC;YACD,IAAI,OAAO,CAAC,KAAK,CAAC,QAAQ,KAAK,CAAC,EAAE,CAAC;gBACjC,OAAO,EAAE,IAAI,EAAE,MAAe,EAAE,IAAI,EAAE,MAAM,IAAI,UAAU,OAAO,CAAC,KAAK,CAAC,MAAM,CAAC,IAAI,EAAE,EAAE,EAAE,CAAC;YAC5F,CAAC;YACD,MAAM,EAAE,OAAO,EAAE,GAAG,eAAe,CAAC,OAAO,EAAE,EAAE,MAAM,EAAE,OAAO,CAAC,KAAK,EAAE,CAAC,CAAC;YACxE,OAAO,EAAE,IAAI,EAAE,MAAe,EAAE,IAAI,EAAE,MAAM,IAAI,cAAc,OAAO,EAAE,EAAE,CAAC;QAC5E,CAAC,CAAC,CAAC;QACH,OAAO,EAAE,OAAO,EAAE,CAAC;IACrB,CAAC,CACF,CAAC;IAEF,MAAM,CAAC,YAAY,CACjB,eAAe,EACf;QACE,WAAW,EACT,wbAAwb;QAC1b,WAAW,EAAE;YACX,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,4CAA4C,CAAC;YACzE,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,kDAAkD,CAAC;YACjF,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,8CAA8C,CAAC;YAC3E,GAAG,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,oDAAoD,CAAC;YAC9E,KAAK,EAAE,QAAQ,CAAC,QAAQ,CACtB,qTAAqT,CACtT;YACD,WAAW,EAAE,QAAQ,CAAC,QAAQ,CAC5B,uHAAuH,CACxH;YACD,aAAa,EAAE,QAAQ,CAAC,QAAQ,CAC9B,oIAAoI,CACrI;YACD,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,yBAAyB,CAAC;SACtF;QACD,WAAW,EAAE,EAAE,YAAY,EAAE,KAAK,EAAE,eAAe,EAAE,IAAI,EAAE,aAAa,EAAE,IAAI,EAAE;KACjF,EACD,KAAK,EAAE,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,GAAG,EAAE,KAAK,EAAE,WAAW,EAAE,aAAa,EAAE,SAAS,EAAE,EAAE,EAAE;QACxF,uEAAuE;QACvE,sEAAsE;QACtE,MAAM,aAAa,GAAG,WAAW,IAAI,KAAK,CAAC;QAC3C,MAAM,eAAe,GAAG,aAAa,IAAI,KAAK,CAAC;QAC/C,MAAM,aAAa,GAAG,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,MAAM,CAAC,CAAC;QAC9D,MAAM,eAAe,GAAG,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,QAAQ,CAAC,CAAC;QAClE,IAAI,CAAC,aAAa,IAAI,CAAC,eAAe,EAAE,CAAC;YACvC,MAAM,KAAK,GAAG,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YACrD,MAAM,OAAO,GAAa,EAAE,CAAC;YAC7B,IAAI,CAAC,aAAa;gBAAE,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;YACzC,IAAI,CAAC,eAAe;gBAAE,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;YAC7C,OAAO;gBACL,OAAO,EAAE,IAAI;gBACb,OAAO,EAAE;oBACP;wBACE,IAAI,EAAE,MAAM;wBACZ,IAAI,EAAE,kBAAkB,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,aAAa,KAAK,EAAE;qBAC/D;iBACF;aACF,CAAC;QACJ,CAAC;QAED,IACE,CAAC,CAAC,MAAM,eAAe;QACrB,sEAAsE;QACtE,wEAAwE;QACxE,sBAAsB,MAAM,OAAO,GAAG,sBAAsB,QAAQ,aAAa,MAAM,GACrF,aAAa,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,mBAAmB,aAAa,EACrE,GAAG,eAAe,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,qBAAqB,eAAe,EAAE,EAAE,CACjF,CAAC,EACF,CAAC;YACD,OAAO;gBACL,OAAO,EAAE,IAAI;gBACb,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,kBAAkB,WAAW,EAAE,EAAE,CAAC;aACnE,CAAC;QACJ,CAAC;QAED,IAAI,MAAe,CAAC;QACpB,IAAI,CAAC;YACH,MAAM,GAAG,MAAM,SAAS,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC;QACtC,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,OAAO;gBACL,OAAO,EAAE,IAAI;gBACb,OAAO,EAAE;oBACP;wBACE,IAAI,EAAE,MAAM;wBACZ,IAAI,EAAE,8BAA8B,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE;qBACvF;iBACF;aACF,CAAC;QACJ,CAAC;QACD,IAAI,CAAC,MAAM,EAAE,CAAC;YACZ,OAAO;gBACL,OAAO,EAAE,IAAI;gBACb,OAAO,EAAE;oBACP;wBACE,IAAI,EAAE,MAAM;wBACZ,IAAI,EAAE,4DAA4D,GAAG,EAAE;qBACxE;iBACF;aACF,CAAC;QACJ,CAAC;QAED,IAAI,QAAiB,CAAC;QACtB,IAAI,CAAC;YACH,QAAQ,GAAG,MAAM,aAAa,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC;QAC5C,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,OAAO;gBACL,OAAO,EAAE,IAAI;gBACb,OAAO,EAAE;oBACP;wBACE,IAAI,EAAE,MAAM;wBACZ,IAAI,EAAE,8BAA8B,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE;qBACvF;iBACF;aACF,CAAC;QACJ,CAAC;QAED,IAAI,YAAwB,CAAC;QAC7B,IAAI,CAAC;YACH,YAAY,GAAG,MAAM,UAAU,CAAC,aAAa,EAAE,IAAI,EAAE;gBACnD,MAAM;gBACN,KAAK,EAAE,aAAa;gBACpB,GAAG;gBACH,SAAS;aACV,CAAC,CAAC;QACL,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,MAAM,EAAE,OAAO,EAAE,GAAG,eAAe,CAAC,aAAa,EAAE,EAAE,KAAK,EAAE,GAAG,EAAE,CAAC,CAAC;YACnE,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC;QACvE,CAAC;QACD,IAAI,YAAY,CAAC,QAAQ,KAAK,CAAC,EAAE,CAAC;YAChC,MAAM,EAAE,OAAO,EAAE,GAAG,eAAe,CAAC,aAAa,EAAE,EAAE,MAAM,EAAE,YAAY,EAAE,CAAC,CAAC;YAC7E,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC;QACvE,CAAC;QAED,IAAI,MAAM,CAAC;QACX,IAAI,CAAC;YACH,MAAM,GAAG,MAAM,aAAa,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC;QAC1C,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,MAAM,IAAI,GAAG,MAAM,MAAM,YAAY,YAAY,CAAC,MAAM,CAAC,IAAI,EAAE,MAAM,CAAC;YACtE,IAAI,GAAG,YAAY,gBAAgB,EAAE,CAAC;gBACpC,OAAO;oBACL,OAAO,EAAE,IAAI;oBACb,OAAO,EAAE;wBACP;4BACE,IAAI,EAAE,MAAM;4BACZ,IAAI,EACF,IAAI;gCACJ,8EAA8E;yBACjF;qBACF;iBACF,CAAC;YACJ,CAAC;YACD,OAAO;gBACL,OAAO,EAAE,IAAI;gBACb,OAAO,EAAE;oBACP;wBACE,IAAI,EAAE,MAAM;wBACZ,IAAI,EACF,IAAI;4BACJ,kCAAkC,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE;qBACvF;iBACF;aACF,CAAC;QACJ,CAAC;QAED,IAAI,MAAM,CAAC,IAAI,CAAC,IAAI,EAAE,KAAK,EAAE,IAAI,MAAM,CAAC,SAAS,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YAC/D,IAAI,IAAI,GAAG,MAAM,MAAM,YAAY,YAAY,CAAC,MAAM,CAAC,IAAI,EAAE,+CAA+C,CAAC;YAC7G,IAAI,QAAQ,EAAE,CAAC;gBACb,IAAI;oBACF,8EAA8E,GAAG,IAAI,CAAC;YAC1F,CAAC;YACD,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC,EAAE,CAAC;QAC/D,CAAC;QAED,MAAM,aAAa,GACjB,MAAM,CAAC,SAAS,CAAC,MAAM,GAAG,CAAC;YACzB,CAAC,CAAC,wBAAwB,MAAM,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE;YAC1E,CAAC,CAAC,6BAA6B,CAAC;QACpC,MAAM,QAAQ,GAAG,MAAM,CAAC,IAAI,CAAC,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC,mBAAmB,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC;QAC/E,MAAM,QAAQ,GAAG,MAAM,CAAC,IAAI,CAAC,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC,gBAAgB,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC;QAC5E,2EAA2E;QAC3E,0EAA0E;QAC1E,MAAM,eAAe,GAAG,MAAM,CAAC,SAAS,CAAC,GAAG,CAC1C,CAAC,CAAC,EAAE,EAAE,CAAC,iBAAiB,CAAC,CAAC,IAAI,GAAG,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,cAAc,CAAC,CAAC,CAAC,EAAE,SAAS,CAAC,CAAC,OAAO,EAAE,CACvF,CAAC;QACF,MAAM,YAAY,GAAG,MAAM,CAAC,kBAAkB;YAC5C,CAAC,CAAC,iEAAiE;YACnE,CAAC,CAAC,EAAE,CAAC;QACP,yEAAyE;QACzE,qEAAqE;QACrE,oEAAoE;QACpE,wEAAwE;QACxE,2EAA2E;QAC3E,6EAA6E;QAC7E,4EAA4E;QAC5E,uEAAuE;QACvE,wBAAwB;QACxB,MAAM,KAAK,GAAG,WAAW,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;QAC7C,MAAM,YAAY,GAAG;YACnB,SAAS,MAAM,EAAE;YACjB,wFAAwF;YACxF,yDAAyD,KAAK,8VAA8V;YAC5Z,iCAAiC,KAAK,4CAA4C;YAClF,gBAAgB;YAChB,YAAY,CAAC,MAAM,CAAC,IAAI,EAAE;YAC1B,2BAA2B;YAC3B,QAAQ;YACR,OAAO;YACP,QAAQ;YACR,aAAa;YACb,YAAY;YACZ,GAAG,eAAe;YAClB,+BAA+B,KAAK,QAAQ;SAC7C;aACE,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,KAAK,EAAE,CAAC;aAC7B,IAAI,CAAC,IAAI,CAAC,CAAC;QAEd,4EAA4E;QAC5E,6EAA6E;QAC7E,2EAA2E;QAC3E,4EAA4E;QAC5E,0EAA0E;QAC1E,wEAAwE;QACxE,uEAAuE;QACvE,2EAA2E;QAC3E,qEAAqE;QACrE,MAAM,WAAW,GAAG,MAAM,OAAO,CAAC,IAAI,CAAC,MAAM,EAAE,EAAE,uBAAuB,CAAC,CAAC,CAAC;QAC3E,IAAI,YAAwB,CAAC;QAC7B,IAAI,CAAC;YACH,YAAY,GAAG,MAAM,UAAU,CAAC,eAAe,EAAE,IAAI,EAAE;gBACrD,MAAM,EAAE,YAAY;gBACpB,KAAK,EAAE,eAAe;gBACtB,GAAG,EAAE,WAAW;gBAChB,SAAS;gBACT,wEAAwE;gBACxE,sEAAsE;gBACtE,sEAAsE;gBACtE,wEAAwE;gBACxE,uEAAuE;gBACvE,yEAAyE;gBACzE,iEAAiE;gBACjE,cAAc,EAAE,WAAW;aAC5B,CAAC,CAAC;QACL,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,MAAM,WAAW,GACf,MAAM,CAAC,IAAI,CAAC,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,gCAAgC,MAAM,CAAC,IAAI,EAAE,CAAC;YACjF,MAAM,aAAa,GACjB,MAAM,CAAC,SAAS,CAAC,MAAM,GAAG,CAAC;gBACzB,CAAC,CAAC,gBAAgB,MAAM,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE;gBAClE,CAAC,CAAC,EAAE,CAAC;YACT,MAAM,EAAE,OAAO,EAAE,GAAG,eAAe,CAAC,eAAe,EAAE,EAAE,KAAK,EAAE,GAAG,EAAE,CAAC,CAAC;YACrE,OAAO;gBACL,OAAO,EAAE,IAAI;gBACb,OAAO,EAAE;oBACP;wBACE,IAAI,EAAE,MAAM;wBACZ,IAAI,EAAE,MAAM,MAAM,YAAY,YAAY,CAAC,MAAM,CAAC,IAAI,EAAE,OAAO,WAAW,GAAG,aAAa,6BAA6B,OAAO,EAAE;qBACjI;iBACF;aACF,CAAC;QACJ,CAAC;gBAAS,CAAC;YACT,wEAAwE;YACxE,yEAAyE;YACzE,MAAM,EAAE,CAAC,WAAW,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,GAAE,CAAC,CAAC,CAAC;QAC1E,CAAC;QACD,IAAI,YAAY,CAAC,QAAQ,KAAK,CAAC,EAAE,CAAC;YAChC,MAAM,WAAW,GACf,MAAM,CAAC,IAAI,CAAC,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,gCAAgC,MAAM,CAAC,IAAI,EAAE,CAAC;YACjF,MAAM,aAAa,GACjB,MAAM,CAAC,SAAS,CAAC,MAAM,GAAG,CAAC;gBACzB,CAAC,CAAC,gBAAgB,MAAM,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE;gBAClE,CAAC,CAAC,EAAE,CAAC;YACT,MAAM,EAAE,OAAO,EAAE,GAAG,eAAe,CAAC,eAAe,EAAE,EAAE,MAAM,EAAE,YAAY,EAAE,CAAC,CAAC;YAC/E,OAAO;gBACL,OAAO,EAAE,IAAI;gBACb,OAAO,EAAE;oBACP;wBACE,IAAI,EAAE,MAAM;wBACZ,IAAI,EAAE,MAAM,MAAM,YAAY,YAAY,CAAC,MAAM,CAAC,IAAI,EAAE,OAAO,WAAW,GAAG,aAAa,6BAA6B,OAAO,EAAE;qBACjI;iBACF;aACF,CAAC;QACJ,CAAC;QAED,MAAM,SAAS,GAAG,YAAY,CAAC,MAAM;aAClC,KAAK,CAAC,IAAI,CAAC;aACX,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;aACpB,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;QAC7B,MAAM,OAAO,GAAG,sBAAsB,CAAC,IAAI,CAAC,SAAS,IAAI,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE,IAAI,MAAM,CAAC;QAE1F,MAAM,KAAK,GAAa,EAAE,CAAC;QAC3B,IAAI,QAAQ,EAAE,CAAC;YACb,KAAK,CAAC,IAAI,CAAC,0EAA0E,CAAC,CAAC;QACzF,CAAC;QACD,KAAK,CAAC,IAAI,CACR,MAAM,MAAM,YAAY,YAAY,CAAC,MAAM,CAAC,IAAI,EAAE,EAAE,EACpD,gCAAgC,MAAM,CAAC,IAAI,EAAE,CAC9C,CAAC;QACF,IAAI,MAAM,CAAC,SAAS,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAChC,KAAK,CAAC,IAAI,CAAC,cAAc,MAAM,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QAC7E,CAAC;QACD,KAAK,CAAC,IAAI,CAAC,gBAAgB,QAAQ,MAAM,OAAO,KAAK,YAAY,CAAC,MAAM,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;QAEnF,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,CAAC;IACjF,CAAC,CACF,CAAC;IAEF,OAAO,MAAM,CAAC;AAChB,CAAC"}
package/dist/types.d.ts CHANGED
@@ -1,5 +1,23 @@
1
+ /**
2
+ * How much the agent is allowed to do on this run.
3
+ *
4
+ * - `"write"` — the agent may edit files and run commands in `cwd`. The default.
5
+ * - `"read-only"` — the agent should only read and answer. Used by the
6
+ * `review_change` REVIEWER, whose prompt embeds an attacker-controlled diff
7
+ * and which only needs to return a verdict.
8
+ *
9
+ * **Enforcement differs per CLI and must not be overstated.** Only `codex`
10
+ * (`--sandbox`, OS-level) and `claude` (deny rules, harness-level) genuinely
11
+ * restrict the agent. `cursor --mode plan` is model-advisory; `agy` simply has
12
+ * its permission grant withheld, which makes headless runs auto-deny write and
13
+ * command tools — narrowing, not a sandbox; and `opencode` has no CLI lever at
14
+ * all, so for it `read-only` is a documented no-op. Table in AGENTS.md.
15
+ */
16
+ export type PermissionMode = "read-only" | "write";
1
17
  export interface AgentRunOptions {
2
18
  model?: string;
19
+ /** Defaults to `"write"` when undefined, so existing call sites are unchanged. */
20
+ permissionMode?: PermissionMode;
3
21
  }
4
22
  export interface AgentInvocation {
5
23
  /** argv passed to the binary (no shell involved). */
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "agent-mcp-hub",
3
- "version": "0.5.3",
4
- "description": "One MCP server bridging the Codex, Cursor, OpenCode, and Claude CLI agents",
3
+ "version": "0.6.1",
4
+ "description": "One MCP server bridging the Codex, Cursor, OpenCode, Claude, and Antigravity CLI agents",
5
5
  "repository": {
6
6
  "type": "git",
7
7
  "url": "git+https://github.com/blackaxgit/agent-mcp-hub.git"
@@ -18,6 +18,8 @@
18
18
  "cursor",
19
19
  "opencode",
20
20
  "claude",
21
+ "antigravity",
22
+ "agy",
21
23
  "coding-agent",
22
24
  "stdio"
23
25
  ],