Skip to content

Commit a97aa41

Browse files
committed
fix(cli): preserve full per-skill JSON payload in recursive scans (#228)
Signed-off-by: Rod Boev <rod.boev@gmail.com>
1 parent 5df93c5 commit a97aa41

2 files changed

Lines changed: 344 additions & 32 deletions

File tree

src/skillspector/cli.py

Lines changed: 32 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -166,6 +166,20 @@ def _write_result(
166166
print(report_body)
167167

168168

169+
def _recursive_json_payload(result: dict[str, object]) -> dict[str, object] | None:
170+
"""Return parsed report_body when it is valid JSON object text."""
171+
raw_report_body = result.get("report_body")
172+
if not isinstance(raw_report_body, str):
173+
return None
174+
175+
try:
176+
parsed = json.loads(raw_report_body)
177+
except json.JSONDecodeError:
178+
return None
179+
180+
return parsed if isinstance(parsed, dict) else None
181+
182+
169183
def _cleanup_result(result: dict[str, object]) -> None:
170184
"""Remove temp dir from graph result if set."""
171185
temp_dir = result.get("temp_dir_for_cleanup")
@@ -420,17 +434,25 @@ def _scan_multi_skill(
420434
if "error" in result:
421435
combined["skills"].append({"name": skill.name, "error": result["error"]})
422436
else:
423-
combined["skills"].append(
424-
{
425-
"name": skill.name,
426-
"path": skill.relative_path,
427-
"risk_score": result.get("risk_score", 0),
428-
"risk_severity": result.get("risk_severity", "LOW"),
429-
"finding_count": len(
430-
result.get("filtered_findings") or result.get("findings") or []
431-
),
432-
}
437+
payload = _recursive_json_payload(result) or {}
438+
entry = {
439+
"name": skill.name,
440+
"path": skill.relative_path,
441+
"risk_score": result.get("risk_score", 0),
442+
"risk_severity": result.get("risk_severity", "LOW"),
443+
"finding_count": len(
444+
result.get("filtered_findings") or result.get("findings") or []
445+
),
446+
}
447+
entry.update(payload)
448+
entry["name"] = skill.name
449+
entry["path"] = skill.relative_path
450+
entry["risk_score"] = result.get("risk_score", 0)
451+
entry["risk_severity"] = result.get("risk_severity", "LOW")
452+
entry["finding_count"] = len(
453+
result.get("filtered_findings") or result.get("findings") or []
433454
)
455+
combined["skills"].append(entry)
434456
Path(output).write_text(json.dumps(combined, indent=2), encoding="utf-8")
435457
console.print(f"[green]Combined report saved to:[/green] {output}")
436458
elif output:

0 commit comments

Comments
 (0)