Хроника изменений

Все значимые изменения в VelaTerm, от новейших к старым.

v0.1.91 — это первая публичная версия; более ранние номера версий были внутренними итерациями и не учитываются.

v0.2.14

Последние изменения
  • 🔌 Удалённые подключения больше не обрываются и не переподключаются каждую секунду, когда открыто несколько длинных бесед, и эти беседы снова открываются нормально.
  • ⏹️ Во время подключения по SSH и к WSL отображается кнопка «Остановить», позволяющая прервать подключение на любом этапе, в том числе во время подготовки сервера; во время подключения его также прерывает кнопка «Отмена» в окне ввода пароля.
  • 🌿 Дерево сессий и метки веток больше не накапливают процессы Git в крупных репозиториях, а фоновые операции чтения Git завершаются через 30 секунд, а не зависают.
  • 🧩 Панель Git в репозиториях с подмодулями обновляется значительно быстрее: изменения внутри подмодуля больше не приводят к его появлению в родительском репозитории, а подмодуль, указывающий на новый коммит, по-прежнему отображается.
  • 📁 Группы можно перетаскивать в другие проекты вместе с вложенными группами и сессиями, после чего эти сессии запускаются в папке нового проекта.
  • ⏳ При открытии длинной беседы вместо «Индексирование истории ещё выполняется» отображается небольшой индикатор «Загрузка разговора…».
  • 🖱️ В контекстном меню сессии пункт «Завершить процесс» отображается, пока процесс сессии работает, в том числе если он запущен из другого клиента, и исчезает после завершения процесса.

v0.2.13

Последние изменения
  • 📱 На телефоне агенты, работающие в виде терминала, сразу открываются в терминале с плавающим полем ввода, где можно написать или надиктовать сообщение целиком; маленькие кнопки «Стенограмма» и «Терминал» в заголовке переключают между ними, а стенограмма больше не предлагает перейти к виду беседы.
  • 🔑 В общем доступе владелец хоста может открыть терминал агентов, работающих в виде терминала, и вводить в нём текст, а в списке сессий видны и агенты без вида беседы, например Kiro; приглашённые аккаунты по-прежнему видят стенограмму только для чтения.
  • 🌐 Ручной перевод ответа в неактивной сессии показывает перевод вместо сообщения «Перевод недоступен».
  • 📜 Пока вы листаете длинную беседу вверх, новые ответы больше не прячутся за кнопкой «Загрузить более новые сообщения», а при прокрутке вниз из более ранней истории новые сообщения загружаются автоматически.
  • 🧭 В мобильном виде больше нет пункта «Перейти к версии для ПК», а телефоны, переключившиеся на неё раньше, автоматически возвращаются к мобильному виду.
  • 🧹 Записи запусков vrun автоматически удаляются через 24 часа после завершения задачи.

v0.2.12

Последние изменения
  • 🛑 Остановка хода Claude в виде беседы срабатывает сразу, а следующее сообщение отправляется немедленно — даже при высокой нагрузке на компьютер.
  • 🪟 Сочетания клавиш меню, например Cmd+D, и нажатия на уведомления действуют только в том окне, к которому относятся, поэтому удалённые окна больше не разделяются вместе с главным.
  • 🔎 Глобальный поиск выдаёт результаты, пока индексация ещё идёт, и показывает, сколько сессий осталось проиндексировать.
  • ⚡ Глобальный поиск индексирует беседы Claude, Codex, Pi и OMP прямо из их файлов: это намного быстрее и не заполняет кэш истории бесед, а открытый результат ведёт точно к нужному сообщению.
  • 🧠 История бесед читается прямо из исходных записей агентов, а не из отдельной копии на диске; при запуске папки chat-index и chat-spool удаляются, освобождая место на диске.
  • 📱 На телефоне сессии, работающие в виде терминала, предлагают переключиться на вид беседы; после подтверждения настольное приложение тоже переключает сессию.
  • 👀 Общий доступ показывает сессии, работающие в виде терминала, только для чтения, и переключить их на вид беседы может только владелец хоста.
  • 🌐 В настройках перевода появился параметр «Включать перевод по умолчанию», который задаёт начальное состояние перевода для сессий без сохранённого выбора.
  • 🌳 Дерево сессий объединяет сессии, использующие один worktree, под одной строкой этого worktree.
  • 📄 Под короткими ответами в виде беседы, в том числе под сообщениями с изображениями, больше не появляется ссылка «Прочитать полностью».
  • 🔕 Кнопка очистки всех значков уведомлений перенесена к левому краю нижней панели дерева сессий.
  • 🤖 В диалогах новой сессии и возобновления сессии в списке типов агентов показаны значки агентов, а список разрешений открывается вверх, если внизу недостаточно места.
  • 🩹 Вид беседы больше не сообщает о повреждённых записях в истории, когда хранилище занято, и вскоре продолжает загрузку.
  • 📝 В редакторе Markdown клавиши Backspace и Shift+Tab убирают нумерацию у пустого пункта списка или у ненумерованного абзаца внутри списка.
  • 🔵 Чип «Задачи» в виде беседы становится бирюзовым — этим цветом дерево сессий отмечает фоновую работу, — пока фоновые задачи ещё выполняются; в списке задач выполняющиеся задачи тоже выделены бирюзовым и помечены «Выполняется».
  • 🗑️ При удалении сессии больше не предлагается удалить worktree git; чтобы удалить worktree, используйте «Delete worktree…».
  • 🔁 Состояние перевода обновляется при изменении, а не каждые 10 секунд, а настройки перевода заново проверяют установленных агентов при каждом открытии.
  • 💤 Панель Info приостанавливает сбор данных о ресурсах процесса, пока окно скрыто.
  • ⏱️ Индикатор работы и таймер хода в виде беседы больше не пропадают и не остаются на экране, если ход начинается или заканчивается, пока вы переключаете сессии.
  • 🔗 vrefer нумерует сообщения так же, как vsearch, а для ответвлённых сессий Codex vrefer и глобальный поиск включают историю родительской беседы.

v0.2.11

Последние изменения
  • 🧪 Экспериментальный предпросмотр HTML открывается рядом с беседой или во вкладке, обновляется при изменении файлов и предлагает просмотр кода, консоль и версии; проверка в нативном приложении и на разных платформах ещё не завершена.
  • 📜 В длинных беседах старые сообщения загружаются постранично, длинное содержимое раскрывается по запросу, а сообщения и инструменты Claude и Codex больше не дублируются в реальном времени.
  • 🔎 Глобальный поиск быстрее обновляет изменённые беседы, продолжает индексацию после прерываний и пропускает нечитаемые беседы, пока их файлы не изменятся.
  • 📊 Число изменённых файлов на панели Info открывает список файлов, отредактированных за этот ход, с доступными данными о добавленных и удалённых строках.
  • 🗂️ Архивные беседы отображаются компактными строками с исходной иерархией проектов, групп и родительских сеансов; проекты можно разворачивать и сворачивать по отдельности или все сразу.
  • 🧩 Навыки плагинов учётной записи Codex появляются в подсказках автодополнения, а выбирать пункты меню можно клавишами со стрелками.
  • ⌨️ В Windows и Linux Ctrl+Shift+C копирует выделенный текст терминала; сочетание можно изменить в разделе «Настройки ▸ Сочетания клавиш».
  • 🧹 После /clear в терминале Claude повторное открытие сеанса или переход к виду беседы больше не восстанавливает очищенный разговор.
  • 📏 Панель Info показывает предел контекста модели для бесед OpenCode.
  • 🌐 В перевод добавлены Bing Translator без ключа API, компактные настройки языка и перевод отредактированных сообщений Claude и Codex перед повторной отправкой.
  • 🔤 После смены движка или модели перевода существующие переводы остаются видимыми и доступны для повторного перевода.
  • ⏱️ vrun сообщает о ходе выполнения каждые 180 секунд с кодом завершения 75, позволяет продолжить ожидание через --wait и защищает работающие задачи от повторного использования их имени.
  • 🧵 Ответы Claude, вызванные завершением фоновых задач, получают отдельную сводку задачи и границу беседы, в том числе в истории.
  • ⚠️ При переключении между терминалом и видом беседы запрашивается подтверждение, если выполняются фоновые задачи.
  • 🏠 Сеансы без рабочего каталога или с отсутствующим каталогом запускаются в домашней папке в обоих видах.
  • 🪟 В Windows запуск VelaTerm и открытие панели подключения больше не предлагают установить WSL, если нет зарегистрированных дистрибутивов.
  • 🔐 Неудачные удалённые входы учитываются в лимите попыток, даже если соединение закрывается во время проверки пароля.
  • 🏷️ Индикаторы версий агентов показывают явную ссылку Update: vX, когда доступна более новая версия CLI.
  • 🔵 Индикаторы фоновых задач постоянно светятся бирюзовым, а точки состояния остаются во вкладках и боковой панели, без дублирования в заголовках областей.
  • ✍️ Граница поля ввода беседы стала чётче и получила внешний контур при фокусе, а значения панели Info в тёмной теме имеют ту же яркость, что и подписи.
  • 🌿 Кнопки клонирования проектов используют значок ветки с меткой проекта.

v0.2.10

Последние изменения
  • 🧩 Поддерживается OpenCode v2 наряду с v1, а список моделей корректно загружается в OpenCode v2.0.26.
  • 🏷️ В заголовке сеанса отображается версия CLI агента; если доступна более новая версия, номер версии ведёт к официальной инструкции по обновлению.
  • 🗂️ Панель Git показывает до 1000 изменённых файлов и предлагает добавить крупные папки, например node_modules, в .gitignore.
  • 🔤 Панель Git правильно отображает имена файлов с не-ASCII символами, индексирует, снимает с индексации и отменяет изменения только в выбранных файлах, а конфликты выводит отдельной группой.
  • 📜 История Git при обновлении сохраняет загруженный диапазон, раскрытые элементы и позицию прокрутки.
  • 🌿 Ветка в правой панели, строке состояния, заголовке терминала и боковой панели обновляется сразу после переключения, без перезапуска.
  • 📁 Дерево файлов автоматически обновляет открытые папки и отмечает папки с изменениями Git.
  • 🧹 Windows: автообновления больше не оставляют установщики в папке Temp, а остатки прежних обновлений удаляются.
  • 🪝 Windows: Codex, Crush, Kiro, Cursor, Kimi, Antigravity, Copilot и Grok сообщают состояние сеанса напрямую VelaTerm, без скриптов PowerShell.
  • 🖱️ Windows: полноэкранные терминальные программы, например vim, получают щелчки и прокрутку мыши; колесо мыши больше не превращается в клавиши со стрелками.
  • 🕘 Терминалы zsh снова читают и записывают ваш собственный ~/.zsh_history, поэтому history и стрелка вверх показывают и команды из других терминалов.
  • 🖥️ Новые сеансы Claude и Codex открываются в режиме беседы; остальные агенты по умолчанию открываются в терминале.
  • 🚀 vspawn поддерживает --pi и --agent <имя> и может запускать любого агента, принимающего задачи.
  • ⏱️ Если список моделей не загрузился за 30 секунд, появляется ошибка с кнопкой Retry.
  • 🗑️ Сохранённые пресеты можно удалить в разделе Настройки ▸ Агенты.
  • ⌨️ Подсказка кнопки снимка экрана показывает текущее сочетание клавиш, а значок проще отличить от кнопки «Поделиться».
  • 🧭 Правая панель снова переключается со «Знаний» на «Инфо» и другие вкладки.
  • ✍️ macOS: при вводе / в терминале с помощью метода ввода символ больше не вводится дважды.

v0.2.9

Последние изменения
  • ✨ При переименовании с помощью ИИ выбранная модель и уровень рассуждений запоминаются отдельно для каждого агента.
  • ⛔ Генерацию заголовка с помощью ИИ можно отменить кнопкой Cancel, клавишей Esc или щелчком вне диалогового окна, а затем запустить повторно.
  • 🧭 В новых рабочих процессах Plan/Execute независимая роль Review по умолчанию отключена и при необходимости включается в окне запуска или параметром --review.
  • 🤖 В выборе модели Chat отображаются состояния загрузки, ошибки и пустого списка с кнопкой Retry, а доступные модели Codex соответствуют учётной записи и настройкам текущего сеанса.
  • 📊 Панель Info показывает оценку средней скорости вывода с учётом сообщённых токенов рассуждений или тире, если оценка недоступна.
  • 🩺 В расширенных настройках доступна необязательная диагностика задержки ввода с регулируемым порогом, без записи вводимого текста.
  • ✂️ У экспериментального инструмента создания снимков экрана есть кнопка в строке заголовка на поддерживаемых настольных платформах Tauri, даже если сочетание клавиш отключено.
  • 🌬️ Бирюзовые индикаторы фоновых задач используют одинаковую пульсирующую анимацию в дереве сеансов, фильтрах состояния и строке состояния.
  • 📁 Группы, созданные при активном фильтре состояния, остаются видимыми до обновления состояния или изменения фильтра, если они также соответствуют поиску по имени.
  • 🎨 Журналы фоновых команд отображают цвета, стили текста и последнюю строку прогресса, а панель выполнения больше не закрывает индикатор фокуса области.

v0.2.8

Последние изменения
  • 🪟 Windows: при возвращении в окно фокус клавиатуры остаётся на месте, если он уже находится внутри страницы.

  • 🛡️ Windows: антивирус Huorong больше не определяет VelaTerm и vela-server как Trojan/MSIL.ShellLoader.q. Это было ложное срабатывание: чтобы выполнять команды оболочки из режима диалога, VelaTerm создавал каждый процесс в приостановленном состоянии, а затем возобновлял его. Такую же последовательность вызовов вредоносные программы используют для внедрения кода. Теперь процессы запускаются обычным способом, а код, вызывавший срабатывание, удалён.

  • 🔕 Windows: при создании сеансов и обновлении списка моделей PowerShell больше не запускается в фоне, а статус сеансов Cursor теперь определяется по выводу терминала, поэтому может быть менее точным.

  • ⛔ Windows: в режиме диалога ввод, начинающийся с !, больше не выполняется как команда оболочки; вместо этого появляется уведомление, а введённый текст сохраняется, при этом ранее выполненные команды в истории по-прежнему отображаются.

  • 🔐 Подключения по SSH к узлам Windows со встроенным сервером OpenSSH больше не запускают PowerShell с -EncodedCommand.

  • 🚀 Сеансы TUI-агентов корректно запускаются при длинном PATH, без обрезанной команды запуска в терминале.

  • ⬇️ Сеансы TUI-агентов прокручиваются вниз, когда ход завершается или агент запрашивает разрешение, если вы не просматриваете более ранний вывод.

  • 💾 Экспериментальное восстановление диалога из v0.2.7 удалено: Chat больше не показывает повторяющиеся сообщения Saved submission и уведомления о прерывании, а неотправленные сообщения из очереди не сохраняются после перезапуска.

  • 🔁 В процессах планирования и выполнения появилась необязательная независимая роль Review, включённая по умолчанию для новых процессов, с отдельным выбором агента, модели и уровня рассуждения; vspawn --plan-execute принимает --review, --no-review, --review-agent, --review-model и --review-effort.

  • 🏷️ «Переименовать с помощью ИИ…» сначала запрашивает подтверждение и позволяет выбрать агента, модель и уровень рассуждения для этого переименования; во время загрузки параметров диалог сразу отображается по центру.

  • 🔍 Сеансы, группы и проекты можно перетаскивать, когда активен поиск по имени, фильтр по статусу или фильтр по метке.

  • ➕ При активном фильтре по статусу новый сеанс остаётся под своей группой или родительским сеансом, пока вы не обновите статус или не измените фильтр.

  • 🪟 Окна приложения по умолчанию открываются крупнее, с учётом доступной области экрана, а окна подключения открываются по центру экрана, на котором находится главное окно.

  • 🎨 У коллекций новый значок из сложенных слоёв, значки тёмной строки заголовка стали немного приглушённее, четыре кнопки пустой боковой панели имеют одинаковую ширину, а диалоги форм используют единый стиль подписей.

v0.2.7

Последние изменения
  • 🪐 Antigravity доступен в режиме диалога как экспериментальный агент с текстом, инструментами, очередью сообщений и собственной историей; изображения, дополнительные указания во время ответа, интерактивные разрешения, ветвление и откат пока не поддерживаются, а полная проверка восстановления на всех платформах ещё не завершена.

  • 🗂️ Коллекции могут содержать вложенные коллекции, проекты и группы сеансов, создаваться или импортироваться из рабочей области, а при удалении коллекции её проекты и архивные сеансы сохраняются.

  • ⚠️ Предыдущие версии не должны использовать базу данных после преобразования папок в коллекции; для возврата к старой версии нужно восстановить резервную копию, сделанную до миграции.

  • 🏷️ Умное переименование задаёт имя сеанса по содержимому диалога с настройками текущего агента и предлагает выбрать агента, если эти настройки нельзя использовать.

  • 🌱 Новые сеансы используют актуальное окружение shell и недавно установленных агентов без перезапуска VelaTerm.

  • 💾 Экспериментальное восстановление диалога возвращает сохранённые сообщения, изображения и ввод в очереди после перезапуска и приостанавливает прерванную работу до явного возобновления; полная приёмочная проверка в нативной среде и на всех платформах ещё не завершена.

  • 📸 Экспериментальная функция создания снимков экрана в приложениях Tauri для macOS и Windows позволяет выбрать область, добавить пометки, скопировать её или сохранить исходный PNG; нативная приёмочная проверка ещё не завершена, а Electron, браузер и удалённые представления не поддерживаются.

  • 🧵 Вкладки фоновых задач Claude показывают полную собственную историю диалога, включая параллельные вызовы инструментов.

  • 🖼️ Одно сообщение в диалоге может содержать до 20 изображений размером не более 5 MiB каждое.

  • 📍 Метки сообщений позволяют просматривать содержимое и переходить прямо к предыдущим сообщениям пользователя.

  • 🧭 Выбор каталогов для проектов, клонирования и сохранения под новым именем теперь везде поддерживает редактирование путей и автодополнение расположений.

  • 🪪 vself читает сохранённые настройки сеансов и связи между родителями и потомками, а vflow list выводит связанные процессы планирования и выполнения, не изменяя их.

  • ⌨️ Выделить всё в терминале можно настроить в сочетаниях клавиш, по умолчанию используется Cmd+A в macOS и Ctrl+Shift+A на других платформах, и команда действует только при фокусе в терминале.

  • 🐚 Автодополнение Bash поддерживает пути, начинающиеся с ~, а старые версии Bash открывают сеансы без ошибок PS0.

  • 🛑 Хуки дочерних задач больше не меняют состояние диалога родительского сеанса, а закрытие вкладки диалога останавливает её активный процесс Chat.

  • 🪟 Windows восстанавливает фокус клавиатуры в терминале при возвращении в окно и больше не показывает синюю линию при составном вводе китайского текста.

  • 🎨 Классическая тёмная тема стала контрастнее, значки рабочего стола следуют системной теме, значки проектов стали синими, а строки коллекций больше не показывают число проектов.

  • 📚 Пункты меню сеансов и коллекций получили более понятную подпись для добавления в базу знаний.

  • 🌐 При доступе к VelaTerm по обычному HTTP в локальной сети страница открывается корректно.

  • 🌍 Проверки обновлений передают язык интерфейса для соответствующих примечаний к выпуску, а сервис обновлений поддерживает программу обновления Electron для Linux.

  • 🧰 Имена агентов Kimi Code и Grok Build больше не содержат номера версии модели.

v0.2.6

Последние изменения
  • 🐧 Версия для Linux теперь построена на Electron. AppImage сохраняет прежнее имя файла и ваши данные, больше не требует WebKitGTK и libfuse2, а существующие установки переходят на неё через встроенное средство обновления.

  • 🛰️ Машины, к которым нельзя подключиться по SSH, например WSL на другом компьютере или контейнер Docker, можно привязать к своей учётной записи, установив vela-server одной командой; после этого они появляются в списке Remote и доступны для бесед с ИИ. Когда владелец предоставит на хосте полный доступ, настольное приложение сможет пользоваться также его терминалом, файлами и панелью Git.

  • 📂 Папки, перетащенные на боковую панель из Finder, Проводника или файлового менеджера Linux, добавляются как проекты.

  • 📝 В редакторе Markdown появились сочетания клавиш как в Typora для заголовков, списков, блоков кода и таблиц, автоматическое закрытие скобок и кавычек, переход по ссылкам по Cmd/Ctrl+щелчку, режимы фокусировки и пишущей машинки, а также подсчёт слов и символов в строке состояния. YAML-заголовок (front matter) отображается в отдельном поле над документом и не меняется, пока вы его не отредактируете.

  • 🗃️ Если папка сама не является репозиторием Git, но содержит несколько репозиториев, на панели Git появляется выбор репозитория, и все действия относятся к выбранному.

  • ⏳ В режиме беседы сеанс, ответ в котором завершён, а фоновые задачи ещё выполняются, получает новое состояние «Фоновые задачи» с голубой точкой вместо того, чтобы оставаться в состоянии «В работе». Сеансы, выполняющие длительные задачи через vrun, показывают то же состояние.

  • 🍴 В режиме беседы ответвлённый сеанс при первом запуске начинает собственную беседу, и исходный сеанс больше не получает его сообщения.

  • 🛡️ В режиме беседы метка режима в сеансе Claude соответствует режиму разрешений, который Claude фактически использует, например после перехода в режим Plan, а карточки разрешений показывают причину запроса, указанную Claude.

  • 📏 Высоту поля ввода в режиме беседы можно менять, перетаскивая его верхний край; двойной щелчок по краю возвращает высоту по умолчанию. Высота применяется ко всем панелям и сохраняется после перезапуска.

  • 🗂️ Если на боковой панели выбрано несколько папок, их можно архивировать вместе с сеансами через контекстное меню.

  • 📚 Коллекции на боковой панели всегда располагаются выше проектов.

  • 🧠 Если запись обработки базы знаний создала только одну запись базы, её заголовок сразу открывает эту запись, а на кнопках записей вместо номеров показываются их заголовки.

  • 📊 Панель Info показывает правильный лимит контекста для новых моделей Claude, например Opus 5.5, а не 200k.

  • 🎨 Небольшие изменения: три пункта открытия в разделённой области в контекстном меню сеанса собраны в подменю «Открыть в панели», в подтверждении выхода указано, что открытые удалённые окна тоже будут закрыты, а раскрывающиеся списки в формах закрываются сразу после выбора.

v0.2.5

Последние изменения
  • 🐧 В настольном приложении для Windows можно открывать отдельные рабочие пространства в WSL1 и WSL2 с агентами, файлами и историей сеансов выбранного дистрибутива Linux.

  • 🔄 К рабочему пространству WSL можно подключиться повторно после остановки сервера, а при закрытии окна — остановить сервер или оставить сеансы работающими.

  • 🌐 В сеансах Claude в области ввода появился параметр «Chrome», который включает и выключает Claude in Chrome без перезапуска беседы. Выбор сохраняется для каждого сеанса, а сеансы без выбора используют значение по умолчанию.

  • 📟 На вкладке фоновой задачи shell отображаются выполняемая команда и последний вывод, который обновляется, пока задача выполняется.

  • 🧩 Если Vela Skills не установлены, в строке состояния появляется пункт для их установки. В диалоге описан каждый навык; установить их можно сразу, а напоминание — отключить.

  • 🪪 Дочерние сеансы, созданные через vspawn, получают идентификатор родительского сеанса в VLX_PARENT_SESSION_ID, поэтому агент может обращаться к нему через vrefer и vtell. Новая команда vself показывает текущий сеанс и вышестоящие сеансы.

  • 🖥️ AppImage для Linux больше не открывает пустое окно в новых дистрибутивах, например в Fedora 44.

  • 🎨 Мелкие изменения: «Фоновые задачи» по умолчанию отображаются под полем ввода и остаются в меню «Ещё», если переместить их туда; если ссылку не удаётся открыть, появляется подсказка, что адрес можно скопировать через контекстное меню.

v0.2.4

Последние изменения
  • 📋 Копирование из беседы даёт текст в том виде, в каком он показан на экране: без обратных кавычек вокруг встроенного кода, без звёздочек у выделения, ссылки только текстом, блоки кода без ограждающих строк, ячейки таблицы через табуляцию, списки с теми маркерами, которые видны. Форматированный вариант по-прежнему кладётся в буфер обмена вместе с текстом, а в контекстном меню появился пункт «Копировать как Markdown» — он даёт исходный Markdown выделенного фрагмента.

  • ⏳ Автоматическое продолжение после сброса лимита использования теперь включено по умолчанию. Если вы сами меняли эту настройку, ваш выбор сохраняется.

  • ↩️ Откат беседы больше не блокируется уже завершённой задачей: задача переднего плана считается завершённой по окончании своего хода, а пришедший позже прогресс не помечает её как выполняющуюся снова. Если фоновая задача действительно ещё работает, в сообщении указывается её имя.

  • 🧹 Потоки субагентов Codex больше не появляются в списке истории сессий — так же, как боковые цепочки Claude.

  • ⌨️ Автодополнение в терминале: после перехода по вариантам стрелками Enter принимает выделенный вариант так же, как Tab. Если выделение не перемещалось, если после выбора вы продолжили набор или если удерживается клавиша-модификатор, Enter по-прежнему уходит в оболочку.

  • 📱 Android собирается в двух каналах. Сборка по умолчанию включает каналы уведомлений Getui, Huawei, Xiaomi, OPPO, vivo, Meizu и Honor; сборка для Play обходится без них и показывает, что для уведомлений о задачах канал доставки не настроен.

  • 🎨 Небольшие изменения интерфейса: в списках задач больше не дублируется флажок, панель уведомлений и сообщение об автопродолжении располагаются между беседой и полем ввода по ширине текста сообщений, а на телефоне кнопка отправки остаётся рядом с полем ввода при свёрнутых параметрах.

v0.2.3

Последние изменения
  • 🪟 Существующие сессии можно переносить в разделённые панели. Контекстное меню боковой панели открывает сессию в правой панели, нижней панели или в активной панели; если перетащить сессию из боковой панели к краю панели, разделение произойдёт в этом направлении, а если бросить её в середину — заменится показанная там сессия. От двух до четырёх выбранных сессий раскладываются мозаикой в одной равномерно разделённой вкладке, а сессии в остальных панелях текущей вкладки отмечаются в боковой панели.

  • 🗂️ Фоновые задачи, запущенные агентом, открываются в отдельных вкладках рядом с беседой и показывают состояние, затраченное время, токены, вызовы инструментов, последний отправленный инструмент и этапы каждого агента. У задачи есть собственный адрес, а при выходе из неё вы возвращаетесь в ту панель, из которой она была открыта.

  • 💬 В режиме беседы сообщение, начинающееся с !, выполняется в оболочке сессии. Вывод появляется по мере поступления, показывается код завершения, команду можно отменить во время выполнения, и она остаётся в истории чтения сессий Claude, Codex, OpenCode, Pi и OMP.

  • ⏱️ Новая команда vrun запускает длительную команду и ожидает её в одном вызове, поэтому агент узнаёт, когда работа действительно завершилась. Запущенные так команды перечислены над терминалом вместе со временем работы, окном журнала и кнопкой остановки, которая запрашивает подтверждение.

  • ⌨️ Создание сессии агента получило отдельную страницу и сочетание клавиш: поиск по агентам и предустановкам, повтор последнего использованного варианта и выбор, создавать ли сессию на одном уровне с текущей или под ней.

  • 🧰 Панель инструментов ввода настраивается в параметрах: вы выбираете, какие элементы стоят рядом с сообщением и в каком порядке. Отключённые элементы, как и те, что не помещаются по ширине, остаются доступными в меню «Ещё».

  • 📥 Загрузка файла в окне URL- или SSH-подключения начинается с выбора места сохранения на этом компьютере, после чего показывается ход загрузки и кнопка отмены.

  • 🗃️ Сессии Kiro можно импортировать в проект и просматривать: импорт сопоставляет сессии по рабочему каталогу, и каждая открывается в режиме истории только для чтения с поиском. Пока поддерживаются только текстовые записи.

  • 🧠 Упорядочивание базы знаний работает с Grok, OpenCode, Pi и OMP в дополнение к Claude и Codex, а агент выбирается в том же раскрывающемся списке, что и в остальных частях приложения.

  • 📱 iOS и Android: стартовая страница хранит ваши SSH- и URL-подключения, позволяет войти в учётную запись VelaTerm и показывает устройства, которые делятся содержимым в ней. Отпечаток узла подтверждается один раз и запоминается, QR-код заполняет адрес службы, а все нативные экраны и системные сообщения переведены на все 11 языков интерфейса.

  • 🔐 Сессии Claude запускаются в выбранном режиме разрешений: дополнительные аргументы запуска сохраняют предусмотренный приоритет, режим сверяется с тем, что сообщает CLI при запуске, а сессия, начатая с пропуском подтверждений, сохраняет соответствующую отметку.

  • 🧩 В меню моделей появился Opus 5.5, а модели, о которых сообщает выбранный CLI, добавляются с сохранением исходного порядка; модель, появившаяся с обновлением CLI, отображается без перезапуска приложения.

  • 🌱 Запросы на дочернюю сессию переживают перерывы связи: запрос, ответ на который был потерян, восстанавливается после переподключения, уже подтверждённый запуск при повторе использует ту же сессию и те же настройки, а рабочее дерево, которое не удалось создать, откатывается, не затрагивая того, что существовало раньше.

  • ⚡ Приложение запускается быстрее: код, загружаемый при запуске, стал примерно вдвое меньше, а страницы базы знаний, аудита безопасности, импорта сессий и общих проектов загружаются при открытии.

  • 🖼️ Изображения, вставленные или перетащенные в сообщение, перед отправкой уменьшаются до 1568 пикселей по длинной стороне.

  • 🐚 Сессии Bash загружают автодополнение оболочки из файла запуска, поэтому новая сессия Bash больше не открывается с уже набранной командой. Файлы профиля входа по-прежнему читаются в порядке, принятом в Bash.

  • ✍️ Markdown: одиночная тильда больше не зачёркивает остаток строки, поэтому вставленное приглашение оболочки остаётся читаемым, а полужирный или курсивный текст, заканчивающийся рядом с китайскими, японскими или корейскими символами, закрывается правильно и не оставляет звёздочек на экране.

  • 📨 vtell --steer доставляет сообщение в тот ход, который получатель уже выполняет, не дожидаясь его окончания. Если получатель остановился на вопросе, приходит ответ blocked: сообщение будет прочитано только после ответа на этот вопрос.

  • 🔁 В режиме беседы состояние сессии завершается одновременно с ходом, отметка о непрочитанном снимается, когда работа действительно начинается, а сессия с продолжающейся фоновой работой остаётся отмеченной как выполняющаяся.

  • 🪟 Windows: хуки Cursor запускаются корректно, а оконный слой обновлён из-за проблем с вводом с клавиатуры, о которых сообщали после переподключения по RDP или переключения виртуального рабочего стола.

  • 🛡️ Аудит безопасности: список моделей и имена агентов берутся из того же каталога запуска, что и в остальном приложении, поэтому прежние запуски показывают текущее имя каждого агента.

  • 🩹 Прочие исправления: сообщения об ошибках в беседе выравниваются по центральной колонке; оба диалога запуска всегда можно закрыть, а подтверждённый, но неудавшийся запуск — отменить; сообщения и сообщения в очереди показывают отправителя; длинная очередь прокручивается внутри фиксированной высоты; пустые HTML-якоря больше не показывают метку при редактировании документа; фильтр состояния на телефоне подхватывает сессии, которые начинают ему соответствовать позже.

v0.2.2

Последние изменения
  • ⏳ Автоматическое продолжение после лимита использования, по умолчанию выключено в настройках: когда Claude или Codex останавливается на 5-часовом или недельном лимите, сессия продолжается сама после сброса лимита. Над областью ввода появляется баннер со временем сброса и кнопкой «Отмена»; ожидание сохраняется при перезапуске приложения и заканчивается, если отправить сообщение, выполнить откат, очистить сессию или выключить настройку.

  • 🪟 Windows: установка в один клик для OpenCode, Grok и Crush передаёт --allow-scripts, поэтому npm создаёт исполняемый файл; Cursor, OMP и Antigravity ищутся в реальной папке установки в %LOCALAPPDATA%, а OMP также учитывает PI_INSTALL_DIR.

  • 🪟 Windows: файлы, которые ещё скачиваются или копируются, больше не считаются установленными, карточка установки сообщает об успехе только после её реального завершения, а устаревший сохранённый путь заменяется на найденный заново.

  • 🧩 Вид диалога: размышления, вызовы инструментов и промежуточные ответы хода можно скрыть кнопкой «Скрыть шаги», оставив только финальный ответ; панель инструментов скрывает или показывает все ходы сразу, а поиск раскрывает скрытый ход, чтобы найти совпадение.

  • 🔐 Кнопка разрешений теперь показывает режим, с которым была запущена сессия, вместо «Текущие разрешения не подтверждены»; дублирующая строка «настройка запуска» убрана, а сессия, запущенная с пропуском подтверждений, снова подсвечивается в строке состояния.

  • 🔐 Сессия без собственной настройки разрешений следует глобальному значению по умолчанию для своего типа агента в обоих видах, а редактирование сессии больше не закрепляет унаследованное значение как собственное.

  • ↩️ На страницах базы знаний появилась кнопка «На уровень выше»: запись возвращает к своей сессии, затем к проекту и на главную, а архивные сессии, заметки и папки поднимаются так же.

  • 🌱 Дочерняя сессия открывается в том же виде, что и родительская: из сессии в виде диалога задача приходит первым сообщением, а изображения — вложениями; из сессии в терминале она запускается в терминале, а задача передаётся аргументом запуска.

  • 🎨 macOS: окно и полоса заголовка окрашиваются в цвета темы до появления окна, а смена темы во время работы сразу перерисовывает их.

  • 🗜️ Сессии Claude сохраняют в истории чтения ходы до сжатия, при этом откат по-прежнему убирает отброшенную ветку.

  • 🔎 Поиск по диалогу удерживает выбранное совпадение на месте, пока загружается более ранняя история; Enter переходит к предыдущему совпадению, Shift+Enter — к следующему.

  • 🩹 Возврат к диалогу, остановленному в середине истории, восстанавливает позицию чтения вместо пустой панели.

  • 🧭 Диагностическая информация о каталоге моделей показывается только при открытии меню моделей с зажатой клавишей Option; строки ошибок выравниваются по тексту сообщений, а в англоязычной базе знаний отображается «Archived Sessions».

v0.2.1

Последние изменения
  • 🔎 На главной странице базы знаний появилось поле поиска: один запрос ищет сразу по знаниям сессий и локальным заметкам и группирует результаты по источнику. Точные совпадения идут первыми; нечёткий поиск (аббревиатуры, подпоследовательности и опечатки) включается только при полном отсутствии точных совпадений, а запросы на китайском по-прежнему ищут по подстроке.

  • 🗂️ Архивные сессии переехали в базу знаний. Кнопка на боковой панели ведёт сюда, а не открывает отдельную панель; в дереве появился корень «Архив сессий», сгруппированный по исходному проекту, а в основной области перечислены все архивные сессии с восстановлением, упорядочиванием, экспортом и удалением на месте.

  • 🔍 Архивные сессии можно искать по всему тексту: результаты группируются по сессиям с числом совпадений, а панель предпросмотра перебирает совпадения с той же подсветкой, что и глобальный поиск. В открытой сессии переключаются вкладки «Диалог» и «Записи знаний».

  • 🤖 Вид диалога: если исполняемого файла агента нет, под сообщением появляется руководство по установке вместо необработанной ошибки запуска, а «Установить сейчас» переключает в вид терминала, где выполняется рекомендуемая команда. Если агент установлен вне PATH, руководство принимает путь к исполняемому файлу напрямую, а на десктопе доступен системный выбор файла.

  • 🩹 Установки, которые выглядят рабочими, но повреждены, теперь распознаются: обёртка глобальной установки npm, цель которой удалена или заменена, считается неустановленной; если заданный путь указывает на такую обёртку, открывается руководство по установке без перезаписи настройки.

  • 🔐 Пункт режима разрешений сразу показывает выбранный режим, а в меню у каждой строки отмечено, действует ли выбор уже сейчас или ждёт следующего хода.

  • 🔽 Все раскрывающиеся списки переведены на встроенный компонент Select вместо системного элемента, поэтому они одинаково выглядят в macOS 15 и 26 и без наложения системного контрола.

  • ℹ️ У проектов и коллекций появился диалог сведений в контекстном меню.

  • 🪟 Windows: подпроцессы, запускаемые видом диалога (агенты, каталог моделей и проверки git), больше не мигают окнами консоли.

  • 💡 Кнопка отзыва в заголовке окна переместилась после кнопки «Поделиться».

v0.2.0

Последние изменения
  • 📱 Приложение VelaTerm для iOS и Android (ранняя версия): подключайтесь к машине по SSH или URL, подтвердив отпечаток хоста при первом соединении, открывайте полный удалённый интерфейс прямо в приложении, заполняйте данные подключения по QR-коду и входите в удалённую учётную запись.

  • 🛡️ Экспериментальный аудит кода: запускайте из контекстного меню проекта аудит всего репозитория, каталога или файла, либо незакоммиченных изменений рабочего дерева с помощью Codex или Claude Code; проверяйте находки по исходному коду и экспортируйте отчёт в Markdown или JSON.

  • 📓 Локальная база знаний: открывайте папку с заметками Markdown на правой панели, редактируйте заметки в визуальном редакторе, ищите по путям и по тексту, управляйте тегами и избранным и восстанавливайте удалённые заметки из корзины. Агенты могут искать по заметкам командой vkb; импорт папок идёт в фоне и оставляет запись, которую можно раскрыть, открыть снова или отменить.

  • 🤖 Сессии планирования и выполнения: vspawn --plan-execute открывает сессию планирования, которая разбивает задачу на сессии выполнения; vflow предлагает разбиение, vtell --report возвращает результат каждой сессии на приёмку, а доработка использует прежнюю сессию выполнения. Рабочие деревья можно сделать общими для всех ролей или создавать для каждой сессии отдельно.

  • 🔗 Общие проекты и сессии теперь загружают настоящий интерфейс хоста по ссылке общего доступа; трафик идёт через исходящий туннель и ограничен выданным проектом или сессией. Устройствами и разрешениями можно управлять на страницах учётной записи.

  • 🧠 База знаний сессий поддерживает группы проектов, сессий и записей с перетаскиванием, переименованием и удалением; повторная организация той же сессии заменяет задачу, стоящую в очереди.

  • 💬 Режим диалога: длинная история загружается постранично до первого сообщения, все агенты с поддержкой диалогового движка (включая OMP) по умолчанию открывают новые сессии в режиме диалога, а подряд идущие ходы одного агента объединяются в одну строку автора.

  • ⌨️ Терминал: собственные подсказки оболочки предлагают дополнение по Tab для zsh, bash, fish и PowerShell в macOS и Linux, стрелки продолжают вызывать предыдущие команды при открытом списке, а ядро терминала обновлено до xterm 6.

  • 📊 Панель Info показывает статистику текущего хода для Claude, Codex, Grok, OpenCode, Pi и OMP: входные и выходные токены, долю попаданий в кэш, скорость генерации, вызовы инструментов и зафиксированные изменения файлов. Реже используемые элементы управления ввода перенесены в раздел «Ещё».

  • 🔐 В области ввода отображаются настроенный, действующий и ожидающий режим разрешений; если для применения изменения нужен перезапуск, приложение сначала запрашивает подтверждение.

  • 🔔 Уведомления показывают имя сессии и краткий фрагмент ответа; нажатие открывает нужную сессию, а мобильное приложение может получать их через системную службу push-уведомлений.

  • 🌐 Список моделей Claude теперь берётся из опубликованного каталога моделей, кэшируется локально и обновляется каждые шесть часов, объединяясь с моделями, о которых сообщает CLI.

  • 🧵 Стрелки вверх и вниз в области ввода вызывают отправленные ранее сообщения, включая стоящие в очереди и ожидающие подтверждения, а в конце возвращают неотправленный черновик.

  • ↩️ При откате сообщения его изображения возвращаются в область ввода, чтобы их можно было отправить снова.

  • 🔑 Агенты, запущенные в macOS, наследуют полное окружение командной оболочки входа, поэтому инструменты, установленные вне стандартного PATH, тоже находятся.

  • 💡 Пункт обратной связи в заголовке окна открывает страницу обратной связи.

  • 🕹️ Пункт игрового центра на панели вкладок открывает игровой центр сайта (PIXEL WING); в настольной версии игра открывается во встроенном браузере.

v0.1.108

Последние изменения
  • 💬 Экспериментальный режим диалога для Claude, Codex и OpenCode: потоковые ответы, ход рассуждений, подробности инструментов, разрешения и формы вопросов. При первоначальной настройке по умолчанию по-прежнему используется терминал.

  • 🎛️ В зависимости от возможностей движка доступны настройки модели, очередь сообщений, вмешательство в текущий ответ, дополнение путей файлов и вложения изображений.

  • 🔎 Поиск по диалогу, ссылки на файлы, действия с изображениями и отдельные шрифты упрощают чтение длинных сеансов. Удалённая история загружается постепенно, подробности инструментов — по запросу.

  • 📨 Квитанции отправки помогают сверить результат после разрыва соединения. Отправки с неопределённым результатом ожидают подтверждения и не повторяются автоматически.

  • 🤝 Новые команды vrefer и vsearch читают и ищут другие сеансы; vrefer --ask поручает чтение агенту. vorch и vstat добавляют координацию нескольких агентов и просмотр состояния.

  • 🧠 Записи памяти поддерживают теги, прямое редактирование текста, защиту несохранённых изменений и настройки упорядочивания. Улучшены фильтры и выбор при импорте истории, а также навигация по графу.

  • 🌐 Клиент публичного доступа поддерживает привязку учётной записи и устройства, ограниченный доступ к AI-сеансам и зашифрованные ретрансляционные соединения. Загрузка изображений гостями и сложные формы MCP пока не поддерживаются.

  • 🔄 ID возобновления Codex проверяются по сохранённой истории. При подтверждённом отсутствии истории выводится явная ошибка вместо запуска пустого сеанса; к уже работающему терминалу можно подключиться повторно.

  • ↩️ Откат зависит от возможностей движка: Codex восстанавливает только состояние диалога, но не файлы. Обработка области отката и предварительная проверка каталога в OpenCode остаются известными ограничениями.

  • 📦 Обновление номера выпуска сохраняет зафиксированные версии зависимостей. Проверка установки и обновления на всех платформах и приёмка реальной интеграции с AI ещё не выполнены; автоматические проверки их не заменяют.

v0.1.107

Последние изменения
  • 🧠 Глобальная память (экспериментальная функция): Claude или Codex превращает ваши диалоги в общую вики, разложенную по темам
  • 🕸️ Граф кода (экспериментальная функция): индексируйте рабочий каталог, изучайте связи между символами и связывайте их с памятью
  • 🔎 Агенты могут запрашивать код и память прямо в сессии командой vknowledge
  • 🖥️ SSH умеет зеркалировать удалённое десктопное приложение: одинаковые вкладки, разделения и активная сессия на обеих машинах
  • 🪟 Удалённой машиной для SSH теперь может быть Windows
  • 📥 Импорт существующих сессий Codex, Claude и OpenCode из папки проекта
  • 🤖 Новый агент: OMP
  • 🎚️ vspawn позволяет выбрать модель и глубину рассуждений для дочерней сессии
  • 🌿 vspawn-tree работает и в коллекциях, а у запущенных worktree-сессий появляется значок ветки
  • 🔤 Поиск сначала ищет совпадения по целым словам и подсвечивает именно то, что нашёл
  • 🖱️ Щелчок средней кнопкой мыши закрывает вкладку
  • ⌨️ Браузеры на macOS: ⌘D и ⌘⇧D делят панель
  • 💬 При наборе через IME изображение больше не смещается, а курсор виден прямо в наборной строке
  • 🪓 Разделение из меню применяется только к активному окну, и каждое разделение записывается в logs/split.log
  • 📁 Диалог выбора удалённой папки сохраняет введённый вами путь
  • ℹ️ Панель сведений: время запуска и время работы в одной строке, а на macOS показывается средняя нагрузка
  • 🔑 В полях пароля больше нет собственной кнопки показа от браузера

v0.1.106

Последние изменения

Рабочее пространство

  • В боковой панели появились коллекции: контейнеры верхнего уровня, не привязанные к папке на диске. Некоторые сессии изначально не относятся к репозиторию — например, удалённые сессии, страницы браузера или терминал, открытый для быстрой проверки. До сих пор их можно было разместить только внутри проекта, где они выглядели неуместно. Коллекция — это отдельная строка с именем, не привязанная к какой-либо папке на диске. Поскольку корня проекта здесь нет, неактуальные действия скрываются сразу, а не завершаются ошибкой после нажатия: для коллекций скрыты пункты «New Worktree Session», «Move to Worktree…» и выбор worktree в диалоге создания сессии, вместо того чтобы выдавать ошибку при клике. Вместо них диалог создания сессии содержит поле Working directory, в котором по умолчанию указан домашний каталог, а в десктопной версии доступен нативный выбор папки. Сессии, запущенные без явного указания директории, теперь открываются в домашнем каталоге, а не наследуют путь запуска приложения (в macOS это был /).

  • Панель ресурсов теперь показывает всю систему, а не только текущую сессию. Раньше панель отображала нагрузку на процессор и память только для дерева процессов самой сессии, из-за чего было невозможно понять, потребляет ли сессия все ресурсы или компьютер уже был перегружен. Теперь панель разделена на разделы THIS SESSION и SYSTEM. В секции SYSTEM отображаются индикаторы загрузки процессора, памяти и swap (становятся жёлтыми при нагрузке выше 70% и красными выше 90%), а также платформозависимая строка: нагрузка на память (memory pressure) в macOS, нормализованные по количеству ядер показатели средней нагрузки (load average) в Linux и ничего в Windows (где нет эквивалентной метрики). Если вас интересует только текущая сессия, снимите флажок «system» в заголовке панели — системные строки исчезнут, а фоновый сбор метрик полностью остановится. Эта настройка запоминается и применяется к панели каждой сессии.

  • В Windows и Linux появилась строка меню, вызываемая клавишей Alt. В macOS есть нативные системные меню, но в Windows и Linux настройки, проверка обновлений и разделение панелей ранее были доступны только через иконку в строке заголовка. Одиночное нажатие и отпускание клавиши Alt теперь открывает и скрывает строку меню. Комбинации с Alt не затронуты: поскольку в терминале Alt служит префиксом Meta, такие сочетания, как Alt+B и Alt+F, по-прежнему передаются в командную оболочку; меню открывается только одиночным нажатием Alt, которое не отправляет символов в терминал. Строка меню включает разделы File (настройки, проверка обновлений), Terminal (новый терминал, разделить вправо, разделить вниз) и Help (веб-сайт, обратная связь, поделиться), отображая подсказки горячих клавиш с учётом ваших пользовательских настроек. Поддерживается навигация как мышью, так и с клавиатуры: нажатие Esc закрывает открытое меню, затем скрывает строку меню и возвращает фокус в терминал.

  • Пункт меню «Clear notification badges» сбрасывает бейдж уведомлений, который ничем другим нельзя было убрать. Бейдж на значке в доке считает непрочитанные сессии и оставшиеся без ответа карточки подтверждения запуска. Однако кнопка очистки в боковой панели появлялась только при наличии непрочитанных сессий и сбрасывала только их. Если оставалась неотвеченная карточка с запросом — например, из закрытого окна или удалённой сессии, где карточку больше нельзя было отрисовать, — на бейдже в доке отображалась единица без возможности её убрать. Новый пункт меню помечает все сессии как прочитанные, отклоняет все ожидающие запросы на запуск и напрямую сбрасывает счётчик бейджа в ОС до нуля. Это особенно важно для macOS, где счётчик бейджа в доке сохраняется между перезапусками приложения.

  • Окно больше не зависает во время чтения файлов командами или ожидания ответа системы. Синхронные команды Tauri выполняются в главном потоке, замораживая пользовательский интерфейс на всё время своей работы. Аудит всех 43 команд выявил 13 операций ввода-вывода в главном потоке: запрос разрешений на уведомления в macOS мог блокировать интерфейс до одной минуты в ожидании подтверждения пользователя; чтение записей длительных сессий последовательно считывало десятки мегабайт блоками по 64 КБ; вставка скриншотов напрямую записывала данные на диск; а получение рабочей директории сессии запускало процесс lsof. Все 13 команд теперь выполняются вне главного потока. Обработка нажатий клавиш осталась на быстром пути выполнения без изменений.

Удалённый доступ

  • Хост теперь показывает, какие удалённые клиенты подключены. Поскольку зеркалирование сессий двунаправленное, удалённый клиент может изменить разметку хоста — при этом хост раньше никак не мог узнать, подключён ли кто-то, не говоря уже о том, кто именно. В строке заголовка теперь отображается бейдж «Mirrored by N»; по клику на него открывается список подключённых клиентов с их именами, IP-адресами и временем подключения. Имя клиента передаётся во время зашифрованного рукопожатия (если имя не указано, используется «Unnamed»).

ИИ-агенты

  • Статистика использования аккаунта теперь запрашивается один раз на всю машину, а не для каждой сессии по отдельности. Лимиты использования привязаны к аккаунту, но ранее панель информации каждой сессии запрашивала их независимо. При десяти открытых сессиях отправлялось десять дублирующих запросов за одними и теми же значениями, что нередко приводило к превышению строгих лимитов Claude (rate limits) и исчезновению данных из панели. Теперь централизованный фоновый опросчик хранит единый снимок данных, из которого читают все сессии, и рассылает обновления при любом изменении. Опрашиваются только те провайдеры, которыми вы активно пользуетесь (определяется по наличию путей ~/.claude, ~/.codex или ~/.grok/auth.json), без обращения к системной связке ключей, чтобы не вызывать лишних запросов разрешений. Снимки сохраняются на диск, поэтому панель сразу после перезапуска показывает кэшированные значения, не дожидаясь первого опроса. При выходе ноутбука из спящего режима данные также обновляются сразу, а не по наступлению следующего интервала. При повторных сбоях опроса интервал ожидания увеличивается до 8 раз. В настройках интервал обновления теперь дополнен явным переключателем включения/выключения рядом с полем ввода, заменившим неоднозначную настройку «0 секунд».

  • Ошибки обновления расхода теперь явно помечаются как устаревшие данные, а не выглядят актуальными. Ранее при сбое запроса на обновление клиент молча возвращал кэшированную копию, фиксируя при этом успешное обновление: метка времени сдвигалась вперёд, ошибки очищались, а таймер задержки сбрасывался. При попадании под ограничения частоты запросов панель выглядела нормально, хотя опрос продолжался каждые пять минут. Теперь при сбое запроса сохраняются кэшированные значения, но рядом с провайдером появляется жёлтый бейдж stale. При наведении на него отображается подсказка с временем сбоя, причиной ошибки и давностью отображаемых данных. Метка «Updated» показывает время последней успешной синхронизации, а заголовки retry-after от серверов с ограничением частоты запросов корректно учитываются, хотя ручное обновление по-прежнему срабатывает мгновенно.

  • В панели использования появились недельные квоты по отдельным моделям. Помимо общеаккаунтных 5-часовых и 7-дневных лимитов, эндпоинт статистики передаёт недельные квоты для конкретных моделей. Раньше они игнорировались, поэтому пользователи таких моделей, как Fable, видели только общий расход аккаунта, а не оставшуюся квоту для конкретной модели. Теперь эти строки с детализацией отображаются под общими итогами с группировкой по семействам моделей.

  • Повторное открытие сессии OpenCode восстанавливает историю чата. Ранее приложение проверяло существование сессии с помощью opencode session list, которая ищет сессии только в текущем рабочем каталоге. Поскольку десктопное приложение работает из директории своего запуска (в macOS это /), существующие идентификаторы сессий никогда не находились, из-за чего попытки возобновления молча открывали пустые сессии. Теперь проверка запрашивает конкретный ID сессии напрямую и считает её удалённой, только если команда явно это подтверждает. Другие ошибки считаются неопределёнными, и приложение продолжает восстановление, предотвращая случайную потерю истории сессии.

Интерфейс

  • При наборе текста через редактор метода ввода (IME) теперь отображается промежуточный текст. На всех трёх платформах текст, набираемый через IME (например, пиньинь или кана), ранее оставался невидимым до подтверждения клавишей Enter. Причиной было пользовательское правило CSS: xterm отображает набираемый текст в контейнере-оверлее без фиксированных границ, где наше ограничение right (предназначенное для переноса длинных строк в терминале) приводило к нулевой ширине, а overflow: hidden полностью обрезало текст. Это правило удалено, и теперь переопределяется только стандартная чёрно-белая цветовая схема оверлея, которая не соответствовала ни одной теме. Заодно была исправлена сопутствующая проблема: xterm растягивал скрытое поле textarea под размер оверлея для позиционирования списка кандидатов IME, но никогда не уменьшал его обратно, из-за чего оставался невидимый слой, блокировавший клики мыши и выделение текста на этой строке.

  • В macOS сочетания клавиш с Ctrl больше не вызывают действия для Command. Ранее проверка клавиш-модификаторов в macOS считала Cmd и Ctrl взаимозаменяемыми. В итоге стандартные сочетания терминала конфликтовали с горячими клавишами приложения: Ctrl+D (EOF) разделял панели, Ctrl+W (удаление слова) закрывал панели, а такие комбинации, как Ctrl+F, Ctrl+T и Ctrl+O, перехватывались приложением. Поскольку новые панели создаются без уведомлений, часто казалось, что они появляются сами по себе. Теперь десктопное приложение для macOS использует для горячих клавиш исключительно Cmd, тогда как другие платформы (а также веб-браузеры, подключённые к Mac) используют исключительно Ctrl.

  • Выпадающие меню больше не открываются повторно сразу после выбора пункта. Оборачивающий элемент <label> передавал клик по всей строке обратно на кнопку вызова, из-за чего выпадающее меню мгновенно открывалось снова сразу после выбора пункта.

Исправления

  • Linux: пакет AppImage снова запускается. В версии 0.1.105 AppImage завершался аварийно на Ubuntu 22.04 ещё до появления окна, не имея возможности запустить вспомогательные процессы WebKit. Инструменты упаковки AppImage переписывают литеральные пути /usr в исполняемых файлах на ././ (сохраняя длину строки для правки на месте), из-за чего скрипт запуска должен переходить в рабочий каталог $APPDIR/usr, чтобы эти пути корректно разрешались. В 0.1.105 наш пользовательский скрипт запуска, добавленный для предотвращения утечки переменных окружения в дочерние оболочки, передавал переменные окружения, но пропускал этот переход в нужный каталог. Теперь скрипт запуска корректно меняет директорию, а проверка на этапе сборки предотвращает появление подобных регрессий. Версии 0.1.104 и более ранние этой проблеме не были подвержены.

  • Windows: уведомления снова воспроизводят звук, а клик по ним переключает на нужную сессию. Ранее уведомления в Windows отправляли в плагин уведомлений идентификатор звука для macOS. Поскольку распознать такое имя было невозможно, оно превращалось в тишину, из-за чего уведомления в Windows никогда не воспроизводили звук независимо от настроек. Отправка уведомлений Windows через плагин была добавлена два релиза назад как временный обходной путь для проблемы, исправленной в том же релизе. Теперь этот обходной путь убран: уведомления снова идут через нативный канал, что восстанавливает как воспроизведение звука, так и переход к сессии по клику.

  • Windows: символы псевдографики и блочные элементы теперь выровнены. Ранее рамки в терминале отображались с использованием пропорционального резервного шрифта, что приводило к визуальному размытию. Даже после устранения этой проблемы блочные символы (используемые в индикаторах выполнения и маскоте Claude Code) по-прежнему имели едва заметный вертикальный зазор по правому краю каждого знакоместа, поскольку резервный шрифт был немного уже основного шрифта терминала. Теперь оба диапазона символов берутся из встроенного подмножества JetBrains Mono, гарантируя точное совпадение ширины глифов.

  • Windows: git работает в полной версии Git Bash. Хотя установка полной версии Git Bash проходила успешно, выполнение git в терминале возвращало ошибку «command not found», из-за чего пользователю снова и снова предлагалось установить полный Git Bash. Git Bash добавляет mingw64/bin в переменную PATH только тогда, когда ему указано, в каком дереве каталогов он запущен. Поскольку наш загрузчик оболочки опускал этот параметр, исполняемые файлы, находящиеся исключительно в этой директории (такие как git и curl), не находились. Кроме того, диалог скачивания теперь выбирает установщик, соответствующий архитектуре системы, а не предлагает по умолчанию 64-битную версию.

  • Windows: удаление worktree теперь работает, а переустановка хуков Kiro перестала их дублировать. Ранее команды удаления worktree выполнялись изнутри целевой директории worktree. Поскольку Windows запрещает удаление текущей рабочей директории активного процесса, операция постоянно завершалась ошибкой доступа; теперь команды Git выполняются из корня основного репозитория. Кроме того, логика обнаружения хуков сравнивала пути с прямым слешем с путями с обратным слешем в Windows, из-за чего проверка не срабатывала и при каждой переустановке добавлялись дубликаты записей хуков.

v0.1.105

Последние изменения

Рабочее пространство

  • Состояние сессии, отметки о непрочитанном и то, работает ли сессия до сих пор, теперь определяются на бэкенде, и все клиенты видят один и тот же ответ. Раньше каждый клиент выводил всё это из того, что случайно наблюдал сам, поэтому «непрочитано» на деле означало «не прочитано в этом окне»: сессия, прочитанная в браузере, оставалась непрочитанной в настольном приложении, а динамически расширяющийся фильтр по состоянию снова и снова возвращал эту строку в общий список, откуда её не убирало даже «Обновить состояние». События состояния к тому же регистрировались только после того, как клиент сам запускал хотя бы одну сессию, поэтому только что подключившийся браузер показывал точки у сессий, которые открыл сам, и ничего — у всех остальных. Теперь бэкенд держит по одной достоверной записи на сессию — агент, его состояние, жив ли процесс и признак непрочитанного, — отвечает на пакетный запрос, когда клиент подключается или переподключается, и рассылает каждое изменение всем. Клиенты сообщают, что они наблюдают; выводы делает бэкенд. Прочитанная на телефоне сессия снимает отметку и в настольном приложении, только что подключившийся браузер показывает правильные точки у сессий, которые он никогда не открывал, а правила арбитража, жившие раньше во фронтенде, переехали вместе со своими обоснованиями и своими тестами: хук, сообщивший о себе хотя бы раз, закрывает дорогу любым догадкам по сырому выводу; непрерывный вывод означает занятость только для сессии, у которой есть агент, которая не является Codex и по которой ещё нет достоверного сообщения; а удержание в 1200 мс не даёт только что начатой задаче быть отменённой событием завершения, пришедшим сразу следом. Исключение — чтение экрана: ему нужна отрисованная сетка, а она существует только в клиенте, поэтому прочитанное сообщает тот клиент, которому принадлежит размер терминала, а бэкенд решает, принимать ли это сообщение, — сообщение от любого другого клиента отклоняется. Если что-то из этого пойдёт не так, значение frontend у ключа vlx-arbitration в localStorage возвращает арбитраж прежней цепочке во фронтенде.

  • Перезапуск сессии больше не закрывает её вкладку на другом клиенте. Событие pty://killed не несло с собой никаких данных, поэтому другая сторона не могла отличить перезапуск от закрытия: она считала закрытием всё подряд, убирала панель, а потом отзеркаливала эту раскладку обратно. Теперь событие сообщает, какой клиент завершил процесс и почему, поэтому при перезапуске панель остаётся на месте и ждёт нового процесса. Отсутствующая или незнакомая причина по-прежнему считается закрытием: оставить панель открытой для сессии, которая уже не вернётся, — значит держать на экране мёртвый терминал, а это хуже, чем закрыть ту, что собиралась перезапуститься.

  • Браузер, подключившийся к настольному приложению сразу после восстановления рабочего пространства, больше не запускает все сессии по-настоящему. При восстановлении рабочего пространства вместо запуска процессов рисуются карточки-заглушки, но это решение существовало только в настольном приложении; браузер шёл за отзеркаленной раскладкой, не мог отличить «не работает» от «работает, просто здесь ни разу не открывалась» и монтировал терминалы — а смонтировать терминал значит его запустить. Лист, пришедший с чужой раскладкой, теперь рисуется заглушкой, если бэкенд говорит, что процесса за ним нет. Открыть сессию самому по-прежнему означает намерение её запустить, а терминал, на который вы смотрите прямо сейчас, при завершении процесса никогда не подменяется карточкой — вы ведь ещё можете захотеть прочитать то, что он вывел.

  • Изменение настройки немедленно доходит до остальных клиентов. Достоверные настройки всегда хранились на бэкенде, но менял он их молча, поэтому другой клиент узнавал об изменении только при следующем запуске. При удалённом подключении это не просто расхождение в отображении: выключить «динамически расширять фильтр по состоянию» на одном клиенте было бесполезно, пока другой продолжал добавлять строки в общий список, а клиент с меньшим лимитом живых вкладок выгружал фоновые вкладки у всех остальных. Теперь запись настройки рассылает всем, какой ключ изменился, и каждый клиент перечитывает его тем же путём, каким читает при старте, поэтому правила, скрывающие защищённые значения от удалённых вызывающих, продолжают действовать: рассылка несёт только имена ключей и никогда — значения. Телефоны, которые раньше настройки ни отправляли, ни получали, теперь тоже в этом участвуют.

  • Браузер дожидается отзеркаленной раскладки, прежде чем восстанавливать свою. У удалённого окна два источника раскладки — своя, из localStorage, и та, которую в зеркальном режиме присылает хост, — и та, что приходила первой, затиралась другой. Показать сначала локальную стоило дороже, чем мелькание на экране: смонтировать лист с терминалом значит запустить настоящий процесс, и для сессии, чей процесс уже завершился, это означало поднять оболочку, на которую никто никогда не посмотрит, — и она потом оставалась висеть, потому что браузер свои терминалы отсоединяет, а не завершает. Теперь браузер ждёт, пока пройдёт первое согласование, и только после этого что-то восстанавливает, но не дольше двух секунд; если бэкенд медлит или недоступен, он возвращается к локальной раскладке, а не сидит с пустым окном. Телефоны и любой клиент с выключенным зеркалированием проходят сразу.

Удалённый доступ

  • SSH-подключение может включить зеркальный режим для той службы, которую оно поднимает. Переключатель живёт в панели удалённого доступа, но SSH поднимает на дальней машине службу без интерфейса, и никакой панели там нет. Удерживайте Option при щелчке по «Connect remote» — и в форме SSH появится флажок «Mirror UI across clients», по умолчанию снятый. Значение едет вместе с подключением и живёт в памяти службы, а не записывается в базу данных дальней машины: когда вы вдобавок используете базу данных самого удалённого рабочего стола, одно SSH-подключение не должно незаметно переключать тумблер в чужой панели. Выбор запоминается отдельно для каждого хоста, поэтому та же машина, выбранная из истории, приходит вместе с ним. Чтобы переиспользовать уже работающую службу, теперь должны совпасть версия, режим данных и зеркальный режим — если различается хотя бы одно из трёх, старая служба заменяется, а это завершает работающие на ней сессии; поэтому эта настройка и спрятана за Option, рядом с переключателем базы данных.

  • Клиент, который повторяет чужую раскладку, теперь об этом сообщает. Раньше вкладки и разделения на ведомом клиенте перестраивались сами собой, и на экране ничто не объясняло, откуда взялось изменение. Теперь в заголовке окна есть значок «Mirrored», а при наведении показывается пояснение. У хоста такого значка нет — у него есть сам переключатель.

  • Файлы теперь можно переносить между вашей машиной и той, где работает терминал. Удалённый доступ показывал файлы удалённой машины, но забрать один или положить туда свой было нечем — оставалась только команда в терминале. В панели файлов появились «Скачать» в контекстном меню файла и «Загрузить» в заголовке, а перетаскивание файлов с рабочего стола на строку папки отправляет их туда. Оба направления идут по тому же аутентифицированному соединению, что и всё остальное, поэтому одинаково работают из браузера в локальной сети, с телефона и из окна удалённого подключения. Передача идёт частями, под деревом показывается очередь с прогрессом, и она продолжается, пока вы смотрите другую панель. «Скачать» — обычная ссылка на загрузку, которой занимается собственный менеджер загрузок браузера: он пишет на диск по мере получения, показывает скорость и оставшееся время, умеет ставить на паузу и продолжать — при любом размере файла и в любом браузере, включая телефон. В ссылке лежит билет, выписанный на один этот файл и действующий несколько минут: этот сервер держит учётные данные в заголовке, а браузер, открывающий ссылку, заголовков не отправляет. Загрузка сначала пишется под временным именем и переименовывается только после завершения, так что прерванная передача никогда не оставит наполовину записанный файл там, где должен быть целый; занятое имя отклоняется до того, как что-либо будет передано. Загрузки показывают скорость и оставшееся время и переживают обрыв связи: неудавшийся кусок ждёт и повторяется около минуты, каждый раз спрашивая у сервера, докуда на самом деле дошёл временный файл, вместо того чтобы слать заново кусок, который мог уже записаться. Даже сдавшись, эти байты сохраняются: перетащите тот же файл в ту же папку — и передача продолжится с места остановки, в том числе после перезагрузки страницы; частичный файл выбрасывается только при отмене.

ИИ-агенты

  • Сессии Antigravity и Copilot называются по своему первому сообщению. Оба агента отсутствовали в автоматическом переименовании, из-за чего в боковой панели выстраивались ряды «Antigravity 1, 2, 3». События хуков Antigravity вообще не несут пользовательского текста — только идентификатор беседы и путь к расшифровке, — поэтому первое сообщение читается из самой расшифровки; идущий за ним блок метаданных в заголовок не попадает. События Copilot к тому же не несут имени события и различаются по своей форме, поэтому тело с запросом и без имени инструмента теперь считается отправкой сообщения — а значит, промпт, с которым запускается сессия, и вызовы инструментов в заголовок справедливо не попадают.

  • Сессия Antigravity открывается заново вместе со своей историей. Для возобновления нужен идентификатор беседы, а разбор, который вытаскивает идентификатор сессии из аргументов запуска, не узнавал того написания, которое использует Antigravity, поэтому --conversation=<id> было не на что опереть и каждая переоткрытая сессия поднималась пустой.

  • vspawn --yes создаёт дочернюю сессию без карточки подтверждения. Тем, у кого включено подтверждение перед созданием дочерних задач, приходилось прощёлкивать карточку для каждой дочерней сессии подряд. Флаг — его же можно написать как -y или --no-confirm — пропускает карточку для этого одного вызова и запускает сессию с настройками по умолчанию. Саму настройку он не меняет, поэтому следующий запуск без него снова спросит.

  • Поле модели на карточке дочерней задачи принимает всё, что вы наберёте. Раньше это был обычный выпадающий список, поэтому выбрать можно было только модели из него, — а агент понимает куда больше идентификаторов: имена с датой вроде claude-opus-4-6, имена с префиксом поставщика, псевдонимы, настроенные локально. Теперь это текстовое поле, а известные модели висят рядом в выпадающем списке как быстрый выбор. Список — это подсказка, а не белый список: передаётся ровно то, что вы набрали, пустое поле означает, что --model не передаётся вовсе, а сам список фильтруется по мере набора и сворачивается, когда произвольный идентификатор не совпадает ни с чем.

Интерфейс

  • Один выпадающий список на всё приложение. Выпадающие списки по всему приложению были больше десятка раз скопированы с одного и того же кода, а потом разошлись между собой: три разных фона панели, четыре тени, три цвета подсветки под курсором, высота кнопки в 26, 28 и 32 пикселя и галочки у выбранных строк, которые нужны только списку с множественным выбором. Теперь на одном компоненте держатся выбор веток при слиянии, выбор языка, оболочки по умолчанию и шрифта в настройках, выбор агента, диалоги рабочих деревьев (worktree), выбор типа агента у новых и восстановленных сессий и последний нативный select в модальной форме. Вместе с ним появилось управление с клавиатуры, которого не было ни у одного из них: стрелки перемещают выбор, Enter выбирает, Escape закрывает список, не закрывая диалог за ним, Home и End прыгают в начало и конец. Два меню в строке состояния ведут себя как раньше, а фильтр по состоянию в боковой панели сохраняет свои галочки — он и правда с множественным выбором.

  • Пароль в панели удалённого доступа можно показать. Это было голое поле пароля, и набранное в нём было не разглядеть; кнопка с глазом существовала, но только внутри файла самой панели подключения. Теперь оба места используют один компонент, а показанное состояние сбрасывается при закрытии панели.

  • Селектор IP больше не выглядит как системный элемент управления. Это был нативный select, который WKWebView оформляет системным образом, и на тёмной панели это смотрелось плохо — та же претензия, что и к заменённым выше выпадающим спискам. Теперь он использует общий компонент, а его подпись сокращена до «IP»: соседний текст и так объясняет, зачем он нужен.

Исправления

  • Проверка обновлений каждый раз действительно спрашивает сервер. Клиент, оставленный работать надолго, залипал на первой увиденной версии: найдя 0.1.101, он продолжал предлагать 0.1.101 и после выхода 0.1.104, а «Проверить обновления» лишь открывало заново тот же диалог, потому что старый код выходил сразу, если уведомление уже висело. Теперь каждая проверка — настоящий запрос. Более новая версия заменяет уведомление на экране, та же самая версия или идущая загрузка оставляют его как есть, а сервер, который вообще не сообщает об обновлении, убирает устаревшее уведомление — версию отозвали или вы тем временем поставили её сами. Кнопка «Скачать вручную» теперь открывает страницу загрузки на сайте; раньше она отдавала собственный пакет механизма обновления, который распаковывается на месте и вручную не устанавливается.

  • Полноэкранный оверлей с ошибкой больше не появляется при быстром уничтожении терминалов. Область просмотра xterm планирует синхронизацию области прокрутки при создании и ещё одну при сбросе и ни ту ни другую не отменяет при уничтожении, поэтому терминал, открытый и закрытый в пределах одной задачи, — а именно это и происходит при перестройке дерева сессий во время удалённого подключения — всё равно выполнял эти callback, находил уже очищенный рендерер и падал с исключением. Исключение прилетает из таймера, куда не дотягиваются ни try/catch, ни граница ошибок, поэтому оно перехватывается глобально и распознаётся узко: проглатывается как безобидный и записывается в журнал запросов только тот стек или то сообщение, которые называют именно эту синхронизацию и вдобавок упоминают рендерер или его размеры. Настоящие сбои по-прежнему поднимают оверлей.

v0.1.104

Последние изменения

ИИ-агенты

  • Карточка дочерней задачи теперь предлагает настоящие модели каждого агента и тот флаг уровня усилий, который этот агент действительно понимает. Карточка собирала аргументы запуска с --model и --effort для всех подряд, но только Claude, Kiro и Antigravity записывают глубину рассуждений именно так — у Grok и Zoo это --reasoning-effort, у Cline — --thinking. Выбор уровня усилий для любого из остальных передавал CLI флаг, о котором тот никогда не слышал, и сессия не запускалась. Теперь каждый агент сам сообщает свои имена флагов и свои допустимые значения. Поле выбора модели следует за тем, что каждый CLI способен о себе рассказать: у тех, кто умеет перечислить свой каталог (OpenCode, Grok, Crush, Antigravity, Cursor, pi, Kiro), список запрашивается и показывается настоящим; у тех, у кого набор фиксирован (Claude, Codex, Kimi Code), показывается этот набор; остальные дают текстовое поле с примером ожидаемого формата. Агент, который не установлен или в котором вы не вошли в аккаунт, так и скажет, а не будет бесконечно крутить индикатор. Выбор «По умолчанию» теперь снимает унаследованное переопределение, а не оставляет прежнее значение на месте, а выбор уровня усилий больше не сбрасывает модель, унаследованную от родительской сессии.

  • Дочерняя задача, запущенная из сессии Kimi Code, остаётся Kimi Code. Kimi Code отсутствовал в списке, по которому при создании дочерней задачи наследуется агент родителя, поэтому её дочерние сессии незаметно поднимались с агентом по умолчанию.

Рабочее пространство

  • Группу можно перевести в рабочее дерево (worktree) уже после её создания. Рабочее дерево выбиралось при создании группы и дальше не менялось; если вы передумали, приходилось удалять группу и собирать её заново. Щёлкните по группе правой кнопкой и выберите «Move to Worktree…», чтобы создать новое рабочее дерево, привязать существующее или перенаправить группу, которая уже к чему-то привязана. Меняется только сама группа: сессии, уже находящиеся внутри, сохраняют тот каталог, с которым были созданы, — работающую сессию нельзя перенести в другой каталог у неё под ногами, — а сессии, созданные после, стартуют в рабочем дереве.

  • Зеркальный режим теперь охватывает всё дерево боковой панели. Раньше он передавал выделение и свёрнутые панели, а строка поиска и фильтры по состоянию и меткам оставались локальными — из тех соображений, что их синхронизация помешает тому, кто в этот момент что-то ищет. Рассуждение было перевёрнутым: зеркалирование означает, что оба окна держат одно и то же состояние, а не что одно повторяет нажатия клавиш другого — включённый здесь фильтр включён и там. По-настоящему мешает как раз то, что две стороны показывают разные деревья. Теперь передаётся каждая проекция боковой панели: раскладка разделения, имя каждой проекции, её строка поиска, её фильтры по состоянию и меткам и её собственное состояние свёрнутости. Формат снимка перешёл на версию 2, и клиент со старой версией прекращает зеркалирование, а не применяет половину кадра, поэтому перезагрузите те окна, которые вы оставили открытыми на время обновления.

Интерфейс

  • Закрытие окна в macOS задаёт тот же вопрос, что и выход из приложения. ⌘Q и пункт меню проходили через собственное подтверждение приложения, а красная кнопка закрытия уничтожала окно сразу — то самое окно, в веб-представлении которого живёт диалог подтверждения. В итоге вы либо не получали подтверждения вовсе, либо видели урезанный системный запасной вариант: без флажка «сохранить рабочее пространство» и с непереведённым текстом. Теперь на всех трёх платформах окно остаётся открытым, пока вы не ответите.

  • Флажок «сохранить рабочее пространство» включён по умолчанию и остаётся там, куда вы его поставили. Потерянная раскладка обходится дороже лишнего снимка, поэтому флажок изначально стоит. Раньше он ещё и забывался: настройка записывалась в базу данных через задержку в 400 мс, а выход убивал процесс внутри этого окна, поэтому следующий запуск сверялся со старым значением и возвращал ваше изменение обратно. Теперь запись сбрасывается на диск до выхода, с потолком в 600 мс, чтобы зависший бэкенд не оставил кнопку подтверждения крутиться. (Вклад FarhadGSRX.)

  • Пароли в панели удалённого подключения можно показать. И у пароля от URL, и у пароля SSH появилась кнопка с глазом, переключающая между скрытым и открытым текстом. Показанное состояние действует только для этого поля и сбрасывается при закрытии панели, поэтому пароль никогда не остаётся висеть на экране.

  • Значок фильтров в боковой панели считает все включённые фильтры. Фильтр по меткам только подсвечивал кнопку, ничего при этом не сообщая, поэтому значок мог показывать 1, когда активны два фильтра. Теперь он считает состояния и метки вместе и совпадает с галочками в выпадающем списке; одиночный фильтр по состоянию сохраняет свою цветную точку.

Исправления

  • Автоматическое обновление в macOS снова работает. Пакеты v0.1.103 несли в себе сопутствующие записи AppleDouble (._VelaTerm.app), у которых механизм обновления отрезает первый компонент пути — и остаётся пустой путь, — после чего он вообще отказывался распаковывать архив. Затронуты обе архитектуры, поэтому каждый пользователь macOS на v0.1.103 застревал на ней. При сборке пакетов такие записи больше не появляются.

  • Системные элементы управления следуют за темой приложения, когда она отличается от системной. Применение темы задавало собственные цвета приложения, но никогда не обновляло color-scheme: это значение один раз бралось при запуске из системной настройки и больше не менялось, поэтому флажки, выпадающие списки и полосы прокрутки оставались тёмными у светлого приложения в тёмной системе. (Вклад FarhadGSRX.)

  • Свежий клон снова собирается. Крейт на Rust встраивает ../dist во время компиляции, а команда для разработки этот каталог не создаёт, поэтому только что склонированный репозиторий не компилировался ещё до того, как его можно было запустить. Сборочный скрипт теперь создаёт каталог, если его нет. (Вклад FarhadGSRX.)

v0.1.103

Последние изменения

Исправления

  • Сессии Codex в Windows больше не отказываются запускаться. Каждая сессия Codex немедленно завершалась с ошибкой unexpected argument '--codex-hook', потому что TOML-таблица хуков жизненного цикла, передаваемая через командную строку, содержит пробелы и двойные кавычки, а установленный через npm codex.cmd повторно разбирает это через cmd.exe, который удаляет кавычки и разделяет значение на несколько аргументов. Теперь в Windows инъекция хуков пропускается; определение состояния возвращается к существующим эвристикам notify / screen / busy, которые по-прежнему сообщают состояния простоя и занятости, хотя и менее точно, чем хуки. macOS и Linux не затронуты и продолжают использовать хуки.

  • Откачено исправление предварительного редактирования IME для Windows из v0.1.102. Исправление, восстановившее оверлей композиции для ввода на китайском, японском и корейском, также добавило ему цвет фона, рамку в 1px и скруглённые углы, из-за чего при наборе в терминале появлялась небольшая рамка вокруг текста предварительного редактирования — чего в терминале быть не должно. Поскольку размеры оверлея, геометрия вспомогательного контейнера и очистка textarea были взаимозависимы, потребовалось откатить всё изменение целиком. Проблема слепого набора CJK в Windows остаётся открытой и отслеживается в issue #6.

v0.1.102

Последние изменения

ИИ-агенты

  • Пресеты агентов: несколько совместимых CLI бок о бок. Каждый тип агента был жёстко привязан к одному исполняемому файлу, поэтому форку, ночной сборке или второму CLI с тем же протоколом просто негде было появиться — приходилось править аргументы запуска у существующего типа и терять исходный. Теперь пресет задаёт собственный исполняемый файл, значок и аргументы запуска и появляется в меню создания сессии рядом со встроенными типами. Сессия запоминает, каким пресетом она создана, поэтому её форк запускается тем же исполняемым файлом, а пресет, созданный в настольном приложении, виден и в сопряжённых браузерах, и в удалённых клиентах — вместе со значком, потому что значок передаётся как данные, а не как путь на одной конкретной машине. Существующие сессии не затронуты: база данных от прежней версии запускается ровно так же, как и раньше.

  • Карточка дочерней задачи выбирает модель и уровень усилий, и один ответ закрывает её везде. Когда агент просит создать дочернюю задачу, карточка подтверждения теперь предлагает модель и — если агент это поддерживает — глубину рассуждений; оба поля заполнены значениями из аргументов запуска родителя, так что в обычном случае достаточно одного щелчка. Если переключить карточку на другого агента, оба значения выводятся заново, поэтому имя модели от одного CLI больше не может попасть в командную строку другого. Карточка появляется на всех подключённых клиентах, и ответ на одном теперь убирает её на остальных; первый ответ вдобавок закрепляет задачу за собой на сервере, так что подтверждение с телефона и с компьютера в одну и ту же секунду создаёт одно рабочее дерево (worktree) и одну дочернюю сессию, а не по два.

Рабочее пространство

  • Зеркальный режим: одна общая раскладка на всех клиентах. Поток терминала всегда был общим — один PTY, один поток байтов, — но всё, что вокруг него, хранилось только в браузерном хранилище каждого клиента, поэтому браузер, открытый по локальной сети, показывал свои собственные вкладки и разделения, а перестановка на одном экране ничего не меняла на другом. При включённом зеркальном режиме вкладки, разделения, активная сессия, выделение в боковой панели и свёрнутые панели публикуются всем клиентам, и все за ними следуют. Переключатель находится у хоста, в панели удалённого доступа. Перестановка с любой стороны действует и на другой; сессия, покидающая раскладку этого окна, отсоединяется, а не завершается, поэтому следование за соседним клиентом никогда не обрывает чужой процесс; а применение чужой раскладки не отбирает клавиатуру у того, кто печатает локально. Телефоны в этом не участвуют — двухуровневая навигация телефона устроена иначе, и переносить на неё дерево разделений с рабочего стола никому не нужно.

  • Вкладка Git в правой боковой панели стала полноценным Git-клиентом. Раньше она только перечисляла изменённые файлы. Теперь она добавляет в индекс и убирает из индекса отдельные файлы и целые группы, отменяет изменения, создаёт коммит (в том числе amend) и показывает историю коммитов с файлами и различиями каждого — всё это разложено по сворачиваемым разделам: в индексе, изменённые, неотслеживаемые и закоммиченные. Пути отсчитываются от корня репозитория, поэтому сессия, открытая в подкаталоге, работает именно с теми файлами, которые показывает, а отсоединённый HEAD так и подписан, вместо ветки с именем HEAD.

Интерфейс

  • ⌘Q теперь задаёт тот же вопрос, что и закрытие окна. Пункт Quit в меню приложения был системным и завершал процесс сразу: нажатие ⌘Q проскакивало мимо подтверждения «сохранить рабочее пространство», которое показывает кнопка закрытия, — одно и то же намерение вело себя по-разному в зависимости от того, как вы его выразили. Теперь оба пути проходят через одно подтверждение. Если окно, которое его показывает, к этому моменту перезагрузилось или упало, повторное нажатие ⌘Q спрашивает снова и переходит к системному диалогу, а не оставляет приложение незакрываемым.

  • Подсказки к горячим клавишам показывают те клавиши, которые действительно работают. Значения по умолчанию различаются от платформы к платформе, а браузер оставляет сочетания ⌘/Ctrl с буквой себе — ⌘D добавляет закладку, ⌘T открывает вкладку, — поэтому на macOS собственные ⌘-сочетания приложения вообще не доходили до страницы, когда VelaTerm открывали по URL. Обычные вкладки браузера теперь используют сочетания с Ctrl+Alt на всех операционных системах, а настольное приложение и окна удалённого подключения сохраняют ⌘. Всплывающие подсказки и подсказка на пустой вкладке показывают действующее сочетание, включая то, которое вы переназначили сами, а не жёстко зашитую комбинацию с ⌘; терминал же перехватывает ровно те сочетания, которые заняло приложение, поэтому при переназначении действия клавиша переезжает вместе с ним.

  • В наборе шрифтов появились Nerd Fonts и CJK, а про свой шрифт, которого нет в системе, приложение честно скажет. В список готовых вариантов добавлены распространённые семейства Nerd Font и CJK, а введённый вручную шрифт теперь отображается обратно и проверяется: если в системе его нет, страница настроек так и говорит, а не подставляет молча шрифт по умолчанию, ничем не похожий на запрошенный.

  • Поля ввода в macOS больше не меняют регистр и не исправляют набранное. Системные автоматическая заглавная буква, автозамена и проверка орфографии применялись ко всем полям приложения, включая имена сессий и поля с командами, где «npm» превращался в «Npm». Теперь всё это выключено везде.

Windows

  • При вводе на китайском, японском и корейском снова видно и предварительный текст, и окно вариантов. Раньше не было видно ни того, ни другого — вы печатали вслепую и видели результат только после Enter. Виноваты оказались два наших собственных правила CSS: контейнер с наложением предварительного ввода схлопывался до нулевой ширины, а смещение right у наложения внутри него превращалось в ничто. Окно вариантов исчезало следом, потому что операционная система располагает его по прямоугольнику наложения. Наложение снова рисуется и оформлено цветами приложения, а невидимое поле ввода, на котором оно держится, по завершении ввода отдаёт свою геометрию, поэтому щелчки и протягивание по этому участку попадают в терминал, а не в пустой элемент, который раньше продолжал его закрывать.

  • Системный заголовок окна следует за светлой и тёмной темой. Приложение оставляет системный заголовок окна, а Windows рисует его светлым, пока ему не скажут иначе, поэтому над тёмным интерфейсом висела белая полоса. Теперь заголовок совпадает с приложением, в том числе у окон, открытых позже, — например у окон SSH и удалённых подключений. Вариант «как в системе» возвращает управление операционной системе, а не закрепляет одно значение.

  • Посторонний квадрат при холодном старте исчез. Плагин единственного экземпляра создаёт скрытое окно для сообщений и никогда не давал ему той прозрачности, которую обещал его собственный стиль, поэтому Windows иногда растягивал окно нулевого размера до минимального и рисовал во время запуска небольшой квадрат. Теперь окно действительно прозрачно; поведение единственного экземпляра не изменилось.

Производительность

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

Исправления

  • Дочерняя сессия теперь запускается так же, как та, что её попросила. Дочерние сессии не наследовали ни режим разрешений родителя, ни его аргументы запуска, поэтому потомок сессии, работавшей с пропуском подтверждений, поднимался и всё-таки их спрашивал, а закреплённая у родителя модель терялась. Теперь наследуется и то и другое, а при отсутствии значений применяются глобальные настройки по умолчанию для этого типа агента — те же, что подставляет меню «новая сессия агента».

  • Переподключение удалённого окна больше не сообщает о ложной «ошибке аутентификации». При переподключении окна новое WebSocket-соединение и то, которое оно заменяло, состязались друг с другом; закрытие проигравшего подавалось как ошибка аутентификации, и баннер обвинял совершенно исправное сопряжение в том, что его отвергли.

  • Группу больше нельзя перетащить внутрь самой себя. Если бросить группу на один из её собственных потомков, вся эта ветка отрывалась от дерева, и сессии внутри неё пропадали из боковой панели, пока базу данных не чинили вручную. Теперь такое перемещение отклоняется.

  • Вывод агента сохраняет цвета, когда VelaTerm запущен из другого инструмента. Терминал наследует окружение того, кто его запустил, поэтому запуск из IDE или из агентской обвязки, экспортирующей NO_COLOR, CI или FORCE_COLOR=0, делал любой агентский TUI внутри VelaTerm чёрно-белым, хотя терминал заявляет полную поддержку цвета. Эти унаследованные значения теперь отбрасываются при старте сессии; те же переменные, экспортированные из вашего собственного профиля оболочки, по-прежнему действуют, потому что профиль выполняется уже внутри сессии.

v0.1.101

Последние изменения

Удалённый доступ

  • Выбирайте, какой адрес использует ссылка общего доступа — адреса Tailscale теперь отображаются. Список адресов принимал только классические частные диапазоны IPv4, поэтому VPN-сети вроде Tailscale, выдающие адреса из диапазона операторского NAT (100.64.0.0/10), молча выпадали из панели удалённого доступа и ссылки сопряжения — хотя сервер уже был доступен по ним. Теперь эти адреса перечисляются; VPN-туннели стоят в конце списка, чтобы никогда не становиться выбором по умолчанию. Новый селектор IP в панели — доступный до запуска и во время работы — показывает каждого кандидата с именем интерфейса и помечает VPN-туннели; выбор адреса перемещает его URL в начало и заново создаёт ссылку сопряжения именно с этим хостом, так что скопированная ссылка работает на устройстве, которое достигает этой машины только через VPN, без ручного редактирования URL. QR-код под ссылкой сопряжения можно отсканировать телефоном напрямую. Выбор запоминается; если выбранный интерфейс исчезает, панель возвращается к «Автоматически», не забывая его. Сам сервер не изменился и по-прежнему слушает на всех интерфейсах. Выбор адреса, появившегося только после запуска сервера — например, подключившегося позже VPN, — теперь сразу обновляет и копируемый URL, и QR-код, а не только ссылку сопряжения до следующего перезапуска; VPN-туннели на всех платформах стоят после LAN-адресов, адрес, выбранный при остановленном сервере, определяет самую первую ссылку сопряжения после запуска, а перекрывающиеся перегенерации ссылки больше не могут перезаписать более новую ссылку более старой.

  • Общий доступ теперь переживает перезапуск. Раньше токен сопряжения создавался заново при каждом запуске сервера: стоило закрыть и снова открыть VelaTerm, как все выданные ссылки незаметно становились недействительными, и каждый телефон приходилось сопрягать заново. Теперь токен, сопряжённые устройства и список заблокированных устройств сохраняются в файле в каталоге данных, доступном только владельцу: уже сопряжённое устройство после перезапуска подключается по сохранённому URL — пароль доступа остаётся обязательным вторым фактором, — а отозванное устройство остаётся отозванным. VelaTerm также помнит, что общий доступ был включён: закройте приложение при работающем сервере, и при следующем запуске он автоматически поднимется на том же порту — как в настольном приложении, так и на сервере без интерфейса с --serve; если остановить его вручную, ничего не запустится автоматически. Если автоматический запуск не удался, например порт занят, приложение запускается как обычно, а панель удалённого доступа показывает причину. Поле порта теперь запоминает фактически использованный порт вместо возврата к значению по умолчанию, а «Пересоздать ссылку» остаётся явным способом всё отозвать: команда сразу выдаёт новый токен, делает недействительными все старые ссылки и перезаписывает сохранённое состояние. Сам пароль доступа никогда не записывается на диск — хранится только требовательный к памяти хеш (Argon2id).

Безопасность

  • Сопряжённое устройство больше не может управлять самим общим доступом. Любой сопряжённый браузер мог вызывать те же команды управления, что и настольное приложение, — создать новую ссылку для сопряжения (это заодно очищает список заблокированных устройств), просмотреть и отозвать другие устройства, остановить или перенастроить сервер, — а хранилище настроек выдавало каждому клиенту полную карту настроек, включая требовательный к памяти хеш пароля доступа и настройки автозапуска, которые прочитает следующий запуск. Команды управления теперь доступны только настольному приложению и оболочке Electron; API настроек убирает ключи удалённого доступа и токен Gitea из каждого чтения с сопряжённого устройства и отклоняет запись в них. Сопряжённое устройство сохраняет то, ради чего существует сопряжение, — свои терминальные сессии с полным доступом к оболочке, — но больше не может прочитать проверочное значение пароля, пригласить или изгнать другие устройства или подменить порт, который использует следующий запуск. Команды, которые читают, записывают или удаляют сохранённые секреты — токен Gitea и запомненные пароли хостов, — теперь тоже отклоняются для сопряжённого устройства, а команды, принимающие путь, — чтение, предпросмотр, запись, создание, переименование и удаление, а также показ git-диффа файла и выбор папки для клонирования репозитория — сначала разрешают символические ссылки и отклоняют пути внутри собственного каталога данных VelaTerm, где хранятся состояние сопряжения и ключи; любые другие пути работают по-прежнему, так что удалённый просмотр и редактирование файлов остаются доступными. Тест перечисляет каждую удалённую команду, принимающую путь, поэтому новая команда не сможет незаметно обойти эту проверку. Когда одна из этих защит отклоняет запрос, браузер теперь показывает нормально переведённое сообщение вместо необработанной ошибки на английском.

  • Отзыв устройства или перевыпуск ссылки теперь переживает и конфигурацию с двумя экземплярами. На сервере без интерфейса (--serve) с включённым автозапуском два экземпляра сервера держали каждый свою копию сохранённого состояния сопряжения и записывали её целиком: отзыв или новая ссылка, сделанные через один, могли быть незаметно отменены другим. Все экземпляры одного процесса теперь используют единое состояние сопряжения на каталог данных: отзыв и ротация действуют всюду немедленно, и файл записывает ровно один писатель; файл остаётся источником истины между настоящими перезапусками.

  • Повторные неудачные входы ограничиваются. Проверка пароля доступа использует Argon2id — намеренно дорогой алгоритм, — и попытаться может любой, кто дотягивается до порта. После пяти неудачных попыток с одного адреса дальнейшие попытки отклоняются в течение минуты ещё до какой-либо работы с хешем, а само хеширование теперь выполняется вне цикла событий сервера с жёстким пределом одновременных проверок: поток неверных паролей больше не может ни насытить сервер требовательным к памяти хешированием, ни затормозить его для уже подключённых устройств. Ограничитель живёт в памяти и сбрасывается вместе с сервером; настоящей преградой остаются токен сопряжения и пароль. Лимит теперь общий для всех экземпляров сервера, использующих один каталог данных, — конфигурация с двумя экземплярами --serve больше не удваивает бюджет попыток, — а попытка резервируется до начала проверки пароля, поэтому параллельные запросы с одного адреса не могут проскользнуть под лимитом. Ограниченный браузер теперь видит на экране входа отдельное сообщение об ограничении частоты вместо сообщения о неверном пароле; кроме того, ограничение больше не запоминается как неверный пароль: когда пауза заканчивается, следующая попытка снова проходит без перезагрузки страницы. Попытка, брошенная на полпути — вкладка закрыта, пока пароль ещё проверялся, — теперь сразу освобождает свою резервацию, а не числится за адресом до конца минуты; успешный вход освобождает только собственную резервацию, а не стирает всю запись адреса: за общим сетевым адресом чей-то корректный вход больше не сбрасывает бюджет попыток атакующего, и записанные неудачи истекают только вместе со своей минутой.

  • С секретами на диске и в журналах обращение стало аккуратнее. Файл с состоянием сопряжения и ключ сквозного шифрования теперь создаются доступными для чтения только владельцу с самого начала, а не ограничиваются после первой записи; база данных сессий — в ней лежит хеш пароля — также ограничена владельцем. Сервер без интерфейса (--serve) больше не печатает долгоживущий секрет ссылки для сопряжения в журналы: если вывод не терминал, ссылка скрывается и вместо неё выводится подсказка; --print-pairing явно возвращает прежнее поведение. Реестр устройств ограничен 32 записями с именами ограниченной длины, чтобы сопряжённый клиент не мог безгранично раздувать сохранённый файл, а если сохранить отзыв или новую ссылку не удалось, ошибка теперь доходит до вызывающего, а не остаётся строкой в журнале. Автозапуск больше не подменяет сервер, уже запущенный вручную, а устаревшая ошибка автозапуска исчезает, как только вы сами останавливаете сервер.

Исправления

  • Сопряжением теперь можно управлять и из оболочки Electron. Создание ссылки сопряжения, список сопряжённых устройств и отзыв устройства существовали только как команды рабочего стола (Tauri); диспетчер WebSocket, которым пользуются оболочка Electron и браузерные клиенты, отвечал «Unknown command», поэтому панель удалённого доступа там не работала. Теперь все три команды на обоих транспортах проходят через одни и те же основные функции, так что они не могут разойтись, а регрессионные тесты покрывают новые маршруты диспетчера — включая создание настоящей ссылки сопряжения на запущенном локальном сервере.

v0.1.100

Последние изменения

ИИ-агенты

  • Kiro CLI стал полноценным типом сессии. У сессий Kiro появился собственный узел в дереве, достоверный индикатор состояния «работает / ожидает» на основе официальных lifecycle hooks самого Kiro, уведомления о завершении хода, автоматическое возобновление той же беседы при повторном открытии узла, аргументы запуска и переключатель пропуска подтверждений, а также запуск через vspawn — всё то, что уже было у остальных агентов. VelaTerm копирует ваш агент Kiro по умолчанию в собственный агент vlx-term, добавляет в копию lifecycle hooks только для наблюдения и запускает именно её: ваш собственный файл агента не изменяется, а промпт, инструменты и MCP-серверы переносятся без изменений. У Kiro нет hook для запроса разрешений, поэтому во время ожидания вашего подтверждения индикатор остаётся в состоянии «работает».

Исправления

  • Программы, запущенные из терминала, больше не наследуют собственное окружение AppImage (Linux). Загрузчик AppImage направляет PYTHONHOME, PYTHONPATH, PERLLIB, QT_PLUGIN_PATH и пути к плагинам GStreamer во временный каталог монтирования пакета, а каталоги пакета ставит впереди всего остального в PATH и LD_LIBRARY_PATH. Терминал передаёт всё своё окружение запускаемой оболочке, поэтому системный python3 искал стандартную библиотеку внутри пакета и вообще отказывался работать, а другие динамически связанные программы загружали библиотеку из пакета вместо системной. Теперь VelaTerm удаляет эти пути пакета перед запуском оболочки или внешнего инструмента и не трогает значения, заданные вами самими. APPDIR и APPIMAGE остаются видимыми, поэтому программы, проверяющие запуск из AppImage, по-прежнему получают ответ. Затронуты только сборки AppImage; пакет deb, macOS и Windows работают как прежде.

v0.1.99

Последние изменения

Терминал

  • Shift+Enter переносит строку, а не отправляет. В терминалах нет кодировки для Enter с модификатором, поэтому агентские CLI вроде Claude Code и Codex получали обычный возврат каретки и отправляли запрос, пока вы ещё его писали. Теперь VelaTerm передаёт ESC+CR — ту же последовательность, которую эти инструменты ожидают от раскладки iTerm2, поэтому многострочный ввод наконец работает, в том числе в macOS, где собственный обработчик клавиш вообще не устанавливался. Во время набора в методе ввода поведение не меняется: Enter по-прежнему подтверждает вариант.

Проекты и организация

  • Обновление состояния одной сессии. В панели с фильтром по состоянию у сессий появилось действие «Обновить состояние»: оно заново оценивает только эту сессию по условиям самой панели и добавляет либо убирает её, тогда как все остальные остаются на месте. Действие принадлежит той панели, из которой открыто меню, поэтому вложенные разделения никогда не берут фильтр соседней панели. Результат сохраняется отдельно для каждой панели и восстанавливается после перезапуска.
  • Снять метку можно одним щелчком. Повторный выбор уже установленного эмодзи снимает её, поэтому отдельный пункт для снятия и его разделитель убраны. Значок эмодзи с кнопки фильтра тоже убран: подсветка и так показывает, что фильтр по меткам включён, а какой именно эмодзи — видно в меню.

Исправления

  • Интеграция AppImage с рабочим столом Linux устанавливается на любой машине. Вложенный значок был символической ссылкой на абсолютный путь сборочной машины, поэтому Gear Lever, AppImageLauncher и подобные средства не могли его извлечь, хотя само приложение работало нормально. Теперь ссылка относительная. Заявленное требование к glibc также исправлено на 2.35 после измерения не только исполняемого файла, но и поставляемых вместе библиотек; таким образом, самый старый поддерживаемый дистрибутив для настольного приложения — Ubuntu 22.04.

v0.1.98

Последние изменения

ИИ-агенты

  • Grok Build стал полноценным агентом VelaTerm. Устанавливайте, запускайте и возобновляйте Grok 4.5 со стабильными идентификаторами сессий, официальными lifecycle hooks, точными состояниями работы и разрешений, объединёнными расшифровками, сведениями об использовании и официальным значком, который подстраивается под тему в настольном, браузерном и мобильном интерфейсе.

Проекты и организация

  • Разделяйте боковую панель проектов на независимые рабочие представления. Любую панель дерева можно снова разделить вниз; после перезапуска для каждой панели восстанавливаются собственный поиск, фильтры по состоянию и эмодзи, свёрнутые узлы и соотношение размеров. Все панели остаются представлениями одного дерева проектов под управлением backend, поэтому изменения синхронизируются без дублирования бизнес-данных.
  • Помечайте и фильтруйте узлы, не теряя контекст. Проектам, группам и сессиям можно назначать эмодзи-метки. Для помеченного контейнера сохраняется всё поддерево, принадлежность к состояниям остаётся стабильной во время работы, доступны динамическое добавление и ручное обновление, а условия по состоянию и эмодзи объединяются по принципу логического ИЛИ.
  • Создавайте пустой проект прямо на месте. Выберите родительский каталог, проверьте имя, а затем создайте и импортируйте папку в одном процессе. При частичном сбое повторяется только импорт, без создания дубликатов каталогов.

Интерфейс

  • Делитесь VelaTerm там, где находится ваше сообщество. Диалог публикации теперь поддерживает WeChat Moments, Weibo, Xiaohongshu, X, Reddit, Hacker News, LinkedIn, Facebook, Telegram и WhatsApp, включая QR-код для WeChat и предложение поделиться в окне обновления.
  • Даже мелкие действия стали удобнее. Временные вкладки терминала можно переименовать до их сохранения в качестве сессий. В обычных полях ввода отключена автоматическая заглавная буква мобильной клавиатуры, при этом ввод в терминале не изменился.

v0.1.97

Последние изменения

ИИ-агенты

  • Сессии больше не зависают в состоянии «работает». Codex сообщал об активности инструментов и о завершении хода через отдельные короткоживущие процессы, поэтому callback могли приходить в перепутанном порядке, и завершённый ход продолжал отображаться как выполняющийся. Теперь промежуточные сообщения, пришедшие после окончания собственного хода, отбрасываются, а новый hook завершения сессии закрывает случаи, когда сессия заканчивается без события завершения.
  • Прерванные ходы приходят в норму за считаные секунды. При нажатии Esc или ошибке потока ход Claude или Codex завершается вообще без callback о завершении. Теперь шесть секунд полной тишины в терминале тихо переводят такую сессию в состояние ожидания, не показывая уведомление «ответил».

Интерфейс

  • Надёжные сочетания клавиш для разделения в macOS. Разделение вправо (Cmd+D) и вниз (Cmd+Shift+D) теперь зарегистрированы и как команды нативного меню Terminal, поэтому macOS больше не перехватывает сочетание раньше VelaTerm.
  • Одно нажатие — одно сохранение. Cmd+S обрабатывался и глобальным сочетанием, и активным редактором, из-за чего один и тот же файл мог записываться дважды за одно нажатие.

v0.1.96

Последние изменения

ИИ-агенты

  • Состояние Codex определяется lifecycle hooks, а не догадками по терминалу. Современные сессии Codex теперь используют только официальные lifecycle hooks как источник состояния активности. Рукопожатие SessionStart проверяет канал связи, отсутствие callback отображается как «Статус недоступен», а текст или активность терминала больше не могут перезаписать состояния работы, подтверждения или завершения.
  • Более свежие данные об использовании Codex после каждого хода. Панель Info сразу показывает локальный rollout-снимок, сверяет его с актуальными лимитами, ещё раз обновляется после записи Codex итогового token-снимка и игнорирует запоздалые ответы от предыдущей сессии.

Интерфейс

  • Надёжный выбор строк в дереве проектов на macOS. Виртуальные строки больше не зависят от compositor transform, поэтому устаревшие hit-test-координаты WKWebView не направляют наведение, щелчок или перетаскивание на другую строку после прокрутки либо обновления дерева.

v0.1.95

Последние изменения

ИИ-агенты

  • Kimi Code и Zoo Code добавлены в дерево сессий. VelaTerm теперь умеет запускать, возобновлять, устанавливать и настраивать оба агента. Kimi сообщает состояния работы, разрешения и ожидания через официальные lifecycle hooks; Zoo Code сохраняет стабильный идентификатор задачи и использует распознавание терминала при отсутствии внешних hooks.
  • Живое обновление лимитов Codex. Панель Info запрашивает текущие ограничения у Codex app server, сохраняя локальный rollout-снимок как совместимый резервный вариант.

Проекты и терминалы

  • Открывайте проекты командой vela <path>. Пакетные сборки могут установить shell-команду в стиле VS Code. Повторный вызов передаёт проект существующему окну VelaTerm вместо запуска дубликата.
  • Наглядное и отменяемое клонирование Git. Clone Project показывает этап, процент и время, предупреждает о зависании и отменяет всё дерево процессов Git без недоклонированной папки. Учётные данные и query tokens скрываются в ошибках и аудит-логах.
  • WSL-терминалы в Windows. Все установленные дистрибутивы WSL доступны рядом с PowerShell, cmd и Git Bash для обычных терминалов. Сессии агентов остаются в Windows host shell ради надёжности hooks и путей к программам.

Интерфейс и надёжность

  • Более понятное управление фоновыми сессиями. Меню показывает состояние каждой сессии, а диалог превышения лимита позволяет завершить несколько выбранных вкладок сразу.
  • Безопасный жизненный цикл и многоязычные заметки. Перед остановкой активных сессий запрашивается подтверждение; точный lifecycle-ID Codex имеет приоритет над неоднозначным rollout-сканированием; заметки обновления доступны на всех встроенных языках.

v0.1.94

Последние изменения

Локализация

  • Интерфейс на вьетнамском языке. Язык Tiếng Việt теперь доступен в выборнике языков и автоматически выбирается для систем с локализацией на вьетнамский.

Браузер

  • Быстрее загружается встроенный браузер. Теперь у каждой вкладки браузера есть однокликовые ярлыки для ChatGPT, Claude, Gemini и Google. Контекстные меню проектов и групп также могут создавать постоянную страницу браузера непосредственно в той части дерева сессий.

Изображения и документы

  • Надежная вставка пути к изображению в macOS. Когда WebKit не выдает скопированное изображение в виде файла, VelaTerm теперь считывает его из нативной области копирования и всё равно загружает как путь к файлу, вместо того чтобы молча использовать нативный заменитель изображения агента. В удаленных окнах всегда отображается настройка вставки изображения, объясняется, почему требуется режим пути к файлу, и отключается недоступный нативный вариант.

  • Вставка изображений в исходные документы. Теперь исходный редактор принимает изображения из области копирования. Сохраненные Markdown документы хранят их рядом с документом в assets/ и вставляют портабельную Markdown синтаксис изображения; незаконченные черновики встраивают данные изображения, чтобы они не терялись при очистке временных файлов.

Интерфейс

  • Контекстные меню остаются видимыми и указывают на правильный элемент. Меню, открываемые близко к правому краю, корректно измеряются и смещаются. При щелчке правой кнопкой по узлу дерева теперь выделяется только цель меню без изменения существующего выбора, а меню групп включают терминал, ограниченный этой группой.

  • Более чистая обработка текста и метки статуса. Исходный текст больше не отображает шрифтовые лигатуры в виде стрелок для последовательностей, таких как комментарии HTML; проценты использования четко обозначаются как использовано, а нерелевантное нативное контекстное меню WebView хоста больше не появляется за собственными меню VelaTerm.

Исправления

  • Codex остается в обычной истории терминала. Сессии Codex, запускаемые VelaTerm, теперь используют режим встроенного терминала, поэтому нажатие Esc для прерывания или возврата больше не меняет буферы экрана терминала и не перемещает область прокрутки вверх. Ваша собственная Codex конфигурация остается нетронутой.

v0.1.93

Последние изменения

Обновления

  • Узнайте, что изменилось, прежде чем устанавливать. При появлении новой версии теперь в панели статуса и в специальном диалоговом окне отображаются примечания к выпуску этой версии. Вы можете установить обновление сейчас, пропустить эту версию, продолжить загрузку в фоновом режиме или вручную открыть загрузку установщика; прогресс отображается в реальном времени, а приложение перезагружается для завершения установки. Если вы пропустили несколько версий, примечания ко всем им показываются вместе, а не только к последней.

ИИ-агенты

  • Сессии Codex самостоятельно присваивают себе имя. Сессия Codex переименовывается с момента отправки вашего первого сообщения — так же, как это уже происходит с сессиями Claude — поэтому дерево больше не заполняется записями вида "Codex 1", "Codex 2". Имя, введенное вручную, никогда не перезаписывается.

  • vspawn и vopen теперь работают и в Codex. Встроенные навыки vspawn, vspawn-tree и vopen устанавливаются в каталог навыков Codex так же, как и в каталог Claude, поэтому $vspawn <task> и $vopen <file> могут работать из сессии Codex.

  • Более надежное возобновление работы Codex. Запись Codex разговора для последующего возобновления больше не зависит от фиксированного таймера, поэтому она всё равно работает, даже если вы сделаете паузу перед вводом первого сообщения; кроме того, две Codex сессии, запущенные в одной папке, больше не могут быть связаны между собой через общий разговор.

  • Использование модели и контекста для Codex. Панель информации теперь отображает текущую модель, объем использования окна контекста и инструмент, используемый в текущей Codex сессии, так же, как это уже делалось для Claude, с данными, получаемыми в реальном времени из информации сессии.

Удаленные сессии и терминал

  • Перепроектированный удаленный браузер файлов. Выборник папок для удаленных сессий теперь поддерживает поиск по мере ввода, переход по пути (с использованием ~), навигацию вверх/домой/последние папки и встроенную команду «Новая папка».

  • Ссылки открываются на вашем собственном компьютере. Щелчок по ссылке в терминале — включая ссылку на вход в агента — теперь открывается в вашем локальном браузере, включая удаленные окна.

  • Опция «Повторное использование удаленной базы данных» спрятана. Она появляется только при нажатии клавиш Option/Alt на кнопку «Подключиться к удаленному серверу»; обычный щелчок всегда подключается к независимой базе данных.

Исправления

  • Инструменты находятся при запуске из Dock. Запуск VelaTerm из Dock или Finder больше не оставляет его в упрощенном режиме PATH, поэтому git и другие инструменты, установленные через Homebrew и необходимые агентам, находятся в правильном месте.

  • Новые терминалы открываются в нужной папке. Создание терминала из проекта или группы в боковой панели теперь открывает его в каталоге этого узла, а не использует папку последней активной сессии.

v0.1.92

Последние изменения

Исправления

  • Больше нет ложных предупреждений о «потере связи SSH». Раньше монитор туннеля считал завершение дочернего процесса порт-форвардинга потерей связи, отображал красный баннер и восстанавливал туннель. На самом деле слушатель форвардинга находится в процессе ControlMaster, поэтому форвардинг продолжает работать даже после завершения дочернего процесса — терминал оставался полностью работоспособным, в то время как интерфейс сообщал о потере связи, а повторное создание туннеля бесполезно разрушало работающее соединение.

Теперь связь проверяется в два этапа: когда дочерний процесс завершается, VelaTerm сначала проверяет, есть ли слушатель на локальном порту форвардинга. Если он есть, ничего не происходит. Только когда порт тоже исчезает, связь считается потерянной и восстанавливается. Красный баннер также сглаживается — он появляется только после неудачной первой попытки восстановления, поэтому временные сбои, проходящие за несколько секунд, больше не вызывают предупреждений.

Настоящие разрывы соединения всё равно восстанавливаются автоматически. Если процесс ControlMaster завершается или сеть отсутствует в течение длительного времени, туннель воссоздаётся автоматически; после исчерпания попыток повторной связи на экране появляется сообщение "SSH link is down", и функция Reconnect восстанавливает сессию — удалённые процессы продолжают работу и продолжают выполнение с того места, где остановились.

v0.1.91

Последние изменения

Первая публичная версия. Всё, что указано ниже, входит в эту версию.

Агенты ИИ как полноценные компоненты

  • Встроенная поддержка девяти агентов — Claude Code, Codex, OpenCode, Copilot CLI, Cursor CLI, Cline, Pi, Antigravity (Gemini CLI) и crush. При создании сессии выбирается тип агента, и он запускается готовым к работе.

  • Статус агента сообщается напрямую, а не предполагается. VelaTerm при запуске встраивает официальные механизмы обратного вызова каждого поставщика (хуки для Claude, notify для Codex, плагин для OpenCode и т. д.), поэтому любое изменение состояния сразу же передаётся обратно. Дерево сессий показывает точку статуса для работающих сессий, сессий, ожидающих действий, и завершённых, но невидимых сессий; боковая панель позволяет фильтровать по статусу, а панель статуса отображает актуальную статистику.

  • Системные уведомления появляются, когда агенту требуется решение по разрешению или когда он завершает задачу, а нажатие на уведомление сразу переносит пользователя в соответствующую сессию. Обнаружение экрана служит альтернативой для случаев, когда нет механизма обратного вызова.

  • Беседы сохраняются при любых ситуациях. Собственный идентификатор сессии каждого агента сохраняется, поэтому закрытие сессии, перезапуск приложения или восстановление архивированной сессии позволяют возобновить первоначальную беседу — после проверки её существования. Claude Code, Codex и Pi также могут разделить текущую беседу на параллельную сессию.

  • Сессии могут создавать новые сессии. Подзадачи превращаются в дочерние сессии, создаваемые самим агентом или пользователем, при необходимости в изолированной рабочей деревушке git, что позволяет нескольким агентам одновременно работать над одним и тем же репозиторием. Графическое окно для слияния воссоединяет ветки после завершения работы.

  • Для отсутствующих агентов показывается карточка с инструкцией по установке, рекомендуемой командой и возможностью одним кликом установить их, после чего происходит автоматическое обнаружение пути. В боковой панели отображаются лимиты использования Claude и Codex, а любую беседу можно просматривать на месте или экспортировать в полный текстовый отчёт Markdown.

Организация сессий

  • Трёхуровневое дерево — проект, группа, сессия — с неограниченным вложением групп и дочерними сессиями внутри сессий. Узлы можно свободно перетаскивать, а сохранённое состояние сохраняется при перезапуске.

  • Любую поддерево можно архивировать: скрыть в панели архива без удаления данных, восстановить в любое время и продолжить беседу.

  • Поиск контента во всей системе (⌘⇧F) осуществляется с использованием индекса SQLite FTS5 и охватывает как текстовые записи агентов, так и вывод из терминала; слева отображается дерево результатов, справа — предварительный просмотр с ссылками, а также возможность навигации между сессиями.

Настоящий терминал в первую очередь

  • Настоящий PTYs (portable-pty, из wezterm), благодаря чему vim, htop и собственные интерфейсы TUI агентов работают именно так, как должны.

  • Множество вкладок с произвольным разделением экрана — каждая вкладка имеет собственное дерево разделения, которое можно разделить горизонтально или вертикально по желанию.

  • Цикл жизни вкладок в стиле браузера: вкладки на фоне остаются активными, их процессы продолжают работать; лимит активных вкладок можно настроить, и при его превышении удаляется старейшая неактивная сессия. Закрытие вкладки приводит к завершению процесса.

  • Ввод данных остаётся отзывчивым даже при высокой нагрузке благодаря расписанию ввода по приоритетам и объединению кадров вывода — агент, заполняющий экран, больше не занимает клавиши.

  • Поиск внутри терминала (⌘F), запись и воспроизведение сессий, возможность вставки или перетаскивания изображений непосредственно в агента, а также свободная переключаемость между cmd, PowerShell и Git Bash на Windows.

За пределами терминала

  • Можно запустить vopen <file> в любой сессии, чтобы открыть вкладку с документом рядом с терминалами: Markdown открывается как редактор WYSIWYG и экспортируется в векторный формат PDF, изображения открываются в встроенном просмотрщике, а исходные файлы получают подсветку синтаксиса.

  • Встроенная вкладка браузера может использоваться в качестве временной вкладки или закрепляться в дереве проекта в качестве постоянного узла.

Удалённая работа и многоканальность

  • Десктопное приложение предоставляет ту же интерфейс через веб, обмениваясь одним актуальным набором сессий. Выходные данные передаются всем клиентам в реальном времени, и любой из них может вводить данные — десктопная и браузерная версии видят и управляют одним и тем же терминалом.

  • Конечно-конечное шифрование с использованием алгоритма NaCl на уровне каждого кадра, парирование через QR-код или ссылку, а также управление по устройству, включая индивидуальное отзыв разрешений.

  • Режим без графического интерфейса: --serve запускает ту же службу на сервере без GUI, готовом к подключению браузера.

  • Удалённые подключения через SSH добавляют удалённые машины в ваше дерево. VelaTerm подключается напрямую с десктопа, разворачивает лёгкий сервер vela-server на удалённой стороне, и удалённые сессии ведут себя как локальные. Туннель сам восстанавливается и воссоединяется.

  • Мобильные устройства: приложение включает в себя мобильную версию веб-интерфейса, а также корневую оболочку нативного приложения (отрисовка с использованием xterm с нативным вводом и панелью функций).

Платформа и дизайн

  • macOS, Linux и Windows.

  • Автоматические обновления с сертифицированными версиями macOS.

  • Темы светлого и тёмного цвета автоматически подстраиваются под систему, а сессии агентов уведомляются о смене темы через стандартное уведомление терминала (DEC 2031) — цвета интерфейса TUI меняются мгновенно без необходимости перезапуска.

  • По умолчанию английский язык, плюс 10 языков, предустановленных в соответствии с настройками системы.

Каждая версия поставляется с автоматическими обновлениями — VelaTerm сама предложит самую новую версию. Скачайте её сами с страницы загрузки.