feat: version platform agent profiles through main agent runs
Some checks failed
StoryForge CI / Baseline checks (push) Has been cancelled
StoryForge CI / Backend tests (push) Has been cancelled
StoryForge CI / Web tests (push) Has been cancelled

This commit is contained in:
kris
2026-04-04 05:08:15 +08:00
parent 01ce085f6a
commit 895e3f3b13
6 changed files with 554 additions and 3 deletions

View File

@@ -721,6 +721,16 @@ class MainAgentGovernanceTests(unittest.TestCase):
self.assertEqual(profile_payload["platform"], "douyin")
self.assertEqual(profile_payload["name"], "抖音增长 Agent")
self.assertEqual(profile_payload["config"]["focus"], "conversion")
self.assertEqual(profile_payload["current_version"]["version_no"], 1)
first_profile_version_id = profile_payload["current_version"]["id"]
profile_versions = self.client.get(
"/v2/platform-agents/douyin/profile/versions",
headers=self.ctx["member_headers"],
params={"project_id": self.ctx["project_id"]},
)
self.assertEqual(profile_versions.status_code, 200, profile_versions.text)
self.assertEqual(profile_versions.json()["count"], 1)
memory_response = self.client.post(
"/v2/platform-agents/douyin/memories",
@@ -790,6 +800,44 @@ class MainAgentGovernanceTests(unittest.TestCase):
self.assertEqual(review_skill.status_code, 200, review_skill.text)
self.assertEqual(review_skill.json()["status"], "validated")
update_profile = self.client.put(
"/v2/platform-agents/douyin/profile",
headers=self.ctx["member_headers"],
json={
"project_id": self.ctx["project_id"],
"name": "抖音增长 Agent",
"mission": "改成优先对标高互动账号。",
"notes": "先压缩近期重点方向。",
"status": "active",
"config": {"focus": "engagement"},
"reason": "调整当前抖音平台策略",
},
)
self.assertEqual(update_profile.status_code, 200, update_profile.text)
self.assertEqual(update_profile.json()["current_version"]["version_no"], 2)
rollback_profile = self.client.post(
"/v2/platform-agents/douyin/profile/rollback",
headers=self.ctx["member_headers"],
json={
"project_id": self.ctx["project_id"],
"version_id": first_profile_version_id,
"reason": "恢复到第一版平台 Agent 配置",
},
)
self.assertEqual(rollback_profile.status_code, 200, rollback_profile.text)
rollback_profile_payload = rollback_profile.json()
self.assertEqual(rollback_profile_payload["current_version"]["rollback_from_version_id"], first_profile_version_id)
self.assertEqual(rollback_profile_payload["config"]["focus"], "conversion")
profile_audits = self.client.get(
"/v2/platform-agents/douyin/profile/audits",
headers=self.ctx["member_headers"],
params={"project_id": self.ctx["project_id"]},
)
self.assertEqual(profile_audits.status_code, 200, profile_audits.text)
self.assertGreaterEqual(profile_audits.json()["count"], 3)
versions = self.client.get(
f"/v2/platform-agents/douyin/skills/{skill_payload['id']}/versions",
headers=self.ctx["member_headers"],
@@ -857,6 +905,10 @@ class MainAgentGovernanceTests(unittest.TestCase):
self.assertEqual(detail_response.status_code, 200, detail_response.text)
detail_payload = detail_response.json()
self.assertEqual(detail_payload["run_status"], "done")
self.assertEqual(
(((detail_payload.get("result") or {}).get("execution_card") or {}).get("platform_agent_profile") or {}).get("version_no"),
rollback_profile_payload["current_version"]["version_no"],
)
refreshed_agents = self.client.get(
"/v2/platform-agents",
@@ -866,9 +918,14 @@ class MainAgentGovernanceTests(unittest.TestCase):
self.assertEqual(refreshed_agents.status_code, 200, refreshed_agents.text)
refreshed_douyin = next(item for item in refreshed_agents.json()["items"] if item["platform"] == "douyin")
self.assertIn("recent_execution", refreshed_douyin)
self.assertEqual(refreshed_douyin["current_version"]["version_no"], rollback_profile_payload["current_version"]["version_no"])
self.assertEqual(refreshed_douyin["recent_execution"]["run_id"], run_payload["id"])
self.assertEqual(refreshed_douyin["recent_execution"]["intent_key"], "governance_review")
self.assertGreaterEqual(refreshed_douyin["recent_execution"]["oneliner_profile_version_no"], 1)
self.assertEqual(
refreshed_douyin["recent_execution"]["platform_agent_profile_version_no"],
rollback_profile_payload["current_version"]["version_no"],
)
def test_admin_ops_routes_are_live(self) -> None:
now = self.db_module.utc_now()