/* Repositories — register / edit / remove the projects (repos) Handler manages. * Maps the design's "Repositories" pane to Handler's project registry. */ "use client"; import { useMemo, useState } from "react"; import { useDashboard } from "@/components/store"; import { Badge, Button, Card, Input } from "@/components/ui"; import { fmtFull } from "@/lib/format"; import type { Project } from "@/lib/api"; const CRED_HELP = "credential_ref is a pointer, never the token (env: / file: / db:). cmd: is CLI-only."; const empty = { id: "", root_dir: "", git_remote: "", credential_ref: "" }; export function RepositoriesSection() { const s = useDashboard(); const [form, setForm] = useState(empty); const [editing, setEditing] = useState(false); const agentCount = useMemo(() => { const m = new Map(); for (const a of s.agents) m.set(a.project_id, (m.get(a.project_id) ?? 0) + 1); return m; }, [s.agents]); const reset = () => { setForm(empty); setEditing(false); }; const save = async () => { const ok = editing ? await s.updateProject(form.id, form) : await s.createProject(form); if (ok) reset(); }; const edit = (p: Project) => { setForm({ id: p.id, root_dir: p.root_dir, git_remote: p.git_remote ?? "", credential_ref: p.credential_ref ?? "", }); setEditing(true); }; return ( <>
Repositories
Repos Handler manages. Each carries its own agents, history, and credentials.
{editing ? `Edit repository · ${form.id}` : "Register a repository"}
setForm({ ...form, id: v })} placeholder="leeworks-api" disabled={editing} /> setForm({ ...form, root_dir: v })} placeholder="/var/lib/handler/projects/leeworks" /> setForm({ ...form, git_remote: v })} placeholder="git@github.com:user/repo.git (optional)" /> setForm({ ...form, credential_ref: v })} placeholder="env:VAR / file:/path / db:id" />

{CRED_HELP}

{editing && ( )}
{s.projects.length === 0 &&
No repositories registered.
} {s.projects.map((p) => (
{p.id} {agentCount.get(p.id) ?? 0} {(agentCount.get(p.id) ?? 0) === 1 ? "agent" : "agents"}
{p.root_dir} {p.git_remote ? ` · ${p.git_remote}` : ""}
cred {p.credential_ref || "—"} · added {fmtFull(p.created_at)}
))}
); }