Commit Graph
9 Commits
Author SHA1 Message Date
can1357 c6b83c1d96 perf(coding-agent): accelerated session selector with tiered search
- Implemented tiered search strategy using synchronous literal matching for immediate results and debounced asynchronous fuzzy matching to prevent input blocking.
- Cached session search data and introduced an indexed `FuzzyText` structure to reduce redundant string processing.
- Added comprehensive test suite verifying search convergence, stale task orphaning, and selection stability.
- Enhanced `tui` fuzzy matching utilities to support prebuilt search indexes for improved multi-match performance.
2026-07-11 15:52:35 +02:00
can1357 9a49549d62 Merge PR #3828: perf(tui): memoize fuzzy search index + prepare query once per filter (@oldschoola)
# Conflicts:
#	packages/tui/test/fuzzy.test.ts
2026-07-01 21:44:15 +02:00
roboomp 31794df6dc fix(tui): preserved unicode fuzzy search terms
- Preserved Unicode letters, marks, and numbers during fuzzy-search normalization so CJK and other non-ASCII queries no longer collapse to match-all searches.
- Added regression coverage for Chinese fuzzy filtering against unrelated ASCII items.

Fixes #4114
2026-07-01 07:15:03 +00:00
oldschoola 56b2753b64 perf(tui): memoize fuzzy search index and prepare query once per filter
Selectors (model, settings, file/tree, slash, OAuth) re-filter the same
stable candidate list on every keystroke. fuzzyRank was re-normalizing the
query once per candidate (~400x/keystroke) and rebuilding each candidate's
search index from scratch on every keystroke.

- prepareQuery/fuzzyMatchCore: normalize + split the query a single time in
  fuzzyRank instead of per candidate. Pure win on warm and cold paths.
- indexCache: memoize the per-text SearchIndex across keystrokes, with
  conservative admission -- texts >4 KiB bypass the Map entirely (no memory
  bloat from pasted prompts/transcripts searched via the message selector),
  and admission stops at the cap instead of evicting (a stream of unique
  one-off texts can't churn the map).

Incremental typing over a 400-item list drops ~58% (6.7ms -> 2.8ms for an
8-keystroke session); first-keystroke (cold) latency is unchanged (~0.5ms),
as the query-prep savings offset the cache overhead. Match ranking is
byte-identical, enforced by a golden-checksum guard in the new benchmark and
contract tests.

Adds packages/tui/bench/fuzzy.bench.ts (deterministic corpus, cold-start
session measurement, ranking-drift guard) and fuzzy contract tests for cache
transparency and the empty-normalized-query callback behavior.
2026-06-29 12:55:09 -07:00
can1357 e74268d840 fix(coding-agent): filtered weak pure-fuzzy session matches from ranking
- Updated fuzzy-search indexing to track compact word starts and required phrase matches to start at word boundaries.
- Adjusted token scoring and compact/phrase matching rules so exact and boundary-aware matches now rank above noisy substring matches.
- Filtered session search results to drop weak pure-fuzzy matches unless they contained literal tokens, and updated ranking tests for the new behavior.
2026-06-12 06:31:40 +02:00
can1357 f29297da49 feat(tui): implemented relevance-based ranking for fuzzy search and settings matching
- Added fuzzy search preprocessing to normalize case, camelCase, and punctuation.
- Added token and phrase scoring for exact, prefix, substring, acronym, and compact hits.
- Added fuzzyRank to return {item, score}-ranked matches and delegated fuzzyFilter to it.
- Updated settings search tabs to sort by best score, keep original-order ties, and mute unmatched tabs.
2026-06-12 04:38:21 +02:00
can1357 779ca4872b style(deps): migrated from Prettier to Biome and updated formatting rules
- Removed Prettier configuration files (.prettierignore and .prettierrc) and migrated formatting to Biome.
- Updated Biome configuration from version 2.3.11 to 2.3.12 and changed arrowParentheses rule from 'always' to 'asNeeded'.
- Pinned @biomejs/biome dependency to exact version 2.3.12 in package.json and bun.lock.
- Applied consistent arrow function formatting across 489 files by removing unnecessary parentheses around single parameters.
- Removed blank lines after comment blocks and reorganized imports for consistency across the codebase.
2026-01-24 04:20:19 +01:00
can1357 8f044db8c6 feat(tui): added undo/redo functionality to editor with Ctrl+- and Ctrl+_
- Added undo/redo functionality to editor with Ctrl+- and Ctrl+_ keybindings.
- Added Alt+Delete and Alt+D keybindings for delete word forward functionality.
- Added configurable code block indentation to Markdown component.
- Improved fuzzy matching to handle alphanumeric character swaps.
- Normalized keybinding system to handle case-insensitive key IDs.
- Changed label edit shortcut from 'l' to 'Shift+L' in tree selector.
2026-01-21 04:48:08 +01:00
can1357 741ab06ed2 feat: port upstream improvements from pi-mono (f1b64b9d..6730b4fa)
TUI:
- Add fuzzy matching module (moved from coding-agent)
- Remove Kitty protocol query timeout (fixes shift+enter delays)
- Add bracketed paste check for key release/repeat detection
- Rendering optimizations (only re-render changed lines)
- Add backslash+enter newline fallback, getExpandedText()
- Refactor input.ts to use keybindings manager

Coding-agent:
- Add /skill:name slash commands with enableSkillCommands setting
- Add cwd to SessionInfo for session list display
- Improve tree selector with custom summarization instructions
- Add dequeue (Alt+Up) to restore all queued messages at once
- Add shutdown request handling for extensions
- Component invalidate() fixes for theme changes
2026-01-12 03:18:30 +01:00