0.157.1

Added

  • WebUI: бейдж состояния задач в кнопке «Задачи» шапки чата. Кнопка «Задачи» в ChatHeader.svelte (десктоп) теперь подсвечивает верхнеуровневое состояние задачника агента, не требуя открытия панели: при отсутствии активных задач — как раньше (иконка + «Задачи»); в работе — пилюля completed/active нейтральным цветом; когда все активные задачи выполнены — та же пилюля зелёным (--c-badge-green*). title кнопки динамический: «Задачи агента: N из M выполнено». Список грузится один раз за сессию для каждого агента (todosStore.isLoaded), далее актуальность поддерживается WS-событием todo.updated — счётчик обновляется в реальном времени. Отменённые задачи (cancelled) исключены из знаменателя (active = total − cancelled), поэтому не мешают достижению «всё сделано». Мобильный kebab-пункт без изменений.
  • web/src/lib/stores/todos.svelte.tssummary() расширена полями cancelled и active; добавлен isLoaded(agentId) (eager-once загрузка без повторных HTTP-запросов при повторной смене агента); экспортирован EMPTY_TODOS_SUMMARY (единая форма сводки, без инлайн-литералов и дублирования типа).
  • web/src/lib/components/chat/ChatHeader.svelte — импорт store + EMPTY_TODOS_SUMMARY; $effect загрузки; derived-сводка (todosSummary, todosActive, todosAllDone); бейдж + CSS (.ch-todo-badge / .ch-todo-badge-done).
  • Проверки: npm run check — 0/0; цикл ocr review — валидные замечания устранены (eager-once загрузка через isLoaded, единый тип сводки через EMPTY_TODOS_SUMMARY без as const), невалидные отклонены (стилистика имени derived; skeleton для декоративного бейджа — over-engineering).