Skip to content

feat(cards): left accent bar on done assistant replies#126

Merged
esengine merged 2 commits intomainfrom
feat/122-assistant-bg
May 2, 2026
Merged

feat(cards): left accent bar on done assistant replies#126
esengine merged 2 commits intomainfrom
feat/122-assistant-bg

Conversation

@esengine
Copy link
Copy Markdown
Owner

@esengine esengine commented May 2, 2026

Refs #122 — partial. The bg-highlight half; sidebar tracked separately.

Long Markdown answers had no visual indicator distinguishing them from tool/reasoning cards in scrollback. This adds a left accent bar (brand tone) to the done-state assistant Markdown, mirroring the live-streaming bar treatment.

Picked borderLeft over backgroundColor: Ink's doesn't accept backgroundColor (only does, and Text's bg only colors the actual text cells, not the row width). A left bar works on light + dark themes equally.

Bundled a chore commit that trims comment essays added in the #120 layout migration — those violated CLAUDE.md (multi-paragraph headers, defensive justification, incident narrative).

Verification

  • typecheck / lint / 1800 tests / build all green

esengine added 2 commits May 2, 2026 04:46
Add a brand-toned borderLeft to the done-state Markdown so long
replies are visually distinguishable from tool/reasoning cards in
scrollback. Ink's <Box> doesn't accept backgroundColor; a left bar
is the terminal-native equivalent and works on light + dark themes.
Comments added in the #120 migration violated CLAUDE.md: multi-paragraph
module headers, defensive justification, incident narrative ("lamyc-video
trigger"). Reduced to single lines where the why is genuinely non-obvious.
@esengine esengine merged commit 4f6e99e into main May 2, 2026
1 check passed
@esengine esengine deleted the feat/122-assistant-bg branch May 2, 2026 12:35
esengine added a commit that referenced this pull request May 2, 2026
* feat(tui): right-side context panel with Ctrl+\ toggle (#122)

Sidebar shows current plan steps, running tools, and last-turn
usage as a read-only HUD. Defaults open on cols ≥ 120, off below;
persisted in ~/.reasonix/config.json.sidebarOpen. Below 88 cols
total the panel hides regardless of preference.

Carries the StreamingCard hook-order fix from #126.

* fix(sidebar): hide entirely when no active plan

Empty sidebar default-on was visual noise — 28 cols of blank panel
on every fresh session. Now the panel returns null unless an active
plan exists. Drop the Usage section: same data already lives in the
inline UsageCard.

* fix(sidebar): hide on rejected plans (require actual progress)

submit_plan creates the plan card with all steps "queued" before
PlanConfirm even pops; cancelling the modal leaves the card behind
unchanged. Sidebar was treating "variant=active" as enough and
stayed mounted after rejection. Now also require at least one step
to have started — distinguishes pending-approval / cancelled
("all queued, forever") from running / partially-done plans.

* refactor(sidebar): divider uses borderTop instead of hardcoded char repeat

The divider rendered "─".repeat(SIDEBAR_WIDTH - 2), which would break
the moment the panel width or padding changed. An empty box with
borderTop lets Yoga compute the line width from the parent — adapts
automatically.

* fix(plan): drop the active plan card on PlanConfirm cancel

submit_plan creates the plan card up-front (variant=active, all
steps queued) before the user picks approve / cancel. On cancel
nothing was clearing the card, so the existing activePlanCard
selector + the new sidebar both kept it visible as if the plan was
running.

New plan.drop reducer action flips the latest active plan's variant
to "replay" (already-existing archive variant). Sidebar + bottom
PlanCard now honor cancel correctly. Approved-but-not-yet-started
plans render as before — variant is still "active", just with all
steps queued.
esengine added a commit that referenced this pull request May 3, 2026
PR #126 (0.23.0) gave done assistant Markdown a brand-toned
borderLeft per lamyc's RFC #20 readability ask. The #136 card
redesign extracted CardBox but flipped the done-state color to
FG.faint, defeating the contrast that lets long replies stand
out in scrollback. Now matches the streaming-state color so the
bar reads continuously across the streaming → done flip.
Aborted state stays on FG.faint (correctly de-emphasized).
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