import type { LineNo } from "./utils/lineNoFormat";
import type { DirNode, FileNode, InvokeItem } from "./ParseContext";
type InvokeChainChangeKind = "added" | "removed" | "caller_changed" | "callee_changed" | "call_site_moved";
type CallChainHopDiff = {
    name: string;
    oldHash?: string;
    oldOriginContent?: string;
    newHash?: string;
    newOriginContent?: string;
};
type CallChainDiffItem = {
    chainLabel: string;
    changeKind: InvokeChainChangeKind;
    firstHopCallSiteLineNo: LineNo;
    isCrossFile: boolean;
    firstDifferingHopIndex: number;
    firstDifferingHopRole: "caller" | "callee" | "none";
    hops: CallChainHopDiff[];
};
type FunctionCallChainSlot = {
    changedFunctionName: string;
    oldFunctionHash: string;
    newFunctionHash: string;
    callChains: CallChainDiffItem[];
};
type FileCallChainDiffRecord = {
    toolVersion: string;
    fileChangeKind: "updated" | "added" | "removed";
    changedFileRelativePath: string;
    changedFileSrc: string;
    changedFileOldHash: string;
    changedFileNewHash: string;
    baseSnapshotHash: string;
    targetSnapshotHash: string;
    projectRoot: string;
    changedFunctions: FunctionCallChainSlot[];
};
type IndexedChild = {
    kind: "file";
    rel: string;
    abs: string;
    node: FileNode;
} | {
    kind: "dir";
    rel: string;
    abs: string;
    node: DirNode;
};
type ScriptFuncEntry = NonNullable<FileNode["scriptFunc"]>[number];
type ParadigmDiffAdded = {
    kind: "file" | "directory";
    relativePath: string;
    absolutePath: string;
    node: FileNode | DirNode;
};
type ParadigmDiffRemoved = {
    kind: "file" | "directory";
    relativePath: string;
    absolutePath: string;
    previousHash: string;
};
export type { CallChainDiffItem, CallChainHopDiff, InvokeChainChangeKind, ScriptFuncEntry, ParadigmDiffAdded, ParadigmDiffRemoved, IndexedChild, FileCallChainDiffRecord, FunctionCallChainSlot, InvokeItem, };
