mirror of
https://github.com/cline/cline.git
synced 2025-06-03 03:59:07 +00:00
Migrate toggleWindsurfRule protobus (#3677)
* migrate toggleWindsurfRules * changeset --------- Co-authored-by: Elephant Lumps <celestial_vault@Elephants-MacBook-Pro.local>
This commit is contained in:
parent
aff78bda7c
commit
f0e352489f
5
.changeset/silver-seals-care.md
Normal file
5
.changeset/silver-seals-care.md
Normal file
@ -0,0 +1,5 @@
|
||||
---
|
||||
"claude-dev": minor
|
||||
---
|
||||
|
||||
Migrate toggleWindsurfRule to protobus
|
@ -40,6 +40,16 @@ service FileService {
|
||||
|
||||
// Toggle a Cursor rule (enable or disable)
|
||||
rpc toggleCursorRule(ToggleCursorRuleRequest) returns (ClineRulesToggles);
|
||||
|
||||
// Toggle a Windsurf rule (enable or disable)
|
||||
rpc toggleWindsurfRule(ToggleWindsurfRuleRequest) returns (ClineRulesToggles);
|
||||
}
|
||||
|
||||
// Request to toggle a Windsurf rule
|
||||
message ToggleWindsurfRuleRequest {
|
||||
Metadata metadata = 1;
|
||||
string rule_path = 2; // Path to the rule file
|
||||
bool enabled = 3; // Whether to enable or disable the rule
|
||||
}
|
||||
|
||||
// Request to convert a list of URIs to relative paths
|
||||
|
@ -14,6 +14,7 @@ import { searchFiles } from "./searchFiles"
|
||||
import { selectImages } from "./selectImages"
|
||||
import { toggleClineRule } from "./toggleClineRule"
|
||||
import { toggleCursorRule } from "./toggleCursorRule"
|
||||
import { toggleWindsurfRule } from "./toggleWindsurfRule"
|
||||
|
||||
// Register all file service methods
|
||||
export function registerAllMethods(): void {
|
||||
@ -29,4 +30,5 @@ export function registerAllMethods(): void {
|
||||
registerMethod("selectImages", selectImages)
|
||||
registerMethod("toggleClineRule", toggleClineRule)
|
||||
registerMethod("toggleCursorRule", toggleCursorRule)
|
||||
registerMethod("toggleWindsurfRule", toggleWindsurfRule)
|
||||
}
|
||||
|
30
src/core/controller/file/toggleWindsurfRule.ts
Normal file
30
src/core/controller/file/toggleWindsurfRule.ts
Normal file
@ -0,0 +1,30 @@
|
||||
import type { ToggleWindsurfRuleRequest, ClineRulesToggles } from "../../../shared/proto/file"
|
||||
import type { Controller } from "../index"
|
||||
import { getWorkspaceState, updateWorkspaceState } from "../../../core/storage/state"
|
||||
import { ClineRulesToggles as AppClineRulesToggles } from "@shared/cline-rules"
|
||||
|
||||
/**
|
||||
* Toggles a Windsurf rule (enable or disable)
|
||||
* @param controller The controller instance
|
||||
* @param request The toggle request
|
||||
* @returns The updated Windsurf rule toggles
|
||||
*/
|
||||
export async function toggleWindsurfRule(controller: Controller, request: ToggleWindsurfRuleRequest): Promise<ClineRulesToggles> {
|
||||
const { rulePath, enabled } = request
|
||||
|
||||
if (!rulePath || typeof enabled !== "boolean") {
|
||||
console.error("toggleWindsurfRule: Missing or invalid parameters", {
|
||||
rulePath,
|
||||
enabled: typeof enabled === "boolean" ? enabled : `Invalid: ${typeof enabled}`,
|
||||
})
|
||||
throw new Error("Missing or invalid parameters for toggleWindsurfRule")
|
||||
}
|
||||
|
||||
// Update the toggles
|
||||
const toggles = ((await getWorkspaceState(controller.context, "localWindsurfRulesToggles")) as AppClineRulesToggles) || {}
|
||||
toggles[rulePath] = enabled
|
||||
await updateWorkspaceState(controller.context, "localWindsurfRulesToggles", toggles)
|
||||
|
||||
// Return the toggles directly
|
||||
return { toggles: toggles }
|
||||
}
|
@ -389,19 +389,6 @@ export class Controller {
|
||||
|
||||
// break
|
||||
// }
|
||||
case "toggleWindsurfRule": {
|
||||
const { rulePath, enabled } = message
|
||||
if (rulePath && typeof enabled === "boolean") {
|
||||
const toggles =
|
||||
((await getWorkspaceState(this.context, "localWindsurfRulesToggles")) as ClineRulesToggles) || {}
|
||||
toggles[rulePath] = enabled
|
||||
await updateWorkspaceState(this.context, "localWindsurfRulesToggles", toggles)
|
||||
await this.postStateToWebview()
|
||||
} else {
|
||||
console.error("toggleWindsurfRule: Missing or invalid parameters")
|
||||
}
|
||||
break
|
||||
}
|
||||
case "toggleWorkflow": {
|
||||
const { workflowPath, enabled } = message
|
||||
if (workflowPath && typeof enabled === "boolean") {
|
||||
|
@ -41,7 +41,6 @@ export interface WebviewMessage {
|
||||
| "searchFiles"
|
||||
| "grpc_request"
|
||||
| "grpc_request_cancel"
|
||||
| "toggleWindsurfRule"
|
||||
| "toggleWorkflow"
|
||||
| "updateTerminalConnectionTimeout"
|
||||
|
||||
|
@ -10,6 +10,15 @@ import { Empty, EmptyRequest, Metadata, StringArray, StringRequest } from "./com
|
||||
|
||||
export const protobufPackage = "cline"
|
||||
|
||||
/** Request to toggle a Windsurf rule */
|
||||
export interface ToggleWindsurfRuleRequest {
|
||||
metadata?: Metadata | undefined
|
||||
/** Path to the rule file */
|
||||
rulePath: string
|
||||
/** Whether to enable or disable the rule */
|
||||
enabled: boolean
|
||||
}
|
||||
|
||||
/** Request to convert a list of URIs to relative paths */
|
||||
export interface RelativePathsRequest {
|
||||
metadata?: Metadata | undefined
|
||||
@ -123,6 +132,99 @@ export interface ToggleCursorRuleRequest {
|
||||
enabled: boolean
|
||||
}
|
||||
|
||||
function createBaseToggleWindsurfRuleRequest(): ToggleWindsurfRuleRequest {
|
||||
return { metadata: undefined, rulePath: "", enabled: false }
|
||||
}
|
||||
|
||||
export const ToggleWindsurfRuleRequest: MessageFns<ToggleWindsurfRuleRequest> = {
|
||||
encode(message: ToggleWindsurfRuleRequest, writer: BinaryWriter = new BinaryWriter()): BinaryWriter {
|
||||
if (message.metadata !== undefined) {
|
||||
Metadata.encode(message.metadata, writer.uint32(10).fork()).join()
|
||||
}
|
||||
if (message.rulePath !== "") {
|
||||
writer.uint32(18).string(message.rulePath)
|
||||
}
|
||||
if (message.enabled !== false) {
|
||||
writer.uint32(24).bool(message.enabled)
|
||||
}
|
||||
return writer
|
||||
},
|
||||
|
||||
decode(input: BinaryReader | Uint8Array, length?: number): ToggleWindsurfRuleRequest {
|
||||
const reader = input instanceof BinaryReader ? input : new BinaryReader(input)
|
||||
let end = length === undefined ? reader.len : reader.pos + length
|
||||
const message = createBaseToggleWindsurfRuleRequest()
|
||||
while (reader.pos < end) {
|
||||
const tag = reader.uint32()
|
||||
switch (tag >>> 3) {
|
||||
case 1: {
|
||||
if (tag !== 10) {
|
||||
break
|
||||
}
|
||||
|
||||
message.metadata = Metadata.decode(reader, reader.uint32())
|
||||
continue
|
||||
}
|
||||
case 2: {
|
||||
if (tag !== 18) {
|
||||
break
|
||||
}
|
||||
|
||||
message.rulePath = reader.string()
|
||||
continue
|
||||
}
|
||||
case 3: {
|
||||
if (tag !== 24) {
|
||||
break
|
||||
}
|
||||
|
||||
message.enabled = reader.bool()
|
||||
continue
|
||||
}
|
||||
}
|
||||
if ((tag & 7) === 4 || tag === 0) {
|
||||
break
|
||||
}
|
||||
reader.skip(tag & 7)
|
||||
}
|
||||
return message
|
||||
},
|
||||
|
||||
fromJSON(object: any): ToggleWindsurfRuleRequest {
|
||||
return {
|
||||
metadata: isSet(object.metadata) ? Metadata.fromJSON(object.metadata) : undefined,
|
||||
rulePath: isSet(object.rulePath) ? globalThis.String(object.rulePath) : "",
|
||||
enabled: isSet(object.enabled) ? globalThis.Boolean(object.enabled) : false,
|
||||
}
|
||||
},
|
||||
|
||||
toJSON(message: ToggleWindsurfRuleRequest): unknown {
|
||||
const obj: any = {}
|
||||
if (message.metadata !== undefined) {
|
||||
obj.metadata = Metadata.toJSON(message.metadata)
|
||||
}
|
||||
if (message.rulePath !== "") {
|
||||
obj.rulePath = message.rulePath
|
||||
}
|
||||
if (message.enabled !== false) {
|
||||
obj.enabled = message.enabled
|
||||
}
|
||||
return obj
|
||||
},
|
||||
|
||||
create<I extends Exact<DeepPartial<ToggleWindsurfRuleRequest>, I>>(base?: I): ToggleWindsurfRuleRequest {
|
||||
return ToggleWindsurfRuleRequest.fromPartial(base ?? ({} as any))
|
||||
},
|
||||
fromPartial<I extends Exact<DeepPartial<ToggleWindsurfRuleRequest>, I>>(object: I): ToggleWindsurfRuleRequest {
|
||||
const message = createBaseToggleWindsurfRuleRequest()
|
||||
message.metadata =
|
||||
object.metadata !== undefined && object.metadata !== null ? Metadata.fromPartial(object.metadata) : undefined
|
||||
message.rulePath = object.rulePath ?? ""
|
||||
message.enabled = object.enabled ?? false
|
||||
return message
|
||||
},
|
||||
}
|
||||
|
||||
function createBaseRelativePathsRequest(): RelativePathsRequest {
|
||||
return { metadata: undefined, uris: [] }
|
||||
}
|
||||
@ -1484,6 +1586,15 @@ export const FileServiceDefinition = {
|
||||
responseStream: false,
|
||||
options: {},
|
||||
},
|
||||
/** Toggle a Windsurf rule (enable or disable) */
|
||||
toggleWindsurfRule: {
|
||||
name: "toggleWindsurfRule",
|
||||
requestType: ToggleWindsurfRuleRequest,
|
||||
requestStream: false,
|
||||
responseType: ClineRulesToggles,
|
||||
responseStream: false,
|
||||
options: {},
|
||||
},
|
||||
},
|
||||
} as const
|
||||
|
||||
|
@ -32,6 +32,7 @@ import { getRelativePaths } from "../core/controller/file/getRelativePaths"
|
||||
import { searchFiles } from "../core/controller/file/searchFiles"
|
||||
import { toggleClineRule } from "../core/controller/file/toggleClineRule"
|
||||
import { toggleCursorRule } from "../core/controller/file/toggleCursorRule"
|
||||
import { toggleWindsurfRule } from "../core/controller/file/toggleWindsurfRule"
|
||||
|
||||
// Mcp Service
|
||||
import { toggleMcpServer } from "../core/controller/mcp/toggleMcpServer"
|
||||
@ -124,6 +125,7 @@ export function addServices(
|
||||
searchFiles: wrapper(searchFiles, controller),
|
||||
toggleClineRule: wrapper(toggleClineRule, controller),
|
||||
toggleCursorRule: wrapper(toggleCursorRule, controller),
|
||||
toggleWindsurfRule: wrapper(toggleWindsurfRule, controller),
|
||||
})
|
||||
|
||||
// Mcp Service
|
||||
|
@ -8,6 +8,7 @@ import { VSCodeButton } from "@vscode/webview-ui-toolkit/react"
|
||||
import RulesToggleList from "./RulesToggleList"
|
||||
import Tooltip from "@/components/common/Tooltip"
|
||||
import styled from "styled-components"
|
||||
import { ClineRulesToggles, ToggleWindsurfRuleRequest } from "@shared/proto/file"
|
||||
|
||||
const ClineRulesToggleModal: React.FC = () => {
|
||||
const {
|
||||
@ -19,6 +20,7 @@ const ClineRulesToggleModal: React.FC = () => {
|
||||
setGlobalClineRulesToggles,
|
||||
setLocalClineRulesToggles,
|
||||
setLocalCursorRulesToggles,
|
||||
setLocalWindsurfRulesToggles,
|
||||
} = useExtensionState()
|
||||
const [isVisible, setIsVisible] = useState(false)
|
||||
const buttonRef = useRef<HTMLDivElement>(null)
|
||||
@ -94,11 +96,18 @@ const ClineRulesToggleModal: React.FC = () => {
|
||||
}
|
||||
|
||||
const toggleWindsurfRule = (rulePath: string, enabled: boolean) => {
|
||||
vscode.postMessage({
|
||||
type: "toggleWindsurfRule",
|
||||
FileServiceClient.toggleWindsurfRule({
|
||||
rulePath,
|
||||
enabled,
|
||||
})
|
||||
} as ToggleWindsurfRuleRequest)
|
||||
.then((response: ClineRulesToggles) => {
|
||||
if (response.toggles) {
|
||||
setLocalWindsurfRulesToggles(response.toggles)
|
||||
}
|
||||
})
|
||||
.catch((error) => {
|
||||
console.error("Error toggling Windsurf rule:", error)
|
||||
})
|
||||
}
|
||||
|
||||
const toggleWorkflow = (workflowPath: string, enabled: boolean) => {
|
||||
|
@ -54,6 +54,7 @@ interface ExtensionStateContextType extends ExtensionState {
|
||||
setGlobalClineRulesToggles: (toggles: Record<string, boolean>) => void
|
||||
setLocalClineRulesToggles: (toggles: Record<string, boolean>) => void
|
||||
setLocalCursorRulesToggles: (toggles: Record<string, boolean>) => void
|
||||
setLocalWindsurfRulesToggles: (toggles: Record<string, boolean>) => void
|
||||
|
||||
// Navigation state setters
|
||||
setShowMcp: (value: boolean) => void
|
||||
@ -532,6 +533,11 @@ export const ExtensionStateContextProvider: React.FC<{
|
||||
...prevState,
|
||||
localCursorRulesToggles: toggles,
|
||||
})),
|
||||
setLocalWindsurfRulesToggles: (toggles) =>
|
||||
setState((prevState) => ({
|
||||
...prevState,
|
||||
localWindsurfRulesToggles: toggles,
|
||||
})),
|
||||
setMcpTab,
|
||||
}
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user