{"ok":true,"site":{"host":"tablee.lulab.fr","url":"https://tablee.lulab.fr/morpion","type":"live","desc":"","tools":[{"name":"tablee_tic_tac_toe_get_state","kind":"answer","impl":"imperative","description":"Lit uniquement l’état public et vérifiable du jeu Morpion ouvert.","title":"État de Morpion","annotations":{"readOnlyHint":true},"inputSchema":{"type":"object","properties":{},"additionalProperties":false},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute","page":"/morpion","pages":["/morpion"]},{"name":"tablee_tic_tac_toe_get_rules","kind":"answer","impl":"imperative","description":"Lit les règles courtes de Morpion sans modifier la partie.","title":"Règles de Morpion","annotations":{"readOnlyHint":true},"inputSchema":{"type":"object","properties":{},"additionalProperties":false},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute","page":"/morpion","pages":["/morpion"]},{"name":"tablee_tic_tac_toe_list_legal_moves","kind":"answer","impl":"imperative","description":"Liste les actions que le joueur de cette page peut actuellement effectuer.","title":"Actions possibles à Morpion","annotations":{"readOnlyHint":true},"inputSchema":{"type":"object","properties":{},"additionalProperties":false},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute","page":"/morpion","pages":["/morpion"]},{"name":"tablee_tic_tac_toe_wait_for_position_change","kind":"act","impl":"imperative","description":"Attend sans modifier la partie que son positionId change. À utiliser dans un tour Codex actif pour suivre une partie sans redemander au joueur de signaler chaque coup. Une expiration est normale : relancez alors cet outil avec le même positionId.","title":"Attendre le prochain coup à Morpion","annotations":{"readOnlyHint":true},"inputSchema":{"type":"object","properties":{"expectedPositionId":{"type":"string","minLength":1,"maxLength":160,"description":"positionId de la dernière position lue."},"timeoutSeconds":{"type":"integer","minimum":1,"maximum":50,"description":"Durée maximale de cette attente ; 45 secondes par défaut."}},"required":["expectedPositionId"],"additionalProperties":false},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute","page":"/morpion","pages":["/morpion"]},{"name":"tablee_tic_tac_toe_start_game","kind":"act","impl":"imperative","description":"Démarre une partie locale. Toute partie active exige confirmReplace=true et le dernier positionId.","title":"Démarrer Morpion","inputSchema":{"type":"object","properties":{"mode":{"type":"string","enum":["solo","duo"],"description":""},"difficulty":{"type":"string","enum":["easy","med","hard"],"description":"Niveau de difficulté."},"confirmReplace":{"type":"boolean"},"expectedPositionId":{"type":"string","minLength":1,"maxLength":160,"description":"positionId retourné par la dernière lecture de l’état."}},"required":["mode","expectedPositionId"],"additionalProperties":false},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute","page":"/morpion","pages":["/morpion"]},{"name":"tablee_tic_tac_toe_play_move","kind":"act","impl":"imperative","description":"Pose le symbole courant sur une case vide.","title":"Jouer une case","inputSchema":{"type":"object","properties":{"row":{"type":"integer","minimum":1,"maximum":3},"column":{"type":"integer","minimum":1,"maximum":3},"expectedPositionId":{"type":"string","minLength":1,"maxLength":160,"description":"positionId retourné par la dernière lecture de l’état."}},"required":["row","column","expectedPositionId"],"additionalProperties":false},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute","page":"/morpion","pages":["/morpion"]},{"name":"tablee_seven_families_get_state","kind":"answer","impl":"imperative","description":"Lit uniquement l’état public et vérifiable du jeu 7 familles ouvert.","title":"État de 7 familles","annotations":{"readOnlyHint":true},"inputSchema":{"type":"object","properties":{},"additionalProperties":false},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute","page":"/7-familles","pages":["/7-familles"]},{"name":"tablee_seven_families_get_rules","kind":"answer","impl":"imperative","description":"Lit les règles courtes de 7 familles sans modifier la partie.","title":"Règles de 7 familles","annotations":{"readOnlyHint":true},"inputSchema":{"type":"object","properties":{},"additionalProperties":false},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute","page":"/7-familles","pages":["/7-familles"]},{"name":"tablee_seven_families_list_legal_actions","kind":"answer","impl":"imperative","description":"Liste les actions que le joueur de cette page peut actuellement effectuer.","title":"Actions possibles à 7 familles","annotations":{"readOnlyHint":true},"inputSchema":{"type":"object","properties":{},"additionalProperties":false},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute","page":"/7-familles","pages":["/7-familles"]},{"name":"tablee_seven_families_wait_for_position_change","kind":"act","impl":"imperative","description":"Attend sans modifier la partie que son positionId change. À utiliser dans un tour Codex actif pour suivre une partie sans redemander au joueur de signaler chaque coup. Une expiration est normale : relancez alors cet outil avec le même positionId.","title":"Attendre le prochain coup à 7 familles","annotations":{"readOnlyHint":true},"inputSchema":{"type":"object","properties":{"expectedPositionId":{"type":"string","minLength":1,"maxLength":160,"description":"positionId de la dernière position lue."},"timeoutSeconds":{"type":"integer","minimum":1,"maximum":50,"description":"Durée maximale de cette attente ; 45 secondes par défaut."}},"required":["expectedPositionId"],"additionalProperties":false},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute","page":"/7-familles","pages":["/7-familles"]},{"name":"tablee_seven_families_start_game","kind":"act","impl":"imperative","description":"Démarre une partie locale. Toute partie active exige confirmReplace=true et le dernier positionId.","title":"Démarrer 7 familles","inputSchema":{"type":"object","properties":{"playerCount":{"type":"integer","minimum":2,"maximum":4},"confirmReplace":{"type":"boolean"},"expectedPositionId":{"type":"string","minLength":1,"maxLength":160,"description":"positionId retourné par la dernière lecture de l’état."}},"required":["playerCount","expectedPositionId"],"additionalProperties":false},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute","page":"/7-familles","pages":["/7-familles"]},{"name":"tablee_seven_families_ready_turn","kind":"act","impl":"imperative","description":"Confirme le passage de l’appareil au joueur courant.","title":"Afficher la main locale","inputSchema":{"type":"object","properties":{"expectedPositionId":{"type":"string","minLength":1,"maxLength":160,"description":"positionId retourné par la dernière lecture de l’état."}},"required":["expectedPositionId"],"additionalProperties":false},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute","page":"/7-familles","pages":["/7-familles"]},{"name":"tablee_seven_families_ask_card","kind":"act","impl":"imperative","description":"Effectue une demande figurant exactement dans les demandes légales du joueur courant.","title":"Demander une carte","inputSchema":{"type":"object","properties":{"targetSeat":{"type":"integer","minimum":0,"maximum":3},"cardId":{"type":"string","minLength":3,"maxLength":80},"expectedPositionId":{"type":"string","minLength":1,"maxLength":160,"description":"positionId retourné par la dernière lecture de l’état."}},"required":["targetSeat","cardId","expectedPositionId"],"additionalProperties":false},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute","page":"/7-familles","pages":["/7-familles"]},{"name":"tablee_basket_flash_get_state","kind":"answer","impl":"imperative","description":"Lit uniquement l’état public et vérifiable du jeu Panier Flash ouvert.","title":"État de Panier Flash","annotations":{"readOnlyHint":true},"inputSchema":{"type":"object","properties":{},"additionalProperties":false},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute","page":"/panier-flash","pages":["/panier-flash"]},{"name":"tablee_basket_flash_get_rules","kind":"answer","impl":"imperative","description":"Lit les règles courtes de Panier Flash sans modifier la partie.","title":"Règles de Panier Flash","annotations":{"readOnlyHint":true},"inputSchema":{"type":"object","properties":{},"additionalProperties":false},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute","page":"/panier-flash","pages":["/panier-flash"]},{"name":"tablee_basket_flash_list_legal_actions","kind":"answer","impl":"imperative","description":"Liste les actions que le joueur de cette page peut actuellement effectuer.","title":"Actions possibles à Panier Flash","annotations":{"readOnlyHint":true},"inputSchema":{"type":"object","properties":{},"additionalProperties":false},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute","page":"/panier-flash","pages":["/panier-flash"]},{"name":"tablee_basket_flash_wait_for_position_change","kind":"act","impl":"imperative","description":"Attend sans modifier la partie que son positionId change. À utiliser dans un tour Codex actif pour suivre une partie sans redemander au joueur de signaler chaque coup. Une expiration est normale : relancez alors cet outil avec le même positionId.","title":"Attendre le prochain coup à Panier Flash","annotations":{"readOnlyHint":true},"inputSchema":{"type":"object","properties":{"expectedPositionId":{"type":"string","minLength":1,"maxLength":160,"description":"positionId de la dernière position lue."},"timeoutSeconds":{"type":"integer","minimum":1,"maximum":50,"description":"Durée maximale de cette attente ; 45 secondes par défaut."}},"required":["expectedPositionId"],"additionalProperties":false},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute","page":"/panier-flash","pages":["/panier-flash"]},{"name":"tablee_basket_flash_start_game","kind":"act","impl":"imperative","description":"Démarre une partie locale. Toute partie active exige confirmReplace=true et le dernier positionId.","title":"Démarrer Panier Flash","inputSchema":{"type":"object","properties":{"mode":{"type":"string","enum":["challenge","practice"],"description":""},"confirmReplace":{"type":"boolean"},"expectedPositionId":{"type":"string","minLength":1,"maxLength":160,"description":"positionId retourné par la dernière lecture de l’état."}},"required":["mode","expectedPositionId"],"additionalProperties":false},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute","page":"/panier-flash","pages":["/panier-flash"]},{"name":"tablee_basket_flash_shoot","kind":"act","impl":"imperative","description":"Lance un tir borné à partir d’un geste vers le haut ; aucune visée automatique.","title":"Tirer au panier","inputSchema":{"type":"object","properties":{"dragX":{"type":"number","minimum":-360,"maximum":360},"dragY":{"type":"number","minimum":-540,"maximum":-28},"expectedPositionId":{"type":"string","minLength":1,"maxLength":160,"description":"positionId retourné par la dernière lecture de l’état."}},"required":["dragX","dragY","expectedPositionId"],"additionalProperties":false},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute","page":"/panier-flash","pages":["/panier-flash"]},{"name":"tablee_chess_get_state","kind":"answer","impl":"imperative","description":"Lit uniquement l’état public et vérifiable du jeu Échecs ouvert.","title":"État de Échecs","annotations":{"readOnlyHint":true},"inputSchema":{"type":"object","properties":{},"additionalProperties":false},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute","page":"/echecs","pages":["/echecs"]},{"name":"tablee_chess_get_rules","kind":"answer","impl":"imperative","description":"Lit les règles courtes de Échecs sans modifier la partie.","title":"Règles de Échecs","annotations":{"readOnlyHint":true},"inputSchema":{"type":"object","properties":{},"additionalProperties":false},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute","page":"/echecs","pages":["/echecs"]},{"name":"tablee_chess_list_legal_moves","kind":"act","impl":"imperative","description":"Liste les actions que le joueur de cette page peut actuellement effectuer.","title":"Actions possibles à Échecs","annotations":{"readOnlyHint":true},"inputSchema":{"type":"object","properties":{},"additionalProperties":false},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute","page":"/echecs","pages":["/echecs"]},{"name":"tablee_chess_wait_for_position_change","kind":"act","impl":"imperative","description":"Attend sans modifier la partie que son positionId change. À utiliser dans un tour Codex actif pour suivre une partie sans redemander au joueur de signaler chaque coup. Une expiration est normale : relancez alors cet outil avec le même positionId.","title":"Attendre le prochain coup à Échecs","annotations":{"readOnlyHint":true},"inputSchema":{"type":"object","properties":{"expectedPositionId":{"type":"string","minLength":1,"maxLength":160,"description":"positionId de la dernière position lue."},"timeoutSeconds":{"type":"integer","minimum":1,"maximum":50,"description":"Durée maximale de cette attente ; 45 secondes par défaut."}},"required":["expectedPositionId"],"additionalProperties":false},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute","page":"/echecs","pages":["/echecs"]},{"name":"tablee_chess_start_game","kind":"act","impl":"imperative","description":"Démarre une partie locale. Toute partie active exige confirmReplace=true et le dernier positionId.","title":"Démarrer Échecs","inputSchema":{"type":"object","properties":{"mode":{"type":"string","enum":["solo","duo"],"description":""},"difficulty":{"type":"string","enum":["easy","med","hard"],"description":"Niveau de difficulté."},"confirmReplace":{"type":"boolean"},"expectedPositionId":{"type":"string","minLength":1,"maxLength":160,"description":"positionId retourné par la dernière lecture de l’état."}},"required":["mode","expectedPositionId"],"additionalProperties":false},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute","page":"/echecs","pages":["/echecs"]},{"name":"tablee_chess_play_move","kind":"act","impl":"imperative","description":"Retrouve puis joue un coup légal exact, promotion comprise.","title":"Jouer un coup d’échecs","inputSchema":{"type":"object","properties":{"from":{"type":"string","pattern":"^[a-h][1-8]$"},"to":{"type":"string","pattern":"^[a-h][1-8]$"},"promotion":{"type":"string","enum":["Q","R","B","N"],"description":""},"expectedPositionId":{"type":"string","minLength":1,"maxLength":160,"description":"positionId retourné par la dernière lecture de l’état."}},"required":["from","to","expectedPositionId"],"additionalProperties":false},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute","page":"/echecs","pages":["/echecs"]},{"name":"tablee_sudoku_get_state","kind":"answer","impl":"imperative","description":"Lit uniquement l’état public et vérifiable du jeu Sudoku ouvert.","title":"État de Sudoku","annotations":{"readOnlyHint":true},"inputSchema":{"type":"object","properties":{},"additionalProperties":false},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute","page":"/sudoku","pages":["/sudoku"]},{"name":"tablee_sudoku_get_rules","kind":"answer","impl":"imperative","description":"Lit les règles courtes de Sudoku sans modifier la partie.","title":"Règles de Sudoku","annotations":{"readOnlyHint":true},"inputSchema":{"type":"object","properties":{},"additionalProperties":false},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute","page":"/sudoku","pages":["/sudoku"]},{"name":"tablee_sudoku_list_legal_actions","kind":"answer","impl":"imperative","description":"Liste les actions que le joueur de cette page peut actuellement effectuer.","title":"Actions possibles à Sudoku","annotations":{"readOnlyHint":true},"inputSchema":{"type":"object","properties":{},"additionalProperties":false},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute","page":"/sudoku","pages":["/sudoku"]},{"name":"tablee_sudoku_wait_for_position_change","kind":"act","impl":"imperative","description":"Attend sans modifier la partie que son positionId change. À utiliser dans un tour Codex actif pour suivre une partie sans redemander au joueur de signaler chaque coup. Une expiration est normale : relancez alors cet outil avec le même positionId.","title":"Attendre le prochain coup à Sudoku","annotations":{"readOnlyHint":true},"inputSchema":{"type":"object","properties":{"expectedPositionId":{"type":"string","minLength":1,"maxLength":160,"description":"positionId de la dernière position lue."},"timeoutSeconds":{"type":"integer","minimum":1,"maximum":50,"description":"Durée maximale de cette attente ; 45 secondes par défaut."}},"required":["expectedPositionId"],"additionalProperties":false},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute","page":"/sudoku","pages":["/sudoku"]},{"name":"tablee_sudoku_start_game","kind":"act","impl":"imperative","description":"Démarre une partie locale. Toute partie active exige confirmReplace=true et le dernier positionId.","title":"Démarrer Sudoku","inputSchema":{"type":"object","properties":{"difficulty":{"type":"string","enum":["facile","moyen","difficile"],"description":"Niveau de difficulté."},"confirmReplace":{"type":"boolean"},"expectedPositionId":{"type":"string","minLength":1,"maxLength":160,"description":"positionId retourné par la dernière lecture de l’état."}},"required":["difficulty","expectedPositionId"],"additionalProperties":false},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute","page":"/sudoku","pages":["/sudoku"]},{"name":"tablee_sudoku_set_cell","kind":"act","impl":"imperative","description":"Fixe une valeur de 0 à 9 dans une case modifiable ; 0 efface.","title":"Écrire une case","inputSchema":{"type":"object","properties":{"row":{"type":"integer","minimum":1,"maximum":9},"column":{"type":"integer","minimum":1,"maximum":9},"value":{"type":"integer","minimum":0,"maximum":9},"expectedPositionId":{"type":"string","minLength":1,"maxLength":160,"description":"positionId retourné par la dernière lecture de l’état."}},"required":["row","column","value","expectedPositionId"],"additionalProperties":false},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute","page":"/sudoku","pages":["/sudoku"]},{"name":"tablee_sudoku_toggle_note","kind":"act","impl":"imperative","description":"Ajoute ou retire un chiffre au crayon dans une case vide.","title":"Modifier une note","inputSchema":{"type":"object","properties":{"row":{"type":"integer","minimum":1,"maximum":9},"column":{"type":"integer","minimum":1,"maximum":9},"value":{"type":"integer","minimum":1,"maximum":9},"expectedPositionId":{"type":"string","minLength":1,"maxLength":160,"description":"positionId retourné par la dernière lecture de l’état."}},"required":["row","column","value","expectedPositionId"],"additionalProperties":false},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute","page":"/sudoku","pages":["/sudoku"]},{"name":"tablee_sudoku_use_hint","kind":"act","impl":"imperative","description":"Révèle une valeur correcte dans une case choisie ou encore incorrecte.","title":"Utiliser un indice","inputSchema":{"type":"object","properties":{"row":{"type":"integer","minimum":1,"maximum":9},"column":{"type":"integer","minimum":1,"maximum":9},"expectedPositionId":{"type":"string","minLength":1,"maxLength":160,"description":"positionId retourné par la dernière lecture de l’état."}},"required":["expectedPositionId"],"additionalProperties":false},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute","page":"/sudoku","pages":["/sudoku"]}],"category":"Media & Personal","favicon":"/favicons/tablee.lulab.fr.png","apiSurface":"spec","toolCount":33}}