mirror of
https://github.com/Sea-Haven-Industries/open-swe.git
synced 2026-10-07 16:19:09 +00:00
Port five upstream PRs onto dev: - #1621 / #1658: durable dispatch with loopback webhook defense, create_durable_run helper, _config_with_prepare_run_id, degradation to None for relative/loopback completion webhook URLs - #1696: run-level completion webhook deduplication (replace claim-then-post with post-then-flag per run_id), DeferredErrorModel for graph-factory resilience, ToolRetryMiddleware for task subagents, TimeoutWrapupMiddleware for all three graphs - #1697: lazy-load __init__.py for agent.middleware, agent.tools, agent.dashboard (PEP 562); defer heavy imports (exa_py in web_search, agent.webapp in request_pr_review, deepagents in sandbox.py); add ttl_cache.py with stale-while-revalidate for tool loaders Refs: #137
48 lines
1.5 KiB
Python
48 lines
1.5 KiB
Python
from typing import Any
|
|
|
|
from langgraph.config import get_config
|
|
|
|
from agent.utils.slack import GitHubPrRef, parse_github_pr_url
|
|
|
|
|
|
async def trigger_pr_review_from_ref(
|
|
pr_ref: GitHubPrRef,
|
|
*,
|
|
source: str,
|
|
github_login: str = "",
|
|
github_user_id: int | None = None,
|
|
slack_channel_id: str = "",
|
|
slack_thread_ts: str = "",
|
|
) -> dict[str, Any]:
|
|
from agent.webapp import trigger_pr_review_from_ref as _trigger_pr_review_from_ref
|
|
|
|
return await _trigger_pr_review_from_ref(
|
|
pr_ref,
|
|
source=source,
|
|
github_login=github_login,
|
|
github_user_id=github_user_id,
|
|
slack_channel_id=slack_channel_id,
|
|
slack_thread_ts=slack_thread_ts,
|
|
)
|
|
|
|
|
|
async def request_pr_review(pr_url: str) -> dict[str, Any]:
|
|
"""Start the reviewer agent for a GitHub pull request URL."""
|
|
pr_ref = parse_github_pr_url(pr_url)
|
|
if not pr_ref:
|
|
return {
|
|
"success": False,
|
|
"error": "Expected a GitHub PR URL like https://github.com/OWNER/REPO/pull/NUMBER",
|
|
}
|
|
|
|
configurable = get_config().get("configurable", {})
|
|
source = configurable.get("source") or "agent"
|
|
slack_thread = configurable.get("slack_thread") or {}
|
|
return await trigger_pr_review_from_ref(
|
|
pr_ref,
|
|
source=source,
|
|
github_login=configurable.get("github_login", ""),
|
|
github_user_id=configurable.get("github_user_id"),
|
|
slack_channel_id=slack_thread.get("channel_id", ""),
|
|
slack_thread_ts=slack_thread.get("thread_ts", ""),
|
|
)
|