feat: read_file tool mit offset/limit und 2000-Zeilen-Default

- Standardmäßig maximal 2000 Zeilen gelesen (statt komplette Datei)
- Optionale Parameter: offset (1-basiert) und limit
- Hinweis wenn Datei abgeschnitten wurde mit exakter Zeilenangabe
- TODO: Auto-scrolling als erledigt markiert
This commit is contained in:
Meleki committed 2026-03-11 11:39:50 +01:00
1 parent b45abab0aa
commit 20d891c9ef
2 files changed
+18 -4

No files matched your search

+17 -3
View File
@@ -103,13 +103,15 @@ public class ToolService
new
{
name = "read_file",
description = "Liest den Inhalt einer Datei. Gibt den Textinhalt zurück.",
description = "Liest den Inhalt einer Datei. Gibt den Textinhalt zurück. Standardmäßig werden maximal 2000 Zeilen gelesen. Bei großen Dateien offset und limit verwenden.",
input_schema = new
{
type = "object",
properties = new Dictionary<string, object>
{
["path"] = new { type = "string", description = "Relativer Dateipfad" }
["path"] = new { type = "string", description = "Relativer Dateipfad" },
["offset"] = new { type = "integer", description = "Erste Zeile die gelesen werden soll (1-basiert, Default: 1)" },
["limit"] = new { type = "integer", description = "Maximale Anzahl Zeilen die gelesen werden sollen (Default: 2000)" }
},
required = new[] { "path" }
}
@@ -365,7 +367,19 @@ public class ToolService
var path = ResolvePath(input.GetProperty("path").GetString() ?? "", workspace);
if (!File.Exists(path))
return $"Fehler: Datei nicht gefunden: {WorkspaceHelper.GetRelativePath(workspace, path)}";
return File.ReadAllText(path);
var allLines = File.ReadAllLines(path);
var totalLines = allLines.Length;
var offset = input.TryGetProperty("offset", out var offsetProp) ? Math.Max(1, offsetProp.GetInt32()) : 1;
var limit = input.TryGetProperty("limit", out var limitProp) ? Math.Max(1, limitProp.GetInt32()) : 2000;
var startIndex = offset - 1;
if (startIndex >= totalLines)
return $"Fehler: offset ({offset}) ist größer als die Anzahl der Zeilen ({totalLines}).";
var selectedLines = allLines.Skip(startIndex).Take(limit).ToArray();
var result = string.Join("\n", selectedLines);
var endLine = startIndex + selectedLines.Length;
if (endLine < totalLines)
result += $"\n\n[Hinweis: Datei hat {totalLines} Zeilen, nur Zeilen {offset}–{endLine} angezeigt. Nutze offset/limit um mehr zu lesen.]";
return result;
}
case "write_file":
{