Prompt for root directory and list it
This commit is contained in:
@@ -0,0 +1,76 @@
|
||||
# agent/tools.py
|
||||
from dataclasses import dataclass
|
||||
from typing import Callable, Any, Dict
|
||||
import os
|
||||
|
||||
from .memory import Memory
|
||||
|
||||
@dataclass
|
||||
class Tool:
|
||||
name: str
|
||||
description: str
|
||||
func: Callable[..., Dict[str, Any]]
|
||||
parameters: Dict[str, Any] # JSON Schema des paramètres
|
||||
|
||||
def make_tools(memory: Memory) -> dict[str, Tool]:
|
||||
def set_project_root(project_root: str) -> Dict[str, Any]:
|
||||
if not os.path.isdir(project_root):
|
||||
return {"error": "invalid_path", "message": f"Le chemin {project_root} n'est pas un dossier valide."}
|
||||
|
||||
print(f"Setting project root to: {project_root}")
|
||||
print("Memory before:", memory.data)
|
||||
memory.set_project_root(project_root)
|
||||
print("Memory after:", memory.data)
|
||||
return {"status": "ok", "project_root": project_root}
|
||||
|
||||
def list_directory(path: str) -> Dict[str, Any]:
|
||||
print("Proper tool used")
|
||||
if not memory.data.get("project_root"):
|
||||
return {"error": "no_project_root", "message": "Project root not set."}
|
||||
|
||||
root = memory.data.get("project_root")
|
||||
full_path = os.path.abspath(os.path.join(root, path))
|
||||
root_abs = os.path.abspath(root)
|
||||
if not full_path.startswith(root_abs):
|
||||
return {"error": "forbidden", "message": "Path outside project_root."}
|
||||
|
||||
try:
|
||||
entries = os.listdir(full_path)
|
||||
return {"path": path, "entries": entries}
|
||||
except Exception as e:
|
||||
return {"error": "os_error", "message": str(e)}
|
||||
|
||||
tools = [
|
||||
Tool(
|
||||
name="set_project_root",
|
||||
description="Enregistre le path du dossier racine du projet.",
|
||||
func=set_project_root,
|
||||
parameters={
|
||||
"type": "object",
|
||||
"properties": {
|
||||
"project_root": {
|
||||
"type": "string",
|
||||
"description": "Chemin absolu du dossier racine du projet (ex: /home/user/mon_projet)"
|
||||
}
|
||||
},
|
||||
"required": ["project_root"]
|
||||
}
|
||||
),
|
||||
Tool(
|
||||
name="list_directory",
|
||||
description="Liste le contenu d'un dossier relatif au project_root.",
|
||||
func=list_directory,
|
||||
parameters={
|
||||
"type": "object",
|
||||
"properties": {
|
||||
"path": {
|
||||
"type": "string",
|
||||
"description": "Chemin relatif du dossier à lister (ex: 'src' ou '.' pour la racine)"
|
||||
}
|
||||
},
|
||||
"required": ["path"]
|
||||
}
|
||||
),
|
||||
]
|
||||
|
||||
return {t.name: t for t in tools}
|
||||
Reference in New Issue
Block a user