diff --git a/apps/api/src/services/gitea_webhook_service.py b/apps/api/src/services/gitea_webhook_service.py index e26221a3..2a438c7f 100644 --- a/apps/api/src/services/gitea_webhook_service.py +++ b/apps/api/src/services/gitea_webhook_service.py @@ -214,22 +214,27 @@ class GiteaWebhookService: Phase 22 P0 修復: 使用 OpenClawHttpService (2026-03-31) """ try: - from src.services.openclaw_http_service import get_openclaw_http_service - service = get_openclaw_http_service() - data = await service.code_review( - repo_name=repo_name, - pr_title=pr_title, - pr_body=pr_body, - diff_content=diff_content, - changed_files=changed_files, - additions=additions, - deletions=deletions, - prefer_local=True, - timeout=120.0, + from src.services.local_code_review_service import get_local_code_review_service + svc = get_local_code_review_service() + pr_id = f"{repo_name}-{pr_title[:20]}" + result = await svc.review_pr( + pr_id=pr_id, + repo=repo_name, + title=pr_title, + diff=diff_content, ) - - if data: - return CodeReviewResult(**data) + if result and isinstance(result, dict): + review_text = result.get("review_text", "") + issues_count = result.get("issues_count", 0) + return CodeReviewResult( + summary=review_text[:300] if review_text else "PR review completed", + issues=[{"text": line} for line in review_text.split("\n") if "⚠️" in line], + suggestions=[], + security_concerns=[], + quality_score=max(0.0, 100.0 - issues_count * 15), + analyzed_by=result.get("model", "ollama"), + confidence=0.7, + ) return None except Exception as e: @@ -268,7 +273,20 @@ class GiteaWebhookService: commit_summary=commit_msgs, files_summary=files_summary, ) - return result + # local_code_review_service 回傳 dict,需轉成 CodeReviewResult + if result and isinstance(result, dict): + issues_count = result.get("issues_count", 0) + review_text = result.get("review_text", "") + return CodeReviewResult( + summary=review_text[:300] if review_text else "Push review completed", + issues=[{"text": line} for line in review_text.split("\n") if "⚠️" in line], + suggestions=[], + security_concerns=[], + quality_score=max(0.0, 100.0 - issues_count * 15), + analyzed_by=result.get("model", "ollama"), + confidence=0.7, + ) + return result # type: ignore[return-value] # None case except Exception as e: logger.exception("openclaw_push_review_error", error=str(e))