Compare commits

...

3 Commits

Author SHA1 Message Date
Dennis Bartlett e4523c1c40 Add Metadata field to ResetStateRequest 2025-06-14 22:13:21 -07:00
Dennis Bartlett 0d6edbfd09 Add Changeset 2025-06-14 19:28:25 -07:00
Dennis Bartlett ebb68bc98b Update developer reset to allow for resetting workspace settings. 2025-06-14 19:23:24 -07:00
5 changed files with 46 additions and 13 deletions
+5
View File
@@ -0,0 +1,5 @@
---
"claude-dev": patch
---
Update developer reset to allow for resetting workspace settings.
+6 -1
View File
@@ -13,7 +13,7 @@ service StateService {
rpc getAvailableTerminalProfiles(EmptyRequest) returns (TerminalProfiles);
rpc subscribeToState(EmptyRequest) returns (stream State);
rpc toggleFavoriteModel(StringRequest) returns (Empty);
rpc resetState(EmptyRequest) returns (Empty);
rpc resetState(ResetStateRequest) returns (Empty);
rpc togglePlanActMode(TogglePlanActModeRequest) returns (Empty);
rpc updateAutoApprovalSettings(AutoApprovalSettingsRequest) returns (Empty);
rpc updateSettings(UpdateSettingsRequest) returns (Empty);
@@ -63,6 +63,11 @@ message ChatContent {
repeated string files = 3;
}
message ResetStateRequest {
Metadata metadata = 1;
optional bool global = 2;
}
message AutoApprovalSettingsRequest {
Metadata metadata = 1;
message Actions {
+12 -6
View File
@@ -1,19 +1,25 @@
import { Controller } from ".."
import { Empty, EmptyRequest } from "../../../shared/proto/common"
import { resetExtensionState } from "../../../core/storage/state"
import { Empty } from "../../../shared/proto/common"
import { ResetStateRequest } from "../../../shared/proto/state"
import { resetGlobalState, resetWorkspaceState } from "../../../core/storage/state"
import * as vscode from "vscode"
import { sendChatButtonClickedEvent } from "../ui/subscribeToChatButtonClicked"
/**
* Resets the extension state to its defaults
* @param controller The controller instance
* @param request An empty request (no parameters needed)
* @param request The reset state request containing the global flag
* @returns An empty response
*/
export async function resetState(controller: Controller, request: EmptyRequest): Promise<Empty> {
export async function resetState(controller: Controller, request: ResetStateRequest): Promise<Empty> {
try {
vscode.window.showInformationMessage("Resetting state...")
await resetExtensionState(controller.context)
if (request.global) {
vscode.window.showInformationMessage("Resetting global state...")
await resetGlobalState(controller.context)
} else {
vscode.window.showInformationMessage("Resetting workspace state...")
await resetWorkspaceState(controller.context)
}
if (controller.task) {
controller.task.abortTask()
+8 -1
View File
@@ -650,7 +650,14 @@ export async function updateApiConfiguration(context: vscode.ExtensionContext, a
await storeSecret(context, "nebiusApiKey", nebiusApiKey)
}
export async function resetExtensionState(context: vscode.ExtensionContext) {
export async function resetWorkspaceState(context: vscode.ExtensionContext) {
for (const key of context.workspaceState.keys()) {
await context.workspaceState.update(key, undefined)
}
}
export async function resetGlobalState(context: vscode.ExtensionContext) {
// TODO: Reset all workspace states?
for (const key of context.globalState.keys()) {
await context.globalState.update(key, undefined)
}
@@ -7,7 +7,7 @@ import { validateApiConfiguration, validateModelId } from "@/utils/validate"
import { vscode } from "@/utils/vscode"
import { ExtensionMessage } from "@shared/ExtensionMessage"
import { EmptyRequest, StringRequest } from "@shared/proto/common"
import { PlanActMode, TogglePlanActModeRequest, UpdateSettingsRequest } from "@shared/proto/state"
import { PlanActMode, ResetStateRequest, TogglePlanActModeRequest, UpdateSettingsRequest } from "@shared/proto/state"
import { VSCodeButton, VSCodeCheckbox, VSCodeLink, VSCodeTextArea } from "@vscode/webview-ui-toolkit/react"
import { CheckCheck, FlaskConical, Info, LucideIcon, Settings, SquareMousePointer, SquareTerminal, Webhook } from "lucide-react"
import { memo, useCallback, useEffect, useRef, useState } from "react"
@@ -406,9 +406,13 @@ const SettingsView = ({ onDone, targetSection }: SettingsViewProps) => {
useEvent("message", handleMessage)
const handleResetState = async () => {
const handleResetState = async (resetGlobalState?: boolean) => {
try {
await StateServiceClient.resetState(EmptyRequest.create({}))
await StateServiceClient.resetState(
ResetStateRequest.create({
global: resetGlobalState,
}),
)
} catch (error) {
console.error("Failed to reset state:", error)
}
@@ -709,10 +713,16 @@ const SettingsView = ({ onDone, targetSection }: SettingsViewProps) => {
{renderSectionHeader("debug")}
<Section>
<VSCodeButton
onClick={handleResetState}
onClick={() => handleResetState()}
className="mt-[5px] w-auto"
style={{ backgroundColor: "var(--vscode-errorForeground)", color: "black" }}>
Reset State
Reset Workspace State
</VSCodeButton>
<VSCodeButton
onClick={() => handleResetState(true)}
className="mt-[5px] w-auto"
style={{ backgroundColor: "var(--vscode-errorForeground)", color: "black" }}>
Reset Global State
</VSCodeButton>
<p className="text-xs mt-[5px] text-[var(--vscode-descriptionForeground)]">
This will reset all global state and secret storage in the extension.