Skip to content

sync: port upstream snooze, Opus 5, diff/fast-mode polish (#4309–#4488)#187

Merged
cursor[bot] merged 21 commits into
mainfrom
codex/sync-20260725-l7-snooze-late-daf2
Jul 25, 2026
Merged

sync: port upstream snooze, Opus 5, diff/fast-mode polish (#4309–#4488)#187
cursor[bot] merged 21 commits into
mainfrom
codex/sync-20260725-l7-snooze-late-daf2

Conversation

@aaditagrawal

@aaditagrawal aaditagrawal commented Jul 25, 2026

Copy link
Copy Markdown
Owner

Port upstream snooze, Opus 5, Clerk upgrade, diff/fast-mode, and late polish onto the fork.

Includes fork adaptations:

  • Keep WSL node-pty on bullseye glibc and pin releases to the fork
  • Scope Auto vs Medium access by provider; normalize carried modes on new threads
  • Refresh lockfile so patchedDependencies hashes match workspace patches after the Clerk upgrade restack

Stacked after #186 (now merged). Merge base is main.

Open in Web Open in Cursor 

@coderabbitai

coderabbitai Bot commented Jul 25, 2026

Copy link
Copy Markdown

Warning

Review limit reached

@cursor[bot], you've reached your PR review limit, so we couldn't start this review.

Next review available in: 45 minutes

Enable usage-based reviews in Billing to review now. Otherwise, wait until the next included review is available.
You're only billed for reviews past your plan's rate limits ($0.25/file).

How can I continue?

After more reviews become available, a review can be triggered using the @coderabbitai review command as a PR comment. Alternatively, push new commits to this PR.

To avoid repeated limits, reduce automatic review volume by pausing incremental auto-reviews earlier, using label-based review opt-in, excluding WIP or generated PR titles, or requesting reviews manually when the PR is ready. If your team needs uninterrupted high-volume reviews, an organization admin can enable usage-based reviews.

How do review limits work?

CodeRabbit enforces per-developer PR review limits for each organization. Most developers receive the normal plan review availability.

For paid Pro and Pro+ PR reviews, CodeRabbit uses adaptive limits for sustained high-volume activity. When a developer's recent PR review activity reaches the 95th percentile or higher among CodeRabbit users, additional reviews become available more gradually as earlier reviews age out of the rolling window.

Please refer docs for additional details.

Review details
⚙️ Run configuration

Configuration used: defaults

Review profile: CHILL

Plan: Pro Plus

Run ID: 369b1891-25b7-464b-8631-153867720ea1

📥 Commits

Reviewing files that changed from the base of the PR and between c66cb5e and d3c4aed.

⛔ Files ignored due to path filters (1)
  • pnpm-lock.yaml is excluded by !**/pnpm-lock.yaml
📒 Files selected for processing (89)
  • .agents/skills/test-t3-app/SKILL.md
  • .agents/skills/test-t3-app/agents/openai.yaml
  • .github/workflows/release.yml
  • apps/mobile/src/features/home/HomeScreen.tsx
  • apps/mobile/src/features/threads/GitActionProgressOverlay.tsx
  • apps/mobile/src/features/threads/ThreadNavigationSidebar.tsx
  • apps/mobile/src/features/threads/threadListV2.test.ts
  • apps/mobile/src/features/threads/threadListV2.ts
  • apps/mobile/src/state/use-thread-selection.ts
  • apps/server/package.json
  • apps/server/src/environment/ServerEnvironment.ts
  • apps/server/src/orchestration/Layers/ProjectionPipeline.ts
  • apps/server/src/orchestration/Layers/ProjectionSnapshotQuery.test.ts
  • apps/server/src/orchestration/Layers/ProjectionSnapshotQuery.ts
  • apps/server/src/orchestration/Schemas.ts
  • apps/server/src/orchestration/decider.snoozed.test.ts
  • apps/server/src/orchestration/decider.ts
  • apps/server/src/orchestration/projector.test.ts
  • apps/server/src/orchestration/projector.ts
  • apps/server/src/persistence/Layers/ProjectionRepositories.test.ts
  • apps/server/src/persistence/Layers/ProjectionThreads.ts
  • apps/server/src/persistence/Migrations.ts
  • apps/server/src/persistence/Migrations/034_ProjectionThreadsSnoozed.ts
  • apps/server/src/persistence/Services/ProjectionThreads.ts
  • apps/server/src/provider/Drivers/ClaudeDriver.ts
  • apps/server/src/provider/Drivers/ClaudeSkills.test.ts
  • apps/server/src/provider/Drivers/ClaudeSkills.ts
  • apps/server/src/provider/Layers/ClaudeAdapter.test.ts
  • apps/server/src/provider/Layers/ClaudeProvider.ts
  • apps/server/src/provider/Layers/ProviderRegistry.test.ts
  • apps/web/src/components/BranchToolbar.logic.test.ts
  • apps/web/src/components/BranchToolbar.logic.ts
  • apps/web/src/components/BranchToolbar.tsx
  • apps/web/src/components/BranchToolbarBranchSelector.tsx
  • apps/web/src/components/BranchToolbarEnvModeSelector.tsx
  • apps/web/src/components/ChatView.logic.test.ts
  • apps/web/src/components/ChatView.logic.ts
  • apps/web/src/components/ChatView.tsx
  • apps/web/src/components/CommandPalette.tsx
  • apps/web/src/components/DiffPanel.tsx
  • apps/web/src/components/Sidebar.logic.test.ts
  • apps/web/src/components/Sidebar.logic.ts
  • apps/web/src/components/Sidebar.snooze.test.ts
  • apps/web/src/components/Sidebar.snooze.ts
  • apps/web/src/components/Sidebar.tsx
  • apps/web/src/components/SidebarV2.tsx
  • apps/web/src/components/ThreadStatusIndicators.test.ts
  • apps/web/src/components/ThreadStatusIndicators.tsx
  • apps/web/src/components/chat/ChangedFilesTree.test.tsx
  • apps/web/src/components/chat/ChangedFilesTree.tsx
  • apps/web/src/components/chat/ChatComposer.tsx
  • apps/web/src/components/chat/CompactComposerControlsMenu.tsx
  • apps/web/src/components/chat/DiffStatLabel.tsx
  • apps/web/src/components/chat/MessagesTimeline.test.tsx
  • apps/web/src/components/chat/MessagesTimeline.tsx
  • apps/web/src/components/chat/ModelListRow.tsx
  • apps/web/src/components/chat/ModelPickerContent.tsx
  • apps/web/src/components/chat/ModelPickerSidebar.tsx
  • apps/web/src/components/chat/ProviderModelPicker.tsx
  • apps/web/src/components/chat/TraitsPicker.test.ts
  • apps/web/src/components/chat/TraitsPicker.tsx
  • apps/web/src/components/chat/changedFilesPresentation.test.ts
  • apps/web/src/components/chat/changedFilesPresentation.ts
  • apps/web/src/composerDraftStore.ts
  • apps/web/src/hooks/useHandleNewThread.ts
  • apps/web/src/hooks/useNowMinute.ts
  • apps/web/src/hooks/useThreadActions.ts
  • apps/web/src/index.css
  • apps/web/src/lib/chatThreadActions.test.ts
  • apps/web/src/lib/chatThreadActions.ts
  • apps/web/src/lib/diffCollapse.test.ts
  • apps/web/src/lib/diffCollapse.ts
  • apps/web/src/routes/_chat.tsx
  • apps/web/src/state/entities.ts
  • apps/web/src/timestampFormat.ts
  • apps/web/src/uiStateStore.test.ts
  • apps/web/src/uiStateStore.ts
  • packages/client-runtime/src/operations/commands.ts
  • packages/client-runtime/src/state/threadCommands.ts
  • packages/client-runtime/src/state/threadDetail.ts
  • packages/client-runtime/src/state/threadReducer.ts
  • packages/client-runtime/src/state/threadSettled.test.ts
  • packages/client-runtime/src/state/threadSettled.ts
  • packages/client-runtime/src/state/threadSnoozed.test.ts
  • packages/contracts/src/environment.ts
  • packages/contracts/src/model.ts
  • packages/contracts/src/orchestration.ts
  • packages/shared/src/model.test.ts
  • pnpm-workspace.yaml
✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch codex/sync-20260725-l7-snooze-late-daf2

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.

@github-actions github-actions Bot 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 Jul 25, 2026
@cursor
cursor Bot force-pushed the codex/sync-20260725-l6-grouping-polish-daf2 branch from 96acf51 to cd8bb31 Compare July 25, 2026 08:52
@cursor
cursor Bot force-pushed the codex/sync-20260725-l7-snooze-late-daf2 branch from 55fd2fd to c5bfaff Compare July 25, 2026 08:52

@chatgpt-codex-connector chatgpt-codex-connector Bot 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: 55fd2fd431

ℹ️ 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".

Comment on lines +93 to +97
const carryRuntimeMode =
carrySourceComposer?.runtimeMode ??
carrySourceShell?.runtimeMode ??
carrySourceDraft?.runtimeMode ??
null;

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

P1 Badge Normalize carried modes for the destination provider

When a user views a Droid thread in medium-access and creates a thread in another environment where that Droid instance is unavailable, the composer falls back to an available provider but this carried runtime mode remains. If that provider is Codex, runtimeModeToThreadConfig handles the unsupported value via its default branch and launches with danger-full-access, so a draft shown as Medium access can execute unsandboxed. Carry the mode only when the source instance is available in the destination, or normalize it after selecting the actual destination provider.

AGENTS.md reference: AGENTS.md:L20-L25

Useful? React with 👍 / 👎.

Comment on lines +70 to +72
const homePath = config.homePath.trim();
if (homePath.length > 0) {
return path.resolve(expandHomePath(homePath));

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 Resolve custom Claude homes with the shared config logic

For supported legacy homePath values that do not end in .claude, such as ~/.claude-work, makeClaudeEnvironment points Claude at ~/.claude-work/.claude, but this resolver scans ~/.claude-work/skills. Consequently, the new picker omits every user skill for such custom Claude instances. Reuse resolveClaudeConfigDir so discovery and the spawned runtime interpret homePath identically.

AGENTS.md reference: AGENTS.md:L64-L66

Useful? React with 👍 / 👎.

Comment on lines +102 to +104
const roots: ReadonlyArray<{ directory: string; scope: ClaudeSkillScope }> = [
{ directory: path.join(configDirPath, "skills"), scope: "user" },
...(cwd ? [{ directory: path.join(cwd, ".claude", "skills"), scope: "project" as const }] : []),

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 Discover project skills from the active project

When the active thread belongs to any project or worktree other than the server startup directory, this project root is wrong: ClaudeDriver passes the global ServerConfig.cwd, and the resulting provider snapshot is reused by every composer. A thread in project B therefore offers project A's skills and omits B's, and selecting one can insert a skill name that Claude cannot load in B. Project-scoped discovery needs the active thread/project cwd rather than the instance-global startup cwd.

Useful? React with 👍 / 👎.

Comment thread pnpm-lock.yaml Outdated
react-native-keyboard-controller@1.21.13: 20be72c84d74253acdcfefbc6defe36dc396944f1a44cab2bdd0e3cd572ae008
react-native-nitro-modules@0.35.9: 825622aae63a8fb5b904f3c77908a0e216261d727ea171709f2c0b6088422675
react-native-screens@4.25.2: 282d02fa85a8a643548a27565dedd92bd3a729742be5c0371b0c4f6d07e33ce3
react-native-screens@4.25.2: 47a07b0849ebf1ae454be3cb9fde7700c763584afa403d381e11e06e36187de8

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

P1 Badge Regenerate the lockfile from the fork manifests

The regenerated lockfile no longer matches the committed manifests: the server importer omits @cursor/sdk, @factory/droid-sdk, @github/copilot, and @github/copilot-sdk; the web importer omits @clerk/clerk-js, @tanstack/react-query, and ghostty-web; and the desktop importer omits electron-builder-squirrel-windows. This line also records 47a07b… for the unchanged react-native-screens patch whose SHA-256 is still 282d02…. pnpm install --help defines frozen mode as failing when an update is needed and says it is enabled by default in CI, so clean CI and release installs stop before checks or builds. Regenerate the complete lockfile from the fork's manifests and patches.

AGENTS.md reference: AGENTS.md:L20-L24

Useful? React with 👍 / 👎.

Comment on lines +1285 to +1287
const [autoExpanded] = useState(() =>
shouldAutoExpandChangedFiles(checkpointFiles, isLatestTurn),
);

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 Reevaluate auto-collapse as checkpoint diffs grow

Checkpoint summaries are replaced repeatedly during an active turn as mid-turn diff updates arrive, but this initializer freezes the expansion decision from the first nonempty update. A turn that begins with one small file therefore mounts expanded and stays expanded when later updates grow beyond the five-file or 200-line limits, leaving the full large tree rendering during streaming—the case this auto-collapse feature is meant to protect. Recompute the automatic state while there is no persisted user override, including when the size threshold is crossed.

AGENTS.md reference: AGENTS.md:L56-L62

Useful? React with 👍 / 👎.

Comment on lines +216 to +219
"medium-access": {
label: "Medium access",
description: "Allow reversible commands, ask before riskier actions.",
icon: ShieldIcon,

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

P1 Badge Restrict Medium access to Droid

Adding medium-access to this global configuration also adds it to runtimeModeOptions = Object.keys(runtimeModeConfig), so the composer now offers Medium access for Codex and every other provider, not just Droid. If a Codex user selects it, the server's runtimeModeToThreadConfig has no matching case and falls through to the full-access default (approvalPolicy: "never", danger-full-access), contradicting the UI's promise that risky actions will ask. Filter runtime modes by the selected provider and make the server reject or safely normalize unsupported values.

AGENTS.md reference: AGENTS.md:L20-L24

Useful? React with 👍 / 👎.

@cursor
cursor Bot force-pushed the codex/sync-20260725-l6-grouping-polish-daf2 branch from cd8bb31 to 9d696af Compare July 25, 2026 09:09
@cursor
cursor Bot force-pushed the codex/sync-20260725-l7-snooze-late-daf2 branch from c5bfaff to abed4de Compare July 25, 2026 09:09
@cursor
cursor Bot force-pushed the codex/sync-20260725-l6-grouping-polish-daf2 branch from 9d696af to 2e9f062 Compare July 25, 2026 09:22
@cursor
cursor Bot force-pushed the codex/sync-20260725-l7-snooze-late-daf2 branch from bec79cc to 0c6d680 Compare July 25, 2026 09:22
@cursor
cursor Bot force-pushed the codex/sync-20260725-l6-grouping-polish-daf2 branch from 2e9f062 to 5f5d894 Compare July 25, 2026 09:26
@cursor
cursor Bot force-pushed the codex/sync-20260725-l7-snooze-late-daf2 branch from 0c6d680 to 6ee0847 Compare July 25, 2026 09:26
@cursor
cursor Bot force-pushed the codex/sync-20260725-l6-grouping-polish-daf2 branch from 5f5d894 to 3430790 Compare July 25, 2026 09:36
@cursor
cursor Bot force-pushed the codex/sync-20260725-l7-snooze-late-daf2 branch from 6ee0847 to 546c056 Compare July 25, 2026 09:36
@cursor
cursor Bot force-pushed the codex/sync-20260725-l6-grouping-polish-daf2 branch from 3430790 to a8bf47e Compare July 25, 2026 09:42
@cursor
cursor Bot force-pushed the codex/sync-20260725-l7-snooze-late-daf2 branch from 546c056 to 93fefe9 Compare July 25, 2026 09:42
@cursor
cursor Bot force-pushed the codex/sync-20260725-l6-grouping-polish-daf2 branch from a8bf47e to a541930 Compare July 25, 2026 09:48
@cursor
cursor Bot force-pushed the codex/sync-20260725-l7-snooze-late-daf2 branch from 93fefe9 to e4eba2b Compare July 25, 2026 09:48
@cursor
cursor Bot force-pushed the codex/sync-20260725-l6-grouping-polish-daf2 branch from a541930 to bc182d4 Compare July 25, 2026 10:00
@cursor
cursor Bot force-pushed the codex/sync-20260725-l7-snooze-late-daf2 branch from e4eba2b to fee7a54 Compare July 25, 2026 10:00
@cursor
cursor Bot force-pushed the codex/sync-20260725-l6-grouping-polish-daf2 branch from bc182d4 to 8a7286f Compare July 25, 2026 10:04
@cursor
cursor Bot force-pushed the codex/sync-20260725-l7-snooze-late-daf2 branch from fee7a54 to 352772a Compare July 25, 2026 10:04
@cursor
cursor Bot force-pushed the codex/sync-20260725-l6-grouping-polish-daf2 branch from 8a7286f to 022a22e Compare July 25, 2026 10:11
@cursor
cursor Bot force-pushed the codex/sync-20260725-l7-snooze-late-daf2 branch from 352772a to c8cba99 Compare July 25, 2026 10:11
@cursor
cursor Bot force-pushed the codex/sync-20260725-l6-grouping-polish-daf2 branch from 022a22e to 4ff5f4f Compare July 25, 2026 10:16
@cursor
cursor Bot force-pushed the codex/sync-20260725-l7-snooze-late-daf2 branch from c8cba99 to 9550391 Compare July 25, 2026 10:16
@cursor
cursor Bot force-pushed the codex/sync-20260725-l6-grouping-polish-daf2 branch from 4ff5f4f to 7280a5b Compare July 25, 2026 10:22
@cursor
cursor Bot force-pushed the codex/sync-20260725-l7-snooze-late-daf2 branch from 9550391 to 8999239 Compare July 25, 2026 10:22
@cursor
cursor Bot force-pushed the codex/sync-20260725-l6-grouping-polish-daf2 branch from 7280a5b to 70796b6 Compare July 25, 2026 10:31
@cursor
cursor Bot force-pushed the codex/sync-20260725-l7-snooze-late-daf2 branch from 9dff3b3 to 414665c Compare July 25, 2026 11:03
@cursor
cursor Bot force-pushed the codex/sync-20260725-l6-grouping-polish-daf2 branch from 6a463a4 to 669de38 Compare July 25, 2026 11:07
@cursor
cursor Bot force-pushed the codex/sync-20260725-l7-snooze-late-daf2 branch from 414665c to d6ec630 Compare July 25, 2026 11:08
@cursor
cursor Bot force-pushed the codex/sync-20260725-l6-grouping-polish-daf2 branch from 669de38 to 2819489 Compare July 25, 2026 11:13
@cursor
cursor Bot force-pushed the codex/sync-20260725-l7-snooze-late-daf2 branch from d6ec630 to bf87160 Compare July 25, 2026 11:14
t3dotgg and others added 20 commits July 25, 2026 11:24
…losed PR (pingdotgg#4309)

Co-authored-by: Claude Fable 5 <noreply@anthropic.com>
(cherry picked from commit 193e3c6)
Co-authored-by: codex <codex@users.noreply.github.com>
(cherry picked from commit 67a7b1a)
…otgg#4411)

Co-authored-by: Claude Fable 5 <noreply@anthropic.com>
(cherry picked from commit 2f41c07)
Co-authored-by: Claude Fable 5 <noreply@anthropic.com>
(cherry picked from commit fc3f78f)
…otgg#4414)

Co-authored-by: Claude Fable 5 <noreply@anthropic.com>
(cherry picked from commit 6b9a598)
…tgg#4413)

Co-authored-by: Claude Fable 5 <noreply@anthropic.com>
(cherry picked from commit bb38c33)
Co-authored-by: Claude Fable 5 <noreply@anthropic.com>
Co-authored-by: maria <maria@kuuro.net>
(cherry picked from commit 202e560)
(cherry picked from commit 5d17354)

Co-authored-by: aaditagrawal <aaditagrawal@users.noreply.github.com>
…g#4450)

Co-authored-by: codex <codex@users.noreply.github.com>
(cherry picked from commit f7cc776)
Co-authored-by: codex <codex@users.noreply.github.com>
(cherry picked from commit a7ee309)
Co-authored-by: codex <codex@users.noreply.github.com>
(cherry picked from commit ece0508)
Co-authored-by: Claude Opus 5 (1M context) <noreply@anthropic.com>
Co-authored-by: Theo Browne <me@t3.gg>
(cherry picked from commit 41a430a)
…dotgg#4488)

Co-authored-by: Claude Opus 5 (1M context) <noreply@anthropic.com>
(cherry picked from commit 5719e8a)
Keep fork-only medium-access in RuntimeMode alongside upstream Auto.
Update presentation maps and drop obsolete provider kind from slug helper.

Co-authored-by: aaditagrawal <aaditagrawal@users.noreply.github.com>
Keep WSL node-pty on bullseye glibc, pin releases to the fork, and stop
hard-requiring upstream relay/npm publish. Scope Auto vs Medium access by
provider, normalize carried modes on new threads, and fix Claude/Droid
type regressions from the restack.

Co-authored-by: aaditagrawal <aaditagrawal@users.noreply.github.com>
@cursor
cursor Bot force-pushed the codex/sync-20260725-l7-snooze-late-daf2 branch from bf87160 to 093e193 Compare July 25, 2026 11:25
@cursor
cursor Bot changed the base branch from codex/sync-20260725-l6-grouping-polish-daf2 to main July 25, 2026 11:25
Align patchedDependencies hashes (react-native-screens) and importer
entries with the current workspace patches so frozen CI installs succeed.

Co-authored-by: aaditagrawal <aaditagrawal@users.noreply.github.com>
@cursor
cursor Bot merged commit 2319aaa into main Jul 25, 2026
12 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

size:XXL 1,000+ effective changed lines (test files excluded in mixed PRs). vouch:trusted PR 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