feat: add offline model manager

This commit is contained in:
Evandro committed 2026-06-11 00:51:52 -03:00
1 parent a88206db2b
commit f324566b42
9 files changed
+1094 -21

No files matched your search

@@ -0,0 +1,97 @@
# Integrações Nativas do Transcript Implementation Plan
> **For agentic workers:** REQUIRED SUB-SKILL: Use superpowers:subagent-driven-development (recommended) or superpowers:executing-plans to implement this plan task-by-task. Steps use checkbox (`- [ ]`) syntax for tracking.
**Goal:** Implementar as integrações que faltavam no MVP: gerenciador real do modelo GGUF, captura de áudio WAV, execução CrispASR, hotkey global e inserção/cópia com fallback cross-platform.
**Architecture:** Manter cada integração atrás de um módulo pequeno. A UI chama comandos Tauri, os comandos consultam `ManagedAppState`, e integrações dependentes de SO retornam mensagens explícitas quando o ambiente limita a automação.
**Tech Stack:** Tauri 2, Rust, CPAL, hound, reqwest, Tauri global-shortcut plugin, TypeScript.
---
## Task 1: Model manager real
**Files:**
- Modify: `src-tauri/src/models/mod.rs`
- Modify: `src-tauri/src/ui_commands.rs`
- Modify: `src-tauri/Cargo.toml`
- [ ] Add URL de download do Hugging Face e resolução de diretório local.
- [ ] Add validação por existência e tamanho mínimo/esperado.
- [ ] Add comando `download_default_model` com escrita em arquivo temporário e rename atômico.
- [ ] Testar status notInstalled/ready sem baixar o arquivo real.
## Task 2: Captura real de áudio
**Files:**
- Modify: `src-tauri/src/audio/mod.rs`
- Modify: `src-tauri/src/app_state.rs`
- Modify: `src-tauri/src/ui_commands.rs`
- Modify: `src-tauri/Cargo.toml`
- [ ] Implementar gravador CPAL que escreve WAV via hound.
- [ ] Guardar stream ativo no estado para manter gravação viva.
- [ ] Stop finaliza WAV e retorna caminho.
- [ ] Manter teste unitário de máquina de estados.
## Task 3: Execução CrispASR
**Files:**
- Modify: `src-tauri/src/transcription/crispasr.rs`
- Modify: `src-tauri/src/ui_commands.rs`
- Modify: `src-tauri/tauri.conf.json`
- [ ] Resolver binário via variável/env/config e depois sidecar empacotado.
- [ ] Executar `crispasr -m <model> -f <audio>`.
- [ ] Capturar stdout/stderr e retornar erro claro.
- [ ] Parsear texto simples ou JSON quando disponível.
## Task 4: Hotkey global
**Files:**
- Modify: `src-tauri/Cargo.toml`
- Modify: `src-tauri/src/lib.rs`
- [ ] Adicionar `tauri-plugin-global-shortcut`.
- [ ] Registrar `Ctrl+Alt+Space` no setup.
- [ ] Ao pressionar, mostrar/focar janela e emitir evento `hotkey-toggle-recording` para a UI.
## Task 5: Inserção/cópia cross-platform
**Files:**
- Modify: `src-tauri/src/injection/mod.rs`
- Modify: `src-tauri/src/ui_commands.rs`
- Modify: `src-tauri/Cargo.toml`
- [ ] Adicionar clipboard backend com `arboard`.
- [ ] Implementar `request_insert_text` que sempre coloca o texto no clipboard.
- [ ] Retornar mensagens por plataforma/display server.
- [ ] Manter Wayland como parcial/manual.
## Task 6: UI, CI e docs
**Files:**
- Modify: `src/app.ts`
- Modify: `src/app.test.ts`
- Modify: `.github/workflows/*.yml`
- Modify: `README.md`
- [ ] Mostrar status de modelo e botão de download.
- [ ] Reagir ao evento de hotkey.
- [ ] Atualizar CI Linux com `libasound2-dev`.
- [ ] Rodar verificação final completa.
## Verification
Run:
```bash
npm run typecheck
npm run test -- --run
npm run build
cargo test --manifest-path src-tauri/Cargo.toml
npm run tauri:build
```
Expected: todos passam; build Windows gera MSI/NSIS no ambiente atual.