feat: port multi-provider UX improvements from zortos#14
Conversation
…pingdotgg#1096) Co-authored-by: Julius Marminge <julius0216@outlook.com>
# Conflicts: # apps/web/src/components/ui/sidebar.tsx
- Health banner shows selected provider status instead of hardcoding codex - New threads preserve current provider/model selection - Previous tool calls stay visible while composing new messages - Plan mode gets amber visual distinction (border, badge, send button)
|
No actionable comments were generated in the recent review. 🎉 ℹ️ Recent review info⚙️ Run configurationConfiguration used: defaults Review profile: CHILL Plan: Pro Run ID: 📒 Files selected for processing (1)
📝 WalkthroughWalkthroughAdds GitHub issue templates and a labels sync workflow, tightens Node engine bounds and adds a node:sqlite runtime compatibility check, and implements provider/model seeding plus several Chat UI changes (work-log derivation, plan-mode visuals, scroll-to-bottom UI). Changes
Sequence Diagram(s)sequenceDiagram
autonumber
actor User
participant UI as "Chat UI"
participant Hook as "useHandleNewThread"
participant DraftStore as "Composer Draft Store"
participant ThreadSvc as "Thread Creation / Router"
User->>UI: click "New Thread" (provider?/model?)
UI->>Hook: handleNewThread({ provider?, model? })
Hook->>DraftStore: read draftsByThreadId, activeDraft
alt explicit provider/model provided
Hook->>DraftStore: setDraftProvider(...), setDraftModel(...)
else provider/model from active thread or latest draft
Hook->>DraftStore: setDraftProvider(...), setDraftModel(...)
end
Hook->>ThreadSvc: create new thread + navigate
ThreadSvc->>UI: render new thread (composer seeded)
Estimated code review effort🎯 3 (Moderate) | ⏱️ ~25 minutes Possibly related PRs
Poem
🚥 Pre-merge checks | ✅ 2 | ❌ 1❌ Failed checks (1 warning)
✅ Passed checks (2 passed)
✏️ Tip: You can configure your own custom pre-merge checks in the settings. ✨ Finishing Touches
🧪 Generate unit tests (beta)
📝 Coding Plan
Comment |
There was a problem hiding this comment.
Actionable comments posted: 3
🤖 Prompt for all review comments with AI agents
Verify each finding against the current code and only fix it if needed.
Inline comments:
In `@apps/server/src/persistence/NodeSqliteClient.ts`:
- Around line 64-70: The runtime check in NodeSqliteClient.ts uses a loose
condition for Node 24; update the supported calculation used by the supported
constant (and any related logic around Effect.die) so it requires (major === 22
&& minor >= 16) || (major === 23 && minor >= 11) || (major === 24 && minor >=
10) || major >= 25, and change the error string passed to Effect.die (which
references process.versions.node) to read ">=22.16, >=23.11, or >=24.10" so the
guard and the message match the declared engines.node policy.
In `@apps/web/src/components/ChatView.tsx`:
- Line 265: The scroll-pill state (showScrollToBottom) can remain true after
programmatic viewport changes; update all programmatic scroll paths to call
setShowScrollToBottom(false) immediately after performing the programmatic jump
(e.g., in your thread-switch handler, any auto-scroll/auto-scroll-completion
callback, and any function that calls scrollTo/scrollIntoView or forces
stick-to-bottom) so the pill is cleared even when no scroll event fires; ensure
you place the setShowScrollToBottom(false) call alongside the existing
programmatic-scroll logic rather than relying on onScroll handlers.
- Around line 3528-3531: The ComposerPendingUserInputPanel is being given
respondingRequestIds but the responder state updated by
thread.user-input.respond is respondingUserInputRequestIds, so the panel never
sees its own submission state; update the JSX for ComposerPendingUserInputPanel
to pass the correct prop (e.g.
respondingUserInputRequestIds={respondingUserInputRequestIds}) or replace
respondingRequestIds with respondingUserInputRequestIds so the component
receives the in-flight user-input IDs and can render loading/disabled UI in sync
with the footer.
ℹ️ Review info
⚙️ Run configuration
Configuration used: defaults
Review profile: CHILL
Plan: Pro
Run ID: ba70fd7e-5e26-4488-950a-2173e773db6f
📒 Files selected for processing (13)
.github/ISSUE_TEMPLATE/bug_report.yml.github/ISSUE_TEMPLATE/feature_request.yml.github/workflows/issue-labels.yml.gitignoreapps/server/package.jsonapps/server/src/persistence/NodeSqliteClient.tsapps/web/src/components/ChatView.logic.tsapps/web/src/components/ChatView.tsxapps/web/src/components/ProjectScriptsControl.tsxapps/web/src/components/Sidebar.logic.tsapps/web/src/components/ui/sidebar.tsxapps/web/src/hooks/useHandleNewThread.tsapps/web/src/index.css
- Align node:sqlite compat guard with engines.node policy (>=24.10) - Clear scroll-to-bottom pill on programmatic scroll jumps - Pass respondingUserInputRequestIds to pending user input panel
Summary
Ports high-value, provider-agnostic improvements from zortos293/t3code-copilot (commits since our last port in #10):
resolveProviderHealthBannerProvider()helper.deriveVisibleThreadWorkLogEntries().--ring-planCSS token, amber focus border, "PLAN" badge pill, amber send button, and amber-tinted plan/chat toggle.Test plan
Summary by CodeRabbit
New Features
UI/UX Improvements
Chores