From 32ec9b485f390226343954689d9939b1c5f881eb Mon Sep 17 00:00:00 2001 From: Johannes du Plessis Date: Thu, 21 May 2026 09:17:07 -0700 Subject: [PATCH] feat: restructure Open SWE Review tab + wire create_prs (#1319) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * feat(dashboard): restructure Open SWE Review tab + wire create_prs Restructures the dashboard around two related changes the reviewer settings have been asking for: - Wire profile.create_prs. Defaults to true (opt-out); when off the system prompt gets a `Pull Request Policy Override` section telling the agent to push the branch and notify with the branch URL instead of opening a PR. Removes the noop Slack Notifications / Allow Artifacts / First Name / Last Name controls and their schema fields. - Repositories opt-in for Open SWE Review. New per-team enabled list stored in the LangGraph Store (`["enabled_review_repos"]`). Every reviewer webhook chokepoint now goes through `_is_repo_enabled_for_review` which AND-combines the existing env allowlist with the dashboard list. Default is empty (opt-in) — admins enable repos per-installation from the new Repositories page nested under Open SWE Review. - Open SWE Review tab now mirrors the Cursor "rules" pattern: main page shows installation rows + a Rules entry; both drill into nested pages (/review/repositories/$owner and /review/styles) with a back link. - Adds the new logo/favicon assets shipped from sidebar + html head. Tests pass with a new autouse fixture (`tests/conftest.py`) that defaults `is_review_repo_enabled` to True for existing allowlist tests. * fix(dashboard): make main content scroll independently of the sidebar Outer flex container was min-h-svh, so it grew with main's content and the whole page scrolled — sidebar moved with it. Pin to h-svh + overflow-hidden so the sidebar stays put and only
scrolls. * fix(dashboard): make disabled repo toggles obviously disabled Switch's disabled state used opacity-50 against a muted background, so the not-admin state looked nearly identical to the off state. Bump to opacity-40 + grayscale, and wrap each repo toggle in a span carrying a native hover tooltip explaining why it's disabled. * fix(switch): handle base-ui's data-disabled state base-ui's Switch.Root sets data-disabled (not the HTML disabled attribute) when disabled, so Tailwind's disabled: variant never matches and the button keeps its cursor-pointer + clickable look. Mirror the styling under the data-[disabled] variant and add pointer-events-none so the disabled state is both visible and actually unclickable. * feat(dashboard): paginate per-installation repository list 20 repos per page with Prev / page X of Y / Next controls at the bottom. Pager only renders when there are more than 20 repos. Page resets to 0 when navigating between installations. * feat(dashboard): global default model selectors for Agent + Reviewer Adds team-wide default model + reasoning effort for both agents in the Admin tab so operators can switch models without redeploying. Resolution chain: Agent: hardcoded -> LLM_MODEL_ID env -> team default -> user profile Reviewer: hardcoded -> LLM_MODEL_ID env -> team default -> per-call configurable Team defaults live in team_settings and are validated against the SUPPORTED_MODELS allowlist + the model's supported reasoning efforts. 'Inherit from env' clears the override and falls back to LLM_MODEL_ID. * refactor(models): drop LLM_MODEL_ID env in favour of the team default The team default is now the single source of truth for the runtime model choice; per-user (agent) and per-call configurable (reviewer) selections still win on top. When no admin has touched the team default, it surfaces the hardcoded fallback (DEFAULT_MODEL_ID + its default effort), so the admin UI's dropdown is always pre-populated with a sensible value. The Admin UI loses the 'Inherit from env' option since there is no longer an env layer to inherit from. * chore(models): set hardcoded fallback to gpt-5.5 medium Decouple the team-default boot value (gpt-5.5 / medium) from each model's ProfileForm-suggested default_effort so we can change one without nudging the other. The Opus xhigh default for new user profiles is unchanged. * feat(dashboard): trigger-mode copy, Coming Soon badges, logout in My Settings - Rename trigger mode 'ready_for_review' -> 'once_per_pr' with new description copy that matches the screenshot. Legacy stored values fall back to 'every_push' on read so the UI never shows an unknown selection. - Add a 'Coming soon' badge + greyed-out + disabled state on the controls that don't have runtime consumers yet: Trigger Mode, Autofix Mode, Autofix Severity Threshold, and Automatically fix CI failures. SettingsRow grew a comingSoon prop to keep this consistent. - My Settings drops the noop PR Preferences section and adds a Sign Out button. preferred_pr_destination is removed from the profile schema; old records get the field popped on next write. --------- Co-authored-by: open-swe[bot] --- agent/dashboard/agent_overrides.py | 10 + agent/dashboard/enabled_repos.py | 68 +++++++ agent/dashboard/options.py | 13 ++ agent/dashboard/profiles.py | 18 +- agent/dashboard/routes.py | 26 +++ agent/dashboard/team_settings.py | 84 +++++++- agent/prompt.py | 10 + agent/reviewer.py | 20 +- agent/server.py | 16 +- agent/webapp.py | 49 +++-- tests/conftest.py | 26 +++ tests/test_github_issue_webhook.py | 6 +- ui/assets/LangChain_Symbol_LightBlue.png | Bin 0 -> 20784 bytes ui/assets/ic_launcher_round.png | Bin 0 -> 22317 bytes ui/assets/playstore-icon.png | Bin 0 -> 74142 bytes ui/public/apple-touch-icon.png | Bin 0 -> 22317 bytes ui/public/favicon.ico | Bin 3870 -> 0 bytes ui/public/favicon.png | Bin 0 -> 22317 bytes ui/public/logo-mark.png | Bin 0 -> 20784 bytes ui/src/components/AppShell.tsx | 42 +++- ui/src/components/AppSidebar.tsx | 6 +- ui/src/components/ui/switch.tsx | 3 +- ui/src/lib/api.ts | 23 ++- ui/src/lib/profile.ts | 5 - ui/src/routeTree.gen.ts | 42 ++++ ui/src/routes/__root.tsx | 6 +- ui/src/routes/admin.tsx | 184 +++++++++++++++-- ui/src/routes/cloud-agents.tsx | 27 +-- ui/src/routes/my-settings.tsx | 132 +++--------- ui/src/routes/review.tsx | 153 ++++++++++++-- ui/src/routes/review_.repositories.$owner.tsx | 189 ++++++++++++++++++ ui/src/routes/review_.styles.tsx | 34 ++++ 32 files changed, 950 insertions(+), 242 deletions(-) create mode 100644 agent/dashboard/enabled_repos.py create mode 100644 tests/conftest.py create mode 100644 ui/assets/LangChain_Symbol_LightBlue.png create mode 100644 ui/assets/ic_launcher_round.png create mode 100644 ui/assets/playstore-icon.png create mode 100644 ui/public/apple-touch-icon.png delete mode 100644 ui/public/favicon.ico create mode 100644 ui/public/favicon.png create mode 100644 ui/public/logo-mark.png create mode 100644 ui/src/routes/review_.repositories.$owner.tsx create mode 100644 ui/src/routes/review_.styles.tsx diff --git a/agent/dashboard/agent_overrides.py b/agent/dashboard/agent_overrides.py index c2672468..526dd0fa 100644 --- a/agent/dashboard/agent_overrides.py +++ b/agent/dashboard/agent_overrides.py @@ -72,6 +72,16 @@ async def load_profile(login: str) -> dict[str, Any] | None: return value if isinstance(value, dict) else None +def profile_create_prs(profile: dict[str, Any] | None) -> bool: + """Return whether the agent should automatically open a PR. Defaults to True.""" + if not isinstance(profile, dict): + return True + value = profile.get("create_prs") + if isinstance(value, bool): + return value + return True + + def normalize_profile_overrides(profile: dict[str, Any]) -> tuple[str | None, str | None]: """Return ``(model_id, reasoning_effort)`` if both are valid, else ``(None, None)``.""" model_id = profile.get("default_model") diff --git a/agent/dashboard/enabled_repos.py b/agent/dashboard/enabled_repos.py new file mode 100644 index 00000000..da50e988 --- /dev/null +++ b/agent/dashboard/enabled_repos.py @@ -0,0 +1,68 @@ +"""Team-wide opt-in list of repos that Open SWE Review may auto-review. + +A single record keyed ``"default"`` holds the list. Repos default to +**disabled** — webhooks for repos absent from the list are ignored, so an +operator who installs the GitHub App into a new org doesn't get surprise +review comments on every PR. +""" + +from __future__ import annotations + +import logging +from datetime import UTC, datetime + +from langgraph_sdk import get_client + +from .review_styles import normalize_repo_full_name + +logger = logging.getLogger(__name__) + +ENABLED_REVIEW_REPOS_NAMESPACE: list[str] = ["enabled_review_repos"] +ENABLED_REVIEW_REPOS_KEY = "default" + + +def _client(): + return get_client() + + +async def list_enabled_review_repos() -> list[str]: + try: + item = await _client().store.get_item( + ENABLED_REVIEW_REPOS_NAMESPACE, ENABLED_REVIEW_REPOS_KEY + ) + except Exception as e: + logger.debug("enabled review repos lookup failed: %s", e) + return [] + if item is None: + return [] + value = item.get("value") if isinstance(item, dict) else getattr(item, "value", None) + if not isinstance(value, dict): + return [] + repos = value.get("repos") + if not isinstance(repos, list): + return [] + return [r for r in repos if isinstance(r, str)] + + +async def set_review_repo_enabled(full_name: str, enabled: bool) -> list[str]: + full_name = normalize_repo_full_name(full_name) + current = set(await list_enabled_review_repos()) + if enabled: + current.add(full_name) + else: + current.discard(full_name) + repos = sorted(current) + await _client().store.put_item( + ENABLED_REVIEW_REPOS_NAMESPACE, + ENABLED_REVIEW_REPOS_KEY, + {"repos": repos, "updated_at": datetime.now(UTC).isoformat()}, + ) + return repos + + +async def is_review_repo_enabled(owner: str, name: str) -> bool: + if not owner or not name: + return False + full_name = f"{owner.lower()}/{name.lower()}" + enabled = await list_enabled_review_repos() + return any(r.lower() == full_name for r in enabled) diff --git a/agent/dashboard/options.py b/agent/dashboard/options.py index 3b1c642a..6a31e6a4 100644 --- a/agent/dashboard/options.py +++ b/agent/dashboard/options.py @@ -29,9 +29,22 @@ SUPPORTED_MODELS: list[ModelOption] = [ SUPPORTED_MODEL_IDS: frozenset[str] = frozenset(m["id"] for m in SUPPORTED_MODELS) +DEFAULT_MODEL_ID: str = "openai:gpt-5.5" +DEFAULT_MODEL_EFFORT: str = "medium" + def model_supports_effort(model_id: str, effort: str) -> bool: for m in SUPPORTED_MODELS: if m["id"] == model_id: return effort in m["efforts"] return False + + +def default_model_pair() -> tuple[str, str]: + """Hardcoded fallback (model_id, reasoning_effort) used when no team default is set.""" + if DEFAULT_MODEL_ID in SUPPORTED_MODEL_IDS and model_supports_effort( + DEFAULT_MODEL_ID, DEFAULT_MODEL_EFFORT + ): + return DEFAULT_MODEL_ID, DEFAULT_MODEL_EFFORT + first = SUPPORTED_MODELS[0] + return first["id"], first["default_effort"] diff --git a/agent/dashboard/profiles.py b/agent/dashboard/profiles.py index 0b4bfedf..0f33db0d 100644 --- a/agent/dashboard/profiles.py +++ b/agent/dashboard/profiles.py @@ -33,15 +33,10 @@ class ProfileUpdate(BaseModel): default_model: str reasoning_effort: str default_repo: str | None = None - first_name: str | None = None - last_name: str | None = None base_branch: str | None = None branch_prefix: str | None = None auto_fix_ci: bool = True create_prs: bool = True - allow_artifacts: bool = False - slack_notifications: bool = True - preferred_pr_destination: str | None = None @field_validator("default_model") @classmethod @@ -93,17 +88,20 @@ async def upsert_profile(login: str, email: str, update: ProfileUpdate) -> dict[ "default_model": update.default_model, "reasoning_effort": update.reasoning_effort, "default_repo": update.default_repo, - "first_name": update.first_name, - "last_name": update.last_name, "base_branch": update.base_branch, "branch_prefix": update.branch_prefix, "auto_fix_ci": update.auto_fix_ci, "create_prs": update.create_prs, - "allow_artifacts": update.allow_artifacts, - "slack_notifications": update.slack_notifications, - "preferred_pr_destination": update.preferred_pr_destination, "updated_at": datetime.now(UTC).isoformat(), } + for stale_field in ( + "first_name", + "last_name", + "allow_artifacts", + "slack_notifications", + "preferred_pr_destination", + ): + value.pop(stale_field, None) await _client().store.put_item(PROFILES_NAMESPACE, login, value) return value diff --git a/agent/dashboard/routes.py b/agent/dashboard/routes.py index b52884a4..205c7fb2 100644 --- a/agent/dashboard/routes.py +++ b/agent/dashboard/routes.py @@ -10,8 +10,13 @@ from typing import Any import httpx from fastapi import APIRouter, Depends, HTTPException, Request from fastapi.responses import RedirectResponse, Response +from pydantic import BaseModel from .admin import is_admin +from .enabled_repos import ( + list_enabled_review_repos, + set_review_repo_enabled, +) from .oauth import ( COOKIE_NAME, SESSION_TTL_SECONDS, @@ -257,6 +262,27 @@ async def api_put_team_settings( return await upsert_team_settings(update) +class EnabledReviewRepoUpdate(BaseModel): + full_name: str + enabled: bool + + +@router.get("/enabled-review-repos") +async def api_list_enabled_review_repos( + _session: dict[str, Any] = _SESSION_DEP, +) -> dict[str, list[str]]: + return {"repos": await list_enabled_review_repos()} + + +@router.put("/enabled-review-repos") +async def api_set_enabled_review_repo( + update: EnabledReviewRepoUpdate, + _admin: dict[str, Any] = _ADMIN_DEP, +) -> dict[str, list[str]]: + repos = await set_review_repo_enabled(update.full_name, update.enabled) + return {"repos": repos} + + def _next_link_url(link_header: str | None) -> str | None: if not link_header: return None diff --git a/agent/dashboard/team_settings.py b/agent/dashboard/team_settings.py index 39da1c99..e4b0570e 100644 --- a/agent/dashboard/team_settings.py +++ b/agent/dashboard/team_settings.py @@ -12,14 +12,16 @@ from datetime import UTC, datetime from typing import Any, Literal from langgraph_sdk import get_client -from pydantic import BaseModel +from pydantic import BaseModel, model_validator + +from .options import SUPPORTED_MODEL_IDS, default_model_pair, model_supports_effort logger = logging.getLogger(__name__) TEAM_SETTINGS_NAMESPACE: list[str] = ["team_settings"] TEAM_SETTINGS_KEY = "default" -TriggerMode = Literal["every_push", "ready_for_review", "manual"] +TriggerMode = Literal["every_push", "once_per_pr", "manual"] AutofixMode = Literal["off", "low", "medium", "high"] @@ -29,6 +31,31 @@ class TeamSettingsUpdate(BaseModel): pr_summaries: bool = True autofix_mode: AutofixMode = "off" autofix_severity_threshold: AutofixMode = "medium" + default_agent_model: str | None = None + default_agent_reasoning_effort: str | None = None + default_reviewer_model: str | None = None + default_reviewer_reasoning_effort: str | None = None + + @model_validator(mode="after") + def _validate_model_pairs(self) -> TeamSettingsUpdate: + _validate_model_effort_pair( + self.default_agent_model, self.default_agent_reasoning_effort, "agent" + ) + _validate_model_effort_pair( + self.default_reviewer_model, self.default_reviewer_reasoning_effort, "reviewer" + ) + return self + + +def _validate_model_effort_pair(model: str | None, effort: str | None, role: str) -> None: + if model is None and effort is None: + return + if model is None: + raise ValueError(f"{role} reasoning effort set without a model") + if model not in SUPPORTED_MODEL_IDS: + raise ValueError(f"unsupported {role} model: {model}") + if effort is None or not model_supports_effort(model, effort): + raise ValueError(f"effort {effort!r} not supported by {role} model {model!r}") def _client(): @@ -36,28 +63,42 @@ def _client(): def _default_settings() -> dict[str, Any]: + fallback_model, fallback_effort = default_model_pair() return { "trigger_mode": "every_push", "review_draft_prs": False, "pr_summaries": True, "autofix_mode": "off", "autofix_severity_threshold": "medium", + "default_agent_model": fallback_model, + "default_agent_reasoning_effort": fallback_effort, + "default_reviewer_model": fallback_model, + "default_reviewer_reasoning_effort": fallback_effort, "updated_at": None, } async def get_team_settings() -> dict[str, Any]: + defaults = _default_settings() try: item = await _client().store.get_item(TEAM_SETTINGS_NAMESPACE, TEAM_SETTINGS_KEY) except Exception as e: logger.debug("team settings lookup failed: %s", e) - return _default_settings() + return defaults if item is None: - return _default_settings() + return defaults value = item.get("value") if isinstance(item, dict) else getattr(item, "value", None) if not isinstance(value, dict): - return _default_settings() - return {**_default_settings(), **value} + return defaults + # Skip None-valued model fields so legacy records (or PUTs that cleared the + # selection) still surface the hardcoded default instead of a null. + overlay = {k: v for k, v in value.items() if v is not None} + merged = {**defaults, **overlay} + # Drop obsolete trigger mode values so a legacy record doesn't surface a + # value the new TriggerMode literal would reject on the next PUT. + if merged.get("trigger_mode") not in {"every_push", "once_per_pr", "manual"}: + merged["trigger_mode"] = defaults["trigger_mode"] + return merged async def upsert_team_settings(update: TeamSettingsUpdate) -> dict[str, Any]: @@ -67,7 +108,38 @@ async def upsert_team_settings(update: TeamSettingsUpdate) -> dict[str, Any]: "pr_summaries": update.pr_summaries, "autofix_mode": update.autofix_mode, "autofix_severity_threshold": update.autofix_severity_threshold, + "default_agent_model": update.default_agent_model, + "default_agent_reasoning_effort": update.default_agent_reasoning_effort, + "default_reviewer_model": update.default_reviewer_model, + "default_reviewer_reasoning_effort": update.default_reviewer_reasoning_effort, "updated_at": datetime.now(UTC).isoformat(), } await _client().store.put_item(TEAM_SETTINGS_NAMESPACE, TEAM_SETTINGS_KEY, value) return value + + +async def get_team_default_model( + role: Literal["agent", "reviewer"], +) -> tuple[str, str]: + """Return the team-wide default ``(model_id, reasoning_effort)`` for ``role``. + + Always returns a valid pair: the admin-configured pair if set, otherwise the + hardcoded fallback from :func:`agent.dashboard.options.default_model_pair`. + Invalid stored pairs (unsupported model or mismatched effort) fall back to + the hardcoded default rather than propagating bad data. + """ + settings = await get_team_settings() + if role == "agent": + model = settings.get("default_agent_model") + effort = settings.get("default_agent_reasoning_effort") + else: + model = settings.get("default_reviewer_model") + effort = settings.get("default_reviewer_reasoning_effort") + if ( + isinstance(model, str) + and model in SUPPORTED_MODEL_IDS + and isinstance(effort, str) + and model_supports_effort(model, effort) + ): + return model, effort + return default_model_pair() diff --git a/agent/prompt.py b/agent/prompt.py index 246e6833..f8e0148a 100644 --- a/agent/prompt.py +++ b/agent/prompt.py @@ -377,6 +377,13 @@ def _render_collaboration_section(identity: CollaboratorIdentity | None) -> str: ) +NO_PR_OVERRIDE_SECTION = """--- + +### Pull Request Policy Override + +The user has disabled automatic PR creation. After implementation, **commit and push your branch** so the work is preserved, then notify the source channel with the branch URL (e.g. `https://github.com///tree/`) and a summary. **Do not** run `gh pr create` or `gh pr edit`. Ignore any instructions elsewhere in this prompt that tell you to open or update a draft pull request.""" + + SYSTEM_PROMPT_TEMPLATE = ( WORKING_ENV_SECTION + TASK_OVERVIEW_SECTION @@ -394,6 +401,7 @@ SYSTEM_PROMPT_TEMPLATE = ( + COMMUNICATION_SECTION + EXTERNAL_UNTRUSTED_COMMENTS_SECTION + COMMIT_PR_SECTION + + "{pr_policy_override_section}" + "{collaboration_section}" ) @@ -403,6 +411,7 @@ def construct_system_prompt( linear_project_id: str = "", linear_issue_number: str = "", triggering_user_identity: CollaboratorIdentity | None = None, + create_prs: bool = True, ) -> str: default_prompt_section = _load_default_prompt() return SYSTEM_PROMPT_TEMPLATE.format( @@ -410,5 +419,6 @@ def construct_system_prompt( linear_project_id=linear_project_id or "", linear_issue_number=linear_issue_number or "", default_prompt_section=default_prompt_section, + pr_policy_override_section="" if create_prs else NO_PR_OVERRIDE_SECTION, collaboration_section=_render_collaboration_section(triggering_user_identity), ) diff --git a/agent/reviewer.py b/agent/reviewer.py index ae5dca48..9fe3a7b3 100644 --- a/agent/reviewer.py +++ b/agent/reviewer.py @@ -16,7 +16,6 @@ agent for code review only: # ruff: noqa: E402 import logging -import os import warnings logger = logging.getLogger(__name__) @@ -40,7 +39,6 @@ from .reviewer_findings import ( ) from .server import ( DEFAULT_LLM_MAX_TOKENS, - DEFAULT_LLM_MODEL_ID, DEFAULT_RECURSION_LIMIT, MODEL_CALL_RECURSION_LIMIT, ensure_sandbox_for_thread, @@ -494,14 +492,20 @@ async def get_reviewer_agent(config: RunnableConfig) -> Pregel: head_sha=head_sha, ) + from .dashboard.team_settings import get_team_default_model + configured_model_id = config["configurable"].get("reviewer_model_id") - model_id = ( - configured_model_id - if isinstance(configured_model_id, str) and configured_model_id - else os.environ.get("LLM_MODEL_ID", DEFAULT_LLM_MODEL_ID) - ) configured_effort = config["configurable"].get("reviewer_reasoning_effort") - reasoning_effort = configured_effort if isinstance(configured_effort, str) else None + if isinstance(configured_model_id, str) and configured_model_id: + model_id = configured_model_id + reasoning_effort = configured_effort if isinstance(configured_effort, str) else None + else: + model_id, reasoning_effort = await get_team_default_model("reviewer") + logger.info( + "Using team default reviewer model: model=%s effort=%s", + model_id, + reasoning_effort, + ) model_kwargs = provider_model_kwargs( model_id, reasoning_effort, diff --git a/agent/server.py b/agent/server.py index 4fd6a34c..c6e59dce 100644 --- a/agent/server.py +++ b/agent/server.py @@ -31,8 +31,11 @@ from langsmith.sandbox import SandboxClientError from .dashboard.agent_overrides import ( load_profile, normalize_profile_overrides, + profile_create_prs, resolve_github_login, ) +from .dashboard.options import DEFAULT_MODEL_ID +from .dashboard.team_settings import get_team_default_model from .integrations.langsmith import _configure_github_proxy from .middleware import ( ModelFallbackMiddleware, @@ -331,7 +334,7 @@ async def ensure_sandbox_for_thread(thread_id: str) -> SandboxBackendProtocol: return sandbox_backend -DEFAULT_LLM_MODEL_ID = "openai:gpt-5.5" +DEFAULT_LLM_MODEL_ID = DEFAULT_MODEL_ID DEFAULT_LLM_MAX_TOKENS = 64_000 DEFAULT_RECURSION_LIMIT = 9_999 MODEL_CALL_RECURSION_LIMIT = 5_000 # ~half the recursion limit to account for tool calls @@ -376,8 +379,10 @@ async def get_agent(config: RunnableConfig) -> Pregel: def backend_factory(_runtime: object, _thread_id: str = thread_id) -> SandboxBackendProtocol: return _get_cached_sandbox_backend(_thread_id) - model_id = os.environ.get("LLM_MODEL_ID", DEFAULT_LLM_MODEL_ID) - profile_effort: str | None = None + model_id, profile_effort = await get_team_default_model("agent") + logger.info("Using team default agent model: model=%s effort=%s", model_id, profile_effort) + + profile: dict[str, Any] | None = None profile_login = resolve_github_login(config) if profile_login: profile = await load_profile(profile_login) @@ -393,6 +398,10 @@ async def get_agent(config: RunnableConfig) -> Pregel: model_id = overridden_model profile_effort = overridden_effort + create_prs = profile_create_prs(profile) + if not create_prs: + logger.info("PR creation disabled by profile for %s", profile_login) + model_kwargs = provider_model_kwargs( model_id, profile_effort, @@ -418,6 +427,7 @@ async def get_agent(config: RunnableConfig) -> Pregel: linear_project_id=linear_project_id, linear_issue_number=linear_issue_number, triggering_user_identity=triggering_user_identity, + create_prs=create_prs, ), tools=[ http_request, diff --git a/agent/webapp.py b/agent/webapp.py index eb97c517..69586f44 100644 --- a/agent/webapp.py +++ b/agent/webapp.py @@ -22,6 +22,7 @@ from .dashboard.agent_overrides import ( get_profile_default_repo, resolve_login_from_email, ) +from .dashboard.enabled_repos import is_review_repo_enabled from .reviewer_findings import ( REVIEWER_THREAD_KIND, ReviewerPRMeta, @@ -408,6 +409,18 @@ def _is_repo_allowed_for_reviewer(repo_config: dict[str, str]) -> bool: return owner in ALLOWED_REVIEWER_GITHUB_ORGS +async def _is_repo_enabled_for_review(repo_config: dict[str, str]) -> bool: + """Combined gate: operator allowlist + team opt-in list from the dashboard. + + Both checks must pass. The opt-in list is empty by default, so repos + are off until an admin enables them in the dashboard's Open SWE Review + tab. + """ + if not _is_repo_allowed_for_reviewer(repo_config): + return False + return await is_review_repo_enabled(repo_config.get("owner", ""), repo_config.get("name", "")) + + _PUBLIC_REPO_GATE_REJECTION = { "status": "ignored", "reason": "Sender is not a member of the allowed organization for public-repo triggers", @@ -1347,8 +1360,8 @@ async def slack_webhook(request: Request, background_tasks: BackgroundTasks) -> clean_text = strip_bot_mention(text, bot_user_id, bot_username=SLACK_BOT_USERNAME) pr_ref = parse_slack_review_command(clean_text) if pr_ref: - if not _is_repo_allowed_for_reviewer({"owner": pr_ref.owner, "name": pr_ref.repo}): - return {"status": "ignored", "reason": "Repository not in reviewer allowlist"} + if not await _is_repo_enabled_for_review({"owner": pr_ref.owner, "name": pr_ref.repo}): + return {"status": "ignored", "reason": "Repository not enabled for review"} background_tasks.add_task(process_slack_pr_review_request, pr_ref, channel_id, thread_ts) return {"status": "accepted", "message": "Slack PR review request queued"} @@ -1568,8 +1581,8 @@ async def trigger_pr_review_from_ref( slack_thread_ts: str = "", ) -> dict[str, Any]: repo_config = {"owner": pr_ref.owner, "name": pr_ref.repo} - if not _is_repo_allowed_for_reviewer(repo_config): - return {"success": False, "error": "Repository not allowed for reviewer"} + if not await _is_repo_enabled_for_review(repo_config): + return {"success": False, "error": "Repository not enabled for review"} app_token, app_token_expires_at = await get_github_app_installation_token_with_expiry() if not app_token: @@ -1900,7 +1913,7 @@ async def process_github_pr_close(payload: dict[str, Any]) -> None: pr_number = pull_request.get("number") if not pr_number or not isinstance(pr_number, int): return - if not _is_repo_allowed_for_reviewer(repo_config): + if not await _is_repo_enabled_for_review(repo_config): return thread_id = generate_reviewer_thread_id( @@ -1944,9 +1957,9 @@ async def process_github_push_event(payload: dict[str, Any]) -> None: if not repo_config["owner"] or not repo_config["name"]: logger.warning("Push to %s ignored: repository owner/name missing from payload", head_ref) return - if not _is_repo_allowed_for_reviewer(repo_config): + if not await _is_repo_enabled_for_review(repo_config): logger.info( - "Push to %s/%s head=%s ignored: repo not in reviewer allowlist", + "Push to %s/%s head=%s ignored: repo not enabled for review", repo_config["owner"], repo_config["name"], head_ref, @@ -2411,25 +2424,21 @@ async def github_webhook(request: Request, background_tasks: BackgroundTasks) -> "reason": f"Unsupported GitHub pull_request action: {action}", } if action in {"closed", "reopened"}: - if not _is_repo_allowed_for_reviewer(webhook_repo_config): - return {"status": "ignored", "reason": "Repository not in reviewer allowlist"} + if not await _is_repo_enabled_for_review(webhook_repo_config): + return {"status": "ignored", "reason": "Repository not enabled for review"} logger.info("Accepted GitHub PR %s webhook, scheduling reviewer watch update", action) background_tasks.add_task(process_github_pr_close, payload) return {"status": "accepted", "message": f"Processing PR {action} for reviewer watch"} if not _is_open_swe_reviewer_request(payload): logger.info("Ignoring PR review request for a different reviewer") return {"status": "ignored", "reason": "Review request is not for open-swe bot"} - if not _is_repo_allowed_for_reviewer(webhook_repo_config): + if not await _is_repo_enabled_for_review(webhook_repo_config): logger.warning( - "Rejecting GitHub reviewer webhook: repo '%s/%s' failed reviewer allowlist", + "Rejecting GitHub reviewer webhook: repo '%s/%s' not enabled for review", webhook_repo_config.get("owner"), webhook_repo_config.get("name"), ) - if ALLOWED_REVIEWER_GITHUB_REPOS: - reason = "Repository not in allowlist" - else: - reason = "Repository org not in allowlist" - return {"status": "ignored", "reason": reason} + return {"status": "ignored", "reason": "Repository not enabled for review"} gate_rejection = await _enforce_public_repo_org_gate(payload, "pull_request") if gate_rejection is not None: @@ -2440,8 +2449,8 @@ async def github_webhook(request: Request, background_tasks: BackgroundTasks) -> return {"status": "accepted", "message": "Processing GitHub PR review request"} if event_type == "push": - if not _is_repo_allowed_for_reviewer(webhook_repo_config): - return {"status": "ignored", "reason": "Repository not in reviewer allowlist"} + if not await _is_repo_enabled_for_review(webhook_repo_config): + return {"status": "ignored", "reason": "Repository not enabled for review"} logger.info("Accepted GitHub push webhook, scheduling reviewer watch evaluation") background_tasks.add_task(process_github_push_event, payload) return {"status": "accepted", "message": "Processing GitHub push for reviewer watch"} @@ -2508,8 +2517,8 @@ async def github_webhook(request: Request, background_tasks: BackgroundTasks) -> }: is_review_command, pr_url_override = parse_github_review_command(comment_body) if is_review_command: - if not _is_repo_allowed_for_reviewer(webhook_repo_config): - return {"status": "ignored", "reason": "Repository not in reviewer allowlist"} + if not await _is_repo_enabled_for_review(webhook_repo_config): + return {"status": "ignored", "reason": "Repository not enabled for review"} background_tasks.add_task( process_github_pr_review_command, payload, event_type, pr_url_override ) diff --git a/tests/conftest.py b/tests/conftest.py new file mode 100644 index 00000000..77d2133a --- /dev/null +++ b/tests/conftest.py @@ -0,0 +1,26 @@ +"""Shared pytest fixtures.""" + +from __future__ import annotations + +import pytest + +from agent import webapp + + +@pytest.fixture(autouse=True) +def _default_enable_review_repos(monkeypatch: pytest.MonkeyPatch) -> None: + """Treat every repo as enabled for review by default. + + The dashboard's opt-in list (loaded by :func:`agent.dashboard.enabled_repos.is_review_repo_enabled`) + is empty in the test environment because there is no live LangGraph Store. Tests that + exercise the env-based allowlists (``ALLOWED_REVIEWER_GITHUB_*``) would otherwise be + blocked by the opt-in gate that lives on top of them. + + Tests targeting the opt-in gate itself should override this fixture or set + ``monkeypatch.setattr(webapp, "is_review_repo_enabled", ...)`` to a stricter stub. + """ + + async def _enabled(_owner: str, _name: str) -> bool: + return True + + monkeypatch.setattr(webapp, "is_review_repo_enabled", _enabled) diff --git a/tests/test_github_issue_webhook.py b/tests/test_github_issue_webhook.py index 0ed01a95..59d16abc 100644 --- a/tests/test_github_issue_webhook.py +++ b/tests/test_github_issue_webhook.py @@ -321,7 +321,7 @@ def test_github_webhook_blocks_reviewer_repo_not_in_reviewer_repo_allowlist(monk ) assert response.status_code == 200 - assert response.json() == {"status": "ignored", "reason": "Repository not in allowlist"} + assert response.json() == {"status": "ignored", "reason": "Repository not enabled for review"} assert called is False @@ -873,7 +873,7 @@ def test_trigger_pr_review_from_ref_respects_reviewer_allowlist(monkeypatch) -> ) ) - assert result == {"success": False, "error": "Repository not allowed for reviewer"} + assert result == {"success": False, "error": "Repository not enabled for review"} assert called is False @@ -1185,7 +1185,7 @@ def test_github_webhook_blocks_pr_review_command_outside_reviewer_allowlist(monk assert response.status_code == 200 assert response.json() == { "status": "ignored", - "reason": "Repository not in reviewer allowlist", + "reason": "Repository not enabled for review", } diff --git a/ui/assets/LangChain_Symbol_LightBlue.png b/ui/assets/LangChain_Symbol_LightBlue.png new file mode 100644 index 0000000000000000000000000000000000000000..63c36b4517affa497cca45f97595d690388788b3 GIT binary patch literal 20784 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 Y0PpwwW8_D{1^@s607*qoM6N<$f-X;~fdBvi literal 0 HcmV?d00001 diff --git a/ui/assets/playstore-icon.png b/ui/assets/playstore-icon.png new file mode 100644 index 0000000000000000000000000000000000000000..beecd6c0aecdee5826f019f0d9f7292ba6357d18 GIT binary patch literal 74142 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 literal 0 HcmV?d00001 diff --git a/ui/public/apple-touch-icon.png b/ui/public/apple-touch-icon.png new file mode 100644 index 0000000000000000000000000000000000000000..e3ac9b264d628d10246cc0d0293179d53eb960c6 GIT binary patch literal 22317 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 Y0PpwwW8_D{1^@s607*qoM6N<$f-X;~fdBvi literal 0 HcmV?d00001 diff --git a/ui/public/favicon.ico b/ui/public/favicon.ico deleted file mode 100644 index a11777cc471a4344702741ab1c8a588998b1311a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3870 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 baj7?x%VD!5Cxk2YbYLNVeiXvvpMCWYo=by@ diff --git a/ui/public/favicon.png b/ui/public/favicon.png new file mode 100644 index 0000000000000000000000000000000000000000..e3ac9b264d628d10246cc0d0293179d53eb960c6 GIT binary patch literal 22317 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 Y0PpwwW8_D{1^@s607*qoM6N<$f-X;~fdBvi literal 0 HcmV?d00001 diff --git a/ui/public/logo-mark.png b/ui/public/logo-mark.png new file mode 100644 index 0000000000000000000000000000000000000000..63c36b4517affa497cca45f97595d690388788b3 GIT binary patch literal 20784 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 gm*>9|zi^}f51hezOq_5p +
+ {backTo && ( + + + {backTo.label} + + )}

{title}

{description && ( @@ -60,18 +72,38 @@ interface SettingsRowProps { description?: string; control: ReactNode; htmlFor?: string; + comingSoon?: boolean; } -export function SettingsRow({ label, description, control, htmlFor }: SettingsRowProps) { +export function SettingsRow({ + label, + description, + control, + htmlFor, + comingSoon, +}: SettingsRowProps) { return (
-
{control}
+
{control}
); } diff --git a/ui/src/components/AppSidebar.tsx b/ui/src/components/AppSidebar.tsx index 2acdc8e1..287a9dcc 100644 --- a/ui/src/components/AppSidebar.tsx +++ b/ui/src/components/AppSidebar.tsx @@ -69,7 +69,11 @@ export function AppSidebar({ user }: { user: SessionUser }) { return (
- - persist({ slack_notifications: v })} - /> - } - /> - - {error &&

{error}

} ); diff --git a/ui/src/routes/my-settings.tsx b/ui/src/routes/my-settings.tsx index 389427d7..800f47eb 100644 --- a/ui/src/routes/my-settings.tsx +++ b/ui/src/routes/my-settings.tsx @@ -1,41 +1,18 @@ -import { Navigate, createFileRoute } from "@tanstack/react-router"; -import { useEffect, useRef, useState } from "react"; +import { Navigate, createFileRoute, useNavigate } from "@tanstack/react-router"; +import { useQueryClient } from "@tanstack/react-query"; import { AppShell, SettingsRow, SettingsSection } from "@/components/AppShell"; import { Button } from "@/components/ui/button"; -import { Input } from "@/components/ui/input"; -import { - Select, - SelectContent, - SelectItem, - SelectTrigger, - SelectValue, -} from "@/components/ui/select"; import { Skeleton } from "@/components/ui/skeleton"; -import { buildProfileUpdate, useOptions, useProfile, useSaveProfile } from "@/lib/profile"; +import { api } from "@/lib/api"; import { useSession } from "@/lib/session"; export const Route = createFileRoute("/my-settings")({ component: MySettingsPage }); function MySettingsPage() { const session = useSession(); - const profile = useProfile(); - const options = useOptions(); - const save = useSaveProfile(); - - const [firstName, setFirstName] = useState(""); - const [lastName, setLastName] = useState(""); - const [prDestination, setPrDestination] = useState("team_default"); - const [error, setError] = useState(null); - const initialized = useRef(false); - - useEffect(() => { - if (!profile.data || initialized.current) return; - initialized.current = true; - setFirstName(profile.data.first_name ?? ""); - setLastName(profile.data.last_name ?? ""); - setPrDestination(profile.data.preferred_pr_destination ?? "team_default"); - }, [profile.data]); + const qc = useQueryClient(); + const navigate = useNavigate(); if (session.isLoading) { return ( @@ -46,97 +23,36 @@ function MySettingsPage() { } if (!session.data) return ; - const firstModel = options.data?.models[0]; - const handleSaveProfile = () => { - setError(null); - const body = buildProfileUpdate( - profile.data, - { first_name: firstName || null, last_name: lastName || null }, - firstModel?.id ?? "", - firstModel?.default_effort ?? "", - ); - save - .mutateAsync(body) - .catch((e: Error) => setError(e.message)); - }; - - const handleSavePrDestination = (value: string | null) => { - if (!value) return; - setPrDestination(value); - const body = buildProfileUpdate( - profile.data, - { preferred_pr_destination: value === "team_default" ? null : value }, - firstModel?.id ?? "", - firstModel?.default_effort ?? "", - ); - save.mutateAsync(body).catch((e: Error) => setError(e.message)); + const handleLogout = async () => { + await api.logout(); + qc.setQueryData(["session"], null); + void navigate({ to: "/login" }); }; return ( -
- - {session.data.email ?? "—"} - - } - /> - setFirstName(e.target.value)} - /> - } - /> - setLastName(e.target.value)} - /> - } - /> -
- -
-
-
- - - - - - - Team default - Web - Desktop App - IDE - - + + {session.data.email ?? "—"} + } /> - {error &&

{error}

} + + void handleLogout()}> + Sign out + + } + /> +
); } diff --git a/ui/src/routes/review.tsx b/ui/src/routes/review.tsx index 9fe2a2ed..27b877e9 100644 --- a/ui/src/routes/review.tsx +++ b/ui/src/routes/review.tsx @@ -1,10 +1,10 @@ -import { Navigate, createFileRoute } from "@tanstack/react-router"; +import { Link, Navigate, createFileRoute } from "@tanstack/react-router"; import { useMutation, useQuery, useQueryClient } from "@tanstack/react-query"; -import { useEffect, useState } from "react"; +import { CaretRightIcon, GithubLogoIcon } from "@phosphor-icons/react"; +import { useEffect, useMemo, useState } from "react"; -import type { AutofixMode, TeamSettings, TriggerMode } from "@/lib/api"; +import type { AutofixMode, ReposPayload, TeamSettings, TriggerMode } from "@/lib/api"; import { AppShell, SettingsRow, SettingsSection } from "@/components/AppShell"; -import { ReviewStylesPanel } from "@/components/ReviewStylesPanel"; import { Select, SelectContent, @@ -14,19 +14,27 @@ import { } from "@/components/ui/select"; import { Skeleton } from "@/components/ui/skeleton"; import { Switch } from "@/components/ui/switch"; -import { api } from "@/lib/api"; +import { ApiError, api } from "@/lib/api"; import { useSession } from "@/lib/session"; export const Route = createFileRoute("/review")({ component: ReviewPage }); const TRIGGER_MODES: Array<{ value: TriggerMode; label: string; description: string }> = [ - { value: "every_push", label: "Every Push", description: "Review every push to a PR" }, { - value: "ready_for_review", - label: "Ready For Review", - description: "Only when the PR is marked ready for review", + value: "every_push", + label: "Every Push", + description: "Review on every push to the PR", + }, + { + value: "once_per_pr", + label: "Once Per PR", + description: "Review once when the PR is opened, skip subsequent pushes", + }, + { + value: "manual", + label: "Manual Only", + description: "Only review when '@open-swe review' is commented", }, - { value: "manual", label: "Manual", description: "Review only when explicitly invoked" }, ]; const AUTOFIX_MODES: Array<{ value: AutofixMode; label: string }> = [ @@ -42,6 +50,10 @@ const DEFAULT_SETTINGS: TeamSettings = { pr_summaries: true, autofix_mode: "off", autofix_severity_threshold: "medium", + default_agent_model: null, + default_agent_reasoning_effort: null, + default_reviewer_model: null, + default_reviewer_reasoning_effort: null, }; function ReviewPage() { @@ -96,16 +108,34 @@ function ReviewPage() { title="Open SWE Review" description="Automatically review pull requests for bugs and issues. Runs are billed based on underlying agent usage." > + + + + +
+ Review Style Prompts + + Per-repo style guides learned from past PR review feedback. + +
+ + +
+
persist({ trigger_mode: v as TriggerMode })} - disabled={!canEdit} + disabled > @@ -145,11 +175,12 @@ function ReviewPage() { persist({ autofix_mode: v as AutofixMode })} - disabled={!canEdit} + disabled > @@ -167,13 +198,14 @@ function ReviewPage() { persist({ autofix_severity_threshold: v as AutofixMode }) } - disabled={!canEdit} + disabled > @@ -197,14 +229,95 @@ function ReviewPage() {

)} - - - - {error &&

{error}

} ); } + +function RepositoriesSection({ canEdit: _canEdit }: { canEdit: boolean }) { + const repos = useQuery({ + queryKey: ["repos"], + queryFn: async () => { + try { + return await api.repos(); + } catch (e) { + if (e instanceof ApiError && e.status === 401) + return { installations: [], repositories: [] }; + throw e; + } + }, + }); + + const enabled = useQuery({ + queryKey: ["enabledReviewRepos"], + queryFn: api.listEnabledReviewRepos, + }); + + const enabledSet = useMemo( + () => new Set(enabled.data?.repos ?? []), + [enabled.data?.repos], + ); + + const grouped = useMemo(() => { + const byOwner = new Map>(); + for (const r of repos.data?.repositories ?? []) { + const [owner] = r.full_name.split("/"); + if (!owner) continue; + const arr = byOwner.get(owner) ?? []; + arr.push(r); + byOwner.set(owner, arr); + } + return Array.from(byOwner.entries()).sort(([a], [b]) => a.localeCompare(b)); + }, [repos.data?.repositories]); + + const loading = repos.isLoading || enabled.isLoading; + + return ( + +
+ {loading && ( +
+ +
+ )} + {!loading && grouped.length === 0 && ( +

+ No GitHub App installations found. Install the open-swe GitHub App on an + account or org to manage repos here. +

+ )} + {grouped.map(([owner, list]) => { + const enabledCount = list.filter((r) => enabledSet.has(r.full_name)).length; + return ( + +
+ +
+
+ {owner} +
+ GitHub +
+
+
+ + {enabledCount}/{list.length} Repositories Enabled + + +
+ + ); + })} +
+
+ ); +} + diff --git a/ui/src/routes/review_.repositories.$owner.tsx b/ui/src/routes/review_.repositories.$owner.tsx new file mode 100644 index 00000000..1cf611f8 --- /dev/null +++ b/ui/src/routes/review_.repositories.$owner.tsx @@ -0,0 +1,189 @@ +import { Navigate, createFileRoute } from "@tanstack/react-router"; +import { useMutation, useQuery, useQueryClient } from "@tanstack/react-query"; +import { useEffect, useMemo, useState } from "react"; + +import type { ReposPayload } from "@/lib/api"; +import { AppShell } from "@/components/AppShell"; +import { Button } from "@/components/ui/button"; +import { Skeleton } from "@/components/ui/skeleton"; +import { Switch } from "@/components/ui/switch"; +import { ApiError, api } from "@/lib/api"; +import { useSession } from "@/lib/session"; + +const PAGE_SIZE = 20; + +export const Route = createFileRoute("/review_/repositories/$owner")({ + component: RepositoriesOwnerPage, +}); + +function RepositoriesOwnerPage() { + const session = useSession(); + const { owner } = Route.useParams(); + const qc = useQueryClient(); + + const repos = useQuery({ + queryKey: ["repos"], + queryFn: async () => { + try { + return await api.repos(); + } catch (e) { + if (e instanceof ApiError && e.status === 401) + return { installations: [], repositories: [] }; + throw e; + } + }, + enabled: !!session.data, + }); + + const enabled = useQuery({ + queryKey: ["enabledReviewRepos"], + queryFn: api.listEnabledReviewRepos, + enabled: !!session.data, + }); + + const toggle = useMutation({ + mutationFn: ({ full_name, on }: { full_name: string; on: boolean }) => + api.setEnabledReviewRepo(full_name, on), + onSuccess: (data) => { + qc.setQueryData(["enabledReviewRepos"], data); + }, + }); + + const ownerRepos = useMemo( + () => + (repos.data?.repositories ?? []) + .filter((r) => r.full_name.split("/")[0] === owner) + .sort((a, b) => a.full_name.localeCompare(b.full_name)), + [repos.data?.repositories, owner], + ); + + const enabledSet = useMemo( + () => new Set(enabled.data?.repos ?? []), + [enabled.data?.repos], + ); + + const [page, setPage] = useState(0); + useEffect(() => setPage(0), [owner]); + + const totalPages = Math.max(1, Math.ceil(ownerRepos.length / PAGE_SIZE)); + const safePage = Math.min(page, totalPages - 1); + const pageStart = safePage * PAGE_SIZE; + const pageEnd = Math.min(pageStart + PAGE_SIZE, ownerRepos.length); + const pageRepos = ownerRepos.slice(pageStart, pageEnd); + + if (session.isLoading) { + return ( +
+ +
+ ); + } + if (!session.data) return ; + + const canEdit = session.data.is_admin; + const enabledCount = ownerRepos.filter((r) => enabledSet.has(r.full_name)).length; + const loading = repos.isLoading || enabled.isLoading; + + return ( + +
+
+

+ Repositories +

+ + {enabledCount}/{ownerRepos.length} enabled + +
+
+ {loading && ( +
+ +
+ )} + {!loading && ownerRepos.length === 0 && ( +

+ No repositories found for this installation. +

+ )} +
    + {pageRepos.map((r) => { + const isEnabled = enabledSet.has(r.full_name); + return ( +
  • +
    + + {owner}/ + + {r.full_name.slice(owner.length + 1)} + + + {r.private && ( + private + )} +
    + + + toggle.mutate({ full_name: r.full_name, on: v }) + } + /> + +
  • + ); + })} +
+ {ownerRepos.length > PAGE_SIZE && ( +
+ + Showing {pageStart + 1}-{pageEnd} of {ownerRepos.length} + +
+ + + {safePage + 1} / {totalPages} + + +
+
+ )} +
+
+
+ ); +} diff --git a/ui/src/routes/review_.styles.tsx b/ui/src/routes/review_.styles.tsx new file mode 100644 index 00000000..2d72f49a --- /dev/null +++ b/ui/src/routes/review_.styles.tsx @@ -0,0 +1,34 @@ +import { Navigate, createFileRoute } from "@tanstack/react-router"; + +import { AppShell } from "@/components/AppShell"; +import { ReviewStylesPanel } from "@/components/ReviewStylesPanel"; +import { Skeleton } from "@/components/ui/skeleton"; +import { useSession } from "@/lib/session"; + +export const Route = createFileRoute("/review_/styles")({ component: ReviewStylesPage }); + +function ReviewStylesPage() { + const session = useSession(); + + if (session.isLoading) { + return ( +
+ +
+ ); + } + if (!session.data) return ; + + return ( + +
+ +
+
+ ); +}