agent: implement issue #3 - Enhancement: 检查现有的代码框架,确认是否需要优化
This commit is contained in:
@@ -85,25 +85,34 @@ class GiteaClient:
|
||||
return repositories
|
||||
|
||||
def list_open_issues(self, owner: str, name: str) -> list[GiteaIssue]:
|
||||
response = self.client.get(
|
||||
f"/repos/{owner}/{name}/issues",
|
||||
params={"state": "open", "type": "issues", "limit": 50},
|
||||
)
|
||||
response.raise_for_status()
|
||||
issues: list[GiteaIssue] = []
|
||||
for item in response.json():
|
||||
if item.get("pull_request"):
|
||||
continue
|
||||
issues.append(
|
||||
GiteaIssue(
|
||||
number=int(item["number"]),
|
||||
title=item.get("title") or "",
|
||||
body=item.get("body") or "",
|
||||
labels=labels_from_gitea(item.get("labels")),
|
||||
state=item.get("state") or "open",
|
||||
html_url=item.get("html_url") or item.get("url") or "",
|
||||
)
|
||||
page = 1
|
||||
limit = 50
|
||||
while True:
|
||||
response = self.client.get(
|
||||
f"/repos/{owner}/{name}/issues",
|
||||
params={"state": "open", "type": "issues", "page": page, "limit": limit},
|
||||
)
|
||||
response.raise_for_status()
|
||||
payload = response.json()
|
||||
if not payload:
|
||||
break
|
||||
for item in payload:
|
||||
if item.get("pull_request"):
|
||||
continue
|
||||
issues.append(
|
||||
GiteaIssue(
|
||||
number=int(item["number"]),
|
||||
title=item.get("title") or "",
|
||||
body=item.get("body") or "",
|
||||
labels=labels_from_gitea(item.get("labels")),
|
||||
state=item.get("state") or "open",
|
||||
html_url=item.get("html_url") or item.get("url") or "",
|
||||
)
|
||||
)
|
||||
if len(payload) < limit:
|
||||
break
|
||||
page += 1
|
||||
return issues
|
||||
|
||||
def create_pull_request(
|
||||
|
||||
@@ -86,11 +86,13 @@ def render_pr_body(issue: IssueRecord, implementation_report: str) -> str:
|
||||
|
||||
|
||||
def parse_review_report(raw: str) -> ReviewReport:
|
||||
verdict_match = re.search(r"(?im)^\s*(?:##\s*)?Verdict\s*:?\s*`?([A-Z_]+)`?", raw)
|
||||
verdict_match = re.search(r"(?im)^\s*(?:[-*]\s*)?(?:##\s*)?Verdict\s*:?\s*`?([A-Z_]+)`?", raw)
|
||||
verdict = verdict_match.group(1) if verdict_match else "NEEDS_HUMAN_DECISION"
|
||||
if verdict not in VALID_VERDICTS:
|
||||
verdict = "NEEDS_HUMAN_DECISION"
|
||||
suggested = extract_section(raw, "Suggested PR Comment").strip()
|
||||
if not suggested:
|
||||
suggested = extract_inline_field(raw, "Suggested PR Comment").strip()
|
||||
if not suggested:
|
||||
suggested = raw.strip()
|
||||
return ReviewReport(verdict=verdict, raw=raw, suggested_pr_comment=suggested)
|
||||
@@ -104,6 +106,12 @@ def extract_section(raw: str, title: str) -> str:
|
||||
return match.group("body") if match else ""
|
||||
|
||||
|
||||
def extract_inline_field(raw: str, title: str) -> str:
|
||||
pattern = re.compile(rf"(?im)^\s*(?:[-*]\s*)?{re.escape(title)}\s*:\s*(?P<body>.+?)\s*$")
|
||||
match = pattern.search(raw)
|
||||
return match.group("body") if match else ""
|
||||
|
||||
|
||||
def render_human_review_summary(review: ReviewReport) -> str:
|
||||
return f"""## 代理评审摘要
|
||||
|
||||
|
||||
Reference in New Issue
Block a user