0.9.6 25 мая 2026 г. + наши доработки

Восстановление окна автообновления, обновление учётных данных в середине сессии и исправления #807/#798/#804

Возможности Название workspace в заголовке окна при нескольких открытых окнах — При одном открытом окне заголовок остаётся как название приложения ("AIKraft Agents"). Откройте второе окно, и…

Возможности

  • Название workspace в заголовке окна при нескольких открытых окнах — При одном открытом окне заголовок остаётся как название приложения ("AIKraft Agents"). Откройте второе окно, и заголовок каждого окна становится названием соответствующего workspace, так что окна легко различить в Cmd-Tab, Mission Control и панели задач Windows. Статический <title> рендерера подавляется, чтобы не перекрывать заголовок основного процесса. (5a49b6ca)

  • Встроенный блок markdown-preview для отображения .md файлов — Новый тип блока markdown-preview зеркалирует html-preview / pdf-preview / image-preview: ссылка на .md файл по абсолютному пути отображается через общий компонент Markdown, с защитой disablePreviewBlocks, предотвращающей рекурсию markdown-preview-внутри-markdown-preview, не отключая другие вложенные блоки предпросмотра. Зарегистрирован в режимах minimal (чат ассистента) и full; поддерживает массивы items. Частично решает . (45760a6f)

Улучшения

  • Онлайн-документация о многократных заголовках окон и восстановлении автообновленияapps/online-docs/go-further/workspaces.mdx теперь документирует новое поведение заголовков окон и сохранение состояния окна при автообновлении, чтобы пользователи, обнаруживающие эти функции в приложении, могли найти обоснование и примечания об особых случаях в документации. (755a8b77)

  • Полировка введения в онлайн-документацию — Сокращено описание в разделе начала работы (Mintlify dashboard edit). (3a5378db)

  • Документация шлюза сообщений отражает исправление fallback 0.9.5 — Уточняет, что режимы progress и final_only теперь оба возвращаются к последнему тексту ассистента, когда запуск завершается на вызове инструмента без непромежуточного text_complete, вместо оставления пузыря мысли (progress) или молчания (final_only). Действительно пустые запуски всё ещё остаются молчаливыми. (0cfd1ffb)

Исправления

  • Состояние нескольких окон сохраняется при автообновлении — electron-updater (Squirrel.Mac) уничтожает все BrowserWindows между quitAndInstall и срабатыванием before-quit, поэтому существующее сохранение состояния окна выполнялось с пустым снимком и перезаписывало ~/.craft-agent/window-state.json значением { windows: [] }. Пользователи теряли настройку нескольких окон при каждом обновлении. Теперь installUpdate запускает обратный вызов setBeforeUpdateQuitHook, который сохраняет состояние окна пока окна ещё существуют, а поздний путь before-quit добавляет проверку пустого снимка, чтобы предотвратить перезапись. (3db842e0)

  • Учётные данные источника API обновляются в середине сессии — Источники с bearer/header/query/basic auth захватывали учётные данные как статическую строку при создании инструмента. После обновления просроченного токена через source_credential_prompt внутрипроцессный инструмент продолжал отправлять устаревшее значение (401 до полного перезапуска сессии), даже если source_test подтверждал, что новый токен работает. Не-OAuth источники API теперь используют функцию получения учётных данных, которая читает хранилище при каждом вызове, как путь OAuth / renew-endpoint. Источники OAuth и renew-endpoint не изменены — у них уже есть обновление через TokenRefreshManager. (5b6a0588)

  • Устаревшие учётные данные source_apikey больше не утекают при смене authType на 'none'SourceCredentialManager.getCredentialId сопоставляет 'none', 'header' и 'query' с одним слотом source_apikey. Смена источника с authType, требующего учётных данных, на 'none' оставляла сохранённые учётные данные в этом слоте, где они могли переопределить defaultHeaders при перестроении — значение учётных данных отправлялось как Cookie вместо нового значения defaultHeaders.Cookie. Теперь saveSourceConfig удаляет слот source_apikey при сохранении конфигурации API-источника с authType:'none'. Очистка никогда не выбрасывает исключений и не блокирует запись конфигурации. (d0c70f23)

  • Заблокированные URL-схемы объясняют почему + DOM href очищаются — Когда defaultUrlTransform react-markdown удалял file: / javascript: URL до пустой строки, обработчик якоря возвращался к тексту якоря и new URL(text) отклонял его как "Invalid URL" — общее уведомление без объяснения. DANGEROUS_SCHEMES теперь является Map<scheme, reason>, причина проходит через обработчики OPEN_URL в server-core и Electron GUI, и сообщение об ошибке теперь выглядит так: URL blocked (file:). file: URLs are blocked because shell.openExternal can launch local executables on Windows…. DOM-атрибут href также очищается через defaultUrlTransform и устанавливается в undefined для опасных схем, закрывая путь через среднюю кнопку мыши / cmd-click через setWindowOpenHandler и will-navigate в Electron. Исправляет (часть URL-обработки). (746ebb34)

  • Ошибка упорядочивания TTL cache_control 1h и избыточный классификатор "tool not supported" — Две ошибки проявились вместе, когда extendedPromptCache был включён на соединении Anthropic при запуске сессии. (1) upgradePromptCacheTtl обходил system + messages + верхнеуровневый cache_control, но пропускал body.tools. Anthropic обрабатывает блоки в порядке tools → system → messages и отклоняет запросы, где ttl='1h' появляется после ttl='5m', поэтому устаревший 5m на любом инструменте приводил к ошибке system.0.cache_control.ttl: a ttl='1h' cache_control block must not come after a ttl='5m' cache_control block. Инструменты теперь обходятся первыми в обоих путях — обновления и удаления. (2) parseError ошибочно классифицировал эту же 400 как "Model Does Not Support Tools", потому что эвристика срабатывала на строке подсказки API, упоминающей tools. Избыто широкая модель удалена, и финальная ветка invalid_request_error / 400 маршрутизирует общие 400 Anthropic к invalid_request вместо unknown_error. (26e6e675)

  • Кнопка отправки на мобильном WebUI остаётся видимой при длинном имени модели — Компактный нижний бар имел каждый элемент слева как shrink-0 без защиты переполнения наружного ряда, поэтому длинное имя модели настраиваемого конечного точки на 375 px viewport переполняло ряд и оттесняло кнопку отправки за пределы экрана. Триггер CompactModelSelector теперь может сжиматься с минимальной шириной min-w-[64px], а дочерние элементы компактного нижнего бара обёрнуты в собственную группу min-w-0 shrink overflow-hidden, чтобы метка модели сокращалась первой, а кнопка отправки оставалась привязанной к правому краю. Исправляет . (5e95e72e)

  • Headless-сервер автоматически повторяет попытку source_activated, как делал рендерер Electron — Повторная отправка [<slug> activated] перенесена в SessionManager.processEvent, чтобы headless-развёртывания (WebUI, docker server) цепочки активаций источников работали так же, как и в рендерере Electron. Эффект auto_retry рендерера удалён. Окно дедупликации 2 секунды по совпадению контента, привязанное к слоту {content, deadlineMs, committed} на ManagedSession, предотвращает двойную отправку во время смешанной версии rollout (устаревший рендерер + новый сервер) — первое совпадение sendMessage (таймер сервера ИЛИ устаревший RPC) выигрывает и занимает слот, последующие совпадения в окне удаляются. Таймер повторной попытки и ожидающий слот отменяются на обоих сайтах удаления сессии (основной путь deleteSession и путь отката создания ветки). Исправляет . С соавторством Гийом Геем. (5cb7b8c1)

  • Усиление обзора PR 378 (обработка markdown / Electron URL, защиты автоповторной активации источника, детерминированная очистка устаревших учётных данных) — Последующий коммит, решающий замечания по обзору PR по URL-безопасности, автоповторной активации и очистке учётных данных; также удаляет утекающий модуль-заглушку source-test, который скрывал регрессию очистки учётных данных. (42b986e1)

Несовместимые изменения

  • Нет. Все изменения обратно совместимы.

Дополнительно в этом выпуске

  • Доступ к заметкам, почте и файлам из единого интерфейса: добавлены панели для работы с заметками, электронной почтой и файлами Nextcloud в рамках рабочих пространств.
  • Интеграция мессенджера Mattermost: встроена панель для общения с поддержкой невидимой боковой панели и отображением уведомлений о непрочитанных сообщениях.
  • Новые инструменты для работы: добавлены панели для управления проектами (Plane), календаря, системы SABY и AI-чат для генерации ответов.

← Все версии