From 151db268dea901e00a7fea7f3c404ede685b030c Mon Sep 17 00:00:00 2001 From: Saoud Rizwan <7799382+saoudrizwan@users.noreply.github.com> Date: Mon, 19 Oct 2026 21:13:59 +0000 Subject: [PATCH] feat(desktop): scripted computer-use demo for cloud sessions --- .../examples/desktop-app/webview/app/page.tsx | 172 ++++-- .../components/views/chat/chat-messages.tsx | 31 +- .../computer-use-demo/computer-use-demo.tsx | 526 ++++++++++++++++++ .../screenshots/01-board.webp | Bin 0 -> 28638 bytes .../screenshots/02-palette.webp | Bin 0 -> 13678 bytes .../screenshots/03-search.webp | Bin 0 -> 9772 bytes .../screenshots/04-filtered.webp | Bin 0 -> 18484 bytes .../screenshots/05-dark.webp | Bin 0 -> 8260 bytes .../screenshots/06-mobile.webp | Bin 0 -> 8402 bytes .../views/chat/messages/image-lightbox.tsx | 7 +- .../views/chat/messages/tool-icons.ts | 2 + 11 files changed, 668 insertions(+), 70 deletions(-) create mode 100644 apps/examples/desktop-app/webview/components/views/chat/computer-use-demo/computer-use-demo.tsx create mode 100644 apps/examples/desktop-app/webview/components/views/chat/computer-use-demo/screenshots/01-board.webp create mode 100644 apps/examples/desktop-app/webview/components/views/chat/computer-use-demo/screenshots/02-palette.webp create mode 100644 apps/examples/desktop-app/webview/components/views/chat/computer-use-demo/screenshots/03-search.webp create mode 100644 apps/examples/desktop-app/webview/components/views/chat/computer-use-demo/screenshots/04-filtered.webp create mode 100644 apps/examples/desktop-app/webview/components/views/chat/computer-use-demo/screenshots/05-dark.webp create mode 100644 apps/examples/desktop-app/webview/components/views/chat/computer-use-demo/screenshots/06-mobile.webp diff --git a/apps/examples/desktop-app/webview/app/page.tsx b/apps/examples/desktop-app/webview/app/page.tsx index 9406775719..72cbc48571 100644 --- a/apps/examples/desktop-app/webview/app/page.tsx +++ b/apps/examples/desktop-app/webview/app/page.tsx @@ -201,6 +201,18 @@ const DiffView = dynamic( { loading: viewLoading, ssr: false }, ); +// Dev-only scripted preview of cloud computer use; open with Cmd/Ctrl+Shift+D or #computer-use-demo. +const ComputerUseDemo = + process.env.NODE_ENV === "production" + ? null + : dynamic( + () => + import( + "@/components/views/chat/computer-use-demo/computer-use-demo" + ).then((module) => module.ComputerUseDemo), + { loading: viewLoading, ssr: false }, + ); + function makeThreadId(): string { return `thread_${Date.now()}_${Math.random().toString(36).slice(2, 7)}`; } @@ -318,6 +330,10 @@ export default function Home() { const [whatsNew, setWhatsNew] = useState(null); const [commandBarOpen, setCommandBarOpen] = useState(false); const [exportDiagnosticsOpen, setExportDiagnosticsOpen] = useState(false); + // The demo replaces the thread it was opened over, so navigating away closes it. + const [computerUseDemoThreadId, setComputerUseDemoThreadId] = useState< + string | null + >(null); // Shared by the sidebar search icon and the Cmd/Ctrl+P shortcut. const handleOpenCommandBar = useCallback(() => setCommandBarOpen(true), []); // "welcome" for the full first-run flow; "connect" when re-entered from @@ -765,6 +781,20 @@ export default function Home() { if (showOnboarding) { return; } + if ( + ComputerUseDemo && + (event.metaKey || event.ctrlKey) && + event.shiftKey && + event.key.toLowerCase() === "d" + ) { + event.preventDefault(); + const threadId = activeThread?.id ?? null; + setComputerUseDemoThreadId((current) => + current === threadId ? null : threadId, + ); + navigateWith({ view: "chat" }); + return; + } if (!(event.metaKey || event.ctrlKey) || event.altKey || event.shiftKey) { return; } @@ -781,7 +811,18 @@ export default function Home() { }; window.addEventListener("keydown", handleKeyDown); return () => window.removeEventListener("keydown", handleKeyDown); - }, [handleNewThread, handleViewChange, showOnboarding]); + }, [ + activeThread?.id, + handleNewThread, + handleViewChange, + navigateWith, + showOnboarding, + ]); + useEffect(() => { + if (ComputerUseDemo && window.location.hash === "#computer-use-demo") { + setComputerUseDemoThreadId(initialThreadId); + } + }, [initialThreadId]); const handleThreadStarted = useCallback( (threadId: string, sessionId?: string) => { dispatchApp({ type: "thread-started", threadId, sessionId }); @@ -960,66 +1001,75 @@ export default function Home() { className="flex min-h-0 flex-1 flex-col" inert={view === "settings" ? true : undefined} > - handleSettingsSectionChange("Remote")} - onPickRemoteWorkspaceDirectory={ - pickRemoteWorkspaceDirectory - } - onSelectEnvironment={handleSelectEnvironment} - remoteEnvironment={ - activeRemoteEnvironment?.id === - activeThread.environmentId - ? activeRemoteEnvironment - : null - } - historySession={activeThread.historySession} - liveHistorySession={ - activeHistorySessionId - ? sessionHistory.sessionById.get( - activeHistorySessionId, - ) - : undefined - } - initialPromptDraft={activeThread.initialPromptDraft} - promptDrafts={promptDrafts} - knownWorkspacePaths={historyWorkspacePaths} - onInitialPromptDraftConsumed={ - handleInitialPromptDraftConsumed - } - onUpdateSessionMetadata={(sessionId, metadata) => - handleUpdateSessionMetadata( - sessionId, - metadata, - activeThread.environmentId, - ) - } - threadId={activeThread.id} - onDeleteSession={(sessionId, threadId) => - handleDeleteSession( - sessionId, - threadId, - activeThread.environmentId, - ) - } - onNewThread={handleNewThread} - onOpenSession={handleOpenSession} - onOpenSessionById={handleOpenSessionById} - onOpenSetup={handleOpenSetup} - onOpenModelSettings={() => - handleSettingsSectionChange("Providers") - } - onOpenAccountSettings={() => - handleSettingsSectionChange("Account") - } - parentSession={activeParentSession} - onThreadStarted={handleThreadStarted} - /> + {ComputerUseDemo && + computerUseDemoThreadId === activeThread.id ? ( + setComputerUseDemoThreadId(null)} + /> + ) : ( + + handleSettingsSectionChange("Remote") + } + onPickRemoteWorkspaceDirectory={ + pickRemoteWorkspaceDirectory + } + onSelectEnvironment={handleSelectEnvironment} + remoteEnvironment={ + activeRemoteEnvironment?.id === + activeThread.environmentId + ? activeRemoteEnvironment + : null + } + historySession={activeThread.historySession} + liveHistorySession={ + activeHistorySessionId + ? sessionHistory.sessionById.get( + activeHistorySessionId, + ) + : undefined + } + initialPromptDraft={activeThread.initialPromptDraft} + promptDrafts={promptDrafts} + knownWorkspacePaths={historyWorkspacePaths} + onInitialPromptDraftConsumed={ + handleInitialPromptDraftConsumed + } + onUpdateSessionMetadata={(sessionId, metadata) => + handleUpdateSessionMetadata( + sessionId, + metadata, + activeThread.environmentId, + ) + } + threadId={activeThread.id} + onDeleteSession={(sessionId, threadId) => + handleDeleteSession( + sessionId, + threadId, + activeThread.environmentId, + ) + } + onNewThread={handleNewThread} + onOpenSession={handleOpenSession} + onOpenSessionById={handleOpenSessionById} + onOpenSetup={handleOpenSetup} + onOpenModelSettings={() => + handleSettingsSectionChange("Providers") + } + onOpenAccountSettings={() => + handleSettingsSectionChange("Account") + } + parentSession={activeParentSession} + onThreadStarted={handleThreadStarted} + /> + )} ) : null} {view === "settings" ? ( diff --git a/apps/examples/desktop-app/webview/components/views/chat/chat-messages.tsx b/apps/examples/desktop-app/webview/components/views/chat/chat-messages.tsx index 907de45364..ebd1f43f31 100644 --- a/apps/examples/desktop-app/webview/components/views/chat/chat-messages.tsx +++ b/apps/examples/desktop-app/webview/components/views/chat/chat-messages.tsx @@ -1,6 +1,10 @@ "use client"; -import { AgentAskQuestion } from "@cline/ui"; +import { + AgentAskQuestion, + type AgentScreenshot, + AgentScreenshotCarousel, +} from "@cline/ui"; import { MessageScroller, MessageScrollerButton, @@ -91,6 +95,8 @@ type ChatMessagesProps = { ) => void | Promise; /** Opens the settings page that fixes a credential failure. */ onFixCredentials?: (target: "account" | "models") => void; + /** Screenshots the agent captured while verifying its work, shown after the transcript. */ + verification?: { screenshots: AgentScreenshot[]; subtitle?: string }; }; type AskQuestionRequestItem = { @@ -128,6 +134,7 @@ function ChatMessagesImpl({ errorAction, onProceedWhileRunning, onFixCredentials, + verification, }: ChatMessagesProps) { const hasMessages = messages.length > 0; // Scanned from the tail without copying: this component re-renders on @@ -214,14 +221,14 @@ function ChatMessagesImpl({ const [forkErrors, setForkErrors] = useState>({}); const [expandedImage, setExpandedImage] = useState<{ sessionId: string | null; - image: ChatMessageImage; + src: string; } | null>(null); const sessionVersioningPending = editingMessageId !== null || forkingMessageId !== null || Object.values(checkpointActions).includes("undoing"); const visibleExpandedImage = - expandedImage?.sessionId === sessionId ? expandedImage.image : null; + expandedImage?.sessionId === sessionId ? expandedImage.src : null; const showIdleDetails = !hasMessages && !isSessionSwitching && !showSwitchTransition; // The live run keeps rendering its rows while the session is active, and an @@ -487,7 +494,10 @@ function ChatMessagesImpl({ const handleExpandImage = useCallback( (image: ChatMessageImage) => { - setExpandedImage({ sessionId, image }); + setExpandedImage({ + sessionId, + src: `data:${image.mediaType};base64,${image.data}`, + }); }, [sessionId], ); @@ -727,6 +737,17 @@ function ChatMessagesImpl({ ); })} + {verification?.screenshots.length ? ( + + + setExpandedImage({ sessionId, src: screenshot.src }) + } + screenshots={verification.screenshots} + subtitle={verification.subtitle} + /> + + ) : null} {/* Lives inside the transcript column and mirrors a reasoning/tool trigger's geometry exactly (icon slot, min-height, padding), so the first real row replaces it @@ -843,7 +864,7 @@ function ChatMessagesImpl({ {visibleExpandedImage ? ( setExpandedImage(null)} /> ) : null} diff --git a/apps/examples/desktop-app/webview/components/views/chat/computer-use-demo/computer-use-demo.tsx b/apps/examples/desktop-app/webview/components/views/chat/computer-use-demo/computer-use-demo.tsx new file mode 100644 index 0000000000..8980a09db5 --- /dev/null +++ b/apps/examples/desktop-app/webview/components/views/chat/computer-use-demo/computer-use-demo.tsx @@ -0,0 +1,526 @@ +"use client"; + +import { + AgentComposer, + AgentComposerBody, + AgentConversationLayout, + AgentPullRequestBar, + type AgentPullRequestData, + type AgentScreenshot, +} from "@cline/ui"; +import { RotateCcw, ScanEye, X } from "lucide-react"; +import { useEffect, useState } from "react"; +import { AgentHeader } from "@/components/agent-header"; +import { Button } from "@/components/ui/button"; +import { + Popover, + PopoverContent, + PopoverTrigger, +} from "@/components/ui/popover"; +import { WindowTitleBarContent } from "@/components/window-title-bar"; +import type { ChatMessage, ChatSessionStatus } from "@/lib/chat-schema"; +import { ChatMessages } from "../chat-messages"; +import board from "./screenshots/01-board.webp"; +import palette from "./screenshots/02-palette.webp"; +import search from "./screenshots/03-search.webp"; +import filtered from "./screenshots/04-filtered.webp"; +import dark from "./screenshots/05-dark.webp"; +import mobile from "./screenshots/06-mobile.webp"; + +/* + * Scripted preview of computer use ("close the loop") in cloud sessions. The + * sandbox cannot stream screenshots to clients yet, so this replays a canned + * session through the real transcript components. The screenshots were + * captured from a fixture app with Xvfb, xdotool, and ImageMagick. + */ + +const SESSION_ID = "computer-use-demo"; +const TITLE = "Add a ⌘K command palette with quick filters"; +const PROMPT = + "Add a ⌘K / Ctrl+K command palette to the Tidepool board with quick filters for overdue, assigned to me, and high priority cards. Build it, run it in the browser, and verify it works before opening a PR."; + +const SCREENSHOTS: AgentScreenshot[] = [ + { + id: "board", + src: board.src, + title: "Board loads with the new Ctrl K hint", + action: "launch", + detail: "localhost:5173", + status: "passed", + }, + { + id: "palette", + src: palette.src, + title: "Ctrl+K opens the command palette", + action: "key", + detail: "Ctrl+K", + status: "passed", + }, + { + id: "search", + src: search.src, + title: "Fuzzy search narrows to “Show overdue”", + action: "type", + detail: "over", + pointer: { x: 0.5, y: 0.285 }, + status: "passed", + }, + { + id: "filtered", + src: filtered.src, + title: "Overdue filter applied: 4 cards and a removable chip", + action: "click", + detail: "Show overdue", + status: "passed", + }, + { + id: "dark", + src: dark.src, + title: "Palette follows the dark theme", + action: "key", + detail: "Ctrl+Shift+L", + status: "passed", + }, + { + id: "mobile", + src: mobile.src, + title: "Palette fits a 390px mobile viewport", + action: "resize", + detail: "390×844", + status: "passed", + }, +]; + +const PULL_REQUEST: AgentPullRequestData = { + repository: "acme/tidepool", + branch: "cline/command-palette", + pullRequest: { + number: 128, + title: "Add ⌘K command palette with quick filters", + url: "https://github.com/acme/tidepool/pull/128", + state: "OPEN", + isDraft: false, + mergeable: "MERGEABLE", + mergeStateStatus: "CLEAN", + additions: 312, + deletions: 18, + checks: [ + { name: "test", state: "success" }, + { name: "lint", state: "success" }, + { name: "preview-deploy", state: "success" }, + ], + }, +}; + +const FINAL_ANSWER = `Added a **command palette** to Tidepool and verified it end to end in the sandbox. + +- \`Ctrl K\` / \`⌘K\` opens it from anywhere and \`Esc\` closes it +- Quick filters for **overdue**, **assigned to me**, and **high priority**, applied as a removable chip +- Fuzzy search with match highlighting, plus theme and clear-filter actions +- 5 new tests, 26 passing + +I ran the app in the sandbox's browser and drove it with the keyboard and mouse across light, dark, and a 390px viewport. The screenshots are below, and the PR is [#128](https://github.com/acme/tidepool/pull/128).`; + +type Beat = + | { wait: number; status: ChatSessionStatus; label?: string } + | { wait: number; say: string; stream?: boolean } + | { + wait: number; + tool: string; + input: unknown; + result: unknown; + runMs: number; + }; + +const commandResult = (query: string, result: string) => [{ query, result }]; +const screenshotResult = (data: string) => [ + { type: "image", mediaType: "image/webp", data }, +]; + +function buildBeats(images: string[]): Beat[] { + const [boardImg, paletteImg, searchImg, filteredImg, darkImg, mobileImg] = + images; + return [ + { wait: 400, status: "starting", label: "Provisioning cloud sandbox…" }, + { wait: 1500, status: "starting", label: "Cloning acme/tidepool…" }, + { wait: 1300, status: "running" }, + { + wait: 900, + say: "I'll look at how the board handles shortcuts and filtering, then build the palette on top of it.", + }, + { + wait: 500, + tool: "read_files", + input: { + files: [ + "src/App.tsx", + "src/board/Board.tsx", + "src/hooks/useHotkeys.ts", + ], + }, + result: "ok", + runMs: 700, + }, + { + wait: 300, + tool: "search_codebase", + input: { queries: ["applyFilter"] }, + result: "src/board/filters.ts:12", + runMs: 600, + }, + { + wait: 600, + tool: "editor", + input: { + path: "src/components/CommandPalette.tsx", + new_text: `export function CommandPalette() { + const [open, setOpen] = useState(false); + const [query, setQuery] = useState(""); + const { commands, run } = useBoardCommands(); + useHotkeys("mod+k", () => setOpen(true)); + useHotkeys("escape", () => setOpen(false), { enabled: open }); + const results = useMemo(() => fuzzyMatch(commands, query), [commands, query]); + if (!open) return null; + return ( + setOpen(false)}> + + { run(command); setOpen(false); }} /> + + ); +}`, + }, + result: "Created src/components/CommandPalette.tsx", + runMs: 900, + }, + { + wait: 400, + tool: "editor", + input: { + path: "src/App.tsx", + old_text: `\n\t\t\t`, + new_text: `\n\t\t\t\n\t\t\t`, + }, + result: "Edited src/App.tsx", + runMs: 700, + }, + { + wait: 500, + tool: "run_commands", + input: { commands: ["bun test"] }, + result: commandResult( + "bun test", + "src/components/CommandPalette.test.tsx:\n✓ opens with mod+k and closes with escape\n✓ highlights fuzzy matches\n✓ running a filter applies the chip\n\n 26 pass\n 0 fail\nRan 26 tests across 7 files. [412.00ms]", + ), + runMs: 1600, + }, + { + wait: 700, + say: "Tests pass. Next I'll run the app in the sandbox's browser and check the palette the way a user would.", + }, + { + wait: 500, + tool: "run_commands", + input: { + commands: [ + "bun run dev & Xvfb :99 -screen 0 1280x800x24 & DISPLAY=:99 google-chrome --app=http://localhost:5173 &", + ], + }, + result: commandResult( + "bun run dev", + "VITE v6.3.5 ready in 312 ms\n➜ Local: http://localhost:5173/\nChrome attached to display :99", + ), + runMs: 1400, + }, + { + wait: 400, + tool: "computer", + input: { action: "screenshot" }, + result: screenshotResult(boardImg), + runMs: 700, + }, + { + wait: 900, + tool: "computer", + input: { action: "key", text: "ctrl+k" }, + result: screenshotResult(paletteImg), + runMs: 600, + }, + { + wait: 900, + tool: "computer", + input: { action: "type", text: "over" }, + result: screenshotResult(searchImg), + runMs: 800, + }, + { + wait: 900, + tool: "computer", + input: { action: "left_click", coordinate: [640, 228] }, + result: screenshotResult(filteredImg), + runMs: 600, + }, + { + wait: 900, + tool: "computer", + input: { action: "key", text: "ctrl+shift+l" }, + result: screenshotResult(darkImg), + runMs: 600, + }, + { + wait: 900, + tool: "run_commands", + input: { commands: ["xdotool getactivewindow windowsize 390 844"] }, + result: commandResult("xdotool", ""), + runMs: 500, + }, + { + wait: 300, + tool: "computer", + input: { action: "screenshot" }, + result: screenshotResult(mobileImg), + runMs: 600, + }, + { + wait: 900, + tool: "run_commands", + input: { + commands: [ + "git push -u origin cline/command-palette && gh pr create --fill", + ], + }, + result: commandResult( + "gh pr create", + "https://github.com/acme/tidepool/pull/128", + ), + runMs: 1300, + }, + { wait: 700, say: FINAL_ANSWER, stream: true }, + { wait: 400, status: "completed" }, + ]; +} + +async function toBase64(src: string): Promise { + const blob = await (await fetch(src)).blob(); + return await new Promise((resolve, reject) => { + const reader = new FileReader(); + reader.onload = () => resolve(String(reader.result).split(",")[1] ?? ""); + reader.onerror = () => reject(reader.error); + reader.readAsDataURL(blob); + }); +} + +type DemoState = { + messages: ChatMessage[]; + status: ChatSessionStatus; + label?: string; + streamingMessageId: string | null; +}; + +const sleep = (ms: number) => new Promise((resolve) => setTimeout(resolve, ms)); + +function useDemoPlayback(run: number): DemoState { + const [state, setState] = useState({ + messages: [], + status: "starting", + streamingMessageId: null, + }); + useEffect(() => { + void run; + let cancelled = false; + // Timestamps advance faster than playback so "Worked for…" reads like a real run. + let clock = Date.now() - 4 * 60_000; + const tick = (ms: number) => { + clock += ms * 6; + return clock; + }; + const message = ( + id: string, + role: ChatMessage["role"], + content: string, + meta?: ChatMessage["meta"], + ): ChatMessage => ({ + id, + sessionId: SESSION_ID, + role, + content, + createdAt: clock, + meta, + }); + const push = (next: ChatMessage) => + setState((current) => ({ + ...current, + messages: [...current.messages, next], + })); + const replace = (next: ChatMessage) => + setState((current) => ({ + ...current, + messages: current.messages.map((item) => + item.id === next.id ? next : item, + ), + })); + + void (async () => { + const images = await Promise.all( + SCREENSHOTS.map((shot) => toBase64(shot.src)), + ); + if (cancelled) return; + setState({ + messages: [message("prompt", "user", PROMPT)], + status: "starting", + label: undefined, + streamingMessageId: null, + }); + let index = 0; + for (const beat of buildBeats(images)) { + await sleep(beat.wait); + if (cancelled) return; + tick(beat.wait); + const id = `beat-${index++}`; + if ("status" in beat) { + setState((current) => ({ + ...current, + status: beat.status, + label: beat.label, + })); + } else if ("say" in beat) { + if (!beat.stream) { + push(message(id, "assistant", beat.say)); + continue; + } + const words = beat.say.split(/(?<=\s)/); + push(message(id, "assistant", "")); + setState((current) => ({ ...current, streamingMessageId: id })); + for (let count = 3; count < words.length + 3; count += 3) { + await sleep(45); + if (cancelled) return; + replace(message(id, "assistant", words.slice(0, count).join(""))); + } + setState((current) => ({ ...current, streamingMessageId: null })); + } else { + const meta = { toolName: beat.tool, toolCallId: id }; + push( + message( + id, + "tool", + JSON.stringify({ + toolName: beat.tool, + input: beat.input, + result: null, + }), + { + ...meta, + hookEventName: "tool_call_start", + }, + ), + ); + await sleep(beat.runMs); + if (cancelled) return; + tick(beat.runMs); + replace( + message( + id, + "tool", + JSON.stringify({ + toolName: beat.tool, + input: beat.input, + result: beat.result, + }), + meta, + ), + ); + } + } + })(); + return () => { + cancelled = true; + }; + }, [run]); + return state; +} + +export function ComputerUseDemo({ onExit }: { onExit: () => void }) { + const [run, setRun] = useState(0); + const { messages, status, label, streamingMessageId } = useDemoPlayback(run); + const completed = status === "completed"; + + return ( +
+ +
+ +
+
+ {}} + onApproveToolApproval={() => {}} + onRejectToolApproval={() => {}} + pendingAskQuestions={[]} + pendingToolApprovals={[]} + sessionId={SESSION_ID} + startingLabel={status === "starting" ? label : undefined} + status={status} + streamingMessageId={streamingMessageId} + verification={ + completed + ? { + screenshots: SCREENSHOTS, + subtitle: + "Chrome 1280×800 in the cloud sandbox · captured by the agent", + } + : undefined + } + /> + } + bodyClassName="cline-view-enter" + composer={ + + {completed ? ( + {}} + renderChecks={(trigger, content) => ( + + {trigger} + + {content} + + + )} + /> + ) : null} + + +

+ Scripted preview of computer use in cloud sessions. The agent + builds, runs, and screenshots its own work. +

+ + +
+
+ } + welcome={false} + /> +
+ ); +} diff --git a/apps/examples/desktop-app/webview/components/views/chat/computer-use-demo/screenshots/01-board.webp b/apps/examples/desktop-app/webview/components/views/chat/computer-use-demo/screenshots/01-board.webp new file mode 100644 index 0000000000000000000000000000000000000000..81d363455f51958d3679eb2e454ecd0be025ecf8 GIT binary patch literal 28638 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 Uc>n@fwi_PhK%Oc5{~w9}1Bmn;vH$=8 literal 0 HcmV?d00001 diff --git a/apps/examples/desktop-app/webview/components/views/chat/computer-use-demo/screenshots/02-palette.webp b/apps/examples/desktop-app/webview/components/views/chat/computer-use-demo/screenshots/02-palette.webp new file mode 100644 index 0000000000000000000000000000000000000000..5571b3026309b0beb4370955bedf963463041995 GIT binary patch literal 13678 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

**TYDUmp- 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 J&-I_r{{zEqX;%OM literal 0 HcmV?d00001 diff --git a/apps/examples/desktop-app/webview/components/views/chat/computer-use-demo/screenshots/03-search.webp b/apps/examples/desktop-app/webview/components/views/chat/computer-use-demo/screenshots/03-search.webp new file mode 100644 index 0000000000000000000000000000000000000000..d9b088a42dc87957cefa4d9b8b84d421bda31d79 GIT binary patch literal 9772 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 Vnbg1I|39N5CxZXHxcmPB|3Ab?!-@a^ literal 0 HcmV?d00001 diff --git a/apps/examples/desktop-app/webview/components/views/chat/computer-use-demo/screenshots/04-filtered.webp b/apps/examples/desktop-app/webview/components/views/chat/computer-use-demo/screenshots/04-filtered.webp new file mode 100644 index 0000000000000000000000000000000000000000..418664ee657ac9efcd46f780fc5700ae3c3db33a GIT binary patch literal 18484 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 SLpO!ag-Jyd000000002Z{u6`% literal 0 HcmV?d00001 diff --git a/apps/examples/desktop-app/webview/components/views/chat/computer-use-demo/screenshots/05-dark.webp b/apps/examples/desktop-app/webview/components/views/chat/computer-use-demo/screenshots/05-dark.webp new file mode 100644 index 0000000000000000000000000000000000000000..07c6f998110e27a7697c37397468114f704fb138 GIT binary patch literal 8260 zcmeHqRZv~gvhBv*EjYp5HW1w1*+GK_cXx;2kl^m_4uRnA?jGFTolBDU?mboS|9#!@ zF>BTATD^Mp>>fQPNJ?CsmjnP%6BAZcRpcaLet))Y080m>1wfHN@JEYh$mW+aP=8dS zj?O}dGqb)smPM4EXxDW{=yC~eb=;qCMqI;BAf)f`jAd(-;v=-jH(C=o zz82hv;?iO?L*!*PiN=bBple zbd-QOQv7)Vw1(Lb$ja;VeP4g^lj{-wgtg8Zi_ZHV!-kA2XpIoW+>VMzthJY{O5wYV zcJbP#4Qb#jT*P(EkVj6YTT1|kKfx#QmDkMaG-rnQ=Pd_pR@iQ^ArrVFy$=5zMAz>V z|4t*V)Lwb}o(k${W1A0^@S0r-=lM-2G1zk5S2&R;4A0ywnX~X4EKAEiJs4Z`cG#w` zUi)L`)E~ao`d2g=8RpRb49$%0Dkk4?*cXK#9@tChPwC^J*95=UR2ZS-?(Y~tLa&Op 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 E7n_tW)Bpeg literal 0 HcmV?d00001 diff --git a/apps/examples/desktop-app/webview/components/views/chat/computer-use-demo/screenshots/06-mobile.webp b/apps/examples/desktop-app/webview/components/views/chat/computer-use-demo/screenshots/06-mobile.webp new file mode 100644 index 0000000000000000000000000000000000000000..1dab25439af776ceb48b95f47c771981ab433af7 GIT binary patch literal 8402 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 literal 0 HcmV?d00001 diff --git a/apps/examples/desktop-app/webview/components/views/chat/messages/image-lightbox.tsx b/apps/examples/desktop-app/webview/components/views/chat/messages/image-lightbox.tsx index d37a796872..396a753cef 100644 --- a/apps/examples/desktop-app/webview/components/views/chat/messages/image-lightbox.tsx +++ b/apps/examples/desktop-app/webview/components/views/chat/messages/image-lightbox.tsx @@ -1,13 +1,12 @@ "use client"; import { AgentImageLightboxContent } from "@cline/ui"; -import type { ChatMessageImage } from "@/lib/chat-schema"; export function ChatImageLightbox({ - image, + src, onClose, }: { - image: ChatMessageImage; + src: string; onClose: () => void; }) { return ( @@ -18,7 +17,7 @@ export function ChatImageLightbox({ role="dialog" > diff --git a/apps/examples/desktop-app/webview/components/views/chat/messages/tool-icons.ts b/apps/examples/desktop-app/webview/components/views/chat/messages/tool-icons.ts index 43615c7702..5891624e91 100644 --- a/apps/examples/desktop-app/webview/components/views/chat/messages/tool-icons.ts +++ b/apps/examples/desktop-app/webview/components/views/chat/messages/tool-icons.ts @@ -10,6 +10,7 @@ import { LibraryIcon, type LucideIcon, MessageCircleQuestionMarkIcon, + MousePointerClickIcon, PanelsTopLeftIcon, PencilIcon, SearchCodeIcon, @@ -22,6 +23,7 @@ import { // Overrides for tools whose kind-based icon would be misleading. export const TOOL_NAME_ICONS: Record = { + computer: MousePointerClickIcon, plugins: BlocksIcon, submit_and_exit: SquareArrowRightIcon, };