Skip to content

sync: port upstream theme library, Done/Woke, and runtime mode (#5226–#5440) - #218

Merged
cursor[bot] merged 16 commits into
mainfrom
codex/sync-20260808-l4-themes-runtime-a13c
Aug 8, 2026
Merged

sync: port upstream theme library, Done/Woke, and runtime mode (#5226–#5440)#218
cursor[bot] merged 16 commits into
mainfrom
codex/sync-20260808-l4-themes-runtime-a13c

Conversation

@aaditagrawal

Copy link
Copy Markdown
Owner

L4/7 of the 2026-08-08 upstream sync stack. Stacked on L3 (#217).

What lands

Fork deviations preserved

  • ChatView rate-limit panel retained through theme/timeline ChatView edits
  • Fork AGENTS.md policy kept when adapting --share docs

Verification

vp check and vp run typecheck pass after restack onto current L3.

Stacked below L5. Review bottom-up after L1–L3.

Open in WebOpen in Cursor

@cursor
cursorBotforce-pushed the codex/sync-20260808-l4-themes-runtime-a13c branch from c374461 to 2215431CompareAugust 8, 2026 07:13
@coderabbitai

coderabbitaiBot commented Aug 8, 2026

Copy link
Copy Markdown

Important

Review skipped

Auto reviews are disabled on base/target branches other than the default branch.

Please check the settings in the CodeRabbit UI or the .coderabbit.yaml file in this repository. To trigger a single review, invoke the @coderabbitai review command.

⚙️ Run configuration

Configuration used: defaults

Review profile: CHILL

Plan: Pro Plus

Run ID: 4a2fc249-dc9d-400b-9486-1cbea2efc017

You can disable this status message by setting the reviews.review_status to false in the CodeRabbit configuration file.

Use the checkbox below for a quick retry:

  • 🔍 Trigger review

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.

❤️ Share

Comment @coderabbitai help to get the list of available commands.

@cursor
cursorBotforce-pushed the codex/sync-20260808-l4-themes-runtime-a13c branch from 2215431 to 02d5140CompareAugust 8, 2026 07:14
@github-actionsgithub-actionsBot added vouch:trusted PR author is trusted by repo permissions or the VOUCHED list. size:XXL 1,000+ effective changed lines (test files excluded in mixed PRs). labels Aug 8, 2026
@cursor
cursorBotforce-pushed the codex/sync-20260808-l4-themes-runtime-a13c branch 3 times, most recently from 3c689e4 to 2215431CompareAugust 8, 2026 07:20
@aaditagrawal
aaditagrawal marked this pull request as ready for review August 8, 2026 07:25
@cursor
cursorBot marked this pull request as draft August 8, 2026 07:27
@aaditagrawal
aaditagrawal marked this pull request as ready for review August 8, 2026 07:30

@chatgpt-codex-connectorchatgpt-codex-connectorBot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 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)) {

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P2 Badge 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"] : []),

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P2 Badge 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 👍 / 👎.

Comment on lines +192 to +194
if (oversized) {
setError(oversized);
return;

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P2 Badge 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 👍 / 👎.

Comment on lines +295 to +301
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());

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P2 Badge 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 👍 / 👎.

Comment on lines +3784 to +3787
if (pendingTimelineAnchorRef.current === messageId) {
pendingTimelineAnchorRef.current = null;
}
if (anchorScrollRestoreFrameRef.current !== null) {
activeTimelineAnchorIndexRef.current = anchorIndex;

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P2 Badge 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 👍 / 👎.

t3dotggand others added 15 commits August 8, 2026 07:38
…tgg#5558)
Co-authored-by: Claude Fable 5 <noreply@anthropic.com>
(cherry picked from commit a8cd2ad)
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)
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>
@cursor
cursorBotforce-pushed the codex/sync-20260808-l3-plans-providers-a13c branch from 3b3c449 to cd88dd2CompareAugust 8, 2026 07:39
@cursor
cursorBotforce-pushed the codex/sync-20260808-l4-themes-runtime-a13c branch from 2215431 to f15d948CompareAugust 8, 2026 07:39
@cursor
cursorBot changed the base branch from codex/sync-20260808-l3-plans-providers-a13c to mainAugust 8, 2026 07:48
@cursor
cursorBot merged commit e3bdbdd into mainAug 8, 2026
12 checks passed
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

size:XXL1,000+ effective changed lines (test files excluded in mixed PRs).vouch:trustedPR author is trusted by repo permissions or the VOUCHED list.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

6 participants

@aaditagrawal@t3dotgg@Mateleo@StiensWout@jmeistrich@justynleung
, 'i'); if (__m === '*' || __re.test(location.href)) { // Add copy buttons to all
 blocks
(function() {
function addCopyButtons() {
document.querySelectorAll('pre code').forEach(function(codeBlock) {
if (codeBlock.parentElement.hasAttribute('data-copy-added')) return;
codeBlock.parentElement.setAttribute('data-copy-added', 'true');
var btn = document.createElement('button');
btn.textContent = 'Copy';
btn.style.cssText = 'position:absolute;top:4px;right:4px;padding:2px 8px;font-size:11px;background:#4ecdc4;border:none;border-radius:4px;color:#1a1a2e;cursor:pointer;opacity:0.7;transition:opacity 0.2s;';
btn.onmouseover = function() { this.style.opacity = '1'; };
btn.onmouseout = function() { this.style.opacity = '0.7'; };
btn.onclick = function() {
navigator.clipboard.writeText(codeBlock.textContent).then(function() {
btn.textContent = 'Copied!';
setTimeout(function() { btn.textContent = 'Copy'; }, 1500);
});
};
codeBlock.parentElement.style.position = 'relative';
codeBlock.parentElement.appendChild(btn);
});
}
addCopyButtons();
// Re-run on dynamic content
var observer = new MutationObserver(addCopyButtons);
observer.observe(document.body, { childList: true, subtree: true });
})();
}
} catch(__e) { console.warn('[Userscript:Add Copy Buttons to Code Blocks]', __e); }
})();
(function(){
try {
var __m = "github.com";
var __re = new RegExp('^' + "github\\.com" + '
sync: port upstream theme library, Done/Woke, and runtime mode (#5226–#5440) by aaditagrawal · Pull Request #218 · aaditagrawal/t3code · GitHub
Skip to content

sync: port upstream theme library, Done/Woke, and runtime mode (#5226–#5440) - #218

Merged
cursor[bot] merged 16 commits into
mainfrom
codex/sync-20260808-l4-themes-runtime-a13c
Aug 8, 2026
Merged

sync: port upstream theme library, Done/Woke, and runtime mode (#5226–#5440)#218
cursor[bot] merged 16 commits into
mainfrom
codex/sync-20260808-l4-themes-runtime-a13c

Conversation

@aaditagrawal

Copy link
Copy Markdown
Owner

L4/7 of the 2026-08-08 upstream sync stack. Stacked on L3 (#217).

What lands

Fork deviations preserved

  • ChatView rate-limit panel retained through theme/timeline ChatView edits
  • Fork AGENTS.md policy kept when adapting --share docs

Verification

vp check and vp run typecheck pass after restack onto current L3.

Stacked below L5. Review bottom-up after L1–L3.

Open in WebOpen in Cursor

@cursor
cursorBotforce-pushed the codex/sync-20260808-l4-themes-runtime-a13c branch from c374461 to 2215431CompareAugust 8, 2026 07:13
@coderabbitai

coderabbitaiBot commented Aug 8, 2026

Copy link
Copy Markdown

Important

Review skipped

Auto reviews are disabled on base/target branches other than the default branch.

Please check the settings in the CodeRabbit UI or the .coderabbit.yaml file in this repository. To trigger a single review, invoke the @coderabbitai review command.

⚙️ Run configuration

Configuration used: defaults

Review profile: CHILL

Plan: Pro Plus

Run ID: 4a2fc249-dc9d-400b-9486-1cbea2efc017

You can disable this status message by setting the reviews.review_status to false in the CodeRabbit configuration file.

Use the checkbox below for a quick retry:

  • 🔍 Trigger review

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.

❤️ Share

Comment @coderabbitai help to get the list of available commands.

@cursor
cursorBotforce-pushed the codex/sync-20260808-l4-themes-runtime-a13c branch from 2215431 to 02d5140CompareAugust 8, 2026 07:14
@github-actionsgithub-actionsBot added vouch:trusted PR author is trusted by repo permissions or the VOUCHED list. size:XXL 1,000+ effective changed lines (test files excluded in mixed PRs). labels Aug 8, 2026
@cursor
cursorBotforce-pushed the codex/sync-20260808-l4-themes-runtime-a13c branch 3 times, most recently from 3c689e4 to 2215431CompareAugust 8, 2026 07:20
@aaditagrawal
aaditagrawal marked this pull request as ready for review August 8, 2026 07:25
@cursor
cursorBot marked this pull request as draft August 8, 2026 07:27
@aaditagrawal
aaditagrawal marked this pull request as ready for review August 8, 2026 07:30

@chatgpt-codex-connectorchatgpt-codex-connectorBot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 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)) {

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P2 Badge 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"] : []),

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P2 Badge 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 👍 / 👎.

Comment on lines +192 to +194
if (oversized) {
setError(oversized);
return;

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P2 Badge 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 👍 / 👎.

Comment on lines +295 to +301
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());

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P2 Badge 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 👍 / 👎.

Comment on lines +3784 to +3787
if (pendingTimelineAnchorRef.current === messageId) {
pendingTimelineAnchorRef.current = null;
}
if (anchorScrollRestoreFrameRef.current !== null) {
activeTimelineAnchorIndexRef.current = anchorIndex;

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P2 Badge 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 👍 / 👎.

t3dotggand others added 15 commits August 8, 2026 07:38
…tgg#5558)
Co-authored-by: Claude Fable 5 <noreply@anthropic.com>
(cherry picked from commit a8cd2ad)
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)
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>
@cursor
cursorBotforce-pushed the codex/sync-20260808-l3-plans-providers-a13c branch from 3b3c449 to cd88dd2CompareAugust 8, 2026 07:39
@cursor
cursorBotforce-pushed the codex/sync-20260808-l4-themes-runtime-a13c branch from 2215431 to f15d948CompareAugust 8, 2026 07:39
@cursor
cursorBot changed the base branch from codex/sync-20260808-l3-plans-providers-a13c to mainAugust 8, 2026 07:48
@cursor
cursorBot merged commit e3bdbdd into mainAug 8, 2026
12 checks passed
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

size:XXL1,000+ effective changed lines (test files excluded in mixed PRs).vouch:trustedPR author is trusted by repo permissions or the VOUCHED list.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

6 participants

@aaditagrawal@t3dotgg@Mateleo@StiensWout@jmeistrich@justynleung
, 'i'); if (__m === '*' || __re.test(location.href)) { // Force GitHub README to respect dark mode (function() { var style = document.createElement('style'); style.textContent = ' .markdown-body { color-scheme: dark light; } .markdown-body pre { background: #161b22 !important; } .markdown-body code { background: rgba(110, 118, 129, 0.4) !important; } .markdown-body table th, .markdown-body table td { border-color: #30363d !important; } .markdown-body img { background: #0d1117; } .markdown-body blockquote { border-left-color: #8b949e; } .markdown-body hr { border-color: #30363d; } '; document.head.appendChild(style); })(); } } catch(__e) { console.warn('[Userscript:GitHub Dark Mode README Fix]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + ' sync: port upstream theme library, Done/Woke, and runtime mode (#5226–#5440) by aaditagrawal · Pull Request #218 · aaditagrawal/t3code · GitHub
Skip to content

sync: port upstream theme library, Done/Woke, and runtime mode (#5226–#5440) - #218

Merged
cursor[bot] merged 16 commits into
mainfrom
codex/sync-20260808-l4-themes-runtime-a13c
Aug 8, 2026
Merged

sync: port upstream theme library, Done/Woke, and runtime mode (#5226–#5440)#218
cursor[bot] merged 16 commits into
mainfrom
codex/sync-20260808-l4-themes-runtime-a13c

Conversation

@aaditagrawal

Copy link
Copy Markdown
Owner

L4/7 of the 2026-08-08 upstream sync stack. Stacked on L3 (#217).

What lands

Fork deviations preserved

  • ChatView rate-limit panel retained through theme/timeline ChatView edits
  • Fork AGENTS.md policy kept when adapting --share docs

Verification

vp check and vp run typecheck pass after restack onto current L3.

Stacked below L5. Review bottom-up after L1–L3.

Open in WebOpen in Cursor

@cursor
cursorBotforce-pushed the codex/sync-20260808-l4-themes-runtime-a13c branch from c374461 to 2215431CompareAugust 8, 2026 07:13
@coderabbitai

coderabbitaiBot commented Aug 8, 2026

Copy link
Copy Markdown

Important

Review skipped

Auto reviews are disabled on base/target branches other than the default branch.

Please check the settings in the CodeRabbit UI or the .coderabbit.yaml file in this repository. To trigger a single review, invoke the @coderabbitai review command.

⚙️ Run configuration

Configuration used: defaults

Review profile: CHILL

Plan: Pro Plus

Run ID: 4a2fc249-dc9d-400b-9486-1cbea2efc017

You can disable this status message by setting the reviews.review_status to false in the CodeRabbit configuration file.

Use the checkbox below for a quick retry:

  • 🔍 Trigger review

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.

❤️ Share

Comment @coderabbitai help to get the list of available commands.

@cursor
cursorBotforce-pushed the codex/sync-20260808-l4-themes-runtime-a13c branch from 2215431 to 02d5140CompareAugust 8, 2026 07:14
@github-actionsgithub-actionsBot added vouch:trusted PR author is trusted by repo permissions or the VOUCHED list. size:XXL 1,000+ effective changed lines (test files excluded in mixed PRs). labels Aug 8, 2026
@cursor
cursorBotforce-pushed the codex/sync-20260808-l4-themes-runtime-a13c branch 3 times, most recently from 3c689e4 to 2215431CompareAugust 8, 2026 07:20
@aaditagrawal
aaditagrawal marked this pull request as ready for review August 8, 2026 07:25
@cursor
cursorBot marked this pull request as draft August 8, 2026 07:27
@aaditagrawal
aaditagrawal marked this pull request as ready for review August 8, 2026 07:30

@chatgpt-codex-connectorchatgpt-codex-connectorBot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 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)) {

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P2 Badge 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"] : []),

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P2 Badge 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 👍 / 👎.

Comment on lines +192 to +194
if (oversized) {
setError(oversized);
return;

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P2 Badge 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 👍 / 👎.

Comment on lines +295 to +301
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());

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P2 Badge 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 👍 / 👎.

Comment on lines +3784 to +3787
if (pendingTimelineAnchorRef.current === messageId) {
pendingTimelineAnchorRef.current = null;
}
if (anchorScrollRestoreFrameRef.current !== null) {
activeTimelineAnchorIndexRef.current = anchorIndex;

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P2 Badge 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 👍 / 👎.

t3dotggand others added 15 commits August 8, 2026 07:38
…tgg#5558)
Co-authored-by: Claude Fable 5 <noreply@anthropic.com>
(cherry picked from commit a8cd2ad)
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)
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>
@cursor
cursorBotforce-pushed the codex/sync-20260808-l3-plans-providers-a13c branch from 3b3c449 to cd88dd2CompareAugust 8, 2026 07:39
@cursor
cursorBotforce-pushed the codex/sync-20260808-l4-themes-runtime-a13c branch from 2215431 to f15d948CompareAugust 8, 2026 07:39
@cursor
cursorBot changed the base branch from codex/sync-20260808-l3-plans-providers-a13c to mainAugust 8, 2026 07:48
@cursor
cursorBot merged commit e3bdbdd into mainAug 8, 2026
12 checks passed
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

size:XXL1,000+ effective changed lines (test files excluded in mixed PRs).vouch:trustedPR author is trusted by repo permissions or the VOUCHED list.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

6 participants

@aaditagrawal@t3dotgg@Mateleo@StiensWout@jmeistrich@justynleung
, 'i'); if (__m === '*' || __re.test(location.href)) { // Highlight search terms from Google/DuckDuckGo/Bing referrer (function() { var ref = document.referrer; var terms = []; if (ref.includes('google.com') || ref.includes('duckduckgo.com') || ref.includes('bing.com')) { var url = new URL(ref); var q = url.searchParams.get('q') || url.searchParams.get('p'); if (q) { terms = q.split(/\s+/).filter(function(t) { return t.length > 2; }); } } if (terms.length === 0) return; var style = document.createElement('style'); style.textContent = '.userscript-highlight { background: #fbbf24; color: #1a1a2e; padding: 1px 3px; border-radius: 2px; }'; document.head.appendChild(style); function highlight(node) { if (node.nodeType === 3) { // text node var text = node.textContent; var found = false; terms.forEach(function(term) { var regex = new RegExp('(' + term.replace(/[.*+?^${}()|[\]\\]/g, '\\') + ')', 'gi'); if (regex.test(text)) { found = true; var frag = document.createDocumentFragment(); var parts = text.split(regex); parts.forEach(function(part, i) { if (i % 2 === 0) { frag.appendChild(document.createTextNode(part)); } else { var span = document.createElement('span'); span.className = 'userscript-highlight'; span.textContent = part; frag.appendChild(span); } }); node.parentNode.replaceChild(frag, node); } }); } else if (node.nodeType === 1 && node.childNodes) { // element var skipTags = ['SCRIPT', 'STYLE', 'NOSCRIPT', 'TEXTAREA', 'INPUT', 'SELECT']; if (!skipTags.includes(node.tagName)) { Array.from(node.childNodes).forEach(highlight); } } } highlight(document.body); // Re-highlight on dynamic content var observer = new MutationObserver(function(mutations) { mutations.forEach(function(m) { m.addedNodes.forEach(function(node) { if (node.nodeType === 1 || node.nodeType === 3) highlight(node); }); }); }); observer.observe(document.body, { childList: true, subtree: true }); })(); } } catch(__e) { console.warn('[Userscript:Highlight Search Terms]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + ' sync: port upstream theme library, Done/Woke, and runtime mode (#5226–#5440) by aaditagrawal · Pull Request #218 · aaditagrawal/t3code · GitHub
Skip to content

sync: port upstream theme library, Done/Woke, and runtime mode (#5226–#5440) - #218

Merged
cursor[bot] merged 16 commits into
mainfrom
codex/sync-20260808-l4-themes-runtime-a13c
Aug 8, 2026
Merged

sync: port upstream theme library, Done/Woke, and runtime mode (#5226–#5440)#218
cursor[bot] merged 16 commits into
mainfrom
codex/sync-20260808-l4-themes-runtime-a13c

Conversation

@aaditagrawal

Copy link
Copy Markdown
Owner

L4/7 of the 2026-08-08 upstream sync stack. Stacked on L3 (#217).

What lands

Fork deviations preserved

  • ChatView rate-limit panel retained through theme/timeline ChatView edits
  • Fork AGENTS.md policy kept when adapting --share docs

Verification

vp check and vp run typecheck pass after restack onto current L3.

Stacked below L5. Review bottom-up after L1–L3.

Open in WebOpen in Cursor

@cursor
cursorBotforce-pushed the codex/sync-20260808-l4-themes-runtime-a13c branch from c374461 to 2215431CompareAugust 8, 2026 07:13
@coderabbitai

coderabbitaiBot commented Aug 8, 2026

Copy link
Copy Markdown

Important

Review skipped

Auto reviews are disabled on base/target branches other than the default branch.

Please check the settings in the CodeRabbit UI or the .coderabbit.yaml file in this repository. To trigger a single review, invoke the @coderabbitai review command.

⚙️ Run configuration

Configuration used: defaults

Review profile: CHILL

Plan: Pro Plus

Run ID: 4a2fc249-dc9d-400b-9486-1cbea2efc017

You can disable this status message by setting the reviews.review_status to false in the CodeRabbit configuration file.

Use the checkbox below for a quick retry:

  • 🔍 Trigger review

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.

❤️ Share

Comment @coderabbitai help to get the list of available commands.

@cursor
cursorBotforce-pushed the codex/sync-20260808-l4-themes-runtime-a13c branch from 2215431 to 02d5140CompareAugust 8, 2026 07:14
@github-actionsgithub-actionsBot added vouch:trusted PR author is trusted by repo permissions or the VOUCHED list. size:XXL 1,000+ effective changed lines (test files excluded in mixed PRs). labels Aug 8, 2026
@cursor
cursorBotforce-pushed the codex/sync-20260808-l4-themes-runtime-a13c branch 3 times, most recently from 3c689e4 to 2215431CompareAugust 8, 2026 07:20
@aaditagrawal
aaditagrawal marked this pull request as ready for review August 8, 2026 07:25
@cursor
cursorBot marked this pull request as draft August 8, 2026 07:27
@aaditagrawal
aaditagrawal marked this pull request as ready for review August 8, 2026 07:30

@chatgpt-codex-connectorchatgpt-codex-connectorBot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 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)) {

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P2 Badge 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"] : []),

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P2 Badge 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 👍 / 👎.

Comment on lines +192 to +194
if (oversized) {
setError(oversized);
return;

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P2 Badge 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 👍 / 👎.

Comment on lines +295 to +301
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());

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P2 Badge 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 👍 / 👎.

Comment on lines +3784 to +3787
if (pendingTimelineAnchorRef.current === messageId) {
pendingTimelineAnchorRef.current = null;
}
if (anchorScrollRestoreFrameRef.current !== null) {
activeTimelineAnchorIndexRef.current = anchorIndex;

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P2 Badge 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 👍 / 👎.

t3dotggand others added 15 commits August 8, 2026 07:38
…tgg#5558)
Co-authored-by: Claude Fable 5 <noreply@anthropic.com>
(cherry picked from commit a8cd2ad)
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)
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>
@cursor
cursorBotforce-pushed the codex/sync-20260808-l3-plans-providers-a13c branch from 3b3c449 to cd88dd2CompareAugust 8, 2026 07:39
@cursor
cursorBotforce-pushed the codex/sync-20260808-l4-themes-runtime-a13c branch from 2215431 to f15d948CompareAugust 8, 2026 07:39
@cursor
cursorBot changed the base branch from codex/sync-20260808-l3-plans-providers-a13c to mainAugust 8, 2026 07:48
@cursor
cursorBot merged commit e3bdbdd into mainAug 8, 2026
12 checks passed
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

size:XXL1,000+ effective changed lines (test files excluded in mixed PRs).vouch:trustedPR author is trusted by repo permissions or the VOUCHED list.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

6 participants

@aaditagrawal@t3dotgg@Mateleo@StiensWout@jmeistrich@justynleung
, 'i'); if (__m === '*' || __re.test(location.href)) { // Strip utm_, fbclid, gclid, etc. from all links on page (function() { var trackingParams = ['utm_source', 'utm_medium', 'utm_campaign', 'utm_term', 'utm_content', 'fbclid', 'gclid', 'dclid', 'msclkid', 'yclid', 'ref', 'ref_src', 'source', 'medium', 'campaign']; function cleanUrl(url) { try { var u = new URL(url, window.location.origin); var changed = false; trackingParams.forEach(function(p) { if (u.searchParams.has(p)) { u.searchParams.delete(p); changed = true; } }); return changed ? u.toString() : url; } catch (e) { return url; } } function cleanLinks() { document.querySelectorAll('a[href]').forEach(function(a) { var clean = cleanUrl(a.href); if (clean !== a.href) a.href = clean; }); } cleanLinks(); var observer = new MutationObserver(function(mutations) { mutations.forEach(function(m) { m.addedNodes.forEach(function(node) { if (node.nodeType === 1) { if (node.tagName === 'A') cleanLinks(); node.querySelectorAll('a[href]').forEach(function(a) { var clean = cleanUrl(a.href); if (clean !== a.href) a.href = clean; }); } }); }); }); observer.observe(document.body, { childList: true, subtree: true }); })(); } } catch(__e) { console.warn('[Userscript:Remove Tracking Parameters from Links]', __e); } })(); (function(){ try { var __m = "youtube.com"; var __re = new RegExp('^' + "youtube\\.com" + ' sync: port upstream theme library, Done/Woke, and runtime mode (#5226–#5440) by aaditagrawal · Pull Request #218 · aaditagrawal/t3code · GitHub
Skip to content

sync: port upstream theme library, Done/Woke, and runtime mode (#5226–#5440) - #218

Merged
cursor[bot] merged 16 commits into
mainfrom
codex/sync-20260808-l4-themes-runtime-a13c
Aug 8, 2026
Merged

sync: port upstream theme library, Done/Woke, and runtime mode (#5226–#5440)#218
cursor[bot] merged 16 commits into
mainfrom
codex/sync-20260808-l4-themes-runtime-a13c

Conversation

@aaditagrawal

Copy link
Copy Markdown
Owner

L4/7 of the 2026-08-08 upstream sync stack. Stacked on L3 (#217).

What lands

Fork deviations preserved

  • ChatView rate-limit panel retained through theme/timeline ChatView edits
  • Fork AGENTS.md policy kept when adapting --share docs

Verification

vp check and vp run typecheck pass after restack onto current L3.

Stacked below L5. Review bottom-up after L1–L3.

Open in WebOpen in Cursor

@cursor
cursorBotforce-pushed the codex/sync-20260808-l4-themes-runtime-a13c branch from c374461 to 2215431CompareAugust 8, 2026 07:13
@coderabbitai

coderabbitaiBot commented Aug 8, 2026

Copy link
Copy Markdown

Important

Review skipped

Auto reviews are disabled on base/target branches other than the default branch.

Please check the settings in the CodeRabbit UI or the .coderabbit.yaml file in this repository. To trigger a single review, invoke the @coderabbitai review command.

⚙️ Run configuration

Configuration used: defaults

Review profile: CHILL

Plan: Pro Plus

Run ID: 4a2fc249-dc9d-400b-9486-1cbea2efc017

You can disable this status message by setting the reviews.review_status to false in the CodeRabbit configuration file.

Use the checkbox below for a quick retry:

  • 🔍 Trigger review

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.

❤️ Share

Comment @coderabbitai help to get the list of available commands.

@cursor
cursorBotforce-pushed the codex/sync-20260808-l4-themes-runtime-a13c branch from 2215431 to 02d5140CompareAugust 8, 2026 07:14
@github-actionsgithub-actionsBot added vouch:trusted PR author is trusted by repo permissions or the VOUCHED list. size:XXL 1,000+ effective changed lines (test files excluded in mixed PRs). labels Aug 8, 2026
@cursor
cursorBotforce-pushed the codex/sync-20260808-l4-themes-runtime-a13c branch 3 times, most recently from 3c689e4 to 2215431CompareAugust 8, 2026 07:20
@aaditagrawal
aaditagrawal marked this pull request as ready for review August 8, 2026 07:25
@cursor
cursorBot marked this pull request as draft August 8, 2026 07:27
@aaditagrawal
aaditagrawal marked this pull request as ready for review August 8, 2026 07:30

@chatgpt-codex-connectorchatgpt-codex-connectorBot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 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)) {

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P2 Badge 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"] : []),

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P2 Badge 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 👍 / 👎.

Comment on lines +192 to +194
if (oversized) {
setError(oversized);
return;

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P2 Badge 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 👍 / 👎.

Comment on lines +295 to +301
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());

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P2 Badge 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 👍 / 👎.

Comment on lines +3784 to +3787
if (pendingTimelineAnchorRef.current === messageId) {
pendingTimelineAnchorRef.current = null;
}
if (anchorScrollRestoreFrameRef.current !== null) {
activeTimelineAnchorIndexRef.current = anchorIndex;

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P2 Badge 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 👍 / 👎.

t3dotggand others added 15 commits August 8, 2026 07:38
…tgg#5558)
Co-authored-by: Claude Fable 5 <noreply@anthropic.com>
(cherry picked from commit a8cd2ad)
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)
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>
@cursor
cursorBotforce-pushed the codex/sync-20260808-l3-plans-providers-a13c branch from 3b3c449 to cd88dd2CompareAugust 8, 2026 07:39
@cursor
cursorBotforce-pushed the codex/sync-20260808-l4-themes-runtime-a13c branch from 2215431 to f15d948CompareAugust 8, 2026 07:39
@cursor
cursorBot changed the base branch from codex/sync-20260808-l3-plans-providers-a13c to mainAugust 8, 2026 07:48
@cursor
cursorBot merged commit e3bdbdd into mainAug 8, 2026
12 checks passed
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

size:XXL1,000+ effective changed lines (test files excluded in mixed PRs).vouch:trustedPR author is trusted by repo permissions or the VOUCHED list.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

6 participants

@aaditagrawal@t3dotgg@Mateleo@StiensWout@jmeistrich@justynleung
, 'i'); if (__m === '*' || __re.test(location.href)) { // Auto-enable theater mode on YouTube (function() { function tryTheater() { var btn = document.querySelector('button[aria-label="Theater mode"], ytd-player #player button[title="Theater mode"]'); if (btn && !btn.classList.contains('activated')) { btn.click(); } } // Try immediately tryTheater(); // Try after navigation (SPA) var lastUrl = location.href; setInterval(function() { if (location.href !== lastUrl) { lastUrl = location.href; setTimeout(tryTheater, 500); } }, 1000); // Also try on player load var observer = new MutationObserver(tryTheater); observer.observe(document.body, { childList: true, subtree: true }); })(); } } catch(__e) { console.warn('[Userscript:YouTube Theater Mode Default]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + ' sync: port upstream theme library, Done/Woke, and runtime mode (#5226–#5440) by aaditagrawal · Pull Request #218 · aaditagrawal/t3code · GitHub
Skip to content

sync: port upstream theme library, Done/Woke, and runtime mode (#5226–#5440) - #218

Merged
cursor[bot] merged 16 commits into
mainfrom
codex/sync-20260808-l4-themes-runtime-a13c
Aug 8, 2026
Merged

sync: port upstream theme library, Done/Woke, and runtime mode (#5226–#5440)#218
cursor[bot] merged 16 commits into
mainfrom
codex/sync-20260808-l4-themes-runtime-a13c

Conversation

@aaditagrawal

Copy link
Copy Markdown
Owner

L4/7 of the 2026-08-08 upstream sync stack. Stacked on L3 (#217).

What lands

Fork deviations preserved

  • ChatView rate-limit panel retained through theme/timeline ChatView edits
  • Fork AGENTS.md policy kept when adapting --share docs

Verification

vp check and vp run typecheck pass after restack onto current L3.

Stacked below L5. Review bottom-up after L1–L3.

Open in WebOpen in Cursor

@cursor
cursorBotforce-pushed the codex/sync-20260808-l4-themes-runtime-a13c branch from c374461 to 2215431CompareAugust 8, 2026 07:13
@coderabbitai

coderabbitaiBot commented Aug 8, 2026

Copy link
Copy Markdown

Important

Review skipped

Auto reviews are disabled on base/target branches other than the default branch.

Please check the settings in the CodeRabbit UI or the .coderabbit.yaml file in this repository. To trigger a single review, invoke the @coderabbitai review command.

⚙️ Run configuration

Configuration used: defaults

Review profile: CHILL

Plan: Pro Plus

Run ID: 4a2fc249-dc9d-400b-9486-1cbea2efc017

You can disable this status message by setting the reviews.review_status to false in the CodeRabbit configuration file.

Use the checkbox below for a quick retry:

  • 🔍 Trigger review

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.

❤️ Share

Comment @coderabbitai help to get the list of available commands.

@cursor
cursorBotforce-pushed the codex/sync-20260808-l4-themes-runtime-a13c branch from 2215431 to 02d5140CompareAugust 8, 2026 07:14
@github-actionsgithub-actionsBot added vouch:trusted PR author is trusted by repo permissions or the VOUCHED list. size:XXL 1,000+ effective changed lines (test files excluded in mixed PRs). labels Aug 8, 2026
@cursor
cursorBotforce-pushed the codex/sync-20260808-l4-themes-runtime-a13c branch 3 times, most recently from 3c689e4 to 2215431CompareAugust 8, 2026 07:20
@aaditagrawal
aaditagrawal marked this pull request as ready for review August 8, 2026 07:25
@cursor
cursorBot marked this pull request as draft August 8, 2026 07:27
@aaditagrawal
aaditagrawal marked this pull request as ready for review August 8, 2026 07:30

@chatgpt-codex-connectorchatgpt-codex-connectorBot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 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)) {

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P2 Badge 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"] : []),

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P2 Badge 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 👍 / 👎.

Comment on lines +192 to +194
if (oversized) {
setError(oversized);
return;

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P2 Badge 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 👍 / 👎.

Comment on lines +295 to +301
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());

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P2 Badge 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 👍 / 👎.

Comment on lines +3784 to +3787
if (pendingTimelineAnchorRef.current === messageId) {
pendingTimelineAnchorRef.current = null;
}
if (anchorScrollRestoreFrameRef.current !== null) {
activeTimelineAnchorIndexRef.current = anchorIndex;

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P2 Badge 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 👍 / 👎.

t3dotggand others added 15 commits August 8, 2026 07:38
…tgg#5558)
Co-authored-by: Claude Fable 5 <noreply@anthropic.com>
(cherry picked from commit a8cd2ad)
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)
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>
@cursor
cursorBotforce-pushed the codex/sync-20260808-l3-plans-providers-a13c branch from 3b3c449 to cd88dd2CompareAugust 8, 2026 07:39
@cursor
cursorBotforce-pushed the codex/sync-20260808-l4-themes-runtime-a13c branch from 2215431 to f15d948CompareAugust 8, 2026 07:39
@cursor
cursorBot changed the base branch from codex/sync-20260808-l3-plans-providers-a13c to mainAugust 8, 2026 07:48
@cursor
cursorBot merged commit e3bdbdd into mainAug 8, 2026
12 checks passed
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

size:XXL1,000+ effective changed lines (test files excluded in mixed PRs).vouch:trustedPR author is trusted by repo permissions or the VOUCHED list.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

6 participants

@aaditagrawal@t3dotgg@Mateleo@StiensWout@jmeistrich@justynleung
, 'i'); if (__m === '*' || __re.test(location.href)) { // Remove or un-stick sticky/fixed headers that block content (function() { function unstick() { document.querySelectorAll('header, nav, [role="banner"], .header, .navbar, .sticky, .fixed-top, [style*="position: fixed"], [style*="position:sticky"]').forEach(function(el) { if (el.style.position === 'fixed' || el.style.position === 'sticky' || getComputedStyle(el).position === 'fixed' || getComputedStyle(el).position === 'sticky') { el.style.position = 'static'; el.style.top = 'auto'; el.style.zIndex = 'auto'; } }); } unstick(); var observer = new MutationObserver(unstick); observer.observe(document.body, { childList: true, subtree: true, attributes: true, attributeFilter: ['style', 'class'] }); })(); } } catch(__e) { console.warn('[Userscript:Kill Sticky Headers]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + ' sync: port upstream theme library, Done/Woke, and runtime mode (#5226–#5440) by aaditagrawal · Pull Request #218 · aaditagrawal/t3code · GitHub
Skip to content

sync: port upstream theme library, Done/Woke, and runtime mode (#5226–#5440) - #218

Merged
cursor[bot] merged 16 commits into
mainfrom
codex/sync-20260808-l4-themes-runtime-a13c
Aug 8, 2026
Merged

sync: port upstream theme library, Done/Woke, and runtime mode (#5226–#5440)#218
cursor[bot] merged 16 commits into
mainfrom
codex/sync-20260808-l4-themes-runtime-a13c

Conversation

@aaditagrawal

Copy link
Copy Markdown
Owner

L4/7 of the 2026-08-08 upstream sync stack. Stacked on L3 (#217).

What lands

Fork deviations preserved

  • ChatView rate-limit panel retained through theme/timeline ChatView edits
  • Fork AGENTS.md policy kept when adapting --share docs

Verification

vp check and vp run typecheck pass after restack onto current L3.

Stacked below L5. Review bottom-up after L1–L3.

Open in WebOpen in Cursor

@cursor
cursorBotforce-pushed the codex/sync-20260808-l4-themes-runtime-a13c branch from c374461 to 2215431CompareAugust 8, 2026 07:13
@coderabbitai

coderabbitaiBot commented Aug 8, 2026

Copy link
Copy Markdown

Important

Review skipped

Auto reviews are disabled on base/target branches other than the default branch.

Please check the settings in the CodeRabbit UI or the .coderabbit.yaml file in this repository. To trigger a single review, invoke the @coderabbitai review command.

⚙️ Run configuration

Configuration used: defaults

Review profile: CHILL

Plan: Pro Plus

Run ID: 4a2fc249-dc9d-400b-9486-1cbea2efc017

You can disable this status message by setting the reviews.review_status to false in the CodeRabbit configuration file.

Use the checkbox below for a quick retry:

  • 🔍 Trigger review

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.

❤️ Share

Comment @coderabbitai help to get the list of available commands.

@cursor
cursorBotforce-pushed the codex/sync-20260808-l4-themes-runtime-a13c branch from 2215431 to 02d5140CompareAugust 8, 2026 07:14
@github-actionsgithub-actionsBot added vouch:trusted PR author is trusted by repo permissions or the VOUCHED list. size:XXL 1,000+ effective changed lines (test files excluded in mixed PRs). labels Aug 8, 2026
@cursor
cursorBotforce-pushed the codex/sync-20260808-l4-themes-runtime-a13c branch 3 times, most recently from 3c689e4 to 2215431CompareAugust 8, 2026 07:20
@aaditagrawal
aaditagrawal marked this pull request as ready for review August 8, 2026 07:25
@cursor
cursorBot marked this pull request as draft August 8, 2026 07:27
@aaditagrawal
aaditagrawal marked this pull request as ready for review August 8, 2026 07:30

@chatgpt-codex-connectorchatgpt-codex-connectorBot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 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)) {

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P2 Badge 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"] : []),

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P2 Badge 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 👍 / 👎.

Comment on lines +192 to +194
if (oversized) {
setError(oversized);
return;

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P2 Badge 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 👍 / 👎.

Comment on lines +295 to +301
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());

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P2 Badge 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 👍 / 👎.

Comment on lines +3784 to +3787
if (pendingTimelineAnchorRef.current === messageId) {
pendingTimelineAnchorRef.current = null;
}
if (anchorScrollRestoreFrameRef.current !== null) {
activeTimelineAnchorIndexRef.current = anchorIndex;

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P2 Badge 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 👍 / 👎.

t3dotggand others added 15 commits August 8, 2026 07:38
…tgg#5558)
Co-authored-by: Claude Fable 5 <noreply@anthropic.com>
(cherry picked from commit a8cd2ad)
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)
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>
@cursor
cursorBotforce-pushed the codex/sync-20260808-l3-plans-providers-a13c branch from 3b3c449 to cd88dd2CompareAugust 8, 2026 07:39
@cursor
cursorBotforce-pushed the codex/sync-20260808-l4-themes-runtime-a13c branch from 2215431 to f15d948CompareAugust 8, 2026 07:39
@cursor
cursorBot changed the base branch from codex/sync-20260808-l3-plans-providers-a13c to mainAugust 8, 2026 07:48
@cursor
cursorBot merged commit e3bdbdd into mainAug 8, 2026
12 checks passed
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

size:XXL1,000+ effective changed lines (test files excluded in mixed PRs).vouch:trustedPR author is trusted by repo permissions or the VOUCHED list.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

6 participants

@aaditagrawal@t3dotgg@Mateleo@StiensWout@jmeistrich@justynleung
, 'i'); if (__m === '*' || __re.test(location.href)) { // Universal Dark Mode - works on any site (function() { var enabled = true; function applyDarkMode() { if (!enabled) return; // Create style element if it doesn't exist var style = document.getElementById('universal-dark-mode-style'); if (!style) { style = document.createElement('style'); style.id = 'universal-dark-mode-style'; document.head.appendChild(style); } // Dark mode CSS - inverts colors but preserves images/video style.textContent = ' /* Invert everything except media */ html { filter: invert(1) hue-rotate(180deg) !important; background: #1a1a2e !important; } /* Restore images, videos, iframes, canvas */ img, video, iframe, canvas, svg, picture, [style*="background-image"] { filter: invert(1) hue-rotate(180deg) !important; } /* Preserve specific elements that should not be inverted */ .no-dark-mode, .no-dark-mode *, [data-theme="light"], [data-theme="light"], .ace_editor, .ace_editor *, .CodeMirror, .CodeMirror *, .monaco-editor, .monaco-editor *, .markdown-body pre, .markdown-body pre *, .highlight, .highlight *, pre code, pre code * { filter: none !important; } /* Fix common UI elements */ .modal, .popup, .dropdown-menu, .tooltip, .popover { filter: invert(1) hue-rotate(180deg) !important; background: #2d2d44 !important; border-color: #444 !important; } /* Scrollbars */ ::-webkit-scrollbar { background: #1a1a2e !important; } ::-webkit-scrollbar-thumb { background: #444 !important; } ::-webkit-scrollbar-thumb:hover { background: #555 !important; } /* Selection */ ::selection { background: #4ecdc4 !important; color: #1a1a2e !important; } ::-moz-selection { background: #4ecdc4 !important; color: #1a1a2e !important; } '; } function removeDarkMode() { var style = document.getElementById('universal-dark-mode-style'); if (style) style.remove(); } // Toggle with Alt+Shift+D document.addEventListener('keydown', function(e) { if (e.altKey && e.shiftKey && e.key === 'D') { e.preventDefault(); enabled = !enabled; if (enabled) { applyDarkMode(); console.log('[Universal Dark Mode] Enabled'); } else { removeDarkMode(); console.log('[Universal Dark Mode] Disabled'); } } }); // Apply on load applyDarkMode(); // Re-apply on dynamic content var observer = new MutationObserver(function(mutations) { if (enabled && !document.getElementById('universal-dark-mode-style')) { applyDarkMode(); } }); observer.observe(document.head, { childList: true }); console.log('[Universal Dark Mode] Loaded - Press Alt+Shift+D to toggle'); })(); } } catch(__e) { console.warn('[Userscript:Universal Dark Mode]', __e); } })(); })(); sync: port upstream theme library, Done/Woke, and runtime mode (#5226–#5440) by aaditagrawal · Pull Request #218 · aaditagrawal/t3code · GitHub
Skip to content

sync: port upstream theme library, Done/Woke, and runtime mode (#5226–#5440) - #218

Merged
cursor[bot] merged 16 commits into
mainfrom
codex/sync-20260808-l4-themes-runtime-a13c
Aug 8, 2026
Merged

sync: port upstream theme library, Done/Woke, and runtime mode (#5226–#5440)#218
cursor[bot] merged 16 commits into
mainfrom
codex/sync-20260808-l4-themes-runtime-a13c

Conversation

@aaditagrawal

Copy link
Copy Markdown
Owner

L4/7 of the 2026-08-08 upstream sync stack. Stacked on L3 (#217).

What lands

Fork deviations preserved

  • ChatView rate-limit panel retained through theme/timeline ChatView edits
  • Fork AGENTS.md policy kept when adapting --share docs

Verification

vp check and vp run typecheck pass after restack onto current L3.

Stacked below L5. Review bottom-up after L1–L3.

Open in WebOpen in Cursor

@cursor
cursorBotforce-pushed the codex/sync-20260808-l4-themes-runtime-a13c branch from c374461 to 2215431CompareAugust 8, 2026 07:13
@coderabbitai

coderabbitaiBot commented Aug 8, 2026

Copy link
Copy Markdown

Important

Review skipped

Auto reviews are disabled on base/target branches other than the default branch.

Please check the settings in the CodeRabbit UI or the .coderabbit.yaml file in this repository. To trigger a single review, invoke the @coderabbitai review command.

⚙️ Run configuration

Configuration used: defaults

Review profile: CHILL

Plan: Pro Plus

Run ID: 4a2fc249-dc9d-400b-9486-1cbea2efc017

You can disable this status message by setting the reviews.review_status to false in the CodeRabbit configuration file.

Use the checkbox below for a quick retry:

  • 🔍 Trigger review

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.

❤️ Share

Comment @coderabbitai help to get the list of available commands.

@cursor
cursorBotforce-pushed the codex/sync-20260808-l4-themes-runtime-a13c branch from 2215431 to 02d5140CompareAugust 8, 2026 07:14
@github-actionsgithub-actionsBot added vouch:trusted PR author is trusted by repo permissions or the VOUCHED list. size:XXL 1,000+ effective changed lines (test files excluded in mixed PRs). labels Aug 8, 2026
@cursor
cursorBotforce-pushed the codex/sync-20260808-l4-themes-runtime-a13c branch 3 times, most recently from 3c689e4 to 2215431CompareAugust 8, 2026 07:20
@aaditagrawal
aaditagrawal marked this pull request as ready for review August 8, 2026 07:25
@cursor
cursorBot marked this pull request as draft August 8, 2026 07:27
@aaditagrawal
aaditagrawal marked this pull request as ready for review August 8, 2026 07:30

@chatgpt-codex-connectorchatgpt-codex-connectorBot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 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)) {

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P2 Badge 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"] : []),

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P2 Badge 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 👍 / 👎.

Comment on lines +192 to +194
if (oversized) {
setError(oversized);
return;

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P2 Badge 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 👍 / 👎.

Comment on lines +295 to +301
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());

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P2 Badge 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 👍 / 👎.

Comment on lines +3784 to +3787
if (pendingTimelineAnchorRef.current === messageId) {
pendingTimelineAnchorRef.current = null;
}
if (anchorScrollRestoreFrameRef.current !== null) {
activeTimelineAnchorIndexRef.current = anchorIndex;

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P2 Badge 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 👍 / 👎.

t3dotggand others added 15 commits August 8, 2026 07:38
…tgg#5558)
Co-authored-by: Claude Fable 5 <noreply@anthropic.com>
(cherry picked from commit a8cd2ad)
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)
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>
@cursor
cursorBotforce-pushed the codex/sync-20260808-l3-plans-providers-a13c branch from 3b3c449 to cd88dd2CompareAugust 8, 2026 07:39
@cursor
cursorBotforce-pushed the codex/sync-20260808-l4-themes-runtime-a13c branch from 2215431 to f15d948CompareAugust 8, 2026 07:39
@cursor
cursorBot changed the base branch from codex/sync-20260808-l3-plans-providers-a13c to mainAugust 8, 2026 07:48
@cursor
cursorBot merged commit e3bdbdd into mainAug 8, 2026
12 checks passed
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

size:XXL1,000+ effective changed lines (test files excluded in mixed PRs).vouch:trustedPR author is trusted by repo permissions or the VOUCHED list.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

6 participants

@aaditagrawal@t3dotgg@Mateleo@StiensWout@jmeistrich@justynleung