Разработка
Команды из package.json
bun install
bun run dev # Vite frontend dev server
bun run harness # Vite server для /harness.html
bun run build # темы + tsc + Vite build
bun run build:themes # сборка builtin-тем в src-tauri/themes/
bun run tauri dev # Tauri dev app
bun run tauri build # production-сборка Tauri
bun run test:run # Vitest один раз
bun run test:coverage # Vitest coverage
bun run test:e2e # Playwright
bun run test:all # Vitest + Playwright
bun run test:rust # cargo build --examples + cargo test
bun run lint # ESLint по src/**/*.ts(x)
Тесты Rust также можно запускать напрямую:
cd src-tauri && cargo test
Архитектура
Фронтенд в src/: React 18, TypeScript, Vite, React Router и обёртки Tauri invoke. Публичные маршруты: Settings (/settings), History (/ и /history), Dictionary (/dictionary), Onboarding (/onboarding).
Важные области фронтенда:
src/lib/commands.tsиsrc/bindings.ts— обёртки invoke и сгенерированные bindings.src/lib/settingsRegistry.tsиsrc/lib/constants.ts— реестр UI настроек и списки опций.src/hooks/— async data, settings, audio devices, recording, overlay, providers, themes.src/components/— layout, dictionary, history, settings, spectrum.src/theme-engine/— ThemeHost, контракт (apiVersion1), builtin-исходники и рендереры.src/overlay.tsx— entrypoint оверлея и press/release запись по opaque-пикселям.
Бэкенд в src-tauri/: Rust + Tauri v2. Два бинарника: voice (основное приложение) и typing_bench (бенчмарк задержки автопечати).
Важные модули:
audio/— запись через CPAL, уровни, VAD, WAV.orchestrator/— hotkey → запись → очередь транскрипции → постобработка → вывод.transcription/— HTTP-клиент, совместимый с Whisper (по умолчанию Groq; кастомный URL только черезapi_url_override).docker-compose.selfhost.ymlв корне репозитория — обёртка для запуска self-hosted, protocol-совместимого сервера транскрипции локально — см. Self-Hosted транскрипция.output/— буфер обмена, paste shortcuts, auto-type, auto-submit.hotkey/— низкоуровневый ввод через rdev.storage/— config/history/dictionary/corrections/providers/prompts/failed_audio/themes/debug в каталогеvoxis.theme_engine/иoverlay_native/— манифесты/скрипты и окно оверлея (webview; стандартный размер 172×36 logical px, если тема не задаёт валидныеoverlay_width/overlay_height).llm/иlearning/— опциональная LLM-постобработка и обучение словаря.commands/— команды Tauri для фронтенда.
Поток данных
- Нажатие hotkey →
HotkeyListener→Orchestrator::on_hotkey_pressed()запускаетAudioRecorder. - Отпускание (hold) или повторный tap (toggle) ставит аудио в
TranscriptionQueue. - Воркер: транскрипция → словарь → опциональный LLM → clipboard/auto-type.
- Фронтенд получает события
state-changedиerror.
GitHub Pages docs
Сайт документации в docs-site/ собирается workflow .github/workflows/pages.yml при push в main, затрагивающем docs-site/** или сам workflow. Используются actions/configure-pages, actions/jekyll-build-pages (source = docs-site), actions/upload-pages-artifact и actions/deploy-pages.
Не добавляйте в публичные docs учётные данные, содержимое локальных БД или выдуманные hosted URL/скриншоты.