Skip to content

Commit 5d4594e

Browse files
authored
Update developer reset to allow for resetting workspace settings. (RooCodeInc#4229)
* Update developer reset to allow for resetting workspace settings. * Add Changeset * Add Metadata field to ResetStateRequest
1 parent c332697 commit 5d4594e

File tree

5 files changed

+46
-13
lines changed

5 files changed

+46
-13
lines changed

.changeset/grumpy-cars-report.md

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
---
2+
"claude-dev": patch
3+
---
4+
5+
Update developer reset to allow for resetting workspace settings.

proto/state.proto

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@ service StateService {
1313
rpc getAvailableTerminalProfiles(EmptyRequest) returns (TerminalProfiles);
1414
rpc subscribeToState(EmptyRequest) returns (stream State);
1515
rpc toggleFavoriteModel(StringRequest) returns (Empty);
16-
rpc resetState(EmptyRequest) returns (Empty);
16+
rpc resetState(ResetStateRequest) returns (Empty);
1717
rpc togglePlanActMode(TogglePlanActModeRequest) returns (Empty);
1818
rpc updateAutoApprovalSettings(AutoApprovalSettingsRequest) returns (Empty);
1919
rpc updateSettings(UpdateSettingsRequest) returns (Empty);
@@ -63,6 +63,11 @@ message ChatContent {
6363
repeated string files = 3;
6464
}
6565

66+
message ResetStateRequest {
67+
Metadata metadata = 1;
68+
optional bool global = 2;
69+
}
70+
6671
message AutoApprovalSettingsRequest {
6772
Metadata metadata = 1;
6873
message Actions {

src/core/controller/state/resetState.ts

Lines changed: 12 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,19 +1,25 @@
11
import { Controller } from ".."
2-
import { Empty, EmptyRequest } from "../../../shared/proto/common"
3-
import { resetExtensionState } from "../../../core/storage/state"
2+
import { Empty } from "../../../shared/proto/common"
3+
import { ResetStateRequest } from "../../../shared/proto/state"
4+
import { resetGlobalState, resetWorkspaceState } from "../../../core/storage/state"
45
import * as vscode from "vscode"
56
import { sendChatButtonClickedEvent } from "../ui/subscribeToChatButtonClicked"
67

78
/**
89
* Resets the extension state to its defaults
910
* @param controller The controller instance
10-
* @param request An empty request (no parameters needed)
11+
* @param request The reset state request containing the global flag
1112
* @returns An empty response
1213
*/
13-
export async function resetState(controller: Controller, request: EmptyRequest): Promise<Empty> {
14+
export async function resetState(controller: Controller, request: ResetStateRequest): Promise<Empty> {
1415
try {
15-
vscode.window.showInformationMessage("Resetting state...")
16-
await resetExtensionState(controller.context)
16+
if (request.global) {
17+
vscode.window.showInformationMessage("Resetting global state...")
18+
await resetGlobalState(controller.context)
19+
} else {
20+
vscode.window.showInformationMessage("Resetting workspace state...")
21+
await resetWorkspaceState(controller.context)
22+
}
1723

1824
if (controller.task) {
1925
controller.task.abortTask()

src/core/storage/state.ts

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -700,7 +700,14 @@ export async function updateApiConfiguration(context: vscode.ExtensionContext, a
700700
await storeSecret(context, "sapAiCoreClientSecret", sapAiCoreClientSecret)
701701
}
702702

703-
export async function resetExtensionState(context: vscode.ExtensionContext) {
703+
export async function resetWorkspaceState(context: vscode.ExtensionContext) {
704+
for (const key of context.workspaceState.keys()) {
705+
await context.workspaceState.update(key, undefined)
706+
}
707+
}
708+
709+
export async function resetGlobalState(context: vscode.ExtensionContext) {
710+
// TODO: Reset all workspace states?
704711
for (const key of context.globalState.keys()) {
705712
await context.globalState.update(key, undefined)
706713
}

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

Lines changed: 15 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@ import { validateApiConfiguration, validateModelId } from "@/utils/validate"
77
import { vscode } from "@/utils/vscode"
88
import { ExtensionMessage } from "@shared/ExtensionMessage"
99
import { EmptyRequest, StringRequest } from "@shared/proto/common"
10-
import { PlanActMode, TogglePlanActModeRequest, UpdateSettingsRequest } from "@shared/proto/state"
10+
import { PlanActMode, ResetStateRequest, TogglePlanActModeRequest, UpdateSettingsRequest } from "@shared/proto/state"
1111
import { VSCodeButton, VSCodeCheckbox, VSCodeLink, VSCodeTextArea } from "@vscode/webview-ui-toolkit/react"
1212
import { CheckCheck, FlaskConical, Info, LucideIcon, Settings, SquareMousePointer, SquareTerminal, Webhook } from "lucide-react"
1313
import { memo, useCallback, useEffect, useRef, useState } from "react"
@@ -406,9 +406,13 @@ const SettingsView = ({ onDone, targetSection }: SettingsViewProps) => {
406406

407407
useEvent("message", handleMessage)
408408

409-
const handleResetState = async () => {
409+
const handleResetState = async (resetGlobalState?: boolean) => {
410410
try {
411-
await StateServiceClient.resetState(EmptyRequest.create({}))
411+
await StateServiceClient.resetState(
412+
ResetStateRequest.create({
413+
global: resetGlobalState,
414+
}),
415+
)
412416
} catch (error) {
413417
console.error("Failed to reset state:", error)
414418
}
@@ -709,10 +713,16 @@ const SettingsView = ({ onDone, targetSection }: SettingsViewProps) => {
709713
{renderSectionHeader("debug")}
710714
<Section>
711715
<VSCodeButton
712-
onClick={handleResetState}
716+
onClick={() => handleResetState()}
717+
className="mt-[5px] w-auto"
718+
style={{ backgroundColor: "var(--vscode-errorForeground)", color: "black" }}>
719+
Reset Workspace State
720+
</VSCodeButton>
721+
<VSCodeButton
722+
onClick={() => handleResetState(true)}
713723
className="mt-[5px] w-auto"
714724
style={{ backgroundColor: "var(--vscode-errorForeground)", color: "black" }}>
715-
Reset State
725+
Reset Global State
716726
</VSCodeButton>
717727
<p className="text-xs mt-[5px] text-[var(--vscode-descriptionForeground)]">
718728
This will reset all global state and secret storage in the extension.

0 commit comments

Comments
 (0)