from __future__ import annotations from gitea_codex_bot.types import ParsedCommand def _inject_head_sha_marker(head_sha: str, body: str) -> str: marker = f"" stripped = body.strip() if not stripped: return marker if stripped.startswith("", "## Codex Review", "", f"Verdict: `{verdict}`", f"Confidence: `{confidence:.2f}`", "", summary, ""] if not findings: lines.append("No blocking issues found.") else: lines.append("Findings:") for idx, finding in enumerate(findings, start=1): severity = finding.get("severity", "unknown") file_path = finding.get("file", "unknown") line_start = finding.get("line_start", "?") line_end = finding.get("line_end", line_start) title = finding.get("title", "Issue") body = finding.get("body", "") suggestion = finding.get("suggestion", "") lines.extend( [ f"{idx}. `{file_path}:{line_start}-{line_end}` ({severity})", f" {title}", f" {body}", f" Suggestion: {suggestion}" if suggestion else " Suggestion: n/a", ] ) body = "\n".join(lines).strip() if usage_note: body = f"{body}\n\n{usage_note}" if missing_config_note: body = f"{body}\n\n{missing_config_note}" return _inject_head_sha_marker(head_sha, body) def _format_usage_note(result: dict) -> str: meta = result.get("_meta") if not isinstance(meta, dict): return "" model = meta.get("model") model_text = model.strip() if isinstance(model, str) and model.strip() else "unknown" usage = meta.get("usage") if not isinstance(usage, dict): return f"_Note: model `{model_text}`._" input_tokens = usage.get("input_tokens") output_tokens = usage.get("output_tokens") total_tokens = usage.get("total_tokens") parts = [f"model `{model_text}`"] if isinstance(input_tokens, int): parts.append(f"input `{input_tokens}`") if isinstance(output_tokens, int): parts.append(f"output `{output_tokens}`") if isinstance(total_tokens, int): parts.append(f"total `{total_tokens}`") return f"_Note: {', '.join(parts)} tokens used._" def _format_missing_config_note(repo_configured: bool) -> str: if repo_configured: return "" return "ℹ️.codex-review.yml is not configured"