Files
stack/docs/design/knowledge-module-issues.md
Jason Woltje 12abdfe81d feat(#93): implement agent spawn via federation
Implements FED-010: Agent Spawn via Federation feature that enables
spawning and managing Claude agents on remote federated Mosaic Stack
instances via COMMAND message type.

Features:
- Federation agent command types (spawn, status, kill)
- FederationAgentService for handling agent operations
- Integration with orchestrator's agent spawner/lifecycle services
- API endpoints for spawning, querying status, and killing agents
- Full command routing through federation COMMAND infrastructure
- Comprehensive test coverage (12/12 tests passing)

Architecture:
- Hub → Spoke: Spawn agents on remote instances
- Command flow: FederationController → FederationAgentService →
  CommandService → Remote Orchestrator
- Response handling: Remote orchestrator returns agent status/results
- Security: Connection validation, signature verification

Files created:
- apps/api/src/federation/types/federation-agent.types.ts
- apps/api/src/federation/federation-agent.service.ts
- apps/api/src/federation/federation-agent.service.spec.ts

Files modified:
- apps/api/src/federation/command.service.ts (agent command routing)
- apps/api/src/federation/federation.controller.ts (agent endpoints)
- apps/api/src/federation/federation.module.ts (service registration)
- apps/orchestrator/src/api/agents/agents.controller.ts (status endpoint)
- apps/orchestrator/src/api/agents/agents.module.ts (lifecycle integration)

Testing:
- 12/12 tests passing for FederationAgentService
- All command service tests passing
- TypeScript compilation successful
- Linting passed

Refs #93

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
2026-02-03 14:37:06 -06:00

16 KiB

Knowledge Module - Implementation Issues

Epic: Knowledge Module
Design Doc: knowledge-module.md
Target: 6 weeks
Created: 2025-01-29


Epic Overview

Build a native knowledge management module for Mosaic Stack with wiki-style linking, semantic search, and graph visualization.

Labels: epic, feature, knowledge-module


Phase 1: Foundation (Week 1-2)

KNOW-001: Database Schema for Knowledge Module

Priority: P0
Estimate: 4h
Labels: database, schema, phase-1

Description: Create Prisma schema and migrations for the Knowledge module.

Acceptance Criteria:

  • KnowledgeEntry model with all fields
  • KnowledgeEntryVersion model for history
  • KnowledgeLink model for wiki-links
  • KnowledgeTag and KnowledgeEntryTag models
  • KnowledgeEmbedding model (pgvector ready)
  • All indexes defined
  • Migration runs cleanly
  • Seed data for testing

Technical Notes:

  • Reference design doc for full schema
  • Ensure @@unique([workspaceId, slug]) constraint
  • Add search_vector column for full-text search
  • pgvector extension may need separate setup

KNOW-002: Entry CRUD API Endpoints

Priority: P0
Estimate: 6h
Labels: api, phase-1

Description: Implement RESTful API for knowledge entry management.

Acceptance Criteria:

  • POST /api/knowledge/entries - Create entry
  • GET /api/knowledge/entries - List entries (paginated, filterable)
  • GET /api/knowledge/entries/:slug - Get single entry
  • PUT /api/knowledge/entries/:slug - Update entry
  • DELETE /api/knowledge/entries/:slug - Archive entry (soft delete)
  • Workspace isolation enforced
  • Input validation with class-validator
  • OpenAPI/Swagger documentation

Technical Notes:

  • Follow existing Mosaic API patterns
  • Use @WorkspaceGuard() for tenant isolation
  • Slug generation from title with collision handling

KNOW-003: Tag Management API

Priority: P0
Estimate: 3h
Labels: api, phase-1

Description: Implement tag CRUD and entry-tag associations.

Acceptance Criteria:

  • GET /api/knowledge/tags - List workspace tags
  • POST /api/knowledge/tags - Create tag
  • PUT /api/knowledge/tags/:slug - Update tag
  • DELETE /api/knowledge/tags/:slug - Delete tag
  • GET /api/knowledge/tags/:slug/entries - Entries with tag
  • Entry creation/update accepts tag slugs
  • Auto-create tags if autoCreateTags: true

KNOW-004: Basic Markdown Rendering

Priority: P0
Estimate: 4h
Labels: api, rendering, phase-1

Description: Render markdown content to HTML with caching.

Acceptance Criteria:

  • Markdown-to-HTML conversion on entry save
  • Support GFM (tables, task lists, strikethrough)
  • Code syntax highlighting (highlight.js or Shiki)
  • Sanitize HTML output (XSS prevention)
  • Cache rendered HTML in contentHtml field
  • Invalidate cache on content update

Technical Notes:

  • Use marked or remark for parsing
  • Wiki-links ([[...]]) parsed but not resolved yet (Phase 2)

KNOW-005: Entry List Page UI

Priority: P0
Estimate: 6h
Labels: frontend, phase-1

Description: Build the knowledge entry list page in the web UI.

Acceptance Criteria:

  • List view with title, summary, tags, updated date
  • Filter by status (draft/published/archived)
  • Filter by tag
  • Sort by updated/created/title
  • Pagination
  • Quick search (client-side filter)
  • Create new entry button → editor
  • Responsive design

KNOW-006: Entry Detail/Editor Page UI

Priority: P0
Estimate: 8h
Labels: frontend, editor, phase-1

Description: Build the entry view and edit page.

Acceptance Criteria:

  • View mode with rendered markdown
  • Edit mode with markdown editor
  • Split view option (edit + preview)
  • Title editing
  • Tag selection/creation
  • Status dropdown
  • Save/cancel/delete actions
  • Unsaved changes warning
  • Keyboard shortcuts (Cmd+S to save)

Technical Notes:

  • Consider CodeMirror or Monaco for editor
  • May use existing rich-text patterns from Mosaic

Phase 2: Linking (Week 2-3)

Priority: P0
Estimate: 4h
Labels: api, parsing, phase-2

Description: Parse [[wiki-link]] syntax from markdown content.

Acceptance Criteria:

  • Extract all [[...]] patterns from content
  • Support [[slug]] basic syntax
  • Support [[slug|display text]] aliased links
  • Support [[slug#header]] section links
  • Return structured link data with positions
  • Handle edge cases (nested brackets, escaping)

Technical Notes:

interface ParsedLink {
  raw: string; // "[[design|Design Doc]]"
  target: string; // "design"
  display: string; // "Design Doc"
  section?: string; // "header" if [[design#header]]
  position: { start: number; end: number };
}

Priority: P0
Estimate: 4h
Labels: api, phase-2

Description: Resolve parsed wiki-links to actual entries.

Acceptance Criteria:

  • Resolve by exact slug match
  • Resolve by title match (case-insensitive)
  • Fuzzy match fallback (optional)
  • Mark unresolved links as broken
  • Extract surrounding context for link record
  • Batch resolution for efficiency

Priority: P0
Estimate: 4h
Labels: api, database, phase-2

Description: Store links in database and keep in sync with content.

Acceptance Criteria:

  • On entry save: parse → resolve → store links
  • Remove stale links on update
  • GET /api/knowledge/entries/:slug/links/outgoing
  • GET /api/knowledge/entries/:slug/links/incoming (backlinks)
  • GET /api/knowledge/entries/:slug/links/broken
  • Broken link report for workspace

Priority: P1
Estimate: 3h
Labels: frontend, phase-2

Description: Show incoming links (backlinks) on entry pages.

Acceptance Criteria:

  • Backlinks section on entry detail page
  • Show linking entry title + context snippet
  • Click to navigate to linking entry
  • Count badge in sidebar/header
  • Empty state when no backlinks

Priority: P1
Estimate: 6h
Labels: frontend, editor, phase-2

Description: Autocomplete suggestions when typing [[.

Acceptance Criteria:

  • Trigger on [[ typed in editor
  • Show dropdown with matching entries
  • Search by title and slug
  • Show recent entries first, then alphabetical
  • Insert selected entry as [[slug]] or [[slug|title]]
  • Keyboard navigation (arrows, enter, escape)
  • Debounced API calls

Priority: P0
Estimate: 3h
Labels: frontend, rendering, phase-2

Description: Render wiki-links as clickable links in entry view.

Acceptance Criteria:

  • [[slug]] renders as link to /knowledge/slug
  • [[slug|text]] shows custom text
  • Broken links styled differently (red, dashed underline)
  • Hover preview (optional, stretch goal)

Phase 3: Search (Week 3-4)

KNOW-013: Full-Text Search Setup

Priority: P0
Estimate: 4h
Labels: database, search, phase-3

Description: Set up PostgreSQL full-text search for entries.

Acceptance Criteria:

  • Add tsvector column to entries table
  • Create GIN index on search vector
  • Weight title (A), summary (B), content (C)
  • Trigger to update vector on insert/update
  • Verify search performance with test data

KNOW-014: Search API Endpoint

Priority: P0
Estimate: 4h
Labels: api, search, phase-3

Description: Implement search API with full-text search.

Acceptance Criteria:

  • GET /api/knowledge/search?q=...
  • Return ranked results with snippets
  • Highlight matching terms in snippets
  • Filter by tags, status
  • Pagination
  • Response time < 200ms

KNOW-015: Search UI

Priority: P0
Estimate: 6h
Labels: frontend, search, phase-3

Description: Build search interface in web UI.

Acceptance Criteria:

  • Search input in knowledge module header
  • Search results page
  • Highlighted snippets
  • Filter sidebar (tags, status)
  • "No results" state with suggestions
  • Search as you type (debounced)
  • Keyboard shortcut (Cmd+K) to focus search

KNOW-016: pgvector Setup

Priority: P1
Estimate: 4h
Labels: database, vector, phase-3

Description: Set up pgvector extension for semantic search.

Acceptance Criteria:

  • Enable pgvector extension in PostgreSQL
  • Create embeddings table with vector column
  • HNSW index for fast similarity search
  • Verify extension works in dev and prod

Technical Notes:

  • May need PostgreSQL 15+ for best pgvector support
  • Consider managed options (Supabase, Neon) if self-hosting is complex

KNOW-017: Embedding Generation Pipeline

Priority: P1
Estimate: 6h
Labels: api, vector, phase-3

Description: Generate embeddings for entries using OpenAI or local model.

Acceptance Criteria:

  • Service to generate embeddings from text
  • On entry create/update: queue embedding job
  • Background worker processes queue
  • Store embedding in database
  • Handle API rate limits and errors
  • Config for embedding model selection

Technical Notes:

  • Start with OpenAI text-embedding-ada-002
  • Consider local options (sentence-transformers) for cost/privacy

KNOW-018: Semantic Search API

Priority: P1
Estimate: 4h
Labels: api, search, vector, phase-3

Description: Implement semantic (vector) search endpoint.

Acceptance Criteria:

  • POST /api/knowledge/search/semantic
  • Accept natural language query
  • Generate query embedding
  • Find similar entries by cosine similarity
  • Return results with similarity scores
  • Configurable similarity threshold

Phase 4: Graph (Week 4-5)

KNOW-019: Graph Data API

Priority: P1
Estimate: 4h
Labels: api, graph, phase-4

Description: API to retrieve knowledge graph data.

Acceptance Criteria:

  • GET /api/knowledge/graph - Full graph (nodes + edges)
  • GET /api/knowledge/graph/:slug - Subgraph centered on entry
  • GET /api/knowledge/graph/stats - Graph statistics
  • Include orphan detection
  • Filter by tag, status
  • Limit node count option

KNOW-020: Graph Visualization Component

Priority: P1
Estimate: 8h
Labels: frontend, graph, phase-4

Description: Interactive knowledge graph visualization.

Acceptance Criteria:

  • Force-directed graph layout
  • Nodes sized by connection count
  • Nodes colored by status
  • Click node to navigate or show details
  • Zoom and pan controls
  • Layout toggle (force, hierarchical, radial)
  • Performance OK with 500+ nodes

Technical Notes:

  • Use D3.js or Cytoscape.js
  • Consider WebGL renderer for large graphs

KNOW-021: Entry-Centered Graph View

Priority: P2
Estimate: 4h
Labels: frontend, graph, phase-4

Description: Show mini-graph on entry detail page.

Acceptance Criteria:

  • Small graph showing entry + direct connections
  • 1-2 hop neighbors
  • Click to expand or navigate
  • Toggle to show/hide on entry page

KNOW-022: Graph Statistics Dashboard

Priority: P2
Estimate: 3h
Labels: frontend, graph, phase-4

Description: Dashboard showing knowledge base health.

Acceptance Criteria:

  • Total entries, links, tags
  • Orphan entry count (no links)
  • Broken link count
  • Average connections per entry
  • Most connected entries
  • Recently updated

Phase 5: Polish (Week 5-6)

KNOW-023: Version History API

Priority: P1
Estimate: 4h
Labels: api, versioning, phase-5

Description: API for entry version history.

Acceptance Criteria:

  • Create version on each save
  • GET /api/knowledge/entries/:slug/versions
  • GET /api/knowledge/entries/:slug/versions/:v
  • POST /api/knowledge/entries/:slug/restore/:v
  • Version limit per entry (configurable, default 50)
  • Prune old versions

KNOW-024: Version History UI

Priority: P1
Estimate: 6h
Labels: frontend, versioning, phase-5

Description: UI to browse and restore versions.

Acceptance Criteria:

  • Version list sidebar/panel
  • Show version date, author, change note
  • Click to view historical version
  • Diff view between versions
  • Restore button with confirmation
  • Compare any two versions

Technical Notes:

  • Use diff library for content comparison
  • Highlight additions/deletions

KNOW-025: Markdown Import

Priority: P2
Estimate: 4h
Labels: api, import, phase-5

Description: Import existing markdown files into knowledge base.

Acceptance Criteria:

  • Upload .md file(s)
  • Parse frontmatter for metadata
  • Generate slug from filename or title
  • Resolve wiki-links if target entries exist
  • Report on import results
  • Bulk import from folder/zip

KNOW-026: Export Functionality

Priority: P2
Estimate: 3h
Labels: api, export, phase-5

Description: Export entries to markdown/PDF.

Acceptance Criteria:

  • Export single entry as markdown
  • Export single entry as PDF
  • Bulk export (all or filtered)
  • Include frontmatter in markdown export
  • Preserve wiki-links in export

KNOW-027: Caching Layer

Priority: P1
Estimate: 4h
Labels: api, performance, phase-5

Description: Implement Valkey caching for knowledge module.

Acceptance Criteria:

  • Cache entry JSON
  • Cache rendered HTML
  • Cache graph data
  • Cache search results (short TTL)
  • Proper invalidation on updates
  • Cache hit metrics

KNOW-028: Documentation

Priority: P1
Estimate: 4h
Labels: docs, phase-5

Description: Document the knowledge module.

Acceptance Criteria:

  • User guide for knowledge module
  • API reference (OpenAPI already in place)
  • Wiki-link syntax reference
  • Admin/config documentation
  • Architecture overview for developers

Stretch Goals / Future

KNOW-029: Real-Time Collaboration

Priority: P3
Labels: future, collaboration

Description: Multiple users editing same entry simultaneously.

Notes:

  • Would require CRDT or OT implementation
  • Significant complexity
  • Evaluate need before committing

KNOW-030: Entry Templates

Priority: P3
Labels: future, templates

Description: Pre-defined templates for common entry types.

Notes:

  • ADR template
  • Design doc template
  • Meeting notes template
  • Custom templates per workspace

KNOW-031: Attachments

Priority: P3
Labels: future, attachments

Description: Upload and embed images/files in entries.

Notes:

  • S3/compatible storage backend
  • Image optimization
  • Paste images into editor

Summary

Phase Issues Est. Hours Focus
1 KNOW-001 to KNOW-006 31h CRUD + Basic UI
2 KNOW-007 to KNOW-012 24h Wiki-links
3 KNOW-013 to KNOW-018 28h Search
4 KNOW-019 to KNOW-022 19h Graph
5 KNOW-023 to KNOW-028 25h Polish
Total 28 issues ~127h ~3-4 dev weeks

Generated by Jarvis • 2025-01-29