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 90fca5356804..fe7859968bea 100644 --- a/apps/web/src/components/ChatMarkdown.tsx +++ b/apps/web/src/components/ChatMarkdown.tsx @@ -2209,10 +2209,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 +3059,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 0d0810eefa42..b97411e7a44b 100644 --- a/apps/web/src/components/ChatView.tsx +++ b/apps/web/src/components/ChatView.tsx @@ -6533,7 +6533,7 @@ export default function ChatView(props: ChatViewProps) { } /> - + This thread last ran on {localCheckoutBranchMismatch.threadBranch}. Sending will continue on {localCheckoutBranchMismatch.currentBranch}. 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/GitActionsControl.tsx b/apps/web/src/components/GitActionsControl.tsx index 4eca7867132e..c849532dafdb 100644 --- a/apps/web/src/components/GitActionsControl.tsx +++ b/apps/web/src/components/GitActionsControl.tsx @@ -659,7 +659,7 @@ function PublishRepositoryDialog(props: PublishRepositoryDialogProps) { } /> - + {readiness.hint ?? "Open Settings -> Source Control to configure this provider."} diff --git a/apps/web/src/components/LegacySidebar.tsx b/apps/web/src/components/LegacySidebar.tsx index b4b686a0c11d..b98f3a30ed26 100644 --- a/apps/web/src/components/LegacySidebar.tsx +++ b/apps/web/src/components/LegacySidebar.tsx @@ -785,9 +785,7 @@ const SidebarThreadRow = memo(function SidebarThreadRow(props: SidebarThreadRowP } /> - - {thread.title} - + {thread.title} )}
diff --git a/apps/web/src/components/ServerUpdateAction.tsx b/apps/web/src/components/ServerUpdateAction.tsx index 288078729d5d..a4b288a6eab7 100644 --- a/apps/web/src/components/ServerUpdateAction.tsx +++ b/apps/web/src/components/ServerUpdateAction.tsx @@ -163,9 +163,7 @@ export function ServerUpdateProgress({ } /> - - {state.message} - + {state.message} ); diff --git a/apps/web/src/components/Sidebar.tsx b/apps/web/src/components/Sidebar.tsx index 022024eadcc8..799ab3f9e545 100644 --- a/apps/web/src/components/Sidebar.tsx +++ b/apps/web/src/components/Sidebar.tsx @@ -350,7 +350,7 @@ function SidebarThreadTooltip({ align="start" sideOffset={4} variant="glass" - className="max-w-80 text-left whitespace-normal [&_[data-slot=tooltip-viewport]]:p-0" + className="[&_[data-slot=tooltip-viewport]]:p-0" >
diff --git a/apps/web/src/components/StartTruncatedPath.tsx b/apps/web/src/components/StartTruncatedPath.tsx index b467d141a8ca..60cb6cdc740d 100644 --- a/apps/web/src/components/StartTruncatedPath.tsx +++ b/apps/web/src/components/StartTruncatedPath.tsx @@ -17,7 +17,7 @@ export function StartTruncatedPath({ path, className }: { path: string; classNam > {path} - + {path} diff --git a/apps/web/src/components/chat/ChatComposer.tsx b/apps/web/src/components/chat/ChatComposer.tsx index f1de1f81434e..101dbcb4af25 100644 --- a/apps/web/src/components/chat/ChatComposer.tsx +++ b/apps/web/src/components/chat/ChatComposer.tsx @@ -6569,10 +6569,7 @@ export const ChatComposer = memo(function ChatComposer(props: ChatComposerProps) } /> - + Draft attachment could not be saved locally and may be lost on navigation. @@ -6604,12 +6601,7 @@ export const ChatComposer = memo(function ChatComposer(props: ChatComposerProps) > - - {upload.reason} - + {upload.reason} )} } /> - + {title}: {detail} diff --git a/apps/web/src/components/chat/DraftHeroHeadline.tsx b/apps/web/src/components/chat/DraftHeroHeadline.tsx index d542cd6a8a9f..89f5c103d0a6 100644 --- a/apps/web/src/components/chat/DraftHeroHeadline.tsx +++ b/apps/web/src/components/chat/DraftHeroHeadline.tsx @@ -146,9 +146,7 @@ export function DraftHeroHeadline({ {activeProjectDisplayName ?? "Choose a project"} {activeProjectDisplayName ? ( - - {activeProjectDisplayName} - + {activeProjectDisplayName} ) : null} @@ -202,9 +200,7 @@ export function DraftHeroHeadline({ }> {group.displayName} - - {group.displayName} - + {group.displayName} {showProjectEnvironments ? ( - + {props.disabledReason} diff --git a/apps/web/src/components/chat/ModelPickerSidebar.tsx b/apps/web/src/components/chat/ModelPickerSidebar.tsx index 19a542d2aa2f..93d2b2726770 100644 --- a/apps/web/src/components/chat/ModelPickerSidebar.tsx +++ b/apps/web/src/components/chat/ModelPickerSidebar.tsx @@ -39,7 +39,6 @@ const NEW_BADGE_CLASS = `${BADGE_BASE_CLASS} text-update-foreground `; /** Opens toward the rail so the list stays readable (not over the model names). */ const PICKER_TOOLTIP_SIDE = "left" as const; const PICKER_TOOLTIP_SIDE_OFFSET = 8; -const PICKER_TOOLTIP_CLASS = "max-w-64 text-balance font-normal leading-snug"; export const ModelPickerSidebar = memo(function ModelPickerSidebar(props: { selectedInstanceId: ProviderInstanceId | "favorites"; @@ -139,7 +138,6 @@ export const ModelPickerSidebar = memo(function ModelPickerSidebar(props: { side={PICKER_TOOLTIP_SIDE} sideOffset={PICKER_TOOLTIP_SIDE_OFFSET} align="center" - className={PICKER_TOOLTIP_CLASS} > Favorites @@ -242,7 +240,6 @@ export const ModelPickerSidebar = memo(function ModelPickerSidebar(props: { side={PICKER_TOOLTIP_SIDE} sideOffset={PICKER_TOOLTIP_SIDE_OFFSET} align="center" - className={PICKER_TOOLTIP_CLASS} > {tooltip} diff --git a/apps/web/src/components/chat/ProviderStatusBanner.tsx b/apps/web/src/components/chat/ProviderStatusBanner.tsx index 210bff4d7ad4..9e84fc01c920 100644 --- a/apps/web/src/components/chat/ProviderStatusBanner.tsx +++ b/apps/web/src/components/chat/ProviderStatusBanner.tsx @@ -100,7 +100,7 @@ export const ProviderStatusBanner = memo(function ProviderStatusBanner({ {message}
} /> - + {message} diff --git a/apps/web/src/components/chat/ThreadErrorBanner.tsx b/apps/web/src/components/chat/ThreadErrorBanner.tsx index 29a6a6db1846..df01506ba9ee 100644 --- a/apps/web/src/components/chat/ThreadErrorBanner.tsx +++ b/apps/web/src/components/chat/ThreadErrorBanner.tsx @@ -53,7 +53,7 @@ export const ThreadErrorBanner = memo(function ThreadErrorBanner({ }>{error} - + {error} diff --git a/apps/web/src/components/cloud/CloudEnvironmentConnectList.tsx b/apps/web/src/components/cloud/CloudEnvironmentConnectList.tsx index de054d0a5d29..5022031e98e6 100644 --- a/apps/web/src/components/cloud/CloudEnvironmentConnectList.tsx +++ b/apps/web/src/components/cloud/CloudEnvironmentConnectList.tsx @@ -393,9 +393,7 @@ export function CloudEnvironmentConnectRows({ ? "Unavailable" : "Checking…"))} - - {unsupportedDetail ?? statusText} - + {unsupportedDetail ?? statusText} ); @@ -454,9 +452,7 @@ export function CloudEnvironmentConnectRows({ Add - - {unsupportedDetail ?? "Client not supported"} - + {unsupportedDetail ?? "Client not supported"} ) : savedConnection ? (
diff --git a/apps/web/src/components/settings/DiagnosticsSettings.tsx b/apps/web/src/components/settings/DiagnosticsSettings.tsx index 0fe1ae2f624e..15fa80237da9 100644 --- a/apps/web/src/components/settings/DiagnosticsSettings.tsx +++ b/apps/web/src/components/settings/DiagnosticsSettings.tsx @@ -109,12 +109,7 @@ function StatBlock({ } /> - - {tooltip} - + {tooltip} ) : null} @@ -225,10 +220,7 @@ function TraceIdCell({ traceId }: { traceId: string }) { } /> - + {traceId} @@ -300,10 +292,7 @@ function ProcessNameCell({ {name}} /> - + {process.command} @@ -411,10 +400,7 @@ function ProcessDiagnosticsTable({ {process.command}} /> - + {process.command} @@ -484,10 +470,7 @@ function ResourceHistoryProcessNameCell({ {name}} /> - + {process.command} @@ -654,10 +637,7 @@ function ProcessResourceHistoryTable({ {process.command}} /> - + {process.command} diff --git a/apps/web/src/components/settings/KeybindingsSettings.tsx b/apps/web/src/components/settings/KeybindingsSettings.tsx index 7c5bbfa65fbe..57f9fff4d4aa 100644 --- a/apps/web/src/components/settings/KeybindingsSettings.tsx +++ b/apps/web/src/components/settings/KeybindingsSettings.tsx @@ -261,9 +261,7 @@ function WarningTooltipIcon({ > - - {children} - + {children} ); } diff --git a/apps/web/src/components/settings/ResourceTelemetryDiagnostics.tsx b/apps/web/src/components/settings/ResourceTelemetryDiagnostics.tsx index 51cabd6010bc..36326958550d 100644 --- a/apps/web/src/components/settings/ResourceTelemetryDiagnostics.tsx +++ b/apps/web/src/components/settings/ResourceTelemetryDiagnostics.tsx @@ -503,10 +503,7 @@ function ProcessTreeName({ {name}} /> - + {process.command || process.name} @@ -721,10 +718,7 @@ function HistoryProcessTable({ } /> - + {process.command || process.name} diff --git a/apps/web/src/components/settings/settingsLayout.tsx b/apps/web/src/components/settings/settingsLayout.tsx index 6691b93a7242..c204fb9d6b65 100644 --- a/apps/web/src/components/settings/settingsLayout.tsx +++ b/apps/web/src/components/settings/settingsLayout.tsx @@ -156,9 +156,7 @@ export function PolicyTooltip({ children }: { readonly children: string }) { } /> - - {children} - + {children} ); } @@ -372,9 +370,7 @@ export function SettingsRow({ {control} - - {message} - + {message} ); // A mixed selection keeps the real control with "Mixed" as its placeholder diff --git a/apps/web/src/components/ui/alert-dialog.tsx b/apps/web/src/components/ui/alert-dialog.tsx index 6e6c1ce2b210..7cd6d40c59ee 100644 --- a/apps/web/src/components/ui/alert-dialog.tsx +++ b/apps/web/src/components/ui/alert-dialog.tsx @@ -101,7 +101,7 @@ function AlertDialogFooter({ function AlertDialogTitle({ className, ...props }: AlertDialogPrimitive.Title.Props) { return ( diff --git a/apps/web/src/components/ui/dialog.tsx b/apps/web/src/components/ui/dialog.tsx index 22ce5637204f..db1b6e35b80f 100644 --- a/apps/web/src/components/ui/dialog.tsx +++ b/apps/web/src/components/ui/dialog.tsx @@ -145,7 +145,7 @@ function DialogFooter({ function DialogTitle({ className, ...props }: DialogPrimitive.Title.Props) { return ( diff --git a/apps/web/src/components/ui/tooltip.tsx b/apps/web/src/components/ui/tooltip.tsx index c0aaea40ceae..7ba9e4c238c4 100644 --- a/apps/web/src/components/ui/tooltip.tsx +++ b/apps/web/src/components/ui/tooltip.tsx @@ -23,7 +23,8 @@ function TooltipPopup({ align?: TooltipPrimitive.Positioner.Props["align"]; side?: TooltipPrimitive.Positioner.Props["side"]; sideOffset?: TooltipPrimitive.Positioner.Props["sideOffset"]; - variant?: "default" | "glass"; + /** `code` renders monospace content that breaks anywhere, for paths and commands. */ + variant?: "default" | "glass" | "code"; anchor?: TooltipPrimitive.Positioner.Props["anchor"]; }) { return ( @@ -42,6 +43,10 @@ function TooltipPopup({ variant === "glass" ? "dropdown-glass shadow-xl shadow-black/25 before:hidden" : "border bg-popover not-dark:bg-clip-padding shadow-md/5", + // One wrap width for prose; code dumps get more room and break anywhere. + variant === "code" + ? "max-w-120 wrap-anywhere text-left font-mono text-[11px] leading-relaxed" + : "max-w-80 wrap-anywhere whitespace-normal leading-snug", className, )} data-slot="tooltip-popup" diff --git a/apps/web/src/components/usage/UsageLimits.tsx b/apps/web/src/components/usage/UsageLimits.tsx index 6d30d49a7e4a..05c91739e251 100644 --- a/apps/web/src/components/usage/UsageLimits.tsx +++ b/apps/web/src/components/usage/UsageLimits.tsx @@ -127,7 +127,7 @@ function WindowBar({ /> ) : null} - +
{remaining}% left{timeLeft !== null ? ` · ${timeLeft}% of the window left` : ""} diff --git a/apps/web/src/routes/_chat.pull-requests.tsx b/apps/web/src/routes/_chat.pull-requests.tsx index ce2bd238746a..1e540d64634b 100644 --- a/apps/web/src/routes/_chat.pull-requests.tsx +++ b/apps/web/src/routes/_chat.pull-requests.tsx @@ -2280,9 +2280,7 @@ function CompactFilterMenu({ ) : ( - - {option.unavailable} - + {option.unavailable} ); })} diff --git a/scripts/lint-restyle-ceiling.ts b/scripts/lint-restyle-ceiling.ts index db8a73b20326..a0743a167631 100644 --- a/scripts/lint-restyle-ceiling.ts +++ b/scripts/lint-restyle-ceiling.ts @@ -8,7 +8,7 @@ import * as NodeURL from "node:url"; // components/ui exports are migrated to variants (see vite.config.ts). This gate keeps the // count from growing: CI fails when findings exceed the ceiling. Lower the ceiling when you // migrate a file, and delete this script when the rule becomes an error. -export const RESTYLE_CEILING = 981; +export const RESTYLE_CEILING = 921; const RULE = "shadcn(no-restyle)";