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": "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}"
}