import { Button } from "@/components/ui/button"; import { Input } from "@/components/ui/input"; import { useTaskRunner } from "@/hooks/useTaskRunner"; import { useWindowFind } from "@/hooks/useWindowFind"; import { callMcpTool } from "@/lib/mcpTools"; import { useCallback, useState } from "react"; import { AppStatusStrip, EvidencePanel, StepRunner } from "./shared"; const NOTEPAD_TEMPLATES = [ { label: "focus + screenshot", steps: [ { kind: "focus" }, { kind: "wait_stable", timeout_s: 2 }, { kind: "screenshot", name: "notepad_state" }, ], }, ]; function makeScreenshotSteps(outputDir: string) { return [ { kind: "focus" }, { kind: "wait_stable", timeout_s: 2 }, { kind: "screenshot", name: "notepad_after", output_dir: outputDir }, ]; } export function NotepadTarget() { const win = useWindowFind("Notepad"); const task = useTaskRunner(); const [text, setText] = useState("Hello from cua-mcp"); const [outputDir, setOutputDir] = useState( "C:\\Users\\sandr\\AppData\\Local\\cua-mcp\\evidence", ); const [typeBusy, setTypeBusy] = useState(false); const quickLaunch = useCallback(async () => { await callMcpTool("automation_system", { operation: "start_app", app_path: "notepad.exe", }); window.setTimeout(() => void win.find(), 1500); }, [win]); const quickScreenshot = useCallback(async () => { if (!win.handle) return; await callMcpTool("automation_visual", { operation: "screenshot", window_handle: win.handle, output_path: `${outputDir}\\notepad_snap.png`, }); }, [win.handle, outputDir]); const typeAndSave = useCallback(async () => { if (!win.handle) return; setTypeBusy(true); try { await callMcpTool("automation_windows", { operation: "focus", handle: win.handle, }); await callMcpTool("automation_keyboard", { operation: "type", text, window_handle: win.handle, }); await callMcpTool("automation_keyboard", { operation: "hotkey", keys: ["ctrl", "s"], window_handle: win.handle, }); await task.run({ app: "notepad", steps: makeScreenshotSteps(outputDir), windowHandle: win.handle, outputDir, }); } finally { setTypeBusy(false); } }, [win.handle, text, outputDir, task]); return (