mirror of
https://github.com/R0m1k3/Loki.git
synced 2026-10-17 04:10:04 +02:00
Édition fiable, suppression de workspace et confinement strict
- edit_file : correspondance tolérante (indentation/espaces ignorés, repli ligne à ligne + réindentation) pour que les petits modèles éditent sans devoir tout réécrire ; message d'erreur plus utile. - Prompt système : privilégier edit_file pour modifier, write_file seulement pour créer ; rappel de rester dans le workspace. - Suppression de fichiers/dossiers du workspace : route DELETE /api/files + boutons × dans l'arborescence (fichiers et dossiers). - Confinement renforcé : garde-fou run_shell (refus des chemins absolus hors workspace, ~ et remontées ../) et code_task/Aider (fnames résolus et confinés au workspace). Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01SVay7z3y7q2gEe54ByAE6N
This commit is contained in:
3 files changed
+176
-24
No files matched your search
+16
-1
@@ -20,6 +20,21 @@ from .config import settings
|
||||
_RUN_LOCK = threading.Lock()
|
||||
|
||||
|
||||
def _confine(root: str, files: list[str] | None) -> list[str]:
|
||||
"""Résout les fichiers demandés en restant confiné au workspace.
|
||||
|
||||
Écarte silencieusement tout chemin absolu ou toute remontée `../` qui
|
||||
sortirait du workspace : le moteur code ne doit jamais toucher au disque
|
||||
hors du workspace de la discussion.
|
||||
"""
|
||||
confined: list[str] = []
|
||||
for f in files or []:
|
||||
target = os.path.abspath(os.path.join(root, f))
|
||||
if target == root or target.startswith(root + os.sep):
|
||||
confined.append(target)
|
||||
return confined
|
||||
|
||||
|
||||
def ensure_git(root: str) -> None:
|
||||
"""Initialise un dépôt git dans le workspace (requis pour les commits Aider)."""
|
||||
os.makedirs(root, exist_ok=True)
|
||||
@@ -112,7 +127,7 @@ def run_code_task(
|
||||
coder = Coder.create(
|
||||
main_model=Model(f"ollama_chat/{model}"),
|
||||
io=io,
|
||||
fnames=[os.path.join(root, f) for f in (files or [])],
|
||||
fnames=_confine(root, files),
|
||||
auto_commits=True,
|
||||
stream=False,
|
||||
use_git=True,
|
||||
|
||||
Reference in new issue
Block a user