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:
@@ -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}"
|
||||
}
|
||||
@@ -0,0 +1,141 @@
|
||||
{
|
||||
"nav.usage.runs": "Runs",
|
||||
"nav.usage.timeline": "Timeline",
|
||||
"nav.promptHistory": "Prompt History",
|
||||
|
||||
"common.loading": "Loading…",
|
||||
"common.previous": "Previous",
|
||||
"common.next": "Next",
|
||||
|
||||
"filter.range": "Period",
|
||||
"filter.range.24h": "Last 24 hours",
|
||||
"filter.range.7d": "Last 7 days",
|
||||
"filter.range.30d": "Last 30 days",
|
||||
"filter.range.90d": "Last 90 days",
|
||||
"filter.range.custom": "Custom…",
|
||||
"filter.from": "From",
|
||||
"filter.to": "To",
|
||||
"filter.agent": "Agent",
|
||||
"filter.model": "Model",
|
||||
"filter.event": "Event",
|
||||
"filter.status": "Status",
|
||||
"filter.all": "All",
|
||||
"filter.minCost": "Cost from ($)",
|
||||
"filter.search": "Search",
|
||||
"filter.search.placeholder": "Task, result, run id…",
|
||||
"filter.apply": "Apply",
|
||||
"filter.reset": "Reset",
|
||||
|
||||
"source.task": "Task",
|
||||
"source.direct": "Direct run",
|
||||
"source.approval": "Approval",
|
||||
"source.webview": "Chat (window)",
|
||||
"source.webui": "Chat (web)",
|
||||
"source.telegram": "Telegram",
|
||||
"source.agentcomm": "Delegation",
|
||||
"source.job": "Job",
|
||||
"source.unknown": "Unknown",
|
||||
|
||||
"runs.title": "Token usage › Runs",
|
||||
"runs.unavailable": "No usage data",
|
||||
"runs.totals": "Totals for this filter",
|
||||
"runs.total.runs": "Runs",
|
||||
"runs.total.prompt": "Prompt tokens",
|
||||
"runs.total.completion": "Completion tokens",
|
||||
"runs.total.cached": "From cache",
|
||||
"runs.total.cost": "Cost",
|
||||
"runs.total.notRun": "Refused (budget, shutdown)",
|
||||
"runs.unknownCost": "{n} run(s) without a known price are counted with 0 $.",
|
||||
"runs.empty.title": "No runs",
|
||||
"runs.empty.text": "No run matches this filter.",
|
||||
"runs.list": "Runs",
|
||||
"runs.page": "{from}–{to} of {total}",
|
||||
"runs.col.time": "Time",
|
||||
"runs.col.agent": "Agent",
|
||||
"runs.col.model": "Model",
|
||||
"runs.col.event": "Event",
|
||||
"runs.col.status": "Status",
|
||||
"runs.col.steps": "Steps",
|
||||
"runs.col.prompt": "Prompt",
|
||||
"runs.col.completion": "Response",
|
||||
"runs.col.cost": "Cost",
|
||||
"runs.col.duration": "Duration",
|
||||
|
||||
"detail.back": "← Back",
|
||||
"detail.title": "Run",
|
||||
"detail.notFound": "Run not found",
|
||||
"detail.runId": "Run id",
|
||||
"detail.tokens": "Tokens",
|
||||
"detail.tokensValue": "{prompt} prompt · {completion} response · {cached} from cache",
|
||||
"detail.result": "Result",
|
||||
"detail.receipt": "Receipt",
|
||||
"detail.transcript": "Prompt and response",
|
||||
"detail.transcript.disabled": "Prompt history is switched off for this agent (retention: never).",
|
||||
"detail.transcript.unavailable": "This instance does not record a prompt history.",
|
||||
"detail.transcript.missing": "No transcript for this run - it ran before recording started or is past its retention.",
|
||||
"detail.transcript.truncated": "This run exceeded the size limit of the prompt history; later entries are shortened.",
|
||||
"detail.transcript.size": "{n} entries, {chars} characters",
|
||||
"detail.systemPrompt": "System prompt ({n} characters)",
|
||||
"detail.entry.user": "Task / message",
|
||||
"detail.entry.engine": "Follow-up by the engine",
|
||||
"detail.entry.event": "Event",
|
||||
"detail.entry.assistant": "Model step {n}",
|
||||
"detail.entry.usage": "{prompt} in · {completion} out",
|
||||
"detail.entry.tool_result": "Result: {tool}",
|
||||
"detail.entry.call": "Calls {tool}",
|
||||
"detail.entry.clipped": "shortened",
|
||||
"detail.tool": "Tool",
|
||||
"detail.arguments": "Arguments",
|
||||
"detail.toolCalls": "Tool calls",
|
||||
"detail.toolCalls.hint": "From the audit log - available even without a transcript.",
|
||||
"detail.approvals": "Proposed for approval",
|
||||
|
||||
"timeline.title": "Token usage › Timeline",
|
||||
"timeline.chart": "Timeline",
|
||||
"timeline.metric": "Measure",
|
||||
"timeline.metric.cost": "Cost",
|
||||
"timeline.metric.tokens": "Tokens",
|
||||
"timeline.metric.runs": "Runs",
|
||||
"timeline.groupBy": "By",
|
||||
"timeline.groupBy.agent": "Agent",
|
||||
"timeline.groupBy.model": "Model",
|
||||
"timeline.groupBy.source": "Event",
|
||||
"timeline.bucket": "Per",
|
||||
"timeline.bucket.hour": "Hour",
|
||||
"timeline.bucket.day": "Day",
|
||||
"timeline.tooltipRuns": "{n} run(s)",
|
||||
"timeline.event.budget_exceeded": "Budget exhausted",
|
||||
"timeline.event.model_changed": "Model changed",
|
||||
"timeline.hint": "Click a bar to see its runs.",
|
||||
|
||||
"history.title": "Prompt History",
|
||||
"history.intro": "Prompt and response of every run, searchable over the whole conversation including tool calls and results.",
|
||||
"history.unavailable": "Prompt history not available",
|
||||
"history.empty.title": "Nothing recorded",
|
||||
"history.empty.text": "No transcripts in this period. Recording starts with version 0.1.12 and follows the retention below.",
|
||||
"history.empty.search": "No transcript contains this text.",
|
||||
"history.list": "Transcripts ({n})",
|
||||
"history.prompt": "Prompt",
|
||||
"history.response": "Response",
|
||||
"history.truncated": "Size limit reached ({chars} characters stored).",
|
||||
|
||||
"history.settings.title": "Retention",
|
||||
"history.settings.intro": "How long prompts and responses are kept. The default applies to every agent without its own setting; \"never\" also deletes what was recorded before.",
|
||||
"history.settings.default": "Default for all agents:",
|
||||
"history.settings.agent": "Agent",
|
||||
"history.settings.retention": "Retention",
|
||||
"history.settings.effective": "Applies",
|
||||
"history.settings.mode": "Retention",
|
||||
"history.settings.mode.inherit": "Default",
|
||||
"history.settings.mode.never": "Never record",
|
||||
"history.settings.mode.days": "Days",
|
||||
"history.settings.mode.forever": "Keep forever",
|
||||
"history.settings.days": "Days",
|
||||
"history.settings.daysUnit": "days",
|
||||
"history.settings.effective.never": "not recorded",
|
||||
"history.settings.effective.forever": "kept forever",
|
||||
"history.settings.effective.days": "kept {n} days",
|
||||
"history.settings.save": "Save retention",
|
||||
"history.settings.saved": "Retention saved.",
|
||||
"history.settings.failed": "Saving failed: {error}"
|
||||
}
|
||||
Reference in New Issue
Block a user