agy-mcp-bridge 0.1.25 → 0.1.26
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
|
@@ -90,12 +90,12 @@ Four rules about these ids are easy to get wrong, all measured rather than infer
|
|
|
90
90
|
|
|
91
91
|
- `agents.enabled` must list **every profile id** you declare, not just the adapters. A profile missing there is silently disabled, and a pool of such members then refuses with `Unknown agent "<pool id>"` — a message that names the pool while the broken line is `enabled`. Omitting `enabled` entirely enables everything; the example keeps the key so you can see it exists, which means a new profile has to be added to that list too.
|
|
92
92
|
- A `codex` profile also needs the base `codex` id in `enabled`, because that is what makes the bridge probe the codex CLI at all. Without it the profile is unavailable **and reports no warning**, so `agents_list` shows a dead agent with no reason.
|
|
93
|
-
- `model` on a profile is read only for a `codex` profile.
|
|
93
|
+
- `model` on a profile is read only for a `codex` profile; an `antigravity` profile runs with the model you choose in the web UI.
|
|
94
94
|
- `priority` and `enabled` accept a pool id without complaining, but the default agent is matched against agent ids only — a pool there silently selects nothing. Name the pool in the `agent` argument of a task instead.
|
|
95
95
|
|
|
96
96
|
`agents.pools.<id>` groups profiles for quota handling. Delegating to a pool id picks the first healthy member. When a member stops with something that reads like an exhausted quota or rate limit, the bridge marks it cooling for `quota_cooldown_seconds` and re-runs **the same task** on the next member — each member at most once per task, after which the task fails instead of looping. The replaced attempt is kept on the record as `attempts[]` (agent, error, exit, log tails) so a reviewer can still see why the first CLI stopped, and the retry keeps holding the execution lock rather than releasing and re-taking it, so no second ordinary task slips into the gap.
|
|
97
97
|
|
|
98
|
-
|
|
98
|
+
The owner's Settings reach an `antigravity` **profile** exactly as they reach `antigravity`, because they key on the adapter behind the id, not on the id: the model, the permission level, the effort, and the soft deadline with its `--log-file` and its extended `--print-timeout` are all on the command line of a profile task. Read that as a widening, not a cosmetic fix — before, a profile was locked to the CLI's own defaults and could not be given `--dangerously-skip-permissions` at all; now your permission level applies to its tasks too, so a profile is no more restricted than the agent it comes from.
|
|
99
99
|
|
|
100
100
|
Two knobs are opt-in because they widen what the bridge can reach. Neither is reachable from a task, and neither stays invisible: the codex pair is reported in `agents_list` warnings, and the XERJ pair in `/api/xerj/status` plus the refusal `code_search` gives while it is off.
|
|
101
101
|
|
|
@@ -6,6 +6,7 @@ export function antigravityAdapter(executable, defaultTransport, options = {}) {
|
|
|
6
6
|
return {
|
|
7
7
|
id: options.id ?? 'antigravity',
|
|
8
8
|
label: options.label ?? 'Antigravity',
|
|
9
|
+
family: 'antigravity',
|
|
9
10
|
capabilities: CAPABILITIES,
|
|
10
11
|
buildInvocation(task) {
|
|
11
12
|
const transport = task.promptTransport ?? defaultTransport;
|
package/dist/src/agents/codex.js
CHANGED
|
@@ -9,6 +9,7 @@ export function codexAdapter(command, options = {}) {
|
|
|
9
9
|
return {
|
|
10
10
|
id: options.id ?? 'codex',
|
|
11
11
|
label: options.label ?? 'Codex',
|
|
12
|
+
family: 'codex',
|
|
12
13
|
capabilities: CAPABILITIES,
|
|
13
14
|
buildInvocation(task) {
|
|
14
15
|
const resultFile = path.join(task.stateDirectory, 'results', `${task.taskId}.txt`);
|
|
@@ -183,7 +183,7 @@ export class TaskManager {
|
|
|
183
183
|
context: input.context === undefined ? null : redact(input.context), timeout_seconds: timeout,
|
|
184
184
|
client: meta.client ? redact(meta.client).slice(0, 100) : null,
|
|
185
185
|
agent: task.agent, isolation: input.isolation, owns: input.owns, autonomy,
|
|
186
|
-
model: agent?.adapter.
|
|
186
|
+
model: agent?.adapter.family === 'antigravity' ? await readModel(this.runtime.stateDirectory) : null,
|
|
187
187
|
permission: permissionState(this.runtime.stateDirectory).level,
|
|
188
188
|
effort: readEffort(this.runtime.stateDirectory)
|
|
189
189
|
}
|
|
@@ -312,7 +312,7 @@ export class TaskManager {
|
|
|
312
312
|
entry.request.permission = permission;
|
|
313
313
|
// Soft deadline (owner setting, off by default): agy gets the absolute limit as its own print timeout and a log file whose growth shows it is alive.
|
|
314
314
|
const soft = readSoftTimeout(this.runtime.stateDirectory);
|
|
315
|
-
const antigravity = agent.adapter.
|
|
315
|
+
const antigravity = agent.adapter.family === 'antigravity';
|
|
316
316
|
const absoluteLimit = Math.max(timeout, soft.limit_seconds);
|
|
317
317
|
let logFile;
|
|
318
318
|
if (antigravity && soft.enabled) {
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "agy-mcp-bridge",
|
|
3
|
-
"version": "0.1.
|
|
3
|
+
"version": "0.1.26",
|
|
4
4
|
"description": "Local loopback HTTP MCP bridge that delegates bounded coding tasks to multiple agent CLIs (Antigravity, Codex) with optional parallel git worktrees",
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"keywords": [
|