Skip to content

Vue : voir l'écran ​

Vue est l'organe de perception de l'écran. Il capture, convertit des coordonnées, localise un texte visible et mémorise la topologie de vos écrans. Tous ses outils sont en lecture seule et ne sont pas soumis au plafond des Mains. Vue ne lit pas l'écran à votre place : il renvoie des images et des positions, c'est au modèle de les interpréter.

OutilRôleNiveau
vue_displaysLister les écrans actifslecture
vue_snapshotCapturer un écran (image PNG et contrat de coordonnées)lecture
vue_resolveConvertir pixel d'image et point global, sans capturerlecture
vue_findLocaliser un libellé visible par OCRlecture
vue_calibrateEnregistrer la topologie d'écrans sous un nomlecture
vue_profileLire le profil apparié à l'environnement actuellecture
vue_profile_briefBrief d'amorçage pour un sous-agentlecture
vue_pilot_briefPaquet de délégation par tâchelecture

Erreurs communes ​

Une erreur de Vue ne plante jamais le serveur : elle revient sous la forme {"error": "<code>", "message": "<détail>"}.

CodeSignification
permission_deniedUne autorisation système manque (Enregistrement de l'écran)
invalid_argumentsUn argument est invalide
index_out_of_rangeL'indice display n'existe pas
capture_failedLa capture a échoué
exclusions_unreadableLe fichier d'exclusions est cassé ; le message nomme le fichier et la ligne, jamais la valeur fautive

En cas de doute sur une permission, appelez d'abord daimon_doctor.

vue_displays ​

Liste tous les écrans actifs. C'est le point de départ : l'indice index renvoyé est la valeur à passer comme display aux autres outils.

Paramètres : aucun.

Retour : une liste d'objets {index, width, height, is_main, origin: {x, y}, dpi}.

Exemple d'appel : vue_displays sans argument.

Pièges : l'origine d'un écran secondaire peut être négative dans le bureau global.

vue_snapshot ​

Capture un écran et le renvoie sous forme d'image, après censure et expurgation.

ParamètreTypeDéfautObligatoireRôle
displayentier0nonIndice d'écran, tel que listé par vue_displays
max_widthentier720nonPlafond de réduction de l'image servie, en pixels d'image ; 0 le désactive
regionobjet {x, y, width, height}écran entiernonSous-région à capturer, en points, locale à l'écran, bornée à l'écran

Niveau : lecture.

Exemple d'appel

json
{ "display": 0, "max_width": 1440, "region": { "x": 0, "y": 0, "width": 800, "height": 600 } }

Retour : deux blocs de contenu, dans cet ordre : (1) un bloc texte contenant le contrat JSON coord_space, (2) un bloc image PNG en base64 (image/png). Tout le coord_space est exprimé en points, l'unité dans laquelle main_click agit ; image_scale est le nombre de pixels d'image servis par point. coord_space.region rapporte ce qui a réellement été capturé, et coord_space.secret_rects_available dit si le masquage par champ secret a pu s'exécuter.

Censure. Les fenêtres des applications que vous protégez (apps, secret_apps des exclusions) ne sont jamais refusées : elles sont censurées, remplacées par un aplat opaque #3A2A5C, comme les zones déclarées et les champs secrets ; le reste de l'écran est servi. Quand une règle existe, le bloc texte porte aussi :

ChampValeursSens
censoredbooléenUne censure a été appliquée
censored_reasonnone, zones, unstable, unknownRaison
censored_rectsliste de {x, y, width, height}Zones censurées, en points globaux, rognées à la capture

Erreurs : voir Erreurs communes.

Pièges

  • Une zone #3A2A5C est du contenu masqué, pas un écran vide.
  • Avec unstable ou unknown, les fenêtres protégées n'ont pas pu être placées, même après une nouvelle capture automatique : toute l'image est l'aplat. Réessayez.
  • Sous macOS, la barre des menus est aussi censurée tant qu'une application protégée est au premier plan.
  • La valeur par défaut de max_width est 720 : demandez davantage pour du détail fin.
  • Sous Windows, un point est un pixel physique de l'écran virtuel et backing_scale vaut toujours 1.0.
  • Daimon n'interprète pas l'image : regardez-la vous-même.

vue_resolve ​

Convertit un pixel d'image (vu dans un vue_snapshot de display) en point global, et inversement, sans capturer. Utilisez-le plutôt que de calculer vous-même décalage et échelle : un couple résolu est directement cliquable.

ParamètreTypeDéfautObligatoireRôle
displayentier0nonIndice d'écran
max_widthentier720nonLe même plafond que le snapshot d'origine ; 0 le désactive
regionobjet {x, y, width, height}écran entiernonLa même région que le snapshot, en points, locale à l'écran
image_x, image_ynombreaucunnonPixel d'image à convertir (les deux ensemble)
global_x, global_ynombreaucunnonPoint global à convertir en pixel d'image (les deux ensemble)
sourcechaîne"probe"non"probe" lit la géométrie vivante des écrans ; "profile" lit le profil de calibration apparié, avec repli sur probe si aucun ne correspond

Niveau : lecture.

Exemple d'appel

json
{ "display": 0, "max_width": 720, "image_x": 360, "image_y": 200 }

Retour : {global_x, global_y} si vous passez image_x/image_y, {image_x, image_y} si vous passez global_x/global_y.

Erreurs : voir Erreurs communes.

Pièges : max_width et region doivent être identiques à ceux du snapshot, sinon la conversion est fausse.

vue_find ​

Repli de Vue : localise un libellé visible par OCR sur l'appareil et renvoie des coordonnées globales cliquables, en points. Utile quand touche_tree et touche_probe restent muets (applications Win32 anciennes, dessinées sur mesure, Electron) et qu'il n'y a donc pas d'arbre d'accessibilité à cliquer.

ParamètreTypeDéfautObligatoireRôle
textchaîneaucunouiTexte à localiser à l'écran
displayentier0nonIndice d'écran
max_widthentier720nonPlafond de réduction de la capture interne ; 0 le désactive
regionobjet {x, y, width, height}écran entiernonSous-région de recherche, en points, locale à l'écran
min_scorenombre0.6nonScore minimal, dans [0, 1], pour compter un succès
sourcechaîne"probe"non"probe" ou "profile", comme pour vue_resolve

Niveau : lecture.

Exemple d'appel

json
{ "text": "Enregistrer", "display": 0, "min_score": 0.6 }

Retour : {found, text, score, image_x, image_y, global_x, global_y, candidates}. En cas d'échec, candidates contient les 5 libellés visibles les plus proches. Passez global_x et global_y tels quels à main_click (espace global par défaut).

Erreurs : voir Erreurs communes. Sous Windows, une langue OCR manquante est signalée comme une erreur, jamais comme un échec vide.

Pièges

  • Le moteur est celui du système : Apple Vision sur une build macOS compilée avec --features apple-vision, Windows.Media.Ocr sous Windows. Toute autre build embarque le moteur factice FakeOcr : aucune vraie reconnaissance, toujours un échec.
  • L'OCR lit l'image censurée : aucun mot touchant une zone censurée n'est renvoyé. Avec une règle d'exclusion, la réponse ajoute censored et censored_reason.
  • C'est un localisateur, pas un interprète : il renvoie une position.

vue_calibrate ​

Fige la topologie d'écrans actuelle sous un nom (écriture idempotente : même nom, mise à jour) et renvoie le profil enregistré. Un profil permet à vue_resolve et vue_find d'utiliser source="profile".

ParamètreTypeDéfautObligatoireRôle
namechaîneaucunouiNom du profil

Niveau : lecture (l'outil enregistre un profil de calibration, il n'agit pas sur l'écran).

Exemple d'appel : { "name": "bureau-deux-ecrans" }

Retour : le profil enregistré.

vue_profile ​

Indique le profil de calibration apparié à la topologie d'écrans actuelle, ou signale un environnement inconnu avec les noms de profils connus.

Paramètres : aucun. Niveau : lecture.

vue_profile_brief ​

Produit le brief d'amorçage d'un sous-agent délégué : porte d'appariement du profil et indices d'écrans adressables.

ParamètreTypeDéfautObligatoireRôle
expectedchaîneaucunnonNom de profil à vérifier

Niveau : lecture. Exemple d'appel : { "expected": "bureau-deux-ecrans" }

vue_pilot_brief ​

Produit le paquet de délégation d'une tâche : une porte go/no-go et un prompt prêt à coller pour un sous-agent, pour l'objectif donné. Aucun appel d'IA n'est fait.

ParamètreTypeDéfautObligatoireRôle
objectivechaîneaucunouiObjectif de la tâche déléguée
expectedchaîneaucunnonNom de profil attendu

Niveau : lecture.

Exemple d'appel

json
{ "objective": "Relever le numéro de version affiché dans la fenêtre À propos", "expected": "bureau-deux-ecrans" }

Pièges : si la porte n'est pas prête, calibrez d'abord (vue_calibrate) plutôt que de piloter à l'aveugle.