Возможности
- Мобильный компактный режим первого уровня — Рендерер переработан так, чтобы одно и то же дерево Electron React адаптировалось чисто к узким viewport. В первую очередь ориентировано на WebUI, но также автоматически активируется в десктопном приложении при изменении размера окна ниже 768px. Особенности: (a)
isAutoCompactвыводится из ширины@container/shell— однопанельный iOS-подобный переход между навигатором (список сессий / источники / и т.д.) и панелью фокусированного контента; боковая панель и правый столбец скрываются автоматически; макет прижимается к краям viewport. (b) Мобильное первого уровняAppMenuс полноэкранной навигационной стопкой (MobileAppMenu), выделенной из существующего компонента; настольная ветка (DesktopAppMenu) сохраняет предыдущее поведение без изменений. (c) Выборщики с первого уровня касания — переключатель workspace, выбор источника, селектор режима прав и фильтр списка сессий все меняются с Radix popovers на vaulDrawerнижние листы в компактном режиме (Radix порталы выходят за контейнер запроса панели, поэтому popovers обрезались на узких viewport). (d) Верхняя панель перераспределена — таблетка workspace слева, чипсы действий сворачиваются, FAB+ new chatзакреплен к нижней части viewport (порталится из трансформации навигатора, чтобыposition: fixedразрешался относительно viewport, а не трансформированного предка). Существующий CSS использует container queries во всём, поэтому настольный макет (≥768px shell) структурно не изменён. PR . (83cc0cca,3a63cbe1,1640b181,90e75c7b,e6e3247a,e24d4062,7f2627ab)
Улучшения
-
Репо-широкая линтеризация строк i18n — Новый скрипт
lint:i18n:stringsсканирует весь репозиторий на наличие захардкоженных английских строк, которые должны проходить через i18n;lint-i18n-staged.shбыл сокращён в том же коммите, так как сканирование по файлам теперь подсасывается репо-широким. Помогает предотвратить пропуск будущих строк из конвейера i18n. (013674e0) -
Очистка иконок настроек для согласованности —
SettingsIcons.tsxсокращён примерно на 180 строк для совместного использования одного стиля иконок в разделах настроек; небольшое улучшениеmodels-pi.tsвместе с этим. Внесено Балінтом Оросом. (da685016) -
Маршрутизация каналов доступа к сообщениям — 9 каналов контроля доступа к сообщениям (
messaging:access:{getOwners,setOwners,getMode,setMode,getPending,dismissPending,allowPending,setBindingAccess}+messaging:pendingChanged) добавлены вREMOTE_ELIGIBLE_CHANNELS. Они были объявлены вchannels.tsво время недавней работы над кнопками разрешений Telegram / контролем доступа, но не зарегистрированы вrouting.ts— тест на исчерпывающее покрытие завершился ошибкой на этой ветке. (9b694d8d)
Исправления
-
Отравление сессии из-за переполнения результатов инструментов — Одиночный
Readфайла с тяжёлым base64 мог вытолкнуть сессию за пределы контекстного окна модели, после чего каждая повторная попытка возвращалаinvalid_request, и единственное "решение" было abandonment сессии. Исправлено два компонующих бага: (a) Оценщик токеновchars/4недооценивает плотный base64 примерно на 25%, поэтому существующий порог пролива 15K срабатывал слишком поздно; новая функцияestimateTokensDensityAwareпереключается наchars/1.5, когда ≥70% результата инструмента ≥20KB находится в непрерывных последовательностях base64-символов (≥100 символов), иTOKEN_LIMITснижается до 12000 для дополнительного запаса. (b) UXinvalid_requestактивно вводил в заблуждение пользователей — жёстко закодированная рекомендация ("Попробуйте удалить вложения / проверьте, находятся ли изображения в поддерживаемом формате") срабатывала независимо от того, что было отправлено или что сказал API, потому что оба источника реальных ошибок мертвы на пути Claude SDK (parseApiErrorFromDebugLogчитает файл, который SDK больше не пишет; сетевой перехватчик работает только для Pi). Теперь: разделена перегруженнаяONE_M_CONTEXT_HINTSна специфичные для 1M-уровня (context-1m/tier) и общие переполнения контекста (context window/prompt is too long/…); общие переполнения маршрутизируются на новую ошибку "Context Window Exceeded" с советами/compact+ новая сессия; подсказки "удалить вложения" срабатывают только если сообщение API действительно упоминает image/attachment/media/format или только что отправленный пользовательский ход включал вложения (новое полеuserTurnHadAttachments, переданное черезClaudeSdkErrorContext); если ни один источник ошибки не предоставляет деталей, добавляется указатель на~/Library/Logs/@craft-agent/electron/main.log. PR . (636b0b67,fad9cbb3) -
Автоматическое переподключение опроса Telegram после сбоя — Когда опрос Telegram останавливался (чаще всего 409 Conflict из-за двух экземпляров приложения с одним и тем же токеном бота),
connectedоставалсяfalseнавсегда, и каждое последующее событие сессии через автоматизацииtelegramTopicмолча отбрасывалось — связи создавались, сессии запускались, ответы генерировались, но ничего не достигало Telegram.TelegramAdapterтеперь вызываетscheduleReconnectпри любом сбое опроса с экспоненциальной задержкой: 30s базовая для 409 (даёт конкурирующему процессу время выйти), 5s для других ошибок, ограничено 5 мин.destroyотменяет любой ожидающий таймер, чтобы намеренные завершения не возвращались в цикл.MessagingGateway.onSessionEventтакже теперь логируетwarn(adapter_not_connected) вместо молчаливого продолжения, чтобы будущие отключения немедленно отображались вmessaging-gateway.log. PR . (28f1082d) -
Голосовые сообщения / аудиовложения WhatsApp теперь доставляются — Рабочий процесс WhatsApp молча отбрасывал аудиовложения вместо пересылки их в сессии. Рабочий процесс теперь корректно отправляет аудио/медиа-вложения. Закрывает . (
84d6d0fd) -
source_testпересылает OAuth/bearer токены в MCP-зоны — Зона подключения сообщалаinvalid_tokenдля OAuth-источников MCP, чьи живые запуски работали с тем же источником —source_testне передавал токен доступа в зону. Исправлено: токен доступа теперь пересылается, чтобы зона соответствовала аутентификации живого запуска. Закрывает . (0dd6eeef) -
Кнопки разрешений Telegram идемпотентны + очистка клавиатуры при разрешении — Кнопки разрешений могли дважды срабатывать при быстром нажатии; inline-клавиатура также сохранялась после разрешения. Кнопки теперь идемпотентны, а клавиатура очищается после предоставления/отклонения разрешения. Закрывает . (
9340b2b5) -
Выбор модели отображает переключатель подключения на пустой сессии для одиночной модели
pi_compatпо умолчанию — Когда рабочее пространство по умолчанию имелоpi_compat-подключение с одной моделью, выбор модели скрывал переключатель подключения полностью, делая невозможным переключение провайдеров с пустой сессии. Выбор модели теперь отображает переключатель подключения даже в этом случае. Закрывает . (7faf9fc4) -
Сборка Windows: режим cone sparse-checkout + переименование файлов с недопустимыми символами — Два проблемы, блокирующие CI Windows: (a) sparse-checkout использовал не-cone режим, который не применяется на Windows; переключено на cone режим. (b)
Hermes - Anna: thinking.pdfиз архива проекта-эволюции содержал:, недопустимый на Windows; переименован. PDF-файлы проекта-эволюции также исключены из Windows-чекаута полностью. (5cc83b86,bf187448,28741005) -
Полировка компактного режима (многокоммитный) — Серия мелких исправлений, обнаруженных во время запуска компактного режима: React #300 (Maximum update depth) при переключении
isCompactпри изменении размера (227f3486); FAB new-chat закреплен к нижней части viewport через портал, чтобыposition: fixedразрешался корректно, и скрыт, когда чат открыт (406ece09,3ce4ffb3); заголовок PanelHeader центрирован по всей ширине панели (7d81e6a7); полировка переключателей + размеров верхней панели для узких viewport (060ae0d1); полировка элементов управления мобильного заголовка в компактном режиме (74c52244). -
AppMenu: удаление моста истории + строка Keyboard Shortcuts в компактном режиме — Меню имело мост истории, который откатывал навигации меню при нажатии кнопки назад; удалён (
390d4eeb). Строка Keyboard Shortcuts также удалена из мобильного меню, так как она неактуальна на сенсорных устройствах (b38b1c05). -
Документация: исправлен путь к настройке Mid-stream sends — Документация ссылалась на устаревший путь. Исправлено. (
97f58dec)
Примечания
-
Внешние контрибьюторы в этом выпуске:
-
Мобильный/компактный режим: активируется автоматически, когда ширина shell падает ниже 768px, независимо от того, вы в десктопном приложении или WebUI. Сужайте десктопное окно, чтобы попробовать.
-
Изменение оценщика токенов: новый порог пролива с учётом плотности должен предотвратить большинство крашей из-за переполнения контекста. Если вы ранее видели
invalid_request: remove attachmentsпослеReadфайла с тяжёлым бинарным содержимым без реального вложения, эта ошибка исчезла — переполнения контекста теперь маршрутизируются на отдельную ошибку "Context Window Exceeded" с указанием на/compact.