"""Plans routes: GET /plans/playbook and GET /plans/playbook/{plan_id}.""" from __future__ import annotations from fastapi import APIRouter, Depends, HTTPException, status from app.api.deps import get_current_user from app.core.execution_plan import plan_cache from app.schemas import ExecutionPlan, UserProfile router = APIRouter(prefix="/plans", tags=["plans"]) @router.get("/playbook", response_model=list[ExecutionPlan]) async def list_playbooks( current_user: UserProfile = Depends(get_current_user), ) -> list[ExecutionPlan]: """Return all cached execution plan playbooks for the authenticated user. TODO(Step11): filter by tier — power+ plans gated behind batch_builder feature. """ return plan_cache.get_all_playbooks() @router.get("/playbook/{plan_id}", response_model=ExecutionPlan) async def get_playbook( plan_id: str, current_user: UserProfile = Depends(get_current_user), ) -> ExecutionPlan: """Return a specific execution plan playbook by ID.""" plan = plan_cache.get_plan(plan_id) if plan is None: raise HTTPException( status_code=status.HTTP_404_NOT_FOUND, detail=f"Plan not found: {plan_id}", ) return plan