Files
adaptive-multi-protocol-bro…/ampbrowser/plan.py
T
2026-07-05 20:14:46 -04:00

45 lines
1.5 KiB
Python

from __future__ import annotations
from dataclasses import dataclass
from .routing import Route, route_url
from .transports import TransportStatus, inspect_transport
@dataclass(frozen=True)
class BrowsePlan:
route: Route
status: TransportStatus | None
action: str
requires_consent: bool = False
prompt: str = ""
def plan_url(raw_url: str) -> BrowsePlan:
route = route_url(raw_url)
status = inspect_transport(route.transport)
if route.transport in {"clearnet", "unknown"}:
return BrowsePlan(route=route, status=status, action="open with clearnet profile")
if status and status.adoptable:
return BrowsePlan(route=route, status=status, action="adopt existing transport")
if status and status.manage_supported:
action = "prompt to start managed transport"
prompt = (
f"{route.transport} is not running. AMPB can start a managed {route.transport} "
f"transport for {route.normalized}."
)
if not status.installed:
action = "prompt to install and start managed transport"
prompt = (
f"{route.transport} is not installed or running. AMPB can install and start "
f"a managed {route.transport} transport for {route.normalized}."
)
return BrowsePlan(
route=route,
status=status,
action=action,
requires_consent=True,
prompt=prompt,
)
return BrowsePlan(route=route, status=status, action="blocked until adapter is configured")