- 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
50 lines
2.1 KiB
Markdown
50 lines
2.1 KiB
Markdown
# 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`:
|
|
|
|
1. **Simplified slash command detection** (lines 105-121):
|
|
```typescript
|
|
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 }
|
|
}
|
|
```
|
|
|
|
2. **Added history navigation detection** (lines 1036-1067):
|
|
```typescript
|
|
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 |