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:
1 parent
d88b046575
commit
07ea0fcafb
3 files changed
+29
-26
No files matched your search
@@ -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)
|
||||||
|
|||||||
@@ -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
@@ -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>
|
||||||
|
|||||||
Reference in new issue
Block a user