Терминал для Windows с вертикальными вкладками. Каждая вкладка — отдельная сессия PowerShell через ConPTY, экран рисует xterm.js.
В PowerShell:
irm https://raw.githubusercontent.com/XYphrodite/TerminalV/main/install.ps1 | iexСкрипт скачивает последний релиз, проверяет SHA-256 из файла .sha256, устанавливает в %LOCALAPPDATA%\Programs\TerminalV, добавляет каталог в пользовательский PATH и создаёт ярлык в меню Пуск. Права администратора не нужны.
При установленном .NET 10 Desktop Runtime автоматически выбирается облегчённая framework-dependent сборка. Параметр -Variant light или -Variant full задаёт вариант явно; последующее самообновление сохраняет этот выбор.
Перед переустановкой закройте окно TerminalV. Фоновый host и его сессии могут продолжать работать: установщик их не завершает. Прежние файлы пакета перемещаются в .terminalv-backup-* внутри каталога установки; при ошибке проверки новой копии выполняется откат. База сессий и данные WebView2 сохраняются.
Другой каталог или конкретная версия:
& ([scriptblock]::Create((irm https://raw.githubusercontent.com/XYphrodite/TerminalV/main/install.ps1))) -InstallDir 'D:\TerminalV' -Version v0.1.0Ярлык в меню «Пуск» создаётся по умолчанию. Рабочий стол — только по желанию, с параметром -DesktopShortcut:
& ([scriptblock]::Create((irm https://raw.githubusercontent.com/XYphrodite/TerminalV/main/install.ps1))) -DesktopShortcutПараметры: -InstallDir, -Version (по умолчанию latest), -NoPath, -DesktopShortcut, -NoShortcut (не создавать никаких ярлыков, даже с -DesktopShortcut; существующие не удаляются).
Ручная установка: zip TerminalV-win-x64.zip со страницы релизов. Сборка self-contained, отдельно ставить .NET не нужно. Нужен WebView2 Runtime — на Windows 11 он уже есть вместе с Edge.
После распаковки ZIP запустите TerminalV.exe → Настройки (шестерёнка или Ctrl+,) → Ярлыки приложения. Выберите «Меню „Пуск“» и/или «Рабочий стол», затем нажмите Создать ярлыки. Нужные папки определяются через Windows, включая перенесённый рабочий стол OneDrive. Ярлыки ведут к текущей копии приложения и используют иконку из её EXE; права администратора не нужны.
Повторное создание обновляет иконку без дубликатов и сохраняет пользовательские настройки существующего ярлыка. Если TerminalV.lnk указывает на другую копию или содержит аргументы, он не перезаписывается: интерфейс покажет причину. Перед переносом ZIP-папки уберите старые ярлыки или переименуйте их, затем создайте новые. При запуске/самообновлении приложения удалённые ярлыки не восстанавливаются автоматически; закрепление на панели задач остаётся за пользователем.
Запуск после установки:
TerminalVУстановленная копия сама проверяет GitHub Releases при старте. Если есть более новая версия, слева появляется кнопка Обновить. Из любой оболочки, в том числе из вкладки TerminalV:
TerminalV update --check
TerminalV updateЕсли окно уже открыто, команда ставит файлы и перезапускает окно; сессии остаются в фоновом процессе. Скачанный zip сверяется с SHA-256, новый exe отвечает на --help до замены и после. Сборка 0.1.0 обновление не умеет — её один раз ставят через irm.
Из исходников после dotnet build: src\TerminalV\bin\Debug\net10.0-windows\TerminalV.exe.
- Как пользоваться — вкладки, клавиши, копирование
- Расширения — установка пакетов, C# SDK, JS API и пример
- ProjectContext.md — архитектура и устройство кода
- Проверка Windows-пакета — результаты, воспроизведение и проверки перед выпуском
Нужны .NET 10 SDK, Node.js и npm.
dotnet build
dotnet run --project src/TerminalVРелизная папка (self-contained win-x64, TerminalV.exe, консольный TerminalV.com и wwwroot):
.\scripts\publish.ps1Артефакты: artifacts/TerminalV-win-x64.zip и .sha256. Прежние файлы не удаляются и не перезаписываются. Если архив уже существует, укажите новый каталог:
.\scripts\publish.ps1 -OutputDirectory artifacts\candidate-01
.\scripts\verify-package.ps1 -Package artifacts\candidate-01\TerminalV-win-x64.zipУпаковка использует отдельную свежую папку .publish-* и сохраняет её для диагностики. Проверка пакета оставляет логи и распакованные файлы в verification-* рядом с ZIP: контрольная сумма, состав, CLI, изолированное обновление/откат, ConPTY, SQLite и браузерные тесты интерфейса из архива. По умолчанию ожидается версия из проекта; для другого пакета есть -ExpectedVersion. Проверка не запускает рабочее окно, не использует пользовательскую базу и не публикует релиз. Для полной проверки PowerShell 7 задайте TERMINALV_TEST_PWSH, если он не установлен в стандартном каталоге.
Проверка ConPTY без окна:
.\src\TerminalV\bin\Debug\net10.0-windows\TerminalV.exe --smokeРегрессионные проверки интерфейса (нужен установленный Edge или Chrome):
npm.cmd --prefix ui testИзолированные проверки рабочей папки, запуска профилей PowerShell/cmd, настоящего ConPTY и протокола фонового процесса:
dotnet run --project tests/TerminalV.Pty.Tests -c ReleaseТесты не загружают пользовательские профили и не подключаются к рабочему фоновому процессу TerminalV. Они запускают Windows PowerShell 5.1 и, если доступен, PowerShell 7 из Program Files\PowerShell\7. Для portable PowerShell 7 можно задать путь к pwsh.exe через TERMINALV_TEST_PWSH; при его отсутствии эта часть явно пропускается.
Проверки миграции базы, групп, скрытых сессий, отключения звука, профилей и расположения панелей на временных SQLite-файлах (рабочая база пользователя не используется):
dotnet run --project tests/TerminalV.Data.Tests -c Release- Вертикальный список вкладок слева
- PowerShell 7 (
pwsh), иначе Windows PowerShell - Несколько независимых сессий
- Переименование вкладки (двойной клик)
- Копирование и вставка, в том числе правой кнопкой
- Предупреждение с предпросмотром перед многострочной вставкой
- Самообновление: кнопка в сайдбаре и
TerminalV update - Темы, шрифт, фон-фото, сворачиваемый список сессий, масштаб как в VS Code
- Сессии сохраняются в SQLite
- Поиск по выводу, защита закрытия работающей сессии и наследование текущей папки.
- Группы, цветовые метки, закрепление, фильтр и скрытые сессии.
- Настраиваемые уведомления BEL с подсветкой и ограничением частоты.
- Профили запуска: оболочка, папка, название, цвет и стартовая команда, без повторного выполнения при подключении к живой сессии.
- Разделение экрана: панели справа/снизу, изменение размеров, переключение клавиатурой и восстановление расположения без перезапуска живых сессий.
- Более безопасное обновление: проверка комплектности ZIP, замена консольного запускателя, откат и защита служебных путей.
После обновления старый фоновый процесс может продолжать обслуживать рабочие сессии. Для профилей и интеграции текущей папки при соответствующем предупреждении сохраните работу и перезагрузите Windows. Простое закрытие окна не обновляет фоновый процесс.
Порядок дальнейшей работы — план фич.
Обновлённое оформление: единые SVG-иконки, более читаемые сессии, заголовок с текущей папкой, аккуратные панели и диалоги, превью десяти тем и компактный список без пустого отступа. Настройки удерживают фокус и изолируют сочетания клавиш от терминала. Сохранённые темы, шрифты и сессии совместимы. Подробности — заметки к релизу.
Меню Профили и оболочки запускает сохранённый профиль сразу, без редактора и повторного сохранения. Редактирование и создание — отдельные действия. Windows-оболочки и установленные дистрибутивы WSL обнаруживаются автоматически; Ubuntu запускается прямо в новой вкладке из домашней папки Linux. Подробнее — быстрый запуск WSL.
Новые сессии получают актуальное окружение Windows: недавно установленные Codex и другие команды находятся по обновлённому PATH. Уже работающие сессии не меняются. При первом переходе со старого фонового процесса сохраните работу и перезагрузите Windows — закрытие одного окна хост не обновляет. Подробности — заметки к релизу.
Под названием и версией в боковой панели появилась подпись Автор: XYphrodite со ссылкой на GitHub-профиль. Она открывается во внешнем браузере, не заменяя интерфейс терминала. Подпись и нижние кнопки остаются видны в маленьком окне; кнопка версии по-прежнему проверяет обновления. Подробности — заметки к релизу.
Исправлена вставка большого текста в muse и другие чаты TUI — ранее вставка 50–100 КБ занимала секунды из-за одного огромного write через WebView2/NamedPipe/ConPTY. Теперь текст режется на чанки по 4000/8192 с сохранением кириллицы, эмодзи и bracketed paste. Подробности — заметки к релизу.
Исправлена задержка даже для 100 символов в muse с диалогом многострочной вставки — TerminalBridge и ConPtySession больше не блокируют UI-поток на WriteFile в ConPTY, postWrite уходит через queueMicrotask. Подробности — заметки к релизу.
Тот же фикс 100 символов с диалогом в muse — 0.5.7 уже выпущен, версия поднята до 0.5.8 для публикации без перезаписи v0.5.7 (синхронный ввод "a" остаётся синхронным, paste — асинхронно). Подробности — заметки к релизу.
Исправлено сохранение видимых сессий — теперь Buffer/Cwd хранятся для всех вкладок, а не только для скрытых. Пустой чат после перезапуска устранён. Подробности — заметки к релизу.
Ссылки в терминале теперь открываются во внешнем браузере (Ctrl+клик или клик). Ранее клик открывал встроенный popup WebView2. Теперь http/https URL отправляется хосту и открывается через UseShellExecute; остальные схемы игнорируются. Подробности — заметки к релизу.
Кнопки «Справа»/«Снизу» в шапке панелей теперь создают новую сессию рядом с родительской в списке слева, а не в самом конце, и дочерняя отмечается тонкой веткой/отступом в сайдбаре. Подробности — заметки к релизу.
Кнопка управления сессией ⋯ теперь всегда видна в развёрнутом сайдбаре (раньше только на hover/active). Подробности — заметки к релизу.
В свёрнутом сайдбаре кнопки ⋯/× теперь появляются при наведении/фокусе как оверлей, а не исчезают полностью. Подробности — заметки к релизу.
Лёгкий MAUI-клиент TerminalV.Mobile (Android/iOS/Windows) — подключается к ПК по OpenSSH напрямую и через шлюз TerminalV, только shell (SFTP/туннели позже). WPF остаётся для локального терминала. Подробности — заметки к релизу.
Исправлено зависание вкладки при вставке ~4K многострочного текста в muse со сплитом 4 панели — причина была в блокирующем lock очереди ConPtySession во время WriteFile в ConPTY. Теперь очередь и труба под разными локами, добавлен файл диагностики %LOCALAPPDATA%\TerminalV\diagnostics.log. Подробности — заметки к релизу.
Ресайз окна и панелей теперь без задержки: вместо 80ms debounce используется requestAnimationFrame (~16ms) с коалесценцией. Подробности — заметки к релизу.
После перезагрузки обычные оболочки теперь поднимаются сами (раньше оставались «не запущена»). Профили со стартовой командой и скрытые — по-прежнему вручную, чтобы не дублировать серверы. Подробности — заметки к релизу.
Вставка в muse без «по строчке» — Diag пишет лог батчами асинхронно (фикс v0.6.4 без пример-теста). Подробности — заметки к релизу.
Паузы между чанками вставки убраны — postWrite батчит все чанки в одну микрозадачу. Подробности — заметки к релизу.
Рваный верх muse после ресайза — теперь WebGL текстура чистится hard refresh только для alternate buffer, история сверху не удаляется. Подробности — заметки к релизу.
Медленная вставка большого текста — postWrite теперь один queueMicrotask/один Task.Run батч вместо N пауз между чанками. Подробности — заметки к релизу.
Окно снова тянется со всех 4 сторон — WebView2 больше не блокирует WM_NCHITTEST. Подробности — заметки к релизу.
В свёрнутых сессиях × убран полностью — больше нет случайных сносов. Подробности — заметки к релизу.
Окно тянется за левый/правый/нижний край — WebView2 больше не перекрывает полосу ресайза (airspace-инсет 6px, в maximized схлопывается). Подробности — заметки к релизу.
Диагностика ресайза ConPTY: отказы ResizePseudoConsole теперь видны в diagnostics.log (pty: Resize failed ... hr=...) — для расследования пропадания правой части в узком окне. Подробности — заметки к релизу.
Окно больше не сужается ниже 800×480: хук WM_GETMINMAXINFO выставляет минимум из MinWidth/MinHeight с учётом DPI. Подробности — заметки к релизу.
Минимальный размер окна опущен до 560×360 — сайдбар на этой ширине уже компактный (180px), терминалу хватает места. Подробности — заметки к релизу.
Вставка длиннее 4000 символов идёт файлом: текст сохраняется в %TEMP%\TerminalV\pastes\, в терминал вставляется путь. Лечит медленную переварку больших вставок в TUI-клиентах. Подробности — заметки к релизу.
Свёрнутый сайдбар больше не показывает кнопку управления сессией — ни на активной вкладке, ни при наведении. Подробности — заметки к релизу.
Колесо мыши в mouse-TUI (свой скроллбар у приложения) доходит до приложения, а не глушится терминалом. Подробности — заметки к релизу.
Высота элементов сессий настраивается: Стандарт / Минимальная. Подробности — заметки к релизу.
Сплиты только плоские: дочерних сессий второй степени больше нет, все дети у одного родителя. Подробности — заметки к релизу.
Выключатель аппаратного рендеринга (WebGL) в настройках — против чёрных полос на динамичных TUI. Подробности — заметки к релизу.
Сплит дочерней сессии создаёт сиблинга у того же родителя. Подробности — заметки к релизу.
Сплит-кнопка «Новая вкладка»: основная часть — вкладка по умолчанию, стрелка — выбор профиля. Подробности — заметки к релизу.
Сохранение tail auth токена и тихий ресайз SSH без красного баннера. Подробности — заметки к релизу.