From 567901c7f2180f9280fae81005e19b1b67841d81 Mon Sep 17 00:00:00 2001 From: sheehanmunim Date: Wed, 19 Aug 2026 15:02:02 -0400 Subject: [PATCH] fix(web): call the app by its own name Two dozen strings said "T3 Code" in copy the user reads - update prompts, version-skew hints, Computer Use and Connections settings, the browser-preview notice - even in a build called MT Code. They interpolate APP_DISPLAY_NAME now, which resolves per distro, so the official build is unchanged. Co-Authored-By: Claude Opus 5 (1M context) --- apps/web/src/cloud/linkEnvironment.ts | 5 +++-- apps/web/src/components/ChatView.tsx | 3 ++- apps/web/src/components/RightPanelTabs.tsx | 3 ++- .../components/SshPasswordRequestDialog.tsx | 3 ++- .../MobileClientsUserProfilePage.logic.ts | 3 ++- .../cloud/RelayClientInstallDialog.tsx | 7 ++++--- .../computers/ComputerTaskHosts.tsx | 3 ++- .../web/src/components/desktopUpdate.logic.ts | 9 +++++---- .../settings/BrowserImportWizard.tsx | 3 ++- .../settings/ComputerHistorySettings.tsx | 3 ++- .../settings/ComputerUseSettings.tsx | 9 +++++---- .../settings/ConnectionsSettings.tsx | 19 ++++++++++--------- .../settings/DesktopNotificationsSettings.tsx | 2 +- .../settings/KeybindingsSettings.tsx | 5 +++-- .../components/settings/ThemeImportDialog.tsx | 3 ++- .../settings/ThemePreviewCircles.tsx | 3 ++- .../src/components/settings/ThemeSettings.tsx | 5 +++-- .../settings/VoiceSettingsPanel.tsx | 11 ++++++----- .../pluginMarketplace/PluginDetail.tsx | 3 ++- .../src/components/settings/providerStatus.ts | 3 ++- .../web/src/components/voice/VoiceSession.tsx | 7 ++++--- apps/web/src/connection/platform.ts | 3 ++- apps/web/src/routes/_chat.index.tsx | 2 +- apps/web/src/routes/_chat.pull-requests.tsx | 3 ++- apps/web/src/routes/_chat.tsx | 3 ++- apps/web/src/versionSkew.test.ts | 5 +++-- apps/web/src/versionSkew.ts | 4 ++-- 27 files changed, 78 insertions(+), 54 deletions(-) diff --git a/apps/web/src/cloud/linkEnvironment.ts b/apps/web/src/cloud/linkEnvironment.ts index a245cbc54db2..f8ad6c058a7e 100644 --- a/apps/web/src/cloud/linkEnvironment.ts +++ b/apps/web/src/cloud/linkEnvironment.ts @@ -38,6 +38,7 @@ import { reportRelayClientInstallProgress, requestRelayClientInstallConfirmation, } from "./relayClientInstallDialog"; +import { APP_DISPLAY_NAME } from "~/branding"; export function normalizeRelayBaseUrl(value: string | null | undefined): string | null { const trimmed = value?.trim(); @@ -74,7 +75,7 @@ function ensureRelayClientAvailable( if (status.status === "available") return; if (status.status === "unsupported") { return yield* new CloudEnvironmentLinkError({ - message: `T3 Code cannot install the relay client automatically on ${status.platform}-${status.arch}.`, + message: `${APP_DISPLAY_NAME} cannot install the relay client automatically on ${status.platform}-${status.arch}.`, }); } @@ -110,7 +111,7 @@ function ensureRelayClientAvailable( return yield* new CloudEnvironmentLinkError({ message: installedStatus.status === "unsupported" - ? `T3 Code cannot install the relay client automatically on ${installedStatus.platform}-${installedStatus.arch}.` + ? `${APP_DISPLAY_NAME} cannot install the relay client automatically on ${installedStatus.platform}-${installedStatus.arch}.` : "The relay client is still unavailable after installation.", }); } diff --git a/apps/web/src/components/ChatView.tsx b/apps/web/src/components/ChatView.tsx index 1ee19ea16e29..6d60039964b4 100644 --- a/apps/web/src/components/ChatView.tsx +++ b/apps/web/src/components/ChatView.tsx @@ -365,6 +365,7 @@ import { serverUpdateGuidance, } from "../versionSkew"; import { useAssetUrls } from "../assets/assetUrls"; +import { APP_DISPLAY_NAME } from "~/branding"; const IMAGE_ONLY_BOOTSTRAP_PROMPT = "[User attached one or more images without additional text. Respond using the conversation context and the attached image(s).]"; @@ -6772,7 +6773,7 @@ function ChatViewContent(props: ChatViewProps) { ) : activeRightPanelSurface?.kind === "pull-request" && !supportsPullRequests ? ( ) : activeRightPanelSurface?.kind === "pull-request" ? ( // No onClose: the surface tab's own X owns closing here, and a second X in the header diff --git a/apps/web/src/components/RightPanelTabs.tsx b/apps/web/src/components/RightPanelTabs.tsx index 38752fdc2334..bd8bfcf1e7a5 100644 --- a/apps/web/src/components/RightPanelTabs.tsx +++ b/apps/web/src/components/RightPanelTabs.tsx @@ -51,6 +51,7 @@ import { PreviewPanelShell, type PreviewPanelMode } from "./preview/PreviewPanel import { FaviconImage } from "./preview/PreviewFaviconIcon"; import { previewBridge } from "./preview/previewBridge"; import { PierreEntryIcon } from "./chat/PierreEntryIcon"; +import { APP_DISPLAY_NAME } from "~/branding"; interface RightPanelTabsProps { mode: PreviewPanelMode; @@ -111,7 +112,7 @@ export interface PullRequestTabStatus { } const SURFACE_DISABLED_REASONS = { - browser: "Browser previews are only available in the T3 Code desktop app.", + browser: `Browser previews are only available in the ${APP_DISPLAY_NAME} desktop app.`, terminal: "Terminal surfaces are only available from a project thread.", files: "Files are only available when a project is open.", diff: "Diff is only available for server threads in Git repositories.", diff --git a/apps/web/src/components/SshPasswordRequestDialog.tsx b/apps/web/src/components/SshPasswordRequestDialog.tsx index 3962f0ad8a81..57e829eb48e3 100644 --- a/apps/web/src/components/SshPasswordRequestDialog.tsx +++ b/apps/web/src/components/SshPasswordRequestDialog.tsx @@ -13,6 +13,7 @@ import { } from "./ui/dialog"; import { Input } from "./ui/input"; import { canSubmitSshPassword } from "./sshPasswordRequestForm"; +import { APP_DISPLAY_NAME } from "~/branding"; export interface SshPasswordPromptRequestPresentation { readonly requestId: string; @@ -176,7 +177,7 @@ export function SshPasswordRequestDialog({ SSH Authentication Required T3 needs your SSH key passphrase or password to connect to {target}. It is - passed to the SSH process for this attempt and is not saved by T3 Code. + passed to the SSH process for this attempt and is not saved by ${APP_DISPLAY_NAME}. diff --git a/apps/web/src/components/clerk/MobileClientsUserProfilePage.logic.ts b/apps/web/src/components/clerk/MobileClientsUserProfilePage.logic.ts index 5ca9595bef4d..2d6c2a4e1b12 100644 --- a/apps/web/src/components/clerk/MobileClientsUserProfilePage.logic.ts +++ b/apps/web/src/components/clerk/MobileClientsUserProfilePage.logic.ts @@ -1,4 +1,5 @@ import type { RelayClientDeviceRecord } from "@t3tools/contracts/relay"; +import { APP_DISPLAY_NAME } from "~/branding"; const mobileClientUpdatedAtFormatter = new Intl.DateTimeFormat(undefined, { dateStyle: "medium", @@ -15,7 +16,7 @@ const NOTIFICATION_PREFERENCES = [ >; export function mobileClientPlatformLabel(device: RelayClientDeviceRecord): string { - return `iOS ${device.iosMajorVersion}${device.appVersion ? ` · T3 Code ${device.appVersion}` : ""}`; + return `iOS ${device.iosMajorVersion}${device.appVersion ? ` · ${APP_DISPLAY_NAME} ${device.appVersion}` : ""}`; } export function mobileClientNotificationDetail(device: RelayClientDeviceRecord): string { diff --git a/apps/web/src/components/cloud/RelayClientInstallDialog.tsx b/apps/web/src/components/cloud/RelayClientInstallDialog.tsx index 78282f659151..c73dc244bec3 100644 --- a/apps/web/src/components/cloud/RelayClientInstallDialog.tsx +++ b/apps/web/src/components/cloud/RelayClientInstallDialog.tsx @@ -18,6 +18,7 @@ import { DialogPopup, DialogTitle, } from "../ui/dialog"; +import { APP_DISPLAY_NAME } from "~/branding"; const installSteps: ReadonlyArray<{ readonly stage: RelayClientInstallProgressStage; readonly label: string; @@ -69,8 +70,8 @@ export function RelayClientInstallDialog() { {isInstalling - ? "T3 Code is preparing this environment for secure access through T3 Connect." - : "T3 Code needs the relay client to make this environment available through T3 Connect."} + ? `${APP_DISPLAY_NAME} is preparing this environment for secure access through T3 Connect.` + : `${APP_DISPLAY_NAME} needs the relay client to make this environment available through T3 Connect.`} @@ -91,7 +92,7 @@ export function RelayClientInstallDialog() { value={activeStepIndex + 1} />

- Keep T3 Code open while the relay client is installed. + Keep ${APP_DISPLAY_NAME} open while the relay client is installed.

) : ( diff --git a/apps/web/src/components/computers/ComputerTaskHosts.tsx b/apps/web/src/components/computers/ComputerTaskHosts.tsx index f4a42b0c7db6..e73b869b03f5 100644 --- a/apps/web/src/components/computers/ComputerTaskHosts.tsx +++ b/apps/web/src/components/computers/ComputerTaskHosts.tsx @@ -28,6 +28,7 @@ import { environmentPresentations } from "~/state/presentation"; import { environmentSnapshotAtom } from "~/state/shell"; import { threadEnvironment } from "~/state/threads"; import { useAtomCommand } from "~/state/use-atom-command"; +import { APP_DISPLAY_NAME } from "~/branding"; const TARGET_READY_TIMEOUT_MS = 20_000; const TARGET_READY_POLL_MS = 200; @@ -235,6 +236,6 @@ async function waitForTargetSnapshot( "computer_offline", lastPhase === "connected" ? "That computer connected but T3 has not loaded its projects yet." - : "Could not reach that computer. Keep T3 Code running there, or pick it in Run on first.", + : `Could not reach that computer. Keep ${APP_DISPLAY_NAME} running there, or pick it in Run on first.`, ); } diff --git a/apps/web/src/components/desktopUpdate.logic.ts b/apps/web/src/components/desktopUpdate.logic.ts index 25d25cabc2dd..323aeec845b6 100644 --- a/apps/web/src/components/desktopUpdate.logic.ts +++ b/apps/web/src/components/desktopUpdate.logic.ts @@ -1,4 +1,5 @@ import type { DesktopUpdateActionResult, DesktopUpdateState } from "@t3tools/contracts"; +import { APP_DISPLAY_NAME } from "~/branding"; export type DesktopUpdateButtonAction = "download" | "install" | "none"; @@ -62,12 +63,12 @@ export function getArm64IntelBuildWarningDescription(state: DesktopUpdateState): const action = resolveDesktopUpdateButtonAction(state); if (action === "download") { - return "This Mac has Apple Silicon, but T3 Code is still running the Intel build under Rosetta. Download the available update to switch to the native Apple Silicon build."; + return `This Mac has Apple Silicon, but ${APP_DISPLAY_NAME} is still running the Intel build under Rosetta. Download the available update to switch to the native Apple Silicon build.`; } if (action === "install") { - return "This Mac has Apple Silicon, but T3 Code is still running the Intel build under Rosetta. Restart to install the downloaded Apple Silicon build."; + return `This Mac has Apple Silicon, but ${APP_DISPLAY_NAME} is still running the Intel build under Rosetta. Restart to install the downloaded Apple Silicon build.`; } - return "This Mac has Apple Silicon, but T3 Code is still running the Intel build under Rosetta. The next app update will replace it with the native Apple Silicon build."; + return `This Mac has Apple Silicon, but ${APP_DISPLAY_NAME} is still running the Intel build under Rosetta. The next app update will replace it with the native Apple Silicon build.`; } export function getDesktopUpdateButtonTooltip(state: DesktopUpdateState): string { @@ -98,7 +99,7 @@ export function getDesktopUpdateInstallConfirmationMessage( state: Pick, ): string { const version = state.downloadedVersion ?? state.availableVersion; - return `Install update${version ? ` ${version}` : ""} and restart T3 Code?\n\nAny running tasks will be interrupted. Make sure you're ready before continuing.`; + return `Install update${version ? ` ${version}` : ""} and restart ${APP_DISPLAY_NAME}?\n\nAny running tasks will be interrupted. Make sure you're ready before continuing.`; } export function getDesktopUpdateActionError(result: DesktopUpdateActionResult): string | null { diff --git a/apps/web/src/components/settings/BrowserImportWizard.tsx b/apps/web/src/components/settings/BrowserImportWizard.tsx index 8f9670e7444e..213eaf931f3f 100644 --- a/apps/web/src/components/settings/BrowserImportWizard.tsx +++ b/apps/web/src/components/settings/BrowserImportWizard.tsx @@ -26,6 +26,7 @@ import { type ImportOutcome, type WizardStep, } from "./browserImportWizard.logic"; +import { APP_DISPLAY_NAME } from "~/branding"; /** A profile the import can land in. */ export interface WizardTargetProfile { @@ -220,7 +221,7 @@ function FullDiskAccessStep({ return ( <> - Let T3 Code read {source.name}’s cookies + Let ${APP_DISPLAY_NAME} read {source.name}’s cookies {source.name} keeps its cookies somewhere only apps with Full Disk Access can reach. Turn that on for T3 Code in System Settings, then come back and finish the import. diff --git a/apps/web/src/components/settings/ComputerHistorySettings.tsx b/apps/web/src/components/settings/ComputerHistorySettings.tsx index 9ec9954e17d8..f0ed26754a2f 100644 --- a/apps/web/src/components/settings/ComputerHistorySettings.tsx +++ b/apps/web/src/components/settings/ComputerHistorySettings.tsx @@ -39,6 +39,7 @@ import { SettingsSection, } from "./settingsLayout"; import { searchableSetting } from "./settingsSearch"; +import { APP_DISPLAY_NAME } from "~/branding"; function isDesktopHost(): boolean { return typeof window !== "undefined" && window.desktopBridge !== undefined; @@ -330,7 +331,7 @@ export function ComputerHistorySettings() {

{!onDesktop ? (

- Computer History recording runs in the T3 Code desktop app. + Computer History recording runs in the ${APP_DISPLAY_NAME} desktop app.

) : null} diff --git a/apps/web/src/components/settings/ComputerUseSettings.tsx b/apps/web/src/components/settings/ComputerUseSettings.tsx index 1bfb45fa58de..5535c080e680 100644 --- a/apps/web/src/components/settings/ComputerUseSettings.tsx +++ b/apps/web/src/components/settings/ComputerUseSettings.tsx @@ -31,9 +31,10 @@ import { SettingsSection, } from "./settingsLayout"; import { searchableSetting } from "./settingsSearch"; +import { APP_DISPLAY_NAME } from "~/branding"; /** Shown when the desktop host lacks the Computer Use permissions bridge API. */ -const BRIDGE_UNSUPPORTED_MESSAGE = "Update T3 Code to check Computer Use permissions"; +const BRIDGE_UNSUPPORTED_MESSAGE = `Update ${APP_DISPLAY_NAME} to check Computer Use permissions`; function isDesktopHost(): boolean { return typeof window !== "undefined" && window.desktopBridge !== undefined; @@ -167,14 +168,14 @@ export function ComputerUseSettings() {

You are connected to a remote environment. Computer Use settings apply on the host - running the T3 Code desktop app. + running the ${APP_DISPLAY_NAME} desktop app.

) : null} Google Chrome - Load the T3 Code extension so agents can open and drive tabs in a labelled group + Load the ${APP_DISPLAY_NAME} extension so agents can open and drive tabs in a labelled group without taking over your browsing.
diff --git a/apps/web/src/components/settings/ConnectionsSettings.tsx b/apps/web/src/components/settings/ConnectionsSettings.tsx index bde77cefc5b6..f0f058e8ea31 100644 --- a/apps/web/src/components/settings/ConnectionsSettings.tsx +++ b/apps/web/src/components/settings/ConnectionsSettings.tsx @@ -136,6 +136,7 @@ import { ConnectionStatusDot } from "../ConnectionStatusDot"; import { ServerUpdateAction, ServerUpdateProgress } from "../ServerUpdateAction"; import { CloudEnvironmentConnectRows } from "../cloud/CloudEnvironmentConnectList"; import { ITEM_ROW_CLASSNAME, ITEM_ROW_INNER_CLASSNAME } from "./itemRows"; +import { APP_DISPLAY_NAME } from "~/branding"; const DEFAULT_TAILSCALE_SERVE_PORT = 443; const EMPTY_ADVERTISED_ENDPOINTS: ReadonlyArray = []; @@ -3145,7 +3146,7 @@ export function ConnectionsSettings() { {desktopWslState.enabled ? ( {pendingDesktopServerExposureMode === "network-accessible" - ? "T3 Code will restart to expose this environment over the network." - : "T3 Code will restart and limit this environment back to this machine."} + ? `${APP_DISPLAY_NAME} will restart to expose this environment over the network.` + : `${APP_DISPLAY_NAME} will restart and limit this environment back to this machine.`} @@ -3451,15 +3452,15 @@ export function ConnectionsSettings() { {pendingWslChange?.kind === "disable" ? pendingWslChange.wasWslOnly - ? "T3 Code will restart on the Windows backend. Threads and projects opened against WSL stay safe inside the distro and become available again when you re-enable WSL." - : "The WSL backend will stop. Threads and projects opened against WSL stay safe inside the distro, but they'll be unavailable in T3 Code until you re-enable WSL." + ? `${APP_DISPLAY_NAME} will restart on the Windows backend. Threads and projects opened against WSL stay safe inside the distro and become available again when you re-enable WSL.` + : `The WSL backend will stop. Threads and projects opened against WSL stay safe inside the distro, but they'll be unavailable in ${APP_DISPLAY_NAME} until you re-enable WSL.` : pendingWslChange?.kind === "distro" - ? "T3 Code will restart the WSL backend on the new distro. Sessions still running on the current distro will be interrupted." + ? `${APP_DISPLAY_NAME} will restart the WSL backend on the new distro. Sessions still running on the current distro will be interrupted.` : pendingWslChange?.kind === "enable" ? "Run the WSL backend alongside the Windows one, or stop the Windows backend and use only WSL? You can change this later from Settings." : pendingWslChange?.nextValue - ? "T3 Code will restart and start only the WSL backend. Your Windows-side projects won't be accessible until you turn this off again." - : "T3 Code will restart and bring the Windows backend back up alongside WSL."} + ? `${APP_DISPLAY_NAME} will restart and start only the WSL backend. Your Windows-side projects won't be accessible until you turn this off again.` + : `${APP_DISPLAY_NAME} will restart and bring the Windows backend back up alongside WSL.`} @@ -3545,7 +3546,7 @@ export function ConnectionsSettings() { Disable Tailscale HTTPS? - T3 Code will restart the local backend without Tailscale Serve. + ${APP_DISPLAY_NAME} will restart the local backend without Tailscale Serve. diff --git a/apps/web/src/components/settings/DesktopNotificationsSettings.tsx b/apps/web/src/components/settings/DesktopNotificationsSettings.tsx index f159afcaf2cf..70a005065a15 100644 --- a/apps/web/src/components/settings/DesktopNotificationsSettings.tsx +++ b/apps/web/src/components/settings/DesktopNotificationsSettings.tsx @@ -15,9 +15,9 @@ import { Switch } from "../ui/switch.tsx"; import { toastManager } from "../ui/toast.tsx"; import { SettingsRow, SettingsSection } from "./settingsLayout.tsx"; import { searchableSetting } from "./settingsSearch.ts"; - import { APP_DISPLAY_NAME } from "~/branding"; + const EVENT_OPTIONS: ReadonlyArray<{ readonly event: DesktopNotificationEvent; readonly title: string; diff --git a/apps/web/src/components/settings/KeybindingsSettings.tsx b/apps/web/src/components/settings/KeybindingsSettings.tsx index ccbd1f06582e..8ab848d40a3f 100644 --- a/apps/web/src/components/settings/KeybindingsSettings.tsx +++ b/apps/web/src/components/settings/KeybindingsSettings.tsx @@ -73,6 +73,7 @@ import { SettingsPageContainer, SettingsSection } from "./settingsLayout"; import { searchableSetting } from "./settingsSearch"; import { Tooltip, TooltipPopup, TooltipTrigger } from "../ui/tooltip"; import { useAtomCommand } from "../../state/use-atom-command"; +import { APP_DISPLAY_NAME } from "~/branding"; function KeybindingPill({ value }: { value: string }) { const parts = value.split("+"); @@ -258,7 +259,7 @@ function UnknownWhenVariableWarning({ } /> - T3 Code does not recognize this condition yet. It can still be saved, but it may not match + ${APP_DISPLAY_NAME} does not recognize this condition yet. It can still be saved, but it may not match unless the runtime provides it. @@ -1248,7 +1249,7 @@ export function KeybindingsSettingsPanel() {

- Some shortcuts may be claimed by the browser before T3 Code sees them. Use the desktop + Some shortcuts may be claimed by the browser before ${APP_DISPLAY_NAME} sees them. Use the desktop app for better keybinding support.

diff --git a/apps/web/src/components/settings/ThemeImportDialog.tsx b/apps/web/src/components/settings/ThemeImportDialog.tsx index d6afe5f0117f..c636168b7151 100644 --- a/apps/web/src/components/settings/ThemeImportDialog.tsx +++ b/apps/web/src/components/settings/ThemeImportDialog.tsx @@ -29,6 +29,7 @@ import { DialogTitle, } from "../ui/dialog"; import { ThemeSearchSection } from "./ThemeSearchSection"; +import { APP_DISPLAY_NAME } from "~/branding"; /** * A full theme export is a few KB, so anything past this is not a theme file. @@ -529,7 +530,7 @@ export function ThemeImportDialog({

Theme file

- {fileName ?? "Drop T3 Code or VS Code .json files"} + {fileName ?? `Drop ${APP_DISPLAY_NAME} or VS Code .json files`}

{chooseButton()} diff --git a/apps/web/src/components/settings/ThemePreviewCircles.tsx b/apps/web/src/components/settings/ThemePreviewCircles.tsx index 1ac8fa734921..91ac016ca1e7 100644 --- a/apps/web/src/components/settings/ThemePreviewCircles.tsx +++ b/apps/web/src/components/settings/ThemePreviewCircles.tsx @@ -12,6 +12,7 @@ import { type ThemeAppearance, type ThemeDefinition, } from "../../themePalette"; +import { APP_DISPLAY_NAME } from "~/branding"; const THEME_PREVIEW_ROLES = [ "sidebar", @@ -58,7 +59,7 @@ const STANDARD_THEME_PREVIEW_COLORS: Record< export const STANDARD_THEME_CARDS: ReadonlyArray = [ { id: "default", - label: "T3 Code", + label: `${APP_DISPLAY_NAME}`, previews: (["light", "dark"] as const).map((mode) => ({ mode, colors: STANDARD_THEME_PREVIEW_COLORS[mode], diff --git a/apps/web/src/components/settings/ThemeSettings.tsx b/apps/web/src/components/settings/ThemeSettings.tsx index 5399d071be9d..7c1ed1ef0983 100644 --- a/apps/web/src/components/settings/ThemeSettings.tsx +++ b/apps/web/src/components/settings/ThemeSettings.tsx @@ -49,6 +49,7 @@ import { type ThemeMode, } from "./ThemePreviewCircles"; import { ThemeWireframe } from "./ThemeWireframe"; +import { APP_DISPLAY_NAME } from "~/branding"; const MAINTAINER_THEMES: ReadonlyArray = [ T3_CHAT_THEME, @@ -683,7 +684,7 @@ export function ThemeLibrary({ // Rings always show the effective owner of each appearance: an unpicked // half belongs to the default card (a null owner), so a fresh install - // shows T3 Code selected instead of nothing. + // shows ${APP_DISPLAY_NAME} selected instead of nothing. const pickedModesFor = (cardId: string | null): ThemeMode[] => { const rings: ThemeMode[] = []; if (lightOwner === cardId) rings.push("light"); @@ -849,7 +850,7 @@ export function ThemeLibrary({ return (

- Choose how T3 Code looks. Use a built-in theme or make your own. + Choose how ${APP_DISPLAY_NAME} looks. Use a built-in theme or make your own.

Color scheme diff --git a/apps/web/src/components/settings/VoiceSettingsPanel.tsx b/apps/web/src/components/settings/VoiceSettingsPanel.tsx index 312fdd0cf4cf..d8bd786c0397 100644 --- a/apps/web/src/components/settings/VoiceSettingsPanel.tsx +++ b/apps/web/src/components/settings/VoiceSettingsPanel.tsx @@ -44,6 +44,7 @@ import { } from "../voice/voiceSettingsStore"; import { useVoiceTraceStore } from "../voice/voiceTraceStore"; import { SettingsPageContainer, SettingsRow, SettingsSection } from "./settingsLayout"; +import { APP_DISPLAY_NAME } from "~/branding"; function messageFromError(error: unknown): string { if (error instanceof Error) return error.message; @@ -122,7 +123,7 @@ function VoiceSettingsContent({ environmentId }: { readonly environmentId: Envir if (result._tag === "Success") { setConfigured(true); setApiKey(""); - setFeedback("API key saved securely on this T3 Code environment."); + setFeedback(`API key saved securely on this ${APP_DISPLAY_NAME} environment.`); } else { setFeedback(messageFromError(squashAtomCommandFailure(result))); } @@ -167,7 +168,7 @@ function VoiceSettingsContent({ environmentId }: { readonly environmentId: Envir if (result._tag === "Success") { setParallelConfigured(true); setParallelApiKey(""); - setParallelFeedback("Parallel API key saved securely on this T3 Code environment."); + setParallelFeedback(`Parallel API key saved securely on this ${APP_DISPLAY_NAME} environment.`); } else { setParallelFeedback(messageFromError(squashAtomCommandFailure(result))); } @@ -211,14 +212,14 @@ function VoiceSettingsContent({ environmentId }: { readonly environmentId: Envir

Voice

- Configure the global OpenAI Realtime voice layer for T3 Code. + Configure the global OpenAI Realtime voice layer for ${APP_DISPLAY_NAME}.

}> {configured ? "Configured" : "Not configured"} @@ -291,7 +292,7 @@ function VoiceSettingsContent({ environmentId }: { readonly environmentId: Envir }> \n${latestAssistantMessage}\n` : "\n\nThere is no completed AI message in the origin task yet."; return `# Role and Objective -You are T3 Code's conversational voice copilot inside a desktop interface for coding-agent harnesses. Start silently and wait for the user. Help the user understand the ongoing task, unfamiliar terms, and project context, or help draft an unsent prompt. +You are ${APP_DISPLAY_NAME}'s conversational voice copilot inside a desktop interface for coding-agent harnesses. Start silently and wait for the user. Help the user understand the ongoing task, unfamiliar terms, and project context, or help draft an unsent prompt. # Personality and Tone The user is a software developer. Assume technical fluency. Use standard engineering terminology without defining basic concepts unless asked. Be direct, neutral, and information-dense. Do not use analogies or tutorial framing by default. diff --git a/apps/web/src/connection/platform.ts b/apps/web/src/connection/platform.ts index c7652136f541..7673c5a8fd9f 100644 --- a/apps/web/src/connection/platform.ts +++ b/apps/web/src/connection/platform.ts @@ -58,6 +58,7 @@ import { type DesktopSecondaryBootstrapsRead, } from "./desktopLocal"; import { connectionStorageLayer } from "./storage"; +import { APP_DISPLAY_NAME } from "~/branding"; let nextObservedRpcRequestId = 0; @@ -117,7 +118,7 @@ function clientMetadata() { const desktop = window.desktopBridge !== undefined; const platform = navigator.platform.trim(); return { - label: desktop ? "T3 Code Desktop" : "T3 Code Web", + label: desktop ? `${APP_DISPLAY_NAME} Desktop` : `${APP_DISPLAY_NAME} Web`, deviceType: "desktop" as const, ...(platform === "" ? {} : { os: platform }), }; diff --git a/apps/web/src/routes/_chat.index.tsx b/apps/web/src/routes/_chat.index.tsx index a77ca03b23ac..db6a69999a10 100644 --- a/apps/web/src/routes/_chat.index.tsx +++ b/apps/web/src/routes/_chat.index.tsx @@ -17,8 +17,8 @@ import { useThreadShells, } from "../state/entities"; import { useEnvironments } from "../state/environments"; -import { APP_DISPLAY_NAME } from "~/branding"; import { hasClerkPublicConfig, hasCloudPublicConfig } from "~/cloud/publicConfig"; +import { APP_DISPLAY_NAME } from "~/branding"; function ChatIndexRouteView() { const { authGateState } = Route.useRouteContext(); diff --git a/apps/web/src/routes/_chat.pull-requests.tsx b/apps/web/src/routes/_chat.pull-requests.tsx index 82a3a25dd8ba..5871b50bb897 100644 --- a/apps/web/src/routes/_chat.pull-requests.tsx +++ b/apps/web/src/routes/_chat.pull-requests.tsx @@ -101,6 +101,7 @@ import { useAtomCommand } from "../state/use-atom-command"; import { cn } from "~/lib/utils"; import { getSourceControlPresentationForKind } from "~/sourceControlPresentation"; import { COLLAPSED_SIDEBAR_TITLEBAR_INSET_CLASS } from "~/workspaceTitlebar"; +import { APP_DISPLAY_NAME } from "~/branding"; export interface PullRequestsSearch { readonly involvement: PullRequestInvolvement; @@ -1347,7 +1348,7 @@ function PullRequestsRouteView() { ) : !pullRequestsSupported ? ( ) : firstLoad ? ( diff --git a/apps/web/src/routes/_chat.tsx b/apps/web/src/routes/_chat.tsx index efb263b09d5e..56a1ffc238f8 100644 --- a/apps/web/src/routes/_chat.tsx +++ b/apps/web/src/routes/_chat.tsx @@ -16,6 +16,7 @@ import { selectActiveRightPanel, useRightPanelStore } from "../rightPanelStore"; import { useThreadSelectionStore } from "../threadSelectionStore"; import { stackedThreadToast, toastManager } from "~/components/ui/toast"; import { primaryServerKeybindingsAtom } from "~/state/server"; +import { APP_DISPLAY_NAME } from "~/branding"; function ChatRouteGlobalShortcuts() { const clearSelection = useThreadSelectionStore((state) => state.clearSelection); @@ -87,7 +88,7 @@ function ChatRouteGlobalShortcuts() { stackedThreadToast({ type: "info", title: "Preview is desktop-only", - description: "Open T3 Code in the desktop app to use the in-app preview.", + description: `Open ${APP_DISPLAY_NAME} in the desktop app to use the in-app preview.`, }), ); return; diff --git a/apps/web/src/versionSkew.test.ts b/apps/web/src/versionSkew.test.ts index 41a148bacd8c..0f751882fb48 100644 --- a/apps/web/src/versionSkew.test.ts +++ b/apps/web/src/versionSkew.test.ts @@ -2,6 +2,7 @@ import { EnvironmentId } from "@t3tools/contracts"; import { describe, expect, it } from "vite-plus/test"; import { APP_VERSION } from "./branding"; +import { APP_DISPLAY_NAME } from "./branding"; import { appendVersionMismatchHint, buildVersionMismatchDismissalKey, @@ -22,7 +23,7 @@ describe("versionSkew", () => { expect(resolveVersionMismatch("9.9.9")).toEqual({ clientVersion: APP_VERSION, serverVersion: "9.9.9", - hint: "Version mismatch. Try syncing the client and server to the same T3 Code version.", + hint: `Version mismatch. Try syncing the client and server to the same ${APP_DISPLAY_NAME} version.`, }); }); @@ -74,7 +75,7 @@ describe("versionSkew", () => { const mismatch = resolveVersionMismatch("9.9.9"); expect(appendVersionMismatchHint("Socket closed.", mismatch)).toBe( - "Socket closed. Hint: Version mismatch. Try syncing the client and server to the same T3 Code version.", + `Socket closed. Hint: Version mismatch. Try syncing the client and server to the same ${APP_DISPLAY_NAME} version.`, ); }); diff --git a/apps/web/src/versionSkew.ts b/apps/web/src/versionSkew.ts index f56f03ab7ad3..e8f0e740917c 100644 --- a/apps/web/src/versionSkew.ts +++ b/apps/web/src/versionSkew.ts @@ -1,7 +1,7 @@ import type { EnvironmentId, ServerConfig, ServerSelfUpdateCapability } from "@t3tools/contracts"; import * as Schema from "effect/Schema"; -import { APP_VERSION } from "./branding"; +import { APP_DISPLAY_NAME, APP_VERSION } from "./branding"; import { getLocalStorageItem, setLocalStorageItem } from "./hooks/useLocalStorage"; export interface VersionMismatch { @@ -39,7 +39,7 @@ export function resolveVersionMismatch( return { clientVersion: normalizedClientVersion, serverVersion: normalizedServerVersion, - hint: "Version mismatch. Try syncing the client and server to the same T3 Code version.", + hint: `Version mismatch. Try syncing the client and server to the same ${APP_DISPLAY_NAME} version.`, }; }