sync: port upstream theme library, Done/Woke, and runtime mode (#5226–#5440) - #218
Conversation
c374461 to
2215431
Compare
|
Important Review skippedAuto reviews are disabled on base/target branches other than the default branch. Please check the settings in the CodeRabbit UI or the ⚙️ Run configurationConfiguration used: defaults Review profile: CHILL Plan: Pro Plus Run ID: You can disable this status message by setting the Use the checkbox below for a quick retry:
Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out. Comment |
2215431 to
02d5140
Compare
3c689e4 to
2215431
Compare
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: 2215431206
ℹ️ About Codex in GitHub
Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you
- Open a pull request for review
- Mark a draft as ready
- Comment "@codex review".
If Codex has suggestions, it will comment; otherwise it will react with 👍.
Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".
| return true; | ||
| } | ||
|
|
||
| if (!setTheme(savedTheme.id)) { |
There was a problem hiding this comment.
Activate newly created themes only for their appearance
Every newly created theme contains only activeAppearance, but this calls setTheme(savedTheme.id), which clears the existing light/dark mix and installs the single-mode theme as the base. When creating a dark theme while following a light system appearance (or vice versa), the UI is forced into the theme's sole appearance and the user's counterpart theme selection is lost; use the same appearance-half activation path already used by imports and theme cards, ideally through shared logic.
AGENTS.md reference: AGENTS.md:L66-L66
Useful? React with 👍 / 👎.
| () => [ | ||
| ...(theme !== "system" ? ["Theme"] : []), | ||
| ...(!followSystem ? ["Follow system"] : []), | ||
| ...(themeHalves !== null ? ["Theme mix"] : []), |
There was a problem hiding this comment.
Recompute restore state when the theme mix changes
When the user changes only a light/dark theme half while the base theme and appearance mode stay unchanged, this value changes but themeHalves is absent from the useMemo dependency list. Consequently changedSettingLabels remains stale, so the Restore defaults action can stay unavailable after adding a mix or continue claiming a mix needs resetting after it was removed.
Useful? React with 👍 / 👎.
| if (oversized) { | ||
| setError(oversized); | ||
| return; |
There was a problem hiding this comment.
Clear stale import contents when a file cannot be read
After a valid file has populated the editor, selecting an oversized file only replaces the error and leaves the previous json and filename intact, so the Add theme button remains enabled and imports the earlier theme rather than the newly selected file. This branch also does not advance importRequestRef, allowing an older pending read to finish afterward and erase the oversized-file error; invalidate the request and clear the stale editor state before returning.
Useful? React with 👍 / 👎.
| const handleHexChange = (nextValue: string) => { | ||
| setHexDraft(nextValue); | ||
| if (!/^#[0-9a-f]{6}$/i.test(nextValue)) return; | ||
| const nextHsv = themeHexToHsv(nextValue); | ||
| setHsv(nextHsv); | ||
| setRgbDraft(themeRgbValue(nextValue)); | ||
| onChange(nextValue.toLowerCase()); |
There was a problem hiding this comment.
Preserve alpha when editing the picker’s hex value
For imported or advanced themes whose current role uses #RGBA or #RRGGBBAA, the picker deliberately extracts alphaSuffix, but this hex-input path commits only the new six-digit RGB value. Typing any valid value into the picker therefore silently makes that role fully opaque, unlike the hue, saturation, brightness, and RGB controls, which preserve the existing alpha suffix.
Useful? React with 👍 / 👎.
| if (pendingTimelineAnchorRef.current === messageId) { | ||
| pendingTimelineAnchorRef.current = null; | ||
| } | ||
| if (anchorScrollRestoreFrameRef.current !== null) { | ||
| activeTimelineAnchorIndexRef.current = anchorIndex; |
There was a problem hiding this comment.
Ignore anchor callbacks from superseded messages
If the anchored-end measurement callback for the previous completed turn arrives after the user has already sent the next message, the scroll mode is still anchoring-new-turn but pendingTimelineAnchorRef.current names the new message. This code proceeds even when the IDs differ, replacing the new anchor index and scrolling back to the old row; retain the prior mismatch guard so only the pending or currently positioned message can update the anchor.
Useful? React with 👍 / 👎.
Co-authored-by: Claude Fable 5 <noreply@anthropic.com> (cherry picked from commit 48aa875)
Co-authored-by: Claude Opus 5 (1M context) <noreply@anthropic.com> (cherry picked from commit 95305c3)
…pingdotgg#5563) Co-authored-by: Claude Fable 5 <noreply@anthropic.com> (cherry picked from commit b98a0f0)
… page (pingdotgg#4511) (cherry picked from commit 220efad)
Co-authored-by: Claude Opus 5 (1M context) <noreply@anthropic.com> (cherry picked from commit 3ffe84f)
Co-authored-by: Claude Fable 5 <noreply@anthropic.com> Co-authored-by: Julius Marminge <julius0216@outlook.com> Co-authored-by: maria-rcks <maria@kuuro.net> Co-authored-by: Julius Marminge <jmarminge@gmail.com>
…g#5579) Co-authored-by: Claude Fable 5 <noreply@anthropic.com>
Co-authored-by: Claude Fable 5 <noreply@anthropic.com>
Co-authored-by: Claude Fable 5 <noreply@anthropic.com>
…te notice (pingdotgg#5595) Co-authored-by: Claude Fable 5 <noreply@anthropic.com>
Co-authored-by: codex <codex@users.noreply.github.com>
…otgg#5593) Co-authored-by: Claude Opus 5 (1M context) <noreply@anthropic.com>
Co-authored-by: Claude Fable 5 <noreply@anthropic.com>
3b3c449 to
cd88dd2
Compare
2215431 to
f15d948
Compare
L4/7 of the 2026-08-08 upstream sync stack. Stacked on L3 (#217).
What lands
--shareinstructions (fix(dev): agents get --share right on the first try pingdotgg/t3code#5586) with fork AGENTS.md preservedFork deviations preserved
--sharedocsVerification
vp checkandvp run typecheckpass after restack onto current L3.Stacked below L5. Review bottom-up after L1–L3.