feat: add offline model manager
This commit is contained in:
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.
|
||||
Reference in new issue
Block a user