Commit Graph

12 Commits

Author SHA1 Message Date
Jason Woltje
c9cee504e8 feat: add wiki-link autocomplete in editor (closes #63)
Some checks failed
ci/woodpecker/push/woodpecker Pipeline failed
ci/woodpecker/pr/woodpecker Pipeline failed
2026-01-30 15:19:34 -06:00
Jason Woltje
eb15e8bbee Merge: Knowledge import/export (closes #77, #78) 2026-01-30 00:16:29 -06:00
Jason Woltje
8a24c2f5fd fix: code review cleanup
- Added missing API functions: fetchKnowledgeStats, fetchEntryGraph
- Exported StatsDashboard and EntryGraphViewer components
- Replaced 'any' types with proper TypeScript types:
  * AuthUser for @CurrentUser parameters
  * Prisma.KnowledgeEntryWhereInput for where clauses
  * Prisma.KnowledgeEntryUpdateInput for update data
  * Prisma.TransactionClient for transaction parameters
- All TypeScript checks passing
- XSS protection verified in WikiLinkRenderer (escapeHtml function)
- Wiki-link parsing properly handles code blocks and escaping
2026-01-30 00:12:13 -06:00
Jason Woltje
ee9663a1f6 feat: add backlinks display and wiki-link rendering (closes #62, #64)
Implements two key knowledge module features:

**#62 - Backlinks Display:**
- Added BacklinksList component to show entries that link to current entry
- Fetches backlinks from /api/knowledge/entries/:slug/backlinks
- Displays entry title, summary, and link context
- Clickable links to navigate to linking entries
- Loading, error, and empty states

**#64 - Wiki-Link Rendering:**
- Added WikiLinkRenderer component to parse and render wiki-links
- Supports [[slug]] and [[slug|display text]] syntax
- Converts wiki-links to clickable navigation links
- Distinct styling (blue color, dotted underline)
- XSS protection via HTML escaping
- Memoized HTML processing for performance

**Components:**
- BacklinksList.tsx - Backlinks display with empty/loading/error states
- WikiLinkRenderer.tsx - Wiki-link parser and renderer
- Updated EntryViewer.tsx to use WikiLinkRenderer
- Integrated BacklinksList into entry detail page

**API:**
- Added fetchBacklinks() function in knowledge.ts
- Added KnowledgeBacklink type to shared types

**Tests:**
- Comprehensive tests for BacklinksList (8 tests)
- Comprehensive tests for WikiLinkRenderer (14 tests)
- All tests passing with Vitest

**Type Safety:**
- Strict TypeScript compliance
- No 'any' types
- Proper error handling
2026-01-30 00:06:48 -06:00
Jason Woltje
c4c15ee87e feat: add markdown import/export (closes #77, #78)
- Add POST /api/knowledge/import endpoint for .md and .zip files
- Add GET /api/knowledge/export endpoint with markdown/json formats
- Import parses frontmatter (title, tags, status, visibility)
- Export includes frontmatter in markdown format
- Add ImportExportActions component with drag-and-drop UI
- Add import progress dialog with success/error summary
- Add export dropdown with format selection
- Include comprehensive test suite
- Support bulk import with detailed error reporting
2026-01-30 00:05:15 -06:00
Jason Woltje
806a518467 Merge: Knowledge version history - API and UI (closes #75, #76) 2026-01-29 23:39:49 -06:00
Jason Woltje
652ba50a19 fix: code review cleanup - schema sync, type safety, null handling
- Sync KnowledgeLink schema with migration (add displayText, positionStart, positionEnd, resolved)
- Make targetId optional to support unresolved links
- Fix null handling in graph.service.ts (skip unresolved links)
- Add explicit types to frontend components (remove implicit any)
- Remove unused WikiLink import
- Add null-safe statusInfo check in EntryCard
2026-01-29 23:36:41 -06:00
Jason Woltje
3806957973 fix: code review cleanup - TypeScript strict mode fixes for VersionHistory component 2026-01-29 23:34:28 -06:00
Jason Woltje
7465d0a3c2 feat: add knowledge version history (closes #75, closes #76)
- Added EntryVersion model with author relation
- Implemented automatic versioning on entry create/update
- Added API endpoints for version history:
  - GET /api/knowledge/entries/:slug/versions - list versions
  - GET /api/knowledge/entries/:slug/versions/:version - get specific
  - POST /api/knowledge/entries/:slug/restore/:version - restore version
- Created VersionHistory.tsx component with timeline view
- Added History tab to entry detail page
- Supports version viewing and restoring
- Includes comprehensive tests for version operations
- All TypeScript types are explicit and type-safe
2026-01-29 23:27:03 -06:00
Jason Woltje
26a334c677 feat: add knowledge graph views and stats (closes #73, closes #74)
Issue #73 - Entry-Centered Graph View:
- Added GET /api/knowledge/entries/:id/graph endpoint with depth parameter
- Returns entry + connected nodes with link relationships
- Created GraphService for graph traversal using BFS
- Added EntryGraphViewer component for frontend
- Integrated graph view tab into entry detail page

Issue #74 - Graph Statistics Dashboard:
- Added GET /api/knowledge/stats endpoint
- Returns overview stats (entries, tags, links by status)
- Includes most connected entries, recent activity, tag distribution
- Created StatsDashboard component with visual stats
- Added route at /knowledge/stats

Backend:
- GraphService: BFS-based graph traversal with configurable depth
- StatsService: Parallel queries for comprehensive statistics
- GraphQueryDto: Validation for depth parameter (1-5)
- Entity types for graph nodes/edges and statistics
- Unit tests for both services

Frontend:
- EntryGraphViewer: Entry-centered graph visualization
- StatsDashboard: Statistics overview with charts
- Graph view tab on entry detail page
- API client functions for new endpoints
- TypeScript strict typing throughout
2026-01-29 23:25:29 -06:00
Jason Woltje
25947cee52 feat(web): add knowledge entry editor page (KNOW-006) 2026-01-29 17:05:48 -06:00
Jason Woltje
5291fece26 feat(web): add workspace management UI (M2 #12)
- Create workspace listing page at /settings/workspaces
  - List all user workspaces with role badges
  - Create new workspace functionality
  - Display member count per workspace

- Create workspace detail page at /settings/workspaces/[id]
  - Workspace settings (name, ID, created date)
  - Member management with role editing
  - Invite member functionality
  - Delete workspace (owner only)

- Add workspace components:
  - WorkspaceCard: Display workspace info with role badge
  - WorkspaceSettings: Edit workspace settings and delete
  - MemberList: Display and manage workspace members
  - InviteMember: Send invitations with role selection

- Add WorkspaceMemberWithUser type to shared package
- Follow existing app patterns for styling and structure
- Use mock data (ready for API integration)
2026-01-29 16:59:26 -06:00