PlanToCode 아키텍처
데스크톱 셸, 백그라운드 워크플로우, 공유 서비스가 어떻게 구성되어 있는지 설명합니다.
PlanToCode는 React 프론트엔드를 갖춘 Tauri 데스크톱 애플리케이션입니다. UI는 구현 계획, 터미널, 구성 컨트롤을 렌더링하고, Rust 백엔드는 워크플로우, 토큰 추정, 영구 터미널 세션을 위한 명령을 노출합니다. 이 개요는 이러한 구성 요소들이 어떻게 함께 작동하는지 요약합니다.
프론트엔드 영역
데스크톱 UI는 React 컴포넌트로 구축되었습니다. 구현 계획 콘텐츠는 대용량 계획을 가상화하고, 언어를 감지하며, 복사 작업을 지원하는 Monaco 기반 뷰어를 통해 표시되어 검토자가 성능 문제 없이 계획 텍스트를 검토할 수 있습니다. 터미널 세션은 PTY 출력에 연결되고 연결 상태 업데이트를 표시하는 버퍼링된 뷰 내에서 렌더링됩니다.
공유 프로바이더는 알림, 런타임 구성, 계획 상태를 처리합니다. 구현 계획 패널은 계획 메타데이터를 유지하고, 모달 가시성을 관리하며, 필요에 따라 토큰 추정치나 프롬프트 콘텐츠를 요청합니다.
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
Tauri 명령 및 서비스
애플리케이션의 Rust 측은 워크플로우, 터미널 세션, 모델 도구에 대한 명령을 노출합니다. 워크플로우 명령은 Workflow Orchestrator를 통해 백그라운드 작업을 시작하고, 입력을 검증하며, 파일 탐색 파이프라인이 실행될 때 진행 이벤트를 발생시킵니다. 토큰 추정 명령은 현재 선택된 모델에 대한 프롬프트 크기를 계산합니다.
터미널 명령은 PTY 프로세스를 관리하고, 원격 클라이언트를 추적하며, 세션을 시작하기 전에 지원되는 CLI 바이너리가 사용 가능한지 확인합니다. 상태 확인은 PTY 상태와 데이터베이스 레코드를 결합하여 세션이 여전히 활성 상태인지 보고합니다.
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
영속성 및 구성
터미널 출력과 세션 메타데이터는 터미널 세션 저장소를 통해 SQLite에 저장됩니다. 각 레코드에는 식별자, 타임스탬프, 작업 디렉토리, 환경 변수, 축적된 로그가 포함되어 있어 재시작 시 이전 출력을 복구할 수 있습니다. 동일한 저장소는 세션 상태가 변경될 때 이벤트를 발생시킵니다.
모델 기본값은 애플리케이션 구성 테이블에 저장됩니다. 각 작업은 기본 모델, 허용된 대안 목록, 토큰 예산, 선택적 복사 버튼 프리셋을 정의합니다. React 레이어는 이러한 설정을 읽어 모델 선택기와 가드레일을 채웁니다.
음성 전사 파이프라인
음성 전사는 미디어 권한, 마이크 선택, 스트리밍 전사 요청을 조정하는 React 훅으로 구현됩니다. 이 훅은 계획 터미널 및 프롬프트 편집기와 통합되어 인식된 텍스트를 활성 컴포넌트에 직접 삽입하고 전사가 실패하면 알림을 표시합니다.
서버 계층
서버는 프로바이더 구성(암호화된 볼트의 API 키, 속도 제한, OpenAI, Anthropic, Google에 대한 라우팅 규칙), 모델 라우팅(요청 프록시, 자동 장애 조치, 로드 밸런싱, 사용자/프로젝트별 비용 추적), 청구(구독 관리, 사용량 측정, 할당량 적용, 비용 알림), 웹 검색 API(30일/7일 TTL로 결과 캐싱, 지리적 제한, 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
데이터 흐름
작업, 계획, 작업, 세션은 컴포넌트 간에 흐릅니다: (1) 작업 정제: React UI → TextImprovementPopover → Tauri 명령 → WorkflowOrchestrator → text_improvement 프롬프트 → SQLite → React 프로바이더가 텍스트 교체. (2) 파일 탐색: 구현 계획 패널 → Tauri 명령 → 4개의 순차 작업 → 진행 이벤트 → SQLite → UI 표시. (3) 구현 계획: 파일 탐색 → 계획 생성 → Tauri 명령 → LLM 스트리밍 → SQLite → Monaco 뷰어 → 검토/승인 → 내보내기. (4) 터미널 실행: PTY 세션 → SQLite → 명령 실행 → 출력 스트리밍 → 음성 전사 주입 → 에이전트 주의 감지 → 감사 로그.
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.