Skip to content

Commit 570ece3

Browse files
authored
selectImages protobus migration (RooCodeInc#3575)
1 parent 8f6f646 commit 570ece3

File tree

9 files changed

+53
-13
lines changed

9 files changed

+53
-13
lines changed

.changeset/funny-ties-sleep.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+
selectImages protos migration

proto/file.proto

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,9 @@ service FileService {
2222

2323
// Search git commits in the workspace
2424
rpc searchCommits(StringRequest) returns (GitCommits);
25+
26+
// Select images from the file system and return as data URLs
27+
rpc selectImages(EmptyRequest) returns (StringArray);
2528

2629
// Convert URIs to workspace-relative paths
2730
rpc getRelativePaths(RelativePathsRequest) returns (RelativePaths);

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 { openFile } from "./openFile"
1010
import { openImage } from "./openImage"
1111
import { searchCommits } from "./searchCommits"
1212
import { searchFiles } from "./searchFiles"
13+
import { selectImages } from "./selectImages"
1314

1415
// Register all file service methods
1516
export function registerAllMethods(): void {
@@ -21,4 +22,5 @@ export function registerAllMethods(): void {
2122
registerMethod("openImage", openImage)
2223
registerMethod("searchCommits", searchCommits)
2324
registerMethod("searchFiles", searchFiles)
25+
registerMethod("selectImages", selectImages)
2426
}
Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
import { Controller } from ".."
2+
import { EmptyRequest, StringArray } from "@shared/proto/common"
3+
import { selectImages as selectImagesIntegration } from "@integrations/misc/process-images"
4+
import { FileMethodHandler } from "./index"
5+
6+
/**
7+
* Prompts the user to select images from the file system and returns them as data URLs
8+
* @param controller The controller instance
9+
* @param request Empty request, no parameters needed
10+
* @returns Array of image data URLs
11+
*/
12+
export const selectImages: FileMethodHandler = async (controller: Controller, request: EmptyRequest): Promise<StringArray> => {
13+
try {
14+
const images = await selectImagesIntegration()
15+
return StringArray.create({ values: images })
16+
} catch (error) {
17+
console.error("Error selecting images:", error)
18+
// Return empty array on error
19+
return StringArray.create({ values: [] })
20+
}
21+
}

src/core/controller/index.ts

Lines changed: 0 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,6 @@ import { cleanupLegacyCheckpoints } from "@integrations/checkpoints/CheckpointMi
1414
import { downloadTask } from "@integrations/misc/export-markdown"
1515
import { fetchOpenGraphData } from "@integrations/misc/link-preview"
1616
import { handleFileServiceRequest } from "./file"
17-
import { selectImages } from "@integrations/misc/process-images"
1817
import { getTheme } from "@integrations/theme/getTheme"
1918
import WorkspaceTracker from "@integrations/workspace/WorkspaceTracker"
2019
import { ClineAccountService } from "@services/account/ClineAccountService"
@@ -320,13 +319,6 @@ export class Controller {
320319
await updateGlobalState(this.context, "lastShownAnnouncementId", this.latestAnnouncementId)
321320
await this.postStateToWebview()
322321
break
323-
case "selectImages":
324-
const images = await selectImages()
325-
await this.postMessageToWebview({
326-
type: "selectedImages",
327-
images,
328-
})
329-
break
330322
case "resetState":
331323
await this.resetState()
332324
break

src/shared/WebviewMessage.ts

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,6 @@ export interface WebviewMessage {
1616
| "reportBug"
1717
| "askResponse"
1818
| "didShowAnnouncement"
19-
| "selectImages"
2019
| "resetState"
2120
| "openInBrowser"
2221
| "openMention"

src/shared/proto/file.ts

Lines changed: 10 additions & 1 deletion
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
@@ -20,6 +20,7 @@ import { checkpointRestore } from "../core/controller/checkpoints/checkpointRest
2020

2121
// File Service
2222
import { openFile } from "../core/controller/file/openFile"
23+
import { selectImages } from "../core/controller/file/selectImages"
2324
import { openImage } from "../core/controller/file/openImage"
2425
import { deleteRuleFile } from "../core/controller/file/deleteRuleFile"
2526
import { createRuleFile } from "../core/controller/file/createRuleFile"
@@ -94,6 +95,7 @@ export function addServices(
9495
// File Service
9596
server.addService(proto.cline.FileService.service, {
9697
openFile: wrapper(openFile, controller),
98+
selectImages: wrapper(selectImages, controller),
9799
openImage: wrapper(openImage, controller),
98100
deleteRuleFile: wrapper(deleteRuleFile, controller),
99101
createRuleFile: wrapper(createRuleFile, controller),

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

Lines changed: 10 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,7 @@ import { combineCommandSequences } from "@shared/combineCommandSequences"
1818
import { getApiMetrics } from "@shared/getApiMetrics"
1919
import { useExtensionState } from "@/context/ExtensionStateContext"
2020
import { vscode } from "@/utils/vscode"
21-
import { TaskServiceClient, SlashServiceClient } from "@/services/grpc-client"
21+
import { TaskServiceClient, SlashServiceClient, FileServiceClient } from "@/services/grpc-client"
2222
import HistoryPreview from "@/components/history/HistoryPreview"
2323
import { normalizeApiConfiguration } from "@/components/settings/ApiOptions"
2424
import Announcement from "@/components/chat/Announcement"
@@ -632,8 +632,15 @@ const ChatView = ({ isHidden, showAnnouncement, hideAnnouncement, showHistoryVie
632632
return normalizeApiConfiguration(apiConfiguration)
633633
}, [apiConfiguration])
634634

635-
const selectImages = useCallback(() => {
636-
vscode.postMessage({ type: "selectImages" })
635+
const selectImages = useCallback(async () => {
636+
try {
637+
const response = await FileServiceClient.selectImages({})
638+
if (response && response.values && response.values.length > 0) {
639+
setSelectedImages((prevImages) => [...prevImages, ...response.values].slice(0, MAX_IMAGES_PER_MESSAGE))
640+
}
641+
} catch (error) {
642+
console.error("Error selecting images:", error)
643+
}
637644
}, [])
638645

639646
const shouldDisableImages = !selectedModelInfo.supportsImages || selectedImages.length >= MAX_IMAGES_PER_MESSAGE

0 commit comments

Comments
 (0)