Volver a Documentación
Arquitectura

Arquitectura de PlanToCode

Cómo están organizados el shell de escritorio, los flujos de trabajo en segundo plano y los servicios compartidos.

7 min de lectura

PlanToCode es una aplicación de escritorio Tauri con un frontend React. La interfaz renderiza planes de implementación, terminales y controles de configuración, mientras que el backend en Rust expone comandos para flujos de trabajo, estimación de tokens y sesiones de terminal persistentes. Esta visión general resume cómo encajan estas piezas.

Superficie del frontend

La interfaz de escritorio está construida con componentes React. El contenido del plan de implementación se muestra a través de un visor basado en Monaco que virtualiza planes grandes, detecta lenguajes y soporta acciones de copiado para que los revisores puedan examinar el texto del plan sin problemas de rendimiento. Las sesiones de terminal se renderizan dentro de una vista con búfer que se conecta a la salida PTY y muestra actualizaciones del estado de conexión.

Los proveedores compartidos manejan notificaciones, configuración en tiempo de ejecución y estado del plan. El panel de Planes de Implementación mantiene los metadatos del plan, gestiona la visibilidad de modales y solicita estimaciones de tokens o contenido de prompts según sea necesario.

Key React components:

  • ImplementationPlansProvider - Plan state and modal management
  • PlanViewer (Monaco) - Virtualized plan rendering
  • TerminalSurface - PTY output streaming
  • TaskDescriptionEditor - Task input with voice integration
  • WorkflowTracker - Job progress visualization

Comandos y servicios Tauri

El lado Rust de la aplicación expone comandos para flujos de trabajo, sesiones de terminal y herramientas de modelos. Los comandos de flujo de trabajo inician trabajos en segundo plano a través del Orquestador de Flujos de Trabajo, validando entradas y emitiendo eventos de progreso mientras se ejecuta el pipeline de descubrimiento de archivos. Los comandos de estimación de tokens calculan tamaños de prompt para el modelo seleccionado actualmente.

Los comandos de terminal gestionan procesos PTY, rastrean clientes remotos y verifican si los binarios CLI soportados están disponibles antes de lanzar una sesión. Las verificaciones de salud combinan el estado PTY con los registros de la base de datos para informar si una sesión sigue activa.

Command categories (35+ modules):

  • workflow_commands, job_commands - Orchestration
  • session_commands, terminal_commands - State management
  • implementation_plan_commands - Plan generation
  • audio_commands, video_analysis_commands - Media processing
  • device_commands, auth0_commands - Connectivity
  • config_commands, settings_commands - Configuration

IPC event types:

  • job:status-changed, job:stream-progress - Job updates
  • workflow-status, workflow-stage - Workflow progress
  • terminal:output, terminal:status - PTY streaming
  • session:updated - Session state changes
  • orchestrator:initialized - System ready

Workflow definitions:

  • file_finder_workflow.json - 4-stage file discovery
  • web_search_workflow.json - 2-stage research
  • Embedded via embedded_workflows.rs

Persistencia y configuración

La salida del terminal y los metadatos de sesión se almacenan en SQLite a través del repositorio de sesiones de terminal. Cada registro incluye identificadores, marcas de tiempo, directorios de trabajo, variables de entorno y el log acumulado para que los reinicios puedan recuperar la salida anterior. El mismo repositorio emite eventos cuando cambia el estado de la sesión.

Los valores predeterminados del modelo residen en la tabla de configuración de la aplicación. Cada tarea define un modelo predeterminado, una lista de alternativas permitidas, presupuestos de tokens y preajustes opcionales de botones de copiado. La capa React lee estas configuraciones para poblar el selector de modelos y los límites.

Pipeline de transcripción de voz

La transcripción de voz está implementada como un hook de React que coordina permisos de medios, selección de micrófono y solicitudes de transcripción en streaming. El hook se integra con el terminal del plan y los editores de prompts, insertando texto reconocido directamente en el componente activo y mostrando notificaciones si la transcripción falla.

Capa del servidor

El servidor maneja la configuración de proveedores (claves API en bóveda cifrada, límites de tasa, reglas de enrutamiento para OpenAI, Anthropic, Google), enrutamiento de modelos (proxy de solicitudes, failover automático, balanceo de carga, seguimiento de costos por usuario/proyecto), facturación (gestión de suscripciones, medición de uso, aplicación de cuotas, alertas de costos) y APIs de búsqueda web (caché de resultados con TTL de 30 días/7 días, restricciones geográficas, autenticación JWT).

Server components:

  • Actix-Web framework with PostgreSQL + Redis
  • JWT + API Key authentication with RLS
  • LLM proxy: OpenAI, Anthropic, Google, X.AI, OpenRouter
  • WebSocket relay for desktop/mobile device linking
  • Stripe billing with credit-based usage tracking

Flujos de datos

Tareas, planes, trabajos y sesiones fluyen entre componentes: (1) Refinamiento de tareas: React UI → TextImprovementPopover → comando Tauri → WorkflowOrchestrator → prompt text_improvement → SQLite → el proveedor React reemplaza el texto. (2) Descubrimiento de archivos: panel de Planes de Implementación → comando Tauri → 4 trabajos secuenciales → eventos de progreso → SQLite → visualización en UI. (3) Planes de implementación: Descubrimiento de archivos → Generar Plan → comando Tauri → streaming LLM → SQLite → visor Monaco → revisar/aprobar → exportar. (4) Ejecución de terminal: sesión PTY → SQLite → ejecución de comandos → streaming de salida → inyección de transcripción de voz → detección de atención del agente → logs de auditoría.

Key source directories

Desktop (Tauri + React)

  • desktop/src - React UI
  • desktop/src-tauri/src/commands - IPC commands
  • desktop/src-tauri/src/jobs - Job processors
  • desktop/src-tauri/src/db_utils - Repositories
  • desktop/src-tauri/migrations - SQLite schema

Server (Actix-Web)

  • server/src/handlers - Request handlers
  • server/src/clients - Provider clients
  • server/src/services - Business logic
  • server/src/db - PostgreSQL access
  • server/src/streaming - SSE adapters

Explore specific subsystems

Dive into the desktop internals, server API, or background jobs to understand each layer in detail.