export type RunStatus = "success" | "failed" | "unstable"; export interface ModifierSummary { modifier_position: number; modifier_id: string; modifier_version: string; parameters: unknown; applicability: string; change_count: number; stage_available: boolean; } export interface DocumentSummary { document_id: string; source_label: string; status: RunStatus; current_kind: "success_output" | "partial_output"; input_sha256: string; current_sha256: string; modifier_count: number; completed_stage_count: number; change_count: number; error_count: number; residual_proposal_count: number; } export interface CollectionSummaryResponse { schema_version: 1; collection: { label: string; status: RunStatus; }; documents: DocumentSummary[]; summary: { document_count: number; success_count: number; failed_count: number; unstable_count: number; change_count: number; }; } export interface ChangeDetail { modifier_position: number; modifier_id: string; modifier_version: string; proposal_index: number; edit_index: number; reason: string; location: { line: number; column: number; }; span: { start: number; end: number; }; editor_range: { start: number; end: number; }; before: string; after: string; before_sha256: string; after_sha256: string; } export interface ErrorDetail { code: string; stage: string; modifier_position: number; modifier_id: string; modifier_version: string; diagnostic_type: string; message: string; } export interface ResidualProposalDetail { modifier_position: number; modifier_id: string; modifier_version: string; proposal_index: number; snapshot_sha256: string; reason: string; edits: unknown[]; } export interface DocumentComparisonResponse { schema_version: 1; document: DocumentSummary; modifiers: ModifierSummary[]; input_markdown: string; current_markdown: string | null; changes: ChangeDetail[]; errors: ErrorDetail[]; residual_proposals: ResidualProposalDetail[]; } export interface ModifierStageResponse { schema_version: 1; document_id: string; modifier: ModifierSummary; before_sha256: string; after_sha256: string; before_markdown: string; after_markdown: string; changes: ChangeDetail[]; } export interface ApiErrorResponse { error: { code: string; message: string; }; }