From b76eb5584fa0734cd3c430b148fd0233763f635d Mon Sep 17 00:00:00 2001 From: Yazeed Allabadi Date: Mon, 21 Sep 2026 12:36:15 +0300 Subject: [PATCH] fix(detection): support list-format JSON output from Claude Code CLI 2.1+ --- Detection/guardrail/adr_agent/adr_baseline.py | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/Detection/guardrail/adr_agent/adr_baseline.py b/Detection/guardrail/adr_agent/adr_baseline.py index f6ad44b..457d45e 100644 --- a/Detection/guardrail/adr_agent/adr_baseline.py +++ b/Detection/guardrail/adr_agent/adr_baseline.py @@ -898,6 +898,8 @@ def _invoke_claude_reasoning( raise RuntimeError(f"Claude analysis failed: {result.stderr}") claude_result = json.loads(result.stdout) + if isinstance(claude_result, list): + claude_result = next((item for item in reversed(claude_result) if isinstance(item, dict) and item.get('type') == 'result'), claude_result[-1] if claude_result else {}) if claude_result.get('subtype') != 'success' or claude_result.get('is_error'): error_msg = claude_result.get('result', 'Unknown error') raise ValueError(f"Claude analysis failed: {error_msg}") @@ -1139,6 +1141,8 @@ def _extract_mcp_tool_usage(self, stdout: str) -> Dict[str, int]: try: # Parse the Claude result to find the session file path claude_result = json.loads(stdout) + if isinstance(claude_result, list): + claude_result = next((item for item in reversed(claude_result) if isinstance(item, dict) and item.get('type') == 'result'), claude_result[-1] if claude_result else {}) session_id = claude_result.get('session_id') if not session_id: