Skip to content

Commit 7d95310

Browse files
committed
Fixes #4775
1 parent 2e2f83b commit 7d95310

File tree

9 files changed

+83
-16
lines changed

9 files changed

+83
-16
lines changed

packages/types/src/global-settings.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -103,6 +103,7 @@ export const globalSettingsSchema = z.object({
103103
customSupportPrompts: customSupportPromptsSchema.optional(),
104104
enhancementApiConfigId: z.string().optional(),
105105
historyPreviewCollapsed: z.boolean().optional(),
106+
hideTaskAndAutoApproveBoxes: z.boolean().optional(),
106107
})
107108

108109
export type GlobalSettings = z.infer<typeof globalSettingsSchema>

src/core/webview/ClineProvider.ts

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1331,6 +1331,7 @@ export class ClineProvider
13311331
maxReadFileLine,
13321332
terminalCompressProgressBar,
13331333
historyPreviewCollapsed,
1334+
hideTaskAndAutoApproveBoxes,
13341335
cloudUserInfo,
13351336
cloudIsAuthenticated,
13361337
sharingEnabled,
@@ -1443,6 +1444,7 @@ export class ClineProvider
14431444
terminalCompressProgressBar: terminalCompressProgressBar ?? true,
14441445
hasSystemPromptOverride,
14451446
historyPreviewCollapsed: historyPreviewCollapsed ?? false,
1447+
hideTaskAndAutoApproveBoxes: hideTaskAndAutoApproveBoxes ?? false,
14461448
cloudUserInfo,
14471449
cloudIsAuthenticated: cloudIsAuthenticated ?? false,
14481450
sharingEnabled: sharingEnabled ?? false,
@@ -1591,6 +1593,7 @@ export class ClineProvider
15911593
maxReadFileLine: stateValues.maxReadFileLine ?? -1,
15921594
maxConcurrentFileReads: stateValues.maxConcurrentFileReads ?? 5,
15931595
historyPreviewCollapsed: stateValues.historyPreviewCollapsed ?? false,
1596+
hideTaskAndAutoApproveBoxes: stateValues.hideTaskAndAutoApproveBoxes ?? false,
15941597
cloudUserInfo,
15951598
cloudIsAuthenticated,
15961599
sharingEnabled,

src/core/webview/webviewMessageHandler.ts

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -999,6 +999,10 @@ export const webviewMessageHandler = async (
999999
await updateGlobalState("historyPreviewCollapsed", message.bool ?? false)
10001000
// No need to call postStateToWebview here as the UI already updated optimistically
10011001
break
1002+
case "hideTaskAndAutoApproveBoxes":
1003+
await updateGlobalState("hideTaskAndAutoApproveBoxes", message.bool ?? false)
1004+
await provider.postStateToWebview()
1005+
break
10021006
case "toggleApiConfigPin":
10031007
if (message.text) {
10041008
const currentPinned = getGlobalState("pinnedApiConfigs") ?? {}

src/shared/ExtensionMessage.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -240,6 +240,7 @@ export type ExtensionState = Pick<
240240
renderContext: "sidebar" | "editor"
241241
settingsImportedAt?: number
242242
historyPreviewCollapsed?: boolean
243+
hideTaskAndAutoApproveBoxes?: boolean
243244

244245
cloudUserInfo: CloudUserInfo | null
245246
cloudIsAuthenticated: boolean

src/shared/WebviewMessage.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -158,6 +158,7 @@ export interface WebviewMessage {
158158
| "indexCleared"
159159
| "codebaseIndexConfig"
160160
| "setHistoryPreviewCollapsed"
161+
| "hideTaskAndAutoApproveBoxes"
161162
| "openExternal"
162163
| "filterMarketplaceItems"
163164
| "marketplaceButtonClicked"

webview-ui/src/components/chat/ChatView.tsx

Lines changed: 18 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -93,6 +93,7 @@ const ChatViewComponent: React.ForwardRefRenderFunction<ChatViewRef, ChatViewPro
9393
telemetrySetting,
9494
hasSystemPromptOverride,
9595
historyPreviewCollapsed, // Added historyPreviewCollapsed
96+
hideTaskAndAutoApproveBoxes, // Added hideTaskAndAutoApproveBoxes
9697
soundEnabled,
9798
soundVolume,
9899
} = useExtensionState()
@@ -1348,19 +1349,21 @@ const ChatViewComponent: React.ForwardRefRenderFunction<ChatViewRef, ChatViewPro
13481349
{showAnnouncement && <Announcement hideAnnouncement={hideAnnouncement} />}
13491350
{task ? (
13501351
<>
1351-
<TaskHeader
1352-
task={task}
1353-
tokensIn={apiMetrics.totalTokensIn}
1354-
tokensOut={apiMetrics.totalTokensOut}
1355-
doesModelSupportPromptCache={model?.supportsPromptCache ?? false}
1356-
cacheWrites={apiMetrics.totalCacheWrites}
1357-
cacheReads={apiMetrics.totalCacheReads}
1358-
totalCost={apiMetrics.totalCost}
1359-
contextTokens={apiMetrics.contextTokens}
1360-
buttonsDisabled={sendingDisabled}
1361-
handleCondenseContext={handleCondenseContext}
1362-
onClose={handleTaskCloseButtonClick}
1363-
/>
1352+
{!hideTaskAndAutoApproveBoxes && (
1353+
<TaskHeader
1354+
task={task}
1355+
tokensIn={apiMetrics.totalTokensIn}
1356+
tokensOut={apiMetrics.totalTokensOut}
1357+
doesModelSupportPromptCache={model?.supportsPromptCache ?? false}
1358+
cacheWrites={apiMetrics.totalCacheWrites}
1359+
cacheReads={apiMetrics.totalCacheReads}
1360+
totalCost={apiMetrics.totalCost}
1361+
contextTokens={apiMetrics.contextTokens}
1362+
buttonsDisabled={sendingDisabled}
1363+
handleCondenseContext={handleCondenseContext}
1364+
onClose={handleTaskCloseButtonClick}
1365+
/>
1366+
)}
13641367

13651368
{hasSystemPromptOverride && (
13661369
<div className="px-3">
@@ -1427,7 +1430,7 @@ const ChatViewComponent: React.ForwardRefRenderFunction<ChatViewRef, ChatViewPro
14271430
// This ensures it takes its natural height when there's space
14281431
// but becomes scrollable when the viewport is too small
14291432
*/}
1430-
{!task && (
1433+
{!task && !hideTaskAndAutoApproveBoxes && (
14311434
<div className="mb-[-2px] flex-initial min-h-0">
14321435
<AutoApproveMenu />
14331436
</div>
@@ -1455,7 +1458,7 @@ const ChatViewComponent: React.ForwardRefRenderFunction<ChatViewRef, ChatViewPro
14551458
initialTopMostItemIndex={groupedMessages.length - 1}
14561459
/>
14571460
</div>
1458-
<AutoApproveMenu />
1461+
{!hideTaskAndAutoApproveBoxes && <AutoApproveMenu />}
14591462
{showScrollToBottom ? (
14601463
<div className="flex px-[15px] pt-[10px]">
14611464
<div

webview-ui/src/components/settings/SettingsView.tsx

Lines changed: 42 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,7 @@ import {
2222
Globe,
2323
Info,
2424
MessageSquare,
25+
Monitor,
2526
LucideIcon,
2627
} from "lucide-react"
2728

@@ -88,6 +89,7 @@ const sectionNames = [
8889
"prompts",
8990
"experimental",
9091
"language",
92+
"ui",
9193
"about",
9294
] as const
9395

@@ -315,6 +317,10 @@ const SettingsView = forwardRef<SettingsViewRef, SettingsViewProps>(({ onDone, t
315317
vscode.postMessage({ type: "upsertApiConfiguration", text: currentApiConfigName, apiConfiguration })
316318
vscode.postMessage({ type: "telemetrySetting", text: telemetrySetting })
317319
vscode.postMessage({ type: "codebaseIndexConfig", values: codebaseIndexConfig })
320+
vscode.postMessage({
321+
type: "hideTaskAndAutoApproveBoxes",
322+
bool: cachedState.hideTaskAndAutoApproveBoxes ?? false,
323+
})
318324
setChangeDetected(false)
319325
}
320326
}
@@ -394,6 +400,7 @@ const SettingsView = forwardRef<SettingsViewRef, SettingsViewProps>(({ onDone, t
394400
{ id: "prompts", icon: MessageSquare },
395401
{ id: "experimental", icon: FlaskConical },
396402
{ id: "language", icon: Globe },
403+
{ id: "ui", icon: Monitor },
397404
{ id: "about", icon: Info },
398405
],
399406
[], // No dependencies needed now
@@ -692,6 +699,41 @@ const SettingsView = forwardRef<SettingsViewRef, SettingsViewProps>(({ onDone, t
692699
<LanguageSettings language={language || "en"} setCachedStateField={setCachedStateField} />
693700
)}
694701

702+
{/* UI Section */}
703+
{activeTab === "ui" && (
704+
<div>
705+
<SectionHeader>
706+
<div className="flex items-center gap-2">
707+
<Monitor className="w-4" />
708+
<div>{t("settings:sections.ui")}</div>
709+
</div>
710+
</SectionHeader>
711+
712+
<Section>
713+
<div className="space-y-4">
714+
<div className="flex items-center justify-between">
715+
<div className="flex flex-col">
716+
<label className="text-vscode-foreground font-medium">
717+
{t("settings:ui.hideTaskAndAutoApproveBoxes.title")}
718+
</label>
719+
<span className="text-vscode-descriptionForeground text-sm">
720+
{t("settings:ui.hideTaskAndAutoApproveBoxes.description")}
721+
</span>
722+
</div>
723+
<input
724+
type="checkbox"
725+
checked={cachedState.hideTaskAndAutoApproveBoxes ?? false}
726+
onChange={(e) =>
727+
setCachedStateField("hideTaskAndAutoApproveBoxes", e.target.checked)
728+
}
729+
className="w-4 h-4"
730+
/>
731+
</div>
732+
</div>
733+
</Section>
734+
</div>
735+
)}
736+
695737
{/* About Section */}
696738
{activeTab === "about" && (
697739
<About telemetrySetting={telemetrySetting} setTelemetrySetting={setTelemetrySetting} />

webview-ui/src/context/ExtensionStateContext.tsx

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,7 @@ import { convertTextMateToHljs } from "@src/utils/textMateToHljs"
2525

2626
export interface ExtensionStateContextType extends ExtensionState {
2727
historyPreviewCollapsed?: boolean // Add the new state property
28+
hideTaskAndAutoApproveBoxes?: boolean // Add the new state property
2829
didHydrateState: boolean
2930
showWelcome: boolean
3031
theme: any
@@ -113,6 +114,7 @@ export interface ExtensionStateContextType extends ExtensionState {
113114
terminalCompressProgressBar?: boolean
114115
setTerminalCompressProgressBar: (value: boolean) => void
115116
setHistoryPreviewCollapsed: (value: boolean) => void
117+
setHideTaskAndAutoApproveBoxes: (value: boolean) => void
116118
autoCondenseContext: boolean
117119
setAutoCondenseContext: (value: boolean) => void
118120
autoCondenseContextPercent: number
@@ -192,6 +194,7 @@ export const ExtensionStateContextProvider: React.FC<{ children: React.ReactNode
192194
terminalZdotdir: false, // Default ZDOTDIR handling setting
193195
terminalCompressProgressBar: true, // Default to compress progress bar output
194196
historyPreviewCollapsed: false, // Initialize the new state (default to expanded)
197+
hideTaskAndAutoApproveBoxes: false, // Initialize the new state (default to showing boxes)
195198
cloudUserInfo: null,
196199
cloudIsAuthenticated: false,
197200
sharingEnabled: false,
@@ -397,6 +400,8 @@ export const ExtensionStateContextProvider: React.FC<{ children: React.ReactNode
397400
}),
398401
setHistoryPreviewCollapsed: (value) =>
399402
setState((prevState) => ({ ...prevState, historyPreviewCollapsed: value })),
403+
setHideTaskAndAutoApproveBoxes: (value) =>
404+
setState((prevState) => ({ ...prevState, hideTaskAndAutoApproveBoxes: value })),
400405
setAutoCondenseContext: (value) => setState((prevState) => ({ ...prevState, autoCondenseContext: value })),
401406
setAutoCondenseContextPercent: (value) =>
402407
setState((prevState) => ({ ...prevState, autoCondenseContextPercent: value })),

webview-ui/src/i18n/locales/en/settings.json

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,7 @@
3131
"prompts": "Prompts",
3232
"experimental": "Experimental",
3333
"language": "Language",
34+
"ui": "User Interface",
3435
"about": "About Roo Code"
3536
},
3637
"prompts": {
@@ -615,5 +616,11 @@
615616
"useCustomArn": "Use custom ARN..."
616617
},
617618
"includeMaxOutputTokens": "Include max output tokens",
618-
"includeMaxOutputTokensDescription": "Send max output tokens parameter in API requests. Some providers may not support this."
619+
"includeMaxOutputTokensDescription": "Send max output tokens parameter in API requests. Some providers may not support this.",
620+
"ui": {
621+
"hideTaskAndAutoApproveBoxes": {
622+
"label": "Hide Task and Auto-Approve Boxes",
623+
"description": "Hide the task header and auto-approve menu to create a cleaner, more minimalistic interface"
624+
}
625+
}
619626
}

0 commit comments

Comments
 (0)