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:
@@ -26,10 +26,18 @@ AUFTRAG:
|
|||||||
4. Übersetze fremdsprachige Überschriften und Inhalte in die Ausgabesprache
|
4. Übersetze fremdsprachige Überschriften und Inhalte in die Ausgabesprache
|
||||||
|
|
||||||
STRUKTUR:
|
STRUKTUR:
|
||||||
- Wenn die Meldungen thematisch klar einen einzelnen Strang behandeln: Fließtext ohne Überschriften
|
- 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-Zwischenüberschriften (##)
|
- Wenn verschiedene Aspekte oder Themenfelder aufkommen (z.B. Ereignis + Reaktionen + Hintergrund): Gliedere mit kurzen Markdown-Zwischenueberschriften (##)
|
||||||
- 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, Ueberschriften und Tabellen nur wenn sie dem Leser helfen
|
||||||
- Die Entscheidung liegt bei dir — Überschriften 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:
|
REGELN:
|
||||||
- Neutral und sachlich - keine Wertungen oder Spekulationen
|
- 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
|
5. Entferne nur nachweislich widerlegte Informationen. Behalte alle thematischen Abschnitte bei, auch wenn sie nicht durch neue Meldungen aktualisiert werden
|
||||||
|
|
||||||
STRUKTUR:
|
STRUKTUR:
|
||||||
- Fließtext oder mit Markdown-Zwischenüberschriften (##) — je nach Komplexität
|
- Fliesstext oder mit Markdown-Zwischenueberschriften (##), je nach Komplexitaet
|
||||||
- Wenn sich Daten strukturiert vergleichen lassen (z.B. Produkte, Unternehmen, Kennzahlen, Modelle), verwende eine Markdown-Tabelle (| Spalte1 | Spalte2 | ... mit Trennzeile |---|---|)
|
|
||||||
- KEIN Fettdruck (**) verwenden
|
- 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:
|
REGELN:
|
||||||
- Neutral und sachlich - keine Wertungen oder Spekulationen
|
- Neutral und sachlich - keine Wertungen oder Spekulationen
|
||||||
- KEINE Gedankenstriche (—, –) verwenden — stattdessen Kommas, Doppelpunkte oder neue Saetze
|
- KEINE Gedankenstriche (—, –) verwenden — stattdessen Kommas, Doppelpunkte oder neue Saetze
|
||||||
|
|||||||
@@ -2653,6 +2653,36 @@ a:hover {
|
|||||||
color: var(--text-secondary);
|
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 Tables === */
|
||||||
.summary-table-wrap {
|
.summary-table-wrap {
|
||||||
overflow-x: auto;
|
overflow-x: auto;
|
||||||
|
|||||||
@@ -327,6 +327,14 @@
|
|||||||
</button>
|
</button>
|
||||||
</div>
|
</div>
|
||||||
<textarea id="inc-description" placeholder="Weitere Details zum Vorfall (optional)"></textarea>
|
<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>
|
||||||
<div class="form-group">
|
<div class="form-group">
|
||||||
|
|||||||
@@ -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() {
|
async generateDescription() {
|
||||||
const title = document.getElementById('inc-title').value.trim();
|
const title = document.getElementById('inc-title').value.trim();
|
||||||
const description = document.getElementById('inc-description').value.trim();
|
const description = document.getElementById('inc-description').value.trim();
|
||||||
@@ -1694,9 +1726,22 @@ async generateDescription() {
|
|||||||
textarea.readOnly = true;
|
textarea.readOnly = true;
|
||||||
textarea.classList.add('textarea--loading');
|
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 {
|
try {
|
||||||
const result = await API.enhanceDescription(title, description || null, type, this._enhanceController.signal);
|
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);
|
_autoResizeTextarea(textarea);
|
||||||
} catch (err) {
|
} catch (err) {
|
||||||
if (err.name !== 'AbortError') {
|
if (err.name !== 'AbortError') {
|
||||||
|
|||||||
In neuem Issue referenzieren
Einen Benutzer sperren