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向けのルーティングルール)、モデルルーティング(リクエストプロキシ、自動フェイルオーバー、負荷分散、ユーザー/プロジェクトごとのコスト追跡)、課金(サブスクリプション管理、使用量計測、クォータ適用、コストアラート)、およびWeb検索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.