/**
 * Type definitions for NeuroLink GitHub Action
 * @module actionTypes
 */
import type { AIProviderName } from "../constants/enums.js";
/**
 * Provider API key configuration (verified providers only)
 */
export type ActionProviderKeys = {
    openaiApiKey?: string;
    anthropicApiKey?: string;
    googleAiApiKey?: string;
    azureOpenaiApiKey?: string;
    azureOpenaiEndpoint?: string;
    azureOpenaiDeployment?: string;
    mistralApiKey?: string;
    huggingfaceApiKey?: string;
    openrouterApiKey?: string;
    litellmApiKey?: string;
    litellmBaseUrl?: string;
    openaiCompatibleApiKey?: string;
    openaiCompatibleBaseUrl?: string;
};
/**
 * AWS credentials for Bedrock/SageMaker
 */
export type ActionAWSConfig = {
    awsAccessKeyId?: string;
    awsSecretAccessKey?: string;
    awsRegion: string;
    awsSessionToken?: string;
    bedrockModelId?: string;
    sagemakerEndpoint?: string;
};
/**
 * Google Cloud configuration for Vertex AI
 */
export type ActionGoogleCloudConfig = {
    googleVertexProject?: string;
    googleVertexLocation: string;
    googleApplicationCredentials?: string;
};
/**
 * Extended thinking configuration
 */
export type ActionThinkingConfig = {
    enabled: boolean;
    level: "minimal" | "low" | "medium" | "high";
    budget: number;
};
/**
 * Multimodal input paths
 */
export type ActionMultimodalInputs = {
    imagePaths?: string[];
    pdfPaths?: string[];
    csvPaths?: string[];
    videoPaths?: string[];
};
/**
 * Complete action inputs parsed from GitHub Action
 */
export type ActionInputs = {
    prompt: string;
    provider: AIProviderName | "auto";
    model?: string;
    temperature: number;
    maxTokens: number;
    systemPrompt?: string;
    command: "generate" | "stream" | "batch";
    providerKeys: ActionProviderKeys;
    awsConfig: ActionAWSConfig;
    googleCloudConfig: ActionGoogleCloudConfig;
    multimodal: ActionMultimodalInputs;
    thinking: ActionThinkingConfig;
    enableAnalytics: boolean;
    enableEvaluation: boolean;
    outputFormat: "text" | "json";
    outputFile?: string;
    enableTools: boolean;
    mcpConfigPath?: string;
    postComment: boolean;
    updateExistingComment: boolean;
    commentTag: string;
    githubToken?: string;
    timeout: number;
    debug: boolean;
    neurolinkVersion: string;
    workingDirectory: string;
};
/**
 * Raw CLI token usage format (actual CLI output)
 */
export type CliTokenUsage = {
    input: number;
    output: number;
    total: number;
    cacheCreationTokens?: number;
    cacheReadTokens?: number;
};
/**
 * Raw CLI analytics format (actual CLI output)
 */
export type CliAnalytics = {
    provider: string;
    model?: string;
    tokenUsage: CliTokenUsage;
    requestDuration: number;
    timestamp: string;
    cost?: number;
};
/**
 * Raw CLI evaluation format (actual CLI output, 1-10 scale)
 */
export type CliEvaluation = {
    relevance: number;
    accuracy: number;
    completeness: number;
    overall: number;
    isOffTopic: boolean;
    reasoning: string;
};
/**
 * Raw CLI response format (actual output structure)
 */
export type CliResponse = {
    content: string;
    provider?: string;
    model?: string;
    usage?: CliTokenUsage;
    responseTime?: number;
    analytics?: CliAnalytics;
    evaluation?: CliEvaluation;
};
/**
 * Normalized token usage for action output
 */
export type ActionTokenUsage = {
    promptTokens: number;
    completionTokens: number;
    totalTokens: number;
};
/**
 * Normalized evaluation for action output
 */
export type ActionEvaluation = {
    overallScore: number;
    relevance: number;
    accuracy: number;
    completeness: number;
};
/**
 * CLI execution result (normalized)
 */
export type ActionExecutionResult = {
    success: boolean;
    response: string;
    responseJson?: Record<string, unknown>;
    provider?: string;
    model?: string;
    usage?: ActionTokenUsage;
    cost?: number;
    executionTime?: number;
    evaluation?: ActionEvaluation;
    error?: string;
};
/**
 * GitHub comment posting result
 */
export type ActionCommentResult = {
    success: boolean;
    commentId?: number;
    commentUrl?: string;
    error?: string;
};
/**
 * Complete action output (snake_case to match action.yml outputs)
 */
export type ActionOutput = {
    response: string;
    response_json: string;
    provider?: string;
    model?: string;
    tokens_used?: string;
    prompt_tokens?: string;
    completion_tokens?: string;
    cost?: string;
    execution_time?: string;
    evaluation_score?: string;
    comment_id?: string;
};
/**
 * Input validation result
 */
export type ActionInputValidation = {
    valid: boolean;
    errors: string[];
    warnings: string[];
};
/**
 * Provider key validation mapping
 */
export type ProviderKeyMapping = {
    [K in AIProviderName]?: (keyof ActionProviderKeys)[];
};
