| |
| """Standalone smoke test for session snapshot generation. |
| |
| This intentionally avoids pytest so the sidecar can be checked in constrained |
| gateway/runtime shells where pytest is not installed. |
| """ |
| import os |
| import sys |
|
|
| sys.path.insert(0, os.path.join(os.path.dirname(__file__), "..")) |
|
|
| from reviewer import session_snapshot as snap |
|
|
|
|
| def main() -> int: |
| summary = { |
| "session_id": "s1", |
| "agent_id": "ops", |
| "last_event_at": "2026-05-12T12:00:00+00:00", |
| "event_count": 4, |
| "tool_result_count": 2, |
| "error_count": 1, |
| "noisy_tool_results": 0, |
| "last_entry_idx": 4, |
| "hints": ["1 error(s)"], |
| } |
| activity = [ |
| {"session_id": "s1", "agent_id": "ops", "entry_idx": 1, "role": "user", "preview": "deploy to Cloud Run?", "clean_text": "deploy to Cloud Run?", "is_error": 0}, |
| {"session_id": "s1", "agent_id": "ops", "entry_idx": 2, "role": "toolResult", "tool_name": "exec", "preview": "permission denied", "clean_text": "permission denied", "is_error": 1}, |
| ] |
| original_activity = snap.get_session_activity |
| original_recent = snap.get_recent_sessions |
| try: |
| snap.get_session_activity = lambda session_id, limit: activity |
| result = snap.build_session_snapshot(summary, activity_limit=20) |
| assert result["schema"] == "openclaw.session.v1" |
| assert result["id"] == "s1" |
| assert result["state"]["state"] == "warning" |
| assert "approval_or_permission" in result["risk"]["flags"] |
| assert "external_infra" in result["risk"]["flags"] |
| assert result["outputs"]["recent_events"][1]["event_type"] == "tool_error" |
|
|
| snap.get_recent_sessions = lambda limit: [summary] |
| collection = snap.build_recent_session_snapshots(limit=1, activity_limit=1) |
| assert collection["schema"] == "openclaw.session.v1.collection" |
| assert collection["count"] == 1 |
| finally: |
| snap.get_session_activity = original_activity |
| snap.get_recent_sessions = original_recent |
| print("session_snapshot_smoke: ok") |
| return 0 |
|
|
|
|
| if __name__ == "__main__": |
| raise SystemExit(main()) |
|
|