Skip to content

feat: split out components from ChatView.tsx - #860

Merged
juliusmarminge merged 4 commits into
pingdotgg:mainfrom
Ymit24:feat/split-components-out-of-chatview-file
Mar 12, 2026
Merged

juliusmarminge merged 4 commits into
pingdotgg:mainfrom
Ymit24:feat/split-components-out-of-chatview-file

fix: formatter

24b93b3
Select commit
Loading
Failed to load commit list.
MacroscopeApp / Macroscope - Correctness Check completed Mar 12, 2026 in 5m 58s

1 issue identified (33 code objects reviewed).

• Merge Base: 7d11533
• Head: 24b93b3

Details

✅ File Path Comments Posted
✅ apps/web/src/components/chat/ChatHeader.tsx 0
✅ apps/web/src/components/ChatView.logic.ts 0
✅ apps/web/src/components/chat/DiffStatLabel.tsx 0
✅ apps/web/src/components/chat/OpenInPicker.tsx 0
✅ apps/web/src/components/chat/VscodeEntryIcon.tsx 0
✅ apps/web/src/components/chat/CodexTraitsPicker.tsx 0
❌ apps/web/src/components/chat/MessageCopyButton.tsx 1
✅ apps/web/src/components/chat/ChangedFilesTree.tsx 0
✅ apps/web/src/components/chat/ComposerCommandMenu.tsx 0
✅ apps/web/src/components/chat/MessagesTimeline.tsx 0
✅ apps/web/src/components/chat/ProposedPlanCard.tsx 0
✅ apps/web/src/components/chat/ExpandedImagePreview.tsx 0
✅ apps/web/src/components/chat/ProviderHealthBanner.tsx 0
✅ apps/web/src/components/chat/ProviderModelPicker.tsx 0
✅ apps/web/src/components/chat/ComposerPlanFollowUpBanner.tsx 0
✅ apps/web/src/components/chat/ComposerPendingApprovalPanel.tsx 0
✅ apps/web/src/components/chat/CompactComposerControlsMenu.tsx 0
✅ apps/web/src/components/chat/ComposerPendingApprovalActions.tsx 0
✅ apps/web/src/components/chat/ComposerPendingUserInputPanel.tsx 0
✅ apps/web/src/components/ChatView.tsx 0

Filtered Issues Details

apps/web/src/components/chat/MessageCopyButton.tsx
  • line 11: The setTimeout at line 11 is not cleaned up when the component unmounts. If the user navigates away or the message is removed before 2 seconds elapse, React will warn about setting state on an unmounted component. The equivalent code in ChatMarkdown.tsx stores the timer ref and clears it in a useEffect cleanup. [ Failed validation ]
apps/web/src/components/chat/ProviderModelPicker.tsx
  • line 28: The type guard isAvailableProviderOption asserts the return type narrows value to ProviderKind, but the runtime check only excludes "claudeCode" via option.value !== "claudeCode". Looking at ProviderPickerKind = ProviderKind | "claudeCode" | "cursor", the guard should also exclude "cursor" to properly narrow to ProviderKind. If cursor ever becomes available (available: true), the function would return true but the type annotation would incorrectly claim option.value is ProviderKind when it's actually "cursor", causing type unsoundness. [ Out of scope (triage) ]