Skip to content

feat(tui): add pinned plan drawer for persistent plan visibility#384

Merged
CSRessel merged 2 commits intomainfrom
pinned-plan-drawer
Mar 17, 2026
Merged

feat(tui): add pinned plan drawer for persistent plan visibility#384
CSRessel merged 2 commits intomainfrom
pinned-plan-drawer

Conversation

@CSRessel
Copy link
Copy Markdown
Collaborator

@CSRessel CSRessel commented Mar 16, 2026

Summary

🤖 Generated with Nori

  • Add optional pinned_plan_drawer config field that renders plan updates in a fixed viewport drawer between the active cell and bottom pane, instead of appending them as scrollable history cells
  • Extract render_plan_lines() shared function from PlanUpdateCell so both the history cell and the new PinnedPlanDrawer widget use identical rendering
  • Wire config through TOML persistence, /config menu toggle, and re-propagation across /new, /fork, agent switch, and loop reset

Test Plan

  • Enable pinned_plan_drawer = true in ~/.nori/cli/config.toml and verify plan updates appear in a fixed drawer above the composer
  • Disable the setting and verify plan updates appear in scrollback history as before
  • Toggle via /config menu mid-session and verify behavior switches correctly
  • Use /new and verify the setting persists across session resets
  • Run cargo test -p nori-tui -p codex-acp (all 1003+ tests pass)

Share Nori with your team: https://www.npmjs.com/package/nori-skillsets

When enabled via `[tui] pinned_plan_drawer = true`, plan updates render
in a fixed viewport drawer between the active cell and the bottom pane
instead of scrolling away as history cells. The drawer updates in place
on each PlanUpdate event, keeping the latest plan always visible.

- Add `pinned_plan_drawer` config field (default: false) with TOML
  persistence and /config menu toggle
- Extract `render_plan_lines()` shared function from PlanUpdateCell
  for reuse by both history cells and the new PinnedPlanDrawer widget
- Modify `on_plan_update()` to route to drawer or history based on config
- Re-propagate setting across /new, /fork, agent switch, and loop reset
🤖 Generated with [Nori](https://usenori.ai)

Co-Authored-By: Nori <contact@tilework.tech>
@CSRessel CSRessel changed the base branch from dev to main March 16, 2026 22:57
…ersation

Previously, toggling the pinned plan drawer on mid-conversation showed
nothing because plan updates received while the drawer was disabled were
only routed to history cells. Now `pinned_plan` always tracks the latest
plan update regardless of drawer state, and rendering is gated on the
`pinned_plan_drawer` boolean. Re-enabling the drawer after disabling it
also preserves the last plan.
🤖 Generated with [Nori](https://usenori.ai)

Co-Authored-By: Nori <contact@tilework.tech>
@CSRessel CSRessel merged commit f5a102a into main Mar 17, 2026
3 checks passed
@CSRessel CSRessel deleted the pinned-plan-drawer branch March 17, 2026 11:11
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