components: schemas: ActivityEntry: additionalProperties: false properties: component: type: string details: additionalProperties: type: string type: object event: type: string message: type: string ts: format: date-time type: string required: - ts - event - component - message type: object ActivityOutputBody: additionalProperties: false properties: $schema: description: A URL to the JSON Schema for this object. examples: - https://example.com/ActivityOutputBody.json format: uri readOnly: true type: string entries: items: $ref: "#/components/schemas/ActivityEntry" type: array required: - entries type: object AddCommentRequest: additionalProperties: false properties: $schema: description: A URL to the JSON Schema for this object. examples: - https://example.com/AddCommentRequest.json format: uri readOnly: true type: string comment: type: string commenter: type: string expected_review_uuid: format: uuid type: string job_id: format: int64 type: integer sha: type: string required: - commenter - comment type: object AgentHookFixDoneOutputBody: additionalProperties: false properties: $schema: description: A URL to the JSON Schema for this object. examples: - https://example.com/AgentHookFixDoneOutputBody.json format: uri readOnly: true type: string ok: type: boolean required: - ok type: object AgentHookFixDoneRequest: additionalProperties: false properties: $schema: description: A URL to the JSON Schema for this object. examples: - https://example.com/AgentHookFixDoneRequest.json format: uri readOnly: true type: string fix_session_id: type: string required: - fix_session_id type: object AgentHookResetOutputBody: additionalProperties: false properties: $schema: description: A URL to the JSON Schema for this object. examples: - https://example.com/AgentHookResetOutputBody.json format: uri readOnly: true type: string ok: type: boolean required: - ok type: object AgentHookResetRequest: additionalProperties: false properties: $schema: description: A URL to the JSON Schema for this object. examples: - https://example.com/AgentHookResetRequest.json format: uri readOnly: true type: string all: type: boolean session_id: type: string type: object AgentHookResponse: additionalProperties: false properties: $schema: description: A URL to the JSON Schema for this object. examples: - https://example.com/AgentHookResponse.json format: uri readOnly: true type: string commit_count: format: int64 type: integer commit_threshold: format: int64 type: integer count: format: int64 type: integer diagnosis: type: string failed_review_count: format: int64 type: integer failed_review_threshold: format: int64 type: integer fix_session_id: type: string reason: type: string remind_count: format: int64 type: integer session_id: type: string skipped: type: boolean threshold: format: int64 type: integer triggered: type: boolean triggered_by: type: string required: - session_id - count - threshold - triggered type: object AgentHookSessionsOutputBody: additionalProperties: false properties: $schema: description: A URL to the JSON Schema for this object. examples: - https://example.com/AgentHookSessionsOutputBody.json format: uri readOnly: true type: string sessions: additionalProperties: $ref: "#/components/schemas/SessionState" type: object required: - sessions type: object AgentHookSnooze: additionalProperties: false properties: branch: type: string repo_name: type: string repo_path: type: string snoozed_until: format: date-time type: string worktree_path: type: string required: - repo_name - repo_path - worktree_path - branch - snoozed_until type: object AgentHookSnoozeOutputBody: additionalProperties: false properties: $schema: description: A URL to the JSON Schema for this object. examples: - https://example.com/AgentHookSnoozeOutputBody.json format: uri readOnly: true type: string snoozed: type: boolean snoozed_until: format: date-time type: string required: - snoozed type: object AgentHookSnoozeRequest: additionalProperties: false properties: $schema: description: A URL to the JSON Schema for this object. examples: - https://example.com/AgentHookSnoozeRequest.json format: uri readOnly: true type: string branch: type: string enabled: type: boolean repo_path: type: string snoozed_until: format: date-time type: string worktree_path: type: string required: - repo_path - worktree_path - enabled type: object AgentStats: additionalProperties: false properties: agent: type: string errors: format: int64 type: integer failed: format: int64 type: integer median_duration_secs: format: double type: number pass_rate: format: double type: number passed: format: int64 type: integer total: format: int64 type: integer required: - agent - total - passed - failed - errors - pass_rate - median_duration_secs type: object AnalyticsAttemptStats: additionalProperties: false properties: duration: $ref: "#/components/schemas/AnalyticsPercentiles" eligible: format: int64 type: integer required: - eligible - duration type: object AnalyticsCostStats: additionalProperties: false properties: complete: type: boolean coverage: format: double type: number eligible_attempts: format: int64 type: integer priced_attempts: format: int64 type: integer total_usd: format: double type: number required: - total_usd - eligible_attempts - priced_attempts - coverage - complete type: object AnalyticsDimensionRow: additionalProperties: false properties: attempts: $ref: "#/components/schemas/AnalyticsAttemptStats" cost: $ref: "#/components/schemas/AnalyticsCostStats" review_latency: $ref: "#/components/schemas/AnalyticsPercentiles" reviews: $ref: "#/components/schemas/AnalyticsReviewStats" value: type: string verdicts: $ref: "#/components/schemas/AnalyticsVerdictStats" required: - value - reviews - verdicts - review_latency - attempts - cost type: object AnalyticsFilterOptions: additionalProperties: false properties: agents: items: type: string type: array models: items: type: string type: array projects: items: type: string type: array sources: items: type: string type: array required: - projects - sources - agents - models type: object AnalyticsFilters: additionalProperties: false properties: agents: items: type: string type: array bucket: type: string models: items: type: string type: array projects: items: type: string type: array since: format: date-time type: string sources: items: type: string type: array split: type: string until: format: date-time type: string required: - until - projects - sources - agents - models - bucket type: object AnalyticsPercentiles: additionalProperties: false properties: p50_secs: format: double type: number p90_secs: format: double type: number p99_secs: format: double type: number required: - p50_secs - p90_secs - p99_secs type: object AnalyticsProjectRow: additionalProperties: false properties: attempts: $ref: "#/components/schemas/AnalyticsAttemptStats" cost: $ref: "#/components/schemas/AnalyticsCostStats" project: type: string review_latency: $ref: "#/components/schemas/AnalyticsPercentiles" reviews: $ref: "#/components/schemas/AnalyticsReviewStats" verdicts: $ref: "#/components/schemas/AnalyticsVerdictStats" required: - project - reviews - verdicts - review_latency - attempts - cost type: object AnalyticsReviewStats: additionalProperties: false properties: canceled: format: int64 type: integer done: format: int64 type: integer failed: format: int64 type: integer failure_rate: format: double type: number run_error_rate: format: double type: number run_errors: format: int64 type: integer skipped: format: int64 type: integer total: format: int64 type: integer required: - total - done - failed - canceled - skipped - failure_rate - run_errors - run_error_rate type: object AnalyticsSnapshot: additionalProperties: false properties: $schema: description: A URL to the JSON Schema for this object. examples: - https://example.com/AnalyticsSnapshot.json format: uri readOnly: true type: string agents: items: $ref: "#/components/schemas/AnalyticsDimensionRow" type: array filters: $ref: "#/components/schemas/AnalyticsFilters" models: items: $ref: "#/components/schemas/AnalyticsDimensionRow" type: array options: $ref: "#/components/schemas/AnalyticsFilterOptions" projects: items: $ref: "#/components/schemas/AnalyticsProjectRow" type: array schema_version: format: int64 type: integer sources: items: $ref: "#/components/schemas/AnalyticsDimensionRow" type: array split_series: items: $ref: "#/components/schemas/AnalyticsSplitSeries" type: array summary: $ref: "#/components/schemas/AnalyticsSummary" time_series: items: $ref: "#/components/schemas/AnalyticsTimeBucket" type: array required: - schema_version - filters - summary - time_series - projects - sources - agents - models - split_series - options type: object AnalyticsSplitSeries: additionalProperties: false properties: summary: $ref: "#/components/schemas/AnalyticsSummary" time_series: items: $ref: "#/components/schemas/AnalyticsTimeBucket" type: array value: type: string required: - value - summary - time_series type: object AnalyticsSummary: additionalProperties: false properties: attempts: $ref: "#/components/schemas/AnalyticsAttemptStats" cost: $ref: "#/components/schemas/AnalyticsCostStats" review_latency: $ref: "#/components/schemas/AnalyticsPercentiles" reviews: $ref: "#/components/schemas/AnalyticsReviewStats" verdicts: $ref: "#/components/schemas/AnalyticsVerdictStats" required: - reviews - verdicts - review_latency - attempts - cost type: object AnalyticsTimeBucket: additionalProperties: false properties: attempts: $ref: "#/components/schemas/AnalyticsAttemptStats" cost: $ref: "#/components/schemas/AnalyticsCostStats" end: format: date-time type: string review_latency: $ref: "#/components/schemas/AnalyticsPercentiles" reviews: $ref: "#/components/schemas/AnalyticsReviewStats" start: format: date-time type: string verdicts: $ref: "#/components/schemas/AnalyticsVerdictStats" required: - start - end - reviews - verdicts - review_latency - attempts - cost type: object AnalyticsVerdictStats: additionalProperties: false properties: fail_closed: format: int64 type: integer fail_open: format: int64 type: integer failure_rate: format: double type: number passed: format: int64 type: integer rated: format: int64 type: integer required: - passed - fail_open - fail_closed - rated - failure_rate type: object AutoDesignStatus: additionalProperties: false properties: classifier_failed: format: int64 type: integer enabled: type: boolean skipped_classifier: format: int64 type: integer skipped_heuristic: format: int64 type: integer triggered_classifier: format: int64 type: integer triggered_heuristic: format: int64 type: integer required: - enabled - triggered_heuristic - skipped_heuristic - triggered_classifier - skipped_classifier - classifier_failed type: object BackfillTokensRequest: additionalProperties: false properties: $schema: description: A URL to the JSON Schema for this object. examples: - https://example.com/BackfillTokensRequest.json format: uri readOnly: true type: string dry_run: type: boolean sessions: items: $ref: "#/components/schemas/SessionUsagePayload" type: array required: - sessions type: object BackfillVerdictsOutputBody: additionalProperties: false properties: $schema: description: A URL to the JSON Schema for this object. examples: - https://example.com/BackfillVerdictsOutputBody.json format: uri readOnly: true type: string count: format: int64 type: integer required: - count type: object BatchJobsOutputBody: additionalProperties: false properties: $schema: description: A URL to the JSON Schema for this object. examples: - https://example.com/BatchJobsOutputBody.json format: uri readOnly: true type: string results: additionalProperties: $ref: "#/components/schemas/JobWithReview" type: object required: - results type: object BatchJobsRequest: additionalProperties: false properties: $schema: description: A URL to the JSON Schema for this object. examples: - https://example.com/BatchJobsRequest.json format: uri readOnly: true type: string job_ids: items: format: int64 type: integer type: array required: - job_ids type: object BranchWithCount: additionalProperties: false properties: count: format: int64 type: integer name: type: string required: - name - count type: object CancelJobOutputBody: additionalProperties: false properties: $schema: description: A URL to the JSON Schema for this object. examples: - https://example.com/CancelJobOutputBody.json format: uri readOnly: true type: string success: type: boolean required: - success type: object CancelJobRequest: additionalProperties: false properties: $schema: description: A URL to the JSON Schema for this object. examples: - https://example.com/CancelJobRequest.json format: uri readOnly: true type: string job_id: format: int64 type: integer required: - job_id type: object Candidate: additionalProperties: false properties: body: type: string labels: items: type: string type: - array - "null" x-oapi-codegen-extra-tags: json: labels,omitzero x-omitempty: false links: items: $ref: "#/components/schemas/CandidateLink" type: - array - "null" x-oapi-codegen-extra-tags: json: links,omitzero x-omitempty: false short_id: type: string title: type: string required: - title - body type: object CandidateLink: additionalProperties: false properties: incoming: type: boolean to_ref: type: string type: type: string required: - type - to_ref type: object CleanJobLogsInputBody: additionalProperties: false properties: $schema: description: A URL to the JSON Schema for this object. examples: - https://example.com/CleanJobLogsInputBody.json format: uri readOnly: true type: string days: format: int64 maximum: 3650 minimum: 0 type: integer required: - days type: object CleanJobLogsOutputBody: additionalProperties: false properties: $schema: description: A URL to the JSON Schema for this object. examples: - https://example.com/CleanJobLogsOutputBody.json format: uri readOnly: true type: string removed: format: int64 type: integer required: - removed type: object CloseReviewOutputBody: additionalProperties: false properties: $schema: description: A URL to the JSON Schema for this object. examples: - https://example.com/CloseReviewOutputBody.json format: uri readOnly: true type: string success: type: boolean required: - success type: object CloseReviewRequest: additionalProperties: false properties: $schema: description: A URL to the JSON Schema for this object. examples: - https://example.com/CloseReviewRequest.json format: uri readOnly: true type: string closed: type: boolean expected_review_uuid: format: uuid type: string job_id: format: int64 type: integer required: - job_id - closed type: object ComponentHealth: additionalProperties: false properties: healthy: type: boolean message: type: string name: type: string recovery: $ref: "#/components/schemas/ComponentRecovery" required: - name - healthy type: object ComponentRecovery: additionalProperties: false properties: deadline: format: date-time type: string observed_at: format: date-time type: string required: - observed_at - deadline type: object ConvertLegacyReviewsInputBody: additionalProperties: false properties: $schema: description: A URL to the JSON Schema for this object. examples: - https://example.com/ConvertLegacyReviewsInputBody.json format: uri readOnly: true type: string db: type: string dry_run: type: boolean postgres_url: type: string required: - dry_run type: object CostAggregate: additionalProperties: false properties: $schema: description: A URL to the JSON Schema for this object. examples: - https://example.com/CostAggregate.json format: uri readOnly: true type: string complete: type: boolean jobs_total: format: int64 type: integer jobs_with_cost: format: int64 type: integer total_usd: format: double type: number required: - total_usd - jobs_with_cost - jobs_total - complete type: object CostEnvelope: additionalProperties: false properties: microdollars: format: int64 type: integer type: object DaemonStatus: additionalProperties: false properties: $schema: description: A URL to the JSON Schema for this object. examples: - https://example.com/DaemonStatus.json format: uri readOnly: true type: string active_snoozes: items: $ref: "#/components/schemas/AgentHookSnooze" type: array active_workers: format: int64 type: integer address: type: string applied_jobs: format: int64 type: integer auto_design: $ref: "#/components/schemas/AutoDesignStatus" canceled_jobs: format: int64 type: integer completed_jobs: format: int64 type: integer config_reload_counter: format: int64 minimum: 0 type: integer config_reloaded_at: type: string failed_jobs: format: int64 type: integer machine_id: format: uuid type: string max_workers: format: int64 type: integer network: type: string port: format: int64 type: integer queue_paused: type: boolean queued_jobs: format: int64 type: integer rebased_jobs: format: int64 type: integer running_jobs: format: int64 type: integer skipped_jobs: format: int64 type: integer update_drain_expires_at: type: string update_drain_policy: type: string update_draining: type: boolean version: type: string web_capabilities: items: type: string type: array required: - active_snoozes - version - queued_jobs - running_jobs - completed_jobs - failed_jobs - canceled_jobs - applied_jobs - rebased_jobs - skipped_jobs - active_workers - max_workers - queue_paused - update_draining - web_capabilities type: object DeleteRepoInputBody: additionalProperties: false properties: $schema: description: A URL to the JSON Schema for this object. examples: - https://example.com/DeleteRepoInputBody.json format: uri readOnly: true type: string cascade: type: boolean repo_id: format: int64 minimum: 1 type: integer required: - repo_id - cascade type: object Diagnosis: additionalProperties: false properties: available: type: boolean command: type: string error: type: string name: type: string path: type: string unknown: type: boolean required: - name - available type: object DoctorAgentsOutputBody: additionalProperties: false properties: $schema: description: A URL to the JSON Schema for this object. examples: - https://example.com/DoctorAgentsOutputBody.json format: uri readOnly: true type: string agents: description: Every agent the daemon knows items: $ref: "#/components/schemas/Diagnosis" type: array hook_tools: description: CLI tools that configured kata and beads hooks run, resolved on the daemon PATH items: $ref: "#/components/schemas/Diagnosis" type: array panels: description: Review panels selected for this repository, resolved the way the daemon resolves them when queueing a panel review items: $ref: "#/components/schemas/DoctorPanel" type: array panels_error: description: Why the review experiment configuration could not be applied; panels were not checked type: string path_env: description: PATH environment variable of the daemon process type: string repo_config_error: description: Why the repository config could not be loaded; results use global config only type: string requested: description: The requested agent names, resolved by the daemon; unknown names report an error items: $ref: "#/components/schemas/Diagnosis" type: array required: - path_env - agents - requested - hook_tools - panels type: object DoctorPanel: additionalProperties: false properties: error: description: Why queueing this panel would be rejected type: string experiment: description: ID of the review experiment whose experimental arm runs this panel; empty for the default configuration type: string members: items: $ref: "#/components/schemas/DoctorPanelMember" type: array name: type: string synthesis: $ref: "#/components/schemas/Diagnosis" description: The agent that combines member results used_for: description: "Which reviews select this panel: post_commit, manual, or both" items: type: string type: array required: - name - used_for - members - synthesis type: object DoctorPanelMember: additionalProperties: false properties: agent: type: string name: type: string required: - name - agent type: object DurationStats: additionalProperties: false properties: queue_p50_secs: format: double type: number queue_p90_secs: format: double type: number queue_p99_secs: format: double type: number review_p50_secs: format: double type: number review_p90_secs: format: double type: number review_p99_secs: format: double type: number required: - review_p50_secs - review_p90_secs - review_p99_secs - queue_p50_secs - queue_p90_secs - queue_p99_secs type: object EnqueueCreatedResponse: additionalProperties: false properties: agent: type: string agentic: type: boolean analysis_commit_sha: type: string analysis_files: items: type: string type: array analysis_type: type: string backup_agent: type: string backup_model: type: string branch: type: string claim_blocked: type: boolean closed: type: boolean command_line: type: string commit_id: format: int64 type: integer commit_subject: type: string diff_content: type: string dirty_files: items: type: string type: array enqueued_at: format: date-time type: string error: type: string experiments: items: $ref: "#/components/schemas/ExperimentAssignment" type: array finding_counts: $ref: "#/components/schemas/FindingCounts" finished_at: format: date-time type: string git_ref: type: string id: format: int64 type: integer job_type: type: string min_severity: type: string model: type: string non_voting: type: boolean original_review_uuid: format: uuid type: string output_prefix: type: string panel_member_config_json: type: string panel_member_index: format: int64 type: integer panel_member_name: type: string panel_name: type: string panel_role: type: string panel_run_uuid: format: uuid type: string panel_summary: $ref: "#/components/schemas/PanelSummary" parent_job_id: format: int64 type: integer patch: type: string patch_id: type: string prompt: type: string prompt_prebuilt: type: boolean provider: type: string reasoning: type: string repo_id: format: int64 type: integer repo_name: type: string repo_path: type: string requested_model: type: string requested_provider: type: string resume_source_job_uuid: format: uuid type: string retry_count: format: int64 type: integer review_type: type: string session_id: type: string skip_reason: type: string source: type: string source_machine_id: format: uuid type: string started_at: format: date-time type: string status: type: string synced_at: format: date-time type: string token_usage: type: string updated_at: format: date-time type: string uuid: format: uuid type: string verdict: type: string web_url: type: string worker_id: type: string worktree_path: type: string required: - uuid - id - repo_id - git_ref - agent - job_type - status - enqueued_at - retry_count - agentic - prompt_prebuilt type: object EnqueueRequest: additionalProperties: false properties: $schema: description: A URL to the JSON Schema for this object. examples: - https://example.com/EnqueueRequest.json format: uri readOnly: true type: string agent: type: string agentic: type: boolean analysis_commit_sha: type: string analysis_files: items: type: string type: array analysis_type: type: string branch: type: string commit_sha: type: string custom_prompt: type: string diff_content: type: string dirty_files: items: type: string type: array git_ref: type: string job_type: type: string min_severity: type: string model: type: string output_prefix: type: string panel: type: string plan_file: type: string provider: type: string reasoning: type: string repo_path: type: string review_type: type: string since: type: string source: type: string spec_file: type: string required: - repo_path type: object EnqueueSkippedResponse: additionalProperties: false properties: reason: type: string skipped: type: boolean required: - skipped - reason type: object ErrorDetail: additionalProperties: false properties: location: description: Where the error occurred, e.g. 'body.items[3].tags' or 'path.thing-id' type: string message: description: Error message text type: string value: description: The value at the given location type: object ErrorEntry: additionalProperties: false properties: component: type: string job_id: format: int64 type: integer level: type: string message: type: string ts: format: date-time type: string required: - ts - level - component - message type: object ErrorModel: additionalProperties: false properties: $schema: description: A URL to the JSON Schema for this object. examples: - https://example.com/ErrorModel.json format: uri readOnly: true type: string detail: description: A human-readable explanation specific to this occurrence of the problem. examples: - Property foo is required but is missing. type: string errors: description: Optional list of individual error details items: $ref: "#/components/schemas/ErrorDetail" type: array instance: description: A URI reference that identifies the specific occurrence of the problem. examples: - https://example.com/error-log/abc123 format: uri type: string status: description: HTTP status code examples: - 400 format: int64 type: integer title: description: A short, human-readable summary of the problem type. This value should not change between occurrences of the error. examples: - Bad Request type: string type: default: about:blank description: A URI reference to human-readable documentation for the error. examples: - https://example.com/errors/example format: uri type: string type: object ErrorResponse: additionalProperties: false properties: $schema: description: A URL to the JSON Schema for this object. examples: - https://example.com/ErrorResponse.json format: uri readOnly: true type: string error: type: string required: - error type: object ExperimentAssignment: additionalProperties: false properties: arm: type: string definition_hash: type: string effective_config_hash: type: string id: type: string subject_hash: type: string required: - id - arm - subject_hash - definition_hash - effective_config_hash type: object ExportCICostDocument: additionalProperties: false properties: $schema: description: A URL to the JSON Schema for this object. examples: - https://example.com/ExportCICostDocument.json format: uri readOnly: true type: string database_id: description: Stable identity for the local review database; changes when the database is recreated. format: uuid type: string generated_at: type: string jobs: items: $ref: "#/components/schemas/ExportCICostJob" type: array legacy: type: boolean next_cursor: description: Opaque resume cursor emitted when jobs is non-empty. type: - string - "null" schema_version: format: int64 type: integer tool: type: string tool_version: type: string truncated: description: True when more matching rows are available immediately. type: boolean window: $ref: "#/components/schemas/ExportReviewsWindow" required: - schema_version - tool - tool_version - generated_at - database_id - legacy - window - truncated - next_cursor - jobs type: object ExportCICostJob: additionalProperties: false properties: agent: type: string cost_usd: format: double type: - number - "null" experiments: items: $ref: "#/components/schemas/ExperimentAssignment" type: array finished_at: type: string job_uuid: format: uuid type: string model: type: - string - "null" provider: type: - string - "null" resume_source_job_uuid: format: uuid type: - string - "null" role: type: string status: type: string required: - job_uuid - finished_at - agent - model - provider - role - status - cost_usd - experiments - resume_source_job_uuid type: object ExportCIMetricsDocument: additionalProperties: false properties: $schema: description: A URL to the JSON Schema for this object. examples: - https://example.com/ExportCIMetricsDocument.json format: uri readOnly: true type: string database_id: description: Stable identity for the local review database; changes when the database is recreated. format: uuid type: string generated_at: type: string next_cursor: description: Opaque resume cursor emitted when panels is non-empty. type: - string - "null" panels: items: $ref: "#/components/schemas/ExportCIPanel" type: array schema_version: format: int64 type: integer tool: type: string tool_version: type: string truncated: description: True when more matching rows are available immediately. type: boolean window: $ref: "#/components/schemas/ExportReviewsWindow" required: - schema_version - tool - tool_version - generated_at - database_id - window - truncated - next_cursor - panels type: object ExportCIPanel: additionalProperties: false properties: attempt_count: format: int64 type: - integer - "null" experiments: items: $ref: "#/components/schemas/ExperimentAssignment" type: array first_attempt_at: type: - string - "null" github_repo: type: string head_sha: type: string jobs: items: $ref: "#/components/schemas/ExportCIPanelJob" type: array outcome: type: string panel_created_at: type: string posted_at: type: string pr_number: format: int64 type: integer synthesis_agent: type: - string - "null" synthesis_model: type: - string - "null" required: - github_repo - pr_number - head_sha - panel_created_at - posted_at - first_attempt_at - attempt_count - outcome - synthesis_agent - synthesis_model - jobs - experiments type: object ExportCIPanelJob: additionalProperties: false properties: agent: type: string finished_at: type: - string - "null" job_uuid: format: uuid type: string model: type: - string - "null" provider: type: - string - "null" resume_source_job_uuid: format: uuid type: - string - "null" role: type: string started_at: type: - string - "null" status: type: string required: - job_uuid - role - agent - model - provider - status - started_at - finished_at - resume_source_job_uuid type: object ExportLegacyReviewsOutputBody: additionalProperties: false properties: $schema: description: A URL to the JSON Schema for this object. examples: - https://example.com/ExportLegacyReviewsOutputBody.json format: uri readOnly: true type: string postgres_records: items: $ref: "#/components/schemas/PostgresLegacyReview" type: array sqlite_records: items: $ref: "#/components/schemas/LegacyReview" type: array required: - sqlite_records - postgres_records type: object ExportReview: additionalProperties: false properties: agent: type: string branch: type: - string - "null" closed: description: True when the review is marked closed. type: boolean commit_sha: type: - string - "null" completed_at: type: string content: type: - string - "null" cost: $ref: "#/components/schemas/ExportReviewCost" created_at: type: string document: description: The stored review document in canonical JSON. Null in the metadata profile and for reviews stored without a document. content is the Markdown rendering of this document. oneOf: - $ref: "#/components/schemas/StructuredReviewDocument" - $ref: "#/components/schemas/LegacyReviewDocument" - type: "null" duration_ms: format: int64 type: - integer - "null" experiments: items: $ref: "#/components/schemas/ExperimentAssignment" type: array model: type: - string - "null" pr_number: format: int64 type: - integer - "null" pr_url: type: - string - "null" project: type: string repo: type: string resume_source_job_uuid: format: uuid type: - string - "null" review_id: format: uuid type: string status: type: string subagents: items: $ref: "#/components/schemas/ExportSubagent" type: array updated_at: description: RFC3339 UTC time the review row last changed, including close and reopen. Falls back to completed_at when the row has no recorded update time. type: string verdict: description: pass, fail, or unknown when a legacy review has no recorded verdict. type: string required: - review_id - status - verdict - created_at - completed_at - duration_ms - project - repo - branch - commit_sha - pr_number - pr_url - agent - model - cost - content - document - closed - updated_at - subagents - experiments - resume_source_job_uuid type: object ExportReviewCost: additionalProperties: false properties: tokens_in: format: int64 type: - integer - "null" tokens_out: format: int64 type: - integer - "null" usd: format: double type: - number - "null" required: - tokens_in - tokens_out - usd type: object ExportReviewsDocument: additionalProperties: false properties: $schema: description: A URL to the JSON Schema for this object. examples: - https://example.com/ExportReviewsDocument.json format: uri readOnly: true type: string database_id: description: Stable identity for the local review database; changes when the database is recreated. format: uuid type: string generated_at: type: string next_cursor: description: Opaque resume cursor emitted when reviews is non-empty; pass as cursor to resume after the last returned review. type: - string - "null" profile: type: string reviews: items: $ref: "#/components/schemas/ExportReview" type: array schema_version: format: int64 type: integer tool: type: string tool_version: type: string truncated: description: True when more matching rows are available immediately. type: boolean window: $ref: "#/components/schemas/ExportReviewsWindow" required: - schema_version - tool - tool_version - generated_at - database_id - profile - window - truncated - next_cursor - reviews type: object ExportReviewsWindow: additionalProperties: false properties: field: type: string since: type: - string - "null" until: type: - string - "null" required: - field - since - until type: object ExportSubagent: additionalProperties: false properties: agent: type: string completed_at: type: string content: type: - string - "null" cost: $ref: "#/components/schemas/ExportReviewCost" document: description: The stored review document in canonical JSON. Null in the metadata profile and for reviews stored without a document. content is the Markdown rendering of this document. oneOf: - $ref: "#/components/schemas/StructuredReviewDocument" - $ref: "#/components/schemas/LegacyReviewDocument" - type: "null" duration_ms: format: int64 type: - integer - "null" model: type: - string - "null" name: type: string resume_source_job_uuid: format: uuid type: - string - "null" review_id: format: uuid type: string review_type: type: - string - "null" verdict: description: pass, fail, or unknown when a legacy review has no recorded verdict. type: string required: - review_id - name - agent - model - review_type - verdict - completed_at - duration_ms - cost - content - document - resume_source_job_uuid type: object FailureStats: additionalProperties: false properties: errors: additionalProperties: format: int64 type: integer type: object retries: format: int64 type: integer total: format: int64 type: integer required: - total - retries - errors type: object Finding: additionalProperties: false properties: fix: type: string location: $ref: "#/components/schemas/Location" message: type: string severity: type: string required: - severity - message - fix - location type: object FindingCounts: additionalProperties: false properties: critical: format: int64 type: integer high: format: int64 type: integer low: format: int64 type: integer medium: format: int64 type: integer required: - critical - high - medium - low type: object FixJobRequest: additionalProperties: false properties: $schema: description: A URL to the JSON Schema for this object. examples: - https://example.com/FixJobRequest.json format: uri readOnly: true type: string git_ref: type: string parent_job_id: format: int64 type: integer plan_first: type: boolean prompt: type: string stale_job_id: format: int64 type: integer required: - parent_job_id type: object GoalGateRequest: additionalProperties: false properties: candidate: $ref: "#/components/schemas/Candidate" plan_file: type: string repo_path: type: string spec_file: type: string required: - repo_path type: object GoalGateResponse: additionalProperties: false properties: $schema: description: A URL to the JSON Schema for this object. examples: - https://example.com/GoalGateResponse.json format: uri readOnly: true type: string blocked: type: boolean error: type: string findings: items: $ref: "#/components/schemas/Finding" type: array mode: type: string snapshot_id: type: string status: type: string version: format: int64 type: integer required: - version - status - mode - blocked - findings type: object HealthStatus: additionalProperties: false properties: $schema: description: A URL to the JSON Schema for this object. examples: - https://example.com/HealthStatus.json format: uri readOnly: true type: string components: items: $ref: "#/components/schemas/ComponentHealth" type: array error_count_24h: format: int64 type: integer healthy: type: boolean ready: description: Daemon can process work; CI review failures remain unhealthy while recovery runs type: boolean recent_errors: items: $ref: "#/components/schemas/ErrorEntry" type: array search: $ref: "#/components/schemas/SearchHealth" uptime: type: string version: type: string required: - healthy - ready - uptime - version - components - recent_errors - error_count_24h type: object ImportLegacyReviewInputBody: additionalProperties: false properties: $schema: description: A URL to the JSON Schema for this object. examples: - https://example.com/ImportLegacyReviewInputBody.json format: uri readOnly: true type: string db: type: string document: {} id: format: int64 type: integer postgres_url: type: string uuid: format: uuid type: string required: - document type: object Input: additionalProperties: false properties: cwd: type: string hook_event_name: type: string last_assistant_message: type: string session_id: type: string stop_hook_active: type: boolean tool_input: additionalProperties: {} type: object tool_name: type: string tool_response: {} tool_use_id: type: string transcript_path: type: string turn_id: type: string required: - session_id type: object JobIDRequest: additionalProperties: false properties: $schema: description: A URL to the JSON Schema for this object. examples: - https://example.com/JobIDRequest.json format: uri readOnly: true type: string job_id: format: int64 type: integer required: - job_id type: object JobStats: additionalProperties: false properties: canceled: format: int64 type: integer closed: format: int64 type: integer done: format: int64 type: integer failed: format: int64 type: integer open: format: int64 type: integer queued: format: int64 type: integer running: format: int64 type: integer skipped: format: int64 type: integer required: - queued - running - done - failed - canceled - skipped - closed - open type: object JobStatusOutputBody: additionalProperties: false properties: $schema: description: A URL to the JSON Schema for this object. examples: - https://example.com/JobStatusOutputBody.json format: uri readOnly: true type: string status: type: string required: - status type: object JobTypeStats: additionalProperties: false properties: applied: format: int64 type: integer count: format: int64 type: integer rebased: format: int64 type: integer type: type: string required: - type - count type: object JobWithReview: additionalProperties: false properties: job: $ref: "#/components/schemas/ReviewJob" review: $ref: "#/components/schemas/Review" required: - job type: object LegacyConversionReport: additionalProperties: false properties: $schema: description: A URL to the JSON Schema for this object. examples: - https://example.com/LegacyConversionReport.json format: uri readOnly: true type: string converted: format: int64 type: integer dry_run: type: boolean refused: additionalProperties: format: int64 type: integer type: object unresolved: format: int64 type: integer required: - unresolved - converted - refused - dry_run type: object LegacyMaintenanceTarget: additionalProperties: false properties: $schema: description: A URL to the JSON Schema for this object. examples: - https://example.com/LegacyMaintenanceTarget.json format: uri readOnly: true type: string db: type: string postgres_url: type: string type: object LegacyReview: additionalProperties: false properties: id: format: int64 type: integer job_id: format: int64 type: integer job_type: type: string markdown: type: string migration_error: type: string previous_json: type: string review_id: format: int64 type: integer sources: items: $ref: "#/components/schemas/LegacyReviewSource" type: array required: - id - job_id - job_type - markdown - previous_json - migration_error type: object LegacyReviewDocument: additionalProperties: false description: Historical Markdown without extracted findings. properties: findings: items: $ref: "#/components/schemas/StructuredReviewFinding" maxItems: 0 type: - array - "null" legacy: additionalProperties: false description: Historical Markdown without extracted findings. Only present in storage-only schema version 0. properties: markdown: type: string recorded_verdict: type: - boolean - "null" required: - markdown - recorded_verdict type: object schema_version: format: int64 maximum: 0 minimum: 0 type: integer summary: maxLength: 0 type: string required: - schema_version - legacy type: object LegacyReviewSource: additionalProperties: false properties: agent: type: string document: {} markdown: type: string number: format: int64 type: integer required: - number - agent type: object ListBranchesOutputBody: additionalProperties: false properties: $schema: description: A URL to the JSON Schema for this object. examples: - https://example.com/ListBranchesOutputBody.json format: uri readOnly: true type: string branches: items: $ref: "#/components/schemas/BranchWithCount" type: array nulls_remaining: format: int64 type: integer total_count: format: int64 type: integer required: - branches - total_count - nulls_remaining type: object ListCommentsOutputBody: additionalProperties: false properties: $schema: description: A URL to the JSON Schema for this object. examples: - https://example.com/ListCommentsOutputBody.json format: uri readOnly: true type: string responses: items: $ref: "#/components/schemas/Response" type: array required: - responses type: object ListJobsOutputBody: additionalProperties: false properties: $schema: description: A URL to the JSON Schema for this object. examples: - https://example.com/ListJobsOutputBody.json format: uri readOnly: true type: string filtered_stats: $ref: "#/components/schemas/JobStats" has_more: type: boolean jobs: items: $ref: "#/components/schemas/ReviewJob" type: array next_cursor: description: Opaque resume cursor when more jobs are available type: - string - "null" stats: $ref: "#/components/schemas/JobStats" required: - jobs - has_more - next_cursor type: object ListReposOutputBody: additionalProperties: false properties: $schema: description: A URL to the JSON Schema for this object. examples: - https://example.com/ListReposOutputBody.json format: uri readOnly: true type: string repos: items: $ref: "#/components/schemas/RepoWithCount" type: array total_count: format: int64 type: integer required: - repos - total_count type: object Location: additionalProperties: false properties: file: type: string kata_id: type: string line: format: int64 type: integer type: object MergeReposInputBody: additionalProperties: false properties: $schema: description: A URL to the JSON Schema for this object. examples: - https://example.com/MergeReposInputBody.json format: uri readOnly: true type: string source_id: format: int64 minimum: 1 type: integer target_id: format: int64 minimum: 1 type: integer required: - source_id - target_id type: object MergeReposOutputBody: additionalProperties: false properties: $schema: description: A URL to the JSON Schema for this object. examples: - https://example.com/MergeReposOutputBody.json format: uri readOnly: true type: string moved: format: int64 type: integer required: - moved type: object MigrateReviewInputBody: additionalProperties: false properties: $schema: description: A URL to the JSON Schema for this object. examples: - https://example.com/MigrateReviewInputBody.json format: uri readOnly: true type: string document: {} review_id: format: int64 minimum: 1 type: integer required: - review_id - document type: object MigrateReviewOutputBody: additionalProperties: false properties: $schema: description: A URL to the JSON Schema for this object. examples: - https://example.com/MigrateReviewOutputBody.json format: uri readOnly: true type: string success: type: boolean required: - success type: object MoveRepoInputBody: additionalProperties: false properties: $schema: description: A URL to the JSON Schema for this object. examples: - https://example.com/MoveRepoInputBody.json format: uri readOnly: true type: string identity: type: string path: minLength: 1 type: string repo_id: format: int64 minimum: 1 type: integer required: - repo_id - path - identity type: object OverviewStats: additionalProperties: false properties: applied: format: int64 type: integer canceled: format: int64 type: integer done: format: int64 type: integer failed: format: int64 type: integer queued: format: int64 type: integer rebased: format: int64 type: integer running: format: int64 type: integer total: format: int64 type: integer required: - total - queued - running - done - failed - canceled - applied - rebased type: object PanelEnqueueResponse: additionalProperties: false properties: agent: type: string agentic: type: boolean analysis_commit_sha: type: string analysis_files: items: type: string type: array analysis_type: type: string backup_agent: type: string backup_model: type: string branch: type: string claim_blocked: type: boolean closed: type: boolean command_line: type: string commit_id: format: int64 type: integer commit_subject: type: string diff_content: type: string dirty_files: items: type: string type: array enqueued_at: format: date-time type: string error: type: string experiments: items: $ref: "#/components/schemas/ExperimentAssignment" type: array finding_counts: $ref: "#/components/schemas/FindingCounts" finished_at: format: date-time type: string git_ref: type: string id: format: int64 type: integer job_type: type: string member_job_ids: items: format: int64 type: integer type: array min_severity: type: string model: type: string non_voting: type: boolean original_review_uuid: format: uuid type: string output_prefix: type: string panel_member_config_json: type: string panel_member_index: format: int64 type: integer panel_member_name: type: string panel_name: type: string panel_role: type: string panel_run_uuid: format: uuid type: string panel_summary: $ref: "#/components/schemas/PanelSummary" parent_job_id: format: int64 type: integer patch: type: string patch_id: type: string prompt: type: string prompt_prebuilt: type: boolean provider: type: string reasoning: type: string repo_id: format: int64 type: integer repo_name: type: string repo_path: type: string requested_model: type: string requested_provider: type: string resume_source_job_uuid: format: uuid type: string retry_count: format: int64 type: integer review_type: type: string session_id: type: string skip_reason: type: string source: type: string source_machine_id: format: uuid type: string started_at: format: date-time type: string status: type: string synced_at: format: date-time type: string token_usage: type: string updated_at: format: date-time type: string uuid: format: uuid type: string verdict: type: string web_url: type: string worker_id: type: string worktree_path: type: string required: - panel_run_uuid - member_job_ids - id - repo_id - git_ref - agent - job_type - status - enqueued_at - retry_count - agentic - prompt_prebuilt type: object PanelSummary: additionalProperties: false properties: first_started_at: format: date-time type: string members_canceled: format: int64 type: integer members_cost_complete: type: boolean members_cost_usd: format: double type: number members_failed: format: int64 type: integer members_skipped: format: int64 type: integer members_succeeded: format: int64 type: integer members_terminal: format: int64 type: integer members_total: format: int64 type: integer members_with_cost: format: int64 type: integer panel_run_uuid: format: uuid type: string required: - panel_run_uuid - members_total - members_terminal - members_succeeded - members_failed - members_canceled - members_skipped type: object PendingReminder: additionalProperties: false properties: branch: type: string commit_count: format: int64 type: integer created_at: format: date-time type: string failed_review_count: format: int64 type: integer head: type: string instruction: type: string lineage_key: type: string reason: type: string tracked_repo_identity: type: string tracked_repo_root: type: string triggered_by: type: string worktree_root: type: string required: - triggered_by - reason - tracked_repo_root - worktree_root - lineage_key - created_at type: object PingInfo: additionalProperties: false properties: $schema: description: A URL to the JSON Schema for this object. examples: - https://example.com/PingInfo.json format: uri readOnly: true type: string mcp_url: description: Streamable HTTP MCP endpoint when [mcp] is enabled and the daemon listens on TCP type: string ok: type: boolean pid: format: int64 type: integer service: type: string version: type: string required: - ok - service - version type: object PostgresLegacyReview: additionalProperties: false properties: id: type: string job_type: type: string job_uuid: type: string markdown: type: string migration_error: type: string previous_json: type: string sources: items: $ref: "#/components/schemas/LegacyReviewSource" type: array required: - id - job_uuid - job_type - markdown - previous_json - migration_error type: object QueuePauseOutputBody: additionalProperties: false properties: $schema: description: A URL to the JSON Schema for this object. examples: - https://example.com/QueuePauseOutputBody.json format: uri readOnly: true type: string queue_paused: type: boolean required: - queue_paused type: object RebuttalRequest: additionalProperties: false properties: $schema: description: A URL to the JSON Schema for this object. examples: - https://example.com/RebuttalRequest.json format: uri readOnly: true type: string comment: type: string commenter: type: string finding: type: string job_id: format: int64 type: integer required: - job_id - finding - comment - commenter type: object RegisterRepoRequest: additionalProperties: false properties: $schema: description: A URL to the JSON Schema for this object. examples: - https://example.com/RegisterRepoRequest.json format: uri readOnly: true type: string repo_path: type: string required: - repo_path type: object ReleaseNote: additionalProperties: false properties: body: type: string html_url: type: string name: type: string prerelease: type: boolean published_at: format: date-time type: string tag_name: type: string updated_at: format: date-time type: string required: - tag_name - name - body - html_url - published_at - updated_at - prerelease type: object ReleaseNotesResponse: additionalProperties: false properties: $schema: description: A URL to the JSON Schema for this object. examples: - https://example.com/ReleaseNotesResponse.json format: uri readOnly: true type: string fetched_at: format: date-time type: string releases: items: $ref: "#/components/schemas/ReleaseNote" type: array stale: type: boolean required: - releases - fetched_at - stale type: object ReleaseUpdateOutputBody: additionalProperties: false properties: $schema: description: A URL to the JSON Schema for this object. examples: - https://example.com/ReleaseUpdateOutputBody.json format: uri readOnly: true type: string released: type: boolean required: - released type: object RemapMapping: additionalProperties: false properties: author: type: string new_sha: type: string old_sha: type: string patch_id: type: string subject: type: string timestamp: type: string required: - old_sha - new_sha - patch_id - author - subject - timestamp type: object RemapRequest: additionalProperties: false properties: $schema: description: A URL to the JSON Schema for this object. examples: - https://example.com/RemapRequest.json format: uri readOnly: true type: string mappings: items: $ref: "#/components/schemas/RemapMapping" type: array repo_path: type: string required: - repo_path - mappings type: object RemapResult: additionalProperties: false properties: $schema: description: A URL to the JSON Schema for this object. examples: - https://example.com/RemapResult.json format: uri readOnly: true type: string remapped: format: int64 type: integer skipped: format: int64 type: integer required: - remapped - skipped type: object RenameRepoInputBody: additionalProperties: false properties: $schema: description: A URL to the JSON Schema for this object. examples: - https://example.com/RenameRepoInputBody.json format: uri readOnly: true type: string by_path: type: boolean identifier: minLength: 1 type: string name: minLength: 1 type: string required: - identifier - by_path - name type: object RenameRepoOutputBody: additionalProperties: false properties: $schema: description: A URL to the JSON Schema for this object. examples: - https://example.com/RenameRepoOutputBody.json format: uri readOnly: true type: string repo: $ref: "#/components/schemas/Repo" required: - repo type: object Repo: additionalProperties: false properties: $schema: description: A URL to the JSON Schema for this object. examples: - https://example.com/Repo.json format: uri readOnly: true type: string created_at: format: date-time type: string id: format: int64 type: integer identity: type: string name: type: string root_path: type: string required: - id - root_path - name - created_at type: object RepoStats: additionalProperties: false properties: $schema: description: A URL to the JSON Schema for this object. examples: - https://example.com/RepoStats.json format: uri readOnly: true type: string closed_reviews: format: int64 type: integer completed_jobs: format: int64 type: integer failed_jobs: format: int64 type: integer failed_reviews: format: int64 type: integer open_reviews: format: int64 type: integer passed_reviews: format: int64 type: integer queued_jobs: format: int64 type: integer repo: $ref: "#/components/schemas/Repo" running_jobs: format: int64 type: integer total_jobs: format: int64 type: integer required: - repo - total_jobs - queued_jobs - running_jobs - completed_jobs - failed_jobs - passed_reviews - failed_reviews - closed_reviews - open_reviews type: object RepoSummary: additionalProperties: false properties: addressed: format: int64 type: integer failed: format: int64 type: integer name: type: string passed: format: int64 type: integer path: type: string total: format: int64 type: integer required: - name - path - total - passed - failed - addressed type: object RepoWithCount: additionalProperties: false properties: count: format: int64 type: integer identity: type: string name: type: string root_path: type: string required: - name - root_path - count type: object Request: additionalProperties: false properties: $schema: description: A URL to the JSON Schema for this object. examples: - https://example.com/Request.json format: uri readOnly: true type: string agent: type: string commit_threshold: format: int64 type: integer defer_post_tool_reminder: type: boolean event: $ref: "#/components/schemas/Input" failed_review_threshold: format: int64 type: integer instruction: type: string threshold: format: int64 type: integer required: - agent - event - threshold - commit_threshold - failed_review_threshold - instruction type: object RerunJobOutputBody: additionalProperties: false properties: $schema: description: A URL to the JSON Schema for this object. examples: - https://example.com/RerunJobOutputBody.json format: uri readOnly: true type: string job_id: format: int64 type: integer request_id: format: uuid type: string run_uuid: format: uuid type: string success: type: boolean required: - success - job_id - request_id type: object RerunJobRequest: additionalProperties: false properties: $schema: description: A URL to the JSON Schema for this object. examples: - https://example.com/RerunJobRequest.json format: uri readOnly: true type: string agent: type: string job_id: format: int64 type: integer request_id: format: uuid type: string required: - job_id type: object ResolveRepoOutputBody: additionalProperties: false properties: $schema: description: A URL to the JSON Schema for this object. examples: - https://example.com/ResolveRepoOutputBody.json format: uri readOnly: true type: string repo: $ref: "#/components/schemas/ResolvedRepo" tracked: type: boolean required: - tracked type: object ResolvedRepo: additionalProperties: false properties: agent_hook_snoozed_until: format: date-time type: string identity: type: string name: type: string root_path: type: string required: - root_path - identity - name type: object Response: additionalProperties: false properties: $schema: description: A URL to the JSON Schema for this object. examples: - https://example.com/Response.json format: uri readOnly: true type: string commit_id: format: int64 type: integer created_at: format: date-time type: string id: format: int64 type: integer job_id: format: int64 type: integer responder: type: string response: type: string source: type: string source_machine_id: format: uuid type: string synced_at: format: date-time type: string uuid: format: uuid type: string required: - id - responder - response - created_at type: object Review: additionalProperties: false properties: $schema: description: A URL to the JSON Schema for this object. examples: - https://example.com/Review.json format: uri readOnly: true type: string agent: type: string closed: type: boolean created_at: format: date-time type: string file_coverage: $ref: "#/components/schemas/ReviewFileCoverage" id: format: int64 type: integer job: $ref: "#/components/schemas/ReviewJob" job_id: format: int64 type: integer output: type: string prompt: type: string structured_output: additionalProperties: true type: object synced_at: format: date-time type: string updated_at: format: date-time type: string updated_by_machine_id: format: uuid type: string uuid: format: uuid type: string verdict_bool: format: int64 type: integer web_url: type: string required: - id - job_id - agent - prompt - output - created_at - closed type: object ReviewFileCoverage: additionalProperties: false properties: excluded: format: int64 type: integer reviewed: format: int64 type: integer type: object ReviewIDSetValue: additionalProperties: false type: object ReviewJob: additionalProperties: false properties: $schema: description: A URL to the JSON Schema for this object. examples: - https://example.com/ReviewJob.json format: uri readOnly: true type: string agent: type: string agentic: type: boolean analysis_commit_sha: type: string analysis_files: items: type: string type: array analysis_type: type: string backup_agent: type: string backup_model: type: string branch: type: string claim_blocked: type: boolean closed: type: boolean command_line: type: string commit_id: format: int64 type: integer commit_subject: type: string diff_content: type: string dirty_files: items: type: string type: array enqueued_at: format: date-time type: string error: type: string experiments: items: $ref: "#/components/schemas/ExperimentAssignment" type: array finding_counts: $ref: "#/components/schemas/FindingCounts" finished_at: format: date-time type: string git_ref: type: string id: format: int64 type: integer job_type: type: string min_severity: type: string model: type: string non_voting: type: boolean original_review_uuid: format: uuid type: string output_prefix: type: string panel_member_config_json: type: string panel_member_index: format: int64 type: integer panel_member_name: type: string panel_name: type: string panel_role: type: string panel_run_uuid: format: uuid type: string panel_summary: $ref: "#/components/schemas/PanelSummary" parent_job_id: format: int64 type: integer patch: type: string patch_id: type: string prompt: type: string prompt_prebuilt: type: boolean provider: type: string readable: type: boolean reasoning: type: string repo_id: format: int64 type: integer repo_name: type: string repo_path: type: string requested_model: type: string requested_provider: type: string resume_source_job_uuid: format: uuid type: string retry_count: format: int64 type: integer review_type: type: string session_id: type: string skip_reason: type: string source: type: string source_machine_id: format: uuid type: string started_at: format: date-time type: string status: type: string synced_at: format: date-time type: string token_usage: type: string updated_at: format: date-time type: string uuid: format: uuid type: string verdict: type: string web_url: type: string worker_id: type: string worktree_path: type: string required: - id - repo_id - git_ref - agent - job_type - status - enqueued_at - retry_count - agentic - prompt_prebuilt type: object ReviewProjection: additionalProperties: false properties: $schema: description: A URL to the JSON Schema for this object. examples: - https://example.com/ReviewProjection.json format: uri readOnly: true type: string job: $ref: "#/components/schemas/ReviewProjectionJob" panel_members: items: $ref: "#/components/schemas/ReviewProjectionJob" type: array responses: items: $ref: "#/components/schemas/ReviewProjectionResponse" type: array review: $ref: "#/components/schemas/ReviewProjectionReview" schema_version: format: int64 type: integer required: - schema_version - job - responses - panel_members type: object ReviewProjectionJob: additionalProperties: false properties: agent: type: string branch: type: string commit_subject: type: string enqueued_at: format: date-time type: string finished_at: format: date-time type: string git_ref: type: string id: format: int64 type: integer model: type: string non_voting: type: boolean panel_member_name: type: string panel_name: type: string panel_role: type: string panel_summary: $ref: "#/components/schemas/PanelSummary" project: type: string review_type: type: string source: type: string started_at: format: date-time type: string status: type: string uuid: format: uuid type: string verdict: type: string required: - id - project - git_ref - agent - status - enqueued_at type: object ReviewProjectionResponse: additionalProperties: false properties: created_at: format: date-time type: string id: format: int64 type: integer responder: type: string response: type: string required: - id - responder - response - created_at type: object ReviewProjectionReview: additionalProperties: false properties: closed: type: boolean created_at: format: date-time type: string id: format: int64 type: integer output: type: string required: - id - output - created_at - closed type: object ScanTokenUsageInputBody: additionalProperties: false properties: $schema: description: A URL to the JSON Schema for this object. examples: - https://example.com/ScanTokenUsageInputBody.json format: uri readOnly: true type: string dry_run: type: boolean required: - dry_run type: object ScanTokenUsageReport: additionalProperties: false properties: $schema: description: A URL to the JSON Schema for this object. examples: - https://example.com/ScanTokenUsageReport.json format: uri readOnly: true type: string failed: format: int64 type: integer jobs: items: $ref: "#/components/schemas/ScannedTokenUsage" type: array skipped: format: int64 type: integer total: format: int64 type: integer updated: format: int64 type: integer required: - total - updated - skipped - failed - jobs type: object ScannedTokenUsage: additionalProperties: false properties: agent: type: string job_id: format: int64 type: integer summary: type: string required: - job_id - agent - summary type: object SearchCoverage: additionalProperties: false properties: embedding_backlog: format: int64 type: integer embeddings_configured: type: boolean mirror_backlog: format: int64 type: integer mirror_complete: type: boolean skipped: format: int64 type: integer vector_state: type: string required: - mirror_complete - embeddings_configured - vector_state - embedding_backlog - skipped type: object SearchHealth: additionalProperties: false properties: active_generation: type: string credential: description: Embedding credential availability; ok means a key resolved, not provider acceptance enum: - missing - rejected - ok type: string credential_reason: description: Sanitized reason semantic search is unavailable because of credentials type: string credential_source: description: Credential source (inline, env:NAME, or file:path), never its value type: string embedded: format: int64 type: integer embedding_backlog: format: int64 type: integer embeddings_configured: type: boolean eta_seconds: format: int64 type: integer indexed: format: int64 type: integer last_error: type: string last_error_status: format: int64 type: integer last_progress_at: format: date-time type: string last_success_at: format: date-time type: string mirror_backlog: format: int64 type: integer mirror_complete: type: boolean rate_per_second: format: double type: number skipped: format: int64 type: integer vector_state: type: string required: - indexed - mirror_complete - embeddings_configured - embedded - skipped - embedding_backlog - vector_state type: object SearchHit: additionalProperties: false properties: agent: type: string branch: type: string closed: type: boolean commit_sha: type: string commit_subject: type: string excerpt: type: string finished_at: format: date-time type: string git_ref: type: string job_id: format: int64 type: integer job_uuid: type: string matched_in: items: type: string type: array panel_role: type: string repo_name: type: string repo_path: type: string review_id: format: int64 type: integer review_type: type: string review_uuid: type: string score: format: double type: number verdict: type: string required: - job_id - review_id - repo_name - repo_path - git_ref - review_type - agent - closed - finished_at - score - matched_in - excerpt type: object SearchResponse: additionalProperties: false properties: $schema: description: A URL to the JSON Schema for this object. examples: - https://example.com/SearchResponse.json format: uri readOnly: true type: string bounded: type: boolean bounded_reason: type: string coverage: $ref: "#/components/schemas/SearchCoverage" degraded: type: boolean degraded_reason: type: string hits: items: $ref: "#/components/schemas/SearchHit" type: array mode: type: string partial: type: boolean query: type: string required: - query - mode - degraded - bounded - partial - coverage - hits type: object SessionState: additionalProperties: false properties: acknowledged_review_ids: additionalProperties: additionalProperties: $ref: "#/components/schemas/ReviewIDSetValue" type: object type: object commit_count: format: int64 type: integer commit_counts_since_prompt: additionalProperties: format: int64 type: integer type: object commit_shas_since_prompt: additionalProperties: items: type: string type: array type: object commit_triggered_at: format: date-time type: string count: format: int64 type: integer failed_review_count: format: int64 type: integer failed_review_triggered_at: format: date-time type: string failed_review_triggered_counts: additionalProperties: format: int64 type: integer type: object last_commit_head: type: string last_commit_repo: type: string last_cwd: type: string last_failed_review_branch: type: string last_failed_review_repo: type: string last_seen_at: format: date-time type: string last_turn_id: type: string pending_reminders: additionalProperties: $ref: "#/components/schemas/PendingReminder" type: object remind_count: format: int64 type: integer repo_heads: additionalProperties: type: string type: object stop_counts_since_prompt: additionalProperties: format: int64 type: integer type: object triggered_at: format: date-time type: string worktree_lineage_keys: additionalProperties: type: string type: object required: - count type: object SessionUsagePayload: additionalProperties: false properties: agent: type: string cached_input_tokens: format: int64 type: integer cost: $ref: "#/components/schemas/CostEnvelope" cost_usd: format: double type: number has_cost: type: - boolean - "null" has_token_data: type: - boolean - "null" input_tokens: format: int64 type: integer peak_context_tokens: format: int64 type: integer project: type: string session_id: type: string total_output_tokens: format: int64 type: integer required: - session_id - has_token_data - has_cost type: object ShutdownOutputBody: additionalProperties: false properties: $schema: description: A URL to the JSON Schema for this object. examples: - https://example.com/ShutdownOutputBody.json format: uri readOnly: true type: string status: type: string required: - status type: object StructuredReviewDocument: additionalProperties: false description: The canonical JSON review document. The Go package go.kenn.io/roborev/pkg/structuredreview decodes and renders it. properties: findings: items: $ref: "#/components/schemas/StructuredReviewFinding" type: array schema_version: description: Version of the document format, separate from the export schema_version. format: int64 maximum: 2 minimum: 1 type: integer source_labels: description: Names of the input reviews that findings cite in sources, indexed by review number minus one. items: type: string type: array summary: type: string verdict: description: "The agent's own assessment: pass, fail, or unable_to_review. Omitted by version 1 documents." type: string required: - schema_version - summary - findings type: object StructuredReviewFinding: additionalProperties: false description: One finding in a structured review document. properties: fix: type: string location: description: Where the problem is, or null when the finding has no location. type: - string - "null" problem: type: string severity: description: One of critical, high, medium, or low. type: string sources: description: 1-based numbers of the input reviews that reported this finding. Present on synthesized documents. items: format: int64 type: integer type: array required: - severity - problem - fix - location type: object Summary: additionalProperties: false properties: $schema: description: A URL to the JSON Schema for this object. examples: - https://example.com/Summary.json format: uri readOnly: true type: string agents: items: $ref: "#/components/schemas/AgentStats" type: array branch: type: string cost: $ref: "#/components/schemas/CostAggregate" duration: $ref: "#/components/schemas/DurationStats" failures: $ref: "#/components/schemas/FailureStats" job_types: items: $ref: "#/components/schemas/JobTypeStats" type: array overview: $ref: "#/components/schemas/OverviewStats" repo_path: type: string repos: items: $ref: "#/components/schemas/RepoSummary" type: array since: format: date-time type: string verdicts: $ref: "#/components/schemas/VerdictStats" required: - since - overview - verdicts - agents - duration - job_types - failures - cost type: object SyncPendingCounts: additionalProperties: false properties: comments: format: int64 type: integer jobs: format: int64 type: integer reviews: format: int64 type: integer required: - jobs - reviews - comments type: object SyncStatusOutputBody: additionalProperties: false properties: $schema: description: A URL to the JSON Schema for this object. examples: - https://example.com/SyncStatusOutputBody.json format: uri readOnly: true type: string connected: type: boolean enabled: type: boolean interval: type: string machine_id: format: uuid type: string machine_name: type: string message: type: string pending_incomplete: type: boolean pending_limit: format: int64 type: integer pending_push: $ref: "#/components/schemas/SyncPendingCounts" warnings: items: type: string type: array required: - enabled - connected - message - interval - machine_name - warnings - pending_push - pending_limit - pending_incomplete type: object TokenResult: additionalProperties: false properties: agent: type: string job_id: format: int64 type: integer reason: type: string session_id: type: string status: type: string summary: type: string required: - session_id - status type: object TokenSummary: additionalProperties: false properties: $schema: description: A URL to the JSON Schema for this object. examples: - https://example.com/TokenSummary.json format: uri readOnly: true type: string failed: format: int64 type: integer results: items: $ref: "#/components/schemas/TokenResult" type: array skipped: format: int64 type: integer total: format: int64 type: integer updated: format: int64 type: integer required: - total - updated - skipped - failed - results type: object UpdateDrainRequestBody: additionalProperties: false properties: $schema: description: A URL to the JSON Schema for this object. examples: - https://example.com/UpdateDrainRequestBody.json format: uri readOnly: true type: string owner_id: minLength: 1 type: string policy: enum: - wait - interrupt - abort type: string required: - owner_id - policy type: object UpdateDrainStatus: additionalProperties: false properties: $schema: description: A URL to the JSON Schema for this object. examples: - https://example.com/UpdateDrainStatus.json format: uri readOnly: true type: string active_workers: format: int64 type: integer expires_at: format: date-time type: string lease_token: type: string policy: type: string recovering: type: boolean running_jobs: format: int64 type: integer targeted_running_jobs: format: int64 type: integer required: - policy - expires_at - running_jobs - targeted_running_jobs - active_workers - recovering type: object UpdateJobBranchOutputBody: additionalProperties: false properties: $schema: description: A URL to the JSON Schema for this object. examples: - https://example.com/UpdateJobBranchOutputBody.json format: uri readOnly: true type: string success: type: boolean updated: type: boolean required: - success - updated type: object UpdateJobBranchRequest: additionalProperties: false properties: $schema: description: A URL to the JSON Schema for this object. examples: - https://example.com/UpdateJobBranchRequest.json format: uri readOnly: true type: string branch: type: string job_id: format: int64 type: integer required: - job_id - branch type: object UpdateLeaseRequestBody: additionalProperties: false properties: $schema: description: A URL to the JSON Schema for this object. examples: - https://example.com/UpdateLeaseRequestBody.json format: uri readOnly: true type: string lease_token: minLength: 1 type: string required: - lease_token type: object VerdictStats: additionalProperties: false properties: addressed: format: int64 type: integer failed: format: int64 type: integer pass_rate: format: double type: number passed: format: int64 type: integer resolution_rate: format: double type: number total: format: int64 type: integer required: - total - passed - failed - addressed - pass_rate - resolution_rate type: object WebBootstrapInputBody: additionalProperties: false properties: $schema: description: A URL to the JSON Schema for this object. examples: - https://example.com/WebBootstrapInputBody.json format: uri readOnly: true type: string type: object WebLoginRequest: additionalProperties: false properties: $schema: description: A URL to the JSON Schema for this object. examples: - https://example.com/WebLoginRequest.json format: uri readOnly: true type: string token: minLength: 1 type: string required: - token type: object WebSessionCapabilities: additionalProperties: false properties: cancel_any_job: type: boolean cancel_review_job: type: boolean rerun_job: type: boolean required: - cancel_any_job - cancel_review_job - rerun_job type: object WebSessionCredentials: additionalProperties: false properties: $schema: description: A URL to the JSON Schema for this object. examples: - https://example.com/WebSessionCredentials.json format: uri readOnly: true type: string capabilities: $ref: "#/components/schemas/WebSessionCapabilities" csrf: type: string expires_at: format: date-time type: string session: type: string required: - session - csrf - expires_at - capabilities type: object WebSessionError: additionalProperties: false properties: $schema: description: A URL to the JSON Schema for this object. examples: - https://example.com/WebSessionError.json format: uri readOnly: true type: string error: type: string required: - error type: object WebSessionStatus: additionalProperties: false properties: $schema: description: A URL to the JSON Schema for this object. examples: - https://example.com/WebSessionStatus.json format: uri readOnly: true type: string authenticated: type: boolean authentication: enum: - local - token - proxy type: string capabilities: $ref: "#/components/schemas/WebSessionCapabilities" expires_at: format: date-time type: string required: - authentication - authenticated type: object info: title: roborev version: dev openapi: 3.1.0 paths: /api/activity: get: operationId: list-activity parameters: - description: Maximum entries to return explode: false in: query name: limit schema: description: Maximum entries to return type: string responses: "200": content: application/json: schema: $ref: "#/components/schemas/ActivityOutputBody" description: OK default: content: application/problem+json: schema: $ref: "#/components/schemas/ErrorModel" description: Error summary: List recent daemon activity tags: - daemon /api/agent-hook/event: post: operationId: record-agent-hook-event requestBody: content: application/json: schema: $ref: "#/components/schemas/Request" required: true responses: "200": content: application/json: schema: $ref: "#/components/schemas/AgentHookResponse" description: OK default: content: application/problem+json: schema: $ref: "#/components/schemas/ErrorModel" description: Error summary: Post API agent hook event /api/agent-hook/fix-done: post: operationId: complete-agent-hook-fix requestBody: content: application/json: schema: $ref: "#/components/schemas/AgentHookFixDoneRequest" required: true responses: "200": content: application/json: schema: $ref: "#/components/schemas/AgentHookFixDoneOutputBody" description: OK default: content: application/problem+json: schema: $ref: "#/components/schemas/ErrorModel" description: Error summary: Post API agent hook fix done /api/agent-hook/reset: post: operationId: reset-agent-hook-sessions requestBody: content: application/json: schema: $ref: "#/components/schemas/AgentHookResetRequest" required: true responses: "200": content: application/json: schema: $ref: "#/components/schemas/AgentHookResetOutputBody" description: OK default: content: application/problem+json: schema: $ref: "#/components/schemas/ErrorModel" description: Error summary: Post API agent hook reset /api/agent-hook/sessions: get: operationId: list-agent-hook-sessions responses: "200": content: application/json: schema: $ref: "#/components/schemas/AgentHookSessionsOutputBody" description: OK default: content: application/problem+json: schema: $ref: "#/components/schemas/ErrorModel" description: Error summary: Get API agent hook sessions /api/agent-hook/snooze: post: operationId: set-agent-hook-snooze requestBody: content: application/json: schema: $ref: "#/components/schemas/AgentHookSnoozeRequest" required: true responses: "200": content: application/json: schema: $ref: "#/components/schemas/AgentHookSnoozeOutputBody" description: OK default: content: application/problem+json: schema: $ref: "#/components/schemas/ErrorModel" description: Error summary: Set or clear an agent-hook workspace snooze tags: - agent-hook /api/branches: get: operationId: list-branches parameters: - description: Filter to branches in these repo paths explode: true in: query name: repo schema: description: Filter to branches in these repo paths items: type: string type: array responses: "200": content: application/json: schema: $ref: "#/components/schemas/ListBranchesOutputBody" description: OK default: content: application/problem+json: schema: $ref: "#/components/schemas/ErrorModel" description: Error summary: List branches with job counts tags: - repos /api/comment: post: operationId: add-comment requestBody: content: application/json: schema: $ref: "#/components/schemas/AddCommentRequest" required: true responses: "201": content: application/json: schema: $ref: "#/components/schemas/Response" description: Created "400": content: application/problem+json: schema: $ref: "#/components/schemas/ErrorModel" description: Bad Request "404": content: application/problem+json: schema: $ref: "#/components/schemas/ErrorModel" description: Not Found "409": content: application/problem+json: schema: $ref: "#/components/schemas/ErrorModel" description: Conflict "422": content: application/problem+json: schema: $ref: "#/components/schemas/ErrorModel" description: Unprocessable Entity "500": content: application/problem+json: schema: $ref: "#/components/schemas/ErrorModel" description: Internal Server Error summary: Add a comment to a job or commit tags: - comments /api/comments: get: operationId: list-comments parameters: - description: List comments by job ID explode: false in: query name: job_id schema: default: -1 description: List comments by job ID format: int64 type: integer - description: List comments by commit ID explode: false in: query name: commit_id schema: default: -1 description: List comments by commit ID format: int64 type: integer - description: List comments by commit SHA explode: false in: query name: sha schema: description: List comments by commit SHA type: string responses: "200": content: application/json: schema: $ref: "#/components/schemas/ListCommentsOutputBody" description: OK default: content: application/problem+json: schema: $ref: "#/components/schemas/ErrorModel" description: Error summary: List comments for a job or commit tags: - comments /api/cost: get: operationId: get-cost parameters: - description: Repo root paths (repeatable) explode: true in: query name: repo schema: description: Repo root paths (repeatable) items: type: string type: array - description: Filter by branch name explode: false in: query name: branch schema: description: Filter by branch name type: string - description: Only jobs with empty/unset branch explode: false in: query name: branch_empty schema: description: Only jobs with empty/unset branch enum: - "true" - "false" type: string - description: Time window (e.g. 7d); default all-time explode: false in: query name: since schema: description: Time window (e.g. 7d); default all-time type: string responses: "200": content: application/json: schema: $ref: "#/components/schemas/CostAggregate" description: OK default: content: application/problem+json: schema: $ref: "#/components/schemas/ErrorModel" description: Error summary: Get aggregate review cost tags: - daemon /api/doctor/agents: get: operationId: doctor-agents parameters: - description: Repository root whose .roborev.toml supplies ACP agents, overrides, and hooks explode: false in: query name: repo schema: description: Repository root whose .roborev.toml supplies ACP agents, overrides, and hooks type: string - description: Agent names to resolve exactly as the daemon would (repeatable) explode: true in: query name: agent schema: description: Agent names to resolve exactly as the daemon would (repeatable) items: type: string type: array responses: "200": content: application/json: schema: $ref: "#/components/schemas/DoctorAgentsOutputBody" description: OK default: content: application/problem+json: schema: $ref: "#/components/schemas/ErrorModel" description: Error summary: Report agent availability as the daemon sees it tags: - daemon /api/enqueue: post: operationId: enqueue-job requestBody: content: application/json: schema: $ref: "#/components/schemas/EnqueueRequest" required: true responses: "200": content: application/json: schema: oneOf: - $ref: "#/components/schemas/EnqueueCreatedResponse" - $ref: "#/components/schemas/PanelEnqueueResponse" - $ref: "#/components/schemas/EnqueueSkippedResponse" description: HTTP 200 response "201": content: application/json: schema: oneOf: - $ref: "#/components/schemas/EnqueueCreatedResponse" - $ref: "#/components/schemas/PanelEnqueueResponse" - $ref: "#/components/schemas/EnqueueSkippedResponse" description: HTTP 201 response "400": content: application/json: schema: $ref: "#/components/schemas/ErrorResponse" description: HTTP 400 response "413": content: application/json: schema: $ref: "#/components/schemas/ErrorResponse" description: HTTP 413 response "500": content: application/json: schema: $ref: "#/components/schemas/ErrorResponse" description: HTTP 500 response "503": content: application/json: schema: $ref: "#/components/schemas/ErrorResponse" description: HTTP 503 response summary: Enqueue a daemon job tags: - jobs /api/export/ci-costs: get: operationId: export-ci-costs parameters: - description: Output format; only json is supported explode: false in: query name: format schema: default: json description: Output format; only json is supported type: string - description: Inclusive finished_at lower bound (RFC3339 or YYYY-MM-DD) explode: false in: query name: since schema: description: Inclusive finished_at lower bound (RFC3339 or YYYY-MM-DD) type: string - description: Exclusive finished_at upper bound (RFC3339 or YYYY-MM-DD; date-only means through that UTC day) explode: false in: query name: until schema: description: Exclusive finished_at upper bound (RFC3339 or YYYY-MM-DD; date-only means through that UTC day) type: string - description: Maximum jobs in this page explode: false in: query name: limit schema: default: 500 description: Maximum jobs in this page format: int64 type: integer - description: Opaque next_cursor from a previous page. Resumes strictly after its (finished_at, job_id) position and retains the original time bounds; mutually exclusive with since and until. explode: false in: query name: cursor schema: description: Opaque next_cursor from a previous page. Resumes strictly after its (finished_at, job_id) position and retains the original time bounds; mutually exclusive with since and until. type: string - description: Export structurally identified pre-panel CI jobs. Cursors cannot be reused across modes. explode: false in: query name: legacy schema: description: Export structurally identified pre-panel CI jobs. Cursors cannot be reused across modes. type: boolean responses: "200": content: application/json: schema: $ref: "#/components/schemas/ExportCICostDocument" description: OK "409": content: application/problem+json: schema: $ref: "#/components/schemas/ErrorModel" description: Cursor database_id does not match this local database default: content: application/problem+json: schema: $ref: "#/components/schemas/ErrorModel" description: Error summary: Export job-level CI costs tags: - reviews /api/export/ci-metrics: get: operationId: export-ci-metrics parameters: - description: Output format; only json is supported explode: false in: query name: format schema: default: json description: Output format; only json is supported type: string - description: Inclusive posted_at lower bound (RFC3339 or YYYY-MM-DD) explode: false in: query name: since schema: description: Inclusive posted_at lower bound (RFC3339 or YYYY-MM-DD) type: string - description: Exclusive posted_at upper bound (RFC3339 or YYYY-MM-DD; date-only means through that UTC day) explode: false in: query name: until schema: description: Exclusive posted_at upper bound (RFC3339 or YYYY-MM-DD; date-only means through that UTC day) type: string - description: Maximum panels in this page explode: false in: query name: limit schema: default: 500 description: Maximum panels in this page format: int64 type: integer - description: Opaque next_cursor from a previous page. Resumes strictly after its (posted_at, panel_id) position; mutually exclusive with since. explode: false in: query name: cursor schema: description: Opaque next_cursor from a previous page. Resumes strictly after its (posted_at, panel_id) position; mutually exclusive with since. type: string - description: Export the frozen pre-panel ci_pr_reviews era instead of panel runs. Cursors are namespaced to this mode and cannot be reused across modes. explode: false in: query name: legacy schema: description: Export the frozen pre-panel ci_pr_reviews era instead of panel runs. Cursors are namespaced to this mode and cannot be reused across modes. type: boolean responses: "200": content: application/json: schema: $ref: "#/components/schemas/ExportCIMetricsDocument" description: OK "409": content: application/problem+json: schema: $ref: "#/components/schemas/ErrorModel" description: Cursor database_id does not match this local database default: content: application/problem+json: schema: $ref: "#/components/schemas/ErrorModel" description: Error summary: Export finalized CI panel metrics tags: - reviews /api/export/reviews: get: operationId: export-reviews parameters: - description: Output format; only json is supported explode: false in: query name: format schema: default: json description: Output format; only json is supported type: string - description: "Export profile: content or metadata" explode: false in: query name: profile schema: default: content description: "Export profile: content or metadata" type: string - description: Inclusive completed_at lower bound (RFC3339 or YYYY-MM-DD) explode: false in: query name: since schema: description: Inclusive completed_at lower bound (RFC3339 or YYYY-MM-DD) type: string - description: Exclusive completed_at upper bound (RFC3339 or YYYY-MM-DD; date-only means through that UTC day) explode: false in: query name: until schema: description: Exclusive completed_at upper bound (RFC3339 or YYYY-MM-DD; date-only means through that UTC day) type: string - description: Only include reviews marked closed explode: false in: query name: closed_only schema: description: Only include reviews marked closed type: boolean - description: Inclusive updated_at lower bound (RFC3339 or YYYY-MM-DD). A filter that combines with since, until, cursor, and the other filters; ordering stays on completed_at. explode: false in: query name: updated_since schema: description: Inclusive updated_at lower bound (RFC3339 or YYYY-MM-DD). A filter that combines with since, until, cursor, and the other filters; ordering stays on completed_at. type: string - description: Exact exported repo identifier filter explode: false in: query name: repo schema: description: Exact exported repo identifier filter type: string - description: Exact project display-name filter explode: false in: query name: project schema: description: Exact project display-name filter type: string - description: Maximum top-level reviews in this page explode: false in: query name: limit schema: default: 500 description: Maximum top-level reviews in this page format: int64 type: integer - description: Opaque next_cursor from a previous page. Resumes strictly after its (completed_at, review_id) position; mutually exclusive with since. explode: false in: query name: cursor schema: description: Opaque next_cursor from a previous page. Resumes strictly after its (completed_at, review_id) position; mutually exclusive with since. type: string responses: "200": content: application/json: schema: $ref: "#/components/schemas/ExportReviewsDocument" description: OK "409": content: application/problem+json: schema: $ref: "#/components/schemas/ErrorModel" description: Cursor database_id does not match this local database default: content: application/problem+json: schema: $ref: "#/components/schemas/ErrorModel" description: Error summary: Export completed reviews tags: - reviews /api/goal-review: post: operationId: goal-review requestBody: content: application/json: schema: $ref: "#/components/schemas/GoalGateRequest" responses: "200": content: application/json: schema: $ref: "#/components/schemas/GoalGateResponse" description: HTTP 200 response "400": content: application/json: schema: $ref: "#/components/schemas/GoalGateResponse" description: HTTP 400 response "503": content: application/json: schema: $ref: "#/components/schemas/GoalGateResponse" description: HTTP 503 response summary: Review Superpowers intent and a proposed Kata graph edit tags: - reviews /api/health: get: operationId: get-health responses: "200": content: application/json: schema: $ref: "#/components/schemas/HealthStatus" description: OK default: content: application/problem+json: schema: $ref: "#/components/schemas/ErrorModel" description: Error summary: Get daemon health tags: - daemon /api/job/applied: post: operationId: mark-job-applied requestBody: content: application/json: schema: $ref: "#/components/schemas/JobIDRequest" required: true responses: "200": content: application/json: schema: $ref: "#/components/schemas/JobStatusOutputBody" description: OK default: content: application/problem+json: schema: $ref: "#/components/schemas/ErrorModel" description: Error summary: Mark a fix job as applied tags: - jobs /api/job/cancel: post: operationId: cancel-job requestBody: content: application/json: schema: $ref: "#/components/schemas/CancelJobRequest" required: true responses: "200": content: application/json: schema: $ref: "#/components/schemas/CancelJobOutputBody" description: OK default: content: application/problem+json: schema: $ref: "#/components/schemas/ErrorModel" description: Error summary: Cancel a queued or running job tags: - jobs /api/job/fix: post: operationId: create-fix-job requestBody: content: application/json: schema: $ref: "#/components/schemas/FixJobRequest" required: true responses: "201": content: application/json: schema: $ref: "#/components/schemas/ReviewJob" description: HTTP 201 response "400": content: application/json: schema: $ref: "#/components/schemas/ErrorResponse" description: HTTP 400 response "404": content: application/json: schema: $ref: "#/components/schemas/ErrorResponse" description: HTTP 404 response "500": content: application/json: schema: $ref: "#/components/schemas/ErrorResponse" description: HTTP 500 response "503": content: application/json: schema: $ref: "#/components/schemas/ErrorResponse" description: HTTP 503 response summary: Create a background fix job tags: - jobs /api/job/log: get: operationId: get-job-log parameters: - description: Return the complete raw log, including orphaned logs explode: false in: query name: raw schema: description: Return the complete raw log, including orphaned logs type: boolean - description: Return the daemon log path without reading the file explode: false in: query name: path schema: description: Return the daemon log path without reading the file type: boolean - description: Job ID explode: false in: query name: job_id schema: description: Job ID type: string - description: Byte offset into the log file explode: false in: query name: offset schema: description: Byte offset into the log file type: string - description: Agent identity used for the previous log chunk in: header name: X-Job-Agent schema: description: Agent identity used for the previous log chunk type: string responses: "200": description: OK default: content: application/problem+json: schema: $ref: "#/components/schemas/ErrorModel" description: Error summary: Get raw job log bytes tags: - jobs /api/job/output: get: operationId: get-job-output parameters: - description: Job ID explode: false in: query name: job_id schema: description: Job ID type: string - description: Stream output as NDJSON when set to 1 explode: false in: query name: stream schema: description: Stream output as NDJSON when set to 1 type: string responses: "200": description: OK default: content: application/problem+json: schema: $ref: "#/components/schemas/ErrorModel" description: Error summary: Get or stream in-memory job output tags: - jobs /api/job/patch: get: operationId: get-job-patch parameters: - description: Job ID explode: false in: query name: job_id schema: description: Job ID type: string responses: "200": description: OK default: content: application/problem+json: schema: $ref: "#/components/schemas/ErrorModel" description: Error summary: Get a stored fix patch tags: - jobs /api/job/rebased: post: operationId: mark-job-rebased requestBody: content: application/json: schema: $ref: "#/components/schemas/JobIDRequest" required: true responses: "200": content: application/json: schema: $ref: "#/components/schemas/JobStatusOutputBody" description: OK default: content: application/problem+json: schema: $ref: "#/components/schemas/ErrorModel" description: Error summary: Mark a fix job as rebased tags: - jobs /api/job/rerun: post: operationId: rerun-job requestBody: content: application/json: schema: $ref: "#/components/schemas/RerunJobRequest" required: true responses: "200": content: application/json: schema: $ref: "#/components/schemas/RerunJobOutputBody" description: OK default: content: application/problem+json: schema: $ref: "#/components/schemas/ErrorModel" description: Error summary: Re-enqueue a completed or failed job tags: - jobs /api/job/update-branch: post: operationId: update-job-branch requestBody: content: application/json: schema: $ref: "#/components/schemas/UpdateJobBranchRequest" required: true responses: "200": content: application/json: schema: $ref: "#/components/schemas/UpdateJobBranchOutputBody" description: OK default: content: application/problem+json: schema: $ref: "#/components/schemas/ErrorModel" description: Error summary: Update a job branch tags: - jobs /api/jobs: get: operationId: list-jobs parameters: - description: Return a single job by ID explode: false in: query name: id schema: default: -1 description: Return a single job by ID format: int64 type: integer - description: Filter by job status explode: false in: query name: status schema: description: Filter by job status type: string - description: Filter by repo root path (repeatable) explode: true in: query name: repo schema: description: Filter by repo root path (repeatable) items: type: string type: array - description: Filter by git ref explode: false in: query name: git_ref schema: description: Filter by git ref type: string - description: Filter by recorded analysis type explode: false in: query name: analysis_type schema: description: Filter by recorded analysis type type: string - description: Filter by recorded analysis file (repeatable) explode: true in: query name: analysis_file schema: description: Filter by recorded analysis file (repeatable) items: type: string type: array - description: Filter by branch name explode: false in: query name: branch schema: description: Filter by branch name type: string - description: Only jobs with empty or unset branch explode: false in: query name: branch_empty schema: description: Only jobs with empty or unset branch enum: - "true" - "false" - "" type: string - description: Include jobs with no branch when filtering by branch explode: false in: query name: branch_include_empty schema: description: Include jobs with no branch when filtering by branch enum: - "true" - "false" - "" type: string - description: Filter by review closed state explode: false in: query name: closed schema: description: Filter by review closed state enum: - "true" - "false" - "" type: string - description: Filter by job type explode: false in: query name: job_type schema: description: Filter by job type type: string - description: Exclude jobs of this type explode: false in: query name: exclude_job_type schema: description: Exclude jobs of this type type: string - description: Hide auto-design-router rows (job_type=classify and status=skipped) explode: false in: query name: hide_classify_jobs schema: description: Hide auto-design-router rows (job_type=classify and status=skipped) enum: - "true" - "false" - "" type: string - description: Return all jobs (members + synthesis) of one panel run explode: false in: query name: panel_run schema: description: Return all jobs (members + synthesis) of one panel run type: string - description: Include individual panel member jobs alongside panel synthesis jobs explode: false in: query name: include_panel_members schema: description: Include individual panel member jobs alongside panel synthesis jobs enum: - "true" - "false" - "" type: string - description: Omit prompt and diff content from returned jobs (metadata-only listing; queued/running jobs keep their prompt) explode: false in: query name: omit_prompt schema: description: Omit prompt and diff content from returned jobs (metadata-only listing; queued/running jobs keep their prompt) enum: - "true" - "false" - "" type: string - description: Include nullable finding severity counts for eligible completed reviews explode: false in: query name: include_findings schema: description: Include nullable finding severity counts for eligible completed reviews enum: - "true" - "false" - "" type: string - description: Filter repos by path prefix explode: false in: query name: repo_prefix schema: description: Filter repos by path prefix type: string - description: Max results (default 50, 0=unlimited, max 10000) explode: false in: query name: limit schema: default: -999999 description: Max results (default 50, 0=unlimited, max 10000) format: int64 type: integer - description: Skip N results (requires limit>0) explode: false in: query name: offset schema: default: -1 description: Skip N results (requires limit>0) format: int64 type: integer - description: Deprecated numeric job cursor retained for compatibility explode: false in: query name: before schema: default: -1 description: Deprecated numeric job cursor retained for compatibility format: int64 type: integer - description: Opaque next_cursor from a previous page; resumes after its immutable enqueue-time position explode: false in: query name: cursor schema: description: Opaque next_cursor from a previous page; resumes after its immutable enqueue-time position type: string responses: "200": content: application/json: schema: $ref: "#/components/schemas/ListJobsOutputBody" description: OK default: content: application/problem+json: schema: $ref: "#/components/schemas/ErrorModel" description: Error summary: List review jobs tags: - jobs /api/jobs/batch: post: operationId: batch-jobs requestBody: content: application/json: schema: $ref: "#/components/schemas/BatchJobsRequest" required: true responses: "200": content: application/json: schema: $ref: "#/components/schemas/BatchJobsOutputBody" description: OK default: content: application/problem+json: schema: $ref: "#/components/schemas/ErrorModel" description: Error summary: Fetch jobs with reviews by ID tags: - jobs /api/logs/clean: post: operationId: clean-job-logs requestBody: content: application/json: schema: $ref: "#/components/schemas/CleanJobLogsInputBody" required: true responses: "200": content: application/json: schema: $ref: "#/components/schemas/CleanJobLogsOutputBody" description: OK default: content: application/problem+json: schema: $ref: "#/components/schemas/ErrorModel" description: Error summary: Remove old daemon job logs tags: - maintenance /api/maintenance/legacy/convert: post: operationId: convert-legacy-reviews requestBody: content: application/json: schema: $ref: "#/components/schemas/ConvertLegacyReviewsInputBody" required: true responses: "200": content: application/json: schema: $ref: "#/components/schemas/LegacyConversionReport" description: OK default: content: application/problem+json: schema: $ref: "#/components/schemas/ErrorModel" description: Error summary: Convert recognized archived review formats tags: - maintenance /api/maintenance/legacy/export: post: operationId: export-legacy-reviews requestBody: content: application/json: schema: $ref: "#/components/schemas/LegacyMaintenanceTarget" required: true responses: "200": content: application/json: schema: $ref: "#/components/schemas/ExportLegacyReviewsOutputBody" description: OK default: content: application/problem+json: schema: $ref: "#/components/schemas/ErrorModel" description: Error summary: Export unresolved archived reviews tags: - maintenance /api/maintenance/legacy/import: post: operationId: import-legacy-review requestBody: content: application/json: schema: $ref: "#/components/schemas/ImportLegacyReviewInputBody" required: true responses: "204": description: No Content default: content: application/problem+json: schema: $ref: "#/components/schemas/ErrorModel" description: Error summary: Restore an archived review from a structured document tags: - maintenance /api/maintenance/tokens/backfill: post: operationId: scan-token-usage requestBody: content: application/json: schema: $ref: "#/components/schemas/ScanTokenUsageInputBody" required: true responses: "200": content: application/json: schema: $ref: "#/components/schemas/ScanTokenUsageReport" description: OK default: content: application/problem+json: schema: $ref: "#/components/schemas/ErrorModel" description: Error summary: Recover token usage from daemon job logs and AgentsView tags: - maintenance /api/maintenance/verdicts/backfill: post: operationId: backfill-verdicts responses: "200": content: application/json: schema: $ref: "#/components/schemas/BackfillVerdictsOutputBody" description: OK default: content: application/problem+json: schema: $ref: "#/components/schemas/ErrorModel" description: Error summary: Backfill legacy review verdicts tags: - maintenance /api/ping: get: operationId: ping responses: "200": content: application/json: schema: $ref: "#/components/schemas/PingInfo" description: OK default: content: application/problem+json: schema: $ref: "#/components/schemas/ErrorModel" description: Error summary: Get daemon liveness identity tags: - daemon /api/queue/pause: post: operationId: pause-queue responses: "200": content: application/json: schema: $ref: "#/components/schemas/QueuePauseOutputBody" description: OK default: content: application/problem+json: schema: $ref: "#/components/schemas/ErrorModel" description: Error summary: Pause queue processing tags: - daemon /api/queue/unpause: post: operationId: unpause-queue responses: "200": content: application/json: schema: $ref: "#/components/schemas/QueuePauseOutputBody" description: OK default: content: application/problem+json: schema: $ref: "#/components/schemas/ErrorModel" description: Error summary: Resume queue processing tags: - daemon /api/rebuttal: post: operationId: rebuttal requestBody: content: application/json: schema: $ref: "#/components/schemas/RebuttalRequest" required: true responses: "201": content: application/json: schema: $ref: "#/components/schemas/ReviewJob" description: Created "400": content: application/problem+json: schema: $ref: "#/components/schemas/ErrorModel" description: Bad Request "404": content: application/problem+json: schema: $ref: "#/components/schemas/ErrorModel" description: Not Found "409": content: application/problem+json: schema: $ref: "#/components/schemas/ErrorModel" description: Conflict "422": content: application/problem+json: schema: $ref: "#/components/schemas/ErrorModel" description: Unprocessable Entity "500": content: application/problem+json: schema: $ref: "#/components/schemas/ErrorModel" description: Internal Server Error summary: Re-evaluate one finding in the original agent session /api/releases: get: operationId: list-releases responses: "200": content: application/json: schema: $ref: "#/components/schemas/ReleaseNotesResponse" description: OK default: content: application/problem+json: schema: $ref: "#/components/schemas/ErrorModel" description: Error summary: List recent Roborev release notes tags: - daemon /api/remap: post: operationId: remap-jobs requestBody: content: application/json: schema: $ref: "#/components/schemas/RemapRequest" required: true responses: "200": content: application/json: schema: $ref: "#/components/schemas/RemapResult" description: OK default: content: application/problem+json: schema: $ref: "#/components/schemas/ErrorModel" description: Error summary: Remap jobs after git history rewrite tags: - jobs /api/repos: get: operationId: list-repos parameters: - description: Filter to repos with jobs on this branch explode: false in: query name: branch schema: description: Filter to repos with jobs on this branch type: string - description: Filter repos by path prefix explode: false in: query name: prefix schema: description: Filter repos by path prefix type: string responses: "200": content: application/json: schema: $ref: "#/components/schemas/ListReposOutputBody" description: OK default: content: application/problem+json: schema: $ref: "#/components/schemas/ErrorModel" description: Error summary: List repos with job counts tags: - repos /api/repos/delete: post: operationId: delete-repo requestBody: content: application/json: schema: $ref: "#/components/schemas/DeleteRepoInputBody" required: true responses: "204": description: No Content "404": content: application/problem+json: schema: $ref: "#/components/schemas/ErrorModel" description: Not Found "409": content: application/problem+json: schema: $ref: "#/components/schemas/ErrorModel" description: Conflict "422": content: application/problem+json: schema: $ref: "#/components/schemas/ErrorModel" description: Unprocessable Entity "500": content: application/problem+json: schema: $ref: "#/components/schemas/ErrorModel" description: Internal Server Error summary: Delete a repository and optionally its reviews tags: - repos /api/repos/detail: get: operationId: get-repo parameters: - description: Repository path or display name explode: false in: query name: identifier required: true schema: description: Repository path or display name type: string - description: Identifier was resolved to a filesystem path by the client explode: false in: query name: by_path schema: description: Identifier was resolved to a filesystem path by the client type: boolean responses: "200": content: application/json: schema: $ref: "#/components/schemas/RepoStats" description: OK "404": content: application/problem+json: schema: $ref: "#/components/schemas/ErrorModel" description: Not Found "409": content: application/problem+json: schema: $ref: "#/components/schemas/ErrorModel" description: Conflict "422": content: application/problem+json: schema: $ref: "#/components/schemas/ErrorModel" description: Unprocessable Entity "500": content: application/problem+json: schema: $ref: "#/components/schemas/ErrorModel" description: Internal Server Error summary: Get repository details and statistics tags: - repos /api/repos/merge: post: operationId: merge-repos requestBody: content: application/json: schema: $ref: "#/components/schemas/MergeReposInputBody" required: true responses: "200": content: application/json: schema: $ref: "#/components/schemas/MergeReposOutputBody" description: OK default: content: application/problem+json: schema: $ref: "#/components/schemas/ErrorModel" description: Error summary: Move reviews to another repository and delete the source tags: - repos /api/repos/move: post: operationId: move-repo requestBody: content: application/json: schema: $ref: "#/components/schemas/MoveRepoInputBody" required: true responses: "204": description: No Content "404": content: application/problem+json: schema: $ref: "#/components/schemas/ErrorModel" description: Not Found "409": content: application/problem+json: schema: $ref: "#/components/schemas/ErrorModel" description: Conflict "422": content: application/problem+json: schema: $ref: "#/components/schemas/ErrorModel" description: Unprocessable Entity "500": content: application/problem+json: schema: $ref: "#/components/schemas/ErrorModel" description: Internal Server Error summary: Update a repository's path and identity tags: - repos /api/repos/register: post: operationId: register-repo requestBody: content: application/json: schema: $ref: "#/components/schemas/RegisterRepoRequest" required: true responses: "200": content: application/json: schema: $ref: "#/components/schemas/Repo" description: OK default: content: application/problem+json: schema: $ref: "#/components/schemas/ErrorModel" description: Error summary: Register a repository tags: - repos /api/repos/rename: post: operationId: rename-repo requestBody: content: application/json: schema: $ref: "#/components/schemas/RenameRepoInputBody" required: true responses: "200": content: application/json: schema: $ref: "#/components/schemas/RenameRepoOutputBody" description: OK "404": content: application/problem+json: schema: $ref: "#/components/schemas/ErrorModel" description: Not Found "409": content: application/problem+json: schema: $ref: "#/components/schemas/ErrorModel" description: Conflict "422": content: application/problem+json: schema: $ref: "#/components/schemas/ErrorModel" description: Unprocessable Entity "500": content: application/problem+json: schema: $ref: "#/components/schemas/ErrorModel" description: Internal Server Error summary: Rename a repository's display name tags: - repos /api/repos/resolve: get: operationId: resolve-repo parameters: - description: Absolute path or path inside a repository explode: false in: query name: path schema: description: Absolute path or path inside a repository type: string - description: Current branch for agent-hook snooze lookup explode: false in: query name: branch schema: description: Current branch for agent-hook snooze lookup type: string responses: "200": content: application/json: schema: $ref: "#/components/schemas/ResolveRepoOutputBody" description: OK default: content: application/problem+json: schema: $ref: "#/components/schemas/ErrorModel" description: Error summary: Resolve whether a path belongs to a tracked repo tags: - repos /api/review: get: operationId: get-review parameters: - description: Look up review by job ID explode: false in: query name: job_id schema: default: -1 description: Look up review by job ID format: int64 type: integer - description: Look up review by commit SHA explode: false in: query name: sha schema: description: Look up review by commit SHA type: string responses: "200": content: application/json: schema: $ref: "#/components/schemas/Review" description: OK default: content: application/problem+json: schema: $ref: "#/components/schemas/ErrorModel" description: Error summary: Get a review by job ID or SHA tags: - reviews /api/review/close: post: operationId: close-review requestBody: content: application/json: schema: $ref: "#/components/schemas/CloseReviewRequest" required: true responses: "200": content: application/json: schema: $ref: "#/components/schemas/CloseReviewOutputBody" description: OK "400": content: application/problem+json: schema: $ref: "#/components/schemas/ErrorModel" description: Bad Request "404": content: application/problem+json: schema: $ref: "#/components/schemas/ErrorModel" description: Not Found "409": content: application/problem+json: schema: $ref: "#/components/schemas/ErrorModel" description: Conflict "422": content: application/problem+json: schema: $ref: "#/components/schemas/ErrorModel" description: Unprocessable Entity "500": content: application/problem+json: schema: $ref: "#/components/schemas/ErrorModel" description: Internal Server Error summary: Close or reopen a review tags: - reviews /api/review/migrate: post: operationId: migrate-review requestBody: content: application/json: schema: $ref: "#/components/schemas/MigrateReviewInputBody" required: true responses: "200": content: application/json: schema: $ref: "#/components/schemas/MigrateReviewOutputBody" description: OK default: content: application/problem+json: schema: $ref: "#/components/schemas/ErrorModel" description: Error summary: Replace a legacy review with a validated structured document tags: - reviews /api/search: get: operationId: searchReviews parameters: - description: Required review search query (maximum 2,000 UTF-8 runes) explode: false in: query name: q required: true schema: description: Required review search query (maximum 2,000 UTF-8 runes) maxLength: 2000 minLength: 1 type: string - description: "Search mode: auto, lexical, hybrid, or semantic" explode: false in: query name: mode schema: default: auto description: "Search mode: auto, lexical, hybrid, or semantic" enum: - auto - lexical - hybrid - semantic type: string - description: Repository path, name, or registered identity explode: false in: query name: repo schema: description: Repository path, name, or registered identity type: string - description: Exact branch name explode: false in: query name: branch schema: description: Exact branch name type: string - description: Go duration or RFC3339 lower bound explode: false in: query name: since schema: description: Go duration or RFC3339 lower bound type: string - description: "Review verdict: pass or fail" explode: false in: query name: verdict schema: description: "Review verdict: pass or fail" enum: - pass - fail type: string - description: "Review state: all, open, or closed" explode: false in: query name: state schema: default: all description: "Review state: all, open, or closed" enum: - all - open - closed type: string - description: Maximum grouped results (default 20, range 1..100) explode: false in: query name: limit schema: default: 20 description: Maximum grouped results (default 20, range 1..100) maximum: 100 minimum: 1 type: integer responses: "200": content: application/json: schema: $ref: "#/components/schemas/SearchResponse" description: OK "400": content: application/problem+json: schema: $ref: "#/components/schemas/ErrorModel" description: Bad Request "409": content: application/problem+json: schema: $ref: "#/components/schemas/ErrorModel" description: Conflict "422": content: application/problem+json: schema: $ref: "#/components/schemas/ErrorModel" description: Unprocessable Entity "500": content: application/problem+json: schema: $ref: "#/components/schemas/ErrorModel" description: Internal Server Error "503": content: application/problem+json: schema: $ref: "#/components/schemas/ErrorModel" description: Service Unavailable summary: Search completed review history tags: - Reviews /api/shutdown: post: operationId: shutdown responses: "200": content: application/json: schema: $ref: "#/components/schemas/ShutdownOutputBody" description: OK default: content: application/problem+json: schema: $ref: "#/components/schemas/ErrorModel" description: Error summary: Gracefully shut down the daemon tags: - daemon /api/status: get: operationId: get-status responses: "200": content: application/json: schema: $ref: "#/components/schemas/DaemonStatus" description: OK default: content: application/problem+json: schema: $ref: "#/components/schemas/ErrorModel" description: Error summary: Get daemon status tags: - daemon /api/stream/events: get: operationId: stream-events parameters: - description: Filter events by repo root path explode: false in: query name: repo schema: description: Filter events by repo root path type: string responses: "200": description: OK default: content: application/problem+json: schema: $ref: "#/components/schemas/ErrorModel" description: Error summary: Stream daemon events tags: - daemon /api/summary: get: operationId: get-summary parameters: - description: "Time window (e.g. 7d, 24h). Default: 7d" explode: false in: query name: since schema: description: "Time window (e.g. 7d, 24h). Default: 7d" type: string - description: Filter by repo root path explode: false in: query name: repo schema: description: Filter by repo root path type: string - description: Filter by branch name explode: false in: query name: branch schema: description: Filter by branch name type: string - description: Include per-repo breakdown explode: false in: query name: all schema: description: Include per-repo breakdown enum: - "true" - "false" type: string responses: "200": content: application/json: schema: $ref: "#/components/schemas/Summary" description: OK default: content: application/problem+json: schema: $ref: "#/components/schemas/ErrorModel" description: Error summary: Get review summary statistics tags: - daemon /api/sync/now: post: operationId: sync-now parameters: - description: Stream sync progress as NDJSON when set to 1 explode: false in: query name: stream schema: description: Stream sync progress as NDJSON when set to 1 type: string responses: "200": description: OK default: content: application/problem+json: schema: $ref: "#/components/schemas/ErrorModel" description: Error summary: Run an immediate sync tags: - sync /api/sync/status: get: operationId: get-sync-status responses: "200": content: application/json: schema: $ref: "#/components/schemas/SyncStatusOutputBody" description: OK default: content: application/problem+json: schema: $ref: "#/components/schemas/ErrorModel" description: Error summary: Get sync worker status tags: - sync /api/tokens/backfill: post: operationId: backfill-tokens requestBody: content: application/json: schema: $ref: "#/components/schemas/BackfillTokensRequest" required: true responses: "200": content: application/json: schema: $ref: "#/components/schemas/TokenSummary" description: HTTP 200 response "400": content: application/json: schema: $ref: "#/components/schemas/ErrorResponse" description: HTTP 400 response "500": content: application/json: schema: $ref: "#/components/schemas/ErrorResponse" description: HTTP 500 response summary: Backfill token usage from AgentsView payloads tags: - jobs /api/ui/analytics: get: operationId: get-web-analytics parameters: - description: Inclusive RFC 3339 finished-at bound; omit with an explicit until for all time explode: false in: query name: since schema: description: Inclusive RFC 3339 finished-at bound; omit with an explicit until for all time type: string - description: Exclusive RFC 3339 finished-at bound explode: false in: query name: until schema: description: Exclusive RFC 3339 finished-at bound type: string - description: Exact displayed project names (repeatable) explode: true in: query name: project schema: description: Exact displayed project names (repeatable) items: type: string type: array - description: Exact stored source values (repeatable) explode: true in: query name: source schema: description: Exact stored source values (repeatable) items: type: string type: array - description: Exact agent filter for attempt metrics explode: false in: query name: agent schema: description: Exact agent filter for attempt metrics type: string - description: Exact model filter for attempt metrics explode: false in: query name: model schema: description: Exact model filter for attempt metrics type: string - description: "UTC time bucket: hour, day, week, or month" explode: false in: query name: bucket schema: description: "UTC time bucket: hour, day, week, or month" type: string - description: Add one time series per agent, model, project, or source explode: false in: query name: split schema: description: Add one time series per agent, model, project, or source enum: - agent - model - project - source type: string responses: "200": content: application/json: schema: $ref: "#/components/schemas/AnalyticsSnapshot" description: OK default: content: application/problem+json: schema: $ref: "#/components/schemas/ErrorModel" description: Error summary: Get a coherent SQLite analytics snapshot tags: - web-ui /api/ui/review-projection: get: operationId: get-review-projection parameters: - description: Daemon-local review job ID explode: false in: query name: job_id schema: default: -1 description: Daemon-local review job ID format: int64 type: integer - description: Exact repository path for contextual lookup explode: false in: query name: repo schema: description: Exact repository path for contextual lookup type: string - description: Optional exact branch for contextual lookup explode: false in: query name: branch schema: description: Optional exact branch for contextual lookup type: string responses: "200": content: application/json: schema: $ref: "#/components/schemas/ReviewProjection" description: OK default: content: application/problem+json: schema: $ref: "#/components/schemas/ErrorModel" description: Error summary: Get a versioned read-only review projection tags: - web-ui /api/ui/session: delete: operationId: logout-web-session responses: "204": description: No Content "400": content: application/json: schema: $ref: "#/components/schemas/WebSessionError" description: Bad Request "401": content: application/json: schema: $ref: "#/components/schemas/WebSessionError" description: Unauthorized "403": content: application/json: schema: $ref: "#/components/schemas/WebSessionError" description: Forbidden summary: Invalidate a browser session tags: - web-session get: operationId: get-web-session-status responses: "200": content: application/json: schema: $ref: "#/components/schemas/WebSessionStatus" description: OK "400": content: application/json: schema: $ref: "#/components/schemas/WebSessionError" description: Bad Request summary: Get browser authentication status tags: - web-session /api/ui/session/bootstrap: post: operationId: bootstrap-web-session requestBody: content: application/json: schema: $ref: "#/components/schemas/WebBootstrapInputBody" required: true responses: "200": content: application/json: schema: $ref: "#/components/schemas/WebSessionCredentials" description: OK "400": content: application/json: schema: $ref: "#/components/schemas/WebSessionError" description: Bad Request "401": content: application/json: schema: $ref: "#/components/schemas/WebSessionError" description: Unauthorized "403": content: application/json: schema: $ref: "#/components/schemas/WebSessionError" description: Forbidden "415": content: application/json: schema: $ref: "#/components/schemas/WebSessionError" description: Unsupported Media Type summary: Mint tab credentials from an ambient browser session tags: - web-session /api/ui/session/login: post: operationId: login-web-session requestBody: content: application/json: schema: $ref: "#/components/schemas/WebLoginRequest" required: true responses: "200": content: application/json: schema: $ref: "#/components/schemas/WebSessionCredentials" description: OK "400": content: application/json: schema: $ref: "#/components/schemas/WebSessionError" description: Bad Request "401": content: application/json: schema: $ref: "#/components/schemas/WebSessionError" description: Unauthorized "403": content: application/json: schema: $ref: "#/components/schemas/WebSessionError" description: Forbidden "415": content: application/json: schema: $ref: "#/components/schemas/WebSessionError" description: Unsupported Media Type "429": content: application/json: schema: $ref: "#/components/schemas/WebSessionError" description: Too Many Requests summary: Exchange a daemon token for a browser session tags: - web-session /api/update/prepare: post: operationId: prepare-update requestBody: content: application/json: schema: $ref: "#/components/schemas/UpdateDrainRequestBody" required: true responses: "200": content: application/json: schema: $ref: "#/components/schemas/UpdateDrainStatus" description: OK "409": content: application/problem+json: schema: $ref: "#/components/schemas/ErrorModel" description: Update drain conflict summary: Prepare a leased update drain tags: - daemon /api/update/release: post: operationId: release-update requestBody: content: application/json: schema: $ref: "#/components/schemas/UpdateLeaseRequestBody" required: true responses: "200": content: application/json: schema: $ref: "#/components/schemas/ReleaseUpdateOutputBody" description: OK "409": content: application/problem+json: schema: $ref: "#/components/schemas/ErrorModel" description: Update drain conflict summary: Release an update drain lease tags: - daemon /api/update/renew: post: operationId: renew-update requestBody: content: application/json: schema: $ref: "#/components/schemas/UpdateLeaseRequestBody" required: true responses: "200": content: application/json: schema: $ref: "#/components/schemas/UpdateDrainStatus" description: OK "409": content: application/problem+json: schema: $ref: "#/components/schemas/ErrorModel" description: Update drain conflict summary: Renew an update drain lease tags: - daemon