Skip to content

feat(neo-tui): real port of 8 legacy senpi features (Round 12)#16

Merged
code-yeongyu merged 1 commit into
mainfrom
feat/neo-tui-real-port
May 20, 2026
Merged

feat(neo-tui): real port of 8 legacy senpi features (Round 12)#16
code-yeongyu merged 1 commit into
mainfrom
feat/neo-tui-real-port

Conversation

@code-yeongyu
Copy link
Copy Markdown
Owner

@code-yeongyu code-yeongyu commented May 20, 2026

Oracle round 12 BLOCKED on the "full Rust port" framing — too many legacy actions surfaced "not yet wired" notes instead of real behavior. This PR wires 8 highest-impact features:

  1. Ctrl+T (app.thinking.toggle): ChatViewOpts::thinking_visible drives render_assistant_message
  2. Ctrl+O (app.tools.expand): ChatViewOpts::tools_expanded drives render_tool_card
  3. Alt+S (neo.sidebar.toggle): new App.sidebar_visible field
  4. Alt+A (neo.toggle_animations): new App.animations_enabled field
  5. Alt+C (neo.compact): new Command::Compact + AppAction::CompactSession
  6. Model picker (neo.model.set:<id>): new provider_for_model_id heuristic + Command::SetModel end-to-end
  7. Ctrl+G (app.editor.external): suspend TUI → spawn $VISUAL/$EDITOR/vi → read back → restore TUI
  8. Alt+Up (app.message.dequeue): new ChatState.queued_messages tracked from QueueUpdate, pops most recent to buffer

Test count: 333 → 341. cargo clippy --all-targets -- -D warnings, cargo fmt --check, npm run check (898 files) all green.

ADVERTISED_BUT_UNIMPLEMENTED_ACTIONS shrunk by 5. Remaining ~29 entries cover session tree / branching / models management / tree filters / image paste — they require sub-overlays + JSONL session parsing, tracked as a separate feature pack.


Summary by cubic

Ports eight legacy senpi commands to real behavior in neo-tui, replacing “not yet wired” notes with working UI and RPCs. Shrinks the unimplemented-action list by 5; tests now 341 and checks pass.

  • New Features
    • Ctrl+T: toggle thinking blocks via ChatViewOpts.thinking_visible.
    • Ctrl+O: collapse/expand tool cards via ChatViewOpts.tools_expanded.
    • Alt+S: toggle sidebar via App.sidebar_visible (width-gated).
    • Alt+A: toggle animations via App.animations_enabled (freezes spinner and focus pulse).
    • Alt+C: fire Command::Compact to compact the session.
    • Model picker (neo.model.set:<id>): fire Command::SetModel; provider inferred by provider_for_model_id (claude→anthropic, gpt→openai, kimi→kimi-for-coding, glm→opencode-zen, deepseek→deepseek, gemini→google).
    • Ctrl+G: open external editor; suspend TUI, launch $VISUAL/$EDITOR/vi, read back into input, restore TUI.
    • Alt+Up: dequeue most recent queued message into input; track via ChatState.queued_messages from RpcEvent::QueueUpdate.

Written for commit 6ee9e08. Summary will update on new commits. Review in cubic

Oracle round 12 BLOCKED on the 'full Rust port' framing: too many
legacy actions surfaced 'not yet wired' notes instead of real
behavior. This round wires the highest-impact surface area:

1. Ctrl+T (`app.thinking.toggle`): chat::ChatViewOpts::thinking_visible
   now drives render_assistant_message. Hides both the summary line
   and the expanded body when false.

2. Ctrl+O (`app.tools.expand`): ChatViewOpts::tools_expanded now
   drives render_tool_card. Collapses tool body to one-line hint
   when false. Header rule still renders so the user can find
   the card.

3. Alt+S (`neo.sidebar.toggle`): new `sidebar_visible` field
   toggles the sidebar pane (gated by terminal width).

4. Alt+A (`neo.toggle_animations`): new `animations_enabled`
   field gates spinner-frame advancement + input focus-pulse.

5. Alt+C (`neo.compact`): new `Command::Compact` variant +
   `AppAction::CompactSession` fire backend compaction.

6. Model picker (`neo.model.set:<id>`): new
   `provider_for_model_id` heuristic + `AppAction::SetModel`
   variant fire `Command::SetModel` end-to-end.

7. Ctrl+G (`app.editor.external`): new
   `AppAction::ExternalEditorLaunch` +
   `TerminalEventOutcome::ExternalEditor` + `run_external_editor`
   helper. Suspends TUI, edits buffer in $VISUAL/$EDITOR/vi,
   reads back, restores TUI.

8. Alt+Up (`app.message.dequeue`): new
   `ChatState.queued_messages` field tracked from
   `RpcEvent::QueueUpdate` events. Pops most recent into input
   buffer on chord.

Test count: 333 -> 341 passing. `cargo fmt --check`,
`cargo clippy --all-targets -- -D warnings` (with one targeted
`struct_excessive_bools` allow on App documenting why), and
`npm run check` (898 files) all green.

ADVERTISED_BUT_UNIMPLEMENTED_ACTIONS shrunk by 5 entries.
Remaining ~29 entries cover the genuine follow-up surface (session
tree / branching / models management / tree filters / image paste)
which require sub-overlays + JSONL session parsing.
@code-yeongyu code-yeongyu merged commit 094031e into main May 20, 2026
3 checks passed
@code-yeongyu code-yeongyu deleted the feat/neo-tui-real-port branch May 20, 2026 01:46
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant