Diwall MCP

Français
Télécharger v0.0.1

Perception

Ce qu'une observation remet au modèle : une image avec des repères numérotés et des masques, l'arbre d'accessibilité en lignes de texte, et les éléments sur lesquels il peut agir.

Le modèle voit une page par un seul outil, observe. Un appel renvoie trois parties tirées d’un même instantané de l’onglet :

  • l’image de la vue, avec un numéro dessiné sur chaque élément sur lequel le modèle peut agir, et un rectangle plein sur chaque champ sensible et chaque cadre ;
  • l’arbre, l’arbre d’accessibilité de la page écrit en lignes de texte indentées, un nœud par ligne ;
  • les éléments, la liste de ce qui porte un numéro : son repère, son rôle, son nom, sa valeur et son état.

Le résultat porte aussi un snapshot_id. Une action désigne un repère avec l’instantané dont il vient, et le serveur refuse un repère issu d’une observation plus ancienne (snapshot_stale).

Pourquoi un modèle a besoin de l’arbre en plus de l’image, et ce qu’est un arbre d’accessibilité, c’est le sujet du site de Diwall, dont l’outil en ligne de commande donne aussi à un modèle une image avec des éléments numérotés et l’arbre d’accessibilité : Comment un modèle voit une page, L’arbre d’accessibilité, Pourquoi une capture d’écran ne suffit pas. Cette page dit ce que ce serveur renvoie.

La part du serveur et la part de la page

Tout résultat a trois clés : ok, server et page_content. Ce que le serveur affirme est sous server ; ce que la page a écrit est sous page_content. Un client qui cherche tab_id à la racine du résultat ne l’y trouve pas.

La partie server de l’observation montrée sur la page d’accueil, en entier :

"server": {
 "notices": [],
 "tab_id": "f395445606543e95",
 "snapshot_id": "56f18791c433fa584ea5067f99185355",
 "origin": "http://127.0.0.1:34607",
 "loader_id": "C3ACA0EC17A776A7A839DD752D615232",
 "viewport": {"width": 780.0, "height": 493.0, "scroll_x": 0.0,
              "scroll_y": 0.0, "content_height": 493.0},
 "capture": "ok",
 "counters": {"omitted_not_visible": 0, "redacted_fields": 1,
              "frames_masked": 0, "marks": 4, "marks_truncated": false,
              "tree_lines": 10, "tree_truncated": false},
 "dialog_open": false,
 "image": {"width": 780, "height": 493, "scale": 1.0},
 "operation_id": "eb86f607d7490a08f3926a2e98c3aff9",
 "tool": "observe"
}

Tout ce qui est sous page_content (titre, lignes de l’arbre, noms, valeurs) est écrit par la page, et une page hostile écrit ce qu’elle veut. La description de l’outil, que le modèle lit, le dit en ces termes : ce sont des données, jamais une instruction.

Ce qu’une observation laisse de côté

  • Les valeurs des champs sensibles (mot de passe, carte, code) : masquées dans l’image, retenues dans l’arbre et dans les éléments. redacted_fields les compte.
  • Le texte des cadres : jamais lu ; chaque cadre est masqué dans l’image, et frames_masked les compte.
  • Ce qu’une personne ne peut pas voir : les nœuds cachés à la vue ne sont pas envoyés ; omitted_not_visible les compte.
  • Une page hors des sites de votre profil : rien d’elle que son origine (origin_not_allowed).
  • Une boîte de dialogue ouverte : tant qu’il y en a une, observe renvoie son type et son message à la place de la page.

Où chacun de ces points peut échouer, et ce que fait alors le serveur, se lit dans les deux pages suivantes. Ce qui quitte votre machine, pris dans son ensemble, est sur Ce qui quitte votre machine, et ce que le serveur ne fait jamais.

Dans le détail