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:
1 parent
b45abab0aa
commit
20d891c9ef
2 files changed
+18
-4
No files matched your search
+17
-3
@@ -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":
|
||||
{
|
||||
|
||||
Reference in new issue
Block a user