TinkerSet
App escritorio/web para buscar y organizar archivos mediante reglas configurables y asistencia de LLMs. UI en React+Tauri con backend FastAPI para gestión y ejecución de acciones.
Resumen
Monorepo que combina una interfaz de usuario en React (con estado gestionado por Zustand) empacada para escritorio con Tauri y un backend en Python (FastAPI). Permite definir "jobs" JSON que se pueden previsualizar o ejecutar sobre el sistema de ficheros, y ofrece interpretación de prompts naturales vía múltiples proveedores LLM. Dispone de CLI, rutas HTTP, y motores modulares de filtros y acciones.
Arquitectura
Estructura de carpetas: frontend contiene la UI (React + TypeScript + Vite) y el wrapper Tauri (src-tauri/). app aloja el backend FastAPI con services/ (llm_service, processor, action_engine, filter_engine), models/ (Job), y cli.py. La app expone endpoints (p.ej. /preview, /execute, /ai/interpret) a los que la UI o el CLI pueden llamar; Tauri ofrece integración IPC para el ejecutable de escritorio. Configuración centralizada en config.py que carga .env. LLM integrations soportan groq, ollama y openai y están encapsuladas en services/llm_service.py.
Decisiones técnicas clave
Monorepo para mantener frontend (Tauri) y backend (FastAPI) juntos y facilitar pruebas locales
Tauri + React para ofrecer experiencia de escritorio y desarrollo web con la misma base de código
FastAPI + Pydantic para validación y endpoints HTTP rápidos y tipados
Arquitectura basada en servicios (services/) para separar llm_service, processor, action_engine y filter_engine
CLI (cli.py) para workflows offline y pruebas reproducibles
Centralizar carga de .env en config.py para consistencia en entorno
Tipado reforzado en frontend (evitar any, usar unknown y helper de errores) para mayor seguridad
Estándar de nombres consistente para proveedores LLM
Desafíos
Gestión de secretos en .env (riesgo de exponer API keys si se comite) — requiere políticas y CI secrets
Tauri añade complejidad de build multiplataforma (Rust toolchain y dependencias nativas en Windows)
Probar integraciones LLM puede requerir claves externas o sistemas de emulación para CI
Sin base de datos persistente en el core: operaciones sobre ficheros y jobs en memoria/JSON requieren cuidado para concurrencia y recuperación
Dependencias dev (Black, Ruff, pre-commit, pytest) incrementan la huella local y complican reproducibilidad sin CI
Compromisos
Monorepo facilita sincronía entre UI y backend pero puede aumentar tamaño del repositorio
Tauri ofrece APIs nativas y empaquetado desktop a costa de builds más complejos y dependencias nativas
Soportar múltiples proveedores LLM incrementa flexibilidad pero añade complejidad en el código y en la gestión de credenciales
No usar una DB relacional simplifica el diseño inicial pero limita auditoría/rollback y facilita inconsistencias si hay fallos en ejecución
Reescribir errores en frontend para usar unknown y helper mejora seguridad de tipos pero requiere cambios extensivos en componentes existentes