Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
5 changes: 3 additions & 2 deletions apps/web/src/cloud/linkEnvironment.ts
Original file line number Diff line number Diff line change
Expand Up @@ -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();
Expand Down Expand Up @@ -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}.`,
});
}

Expand Down Expand Up @@ -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.",
});
}
Expand Down
3 changes: 2 additions & 1 deletion apps/web/src/components/ChatView.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -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).]";
Expand Down Expand Up @@ -6772,7 +6773,7 @@ function ChatViewContent(props: ChatViewProps) {
) : activeRightPanelSurface?.kind === "pull-request" && !supportsPullRequests ? (
<PullRequestsUnavailableState
title="Pull requests unavailable"
error="Update this environment's T3 Code server to browse pull requests."
error={`Update this environment's ${APP_DISPLAY_NAME} server to browse pull requests.`}
/>
) : activeRightPanelSurface?.kind === "pull-request" ? (
// No onClose: the surface tab's own X owns closing here, and a second X in the header
Expand Down
3 changes: 2 additions & 1 deletion apps/web/src/components/RightPanelTabs.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand Down Expand Up @@ -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.",
Expand Down
3 changes: 2 additions & 1 deletion apps/web/src/components/SshPasswordRequestDialog.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand Down Expand Up @@ -176,7 +177,7 @@ export function SshPasswordRequestDialog({
<DialogTitle>SSH Authentication Required</DialogTitle>
<DialogDescription>
T3 needs your SSH key passphrase or password to connect to <code>{target}</code>. 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}.
</DialogDescription>
</DialogHeader>
<DialogPanel className="space-y-3" scrollFade={false}>
Expand Down
Original file line number Diff line number Diff line change
@@ -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",
Expand All @@ -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 {
Expand Down
7 changes: 4 additions & 3 deletions apps/web/src/components/cloud/RelayClientInstallDialog.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand Down Expand Up @@ -69,8 +70,8 @@ export function RelayClientInstallDialog() {
</DialogTitle>
<DialogDescription>
{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.`}
</DialogDescription>
</DialogHeader>
<DialogPanel scrollFade={false}>
Expand All @@ -91,7 +92,7 @@ export function RelayClientInstallDialog() {
value={activeStepIndex + 1}
/>
<p className="text-xs leading-relaxed text-muted-foreground">
Keep T3 Code open while the relay client is installed.
Keep ${APP_DISPLAY_NAME} open while the relay client is installed.
</p>
</div>
) : (
Expand Down
3 changes: 2 additions & 1 deletion apps/web/src/components/computers/ComputerTaskHosts.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand Down Expand Up @@ -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.`,
);
}
9 changes: 5 additions & 4 deletions apps/web/src/components/desktopUpdate.logic.ts
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
import type { DesktopUpdateActionResult, DesktopUpdateState } from "@t3tools/contracts";
import { APP_DISPLAY_NAME } from "~/branding";

export type DesktopUpdateButtonAction = "download" | "install" | "none";

Expand Down Expand Up @@ -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 {
Expand Down Expand Up @@ -98,7 +99,7 @@ export function getDesktopUpdateInstallConfirmationMessage(
state: Pick<DesktopUpdateState, "availableVersion" | "downloadedVersion">,
): 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 {
Expand Down
3 changes: 2 additions & 1 deletion apps/web/src/components/settings/BrowserImportWizard.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -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 {
Expand Down Expand Up @@ -220,7 +221,7 @@ function FullDiskAccessStep({
return (
<>
<DialogHeader>
<DialogTitle>Let T3 Code read {source.name}&rsquo;s cookies</DialogTitle>
<DialogTitle>Let ${APP_DISPLAY_NAME} read {source.name}&rsquo;s cookies</DialogTitle>
<DialogDescription>
{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.
Expand Down
3 changes: 2 additions & 1 deletion apps/web/src/components/settings/ComputerHistorySettings.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand Down Expand Up @@ -330,7 +331,7 @@ export function ComputerHistorySettings() {
</p>
{!onDesktop ? (
<p className="text-muted-foreground mb-3 px-3 text-sm sm:px-4">
Computer History recording runs in the T3 Code desktop app.
Computer History recording runs in the ${APP_DISPLAY_NAME} desktop app.
</p>
) : null}

Expand Down
9 changes: 5 additions & 4 deletions apps/web/src/components/settings/ComputerUseSettings.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand Down Expand Up @@ -167,14 +168,14 @@ export function ComputerUseSettings() {
<MonitorIcon className="mt-0.5 size-4 shrink-0" />
<p>
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.
</p>
</div>
) : null}

<SettingsRow
{...searchableSetting("computer-use-enabled")}
description="Let T3 Code control apps on your computer"
description={`Let ${APP_DISPLAY_NAME} control apps on your computer`}
resetAction={
desktop.enabled !== defaults.enabled ? (
<SettingResetButton
Expand Down Expand Up @@ -372,7 +373,7 @@ export function ComputerUseSettings() {
<DialogHeader>
<DialogTitle>Google Chrome</DialogTitle>
<DialogDescription>
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.
</DialogDescription>
</DialogHeader>
Expand Down
19 changes: 10 additions & 9 deletions apps/web/src/components/settings/ConnectionsSettings.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -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<AdvertisedEndpoint> = [];
Expand Down Expand Up @@ -3145,7 +3146,7 @@ export function ConnectionsSettings() {
{desktopWslState.enabled ? (
<SettingsRow
title="WSL only"
description="Stop the Windows backend and run only the WSL backend. Useful if you develop entirely inside WSL and don't want a second backend process. T3 Code restarts when you change this."
description={`Stop the Windows backend and run only the WSL backend. Useful if you develop entirely inside WSL and don't want a second backend process. ${APP_DISPLAY_NAME} restarts when you change this.`}
className="bg-muted/20 pl-7 sm:pl-8"
control={
<Switch
Expand Down Expand Up @@ -3392,8 +3393,8 @@ export function ConnectionsSettings() {
</AlertDialogTitle>
<AlertDialogDescription>
{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.`}
</AlertDialogDescription>
</AlertDialogHeader>
<AlertDialogFooter>
Expand Down Expand Up @@ -3451,15 +3452,15 @@ export function ConnectionsSettings() {
<AlertDialogDescription>
{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.`}
</AlertDialogDescription>
</AlertDialogHeader>
<AlertDialogFooter>
Expand Down Expand Up @@ -3545,7 +3546,7 @@ export function ConnectionsSettings() {
<AlertDialogHeader>
<AlertDialogTitle>Disable Tailscale HTTPS?</AlertDialogTitle>
<AlertDialogDescription>
T3 Code will restart the local backend without Tailscale Serve.
${APP_DISPLAY_NAME} will restart the local backend without Tailscale Serve.
</AlertDialogDescription>
</AlertDialogHeader>
<AlertDialogFooter>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand Down
5 changes: 3 additions & 2 deletions apps/web/src/components/settings/KeybindingsSettings.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -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("+");
Expand Down Expand Up @@ -258,7 +259,7 @@ function UnknownWhenVariableWarning({
}
/>
<TooltipPopup side="top" className="max-w-72 whitespace-normal leading-relaxed">
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.
</TooltipPopup>
</Tooltip>
Expand Down Expand Up @@ -1248,7 +1249,7 @@ export function KeybindingsSettingsPanel() {
<div className="flex items-start gap-2 border-b border-warning/20 bg-warning/5 px-3 py-2.5 text-[12px] leading-relaxed text-muted-foreground sm:px-4">
<InfoIcon className="mt-0.5 size-3.5 shrink-0 text-warning" />
<p>
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.
</p>
</div>
Expand Down
3 changes: 2 additions & 1 deletion apps/web/src/components/settings/ThemeImportDialog.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -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.
Expand Down Expand Up @@ -529,7 +530,7 @@ export function ThemeImportDialog({
<div className="min-w-0">
<p className="text-sm font-medium">Theme file</p>
<p className="truncate text-xs text-muted-foreground">
{fileName ?? "Drop T3 Code or VS Code .json files"}
{fileName ?? `Drop ${APP_DISPLAY_NAME} or VS Code .json files`}
</p>
</div>
{chooseButton()}
Expand Down
3 changes: 2 additions & 1 deletion apps/web/src/components/settings/ThemePreviewCircles.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,7 @@ import {
type ThemeAppearance,
type ThemeDefinition,
} from "../../themePalette";
import { APP_DISPLAY_NAME } from "~/branding";

const THEME_PREVIEW_ROLES = [
"sidebar",
Expand Down Expand Up @@ -58,7 +59,7 @@ const STANDARD_THEME_PREVIEW_COLORS: Record<
export const STANDARD_THEME_CARDS: ReadonlyArray<ThemeCardDefinition> = [
{
id: "default",
label: "T3 Code",
label: `${APP_DISPLAY_NAME}`,
previews: (["light", "dark"] as const).map((mode) => ({
mode,
colors: STANDARD_THEME_PREVIEW_COLORS[mode],
Expand Down
Loading
Loading