Files
waggle-os/docs/WAGGLE-SYSTEM-MAP.md
Oleg Maslov 0c3e2ead3b
Some checks failed
Installer Smoke / installer-smoke (push) Has been cancelled
moving
2026-09-02 10:10:29 +02:00

9.1 KiB

Waggle OS — System Map

Date: 2026-04-12 Purpose: Complete system map for a non-coder product owner and any engineer joining the project. Extends: WAGGLE-CORNERSTONE.md (product state + build plan). This doc covers system internals.


1. Architecture Overview

USER
  |
  v
┌──────────────────────────────────────────────────┐
│         TAURI SHELL (Rust, ~120 MB binary)        │
│  Spawns sidecar, tray icon, Ctrl+Shift+W toggle   │
│  Watchdog: restarts sidecar on crash (max 5/10m)   │
└──────────────────────────────────────────────────┘
                     │ hosts webview at localhost:3333
                     v
┌──────────────────────────────────────────────────┐
│       REACT DESKTOP OS (apps/web/)                │
│  Window manager, dock, 18+ apps, SSE streaming     │
│  Talks to sidecar via HTTP + SSE + WebSocket       │
└──────────────────────────────────────────────────┘
                     │ HTTP POST/GET + SSE streams
                     v
┌──────────────────────────────────────────────────┐
│       SIDECAR (Node.js + Fastify, port 3333)      │
│  150+ routes, agent loop, tool execution           │
│  LLM: LiteLLM proxy (4000) or built-in Anthropic  │
└──────────────────────────────────────────────────┘
                     │ direct function calls
                     v
┌──────────────────────────────────────────────────┐
│       CORE (TypeScript library packages)           │
│  MindDB (SQLite), FrameStore, KnowledgeGraph       │
│  HybridSearch, Harvest, Compliance, Vault          │
│  Each workspace = its own .mind SQLite file        │
└──────────────────────────────────────────────────┘

Why this matters: Every user action flows through exactly this stack. There are no hidden services or external dependencies for core functionality.


2. Data Flows

Chat Message Flow

User types message → adapter.ts POST /api/chat
  → Sidecar resolves workspace session (WorkspaceSessionManager)
  → Builds system prompt (orchestrator.ts: identity + awareness + memory recall)
  → Agent loop: POST to LLM provider (streaming)
  → SSE events back: token, step, tool_start, tool_end, done
  → Frontend useChat.ts parses SSE → renders in ChatApp

Memory Save Flow

Agent calls save_memory tool
  → FrameStore.createIFrame() or createPFrame()
  → SHA-256 dedup check (500-frame window)
  → INSERT into memory_frames + FTS5 index
  → Embed via active provider → INSERT into vec table
  → CognifyPipeline: extract entities → KnowledgeGraph upsert
  → MemoryLinker: find related frames

Memory Recall Flow

User query arrives → orchestrator.recallMemory()
  → Catch-up detection ("where were we?")
  → HybridSearch: parallel FTS5 keyword + sqlite-vec k-NN
  → RRF fusion (K=60) → relevance scoring (temporal/popularity/importance/contextual)
  → Top results injected into system prompt

3. Surface Area

Category Count Key Files
HTTP API routes 150+ packages/server/src/local/routes/
Agent tools 60+ packages/agent/src/*-tools.ts (22 files)
MCP catalog entries 149+ (auto-syncs to 2000+) packages/shared/src/mcp-catalog.ts
Keyboard shortcuts 21 apps/web/src/hooks/useKeyboardShortcuts.ts
Audit event types 13 packages/server/src/local/routes/events.ts
SSE streams 3 /api/chat, /api/events/stream, /api/notifications/stream
Personas 22 packages/agent/src/personas.ts
Frontend apps 18+ apps/web/src/components/os/apps/

4. Memory Architecture

Frame Types (the fundamental unit)

  • I-Frame (Identity): Foundational memory — "User prefers bullet points"
  • P-Frame (Procedural): Incremental update — "Updated: also prefers dark mode"
  • B-Frame (Bridging): Cross-references between frames

Search Pipeline

  1. Keyword search via FTS5 (stop-word filtered, OR-based)
  2. Vector search via sqlite-vec (k-NN embedding lookup)
  3. RRF Fusion combines both (K=60 reciprocal rank)
  4. Relevance scoring with 4 profiles: balanced, recent, important, connected

Embedding Providers (probed in order)

  1. InProcess (Xenova/all-MiniLM-L6-v2, 384→1024 dims, zero config)
  2. Ollama (nomic-embed-text, needs local Ollama)
  3. Voyage AI (voyage-3-lite, needs API key)
  4. OpenAI (text-embedding-3-small, needs API key)
  5. Mock fallback (deterministic, always available)

Memory Harvest (external import)

4-pass pipeline: Classify (Haiku) → Extract (Sonnet) → Synthesize (Sonnet) → Dedup (local) Supports: ChatGPT, Claude, Claude Code, Gemini, Perplexity, Grok, Cursor, Copilot exports.

Learning / EvolveSchema

ImprovementSignals table tracks 3 categories:

  • capability_gap — missing tools (threshold: 2 occurrences)
  • correction — user behavior corrections (threshold: 3)
  • workflow_pattern — recurring task shapes (threshold: 3) Surfaced to user as actionable suggestions (max 3 at a time).

5. Production Subsystems

Billing (Stripe)

  • Status: Implemented
  • Checkout sessions for BASIC ($15/mo) and TEAMS ($79/mo)
  • Webhook handler for subscription lifecycle
  • Poll-based tier sync for desktop apps behind NAT
  • Tier definitions in packages/shared/src/tiers.ts with capability matrices

Auth (Clerk)

  • Status: Implemented (cloud only)
  • JWT validation via @clerk/fastify
  • Desktop app uses bearer token auth (wsToken from /health)
  • Auto-provisioning from JWT claims

Vault (Secret Management)

  • Status: Implemented
  • AES-256-GCM encryption with per-entry IV
  • Machine-local key file (.vault-key, mode 0600)
  • API routes for reveal/list/set/delete
  • 3 test files including concurrency and edge cases

Offline Queue

  • Status: Implemented
  • Periodic LLM health check (30s interval)
  • Message queue persisted to offline-queue.json
  • Auto-retry on reconnection

Telemetry

  • Status: Implemented (privacy-first)
  • All data in local ~/.waggle/telemetry.db
  • Never tracks: message content, memory, file paths, API keys
  • Daily aggregation of tools, commands, errors

EU AI Act Compliance

  • Status: Implemented
  • Art. 12: Interaction audit logging
  • Art. 14: Human oversight tracking (approved/denied/modified)
  • Art. 19: 6-month log retention
  • Art. 26: Deployer monitoring
  • Art. 50: Model transparency
  • Template-level risk classification (minimal/limited/high-risk)

Rate Limiting

  • Status: Implemented
  • Per-endpoint: /api/chat (120/min), /api/vault/reveal (5/min), /api/backup (2/min)
  • Security headers: CSP, X-Frame-Options, X-XSS-Protection
  • API search tools: daily limits (Perplexity 100, Tavily 50, Brave 100)

KVARK Enterprise

  • Status: Partially implemented
  • kvark_search + kvark_ask_document tools exist
  • KvarkClient with JWT lifecycle
  • UI settings panel stubbed ("MOCK: Remove this fallback once real KVARK is wired")

Tauri Bundle

  • Status: Implemented
  • Windows NSIS + macOS DMG targets
  • Auto-updater with GitHub Releases endpoint
  • No code signing configured yet
  • Signature fields in latest.json empty

6. Testing

Type Count Framework
Unit/Integration tests 305 files Vitest
E2E tests 11 spec files Playwright
Visual regression 14 baselines Playwright screenshots
Phase A/B verification 13 tests, all passing Playwright

7. Production-Ready Checklist

Item Status Notes
Core chat loop GREEN Multi-session, multi-persona, streaming
Memory persistence GREEN 199 frames in personal.mind, dedup works
Workspace isolation GREEN Each workspace = separate SQLite
Offline mode GREEN Queue + auto-retry
Billing/tiers AMBER Stripe wired, needs production keys
Auth GREEN Clerk (cloud) + bearer token (desktop)
Vault encryption GREEN AES-256-GCM, tested
Compliance GREEN AI Act articles covered
Rate limiting GREEN Per-endpoint limits active
Auto-updater AMBER Configured, signatures empty
Code signing RED Not configured
KVARK integration AMBER Backend exists, UI stubbed
Error boundary AMBER Toast notifications only, no global boundary
E2E coverage GREEN 13/13 Phase A/B tests passing

Generated 2026-04-12. Extends WAGGLE-CORNERSTONE.md.