import type { BaseToolDefinition, BaseToolDependencyDeclaration, BaseToolHandler, BaseToolInvokeRequest, BaseToolInvokeResult, BaseToolRiskLevel, BaseToolSchemaLike } from "../../../../../agentCore/agent_executionEngine/basic_toolLayer/baseTools/baseToolDefinition.js";
import type { BaseToolExecutorPort } from "../../../../../agentCore/agent_executionEngine/basic_toolLayer/baseTools/baseToolExecutorPort.js";
import type { LspToolAuditEvent, LspToolResult } from "../code.lsp_locateDefinition/core.js";
export type LspBestPracticeProviderName = "anthropic" | "openai" | "deepmind" | "praxis-native";
export type LspBestPracticeSource = {
    kind: "cli" | "agent-sdk" | "api-sdk" | "praxis-native";
    label: string;
    path?: string;
};
export type LspBestPracticeMetadata<Name extends string = LspBestPracticeProviderName> = {
    providerName: Name;
    source: string | LspBestPracticeSource;
    directCliSupport: boolean;
    sideEffectPolicy?: "read-only" | "preview-only";
    notes?: readonly string[];
};
export type LspBestPracticeSelection<Name extends string = LspBestPracticeProviderName> = {
    providerName: Name;
    sourceLabel: string;
    sourceKind?: string;
    sourcePath?: string;
    directCliSupport: boolean;
    sideEffectPolicy?: string;
    notes: readonly string[];
};
export type LspBaseToolDefinitionOptions<Input, Output> = {
    toolId: string;
    title: string;
    description: string;
    summary: string;
    riskLevel?: BaseToolRiskLevel;
    permissionHints: readonly string[];
    dependencies: readonly BaseToolDependencyDeclaration[];
    inputSchema?: BaseToolSchemaLike;
    outputSchema?: BaseToolSchemaLike;
    storagePolicy?: BaseToolDefinition["storagePolicy"];
    metadata?: Readonly<Record<string, unknown>>;
};
export declare function architectureRelativePath(absolutePath: string): string;
export declare function lspToolSkillDocPath(toolId: string): string;
export declare function lspToolSourcePath(toolId: string): string;
export declare function lspToolStoragePracticePath(toolId: string): string;
export declare function jsonSchema(name: string, schema: unknown): BaseToolSchemaLike;
export declare function normalizeLspDependencyDeclarations(dependencyIds: readonly string[], descriptions?: Readonly<Record<string, string>>): readonly BaseToolDependencyDeclaration[];
export declare const lspCommonSchemaFragments: {
    readonly lspPosition: {
        readonly type: "object";
        readonly additionalProperties: false;
        readonly required: readonly ["line", "character"];
        readonly properties: {
            readonly line: {
                readonly type: "integer";
                readonly minimum: 0;
            };
            readonly character: {
                readonly type: "integer";
                readonly minimum: 0;
            };
        };
    };
    readonly lspRange: {
        readonly type: "object";
        readonly additionalProperties: false;
        readonly required: readonly ["start", "end"];
        readonly properties: {
            readonly start: {
                readonly type: "object";
                readonly additionalProperties: false;
                readonly required: readonly ["line", "character"];
                readonly properties: {
                    readonly line: {
                        readonly type: "integer";
                        readonly minimum: 0;
                    };
                    readonly character: {
                        readonly type: "integer";
                        readonly minimum: 0;
                    };
                };
            };
            readonly end: {
                readonly type: "object";
                readonly additionalProperties: false;
                readonly required: readonly ["line", "character"];
                readonly properties: {
                    readonly line: {
                        readonly type: "integer";
                        readonly minimum: 0;
                    };
                    readonly character: {
                        readonly type: "integer";
                        readonly minimum: 0;
                    };
                };
            };
        };
    };
    readonly invocationContext: {
        readonly type: "object";
        readonly additionalProperties: true;
        readonly properties: {
            readonly invocationId: {
                readonly type: "string";
            };
            readonly workspaceRoot: {
                readonly type: "string";
            };
            readonly dryRun: {
                readonly type: "boolean";
            };
            readonly preferredProvider: {
                readonly type: "string";
                readonly enum: readonly ["anthropic", "openai", "deepmind", "praxis-native"];
            };
        };
    };
};
export declare function createLspBaseToolDefinition<Input, Output>(options: LspBaseToolDefinitionOptions<Input, Output>): BaseToolDefinition<Input, Output>;
export declare function orderLspPractices<Name extends string>(practices: readonly LspBestPracticeMetadata<Name>[], preferredProvider: Name | undefined): readonly LspBestPracticeMetadata<Name>[];
export declare function selectLspPractice<Name extends LspBestPracticeProviderName>(practices: readonly LspBestPracticeMetadata<Name>[], preferredProvider: Name | undefined): LspBestPracticeSelection<Name>;
export declare function buildPracticeAuditMetadata(selection: LspBestPracticeSelection): Readonly<Record<string, unknown>>;
export declare function adaptLspToolResultToInvokeResult<Output>(result: LspToolResult<Output>): BaseToolInvokeResult<Output>;
export declare function createLspCoreHandler<Input, Output>(definition: BaseToolDefinition<Input, Output>, invokeCore: (request: BaseToolInvokeRequest<Input>) => Promise<LspToolResult<Output>>): BaseToolHandler<Input, Output>;
export declare function injectInvocationAudit(metadata: Readonly<Record<string, unknown>> | undefined, auditMetadata: Readonly<Record<string, unknown>> | undefined, request: Pick<BaseToolInvokeRequest, "runtimeId" | "sessionId" | "toolCallId">): Readonly<Record<string, unknown>>;
export declare function normalizeDocumentUriToFilePath(documentUri: string, workspaceRoot: string | undefined): string;
export declare function attachAuditMetadata(audit: readonly LspToolAuditEvent[] | undefined, metadata: Readonly<Record<string, unknown>>): readonly LspToolAuditEvent[];
export declare function baseToolInvokeSuccess<Output>(toolId: string, output: Output, events: readonly string[], metadata?: Readonly<Record<string, unknown>>): BaseToolInvokeResult<Output>;
export declare function baseToolInvokeFailure(toolId: string, code: string, message: string, events: readonly string[]): BaseToolInvokeResult<never>;
export declare function preferAnthropicExecutor<Name extends LspBestPracticeProviderName>(executor: BaseToolExecutorPort | undefined, hasMethod: (executor: BaseToolExecutorPort) => boolean, practices: readonly LspBestPracticeMetadata<Name>[], preferredProvider: Name | undefined): LspBestPracticeSelection<Name>;
