Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion CLAUDE.md
Original file line number Diff line number Diff line change
Expand Up @@ -77,7 +77,7 @@ This is an MCP (Model Context Protocol) platform. The AI is the primary interfac

2. **HTTP Gateway** (`servers/gateway/`) — Express server that wraps all MCP servers with Streamable HTTP + SSE transports + OAuth 2.1. Includes proxy layer for external MCP servers, **tool router** (`/router/mcp` — 7 tools instead of 49+), **AI chat gateway** (`/api/chat/*` — BYOAI with tool calling), public blog routes, Crow's Nest UI, peer relay, and setup page. Modularized into Express routers (`routes/mcp.js`, `routes/chat.js`, `routes/blog-public.js`, `routes/storage-http.js`, `dashboard/`).

3. **Crow's Nest** (`servers/gateway/dashboard/`) — Server-side rendered HTML control panel (the "Crow's Nest") with Dark Editorial design. Password auth, session cookies, panel registry. Built-in panels: Health, Messages (AI Chat + Peer Messages tabs), Contacts, Memory, Blog (with markdown preview), Podcasts (subscriber + player), Files, Extensions, Skills, Settings. Third-party panels via `~/.crow/panels/`.
3. **Crow's Nest** (`servers/gateway/dashboard/`) — Server-side rendered HTML control panel (the "Crow's Nest") with Dark Editorial design. Password auth, session cookies, panel registry. Built-in panels: Health, Messages (AI Chat + Peer Messages tabs), Contacts, Memory, Blog (with markdown preview), Podcasts (subscriber + player), Files, Extensions, Skills, Settings, **Fediverse Admin (F.14 — moderation queue + crosspost queue)**. Third-party panels via `~/.crow/panels/`.

4. **Skills** (`skills/`) — 30 markdown files that serve as behavioral prompts loaded by Claude. Not code — they define workflows, trigger patterns, and integration logic.

Expand Down
12 changes: 12 additions & 0 deletions servers/gateway/dashboard/index.js
Original file line number Diff line number Diff line change
Expand Up @@ -69,6 +69,7 @@ import skillsPanel from "./panels/skills.js";
import projectsPanel from "./panels/projects.js";
import settingsPanel from "./panels/settings.js";
import contactsPanel from "./panels/contacts.js";
import fediversePanel from "./panels/fediverse.js";
import bundlesRouterFactory from "../routes/bundles.js";

/**
Expand All @@ -92,6 +93,7 @@ export default function dashboardRouter(mcpAuthMiddleware) {
registerPanel(skillsPanel);
registerPanel(settingsPanel);
registerPanel(contactsPanel);
registerPanel(fediversePanel);

// Load third-party panels (async, non-blocking)
loadExternalPanels().catch((err) => {
Expand Down Expand Up @@ -438,6 +440,16 @@ export default function dashboardRouter(mcpAuthMiddleware) {
// Mount bundles API (protected by dashboard auth above)
router.use("/dashboard", bundlesRouterFactory());

// F.14: Fediverse Admin action POSTs (confirm/reject moderation, cancel/retry crosspost)
router.post("/dashboard/fediverse/action", async (req, res) => {
const db = createDbClient();
try {
await fediversePanel.handleAction(req, res, { db });
} finally {
try { db.close(); } catch {}
}
});

// Dashboard home — redirect to first visible panel
router.get("/dashboard", (req, res) => {
const visible = getVisiblePanels();
Expand Down
1 change: 1 addition & 0 deletions servers/gateway/dashboard/nav-registry.js
Original file line number Diff line number Diff line change
Expand Up @@ -46,6 +46,7 @@ const CATEGORY_TO_GROUP = {
"federated-social": "core",
"federated-media": "media",
"federated-comms": "core",
connections: "core",
};

/**
Expand Down
Loading