Route project work through Cursor agy and PI
Why: make the three approved CLIs the only active implementation and test routes Evidence: adapter unit tests, configuration validation, diff check, and real marker probes for all three profiles Impact: narrows project routing and fixes agy prompt binding for noninteractive execution Refs: feature/goal-first-delivery
This commit is contained in:
+8
-31
@@ -7,9 +7,10 @@ parser accepts exactly one `agent-execution` fenced block.
|
|||||||
|
|
||||||
U3's execution controller and U4's project wiring are integrated. This file is
|
U3's execution controller and U4's project wiring are integrated. This file is
|
||||||
the execution-routing authority for implementation, repair, test, and review.
|
the execution-routing authority for implementation, repair, test, and review.
|
||||||
Installed CLI identity stays unproven until a host runs the U5 probes one
|
Active routes are intentionally limited to Cursor, Antigravity (`agy`), and
|
||||||
profile at a time. A provider that makes no successful stdin write or
|
PI. `model: auto` lets each CLI use its configured default model; PI therefore
|
||||||
stdout/stderr read for `idle_timeout_seconds` is stopped before
|
uses the operator-selected MiniMax default. A provider that makes no successful
|
||||||
|
stdin write or stdout/stderr read for `idle_timeout_seconds` is stopped before
|
||||||
`timeout_seconds`.
|
`timeout_seconds`.
|
||||||
|
|
||||||
```agent-execution
|
```agent-execution
|
||||||
@@ -26,10 +27,10 @@ execution:
|
|||||||
raw_output_bytes: 10485760
|
raw_output_bytes: 10485760
|
||||||
|
|
||||||
roles:
|
roles:
|
||||||
implementation: [cursor, antigravity, claude, codex, pi, kimi, opencode]
|
implementation: [cursor, antigravity, pi]
|
||||||
repair: [cursor, antigravity, codex, claude]
|
repair: [cursor, antigravity, pi]
|
||||||
test: [pi, antigravity, codex]
|
test: [pi, antigravity, cursor]
|
||||||
review: [claude, codex, pi]
|
review: [pi, antigravity, cursor]
|
||||||
|
|
||||||
profiles:
|
profiles:
|
||||||
cursor:
|
cursor:
|
||||||
@@ -44,33 +45,9 @@ profiles:
|
|||||||
model: auto
|
model: auto
|
||||||
enabled: true
|
enabled: true
|
||||||
|
|
||||||
claude:
|
|
||||||
adapter: claude
|
|
||||||
executable: claude
|
|
||||||
model: auto
|
|
||||||
enabled: true
|
|
||||||
|
|
||||||
codex:
|
|
||||||
adapter: codex
|
|
||||||
executable: codex
|
|
||||||
model: auto
|
|
||||||
enabled: true
|
|
||||||
|
|
||||||
pi:
|
pi:
|
||||||
adapter: pi
|
adapter: pi
|
||||||
executable: pi
|
executable: pi
|
||||||
model: auto
|
model: auto
|
||||||
enabled: true
|
enabled: true
|
||||||
|
|
||||||
kimi:
|
|
||||||
adapter: kimi
|
|
||||||
executable: kimi
|
|
||||||
model: auto
|
|
||||||
enabled: true
|
|
||||||
|
|
||||||
opencode:
|
|
||||||
adapter: opencode
|
|
||||||
executable: opencode
|
|
||||||
model: auto
|
|
||||||
enabled: true
|
|
||||||
```
|
```
|
||||||
|
|||||||
@@ -121,7 +121,7 @@ BUILTIN_SPECS: dict[str, AdapterSpec] = {
|
|||||||
),
|
),
|
||||||
"antigravity": AdapterSpec(
|
"antigravity": AdapterSpec(
|
||||||
name="antigravity",
|
name="antigravity",
|
||||||
noninteractive_argv=("--print",),
|
noninteractive_argv=(),
|
||||||
run_everything_argv=(
|
run_everything_argv=(
|
||||||
"--dangerously-skip-permissions",
|
"--dangerously-skip-permissions",
|
||||||
"--mode",
|
"--mode",
|
||||||
@@ -130,7 +130,7 @@ BUILTIN_SPECS: dict[str, AdapterSpec] = {
|
|||||||
workspace_flag=None,
|
workspace_flag=None,
|
||||||
model_flag="--model",
|
model_flag="--model",
|
||||||
output_argv=("--output-format", "stream-json"),
|
output_argv=("--output-format", "stream-json"),
|
||||||
prompt_transport="positional",
|
prompt_transport="print",
|
||||||
),
|
),
|
||||||
"claude": AdapterSpec(
|
"claude": AdapterSpec(
|
||||||
name="claude",
|
name="claude",
|
||||||
@@ -289,6 +289,10 @@ def build_invocation(
|
|||||||
elif spec.prompt_transport == "flag":
|
elif spec.prompt_transport == "flag":
|
||||||
argv.extend(["--prompt", prompt])
|
argv.extend(["--prompt", prompt])
|
||||||
prompt_values.add(prompt)
|
prompt_values.add(prompt)
|
||||||
|
elif spec.prompt_transport == "print":
|
||||||
|
# agy 1.3.5 consumes the argv item immediately after --print.
|
||||||
|
argv.extend(["--print", prompt])
|
||||||
|
prompt_values.add(prompt)
|
||||||
else:
|
else:
|
||||||
raise ValueError(f"unsupported prompt_transport: {spec.prompt_transport!r}")
|
raise ValueError(f"unsupported prompt_transport: {spec.prompt_transport!r}")
|
||||||
|
|
||||||
|
|||||||
@@ -224,10 +224,9 @@ class AgentExecAdapterTests(unittest.TestCase):
|
|||||||
profile, cfg, self.workspace, self.unit_packet, self.result_path
|
profile, cfg, self.workspace, self.unit_packet, self.result_path
|
||||||
)
|
)
|
||||||
self.assertEqual(
|
self.assertEqual(
|
||||||
inv.argv[:-1],
|
inv.argv[:-2],
|
||||||
(
|
(
|
||||||
"agy",
|
"agy",
|
||||||
"--print",
|
|
||||||
"--dangerously-skip-permissions",
|
"--dangerously-skip-permissions",
|
||||||
"--mode",
|
"--mode",
|
||||||
"auto",
|
"auto",
|
||||||
@@ -235,9 +234,14 @@ class AgentExecAdapterTests(unittest.TestCase):
|
|||||||
"stream-json",
|
"stream-json",
|
||||||
),
|
),
|
||||||
)
|
)
|
||||||
|
self.assertEqual(inv.argv[-2], "--print")
|
||||||
_assert_bounded_prompt(self, inv.argv[-1], self.packet_body)
|
_assert_bounded_prompt(self, inv.argv[-1], self.packet_body)
|
||||||
|
self.assertNotIn("--model", inv.argv)
|
||||||
|
self.assertIsNone(inv.stdin)
|
||||||
self.assertEqual(inv.cwd, self.workspace)
|
self.assertEqual(inv.cwd, self.workspace)
|
||||||
self.assertEqual(inv.sanitized_display[-1], UNIT_PACKET_MARKER)
|
self.assertEqual(inv.sanitized_display[-1], UNIT_PACKET_MARKER)
|
||||||
|
self.assertEqual(inv.sanitized_display[-2], "--print")
|
||||||
|
self.assertNotIn(self.packet_body, " ".join(inv.sanitized_display))
|
||||||
|
|
||||||
def test_claude_run_everything_argv(self) -> None:
|
def test_claude_run_everything_argv(self) -> None:
|
||||||
_write_fake_cli(self.bindir, "claude", help_text=CLAUDE_HELP)
|
_write_fake_cli(self.bindir, "claude", help_text=CLAUDE_HELP)
|
||||||
|
|||||||
Reference in New Issue
Block a user