Newer
Older
navi-1 / docs / navi_code_cli.md

Navi Code CLI

Терминальный клиент для общения с Navi через WebSocket.

Установка

CLI устанавливается вместе с пакетом navi:

pip install -e .

После установки доступна команда navi-code. Внутри репозитория можно запускать без установки:

python -m clients.terminal

Использование

Интерактивный режим

navi-code

Клиент подключается к http://localhost:8000, создаёт или восстанавливает сессию и запускает чат.

One-shot режим

navi-code "объясни, что делает этот файл"
navi-code --new-session "напиши pytest-тест для функции foo"

Параметры

Флаг Описание
--base-url URL Базовый URL сервера Navi.
--ws-url URL URL WebSocket (по умолчанию производный от --base-url).
--profile-id ID Профиль для новой сессии.
--new-session Создать новую сессию, даже если сохранена старая.
--show-thinking Показывать блоки рассуждений модели.
--no-events Скрывать события tool_started / tool_call.
--version Версия клиента.

Команды в интерактивном режиме

Команда Описание
/help Список команд.
/new Создать новую сессию.
/sessions Список сессий на сервере.
/switch <id> Переключиться на другую сессию (можно по префиксу id).
/profile Показать текущий профиль и id сессии.
/export [path] Экспортировать текущую сессию в Markdown; без пути — во временный файл и $EDITOR.
/clear Очистить локально сохранённый session_id.
/quit Выйти.

Интерфейс TUI

В интерактивном режиме (navi-code) экран разделён на две части:

  • Левая панель (ChatPanel) — история сообщений, поле ввода и текущий статус.
  • Правая панель (SessionsPanel) — список сессий на сервере с колонками ID, профиль и превью. Клик или Enter на строке переключает сессию.

Список сессий обновляется автоматически при запуске и при выполнении /new, /sessions, /switch.

Состояние

Клиент сохраняет session_id в ~/.navi_code/state.json, чтобы восстановить диалог при следующем запуске. Удалите файл или используйте /clear, чтобы начать с чистого листа.

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

  • stream_delta — печатается inline, как в обычном чате.
  • tool_started / tool_call — показываются имена инструментов и краткий результат (если включено --show-events).
  • thinking_delta / thinking_end — показываются только с --show-thinking.
  • error — красным цветом.

Пример сессии

$ navi-code
Created session a1b2c3d4 (profile navi_code)
Navi Code interactive mode. Type /quit to exit, /help for commands.
You: напиши скрипт, который считает строки в текущей директории
[tool: terminal]
{'cmd': 'find . -type f | wc -l'}
[tool result: terminal success=True]
42

Я насчитал 42 файла в текущей директории и её поддиректориях.
You: /quit

Разработка

Код CLI находится в clients/terminal/:

  • cli.py — точка входа и интерактивный цикл.
  • ws_client.py — WebSocket-клиент.
  • api.py — REST-запросы к серверу.
  • render.py — рендеринг событий в терминал.
  • state.py — сохранение session_id в ~/.navi_code/state.json.
  • config.py — настройки из переменных окружения NAVI_CODE_*.
  • tui/tui_app.py — Textual-приложение.
  • tui/widgets/ — виджеты (ChatPanel, StatusPanel, SessionsPanel).
  • tui/commands/ — slash-команды (/new, /sessions, /switch, /export).

Тесты: tests/clients/test_terminal_client.py, tests/clients/test_terminal_ws.py, tests/clients/test_tui_*.py.