UNPKG

lorehub

Version:

Capture and surface the collective wisdom of your codebase

319 lines (272 loc) 11.2 kB
# LoreHub Development - Current State ## Session Date: 2025-01-08 ## Completed Tasks ### 1. Project Planning & Architecture ✅ - Decided on name: **LoreHub** (CLI alias: `lh`) - Tech stack: TypeScript + SQLite + better-sqlite3 + MCP SDK + Zod - Architecture: Local-first, event-sourced lores - Created comprehensive documentation: - `docs/ARCHITECTURE.md` - Technical architecture - `docs/DECISIONS.md` - Design decisions - `docs/IMPLEMENTATION.md` - Development guide - `README.md` - User documentation ### 2. Project Setup ✅ - Fixed directory issue (moved from ~/Developer/Projects to ~/Developer/lorehub) - Initialized npm project with proper package.json - Installed dependencies: - Production: better-sqlite3, @modelcontextprotocol/sdk, zod, commander, ink, react - Dev: TypeScript, Vitest, ESLint, types - Created strict TypeScript configuration (tsconfig.json) - Set up Vitest for TDD with coverage and benchmarking ### 3. TDD Implementation ✅ #### Core Types ✅ - Created first test file: `src/core/types.test.ts` - Implemented `src/core/types.ts` with Zod schemas - Completed RED-GREEN-REFACTOR cycle: - LoreSchema, RelationSchema, RealmSchema - Type guards (isLore, isRelation, isRealm) - Utility types (CreateLoreInput, UpdateLoreInput, etc.) - Performance-focused validation helpers - All 15 tests passing #### Database Layer ✅ - Created comprehensive test suite: `src/db/database.test.ts` - Implemented `src/db/database.ts` with better-sqlite3 - Features implemented: - SQLite connection with WAL mode for performance - Complete CRUD operations for Realms, Lores, Relations - Transaction support with rollback - Performance indexes on key columns - Bulk insert optimization - Search functionality with wildcard support (* and ?) - All 21 database tests passing #### CLI Implementation ✅ - Implemented with Commander.js for argument parsing - Ink for beautiful TUI components - Features completed: - `lh add` - Add lores to current realm (inline or interactive mode with Ink UI) - `lh realm` - Show realm information and stats - `lh search` - Search lores across ALL realms with wildcard support - `lh list` - List lores from ALL realms with interactive selection - Global knowledge hub approach: - Lores always added to current realm - Search/list show lores from ALL realms by default - Current realm lores marked with ⭐ - Use `--current` flag to limit to current realm only - Use `-r <path>` to filter by specific realm - Smart realm detection from package.json/git - Non-TTY support for CI/CD environments - Database stored in ~/.lorehub/lorehub.db - Fixed all interactive UI issues: - Tab/Shift-Tab navigation working - Enter to submit forms - Auto-update of list view selection - No more header duplication #### MCP Server Implementation ✅ - Created MCP server for AI assistant integration - Implemented lore querying tools: - `search_lores`: Search across ALL realms by default (with wildcards and filters) - `list_lores`: List from ALL realms by default (with type/province filters) - `get_lore`: Get specific lore by ID - `list_realms`: List all realms - Global knowledge hub in MCP: - Tools search/list across all realms by default - Optional `realm_path` parameter to limit to specific realm - Response includes realm information for each lore - Full test coverage for MCP server (15 tests passing) - Proper error handling and validation - Package.json MCP configuration added - Entry point at `dist/mcp/index.js` (executable) ## Current Working Directory `/Users/roeej/Developer/Projects/lorehub` ## Directory Structure ``` lorehub/ ├── docs/ │ ├── ARCHITECTURE.md │ ├── CURRENT_STATE.md (this file) │ ├── DECISIONS.md │ └── IMPLEMENTATION.md ├── src/ │ ├── core/ │ │ ├── types.ts ✅ │ │ └── types.test.ts ✅ │ ├── db/ │ │ ├── database.ts ✅ │ │ └── database.test.ts ✅ │ ├── cli/ │ │ ├── cli.ts ✅ │ │ ├── cli.test.ts ✅ │ │ ├── commands/ │ │ │ ├── add.tsx ✅ │ │ │ ├── list.tsx ✅ │ │ │ ├── realm.tsx ✅ │ │ │ ├── browse.tsx ✅ │ │ │ ├── export.tsx ✅ │ │ │ └── import.tsx ✅ │ │ ├── components/ │ │ │ ├── AddLore.tsx ✅ │ │ │ ├── AddLore.test.tsx ✅ │ │ │ ├── LoresView.tsx ✅ │ │ │ ├── SimilarLoresView.tsx ✅ │ │ │ ├── Help.tsx ✅ │ │ │ ├── ErrorMessage.tsx ✅ │ │ │ └── Progress.tsx ✅ │ │ └── utils/ │ │ ├── db-config.ts ✅ │ │ └── realm.ts ✅ (renamed from project.ts) │ ├── mcp/ │ │ ├── server.ts ✅ │ │ ├── server.test.ts ✅ │ │ └── index.ts ✅ │ └── index.ts ✅ ├── tests/ ├── bench/ ├── dist/ (built files) ├── package.json ├── tsconfig.json ├── vitest.config.ts └── README.md ``` ## All Tests Passing - Core types: 14 tests ✅ - Database: 21 tests ✅ - CLI: 8 tests (1 skipped) ✅ - CLI Components: 9 tests (3 skipped) ✅ - MCP Server: 15 tests ✅ - **Total: 67 tests passing, 4 skipped** ## Recent Updates (2025-01-09) - Fixed test failures by properly mocking Ink components - Created comprehensive MCP Usage Guide (docs/MCP_USAGE.md) - Updated README to reference MCP documentation - All tests passing, project builds successfully - Implemented grid-based UI layout with fixed heights (20 lines) - Added vim-style search functionality (/) to list and search views - Redesigned AddLore screen with two-column layout and preview - Added keyboard shortcuts help component (? key) - Created centralized error handling with user-friendly messages - Added progress indicators for long operations - Implemented export/import functionality (JSON and Markdown formats) ## Next Steps (TODO) 1. **Polish Phase**: ✅ COMPLETE - ✅ Improve UI components styling (grid-based layout) - ✅ Add more keyboard shortcuts (/, ?, Ctrl+S) - ✅ Better error messages (ErrorMessage component) - ✅ Progress indicators for long operations 2. **Additional Features**: - ✅ Export/import functionality (JSON and Markdown) - Lore relationships visualization - Time-based queries - Lore history/versions 3. **AI Integration**: - Document MCP usage for Claude/Cursor - Create example prompts - Build lore suggestion system 4. **Publishing**: - Add npm scripts for installation - Create installation guide - Set up GitHub Actions for CI/CD - Publish to npm registry ## Key Decisions Made 1. **TypeScript Strict Mode**: Using maximum strictness for type safety 2. **TDD Approach**: Red-Green-Refactor cycle (66 tests passing!) 3. **Performance Focus**: - better-sqlite3 for synchronous operations - Vitest with thread pool for tests - Benchmarking setup ready 4. **Type Safety**: Using Zod for runtime validation 5. **UI Framework**: Ink (React for CLI) for interactive components 6. **MCP Integration**: Full Model Context Protocol support ## Development Guidelines Established 1. Everything must be type-safe 2. TDD (Red-Green-Refactor) approach 3. Performance is critical - benchmark everything 4. ESM modules (type: "module" in package.json) 5. Interactive UI with Ink for better UX ## Commands to Resume ```bash cd ~/Developer/Projects/lorehub # Run all tests npm test # Watch mode for TDD npm run test:watch # Type checking npm run typecheck # Build npm run build # Test CLI locally npm link lh add lh browse lh realm # Test MCP server ./dist/mcp/index.js ``` ## Current Task v0.2.1 Released! Complete terminology pivot to fantasy theme with all legacy code removed. Full CLI and MCP support with new lore/realm/province terminology. ## Major Terminology Pivot (2025-01-09) ✅ COMPLETED ### Overview Pivoting from "facts" to "lores" to better align with the LoreHub brand and create a more cohesive, thematic experience while maintaining professionalism. ### Terminology Changes #### Core Entities - **Fact/Facts****Lore/Lores** (countable pieces of wisdom) - **Project****Realm** (each codebase is its own realm) - **Todo****Quest** (knowledge to be gained) #### Lore Types - **Decision****Decree** (architectural choices made) - **Learning****Lesson** (wisdom gained from experience) - **Assumption** → Assumption (kept as is) - **Constraint** → Constraint (kept as is) - **Requirement** → Requirement (kept as is) - **Risk** → Risk (kept as is) #### What Stays the Same - All CLI commands (add, search, list, etc.) - for familiarity - Confidence levels - Sigils (tags) and provinces terminology - Database field structure (just renamed tables) ### Implementation Status ✅ COMPLETED 1. **Database Migration** ✅ - Created migration to rename `facts` table to `lores` - Updated all indexes and constraints - Preserved existing data - Migration completed successfully 2. **Code Updates** ✅ - Types: `Fact` → `Lore`, `FactType` → `LoreType` ✅ - Interfaces: `CreateFactInput` → `CreateLoreInput` ✅ - Functions: `createFact()` → `createLore()`, etc. ✅ - Variables: `factId` → `loreId`, `factCount` → `loreCount` ✅ - Database queries and references ✅ - All legacy code removed in v0.2.1 3. **UI/Display Text Updates** ✅ - "Add New Fact" → "Add New Lore" ✅ - "Similar facts (10≈)" → "Similar lores (10≈)" ✅ - "✓ Fact created successfully" → "✓ Lore created successfully" ✅ - "Found 25 facts" → "Found 25 lores" ✅ - "Project: lorehub" → "Realm: lorehub" ✅ 4. **MCP Tools Renaming** ✅ - `create_fact` → `create_lore` ✅ - `search_facts` → `search_lores` ✅ - `list_facts` → `list_lores` ✅ - Updated all tool descriptions ✅ 5. **Documentation Updates** ✅ - README.md ✅ - All guides and examples ✅ - Code comments ✅ - Test descriptions ✅ ### Rationale - "Lore" better captures accumulated wisdom and team knowledge - Creates stronger brand identity with LoreHub - More evocative than clinical "facts" - Maintains professionalism while adding character ### Migration Completed ✅ Successfully executed database migration that: 1. Creates new tables (realms, lores, lore_relations) with updated terminology 2. Copies all data from old tables with type conversions (decision→decree, learning→lesson, todo→quest) 3. Creates compatibility views so the application continues working during the transition 4. Preserves vector embeddings if they exist 5. Can be rolled back if needed Migration files created: - `/drizzle/0002_lore_terminology_migration.sql` - Main migration - `/drizzle/0002_lore_terminology_migration_rollback.sql` - Rollback script - `/scripts/migrate-to-lore-terminology.js` - Executable migration runner Run with: `node scripts/migrate-to-lore-terminology.js` Rollback with: `node scripts/migrate-to-lore-terminology.js --rollback`