This commit is contained in:
608
docs/ux-refactor/_inventory/backend-routes.md
Normal file
608
docs/ux-refactor/_inventory/backend-routes.md
Normal file
@@ -0,0 +1,608 @@
|
||||
# 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.
|
||||
Reference in New Issue
Block a user