Download Game! Currently 76 players. Last logged in:FloppyXaarovBullwinSerke

Blitzer's Blog >> 72572

Back to blogs index
Posted: 19 Sep 2026 08:05 [ permalink ]
TC$mC$ on arkkitehtuurillisesti erittC$in tyylikC$s ja jC$reC$ idea.
YhdistC$mC$llC$ visuaalisen kontekstin (bitmap), semanttisen tiedon (AT-SPI)
ja raa'at koordinaatit (RFB), saat kerC$ttyC$ automaatiotasi varten
"jumalmoodi"-datasettiC$, joka mahdollistaa todella C$lykkC$C$n
tietokonenC$kC6C6n tai LLM:C$C$n (VLM) perustuvan agentin opettamisen.
TC$ssC$ on kuitenkin yksi tekninen reunaehto: VNC-protokolla (RFB) on tC$ysin
sokea kC$yttC6jC$rjestelmC$n sisC$isille asioille. Se nC$kee vain pikseleitC$
ja siirtC$C$ koordinaatteja. Se ei tiedC$ mitC$C$n ikkunoista, DOMista tai
AT-SPI:stC$.
TC$mC$n ratkaisemiseksi sinun pitC$C$ rakentaa hybridiarkkitehtuuri, jossa
VNC-proxy toimii "liipaisimena", joka komentaa X11-sessiossa pyC6rivC$C$
tausta-agenttia hakemaan metatiedot lennosta.
Hybridiarkkitehtuurin rakenne
Rakennat jC$rjestelmC$n kahdesta komponentista:
 * VNC Interceptor (Proxy): Istuu VNC-asiakkaan ja VNC-palvelimen vC$lissC$.
Sen ainoa tehtC$vC$ on parsia RFB-liikennettC$, napata PointerEvent (Message
Type 5) ja tarkistaa, onko hiiren nappi painettu alas. Kun klikkaus havaitaan,
se lC$hettC$C$ koordinaatit (X, Y) paikalliselle agentille.
 * Context Agent (X11-taustaprosessi): Debianin XFCE-sessiossa (samassa, jota
VNC ohjaa) pyC6rivC$ kevyt Python-palvelin (esim. FastAPI tai puhdas socket).
Se vastaanottaa X- ja Y-koordinaatit proxylta ja tekee vC$littC6mC$sti kaksi
asiaa:
   * Visuaalinen sieppaus: Ottaa nopean ruutukaappauksen (esim.
mss-kirjastolla) ja leikkaa siitC$ vaikka 100x100 pikselin alueen annettujen
koordinaattien ympC$riltC$.
   * Semanttinen sieppaus: Kysyy AT-SPI-rajapinnalta: "MikC$ kC$yttC6liittymC$e
lementti sijaitsee koordinaateissa X, Y?"
Miten Context Agent kaivaa tiedot X/Y-koordinaateista?
TC$mC$ on jC$rjestelmC$si "taikuus". AT-SPI mahdollistaa suoran kyselyn ruudun
koordinaattien perusteella. Pythonilla se tapahtuu nC$in:
import pyatspi

def get_atspi_context(x, y):
    desktop = pyatspi.Registry.getDesktop(0)
    
    # Etsii elementin z-indeksin perusteella ylimmC$stC$ ikkunasta annettujen
koordinaattien kohdalta
    element = desktop.getAccessibleAtPoint(x, y, pyatspi.DESKTOP_COORDS)
    
    if element:
        return {
            "name": element.name,              # Esim. "Tallenna" tai
"Sovellukset"
            "role": element.getRoleName(),     # Esim. "push button" tai "menu
item"
            "description": element.description,
            "states": [pyatspi.stateToString(s) for s in element.getState().get
States()]
        }
    return None

Kuvakaappaus koordinaattien ympC$riltC$ onnistuu sekunnin murto-osassa
mss-kirjastolla, joka on moninkertaisesti nopeampi kuin perinteinen Pillow tai
Scrot, koska se lukee suoraan X11:n muistia.
Automaation seuranta (Proxy vs. Agentti)
Mainitsit, ettC$ VNC-proxyllC$ voitaisiin seurata myC6s itse automaatiota.
TC$mC$ on VNC-proxyn suurin etu:
 * Kun opetat bottia, proxy kuuntelee sinun VNC-asiakkaasi klikkauksia ja
kC$skee agenttia tallentamaan datan.
 * Kun automaatio ajaa itseC$C$n, voit kytkeytyC$ samaan proxyyn
VNC-asiakkaalla ja katsoa vierestC$, mitC$ botti tekee, puuttumatta sen
toimintaan. VNC-proxy voi jopa piirtC$C$ RFB-protokollan FramebufferUpdate
-viesteillC$ ruudulle pienen visuaalisen "tC$htC$imen" siihen kohtaan, minne
automaatio on aikeissa klikata seuraavaksi.
Datan rakenne opetusmallille
Kun VNC-proxy laukaisee Context Agentin, agentti voi puskea levylle JSON-lokin
(tai suoraan tietokantaan), joka nC$yttC$C$ tC$ltC$  tC$ydellinen syC6te
koneoppimismallille:
{
  "timestamp": 1695100000.123,
  "action": "click_left",
  "coordinates": {"x": 845, "y": 210},
  "visual_context": "base64_encoded_100x100_crop.png",
  "atspi_context": {
    "name": "Firefox",
    "role": "frame",
    "target_element": "New Tab",
    "target_role": "push button"
  }
}