import type { DatabaseAdapter } from '../db-manager.js'; import { type ImmediateTransactionAdapter } from './sqlite-transaction.js'; export type CaseLinkType = 'related' | 'supersedes-case' | 'subcase-of' | 'blocked-by' | 'duplicate-of'; export type CaseLinkSourceKind = 'manual' | 'wiki_compiler' | 'hitl_correction' | 'system_backfill'; export interface CaseLinkRecord { link_id: string; case_id_from: string; case_id_to: string; link_type: CaseLinkType; created_at: string; created_by: string; confidence: number | null; reason_json: string | null; source_kind: CaseLinkSourceKind; source_ref: string | null; source_ref_fingerprint: Buffer | null; source_ref_fingerprint_hex: string | null; revoked_at: string | null; revoked_by: string | null; revoke_reason: string | null; } export interface CaseLinkCreateInput { link_id?: string; case_id_from: string; case_id_to: string; link_type: CaseLinkType; created_by: string; confidence?: number | null; reason_json?: string | Record | null; source_kind?: CaseLinkSourceKind; source_ref?: string | null; source_ref_fingerprint?: Buffer | Uint8Array | null; unsuppress_wiki_tombstone?: boolean; expected_current_value_json?: string | null; reconfirm_token?: string | null; session_id?: string | null; now?: string; } export interface CaseLinkRevokeInput { link_id: string; revoked_by: string; revoke_reason: string; expected_current_value_json?: string | null; reconfirm_token?: string | null; session_id?: string | null; now?: string; } export interface CaseLinkRequiresReconfirmResult { kind: 'requires_reconfirm'; code: 'case.correction_requires_reconfirm'; case_id: string; target_kind: 'case_link'; target_ref_json: string; current_value_json: string; old_value_json: string | null; proposed_new_value_json: string; reconfirm_token: string; reconfirm_token_expires_at: string; message: string; } export type CaseLinkCreateResult = { kind: 'created'; link_id: string; source_ref_fingerprint_hex: string; } | CaseLinkRequiresReconfirmResult | { kind: 'rejected'; code: 'case.precompile_gap' | 'case.terminal_status' | 'case.self_link' | 'case.wiki_tombstone_conflict' | 'case.correction_active_conflict' | 'case.reconfirm_token_replayed'; message: string; case_id?: string; }; export type CaseLinkRevokeResult = { kind: 'revoked'; link_id: string; } | CaseLinkRequiresReconfirmResult | { kind: 'rejected'; code: 'case.case_link_not_found' | 'case.wiki_tombstone_fingerprint_missing' | 'case.reconfirm_token_replayed'; message: string; link_id?: string; }; export interface ListActiveCaseLinksResult { terminal_case_id: string; resolved_via_case_id: string | null; chain: string[]; links: CaseLinkRecord[]; } export interface BackfillStructuralLinksResult { duplicate_of_inserted: number; subcase_of_inserted: number; } type CaseLinkAdapter = Pick & Partial>; export declare function sha256TombstoneFingerprint(input: { source_case_id: string; target_case_id: string; link_type: CaseLinkType; }): Buffer; export declare function createCaseLink(adapter: DatabaseAdapter, input: CaseLinkCreateInput): CaseLinkCreateResult; export declare function revokeCaseLink(adapter: DatabaseAdapter, input: CaseLinkRevokeInput): CaseLinkRevokeResult; export declare function listActiveCaseLinks(adapter: DatabaseAdapter, caseId: string): ListActiveCaseLinksResult; export declare function isWikiTombstoneActive(adapter: DatabaseAdapter | CaseLinkAdapter, input: { source_case_id: string; target_case_id: string; link_type: CaseLinkType; }): boolean; export declare function unsuppressWikiTombstone(adapter: DatabaseAdapter, input: { source_case_id: string; target_case_id: string; link_type: CaseLinkType; unsuppressed_by: string; now?: string; }): { kind: 'unsuppressed'; unsuppressed_count: number; }; export declare function backfillStructuralLinks(adapter: DatabaseAdapter): BackfillStructuralLinksResult; export {}; //# sourceMappingURL=case-links.d.ts.map