mirror of
https://github.com/R0m1k3/Loki.git
synced 2026-10-23 15:08:16 +02:00
Plan d'architecture pour le code + garde-fou shell tolérant aux URLs
- make_plan(code=True) : pour une tâche d'application, produit un plan d'IMPLÉMENTATION concret (étape 1 = architecture/fichiers, puis une fonctionnalité testable à la fois), réaliste et sans dépendance externe — au lieu d'une liste d'objectifs produit (« moteur IA »…) que les petits modèles n'arrivent pas à livrer. - run_shell : le garde-fou de confinement ne bloque plus les URLs (http://localhost:8080 était rejeté à cause du « // »), et autorise la base du workspace même quand la session cible un projet (ls /workspace). Les évasions réelles (/etc, /config, ~, ../..) restent bloquées. 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
+31
-4
No files matched your search
@@ -512,11 +512,17 @@ def _guard_shell(command: str) -> None:
|
||||
sortent du workspace. Combiné à la validation utilisateur, ça empêche le
|
||||
modèle d'écrire ailleurs que dans son workspace.
|
||||
"""
|
||||
root = _workspace_root()
|
||||
# Racine autorisée = base du workspace (pas le sous-dossier projet) : ainsi
|
||||
# `ls /workspace` reste permis même quand la session cible un projet.
|
||||
root = os.path.abspath(settings.workspace_dir)
|
||||
for token in _PATH_TOKEN.findall(command):
|
||||
token = token.strip()
|
||||
if not token:
|
||||
continue
|
||||
# Jeton commençant par `//` = autorité d'URL (http://, ws://…) ou chemin
|
||||
# réseau, jamais une évasion du système de fichiers : on l'ignore.
|
||||
if token.startswith("//"):
|
||||
continue
|
||||
if token.startswith("~"):
|
||||
raise ToolError(
|
||||
f"chemin hors du workspace refusé : {token}. "
|
||||
|
||||
Reference in new issue
Block a user