Releases: Yahor777/repopilot-bridge
Release list
v3.10.1 — Фикс формулировки preflight в letaido-промпте
v3.10.1 — Фикс формулировки preflight в letaido-промпте
Маленький патч к v3.10.0. Без поведенческих изменений — только текст промпта подключения для letaido.com, чтобы агент не тратил ходы на холостые запросы к api-proxy.
Проблема
В v3.10.0 промпт для letaido.com заканчивался фразой:
«После одобрения обоих — preflight через api-proxy (он подставит X-API-Key в заголовок)»
Агенты читали это как «обращайся к api-proxy по специальному URL-префиксу» и перебирали варианты, каждый раз получая {"error":"Unknown API: …"}:
127.0.0.1:18081/proxy/<туннель>/session → Unknown API: proxy
127.0.0.1:18081/<туннель>/session → Unknown API: <туннель>
127.0.0.1:18081/https/<туннель>/session → Unknown API: https
127.0.0.1:18081/outbound/<туннель>/session → Unknown API: outbound
127.0.0.1:18081/http/<туннель>/session → Unknown API: http
127.0.0.1:18081/request/<туннель>/session → Unknown API: request
…и только потом догадывались сделать прямой curl https://<туннель>/health, который сразу возвращал 200.
Причина
api-proxy — прозрачный egress-прокси: он перехватывает исходящий трафик к allowlisted-домену на сетевом уровне и сам подставляет X-API-Key в заголовок. Никакого специального пути для вызова «через него» нет — нужно просто обращаться к туннелю напрямую.
Решение
Переформулирован блок preflight в letaido-промпте:
«После одобрения обоих — preflight обычными HTTP-запросами к эндпоинтам туннеля (
https://<туннель>/session,/health,/git/status). Исходящий трафик к allowlisted-домену проходит через api-proxy как прозрачный прокси — он сам подставит X-API-Key в заголовок, никакого URL-префикса для прокси (вроде/proxy/или/http/) не нужно, обращайся к туннелю напрямую.»
Что НЕ изменилось
- Туннели, сессии, режимы — без изменений.
- Промпты для
prompt.ql.appиСторонний сервис— без изменений. task_prompt— без изменений.- Выбор AI-клиента и
settings.json— без изменений.
Зеркалирование
Исправление внесено в build_prompts (start.sh, POSIX) и Build-Prompts (start.ps1, Windows). Версия поднята до 3.10.1.
Установка / обновление
Windows (PowerShell)
powershell -NoProfile -ExecutionPolicy Bypass -Command "irm https://raw.githubusercontent.com/Yahor777/repopilot-bridge/v3.10.1/bootstrap.ps1 | iex"macOS / Linux
curl -fsSL https://raw.githubusercontent.com/Yahor777/repopilot-bridge/v3.10.1/bootstrap.sh | bashУстановите повторно — настройки сохранятся. Существующие сессии продолжат работать; новый промпт применяется к новым сессиям после выбора letaido.com.
Полный список изменений
См. CHANGELOG.md.
v3.10.0 — Выбор AI-клиента (letaido.com / prompt.ql.app / сторонний сервис)
v3.10.0 — Выбор AI-клиента
RepoPilot Bridge теперь спрашивает «куда подключаемся» перед запуском и генерирует нативный промпт подключения под каждого клиента — вместо единого PromptQL-стиля.
Что нового
Экран выбора AI-клиента
При первом запуске (или если в settings.json нет поля aiClient) перед главным меню появляется выбор:
Куда подключаемся:
1. letaido.com
2. prompt.ql.app (Сейчас не активно)
3. Сторонний сервис
Выбор сохраняется в settings.json рядом с tunnelProvider. Сменить можно позже: G → A в настройках.
Нативные промпты под каждого клиента
| Клиент | Подход | Что в промпте |
|---|---|---|
| letaido.com | request_domain_access + request_secret(header=X-API-Key) через api-proxy |
нет несуществующей «custom API integration / provider id» — у letaido фиксированный каталог коннекторов |
| prompt.ql.app | custom API integration с provider id / base_url / api_docs_url / header auth |
классический PromptQL-стиль (пока помечен «сейчас не активно») |
| Сторонний сервис | универсальный промпт без привязки к клиенту | base_url + OpenAPI /openapi.json + header X-API-Key + preflight |
Прочее
session.jsonтеперь хранитaiClient; шапка менеджера сессий и меню сессии показывают AI-клиент рядом с туннелем.task_promptостаётся общим для всех клиентов.- Зеркальные изменения в
start.sh(POSIX) иstart.ps1(Windows). - Версия поднята до
3.10.0:repo_tools.py,bootstrap.ps1,bootstrap-clean.ps1,README,QUICKSTART.
Установка / обновление
Windows (PowerShell)
powershell -NoProfile -ExecutionPolicy Bypass -Command "irm https://raw.githubusercontent.com/Yahor777/repopilot-bridge/v3.10.0/bootstrap.ps1 | iex"macOS
curl -fsSL https://raw.githubusercontent.com/Yahor777/repopilot-bridge/v3.10.0/bootstrap.sh | bashLinux
curl -fsSL https://raw.githubusercontent.com/Yahor777/repopilot-bridge/v3.10.0/bootstrap.sh | bashОбновление с предыдущей версии
Установите повторно командой выше — настройки (settings.json, репозитории) сохранятся. При первом запуске после обновления появится экран выбора AI-клиента.
Совместимость
- Старый
settings.jsonбезaiClient→ экран выбора при следующем запуске, выбор туннеля не сбрасывается. - Старые
session.jsonчитаются с дефолтомother;connect-prompt.txtдля существующих сессий не перегенерируется.
Полный список изменений
См. CHANGELOG.md.
v3.9.1 — Убрана анимация загрузки
v3.9.1 — исправление
Облажались с загрузочной анимацией в v3.9.0. Анимация моря (scripts/ocean.py) рендерилась плохо во многих терминалах и портила впечатление от запуска вместо того, чтобы украшать его.
Что исправлено
- Удалена анимация моря (
scripts/ocean.py) целиком. - Убрана интеграция splash из
start.shиstart.ps1. - RepoPilot снова запускается напрямую в менеджер сессий, как было до 3.9.0.
Кросс-платформенный порт (macOS/Linux/Windows), авто-детекция ОС, POSIX-блок-листы и вся остальная функциональность 3.9.0 остались без изменений — убран только splash-экран.
Обновление
macOS / Linux:
bash ~/.local/share/RepoPilotBridge/app/uninstall.sh
curl -fsSL https://raw.githubusercontent.com/Yahor777/repopilot-bridge/v3.9.1/bootstrap.sh | bashWindows (чистая переустановка):
powershell -NoProfile -ExecutionPolicy Bypass -Command "irm https://raw.githubusercontent.com/Yahor777/repopilot-bridge/v3.9.1/bootstrap-clean.ps1 | iex"Извините за накладку с анимацией — в следующей итерации сделаем запуск чище.
v3.9.0 — Кросс-платформенный порт: macOS, Linux и Windows
🌊 RepoPilot Bridge 3.9.0 — теперь на Windows, macOS и Linux
Главный релиз: RepoPilot Bridge стал кросс-платформенным. Теперь он одинаково хорошо работает на Windows, macOS и Linux. PowerShell-скрипты остались для Windows, а рядом появились нативные bash-скрипты для macOS/Linux — две параллельные версии в одном репозитории.
При запуске repopilot теперь появляется красивая анимация моря с закатом и отливом — работает на всех трёх системах с автоматическим определением цветовой поддержки.
🖥️ Кросс-платформенное ядро
- Авто-детекция ОС через
sys.platform— сервер сам определяет Windows или POSIX. - Команды исполняются через
cmd.exeна Windows и/bin/sh -cна macOS/Linux. - Метасимвольный фильтр адаптирован под семантику оболочки: на POSIX блокируются backticks и
$(...), но%и^(не являющиеся метасимволамиsh) больше не дают ложных срабатываний. - Расширены блок-листы опасных команд для macOS/POSIX:
sudo,dd of=/dev/,mkfs,diskutil eraseDisk,launchctl bootout,defaults write,csrutil,nvram,pmset, fork-бомба:(){:|:&};:,> /dev/sd*,killallсистемных процессов, рекурсивныеchmod/chownна системных путях.
📜 Новая POSIX-обвязка (bash, параллельно с PowerShell)
| Файл | Назначение |
|---|---|
start.sh |
Менеджер сессий (TUI): выбор проекта, режима, запуск uvicorn + туннеля, генерация промптов |
install.sh |
Установщик: поиск Python (Homebrew/python.org), venv, шим ~/.local/bin/repopilot, ярлык .command |
doctor.sh |
Диагностика: все эндпоинты в read_only/autopilot/full, проверка POSIX-блокировок |
uninstall.sh |
Деинсталляция: удаление runtime, конфига, шима, ярлыка, чистка PATH |
bootstrap.sh |
One-shot установка: curl | bash |
Кросс-платформенное управление процессами: PID через $! + фолбэки на pgrep/lsof/fuser/taskkill/netstat (для Windows Git Bash, где нет pgrep). UTF-8-safe HTTP через curl --data-binary @tmpfile.
🌅 Анимация моря с закатом
- Новый
scripts/ocean.py: море с волнами, закат, отлив, опускающееся солнце, баннер RepoPilot. - 4 цветовых режима с autodetect: truecolor (24-bit), 256-color, 16-color, монохром.
- На Windows 10+ включает VT-обработку через
ctypes, чтобы ANSI рендерился вcmd.exe. - Интегрирована в
start.shиstart.ps1. Отключается черезREPOPILOT_NO_SPLASH=1. - Режимы:
--long,--loop,--no-banner,--test.
🧪 Smoke-тест без Mac
Dockerfile.smoke+scripts/smoke-test.sh: Linux-контейнер прогоняетdoctor.sh, проверяя POSIX-веткуrun_cmdи блок-листы без реального Mac.
🛡️ Усиление
start.shиdoctor.shпроверяют наличиеcurlиgitс подсказками установки.- Нет bash 4+ фич — совместимо с macOS default bash 3.2.
mktempимеет фолбэки для GNU/BSD различий.
📚 Документация
README.md,QUICKSTART.md,TROUBLESHOOTING.mdтеперь покрывают все три ОС: Homebrew,pbcopy/open, пути Homebrew на Apple Silicon vs Intel, Gatekeeper для.command, XDG-пути на Linux..editorconfigдобавляет правила[*.{sh,command}](LF, UTF-8 без BOM).
📦 Установка
macOS / Linux:
curl -fsSL https://raw.githubusercontent.com/Yahor777/repopilot-bridge/v3.9.0/bootstrap.sh | bashWindows (PowerShell):
powershell -NoProfile -ExecutionPolicy Bypass -Command "irm https://raw.githubusercontent.com/Yahor777/repopilot-bridge/v3.9.0/bootstrap.ps1 | iex"✅ Проверено
doctor.sh: 44/44 проверок прошли (HTTP, эндпоинты, блокировкиsudo/dd/launchctl, метасимволы, изоляция, секреты, commit).- POSIX-ветка
run_cmd: 22/22 проверки (имитация macOS). - Windows-ветка
cmd.exeне сломана:/run echo→ exit 0. bash -nна всех 6.sh+py_compile— без ошибок.ocean.pyво всех 4 цветовых режимах.
RepoPilot Bridge v3.8.13
Что исправлено
- Для Tailscale Funnel provider id теперь включает RepoPilot session id.
- Это не даёт PromptQL повторно использовать старый provider на том же стабильном
*.ts.nethost, у которогоproject_integrations.config_valuesмог остатьсяnull. - Prompt подключения теперь прямо говорит: использовать provider id из свежей сессии и не брать старую интеграцию с похожим base_url/provider id без session suffix.
- Bootstrap-ссылки и API version подняты до
3.8.13.
Почему это важно
Tailscale host обычно постоянный (monsterpc....ts.net), поэтому старый RepoPilot генерировал один и тот же provider id. PromptQL видел существующий provider и не создавал свежую protected credential card, из-за чего ключ не сохранялся и pre-flight падал до HTTP-запроса с Failed to resolve integration credentials.
Проверено
- PowerShell parser для скриптов прошёл.
python -m py_compile server\repo_tools.pyпрошёл.git diff --checkпрошёл.- Unit smoke генерации provider id: Tailscale получает session suffix, Cloudflare остаётся host-based.
doctor.ps1 -NoPauseпрошёл.scripts\Test-RepoToolsDoctor.ps1прошёл.
RepoPilot Bridge v3.8.12
Что исправлено
- OpenAPI теперь публикует стандартную auth-схему
RepoPilotApiKeyдля заголовкаX-API-Key, а не просто повторяющийся header-параметр на каждом endpoint-е. - RepoPilot принимает ключ через
X-API-Keyи совместимыйAuthorization: Bearer, нормализуя случайные пробелы и префиксы. - Ошибки auth теперь пишут безопасную диагностику в audit: был ли credential, его длина и поддерживаемые заголовки, без записи самого ключа.
- Prompt подключения теперь прямо говорит PromptQL: в protected credential card надо вставлять
K = X-API-Key, а не provider id/name/base_url. - Troubleshooting дополнен кейсом
Failed to resolve integration credentials: это значит, что ключ не сохранился в карточке PromptQL и запрос до RepoPilot ещё не дошёл.
Проверено
- PowerShell parser для скриптов прошёл.
python -m py_compile server\repo_tools.pyпрошёл.git diff --checkпрошёл.- Живой uvicorn smoke-test:
/openapi.jsonсодержитRepoPilotApiKey,/healthработает сX-API-Key,/healthработает сAuthorization: Bearer, пустой ключ даёт 401. doctor.ps1 -NoPauseпрошёл, включая новые OpenAPI/auth проверки.scripts\Test-RepoToolsDoctor.ps1прошёл.
RepoPilot Bridge v3.8.11
Что изменилось
- RepoPilot теперь сразу распознаёт ответ Tailscale
Funnel is not enabled on your tailnetи не ждёт полный timeout. - CLI достаёт ссылку
login.tailscale.com/f/funnel, копирует её в буфер обмена и пытается открыть браузер для подтверждения Funnel. - Документация обновлена: установка и
tailscale upидут из настроек RepoPilot, а включение Funnel подтверждается по ссылке Tailscale. - Bootstrap-ссылки и API version подняты до
3.8.11.
Проверено
- Tailscale удалён с тестовой машины: команда
tailscaleотсутствует,winget list --id Tailscale.Tailscaleпакет не находит. - PowerShell parser для скриптов прошёл.
python -m py_compile server\repo_tools.pyпрошёл.git diff --checkпрошёл.- Симуляция лога Tailscale Funnel approval прошла: URL извлекается, ожидание завершается быстро.
doctor.ps1 -NoPauseпрошёл.scripts\Test-RepoToolsDoctor.ps1прошёл.
RepoPilot Bridge v3.8.10
Highlights
- Added Tailscale login/start flow from RepoPilot settings via tailscale up.
- Session startup now offers to run tailscale up when Tailscale is selected but not ready.
- Tailscale Funnel now starts with --yes and explicit http://127.0.0.1: target to avoid hidden interactive prompts.
- Tailscale URL wait is shorter and returns an actionable hint instead of looking stuck.
- Bumped bootstrap links and API version to 3.8.10.
Validation
- PowerShell parser passed for all scripts.
- Python py_compile passed for server/repo_tools.py.
- git diff --check passed.
- Targeted Tailscale CLI test verified tailscale up and funnel --yes http://127.0.0.1: arguments.
- Session history cleanup regression test passed.
- Full doctor.ps1 -NoPause passed.
- scripts/Test-RepoToolsDoctor.ps1 passed.
Notes
- This follows Tailscale CLI docs: tailscale up authenticates/connects the device, and tailscale funnel supports --yes and local HTTP targets.
RepoPilot Bridge v3.8.9
Highlights
- RepoPilot settings can now install Tailscale directly via winget.
- Selecting Tailscale Funnel automatically offers installation when tailscale.exe is missing.
- Settings show I = установить Tailscale через winget when Tailscale is selected but unavailable.
- After installation, RepoPilot tells the user to sign in to Tailscale and press R to re-check readiness.
- Bumped bootstrap links and API version to 3.8.9.
Validation
- PowerShell parser passed for start, doctor, install, bootstrap, bootstrap-clean, uninstall, and Test-RepoToolsDoctor scripts.
- Python py_compile passed for server/repo_tools.py.
- git diff --check passed.
- Fake winget Tailscale settings install test passed and verified package id Tailscale.Tailscale.
- Session history cleanup regression test passed.
- Full doctor.ps1 -NoPause passed.
- scripts/Test-RepoToolsDoctor.ps1 passed.
RepoPilot Bridge v3.8.8
Highlights
- Added cleanup for gray stopped session histories in the CLI manager.
- Press U in the main manager to delete all stopped histories.
- Open a stopped session and press D to delete just that history.
- Deletion is guarded by live PID checks and only removes folders inside RepoPilot's sessions directory.
- Bumped bootstrap links and API version to 3.8.8.
Validation
- PowerShell parser passed for start, doctor, install, bootstrap, bootstrap-clean, uninstall, and Test-RepoToolsDoctor scripts.
- Python py_compile passed for server/repo_tools.py.
- git diff --check passed.
- Focused session-history cleanup test passed with fake stopped and partial/live sessions.
- Full doctor.ps1 -NoPause passed.
- scripts/Test-RepoToolsDoctor.ps1 passed.