Feature: Analyse-Anweisungen (Direktiven) fuer Tabellen und Zusammenfassung

Nutzer koennen per Klick auf Chips Anweisungen zur Beschreibung
hinzufuegen: Zusammenfassung, Vergleichstabelle, Zeitverlauf,
Pro/Contra oder eigene Tabellen. Format: [TABELLE: ...] und
[ZUSAMMENFASSUNG]. Mehrere Anweisungen moeglich. Analyzer-Prompts
beachten diese Anweisungen verbindlich. Beschreibung-generieren
bewahrt bestehende Direktiven.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Dieser Commit ist enthalten in:
claude-dev
2026-04-10 18:37:04 +00:00
Ursprung 565ce84abf
Commit e0bcd85d90
4 geänderte Dateien mit 105 neuen und 7 gelöschten Zeilen

Datei anzeigen

@@ -26,10 +26,18 @@ AUFTRAG:
4. Übersetze fremdsprachige Überschriften und Inhalte in die Ausgabesprache
STRUKTUR:
- Wenn die Meldungen thematisch klar einen einzelnen Strang behandeln: Fließtext ohne Überschriften
- Wenn verschiedene Aspekte oder Themenfelder aufkommen (z.B. Ereignis + Reaktionen + Hintergrund): Gliedere mit kurzen Markdown-Zwischenüberschriften (##)
- Wenn sich Daten strukturiert vergleichen lassen (z.B. Produkte, Unternehmen, Kennzahlen, Modelle), verwende eine Markdown-Tabelle (| Spalte1 | Spalte2 | ... mit Trennzeile |---|---|)
- Die Entscheidung liegt bei dir — Überschriften und Tabellen nur wenn sie dem Leser helfen
- Wenn die Meldungen thematisch klar einen einzelnen Strang behandeln: Fliesstext ohne Ueberschriften
- Wenn verschiedene Aspekte oder Themenfelder aufkommen (z.B. Ereignis + Reaktionen + Hintergrund): Gliedere mit kurzen Markdown-Zwischenueberschriften (##)
- Die Entscheidung liegt bei dir, Ueberschriften und Tabellen nur wenn sie dem Leser helfen
BENUTZER-ANWEISUNGEN (aus dem KONTEXT-Feld):
Der Benutzer kann im KONTEXT spezielle Anweisungen in eckigen Klammern angeben:
- [TABELLE: Beschreibung] = Du MUSST eine Markdown-Tabelle erstellen die dieser Beschreibung entspricht. Platziere sie an der thematisch passenden Stelle im Text.
- [ZUSAMMENFASSUNG] = Du MUSST dem Lagebild eine kurze Zusammenfassung (3-5 Saetze) als ersten Abschnitt voranstellen, die die wichtigsten Erkenntnisse auf einen Blick liefert.
- Mehrere Anweisungen sind moeglich und muessen ALLE beachtet werden.
- Wenn KEINE solchen Anweisungen vorhanden sind, verwende Tabellen nur wenn es sich offensichtlich anbietet.
- Markdown-Tabellen-Format: | Spalte1 | Spalte2 | mit Trennzeile |---|---|
- Ignoriere leere [TABELLE: ]-Anweisungen ohne Beschreibung.
REGELN:
- Neutral und sachlich - keine Wertungen oder Spekulationen
@@ -130,10 +138,17 @@ AUFTRAG:
5. Entferne nur nachweislich widerlegte Informationen. Behalte alle thematischen Abschnitte bei, auch wenn sie nicht durch neue Meldungen aktualisiert werden
STRUKTUR:
- Fließtext oder mit Markdown-Zwischenüberschriften (##) je nach Komplexität
- Wenn sich Daten strukturiert vergleichen lassen (z.B. Produkte, Unternehmen, Kennzahlen, Modelle), verwende eine Markdown-Tabelle (| Spalte1 | Spalte2 | ... mit Trennzeile |---|---|)
- Fliesstext oder mit Markdown-Zwischenueberschriften (##), je nach Komplexitaet
- KEIN Fettdruck (**) verwenden
BENUTZER-ANWEISUNGEN (aus dem KONTEXT-Feld):
Der Benutzer kann im KONTEXT spezielle Anweisungen in eckigen Klammern angeben:
- [TABELLE: Beschreibung] = Du MUSST eine Markdown-Tabelle erstellen die dieser Beschreibung entspricht. Platziere sie an der thematisch passenden Stelle im Text. Aktualisiere bestehende Tabellen mit neuen Daten.
- [ZUSAMMENFASSUNG] = Du MUSST dem Lagebild eine kurze Zusammenfassung (3-5 Saetze) als ersten Abschnitt voranstellen.
- Mehrere Anweisungen sind moeglich und muessen ALLE beachtet werden.
- Wenn KEINE solchen Anweisungen vorhanden sind, verwende Tabellen nur wenn es sich offensichtlich anbietet.
- Markdown-Tabellen-Format: | Spalte1 | Spalte2 | mit Trennzeile |---|---|
REGELN:
- Neutral und sachlich - keine Wertungen oder Spekulationen
- KEINE Gedankenstriche (—, –) verwenden — stattdessen Kommas, Doppelpunkte oder neue Saetze

Datei anzeigen

@@ -2653,6 +2653,36 @@ a:hover {
color: var(--text-secondary);
}
/* === Directive Chips === */
.directive-chips {
display: flex;
flex-wrap: wrap;
align-items: center;
gap: 6px;
margin-top: 8px;
}
.directive-chips-label {
font-size: 11px;
color: var(--text-disabled);
margin-right: 4px;
}
.directive-chip {
padding: 3px 10px;
border-radius: 12px;
border: 1px solid var(--border);
background: transparent;
color: var(--text-tertiary);
font-size: 11px;
cursor: pointer;
transition: all 0.15s;
white-space: nowrap;
}
.directive-chip:hover {
border-color: var(--accent);
color: var(--accent);
background: rgba(59, 130, 246, 0.08);
}
/* === Summary Tables === */
.summary-table-wrap {
overflow-x: auto;

Datei anzeigen

@@ -327,6 +327,14 @@
</button>
</div>
<textarea id="inc-description" placeholder="Weitere Details zum Vorfall (optional)"></textarea>
<div class="directive-chips" id="directive-chips">
<span class="directive-chips-label">Analyse-Anweisungen:</span>
<button type="button" class="directive-chip" onclick="App.insertDirective('summary')" title="Kurze Zusammenfassung der wichtigsten Erkenntnisse als ersten Abschnitt voranstellen">Zusammenfassung</button>
<button type="button" class="directive-chip" onclick="App.insertDirective('compare')" title="Tabellarischer Vergleich, z.B. Produkte, Modelle oder Anbieter">Vergleichstabelle</button>
<button type="button" class="directive-chip" onclick="App.insertDirective('timeline')" title="Zeitlicher Verlauf der Ereignisse als Tabelle">Zeitverlauf</button>
<button type="button" class="directive-chip" onclick="App.insertDirective('procon')" title="Tabelle mit Pro- und Contra-Argumenten">Pro/Contra</button>
<button type="button" class="directive-chip" onclick="App.insertDirective('custom')" title="Eigene Tabellenanweisung eingeben">+ Eigene Tabelle</button>
</div>
</div>
<div class="form-group">

Datei anzeigen

@@ -1673,6 +1673,38 @@ const App = {
}
},
insertDirective(type) {
const textarea = document.getElementById('inc-description');
if (!textarea) return;
const directives = {
summary: '[ZUSAMMENFASSUNG]',
compare: '[TABELLE: Vergleiche ... nach ...]',
timeline: '[TABELLE: Zeitlicher Verlauf mit Datum und Ereignis]',
procon: '[TABELLE: Pro- und Contra-Argumente]',
custom: '[TABELLE: ]',
};
const directive = directives[type];
if (!directive) return;
// Duplikat-Check (ausser bei custom)
if (type !== 'custom' && textarea.value.includes(directive)) return;
var val = textarea.value;
if (val.length > 0 && !val.endsWith('\n')) val += '\n';
if (val.length > 0 && !val.endsWith('\n\n')) val += '\n';
val += directive;
textarea.value = val;
// Bei custom: Cursor vor die schliessende Klammer setzen
if (type === 'custom') {
textarea.focus();
var pos = val.length - 1;
textarea.setSelectionRange(pos, pos);
}
// Textarea-Groesse anpassen
if (typeof _autoResizeTextarea === 'function') _autoResizeTextarea(textarea);
},
async generateDescription() {
const title = document.getElementById('inc-title').value.trim();
const description = document.getElementById('inc-description').value.trim();
@@ -1694,9 +1726,22 @@ async generateDescription() {
textarea.readOnly = true;
textarea.classList.add('textarea--loading');
// Bestehende Direktiven sichern
var existingDirectives = [];
var directiveRegex = /\[(?:TABELLE:.*?|ZUSAMMENFASSUNG)\]/g;
var match;
while ((match = directiveRegex.exec(description)) !== null) {
existingDirectives.push(match[0]);
}
try {
const result = await API.enhanceDescription(title, description || null, type, this._enhanceController.signal);
textarea.value = result.description;
var newDesc = result.description;
// Gesicherte Direktiven wieder anhaengen
if (existingDirectives.length > 0) {
newDesc = newDesc.trimEnd() + '\n\n' + existingDirectives.join('\n');
}
textarea.value = newDesc;
_autoResizeTextarea(textarea);
} catch (err) {
if (err.name !== 'AbortError') {