feat(ack): support project agent routing overrides

This commit is contained in:
2026-09-19 17:52:14 +08:00
parent 44cee4be91
commit f469c8f5f5
25 changed files with 746 additions and 83 deletions
+71
View File
@@ -224,6 +224,39 @@ class CanonicalHashTests(unittest.TestCase):
class ProfileValidationTests(unittest.TestCase):
def test_pi_default_model_is_explicitly_supported(self) -> None:
routing = {
"profileVersion": 1,
"mode": "orca",
"modelAllowlist": {
"pi": {
"developer": {"standard": [None], "strong": [None]},
},
"cursor-agent": {"test": {"standard": ["auto"]}},
},
"profiles": {
"pi-dev": {
"role": "developer",
"cli": "pi",
"tier": "standard",
"model": None,
"reasoningEffort": "medium",
"permissionMode": "workspace-write",
},
"cursor-test": {
"role": "test",
"cli": "cursor-agent",
"tier": "standard",
"model": "auto",
"reasoningEffort": None,
"permissionMode": "workspace-write",
},
},
"defaults": {"developer": "pi-dev", "test": "cursor-test"},
}
self.assertEqual(worker_profiles.validate_orchestration(routing), [])
def test_valid_orchestration_passes(self) -> None:
self.assertEqual(
worker_profiles.validate_orchestration(valid_orchestration()),
@@ -406,6 +439,44 @@ class ProfileValidationTests(unittest.TestCase):
class ArgvRendererTests(unittest.TestCase):
def test_pi_default_model_omits_model_flag(self) -> None:
profile = {
"role": "developer",
"cli": "pi",
"tier": "standard",
"model": None,
"reasoningEffort": "medium",
"permissionMode": "workspace-write",
}
self.assertEqual(
worker_profiles.render_worker_argv(
profile,
"/home/ace/.local/share/mise/shims/pi",
"/repo/demo",
),
[
"/home/ace/.local/share/mise/shims/pi",
"--thinking",
"medium",
],
)
def test_pi_read_only_limits_tools(self) -> None:
profile = {
"role": "test",
"cli": "pi",
"tier": "standard",
"model": None,
"reasoningEffort": "low",
"permissionMode": "read-only",
}
self.assertEqual(
worker_profiles.render_worker_argv(profile, "/usr/local/bin/pi", "/repo/demo"),
["/usr/local/bin/pi", "--thinking", "low", "--tools", "read,grep,find,ls"],
)
def test_codex_exact_safe_argv(self) -> None:
profile = valid_orchestration()["profiles"]["codex-dev-standard"]