feat(competences): extract batch candidates
This commit is contained in:
58
data/primitives/click_anchor.yaml
Normal file
58
data/primitives/click_anchor.yaml
Normal 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"
|
||||
45
data/primitives/key_combo.yaml
Normal file
45
data/primitives/key_combo.yaml
Normal 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"
|
||||
51
data/primitives/scroll_view.yaml
Normal file
51
data/primitives/scroll_view.yaml
Normal 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"
|
||||
48
data/primitives/text_input_focused.yaml
Normal file
48
data/primitives/text_input_focused.yaml
Normal 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"
|
||||
54
data/primitives/wait_for_state.yaml
Normal file
54
data/primitives/wait_for_state.yaml
Normal 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"
|
||||
Reference in New Issue
Block a user