import { type LspRange, type LspTextDocumentPosition, type LspToolContext, type LspToolResult } from "../code.lsp_locateDefinition/core.js";
import { type LspLocateDefinitionRuntimeOptions } from "../_shared/runtime.js";
export type LspRenameWorkspaceEdit = {
    changes: readonly {
        filePath: string;
        range: LspRange;
        newText: string;
    }[];
    source: "provider" | "dry-run";
};
export type LspRenameSymbolOutput = {
    kind: "agentCore.basicTool.lsp.renameSymbol";
    target: LspTextDocumentPosition;
    newName: string;
    workspaceEdit: LspRenameWorkspaceEdit;
    dryRun: boolean;
    providerCalled: boolean;
    appliedChanges: false;
    permissionsRequired: readonly ["workspace:read", "lsp:read", "workspace:edit", "lsp:rename"];
    unsafeSideEffects: false;
};
export type LspRenameSymbolProvider = (target: LspTextDocumentPosition, newName: string, context: LspToolContext) => LspRenameWorkspaceEdit | Promise<LspRenameWorkspaceEdit>;
export type LspRenameSymbolRequest = {
    target?: Partial<LspTextDocumentPosition>;
    newName?: string;
    applyChanges?: boolean;
    context?: LspToolContext;
    provider?: LspRenameSymbolProvider;
    runtime?: LspLocateDefinitionRuntimeOptions;
};
export declare const lspRenameSymbolDescriptor: {
    readonly toolId: "code.lsp_renameSymbol";
    readonly capability: "rename-symbol";
    readonly route: "agent_executionEngine.basic_toolLayer.baseTools.codeBase.lsp";
    readonly permissionsRequired: readonly ["workspace:read", "lsp:read", "workspace:edit", "lsp:rename"];
    readonly defaultDryRun: true;
    readonly appliesChanges: false;
    readonly unsafeSideEffects: false;
    readonly tapOwnsApproval: true;
};
export declare function renameLspSymbol(request?: LspRenameSymbolRequest): Promise<LspToolResult<LspRenameSymbolOutput>>;
