From 5f43659b5a79ced7be55555f535f7a6de74dfe16 Mon Sep 17 00:00:00 2001 From: Chaim Date: Sat, 16 May 2026 17:53:42 +0000 Subject: [PATCH] fix: add defensive JSON parsing in check_instructions --- scripts/sync_agents_across_companies.py | 22 +++++++++++++++------- 1 file changed, 15 insertions(+), 7 deletions(-) diff --git a/scripts/sync_agents_across_companies.py b/scripts/sync_agents_across_companies.py index b9697ad..5f00c0f 100644 --- a/scripts/sync_agents_across_companies.py +++ b/scripts/sync_agents_across_companies.py @@ -303,12 +303,17 @@ async def check_instructions(agents: list[dict]) -> bool: print("-" * 115) for agent in agents: - adapter_cfg = agent.get("adapter_config") or {} - if isinstance(adapter_cfg, str): - adapter_cfg = json.loads(adapter_cfg) + name = (agent.get("name") or agent.get("id") or "?")[:29] + + try: + adapter_cfg = agent.get("adapter_config") or {} + if isinstance(adapter_cfg, str): + adapter_cfg = json.loads(adapter_cfg) + except (json.JSONDecodeError, TypeError): + print(f"{name:<30} {'(malformed adapter_config in DB)':<55} {'⚠ ERROR':<12}") + continue file_path = adapter_cfg.get("instructionsFilePath", "") - name = (agent.get("name") or agent.get("id") or "?")[:29] if not file_path: print(f"{name:<30} {'(none)':<55} {'⚠ NOT SET':<12}") @@ -324,9 +329,12 @@ async def check_instructions(agents: list[dict]) -> bool: mtime = datetime.fromtimestamp(stat.st_mtime).strftime("%Y-%m-%d %H:%M") # Check for drift vs DB metadata - metadata = agent.get("metadata") or {} - if isinstance(metadata, str): - metadata = json.loads(metadata) + try: + metadata = agent.get("metadata") or {} + if isinstance(metadata, str): + metadata = json.loads(metadata) + except (json.JSONDecodeError, TypeError): + metadata = {} db_mtime = metadata.get("claude_md_mtime", "") actual_mtime = str(int(stat.st_mtime)) drift = " ⚠ DRIFT" if db_mtime and db_mtime != actual_mtime else ""