feat(competences): extract batch candidates

This commit is contained in:
Dom
2026-05-29 11:25:00 +02:00
parent 4ba426c205
commit e8a0fb0e42
60 changed files with 18176 additions and 0 deletions

View File

@@ -0,0 +1,58 @@
schema_version: 1
id: click_anchor
kind: primitive
marker_or_action: action
version: 1
intent:
fr: cliquer sur un element UI identifie par ancre
executor_kind: click
parameters_schema:
anchor_ref:
type: dict_or_string
required: true
description: reference vers l'element a cliquer par id d'ancre ou criteres de resolution, jamais par coordonnees ecran
button:
type: str
required: false
default: left
description: bouton souris a utiliser
constraints:
enum: [left, right, middle]
click_count:
type: int
required: false
default: 1
description: nombre de clics successifs sur la meme ancre
constraints:
min: 1
max: 2
relative_offset:
type: dict
required: false
description: offset relatif dans la bbox resolue, sous forme x_pct/y_pct ou dx/dy, jamais en pixels absolus
context_guard:
type: dict
required: false
description: precondition d'ecran avant clic
expected_effect:
type: str
required: false
description: effet observable attendu par la competence appelante
failure_message_template:
intention: cliquer sur la cible nommee
attendu: la cible nommee doit etre visible et cliquable au moment de l'action
vu: "{observed_human_state}"
demande: me montrer la cible a cliquer, ou me donner son libelle visible
notes:
- "La primitive ne resout pas l'ancre. La resolution est faite par la cascade Grounding au runtime."
- "anchor_ref string = reference stable d'ancre; anchor_ref dict = description multi-critere."
- "relative_offset est rare. Par defaut, clic au centre de la bbox resolue."
- "click_count=2 represente un double-clic. Triple-clic non supporte."
- "Aucune coordonnee ecran absolue dans le YAML. Les positions sources restent uniquement dans les traces."
created_at: "2026-05-28T15:35:00+02:00"

View File

@@ -0,0 +1,45 @@
schema_version: 1
id: key_combo
kind: primitive
marker_or_action: action
version: 1
intent:
fr: enfoncer un raccourci clavier
executor_kind: key_combo
parameters_schema:
keys:
type: list[str]
required_unless: [gesture_id]
description: liste de touches normalisees
constraints:
min_length: 1
gesture_id:
type: str
required_unless: [keys]
description: reference vers un Gesture du catalogue
constraints:
regex: "^[a-z][a-z0-9_]*$"
context_guard:
type: dict
required: false
description: precondition d'ecran avant envoi
expected_effect:
type: str
required: false
description: effet observable attendu par la competence appelante
failure_message_template:
intention: enfoncer le raccourci clavier attendu
attendu: la fenetre active doit reagir au raccourci
vu: "{observed_human_state}"
demande: confirmer que la fenetre attendue est bien au premier plan, ou indiquer un autre raccourci
notes:
- "La primitive ne controle pas le focus. La competence appelante doit le garantir via precondition."
- "Utiliser keys ou gesture_id, pas les deux."
- "Le raccourci s'envoie tel quel. Pas de retry ni fallback dans la primitive."
created_at: "2026-05-28T10:25:00+02:00"

View File

@@ -0,0 +1,51 @@
schema_version: 1
id: scroll_view
kind: primitive
marker_or_action: action
version: 1
intent:
fr: faire defiler la zone active ou un container cible
executor_kind: scroll
parameters_schema:
direction:
type: str
required: true
description: sens du defilement
constraints:
enum: [up, down, left, right]
amount:
type: int
required: false
default: 3
description: quantite de defilement en unite
constraints:
min: 1
unit:
type: str
required: false
default: lines
description: unite de mesure du defilement
constraints:
enum: [lines, pixels, pages, percent]
container_hint:
type: str
required: false
description: ancre ou description du container a scroller; sinon fenetre active
failure_message_template:
intention: faire defiler la zone active dans la direction attendue
attendu: le contenu visible doit changer apres le defilement
vu: "{observed_human_state}"
demande: confirmer que la fenetre attendue est defilable, ou m'indiquer le container correct
notes:
- "Aucun success_marker offline fiable n'est porte par la primitive."
- "La competence appelante doit fournir le contexte et les marqueurs de succes."
- "direction est volontairement limite a up/down/left/right pour eviter les scrolls composites."
- "amount=3 lines correspond au defilement molette Windows typique."
- "container_hint reference une ancre ou description, jamais une coordonnee durable."
created_at: "2026-05-28T11:30:00+02:00"

View File

@@ -0,0 +1,48 @@
schema_version: 1
id: text_input_focused
kind: primitive
marker_or_action: action
version: 1
intent:
fr: saisir du texte dans le champ deja focus
executor_kind: text_input
parameters_schema:
text:
type: str
required: true
description: texte a saisir
constraints:
min_length: 1
concat_rule:
type: str
required: false
default: concat_in_order
description: regle de reconstruction du texte depuis les fragments de trace
constraints:
enum: [concat_in_order, last_fragment_only]
clear_before:
type: bool
required: false
default: false
description: vider le champ avant saisie
submit_after:
type: bool
required: false
default: false
description: appuyer sur entree apres saisie
failure_message_template:
intention: saisir le texte attendu dans le champ actif
attendu: le texte attendu doit apparaitre dans le champ focus
vu: "{observed_human_state}"
demande: confirmer qu'un champ de saisie est bien au focus, ou me montrer le bon champ
notes:
- "Necessite un focus prealable garanti par la competence appelante."
- "reconstructed_text reste cote competence pour validation offline contre la trace."
- "submit_after=true represente une composition text_input_focused puis key_combo([enter])."
created_at: "2026-05-28T10:25:00+02:00"

View File

@@ -0,0 +1,54 @@
schema_version: 1
id: wait_for_state
kind: primitive
marker_or_action: action
version: 1
intent:
fr: attendre qu'un etat d'ecran attendu soit atteint
executor_kind: wait_state
parameters_schema:
expected_state:
type: dict
required: true
description: criteres d'etat attendu sous forme de mapping non vide; plusieurs cles representent un AND implicite
timeout_ms:
type: int
required: false
default: 5000
description: timeout maximal d'attente en millisecondes
constraints:
min: 100
max: 60000
poll_interval_ms:
type: int
required: false
default: 250
description: intervalle de polling en millisecondes
constraints:
min: 50
max: 5000
evidence_required:
type: str
required: false
default: window_or_process
description: niveau de preuve requis pour considerer l'etat atteint
constraints:
enum: [window_or_process, uia, ocr, screenshot_diff]
failure_message_template:
intention: attendre que la fenetre ou le contenu cible apparaisse
attendu: la fenetre ou le contenu cible doit etre visible dans le delai
vu: "{observed_human_state}"
demande: me montrer la fenetre ou le contenu cible, ou m'indiquer un autre marqueur visible
notes:
- "La primitive ne fait pas l'action qui declenche l'etat. Elle attend qu'un etat survienne apres une action precedente."
- "expected_state accepte notamment window_title_in, window_title_matches, window_title_contains, process_active, uia_anchor_present, ocr_contains et any_of."
- "Plusieurs cles representent un AND implicite. any_of permet un OR explicite entre sous-mappings."
- "evidence_required=window_or_process suffit pour la majorite des cas. uia, ocr et screenshot_diff sont des renforcements supervised."
- "Aucune coordonnee ecran absolue dans expected_state."
created_at: "2026-05-28T16:35:00+02:00"