diff --git a/src/shared/ExtensionMessage.ts b/src/shared/ExtensionMessage.ts index 759843ffeb..b8a53ff89f 100644 --- a/src/shared/ExtensionMessage.ts +++ b/src/shared/ExtensionMessage.ts @@ -358,6 +358,7 @@ export type ExtensionState = Pick< remoteControlEnabled: boolean taskSyncEnabled: boolean featureRoomoteControlEnabled: boolean + hideCosts?: boolean claudeCodeIsAuthenticated?: boolean debug?: boolean } diff --git a/webview-ui/src/components/chat/TaskHeader.tsx b/webview-ui/src/components/chat/TaskHeader.tsx index b733514eb6..a8fa5d6129 100644 --- a/webview-ui/src/components/chat/TaskHeader.tsx +++ b/webview-ui/src/components/chat/TaskHeader.tsx @@ -62,7 +62,7 @@ const TaskHeader = ({ todos, }: TaskHeaderProps) => { const { t } = useTranslation() - const { apiConfiguration, currentTaskItem, clineMessages, isBrowserSessionActive } = useExtensionState() + const { apiConfiguration, currentTaskItem, clineMessages, isBrowserSessionActive, hideCosts } = useExtensionState() const { id: modelId, info: model } = useSelectedModel(apiConfiguration) const [isTaskExpanded, setIsTaskExpanded] = useState(false) const [showLongRunningTaskMessage, setShowLongRunningTaskMessage] = useState(false) @@ -249,7 +249,7 @@ const TaskHeader = ({ {formatLargeNumber(contextTokens || 0)} / {formatLargeNumber(contextWindow)} - {!!totalCost && ${totalCost.toFixed(2)}} + {!hideCosts && !!totalCost && ${totalCost.toFixed(2)}} {showBrowserGlobe && (
e.stopPropagation()}> @@ -381,7 +381,7 @@ const TaskHeader = ({ )} - {!!totalCost && ( + {!hideCosts && !!totalCost && ( {t("chat:task.apiCost")} diff --git a/webview-ui/src/components/chat/context-management/CondensationResultRow.tsx b/webview-ui/src/components/chat/context-management/CondensationResultRow.tsx index 732a914a21..e300d6b1d5 100644 --- a/webview-ui/src/components/chat/context-management/CondensationResultRow.tsx +++ b/webview-ui/src/components/chat/context-management/CondensationResultRow.tsx @@ -42,9 +42,11 @@ export function CondensationResultRow({ data }: CondensationResultRowProps) { {prevTokens.toLocaleString()} → {newTokens.toLocaleString()}{" "} {t("chat:contextManagement.tokens")} - 0 ? "opacity-100" : "opacity-0"}> - ${displayCost.toFixed(2)} - + {!hideCosts && ( + 0 ? "opacity-100" : "opacity-0"}> + ${displayCost.toFixed(2)} + + )}
diff --git a/webview-ui/src/context/ExtensionStateContext.tsx b/webview-ui/src/context/ExtensionStateContext.tsx index 08294f9fe8..344ae3a47f 100644 --- a/webview-ui/src/context/ExtensionStateContext.tsx +++ b/webview-ui/src/context/ExtensionStateContext.tsx @@ -111,6 +111,7 @@ export interface ExtensionStateContextType extends ExtensionState { setTaskSyncEnabled: (value: boolean) => void featureRoomoteControlEnabled: boolean setFeatureRoomoteControlEnabled: (value: boolean) => void + hideCosts?: boolean setCurrentApiConfigName: (value: string) => void setListApiConfigMeta: (value: ProviderSettingsEntry[]) => void mode: Mode @@ -216,6 +217,7 @@ export const ExtensionStateContextProvider: React.FC<{ children: React.ReactNode remoteControlEnabled: false, taskSyncEnabled: false, featureRoomoteControlEnabled: false, + hideCosts: false, currentApiConfigName: "default", listApiConfigMeta: [], mode: defaultModeSlug, @@ -473,6 +475,7 @@ export const ExtensionStateContextProvider: React.FC<{ children: React.ReactNode remoteControlEnabled: state.remoteControlEnabled ?? false, taskSyncEnabled: state.taskSyncEnabled, featureRoomoteControlEnabled: state.featureRoomoteControlEnabled ?? false, + hideCosts: state.hideCosts ?? false, setExperimentEnabled: (id, enabled) => setState((prevState) => ({ ...prevState, experiments: { ...prevState.experiments, [id]: enabled } })), setApiConfiguration,