feat: split out components from ChatView.tsx - #860
Merged
juliusmarminge merged 4 commits intoMar 12, 2026
Merged
juliusmarminge merged 4 commits into
juliusmarminge merged 4 commits into
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
setTimeoutat 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 inChatMarkdown.tsxstores the timer ref and clears it in auseEffectcleanup. [ Failed validation ]
apps/web/src/components/chat/ProviderModelPicker.tsx
- line 28: The type guard
isAvailableProviderOptionasserts the return type narrowsvaluetoProviderKind, but the runtime check only excludes"claudeCode"viaoption.value !== "claudeCode". Looking atProviderPickerKind = ProviderKind | "claudeCode" | "cursor", the guard should also exclude"cursor"to properly narrow toProviderKind. Ifcursorever becomes available (available: true), the function would returntruebut the type annotation would incorrectly claimoption.valueisProviderKindwhen it's actually"cursor", causing type unsoundness. [ Out of scope (triage) ]
Loading