mirror of
https://github.com/R0m1k3/Loki.git
synced 2026-10-16 19:59:56 +02:00
Quand la façade tient la conversation (LOKI_CHAT=rust), read, grep, glob, write, edit, bash et ask s'exécutent dans rust/loki-rs/src/tools au lieu de repartir au Go par /internal/v1/tool/exec : mêmes garde-fous dans le même ordre (commande catastrophique, « & » final en mode Code, bac à sable du mode Code, dossier mémoire interdit, lu avant d'écrire), même diff pour l'UI, même nettoyage de la sortie du shell. Le jeton de l'API interne est retiré de l'environnement du shell de l'agent. L'état partagé reste au Go, en un seul exemplaire (sous-agents et tâches le lisent aussi) : POST /internal/v1/tool/context (dossier de travail, dossier mémoire, cible distante), /tool/tracker (lecture notée, contrôle avant écriture), /tool/wrote (note après écriture, diagnostics LSP). Repli sur le Go pour une cible distante ou un contexte indisponible. Parité : internal/loki/parity_tools_test.go passe 58 appels à execTool sur une arborescence de test et range le journal dans tests/parity_tools ; tests/tools.rs le retrouve à l'identique avec exec_local. Écarts assumés consignés dans docs/superpowers/specs/2026-10-15-rust-migration-lot7-outils-design.md. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_016tcGfJWefW5kUGoC2wL8cv
768 lines
33 KiB
JSON
768 lines
33 KiB
JSON
{
|
|
"cwd": "ws",
|
|
"memory_dir": "memory/generale",
|
|
"files": [
|
|
{
|
|
"path": "ws/a.txt",
|
|
"content": "ligne 1\nligne 2\nligne 3\n",
|
|
"age": 50
|
|
},
|
|
{
|
|
"path": "ws/b.txt",
|
|
"content": "alpha\nbeta\n",
|
|
"age": 40
|
|
},
|
|
{
|
|
"path": "ws/vide.txt",
|
|
"content": "",
|
|
"age": 30
|
|
},
|
|
{
|
|
"path": "ws/long.txt",
|
|
"content": "éééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééé\nfin\n",
|
|
"age": 20
|
|
},
|
|
{
|
|
"path": "ws/crlf.txt",
|
|
"content": "un\r\ndeux\r\ntrois\r\n",
|
|
"age": 10
|
|
},
|
|
{
|
|
"path": "ws/bin.dat",
|
|
"content": "PK\u0000\u0001binaire",
|
|
"age": 60
|
|
},
|
|
{
|
|
"path": "ws/src/main.go",
|
|
"content": "package main\n\nfunc main() { x := 1 }\n",
|
|
"age": 5
|
|
},
|
|
{
|
|
"path": "ws/src/lib/util.go",
|
|
"content": "package lib\n// x marque\n",
|
|
"age": 3
|
|
},
|
|
{
|
|
"path": "ws/src/lib/notes.md",
|
|
"content": "x dans les notes\n",
|
|
"age": 4
|
|
},
|
|
{
|
|
"path": "ws/node_modules/dep/index.js",
|
|
"content": "ligne cachée\n",
|
|
"age": 70
|
|
},
|
|
{
|
|
"path": "ws/beaucoup.txt",
|
|
"content": "aiguille\naiguille\naiguille\naiguille\naiguille\naiguille\naiguille\naiguille\naiguille\naiguille\naiguille\naiguille\naiguille\naiguille\naiguille\naiguille\naiguille\naiguille\naiguille\naiguille\naiguille\naiguille\naiguille\naiguille\naiguille\naiguille\naiguille\naiguille\naiguille\naiguille\naiguille\naiguille\naiguille\naiguille\naiguille\naiguille\naiguille\naiguille\naiguille\naiguille\naiguille\naiguille\naiguille\naiguille\naiguille\naiguille\naiguille\naiguille\naiguille\naiguille\naiguille\naiguille\naiguille\naiguille\naiguille\naiguille\naiguille\naiguille\naiguille\naiguille\naiguille\naiguille\naiguille\naiguille\naiguille\naiguille\naiguille\naiguille\naiguille\naiguille\n",
|
|
"age": 80
|
|
},
|
|
{
|
|
"path": "dehors.txt",
|
|
"content": "hors du dossier\n",
|
|
"age": 90
|
|
}
|
|
],
|
|
"cases": [
|
|
{
|
|
"name": "lecture",
|
|
"tool": "read",
|
|
"args": {
|
|
"file": "a.txt"
|
|
},
|
|
"label": "a.txt",
|
|
"result": "1: ligne 1\n2: ligne 2\n3: ligne 3"
|
|
},
|
|
{
|
|
"name": "lecture_fenetre",
|
|
"tool": "read",
|
|
"args": {
|
|
"file": "a.txt",
|
|
"limit": 1,
|
|
"offset": 2
|
|
},
|
|
"label": "a.txt",
|
|
"result": "2: ligne 2\n… (1 lignes restantes — relis avec offset=3)"
|
|
},
|
|
{
|
|
"name": "lecture_fenetre_decimale",
|
|
"tool": "read",
|
|
"args": {
|
|
"file": "a.txt",
|
|
"limit": "3",
|
|
"offset": 2.7
|
|
},
|
|
"label": "a.txt",
|
|
"result": "2: ligne 2\n3: ligne 3"
|
|
},
|
|
{
|
|
"name": "lecture_chemin_vide",
|
|
"tool": "read",
|
|
"args": {
|
|
"file": " "
|
|
},
|
|
"label": " ",
|
|
"result": "[erreur] chemin vide"
|
|
},
|
|
{
|
|
"name": "lecture_absent",
|
|
"tool": "read",
|
|
"args": {
|
|
"file": "absent.txt"
|
|
},
|
|
"label": "absent.txt",
|
|
"result": "[erreur] open {{ROOT}}/ws/absent.txt: no such file or directory"
|
|
},
|
|
{
|
|
"name": "lecture_dossier",
|
|
"tool": "read",
|
|
"args": {
|
|
"file": "src"
|
|
},
|
|
"label": "src",
|
|
"result": "[erreur] read {{ROOT}}/ws/src: is a directory"
|
|
},
|
|
{
|
|
"name": "lecture_binaire",
|
|
"tool": "read",
|
|
"args": {
|
|
"file": "bin.dat"
|
|
},
|
|
"label": "bin.dat",
|
|
"result": "[binaire] bin.dat (11 octets) — pas un fichier texte"
|
|
},
|
|
{
|
|
"name": "lecture_au_dela",
|
|
"tool": "read",
|
|
"args": {
|
|
"file": "a.txt",
|
|
"offset": 99
|
|
},
|
|
"label": "a.txt",
|
|
"result": "[erreur] offset 99 > 3 lignes"
|
|
},
|
|
{
|
|
"name": "lecture_ligne_longue",
|
|
"tool": "read",
|
|
"args": {
|
|
"file": "long.txt"
|
|
},
|
|
"label": "long.txt",
|
|
"result": "1: éééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééé…\n2: fin"
|
|
},
|
|
{
|
|
"name": "lecture_fichier_vide",
|
|
"tool": "read",
|
|
"args": {
|
|
"file": "vide.txt"
|
|
},
|
|
"label": "vide.txt",
|
|
"result": "[erreur] offset 1 > 0 lignes"
|
|
},
|
|
{
|
|
"name": "lecture_absolue",
|
|
"tool": "read",
|
|
"args": {
|
|
"file": "{{ROOT}}/dehors.txt"
|
|
},
|
|
"label": "{{ROOT}}/dehors.txt",
|
|
"result": "1: hors du dossier"
|
|
},
|
|
{
|
|
"name": "lecture_relative_sortante",
|
|
"tool": "read",
|
|
"args": {
|
|
"file": "src/../../dehors.txt"
|
|
},
|
|
"label": "src/../../dehors.txt",
|
|
"result": "1: hors du dossier"
|
|
},
|
|
{
|
|
"name": "lecture_code_hors_dossier",
|
|
"tool": "read",
|
|
"args": {
|
|
"file": "../dehors.txt"
|
|
},
|
|
"code": true,
|
|
"label": "../dehors.txt",
|
|
"result": "[refusé] ../dehors.txt est hors du dossier de cette discussion. En mode code, tous les fichiers vivent dans le dossier de travail — utilise des chemins relatifs."
|
|
},
|
|
{
|
|
"name": "lecture_code",
|
|
"tool": "read",
|
|
"args": {
|
|
"file": "b.txt"
|
|
},
|
|
"code": true,
|
|
"label": "b.txt",
|
|
"result": "1: alpha\n2: beta"
|
|
},
|
|
{
|
|
"name": "grep",
|
|
"tool": "grep",
|
|
"args": {
|
|
"pattern": "ligne [12]"
|
|
},
|
|
"label": "ligne [12]",
|
|
"result": "a.txt:1: ligne 1\na.txt:2: ligne 2"
|
|
},
|
|
{
|
|
"name": "grep_filtre",
|
|
"tool": "grep",
|
|
"args": {
|
|
"glob": "*.go",
|
|
"pattern": "x"
|
|
},
|
|
"label": "x",
|
|
"result": "src/lib/util.go:2: // x marque\nsrc/main.go:3: func main() { x := 1 }"
|
|
},
|
|
{
|
|
"name": "grep_filtre_classe",
|
|
"tool": "grep",
|
|
"args": {
|
|
"glob": "[mn]*",
|
|
"pattern": "x"
|
|
},
|
|
"label": "x",
|
|
"result": "src/lib/notes.md:1: x dans les notes\nsrc/main.go:3: func main() { x := 1 }"
|
|
},
|
|
{
|
|
"name": "grep_fichier",
|
|
"tool": "grep",
|
|
"args": {
|
|
"path": "b.txt",
|
|
"pattern": "beta"
|
|
},
|
|
"label": "beta",
|
|
"result": ".:2: beta"
|
|
},
|
|
{
|
|
"name": "grep_sous_dossier",
|
|
"tool": "grep",
|
|
"args": {
|
|
"path": "src/lib",
|
|
"pattern": "package"
|
|
},
|
|
"label": "package",
|
|
"result": "util.go:1: package lib"
|
|
},
|
|
{
|
|
"name": "grep_point",
|
|
"tool": "grep",
|
|
"args": {
|
|
"path": ".",
|
|
"pattern": "alpha"
|
|
},
|
|
"label": "alpha",
|
|
"result": "b.txt:1: alpha"
|
|
},
|
|
{
|
|
"name": "grep_aucun",
|
|
"tool": "grep",
|
|
"args": {
|
|
"pattern": "zzz"
|
|
},
|
|
"label": "zzz",
|
|
"result": "[aucun résultat]"
|
|
},
|
|
{
|
|
"name": "grep_motif_vide",
|
|
"tool": "grep",
|
|
"args": {
|
|
"pattern": " "
|
|
},
|
|
"label": " ",
|
|
"result": "[erreur] motif vide"
|
|
},
|
|
{
|
|
"name": "grep_plafond",
|
|
"tool": "grep",
|
|
"args": {
|
|
"pattern": "aiguille"
|
|
},
|
|
"label": "aiguille",
|
|
"result": "beaucoup.txt:1: aiguille\nbeaucoup.txt:2: aiguille\nbeaucoup.txt:3: aiguille\nbeaucoup.txt:4: aiguille\nbeaucoup.txt:5: aiguille\nbeaucoup.txt:6: aiguille\nbeaucoup.txt:7: aiguille\nbeaucoup.txt:8: aiguille\nbeaucoup.txt:9: aiguille\nbeaucoup.txt:10: aiguille\nbeaucoup.txt:11: aiguille\nbeaucoup.txt:12: aiguille\nbeaucoup.txt:13: aiguille\nbeaucoup.txt:14: aiguille\nbeaucoup.txt:15: aiguille\nbeaucoup.txt:16: aiguille\nbeaucoup.txt:17: aiguille\nbeaucoup.txt:18: aiguille\nbeaucoup.txt:19: aiguille\nbeaucoup.txt:20: aiguille\nbeaucoup.txt:21: aiguille\nbeaucoup.txt:22: aiguille\nbeaucoup.txt:23: aiguille\nbeaucoup.txt:24: aiguille\nbeaucoup.txt:25: aiguille\nbeaucoup.txt:26: aiguille\nbeaucoup.txt:27: aiguille\nbeaucoup.txt:28: aiguille\nbeaucoup.txt:29: aiguille\nbeaucoup.txt:30: aiguille\nbeaucoup.txt:31: aiguille\nbeaucoup.txt:32: aiguille\nbeaucoup.txt:33: aiguille\nbeaucoup.txt:34: aiguille\nbeaucoup.txt:35: aiguille\nbeaucoup.txt:36: aiguille\nbeaucoup.txt:37: aiguille\nbeaucoup.txt:38: aiguille\nbeaucoup.txt:39: aiguille\nbeaucoup.txt:40: aiguille\nbeaucoup.txt:41: aiguille\nbeaucoup.txt:42: aiguille\nbeaucoup.txt:43: aiguille\nbeaucoup.txt:44: aiguille\nbeaucoup.txt:45: aiguille\nbeaucoup.txt:46: aiguille\nbeaucoup.txt:47: aiguille\nbeaucoup.txt:48: aiguille\nbeaucoup.txt:49: aiguille\nbeaucoup.txt:50: aiguille\nbeaucoup.txt:51: aiguille\nbeaucoup.txt:52: aiguille\nbeaucoup.txt:53: aiguille\nbeaucoup.txt:54: aiguille\nbeaucoup.txt:55: aiguille\nbeaucoup.txt:56: aiguille\nbeaucoup.txt:57: aiguille\nbeaucoup.txt:58: aiguille\nbeaucoup.txt:59: aiguille\nbeaucoup.txt:60: aiguille\n… (plafond de 60 résultats atteint — affine le motif)"
|
|
},
|
|
{
|
|
"name": "grep_absent",
|
|
"tool": "grep",
|
|
"args": {
|
|
"path": "nulle-part",
|
|
"pattern": "a"
|
|
},
|
|
"label": "a",
|
|
"result": "[aucun résultat]"
|
|
},
|
|
{
|
|
"name": "grep_code_hors_dossier",
|
|
"tool": "grep",
|
|
"args": {
|
|
"path": "{{ROOT}}",
|
|
"pattern": "a"
|
|
},
|
|
"code": true,
|
|
"label": "a",
|
|
"result": "[refusé] {{ROOT}} est hors du dossier de cette discussion. En mode code, tous les fichiers vivent dans le dossier de travail — utilise des chemins relatifs."
|
|
},
|
|
{
|
|
"name": "glob_go",
|
|
"tool": "glob",
|
|
"args": {
|
|
"pattern": "**/*.go"
|
|
},
|
|
"label": "**/*.go",
|
|
"result": "src/lib/util.go\nsrc/main.go"
|
|
},
|
|
{
|
|
"name": "glob_racine",
|
|
"tool": "glob",
|
|
"args": {
|
|
"pattern": "*.txt"
|
|
},
|
|
"label": "*.txt",
|
|
"result": "crlf.txt\nlong.txt\nvide.txt\nb.txt\na.txt\nbeaucoup.txt"
|
|
},
|
|
{
|
|
"name": "glob_point",
|
|
"tool": "glob",
|
|
"args": {
|
|
"pattern": "./src/*"
|
|
},
|
|
"label": "./src/*",
|
|
"result": "src/main.go"
|
|
},
|
|
{
|
|
"name": "glob_aucun",
|
|
"tool": "glob",
|
|
"args": {
|
|
"pattern": "*.rs"
|
|
},
|
|
"label": "*.rs",
|
|
"result": "[aucun fichier]"
|
|
},
|
|
{
|
|
"name": "glob_vide",
|
|
"tool": "glob",
|
|
"args": {
|
|
"pattern": ""
|
|
},
|
|
"label": "",
|
|
"result": "[erreur] motif vide"
|
|
},
|
|
{
|
|
"name": "question",
|
|
"tool": "ask",
|
|
"args": {
|
|
"options": [
|
|
"a",
|
|
" ",
|
|
"b",
|
|
"c",
|
|
"d",
|
|
"e"
|
|
],
|
|
"question": "Lequel ?"
|
|
},
|
|
"label": "Lequel ?",
|
|
"result": "[question posée à l'utilisateur] Termine ton tour MAINTENANT sans appeler d'autre outil : sa réponse arrivera comme prochain message.",
|
|
"ask": {
|
|
"question": "Lequel ?",
|
|
"options": [
|
|
"a",
|
|
"b",
|
|
"c",
|
|
"d"
|
|
]
|
|
}
|
|
},
|
|
{
|
|
"name": "question_vide",
|
|
"tool": "ask",
|
|
"args": {
|
|
"question": ""
|
|
},
|
|
"label": "",
|
|
"result": "[erreur] question vide"
|
|
},
|
|
{
|
|
"name": "ecriture_neuve",
|
|
"tool": "write",
|
|
"args": {
|
|
"content": "un\ndeux\n",
|
|
"file": "neuf/n.txt"
|
|
},
|
|
"label": "neuf/n.txt",
|
|
"result": "[ok] {{ROOT}}/ws/neuf/n.txt créé (8 octets)",
|
|
"diff": [
|
|
{
|
|
"op": "+",
|
|
"text": "un"
|
|
},
|
|
{
|
|
"op": "+",
|
|
"text": "deux"
|
|
}
|
|
],
|
|
"added": 2
|
|
},
|
|
{
|
|
"name": "ecriture_existant",
|
|
"tool": "write",
|
|
"args": {
|
|
"content": "remplacé\n",
|
|
"file": "b.txt"
|
|
},
|
|
"label": "b.txt",
|
|
"result": "[ok] {{ROOT}}/ws/b.txt réécrit (10 octets)",
|
|
"diff": [
|
|
{
|
|
"op": "+",
|
|
"text": "remplacé"
|
|
}
|
|
],
|
|
"added": 1
|
|
},
|
|
{
|
|
"name": "ecriture_memoire",
|
|
"tool": "write",
|
|
"args": {
|
|
"content": "x\n",
|
|
"file": "{{MEM}}/x.md"
|
|
},
|
|
"label": "{{ROOT}}/memory/generale/x.md",
|
|
"result": "[refusé] pas d'accès direct au dossier {{ROOT}}/memory/generale. Utilise les outils mem_* (mem_search/mem_read/mem_add/mem_edit/mem_delete).",
|
|
"diff": [
|
|
{
|
|
"op": "+",
|
|
"text": "x"
|
|
}
|
|
],
|
|
"added": 1
|
|
},
|
|
{
|
|
"name": "ecriture_chemin_vide",
|
|
"tool": "write",
|
|
"args": {
|
|
"content": "x",
|
|
"file": ""
|
|
},
|
|
"label": "",
|
|
"result": "[erreur] chemin vide"
|
|
},
|
|
{
|
|
"name": "ecriture_code_non_lu",
|
|
"tool": "write",
|
|
"args": {
|
|
"content": "x\n",
|
|
"file": "src/lib/notes.md"
|
|
},
|
|
"code": true,
|
|
"label": "src/lib/notes.md",
|
|
"result": "[refusé] {{ROOT}}/ws/src/lib/notes.md existe mais tu ne l'as pas lu dans cette discussion. Lis-le d'abord (outil read), puis modifie-le."
|
|
},
|
|
{
|
|
"name": "ecriture_code_hors_dossier",
|
|
"tool": "write",
|
|
"args": {
|
|
"content": "x\n",
|
|
"file": "../evade.txt"
|
|
},
|
|
"code": true,
|
|
"label": "../evade.txt",
|
|
"result": "[refusé] ../evade.txt est hors du dossier de cette discussion. En mode code, tous les fichiers vivent dans le dossier de travail — utilise des chemins relatifs."
|
|
},
|
|
{
|
|
"name": "ecriture_code_neuve",
|
|
"tool": "write",
|
|
"args": {
|
|
"content": "c\n",
|
|
"file": "code.txt"
|
|
},
|
|
"code": true,
|
|
"label": "code.txt",
|
|
"result": "[ok] {{ROOT}}/ws/code.txt créé (2 octets)",
|
|
"diff": [
|
|
{
|
|
"op": "+",
|
|
"text": "c"
|
|
}
|
|
],
|
|
"added": 1
|
|
},
|
|
{
|
|
"name": "edition",
|
|
"tool": "edit",
|
|
"args": {
|
|
"file": "a.txt",
|
|
"new": "ligne deux",
|
|
"old": "ligne 2"
|
|
},
|
|
"label": "a.txt",
|
|
"result": "[ok] {{ROOT}}/ws/a.txt modifié (1 remplacement)",
|
|
"diff": [
|
|
{
|
|
"op": "-",
|
|
"text": "ligne 2"
|
|
},
|
|
{
|
|
"op": "+",
|
|
"text": "ligne deux"
|
|
}
|
|
],
|
|
"added": 1,
|
|
"removed": 1
|
|
},
|
|
{
|
|
"name": "edition_deja_faite",
|
|
"tool": "edit",
|
|
"args": {
|
|
"file": "a.txt",
|
|
"new": "ligne deux",
|
|
"old": "ligne 2"
|
|
},
|
|
"label": "a.txt",
|
|
"result": "[ok] déjà à jour — le fichier contient déjà cette modification",
|
|
"diff": [
|
|
{
|
|
"op": "-",
|
|
"text": "ligne 2"
|
|
},
|
|
{
|
|
"op": "+",
|
|
"text": "ligne deux"
|
|
}
|
|
],
|
|
"added": 1,
|
|
"removed": 1
|
|
},
|
|
{
|
|
"name": "edition_introuvable",
|
|
"tool": "edit",
|
|
"args": {
|
|
"file": "a.txt",
|
|
"new": "y",
|
|
"old": "zzz"
|
|
},
|
|
"label": "a.txt",
|
|
"result": "[erreur] old introuvable dans le fichier"
|
|
},
|
|
{
|
|
"name": "edition_ambigue",
|
|
"tool": "edit",
|
|
"args": {
|
|
"file": "a.txt",
|
|
"new": "l",
|
|
"old": "ligne"
|
|
},
|
|
"label": "a.txt",
|
|
"result": "[erreur] old apparaît 3 fois — ajoute du contexte pour le rendre unique"
|
|
},
|
|
{
|
|
"name": "edition_crlf",
|
|
"tool": "edit",
|
|
"args": {
|
|
"file": "crlf.txt",
|
|
"new": "2\n3",
|
|
"old": "deux\ntrois"
|
|
},
|
|
"label": "crlf.txt",
|
|
"result": "[ok] {{ROOT}}/ws/crlf.txt modifié (1 remplacement)",
|
|
"diff": [
|
|
{
|
|
"op": "-",
|
|
"text": "deux"
|
|
},
|
|
{
|
|
"op": "-",
|
|
"text": "trois"
|
|
},
|
|
{
|
|
"op": "+",
|
|
"text": "2"
|
|
},
|
|
{
|
|
"op": "+",
|
|
"text": "3"
|
|
}
|
|
],
|
|
"added": 2,
|
|
"removed": 2
|
|
},
|
|
{
|
|
"name": "edition_old_vide",
|
|
"tool": "edit",
|
|
"args": {
|
|
"file": "a.txt",
|
|
"new": "y",
|
|
"old": ""
|
|
},
|
|
"label": "a.txt",
|
|
"result": "[erreur] old vide"
|
|
},
|
|
{
|
|
"name": "edition_fichier_absent",
|
|
"tool": "edit",
|
|
"args": {
|
|
"file": "absent.txt",
|
|
"new": "b",
|
|
"old": "a"
|
|
},
|
|
"label": "absent.txt",
|
|
"result": "[erreur] open {{ROOT}}/ws/absent.txt: no such file or directory"
|
|
},
|
|
{
|
|
"name": "edition_code_non_lu",
|
|
"tool": "edit",
|
|
"args": {
|
|
"file": "src/main.go",
|
|
"new": "x := 2",
|
|
"old": "x := 1"
|
|
},
|
|
"code": true,
|
|
"label": "src/main.go",
|
|
"result": "[refusé] {{ROOT}}/ws/src/main.go existe mais tu ne l'as pas lu dans cette discussion. Lis-le d'abord (outil read), puis modifie-le."
|
|
},
|
|
{
|
|
"name": "edition_code_apres_lecture",
|
|
"tool": "edit",
|
|
"args": {
|
|
"file": "b.txt",
|
|
"new": "rem",
|
|
"old": "remplacé"
|
|
},
|
|
"code": true,
|
|
"label": "b.txt",
|
|
"result": "[ok] {{ROOT}}/ws/b.txt modifié (1 remplacement)",
|
|
"diff": [
|
|
{
|
|
"op": "-",
|
|
"text": "remplacé"
|
|
},
|
|
{
|
|
"op": "+",
|
|
"text": "rem"
|
|
}
|
|
],
|
|
"added": 1,
|
|
"removed": 1
|
|
},
|
|
{
|
|
"name": "shell",
|
|
"tool": "bash",
|
|
"args": {
|
|
"command": "echo bonjour"
|
|
},
|
|
"unix": true,
|
|
"label": "echo bonjour",
|
|
"result": "exit: 0 · {{DUR}}\n\nstdout:\nbonjour\n"
|
|
},
|
|
{
|
|
"name": "shell_sortie_et_erreurs",
|
|
"tool": "bash",
|
|
"args": {
|
|
"command": "echo out; echo err >&2; exit 3"
|
|
},
|
|
"unix": true,
|
|
"label": "echo out; echo err >&2; exit 3",
|
|
"result": "exit: 3 · {{DUR}}\n\nstdout:\nout\n\n\nstderr:\nerr\n"
|
|
},
|
|
{
|
|
"name": "shell_tail",
|
|
"tool": "bash",
|
|
"args": {
|
|
"command": "printf 'a\\nb\\nc\\n' | tail -2"
|
|
},
|
|
"unix": true,
|
|
"label": "printf 'a\\nb\\nc\\n' | tail -2",
|
|
"result": "exit: 0 · {{DUR}}\n\nstdout:\nb\nc"
|
|
},
|
|
{
|
|
"name": "shell_ansi",
|
|
"tool": "bash",
|
|
"args": {
|
|
"command": "printf '\\033[31mrouge\\033[0m\\n'"
|
|
},
|
|
"unix": true,
|
|
"label": "printf '\\033[31mrouge\\033[0m\\n'",
|
|
"result": "exit: 0 · {{DUR}}\n\nstdout:\nrouge\n"
|
|
},
|
|
{
|
|
"name": "shell_dossier",
|
|
"tool": "bash",
|
|
"args": {
|
|
"command": "ls src"
|
|
},
|
|
"unix": true,
|
|
"label": "ls src",
|
|
"result": "exit: 0 · {{DUR}}\n\nstdout:\nlib\nmain.go\n"
|
|
},
|
|
{
|
|
"name": "shell_longue_sortie",
|
|
"tool": "bash",
|
|
"args": {
|
|
"command": "seq 1 3000"
|
|
},
|
|
"unix": true,
|
|
"label": "seq 1 3000",
|
|
"result": "exit: 0 · {{DUR}}\n\nstdout:\n[sortie tronquée : 13893 caractères au total, seuls les 8000 derniers sont gardés]\n1401\n1402\n1403\n1404\n1405\n1406\n1407\n1408\n1409\n1410\n1411\n1412\n1413\n1414\n1415\n1416\n1417\n1418\n1419\n1420\n1421\n1422\n1423\n1424\n1425\n1426\n1427\n1428\n1429\n1430\n1431\n1432\n1433\n1434\n1435\n1436\n1437\n1438\n1439\n1440\n1441\n1442\n1443\n1444\n1445\n1446\n1447\n1448\n1449\n1450\n1451\n1452\n1453\n1454\n1455\n1456\n1457\n1458\n1459\n1460\n1461\n1462\n1463\n1464\n1465\n1466\n1467\n1468\n1469\n1470\n1471\n1472\n1473\n1474\n1475\n1476\n1477\n1478\n1479\n1480\n1481\n1482\n1483\n1484\n1485\n1486\n1487\n1488\n1489\n1490\n1491\n1492\n1493\n1494\n1495\n1496\n1497\n1498\n1499\n1500\n1501\n1502\n1503\n1504\n1505\n1506\n1507\n1508\n1509\n1510\n1511\n1512\n1513\n1514\n1515\n1516\n1517\n1518\n1519\n1520\n1521\n1522\n1523\n1524\n1525\n1526\n1527\n1528\n1529\n1530\n1531\n1532\n1533\n1534\n1535\n1536\n1537\n1538\n1539\n1540\n1541\n1542\n1543\n1544\n1545\n1546\n1547\n1548\n1549\n1550\n1551\n1552\n1553\n1554\n1555\n1556\n1557\n1558\n1559\n1560\n1561\n1562\n1563\n1564\n1565\n1566\n1567\n1568\n1569\n1570\n1571\n1572\n1573\n1574\n1575\n1576\n1577\n1578\n1579\n1580\n1581\n1582\n1583\n1584\n1585\n1586\n1587\n1588\n1589\n1590\n1591\n1592\n1593\n1594\n1595\n1596\n1597\n1598\n1599\n1600\n1601\n1602\n1603\n1604\n1605\n1606\n1607\n1608\n1609\n1610\n1611\n1612\n1613\n1614\n1615\n1616\n1617\n1618\n1619\n1620\n1621\n1622\n1623\n1624\n1625\n1626\n1627\n1628\n1629\n1630\n1631\n1632\n1633\n1634\n1635\n1636\n1637\n1638\n1639\n1640\n1641\n1642\n1643\n1644\n1645\n1646\n1647\n1648\n1649\n1650\n1651\n1652\n1653\n1654\n1655\n1656\n1657\n1658\n1659\n1660\n1661\n1662\n1663\n1664\n1665\n1666\n1667\n1668\n1669\n1670\n1671\n1672\n1673\n1674\n1675\n1676\n1677\n1678\n1679\n1680\n1681\n1682\n1683\n1684\n1685\n1686\n1687\n1688\n1689\n1690\n1691\n1692\n1693\n1694\n1695\n1696\n1697\n1698\n1699\n1700\n1701\n1702\n1703\n1704\n1705\n1706\n1707\n1708\n1709\n1710\n1711\n1712\n1713\n1714\n1715\n1716\n1717\n1718\n1719\n1720\n1721\n1722\n1723\n1724\n1725\n1726\n1727\n1728\n1729\n1730\n1731\n1732\n1733\n1734\n1735\n1736\n1737\n1738\n1739\n1740\n1741\n1742\n1743\n1744\n1745\n1746\n1747\n1748\n1749\n1750\n1751\n1752\n1753\n1754\n1755\n1756\n1757\n1758\n1759\n1760\n1761\n1762\n1763\n1764\n1765\n1766\n1767\n1768\n1769\n1770\n1771\n1772\n1773\n1774\n1775\n1776\n1777\n1778\n1779\n1780\n1781\n1782\n1783\n1784\n1785\n1786\n1787\n1788\n1789\n1790\n1791\n1792\n1793\n1794\n1795\n1796\n1797\n1798\n1799\n1800\n1801\n1802\n1803\n1804\n1805\n1806\n1807\n1808\n1809\n1810\n1811\n1812\n1813\n1814\n1815\n1816\n1817\n1818\n1819\n1820\n1821\n1822\n1823\n1824\n1825\n1826\n1827\n1828\n1829\n1830\n1831\n1832\n1833\n1834\n1835\n1836\n1837\n1838\n1839\n1840\n1841\n1842\n1843\n1844\n1845\n1846\n1847\n1848\n1849\n1850\n1851\n1852\n1853\n1854\n1855\n1856\n1857\n1858\n1859\n1860\n1861\n1862\n1863\n1864\n1865\n1866\n1867\n1868\n1869\n1870\n1871\n1872\n1873\n1874\n1875\n1876\n1877\n1878\n1879\n1880\n1881\n1882\n1883\n1884\n1885\n1886\n1887\n1888\n1889\n1890\n1891\n1892\n1893\n1894\n1895\n1896\n1897\n1898\n1899\n1900\n1901\n1902\n1903\n1904\n1905\n1906\n1907\n1908\n1909\n1910\n1911\n1912\n1913\n1914\n1915\n1916\n1917\n1918\n1919\n1920\n1921\n1922\n1923\n1924\n1925\n1926\n1927\n1928\n1929\n1930\n1931\n1932\n1933\n1934\n1935\n1936\n1937\n1938\n1939\n1940\n1941\n1942\n1943\n1944\n1945\n1946\n1947\n1948\n1949\n1950\n1951\n1952\n1953\n1954\n1955\n1956\n1957\n1958\n1959\n1960\n1961\n1962\n1963\n1964\n1965\n1966\n1967\n1968\n1969\n1970\n1971\n1972\n1973\n1974\n1975\n1976\n1977\n1978\n1979\n1980\n1981\n1982\n1983\n1984\n1985\n1986\n1987\n1988\n1989\n1990\n1991\n1992\n1993\n1994\n1995\n1996\n1997\n1998\n1999\n2000\n2001\n2002\n2003\n2004\n2005\n2006\n2007\n2008\n2009\n2010\n2011\n2012\n2013\n2014\n2015\n2016\n2017\n2018\n2019\n2020\n2021\n2022\n2023\n2024\n2025\n2026\n2027\n2028\n2029\n2030\n2031\n2032\n2033\n2034\n2035\n2036\n2037\n2038\n2039\n2040\n2041\n2042\n2043\n2044\n2045\n2046\n2047\n2048\n2049\n2050\n2051\n2052\n2053\n2054\n2055\n2056\n2057\n2058\n2059\n2060\n2061\n2062\n2063\n2064\n2065\n2066\n2067\n2068\n2069\n2070\n2071\n2072\n2073\n2074\n2075\n2076\n2077\n2078\n2079\n2080\n2081\n2082\n2083\n2084\n2085\n2086\n2087\n2088\n2089\n2090\n2091\n2092\n2093\n2094\n2095\n2096\n2097\n2098\n2099\n2100\n2101\n2102\n2103\n2104\n2105\n2106\n2107\n2108\n2109\n2110\n2111\n2112\n2113\n2114\n2115\n2116\n2117\n2118\n2119\n2120\n2121\n2122\n2123\n2124\n2125\n2126\n2127\n2128\n2129\n2130\n2131\n2132\n2133\n2134\n2135\n2136\n2137\n2138\n2139\n2140\n2141\n2142\n2143\n2144\n2145\n2146\n2147\n2148\n2149\n2150\n2151\n2152\n2153\n2154\n2155\n2156\n2157\n2158\n2159\n2160\n2161\n2162\n2163\n2164\n2165\n2166\n2167\n2168\n2169\n2170\n2171\n2172\n2173\n2174\n2175\n2176\n2177\n2178\n2179\n2180\n2181\n2182\n2183\n2184\n2185\n2186\n2187\n2188\n2189\n2190\n2191\n2192\n2193\n2194\n2195\n2196\n2197\n2198\n2199\n2200\n2201\n2202\n2203\n2204\n2205\n2206\n2207\n2208\n2209\n2210\n2211\n2212\n2213\n2214\n2215\n2216\n2217\n2218\n2219\n2220\n2221\n2222\n2223\n2224\n2225\n2226\n2227\n2228\n2229\n2230\n2231\n2232\n2233\n2234\n2235\n2236\n2237\n2238\n2239\n2240\n2241\n2242\n2243\n2244\n2245\n2246\n2247\n2248\n2249\n2250\n2251\n2252\n2253\n2254\n2255\n2256\n2257\n2258\n2259\n2260\n2261\n2262\n2263\n2264\n2265\n2266\n2267\n2268\n2269\n2270\n2271\n2272\n2273\n2274\n2275\n2276\n2277\n2278\n2279\n2280\n2281\n2282\n2283\n2284\n2285\n2286\n2287\n2288\n2289\n2290\n2291\n2292\n2293\n2294\n2295\n2296\n2297\n2298\n2299\n2300\n2301\n2302\n2303\n2304\n2305\n2306\n2307\n2308\n2309\n2310\n2311\n2312\n2313\n2314\n2315\n2316\n2317\n2318\n2319\n2320\n2321\n2322\n2323\n2324\n2325\n2326\n2327\n2328\n2329\n2330\n2331\n2332\n2333\n2334\n2335\n2336\n2337\n2338\n2339\n2340\n2341\n2342\n2343\n2344\n2345\n2346\n2347\n2348\n2349\n2350\n2351\n2352\n2353\n2354\n2355\n2356\n2357\n2358\n2359\n2360\n2361\n2362\n2363\n2364\n2365\n2366\n2367\n2368\n2369\n2370\n2371\n2372\n2373\n2374\n2375\n2376\n2377\n2378\n2379\n2380\n2381\n2382\n2383\n2384\n2385\n2386\n2387\n2388\n2389\n2390\n2391\n2392\n2393\n2394\n2395\n2396\n2397\n2398\n2399\n2400\n2401\n2402\n2403\n2404\n2405\n2406\n2407\n2408\n2409\n2410\n2411\n2412\n2413\n2414\n2415\n2416\n2417\n2418\n2419\n2420\n2421\n2422\n2423\n2424\n2425\n2426\n2427\n2428\n2429\n2430\n2431\n2432\n2433\n2434\n2435\n2436\n2437\n2438\n2439\n2440\n2441\n2442\n2443\n2444\n2445\n2446\n2447\n2448\n2449\n2450\n2451\n2452\n2453\n2454\n2455\n2456\n2457\n2458\n2459\n2460\n2461\n2462\n2463\n2464\n2465\n2466\n2467\n2468\n2469\n2470\n2471\n2472\n2473\n2474\n2475\n2476\n2477\n2478\n2479\n2480\n2481\n2482\n2483\n2484\n2485\n2486\n2487\n2488\n2489\n2490\n2491\n2492\n2493\n2494\n2495\n2496\n2497\n2498\n2499\n2500\n2501\n2502\n2503\n2504\n2505\n2506\n2507\n2508\n2509\n2510\n2511\n2512\n2513\n2514\n2515\n2516\n2517\n2518\n2519\n2520\n2521\n2522\n2523\n2524\n2525\n2526\n2527\n2528\n2529\n2530\n2531\n2532\n2533\n2534\n2535\n2536\n2537\n2538\n2539\n2540\n2541\n2542\n2543\n2544\n2545\n2546\n2547\n2548\n2549\n2550\n2551\n2552\n2553\n2554\n2555\n2556\n2557\n2558\n2559\n2560\n2561\n2562\n2563\n2564\n2565\n2566\n2567\n2568\n2569\n2570\n2571\n2572\n2573\n2574\n2575\n2576\n2577\n2578\n2579\n2580\n2581\n2582\n2583\n2584\n2585\n2586\n2587\n2588\n2589\n2590\n2591\n2592\n2593\n2594\n2595\n2596\n2597\n2598\n2599\n2600\n2601\n2602\n2603\n2604\n2605\n2606\n2607\n2608\n2609\n2610\n2611\n2612\n2613\n2614\n2615\n2616\n2617\n2618\n2619\n2620\n2621\n2622\n2623\n2624\n2625\n2626\n2627\n2628\n2629\n2630\n2631\n2632\n2633\n2634\n2635\n2636\n2637\n2638\n2639\n2640\n2641\n2642\n2643\n2644\n2645\n2646\n2647\n2648\n2649\n2650\n2651\n2652\n2653\n2654\n2655\n2656\n2657\n2658\n2659\n2660\n2661\n2662\n2663\n2664\n2665\n2666\n2667\n2668\n2669\n2670\n2671\n2672\n2673\n2674\n2675\n2676\n2677\n2678\n2679\n2680\n2681\n2682\n2683\n2684\n2685\n2686\n2687\n2688\n2689\n2690\n2691\n2692\n2693\n2694\n2695\n2696\n2697\n2698\n2699\n2700\n2701\n2702\n2703\n2704\n2705\n2706\n2707\n2708\n2709\n2710\n2711\n2712\n2713\n2714\n2715\n2716\n2717\n2718\n2719\n2720\n2721\n2722\n2723\n2724\n2725\n2726\n2727\n2728\n2729\n2730\n2731\n2732\n2733\n2734\n2735\n2736\n2737\n2738\n2739\n2740\n2741\n2742\n2743\n2744\n2745\n2746\n2747\n2748\n2749\n2750\n2751\n2752\n2753\n2754\n2755\n2756\n2757\n2758\n2759\n2760\n2761\n2762\n2763\n2764\n2765\n2766\n2767\n2768\n2769\n2770\n2771\n2772\n2773\n2774\n2775\n2776\n2777\n2778\n2779\n2780\n2781\n2782\n2783\n2784\n2785\n2786\n2787\n2788\n2789\n2790\n2791\n2792\n2793\n2794\n2795\n2796\n2797\n2798\n2799\n2800\n2801\n2802\n2803\n2804\n2805\n2806\n2807\n2808\n2809\n2810\n2811\n2812\n2813\n2814\n2815\n2816\n2817\n2818\n2819\n2820\n2821\n2822\n2823\n2824\n2825\n2826\n2827\n2828\n2829\n2830\n2831\n2832\n2833\n2834\n2835\n2836\n2837\n2838\n2839\n2840\n2841\n2842\n2843\n2844\n2845\n2846\n2847\n2848\n2849\n2850\n2851\n2852\n2853\n2854\n2855\n2856\n2857\n2858\n2859\n2860\n2861\n2862\n2863\n2864\n2865\n2866\n2867\n2868\n2869\n2870\n2871\n2872\n2873\n2874\n2875\n2876\n2877\n2878\n2879\n2880\n2881\n2882\n2883\n2884\n2885\n2886\n2887\n2888\n2889\n2890\n2891\n2892\n2893\n2894\n2895\n2896\n2897\n2898\n2899\n2900\n2901\n2902\n2903\n2904\n2905\n2906\n2907\n2908\n2909\n2910\n2911\n2912\n2913\n2914\n2915\n2916\n2917\n2918\n2919\n2920\n2921\n2922\n2923\n2924\n2925\n2926\n2927\n2928\n2929\n2930\n2931\n2932\n2933\n2934\n2935\n2936\n2937\n2938\n2939\n2940\n2941\n2942\n2943\n2944\n2945\n2946\n2947\n2948\n2949\n2950\n2951\n2952\n2953\n2954\n2955\n2956\n2957\n2958\n2959\n2960\n2961\n2962\n2963\n2964\n2965\n2966\n2967\n2968\n2969\n2970\n2971\n2972\n2973\n2974\n2975\n2976\n2977\n2978\n2979\n2980\n2981\n2982\n2983\n2984\n2985\n2986\n2987\n2988\n2989\n2990\n2991\n2992\n2993\n2994\n2995\n2996\n2997\n2998\n2999\n3000\n"
|
|
},
|
|
{
|
|
"name": "shell_delai",
|
|
"tool": "bash",
|
|
"args": {
|
|
"command": "echo avant; sleep 3",
|
|
"timeout": 1
|
|
},
|
|
"unix": true,
|
|
"label": "echo avant; sleep 3",
|
|
"result": "[timeout après 1s — commande arrêtée ; pour un serveur ou une tâche longue, utilise bash_bg]\n\nstdout (partiel):\navant\n"
|
|
},
|
|
{
|
|
"name": "shell_dangereux",
|
|
"tool": "bash",
|
|
"args": {
|
|
"command": "rm -rf /"
|
|
},
|
|
"label": "rm -rf /",
|
|
"result": "[refusé] Commande bloquée par la politique de sécurité : efface la racine du disque ou le home. Ne la réessaie pas, même reformulée. Si l'utilisateur la veut vraiment, dis-lui de la lancer lui-même dans un terminal."
|
|
},
|
|
{
|
|
"name": "shell_memoire",
|
|
"tool": "bash",
|
|
"args": {
|
|
"command": "cat {{MEM}}/x.md"
|
|
},
|
|
"unix": true,
|
|
"label": "cat {{ROOT}}/memory/generale/x.md",
|
|
"result": "[refusé] pas d'accès direct au dossier {{ROOT}}/memory/generale via le shell. Utilise les outils mem_* (mem_search/mem_read/mem_add/mem_edit/mem_delete)."
|
|
},
|
|
{
|
|
"name": "shell_code_arriere_plan",
|
|
"tool": "bash",
|
|
"args": {
|
|
"command": "sleep 1 &"
|
|
},
|
|
"code": true,
|
|
"unix": true,
|
|
"label": "sleep 1 &",
|
|
"result": "[refusé] commande terminée par « & » : lance-la avec bash_bg (sortie consultable avec bash_tail), pas en arrière-plan dans bash."
|
|
}
|
|
],
|
|
"after": {
|
|
"dehors.txt": "hors du dossier\n",
|
|
"ws/a.txt": "ligne 1\nligne deux\nligne 3\n",
|
|
"ws/b.txt": "rem\n",
|
|
"ws/beaucoup.txt": "aiguille\naiguille\naiguille\naiguille\naiguille\naiguille\naiguille\naiguille\naiguille\naiguille\naiguille\naiguille\naiguille\naiguille\naiguille\naiguille\naiguille\naiguille\naiguille\naiguille\naiguille\naiguille\naiguille\naiguille\naiguille\naiguille\naiguille\naiguille\naiguille\naiguille\naiguille\naiguille\naiguille\naiguille\naiguille\naiguille\naiguille\naiguille\naiguille\naiguille\naiguille\naiguille\naiguille\naiguille\naiguille\naiguille\naiguille\naiguille\naiguille\naiguille\naiguille\naiguille\naiguille\naiguille\naiguille\naiguille\naiguille\naiguille\naiguille\naiguille\naiguille\naiguille\naiguille\naiguille\naiguille\naiguille\naiguille\naiguille\naiguille\naiguille\n",
|
|
"ws/bin.dat": "PK\u0000\u0001binaire",
|
|
"ws/code.txt": "c\n",
|
|
"ws/crlf.txt": "un\r\n2\r\n3\r\n",
|
|
"ws/long.txt": "éééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééé\nfin\n",
|
|
"ws/neuf/n.txt": "un\ndeux\n",
|
|
"ws/node_modules/dep/index.js": "ligne cachée\n",
|
|
"ws/src/lib/notes.md": "x dans les notes\n",
|
|
"ws/src/lib/util.go": "package lib\n// x marque\n",
|
|
"ws/src/main.go": "package main\n\nfunc main() { x := 1 }\n",
|
|
"ws/vide.txt": ""
|
|
}
|
|
}
|