Backend Route Inventory — Waggle OS UX Refactor
Purpose. Source-grounded inventory of every existing local Fastify sidecar endpoint, plus a
cross-reference of every PRD §16 target endpoint against the current backend. This is the contract
reference for the in-place incremental refactor (LOCKED execution model): we reuse the existing sidecar
surface and add/extend only the net-new endpoints the PRD names.
Method. Primary source = the audited backend-map (docs/backend-map/sections/03a–03g, 65/65 local
routes documented, ~96% overall coverage per docs/backend-map/AUDIT.md). Spot-verified against
packages/server/src/local/routes/*.ts for every PRD-critical path (grep/read).
Scope note. Everything below is the Local Sidecar (packages/server/src/local/index.ts →
buildLocalServer(), default loopback :3333, flat /api/*, Bearer session-token + same-origin
guards). The desktop frontend talks ONLY to this server. A separate Cloud server
(packages/server/src/routes/*.ts, Clerk-JWT, :3100) exists for SaaS/team deployments — its
/api/agents, /api/jobs, /api/scout, /api/suggestions routes are NOT in the sidecar and are
flagged explicitly where they collide with PRD paths. KVARK has no Fastify routes (in-process
KvarkClient only).
Part 1 — Existing Local Sidecar Endpoints (by domain)
All paths are relative to the sidecar base (http://127.0.0.1:3333). Source files are under
packages/server/src/local/routes/. SSE/streaming and non-JSON responses are noted.
1.1 Chat / Agent execution / Sessions (03a)
| Method |
Path |
Route file |
Purpose |
| POST |
/api/chat |
chat.ts |
The chat turn — SSE stream (token/step/tool/approval_required/done/error). Largest route (~1.7k LOC). |
| DELETE |
/api/chat/history |
chat.ts |
Clear a session's in-RAM state (?session=). Does NOT delete on-disk .jsonl. |
| GET |
/api/history |
agent.ts |
Load a session's messages (RAM-first then disk). |
| GET |
/api/agent/status |
agent.ts |
Agent + cost snapshot. |
| GET |
/api/agent/cost |
agent.ts |
Detailed cost breakdown (string summary). |
| POST |
/api/agent/cost/reset |
agent.ts |
No-op cost reset stub. |
| GET |
/api/agent/model |
agent.ts |
Current model. |
| PUT |
/api/agent/model |
agent.ts |
Switch model ({ model }). |
| GET |
/api/agents/active |
agent.ts |
Sub-agent orchestrator state ({ workers, active }). |
| POST |
/api/commands/execute |
commands.ts |
Run a slash command out-of-band (subset of CommandContext). |
| POST |
/api/agent/run |
agent-run.ts |
One-shot structured retrieval — SSE (distinct events from /api/chat). |
| GET |
/api/workspaces/:workspaceId/sessions |
sessions.ts |
List sessions (?hideEmpty=). |
| GET |
/api/workspaces/:workspaceId/sessions/search |
sessions.ts |
Full-text session search (?q=&limit=). |
| GET |
/api/workspaces/:workspaceId/sessions/:sessionId/export |
sessions.ts |
Export one session as Markdown. |
| GET |
/api/workspaces/:workspaceId/sessions/:sessionId/timeline |
sessions.ts |
Tool-event timeline. |
| POST |
/api/workspaces/:workspaceId/sessions |
sessions.ts |
Create a session. |
| PATCH |
/api/sessions/:sessionId |
sessions.ts |
Rename a session. |
| DELETE |
/api/sessions/:sessionId |
sessions.ts |
Delete a session's .jsonl. |
| GET |
/api/sessions/:sessionId/summary |
sessions.ts |
Structured post-session summary. |
| GET |
/api/agent-groups |
agent-groups.ts |
List multi-agent group configs. |
| POST |
/api/agent-groups |
agent-groups.ts |
Create a group. |
| PATCH |
/api/agent-groups/:id |
agent-groups.ts |
Update a group. |
| DELETE |
/api/agent-groups/:id |
agent-groups.ts |
Delete a group. |
| POST |
/api/agent-groups/:id/run |
agent-groups.ts |
Placeholder — returns a queued stub, does NOT execute. |
1.2 Approvals (03a / 03e)
| Method |
Path |
Route file |
Purpose |
| POST |
/api/approval/:requestId |
approval.ts |
Approve/deny a paused tool ({ approved, always? }). |
| GET |
/api/approval/pending |
approval.ts |
List paused approvals (reconnect/recovery). |
| GET |
/api/approval/grants |
approval.ts |
List persistent "always allow" grants. |
| DELETE |
/api/approval/grants/:id |
approval.ts |
Revoke one grant. |
| POST |
/api/approval/grants/clear |
approval.ts |
Wipe all grants. |
1.3 Memory / Knowledge graph (03b)
| Method |
Path |
Route file |
Purpose |
| GET |
/api/memory/search |
memory.ts |
Full-text frame search across personal + workspace minds. |
| GET |
/api/memory/frames |
memory.ts |
List recent frames (Memory tab initial load). |
| POST |
/api/memory/frames |
memory.ts |
Save a frame (optional entity extraction). |
| PUT |
/api/memory/frames/:id |
memory.ts |
Edit a frame's content/importance. |
| PATCH |
/api/memory/frames/:id/access |
memory.ts |
Increment access_count. |
| DELETE |
/api/memory/frames/:id |
memory.ts |
Delete a frame. |
| GET |
/api/memory/stats |
memory.ts |
Frame/entity/relation counts. |
| GET |
/api/memory/graph |
knowledge.ts |
Read entities + relations (?scope=all|personal|current). No write/CRUD route. |
1.4 Wiki compiler (03b)
| Method |
Path |
Route file |
Purpose |
| GET |
/api/wiki/pages |
wiki.ts |
List compiled page metadata. |
| GET |
/api/wiki/pages/:slug |
wiki.ts |
One page's metadata. |
| GET |
/api/wiki/pages/:slug/content |
wiki.ts |
Full markdown content of a page. |
| POST |
/api/wiki/compile |
wiki.ts |
Trigger compilation (503 if no real embedder). |
| GET |
/api/wiki/health |
wiki.ts |
Compilation health report (503 if no real embedder). |
| GET |
/api/wiki/watermark |
wiki.ts |
Current compilation watermark/state. |
| POST |
/api/wiki/export/obsidian |
wiki.ts |
Write all pages to an Obsidian-vault dir. |
| POST |
/api/wiki/export/notion |
wiki.ts |
Push pages to Notion (needs notion-wiki-token vault secret). |
1.5 Harvest (external AI export ingestion) (03b)
| Method |
Path |
Route file |
Purpose |
| POST |
/api/harvest/preview |
harvest.ts |
Parse an export, show what would import (no save). |
| POST |
/api/harvest/commit |
harvest.ts |
Full pipeline: save → cognify → wiki recompile. |
| GET |
/api/harvest/sources |
harvest.ts |
List registered harvest sources. |
| POST |
/api/harvest/sources |
harvest.ts |
Register/update a source. |
| DELETE |
/api/harvest/sources/:source |
harvest.ts |
Remove a source. |
| PATCH |
/api/harvest/sources/:source |
harvest.ts |
Toggle auto-sync/interval. |
| GET |
/api/harvest/progress |
harvest.ts |
SSE import progress stream. |
| GET |
/api/harvest/runs |
harvest.ts |
List recent harvest runs. |
| GET |
/api/harvest/runs/latest-interrupted |
harvest.ts |
Latest resumable run. |
| POST |
/api/harvest/runs/:id/abandon |
harvest.ts |
Discard an interrupted run. |
| POST |
/api/harvest/extract-identity |
harvest.ts |
LLM-extract identity facts from recent frames. |
| POST |
/api/harvest/scan-claude-code |
harvest.ts |
Scan local ~/.claude for Claude Code history. |
1.6 Legacy import / File ingestion / Identity / Documents / Erasure (03b)
| Method |
Path |
Route file |
Purpose |
| POST |
/api/import/preview |
import.ts |
Legacy ChatGPT/Claude export preview. |
| POST |
/api/import/commit |
import.ts |
Legacy import + save to personal memory. |
| POST |
/api/ingest |
ingest.ts |
Base64 file ingestion (images/pdf/docx/pptx/xlsx/csv/code/zip) → LLM text + frames. |
| GET |
/api/identity |
identity.ts |
Read the structured identity record (upsert table). |
| POST |
/api/identity |
identity.ts |
Create/update identity record. |
| GET |
/api/mind/identity |
mind.ts |
Rendered identity context string. |
| GET |
/api/mind/awareness |
mind.ts |
Awareness state context. |
| GET |
/api/mind/skills |
mind.ts |
Loaded skills list. |
| GET |
/api/workspaces/:id/documents |
documents.ts |
List tracked document versions. |
| POST |
/api/workspaces/:id/documents |
documents.ts |
Register a new document version. |
| GET |
/api/workspaces/:id/documents/:name/versions |
documents.ts |
List versions of one document. |
| POST |
/api/data/erase |
data-erase.ts |
GDPR erasure (double-confirm; wipes at next startup). |
| POST |
/api/export |
export.ts |
Generate + download a ZIP of all user data. |
1.7 Workspaces / Templates / Storage / Files / Tasks / Pins (03c + 04)
| Method |
Path |
Route file |
Purpose |
| GET |
/api/workspaces |
workspaces.ts |
List workspaces (?group=&teamId=). |
| POST |
/api/workspaces |
workspaces.ts |
Create a workspace (tier workspaceLimit). |
| GET |
/api/workspaces/:id |
workspaces.ts |
Get one workspace. |
| GET |
/api/workspaces/:id/context |
workspaces.ts |
"Workspace Now" catch-up block (summary/threads/prompts/state). |
| GET |
/api/workspaces/:id/files |
workspaces.ts |
List ingested/registered files (file registry, newest first). |
| PUT |
/api/workspaces/:id |
workspaces.ts |
Update workspace (full). |
| PATCH |
/api/workspaces/:id |
workspaces.ts |
Partial update (personaId:null clears). |
| DELETE |
/api/workspaces/:id |
workspaces.ts |
Delete workspace + mind DB. |
| GET |
/api/workspaces/:id/export |
workspaces.ts |
Export workspace (?format=briefing→md, else JSON). |
| GET |
/api/workspaces/:id/cost |
workspaces.ts |
Per-workspace spend vs budget + 7-day history. |
| GET |
/api/workspaces/:id/storage |
workspaces.ts |
Virtual/linked storage stats. |
| GET |
/api/workspaces/:id/storage/files |
workspaces.ts |
List files in workspace storage. |
| GET |
/api/workspaces/:id/storage/read |
workspaces.ts |
Read a file (?path=, ?raw=). |
| POST |
/api/workspaces/:id/storage/write |
workspaces.ts |
Write a file. |
| DELETE |
/api/workspaces/:id/storage/delete |
workspaces.ts |
Delete a file. |
| GET |
/api/workspace-templates |
workspace-templates.ts |
List 15 built-in + user templates. |
| POST |
/api/workspace-templates |
workspace-templates.ts |
Create a custom template. |
| PUT |
/api/workspace-templates/:id |
workspace-templates.ts |
Update a custom template (403 if built-in). |
| DELETE |
/api/workspace-templates/:id |
workspace-templates.ts |
Delete a custom template (403 if built-in). |
| POST |
/api/workspace-templates/generate |
workspace-templates.ts |
AI-generate a template config. |
| GET |
/api/workspaces/:workspaceId/files/list |
files.ts |
List managed files in a workspace storage dir (?path=). |
| POST |
/api/workspaces/:workspaceId/files/upload |
files.ts |
Upload a file into workspace storage. |
| GET |
/api/workspaces/:workspaceId/files/download |
files.ts |
Download a file (?path=). |
| POST |
/api/workspaces/:workspaceId/files/mkdir |
files.ts |
Create a directory. |
| POST |
/api/workspaces/:workspaceId/files/delete |
files.ts |
Delete a file/dir. |
| POST |
/api/workspaces/:workspaceId/files/move |
files.ts |
Move a file. |
| POST |
/api/workspaces/:workspaceId/files/copy |
files.ts |
Copy a file. |
| GET |
/api/tasks |
tasks.ts |
List tasks across workspaces. |
| GET |
/api/workspaces/:id/tasks |
tasks.ts |
List tasks for a workspace. |
| POST |
/api/workspaces/:id/tasks |
tasks.ts |
Create a task. |
| PATCH |
/api/workspaces/:id/tasks/:taskId |
tasks.ts |
Update a task. |
| DELETE |
/api/workspaces/:id/tasks/:taskId |
tasks.ts |
Delete a task. |
| GET |
/api/workspaces/:id/pins |
pins.ts |
List pinned messages. |
| POST |
/api/workspaces/:id/pins |
pins.ts |
Add a pin. |
| PATCH |
/api/workspaces/:id/pins/:pinId |
pins.ts |
Update pin status/label. |
| DELETE |
/api/workspaces/:id/pins/:pinId |
pins.ts |
Remove a pin. |
1.8 Team / RBAC (03c)
Two prefixes: /api/team/* = remote-server proxy (local fallbacks when disconnected); /api/teams/* = local CRUD (always works, teams.db).
| Method |
Path |
Route file |
Purpose |
| POST |
/api/team/connect |
team.ts |
Connect to remote team server. Tier: TEAMS. |
| POST |
/api/team/disconnect |
team.ts |
Clear team-server config. |
| GET |
/api/team/status |
team.ts |
Connection status. |
| GET |
/api/team/teams |
team.ts |
List teams from remote server. |
| GET |
/api/team/members |
team.ts |
List members (remote or local fallback). |
| GET |
/api/team/presence |
team.ts |
Presence (?workspaceId=). |
| GET |
/api/team/activity |
team.ts |
Recent activity from remote. |
| GET |
/api/team/messages |
team.ts |
Recent WaggleDance messages. |
| GET |
/api/team/governance/permissions |
team.ts |
Effective capability permissions. Tier: ENTERPRISE. |
| GET |
/api/team/memory/search |
team.ts |
Search team memory frames. |
| POST |
/api/teams |
team.ts |
Create a local team. |
| GET |
/api/teams |
team.ts |
List teams the local user belongs to. |
| GET |
/api/teams/:id |
team.ts |
Team detail + members + workspaces. |
| PUT |
/api/teams/:id |
team.ts |
Update team (owner/admin). |
| DELETE |
/api/teams/:id |
team.ts |
Delete team (owner only). |
| POST |
/api/teams/:id/members |
team.ts |
Add/invite member (owner/admin). |
| PUT |
/api/teams/:id/members/:userId |
team.ts |
Change member role (owner only). |
| PATCH |
/api/teams/:id/members/:userId |
team.ts |
Change member role (owner/admin). |
| DELETE |
/api/teams/:id/members/:userId |
team.ts |
Remove member. |
| GET |
/api/teams/:id/activity |
team.ts |
Aggregated audit events across team workspaces. |
1.9 Personas / Settings / Tier / Profile (03c)
| Method |
Path |
Route file |
Purpose |
| GET |
/api/personas |
personas.ts |
List persona catalog. |
| POST |
/api/personas |
personas.ts |
Create custom persona. Tier: PRO. |
| PATCH |
/api/personas/:id |
personas.ts |
Update custom persona. |
| POST |
/api/personas/generate |
personas.ts |
AI-generate a persona. Tier: PRO. |
| DELETE |
/api/personas/:id |
personas.ts |
Delete custom persona. |
| GET |
/api/settings |
settings.ts |
Read config (keys masked). |
| PUT |
/api/settings |
settings.ts |
Update models/budgets/providers. |
| PATCH |
/api/settings |
settings.ts |
Partial merge (non-provider). |
| POST |
/api/settings/test-key |
settings.ts |
Validate API-key format (no network). |
| POST |
/api/settings/probe-provider |
settings.ts |
Live-probe a STORED provider key by id (F3). |
| GET |
/api/settings/permissions |
settings.ts |
Read autonomy/gates/overrides. |
| PUT |
/api/settings/permissions |
settings.ts |
Save permission settings. |
| GET |
/api/tier |
settings.ts |
Authoritative tier source (effective tier, trial, capabilities). |
| PATCH |
/api/tier |
settings.ts |
Dev tier override (fail-closed). |
| POST |
/api/tier/start-trial |
settings.ts |
Start the 15-day TRIAL. |
| GET |
/api/cloud-sync |
settings.ts |
Cloud-sync status. |
| POST |
/api/cloud-sync/toggle |
settings.ts |
Toggle cloud sync. Tier: TEAMS. |
| GET |
/api/admin/overview |
settings.ts |
Admin dashboard data. Tier: TEAMS. |
| GET |
/api/admin/audit-export |
settings.ts |
Export audit log. Tier: TEAMS. |
| GET |
/api/profile |
profile.ts |
Full user profile. |
| PUT |
/api/profile |
profile.ts |
Partial-merge profile update. |
| POST |
/api/profile/analyze-style |
profile.ts |
LLM-analyze writing sample. |
| POST |
/api/profile/analyze-brand |
profile.ts |
LLM-extract brand colors/fonts. |
| GET |
/api/profile/style |
profile.ts |
Writing-style summary. |
| GET |
/api/profile/brand |
profile.ts |
Brand profile. |
| POST |
/api/profile/research |
profile.ts |
LLM-research user/company → bio. |
1.10 Marketplace / Skills / Plugins / Connectors / Tools (03d)
| Method |
Path |
Route file |
Purpose |
| GET |
/api/marketplace/search |
marketplace.ts |
FTS5 + faceted catalog search. |
| GET |
/api/marketplace/packs |
marketplace.ts |
List capability packs. |
| GET |
/api/marketplace/packs/:slug |
marketplace.ts |
Pack detail + packages. |
| GET |
/api/marketplace/enterprise-packs |
marketplace.ts |
KVARK-gated packs. Tier: ENTERPRISE. |
| POST |
/api/marketplace/install |
marketplace.ts |
Install a package (SecurityGate). Tier: PRO. |
| POST |
/api/marketplace/uninstall |
marketplace.ts |
Uninstall a package. |
| GET |
/api/marketplace/installed |
marketplace.ts |
List installed packages. |
| POST |
/api/marketplace/security-check |
marketplace.ts |
Scan a package without installing. |
| GET |
/api/marketplace/sources |
marketplace.ts |
List marketplace sources. |
| POST |
/api/marketplace/sources |
marketplace.ts |
Add a user source + sync. |
| DELETE |
/api/marketplace/sources/:id |
marketplace.ts |
Remove a user source. |
| GET |
/api/marketplace/categories |
marketplace.ts |
Category taxonomy. |
| POST |
/api/marketplace/sync |
marketplace.ts |
Manual catalog sync. |
| GET |
/api/marketplace/security-status |
marketplace.ts |
Scanner availability + scan counts. |
| POST |
/api/marketplace/publish |
marketplace.ts |
Publish a local skill to the catalog. Tier: PRO. |
| GET |
/api/skills/starter-pack/catalog |
skills.ts |
Browse starter skills with state. |
| POST |
/api/skills/starter-pack |
skills.ts |
Install all starter skills. |
| POST |
/api/skills/starter-pack/:id |
skills.ts |
Install ONE starter skill. |
| GET |
/api/skills/capability-packs/catalog |
skills.ts |
List capability packs with states. |
| POST |
/api/skills/capability-packs/:id |
skills.ts |
Install all skills in a pack. |
| GET |
/api/skills |
skills.ts |
List installed skills. |
| GET |
/api/skills/suggestions |
skills.ts |
Contextual skill recommendations. |
| GET |
/api/skills/:name |
skills.ts |
Full skill content. |
| POST |
/api/skills |
skills.ts |
Create skill from raw { name, content }. |
| POST |
/api/skills/create |
skills.ts |
Create skill from structured template. |
| PUT |
/api/skills/:name |
skills.ts |
Update skill content. |
| DELETE |
/api/skills/:name |
skills.ts |
Delete skill. |
| GET |
/api/skills/hash-status |
skills.ts |
Which skills changed on disk. |
| POST |
/api/skills/test |
skills.ts |
Sandbox/dry-run a skill (prompt injection preview). |
| GET |
/api/audit/installs |
skills.ts |
Recent install audit trail. |
| GET |
/api/plugins |
skills.ts |
List installed plugins. |
| POST |
/api/plugins/install |
skills.ts |
Install a plugin from a local dir. |
| DELETE |
/api/plugins/:name |
skills.ts |
Uninstall a plugin. |
| GET |
/api/plugins/:name/tools |
skills.ts |
List a plugin's tools + impl status. |
| GET |
/api/plugins/:name/tools/:toolName |
skills.ts |
Get one tool's impl file. |
| PUT |
/api/plugins/:name/tools/:toolName |
skills.ts |
Write a tool impl file. |
| DELETE |
/api/plugins/:name/tools/:toolName |
skills.ts |
Delete a tool impl file. |
| POST |
/api/plugins/:name/tools |
skills.ts |
Declare a new tool in the manifest. |
| GET |
/api/hooks |
skills.ts |
List pre:tool deny rules. |
| POST |
/api/hooks |
skills.ts |
Add a deny rule. |
| DELETE |
/api/hooks/:index |
skills.ts |
Remove a rule by index. |
| GET |
/api/connectors |
connectors.ts |
List all connector definitions. |
| GET |
/api/connectors/:id/health |
connectors.ts |
Live health probe. |
| POST |
/api/connectors/:id/connect |
connectors.ts |
Store credentials + re-init connector. |
| POST |
/api/connectors/:id/disconnect |
connectors.ts |
Remove credential + sub-keys. |
| GET |
/api/tools/detect |
tools.ts |
Scan machine for supported AI tools (AI-OS). |
| POST |
/api/tools/launch |
tools.ts |
Spawn a tool with workspace env. |
| GET |
/api/tools/processes |
tools.ts |
List tracked running processes. |
| POST |
/api/tools/kill |
tools.ts |
Kill a tracked PID. |
| POST |
/api/tools/hooks |
tools.ts |
Run hive-mind hook install/verify/uninstall. |
| GET |
/api/oauth/providers |
oauth.ts |
List OAuth providers + token status. |
| GET |
/api/oauth/:provider/authorize |
oauth.ts |
Build + redirect to provider OAuth URL. |
| GET |
/api/oauth/:provider/callback |
oauth.ts |
Exchange code → token (HTML response). |
| GET |
/api/vault |
vault.ts |
List secrets (no values) + suggestions. |
| POST |
/api/vault |
vault.ts |
Add/update a secret. |
| DELETE |
/api/vault/:name |
vault.ts |
Delete a secret. |
| POST |
/api/vault/:name/reveal |
vault.ts |
Decrypt + return value (local-origin only). |
| GET |
/api/providers |
providers.ts |
LLM + search providers, models, key status. |
Dev-only (not a production contract): marketplace-dev.ts registers /_dev/marketplace/{search,security-check,packs,health} behind env WAGGLE_DEV_MARKETPLACE=1. Excluded from PRD cross-reference.
1.11 Evolution / Feedback / Telemetry / Compliance / Cost / Capabilities (03e)
| Method |
Path |
Route file |
Purpose |
| GET |
/api/evolution/runs |
evolution.ts |
List evolution runs. |
| GET |
/api/evolution/runs/:uuid |
evolution.ts |
Single run detail. |
| POST |
/api/evolution/runs/:uuid/accept |
evolution.ts |
Accept + deploy a run. |
| POST |
/api/evolution/runs/:uuid/reject |
evolution.ts |
Reject a run. |
| GET |
/api/evolution/targets |
evolution.ts |
Enumerate evolvable targets. |
| GET |
/api/evolution/baseline |
evolution.ts |
Current baseline text for a target. |
| POST |
/api/evolution/run |
evolution.ts |
Trigger a real run (JSON or SSE). |
| GET |
/api/evolution/status |
evolution.ts |
Aggregate status counts. |
| POST |
/api/feedback |
feedback.ts |
Record thumbs up/down on a message. |
| GET |
/api/feedback/stats |
feedback.ts |
Improvement stats + trend. |
| GET |
/api/telemetry/summary |
telemetry.ts |
Local telemetry summary. |
| GET |
/api/telemetry/events |
telemetry.ts |
Query telemetry events. |
| DELETE |
/api/telemetry/events |
telemetry.ts |
Clear all telemetry events. |
| GET |
/api/telemetry/status |
telemetry.ts |
Telemetry enabled flag + count. |
| POST |
/api/telemetry/toggle |
telemetry.ts |
Enable/disable telemetry. |
| POST |
/api/telemetry/track |
telemetry.ts |
Record a single event (frontend). |
| GET |
/api/compliance/status |
compliance.ts |
EU AI Act per-article status. |
| POST |
/api/compliance/export |
compliance.ts |
Generate audit report (JSON). |
| POST |
/api/compliance/export-pdf |
compliance.ts |
Generate audit report (PDF binary). |
| GET |
/api/compliance/interactions |
compliance.ts |
List recorded AI interactions. |
| POST |
/api/compliance/interactions |
compliance.ts |
Record an AI interaction. |
| GET |
/api/compliance/models |
compliance.ts |
Model inventory for a date range. |
| GET |
/api/compliance/templates |
compliance.ts |
List compliance report templates. |
| GET |
/api/compliance/templates/:id |
compliance.ts |
Get one template. |
| POST |
/api/compliance/templates |
compliance.ts |
Create a template. |
| PATCH |
/api/compliance/templates/:id |
compliance.ts |
Update a template. |
| DELETE |
/api/compliance/templates/:id |
compliance.ts |
Delete a template. |
| GET |
/api/cost/summary |
cost.ts |
Cost dashboard (today/week/all-time + budget). |
| GET |
/api/cost/by-workspace |
cost.ts |
Per-workspace cost. Tier: TEAMS. |
| GET |
/api/costs |
cost.ts |
Alias → /api/cost/summary. |
| GET |
/api/capabilities/status |
capabilities.ts |
Plugins/MCP/skills/tools/commands/hooks/workflows status. |
| POST |
/api/capabilities/plugins/:name/enable |
capabilities.ts |
Enable a plugin. |
| POST |
/api/capabilities/plugins/:name/disable |
capabilities.ts |
Disable a plugin. |
1.12 Workflows (03e)
| Method |
Path |
Route file |
Purpose |
| GET |
/api/workflows |
workflows.ts |
List built-in + custom workflow templates. |
| POST |
/api/workflows |
workflows.ts |
Create a custom workflow template. |
| DELETE |
/api/workflows/:name |
workflows.ts |
Delete a custom workflow template. |
1.13 Real-time / Ops (03f)
| Method |
Path |
Route file |
Purpose |
| GET |
/api/waggle/signals |
waggle-signals.ts |
List recent WaggleDance UI signals. |
| POST |
/api/waggle/signals |
waggle-signals.ts |
Publish a UI signal. |
| PATCH |
/api/waggle/signals/:id/ack |
waggle-signals.ts |
Acknowledge a signal. |
| GET |
/api/waggle/stream |
waggle-signals.ts |
SSE signal stream. |
| POST |
/api/waggle-dance/signal |
waggle-dance.ts |
v2 protocol bus: dispatch a signal. |
| GET |
/api/waggle-dance/signals |
waggle-dance.ts |
v2 ring-buffer snapshot. |
| GET |
/api/events |
events.ts |
Paginated audit-event listing. |
| GET |
/api/events/stats |
events.ts |
Audit aggregates. |
| GET |
/api/events/stream |
events.ts |
SSE live audit events. |
| POST |
/api/cron |
cron.ts |
Create a cron schedule. |
| GET |
/api/cron |
cron.ts |
List schedules. |
| GET |
/api/cron/:id |
cron.ts |
Get one schedule. |
| PATCH |
/api/cron/:id |
cron.ts |
Update a schedule. |
| DELETE |
/api/cron/:id |
cron.ts |
Delete a schedule. |
| POST |
/api/cron/:id/trigger |
cron.ts |
Manually run now (auto-enables). |
| GET |
/api/cron/:id/history |
notifications.ts |
Cron execution history. |
| GET |
/api/notifications/stream |
notifications.ts |
SSE notifications + subagent status. |
| GET |
/api/notifications |
notifications.ts |
List persisted notifications. |
| POST |
/api/notifications/:id/read |
notifications.ts |
Mark one read. |
| GET |
/api/notifications/history |
notifications.ts |
List (alias, limit 100). |
| PATCH |
/api/notifications/:id/read |
notifications.ts |
Mark one read (PATCH). |
| POST |
/api/notifications/read-all |
notifications.ts |
Mark all read. |
| GET |
/api/offline/status |
offline.ts |
Offline state. |
| POST |
/api/offline/queue |
offline.ts |
Queue a message. |
| GET |
/api/offline/queue |
offline.ts |
List queued messages. |
| DELETE |
/api/offline/queue/:id |
offline.ts |
Remove one queued message. |
| DELETE |
/api/offline/queue |
offline.ts |
Clear all queued messages. |
| POST |
/api/backup |
backup.ts |
Build + stream encrypted backup archive. |
| POST |
/api/restore |
backup.ts |
Restore from an archive (preview?). |
| GET |
/api/backup/metadata |
backup.ts |
Last backup info. |
| GET |
/api/fleet |
fleet.ts |
List active workspace sessions (Mission Control). |
| POST |
/api/fleet/spawn |
fleet.ts |
Spawn a new agent session. |
| POST |
/api/fleet/:workspaceId/pause |
fleet.ts |
Pause a session. |
| POST |
/api/fleet/:workspaceId/resume |
fleet.ts |
Resume a session. |
| POST |
/api/fleet/:workspaceId/kill |
fleet.ts |
Abort + close a session. |
| GET |
/api/litellm/status |
litellm.ts |
LiteLLM router status. |
| POST |
/api/litellm/restart |
litellm.ts |
Restart the router. |
| GET |
/api/litellm/models |
litellm.ts |
Available model IDs. |
| GET |
/api/litellm/pricing |
litellm.ts |
Static per-model pricing. |
| GET |
/api/local-inference/hardware |
local-inference.ts |
Detect GPU/RAM/CPU. |
| GET |
/api/local-inference/models |
local-inference.ts |
Recommend models that fit. |
| GET |
/api/local-inference/status |
local-inference.ts |
Ollama/vLLM availability. |
| POST |
/api/local-inference/pull |
local-inference.ts |
Pull a model via Ollama. |
| GET |
/v1/health/liveliness |
anthropic-proxy.ts |
Built-in proxy health. |
| POST |
/v1/chat/completions |
anthropic-proxy.ts |
OpenAI-compatible Anthropic proxy (SSE when stream). |
| GET |
/api/browse/local |
browse.ts |
List directories (local-only). |
| POST |
/api/browse/local/mkdir |
browse.ts |
Create a directory (local-only). |
| GET |
/api/browser-ext/health |
browser-ext.ts |
Browser-extension health check. |
| GET |
/api/telegram/status |
telegram.ts |
Telegram config status. |
| POST |
/api/telegram/config |
telegram.ts |
Save Telegram creds. |
| POST |
/api/telegram/test |
telegram.ts |
Send a test message. |
| POST |
/api/telegram/send |
telegram.ts |
Send arbitrary text. |
| GET |
/api/weaver/status |
weaver.ts |
Weaver subsystem status. |
| POST |
/api/weaver/trigger |
weaver.ts |
Trigger a Weaver run. |
1.14 Bootstrap / Stripe billing / WebSocket (03g)
| Method |
Path |
Source |
Purpose |
| GET |
/health |
local/index.ts (inline) |
Health probe (auth-exempt). |
| GET |
/api/auth/session-token |
local/index.ts (inline) |
Bootstrap session token (same-origin, auth-exempt). |
| GET |
/api/debug/logs |
local/index.ts (inline) |
Support bundle (same-origin). |
| GET |
/api/docs |
local/index.ts (inline) |
Auto-generated route/OpenAPI listing. |
| GET |
/ws |
local/index.ts (inline) |
WebSocket event-bus relay (?token=). |
| GET |
/* |
local/index.ts (inline) |
SPA fallback (serves index.html). |
| POST |
/api/stripe/create-checkout-session |
stripe/ (stripeRoutes) |
Start Stripe checkout (PRO/TEAMS). |
| POST |
/api/stripe/webhook |
stripe/ |
Stripe webhook (raw body, signature-verified). |
| POST |
/api/stripe/sync |
stripe/ |
Poll-fallback payment confirmation. |
| POST |
/api/stripe/create-portal-session |
stripe/ |
Stripe billing portal. Tier: PRO. |
Part 2 — PRD §16 Target Endpoints → Cross-Reference
Status legend:
- EXISTS — a sidecar route already serves this exact (or path-equivalent) contract.
- PARTIAL — closest current capability exists but path/shape/semantics differ; the refactor extends/aliases rather than builds net-new.
- MISSING — no sidecar route provides this; net-new backend work required.
Verification: every MISSING row was grep-confirmed absent from packages/server/src/local/routes/*.ts
(/api/share, /api/home, /api/quick-capture, /api/command, /api/artifacts, /api/automations,
/api/mcps, /api/agents/:id/{run,pause,traces}, /api/skills/:id/{install,test},
/api/memory/merge, /api/memory/:id/archive, /api/connectors/:id/{sync,revoke} — 0 matches).
16.1 Home
| PRD endpoint |
Status |
Current path / note |
GET /api/home/briefing |
MISSING |
No /api/home/* route. Data is assemblable from GET /api/workspaces/:id/context (greeting/summary/threads/pendingTasks/upcomingSchedules) + GET /api/cost/summary, but no Home aggregation endpoint exists. Net-new. |
POST /api/quick-capture |
PARTIAL |
No /api/quick-capture. Closest: POST /api/memory/frames (memory.ts) writes a frame directly. Quick-capture = thin wrapper (default personal mind + source); extend rather than build new substrate. |
GET /api/home/overnight |
MISSING |
No overnight-digest route. Inputs exist (GET /api/events, GET /api/notifications, GET /api/cron/:id/history) but no aggregation endpoint. Net-new. |
16.2 Workspaces
| PRD endpoint |
Status |
Current path / note |
GET /api/workspaces |
EXISTS |
workspaces.ts. |
POST /api/workspaces |
EXISTS |
workspaces.ts. |
GET /api/workspaces/:id |
EXISTS |
workspaces.ts. |
PATCH /api/workspaces/:id |
EXISTS |
workspaces.ts (also PUT). |
GET /api/workspaces/:id/state |
PARTIAL |
No /state route. GET /api/workspaces/:id/context returns workspaceState as a sub-object. Either alias /state to that sub-object or add a thin route. |
GET /api/workspaces/:id/context |
EXISTS |
workspaces.ts — the "Workspace Now" catch-up block. |
GET /api/workspaces/:id/activity |
PARTIAL |
No per-workspace /activity. Closest: GET /api/events?workspaceId= (events.ts) and GET /api/teams/:id/activity. Add a thin /activity alias over the audit-event query. |
16.3 Command Center
| PRD endpoint |
Status |
Current path / note |
GET /api/command/search?q= |
MISSING |
No /api/command/*. Note commands.ts is /api/commands/execute (slash-command exec, different shape). PRD's "command palette" search needs net-new (federate over workspaces/memory/skills/sessions). |
POST /api/command/execute |
PARTIAL |
POST /api/commands/execute exists (note plural commands) but only runs slash commands with a subset CommandContext; PRD's generic command-palette execute is broader. Reuse/rename + extend. |
GET /api/command/recent |
MISSING |
No recent-commands surface. Net-new (or derive client-side from session history). |
GET /api/command/suggestions |
MISSING |
No command-suggestions route. Closest analog is GET /api/skills/suggestions (different domain). Net-new. |
16.4 Memory
| PRD endpoint |
Status |
Current path / note |
GET /api/memory |
PARTIAL |
List is GET /api/memory/frames; search is GET /api/memory/search. PRD's bare /api/memory maps to /frames (alias or accept both). |
GET /api/memory/:id |
MISSING |
No single-frame GET. Frames are addressable for PUT/PATCH/DELETE (/api/memory/frames/:id) but there is no GET .../frames/:id. Add a thin read route. |
POST /api/memory |
PARTIAL |
POST /api/memory/frames exists. PRD bare path = alias of /frames. |
PATCH /api/memory/:id |
PARTIAL |
PUT /api/memory/frames/:id edits content/importance (PRD uses PATCH; semantics match). Accept PATCH + bare path or alias. |
POST /api/memory/:id/archive |
MISSING |
No archive action. importance: 'deprecated' exists as a value but no archive endpoint; closest mutation is PUT /api/memory/frames/:id. Net-new (or model archive as an importance/status edit). |
DELETE /api/memory/:id |
PARTIAL |
DELETE /api/memory/frames/:id exists; PRD uses the bare :id path. Alias. |
POST /api/memory/merge |
MISSING |
No frame-merge route. Net-new (dedup/merge of duplicate frames). |
GET /api/memory/graph |
EXISTS |
knowledge.ts. |
16.5 Harvest
| PRD endpoint |
Status |
Current path / note |
POST /api/harvest/preview |
EXISTS |
harvest.ts. |
POST /api/harvest/commit |
EXISTS |
harvest.ts. |
GET /api/harvest/sources |
EXISTS |
harvest.ts. |
POST /api/harvest/sources/:id/sync |
PARTIAL |
No per-source /sync action. Sources are registered/toggled via POST /api/harvest/sources, PATCH /api/harvest/sources/:source (auto-sync config); the actual sync happens through POST /api/harvest/commit. Add a thin per-source /sync that resolves the source + calls commit. Note PRD uses :id; current sources are keyed by :source name. |
16.6 Artifacts
| PRD endpoint |
Status |
Current path / note |
GET /api/artifacts |
PARTIAL |
No /api/artifacts domain. Closest substrates: workspace file registry GET /api/workspaces/:id/files (workspaces.ts), managed files GET /api/workspaces/:workspaceId/files/list (files.ts), and document versions GET /api/workspaces/:id/documents (documents.ts). PRD "artifacts" = a new unified abstraction over these; needs a net-new aggregation layer reusing the existing stores. |
POST /api/artifacts |
PARTIAL |
Closest writes: POST /api/ingest, POST /api/workspaces/:workspaceId/files/upload, POST /api/workspaces/:id/documents. New artifact-create endpoint needed. |
GET /api/artifacts/:id |
MISSING |
No artifact-by-id read. Net-new. |
PATCH /api/artifacts/:id |
MISSING |
No artifact update. Net-new. |
DELETE /api/artifacts/:id |
PARTIAL |
Closest: POST /api/workspaces/:workspaceId/files/delete, DELETE /api/workspaces/:id/storage/delete. New artifact-delete endpoint needed. |
GET /api/artifacts/search-related?q= |
MISSING |
No related-artifact search. Net-new (could lean on memory/wiki search internally). |
16.7 Agents
Naming collision: PRD's /api/agents/* (CRUD + run/pause/traces) matches the Cloud server's
Clerk-gated routes/agents.ts (/api/agents, /api/agents/:id, etc.) — NOT the sidecar. The
sidecar's agent surface is /api/agent/* (singular: status/cost/model) + /api/agents/active +
/api/agent-groups/* + /api/fleet/*. So in the desktop (sidecar) context, the PRD §16.7 agent CRUD
is MISSING locally even though a Clerk-gated cloud analog exists.
| PRD endpoint |
Status |
Current path / note |
GET /api/agents |
MISSING (sidecar) |
Sidecar has GET /api/agents/active (live orchestrator state) only. Persona catalog GET /api/personas + groups GET /api/agent-groups are the closest "agent definitions". Cloud GET /api/agents (Clerk) is a separate server. |
POST /api/agents |
MISSING (sidecar) |
No sidecar agent-create. Closest: POST /api/personas (custom persona) / POST /api/agent-groups. Cloud-only POST /api/agents exists (Clerk). |
GET /api/agents/:id |
MISSING |
No sidecar agent-by-id. Net-new (or map onto persona/group id). |
PATCH /api/agents/:id |
MISSING |
No sidecar route. Closest: PATCH /api/personas/:id / PATCH /api/agent-groups/:id. |
POST /api/agents/:id/run |
PARTIAL |
No per-agent /run. Closest run paths: POST /api/fleet/spawn ({ task, persona?, model? } — real execution), POST /api/agent/run (one-shot retrieval SSE), POST /api/agent-groups/:id/run (placeholder stub). Wire /agents/:id/run onto fleet-spawn. |
POST /api/agents/:id/pause |
PARTIAL |
No per-agent /pause. Closest: POST /api/fleet/:workspaceId/pause. Map agent→session and reuse. |
GET /api/agents/:id/traces |
PARTIAL |
No per-agent /traces. Closest: session timeline GET /api/workspaces/:wid/sessions/:sid/timeline and the execution-trace store (no dedicated HTTP listing). Add a /traces route reading the trace store. |
16.8 Skills
| PRD endpoint |
Status |
Current path / note |
GET /api/skills |
EXISTS |
skills.ts. |
POST /api/skills |
EXISTS |
skills.ts (raw create; also POST /api/skills/create structured). |
PATCH /api/skills/:id |
PARTIAL |
Update is PUT /api/skills/:name (keyed by name, method PUT). PRD uses PATCH + :id. Accept PATCH / alias name↔id. |
POST /api/skills/:id/test |
PARTIAL |
Test exists but as POST /api/skills/test (body-driven, not per-id path). Add :id path variant or pass via body. |
POST /api/skills/:id/install |
PARTIAL |
No per-skill /install by arbitrary id. Closest installs: POST /api/skills/starter-pack/:id, POST /api/skills/capability-packs/:id, and marketplace POST /api/marketplace/install. Add a unified /skills/:id/install that dispatches by source. |
16.9 Connectors / MCPs / Marketplace
| PRD endpoint |
Status |
Current path / note |
GET /api/connectors |
EXISTS |
connectors.ts. |
POST /api/connectors/:id/connect |
EXISTS |
connectors.ts. |
POST /api/connectors/:id/sync |
MISSING |
No connector /sync action. Net-new (re-fetch from connected service). |
POST /api/connectors/:id/revoke |
PARTIAL |
Closest: POST /api/connectors/:id/disconnect (removes vault creds + sub-keys). Same intent, different verb. Alias /revoke → disconnect or add. |
GET /api/mcps |
PARTIAL |
No /api/mcps. MCP servers surface inside GET /api/capabilities/status (mcpServers[]); MCP catalog lives in @waggle/shared mcp-catalog.ts (no dedicated HTTP route). Net-new dedicated MCP listing endpoint (or extract from capabilities/status + catalog). |
POST /api/mcps/install |
PARTIAL |
No /api/mcps/install. MCP servers are installed via the marketplace path (POST /api/marketplace/install) and plugin install (POST /api/plugins/install). Add an MCP-specific install or route through marketplace. |
POST /api/mcps/:id/test |
MISSING |
No MCP test/health route. Closest analog: GET /api/connectors/:id/health. Net-new for MCP. |
POST /api/mcps/:id/revoke |
MISSING |
No MCP revoke/uninstall by id. Closest: DELETE /api/plugins/:name. Net-new for MCP. |
GET /api/marketplace |
PARTIAL |
Marketplace listing is GET /api/marketplace/search (+ /packs, /installed, /categories). PRD's bare /api/marketplace = alias of /search (default params). |
POST /api/marketplace/install |
EXISTS |
marketplace.ts (Tier: PRO, SecurityGate). |
16.10 Automations
No /api/automations/* routes exist. The underlying capability is cron (cron.ts,
/api/cron/*), which provides full CRUD + trigger + history. "Automations" = a rename/extension of cron.
| PRD endpoint |
Status |
Current path / note |
GET /api/automations |
PARTIAL |
Maps to GET /api/cron (cron.ts). Rename/alias the cron surface as "automations". |
POST /api/automations |
PARTIAL |
Maps to POST /api/cron. |
PATCH /api/automations/:id |
PARTIAL |
Maps to PATCH /api/cron/:id. |
POST /api/automations/:id/run |
PARTIAL |
Maps to POST /api/cron/:id/trigger (auto-enables + runs). |
POST /api/automations/:id/pause |
PARTIAL |
No /pause; equivalent is PATCH /api/cron/:id { enabled: false }. Add a thin /pause or use the enabled flag. |
GET /api/automations/:id/logs |
PARTIAL |
Maps to GET /api/cron/:id/history (in notifications.ts). |
16.11 Team / RBAC
| PRD endpoint |
Status |
Current path / note |
GET /api/teams/:id |
EXISTS |
team.ts (local CRUD; returns members + workspaces). |
POST /api/teams/:id/invite |
PARTIAL |
Invite is POST /api/teams/:id/members ({ userId?, email?, displayName?, role? }). Same intent, different path name. Alias /invite → /members. |
PATCH /api/teams/:id/members/:memberId |
EXISTS |
team.ts — PATCH /api/teams/:id/members/:userId (PRD's :memberId == :userId). Also PUT variant. |
GET /api/teams/:id/audit |
PARTIAL |
Closest: GET /api/teams/:id/activity (aggregated audit events across team workspaces) and GET /api/events. Alias /audit → /activity or add. |
POST /api/share |
MISSING |
No /api/share route anywhere in the repo (grep-confirmed). Sharing is implicit via team workspaces + teamId linkage; no explicit share endpoint. Net-new. |
Part 3 — Summary Counts
Existing local sidecar endpoints (Part 1)
| Domain group |
Count |
Chat / Agent exec / Sessions (03a) |
23 |
Approvals (03a/03e) |
5 |
Memory + Knowledge graph (03b) |
8 |
Wiki (03b) |
8 |
Harvest (03b) |
12 |
Import / Ingest / Identity / Mind / Documents / Erase / Export (03b) |
13 |
Workspaces / Templates / Storage / Files / Tasks / Pins (03c+04) |
38 |
Team / RBAC (03c) |
20 |
Personas / Settings / Tier / Profile (03c) |
26 |
Marketplace / Skills / Plugins / Connectors / Tools / OAuth / Vault / Providers (03d) |
56 |
Evolution / Feedback / Telemetry / Compliance / Cost / Capabilities (03e) |
31 |
Workflows (03e) |
3 |
Real-time / Ops (03f) |
60 |
Bootstrap / Stripe / WebSocket (03g) |
10 |
| Total existing local sidecar endpoints |
313 |
Aligns with the backend-map domain overview (~294 endpoints across 7 domains in 06-api-domains.md;
this inventory additionally counts inline bootstrap routes, the /v1/* proxy, weaver/tasks/files, and
tier-gated billing routes individually). Dev-only /_dev/marketplace/* (4 routes, env-gated) and the
separate Clerk-gated Cloud server routes are excluded.
PRD §16 target endpoints (Part 2)
| Section |
Total |
EXISTS |
PARTIAL |
MISSING |
| 16.1 Home |
3 |
0 |
1 |
2 |
| 16.2 Workspaces |
7 |
5 |
2 |
0 |
| 16.3 Command Center |
4 |
0 |
1 |
3 |
| 16.4 Memory |
8 |
2 |
4 |
2 |
| 16.5 Harvest |
4 |
3 |
1 |
0 |
| 16.6 Artifacts |
6 |
0 |
3 |
3 |
| 16.7 Agents |
7 |
0 |
3 |
4 |
| 16.8 Skills |
5 |
2 |
3 |
0 |
| 16.9 Connectors/MCPs/Marketplace |
10 |
2 |
4 |
4 |
| 16.10 Automations |
6 |
0 |
6 |
0 |
| 16.11 Team/RBAC |
5 |
2 |
2 |
1 |
| Total |
65 |
16 |
30 |
19 |
Headline: Of 65 PRD §16 target endpoints, 16 EXIST as-is, 30 are PARTIAL (closest current
path exists — refactor extends/aliases over the existing substrate), and 19 are MISSING (net-new
backend work). The MISSING set clusters in three net-new domains the PRD invents — Home (briefing/
overnight), Command Center (palette search/recent/suggestions), and Artifacts (unified
file/document/output abstraction) — plus MCP-specific management (test/revoke), memory merge/
archive/by-id, per-agent run/traces, and /api/share. None require a new data store: every
MISSING endpoint can be built over existing substrates (memory frames, file registry, document versions,
cron, audit events, execution traces, capabilities/status), consistent with the LOCKED in-place
incremental-refactor model.