export type LspExplainSymbolBoundary = "input" | "contract" | "governance" | "scope" | "environment";
export type LspExplainSymbolGate = {
    accepted: boolean;
    reason?: string;
};
export type LspSymbolPosition = {
    line: number;
    character: number;
};
export type LspExplainSymbolRequest = {
    runtimeId?: string;
    sessionId?: string;
    workspaceRoot?: string;
    documentUri?: string;
    position?: LspSymbolPosition;
    symbolName?: string;
    includeDefinitionHint?: boolean;
    includeReferencesHint?: boolean;
    requestedScopes?: readonly string[];
    allowedScopes?: readonly string[];
    lspClientReady?: boolean;
    dryRun?: boolean;
    contract?: LspExplainSymbolGate;
    governance?: LspExplainSymbolGate;
    auditContext?: Record<string, unknown>;
};
export type LspExplainSymbolErrorCode = "MISSING_RUNTIME_ID" | "MISSING_SESSION_ID" | "MISSING_WORKSPACE_ROOT" | "MISSING_DOCUMENT_URI" | "MISSING_SYMBOL_TARGET" | "INVALID_POSITION" | "LSP_CLIENT_NOT_READY" | "CONTRACT_REJECTED" | "GOVERNANCE_REJECTED" | "SCOPE_DENIED" | "REAL_SIDE_EFFECT_NOT_ALLOWED";
export type LspExplainSymbolError = {
    code: LspExplainSymbolErrorCode;
    message: string;
    boundary: LspExplainSymbolBoundary;
    safeForRuntimeInspection: true;
    internalDetailExposed: false;
};
export type LspExplainSymbolPlan = {
    toolId: "code.lsp_explainSymbol";
    capability: "explain-lsp-symbol";
    runtimeId: string;
    sessionId: string;
    workspaceRoot: string;
    documentUri: string;
    target: {
        position?: LspSymbolPosition;
        symbolName?: string;
    };
    explanationHints: {
        includeDefinitionHint: boolean;
        includeReferencesHint: boolean;
    };
    permissions: {
        required: readonly ["tool:lsp", "workspace:read"];
        acceptedScopes: readonly string[];
        approvalRequired: false;
    };
    execution: {
        dryRun: true;
        lspInvoked: false;
        modelInvoked: false;
        documentMutated: false;
        unsafeSideEffects: false;
    };
    audit: {
        event: "basicTool.lsp.explainSymbol.planned";
        auditContext: Readonly<Record<string, unknown>>;
    };
};
export type LspExplainSymbolResult = {
    ok: true;
    plan: LspExplainSymbolPlan;
    events: readonly string[];
} | {
    ok: false;
    error: LspExplainSymbolError;
    events: readonly string[];
};
export declare const lspExplainSymbolDescriptor: {
    readonly toolId: "code.lsp_explainSymbol";
    readonly capability: "explain-lsp-symbol";
    readonly layer: "agent_executionEngine.basic_toolLayer.baseTools.codeBase.lsp";
    readonly purpose: "plan an LSP-backed symbol explanation without invoking providers or mutating code";
    readonly sideEffectPolicy: "dry-run-only";
    readonly requiresApproval: false;
};
export declare function planLspSymbolExplanation(request?: LspExplainSymbolRequest): LspExplainSymbolResult;
