| 💾 Saved. d722711 k33g 5h ago | 1 | # Référence : outils intégrés |
| 2 | |
| 3 | > Description neutre des outils déclarés au modèle. Un outil ne renvoie jamais d'erreur Go pour un échec ordinaire : le texte de l'échec est renvoyé au modèle comme sortie de l'outil. Chaque outil enregistre son appel dans le détecteur de boucle ; le même outil, la même entrée et la même sortie trois fois de suite ajoutent `[LOOP_DETECTED: …]` à la sortie. |
| 4 | |
| 5 | ## `bash` |
| 6 | |
| 7 | Toujours déclaré. |
| 8 | |
| 9 | | Champ | Type | Description | |
| 10 | |-------|------|-------------| |
| 11 | | `command` | chaîne | La commande shell à exécuter. | |
| 12 | |
| 13 | | Aspect | Comportement | |
| 14 | |--------|--------------| |
| 15 | | Shell | `bash -c <command>`, un nouveau shell par appel, pas de stdin. | |
| 16 | | Répertoire de travail | Le répertoire du processus en mode terminal ; le `cwd` de la session en mode ACP. | |
| 17 | | Délai | 30 s ; la sortie se termine alors par `[error: 30s timeout exceeded]`. | |
| 18 | | Sortie | stdout et stderr fusionnés, tronqués à `maxOutput` caractères. | |
| 19 | | Code de sortie non nul | La sortie se termine par `[exit code: exit status N]`. | |
| 20 | | Affichage terminal | `🛠️ bash: <command>` avant exécution, puis jusqu'à `previewLines` lignes grisées et indentées, ou `(no output)`. | |
| 21 | | ACP | Appel d'outil de genre `execute` ; permission demandée avant exécution ; un refus renvoie `[command rejected by the user]` avec le statut `failed`. | |
| 22 | |
| 23 | ## `read_skill` |
| 24 | |
| 25 | Déclaré seulement quand `skillsDir` contient au moins un skill (`<nom>.md` ou `<nom>/SKILL.md`). |
| 26 | |
| 27 | | Champ | Type | Description | |
| 28 | |-------|------|-------------| |
| 29 | | `name` | chaîne | Nom du skill, exactement tel que listé dans la description de l'outil. | |
| 30 | |
| 31 | | Aspect | Comportement | |
| 32 | |--------|--------------| |
| 33 | | Description | Phrase fixe suivie du catalogue : une ligne ` <name> — <description>` par skill, triées par nom. | |
| 34 | | Sortie | Le markdown complet de `<skillsDir>/<name>.md`, ou de `<skillsDir>/<name>/SKILL.md` s'il n'y a pas de fichier à plat, tronqué à `maxOutput`. | |
| 35 | | Nom inconnu | `No skill named "x". Available skills: a, b, c` | |
| 36 | | Sécurité des chemins | Seul le nom de base de `name` est utilisé ; pas de traversée de répertoire. | |
| 37 | | Affichage terminal | `📖 read_skill: <name>` ; le contenu n'est pas affiché. | |
| 38 | | ACP | Appel d'outil de genre `read` ; pas de dialogue de permission. | |
| 39 | |
| 40 | ## `read_file` |
| 41 | |
| 42 | Déclaré quand `editTools: true`. |
| 43 | |
| 44 | | Champ | Type | Défaut | Description | |
| 45 | |-------|------|--------|-------------| |
| 46 | | `path` | chaîne | — | Chemin du fichier, relatif au répertoire de travail. | |
| 47 | | `start` | entier | `0` | Première ligne (base 1) ; `0` = depuis le début. | |
| 48 | | `end` | entier | `0` | Dernière ligne (base 1, incluse) ; `0` = jusqu'à la fin. | |
| 49 | | `numbered` | booléen | `false` | Préfixe chaque ligne de son numéro. | |
| 50 | |
| 51 | | Aspect | Comportement | |
| 52 | |--------|--------------| |
| 53 | | Fichier absent | `<path> does not exist. Create it with write_file` | |
| 54 | | Sortie | Les lignes, tronquées à `maxOutput` ; le saut de ligne final n'est conservé que si la fin du fichier est affichée. | |
| 55 | | ACP | Genre `read`, avec le chemin absolu comme emplacement. | |
| 56 | |
| 57 | ## `write_file` |
| 58 | |
| 59 | Déclaré quand `editTools: true`. |
| 60 | |
| 61 | | Champ | Type | Description | |
| 62 | |-------|------|-------------| |
| 63 | | `path` | chaîne | Chemin du fichier, relatif au répertoire de travail ; les répertoires parents sont créés. | |
| 64 | | `content` | chaîne | Le contenu entier du fichier. | |
| 65 | |
| 66 | | Aspect | Comportement | |
| 67 | |--------|--------------| |
| 68 | | Fichier existant | Entièrement remplacé. | |
| 69 | | Contenu identique | Rien n'est écrit ; le résultat le dit. | |
| 70 | | Sortie | Un en-tête d'une ligne et le diff par rapport au contenu précédent. | |
| 71 | | ACP | Genre `edit` ; permission demandée ; le changement voyage comme un diff (diff de nouveau fichier à la création). | |
| 72 | |
| 73 | ## `edit_file` |
| 74 | |
| 75 | Déclaré quand `editTools: true`. |
| 76 | |
| 77 | | Champ | Type | Défaut | Description | |
| 78 | |-------|------|--------|-------------| |
| 79 | | `path` | chaîne | — | Chemin d'un fichier existant. | |
| 80 | | `edits` | tableau de `{old, new}` | — | Remplacements, tous résolus par rapport au fichier original. | |
| 81 | | `edits[].old` | chaîne | — | Texte exact à trouver, présent exactement une fois. | |
| 82 | | `edits[].new` | chaîne | — | Remplacement ; vide supprime le texte trouvé. | |
| 83 | | `dry_run` | booléen | `false` | Rapporte ce qui changerait, n'écrit rien. | |
| 84 | |
| 85 | | Règle | Conséquence si violée | |
| 86 | |-------|-----------------------| |
| 87 | | `old` apparaît exactement une fois | Refus : introuvable, ou ambigu. | |
| 88 | | Deux éditions ne doivent ni se chevaucher, ni s'imbriquer, ni se répéter | Refus. | |
| 89 | | Les éditions sont résolues sur le texte original, jamais en cascade | — | |
| 90 | | Toute édition refusée | Rien n'est écrit. | |
| 91 | |
| 92 | | Aspect | Comportement | |
| 93 | |--------|--------------| |
| 94 | | Sortie | Un en-tête d'une ligne (éditions appliquées, lignes ajoutées et supprimées, première ligne modifiée) et le diff avec numéros de ligne. | |
| 95 | | ACP | Genre `edit` ; permission demandée ; le changement voyage comme un diff avec ancien et nouveau texte. | |
| 96 | |
| 97 | ## Compteurs affichés après un tour |
| 98 | |
| 99 | | Compteur | Compte | |
| 100 | |----------|--------| |
| 101 | | `⚙ N command(s)` | Réponses de l'outil `bash` dans le tour. | |
| 102 | | `📝 N file op(s)` | Réponses de `read_file`, `write_file`, `edit_file`. | |
| 103 | | `📖 N skill(s)` | Réponses de `read_skill`. | |