feat(workflow): enhance message stages and image routing

This commit is contained in:
Xin Wang
2026-08-03 12:38:02 +08:00
parent b0991f239e
commit 4c43e167db
13 changed files with 593 additions and 157 deletions

View File

@@ -200,32 +200,53 @@ class WorkflowGraphTests(unittest.TestCase):
message = next(
node for node in normalized["nodes"] if node["type"] == "message"
)
self.assertFalse(message["data"]["showMessage"])
self.assertFalse(message["data"]["requireConfirmation"])
self.assertEqual(message["data"]["completionPolicy"], "playback")
self.assertNotIn("requireConfirmation", message["data"])
self.assertNotIn("showMessage", message["data"])
self.assertEqual(message["data"]["confirmLabel"], "确认")
message["data"].update(
{
"speech": "",
"showMessage": True,
"title": "重要提示",
"message": "",
"confirmLabel": "确认",
"requireConfirmation": True,
"completionPolicy": "confirmation",
}
)
errors = validate_graph(normalized)
self.assertTrue(any("弹窗消息必须为" in error for error in errors))
self.assertTrue(any("必须配置播报内容" in error for error in errors))
message["data"].update(
{
"speech": "请确认",
"showMessage": False,
"requireConfirmation": True,
}
{"speech": "", "completionPolicy": "playback"}
)
errors = validate_graph(normalized)
self.assertTrue(any("等待确认时必须显示弹窗" in error for error in errors))
self.assertTrue(any("必须配置播报内容" in error for error in errors))
message["data"]["completionPolicy"] = "unknown"
errors = validate_graph(normalized)
self.assertTrue(any("完成策略无效" in error for error in errors))
legacy = valid_graph()
legacy["nodes"].append(
{
"id": "legacy-message",
"type": "message",
"data": {
"speech": "请确认",
"showMessage": True,
"title": "提示",
"message": "请确认",
"confirmLabel": "确认",
"requireConfirmation": True,
},
}
)
legacy_message = normalize_graph(legacy)["nodes"][-1]["data"]
self.assertEqual(legacy_message["completionPolicy"], "confirmation")
self.assertNotIn("requireConfirmation", legacy_message)
self.assertNotIn("showMessage", legacy_message)
def test_voice_resource_creates_isolated_runtime_config(self):
base = AssistantConfig(type="workflow", asr="default", voice="default")