feat(robomp): added incoming PR review feature with classify and submit

- Added `review_pr` task that checks out PR head in a detached worktree, classifies rank/type/area, and posts a batched GitHub review as `event=COMMENT`.
- Added four new host tools: `fetch_pr`, `classify_pr`, `pr_review_comment`, and `submit_pr_review`; review tools self-gate on `review_mode`, push/open-PR tools refuse when `review_mode` is set.
- Added sqlite staging table `pr_review_comments` with `stage_review_comment`, `list_staged_review_comments`, and `clear_staged_review_comments` DAOs.
- Routed `pull_request.opened/reopened/ready_for_review` to `review_pr` and extended `pull_request.closed` cleanup to any tracked PR regardless of author.
This commit is contained in:
can1357
2026-06-02 08:23:04 +02:00
parent 04cc014c16
commit b503f7d86b
30 changed files with 2392 additions and 112 deletions
+15 -1
View File
@@ -374,6 +374,18 @@ class WorkerPool:
attempts=row.attempts,
slot_uid=slot_uid,
)
elif event == "pull_request" and action in ("opened", "reopened", "ready_for_review"):
await tasks.review_pr(
settings=self.settings,
db=self.db,
github=self.github,
sandbox=self.sandbox,
git_transport=self.git_transport,
payload=row.payload,
delivery_id=row.delivery_id,
attempts=row.attempts,
slot_uid=slot_uid,
)
elif event == "pull_request_review_comment" and action == "created":
await tasks.handle_review(
settings=self.settings,
@@ -395,12 +407,14 @@ class WorkerPool:
target_state="closed",
)
elif event == "pull_request" and action == "closed":
pr = row.payload.get("pull_request") or {}
target_state = "merged" if bool(pr.get("merged")) else "closed"
await tasks.cleanup_workspace(
settings=self.settings,
db=self.db,
sandbox=self.sandbox,
payload=row.payload,
target_state="merged",
target_state=target_state,
)
else:
log.info("no-op dispatch", extra={"event": event, "action": action})