import { Link, useParams } from "react-router"; import type { Agent, Dataset, Debt, ExecutionRow, PackageRow, Project } from "../api"; import { useFetch, fmtDate } from "../hooks"; import { Badge, ErrorBox, JsonTree, KV, Loading, Td } from "../components/ui"; import { DebtTable } from "../components/shared"; type PD = Project & { agents: Agent[]; datasets: Dataset[]; recent_executions: ExecutionRow[]; decisions: { decision: string; n: number }[]; debt: Debt[]; approved_akp_details: PackageRow[] }; export default function ProjectDetail() { const { id } = useParams(); const { data, error, loading, reload } = useFetch(`projects/${id}`); if (loading) return ; if (error) return ; if (!data) return null; const p = data; return (

{p.name}

{k.akp_id} v{k.version}
) : "none"], ["Decisions", p.decisions.map((d) => `${d.decision}: ${d.n}`).join(" · ") || "none"], ["Created", fmtDate(p.created_at)]]} />

Budget

Change mode / approvals in Policy Center.

Agents

{p.agents.length ? p.agents.map((a) =>
{a.name} {a.kind}{a.executions ?? 0} executions · {Object.entries(a.permissions).filter(([, v]) => v).map(([k]) => k).join(", ")}
) : none}

Datasets

{p.datasets.length ? p.datasets.map((d) =>
{d.name} {d.row_count} rows
) : none}

Recent executions

{p.recent_executions.length ? {p.recent_executions.map((e) => )}
WhenStateRequestStatus
{fmtDate(e.created_at)}{e.method} {e.url}{e.status_code ?? "—"}
: none}

Open debt affecting this project

); }