feat(runtime): capture step evidence in console
Tests / Test passed: 862

This commit is contained in:
2026-07-15 10:12:09 +08:00
parent 8d5b02e37f
commit ccde30e378
20 changed files with 594 additions and 53 deletions
+22
View File
@@ -114,6 +114,28 @@ def test_console_timeline_inlines_screenshot_and_handles_empty_history(
assert client.get("/console/tasks/missing/timeline").status_code == 404
def test_console_timeline_inlines_before_and_after_screenshots(tmp_path) -> None:
timeline = Timeline(ArtifactStore(tmp_path / "history"))
client, metadata_store = _client(tmp_path, timeline=timeline)
metadata_store.create_task(Task(id="task-evidence", goal="tap", device_id="phone"))
before = b"before"
after = b"after"
timeline.append(
task_id="task-evidence",
scene={"screen": {"width": 10, "height": 20}, "elements": []},
prompt="tap",
tool_call={"action": "tap", "description": "tap search"},
result={"ok": True},
before_screenshot=before,
after_screenshot=after,
)
record = client.get("/console/tasks/task-evidence/timeline").json()[0]
assert record["before_image_base64"] == base64.b64encode(before).decode("ascii")
assert record["after_image_base64"] == base64.b64encode(after).decode("ascii")
assert record["image_base64"] == base64.b64encode(after).decode("ascii")
def test_console_device_registration_and_unregistration(tmp_path) -> None:
config_store = DeviceConfigStore(tmp_path / "device_config.sqlite3")
manager = DeviceManager()