From b1d43f264b36483307efc341cd2524bf72fc30d3 Mon Sep 17 00:00:00 2001
From: Lifei Zhou
Date: Fri, 17 Apr 2026 18:33:13 +1000
Subject: [PATCH 1/7] Rename path-related variables to reflect their purpose
---
ui/goose2/src/app/AppShell.tsx | 20 ++---
.../__tests__/useChat.attachments.test.ts | 2 +-
.../chat/hooks/__tests__/useChat.test.ts | 2 +-
.../stores/__tests__/chatSessionStore.test.ts | 2 +-
.../features/chat/stores/chatSessionStore.ts | 26 +++----
ui/goose2/src/features/chat/ui/ChatView.tsx | 78 +++++++++----------
.../src/features/chat/ui/ContextPanel.tsx | 30 +++----
.../chat/ui/widgets/WorkingContextPicker.tsx | 8 +-
.../chat/ui/widgets/WorkspaceActionsMenu.tsx | 6 +-
.../chat/ui/widgets/WorkspaceCreateDialog.tsx | 4 +-
.../chat/ui/widgets/WorkspaceWidget.tsx | 20 ++---
.../projects/lib/chatProjectContext.test.ts | 38 ++++-----
.../projects/lib/chatProjectContext.ts | 35 ++++++---
13 files changed, 141 insertions(+), 130 deletions(-)
diff --git a/ui/goose2/src/app/AppShell.tsx b/ui/goose2/src/app/AppShell.tsx
index 6c316b98f9ac..eaa49ee37b4a 100644
--- a/ui/goose2/src/app/AppShell.tsx
+++ b/ui/goose2/src/app/AppShell.tsx
@@ -22,7 +22,7 @@ import {
getAndDeleteReplayBuffer,
} from "@/features/chat/hooks/replayBuffer";
import { getHomeDir } from "@/shared/api/system";
-import { resolveEffectiveWorkingDir } from "@/features/projects/lib/chatProjectContext";
+import { resolveDefaultSessionCwd } from "@/features/projects/lib/chatProjectContext";
export type AppView =
| "home"
@@ -93,12 +93,12 @@ export function AppShell({ children }: { children?: React.ReactNode }) {
.projects.find((candidate) => candidate.id === session.projectId) ??
null)
: null;
- const workingDir =
- resolveEffectiveWorkingDir(project) ??
+ const sessionCwd =
+ resolveDefaultSessionCwd(project) ??
(!project
- ? resolveEffectiveWorkingDir(null, await getHomeDir())
+ ? resolveDefaultSessionCwd(null, await getHomeDir())
: undefined);
- await acpLoadSession(sessionId, gooseSessionId, workingDir);
+ await acpLoadSession(sessionId, gooseSessionId, sessionCwd);
useChatStore.getState().setSessionLoading(sessionId, false);
const buffer = getAndDeleteReplayBuffer(sessionId);
if (buffer && buffer.length > 0) {
@@ -315,19 +315,19 @@ export function AppShell({ children }: { children?: React.ReactNode }) {
: (useProjectStore
.getState()
.projects.find((project) => project.id === projectId) ?? null);
- const nextWorkingDir =
- resolveEffectiveWorkingDir(nextProject) ??
+ const nextSessionCwd =
+ resolveDefaultSessionCwd(nextProject) ??
(nextProject == null
- ? resolveEffectiveWorkingDir(null, await getHomeDir())
+ ? resolveDefaultSessionCwd(null, await getHomeDir())
: undefined);
- if (!nextWorkingDir) {
+ if (!nextSessionCwd) {
return;
}
await acpPrepareSession(
sessionId,
session.providerId ?? agentStore.selectedProvider ?? "goose",
{
- workingDir: nextWorkingDir,
+ workingDir: nextSessionCwd,
personaId: session.personaId,
},
);
diff --git a/ui/goose2/src/features/chat/hooks/__tests__/useChat.attachments.test.ts b/ui/goose2/src/features/chat/hooks/__tests__/useChat.attachments.test.ts
index da14807a0702..2cf709efe792 100644
--- a/ui/goose2/src/features/chat/hooks/__tests__/useChat.attachments.test.ts
+++ b/ui/goose2/src/features/chat/hooks/__tests__/useChat.attachments.test.ts
@@ -32,7 +32,7 @@ describe("useChat attachments", () => {
activeSessionId: null,
isLoading: false,
contextPanelOpenBySession: {},
- activeWorkingContextBySession: {},
+ activeWorkspaceBySession: {},
modelsBySession: {},
modelCacheByProvider: {},
});
diff --git a/ui/goose2/src/features/chat/hooks/__tests__/useChat.test.ts b/ui/goose2/src/features/chat/hooks/__tests__/useChat.test.ts
index 546bcfc7c472..6a650b695f70 100644
--- a/ui/goose2/src/features/chat/hooks/__tests__/useChat.test.ts
+++ b/ui/goose2/src/features/chat/hooks/__tests__/useChat.test.ts
@@ -65,7 +65,7 @@ describe("useChat", () => {
activeSessionId: null,
isLoading: false,
contextPanelOpenBySession: {},
- activeWorkingContextBySession: {},
+ activeWorkspaceBySession: {},
modelsBySession: {},
modelCacheByProvider: {},
});
diff --git a/ui/goose2/src/features/chat/stores/__tests__/chatSessionStore.test.ts b/ui/goose2/src/features/chat/stores/__tests__/chatSessionStore.test.ts
index 202909ad233f..497869fa5d88 100644
--- a/ui/goose2/src/features/chat/stores/__tests__/chatSessionStore.test.ts
+++ b/ui/goose2/src/features/chat/stores/__tests__/chatSessionStore.test.ts
@@ -20,7 +20,7 @@ function resetStore() {
activeSessionId: null,
isLoading: false,
contextPanelOpenBySession: {},
- activeWorkingContextBySession: {},
+ activeWorkspaceBySession: {},
modelsBySession: {},
modelCacheByProvider: {},
});
diff --git a/ui/goose2/src/features/chat/stores/chatSessionStore.ts b/ui/goose2/src/features/chat/stores/chatSessionStore.ts
index 8915037b4613..a1c30b948880 100644
--- a/ui/goose2/src/features/chat/stores/chatSessionStore.ts
+++ b/ui/goose2/src/features/chat/stores/chatSessionStore.ts
@@ -37,7 +37,7 @@ export interface ChatSession {
userSetName?: boolean;
}
-export interface WorkingContext {
+export interface ActiveWorkspace {
path: string;
branch: string | null;
}
@@ -47,7 +47,7 @@ interface ChatSessionStoreState {
activeSessionId: string | null;
isLoading: boolean;
contextPanelOpenBySession: Record;
- activeWorkingContextBySession: Record;
+ activeWorkspaceBySession: Record;
modelsBySession: Record;
modelCacheByProvider: Record;
}
@@ -83,8 +83,8 @@ interface ChatSessionStoreActions {
setActiveSession: (sessionId: string | null) => void;
setContextPanelOpen: (sessionId: string, open: boolean) => void;
- setActiveWorkingContext: (sessionId: string, context: WorkingContext) => void;
- clearActiveWorkingContext: (sessionId: string) => void;
+ setActiveWorkspace: (sessionId: string, context: ActiveWorkspace) => void;
+ clearActiveWorkspace: (sessionId: string) => void;
setSessionModels: (sessionId: string, models: ModelOption[]) => void;
switchSessionProvider: (
sessionId: string,
@@ -300,7 +300,7 @@ export const useChatSessionStore = create((set, get) => ({
activeSessionId: null,
isLoading: false,
contextPanelOpenBySession: {},
- activeWorkingContextBySession: {},
+ activeWorkspaceBySession: {},
modelsBySession: {},
modelCacheByProvider: loadModelCache(),
@@ -346,7 +346,7 @@ export const useChatSessionStore = create((set, get) => ({
const { [id]: _ignoredPanelState, ...remainingPanelState } =
get().contextPanelOpenBySession;
const { [id]: _ignoredContext, ...remainingContextState } =
- get().activeWorkingContextBySession;
+ get().activeWorkspaceBySession;
const remainingModels = { ...get().modelsBySession };
delete remainingModels[id];
set((state) => ({
@@ -354,7 +354,7 @@ export const useChatSessionStore = create((set, get) => ({
activeSessionId:
state.activeSessionId === id ? null : state.activeSessionId,
contextPanelOpenBySession: remainingPanelState,
- activeWorkingContextBySession: remainingContextState,
+ activeWorkspaceBySession: remainingContextState,
modelsBySession: remainingModels,
}));
removeDraftSessionRecord(id);
@@ -544,19 +544,19 @@ export const useChatSessionStore = create((set, get) => ({
}));
},
- setActiveWorkingContext: (sessionId, context) => {
+ setActiveWorkspace: (sessionId, context) => {
set((state) => ({
- activeWorkingContextBySession: {
- ...state.activeWorkingContextBySession,
+ activeWorkspaceBySession: {
+ ...state.activeWorkspaceBySession,
[sessionId]: context,
},
}));
},
- clearActiveWorkingContext: (sessionId) => {
+ clearActiveWorkspace: (sessionId) => {
set((state) => {
- const { [sessionId]: _, ...rest } = state.activeWorkingContextBySession;
- return { activeWorkingContextBySession: rest };
+ const { [sessionId]: _, ...rest } = state.activeWorkspaceBySession;
+ return { activeWorkspaceBySession: rest };
});
},
diff --git a/ui/goose2/src/features/chat/ui/ChatView.tsx b/ui/goose2/src/features/chat/ui/ChatView.tsx
index 0478343dae04..698ab4d80f3c 100644
--- a/ui/goose2/src/features/chat/ui/ChatView.tsx
+++ b/ui/goose2/src/features/chat/ui/ChatView.tsx
@@ -17,9 +17,9 @@ import { acpPrepareSession, acpSetModel } from "@/shared/api/acp";
import {
buildProjectSystemPrompt,
composeSystemPrompt,
- defaultArtifactsDir,
+ defaultGlobalArtifactRoot,
getProjectArtifactRoots,
- resolveProjectWorkingDir,
+ resolveProjectDefaultArtifactRoot,
} from "@/features/projects/lib/chatProjectContext";
import { getHomeDir } from "@/shared/api/system";
import { ArtifactPolicyProvider } from "../hooks/ArtifactPolicyContext";
@@ -55,11 +55,11 @@ export function ChatView({
(s) => s.contextPanelOpenBySession[activeSessionId] ?? false,
);
const setContextPanelOpen = useChatSessionStore((s) => s.setContextPanelOpen);
- const activeWorkingContext = useChatSessionStore(
- (s) => s.activeWorkingContextBySession[activeSessionId],
+ const activeWorkspace = useChatSessionStore(
+ (s) => s.activeWorkspaceBySession[activeSessionId],
);
- const clearActiveWorkingContext = useChatSessionStore(
- (s) => s.clearActiveWorkingContext,
+ const clearActiveWorkspace = useChatSessionStore(
+ (s) => s.clearActiveWorkspace,
);
const {
@@ -85,7 +85,7 @@ export function ChatView({
? s.projects.find((candidate) => candidate.id === session.projectId)
: undefined,
);
- const [homeArtifactsRoot, setHomeArtifactsRoot] = useState(
+ const [globalArtifactRoot, setGlobalArtifactRoot] = useState(
null,
);
const project = storedProject ?? null;
@@ -115,36 +115,36 @@ export function ChatView({
() => getProjectArtifactRoots(project),
[project],
);
- const resolvedProjectWorkingDir = useMemo(
- () => resolveProjectWorkingDir(project),
+ const projectDefaultArtifactRoot = useMemo(
+ () => resolveProjectDefaultArtifactRoot(project),
[project],
);
const projectMetadataPending = Boolean(
- session?.projectId && !resolvedProjectWorkingDir && projectsLoading,
+ session?.projectId && !projectDefaultArtifactRoot && projectsLoading,
);
- const defaultWorkingDir = resolvedProjectWorkingDir
- ? resolvedProjectWorkingDir
+ const defaultSessionCwd = projectDefaultArtifactRoot
+ ? projectDefaultArtifactRoot
: !session?.projectId
- ? (homeArtifactsRoot ?? undefined)
+ ? (globalArtifactRoot ?? undefined)
: undefined;
- const effectiveWorkingDir = activeWorkingContext?.path ?? defaultWorkingDir;
+ const effectiveSessionCwd = activeWorkspace?.path ?? defaultSessionCwd;
const allowedArtifactRoots = useMemo(() => {
const roots = [
...projectArtifactRoots.map((path) => path.trim()).filter(Boolean),
];
- if (homeArtifactsRoot) {
- roots.push(homeArtifactsRoot);
+ if (globalArtifactRoot) {
+ roots.push(globalArtifactRoot);
}
return [...new Set(roots)];
- }, [homeArtifactsRoot, projectArtifactRoots]);
+ }, [globalArtifactRoot, projectArtifactRoots]);
const projectSystemPrompt = useMemo(
() => buildProjectSystemPrompt(project),
[project],
);
const workingContextPrompt = useMemo(() => {
- if (!activeWorkingContext?.branch) return undefined;
- return `\nActive branch: ${activeWorkingContext.branch}\nWorking directory: ${activeWorkingContext.path}\n`;
- }, [activeWorkingContext?.branch, activeWorkingContext?.path]);
+ if (!activeWorkspace?.branch) return undefined;
+ return `\nActive branch: ${activeWorkspace.branch}\nWorking directory: ${activeWorkspace.path}\n`;
+ }, [activeWorkspace?.branch, activeWorkspace?.path]);
const effectiveSystemPrompt = useMemo(
() =>
@@ -161,11 +161,11 @@ export function ChatView({
getHomeDir()
.then((homeDir) => {
if (cancelled) return;
- setHomeArtifactsRoot(defaultArtifactsDir(homeDir));
+ setGlobalArtifactRoot(defaultGlobalArtifactRoot(homeDir));
})
.catch(() => {
if (cancelled) return;
- setHomeArtifactsRoot(null);
+ setGlobalArtifactRoot(null);
});
return () => {
cancelled = true;
@@ -177,31 +177,31 @@ export function ChatView({
const prevProjectId = prevProjectIdRef.current;
prevProjectIdRef.current = session?.projectId;
if (prevProjectId !== undefined && prevProjectId !== session?.projectId) {
- clearActiveWorkingContext(activeSessionId);
+ clearActiveWorkspace(activeSessionId);
}
- }, [session?.projectId, activeSessionId, clearActiveWorkingContext]);
+ }, [session?.projectId, activeSessionId, clearActiveWorkspace]);
- const prevContextRef = useRef(activeWorkingContext);
+ const prevWorkspaceRef = useRef(activeWorkspace);
useEffect(() => {
- const prev = prevContextRef.current;
+ const prev = prevWorkspaceRef.current;
if (
- !activeWorkingContext ||
+ !activeWorkspace ||
!selectedProvider ||
session?.draft ||
- activeWorkingContext === prev
+ activeWorkspace === prev
) {
return;
}
- prevContextRef.current = activeWorkingContext;
- if (prev && prev.path === activeWorkingContext.path) return;
+ prevWorkspaceRef.current = activeWorkspace;
+ if (prev && prev.path === activeWorkspace.path) return;
void acpPrepareSession(activeSessionId, selectedProvider, {
- workingDir: activeWorkingContext.path,
+ workingDir: activeWorkspace.path,
personaId: selectedPersonaId ?? undefined,
}).catch((error) => {
console.error("Failed to prepare ACP session:", error);
});
}, [
- activeWorkingContext,
+ activeWorkspace,
activeSessionId,
selectedProvider,
selectedPersonaId,
@@ -230,17 +230,17 @@ export function ChatView({
.getState()
.projects.find((candidate) => candidate.id === projectId) ??
null);
- const nextWorkingDir =
- resolveProjectWorkingDir(nextProject) ??
- (projectId == null ? (homeArtifactsRoot ?? undefined) : undefined);
+ const nextSessionCwd =
+ resolveProjectDefaultArtifactRoot(nextProject) ??
+ (projectId == null ? (globalArtifactRoot ?? undefined) : undefined);
useChatSessionStore
.getState()
.updateSession(activeSessionId, { projectId });
- if (!session?.draft && selectedProvider && nextWorkingDir) {
+ if (!session?.draft && selectedProvider && nextSessionCwd) {
void acpPrepareSession(activeSessionId, selectedProvider, {
- workingDir: nextWorkingDir,
+ workingDir: nextSessionCwd,
personaId: selectedPersonaId ?? undefined,
}).catch((error) => {
console.error(
@@ -252,7 +252,7 @@ export function ChatView({
},
[
activeSessionId,
- homeArtifactsRoot,
+ globalArtifactRoot,
selectedPersonaId,
selectedProvider,
session?.draft,
@@ -343,7 +343,7 @@ export function ChatView({
selectedProvider,
effectiveSystemPrompt,
personaInfo,
- effectiveWorkingDir,
+ effectiveSessionCwd,
);
const isLoadingHistory = useChatStore(
(s) =>
diff --git a/ui/goose2/src/features/chat/ui/ContextPanel.tsx b/ui/goose2/src/features/chat/ui/ContextPanel.tsx
index 69e804d0a431..4c392d0f75e3 100644
--- a/ui/goose2/src/features/chat/ui/ContextPanel.tsx
+++ b/ui/goose2/src/features/chat/ui/ContextPanel.tsx
@@ -15,7 +15,7 @@ import {
import type { CreatedWorktree } from "@/shared/types/git";
import { Tabs, TabsContent, TabsList, TabsTrigger } from "@/shared/ui/tabs";
import { useChatSessionStore } from "../stores/chatSessionStore";
-import type { WorkingContext } from "../stores/chatSessionStore";
+import type { ActiveWorkspace } from "../stores/chatSessionStore";
import { WorkspaceWidget } from "./widgets/WorkspaceWidget";
import { ChangesWidget } from "./widgets/ChangesWidget";
import { ArtifactsWidget } from "./widgets/ArtifactsWidget";
@@ -39,35 +39,35 @@ export function ContextPanel({
}: ContextPanelProps) {
const { t } = useTranslation("chat");
const [activeTab, setActiveTab] = useState("details");
- const primaryWorkingDir = projectWorkingDirs[0] ?? null;
+ const primaryWorkspaceRoot = projectWorkingDirs[0] ?? null;
const activeContext = useChatSessionStore(
- (s) => s.activeWorkingContextBySession[sessionId],
+ (s) => s.activeWorkspaceBySession[sessionId],
);
- const setActiveWorkingContext = useChatSessionStore(
- (s) => s.setActiveWorkingContext,
+ const setActiveWorkspace = useChatSessionStore(
+ (s) => s.setActiveWorkspace,
);
- const gitQueryPath = activeContext?.path ?? primaryWorkingDir;
+ const gitTargetPath = activeContext?.path ?? primaryWorkspaceRoot;
const {
data: gitState,
error,
isLoading,
isFetching,
refetch,
- } = useGitState(gitQueryPath, activeTab === "details");
+ } = useGitState(gitTargetPath, activeTab === "details");
const {
data: changedFiles,
isLoading: isFilesLoading,
refetch: refetchFiles,
- } = useChangedFiles(gitQueryPath, activeTab === "details");
+ } = useChangedFiles(gitTargetPath, activeTab === "details");
const handleContextChange = useCallback(
- (context: WorkingContext) => {
- setActiveWorkingContext(sessionId, context);
+ (context: ActiveWorkspace) => {
+ setActiveWorkspace(sessionId, context);
},
- [sessionId, setActiveWorkingContext],
+ [sessionId, setActiveWorkspace],
);
const refetchAll = useCallback(async () => {
@@ -149,11 +149,11 @@ export function ContextPanel({
const handleOpenChangedFile = useCallback(
(filePath: string) => {
- if (!gitQueryPath) return;
- const fullPath = `${gitQueryPath}/${filePath}`;
+ if (!gitTargetPath) return;
+ const fullPath = `${gitTargetPath}/${filePath}`;
void openPath(fullPath);
},
- [gitQueryPath],
+ [gitTargetPath],
);
const handleRefresh = useCallback(() => {
@@ -202,7 +202,7 @@ export function ContextPanel({
files={changedFiles}
isLoading={isFilesLoading}
currentBranch={gitState?.currentBranch ?? null}
- repoPath={gitQueryPath ?? ""}
+ repoPath={gitTargetPath ?? ""}
onOpenFile={handleOpenChangedFile}
/>
diff --git a/ui/goose2/src/features/chat/ui/widgets/WorkingContextPicker.tsx b/ui/goose2/src/features/chat/ui/widgets/WorkingContextPicker.tsx
index 1fc4cf86d198..87c1787c8d2f 100644
--- a/ui/goose2/src/features/chat/ui/widgets/WorkingContextPicker.tsx
+++ b/ui/goose2/src/features/chat/ui/widgets/WorkingContextPicker.tsx
@@ -20,13 +20,13 @@ import {
import { buttonVariants } from "@/shared/ui/button";
import { cn } from "@/shared/lib/cn";
import type { GitState } from "@/shared/types/git";
-import type { WorkingContext } from "../../stores/chatSessionStore";
+import type { ActiveWorkspace } from "../../stores/chatSessionStore";
interface WorkingContextPickerProps {
currentProjectPath: string | null;
gitState: GitState | undefined;
- activeContext: WorkingContext | undefined;
- onSelect: (context: WorkingContext) => void;
+ activeContext: ActiveWorkspace | undefined;
+ onSelect: (context: ActiveWorkspace) => void;
onSwitchBranch: (path: string, branch: string) => Promise;
onStashAndSwitch: (path: string, branch: string) => Promise;
}
@@ -63,7 +63,7 @@ export function WorkingContextPicker({
}: WorkingContextPickerProps) {
const { t } = useTranslation("chat");
const [open, setOpen] = useState(false);
- const [pendingSwitch, setPendingSwitch] = useState(
+ const [pendingSwitch, setPendingSwitch] = useState(
null,
);
const [switching, setSwitching] = useState(false);
diff --git a/ui/goose2/src/features/chat/ui/widgets/WorkspaceActionsMenu.tsx b/ui/goose2/src/features/chat/ui/widgets/WorkspaceActionsMenu.tsx
index 184554a9d921..0aff95e64863 100644
--- a/ui/goose2/src/features/chat/ui/widgets/WorkspaceActionsMenu.tsx
+++ b/ui/goose2/src/features/chat/ui/widgets/WorkspaceActionsMenu.tsx
@@ -5,7 +5,7 @@ import type { CreatedWorktree, GitState } from "@/shared/types/git";
import { Button } from "@/shared/ui/button";
import { SplitButton } from "@/shared/ui/split-button";
import { Spinner } from "@/shared/ui/spinner";
-import type { WorkingContext } from "../../stores/chatSessionStore";
+import type { ActiveWorkspace } from "../../stores/chatSessionStore";
import { formatErrorMessage } from "./formatError";
import {
WorkspaceCreateDialog,
@@ -15,9 +15,9 @@ import {
interface WorkspaceActionsMenuProps {
currentProjectPath: string;
gitState: GitState;
- activeContext: WorkingContext | undefined;
+ activeContext: ActiveWorkspace | undefined;
disabled?: boolean;
- onContextChange: (context: WorkingContext) => void;
+ onContextChange: (context: ActiveWorkspace) => void;
onFetch: (path: string) => Promise;
onPull: (path: string) => Promise;
onCreateBranch: (
diff --git a/ui/goose2/src/features/chat/ui/widgets/WorkspaceCreateDialog.tsx b/ui/goose2/src/features/chat/ui/widgets/WorkspaceCreateDialog.tsx
index 78bd26e4e0f2..5d8963dbfbd9 100644
--- a/ui/goose2/src/features/chat/ui/widgets/WorkspaceCreateDialog.tsx
+++ b/ui/goose2/src/features/chat/ui/widgets/WorkspaceCreateDialog.tsx
@@ -21,7 +21,7 @@ import {
SelectTrigger,
SelectValue,
} from "@/shared/ui/select";
-import type { WorkingContext } from "../../stores/chatSessionStore";
+import type { ActiveWorkspace } from "../../stores/chatSessionStore";
import { formatErrorMessage } from "./formatError";
import { shortenPath } from "./WorkingContextPicker";
@@ -35,7 +35,7 @@ interface WorkspaceCreateDialogProps {
currentPath: string;
activeBranch: string | null;
onClose: () => void;
- onContextChange: (context: WorkingContext) => void;
+ onContextChange: (context: ActiveWorkspace) => void;
onCreateBranch: (
path: string,
name: string,
diff --git a/ui/goose2/src/features/chat/ui/widgets/WorkspaceWidget.tsx b/ui/goose2/src/features/chat/ui/widgets/WorkspaceWidget.tsx
index 695be9f44cb4..752a925ad37b 100644
--- a/ui/goose2/src/features/chat/ui/widgets/WorkspaceWidget.tsx
+++ b/ui/goose2/src/features/chat/ui/widgets/WorkspaceWidget.tsx
@@ -3,7 +3,7 @@ import { IconFolder, IconGitBranch, IconRefresh } from "@tabler/icons-react";
import type { CreatedWorktree, GitState } from "@/shared/types/git";
import { Button } from "@/shared/ui/button";
import { Spinner } from "@/shared/ui/spinner";
-import type { WorkingContext } from "../../stores/chatSessionStore";
+import type { ActiveWorkspace } from "../../stores/chatSessionStore";
import { Widget } from "./Widget";
import { WorkspaceActionsMenu } from "./WorkspaceActionsMenu";
import { WorkingContextPicker, shortenPath } from "./WorkingContextPicker";
@@ -16,8 +16,8 @@ interface WorkspaceWidgetProps {
isLoading: boolean;
isFetching: boolean;
error: Error | null;
- activeContext: WorkingContext | undefined;
- onContextChange: (context: WorkingContext) => void;
+ activeContext: ActiveWorkspace | undefined;
+ onContextChange: (context: ActiveWorkspace) => void;
onSwitchBranch: (path: string, branch: string) => Promise;
onStashAndSwitch: (path: string, branch: string) => Promise;
onInitRepo: (path: string) => Promise;
@@ -58,7 +58,7 @@ export function WorkspaceWidget({
onRefresh,
}: WorkspaceWidgetProps) {
const { t } = useTranslation("chat");
- const primaryWorkingDir = projectWorkingDirs[0] ?? null;
+ const primaryWorkspaceRoot = projectWorkingDirs[0] ?? null;
const gitErrorMessage =
error instanceof Error ? error.message : t("contextPanel.errors.gitRead");
@@ -73,7 +73,7 @@ export function WorkspaceWidget({
variant="ghost"
size="icon-xs"
onClick={onRefresh}
- disabled={!primaryWorkingDir || isFetching}
+ disabled={!primaryWorkspaceRoot || isFetching}
className="rounded-md"
aria-label={t("contextPanel.actions.refreshGitStatus")}
title={t("contextPanel.actions.refreshGitStatus")}
@@ -103,7 +103,7 @@ export function WorkspaceWidget({
)}
- {!primaryWorkingDir ? (
+ {!primaryWorkspaceRoot ? (
{t("contextPanel.empty.folderNotSet")}
) : isLoading && !gitState ? (
@@ -115,7 +115,7 @@ export function WorkspaceWidget({
) : gitState?.isGitRepo ? (
- {shortenPath(primaryWorkingDir)}
+ {shortenPath(primaryWorkspaceRoot)}