Skip to content
Merged
Show file tree
Hide file tree
Changes from 17 commits
Commits
Show all changes
19 commits
Select commit Hold shift + click to select a range
d494800
fix(web): show Linux icon for WSL threads
UtkarshUsername Aug 27, 2026
77438fc
fix(web): show Linux icon in composer environment picker
UtkarshUsername Aug 28, 2026
63e0b66
Merge branch 'main' into fix/web-wsl-sidebar-icon
UtkarshUsername Aug 28, 2026
8f6ec6e
fix(web): use Linux icon in legacy sidebar
UtkarshUsername Aug 28, 2026
d9f2b09
refactor(web): share environment icons
UtkarshUsername Aug 28, 2026
f01bc91
refactor(web): move Linux icon to shared icons
UtkarshUsername Aug 28, 2026
020546e
fix(web): preserve server icon for remote threads
UtkarshUsername Aug 28, 2026
960e0e1
Merge branch 'main' into fix/web-wsl-sidebar-icon
UtkarshUsername Aug 28, 2026
8e21744
fix(web): identify WSL environments explicitly
UtkarshUsername Aug 28, 2026
8fc1535
fix(web): show Linux icon in sidebar tooltips
UtkarshUsername Aug 28, 2026
c041e86
fix(web): align environment icon states
UtkarshUsername Aug 28, 2026
2bd7efe
Merge branch 'main' into fix/web-wsl-sidebar-icon
UtkarshUsername Aug 28, 2026
3d64750
fix(web): center legacy sidebar environment icon
UtkarshUsername Aug 28, 2026
5b9b965
Merge branch 'main' into fix/web-wsl-sidebar-icon
UtkarshUsername Aug 28, 2026
8b345ab
Merge branch 'main' into fix/web-wsl-sidebar-icon
UtkarshUsername Aug 28, 2026
8cb96c3
Merge branch 'main' into fix/web-wsl-sidebar-icon
UtkarshUsername Aug 28, 2026
8c50438
Merge upstream/main into fix/web-wsl-sidebar-icon
UtkarshUsername Sep 5, 2026
bf5cc13
feat(environments): add Linux/WSL icon
UtkarshUsername Sep 6, 2026
ec30f95
Merge branch 'main' into fix/web-wsl-sidebar-icon
UtkarshUsername Sep 6, 2026
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
1 change: 1 addition & 0 deletions apps/web/src/components/BranchToolbar.logic.ts
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,7 @@ export interface EnvironmentOption {
label: string;
isPrimary: boolean;
machine: EnvironmentMachineKind;
isWsl: boolean;
}

export const EnvMode = Schema.Literals(["local", "worktree"]);
Expand Down
7 changes: 6 additions & 1 deletion apps/web/src/components/BranchToolbar.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -116,6 +116,7 @@ const MobileRunContextSelector = memo(function MobileRunContextSelector({
<span className="inline-flex shrink-0 items-center gap-0.5">
<EnvironmentMachineIcon
kind={activeEnvironment?.machine ?? "server"}
wsl={activeEnvironment?.isWsl ?? false}
className="size-3 shrink-0 mx-0!"
/>
<WorkspaceIcon className="size-3 shrink-0 mx-0!" />
Expand Down Expand Up @@ -177,7 +178,11 @@ const MobileRunContextSelector = memo(function MobileRunContextSelector({
value={env.environmentId}
>
<span className="flex min-w-0 items-center gap-1.5">
<EnvironmentMachineIcon kind={env.machine} className="size-3" />
<EnvironmentMachineIcon
kind={env.machine}
wsl={env.isWsl}
className="size-3"
/>
<span className="min-w-0 truncate">{env.label}</span>
</span>
</MenuRadioItem>
Expand Down
4 changes: 3 additions & 1 deletion apps/web/src/components/BranchToolbarEnvironmentSelector.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -55,6 +55,7 @@ export const BranchToolbarEnvironmentSelector = memo(function BranchToolbarEnvir
>
<EnvironmentMachineIcon
kind={activeEnvironment?.machine ?? "server"}
wsl={activeEnvironment?.isWsl ?? false}
className="size-3 shrink-0"
/>
<span
Expand Down Expand Up @@ -88,6 +89,7 @@ export const BranchToolbarEnvironmentSelector = memo(function BranchToolbarEnvir
>
<EnvironmentMachineIcon
kind={activeEnvironment?.machine ?? "server"}
wsl={activeEnvironment?.isWsl ?? false}
className="size-3 shrink-0"
/>
<span
Expand All @@ -108,7 +110,7 @@ export const BranchToolbarEnvironmentSelector = memo(function BranchToolbarEnvir
{availableEnvironments.map((env) => (
<SelectItem key={env.environmentId} value={env.environmentId}>
<span className="inline-flex items-center gap-1.5">
<EnvironmentMachineIcon kind={env.machine} className="size-3" />
<EnvironmentMachineIcon kind={env.machine} wsl={env.isWsl} className="size-3" />
{env.label}
</span>
</SelectItem>
Expand Down
2 changes: 2 additions & 0 deletions apps/web/src/components/ChatView.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -85,6 +85,7 @@ import * as Cause from "effect/Cause";
import * as Schema from "effect/Schema";
import { AsyncResult } from "effect/unstable/reactivity";
import { isElectron } from "../env";
import { isWslConnectionTarget } from "../connection/desktopLocal";
import { readLocalApi } from "../localApi";
import { useDiffPanelStore } from "../diffPanelStore";
import {
Expand Down Expand Up @@ -2134,6 +2135,7 @@ export default function ChatView(props: ChatViewProps) {
label: environment?.label ?? p.environmentId,
isPrimary,
machine: resolveEnvironmentMachineKind(environment?.serverConfig ?? null),
isWsl: environment !== null && isWslConnectionTarget(environment.entry.target),
});
}
// Sort: primary first, then alphabetical
Expand Down
6 changes: 4 additions & 2 deletions apps/web/src/components/EnvironmentMachineIcon.tsx
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
import type { EnvironmentMachineKind } from "@t3tools/contracts";
import { CloudIcon, LaptopIcon, MonitorIcon, ServerIcon, type LucideProps } from "lucide-react";
import type { FunctionComponent, SVGProps } from "react";
import { LinuxIcon } from "./Icons";

// Lucide has no Apple desktops, so these two are drawn to its grammar (24
// unit grid, 2 unit stroke, round joins) and share its prop surface so callers
Expand Down Expand Up @@ -68,8 +69,9 @@ export function environmentMachineIcon(

export function EnvironmentMachineIcon({
kind,
wsl = false,
...props
}: LucideProps & { readonly kind: EnvironmentMachineKind }) {
const Icon = ICON_BY_KIND[kind];
}: LucideProps & { readonly kind: EnvironmentMachineKind; readonly wsl?: boolean }) {
const Icon = wsl ? LinuxIcon : ICON_BY_KIND[kind];
return <Icon {...props} />;
}
18 changes: 17 additions & 1 deletion apps/web/src/components/Icons.tsx
Original file line number Diff line number Diff line change
@@ -1,8 +1,24 @@
import React, { type SVGProps, useId } from "react";
import { CloudIcon, MonitorIcon } from "lucide-react";
import { cn } from "~/lib/utils";

export type Icon = React.FC<SVGProps<SVGSVGElement>>;

export const LinuxIcon: Icon = ({ className, ...props }) => (
<svg {...props} className={className} viewBox="-2 -2 28 28" fill="currentColor">
<path d="M12.504 0c-.155 0-.315.008-.48.021-4.226.333-3.105 4.807-3.17 6.298-.076 1.092-.3 1.953-1.05 3.02-.885 1.051-2.127 2.75-2.716 4.521-.278.832-.41 1.684-.287 2.489a.424.424 0 00-.11.135c-.26.268-.45.6-.663.839-.199.199-.485.267-.797.4-.313.136-.658.269-.864.68-.09.189-.136.394-.132.602 0 .199.027.4.055.536.058.399.116.728.04.97-.249.68-.28 1.145-.106 1.484.174.334.535.47.94.601.81.2 1.91.135 2.774.6.926.466 1.866.67 2.616.47.526-.116.97-.464 1.208-.946.587-.003 1.23-.269 2.26-.334.699-.058 1.574.267 2.577.2.025.134.063.198.114.333l.003.003c.391.778 1.113 1.132 1.884 1.071.771-.06 1.592-.536 2.257-1.306.631-.765 1.683-1.084 2.378-1.503.348-.199.629-.469.649-.853.023-.4-.2-.811-.714-1.376v-.097l-.003-.003c-.17-.2-.25-.535-.338-.926-.085-.401-.182-.786-.492-1.046h-.003c-.059-.054-.123-.067-.188-.135a.357.357 0 00-.19-.064c.431-1.278.264-2.55-.173-3.694-.533-1.41-1.465-2.638-2.175-3.483-.796-1.005-1.576-1.957-1.56-3.368.026-2.152.236-6.133-3.544-6.139zm.529 3.405h.013c.213 0 .396.062.584.198.19.135.33.332.438.533.105.259.158.459.166.724 0-.02.006-.04.006-.06v.105a.086.086 0 01-.004-.021l-.004-.024a1.807 1.807 0 01-.15.706.953.953 0 01-.213.335.71.71 0 00-.088-.042c-.104-.045-.198-.064-.284-.133a1.312 1.312 0 00-.22-.066c.05-.06.146-.133.183-.198.053-.128.082-.264.088-.402v-.02a1.21 1.21 0 00-.061-.4c-.045-.134-.101-.2-.183-.333-.084-.066-.167-.132-.267-.132h-.016c-.093 0-.176.03-.262.132a.8.8 0 00-.205.334 1.18 1.18 0 00-.09.4v.019c.002.089.008.179.02.267-.193-.067-.438-.135-.607-.202a1.635 1.635 0 01-.018-.2v-.02a1.772 1.772 0 01.15-.768c.082-.22.232-.406.43-.533a.985.985 0 01.594-.2zm-2.962.059h.036c.142 0 .27.048.399.135.146.129.264.288.344.465.09.199.14.4.153.667v.004c.007.134.006.2-.002.266v.08c-.03.007-.056.018-.083.024-.152.055-.274.135-.393.2.012-.09.013-.18.003-.267v-.015c-.012-.133-.04-.2-.082-.333a.613.613 0 00-.166-.267.248.248 0 00-.183-.064h-.021c-.071.006-.13.04-.186.132a.552.552 0 00-.12.27.944.944 0 00-.023.33v.015c.012.135.037.2.08.334.046.134.098.2.166.268.01.009.02.018.034.024-.07.057-.117.07-.176.136a.304.304 0 01-.131.068 2.62 2.62 0 01-.275-.402 1.772 1.772 0 01-.155-.667 1.759 1.759 0 01.08-.668 1.43 1.43 0 01.283-.535c.128-.133.26-.2.418-.2zm1.37 1.706c.332 0 .733.065 1.216.399.293.2.523.269 1.052.468h.003c.255.136.405.266.478.399v-.131a.571.571 0 01.016.47c-.123.31-.516.643-1.063.842v.002c-.268.135-.501.333-.775.465-.276.135-.588.292-1.012.267a1.139 1.139 0 01-.448-.067 3.566 3.566 0 01-.322-.198c-.195-.135-.363-.332-.612-.465v-.005h-.005c-.4-.246-.616-.512-.686-.71-.07-.268-.005-.47.193-.6.224-.135.38-.271.483-.336.104-.074.143-.102.176-.131h.002v-.003c.169-.202.436-.47.839-.601.139-.036.294-.065.466-.065zm2.8 2.142c.358 1.417 1.196 3.475 1.735 4.473.286.534.855 1.659 1.102 3.024.156-.005.33.018.513.064.646-1.671-.546-3.467-1.089-3.966-.22-.2-.232-.335-.123-.335.59.534 1.365 1.572 1.646 2.757.13.535.16 1.104.021 1.67.067.028.135.06.205.067 1.032.534 1.413.938 1.23 1.537v-.043c-.06-.003-.12 0-.18 0h-.016c.151-.467-.182-.825-1.065-1.224-.915-.4-1.646-.336-1.77.465-.008.043-.013.066-.018.135-.068.023-.139.053-.209.064-.43.268-.662.669-.793 1.187-.13.533-.17 1.156-.205 1.869v.003c-.02.334-.17.838-.319 1.35-1.5 1.072-3.58 1.538-5.348.334a2.645 2.645 0 00-.402-.533 1.45 1.45 0 00-.275-.333c.182 0 .338-.03.465-.067a.615.615 0 00.314-.334c.108-.267 0-.697-.345-1.163-.345-.467-.931-.995-1.788-1.521-.63-.4-.986-.87-1.15-1.396-.165-.534-.143-1.085-.015-1.645.245-1.07.873-2.11 1.274-2.763.107-.065.037.135-.408.974-.396.751-1.14 2.497-.122 3.854a8.123 8.123 0 01.647-2.876c.564-1.278 1.743-3.504 1.836-5.268.048.036.217.135.289.202.218.133.38.333.59.465.21.201.477.335.876.335.039.003.075.006.11.006.412 0 .73-.134.997-.268.29-.134.52-.334.74-.4h.005c.467-.135.835-.402 1.044-.7zm2.185 8.958c.037.6.343 1.245.882 1.377.588.134 1.434-.333 1.791-.765l.211-.01c.315-.007.577.01.847.268l.003.003c.208.199.305.53.391.876.085.4.154.78.409 1.066.486.527.645.906.636 1.14l.003-.007v.018l-.003-.012c-.015.262-.185.396-.498.595-.63.401-1.746.712-2.457 1.57-.618.737-1.37 1.14-2.036 1.191-.664.053-1.237-.2-1.574-.898l-.005-.003c-.21-.4-.12-1.025.056-1.69.176-.668.428-1.344.463-1.897.037-.714.076-1.335.195-1.814.12-.465.308-.797.641-.984l.045-.022zm-10.814.049h.01c.053 0 .105.005.157.014.376.055.706.333 1.023.752l.91 1.664.003.003c.243.533.754 1.064 1.189 1.637.434.598.77 1.131.729 1.57v.006c-.057.744-.48 1.148-1.125 1.294-.645.135-1.52.002-2.395-.464-.968-.536-2.118-.469-2.857-.602-.369-.066-.61-.2-.723-.4-.11-.2-.113-.602.123-1.23v-.004l.002-.003c.117-.334.03-.752-.027-1.118-.055-.401-.083-.71.043-.94.16-.334.396-.4.69-.533.294-.135.64-.202.915-.47h.002v-.002c.256-.268.445-.601.668-.838.19-.201.38-.336.663-.336zm7.159-9.074c-.435.201-.945.535-1.488.535-.542 0-.97-.267-1.28-.466-.154-.134-.28-.268-.373-.335-.164-.134-.144-.333-.074-.333.109.016.129.134.199.2.096.066.215.2.36.333.292.2.68.467 1.167.467.485 0 1.053-.267 1.398-.466.195-.135.445-.334.648-.467.156-.136.149-.267.279-.267.128.016.034.134-.147.332a8.097 8.097 0 01-.69.468zm-1.082-1.583V5.64c-.006-.02.013-.042.029-.05.074-.043.18-.027.26.004.063 0 .16.067.15.135-.006.049-.085.066-.135.066-.055 0-.092-.043-.141-.068-.052-.018-.146-.008-.163-.065zm-.551 0c-.02.058-.113.049-.166.066-.047.025-.086.068-.14.068-.05 0-.13-.02-.136-.068-.01-.066.088-.133.15-.133.08-.031.184-.047.259-.005.019.009.036.03.03.05v.02h.003z" />
</svg>
);

export function getEnvironmentIcon(input: {
isPrimary: boolean;
isWsl: boolean;
remoteIcon?: Icon;
}): Icon {
if (input.isPrimary) return MonitorIcon;
if (input.isWsl) return LinuxIcon;
return input.remoteIcon ?? CloudIcon;
}

export const GitHubIcon: Icon = (props) => (
<svg {...props} viewBox="0 0 1024 1024" fill="none">
<path
Expand Down
35 changes: 24 additions & 11 deletions apps/web/src/components/LegacySidebar.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -3,9 +3,9 @@ import {
ArrowUpDownIcon,
ChevronRightIcon,
CloudIcon,
ContainerIcon,
FolderPlusIcon,
Globe2Icon,
LaptopIcon,
LoaderIcon,
SearchIcon,
SquarePenIcon,
Expand All @@ -24,6 +24,7 @@ import {
} from "./ThreadStatusIndicators";
import { EnvironmentMachineIcon } from "./EnvironmentMachineIcon";
import { ProjectFavicon } from "./ProjectFavicon";
import { getEnvironmentIcon } from "./Icons";
import { useAtomValue } from "@effect/atom-react";
import { autoAnimate } from "@formkit/auto-animate";
import React, { useCallback, useEffect, memo, useMemo, useRef, useState } from "react";
Expand Down Expand Up @@ -73,7 +74,7 @@ import {
type SidebarThreadPreviewCount,
type SidebarThreadSortOrder,
} from "@t3tools/contracts/settings";
import { isDesktopLocalConnectionTarget } from "../connection/desktopLocal";
import { isDesktopLocalConnectionTarget, isWslConnectionTarget } from "../connection/desktopLocal";
import { useDesktopLocalBootstraps } from "../connection/useDesktopLocalBootstraps";
import { isElectron } from "../env";
import { useTerminalFocus } from "../hooks/useTerminalFocus";
Expand Down Expand Up @@ -407,9 +408,9 @@ export const SidebarThreadRow = memo(function SidebarThreadRow(props: SidebarThr
const remoteMachine = resolveEnvironmentMachineKind(environment?.serverConfig ?? null);
// A desktop-local secondary backend (e.g. the WSL backend) shows up as a
// bearer environment whose connection id is prefixed "local:". It runs on the
// user's own machine, so the cloud icon is misleading — label it "Local" and
// suppress the cloud icon (the project header already shows a container icon
// for desktop-local projects, see sidebarProjectGrouping).
// user's own machine, so the cloud icon is misleading, label it "Local" and
// suppress the cloud icon (the project header already shows a
// local-environment icon for desktop-local projects, see sidebarProjectGrouping).
const isDesktopLocalThread =
environment !== null && isDesktopLocalConnectionTarget(environment.entry.target);
const threadEnvironmentLabel = isRemoteThread
Expand Down Expand Up @@ -1152,6 +1153,11 @@ const SidebarProjectItem = memo(function SidebarProjectItem(props: SidebarProjec
isManualProjectSorting,
dragHandleProps,
} = props;
const EnvironmentIcon = getEnvironmentIcon({
isPrimary: false,
isWsl: project.allRemoteMembersAreWsl,
remoteIcon: project.allRemoteMembersAreDesktopLocal ? LaptopIcon : CloudIcon,
});
const threadSortOrder = useClientSettings<SidebarThreadSortOrder>(
(settings) => settings.sidebarThreadSortOrder,
);
Expand Down Expand Up @@ -2389,15 +2395,11 @@ const SidebarProjectItem = memo(function SidebarProjectItem(props: SidebarProjec
? "Local sandbox project"
: "Remote project"
}
className="pointer-events-none absolute top-1 right-1.5 inline-flex size-5 items-center justify-center rounded-md text-icon-muted transition-opacity duration-150 max-sm:right-7 group-hover/project-header:opacity-0 group-focus-within/project-header:opacity-0 max-sm:group-hover/project-header:opacity-100 max-sm:group-focus-within/project-header:opacity-100"
className="pointer-events-none absolute top-1/2 right-1.5 inline-flex size-5 -translate-y-1/2 items-center justify-center rounded-md text-icon-muted transition-opacity duration-150 max-sm:right-7 group-hover/project-header:opacity-0 group-focus-within/project-header:opacity-0 max-sm:group-hover/project-header:opacity-100 max-sm:group-focus-within/project-header:opacity-100"
/>
}
>
{project.allRemoteMembersAreDesktopLocal ? (
<ContainerIcon className="size-3" />
) : (
<CloudIcon className="size-3" />
)}
<EnvironmentIcon className="size-3" />
</TooltipTrigger>
<TooltipPopup side="top">
{project.allRemoteMembersAreDesktopLocal
Expand Down Expand Up @@ -3171,6 +3173,15 @@ export default function LegacySidebar() {
),
[environments],
);
const wslEnvironmentIds = useMemo(
() =>
new Set(
environments
.filter((environment) => isWslConnectionTarget(environment.entry.target))
.map((environment) => environment.environmentId),
),
[environments],
);
const orderedProjects = useMemo(() => {
return orderItemsByPreferredIds({
items: projects,
Expand Down Expand Up @@ -3211,10 +3222,12 @@ export default function LegacySidebar() {
primaryEnvironmentId,
resolveEnvironmentLabel: (environmentId) => environmentLabelById.get(environmentId) ?? null,
isDesktopLocalEnvironment: (environmentId) => desktopLocalEnvironmentIds.has(environmentId),
isWslEnvironment: (environmentId) => wslEnvironmentIds.has(environmentId),
});
}, [
environmentLabelById,
desktopLocalEnvironmentIds,
wslEnvironmentIds,
orderedProjects,
projectGroupingSettings,
primaryEnvironmentId,
Expand Down
21 changes: 21 additions & 0 deletions apps/web/src/components/Sidebar.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -79,6 +79,7 @@ import {
squashAtomCommandFailure,
} from "@t3tools/client-runtime/state/runtime";
import { isElectron } from "../env";
import { isWslConnectionTarget } from "../connection/desktopLocal";
import {
resolveShortcutCommand,
shortcutLabelForCommand,
Expand Down Expand Up @@ -294,6 +295,7 @@ function SidebarThreadTooltip({
projectIcon,
environmentLabel,
environmentMachine,
environmentIsWsl,
providerEntry,
showInstanceBadge,
modelInstanceId,
Expand All @@ -310,6 +312,7 @@ function SidebarThreadTooltip({
projectIcon: ProjectIconOverride | null;
environmentLabel: string | null;
environmentMachine: EnvironmentMachineKind;
environmentIsWsl: boolean;
providerEntry: ProviderInstanceEntry | null;
showInstanceBadge: boolean;
modelInstanceId: string;
Expand Down Expand Up @@ -352,6 +355,7 @@ function SidebarThreadTooltip({
<div className="flex min-w-0 items-center gap-2">
<EnvironmentMachineIcon
kind={environmentMachine}
wsl={environmentIsWsl}
className="size-3 shrink-0 stroke-muted-foreground"
/>
<div className="min-w-0 truncate text-foreground/75">{environmentLabel}</div>
Expand Down Expand Up @@ -772,6 +776,7 @@ const SidebarThreadRow = memo(function SidebarThreadRow(props: {
currentEnvironmentId: string | null;
environmentLabel: string | null;
environmentMachine: EnvironmentMachineKind;
environmentIsWsl: boolean;
projectCwd: string | null;
projectFaviconPath: string | null;
projectIcon: ProjectIconOverride | null;
Expand Down Expand Up @@ -1032,6 +1037,7 @@ const SidebarThreadRow = memo(function SidebarThreadRow(props: {
projectIcon={props.projectIcon}
environmentLabel={props.environmentLabel}
environmentMachine={props.environmentMachine}
environmentIsWsl={props.environmentIsWsl}
providerEntry={providerEntry}
showInstanceBadge={showInstanceBadge}
modelInstanceId={modelInstanceId}
Expand Down Expand Up @@ -1700,6 +1706,7 @@ const SidebarThreadRow = memo(function SidebarThreadRow(props: {
<EnvironmentMachineIcon
aria-hidden
kind={props.environmentMachine}
wsl={props.environmentIsWsl}
className="size-3.5"
/>
</span>
Expand Down Expand Up @@ -1750,6 +1757,7 @@ const SidebarSearchResultRow = memo(function SidebarSearchResultRow(props: {
projectDisplayName: string | null;
environmentLabel: string | null;
environmentMachine: EnvironmentMachineKind;
environmentIsWsl: boolean;
providerEntryByInstanceId: ReadonlyMap<string, ProviderInstanceEntry>;
isHighlighted: boolean;
isRouteActive: boolean;
Expand Down Expand Up @@ -1851,6 +1859,7 @@ const SidebarSearchResultRow = memo(function SidebarSearchResultRow(props: {
projectIcon={props.projectIcon}
environmentLabel={props.environmentLabel}
environmentMachine={props.environmentMachine}
environmentIsWsl={props.environmentIsWsl}
providerEntry={providerEntry}
showInstanceBadge={showInstanceBadge}
modelInstanceId={modelInstanceId}
Expand Down Expand Up @@ -2004,6 +2013,16 @@ export default function Sidebar() {
),
[environments],
);
const environmentIsWslById = useMemo(
() =>
new Map(
environments.map(
(environment) =>
[environment.environmentId, isWslConnectionTarget(environment.entry.target)] as const,
),
),
[environments],
);
const orderedProjects = useMemo(
() =>
orderItemsByPreferredIds({
Expand Down Expand Up @@ -3957,6 +3976,7 @@ export default function Sidebar() {
environmentMachine={
environmentMachineById.get(thread.environmentId) ?? "server"
}
environmentIsWsl={environmentIsWslById.get(thread.environmentId) ?? false}
providerEntryByInstanceId={
providerEntriesByEnvironment.get(thread.environmentId) ??
EMPTY_PROVIDER_ENTRIES
Expand Down Expand Up @@ -4058,6 +4078,7 @@ export default function Sidebar() {
environmentMachine={
environmentMachineById.get(thread.environmentId) ?? "server"
}
environmentIsWsl={environmentIsWslById.get(thread.environmentId) ?? false}
projectCwd={
projectCwdByKey.get(`${thread.environmentId}:${thread.projectId}`) ?? null
}
Expand Down
Loading
Loading