Large World graph, agent platform, brain stack & dashboard rebuild

Frontend
- Large World: collapse org/company/team tiers into one expandable React Flow
  hierarchy (WorldFlow) with per-click expand, persisted node positions, a
  compact tree sidebar, wrench multi-select delete across levels, and a sized
  right slide-out (phone/tablet/full) showing an agent summary + drill button.
- Agent page: GitHub-style animated contribution grid (VitalsCard), collapsible
  System Prompt + Personality cards, restructured anatomy cards, bigger avatar
  with name/title header row, Markdown/JSON-aware rendering, brain registry +
  history, avatar generate/upload.
- User-icon menu (Infrastructure/Brains/Tools/Profile/Credits) + ToolPanel;
  Master Planner deploy wizard (Specialists/Swarm/Scheduled/Triggered);
  Team Runs view; reap-progress modal; dashboard is the single live interface.

Backend
- cm-brain crate (.brain as the agent definition) + brain apply/history.
- Hard-purge reap (FK-ordered) + sandbox release + SSE batch-delete.
- Swarm self-verifying loop, mode-aware planner, web.search tool, webhooks
  (migration 0013), org/company/team delete endpoints, scheduler sweeps.

Co-Authored-By: Claude Opus 4.8 (1M context) <[email protected]>
This commit is contained in:
Omar Sobh
2026-06-22 23:21:54 -07:00
co-authored by Claude Opus 4.8
parent 9f266d5806
commit 34f744734b
123 changed files with 9591 additions and 1098 deletions
@@ -0,0 +1,53 @@
"use client";
// The dashboard's four-square tools launcher. Same six tools as the old shell's
// SecondaryNav, but instead of navigating to old routes it opens them as
// in-dashboard panels (ToolPanel) via onOpen — so you never leave the new
// interface.
import { useState } from "react";
import { Blocks, CreditCard, LayoutGrid, Share2, ShieldCheck, Users, Zap } from "lucide-react";
import type { ToolKey } from "./ToolPanel";
const ITEMS: { key: ToolKey; label: string; icon: typeof Zap }[] = [
{ key: "skills", label: "Skills", icon: Zap },
{ key: "apps", label: "Apps", icon: Blocks },
{ key: "topologies", label: "Topologies", icon: Share2 },
{ key: "approvals", label: "Approvals", icon: ShieldCheck },
{ key: "team", label: "Team", icon: Users },
{ key: "credits", label: "Credits", icon: CreditCard },
];
export function ToolsLauncher({ onOpen }: { onOpen: (t: ToolKey) => void }) {
const [open, setOpen] = useState(false);
return (
<div style={{ position: "relative", display: "flex", justifyContent: "center" }}>
<button
type="button" title="Tools" aria-label="Tools" aria-expanded={open}
onClick={() => setOpen((v) => !v)}
style={{ width: 36, height: 36, borderRadius: 9, border: "1px solid rgba(255,255,255,.08)", background: open ? "rgba(255,255,255,.06)" : "transparent", display: "flex", alignItems: "center", justifyContent: "center", color: open ? "#f3f3f5" : "#6a6a72", cursor: "pointer" }}
>
<LayoutGrid size={18} />
</button>
{open ? (
<>
<button type="button" aria-label="Close" onClick={() => setOpen(false)} style={{ position: "fixed", inset: 0, zIndex: 40, background: "transparent", border: 0 }} />
<nav style={{ position: "absolute", bottom: 0, left: "100%", marginLeft: 8, zIndex: 50, width: 178, display: "flex", flexDirection: "column", gap: 2, borderRadius: 14, background: "#141417", border: "1px solid rgba(255,255,255,.1)", padding: 8, boxShadow: "0 18px 50px rgba(0,0,0,.55)" }}>
{ITEMS.map((it) => (
<button
key={it.key} type="button"
onClick={() => { onOpen(it.key); setOpen(false); }}
style={{ display: "flex", alignItems: "center", gap: 10, padding: "8px 10px", borderRadius: 9, border: 0, background: "transparent", color: "#cfcfd5", fontSize: 13, fontWeight: 500, cursor: "pointer", textAlign: "left" }}
onMouseEnter={(e) => (e.currentTarget.style.background = "rgba(255,255,255,.05)")}
onMouseLeave={(e) => (e.currentTarget.style.background = "transparent")}
>
<it.icon size={16} style={{ color: "#8a8a92" }} /> {it.label}
</button>
))}
</nav>
</>
) : null}
</div>
);
}