UNPKG

@webdevtoday/grok-cli

Version:

A sophisticated CLI tool for interacting with xAI Grok 4, featuring conversation history, file reference, custom commands, memory system, and genetic development workflows

385 lines (293 loc) 8.4 kB
# Conversation History System ## Overview The Grok CLI conversation history system provides persistent storage, search, and continuation of chat sessions. All conversations are automatically saved and can be resumed at any time. ## Architecture ### Components 1. **HistoryManager** (`src/core/history.ts`) - Manages conversation persistence - Handles indexing and search - Provides cleanup and export functionality 2. **SessionManager Integration** (`src/core/session.ts`) - Enhanced with history awareness - Automatic saving after each message - Session continuation support 3. **CLI Integration** (`src/cli.ts`) - Command-line flags for continuation - Slash commands for history management - Interactive history browsing ### Storage Structure ``` ~/.grok-cli/history/ ├── conversations.json # Index of all conversations ├── abc123def456.json # Individual conversation file ├── def456ghi789.json # Another conversation └── ... ``` ## Data Formats ### Conversation Index (`conversations.json`) ```json { "lastUpdated": "2024-01-15T10:30:00Z", "conversations": [ { "id": "abc123def456", "startTime": "2024-01-15T09:00:00Z", "lastUpdateTime": "2024-01-15T10:30:00Z", "cwd": "/Users/user/project", "messageCount": 15, "firstMessage": "Help me debug this Python script", "lastMessage": "Thanks! That fixed the issue.", "filePath": "/Users/user/.grok-cli/history/abc123def456.json" } ] } ``` ### Individual Conversation File ```json { "session": { "id": "abc123def456", "cwd": "/Users/user/project", "startTime": "2024-01-15T09:00:00Z", "config": { /* GrokConfig */ }, "transcriptPath": "/Users/user/.grok/sessions/abc123def456.jsonl" }, "messages": [ { "role": "user", "content": "Help me debug this Python script", "timestamp": "2024-01-15T09:00:00Z", "toolCalls": [] }, { "role": "assistant", "content": "I'd be happy to help debug your Python script...", "timestamp": "2024-01-15T09:01:00Z", "toolCalls": [ { "toolName": "Read", "params": { "file_path": "script.py" }, "result": { "success": true, "output": "..." }, "timestamp": "2024-01-15T09:01:30Z" } ] } ], "metadata": { "totalMessages": 15, "startTime": "2024-01-15T09:00:00Z", "lastUpdateTime": "2024-01-15T10:30:00Z", "cwd": "/Users/user/project" } } ``` ## Usage ### Command Line Flags ```bash # Continue from last conversation grok --continue # Resume specific conversation grok --resume abc123def456 # Start normally (no continuation) grok ``` ### Interactive Commands ```bash # List recent conversations /history list [limit] # Search conversations by content /history search "debugging python" # Show usage statistics /history stats # Delete a conversation /history delete abc123def456 # Continue from last conversation /continue # Continue from specific conversation /continue abc123def456 # Get help /history help ``` ## API Reference ### HistoryManager ```typescript class HistoryManager { // Initialize history system async initialize(): Promise<void> // Save conversation async saveConversation(session: Session, messages: ChatMessage[]): Promise<void> // Load conversation async loadConversation(sessionId: string): Promise<HistorySession | null> // Get last conversation async getLastConversation(): Promise<ConversationHistory | null> // List recent conversations async getRecentConversations(limit: number = 10): Promise<ConversationHistory[]> // Search conversations async searchConversations(query: string, limit: number = 10): Promise<ConversationHistory[]> // Delete conversation async deleteConversation(sessionId: string): Promise<boolean> // Get statistics async getStatistics(): Promise<HistoryStatistics> // Cleanup old conversations async cleanupOldConversations(maxAge: number = 30): Promise<number> // Export conversations async exportConversations(outputPath: string): Promise<void> } ``` ### SessionManager Extensions ```typescript class SessionManager { // Continue from last conversation async continueLastConversation(): Promise<Session | null> // Continue from specific session async continueFromSession(sessionId: string): Promise<Session | null> // Save to history async saveToHistory(): Promise<void> // Search history async searchHistory(query: string, limit: number = 10): Promise<ConversationHistory[]> // Get statistics async getHistoryStatistics(): Promise<HistoryStatistics> // Delete from history async deleteFromHistory(sessionId: string): Promise<boolean> } ``` ### Data Types ```typescript interface ConversationHistory { id: string; startTime: Date; lastUpdateTime: Date; cwd: string; messageCount: number; firstMessage: string; lastMessage: string; filePath: string; } interface HistorySession { session: Session; messages: ChatMessage[]; metadata: { totalMessages: number; startTime: Date; lastUpdateTime: Date; cwd: string; }; } interface HistoryStatistics { totalConversations: number; totalMessages: number; oldestConversation: Date | null; newestConversation: Date | null; avgMessagesPerConversation: number; } ``` ## Implementation Details ### Automatic Saving Conversations are automatically saved: - After each message is added - When session is created - When session ends gracefully ### Session Continuation When continuing a conversation: 1. Load previous session data 2. Create new session with copied history 3. Add system message indicating continuation 4. Preserve working directory context ### Search Implementation Search functionality: - Case-insensitive text matching - Searches first and last messages - Returns results sorted by relevance - Configurable result limits ### Performance Considerations - Lazy loading of conversation data - Indexed metadata for fast searches - Configurable cleanup of old conversations - Efficient JSON storage format ## Configuration ### History Settings ```json { "history": { "enabled": true, "maxConversations": 1000, "maxAge": 90, "autoCleanup": true, "searchLimit": 50 } } ``` ### Storage Location Default: `~/.grok-cli/history/` Override with environment variable: ```bash export GROK_HISTORY_DIR="/custom/path" ``` ## Maintenance ### Cleanup Old Conversations ```typescript // Delete conversations older than 30 days const deleted = await historyManager.cleanupOldConversations(30); ``` ### Export Conversations ```typescript // Export all conversations to JSON await historyManager.exportConversations('./backup.json'); ``` ### Repair Index If the conversation index becomes corrupted: ```bash # Manual repair (scan directory and rebuild index) node -e " const { HistoryManager } = require('./dist/core/history'); const hm = new HistoryManager(); await hm.rebuildIndex(); " ``` ## Privacy and Security ### Data Privacy - All data stored locally - No cloud synchronization by default - User controls retention policies - Configurable cleanup schedules ### Security Considerations - File permissions restricted to user - No sensitive data logging by default - API keys stored separately from history - Conversation data not transmitted externally ## Troubleshooting ### Common Issues **History not saving** - Check write permissions on `~/.grok-cli/` - Verify disk space availability - Check for file system errors **Search not working** - Rebuild conversation index - Check for corrupted JSON files - Verify search query syntax **Continuation failing** - Verify session ID exists - Check conversation file integrity - Review error logs ### Debug Commands ```bash # Check history status /history stats # Verify specific conversation /history list 1 # Test continuation /continue --dry-run ``` ## Future Enhancements ### Planned Features - Cloud synchronization options - Conversation sharing and export - Advanced search with filters - Conversation branching and merging - Automated conversation summarization - Integration with external note systems ### Performance Improvements - Database backend option - Full-text search indexing - Conversation compression - Streaming conversation loading