Repository navigation
[feature] Console: search workspace prompt history with Ctrl+R #325
Description
Problem and result
Up/Down history works, but finding an earlier instruction in a long workspace session requires stepping through entries. Aether already persists bounded workspace prompt history, so search can improve the existing feature without adding a database or model call.
Add an incremental Ctrl+R search over the history already loaded for this workspace.
Acceptance checks
- Search newest-first; typing updates the query, and repeated Ctrl+R moves to older matches. Display the query, selected result, and a clear no-match state.
- Accepting a match inserts it into the editable composer; it does not send it. Escape restores the exact pre-search draft and cursor. Empty-query behavior is documented and deterministic.
- Respect
AETHER_NO_HISTORY, the existing entry cap, and workspace scoping. Add no capture or persistence of shell commands, tool output, approval feedback, or other workspaces. Existing prompt history contains submitted prompt text; this feature does not claim automatic secret filtering. - Bound per-entry examination, total search work, and rendered match size; visibly identify skipped or clipped entries. Accepting a displayed match restores its complete stored prompt, rather than the clipped display text. Include oversized-entry fixtures.
- The composer must own input. Ctrl+R in PTY, password, approval, shell review, or an unsupported busy state retains that owner’s behavior. Non-TTY input stays unchanged.
- Fixtures cover duplicate entries, multiline/Unicode prompts, no matches, disabled history, cancellation, composer undo boundaries, and transitions to/from the slash picker. Search makes zero model or process calls.
Landing boundary
Build on history_store and the shared input ownership contract; do not add global terminal key interception. Integrate PR #309, then establish composer owner/Enter/Escape precedence before history and picker overlays land. Test opening, switching, accepting, and dismissing both. No cross-session full-text index or capture of historical tool output.
Evidence and planning
Package: Input and discovery. Priority: P2. Rough engineering estimate: 1–2 days, including focused fixtures; this is a planning estimate, not a measured benchmark.
Reviewed against v4.20.0 at 4f1717bc120917e1b04d0baa939855417ef866a4: src/core/history_store.ts, src/ui/input_line.ts, src/ui/keys.ts, src/commands/chat.ts.
Comparator: Claude Code interactive mode and Hermes CLI document reverse history search. This improves Aether’s existing workspace history rather than introducing a memory system.
Created from the LOOP-19 review of the README, all 23 open issues, four open PRs, and recent shipped work on 2026-10-09. These are proposed changes; the acceptance checks below have not been executed.
Activity
AetherAI3 commentedon Oct 9, 2026
Landed in PR #333 (squash commit
2afd833b0e0505e63befce72de59321fa08fc305).Evidence:
npm run buildandnpm run docs:checkpassed. All 49 scoped tests passed across history search/store, raw composer, busy queue/typeahead, input buffer, and slash picker; the final 16-test console/search run also passed after integration. Fixtures cover newest-first duplicates, Unicode and multiline prompts, no-match and disabled states, workspace isolation, skipped oversized entries, clipped display with full acceptance, exact Escape restoration, undo, picker transitions, and zero model calls while editing.GitHub Actions did not run its jobs: annotations report the repository account is locked due to a billing issue. The hosted build status was neutral. The test evidence above is from the local checkout.