From 55cbf02ed2742bbd237a6382bdee939a7c4ab793 Mon Sep 17 00:00:00 2001 From: Meleki Date: Sat, 7 Mar 2026 12:29:16 +0100 Subject: [PATCH] =?UTF-8?q?fix:=20Plan-Modus=20=E2=80=93=20execute-Tool=20?= =?UTF-8?q?als=20readonly=20erlauben=20+=20Plaintext-Endpoint=20planMode-P?= =?UTF-8?q?arameter?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - ToolService: execute in ReadOnlyToolNames aufgenommen - SystemPromptBuilder: Plan-Modus Tools-Text um execute ergänzt - SessionEndpoint: HandleSystemPrompt liest planMode Query-Parameter --- Endpoints/SessionEndpoint.cs | 3 ++- Services/SystemPromptBuilder.cs | 2 +- Services/ToolService.cs | 2 +- 3 files changed, 4 insertions(+), 3 deletions(-) diff --git a/Endpoints/SessionEndpoint.cs b/Endpoints/SessionEndpoint.cs index 9b469c8..a6131de 100644 --- a/Endpoints/SessionEndpoint.cs +++ b/Endpoints/SessionEndpoint.cs @@ -177,7 +177,8 @@ public static class SessionEndpoint var resolvedWorkspace = WorkspaceHelper.ResolveWorkspace(session, user); if (string.IsNullOrEmpty(resolvedWorkspace) && agentSkills.Any()) resolvedWorkspace = "/tmp"; - var systemPrompt = SystemPromptBuilder.Build(agent, session, markedMessages, memoryService, agentMemoryDir, agentSkills, skillService, userPersona: user?.GetEffectivePersona(), resolvedWorkspace: resolvedWorkspace); + var planMode = ctx.Request.Query.ContainsKey("planMode") && ctx.Request.Query["planMode"] == "true"; + var systemPrompt = SystemPromptBuilder.Build(agent, session, markedMessages, memoryService, agentMemoryDir, agentSkills, skillService, userPersona: user?.GetEffectivePersona(), resolvedWorkspace: resolvedWorkspace, planMode: planMode); ctx.Response.ContentType = "text/plain; charset=utf-8"; await ctx.Response.WriteAsync(systemPrompt); diff --git a/Services/SystemPromptBuilder.cs b/Services/SystemPromptBuilder.cs index 5092733..a0bdd24 100644 --- a/Services/SystemPromptBuilder.cs +++ b/Services/SystemPromptBuilder.cs @@ -68,7 +68,7 @@ JEDE Datei-Operation und JEDER Shell-Befehl MUSS über einen Tool-Aufruf erfolge Icon = "fa-wrench", Label = "Session · Workspace (Plan-Modus)", Content = @$"## Tools -Du hast Read-only-Tools zur Verfügung (read_file, list_files, glob, grep). Benutze sie um den Code zu analysieren und zu verstehen. +Du hast Read-only-Tools zur Verfügung (read_file, list_files, glob, grep, execute). Benutze sie um den Code zu analysieren und zu verstehen. Der Workspace-Pfad ist: `{effectiveWorkspace}` Alle Dateipfade in Tool-Aufrufen müssen relativ zu diesem Workspace sein oder absolute Pfade verwenden, die mit diesem Pfad beginnen." diff --git a/Services/ToolService.cs b/Services/ToolService.cs index 6b17029..430e981 100644 --- a/Services/ToolService.cs +++ b/Services/ToolService.cs @@ -23,7 +23,7 @@ public class ToolService /// private static readonly HashSet ReadOnlyToolNames = new HashSet { - "read_file", "list_files", "glob", "grep", "todo_write", + "read_file", "list_files", "glob", "grep", "execute", "todo_write", "memory_read", "memory_write", "memory_list", AskUserChoiceToolName };