---
### Установка
Одна команда через OpenCode:
```bash
opencode plugin @safwan-o/opencode-voice
```
Перезапустите OpenCode после установки. При первом запуске плагин сам скачает managed `whisper.cpp` engine и выбранную модель. Пользователь не ставит `whisper-cli` руками.
Опциональный CLI-установщик. Он запускает ту же установку через OpenCode и заранее скачивает managed engine:
```bash
npx @safwan-o/opencode-voice install
```
Не клонируйте репозиторий, если не собираетесь разрабатывать плагин.
> [!TIP]
> При первом запуске откроется выбор модели. Выберите Whisper-модель, дождитесь загрузки и используйте `ctrl+r`, чтобы диктовать в prompt.
### Требования
Плагин сам управляет STT engine и моделями:
- скачивает `whisper.cpp` из GitHub Release registry проекта
- кладет его в `~/.cache/opencode-voice/engines/whisper.cpp/-/`
- скачивает выбранную Whisper-модель при первом setup
Ручная установка `whisper-cli` не нужна. Если локальный binary уже есть, `opencode-voice` всё ещё может импортировать или использовать его.
Проверить машину:
```bash
npx @safwan-o/opencode-voice doctor
```
Установить managed engine без открытия OpenCode:
```bash
npx @safwan-o/opencode-voice engine install whisper.cpp
```
### Использование
Команды:
- `/voice` - переключить запись и вставить транскрипцию
- `/voice-submit` - переключить запись, вставить транскрипцию и отправить
- `/voice-stop` - отменить активную запись или транскрибацию
- `/voice-settings` - открыть настройки модели, хоткеев, микрофона и диагностики
Хоткей по умолчанию:
```txt
ctrl+r -> начать запись
ctrl+r -> остановить, распознать и вставить текст
```
Hold-to-talk отключен по умолчанию, потому что terminal release events зависят от терминала. Его можно включить в `/voice-settings`.
### Модели
Доступно сейчас через `whisper.cpp`:
| Модель | Размер | Примечание |
| ------------------- | ------ | ----------------------------- |
| Whisper Small | 465 MB | дефолт, multilingual |
| Whisper Medium Q4_1 | 469 MB | выше точность |
| Whisper Turbo | 1.5 GB | крупная, быстрее full large |
| Whisper Large Q5_0 | 1.0 GB | точная, медленнее |
Загрузка моделей поддерживает resume, retry, progress и SHA256 verification.
Запланированные sidecar-модели:
- Parakeet V3
- GigaAM v3
- Moonshine V2 Small
### Статус платформ
| Платформа | Статус |
| --------- | ------ |
| Linux | one-command engine/model install; запись использует `arecord`, `ffmpeg` или `sox` |
| macOS | one-command engine/model install; запись использует `ffmpeg` AVFoundation до native recorder sidecar |
| Windows | one-command engine/model/recorder install; запись через DirectShow и managed cached `ffmpeg.exe`, с fallback на системный/встроенный ffmpeg |
### Архитектура
Пакет повторяет публичную форму OpenCode TUI-плагинов, которую используют community-плагины.
- npm package экспортирует `./tui`
- локальная разработка может указать абсолютный путь в `tui.json`
- published install использует `opencode plugin @safwan-o/opencode-voice`
- runtime settings хранятся в OpenCode TUI plugin storage
Файлы:
- `index.js` - TUI entrypoint, команды, dialogs, keymap layer
- `lib/models.js` - registry моделей, cache paths, default settings
- `lib/download.js` - resumable download и SHA256 verification
- `lib/engine.js` - выбор recorder, managed Windows recorder install и transcription через `whisper-cli`
- `lib/engines.js` - managed native engine download, status, import и removal
- `bin/opencode-voice.js` - install wrapper и diagnostics CLI
Voice input требует native audio и STT binaries. JS-плагин управляет OpenCode UI, settings, engine/model downloads и prompt insertion. Будущий native sidecar должен заменить shell recorders и добавить fast VAD плюс Handy-style models.
### Roadmap
- опубликовать managed `whisper-cli` release assets перед npm release
- Rust recorder sidecar с `cpal` и VAD
- поддержка Parakeet, GigaAM, SenseVoice, Canary и Moonshine
- Улучшение устойчивости и UX Windows recorder
- более быстрая streaming-style transcription
### Разработка
Запустить проверки:
```bash
npm run check
npm pack --dry-run
```
У этого MVP нет build step.
Установка из checkout для разработки:
```bash
git clone https://github.com/safwan-o/opencode-voice.git opencode-voice
cd opencode-voice
opencode plugin "$(pwd)"
```
### Статус проекта
Это независимый OpenCode plugin. Его не разрабатывает команда OpenCode, и он не связан с OpenCode официально.
### Кредиты
- OpenCode wordmark SVG адаптирован из публичного [OpenCode repository](https://github.com/anomalyco/opencode). Метка `voice` добавлена для этого плагина.
- [Handy](https://github.com/cjpais/Handy) вдохновил local-first UX и предоставляет каталог моделей `transcribe.cpp`, который плагин закрепляет по ревизии и проверяет.
- Локальная транскрибация Whisper использует [`whisper.cpp`](https://github.com/ggml-org/whisper.cpp).
- GGUF-модели Handy работают через Rust binding [`transcribe-cpp`](https://crates.io/crates/transcribe-cpp) и его upstream runtime `transcribe.cpp`.
- Для записи и конвертации там, где это требуется платформе, используется [FFmpeg](https://ffmpeg.org/); managed-дистрибуция использует [`ffmpeg-static`](https://github.com/eugeneware/ffmpeg-static).
- Артефакты моделей размещены на [Hugging Face](https://huggingface.co/). Авторы и лицензии каждой модели определяются её upstream-репозиторием; закреплённые URL источников сохранены в `lib/handy-model-catalog.js`.
---
**OpenCode** [Website](https://opencode.ai) | [Docs](https://opencode.ai/docs) | [Discord](https://opencode.ai/discord)