백그라운드 작업
작업 큐, 프로세서, 상태 머신, 이벤트 스트리밍, 아티팩트 저장.
모든 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
작업 상태 머신
생성에서 완료 또는 실패까지의 작업 상태 전환을 보여주는 다이어그램.
이벤트 스트리밍
작업 진행은 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 스키마를 이해하세요.