Agent Orchestrator 0.12.0

80 коммитов после 0.11.2. Десктопное приложение теперь говорит на восьми языках, получило новую цветовую палитру и позволяет закреплять сессии и выбирать ревьюера для каждой сессии. Мобильное приложение получило темы и диктовку с удержанием кнопки. Контейнеры, запущенные сессией, удаляются после её завершения.

Охватывает всё, что вышло после v0.11.2.

Пользователям macOS стоит сразу перейти на 0.12.1 или новее. В этой сборке утекают файловые дескрипторы, и через несколько часов работы ломаются раздел Files и создание задач.

0.11.0 была о том, чтобы фундамент выдержал нагрузку. 0.12.0 — это то, что на нём построено: приложение говорит на восьми языках, боковая панель и настройки работают так, как вы ожидаете, а целый класс сбоев, способных стереть с доски все сессии, устранён.

Этот релиз добавляет новые возможности продукта и улучшения надёжности, не ломая существующие сценарии работы.

Главное

Приложение говорит на восьми языках

В десктопном приложении появился полноценный слой локализации на основе i18next: язык выбирается в Settings > General и запоминается в ~/.ao/ui-settings.json. Первым появился упрощённый китайский — он охватывает оформление оболочки, боковую панель, доску, настройки, диалоги, вкладки инспектора, палитру команд и тексты терминала. Затем добавились японский, корейский, испанский, французский, немецкий и бразильский португальский, а также README на каждом из них. Английский остаётся языком по умолчанию и резервным, поэтому непереведённая строка показывается на английском, а не в виде ключа. (#3465, #3541)

Мобильное приложение: темы, нативные шторки и диктовка с удержанием

Мобильное приложение больше не только тёмное. В нём есть светлая и тёмная палитры, а также настройка «system», которая продолжает следовать за ОС, а не фиксирует значение, прочитанное при запуске. Оболочка приложения перестроена на нативных шторках, а доска сессий разделяется по завершению среды выполнения, а не по статусу готовности.

Появилась и диктовка push-to-talk. Удерживайте кнопку микрофона в поле ввода, чтобы говорить, отпустите, чтобы вставить текст, или смахните вверх, чтобы зафиксировать запись без рук. Распознавание выполняется на устройстве (iOS SFSpeechRecognizer, Android SpeechRecognizer), поэтому не нужен API-ключ и нет поминутной оплаты, а словарь смещён в сторону лексики, которой полны промпты для агентов, так что вы получите «git» и «npm», а не «get» и «MPM». Расшифровка попадает в поле ввода как редактируемый черновик, а не отправляется: распознавание речи ошибается на коде достаточно часто, чтобы молчаливая отправка была небезопасной. Последовательные удержания дописывают текст, так что несколько нажатий собирают один промпт.

Кроме того — иконка приложения в стиле Liquid Glass, как в десктопной сборке, и исправление порта LAN по умолчанию: он указывал на порт демона, доступный только через loopback, а не на мобильный мост на 3011, поэтому свежая установка не могла подключиться без ручной правки. (#3399, #3400, #3304, #3494)

Новая цветовая основа

Рендерер перешёл на палитру дизайн-токенов в oklch с Geist в качестве шрифта интерфейса и сопоставленными с ней цветовыми алиасами shadcn, заменив жёстко заданные значения во всей библиотеке компонентов. Статус сессии теперь везде отображается в единой палитре: в работе — синий, ждёт вас — оранжевый, на ревью — жёлтый, готово — зелёный. (#3421)

Закрепляйте сессии, к которым постоянно возвращаетесь

Сессии можно закрепить в разделе Pinned вверху боковой панели; закрепление хранится на стороне сервера и переживает перезапуск. Сама боковая панель стала сворачиваемой: Pinned и Projects сворачиваются по отдельности, а клик по иконке папки проекта раскрывает или сворачивает его, не переключаясь на него. (#3511, #3310)

Выбор ревьюера для каждой сессии

Раньше агент-ревьюер задавался одной настройкой на весь проект. Теперь его можно выбрать для отдельной сессии, и такой проход не изменит то, что используют другие сессии проекта. Вкладка Reviews также показывает все записанные проходы для сессии, а не только текущий и предыдущий запуск для PR, так что можно сравнить, что сказали два разных ревьюера. Отклонённое ревью, когда демон переиспользует существующий проход вместо нового запуска, больше не сообщает об успехе. (#3477)

Настройки открываются в модальном окне

Настройки и настройки проекта открываются поверх доски, а не уводят с неё; слева — боковое меню с разделами General, Updates, Developer и Help. Escape или клик снаружи закрывают окно, и вы возвращаетесь туда, где были. (#3497)

Уведомления, на которые можно реагировать

Когда вы нужны сессии, а окно не в фокусе, значок в Dock на macOS подпрыгивает, кнопка на панели задач Windows мигает, пока вы не вернётесь, а счётчик непрочитанных уведомлений синхронизирован в macOS, Windows и Linux.

В панели кликабельной стала вся строка, а не только заголовок, а ручные вкладки Unread/All и отметка о прочтении убраны. Уведомления теперь отслеживают две независимые вещи: видели ли вы уведомление (сбрасывается при открытии панели) и открыта ли ещё исходная проблема (записывается только жизненным циклом). Прочитанное уведомление остаётся в списке, пока то, о чём оно сообщило, не решено, и закрывается само, когда сессия выходит из состояния ожидания ввода, завершается или PR сливается либо закрывается. Переходы, произошедшие, пока демон не работал, перепроверяются при запуске. (#2534, #3296, #3495, #3558)

Действия в палитре команд и значок в строке меню

Cmd/Ctrl+K теперь содержит действия с сессиями, а не только навигацию, а поле создания задачи из New Task вынесено в отдельный компонент, чтобы палитра могла запускать работу через тот же интерфейс. В macOS также появился значок в строке меню для сессий, которые ждут вас. (#3531)

Контейнеры, запущенные сессией, удаляются

Docker-контейнеры, запущенные сессией, удаляются, когда она переходит в завершённое состояние, — в том числе при сбое или SIGKILL, а не только при явном завершении. Пометьте контейнер ao.session=$AO_SESSION_ID, чтобы он удалялся, или ao.spare=true для общей инфраструктуры, которая должна пережить сессию. Вызовы Docker ограничены тайм-аутом, а если проект не удаётся загрузить, удаление не выполняется. (#3153)

Файлы и диффы

В панели Files переключаемая кнопка поиска и счётчик файлов заменены постоянно видимым полем поиска, кнопка обновления убрана (список и так опрашивается), а сам список перестроен в аккордеон с живым счётчиком файлов на вкладке. Просмотрщик диффов транслирует изменения рабочего пространства по мере их появления, получил более понятный переключатель раскладки и отзывы по отдельным файлам и корректно разворачивается в развёрнутом виде. Диффы рабочего пространства теперь также учитывают базовую ветку, так что дочерняя сессия сравнивается с веткой, от которой она на самом деле отошла, а не с фиксированной базой. (#3466, #3503, #3492, #3369, #3214)

Надёжность

Один сбой больше не стирает доску. Это было главным исправлением (#3475). Три отдельные ошибки могли разом архивировать все сессии. Завершение предпросмотра убивало группу процессов по голому PID, не проверяя, что он всё ещё принадлежит запущенному процессу, и переиспользованный номер PID уничтожал постороннее семейство процессов; поскольку сервер tmux сам является лидером группы, один ошибочный kill устаревшей группы уничтожал все сессии. Ответ tmux «no server running» трактовался как смерть отдельной сессии, хотя он ничего не говорит ни о какой конкретной сессии, поэтому сбой сервера архивировал всю доску. А сломанная миграция возвращала ошибки 500, которые доска воспринимала как отсутствие сессий. Теперь проверки активности сообщают «неопределённо», а не «мертва», механизм очистки отказывается делать вывод, если большая часть доски одновременно выглядит мёртвой, а журнал миграций сам восстанавливается на уже сломанной истории. (#3491, #3598)

Оркестраторы. Для одного проекта больше нельзя создать несколько активных оркестраторов, ao session ls показывает скрытые сессии оркестратора и считает скрытые завершённые вместо того, чтобы молча их отбрасывать, а автоматические сообщения для повторной активации оркестратора откатили, поскольку они оказались скорее шумом, чем пользой. (#3397, #3393, #3394)

Агенты. Droid передаёт настройки модели для конкретной роли через свой файл настроек, который записывается в каталог данных, а не во временный каталог. Промпты Grok доставляются после того, как его TUI завершит запуск, а не в терминал, который ещё не слушает, и его терминал прокручивается колесом. Внутренний фейковый тестовый агент больше не появляется в списках выбора агентов. (#3156, #3534, #3533, #3518)

Браузер. Выбор аннотации блокируется, пока промпт отправляется, чтобы клик не сменил цель посреди отправки; нативные представления больше не рисуются поверх приложения, когда скрыты; редактирование URL работает в развёрнутом браузере на macOS; значок селектора элемента убран из диалога аннотации; а уход из сессии и возврат в неё больше не возвращают URL предпросмотра, с которого вы уже ушли. (#3232, #3295, #3488, #3464, #3538, #3370)

Десктоп. Автообновление записывает ошибки 404 при отсутствии манифестов релиза в лог, а не показывает диалог с просьбой проверить токен авторизации, которого у вас нет. Перетаскивание границ боковой панели и инспектора ограничивается минимальной шириной, а не схлопывает их. Демон игнорирует SIGPIPE на закрытом выводе. Разделы PR и Completion в инспекторе скрыты, когда в них ничего нет, а дублирующиеся сводки PR объединяются. Кроме того, прошлись по мелочам оформления: навигация в заголовке выровнена по кнопкам окна macOS, доработана полоса вкладок терминала, тонкие разделители в настройках и архиве, отступы верхней панели терминала, а выделение текста отключено в элементах оформления приложения и на маркетинговых страницах. (#3012, #3478, #3193, #3325, #3250, #3505, #3480, #3507, #3556, #3508, #3520)

Под капотом

Телеметрия получила аварийный выключатель во время выполнения: AO_TELEMETRY_DISABLED_EVENTS отключает именованные потоки (с поддержкой префиксного сопоставления через *) без выпуска релиза, а отключённые потоки всё равно записываются в локальный SQLite, чтобы их можно было отлаживать. События демона помечаются версией, события обновлений записываются, управление PostHog усилено, а в тестах проверяется, что autocapture выключен. CI теперь выпускает .rpm для Linux вместе с .deb.

На сайте: документация публикуется также в виде Markdown-копий, а полная иерархия доступна в llms.txt; добавлены страницы сравнения агентов; доска на главном экране, демо делегирования и макет мобильного приложения перестроены так, чтобы соответствовать реальному виду десктопного приложения; запущен призыв к участию в бете iOS. Удалены дублирующиеся структурированные данные Organization, а сигналы о контенте теперь применяются к разрешённым краулерам. (#3401, #3388, #3406, #3395, #3363, #3438, #3344, #3430, #3496, #3428, #3429, #3500, #3521, #3522, #3144, #3367, #3365, #3389)

Обновление

Поддерживаемые способы установки — GitHub Releases и Homebrew. Существующие установки обновляются на месте. Если предыдущее обновление оставило журнал миграций в сломанном состоянии, 0.12.0 восстанавливает его при запуске, а не прерывает загрузку.

Полный список изменений: https://github.com/OrchestratorInc/agent-orchestrator/compare/v0.11.2...v0.12.0