diff --git a/apps/server/src/provider/model-manifest.json b/apps/server/src/provider/model-manifest.json index efc22ad0a3d0..a5924f9cadf2 100644 --- a/apps/server/src/provider/model-manifest.json +++ b/apps/server/src/provider/model-manifest.json @@ -1,16 +1,15 @@ { "version": 1, - "updatedAt": "2026-09-12T00:41:55Z", + "updatedAt": "2026-09-22T19:42:55Z", "currentModels": { "codex": [ "gpt-6-astra", - "gpt-5.6-luna", - "gpt-5.6-terra", - "gpt-5.6-sol", + "gpt-6-luna", + "gpt-6-sol", "gpt-daybreak-blue-latest", "gpt-daybreak-red-latest" ], - "claudeAgent": ["claude-fable-5-1", "claude-opus-5", "claude-sonnet-5"], + "claudeAgent": ["claude-fable-5-1", "claude-opus-5-5", "claude-sonnet-5"], "antigravity": ["gemini-3.8-flash-high", "gemini-3.8-flash-medium", "gemini-3.8-flash-low"] }, "providers": { @@ -96,6 +95,48 @@ } } }, + "opus-5-5": { + "capabilities": { + "optionDescriptors": [ + { + "id": "effort", + "label": "Reasoning", + "type": "select", + "options": [ + { "id": "low", "label": "Low" }, + { "id": "medium", "label": "Medium", "isDefault": true }, + { "id": "high", "label": "High" }, + { "id": "xhigh", "label": "Extra High" }, + { "id": "max", "label": "Max" }, + { + "id": "ultracode", + "label": "Ultracode", + "description": "xhigh effort plus multi-agent workflow orchestration" + }, + { "id": "ultrathink", "label": "Ultrathink" } + ], + "promptInjectedValues": ["ultrathink"] + }, + { "id": "fastMode", "label": "Fast Mode", "type": "boolean" }, + { + "id": "contextWindow", + "label": "Context Window", + "type": "select", + "options": [ + { "id": "200k", "label": "200k" }, + { "id": "1m", "label": "1M", "isDefault": true } + ] + } + ] + }, + "adapter": { + "claudeCode": { + "effortMap": { "ultracode": "xhigh", "ultrathink": null }, + "modelSuffixes": { "contextWindow": { "1m": "[1m]" } }, + "contextWindowTokens": { "200k": 200000, "1m": 1000000 } + } + } + }, "opus-5": { "capabilities": { "optionDescriptors": [ @@ -554,6 +595,15 @@ } }, "models": [ + { + "slug": "claude-opus-5-5", + "name": "Claude Opus 5.5", + "aliases": ["opus-5.5", "claude-opus-5.5"], + "status": "current", + "badge": "new", + "profile": "opus-5-5", + "adapter": { "claudeCode": { "minVersion": "2.1.280" } } + }, { "slug": "claude-fable-5-1", "name": "Claude Fable 5.1", diff --git a/apps/web/src/browser/BrowserDeviceToolbar.tsx b/apps/web/src/browser/BrowserDeviceToolbar.tsx index e8ad80b597ba..cf78e5095a38 100644 --- a/apps/web/src/browser/BrowserDeviceToolbar.tsx +++ b/apps/web/src/browser/BrowserDeviceToolbar.tsx @@ -197,7 +197,7 @@ export function BrowserDeviceToolbar({ > - + Responsive Standard diff --git a/apps/web/src/components/BranchToolbar.tsx b/apps/web/src/components/BranchToolbar.tsx index ffc89c33e794..607236f2d63b 100644 --- a/apps/web/src/components/BranchToolbar.tsx +++ b/apps/web/src/components/BranchToolbar.tsx @@ -217,7 +217,7 @@ const MobileRunContextSelector = memo(function MobileRunContextSelector({ {triggerContent} - + {showEnvironmentPicker && availableEnvironments && onEnvironmentChange ? ( <> diff --git a/apps/web/src/components/BranchToolbarBranchSelector.tsx b/apps/web/src/components/BranchToolbarBranchSelector.tsx index ed8f1cd1f026..3bab1315ee8b 100644 --- a/apps/web/src/components/BranchToolbarBranchSelector.tsx +++ b/apps/web/src/components/BranchToolbarBranchSelector.tsx @@ -918,7 +918,7 @@ export function BranchToolbarBranchSelector({ } /> - + Creates the worktree from the latest matching branch on origin instead of your local branch. diff --git a/apps/web/src/components/ChatMarkdown.tsx b/apps/web/src/components/ChatMarkdown.tsx index 3b398dd5100e..52aed78e6663 100644 --- a/apps/web/src/components/ChatMarkdown.tsx +++ b/apps/web/src/components/ChatMarkdown.tsx @@ -772,7 +772,7 @@ function MarkdownTable({ children, ...props }: React.ComponentProps<"table">) { className="chat-markdown-table-container" data-expanded={expanded ? "true" : "false"} > - + {children}
@@ -844,32 +844,33 @@ function MarkdownDetails({ const content = childNodes.filter((_, index) => index !== summaryIndex); return ( - - + - - {summary} - - -
- {content} -
-
-
+ + {summary} + + +
+ {content} +
+
+ + ); } @@ -2209,10 +2210,7 @@ const MarkdownFileLink = memo(function MarkdownFileLink({ ) } /> - + {/* The full path: the chip already shows the shortened form, and a link to the workspace root collapses to a bare label that repeats it. */}
@@ -3062,12 +3060,7 @@ const CHAT_MARKDOWN_COMPONENTS = { return ( - - {href} - + {href} ); } diff --git a/apps/web/src/components/ChatView.tsx b/apps/web/src/components/ChatView.tsx index 981f6f2c04af..b97411e7a44b 100644 --- a/apps/web/src/components/ChatView.tsx +++ b/apps/web/src/components/ChatView.tsx @@ -406,7 +406,6 @@ import { import { deriveLatestContextWindowSnapshot, formatContextWindowTokens } from "../lib/contextWindow"; import { DRAFT_HERO_TRANSITION_ANIMATION_ID, - DRAFT_HERO_TRANSITION_DURATION_MS, DRAFT_HERO_TRANSITION_EASING, MOBILE_COMPOSER_VIEW_TRANSITION_NAME, MOBILE_DRAFT_HEADLINE_VIEW_TRANSITION_NAME, @@ -539,7 +538,11 @@ const EMPTY_PROVIDERS: ServerProvider[] = []; const EMPTY_USAGE_LIMIT_SOURCES: UsageLimitSourceSnapshots = []; const EMPTY_PROVIDER_SKILLS: ServerProvider["skills"] = []; const EMPTY_PENDING_USER_INPUT_ANSWERS: Record = {}; -function useDraftHeroLayoutTransition(isDraftHeroState: boolean) { +function useDraftHeroLayoutTransition( + isDraftHeroState: boolean, + animationsActive: boolean, + animationDurationMs: number, +) { const transitionGroupRef = useRef(null); const composerAnchorRef = useRef(null); const previousStateRef = useRef(isDraftHeroState); @@ -559,9 +562,6 @@ function useDraftHeroLayoutTransition(isDraftHeroState: boolean) { const transitionGroup = transitionGroupRef.current; const nextComposerRect = composerAnchorRef.current?.getBoundingClientRect() ?? null; const stateChanged = previousStateRef.current !== isDraftHeroState; - const prefersReducedMotion = - typeof window !== "undefined" && - window.matchMedia?.("(prefers-reduced-motion: reduce)").matches; const mobileComposerTransitionActive = typeof document !== "undefined" && document.documentElement.dataset.mobileComposerRouteTransition === "true"; @@ -572,7 +572,7 @@ function useDraftHeroLayoutTransition(isDraftHeroState: boolean) { const previousComposerRect = previousComposerRectRef.current; if ( stateChanged && - !prefersReducedMotion && + animationsActive && !mobileComposerTransitionActive && transitionGroup && previousComposerRect && @@ -588,7 +588,7 @@ function useDraftHeroLayoutTransition(isDraftHeroState: boolean) { { transform: "translate3d(0, 0, 0)" }, ], { - duration: DRAFT_HERO_TRANSITION_DURATION_MS, + duration: animationDurationMs, easing: DRAFT_HERO_TRANSITION_EASING, }, ); @@ -607,7 +607,7 @@ function useDraftHeroLayoutTransition(isDraftHeroState: boolean) { previousStateRef.current = isDraftHeroState; previousComposerRectRef.current = nextComposerRect; - }, [isDraftHeroState]); + }, [animationDurationMs, animationsActive, isDraftHeroState]); return [attachTransitionGroupRef, attachComposerAnchorRef, captureComposerRect] as const; } @@ -3634,7 +3634,11 @@ export default function ChatView(props: ChatViewProps) { attachDraftHeroTransitionGroupRef, attachDraftHeroComposerAnchorRef, captureDraftHeroComposerRect, - ] = useDraftHeroLayoutTransition(isDraftHeroState); + ] = useDraftHeroLayoutTransition( + isDraftHeroState, + panelAnimationsActive, + panelAnimationDurationMs, + ); const gitCwd = activeProject ? projectScriptCwd({ @@ -6529,7 +6533,7 @@ export default function ChatView(props: ChatViewProps) { } /> - + This thread last ran on {localCheckoutBranchMismatch.threadBranch}. Sending will continue on {localCheckoutBranchMismatch.currentBranch}. @@ -7877,13 +7881,19 @@ export default function ChatView(props: ChatViewProps) { const dockStarted = new Promise((resolve) => { resolveDockStarted = resolve; }); - const dockTransition = runMobileComposerTransition(() => { - flushSync(() => { - captureDraftHeroComposerRect(); - setDockedDraftHeroThreadKey(activeThreadKey); - }); - resolveDockStarted?.(); - }); + const dockTransition = runMobileComposerTransition( + () => { + flushSync(() => { + captureDraftHeroComposerRect(); + setDockedDraftHeroThreadKey(activeThreadKey); + }); + resolveDockStarted?.(); + }, + { + active: panelAnimationsActive, + durationMs: panelAnimationDurationMs, + }, + ); void dockTransition.catch(() => resolveDockStarted?.()); await dockStarted; } diff --git a/apps/web/src/components/CommandPalette.tsx b/apps/web/src/components/CommandPalette.tsx index 912f294d9538..3498acc33046 100644 --- a/apps/web/src/components/CommandPalette.tsx +++ b/apps/web/src/components/CommandPalette.tsx @@ -2874,7 +2874,7 @@ function OpenCommandPaletteDialog(props: { } > {isRemoteProjectPending ? "Working" : remoteProjectButtonLabel} - + Enter @@ -2917,7 +2917,7 @@ function OpenCommandPaletteDialog(props: { {isCloneDestinationStep && isRemoteProjectPending ? "Cloning" : submitActionLabel} - + {hasHighlightedBrowseItem ? `${submitModifierLabel} Enter` : "Enter"} diff --git a/apps/web/src/components/CommandPaletteContent.tsx b/apps/web/src/components/CommandPaletteContent.tsx index 8c1a5b0e3c83..a21de9a3c650 100644 --- a/apps/web/src/components/CommandPaletteContent.tsx +++ b/apps/web/src/components/CommandPaletteContent.tsx @@ -52,7 +52,7 @@ export function CommandPaletteContent({ {children}
- + @@ -62,18 +62,18 @@ export function CommandPaletteContent({ Navigate {footerActionLabel !== undefined ? ( - + Enter {footerActionLabel} ) : null} {showBackHint ? ( - + Backspace Back ) : null} - + Esc {escapeLabel} diff --git a/apps/web/src/components/CommandPaletteResults.tsx b/apps/web/src/components/CommandPaletteResults.tsx index c66ab9a1cf2b..b9cb0c6269c8 100644 --- a/apps/web/src/components/CommandPaletteResults.tsx +++ b/apps/web/src/components/CommandPaletteResults.tsx @@ -15,7 +15,6 @@ import { CommandShortcut, } from "./ui/command"; import { ThreadSearchMatchExcerpt } from "./ThreadSearchMatch"; -import { cn } from "~/lib/utils"; interface CommandPaletteResultsProps { emptyStateMessage?: string; @@ -109,10 +108,8 @@ function CommandPaletteResultRow(props: { return ( { event.preventDefault(); }} diff --git a/apps/web/src/components/ComposerPromptEditorTiptap.tsx b/apps/web/src/components/ComposerPromptEditorTiptap.tsx index 0e452fd4ac26..ec9b9e07e2fb 100644 --- a/apps/web/src/components/ComposerPromptEditorTiptap.tsx +++ b/apps/web/src/components/ComposerPromptEditorTiptap.tsx @@ -237,12 +237,7 @@ function ComposerMentionNodeView({ node }: NodeViewProps) { - - {path} - + {path} ); diff --git a/apps/web/src/components/ConfirmDialogHost.tsx b/apps/web/src/components/ConfirmDialogHost.tsx index 3e19606bd4c6..92477801eb72 100644 --- a/apps/web/src/components/ConfirmDialogHost.tsx +++ b/apps/web/src/components/ConfirmDialogHost.tsx @@ -77,7 +77,7 @@ export function ConfirmDialogHost() { > - {copy.title} + {copy.title} {copy.description ? ( {copy.description} diff --git a/apps/web/src/components/ConnectionStatusDot.tsx b/apps/web/src/components/ConnectionStatusDot.tsx index 6a23a0532873..b371b6c1fe97 100644 --- a/apps/web/src/components/ConnectionStatusDot.tsx +++ b/apps/web/src/components/ConnectionStatusDot.tsx @@ -69,7 +69,7 @@ export function ConnectionStatusDot({ return ( - + {tooltipText} diff --git a/apps/web/src/components/CustomSnoozeDialog.tsx b/apps/web/src/components/CustomSnoozeDialog.tsx index 453efb1cbe53..729200c907b0 100644 --- a/apps/web/src/components/CustomSnoozeDialog.tsx +++ b/apps/web/src/components/CustomSnoozeDialog.tsx @@ -94,7 +94,7 @@ function CustomSnoozeDialog() { Custom snooze Choose when snoozed threads return to your inbox. - + { diff --git a/apps/web/src/components/DiffFilePathCopyButton.tsx b/apps/web/src/components/DiffFilePathCopyButton.tsx index 49b00ed89b74..5e78949336cf 100644 --- a/apps/web/src/components/DiffFilePathCopyButton.tsx +++ b/apps/web/src/components/DiffFilePathCopyButton.tsx @@ -24,8 +24,7 @@ export function DiffFilePathCopyButton({ filePath }: { filePath: string }) { } /> - + {readiness.hint ?? "Open Settings -> Source Control to configure this provider."} @@ -1793,7 +1793,7 @@ export default function GitActionsControl({ Git actions - {gitItems} + {gitItems} ) @@ -1859,9 +1859,7 @@ export default function GitActionsControl({ >