バックグラウンドジョブ
ジョブキュー、プロセッサ、状態機械、イベントストリーミング、アーティファクトストレージ。
All LLM-backed work runs through the background job system in the desktop app. The job queue dispatches work to processors, streams progress events, and persists every prompt and response in SQLite for review and recovery. This architecture enables cancellation, retry, cost tracking, and real-time UI updates.
ジョブレコード構造
各ジョブはSQLiteにこれらのフィールドを持つbackground_jobs行を作成します:
- id (TEXT PRIMARY KEY):ジョブのUUID。
- session_id (TEXT NOT NULL, FK):CASCADE DELETEでsessions.idを参照。
- task_type (TEXT DEFAULT 'unknown'):プロセッサ識別子(例:implementation_plan、text_improvement、root_folder_selection)。
- status (TEXT):有効な値のCHECK制約付きの現在の状態。
- prompt (TEXT NOT NULL): Full text sent to the LLM, stored for review and debugging.
- response (TEXT):LLM出力またはエラーメッセージ。
- error_message (TEXT):失敗時の詳細エラー情報。
- tokens_sent (INTEGER DEFAULT 0):プロバイダーレスポンスからの入力トークン数。
- tokens_received (INTEGER DEFAULT 0):出力トークン数。
- cache_read_tokens (INTEGER DEFAULT 0):プロバイダーキャッシュから読み取られたトークン(Anthropic)。
- cache_write_tokens (INTEGER DEFAULT 0):キャッシュに書き込まれたトークン。
- model_used (TEXT):リクエストに使用されたモデル識別子。
- actual_cost (REAL):トークン使用量とモデル価格に基づいて計算されたコスト。
- metadata (TEXT):タスク固有データ、ワークフローID、ステージ名を含むJSON。
- system_prompt_template (TEXT):システムプロンプトに使用されたテンプレート識別子。
- server_request_id (TEXT):サーバーサイド使用量追跡へのリンク。
- created_at, updated_at, start_time, end_time (INTEGER):タイムスタンプ。
- is_finalized (INTEGER DEFAULT 0):最終コスト/使用量が記録されたかどうか。
ワークフローオーケストレーター
複数ステージワークフローはdesktop/src-tauri/src/jobs/workflow_orchestrator/のWorkflowOrchestratorで管理されます:
ワークフローはWorkflowIntermediateData(workflow_types.rsで定義)を使用してステージ間で出力を渡します:directoryTreeContent、selectedRoots、rawRegexPatterns、locallyFilteredFiles、aiFilteredFiles、verifiedPaths、unverifiedPaths。
Orchestrator components:
- workflow_lifecycle_manager.rs - Workflow state machine
- stage_scheduler.rs - Stage ordering and dependencies
- stage_job_manager.rs - Per-stage job tracking
- event_emitter.rs - Progress event broadcasting
- data_extraction.rs - Intermediate data handling
- failure_handler.rs - Error recovery
- retry_handler.rs - Retry logic
ジョブプロセッサ
各task_typeはdesktop/src-tauri/src/jobs/processors/のプロセッサにマッピングされます:
- implementation_plan_processor.rs:選択されたファイルコンテンツをロードし、ディレクトリツリー付きの構造化プロンプトを構築し、XML計画をUIにストリーミング。ストリーミングにgeneric_llm_stream_processorを使用。
- text_improvement_processor.rs:選択をXMLタグでラップし、非ストリーミングリクエストを送信し、改善されたテキストを返す。LlmTaskRunner経由で実行。
- root_folder_selection_processor.rs:ディレクトリツリーをLLMに送信し、選択されたディレクトリのJSON配列レスポンスをパース。
- RegexFileFilterProcessor(processors/mod.rs内):タスクから正規表現パターンを生成し、gitファイルリストに適用し、バイナリをフィルター。
- FileRelevanceAssessmentProcessor:トークン制限でファイルコンテンツをチャンク化し、バッチで関連性をスコアリングし、関連パスを集約。
- ExtendedPathFinderProcessor(path_finder_types.rs):インポート/依存関係を分析し、関連ファイルを提案し、パスの存在を検証。
- web_search_prompts_generator_processor.rs:ディープリサーチ用のresearch_task XMLブロックを生成。
- web_search_executor_processor.rs:サーバー検索API経由でリサーチプロンプトを並列実行。
- generic_llm_stream_processor.rs:チャンク蓄積、イベント発行、レスポンス最終化を処理する再利用可能なストリーミングプロセッサ。
ステータス値と遷移
ジョブはデータベースで追跡される明確に定義されたステータスを遷移します:
遷移はbackground_job_repository/worker.rsで強制されます。無効な遷移は拒否されます。ステータス変更はjob:status-changed Tauriイベントを発行します。
Job status values:
- idle, created, queued - Initial states
- acknowledged_by_worker - Claimed by worker
- preparing, preparing_input - Setup phase
- running, generating_stream, processing_stream - Execution
- completed, completed_by_tag - Success states
- failed, canceled - Terminal failure states
ジョブ状態機械
作成から完了または失敗までのジョブステータス遷移を示す図。
イベントストリーミング
ジョブ進捗はReact UIが消費するTauriイベントを発行します:
- job:status-changed:ペイロード {jobId, status, error?}。すべてのステータス遷移で発行。
- job:stream-progress:ペイロード {jobId, content, tokensReceived}。各ストリーミングチャンクで発行。
- job:completed:ペイロード {jobId, response, tokensTotal, cost}。正常完了時に発行。
- workflow-status:ペイロード {workflowId, status, currentStage?}。ワークフローレベルのステータス更新。
- workflow-stage:ペイロード {workflowId, stageName, status}。個別ステージのステータス。
リトライとキャンセル
ジョブのリトライとキャンセルメカニズム:
キャンセルはgeneric_llm_stream_processor.rsでストリーミングチャンク間でチェックされるフラグを設定。サーバーサイドキャンセルはrequest_id付きで/api/llm/cancelを送信。
アーティファクトストレージ
Job inputs and outputs are fully persisted for review:
- prompt:システムプロンプトとユーザーコンテンツを含む完全なLLMプロンプト。
- response:完全なLLMレスポンステキストまたはストリーミング蓄積。
- metadata:タスク固有データ(改善用の元テキスト、ファイルリスト、ワークフローコンテキスト)を含むJSON。
- system_prompt_template:サーバーサイドプロンプトテンプレートバージョンにリンクする識別子。
- トークン数とコスト:課金と分析用にプロバイダーレスポンスからキャプチャ。
Key source files
- desktop/src-tauri/src/jobs/mod.rs - Job system entry point
- desktop/src-tauri/src/jobs/queue.rs - Priority queue (8 workers)
- desktop/src-tauri/src/jobs/dispatcher.rs - Job execution
- desktop/src-tauri/src/jobs/types.rs - Job and payload types
- desktop/src-tauri/src/jobs/processors/ - All processor implementations
- desktop/src-tauri/src/jobs/workflow_orchestrator/ - Multi-stage workflows
- desktop/src-tauri/src/jobs/streaming_handler.rs - LLM stream handling
データモデルを見る
Understand the SQLite schema that stores jobs, sessions, and terminal session logs.