Skip to content

Claude Sonnet 5 Models#718

Merged
arul28 merged 17 commits into
mainfrom
ade/start-skill-work-then-run-53aba835
Jul 7, 2026
Merged

Claude Sonnet 5 Models#718
arul28 merged 17 commits into
mainfrom
ade/start-skill-work-then-run-53aba835

Conversation

@arul28

@arul28 arul28 commented Jul 7, 2026

Copy link
Copy Markdown
Owner

Summary

Updates ADE's Claude model catalog for the Anthropic Sonnet 5 migration: Sonnet now invokes claude-sonnet-5, Sonnet 4.6 is removed from selectable rows, and retired aliases normalize forward.

What Changed

  • Reordered Claude picker/catalog rows across desktop, mobile, and TUI as Fable, Opus 4.8, Sonnet 5, Haiku, then Opus 4.7 1M.
  • Removed the basic Opus 4.7 selectable row while preserving Opus 4.7 1M and forwarding old basic Opus aliases to Opus 4.8.
  • Normalized OpenCode and Droid runtime discovery so old Sonnet 4.6/basic Opus 4.7 rows cannot reappear from live catalogs.
  • Updated Claude CLI/runtime model resolution, usage pricing aliases, mobile model labels, voice previews, docs, and regression coverage.

Validation

  • node scripts/validate-docs.mjs
  • npm --prefix apps/desktop exec -- vitest run src/shared/modelRegistry.test.ts src/shared/modelProfiles.test.ts src/main/services/ai/claudeModelUtils.test.ts src/main/services/opencode/openCodeInventory.test.ts src/main/services/chat/droidModelsDiscovery.test.ts src/renderer/lib/modelOptions.test.ts src/renderer/components/shared/ModelPicker/modelCatalog.test.ts src/renderer/components/shared/ModelPicker/modelOrdering.test.ts src/renderer/components/shared/ModelPicker/ModelPicker.test.tsx src/renderer/components/chat/AgentChatPane.test.tsx src/renderer/components/chat/AgentChatComposer.test.tsx src/renderer/components/chat/AgentChatMessageList.test.tsx src/renderer/components/chat/ModelPickerPendingInput.test.tsx
  • npm --prefix apps/desktop run typecheck
  • npm --prefix apps/desktop run lint (warnings only)
  • npm --prefix apps/desktop run build
  • npm --prefix apps/ade-cli run typecheck
  • npm --prefix apps/ade-cli run test
  • xcrun swiftc -parse apps/ios/ADE/Views/Work/WorkModelCatalog.swift apps/ios/ADE/Views/Hub/HubComposerDrawer.swift apps/ios/ADE/Views/Work/WorkNewChatScreen.swift apps/ios/ADE/Views/Components/ADEDesignSystem.swift apps/ios/ADETests/ADETests.swift
  • xcodebuild test -project apps/ios/ADE.xcodeproj -scheme ADE -destination id=2107A402-C2A7-4323-AF26-74A0AC406C44 -derivedDataPath build/DerivedData-ios-model-validation -skipPackagePluginValidation -only-testing:ADETests/ADETests/testMobileComposerReasoningTiersMirrorDesktopRegistry -only-testing:ADETests/ADETests/testDynamicWorkModelCatalogBuildsFromLiveHostModels -only-testing:ADETests/ADETests/testWorkModelCatalogFiltersCursorModelsByChatAndCliAvailability -only-testing:ADETests/ADETests/testWorkResolveCliProviderMapsModelFamiliesLikeDesktop -only-testing:ADETests/ADETests/testWorkTurnSeparatorsUsePerTurnModelAfterModelSwitch -only-testing:ADETests/ADETests/testPendingModelSelectionDecodesAgentBriefingWithoutSuggestedRoute

Risks

  • Legacy Sonnet 4.6 and basic Opus 4.7 ids are still accepted only as compatibility aliases so existing saved sessions can resolve forward.
  • Cursor-provided dynamic model ids are left as runtime-owned rows, but visible ADE-owned Claude catalog rows and known local runtime catalogs now use Sonnet 5.

ADE   Open in ADE  ·  ade/start-skill-work-then-run-53aba835 branch  ·  PR #718

Summary by CodeRabbit

  • New Features
    • Updated Claude model naming and defaults across chat, automations, orchestration, desktop UI, and mobile to use Claude Sonnet 5 and Opus 4.8 labeling.
    • Updated model pickers, session context, and UI previews to reflect the revised model catalog.
  • Bug Fixes
    • Corrected model alias resolution and fallback routing so sessions, retries, and orchestrated launches consistently resolve to the expected Claude models (including Opus/Sonnet migrations).
    • Updated built-in token pricing/alias mapping and pricing display to match the newer Claude Sonnet 5 tiering.

Greptile Summary

This PR updates ADE for the Claude Sonnet 5 model migration. The main changes are:

  • Claude catalog rows now use Sonnet 5 and Opus 4.8 naming.
  • Retired Sonnet 4.6 and basic Opus aliases forward to current Claude models.
  • OpenCode and Droid discovery now normalize retired live-catalog rows.
  • Desktop, TUI, iOS, docs, voice text, pricing, and tests were updated.

Confidence Score: 5/5

This looks safe to merge.

No blocking issues found in the changed code.

T-Rex T-Rex Logs

What T-Rex did

  • T-Rex ran the desktop React model validation and the run completed with exit code 0 after 37.80 seconds.
  • T-Rex inspected the Desktop React Model Validation Log artifact to review the run details.
  • T-Rex verified the validation contract by cross-checking the Vitest summary in the log and confirming the exit code and runtime match the reported values.

View all artifacts

T-Rex Ran code and verified through T-Rex

Important Files Changed

Filename Overview
apps/desktop/src/main/services/opencode/openCodeInventory.ts Normalizes retired Anthropic OpenCode rows to current model ids with canonical metadata.
apps/desktop/src/main/services/chat/droidModelsDiscovery.ts Normalizes Droid bare and custom Claude aliases while preserving custom proxy metadata.
apps/desktop/src/shared/modelRegistry.ts Updates the Claude registry and dynamic descriptor builders for the Sonnet 5 migration.
apps/desktop/src/shared/claudeCliModels.ts Maps Claude CLI aliases to the current full runtime model ids.
apps/desktop/src/main/services/chat/agentChatService.ts Updates Claude turn model resolution for migrated Sonnet and Opus runtime ids.

Reviews (16): Last reviewed commit: "ship: preserve custom droid limits" | Re-trigger Greptile

@cursor

cursor Bot commented Jul 7, 2026

Copy link
Copy Markdown
Contributor

Bugbot is not enabled for your account, so this pull request was not reviewed.

Enable Bugbot in the Cursor dashboard to get automatic reviews on future PRs.

@vercel

vercel Bot commented Jul 7, 2026

Copy link
Copy Markdown

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

1 Skipped Deployment
Project Deployment Actions Updated (UTC)
ade Ignored Ignored Preview Jul 7, 2026 8:39pm

@coderabbitai

coderabbitai Bot commented Jul 7, 2026

Copy link
Copy Markdown
📝 Walkthrough

Walkthrough

This PR updates Claude model IDs, aliases, and fallback defaults across desktop, iOS, and ade-cli. It also refreshes model discovery, catalog normalization, UI labels, CLI behavior, and related tests to use Sonnet 5 and Opus 4.8 canonical forms.

Changes

Claude model canonicalization and defaults

Layer / File(s) Summary
Shared registry and alias rules
apps/desktop/src/shared/*, apps/desktop/src/main/services/usage/usagePricing.ts, apps/desktop/src/main/services/ai/claudeModelUtils.ts
Shared Claude registry entries, alias maps, runtime model refs, pricing aliases, and default service-model fallbacks now use Sonnet 5, Opus 4.8, and canonical Claude IDs.
Desktop backend defaults and routing
apps/desktop/src/main/services/ai/*, apps/desktop/src/main/services/automations/*, apps/desktop/src/main/services/orchestration/*, apps/desktop/src/main/services/conflicts/*, apps/desktop/src/main/services/prs/*, apps/desktop/src/main/services/cto/*, apps/desktop/src/main/services/feedback/*
Desktop service defaults and routing fallbacks now select Sonnet 5 or Opus 4.8 across task routing, orchestration, automation, conflict resolution, feedback, and PR merge flows.

Model discovery and session flows

Layer / File(s) Summary
Discovery normalization
apps/desktop/src/main/services/chat/droidModelsDiscovery.ts, apps/desktop/src/main/services/opencode/openCodeInventory.ts, related tests
Droid and OpenCode discovery now normalize legacy model IDs, prefer canonical descriptors, and carry updated display names, capabilities, and tier metadata.
Chat sessions and agent flows
apps/desktop/src/main/services/chat/agentChatService.ts, apps/desktop/src/main/services/chat/agentChatService.test.ts
Agent chat session creation, handoffs, warmups, refusals, fast mode, and Droid thinking-model coverage are updated to the new Claude model IDs.

UI, CLI, and platform fixtures

Layer / File(s) Summary
Desktop UI, mocks, and picker tests
apps/desktop/src/renderer/browserMock.ts, apps/desktop/src/renderer/components/*, apps/desktop/src/renderer/lib/*, apps/desktop/src/shared/*
Renderer mocks, composer panes, picker helpers, chat labels, and shared picker tests now use Sonnet 5 and Opus 4.8 labels and IDs.
ADE CLI and TUI tests
apps/ade-cli/src/*, apps/desktop/resources/voice/voice-glossary.json
CLI RPC, TUI, model-picker, and voice glossary fixtures are updated to the newer Claude model names.
iOS catalog, views, and tests
apps/ios/ADE/*, apps/ios/ADETests/ADETests.swift, apps/ios/ADEWidgets/ADEAgentActivityWidget.swift
iOS model catalog, composer screens, preview data, design system mappings, and ADE tests are updated to the new Claude model IDs and labels.

Estimated code review effort: 4 (Complex) | ~60 minutes

Possibly related PRs

  • arul28/ADE#319: Related model-picker store behavior and tests overlap with the updated favorite/recents fixtures here.
  • arul28/ADE#493: Related model-picker store and selection behavior overlaps with the updated Claude model ID expectations here.
  • arul28/ADE#588: Related iOS composer fast-mode and model-list updates overlap with the same work-composer paths.
  • arul28/ADE#629: Related Claude auth prompt/error-string coverage overlaps with the updated Sonnet 5 message assertions here.

Suggested labels: desktop, ios

🚥 Pre-merge checks | ✅ 4 | ❌ 1

❌ Failed checks (1 inconclusive)

Check name Status Explanation Resolution
Title check ❓ Inconclusive The title is related to the Sonnet 5 migration, but it is too generic to convey the main change clearly. Use a more specific title, such as “Migrate Claude model catalogs and defaults to Sonnet 5.”
✅ Passed checks (4 passed)
Check name Status Explanation
Docstring Coverage ✅ Passed No functions found in the changed files to evaluate docstring coverage. Skipping docstring coverage check.
Linked Issues check ✅ Passed Check skipped because no linked issues were found for this pull request.
Out of Scope Changes check ✅ Passed Check skipped because no linked issues were found for this pull request.
Description Check ✅ Passed Check skipped - CodeRabbit’s high-level summary is enabled.
✨ Finishing Touches
📝 Generate docstrings
  • Create stacked PR
  • Commit on current branch
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch ade/start-skill-work-then-run-53aba835

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.

Comment thread apps/desktop/src/main/services/chat/droidModelsDiscovery.ts Outdated
Comment thread apps/desktop/src/main/services/opencode/openCodeInventory.ts Outdated

@coderabbitai coderabbitai 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.

Actionable comments posted: 2

🧹 Nitpick comments (1)
apps/ios/ADE/Views/Hub/HubComposerDrawer.swift (1)

1092-1106: 📐 Maintainability & Code Quality | 🔵 Trivial | ⚡ Quick win

Dead fallback cases in hubPrettyModelNameworkKnownModelDisplayName already handles them.

workKnownModelDisplayName(trimmed) (WorkModelCatalog.swift) is checked first and already returns a match for the exact literals "opus", "opus[1m]", "opus-1m", "sonnet", and "haiku" (case-insensitive, trimmed identically). The local switch lower { case "opus": ... case "sonnet": ... } block at Lines 1100-1102 can therefore never execute — it's unreachable. This PR even edits these unreachable strings (Opus 4.7→4.8, Sonnet 4.6→5), which only works because the real source of truth is elsewhere; if the two ever diverge, only the shared function's answer matters, and nobody will notice the local one is stale.

The same dead pattern also exists in the sibling prettyModelName/prettyNewChatModelName/prettyWorkChatModelName helpers (WorkChatComposerAndInputViews.swift, WorkNewChatScreen.swift, WorkTimelineHelpers.swift), all of which duplicate the same opus/sonnet/haiku fallback that workKnownModelDisplayName already fully covers.

♻️ Proposed cleanup
   let lower = trimmed.lowercased()
-  switch lower {
-  case "opus": return "Claude Opus 4.8 1M"
-  case "opus[1m]", "opus-1m": return "Claude Opus 4.7 1M"
-  case "sonnet": return "Claude Sonnet 5"
-  case "haiku": return "Claude Haiku 4.5"
-  default: break
-  }
   if lower.hasPrefix("claude-") {

As per path instructions, apps/ios/**/*.swift should be checked for "Swift conventions".

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@apps/ios/ADE/Views/Hub/HubComposerDrawer.swift` around lines 1092 - 1106,
Remove the unreachable fallback mapping in hubPrettyModelName by relying on
workKnownModelDisplayName(trimmed) as the single source of truth for the known
literals. Delete the dead switch cases for opus, opus[1m]/opus-1m, sonnet, and
haiku in HubComposerDrawer.swift, and then check the sibling helpers
prettyModelName, prettyNewChatModelName, and prettyWorkChatModelName for the
same duplicated fallback logic and remove those duplicates too so they stay
consistent with WorkModelCatalog.swift.

Source: Path instructions

🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

Inline comments:
In `@apps/ios/ADE/Views/Work/WorkNewChatScreen.swift`:
- Around line 794-796: The model label mapping in WorkNewChatScreen’s switch
case is incorrect for the bare opus alias, which is currently shown as the 1M
variant. Update the opus case to display the plain Claude Opus 4.8 name, and
keep opus[1m]/opus-1m mapped to the 1M label as they already are. Make sure the
labels in this model-name lookup stay consistent with the aliases used by
claudeCliModels.ts and the distinct entries referenced by ADEDesignSystem.swift.

In `@apps/ios/ADE/Views/Work/WorkPreviews.swift`:
- Around line 46-47: The preview fixtures use inconsistent modelId formats,
which can break model metadata lookup in preview/UI code. Update the
chatSummary, chatSummaryFixture, and transcript done event fixtures in
WorkPreviews to use the same prefixed Anthropic id format as the rest of the
preview data, so all paths resolve the same catalog entry and render
consistently.

---

Nitpick comments:
In `@apps/ios/ADE/Views/Hub/HubComposerDrawer.swift`:
- Around line 1092-1106: Remove the unreachable fallback mapping in
hubPrettyModelName by relying on workKnownModelDisplayName(trimmed) as the
single source of truth for the known literals. Delete the dead switch cases for
opus, opus[1m]/opus-1m, sonnet, and haiku in HubComposerDrawer.swift, and then
check the sibling helpers prettyModelName, prettyNewChatModelName, and
prettyWorkChatModelName for the same duplicated fallback logic and remove those
duplicates too so they stay consistent with WorkModelCatalog.swift.
🪄 Autofix (Beta)

Fix all unresolved CodeRabbit comments on this PR:

  • Push a commit to this branch (recommended)
  • Create a new PR with the fixes

ℹ️ Review info
⚙️ Run configuration

Configuration used: Path: .coderabbit.yaml

Review profile: CHILL

Plan: Pro

Run ID: a1689165-44e1-4024-811d-6cd006a507b6

📥 Commits

Reviewing files that changed from the base of the PR and between 8d514f1 and e8c4e3e.

⛔ Files ignored due to path filters (4)
  • docs/ARCHITECTURE.md is excluded by !docs/**
  • docs/features/chat/README.md is excluded by !docs/**
  • docs/features/chat/agent-routing.md is excluded by !docs/**
  • docs/features/sync-and-multi-device/ios-companion.md is excluded by !docs/**
📒 Files selected for processing (80)
  • apps/ade-cli/src/adeRpcServer.test.ts
  • apps/ade-cli/src/cli.test.ts
  • apps/ade-cli/src/headlessLinearServices.test.ts
  • apps/ade-cli/src/services/modelPickerStore.test.ts
  • apps/ade-cli/src/tuiClient/__tests__/RightPane.test.tsx
  • apps/ade-cli/src/tuiClient/__tests__/TerminalPane.test.tsx
  • apps/ade-cli/src/tuiClient/__tests__/adeApi.test.ts
  • apps/ade-cli/src/tuiClient/__tests__/appInput.test.ts
  • apps/ade-cli/src/tuiClient/__tests__/chatInfo.test.ts
  • apps/ade-cli/src/tuiClient/components/ModelPicker/modelPickerLayout.test.ts
  • apps/desktop/resources/voice/voice-glossary.json
  • apps/desktop/src/main/services/ai/aiIntegrationService.test.ts
  • apps/desktop/src/main/services/ai/aiIntegrationService.ts
  • apps/desktop/src/main/services/ai/claudeModelUtils.test.ts
  • apps/desktop/src/main/services/ai/claudeModelUtils.ts
  • apps/desktop/src/main/services/ai/providerTaskRunner.test.ts
  • apps/desktop/src/main/services/ai/tools/ctoOperatorTools.ts
  • apps/desktop/src/main/services/ai/tools/orchestrationTools.test.ts
  • apps/desktop/src/main/services/automations/automationService.ts
  • apps/desktop/src/main/services/chat/agentChatService.test.ts
  • apps/desktop/src/main/services/chat/agentChatService.ts
  • apps/desktop/src/main/services/chat/cursorModelsDiscovery.test.ts
  • apps/desktop/src/main/services/chat/droidModelsDiscovery.test.ts
  • apps/desktop/src/main/services/chat/droidModelsDiscovery.ts
  • apps/desktop/src/main/services/config/projectConfigService.test.ts
  • apps/desktop/src/main/services/conflicts/conflictService.test.ts
  • apps/desktop/src/main/services/cto/ctoStateService.ts
  • apps/desktop/src/main/services/feedback/feedbackReporterService.test.ts
  • apps/desktop/src/main/services/opencode/openCodeInventory.test.ts
  • apps/desktop/src/main/services/opencode/openCodeInventory.ts
  • apps/desktop/src/main/services/orchestration/orchestrationService.test.ts
  • apps/desktop/src/main/services/orchestration/runtimeProfile.ts
  • apps/desktop/src/main/services/prs/prMergeQueue.test.ts
  • apps/desktop/src/main/services/usage/usagePricing.ts
  • apps/desktop/src/main/services/usage/usageTrackingService.test.ts
  • apps/desktop/src/main/utils/terminalSessionSignals.test.ts
  • apps/desktop/src/renderer/browserMock.ts
  • apps/desktop/src/renderer/components/automations/RulesTab.tsx
  • apps/desktop/src/renderer/components/automations/TemplatesTab.tsx
  • apps/desktop/src/renderer/components/chat/AgentChatComposer.test.tsx
  • apps/desktop/src/renderer/components/chat/AgentChatMessageList.test.tsx
  • apps/desktop/src/renderer/components/chat/AgentChatPane.test.tsx
  • apps/desktop/src/renderer/components/chat/ModelPickerPendingInput.test.tsx
  • apps/desktop/src/renderer/components/cto/ctoUi.test.tsx
  • apps/desktop/src/renderer/components/lanes/useLaneWorkSessions.test.ts
  • apps/desktop/src/renderer/components/prs/shared/PrResolverLaunchControls.test.tsx
  • apps/desktop/src/renderer/components/prs/state/PrsContext.tsx
  • apps/desktop/src/renderer/components/settings/ChatAppearancePreview.tsx
  • apps/desktop/src/renderer/components/shared/ModelPicker/ModelPicker.test.tsx
  • apps/desktop/src/renderer/components/shared/ModelPicker/ReasoningEffortPicker.test.tsx
  • apps/desktop/src/renderer/components/shared/ModelPicker/modelCatalog.test.ts
  • apps/desktop/src/renderer/components/shared/ModelPicker/modelOrdering.test.ts
  • apps/desktop/src/renderer/components/shared/ModelPicker/modelPickerSearch.test.ts
  • apps/desktop/src/renderer/components/shared/providerModelSelectorGrouping.test.ts
  • apps/desktop/src/renderer/components/terminals/WorkViewArea.test.tsx
  • apps/desktop/src/renderer/components/terminals/cliLaunch.test.ts
  • apps/desktop/src/renderer/lib/claudeAuthPrompt.test.ts
  • apps/desktop/src/renderer/lib/modelOptions.test.ts
  • apps/desktop/src/shared/chatModelSwitching.test.ts
  • apps/desktop/src/shared/claudeCliModels.ts
  • apps/desktop/src/shared/modelProfiles.test.ts
  • apps/desktop/src/shared/modelProfiles.ts
  • apps/desktop/src/shared/modelRegistry.test.ts
  • apps/desktop/src/shared/modelRegistry.ts
  • apps/desktop/src/shared/types/config.ts
  • apps/desktop/src/shared/types/core.ts
  • apps/desktop/src/shared/types/models.ts
  • apps/ios/ADE/Resources/VoiceGlossary.json
  • apps/ios/ADE/Shared/ADESharedModels.swift
  • apps/ios/ADE/Views/Components/ADEDesignSystem.swift
  • apps/ios/ADE/Views/Cto/CtoIdentityEditor.swift
  • apps/ios/ADE/Views/Hub/HubComposerDrawer.swift
  • apps/ios/ADE/Views/Work/WorkChatComposerAndInputViews.swift
  • apps/ios/ADE/Views/Work/WorkChatHeaderAndMessageViews.swift
  • apps/ios/ADE/Views/Work/WorkModelCatalog.swift
  • apps/ios/ADE/Views/Work/WorkNewChatScreen.swift
  • apps/ios/ADE/Views/Work/WorkPreviews.swift
  • apps/ios/ADE/Views/Work/WorkTimelineHelpers.swift
  • apps/ios/ADETests/ADETests.swift
  • apps/ios/ADEWidgets/ADEAgentActivityWidget.swift

Comment on lines +794 to +796
case "opus": return "Claude Opus 4.8 1M"
case "opus[1m]", "opus-1m": return "Claude Opus 4.7 1M"
case "sonnet": return "Claude Sonnet 4.6"
case "sonnet": return "Claude Sonnet 5"

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

🎯 Functional Correctness | 🟠 Major | ⚡ Quick win

Bare "opus" mislabeled as "1M" — should be plain Opus 4.8.

Per claudeCliModels.ts, bare opus resolves to claude-opus-4-8 (the non-1M model), while the 1M context variant is the separately-aliased opus[1m]/opus-1mclaude-opus-4-7[1m] (correctly labeled "Claude Opus 4.7 1M" on the next line). ADEDesignSystem.swift's own modelColors/modelReasoningTiers treat claude-opus-4-8 and claude-opus-4-7-1m as distinct entries, confirming these are different models. Labeling bare opus as "Claude Opus 4.8 1M" misleads users into thinking they get the 1M-context variant.

🐛 Proposed fix
     switch lower {
-    case "opus": return "Claude Opus 4.8 1M"
+    case "opus": return "Claude Opus 4.8"
     case "opus[1m]", "opus-1m": return "Claude Opus 4.7 1M"
     case "sonnet": return "Claude Sonnet 5"
📝 Committable suggestion

‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.

Suggested change
case "opus": return "Claude Opus 4.8 1M"
case "opus[1m]", "opus-1m": return "Claude Opus 4.7 1M"
case "sonnet": return "Claude Sonnet 4.6"
case "sonnet": return "Claude Sonnet 5"
case "opus": return "Claude Opus 4.8"
case "opus[1m]", "opus-1m": return "Claude Opus 4.7 1M"
case "sonnet": return "Claude Sonnet 5"
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@apps/ios/ADE/Views/Work/WorkNewChatScreen.swift` around lines 794 - 796, The
model label mapping in WorkNewChatScreen’s switch case is incorrect for the bare
opus alias, which is currently shown as the 1M variant. Update the opus case to
display the plain Claude Opus 4.8 name, and keep opus[1m]/opus-1m mapped to the
1M label as they already are. Make sure the labels in this model-name lookup
stay consistent with the aliases used by claudeCliModels.ts and the distinct
entries referenced by ADEDesignSystem.swift.

Comment thread apps/ios/ADE/Views/Work/WorkPreviews.swift Outdated
@arul28 arul28 closed this Jul 7, 2026
@arul28 arul28 deleted the ade/start-skill-work-then-run-53aba835 branch July 7, 2026 16:20
@arul28 arul28 restored the ade/start-skill-work-then-run-53aba835 branch July 7, 2026 16:41
@arul28 arul28 reopened this Jul 7, 2026
@cursor

cursor Bot commented Jul 7, 2026

Copy link
Copy Markdown
Contributor

Bugbot is not enabled for your account, so this pull request was not reviewed.

Enable Bugbot in the Cursor dashboard to get automatic reviews on future PRs.

@arul28

arul28 commented Jul 7, 2026

Copy link
Copy Markdown
Owner Author

@codex review

Comment thread apps/desktop/src/main/services/chat/droidModelsDiscovery.ts Outdated
Comment thread apps/desktop/src/main/services/opencode/openCodeInventory.ts

@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: fb9125c9f4

ℹ️ 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 +269 to +273
"opus-4.7",
"opus-4-7",
"claude-opus-4-7",
"anthropic/claude-opus-4-7",
"anthropic/claude-opus-4-7-api",

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 the Opus 4.6 compatibility aliases

When a saved task route, config, or tool call still supplies claude-opus-4-6 or anthropic/claude-opus-4-6, those strings used to resolve through the removed basic Opus descriptor, but this replacement alias list only forwards the 4.7 spellings. getModelById/resolveModelAlias now return undefined for the 4.6 forms, so callers such as CTO spawnChat can treat the request as an OpenCode model instead of native Claude Opus 4.8; add the prior 4.6 aliases to this forwarding list.

Useful? React with 👍 / 👎.

Comment on lines +346 to +348
"claude-opus-4-7[1m]",
"claude-opus-4-7-1m",
"anthropic/claude-opus-4-7-1m",

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 Keep old Opus 1M aliases resolving to the 1M row

For existing sessions or configs that reference the previous claude-opus-4-6-1m, claude-opus-4-6[1m], or anthropic/claude-opus-4-6-1m aliases, this shortened alias list no longer resolves them even though the 1M row is still selectable. Those stale refs lose their descriptor and reasoning metadata during restore or model matching; carry the old 4.6 1M aliases forward to anthropic/claude-opus-4-7-1m.

Useful? React with 👍 / 👎.

@arul28

arul28 commented Jul 7, 2026

Copy link
Copy Markdown
Owner Author

@codex review

@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: e8d535b626

ℹ️ 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 +185 to +188
if (normalized === "claude-sonnet-4-6" || normalized === "sonnet-4-6") {
return {
modelId: "claude-sonnet-5",
displayName: "Claude Sonnet 5",

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 the provider's advertised OpenCode id

When a connected Anthropic OpenCode provider still reports claude-sonnet-4-6 but not claude-sonnet-5, this branch publishes opencode/anthropic/claude-sonnet-5 as selectable. The same descriptor's openCodeModelId is later sent by resolveOpenCodeModelSelection, so the prompt request names a model absent from the provider list ADE just received. Preserve the reported runtime id and use aliases/display metadata for migration, or only rewrite once the canonical row is present.

Useful? React with 👍 / 👎.

Comment on lines +249 to +250
if (id === "claude-sonnet-4-6" || id === "sonnet-4-6") {
return { ...row, id: "claude-sonnet-5", displayName: "Sonnet 5 (1.2x)" };

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 Keep Droid discovery runtime ids intact

When the Droid SDK/CLI reports only the legacy claude-sonnet-4-6 row, discovery now surfaces droid/claude-sonnet-5; ensureDroidSessionState and initial SDK settings send the descriptor's providerModelId as modelId, so ADE asks Droid for a model it did not advertise. Keep the discovered id as the runtime providerModelId and normalize only display/canonical lookup, or gate this rewrite on canonical availability.

Useful? React with 👍 / 👎.

WorkModelOption(id: "claude-fable-5-thinking-xhigh", displayName: "Claude Fable 5 Thinking XHigh", tier: .flagship, tagline: "Cursor-routed Fable", provider: "claude"),
WorkModelOption(id: "claude-4.6-sonnet-thinking", displayName: "Sonnet 4.6 · Thinking", tier: .reasoning, tagline: "Extended reasoning", provider: "claude"),
WorkModelOption(id: "claude-4.6-sonnet", displayName: "Sonnet 4.6", tier: .balanced, tagline: "Fast coding default", provider: "claude"),
WorkModelOption(id: "claude-sonnet-5", displayName: "Claude Sonnet 5", tier: .balanced, tagline: "Balanced · 1M context", provider: "claude"),

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 Use Cursor model ids in the Cursor fallback catalog

When the iOS picker is using the curated Cursor catalog before/without a host catalog, selecting this Cursor-tab row sends provider cursor with modelId: "claude-sonnet-5". Desktop resolves that id through the Claude registry alias before provider-specific Cursor lookup, so the session is silently routed to Claude instead of Cursor. Use the Cursor SDK id (desktop discovery still advertises claude-4.6-sonnet-* with a Sonnet 5 label) or prefix it as a Cursor descriptor.

Useful? React with 👍 / 👎.

@arul28

arul28 commented Jul 7, 2026

Copy link
Copy Markdown
Owner Author

@codex review

@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: 89b577eae8

ℹ️ 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 +190 to +193
modelId: hasCanonicalSonnet ? "claude-sonnet-5" : modelId,
displayName: "Claude Sonnet 5",
contextWindow: 1_000_000,
maxOutputTokens: 128_000,

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 legacy OpenCode limits when not remapping

When an OpenCode Anthropic catalog only advertises the retired id (for example an older catalog with claude-sonnet-4-6 but no claude-sonnet-5), this branch keeps sending the legacy runtime id via modelId, but still reports Sonnet 5's 1M/128k limits. That makes the descriptor look safe for much larger prompts than the actual preserved legacy model accepted by OpenCode, so prompt packing/cost UI can overrun the model instead of falling back to the normal 200k/32k defaults until the canonical row is present. The same pattern appears in the Opus fallback branch just below.

Useful? React with 👍 / 👎.

Comment thread apps/desktop/src/main/services/chat/droidModelsDiscovery.ts Outdated
@arul28

arul28 commented Jul 7, 2026

Copy link
Copy Markdown
Owner Author

@codex review

@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: 7cd88e1ce2

ℹ️ 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 380 to 382
const row = normalizeDroidDiscoveredModel(rawRow);
const trimmed = String(row.id ?? "").trim();
if (!trimmed || seen.has(trimmed)) continue;

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 Prefer canonical Droid rows after alias normalization

When the Droid SDK reports both a retired id and its replacement with the retired row first, this normalizes the retired row to the canonical id and the following seen.has(trimmed) skip drops the real canonical row. In that migration catalog shape, droid/claude-sonnet-5 or droid/claude-opus-4-8 is built from the stale row's reasoning/capability metadata, so newer reasoning tiers or vision/tool flags advertised only on the canonical row never reach the picker or launch controls.

Useful? React with 👍 / 👎.

Comment thread apps/desktop/src/main/services/chat/droidModelsDiscovery.ts Outdated
@cursor

cursor Bot commented Jul 7, 2026

Copy link
Copy Markdown
Contributor

Bugbot is not enabled for your account, so this pull request was not reviewed.

Enable Bugbot in the Cursor dashboard to get automatic reviews on future PRs.

@arul28

arul28 commented Jul 7, 2026

Copy link
Copy Markdown
Owner Author

@codex review

@cursor

cursor Bot commented Jul 7, 2026

Copy link
Copy Markdown
Contributor

Bugbot is not enabled for your account, so this pull request was not reviewed.

Enable Bugbot in the Cursor dashboard to get automatic reviews on future PRs.

@arul28

arul28 commented Jul 7, 2026

Copy link
Copy Markdown
Owner Author

@codex review

Comment thread apps/desktop/src/main/services/opencode/openCodeInventory.ts Outdated

@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: 24ba8872d1

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

WorkModelOption(id: "claude-fable-5-thinking-xhigh", displayName: "Claude Fable 5 Thinking XHigh", tier: .flagship, tagline: "Cursor-routed Fable", provider: "claude"),
WorkModelOption(id: "claude-4.6-sonnet-thinking", displayName: "Sonnet 4.6 · Thinking", tier: .reasoning, tagline: "Extended reasoning", provider: "claude"),
WorkModelOption(id: "claude-4.6-sonnet", displayName: "Sonnet 4.6", tier: .balanced, tagline: "Fast coding default", provider: "claude"),
WorkModelOption(id: "cursor/claude-4.6-sonnet-medium", displayName: "Claude Sonnet 5", tier: .balanced, tagline: "Balanced · 1M context", provider: "cursor"),

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

P3 Badge Preserve the Sonnet label after selecting Cursor

When the iOS picker uses this curated Cursor row, WorkNewChatScreen and HubInlineComposer persist modelId = option.id but render the chip via prettyNewChatModelName(modelId) / hubPrettyModelName(modelId), which only recognize known Claude ids or strings starting with claude-. Because this new id starts with cursor/, selecting the displayed “Claude Sonnet 5” row leaves the composer showing the raw cursor/claude-4.6-sonnet-medium id instead of the Sonnet 5 label until a host catalog row supplies a different display path.

Useful? React with 👍 / 👎.

@arul28

arul28 commented Jul 7, 2026

Copy link
Copy Markdown
Owner Author

@codex review

@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: 734cd04497

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

function normalizeDroidDiscoveredModel(row: DroidExecHelpModelRow): DroidExecHelpModelRow {
const id = row.id.trim().toLowerCase();
if (id === "claude-sonnet-4-6" || id === "sonnet-4-6") {
return { ...row, id: "claude-sonnet-5", displayName: "Sonnet 5 (1.2x)" };

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 Reset capabilities when renaming Droid Sonnet

When an older Droid SDK reports only the retired claude-sonnet-4-6 row, this rewrites only the id/display while preserving the stale row.capabilities and missing reasoningTiers from readSdkModelRows (for example reasoning: false, or vision: false when noImageSupport was set). The descriptor is then surfaced as droid/claude-sonnet-5, but downstream attachment handling checks modelDescriptor.capabilities.vision and converts images to text for non-vision models, so Droid Sonnet 5 chats from a retired-only catalog can lose image/reasoning support until a canonical row is also present. Apply the canonical Sonnet capabilities/tiers when migrating this row, as the OpenCode path does.

Useful? React with 👍 / 👎.

Comment thread apps/desktop/src/main/services/chat/droidModelsDiscovery.ts Outdated
@arul28

arul28 commented Jul 7, 2026

Copy link
Copy Markdown
Owner Author

@codex review

Comment thread apps/desktop/src/shared/modelRegistry.ts
@arul28

arul28 commented Jul 7, 2026

Copy link
Copy Markdown
Owner Author

@codex review

@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: e5919df77e

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

"claude-opus-4-7": tokenPrice(5, 25, 0.5, 6.25),
"claude-opus-4-6": tokenPrice(5, 25, 0.5, 6.25),
"claude-opus-4-5": tokenPrice(5, 25, 0.5, 6.25),
"claude-sonnet-5": tokenPrice(3, 15, 0.3, 3.75),

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 Use Sonnet 5 intro pricing until September

Because this static fallback is used by cost estimation/budgeting when the dynamic pricing fetch is unavailable, adding Sonnet 5 at standard $3/$15 makes all Sonnet 5 usage through August 31, 2026 look 50% more expensive. Anthropic's pricing page lists Claude Sonnet 5 at $2 input / $10 output per MTok through August 31, 2026, with $3/$15 starting September 1, 2026 (https://platform.claude.com/docs/en/about-claude/pricing), so this should either encode the dated introductory price or avoid falling back to the future standard rate before then.

Useful? React with 👍 / 👎.

Comment thread apps/desktop/src/main/services/chat/droidModelsDiscovery.ts Outdated
@cursor

cursor Bot commented Jul 7, 2026

Copy link
Copy Markdown
Contributor

Bugbot is not enabled for your account, so this pull request was not reviewed.

Enable Bugbot in the Cursor dashboard to get automatic reviews on future PRs.

@arul28

arul28 commented Jul 7, 2026

Copy link
Copy Markdown
Owner Author

@codex review

@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: 747a6355ef

ℹ️ 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 +288 to +290
const normalizedCustomId = id.startsWith("custom:") ? id.slice("custom:".length) : id;
const replacement = canonicalDroidReplacementForAlias(normalizedCustomId);
if (replacement) return replacement;

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 custom Droid model rows during alias normalization

When a Droid row comes from ~/.factory/config.json, ADE surfaces it as custom:<model> and marks it as customProxy. Stripping custom: before alias replacement means a configured proxy such as custom:claude-sonnet-4-6 or custom:opus is converted into the built-in claude-sonnet-5/claude-opus-4-8 row, dropping customProxy and causing launches to bypass the user's custom proxy. Normalize only non-custom rows, or keep the custom: namespace when producing the replacement.

Useful? React with 👍 / 👎.

"claude-opus-4-7": tokenPrice(5, 25, 0.5, 6.25),
"claude-opus-4-6": tokenPrice(5, 25, 0.5, 6.25),
"claude-opus-4-5": tokenPrice(5, 25, 0.5, 6.25),
"claude-sonnet-5": tokenPrice(2, 10, 0.2, 2.5),

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 Align Sonnet 5 usage pricing with the registry

This static usage-pricing entry prices claude-sonnet-5 at $2/$10 per 1M tokens, but the Sonnet 5 registry descriptor added in the same change advertises $3/$15 (inputPricePer1M/outputPricePer1M in apps/desktop/src/shared/modelRegistry.ts). When usage tracking prices a Sonnet 5 turn, spend summaries will disagree with the model picker/registry cost, so one of these sources needs to be corrected.

Useful? React with 👍 / 👎.

Comment thread apps/desktop/src/shared/modelRegistry.ts

@coderabbitai coderabbitai 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.

Caution

Some comments are outside the diff and can’t be posted inline due to platform limitations.

⚠️ Outside diff range comments (1)
apps/desktop/src/main/services/opencode/openCodeInventory.ts (1)

165-234: 🎯 Functional Correctness | 🟡 Minor | ⚡ Quick win

Add opus-4.7 to the Anthropic alias list here. apps/desktop/src/shared/modelRegistry.ts already maps it to claude-opus-4-8; without this branch, an OpenCode row for opus-4.7 can fall back to the raw limit values instead of the canonical 1,000,000 / 128,000 settings. openCodeInventory.test.ts should cover that form too.

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@apps/desktop/src/main/services/opencode/openCodeInventory.ts` around lines
165 - 234, Add the missing Anthropic alias handling in
normalizeOpenCodeProviderModel so OpenCode rows with modelId `opus-4.7` are
normalized the same way as the existing Opus aliases and receive the canonical
Claude Opus 4.8 1M settings. Update the Anthropic alias branch in
openCodeInventory to include `opus-4.7` alongside the existing Opus variants,
and make sure the returned modelId/displayName/capabilities stay aligned with
the `claude-opus-4-8` mapping used elsewhere in modelRegistry. Also extend
openCodeInventory.test coverage to assert that `opus-4.7` resolves to the
canonical 1,000,000 / 128,000 limits.
🧹 Nitpick comments (1)
apps/desktop/src/main/services/opencode/openCodeInventory.ts (1)

165-234: 📐 Maintainability & Code Quality | 🔵 Trivial | ⚡ Quick win

Consider extracting a single shared canonical-alias table.

normalizeOpenCodeProviderModel here and normalizeAnthropicRuntimeAlias in apps/desktop/src/shared/modelRegistry.ts maintain two independent copies of the retired-Sonnet/Opus alias lists and canonical metadata (context window, tiers, capabilities). They've already drifted (see the missing opus-4.7 finding above), which is exactly the kind of bug duplicated alias tables invite. Extracting one shared constant/helper that both files consume would remove this class of drift going forward.

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@apps/desktop/src/main/services/opencode/openCodeInventory.ts` around lines
165 - 234, `normalizeOpenCodeProviderModel` is maintaining a separate copy of
the Anthropic alias/canonical metadata that already differs from
`normalizeAnthropicRuntimeAlias`, so consolidate the retired Sonnet/Opus alias
list and shared model metadata into one reusable table/helper. Update both
`normalizeOpenCodeProviderModel` and `normalizeAnthropicRuntimeAlias` to consume
the shared source so canonical model IDs, display names, context windows, tiers,
and capabilities stay in sync and new aliases only need to be added in one
place.
🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

Outside diff comments:
In `@apps/desktop/src/main/services/opencode/openCodeInventory.ts`:
- Around line 165-234: Add the missing Anthropic alias handling in
normalizeOpenCodeProviderModel so OpenCode rows with modelId `opus-4.7` are
normalized the same way as the existing Opus aliases and receive the canonical
Claude Opus 4.8 1M settings. Update the Anthropic alias branch in
openCodeInventory to include `opus-4.7` alongside the existing Opus variants,
and make sure the returned modelId/displayName/capabilities stay aligned with
the `claude-opus-4-8` mapping used elsewhere in modelRegistry. Also extend
openCodeInventory.test coverage to assert that `opus-4.7` resolves to the
canonical 1,000,000 / 128,000 limits.

---

Nitpick comments:
In `@apps/desktop/src/main/services/opencode/openCodeInventory.ts`:
- Around line 165-234: `normalizeOpenCodeProviderModel` is maintaining a
separate copy of the Anthropic alias/canonical metadata that already differs
from `normalizeAnthropicRuntimeAlias`, so consolidate the retired Sonnet/Opus
alias list and shared model metadata into one reusable table/helper. Update both
`normalizeOpenCodeProviderModel` and `normalizeAnthropicRuntimeAlias` to consume
the shared source so canonical model IDs, display names, context windows, tiers,
and capabilities stay in sync and new aliases only need to be added in one
place.

ℹ️ Review info
⚙️ Run configuration

Configuration used: Path: .coderabbit.yaml

Review profile: CHILL

Plan: Pro

Run ID: d6d5ef52-68d4-4f83-8a05-2afa8c835df9

📥 Commits

Reviewing files that changed from the base of the PR and between 495574e and 747a635.

📒 Files selected for processing (13)
  • apps/desktop/src/main/services/chat/agentChatService.test.ts
  • apps/desktop/src/main/services/chat/agentChatService.ts
  • apps/desktop/src/main/services/chat/droidModelsDiscovery.test.ts
  • apps/desktop/src/main/services/chat/droidModelsDiscovery.ts
  • apps/desktop/src/main/services/opencode/openCodeInventory.test.ts
  • apps/desktop/src/main/services/opencode/openCodeInventory.ts
  • apps/desktop/src/main/services/usage/usagePricing.ts
  • apps/desktop/src/main/services/usage/usageTrackingService.test.ts
  • apps/desktop/src/shared/modelRegistry.test.ts
  • apps/desktop/src/shared/modelRegistry.ts
  • apps/ios/ADE/Views/Work/WorkChatComposerAndInputViews.swift
  • apps/ios/ADE/Views/Work/WorkModelCatalog.swift
  • apps/ios/ADETests/ADETests.swift
🚧 Files skipped from review as they are similar to previous changes (5)
  • apps/desktop/src/main/services/chat/droidModelsDiscovery.ts
  • apps/desktop/src/main/services/usage/usagePricing.ts
  • apps/ios/ADE/Views/Work/WorkChatComposerAndInputViews.swift
  • apps/ios/ADE/Views/Work/WorkModelCatalog.swift
  • apps/desktop/src/main/services/chat/agentChatService.test.ts

@arul28

arul28 commented Jul 7, 2026

Copy link
Copy Markdown
Owner Author

@codex review

Comment thread apps/desktop/src/main/services/chat/droidModelsDiscovery.ts
@arul28

arul28 commented Jul 7, 2026

Copy link
Copy Markdown
Owner Author

@codex review

@chatgpt-codex-connector

Copy link
Copy Markdown

You have reached your Codex usage limits for code reviews. You can see your limits in the Codex usage dashboard.
To continue using code reviews, add credits to your account and enable them for code reviews in your settings.

@arul28 arul28 merged commit e306b5a into main Jul 7, 2026
59 of 61 checks passed
@arul28 arul28 deleted the ade/start-skill-work-then-run-53aba835 branch July 7, 2026 20:54
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