/**
 * KiroGraph Graph Query Manager
 * High-level graph queries built on top of GraphTraverser and GraphDatabase.
 */
import type { Node, NodeContext, NodeMetrics, Subgraph } from '../types';
import type { GraphDatabase } from '../db/database';
import { type TraversalOptions } from './traversal';
export declare class GraphQueryManager {
    private readonly db;
    private readonly traverser;
    constructor(db: GraphDatabase);
    /** Get full context for a node (node + ancestors + children + callers + callees). */
    getContext(nodeId: string): Promise<NodeContext>;
    /** Get all nodes that call the given node (depth=1, incoming 'calls' edges). */
    getCallers(nodeId: string, limit?: number): Promise<Node[]>;
    /** Get all nodes called by the given node (depth=1, outgoing 'calls' edges). */
    getCallees(nodeId: string, limit?: number): Promise<Node[]>;
    /** Get the full call graph rooted at nodeId up to the given depth. */
    getCallGraph(nodeId: string, depth?: number): Promise<Subgraph>;
    /**
     * Get the type hierarchy for a node.
     * direction: 'up' = base types, 'down' = derived types, 'both' = all.
     */
    getTypeHierarchy(nodeId: string, direction?: 'up' | 'down' | 'both'): Promise<Node[]>;
    /** Get all nodes that would be impacted by changing nodeId (incoming edges). */
    getImpactRadius(nodeId: string, depth?: number): Promise<Node[]>;
    /** Find the shortest path between two nodes via BFS. */
    findPath(fromId: string, toId: string, maxDepth?: number): Promise<Node[]>;
    /** Get all ancestor containers of a node (incoming 'contains' edges). */
    getAncestors(nodeId: string): Promise<Node[]>;
    /** Get direct children of a node (outgoing 'contains' edges, depth=1). */
    getChildren(nodeId: string): Promise<Node[]>;
    /**
     * Find test files that are transitively affected by changes to the given source files.
     * BFS-traverses import/call dependents to discover which test files depend on changed code.
     */
    getAffectedTests(changedFiles: string[], opts?: {
        depth?: number;
        testPattern?: string;
    }): string[];
    /** Find all circular import dependencies. Returns arrays of file paths forming cycles. */
    findCircularDependencies(): Promise<string[][]>;
    /** Find nodes with no incoming edges (potential dead code). */
    findDeadCode(limit?: number): Promise<Node[]>;
    /** Get metrics for a node (edge counts, callers, callees, children). */
    getNodeMetrics(nodeId: string): Promise<NodeMetrics>;
    /**
     * Build a subgraph from a set of node IDs, optionally traversing further
     * with the given TraversalOptions.
     */
    getFilteredSubgraph(nodeIds: string[], opts?: TraversalOptions): Promise<Subgraph>;
}
//# sourceMappingURL=queries.d.ts.map