0.156.0

Fixed

  • WebUI: устранены все 231 предупреждение svelte-check — 0 ошибок, 0 предупреждений. npm run check (web/) теперь выдаёт 0 ошибок, 0 предупреждений (было 231 в 67 файлах). Все предупреждения относились к a11y (доступность) и реактивности Svelte 5 (runes), реальных ошибок типов не было.
  • state_referenced_locally (50): паттерн let agentId = data.agentId в 31 роуте agents/[id]/* переведён на let agentId = $derived(data.agentId) (runes-реактивность). Для mcp/permissions (захват agentId в конструктор store) — untrack(() => data.agentId). В 4 компонентах-редакторах (CronJobEditor, SkillEditor, PermanentMemoryEditor, HeartbeatTaskEditor) инициализация формы из props обёрнута в untrack (editable snapshot).
  • a11y_label_has_associated_control (94): всем <label> в 24 файлах форм проставлены for/id для связи с контролами. Read-only <div>-поля (users/[id]) — <label> заменён на <span>.
  • a11y_click_events_have_key_events (27) + a11y_no_static_element_interactions (23) + a11y_interactive_supports_focus (6): ui/Modal.svelte почищен (tabindex/onkeydown, убран избыточный stopPropagation). 9 hand-rolled модалок приведены к единому паттерну (target-check onclick, Escape onkeydown, role/aria/tabindex). Side-panel overlays — role="presentation". WorkspaceMDViewer: tree/drop-zones — ARIA-роли. DreamTab: кликабельная карточка-аккордеон → role="button" + tabindex + onkeydown.
  • a11y_consider_explicit_label (13): иконочные кнопки (удалить/info) — aria-label. 4 hand-rolled toggle-переключателя — role="switch" + aria-checked + aria-label + focus-visible ring.
  • element_invalid_self_closing_tag (4): <option value={tz} /><option value={tz}></option> (4 timezone datalist’а).
  • svelte_component_deprecated (1): <svelte:component this={KGGraphCmp}><KGGraphCmp .../> (runes, kg/+page.svelte).
  • non_reactive_update (1): SvelteSet без $state (FavoritesPanel) — $state(new SvelteSet<number>()) + прямая мутация.
  • block_empty (1): пустая ветка {#if} (MessageList) — svelte-ignore.
  • css_unused_selector (11): false positive (стили для {@html} в MarkdownRenderer) — svelte-ignore.
  • Проверки: npm run check — 0/0; npm test — 571/571; make build-webui — success; цикл ocr review — валидные замечания устранены (focus-visible ring на toggle’ах, : number аннотация, тип PageData), невалидные обоснованно отклонены.