feat: add main agent runtime flow v1
This commit is contained in:
@@ -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",
|
||||
|
||||
Reference in New Issue
Block a user