/**
 * Shared Utilities for Issue Tracker Integration
 *
 * @module cli/helpers/issue-tracker/utils
 */
import type { IssueTracker, RateLimitInfo } from './types.js';
/**
 * Detect default tracker based on project structure
 *
 * @param projectPath - Path to project root (ONLY checks this directory, not parents)
 * @returns Object with tracker and whether it was actually detected
 */
export declare function detectDefaultTracker(projectPath: string): {
    tracker: IssueTracker;
    detected: boolean;
};
/**
 * Check if gh CLI is available
 *
 * @returns True if gh CLI is installed and in PATH
 */
export declare function isGhCliAvailable(): boolean;
/**
 * Check if Claude CLI is available
 *
 * Uses the robust detector from claude-cli-detector.ts
 * This ensures consistent detection logic across the entire codebase.
 *
 * @returns True if claude CLI is installed and in PATH
 */
export declare function isClaudeCliAvailable(): boolean;
/**
 * Check if a Claude plugin is already installed
 *
 * @param pluginName - Name of the plugin to check
 * @returns True if installed, false otherwise
 */
export declare function isPluginInstalled(pluginName: string): boolean;
/**
 * Install tracker plugin via Claude CLI
 *
 * @param tracker - Tracker type
 * @returns Object with success status and optional error message
 */
export declare function installTrackerPlugin(tracker: IssueTracker): {
    success: boolean;
    error?: string;
    alreadyInstalled?: boolean;
};
/**
 * Sleep for specified milliseconds
 *
 * @param ms - Milliseconds to sleep
 */
export declare function sleep(ms: number): Promise<void>;
/**
 * Exponential backoff for rate limiting (1s, 2s, 4s, 8s, 16s...)
 *
 * @param attempt - Current attempt number (0-indexed)
 * @returns Milliseconds to wait
 */
export declare function getBackoffDelay(attempt: number): number;
/**
 * Retry an async operation with exponential backoff
 *
 * @param fn - Function to retry
 * @param maxRetries - Maximum number of retries
 * @returns Result of function
 */
export declare function retryWithBackoff<T>(fn: () => Promise<T>, maxRetries?: number): Promise<T>;
/**
 * Parse rate limit headers from fetch response
 *
 * @param headers - Response headers
 * @returns Rate limit info or null
 */
export declare function parseRateLimitHeaders(headers: Headers): RateLimitInfo | null;
/**
 * Check if response is rate limited
 *
 * @param response - Fetch response
 * @returns Rate limit info if rate limited, null otherwise
 */
export declare function checkRateLimit(response: Response): RateLimitInfo | null;
/**
 * Validate URL format
 *
 * @param url - URL to validate
 * @returns True if valid URL
 */
export declare function isValidUrl(url: string): boolean;
/**
 * Validate email format
 *
 * @param email - Email to validate
 * @returns True if valid email
 */
export declare function isValidEmail(email: string): boolean;
/**
 * Mask sensitive string (show first 4 and last 4 characters)
 *
 * @param value - String to mask
 * @returns Masked string
 */
export declare function maskSensitiveValue(value: string): string;
/**
 * Get plugin name for tracker
 *
 * @param tracker - Tracker type
 * @returns Plugin name
 */
export declare function getPluginName(tracker: IssueTracker): string;
/**
 * Get tracker display name
 *
 * @param tracker - Tracker type
 * @returns Display name
 */
export declare function getTrackerDisplayName(tracker: IssueTracker): string;
//# sourceMappingURL=utils.d.ts.map