<p align="center">
  <a href="https://github.com/femboypig/darwincode">
    <img src="assets/logo.png" alt="darwincode logo" width="300">
  </a>
</p>
<p align="center">Терминальный AI-агент для написания кода.</p>
<p align="center">
  <a href="https://github.com/femboypig/darwincode/actions"><img alt="Build status" src="https://img.shields.io/github/actions/workflow/status/femboypig/darwincode/build.yml?style=flat-square&branch=main" /></a>
  <img alt="Rust version" src="https://img.shields.io/badge/rust-1.75%2B-blue?style=flat-square" />
  <a href="LICENSE"><img alt="License" src="https://img.shields.io/badge/license-MIT-blue?style=flat-square" /></a>
</p>

<p align="center">
  <a href="README.md">English</a> |
  <a href="README.ru.md">Русский</a>
</p>

---

### Установка

Установка через cargo:
```bash
cargo install darwincode
```

Или сборка из исходников:
```bash
git clone https://github.com/femboypig/darwincode.git
cd darwincode
cargo install --path .
```

### Управление

| Сочетание | Действие |
| --------- | -------- |
| `Enter` | Запустить выбранное действие настройки / Отправить сообщение |
| `Alt+Enter` | Вставить новую строку в поле ввода сообщения |
| `Tab` | Переключить поля настроек / Автодополнение команд через `/` |
| `Up` / `Down` | Выбрать значение настройки / Навигация по выбору моделей или истории |
| `Ctrl+S` | Открыть панель настроек из чата |
| `Ctrl+P` | Открыть интерактивное переключение моделей во время диалога |
| `Ctrl+A` | Автоматически применить настройки OmniRoute (когда введен `sk-` ключ) |
| `Ctrl+Z` | Отменить последнее изменение ввода сообщения (Undo) |
| `Ctrl+R` | Вернуть последнее отмененное изменение ввода сообщения (Redo) |
| `Ctrl+K` | Вырезать/скопировать весь текст ввода в системный буфер обмена |
| `Ctrl+Y` | Вставить текст из системного буфера обмена в поле ввода сообщения |
| `Ctrl+L` | Скопировать весь последний ответ ассистента в буфер обмена |
| `Esc` | Выйти из приложения или вернуться из настроек в активный чат |

### Команды чата

| Команда | Действие |
| ------- | -------- |
| `/settings` | Открыть панель настроек |
| `/models` | Открыть интерактивный выбор моделей |
| `/permissions [safe\|guardian\|chaos]` | Просмотреть или установить активный уровень разрешений для выполнения инструментов |
| `/resume [session_id]` | Загрузить сохраненную сессию чата (или открыть выбор сессий) |
| `/new` | Начать новую сессию чата |
| `/clear` | Очистить текущую историю чата |
| `/history` | Показать список всех сохраненных ID сессий |
| `/help` | Отобразить справочную карточку со всеми командами |
| `/exit` или `/quit` | Завершить работу приложения |
| `Tab` (при вводе `/`) | Принять первое предложенное автодополнение команды |

### Доступ к инструментам и режимы безопасности

Агент имеет доступ к локальным инструментам рабочей области для исследования, просмотра и изменения кода. Вы можете настроить три уровня безопасности в Настройках:

* **Safe (Только чтение)** — Разрешены только инструменты чтения кодовой базы (`read_file`, `list_directory`, `search_files`). Запись файлов и bash-команды заблокированы.
* **Guardian (С подтверждением)** — Агент будет запрашивать подтверждение перед выполнением любых изменяющих систему инструментов (`write_file`, `edit_file`, `run_bash_command`).
* **Chaos (Автоматически)** — Агент будет автоматически выполнять все инструменты мгновенно.

### Конфигурация и локальное шифрование

- **Безопасная связка ключей**: API-ключи надежно сохраняются в системной связке ключей вашей ОС. Если служба связки ключей отсутствует, они сохраняются в зашифрованном файле конфигурации.
- **Аппаратное шифрование**: Настройки (`config.json`) и истории сессий в каталоге `~/.config/darwincode/` симметрично зашифрованы с помощью AES-256-GCM с использованием ключа, привязанного к вашему уникальному аппаратному ID машины и данным окружения.
