- Complete architectural overhaul of useUnifiedCompletion hook - Unified state management: 8 separate states → single CompletionState interface - Simplified core logic: getWordAtCursor 194 lines → 42 lines (78% reduction) - Fixed infinite React update loops with ref-based input tracking - Smart triggering mechanism replacing aggressive auto-completion - Integrated @agent and @file mention system with system reminders - Added comprehensive agent loading and mention processing - Enhanced Tab/Arrow/Enter key handling with clean event management - Maintained 100% functional compatibility across all completion types Key improvements: • File path completion (relative, absolute, ~expansion, @references) • Slash command completion (/help, /model, etc.) • Agent completion (@agent-xxx with intelligent descriptions) • System command completion (PATH scanning with fallback) • Terminal-style Tab cycling, Enter confirmation, Escape cancellation • Preview mode with boundary calculation • History navigation compatibility • Empty directory handling with user feedback Architecture: Event-driven @mention detection → system reminder injection → LLM tool usage Performance: Eliminated 7-layer nested conditionals, reduced state synchronization issues Reliability: Fixed maximum update depth exceeded warnings, stable state management
2.1 KiB
Slash Command vs Path Completion Fix Summary
Problems Fixed
1. Wrong Trigger Context
Issue: ./ and src/ were incorrectly triggering slash command panel instead of path completion.
Cause: The logic was checking if the path started at position 0, which was true for ./ (since . is not a space).
Fix: Changed to only treat a single / at the very beginning of input as a slash command. ALL other cases (./, src/, ../, /usr/, etc.) are now treated as file paths.
2. History Navigation Interruption
Issue: When using up/down arrows to navigate command history, if the recalled command contained /model or similar, it would trigger the slash command panel and interrupt navigation.
Cause: No detection of history navigation vs. normal typing.
Fix: Added history navigation detection by checking for large input changes (>5 chars). When detected, suggestions are cleared and auto-trigger is suppressed.
Implementation Details
Key Changes in useUnifiedCompletion.ts:
- Simplified slash command detection (lines 105-121):
if (lastChar === '/') {
// ONLY treat single / at the very beginning as slash command
if (input === '/') {
return { type: 'command', prefix: '', startPos: 0, endPos: 1 }
}
// ALL other cases are file paths
const fullPath = input.slice(pathStart, input.length)
return { type: 'file', prefix: fullPath, startPos: pathStart, endPos: input.length }
}
- Added history navigation detection (lines 1036-1067):
const isHistoryNavigation = Math.abs(input.length - lastInput.current.length) > 5 &&
input !== lastInput.current
if (isHistoryNavigation) {
// Clear suggestions and don't trigger new ones
return
}
Behavior After Fix
✅ / (empty input) → Shows slash commands
✅ ./ → Shows current directory contents
✅ src/ → Shows src directory contents
✅ ../ → Shows parent directory contents
✅ History navigation → No interruption from auto-complete
✅ /model (from history) → No auto-trigger, smooth navigation