Zeilenreferenz-Hinweis (cat -n) aus System-Prompt entfernt und automatisch an User-Nachricht angehängt

- System-Prompt: 3x cat-n Hinweise entfernt (Workspace-Block, toolAny-Erinnerung, Workspace-Erinnerung)
- chat.js: <hint> Tag mit cat-n Hinweis wird automatisch angehängt wenn Datei-Refs Zeilennummern haben
- chat.js: Einzelne Zeilen (path:11) werden jetzt korrekt geparst und angezeigt
- chat.css: hint Tag Styling, file-ref-chip Spacing angepasst
This commit is contained in:
Meleki committed 2026-03-04 11:59:19 +01:00
1 parent d88b046575
commit 07ea0fcafb
3 files changed
+29 -26

No files matched your search

+3 -16
View File
@@ -68,9 +68,7 @@ JEDE Datei-Operation und JEDER Shell-Befehl MUSS über einen Tool-Aufruf erfolge
Du hast Tools zur Verfügung (read_file, write_file, edit_file, list_files, delete_file, execute). Benutze sie um Dateien zu lesen, schreiben und bearbeiten. Du hast Tools zur Verfügung (read_file, write_file, edit_file, list_files, delete_file, execute). Benutze sie um Dateien zu lesen, schreiben und bearbeiten.
Der Workspace-Pfad ist: `{session.Workspace}` Der Workspace-Pfad ist: `{session.Workspace}`
Alle Dateipfade in Tool-Aufrufen müssen relativ zu diesem Workspace sein oder absolute Pfade verwenden, die mit diesem Pfad beginnen. Alle Dateipfade in Tool-Aufrufen müssen relativ zu diesem Workspace sein oder absolute Pfade verwenden, die mit diesem Pfad beginnen."
Wenn der User auf eine bestimmte Zeile in einer Datei verweist (z.B. `[Datei: foo.txt:11]`), zähle Leerzeilen immer mit. Verwende `cat -n` oder ein ähnliches Tool um Zeilennummern exakt zu bestimmen - NIEMALS Leerzeilen beim Zählen überspringen."
}); });
} }
@@ -193,21 +191,10 @@ Wenn der User auf eine bestimmte Zeile in einer Datei verweist (z.B. `[Datei: fo
Icon = "fa-exclamation-circle", Icon = "fa-exclamation-circle",
Label = "System · Erinnerung (Workspace + ToolChoice: any)", Label = "System · Erinnerung (Workspace + ToolChoice: any)",
Content = @"## ERINNERUNG Content = @"## ERINNERUNG
Diese Regel hat höchste Priorität und gilt für JEDE Antwort: Wenn eine Datei gelesen, geschrieben, bearbeitet, erstellt oder gelöscht werden soll, oder ein Befehl ausgeführt werden soll, MUSS der entsprechende Tool-Aufruf erfolgen. Ohne Tool-Aufruf ist NICHTS passiert. Beschreibe keine Änderungen - führe sie durch. Diese Regel hat höchste Priorität und gilt für JEDE Antwort: Wenn eine Datei gelesen, geschrieben, bearbeitet, erstellt oder gelöscht werden soll, oder ein Befehl ausgeführt werden soll, MUSS der entsprechende Tool-Aufruf erfolgen. Ohne Tool-Aufruf ist NICHTS passiert. Beschreibe keine Änderungen - führe sie durch."
Bei Zeilenreferenzen (z.B. `[Datei: foo.txt:11]`) IMMER `cat -n` verwenden um die exakte Zeile zu bestimmen. NIEMALS Leerzeilen beim Zählen überspringen."
});
}
else if (!string.IsNullOrWhiteSpace(session.Workspace))
{
// Zeilenreferenz-Hinweis als eigener Erinnerungsblock wenn kein toolAny
blocks.Add(new PromptBlock
{
Icon = "fa-exclamation-circle",
Label = "System · Erinnerung (Workspace)",
Content = "## ERINNERUNG\nBei Zeilenreferenzen (z.B. `[Datei: foo.txt:11]`) IMMER `cat -n` verwenden um die exakte Zeile zu bestimmen. NIEMALS Leerzeilen beim Zählen überspringen."
}); });
} }
// kein extra Erinnerungsblock ohne toolAny – Zeilenreferenz-Hinweise kommen direkt über die Nachricht
var marked = markedMessages?.Where(m => !string.IsNullOrWhiteSpace(m.Content)).ToList(); var marked = markedMessages?.Where(m => !string.IsNullOrWhiteSpace(m.Content)).ToList();
if (marked != null && marked.Count > 0) if (marked != null && marked.Count > 0)
+8 -2
View File
@@ -88,6 +88,11 @@
word-break: break-word; word-break: break-word;
} }
.msg hint {
opacity: var(--semi-transparent);
font-size: var(--font-size);
}
.msg:not(.markdown) { .msg:not(.markdown) {
white-space: pre-wrap; white-space: pre-wrap;
} }
@@ -610,8 +615,9 @@
.file-ref-chip { .file-ref-chip {
display: inline-flex; display: inline-flex;
align-items: center; align-items: center;
gap: .3em; gap: var(--badge-spacing);
padding: .15em .5em; margin: 0 2px 3px 0;
padding: var(--badge-padding);
background: var(--f2-bg); background: var(--f2-bg);
border: var(--border-width) solid var(--f2-border); border: var(--border-width) solid var(--f2-border);
border-radius: var(--border-radius); border-radius: var(--border-radius);
+18 -8
View File
@@ -85,11 +85,18 @@ async function sendMessage() {
// Refs in den Text einbauen // Refs in den Text einbauen
if (pendingRefs.length > 0) { if (pendingRefs.length > 0) {
const refTags = pendingRefs.map(r => { const refLines = pendingRefs.map(r => {
if (r.from && r.to) return `[Datei: ${r.path}:${r.from}-${r.to}]`; if (r.from && r.to && r.from !== r.to) return `[Datei: ${r.path}:${r.from}-${r.to}]`;
if (r.from) return `[Datei: ${r.path}:${r.from}]`;
return `[Datei: ${r.path}]`; return `[Datei: ${r.path}]`;
}); });
msgText = refTags.join('\n') + (msgText ? '\n' + msgText : ''); msgText = refLines.join(' ') + '\n' + msgText;
if (pendingRefs.some(r => r.from)) {
if (pendingRefs.length > 1)
msgText += `\n<hint>Lies referenzierte Dateien mit \`cat -n\`.</hint>`;
else
msgText += `\n<hint>Lies die referenzierte Datei mit \`cat -n\`.</hint>`;
}
clearPendingRefs(); clearPendingRefs();
} }
@@ -330,10 +337,13 @@ function removePendingFile(index) {
// ── Workspace Refs ── // ── Workspace Refs ──
function addPendingRef(ref) { function addPendingRef(ref) {
// ref = "path" oder "path:from-to" // ref = "path", "path:line" oder "path:from-to"
const match = ref.match(/^(.+?):(\d+)-(\d+)$/); const rangeMatch = ref.match(/^(.+?):(\d+)-(\d+)$/);
if (match) { const lineMatch = !rangeMatch && ref.match(/^(.+?):(\d+)$/);
pendingRefs.push({ path: match[1], from: parseInt(match[2]), to: parseInt(match[3]) }); if (rangeMatch) {
pendingRefs.push({ path: rangeMatch[1], from: parseInt(rangeMatch[2]), to: parseInt(rangeMatch[3]) });
} else if (lineMatch) {
pendingRefs.push({ path: lineMatch[1], from: parseInt(lineMatch[2]), to: parseInt(lineMatch[2]) });
} else { } else {
pendingRefs.push({ path: ref, from: null, to: null }); pendingRefs.push({ path: ref, from: null, to: null });
} }
@@ -361,7 +371,7 @@ function renderRefPreview() {
} }
container.innerHTML = pendingRefs.map((r, i) => { container.innerHTML = pendingRefs.map((r, i) => {
const label = r.from && r.to ? `${r.path}:${r.from}-${r.to}` : r.path; const label = r.from && r.to && r.from !== r.to ? `${r.path}:${r.from}-${r.to}` : r.from ? `${r.path}:${r.from}` : r.path;
return `<div class="ref-preview-item"> return `<div class="ref-preview-item">
<span class="ref-icon"><i class="fa fa-folder-open"></i></span> <span class="ref-icon"><i class="fa fa-folder-open"></i></span>
<span class="ref-label">${esc(label)}</span> <span class="ref-label">${esc(label)}</span>