diff --git a/.kyzn/.gitignore b/.kyzn/.gitignore new file mode 100644 index 0000000..101f1a8 --- /dev/null +++ b/.kyzn/.gitignore @@ -0,0 +1,3 @@ +# kyzn — gitignored local data +history/ +reports/ diff --git a/.kyzn/config.yaml b/.kyzn/config.yaml new file mode 100644 index 0000000..1083170 --- /dev/null +++ b/.kyzn/config.yaml @@ -0,0 +1,18 @@ +# kyzn configuration — commit this file +# Generated by: kyzn init +# Date: 2026-03-18T00:56:59Z + +project: + name: pingdiff + type: node + +preferences: + mode: deep + budget: 2.50 + max_turns: 30 + diff_limit: 2000 + trust: guardian + on_build_fail: report + +focus: + priorities: ["auto"] diff --git a/desktop/src/api_client.py b/desktop/src/api_client.py index cd8c07f..b769924 100644 --- a/desktop/src/api_client.py +++ b/desktop/src/api_client.py @@ -236,6 +236,9 @@ def get_servers(self, game_slug: str = "overwatch-2") -> Dict[str, List[Dict]]: ) if response.status_code == 200: servers = response.json() + if not isinstance(servers, dict): + logger.warning(f"Unexpected server response type: {type(servers).__name__}") + raise ValueError("API returned non-dict response") total = sum(len(v) for v in servers.values()) logger.info(f"Loaded {total} servers from API") return servers diff --git a/desktop/src/cli.py b/desktop/src/cli.py index 3b8aeee..870d61f 100644 --- a/desktop/src/cli.py +++ b/desktop/src/cli.py @@ -224,6 +224,8 @@ def results_to_csv(results: List[PingResult], best_only: bool = False) -> str: def progress_callback(completed: int, total: int, result: PingResult) -> None: """Show progress during testing.""" + if total == 0: + return bar_width = 30 filled = int(bar_width * completed / total) bar = "█" * filled + "░" * (bar_width - filled) diff --git a/desktop/src/ping_tester.py b/desktop/src/ping_tester.py index 2eecd68..84f138e 100644 --- a/desktop/src/ping_tester.py +++ b/desktop/src/ping_tester.py @@ -245,7 +245,22 @@ def test_all_servers(servers: List[Dict], ping_count: int = 10, } for future in as_completed(future_to_server): - result = future.result() + try: + result = future.result() + except Exception as e: + server = future_to_server[future] + logger.error(f"Unexpected error testing server {server.get('id', '?')}: {e}") + result = PingResult( + server_id=server.get("id", "unknown"), + server_location=server.get("location", "Unknown"), + ip_address=server.get("ip", ""), + ping_avg=0.0, ping_min=0.0, ping_max=0.0, + jitter=0.0, packet_loss=100.0, + successful_pings=0, total_pings=ping_count, + raw_times=[], + region=server.get("region", ""), + error=str(e), + ) results.append(result) completed += 1