0.134.53

Fixed

Метрики: оживление мёртвых счётчиков + новые секции в UI

Из аудита системы метрик обнаружено: из ~30 метрик реально собирались только 9 (bus, auth, kg, memory). Остальные (llm, http, sessions, tools, actor, cron) — мёртвый код. Кроме того, страница /settings/metrics не показывала секции KG и Memory, хотя API их отдаёт.

Backend

  • LLM (runner.go): RecordLLMCall / RecordLLMError теперь вызываются после каждого LLM-запроса. RecordLLMTokensBreakdown подключён в actor.go при recordUsage (системные / RAG / история).
  • HTTP (middleware/logging.go): RecordHTTPRequest теперь инкрементируется для каждого HTTP-запроса (errors — для статусов ≥500).
  • Tools (runner.go): RecordToolCall вызывается для каждого результата инструмента.
  • Actor (actor.go): RecordActorHandle замеряет длительность обработки входящего сообщения. RecordMaxIterations срабатывает при достижении лимита итераций. RecordTurn фиксирует количество итераций на тур.
  • Sessions (loop.go): добавлены RecordSessionCreated / IncSessionsActive / DecSessionsActive. Создание и удаление session-actor теперь инструментированы.
  • Cron (cron/service.go): RecordCronMissed инкрементируется в recalcAllJobs для просроченных задач (every/cron), которые пересчитываются вместо выполнения.
  • LLMLastCall: новое поле last_call_at (RFC3339) в JSON-снапшоте и Prometheus-выводе.

Frontend

  • Страница /settings/metrics: добавлены 2 новые секции — Граф знаний (KG) и Память (Memory) — с глобальными счётчиками и per-agent gauges.
  • LLM-секция: добавлено поле tokens_cache_creation (кэш-запись).
  • API-клиент: api.metrics() типизирован через MetricsSnapshot (ранее возвращал unknown).
  • Удалён дублирующий интерфейс из svelte-файла, используется централизованный тип из types.ts.

Tests

  • internal/metrics/metrics_test.go: расширено с 12 до 23 тестов. Покрыты все Record-методы (включая новые Session-методы), LLMLastCall в Snapshot, KG- и Memory-gauges, Prometheus-формат, singleton.