diff --git a/Services/ToolService.cs b/Services/ToolService.cs index 72464fe..5587d25 100644 --- a/Services/ToolService.cs +++ b/Services/ToolService.cs @@ -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 { - ["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": { diff --git a/TODO.md b/TODO.md index b73a3f8..d75015d 100644 --- a/TODO.md +++ b/TODO.md @@ -38,7 +38,7 @@ - [x] File Explorer: CodeMirror lässt sich horizontal nicht scroll - [x] Chat: Datum und Uhrzeit bei den Nachrichten anzeigen (Format: dd.MM.yyyy HH:mm:ss) - [x] Dashboard: Menu-Dropdown bei Cards sind abgeschnitten wenn die Card-Höhe nicht ausreicht (logisch, weil das Menu-Dropdown ein Child von der Card ist) -- [ ] Auto-scrolling deaktivieren, wenn man weiterhoch gescrollt hat, und er wieder fortsetzen wenn man ganz nach unten gescrollt hat +- [x] Auto-scrolling deaktivieren, wenn man weiterhoch gescrollt hat, und er wieder fortsetzen wenn man ganz nach unten gescrollt hat - [x] Anstelle von `[Bild: ...]`-Platzhalter direkt das gesendete Bild anzeigen ## Ideas / Backlog