## Status - **Fas 1 (AI-koppling) – klar.** MCP-server ([rpa/mcp_server.py](rpa/mcp_server.py)), NL-till-flöde ([rpa/assist.py](rpa/assist.py) + "AI-assistent"-panelen i webui:t), och gemensamt stegschema ([rpa/schema.py](rpa/schema.py) – auktoritativ källa som webui, MCP och assist alla använder). Se README-avsnittet "AI". - **Fas 2 (n8n-likt UI) – klar.** `webui/frontend/` (Vite + React + React Flow), byggd till `webui/static/` (incheckad). Node-canvas, stegfält renderas från `/api/step-schema`. Hybrid: flödet lagras oförändrat som nästlad `{steps}`-lista; `webui/frontend/src/lib/graph.ts` är sömmen mot en framtida äkta-DAG (loop/if redigeras just nu inuti sin nod, inte som egna canvas-noder; fri kabeldragning saknas medvetet). `layout`-nyckeln i flödet = frivilliga nodpositioner. - **Fas 3 (desktop-automation, Windows) – klar.** [rpa/desktop.py](rpa/desktop.py) (pywinauto UIA + pyautogui bild/koordinat, lat import), 12 `desktop_*`-steg i [rpa/schema.py](rpa/schema.py) + `flow_engine._DESKTOP_STEPS`/`_execute_desktop_step`. `run_flow` håller en lat `DesktopSession` vid sidan av `page`; startade appar städas enligt close-mode. [rpa/desktop_inspect.py](rpa/desktop_inspect.py) för att hitta selectors. Syns i MCP/assist/UI via schemat. Se README "Desktop-automation". --- - **~~Kör-parametrar / indata-variabler + värde-set~~ – klart.** Flödet kan deklarera `inputs` (namn/etikett/default/options/beskrivning) och spara `input_sets` (presets). `RunDialog`/`InputsEditor`-komponenter; ⚙-menyn har "Kör-parametrar / indata"; "Kör flöde" öppnar dialogen automatiskt om flödet har inputs/set. `flow_engine.run_flow(..., initial_vars=...)` seedar variabellagret. Stöds av MCP (`run_flow(input_set=...)`) och exporterade script (`--set`/`--var`). ## Möjliga uppföljningar - **~~`skip_browser`~~ – klar.** Flöden utan webbläsarsteg startar ingen webbläsare (auto-detektering via `flow_engine._flow_needs_browser`, eller tvingat via inställningen `skip_browser`). `wait` använder nu `time.sleep` i stället för `page.wait_for_timeout`. - **~~Bild-verktyg för desktop~~ – klart.** `rpa/desktop_capture.py` (tkinter- overlay + PIL ImageGrab) + 📷 Fånga-knapp i `desktop_*_image`-stegen (endpoints `/api/desktop-images*`, `ImageField`-komponenten). - **~~UI: ⚙-meny, fönster-inspektör, palett med drag-and-drop, block-bibliotek~~ – klart.** Headern bantad; `Menu`/`Palette`/`InspectDialog`-komponenter; `rpa/blocks.py` (+ `blocks/`-exempel, `/api/blocks*`, MCP `list_blocks`/ `get_block`); `rpa/desktop_inspect.py` refaktorerad till `list_windows()`/ `inspect_window()` (+ `/api/desktop/windows|inspect`); dra steg till canvasen eller in i loop/if-kropp (`stepops.appendToContainer`). - **~~Startkontroll i run_webui.py~~ – klar.** Vägrar starta om porten redan används (visar PID), `--force` dödar den gamla instansen och tar över, `--port N`. - **Äkta grafmotor / fri kabeldragning i UI:t** – sömmen finns i `webui/frontend/src/lib/graph.ts` (se kommentaren där). - **Fler desktop-steg vid behov** – t.ex. `desktop_drag`, `desktop_menu_select`, OCR-läsning. Lägg i `rpa/schema.py` + `flow_engine._execute_desktop_step`. - **Ta AI-funktionerna i bruk** – ANTHROPIC_API_KEY är inte satt; assist + MCP-servern är obeprövade mot en riktig modell. - **CI** – kör `pytest` + `vitest` + `npm run build` vid push. Ursprungliga TODO-punkter 2 (kör custom python mellan steg) och 3 (headless) är redan lösta av `run_script`-steget respektive `headless`-inställningen.