feat(web): tool call panel — desktop right sidebar, mobile bottom sheet #147
No reviewers
Labels
No milestone
No project
No assignees
1 participant
Notifications
Due date
No due date set.
Dependencies
No dependencies set.
Reference
Cloonar/coding-lab!147
Loading…
Add table
Add a link
Reference in a new issue
No description provided.
Delete branch "afk/145"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Tool-call detail moves out of the chat column into a dedicated panel. Chips and group summaries become buttons that open it; nothing expands inline anymore. Implements every settled decision in the issue.
What's in here
Containers
clamp(320px, 30vw, 480px), complementary region (plain<aside>, not modal). The page cap widens by exactly the sidebar width so the chat column keeps 760px where the viewport allows and squeezes (flex + min-width 0) where it doesn't; closed, the layout is byte-identical to before.role="dialog" aria-modal, grabber bar, 82dvh cap, content scrolls inside.Navigation
Liveness
messages()store; identity by immutable seq (the decision-12 stable-key trick), so SSE refetches preserve panel and page state — new tools append to an open list, statuses flip, an open detail's output grows in place. The panel never opens or retargets itself; it resets with the stream on route navigation/transcript rotation.Dismissal
defaultPreventedso the rename input / composer autocomplete consume Esc first), and drag-down:lib/sheetGesture.tsis a vertical, dismiss-only transposition of #140's drawer state machine, importing its tuning constants — inner scroller wins unless scrollTop 0, editables excluded, axis dominance, flick-or-position commit, touchcancel resets. The sheet stops touch propagation so the app-shell drawer gesture can't claim drags starting on the modal.Chat side
ToolChip/ToolGroupVieware now buttons wearing their old classes (visuals preserved), with a subtle accentselectedstyle on the line whose content the panel shows, cleared on close. The pending-dialog card is untouched.Verification
tsc --noEmit,eslint src,prettier --check, and the productionnpm run buildall clean.Out of scope (follow-up #146): rich view kinds (diff/command/write), the
ToolInfo.viewunion, raised detail truncation limit.Closes #145
🤖 Generated with Claude Code
https://claude.ai/code/session_01FD7GzR4PjrjKmCqQ1WiFt8