/**
 * Kubernetes Tool
 *
 * Provides Kubernetes cluster management capabilities for Code Buddy.
 * Supports common kubectl operations with proper confirmation for destructive actions.
 */
import { ToolResult } from '../types/index.js';
export type K8sResourceType = 'pods' | 'deployments' | 'services' | 'configmaps' | 'secrets' | 'namespaces' | 'nodes' | 'ingresses' | 'persistentvolumeclaims' | 'statefulsets' | 'daemonsets' | 'jobs' | 'cronjobs' | 'replicasets';
export interface K8sGetOptions {
    namespace?: string;
    allNamespaces?: boolean;
    selector?: string;
    output?: 'wide' | 'yaml' | 'json' | 'name';
    showLabels?: boolean;
}
export interface K8sApplyOptions {
    namespace?: string;
    dryRun?: boolean;
    force?: boolean;
}
export interface K8sDeleteOptions {
    namespace?: string;
    force?: boolean;
    gracePeriod?: number;
}
export interface K8sLogsOptions {
    namespace?: string;
    container?: string;
    tail?: number;
    previous?: boolean;
    timestamps?: boolean;
}
export interface K8sExecOptions {
    namespace?: string;
    container?: string;
}
export interface K8sScaleOptions {
    namespace?: string;
    replicas: number;
}
export declare class KubernetesTool {
    private confirmationService;
    private cwd;
    private currentContext;
    private currentNamespace;
    constructor(cwd?: string);
    /**
     * Execute kubectl command safely
     */
    private execKubectl;
    /**
     * Check if kubectl is available and connected to a cluster
     */
    isKubectlAvailable(): Promise<boolean>;
    /**
     * Get cluster information
     */
    clusterInfo(): Promise<ToolResult>;
    /**
     * Get current context
     */
    getCurrentContext(): Promise<ToolResult>;
    /**
     * List available contexts
     */
    listContexts(): Promise<ToolResult>;
    /**
     * Switch context
     */
    useContext(contextName: string): Promise<ToolResult>;
    /**
     * Get resources
     */
    get(resourceType: K8sResourceType, name?: string, options?: K8sGetOptions): Promise<ToolResult>;
    /**
     * Describe a resource
     */
    describe(resourceType: K8sResourceType, name: string, namespace?: string): Promise<ToolResult>;
    /**
     * Apply a manifest file or directory
     */
    apply(pathOrUrl: string, options?: K8sApplyOptions): Promise<ToolResult>;
    /**
     * Delete a resource
     */
    delete(resourceType: K8sResourceType, name: string, options?: K8sDeleteOptions): Promise<ToolResult>;
    /**
     * Get pod logs
     */
    logs(podName: string, options?: K8sLogsOptions): Promise<ToolResult>;
    /**
     * Execute a command in a pod
     */
    exec(podName: string, command: string, options?: K8sExecOptions): Promise<ToolResult>;
    /**
     * Scale a deployment, statefulset, or replicaset
     */
    scale(resourceType: 'deployments' | 'statefulsets' | 'replicasets', name: string, options: K8sScaleOptions): Promise<ToolResult>;
    /**
     * Rollout status for a deployment
     */
    rolloutStatus(resourceType: 'deployments' | 'statefulsets' | 'daemonsets', name: string, namespace?: string): Promise<ToolResult>;
    /**
     * Rollout restart for a deployment
     */
    rolloutRestart(resourceType: 'deployments' | 'statefulsets' | 'daemonsets', name: string, namespace?: string): Promise<ToolResult>;
    /**
     * Port forward to a pod or service
     */
    portForward(resourceType: 'pods' | 'services', name: string, localPort: number, remotePort: number, namespace?: string): Promise<ToolResult>;
    /**
     * Get events in a namespace
     */
    getEvents(namespace?: string, fieldSelector?: string): Promise<ToolResult>;
    /**
     * Get resource usage (requires metrics-server)
     */
    top(resourceType: 'pods' | 'nodes', namespace?: string): Promise<ToolResult>;
    /**
     * Create a namespace
     */
    createNamespace(name: string): Promise<ToolResult>;
    /**
     * Set current namespace for subsequent commands
     */
    setNamespace(namespace: string): Promise<ToolResult>;
    /**
     * Create a ConfigMap from literal values or file
     */
    createConfigMap(name: string, data: Record<string, string>, namespace?: string): Promise<ToolResult>;
    /**
     * Create a Secret from literal values
     */
    createSecret(name: string, data: Record<string, string>, namespace?: string, type?: string): Promise<ToolResult>;
}
export declare function getKubernetesTool(cwd?: string): KubernetesTool;
