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,
|