mirror of
https://github.com/R0m1k3/Loki.git
synced 2026-10-22 22:48:11 +02:00
Lot 7 : outils git exécutés par la façade
git_status, git_diff et git_clone (rust/loki-rs/src/tools/git.rs) quand la façade tient la conversation : dépôt deviné comme le Go (sous-dossier demandé, racine, unique sous-dossier dépôt), sorties mêlées et bornées, jamais d'invite, clone limité à https:// et git@hôte: et rangé dans le dossier de la discussion. Toujours sur cette machine, cible distante ou non, comme le Go. Parité : TestPariteOutilsGit (deux dépôts, l'un modifié, l'autre sans commit ; aucun appel réseau) range tests/parity_tools/git.json ; tests/tools_git.rs le retrouve à l'identique. Le rejeu des journaux des outils est partagé (tests/common/toolsfx.rs). Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_016tcGfJWefW5kUGoC2wL8cv
This commit is contained in:
9 files changed
+976
-224
No files matched your search
@@ -1,8 +1,9 @@
|
||||
//! Outils de l'agent exécutés par la façade (lot 7 de la migration).
|
||||
//!
|
||||
//! Quand la façade tient la conversation (`LOKI_CHAT=rust`), les outils
|
||||
//! fichiers et le shell s'exécutent ici : `read`, `grep`, `glob`, `write`,
|
||||
//! `edit`, `bash`, `ask`. Les autres (mémoire, web, tâches, navigateur, MCP,
|
||||
//! fichiers, le shell et git s'exécutent ici : `read`, `grep`, `glob`,
|
||||
//! `write`, `edit`, `bash`, `ask`, `git_status`, `git_diff`, `git_clone`. Les
|
||||
//! autres (mémoire, web, tâches, navigateur, MCP,
|
||||
//! sous-agents, critères…) restent au Go (`/internal/v1/tool/exec`), de même
|
||||
//! que `write`/`edit`/`bash` quand l'agent vise un poste distant.
|
||||
//!
|
||||
@@ -14,6 +15,7 @@
|
||||
|
||||
pub mod diff;
|
||||
pub mod files;
|
||||
pub mod git;
|
||||
pub mod policy;
|
||||
pub mod shell;
|
||||
|
||||
@@ -55,7 +57,16 @@ pub trait ToolState: Send + Sync {
|
||||
pub fn is_local(name: &str) -> bool {
|
||||
matches!(
|
||||
name,
|
||||
"read" | "grep" | "glob" | "write" | "edit" | "bash" | "ask"
|
||||
"read"
|
||||
| "grep"
|
||||
| "glob"
|
||||
| "write"
|
||||
| "edit"
|
||||
| "bash"
|
||||
| "ask"
|
||||
| "git_status"
|
||||
| "git_diff"
|
||||
| "git_clone"
|
||||
)
|
||||
}
|
||||
|
||||
@@ -139,6 +150,11 @@ pub async fn exec_local<S: ToolState>(
|
||||
.unwrap_or_else(|e| e),
|
||||
)
|
||||
}
|
||||
// git tourne toujours sur cette machine, cible distante ou non (comme
|
||||
// le Go).
|
||||
"git_status" => outcome(git::tool_git_status(&ctx.cwd, args).await),
|
||||
"git_diff" => outcome(git::tool_git_diff(&ctx.cwd, args).await),
|
||||
"git_clone" => outcome(git::tool_git_clone(&ctx.cwd, args).await),
|
||||
"ask" => {
|
||||
let result = files::tool_ask(args);
|
||||
let ask = (!result.starts_with("[erreur]")).then(|| AskEvent {
|
||||
|
||||
Reference in new issue
Block a user