Skip to content

fix(desktop): keep Work chat ticks, menus, and pending model picks consistent - #1201

Merged
arul28 merged 3 commits into
mainfrom
ade/chat-tick-consistency
Sep 2, 2026
Merged

fix(desktop): keep Work chat ticks, menus, and pending model picks consistent#1201
arul28 merged 3 commits into
mainfrom
ade/chat-tick-consistency

Conversation

@arul28

@arul28 arul28 commented Sep 1, 2026

Copy link
Copy Markdown
Owner

Problem

Work chats shared one AgentChatPane across switches, so a composer model pick that had not been sent yet could skip hydrate on the next chat and stamp that chat with the wrong model. Session-list hide lived in the chat header, and Jump To Latest still used the old pill copy.

Cause

Pending-model skip compared composer vs session model ids with no session identity, so any mismatch on a different chat looked like an in-progress handoff.

Change and boundary

Pending model, reasoning, Fast Mode, and slash-command fetches stay local until Send and are scoped to the chat that picked them. Hide sessions sits in the session-list toolbar (collapsed recover rail on TerminalsPage). Jump To Latest uses title-case copy. model_handoff still records on Send; iOS maps it to a visible system notice; the TUI already prints [model] from → to. Overlay composer/scroll work is not in this PR.

Verification

  • apps/desktop vitest: 665 passed across AgentChatPane, AgentChatMessageList, SessionListPane, TerminalsPage, WorkViewArea, WorkSurfaceHeader, machineIdentity
  • Focused handoff regressions after rebase onto origin/main: 4 passed (does not carry a pending model pick onto another locked chat, keeps reasoning changes local until Send while a model handoff is pending, loads slash commands for the pending model from the lane, not the committed session, keeps model handoff local until the next message is sent)
  • apps/ade-cli format.test.ts: 71 passed
  • xcrun swiftc -parse on the four iOS event files plus ADETests.swift

Authored with Cursor Grok 4.6 via ADE.

ADE   Open in ADE  ·  ade/chat-tick-consistency branch  ·  PR #1201

@vercel

vercel Bot commented Sep 1, 2026

Copy link
Copy Markdown

The latest updates on your projects. Learn more about Vercel for GitHub.

1 Skipped Deployment
Project Deployment Actions Updated
ade Ignored Ignored Preview Sep 1, 2026 11:47pm UTC

@coderabbitai

coderabbitai Bot commented Sep 1, 2026

Copy link
Copy Markdown

Warning

Review limit reached

Next included review available in 33 minutes.

Check out review usage here.

View limit details

Limit details: You’ve used the included review currently available.

You've used all free OSS reviews for now. Wait for the free limit to reset to keep reviewing this public repository.

Learn how review limits work.

Review configuration:

⚙️ Run configuration

Configuration used: Path: .coderabbit.yaml

Review profile: CHILL

Plan: Team

Run ID: a9fb2113-2b1d-4347-8c8a-6990d495c0bc

📥 Commits

Reviewing files that changed from the base of the PR and between 68c0fab and 946f060.

⛔ Files ignored due to path filters (5)
  • docs/features/chat/README.md is excluded by !docs/**
  • docs/features/chat/composer-and-ui.md is excluded by !docs/**
  • docs/features/chat/transcript-and-turns.md is excluded by !docs/**
  • docs/features/terminals-and-sessions/README.md is excluded by !docs/**
  • docs/features/terminals-and-sessions/ui-surfaces.md is excluded by !docs/**
📒 Files selected for processing (49)
  • apps/ade-cli/src/tuiClient/__tests__/format.test.ts
  • apps/ade-cli/src/tuiClient/format.ts
  • apps/desktop/src/main/services/chat/agentChatService.test.ts
  • apps/desktop/src/main/services/chat/agentChatService.ts
  • apps/desktop/src/main/services/chat/chatTranscriptEntries.ts
  • apps/desktop/src/main/services/sessions/chatSessionProjection.test.ts
  • apps/desktop/src/main/services/sessions/chatSessionProjection.ts
  • apps/desktop/src/renderer/components/chat/AgentChatMessageList.test.tsx
  • apps/desktop/src/renderer/components/chat/AgentChatMessageList.tsx
  • apps/desktop/src/renderer/components/chat/AgentChatPane.test.tsx
  • apps/desktop/src/renderer/components/chat/AgentChatPane.tsx
  • apps/desktop/src/renderer/components/chat/ChatUserMinimap.test.tsx
  • apps/desktop/src/renderer/components/chat/ChatUserMinimap.tsx
  • apps/desktop/src/renderer/components/chat/chatUserMinimap.logic.test.ts
  • apps/desktop/src/renderer/components/chat/chatUserMinimap.logic.ts
  • apps/desktop/src/renderer/components/lanes/LaneContextMenu.tsx
  • apps/desktop/src/renderer/components/lanes/LanesPage.tsx
  • apps/desktop/src/renderer/components/lanes/laneContextMenuItems.tsx
  • apps/desktop/src/renderer/components/terminals/CliSessionWorkSurfaceHeader.tsx
  • apps/desktop/src/renderer/components/terminals/LaneActionsSubmenu.tsx
  • apps/desktop/src/renderer/components/terminals/SessionCard.test.tsx
  • apps/desktop/src/renderer/components/terminals/SessionCard.tsx
  • apps/desktop/src/renderer/components/terminals/SessionContextMenu.test.tsx
  • apps/desktop/src/renderer/components/terminals/SessionContextMenu.tsx
  • apps/desktop/src/renderer/components/terminals/SessionListPane.test.tsx
  • apps/desktop/src/renderer/components/terminals/SessionListPane.tsx
  • apps/desktop/src/renderer/components/terminals/TerminalsPage.test.tsx
  • apps/desktop/src/renderer/components/terminals/TerminalsPage.tsx
  • apps/desktop/src/renderer/components/terminals/WorkViewArea.test.tsx
  • apps/desktop/src/renderer/components/terminals/WorkViewArea.tsx
  • apps/desktop/src/renderer/components/terminals/useWorkLaneContextMenu.test.tsx
  • apps/desktop/src/renderer/components/terminals/useWorkLaneContextMenu.tsx
  • apps/desktop/src/renderer/components/ui/MenuSubmenu.tsx
  • apps/desktop/src/renderer/components/ui/OpenInSubmenu.tsx
  • apps/desktop/src/renderer/components/work/WorkHeaderPaneToggles.tsx
  • apps/desktop/src/renderer/components/work/WorkSurfaceHeader.test.tsx
  • apps/desktop/src/renderer/components/work/WorkSurfaceHeader.tsx
  • apps/desktop/src/renderer/hooks/useStartChatInLane.ts
  • apps/desktop/src/renderer/lib/workDraft.test.ts
  • apps/desktop/src/renderer/lib/workDraft.ts
  • apps/desktop/src/shared/machineIdentity.test.ts
  • apps/desktop/src/shared/machineIdentity.ts
  • apps/desktop/src/shared/types/chat.ts
  • apps/desktop/src/shared/types/sessions.ts
  • apps/ios/ADE/Models/RemoteModels.swift
  • apps/ios/ADE/Views/Work/WorkEventMapping.swift
  • apps/ios/ADE/Views/Work/WorkModels.swift
  • apps/ios/ADE/Views/Work/WorkTranscriptParser.swift
  • apps/ios/ADETests/ADETests.swift

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.

arul28 and others added 3 commits September 1, 2026 19:47
Same-branch chats share one history tick, session menus stay glanceable and machine-aware, and a growing composer no longer unpins a thread that was already at the bottom.

Co-authored-by: Cursor <cursoragent@cursor.com>
A composer model change was treated as pending whenever it differed from the session, so switching Work chats could skip hydrate and stamp the wrong thread. Scope the deferral to the chat that picked it, gate reasoning/fast/slash commands the same way, and keep Hide sessions in the list pane.

Co-authored-by: Cursor <cursoragent@cursor.com>
The live OpenCode stream honors AbortSignal, so a promptAsync rejection
must wake the test generator instead of hanging until timeout.

Co-authored-by: Cursor <cursoragent@cursor.com>
@arul28
arul28 force-pushed the ade/chat-tick-consistency branch from e5ee56a to 946f060 Compare September 1, 2026 23:47
@arul28
arul28 merged commit 3b0a6dc into main Sep 2, 2026
39 checks passed
@arul28
arul28 deleted the ade/chat-tick-consistency branch September 2, 2026 00:11
arul28 added a commit that referenced this pull request Sep 2, 2026
Share one composer model allowlist between picker props and onModelChange, and drive the session identity menu from a single canRename flag after rebasing onto #1201.

Co-authored-by: Cursor <cursoragent@cursor.com>
arul28 added a commit that referenced this pull request Sep 2, 2026
Share one composer model allowlist between picker props and onModelChange, and drive the session identity menu from a single canRename flag after rebasing onto #1201.

Co-authored-by: Cursor <cursoragent@cursor.com>
arul28 added a commit that referenced this pull request Sep 2, 2026
…name (#1203)

* fix(desktop): send Cursor Cloud model params and keep Cursor's agent name

Problem: cloud launches dropped the chosen reasoning/fast-mode params, Send to Cloud ignored CLI drafts, and ADE kept renaming cloud chats while Cursor already named them.

Cause: ADE sent only model.id, several title writers treated cloud chats like local sessions, and Cursor one-shots called Agent.create in the host.

Change and boundary: fail-closed verified model.params on both create paths, restore the cloud agents panel, route Cursor one-shots through the SDK worker pool, and make Cursor the name authority. Does not bring cloud agents local, and does not fix the 1.2.69 hook.sock path (#1195) or Codex one-shots blocked by a dead local unityMCP.

Verification: desktop typecheck and lint clean; 21 affected test files 1879 passed / 1 skipped; CLI typecheck clean; swiftc -parse on touched iOS files.
Co-authored-by: Cursor <cursoragent@cursor.com>

* ship: apply initial quality revalidation

Share one composer model allowlist between picker props and onModelChange, and drive the session identity menu from a single canRename flag after rebasing onto #1201.

Co-authored-by: Cursor <cursoragent@cursor.com>

* ship: apply post-rebase quality revalidation

Fail closed when cloud controls arrive without a model, match requested reasoning and speed values rather than parameter presence, re-read Cursor's name after the first visible turn, and keep iOS rename guards on the initial session.

Co-authored-by: Cursor <cursoragent@cursor.com>

* ship: iteration 1 — address CodeRabbit catalog, draft, and iOS rename findings

Resolve cloud model selection against the probe rows rather than another key's cache, treat blank reasoning as no control, keep composer draft hydration stable across machine switches, and hide iOS Rename from chat summaries that already carry Cursor ownership.

Co-authored-by: Cursor <cursoragent@cursor.com>

* ship: iteration 2 — give desktop eslint enough heap in CI

lint-desktop aborted twice at the default ~4GB Node heap. Raise the lint script to 8GB so the same command can finish on GitHub runners.

Co-authored-by: Cursor <cursoragent@cursor.com>

---------

Co-authored-by: Cursor <cursoragent@cursor.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant