Skip to content

Comments

feat(tui): add @-triggered fuzzy file picker in input#603

Merged
bug-ops merged 3 commits intomainfrom
feat/tui-file-picker
Feb 19, 2026
Merged

feat(tui): add @-triggered fuzzy file picker in input#603
bug-ops merged 3 commits intomainfrom
feat/tui-file-picker

Conversation

@bug-ops
Copy link
Owner

@bug-ops bug-ops commented Feb 19, 2026

Summary

  • Add interactive file picker popup to TUI input area triggered by @ in Insert mode
  • Fuzzy search matches project files by name, path, and extension using nucleo-matcher
  • Results update on each keystroke; Enter/Tab inserts relative path at cursor position

Implementation

  • FileIndex via ignore crate (.gitignore aware, hidden files excluded, 50k cap)
  • Cached index with 30s TTL, Arc-shared to avoid cloning on picker open
  • Reusable Matcher instance across keystrokes for zero per-keystroke allocation
  • Popup anchored above input area, max 10 visible items
  • Full key handling: Up/Down navigate, Enter/Tab accept, Esc dismiss, Backspace past @ dismisses

New files

  • crates/zeph-tui/src/file_picker.rs — FilePickerState, FileIndex, fuzzy matching
  • crates/zeph-tui/src/widgets/file_picker.rs — popup render widget

Test plan

  • 18 new tests (12 app-level key handling + 4 unit + 2 snapshots)
  • 1906 total workspace tests pass
  • cargo clippy --workspace -- -D warnings: clean
  • cargo +nightly fmt --check: clean

Closes #600

@github-actions github-actions bot added enhancement New feature or request rust dependencies size/XL and removed enhancement New feature or request labels Feb 19, 2026
@bug-ops bug-ops force-pushed the feat/tui-file-picker branch from 2a9c7a1 to 2479a6d Compare February 19, 2026 13:45
@github-actions github-actions bot added the enhancement New feature or request label Feb 19, 2026
@bug-ops bug-ops force-pushed the feat/tui-file-picker branch from 2479a6d to 2b5ab09 Compare February 19, 2026 13:53
Add interactive file picker popup to TUI input area. Typing @ in Insert
mode opens a fuzzy search overlay that matches project files by name,
path, and extension using nucleo-matcher. Results update on each
keystroke, with Enter/Tab inserting the relative path at cursor position.

Key implementation details:
- FileIndex via ignore crate (.gitignore aware, hidden files excluded)
- Cached file index with 30s TTL, 50k path cap
- Arc-shared index to avoid cloning on picker open
- Reusable Matcher instance across keystrokes
- Popup anchored above input area, max 10 visible items

Closes #600
@bug-ops bug-ops force-pushed the feat/tui-file-picker branch from 9eff27a to 0203045 Compare February 19, 2026 13:57
…DMEs

Document @-triggered fuzzy file picker: keybindings table, file index
behavior, fuzzy matching details. Update CHANGELOG and docs changelog
with #600 entry. Add file_picker module to zeph-tui README.
@github-actions github-actions bot added the documentation Improvements or additions to documentation label Feb 19, 2026
@bug-ops bug-ops enabled auto-merge (squash) February 19, 2026 14:06
@bug-ops bug-ops merged commit b1ff723 into main Feb 19, 2026
22 checks passed
@bug-ops bug-ops deleted the feat/tui-file-picker branch February 19, 2026 14:30
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

dependencies documentation Improvements or additions to documentation enhancement New feature or request rust size/XL

Projects

None yet

Development

Successfully merging this pull request may close these issues.

feat(tui): @-triggered fuzzy file picker in input

1 participant