ドキュメントに戻る
アーキテクチャ

バックグラウンドジョブ

ジョブキュー、プロセッサ、状態機械、イベントストリーミング、アーティファクトストレージ。

14分 で読めます

すべてのLLMバックエンド作業はデスクトップアプリのバックグラウンドジョブシステムを通じて実行されます。ジョブキューがプロセッサに作業をディスパッチし、進捗イベントをストリーミングし、監査とリカバリのためにすべてのプロンプトとレスポンスをSQLiteに永続化します。このアーキテクチャにより、キャンセル、リトライ、コスト追跡、リアルタイムUI更新が可能になります。

ジョブレコード構造

各ジョブは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):監査用に保存されたLLMに送信された完全なテキスト。
  • 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

ジョブ状態機械

作成から完了または失敗までのジョブステータス遷移を示す図。

ジョブ状態機械図
Click to expand
ジョブ状態機械図のプレースホルダー。

イベントストリーミング

ジョブ進捗は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を送信。

アーティファクトストレージ

ジョブの入力と出力は監査のために完全に永続化されます:

  • 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

データモデルを見る

ジョブ、セッション、ターミナル出力を保存するSQLiteスキーマを理解しましょう。