import { JSONToolOutput, Tool, BaseToolOptions, BaseToolRunOptions, ToolEmitter, ToolInput } from '../base.cjs';
import { z } from 'zod';
import { Options, Sequelize } from 'sequelize';
import { Provider } from './metadata.cjs';
import { AnyToolSchemaLike } from '../../internals/helpers/schema.cjs';
import 'ajv';
import '../../context.cjs';
import '../../emitter-BWtGHYn0.cjs';
import '../../internals/types.cjs';
import '../../internals/helpers/guards.cjs';
import '../../internals/serializable.cjs';
import '../../internals/helpers/promise.cjs';
import '../../errors.cjs';
import 'promise-based-task';
import '../../cache/base.cjs';
import 'zod-to-json-schema';

/**
 * Copyright 2025 IBM Corp.
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *     http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */

interface ToolOptions extends BaseToolOptions {
    provider: Provider;
    connection: Options;
}
type ToolRunOptions = BaseToolRunOptions;
declare const SQLToolAction: {
    readonly GetMetadata: "GET_METADATA";
    readonly Query: "QUERY";
};
declare class SQLToolOutput extends JSONToolOutput<any> {
}
declare class SQLTool extends Tool<SQLToolOutput, ToolOptions, ToolRunOptions> {
    name: string;
    description: string;
    inputSchema(): z.ZodObject<{
        action: z.ZodNativeEnum<{
            readonly GetMetadata: "GET_METADATA";
            readonly Query: "QUERY";
        }>;
        query: z.ZodOptional<z.ZodString>;
    }, "strip", z.ZodTypeAny, {
        action: "GET_METADATA" | "QUERY";
        query?: string | undefined;
    }, {
        action: "GET_METADATA" | "QUERY";
        query?: string | undefined;
    }>;
    readonly emitter: ToolEmitter<ToolInput<this>, SQLToolOutput>;
    constructor(options: ToolOptions);
    protected validateInput(schema: AnyToolSchemaLike, input: unknown): asserts input is ToolInput<this>;
    protected connection(): Promise<Sequelize>;
    protected _run(input: ToolInput<this>, _options: Partial<ToolRunOptions>): Promise<SQLToolOutput>;
    protected executeQuery(query: string, provider: Provider, schema: string | undefined): Promise<SQLToolOutput>;
    private isReadOnlyQuery;
    destroy(): Promise<void>;
}

export { SQLTool, SQLToolAction, SQLToolOutput };
