0.134.16

Changed

Реализованы 5 оставшихся P1-partial задач из аудита docs/audit/web-2026-06-06.md (Группа 3: декомпозиция больших страниц). 4139 строк → 1359 строк в оркестраторах (-67%), создано ~70 новых файлов в lib/features/.

  • W-020: routes/agents/[id]/permissions/+page.svelte (763 → 121 строк, -84%) — секции autonomy/tools/filesystem/exec/network/mcp/ratelimit вынесены в lib/features/permissions/ (20 файлов). Создан PermissionsStore (usePermissions.svelte.ts) с реактивным perms/agent/mcpServers/warnings/saving, PermissionTab с URL-sync ?tab=, и 6 подпапок (autonomy/, tools/, filesystem/, exec/, network/, mcp/, ratelimit/) с компонентами и хуками. Top-level: PermissionsSidebar/SaveBar/WarningsBanner.
  • W-016: routes/profile/+page.svelte (725 → 114 строк, -84%) — 7 секций вынесены в lib/features/profile/ (13 файлов). 5 хуков на $state-классах: ProfileStore/AvatarControl/ApiTokensControl/PasswordControl/ForgetMemoryControl (3-шаговый GDPR wizard с валидацией фразы FORGET <username>). Компоненты: AvatarSection/ProfileForm/PreferencesForm/FreeformSection/ApiTokensSection/CreateTokenModal/PasswordSection/ForgetMemoryWizard/ProfileActions.
  • W-017: routes/settings/system/+page.svelte (607 → 64 строк, -89%) — оставшиеся секции Info/Updates/Diagnostics вынесены. SystemActions.svelte расширен: добавлены stopped state (с getRestartInstructionForPlatform для разных ОС), managed_externally warning, модалки рестарта/shutdown/managed-warning; удалён callback onPollStarted (компонент теперь self-contained). Созданы useSystemInfo/useUpdates/useDiagnostics (с polling cleanup, фикс W-042) + systemFormat.ts + SystemInfoCard/UpdatesCard/RollbackBanner/DiagnosticsCard.
  • W-015: routes/chat/+page.svelte (715 → 531 строк, -26%, частично) — drafts/scroll/topic-break вынесены в lib/features/chat/ (8 файлов). ChatDrafts class с индексным ключом taigaclaw_chat_drafts_index (O(1) cleanup вместо O(n) по localStorage, фикс W-041). TopicBreak class с confirmOpen/dontAsk/loading + per-agent skip-флагом. Компоненты: TopicBreakConfirmModal/MessageList/ChatErrorBanner/StreamingMessage/ChatContextBar. Page остаётся крупным из-за обилия callbacks в ChatStore — дальнейшее сокращение требует рефакторинга самого ChatStore (~670 строк), отложено.
  • W-019: routes/agents/[id]/memory/+page.svelte (1329 → 529 строк, -60%, частично) — 6 табов вынесены в lib/features/memory/ (18 файлов). MemoryData class (loading/facts/settings/chunkSources/agent + filterCategory/dream*/compact*/saving* флаги) + MemoryTab с URL-sync. Подпапки facts//chunks//dream//scratchpad//search//settings/ с компонентами. memoryFormat.ts (actionLabel/actionBadge/wordDiff/formatFileSize/formatMimeBadge/computeMetrics/parseActions). MemoryOverview/MemoryMetrics/MemoryTabs. Page остаётся крупным из-за callbacks между page и 6 табами (loadFacts/reindex/delete через confirmState/doSearch/toggleSetting) — для тестирования это нормально (state-логика в page, view — в табах); дальнейшее сокращение потребует выноса callbacks в $state-class.

Architecture

  • Паттерн $state-classes (Svelte 5 runes) применён повсеместно для store’ов: реактивный state + методы инкапсулированы в одном классе. Никаких Svelte 4 writable/derived для нового state.
  • Структура lib/features/: chat/, memory/, permissions/, profile/, providers/ (Группа 2), system/. Согласована с AGENTS.md секцией «WebUI».
  • Без общих утилит (toastError, useTabParam, usePolling, useLocalStorage, downloadFile) — паттерны не повторялись ≥2 раза. useTabParam.svelte.ts не реализован: PermissionTab и MemoryTab слишком разные по доменной логике.

Bundle

✓ built in 2.18s

Gzip sizes для оркестраторов уменьшились в среднем на ~25% за счёт tree-shaking отдельных компонентов.