Files
stack/docs/MINDMAP_API_INTEGRATION.md
Jason Woltje 0eb3abc12c
All checks were successful
ci/woodpecker/push/woodpecker Pipeline was successful
Clean up documents located in the project root.
2026-01-31 16:42:26 -06:00

173 lines
4.8 KiB
Markdown

# Mindmap API Integration
## Overview
The mindmap components have been successfully wired to the Knowledge module API. The integration transforms Knowledge entries into graph nodes and uses backlinks to build edges.
## API Endpoints Used
### Node Operations (Knowledge Entries)
- **GET /api/knowledge/entries** - Fetch all entries (transformed to nodes)
- **POST /api/knowledge/entries** - Create new entry (node)
- **PUT /api/knowledge/entries/:slug** - Update entry (node)
- **DELETE /api/knowledge/entries/:slug** - Delete entry (node)
### Edge Operations (Backlinks)
- **GET /api/knowledge/entries/:slug/backlinks** - Get relationships (edges)
- Edge creation: Adds wiki-links to source entry content (`[[slug|title]]`)
- Edge deletion: Removes wiki-links from source entry content
### Search
- **GET /api/knowledge/search?q=query** - Full-text search across entries
## Data Transformations
### Entry → Node
```typescript
{
id: entry.id,
title: entry.title,
node_type: entry.tags[0]?.slug || 'concept',
content: entry.content || entry.summary,
tags: entry.tags.map(t => t.slug),
domain: entry.tags[0]?.name,
metadata: { slug, status, visibility, createdBy, updatedBy },
created_at: entry.createdAt,
updated_at: entry.updatedAt
}
```
### Node → Entry
```typescript
{
title: node.title,
content: node.content,
summary: node.content?.slice(0, 200),
tags: node.tags.length > 0 ? node.tags : [node.node_type],
status: 'PUBLISHED',
visibility: 'WORKSPACE'
}
```
### Backlinks → Edges
- Backlinks are automatically created when wiki-links exist in entry content
- Format: `[[target-slug|Display Text]]`
- Edges use `relates_to` as the default relation type
## Features Implemented
### 1. Graph Data Fetching
- ✅ Fetches all entries from `/api/knowledge/entries`
- ✅ Transforms entries to graph nodes
- ✅ Fetches backlinks for each entry to build edges
- ✅ Handles pagination (limit: 100 entries)
### 2. CRUD Operations
- ✅ Create node → POST to `/api/knowledge/entries`
- ✅ Update node → PUT to `/api/knowledge/entries/:slug`
- ✅ Delete node → DELETE to `/api/knowledge/entries/:slug`
- ✅ Auto-refresh graph after mutations
### 3. Edge Management
- ✅ Create edge → Inserts wiki-link in source content
- ✅ Delete edge → Removes wiki-link from source content
- ✅ Auto-refresh graph after mutations
### 4. Search Integration
- ✅ Real-time search using `/api/knowledge/search`
- ✅ Search results dropdown with node selection
- ✅ Loading indicator during search
### 5. Real-time Updates
- ✅ Graph automatically refetches after create/update/delete
- ✅ Statistics recalculate when graph changes
- ✅ UI updates reflect backend state
## Component Structure
### useGraphData Hook
Location: `apps/web/src/components/mindmap/hooks/useGraphData.ts`
Provides:
- `graph`: GraphData object (nodes + edges)
- `isLoading`: Loading state
- `error`: Error messages
- `fetchGraph()`: Refresh graph data
- `createNode()`: Create new node
- `updateNode()`: Update existing node
- `deleteNode()`: Delete node
- `createEdge()`: Create edge (adds wiki-link)
- `deleteEdge()`: Delete edge (removes wiki-link)
- `searchNodes()`: Search for nodes
- `fetchMermaid()`: Generate Mermaid diagram
- `statistics`: Graph statistics
### MindmapViewer Component
Location: `apps/web/src/components/mindmap/MindmapViewer.tsx`
Features:
- Interactive graph view (ReactFlow)
- Mermaid diagram view
- Search bar with live results
- Node creation modal
- Node details panel
- CRUD operations toolbar
- Statistics display
### ReactFlowEditor Component
Location: `apps/web/src/components/mindmap/ReactFlowEditor.tsx`
Features:
- Visual graph rendering
- Drag-and-drop nodes
- Click to connect edges
- Node selection and deletion
- Mini-map navigation
- Background grid
## Testing Checklist
- [x] Graph loads with real data from Knowledge API
- [x] Create node operation works
- [x] Update node operation works
- [x] Delete node operation works
- [x] Create edge adds wiki-link
- [x] Delete edge removes wiki-link
- [x] Search returns results
- [x] Graph updates in real-time after mutations
- [x] TypeScript compiles without errors
- [x] No console errors during operation
## Known Limitations
1. **Edge Type**: All edges use `relates_to` relation type by default
2. **Pagination**: Limited to 100 entries per fetch
3. **Wiki-links**: Edges are created via wiki-links, which may result in content modifications
4. **Slug-based**: Update/delete operations require looking up the node's slug from metadata
## Future Enhancements
1. Support multiple edge types (depends_on, part_of, etc.)
2. Implement pagination for large graphs
3. Add filtering by node type
4. Add graph layout algorithms
5. Support for direct edge creation without wiki-links
6. Real-time collaborative editing with WebSockets