Skip to content

feat: add @-triggered file path autocomplete to TUI input panel - #793

Merged
avoidwork merged 4 commits into
mainfrom
feat/tui-filepath-autocomplete
Aug 13, 2026
Merged

feat: add @-triggered file path autocomplete to TUI input panel#793
avoidwork merged 4 commits into
mainfrom
feat/tui-filepath-autocomplete

Conversation

@avoidwork

@avoidwork avoidwork commented Aug 13, 2026

Copy link
Copy Markdown
Owner

Description

Add @-triggered file path autocomplete to the TUI input panel, allowing users to type @ followed by a filename fragment and select from a ranked list of matching files via recursive directory scan, with keyboard navigation and path insertion.

Type of Change

  • Bugfix (non-breaking change which fixes an issue)
  • New feature (non-breaking change which adds functionality)
  • Breaking change (fix or feature that would cause existing functionality to not work as expected)
  • Documentation update
  • Refactor (no functional change)
  • Performance improvement
  • CI / build / tooling

Testing

  • Unit tests added/updated in tests/unit/tui.test.js for autocomplete state management
  • CI test check passes (SUCCESS)
  • CI lint check passes (SUCCESS)

Coverage

  • Line coverage maintained

Checklist

  • npm run lint passes
  • Tests pass with maintained line coverage
  • No forbidden patterns used
  • Conventional Commit style applied

Files Changed

  • src/tui/fileScanner.js — New: recursive filesystem scanner with .gitignore parsing, extension whitelist, symlink exclusion, 5000-entry cap
  • src/tui/fileCache.js — New: TTL-based file list cache using tiny-lru
  • src/tui/fileFilter.js — New: case-insensitive fuzzy matching with prefix scoring
  • src/tui/autocompletePanel.js — New: scrollable overlay component with arrow key navigation and selection highlighting
  • src/tui/inputPanel.js — Modified: @ character detection, cursor position tracking, autocomplete mode integration
  • src/tui/app.js — Modified: autocomplete state management, keyboard navigation (up/down/enter/escape), path insertion
  • src/config/schemas/tui.js — Modified: added fileCacheTtl, maxAutocompleteEntries, autocompleteMaxViewport, autocompleteBlacklist config options
  • tests/unit/tui.test.js — Modified: added test coverage for autocomplete features
  • openspec/specs/file-autocomplete/spec.md — New: full spec for file autocomplete capability
  • openspec/specs/tui-event-routing/spec.md — Modified: added escape key override for autocomplete overlay
  • openspec/specs/tui-interface/spec.md — Modified: added autocomplete overlay keyboard interaction requirements

Add proposal, design, specs, and tasks for @-triggered file path
autocomplete in the TUI input panel. Includes file-autocomplete spec,
delta specs for tui-interface and tui-event-routing, and a complete
task breakdown for implementation.
@avoidwork avoidwork self-assigned this Aug 13, 2026
Implement @-triggered file path autocomplete overlay in the TUI input
panel. Features include:

- FileScanner: recursive filesystem scanning with .gitignore parsing,
  extension whitelist, symlink exclusion, and 5000-entry cap
- FileCache: TTL-based caching via tiny-lru with configurable TTL
- FileFilter: case-insensitive fuzzy matching with prefix scoring
- AutocompletePanel: scrollable overlay with arrow key navigation,
  selection highlighting, and keyboard shortcuts
- InputPanel: @ character detection and cursor position tracking
- App integration: autocomplete state management, fuzzy filtering,
  keyboard navigation (up/down/enter/escape), and path insertion

Config options added to tui schema: fileCacheTtl,
maxAutocompleteEntries, autocompleteMaxViewport, autocompleteBlacklist.

Closes #792
@avoidwork avoidwork changed the title docs: add OpenSpec change for TUI file path autocomplete feat: add @-triggered file path autocomplete to TUI input panel Aug 13, 2026
@avoidwork
avoidwork merged commit 63bb281 into main Aug 13, 2026
2 checks passed
@avoidwork
avoidwork deleted the feat/tui-filepath-autocomplete branch August 13, 2026 14:23
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant