Возможности
-
Название 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очищаются — КогдаdefaultUrlTransformreact-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_control1h и избыточный классификатор "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)
Несовместимые изменения
- Нет. Все изменения обратно совместимы.