diff --git a/src/core/webview/ClineProvider.ts b/src/core/webview/ClineProvider.ts index 2353dff490c..2795630c313 100644 --- a/src/core/webview/ClineProvider.ts +++ b/src/core/webview/ClineProvider.ts @@ -1250,6 +1250,8 @@ export class ClineProvider extends EventEmitter implements const machineId = vscode.env.machineId const allowedCommands = vscode.workspace.getConfiguration("roo-cline").get("allowedCommands") || [] const cwd = this.cwd + const workspaceTrustEnabled = + vscode.workspace.getConfiguration("security").get("workspace.trust.enabled") ?? false return { version: this.context.extension?.packageJSON?.version ?? "", @@ -1325,6 +1327,7 @@ export class ClineProvider extends EventEmitter implements maxReadFileLine: maxReadFileLine ?? 500, settingsImportedAt: this.settingsImportedAt, showGreeting: showGreeting ?? true, // Ensure showGreeting is included in the returned state + workspaceTrustEnabled, // Add the workspace trust setting here } } diff --git a/src/shared/ExtensionMessage.ts b/src/shared/ExtensionMessage.ts index 822e4239b57..32e89779adf 100644 --- a/src/shared/ExtensionMessage.ts +++ b/src/shared/ExtensionMessage.ts @@ -209,6 +209,7 @@ export type ExtensionState = Pick< renderContext: "sidebar" | "editor" settingsImportedAt?: number + workspaceTrustEnabled?: boolean } export type { ClineMessage, ClineAsk, ClineSay } diff --git a/webview-ui/src/components/history/HistoryPreview.tsx b/webview-ui/src/components/history/HistoryPreview.tsx index 0bc4fb69a5f..1475eb4284a 100644 --- a/webview-ui/src/components/history/HistoryPreview.tsx +++ b/webview-ui/src/components/history/HistoryPreview.tsx @@ -1,8 +1,9 @@ -import { memo } from "react" +import { memo, useEffect } from "react" import { vscode } from "@/utils/vscode" import { formatLargeNumber, formatDate } from "@/utils/format" import { Button, Checkbox } from "@/components/ui" +import { useExtensionState } from "@/context/ExtensionStateContext" // Import the context hook import { useAppTranslation } from "../../i18n/TranslationContext" import { CopyButton } from "./CopyButton" @@ -13,8 +14,15 @@ type HistoryPreviewProps = { } const HistoryPreview = ({ showHistoryView }: HistoryPreviewProps) => { const { tasks, showAllWorkspaces, setShowAllWorkspaces } = useTaskSearch() + const { workspaceTrustEnabled } = useExtensionState() const { t } = useAppTranslation() + useEffect(() => { + if (!workspaceTrustEnabled) { + setShowAllWorkspaces(true) + } + }, [workspaceTrustEnabled, setShowAllWorkspaces]) + return (
@@ -26,17 +34,19 @@ const HistoryPreview = ({ showHistoryView }: HistoryPreviewProps) => { {t("history:viewAll")}
-
- setShowAllWorkspaces(checked === true)} - variant="description" - /> - -
+ {workspaceTrustEnabled && ( +
+ setShowAllWorkspaces(checked === true)} + variant="description" + /> + +
+ )} {tasks.slice(0, 3).map((item) => (
{ )}
- {showAllWorkspaces && item.workspace && ( + {showAllWorkspaces && workspaceTrustEnabled && item.workspace && (
{item.workspace} diff --git a/webview-ui/src/components/history/HistoryView.tsx b/webview-ui/src/components/history/HistoryView.tsx index 2c244e21cd0..5ef675061ce 100644 --- a/webview-ui/src/components/history/HistoryView.tsx +++ b/webview-ui/src/components/history/HistoryView.tsx @@ -1,4 +1,4 @@ -import React, { memo, useState } from "react" +import React, { memo, useState, useEffect } from "react" import { DeleteTaskDialog } from "./DeleteTaskDialog" import { BatchDeleteTaskDialog } from "./BatchDeleteTaskDialog" import prettyBytes from "pretty-bytes" @@ -11,6 +11,7 @@ import { formatLargeNumber, formatDate } from "@/utils/format" import { cn } from "@/lib/utils" import { Button, Checkbox } from "@/components/ui" import { useAppTranslation } from "@/i18n/TranslationContext" +import { useExtensionState } from "@/context/ExtensionStateContext" // Import the context hook import { Tab, TabContent, TabHeader } from "../common/Tab" import { useTaskSearch } from "./useTaskSearch" @@ -35,12 +36,19 @@ const HistoryView = ({ onDone }: HistoryViewProps) => { setShowAllWorkspaces, } = useTaskSearch() const { t } = useAppTranslation() + const { workspaceTrustEnabled } = useExtensionState() const [deleteTaskId, setDeleteTaskId] = useState(null) const [isSelectionMode, setIsSelectionMode] = useState(false) const [selectedTaskIds, setSelectedTaskIds] = useState([]) const [showBatchDeleteDialog, setShowBatchDeleteDialog] = useState(false) + useEffect(() => { + if (!workspaceTrustEnabled) { + setShowAllWorkspaces(true) + } + }, [workspaceTrustEnabled, setShowAllWorkspaces]) + // Toggle selection mode const toggleSelectionMode = () => { setIsSelectionMode(!isSelectionMode) @@ -156,17 +164,19 @@ const HistoryView = ({ onDone }: HistoryViewProps) => { -
- setShowAllWorkspaces(checked === true)} - variant="description" - /> - -
+ {workspaceTrustEnabled && ( +
+ setShowAllWorkspaces(checked === true)} + variant="description" + /> + +
+ )} {/* Select all control in selection mode */} {isSelectionMode && tasks.length > 0 && ( @@ -436,7 +446,7 @@ const HistoryView = ({ onDone }: HistoryViewProps) => {
)} - {showAllWorkspaces && item.workspace && ( + {showAllWorkspaces && workspaceTrustEnabled && item.workspace && (
{item.workspace} diff --git a/webview-ui/src/context/ExtensionStateContext.tsx b/webview-ui/src/context/ExtensionStateContext.tsx index 8b50bf0aca7..9392b77efe9 100644 --- a/webview-ui/src/context/ExtensionStateContext.tsx +++ b/webview-ui/src/context/ExtensionStateContext.tsx @@ -87,6 +87,7 @@ export interface ExtensionStateContextType extends ExtensionState { setPinnedApiConfigs: (value: Record) => void togglePinnedApiConfig: (configName: string) => void setShowGreeting: (value: boolean) => void + workspaceTrustEnabled: boolean } export const ExtensionStateContext = createContext(undefined) @@ -165,6 +166,7 @@ export const ExtensionStateContextProvider: React.FC<{ children: React.ReactNode terminalZshOhMy: false, // Default Oh My Zsh integration setting terminalZshP10k: false, // Default Powerlevel10k integration setting terminalZdotdir: false, // Default ZDOTDIR handling setting + workspaceTrustEnabled: false, // Add default value for the new property }) const [didHydrateState, setDidHydrateState] = useState(false) @@ -243,6 +245,7 @@ export const ExtensionStateContextProvider: React.FC<{ children: React.ReactNode const contextValue: ExtensionStateContextType = { ...state, + workspaceTrustEnabled: state.workspaceTrustEnabled ?? false, didHydrateState, showWelcome, theme,