Skip to content

Prgm-code/FatFingers

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

40 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

FatFingers

FatFingers es una aplicacion desktop multiplataforma para corregir, pulir, reescribir y redactar respuestas cortas usando un proveedor LLM configurable.

La app funciona como un helper flotante tipo Spotlight/Raycast: corre en segundo plano, se abre con un atajo global, permite escribir o pegar texto, ejecuta una accion de escritura y deja el resultado listo para copiar.

Sitio oficial: fatfingers.lakebed.app

Estado actual

Estado: MVP alpha funcional.

Implementado:

  • App Tauri v2 con frontend React/TypeScript/Vite y backend Rust.
  • Helper flotante con input, selector de accion, contador, resultado y copia al portapapeles.
  • Onboarding y pantalla de settings.
  • Primera ejecucion segura: una instalacion nueva abre Settings antes de crear el helper y, al cerrar la ventana, la app sigue disponible desde el tray.
  • Atajo global configurable.
  • Tray/menu bar con acciones basicas.
  • Persistencia local de settings no secretos.
  • Almacenamiento seguro de provider_api_key y custom_headers mediante keyring.
  • Provider OpenAI usando Responses API desde Rust.
  • Provider MiniMax usando Responses API desde Rust.
  • Provider OpenRouter usando Chat Completions desde Rust.
  • Provider OpenAI-compatible usando Chat Completions.
  • Provider Custom HTTP.
  • Acciones Correct, Professional, Shorten, Friendly, QuickReply, TranslateEnglish, TranslateSpanish y Custom.
  • Controles de modo de escritura, formalidad, creatividad, temperatura, timeout y max output tokens.
  • Tests frontend y backend basicos.
  • Build debug Linux .deb.
  • Workflow de GitHub Actions para crear prereleases multiplataforma desde main.
  • Landing publica bilingue en Lakebed con deteccion de sistema operativo, recomendacion de descarga y enlaces a la release mas reciente.

Pendiente antes de considerar un release estable:

  • QA manual completa en macOS y Windows.
  • Firmado/notarizacion final por plataforma.
  • Iconografia final.
  • Validacion amplia con providers reales.
  • Mejoras de accesibilidad y navegacion keyboard-first.

En progreso (roadmap v1.2 adelantado):

  • Flujo de dos fases: Enter mejora el texto y un segundo Enter lo pega en la app origen (ajuste opt-in pasteBehavior, default copiar al portapapeles). En Linux Wayland la simulacion de teclado esta restringida y el flujo usa el fallback a portapapeles; en macOS requiere permiso de Accessibility.

Fuera del MVP:

  • Lectura de texto de otras apps (captura por accessibility APIs).
  • Historial por defecto.
  • Extension de navegador.
  • Cuentas de equipo, cloud sync, pagos y marketplace de plugins.

Privacidad

FatFingers no incluye telemetria por defecto y no guarda historial salvo opt-in explicito.

La API key no se guarda en settings.json ni en variables de entorno. Se guarda como secreto:

  • Servicio: FatFingers
  • Secreto API key: provider_api_key
  • Secreto headers: custom_headers

El texto del usuario se envia solo al proveedor configurado por el usuario y todas las llamadas LLM salen desde Rust, nunca desde React.

Providers

Providers actuales:

  • openai: usa https://api.openai.com/v1/responses.
  • minimax: usa https://api.minimax.io/v1/responses por defecto, modelo MiniMax-M3.
  • openrouter: usa https://openrouter.ai/api/v1/chat/completions con modelo default openrouter/auto.
  • openai_compatible: usa /chat/completions sobre el baseUrl configurado.
  • custom_http: envia un JSON simple a un endpoint definido por el usuario.

La lista sugerida de modelos OpenAI vive en src/lib/settings.ts y permite ingresar un modelo custom.

Requisitos de desarrollo

  • Node.js compatible con Vite 8.
  • pnpm.
  • Rust stable.
  • Dependencias de Tauri v2 para la plataforma local.
  • La simulacion de pegado (auto_paste) usa enigo con backends puros de Rust (X11 via x11rb y el protocolo virtual-keyboard de Wayland); no requiere paquetes extra del sistema.

En Linux, el almacenamiento seguro usa keyring con backend linux-native-sync-persistent: Secret Service via D-Bus para persistir despues de reinicios y keyutils como cache de sesion. El entorno debe tener un Secret Service compatible, como GNOME Keyring o KWallet, para persistencia de secrets.

El tray de Linux depende del soporte AppIndicator/Ayatana disponible en el desktop environment. Algunas versiones de libayatana-appindicator imprimen un warning de deprecacion al iniciar el tray: Please use libayatana-appindicator-glib in newly written code. En FatFingers esto viene de la dependencia nativa usada por Tauri para el tray y no bloquea el funcionamiento de la app.

Uso local

Instalar dependencias:

pnpm install

Ejecutar frontend solamente:

pnpm dev

Ejecutar app Tauri:

pnpm tauri dev

Ejecutar la landing publica:

cd frontend/FatFingers
vp dlx lakebed dev

Tests y builds:

pnpm test
pnpm build
pnpm tauri build
pnpm tauri build --debug --bundles deb

En Linux, pnpm tauri build genera paquetes .deb, .rpm y .AppImage. En distros rolling como Arch, el wrapper de Tauri define NO_STRIP=true para evitar fallos de linuxdeploy al procesar librerias del sistema recientes.

Releases

Los builds de release se generan con GitHub Actions exclusivamente cuando hay un push a main. Otras ramas, pull requests y tags no generan paquetes de distribucion.

El workflow valida que package.json, src-tauri/tauri.conf.json y src-tauri/Cargo.toml tengan la misma version. Los builds automaticos desde main reciben una version unica con formato <version-base>-main.<run_number> y usan el tag v<version-base>-main.<run_number>. El cambio de version ocurre solo dentro de GitHub Actions; el workflow no crea commits automaticos en main.

Cada release sube artefactos para:

  • Linux: .AppImage, .deb y .rpm.
  • macOS: .dmg para Apple Silicon y .dmg para Intel.
  • Windows: instalador NSIS .exe. Los prereleases no generan MSI porque WiX no admite el identificador textual main en la version del paquete.

Los assets usan el formato FatFingers-v<version>-<platform>-<arch>[setup].<ext>, por ejemplo FatFingers-v0.1.0-linux-amd64.AppImage y FatFingers-v0.1.0-windows-x64-setup.exe.

Los artefactos automaticos y alpha pueden estar sin firma de distribucion. En macOS el workflow usa firma ad-hoc para poder generar el .dmg sin importar un certificado Apple; en Windows no hay firma de codigo. Esto puede mostrar avisos de seguridad hasta configurar certificados, firmado y notarizacion finales.

Checks backend:

cd src-tauri
cargo fmt --check
cargo check
cargo test

Estructura

src/
  components/               Componentes React reutilizables
  screens/                  Helper, settings, onboarding y about
  lib/                      Wrappers Tauri, settings, i18n y validadores
  styles/                   CSS plano
  types/                    Tipos compartidos del frontend desktop

src-tauri/src/
  app/                      Ventanas, tray, shortcuts, clipboard y pegado
  settings/                 Settings, history y secrets
  llm/                      Providers, prompts y tipos LLM
  errors/                   Errores serializables para IPC

frontend/FatFingers/
  client/                   Landing Preact, i18n y descargas
  server/                   Definicion de la capsula Lakebed
  shared/                   Tipos de metadata de releases
  AGENTS.md                 Reglas especificas del subproyecto
  CLAUDE.md                 Contexto para Claude Code
  lakebed.json              Binding del deploy en Lakebed
  README.md                 Desarrollo y despliegue de la landing

docs/                       Specs, arquitectura, QA, roadmap y privacidad
scripts/                    Versionado y wrapper de Tauri
.github/                    Workflows, CODEOWNERS y configuracion GitHub

Documentacion

  • docs/PRODUCT_SPEC.md: comportamiento del producto.
  • docs/ARCHITECTURE.md: arquitectura actual y contratos.
  • docs/MVP_PLAN.md: estado del MVP y pendientes.
  • docs/SECURITY_PRIVACY.md: decisiones de seguridad y privacidad.
  • docs/QA_CHECKLIST.md: pruebas automatizadas y manuales.
  • docs/ROADMAP.md: evolucion planificada.
  • docs/OPEN_SOURCE_CHECKLIST.md: checklist para publicar y preparar releases.
  • AGENTS.md: reglas para agentes/coding assistants.

Contribuir

Lee CONTRIBUTING.md antes de abrir cambios. Para cambios de comportamiento publico, actualiza primero los docs relevantes en docs/.

Reglas principales:

  • No llames proveedores LLM desde React.
  • No guardes secrets en settings planos.
  • No agregues telemetria por defecto.
  • No agregues frameworks UI pesados para el MVP.
  • Mantiene la UI rapida, compacta y keyboard-first.

Seguridad

Para reportar vulnerabilidades, sigue SECURITY.md. No abras issues publicos con API keys, textos privados, headers secretos o trazas que contengan informacion sensible.

Licencia

MIT. Ver LICENSE.

About

Cross-platform desktop writing assistant for fast AI-powered corrections and rewrites. Built with Tauri, React, Rust, and configurable LLM providers.

Topics

Resources

License

Code of conduct

Contributing

Security policy

Stars

1 star

Watchers

0 watching

Forks

Contributors