Newer
Older
navi-1 / docs / plan_navi_code.md

План: Navi Code — локальный терминальный клиент для Navi

Цель

Создать систему "Navi Code": локально запускаемый вариант Navi, управляемый через терминал. Без авторизации (NAVI_AUTH_ENABLED=false), с выделенным профилем, ориентированным на работу с кодом, терминалом и файловой системой.

Что НЕ входит в этот этап

  • Docker-упаковка (отложено).
  • Рендеринг изображений, content_publish, share_file UI (отложено).
  • Авторизация (используем готовый NAVI_AUTH_ENABLED=false).

Что входит в этот этап

  1. Создание профиля navi_code на базе developer.
  2. Механизм дефолтного профиля.
  3. Подготовка bundled .env / конфигурации для локального терминального режима.
  4. Подготовка персоны / системного промпта для Navi Code.
  5. CLI-терминал-клиент для взаимодействия с Нави.
  6. Документация по запуску и использованию.

1. Профиль navi_code

1.1. База

  • Скопировать navi/profiles/developer/navi/profiles/navi_code/.
  • id: navi_code.
  • name: "Navi Code".

1.2. Тюнинг инструментов

Включить:

  • terminal — основной инструмент.
  • filesystem — чтение/запись файлов.
  • code_exec — выполнение кода.
  • spawn_agent — для сложных подзадач.
  • list_tools, tool_manual, write_tool, reload_tools — саморасширение.
  • scratchpad, todo, reflect — для планирования.

Исключить (для упрощения терминального опыта):

  • share_file.
  • content_publish.
  • image_view.
  • http_request — оставить по необходимости, но по умолчанию убрать.
  • web_search, ssh_exec — оставить как опцию, но не включать по умолчанию.

1.3. Тюнинг параметров

  • max_iterations: сохранить высокое значение (например, 100), но не безгранично.
  • temperature: 0.3–0.4.
  • model: локальная модель по умолчанию, например gemma4:26b-a4b-it-q4_K_M.
  • Планирование: включить phase 1 и 3, отключить phase 2 (3 advisor) для снижения latency.
  • iteration_budget_enabled, goal_anchoring_enabled, anti_stall_enabled: оставить включёнными.
  • step_validation_enabled: отключить.
  • adaptive_replan_enabled: оставить выключенным.

1.4. Системный промпт

  • Скопировать developer/system_prompt.txt.
  • Адаптировать под терминальный контекст: Нави работает локально, у неё есть терминал, файловая система и возможность выполнять код.
  • Добавить инструкции по безопасности: перед разрушительными операциями (rm, перезапись) спрашивать подтверждение.

2. Механизм дефолтного профиля

2.1. Варианты

Вариант A — env-переменная (предпочтительный):

  • Добавить в navi/config.py: navi_default_profile_id: str = "".
  • Читать NAVI_DEFAULT_PROFILE_ID из .env.
  • Если задана и профиль существует, использовать её как fallback при создании сессии без profile_id.
  • REST POST /sessions разрешить отсутствие profile_id, взяв дефолт.

Вариант B — клиент-side:

  • Терминал-клиент сам знает профиль navi_code и всегда шлёт его.
  • Проще, но менее универсально.

2.2. Решение

Реализовать вариант A: серверная env-переменная + поддержка отсутствующего profile_id в POST /sessions. Это позволит любому клиенту (CLI, веб, скрипт) работать с дефолтным профилем.


3. Конфигурация для локального режима

3.1. Новые/изменённые env-переменные

  • NAVI_AUTH_ENABLED=false (уже есть).
  • NAVI_DEFAULT_PROFILE_ID=navi_code (новая).
  • NAVI_PERSONA_FILE=persona_navi_code.txt (новая персона).
  • FS_ALLOWED_PATHS=*.
  • TERMINAL_ALLOWED_COMMANDS=*.
  • OLLAMA_HOST=http://localhost:11434.
  • DATABASE_URL=postgresql://navi:navipass@localhost:5432/navidb (или локальная настройка пользователя).

3.2. Файлы, которые нужно подготовить

  • .env.navi_code.example — пример .env для Navi Code.
  • persona_navi_code.txt — глобальная персона для Navi Code.

3.3. Что не меняем

  • Структура конфигурации (navi/config.py) — добавляем только новые поля.
  • Поведение при NAVI_AUTH_ENABLED=true — не ломаем.

4. Персона Navi Code

4.1. Основные черты

  • Локальная ассистентка-разработчик.
  • Имеет доступ к терминалу, файловой системе и выполнению кода.
  • Умеет планировать, разбивать задачи на todo, работать с spawn_agent.
  • Перед опасными операциями спрашивает подтверждение.
  • Говорит с пользователем на его языке (русский/английский).

4.2. Правила работы с инструментами

  • Использует terminal для shell-команд.
  • Использует filesystem для чтения/записи.
  • Использует code_exec для быстрой проверки небольших фрагментов.
  • Использует scratchpad для длительных мыслей, todo для планирования.
  • Перед write_tool всегда вызывает tool_manual("write_tool").

5. CLI-терминал-клиент

5.1. Расположение

  • navi_code_cli/ в корне проекта (отдельный Python-пакет).
  • Или clients/terminal/.

5.2. Минимальный функционал MVP

  • Подключение к запущенному Navi backend по WebSocket.
  • Поддержка интерактивного режима (navi-code без аргументов → чат).
  • Поддержка one-shot режима (navi-code "задача" → выполнить и выйти).
  • Сохранение session_id между запусками (~/.navi_code/state.json).
  • Поддержка команд:
    • /new — новая сессия,
    • /sessions — список сессий,
    • /switch <id> — переключиться,
    • /profile — показать текущий профиль,
    • /quit — выход.

5.3. Рендеринг событий

  • stream_delta — печатать текст.
  • thinking_delta / thinking_end — показывать в сворачиваемом блоке или с флагом --show-thinking.
  • tool_started / tool_call — показывать имя инструмента и результат.
  • stream_end — завершение ответа.
  • error — красным цветом.

5.4. Зависимости

  • click или typer.
  • websockets.
  • rich — для цветного вывода, markdown, таблиц.
  • pydantic — для моделей.

5.5. Взаимодействие с сервером

  • GET /agents/profiles — проверить профиль.
  • POST /sessions — создать сессию (с дефолтным профилем).
  • WS /ws/sessions/<session_id> — основной чат.
  • POST /sessions/<id>/stop — остановить генерацию.

6. Документация

6.1. Новые документы

  • docs/navi_code.md — полное руководство по Navi Code.
  • docs/navi_code_cli.md — документация по CLI.
  • docs/profiles.md — обновить: добавить профиль navi_code, описать NAVI_DEFAULT_PROFILE_ID.
  • docs/config.md — обновить: новые env-переменные.

6.2. README

  • Добавить раздел "Navi Code" в основной README.

7. Порядок реализации

Этап 1 — Профиль и конфигурация

  1. Создать navi/profiles/navi_code/ на базе developer/.
  2. Добавить navi_default_profile_id в navi/config.py.
  3. Обновить POST /sessions для использования дефолтного профиля.
  4. Создать persona_navi_code.txt.
  5. Создать .env.navi_code.example.
  6. Обновить документацию (docs/profiles.md, docs/config.md).

Этап 2 — CLI клиент

  1. Создать структуру navi_code_cli/.
  2. Реализовать WebSocket-клиент.
  3. Реализовать интерактивный режим.
  4. Реализовать one-shot режим.
  5. Реализовать сохранение состояния сессии.
  6. Добавить README и документацию.

Этап 3 — Тестирование и полировка

  1. Проверить создание сессии с дефолтным профилем.
  2. Проверить работу терминала через CLI.
  3. Проверить персистентность сессий.
  4. Проверить no-auth режим.
  5. Добавить юнит-тесты на новые механизмы.

8. Риски и вопросы

Риски

  • Безопасность: TERMINAL_ALLOWED_COMMANDS=* и admin-роль дают полный доступ к системе. Нужно ясно документировать, что Navi Code предназначена только для локального использования.
  • Зависимость от Ollama: пользователь должен сам запускать Ollama. Нужно документировать.
  • Postgres: нужен локальный Postgres с pgvector. Возможно, стоит позже предоставить docker-compose для БД.
  • Приватная зависимость gnexus-auth-client-py: при сборке/установке может потребоваться доступ к Git. Для локальной разработки текущий venv уже настроен.

Открытые вопросы

  • Как именно CLI должен обрабатывать persistent терминалы? Сразу в интерактивном режиме или через отдельную команду?
  • Нужна ли команда /cd для смены рабочей директории в CLI?
  • Стоит ли добавить provider контекста (cwd_provider) или передавать cwd через параметры CLI?

9. Критерии завершения

  • Профиль navi_code создан и загружается.
  • NAVI_DEFAULT_PROFILE_ID работает, POST /sessions без profile_id создаёт сессию с дефолтным профилем.
  • Персона Navi Code подключена через NAVI_PERSONA_FILE.
  • CLI клиент умеет подключаться и вести диалог.
  • CLI клиент сохраняет session_id между запусками.
  • Документация обновлена.
  • Все тесты проходят.