feat: add main agent runtime flow v1

This commit is contained in:
kris
2026-03-29 18:25:39 +08:00
parent ccbe6ca565
commit 30e37e5ce1
6 changed files with 845 additions and 5 deletions

View File

@@ -49,6 +49,8 @@ class MainAgentGovernanceTests(unittest.TestCase):
def _clear_tables(self) -> None:
tables = [
"agent_run_events",
"agent_runs",
"agent_policy_audit_logs",
"agent_policy_effectivity",
"agent_policy_versions",
@@ -180,6 +182,72 @@ class MainAgentGovernanceTests(unittest.TestCase):
"member_headers": {"Authorization": f"Bearer {member_token}"},
}
def test_agent_run_creation_snapshots_governance_and_needs_confirmation(self) -> None:
response = self.client.post(
"/v2/oneliner/runs",
headers=self.ctx["member_headers"],
json={
"project_id": self.ctx["project_id"],
"source_screen": "dashboard",
"source_action_key": "homepage-primary-action",
"title": "跟进重点账号",
"summary": "先由主 Agent 评估优先级",
"intent_key": "track_account",
"platform": "douyin",
"platform_scope": "single_platform",
"plan_request": {
"goal": "跟进重点账号",
"steps": ["读取当前项目上下文", "检查重点账号变化", "决定下一步"],
},
},
)
self.assertEqual(response.status_code, 200, response.text)
payload = response.json()
self.assertEqual(payload["run_status"], "needs_confirmation")
self.assertEqual(payload["source_screen"], "dashboard")
self.assertEqual(payload["platform"], "douyin")
self.assertEqual(payload["platform_scope"], "single_platform")
self.assertEqual(payload["session_id"][:5], "oline")
self.assertEqual(payload["plan"]["goal"], "跟进重点账号")
self.assertEqual(payload["governance"]["project_id"], self.ctx["project_id"])
self.assertIn("layers", payload["governance"])
self.assertEqual(payload["events"][0]["event_type"], "run.created")
def test_agent_run_confirm_transitions_to_queue_or_running_and_logs_events(self) -> None:
create = self.client.post(
"/v2/oneliner/runs",
headers=self.ctx["member_headers"],
json={
"project_id": self.ctx["project_id"],
"source_screen": "strategy",
"source_action_key": "handoff-to-main-agent",
"title": "调整当前平台策略",
"summary": "让主 Agent 先给执行计划",
"intent_key": "custom",
"platform": "douyin",
"platform_scope": "single_platform",
"plan_request": {
"goal": "调整当前平台策略",
"steps": ["读取当前平台策略", "生成调整建议"],
},
},
)
self.assertEqual(create.status_code, 200, create.text)
run_id = create.json()["id"]
confirm = self.client.post(
f"/v2/oneliner/runs/{run_id}/confirm",
headers=self.ctx["member_headers"],
json={"reason": "user confirmed"},
)
self.assertEqual(confirm.status_code, 200, confirm.text)
payload = confirm.json()
self.assertIn(payload["run_status"], {"queued", "running"})
event_types = [item["event_type"] for item in payload["events"]]
self.assertIn("run.created", event_types)
self.assertIn("run.confirmed", event_types)
self.assertTrue("run.queued" in event_types or "run.started" in event_types)
def test_effective_policy_merges_system_user_global_and_platform_layers(self) -> None:
system_response = self.client.put(
"/v2/admin/oneliner/governance/system/main-agent",