Prompt History und Verbrauchsauswertung (#660), englische Hauptsprache (#661)

Prompt history: every run records its transcript (task, each model step with
tokens and cost, tool calls and results, engine follow-ups) - bounded in size,
scrubbed of recognisable secrets, system prompts stored once per text.
Retention in days per instance (default 14) and per agent (0 = never, -1 =
forever); an hourly janitor deletes what is past it, "never" also purges.

Usage analysis over run receipts: filter by period, agent, model, event, status,
cost and free text; sort by every column; totals over the whole filter; hourly
or daily series grouped by agent, model or event; markers for budget denials and
model changes; run detail with receipt, transcript, tool calls and approvals.

WebUI: Analysis > Token usage > Runs / Timeline, run detail, Prompt History with
retention settings. New code, comments and texts in English; texts come from
language packs (i18n/en.json, de.json) via modules/i18n.js. CLAUDE.md records
English as the main language.

Version 0.1.12.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
Richard
2026-09-19 15:33:09 +02:00
co-authored by Claude Opus 5
parent 2f0361278b
commit 5adf4c1ca6
40 changed files with 3521 additions and 10 deletions
@@ -0,0 +1,141 @@
{
"nav.usage.runs": "Läufe",
"nav.usage.timeline": "Zeitverlauf",
"nav.promptHistory": "Prompt-Verlauf",
"common.loading": "Lade…",
"common.previous": "Zurück",
"common.next": "Weiter",
"filter.range": "Zeitraum",
"filter.range.24h": "Letzte 24 Stunden",
"filter.range.7d": "Letzte 7 Tage",
"filter.range.30d": "Letzte 30 Tage",
"filter.range.90d": "Letzte 90 Tage",
"filter.range.custom": "Eigener…",
"filter.from": "Von",
"filter.to": "Bis",
"filter.agent": "Agent",
"filter.model": "Modell",
"filter.event": "Ereignis",
"filter.status": "Status",
"filter.all": "Alle",
"filter.minCost": "Kosten ab ($)",
"filter.search": "Suche",
"filter.search.placeholder": "Aufgabe, Ergebnis, Lauf-ID…",
"filter.apply": "Anwenden",
"filter.reset": "Zurücksetzen",
"source.task": "Aufgabe",
"source.direct": "Direkter Lauf",
"source.approval": "Freigabe",
"source.webview": "Chat (Fenster)",
"source.webui": "Chat (Web)",
"source.telegram": "Telegram",
"source.agentcomm": "Delegation",
"source.job": "Job",
"source.unknown": "Unbekannt",
"runs.title": "Tokennutzung › Läufe",
"runs.unavailable": "Keine Verbrauchsdaten",
"runs.totals": "Summen für diesen Filter",
"runs.total.runs": "Läufe",
"runs.total.prompt": "Prompt-Tokens",
"runs.total.completion": "Antwort-Tokens",
"runs.total.cached": "Aus dem Cache",
"runs.total.cost": "Kosten",
"runs.total.notRun": "Abgewiesen (Budget, Herunterfahren)",
"runs.unknownCost": "{n} Lauf/Läufe ohne bekannten Preis sind mit 0 $ gezählt.",
"runs.empty.title": "Keine Läufe",
"runs.empty.text": "Kein Lauf passt zu diesem Filter.",
"runs.list": "Läufe",
"runs.page": "{from}–{to} von {total}",
"runs.col.time": "Zeit",
"runs.col.agent": "Agent",
"runs.col.model": "Modell",
"runs.col.event": "Ereignis",
"runs.col.status": "Status",
"runs.col.steps": "Schritte",
"runs.col.prompt": "Prompt",
"runs.col.completion": "Antwort",
"runs.col.cost": "Kosten",
"runs.col.duration": "Dauer",
"detail.back": "← Zurück",
"detail.title": "Lauf",
"detail.notFound": "Lauf nicht gefunden",
"detail.runId": "Lauf-ID",
"detail.tokens": "Tokens",
"detail.tokensValue": "{prompt} Prompt · {completion} Antwort · {cached} aus dem Cache",
"detail.result": "Ergebnis",
"detail.receipt": "Beleg",
"detail.transcript": "Prompt und Antwort",
"detail.transcript.disabled": "Für diesen Agenten ist der Prompt-Verlauf abgeschaltet (Aufbewahrung: nie).",
"detail.transcript.unavailable": "Diese Instanz zeichnet keinen Prompt-Verlauf auf.",
"detail.transcript.missing": "Kein Transkript zu diesem Lauf – er lief vor Beginn der Aufzeichnung oder ist über seine Aufbewahrungsfrist hinaus.",
"detail.transcript.truncated": "Dieser Lauf hat die Größengrenze des Prompt-Verlaufs überschritten; spätere Einträge sind gekürzt.",
"detail.transcript.size": "{n} Einträge, {chars} Zeichen",
"detail.systemPrompt": "Systemprompt ({n} Zeichen)",
"detail.entry.user": "Auftrag / Nachricht",
"detail.entry.engine": "Nachfrage der Engine",
"detail.entry.event": "Ereignis",
"detail.entry.assistant": "Modellschritt {n}",
"detail.entry.usage": "{prompt} rein · {completion} raus",
"detail.entry.tool_result": "Ergebnis: {tool}",
"detail.entry.call": "Ruft {tool} auf",
"detail.entry.clipped": "gekürzt",
"detail.tool": "Werkzeug",
"detail.arguments": "Argumente",
"detail.toolCalls": "Werkzeugaufrufe",
"detail.toolCalls.hint": "Aus dem Audit-Log – auch ohne Transkript vorhanden.",
"detail.approvals": "Zur Freigabe vorgelegt",
"timeline.title": "Tokennutzung › Zeitverlauf",
"timeline.chart": "Zeitverlauf",
"timeline.metric": "Maß",
"timeline.metric.cost": "Kosten",
"timeline.metric.tokens": "Tokens",
"timeline.metric.runs": "Läufe",
"timeline.groupBy": "Nach",
"timeline.groupBy.agent": "Agent",
"timeline.groupBy.model": "Modell",
"timeline.groupBy.source": "Ereignis",
"timeline.bucket": "Je",
"timeline.bucket.hour": "Stunde",
"timeline.bucket.day": "Tag",
"timeline.tooltipRuns": "{n} Lauf/Läufe",
"timeline.event.budget_exceeded": "Budget erschöpft",
"timeline.event.model_changed": "Modell gewechselt",
"timeline.hint": "Ein Klick auf einen Balken zeigt dessen Läufe.",
"history.title": "Prompt-Verlauf",
"history.intro": "Prompt und Antwort jedes Laufs, durchsuchbar über das ganze Gespräch samt Werkzeugaufrufen und Ergebnissen.",
"history.unavailable": "Prompt-Verlauf nicht verfügbar",
"history.empty.title": "Nichts aufgezeichnet",
"history.empty.text": "Keine Transkripte in diesem Zeitraum. Die Aufzeichnung beginnt mit Version 0.1.12 und folgt der Aufbewahrung unten.",
"history.empty.search": "Kein Transkript enthält diesen Text.",
"history.list": "Transkripte ({n})",
"history.prompt": "Prompt",
"history.response": "Antwort",
"history.truncated": "Größengrenze erreicht ({chars} Zeichen gespeichert).",
"history.settings.title": "Aufbewahrung",
"history.settings.intro": "Wie lange Prompts und Antworten aufbewahrt werden. Die Vorgabe gilt für jeden Agenten ohne eigene Einstellung; „nie“ löscht auch, was vorher aufgezeichnet wurde.",
"history.settings.default": "Vorgabe für alle Agenten:",
"history.settings.agent": "Agent",
"history.settings.retention": "Aufbewahrung",
"history.settings.effective": "Gilt",
"history.settings.mode": "Aufbewahrung",
"history.settings.mode.inherit": "Vorgabe",
"history.settings.mode.never": "Nie aufzeichnen",
"history.settings.mode.days": "Tage",
"history.settings.mode.forever": "Unbegrenzt",
"history.settings.days": "Tage",
"history.settings.daysUnit": "Tage",
"history.settings.effective.never": "wird nicht aufgezeichnet",
"history.settings.effective.forever": "unbegrenzt",
"history.settings.effective.days": "{n} Tage",
"history.settings.save": "Aufbewahrung speichern",
"history.settings.saved": "Aufbewahrung gespeichert.",
"history.settings.failed": "Speichern fehlgeschlagen: {error}"
}