Skip to content

Commit 36c0192

Browse files
celestial-vaultElephant Lumps
andauthored
Migrate refreshClineRules protobus (RooCodeInc#3690)
* migrate refreshClineRules * changeset --------- Co-authored-by: Elephant Lumps <[email protected]>
1 parent 65a6395 commit 36c0192

File tree

10 files changed

+255
-9
lines changed

10 files changed

+255
-9
lines changed

.changeset/eight-sheep-remember.md

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
---
2+
"claude-dev": minor
3+
---
4+
5+
Migrate refreshClineRules to protobus

proto/file.proto

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -46,6 +46,18 @@ service FileService {
4646

4747
// Toggle a Windsurf rule (enable or disable)
4848
rpc toggleWindsurfRule(ToggleWindsurfRuleRequest) returns (ClineRulesToggles);
49+
50+
// Refreshes all rule toggles (Cline, External, and Workflows)
51+
rpc refreshRules(EmptyRequest) returns (RefreshedRules);
52+
}
53+
54+
// Response for refreshRules operation
55+
message RefreshedRules {
56+
ClineRulesToggles global_cline_rules_toggles = 1;
57+
ClineRulesToggles local_cline_rules_toggles = 2;
58+
ClineRulesToggles local_cursor_rules_toggles = 3;
59+
ClineRulesToggles local_windsurf_rules_toggles = 4;
60+
ClineRulesToggles workflow_toggles = 5;
4961
}
5062

5163
// Request to toggle a Windsurf rule

src/core/controller/file/methods.ts

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@ import { getRelativePaths } from "./getRelativePaths"
1010
import { openFile } from "./openFile"
1111
import { openImage } from "./openImage"
1212
import { openMention } from "./openMention"
13+
import { refreshRules } from "./refreshRules"
1314
import { searchCommits } from "./searchCommits"
1415
import { searchFiles } from "./searchFiles"
1516
import { selectImages } from "./selectImages"
@@ -27,6 +28,7 @@ export function registerAllMethods(): void {
2728
registerMethod("openFile", openFile)
2829
registerMethod("openImage", openImage)
2930
registerMethod("openMention", openMention)
31+
registerMethod("refreshRules", refreshRules)
3032
registerMethod("searchCommits", searchCommits)
3133
registerMethod("searchFiles", searchFiles)
3234
registerMethod("selectImages", selectImages)
Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,32 @@
1+
import { EmptyRequest } from "@shared/proto/common"
2+
import { RefreshedRules } from "@shared/proto/file"
3+
import type { Controller } from "../index"
4+
import { refreshClineRulesToggles } from "@core/context/instructions/user-instructions/cline-rules"
5+
import { refreshExternalRulesToggles } from "@core/context/instructions/user-instructions/external-rules"
6+
import { refreshWorkflowToggles } from "@core/context/instructions/user-instructions/workflows"
7+
import { cwd } from "@core/task"
8+
9+
/**
10+
* Refreshes all rule toggles (Cline, External, and Workflows)
11+
* @param controller The controller instance
12+
* @param _request The empty request
13+
* @returns RefreshedRules containing updated toggles for all rule types
14+
*/
15+
export async function refreshRules(controller: Controller, _request: EmptyRequest): Promise<RefreshedRules> {
16+
try {
17+
const { globalToggles, localToggles } = await refreshClineRulesToggles(controller.context, cwd)
18+
const { cursorLocalToggles, windsurfLocalToggles } = await refreshExternalRulesToggles(controller.context, cwd)
19+
const workflowToggles = await refreshWorkflowToggles(controller.context, cwd)
20+
21+
return {
22+
globalClineRulesToggles: { toggles: globalToggles },
23+
localClineRulesToggles: { toggles: localToggles },
24+
localCursorRulesToggles: { toggles: cursorLocalToggles },
25+
localWindsurfRulesToggles: { toggles: windsurfLocalToggles },
26+
workflowToggles: { toggles: workflowToggles },
27+
}
28+
} catch (error) {
29+
console.error("Failed to refresh rules:", error)
30+
throw error
31+
}
32+
}

src/core/controller/index.ts

Lines changed: 0 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -321,12 +321,6 @@ export class Controller {
321321
await updateGlobalState(this.context, "lastShownAnnouncementId", this.latestAnnouncementId)
322322
await this.postStateToWebview()
323323
break
324-
case "refreshClineRules":
325-
await refreshClineRulesToggles(this.context, cwd)
326-
await refreshExternalRulesToggles(this.context, cwd)
327-
await refreshWorkflowToggles(this.context, cwd)
328-
await this.postStateToWebview()
329-
break
330324
case "openInBrowser":
331325
if (message.url) {
332326
vscode.env.openExternal(vscode.Uri.parse(message.url))

src/shared/WebviewMessage.ts

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,6 @@ export interface WebviewMessage {
1717
| "didShowAnnouncement"
1818
| "openInBrowser"
1919
| "showChatView"
20-
| "refreshClineRules"
2120
| "openMcpSettings"
2221
| "autoApprovalSettings"
2322
| "togglePlanActMode"

src/shared/proto/file.ts

Lines changed: 171 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

src/standalone/server-setup.ts

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -34,6 +34,7 @@ import { searchFiles } from "../core/controller/file/searchFiles"
3434
import { toggleClineRule } from "../core/controller/file/toggleClineRule"
3535
import { toggleCursorRule } from "../core/controller/file/toggleCursorRule"
3636
import { toggleWindsurfRule } from "../core/controller/file/toggleWindsurfRule"
37+
import { refreshRules } from "../core/controller/file/refreshRules"
3738

3839
// Mcp Service
3940
import { toggleMcpServer } from "../core/controller/mcp/toggleMcpServer"
@@ -130,6 +131,7 @@ export function addServices(
130131
toggleClineRule: wrapper(toggleClineRule, controller),
131132
toggleCursorRule: wrapper(toggleCursorRule, controller),
132133
toggleWindsurfRule: wrapper(toggleWindsurfRule, controller),
134+
refreshRules: wrapper(refreshRules, controller),
133135
})
134136

135137
// Mcp Service

webview-ui/src/components/cline-rules/ClineRulesToggleModal.tsx

Lines changed: 25 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,8 @@ import { VSCodeButton } from "@vscode/webview-ui-toolkit/react"
88
import RulesToggleList from "./RulesToggleList"
99
import Tooltip from "@/components/common/Tooltip"
1010
import styled from "styled-components"
11-
import { ClineRulesToggles, ToggleWindsurfRuleRequest } from "@shared/proto/file"
11+
import { ClineRulesToggles, RefreshedRules, ToggleWindsurfRuleRequest } from "@shared/proto/file"
12+
import { EmptyRequest } from "@shared/proto/common"
1213

1314
const ClineRulesToggleModal: React.FC = () => {
1415
const {
@@ -21,6 +22,7 @@ const ClineRulesToggleModal: React.FC = () => {
2122
setLocalClineRulesToggles,
2223
setLocalCursorRulesToggles,
2324
setLocalWindsurfRulesToggles,
25+
setWorkflowToggles,
2426
} = useExtensionState()
2527
const [isVisible, setIsVisible] = useState(false)
2628
const buttonRef = useRef<HTMLDivElement>(null)
@@ -32,7 +34,28 @@ const ClineRulesToggleModal: React.FC = () => {
3234

3335
useEffect(() => {
3436
if (isVisible) {
35-
vscode.postMessage({ type: "refreshClineRules" })
37+
FileServiceClient.refreshRules({} as EmptyRequest)
38+
.then((response: RefreshedRules) => {
39+
// Update state with the response data using all available setters
40+
if (response.globalClineRulesToggles?.toggles) {
41+
setGlobalClineRulesToggles(response.globalClineRulesToggles.toggles)
42+
}
43+
if (response.localClineRulesToggles?.toggles) {
44+
setLocalClineRulesToggles(response.localClineRulesToggles.toggles)
45+
}
46+
if (response.localCursorRulesToggles?.toggles) {
47+
setLocalCursorRulesToggles(response.localCursorRulesToggles.toggles)
48+
}
49+
if (response.localWindsurfRulesToggles?.toggles) {
50+
setLocalWindsurfRulesToggles(response.localWindsurfRulesToggles.toggles)
51+
}
52+
if (response.workflowToggles?.toggles) {
53+
setWorkflowToggles(response.workflowToggles.toggles)
54+
}
55+
})
56+
.catch((error) => {
57+
console.error("Failed to refresh rules:", error)
58+
})
3659
}
3760
}, [isVisible])
3861

webview-ui/src/context/ExtensionStateContext.tsx

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -55,6 +55,7 @@ interface ExtensionStateContextType extends ExtensionState {
5555
setLocalClineRulesToggles: (toggles: Record<string, boolean>) => void
5656
setLocalCursorRulesToggles: (toggles: Record<string, boolean>) => void
5757
setLocalWindsurfRulesToggles: (toggles: Record<string, boolean>) => void
58+
setWorkflowToggles: (toggles: Record<string, boolean>) => void
5859
setMcpMarketplaceCatalog: (value: McpMarketplaceCatalog) => void
5960

6061
// Navigation state setters
@@ -540,6 +541,11 @@ export const ExtensionStateContextProvider: React.FC<{
540541
...prevState,
541542
localWindsurfRulesToggles: toggles,
542543
})),
544+
setWorkflowToggles: (toggles) =>
545+
setState((prevState) => ({
546+
...prevState,
547+
workflowToggles: toggles,
548+
})),
543549
setMcpTab,
544550
}
545551

0 commit comments

Comments
 (0)