1.5.0

Added (#392)

  • Каталог моделей /settings/models («Все модели»): поддержка изображений и фоллбэк видны прямо в строке списка, плюс фильтры (#392). Бейдж «vision» (success) / «текст» (новый нейтральный вариант muted у Badge) выводится у каждой LLM-модели по эффективному значению — раньше бейдж горел только при явном ручном флаге, модели из синхронизации (auto/null) не бейджились вовсе; суффикс «· auto» помечает значения, определённые реестром capabilities, а не вручную. Для этого в API добавлено вычисляемое (не хранится в БД) поле supports_vision_effective — резолв вынесен в общую функцию providers.EffectiveSupportsImage(name, override) (переиспользуется рантаймом агента вместо дублирования в supportsImageInput), поле заполняется во всех выдающих модели эндпоинтах (GET /models, GET/PUT/POST /models/{id}, GET /agents/{id}/models). Фоллбэк-цепочка — компактно в мета-строке карточки (первые 2 метки через cachedModelLabel + «+N»), полная остаётся в «Детали»; распарсенный JSON кэшируется $derived-картой (фильтр, подписи строк и «Детали» не репарсят fallback_model_ids на каждый тик). Новые фильтры каталога: по vision (Все / Поддерживает / Не поддерживает; применяется только к LLM — при активном фильтре на вкладках «Все»/«Embedding» показывается подсказка, а embedding-модели отсекаются) и по фоллбэку (Все / С фоллбэком / Без фоллбэка), в комбинации с существующими kind-табами; пустой список при активных фильтрах показывает «Ничего не найдено» вместо сбивающего «Нет моделей».
  • Нейтральный бейдж счётчика «Агенты» в сайдбаре (#392): .sidebar-count-badge переведён с зелёных pine-токенов (--c-pine-bg/-border/-) на нейтральные --c-dimmed/--c-label/--c-field — статичное значение (число агентов) больше не конкурирует за внимание с активным состоянием навигации; обе темы используют существующие токены без новых.

Docs (#392)

  • docs/features-matrix.md: §18 — строки «Каталог моделей: vision/фоллбэк в строке + фильтры (#392)» и «Нейтральный бейдж счётчика в сайдбаре (#392)»; §Models — уточнена строка фоллбэк-цепочки (UI в строке каталога); §API — GET /v1/models дополнен вычисляемым supports_vision_effective.

Review (#392)

  • ocr review (3 прогона) — закрыты: high «AgentModelHandler.List отдаёт zero-value supports_vision_effective» (пакетная resolveEffectiveVision, вызывается из обоих хендлеров); medium «фильтр/vision drop embedding без объяснения» (inline-подсказка «Vision-фильтр применяется только к LLM» + EmptyState «Ничего не найдено» с расширенной подсказкой); medium «репарс fallback_model_ids на каждый тик» (fallbackIDCache/fallbackSummaries $derived-карты — единый парс для фильтра, строк и «Детали»); medium «TS-тип противоречит wire-контракту» (поле сделано обязательным — Go сериализует всегда без omitempty, литералы в тестах дополнены). Отклонены с обоснованием: low «de-emphasis бейджа сайдбара» — это и есть цель изменения (статичное значение); low «повреждённая фоллбэк-цепочка в фильтре неотличима» — осознанное упрощение, бэкенд нормализует raw при первом сохранении (зафиксировано комментарием); low «pluralisation +N» — формат счётчика стандартен для UI. Проверки: go test ./... (37 пакетов), golangci-lint (0 issues), npm run check (0/0), npm test (888), make build-all, make build-cross (6 платформ) — зелёные.