Агент логов (#18) готов, но выключен: на сервере нет LLM. Ключ OpenRouter появился; OpenRouter блокирует IP из РФ, поэтому, как в meditron (OPENROUTER_PROXY_URL), запросы идут через HTTP-прокси сервера. ADR-008: провайдер за протоколом, OpenRouter — это openai_compat.
Желаемый результат
LLM_PROXY_URL — прокси для запросов к LLM; ключ можно задать как LLM_API_KEY или OPENROUTER_API_KEY.
Модель со structured output (json_schema) отвечает стражу и планировщику; проверено вживую.
На dev-боте «🤖 Спросить агента» работает: обычный вопрос → grep + строки, атака → отказ и 🛡.
Подзадачи
app/config.py, app/llm/openai_compat.py — прокси и алиас ключа
Тесты
Живая проверка стража и планировщика на OpenRouter
.env.example, README, DEPLOY
Включить на dev (/srv/tgit/dev/.env)
Анализ
Ограничения и риски
Ключ и прокси — секреты (SecretStr), в логи не попадают. OpenRouter — внешний сервис: в LLM уходят только промт и имена контейнеров, логи — нет (ADR-013).
Как проверить
uv run python -m app.llm.cli … с ключом; на dev — сценарии 7–8 из docs/DEMO.md.
Лог выполнения
## Описание
Агент логов (#18) готов, но выключен: на сервере нет LLM. Ключ OpenRouter появился; OpenRouter блокирует IP из РФ, поэтому, как в meditron (`OPENROUTER_PROXY_URL`), запросы идут через HTTP-прокси сервера. ADR-008: провайдер за протоколом, OpenRouter — это `openai_compat`.
## Желаемый результат
- `LLM_PROXY_URL` — прокси для запросов к LLM; ключ можно задать как `LLM_API_KEY` или `OPENROUTER_API_KEY`.
- Модель со structured output (`json_schema`) отвечает стражу и планировщику; проверено вживую.
- На dev-боте «🤖 Спросить агента» работает: обычный вопрос → grep + строки, атака → отказ и 🛡.
## Подзадачи
- [ ] `app/config.py`, `app/llm/openai_compat.py` — прокси и алиас ключа
- [ ] Тесты
- [ ] Живая проверка стража и планировщика на OpenRouter
- [ ] `.env.example`, README, DEPLOY
- [ ] Включить на dev (`/srv/tgit/dev/.env`)
## Анализ
### Ограничения и риски
Ключ и прокси — секреты (`SecretStr`), в логи не попадают. OpenRouter — внешний сервис: в LLM уходят только промт и имена контейнеров, логи — нет (ADR-013).
## Как проверить
`uv run python -m app.llm.cli …` с ключом; на dev — сценарии 7–8 из `docs/DEMO.md`.
---
## Лог выполнения
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.
Описание
Агент логов (#18) готов, но выключен: на сервере нет LLM. Ключ OpenRouter появился; OpenRouter блокирует IP из РФ, поэтому, как в meditron (
OPENROUTER_PROXY_URL), запросы идут через HTTP-прокси сервера. ADR-008: провайдер за протоколом, OpenRouter — этоopenai_compat.Желаемый результат
LLM_PROXY_URL— прокси для запросов к LLM; ключ можно задать какLLM_API_KEYилиOPENROUTER_API_KEY.json_schema) отвечает стражу и планировщику; проверено вживую.Подзадачи
app/config.py,app/llm/openai_compat.py— прокси и алиас ключа.env.example, README, DEPLOY/srv/tgit/dev/.env)Анализ
Ограничения и риски
Ключ и прокси — секреты (
SecretStr), в логи не попадают. OpenRouter — внешний сервис: в LLM уходят только промт и имена контейнеров, логи — нет (ADR-013).Как проверить
uv run python -m app.llm.cli …с ключом; на dev — сценарии 7–8 изdocs/DEMO.md.Лог выполнения
2026-10-22
/api/v1/key→ 200).google/gemini-2.5-flash-lite(json_schema): страж — обычный вопрос → safe, prompt injection → attack; планировщик → валидныйLogQuery.make lint && make test— 361 passed. PR #53 вdev.LLM_*в/srv/tgit/dev/.env+ мерж/деплой — сервер не отдаёт SSH-баннер (порт 22 открыт, таймаут на banner exchange).