import { invoke } from "@tauri-apps/api/core"; // ─── Types matching Rust backend models ─────────────────────────────────────── export interface ProviderConfig { provider_type?: string; max_tokens?: number; temperature?: number; name: string; api_url: string; api_key: string; model: string; custom_endpoint_path?: string; custom_auth_header?: string; custom_auth_prefix?: string; api_format?: string; session_id?: string; user_id?: string; use_datastore_upload?: boolean; supports_tool_calling?: boolean; } export interface Message { role: string; content: string; } export interface TokenUsage { prompt_tokens: number; completion_tokens: number; total_tokens: number; } export interface ChatResponse { content: string; model: string; usage?: TokenUsage; /** What was stored in the DB — may be auto-redacted. Use this for display and history. */ user_message?: string; } export interface AnalysisResult { summary: string; key_findings: string[]; suggested_why1: string; severity_assessment: string; } export interface ProviderInfo { name: string; supports_streaming: boolean; models: string[]; } export interface Issue { id: string; title: string; description: string; severity: string; status: string; category: string; source: string; created_at: string; updated_at: string; resolved_at?: string; assigned_to: string; tags: string; } export interface FiveWhyEntry { id: string; why_number: number; question: string; answer?: string; created_at: number; } export interface TimelineEvent { id: string; issue_id: string; event_type: string; description: string; metadata: string; created_at: string; } export interface AiConversation { id: string; issue_id: string; provider: string; model: string; created_at: string; title: string; } export interface ResolutionStep { id: string; issue_id: string; step_order: number; why_question: string; answer: string; evidence: string; created_at: string; } export interface IssueDetail { issue: Issue; log_files: LogFile[]; image_attachments: ImageAttachment[]; resolution_steps: ResolutionStep[]; conversations: AiConversation[]; timeline_events: TimelineEvent[]; } export interface IssueSummary { id: string; title: string; severity: string; status: string; category: string; created_at: string; updated_at: string; domain?: string; log_count: number; step_count: number; } export interface IssueListQuery { status?: string; domain?: string; severity?: string; search?: string; limit?: number; offset?: number; } export interface NewIssue { title: string; domain: string; description?: string; severity?: string; } export interface LogFile { id: string; issue_id: string; file_name: string; file_path: string; file_size: number; mime_type: string; content_hash: string; uploaded_at: string; redacted: boolean; } export interface ImageAttachment { id: string; issue_id: string; file_name: string; file_path: string; file_size: number; mime_type: string; upload_hash: string; uploaded_at: string; pii_warning_acknowledged: boolean; is_paste: boolean; } export interface PiiSpan { id: string; pii_type: string; start: number; end: number; original: string; replacement: string; } export interface PiiDetectionResult { log_file_id: string; detections: PiiSpan[]; total_pii_found: number; } export interface RedactedLogFile { id: string; original_file_id: string; file_name: string; file_hash: string; redaction_count: number; } export interface Document_ { id: string; issue_id: string; doc_type: string; title: string; content_md: string; created_at: number; updated_at: number; } export interface HardwareInfo { total_ram_gb: number; cpu_arch: string; gpu_vendor?: string; gpu_vram_gb?: number; } export interface ModelRecommendation { name: string; size: string; min_ram_gb: number; description: string; recommended: boolean; } export interface OllamaModel { name: string; size: number; modified: string; } export interface OllamaStatus { installed: boolean; version?: string; running: boolean; } export interface InstallGuide { platform: string; steps: string[]; url: string; } export interface AuditEntry { id: string; timestamp: string; action: string; entity_type: string; entity_id: string; user_id: string; details: string; } export interface AuditFilter { action?: string; entity_type?: string; entity_id?: string; limit?: number; } export interface AppSettings { theme: string; ai_providers: ProviderConfig[]; active_provider?: string; default_provider: string; default_model: string; ollama_url: string; } // ─── TriageMessage (for UI store, not a DB type) ────────────────────────────── export interface TriageMessage { id: string; issue_id: string; role: string; content: string; why_level?: number; created_at: number; } // ─── AI commands ────────────────────────────────────────────────────────────── export const analyzeLogsCmd = (issueId: string, logFileIds: string[], providerConfig: ProviderConfig) => invoke("analyze_logs", { issueId, logFileIds, providerConfig }); export const chatMessageCmd = ( issueId: string, message: string, logFileIds: string[], providerConfig: ProviderConfig, systemPrompt?: string ) => invoke("chat_message", { issueId, message, logFileIds: logFileIds.length > 0 ? logFileIds : undefined, providerConfig, systemPrompt: systemPrompt ?? null, }); export const listProvidersCmd = () => invoke("list_providers"); // ─── Analysis / PII commands ────────────────────────────────────────────────── export const uploadLogFileCmd = (issueId: string, filePath: string) => invoke("upload_log_file", { issueId, filePath }); export const uploadLogFileByContentCmd = (issueId: string, fileName: string, content: string) => invoke("upload_log_file_by_content", { issueId, fileName, content }); export const uploadImageAttachmentCmd = (issueId: string, filePath: string) => invoke("upload_image_attachment", { issueId, filePath }); export const uploadImageAttachmentByContentCmd = (issueId: string, fileName: string, base64Content: string) => invoke("upload_image_attachment_by_content", { issueId, fileName, base64Content }); export const uploadFileToDatastoreCmd = (providerConfig: ProviderConfig, filePath: string) => invoke("upload_file_to_datastore", { providerConfig, filePath }); export const uploadFileToDatastoreAnyCmd = (providerConfig: ProviderConfig, filePath: string) => invoke("upload_file_to_datastore_any", { providerConfig, filePath }); export const uploadPasteImageCmd = (issueId: string, base64Image: string, mimeType: string) => invoke("upload_paste_image", { issueId, base64Image, mimeType }); export const listImageAttachmentsCmd = (issueId: string) => invoke("list_image_attachments", { issueId }); export const deleteImageAttachmentCmd = (attachmentId: string) => invoke("delete_image_attachment", { attachmentId }); export const detectPiiCmd = (logFileId: string) => invoke("detect_pii", { logFileId }); export const scanTextForPiiCmd = (text: string) => invoke("scan_text_for_pii", { text }); export const applyRedactionsCmd = (logFileId: string, approvedSpanIds: string[]) => invoke("apply_redactions", { logFileId, approvedSpanIds }); // ─── Issue CRUD ─────────────────────────────────────────────────────────────── export const testProviderConnectionCmd = (providerConfig: ProviderConfig) => invoke("test_provider_connection", { providerConfig }); export const detectToolCallingSupportCmd = (providerConfig: ProviderConfig) => invoke("detect_tool_calling_support", { providerConfig }); export const createIssueCmd = (newIssue: NewIssue) => invoke("create_issue", { title: newIssue.title, description: newIssue.description ?? "", severity: newIssue.severity ?? "P3", category: newIssue.domain, }); export const getIssueCmd = (issueId: string) => invoke("get_issue", { issueId }); export const listIssuesCmd = (query: IssueListQuery) => invoke("list_issues", { filter: query }); export const updateIssueCmd = ( issueId: string, updates: { title?: string; status?: string; severity?: string; description?: string; domain?: string } ) => invoke("update_issue", { issueId, updates }); export const deleteIssueCmd = (issueId: string) => invoke("delete_issue", { issueId }); export const searchIssuesCmd = (query: string) => invoke("search_issues", { query }); export interface IssueMessage { id: string; conversation_id: string; role: string; content: string; token_count: number; created_at: string; } export const getIssueMessagesCmd = (issueId: string) => invoke("get_issue_messages", { issueId }); export const addFiveWhyCmd = ( issueId: string, stepOrder: number, whyQuestion: string, answer: string, evidence: string ) => invoke("add_five_why", { issueId, stepOrder, whyQuestion, answer, evidence }); export const updateFiveWhyCmd = (entryId: string, answer: string) => invoke("update_five_why", { entryId, answer }); export const addTimelineEventCmd = (issueId: string, eventType: string, description: string, metadata?: string) => invoke("add_timeline_event", { issueId, eventType, description, metadata: metadata ?? null }); export const getTimelineEventsCmd = (issueId: string) => invoke("get_timeline_events", { issueId }); // ─── Document commands ──────────────────────────────────────────────────────── export const generateRcaCmd = (issueId: string) => invoke("generate_rca", { issueId }); export const generatePostmortemCmd = (issueId: string) => invoke("generate_postmortem", { issueId }); export const updateDocumentCmd = (docId: string, contentMd: string) => invoke("update_document", { docId, contentMd }); export const exportDocumentCmd = (docId: string, title: string, contentMd: string, format: string, outputDir: string) => invoke("export_document", { title, contentMd, format, outputDir }); // ─── Ollama & System ────────────────────────────────────────────────────────── export const checkOllamaInstalledCmd = () => invoke("check_ollama_installed"); export const getOllamaInstallGuideCmd = (platform: string) => invoke("get_ollama_install_guide", { platform }); export const listOllamaModelsCmd = () => invoke("list_ollama_models"); export const pullOllamaModelCmd = (modelName: string) => invoke("pull_ollama_model", { modelName }); export const deleteOllamaModelCmd = (modelName: string) => invoke("delete_ollama_model", { modelName }); export const detectHardwareCmd = () => invoke("detect_hardware"); export const recommendModelsCmd = () => invoke("recommend_models"); // ─── Settings & Audit ───────────────────────────────────────────────────────── export const getSettingsCmd = () => invoke("get_settings"); export const updateSettingsCmd = (partialSettings: Partial) => invoke("update_settings", { partialSettings }); export const getAuditLogCmd = (filter: AuditFilter) => invoke("get_audit_log", { filter }); // ─── OAuth & Integrations ───────────────────────────────────────────────────── export interface OAuthInitResponse { auth_url: string; state: string; } export interface ConnectionResult { success: boolean; message: string; } export const initiateOauthCmd = (service: string) => invoke("initiate_oauth", { service }); export const handleOauthCallbackCmd = (service: string, code: string, stateKey: string) => invoke("handle_oauth_callback", { service, code, stateKey }); export const testConfluenceConnectionCmd = (baseUrl: string, credentials: Record) => invoke("test_confluence_connection", { baseUrl, credentials }); export const testServiceNowConnectionCmd = (instanceUrl: string, credentials: Record) => invoke("test_servicenow_connection", { instanceUrl, credentials }); export const testAzureDevOpsConnectionCmd = (orgUrl: string, credentials: Record) => invoke("test_azuredevops_connection", { orgUrl, credentials }); // ─── Webview & Token Authentication ────────────────────────────────────────── export interface WebviewAuthResponse { success: boolean; message: string; webview_id: string; } export interface TokenAuthRequest { service: string; token: string; token_type: string; base_url: string; } export interface IntegrationConfig { service: string; base_url: string; username?: string; project_name?: string; space_key?: string; } export const authenticateWithWebviewCmd = (service: string, baseUrl: string, projectName?: string) => invoke("authenticate_with_webview", { service, baseUrl, projectName }); export const extractCookiesFromWebviewCmd = (service: string, webviewId: string) => invoke("extract_cookies_from_webview", { service, webviewId }); export const saveManualTokenCmd = (request: TokenAuthRequest) => invoke("save_manual_token", { request }); // ─── Integration Configuration Persistence ──────────────────────────────────── export const saveIntegrationConfigCmd = (config: IntegrationConfig) => invoke("save_integration_config", { config }); export const getIntegrationConfigCmd = (service: string) => invoke("get_integration_config", { service }); export const getAllIntegrationConfigsCmd = () => invoke("get_all_integration_configs"); // ─── AI Provider Configuration ──────────────────────────────────────────────── export const saveAiProviderCmd = (config: ProviderConfig) => invoke("save_ai_provider", { provider: config }); export const loadAiProvidersCmd = () => invoke("load_ai_providers"); export const deleteAiProviderCmd = (name: string) => invoke("delete_ai_provider", { name }); // ─── MCP Server types ──────────────────────────────────────────────────────── export interface McpServer { id: string; name: string; url: string; transport_type: "stdio" | "http"; transport_config: string; auth_type: "none" | "api_key" | "bearer" | "oauth2"; auth_value?: string; enabled: boolean; last_discovered_at?: string; discovery_status: "pending" | "connected" | "unreachable" | "error"; discovery_error?: string; created_at: string; updated_at: string; } export interface McpTool { id: string; server_id: string; name: string; tool_key: string; description?: string; parameters: string; } export interface McpResource { id: string; server_id: string; uri: string; name?: string; description?: string; } export interface McpServerStatus { server_id: string; status: "pending" | "connected" | "unreachable" | "error"; error?: string; tool_count: number; resource_count: number; last_discovered_at?: string; } export interface CreateMcpServerRequest { name: string; url: string; transport_type: "stdio" | "http"; transport_config: string; auth_type: "none" | "api_key" | "bearer" | "oauth2"; auth_value?: string; enabled: boolean; env_config?: string; } export interface UpdateMcpServerRequest { name?: string; url?: string; transport_type?: "stdio" | "http"; transport_config?: string; auth_type?: "none" | "api_key" | "bearer" | "oauth2"; auth_value?: string; enabled?: boolean; env_config?: string; } // ─── MCP Commands ───────────────────────────────────────────────────────────── export function listMcpServersCmd(): Promise { return invoke("list_mcp_servers"); } export function createMcpServerCmd(request: CreateMcpServerRequest): Promise { return invoke("create_mcp_server", { request }); } export function updateMcpServerCmd(id: string, request: UpdateMcpServerRequest): Promise { return invoke("update_mcp_server", { id, request }); } export function deleteMcpServerCmd(id: string): Promise { return invoke("delete_mcp_server", { id }); } export function toggleMcpServerCmd(id: string, enabled: boolean): Promise { return invoke("toggle_mcp_server", { id, enabled }); } export function discoverMcpServerCmd(id: string): Promise { return invoke("discover_mcp_server", { id }); } export function getMcpServerStatusCmd(id: string): Promise { return invoke("get_mcp_server_status", { id }); } export function initiateMcpOauthCmd(id: string): Promise { return invoke("initiate_mcp_oauth", { id }); } // ─── Sudo credential commands ───────────────────────────────────────────────── export interface SudoConfigStatus { configured: boolean; username: string; updated_at: string; } export const setSudoPasswordCmd = (password: string, username?: string) => invoke("set_sudo_password", { password, username: username ?? null }); export const getSudoConfigStatusCmd = () => invoke("get_sudo_config_status"); export const testSudoPasswordCmd = () => invoke("test_sudo_password"); export const clearSudoPasswordCmd = () => invoke("clear_sudo_password"); // ─── System / Version ───────────────────────────────────────────────────────── export const getAppVersionCmd = () => invoke("get_app_version"); // ─── Attachment cross-incident types ───────────────────────────────────────── export interface LogFileSummary { id: string; issue_id: string; issue_title: string; file_name: string; file_path: string; file_size: number; mime_type: string; content_hash: string; uploaded_at: string; redacted: boolean; } export interface ImageAttachmentSummary { id: string; issue_id: string; issue_title: string; file_name: string; file_path: string; file_size: number; mime_type: string; upload_hash: string; uploaded_at: string; pii_warning_acknowledged: boolean; is_paste: boolean; } // ─── Attachment cross-incident commands ─────────────────────────────────────── export const getLogFileContentCmd = (logFileId: string) => invoke("get_log_file_content", { logFileId }); export const listAllLogFilesCmd = (search?: string, issueId?: string) => invoke("list_all_log_files", { search: search ?? null, issueId: issueId ?? null, }); export const getImageAttachmentDataCmd = (attachmentId: string) => invoke("get_image_attachment_data", { attachmentId }); export const listAllImageAttachmentsCmd = (search?: string, issueId?: string) => invoke("list_all_image_attachments", { search: search ?? null, issueId: issueId ?? null, }); // ─── Shell Execution Commands ──────────────────────────────────────────────── export interface KubeconfigInfo { id: string; name: string; context: string; cluster_url?: string; is_active: boolean; } export interface CommandExecution { id: string; command: string; tier: number; approval_status: string; exit_code: number | null; stdout: string | null; stderr: string | null; execution_time_ms: number | null; executed_at: string; } export interface KubectlStatus { installed: boolean; path?: string; version?: string; } export const uploadKubeconfigCmd = (name: string, content: string) => invoke("upload_kubeconfig", { name, content }); export const listKubeconfigsCmd = () => invoke("list_kubeconfigs"); export const activateKubeconfigCmd = (id: string) => invoke("activate_kubeconfig", { id }); export const deleteKubeconfigCmd = (id: string) => invoke("delete_kubeconfig", { id }); export const respondToShellApprovalCmd = (approvalId: string, decision: string) => invoke("respond_to_shell_approval", { approvalId, decision }); export const listCommandExecutionsCmd = (issueId?: string) => invoke("list_command_executions", { issueId: issueId ?? null, }); export const checkKubectlInstalledCmd = () => invoke("check_kubectl_installed"); export interface ClassifierRules { tier1_kubectl: string[]; tier1_systemctl: string[]; tier1_proxmox: string[]; tier1_general: string[]; tier2_kubectl: string[]; tier2_systemctl: string[]; tier2_proxmox: string[]; tier2_general: string[]; tier3: string[]; } export const getClassifierRulesCmd = () => invoke("get_classifier_rules"); // ─── Kubernetes Management Types ────────────────────────────────────────────── export interface ClusterInfo { id: string; name: string; context: string; cluster_url: string; } export interface ContextInfo { name: string; cluster: string; user: string; } export interface ResourceInfo { name: string; namespace: string; [key: string]: unknown; } export interface PortForwardRequest { cluster_id: string; namespace: string; pod: string; container_port: number; local_port?: number; } export interface PortForwardResponse { id: string; cluster_id: string; namespace: string; pod: string; container_ports: number[]; local_ports: number[]; status: string; } export interface PodInfo { name: string; status: string; ready: string; age: string; containers: string[]; } export interface ClusterConnectionState { type: "Connected" | "Disconnected"; error?: string; } export interface ClusterConnectionStatus { status: ClusterConnectionState; context: string; } // ─── Kubernetes Resource Discovery Types ────────────────────────────────────── export interface NamespaceInfo { name: string; status: string; age: string; } export interface ServicePort { name?: string; port: number; target_port?: string; protocol: string; } export interface ServiceInfo { name: string; namespace: string; type: string; cluster_ip: string; external_ip?: string; ports: ServicePort[]; age: string; selector: Record; } export interface DeploymentInfo { name: string; namespace: string; ready: string; up_to_date: string; available: string; age: string; replicas: number; labels: Record; } export interface StatefulSetInfo { name: string; namespace: string; ready: string; age: string; replicas: number; labels: Record; } export interface DaemonSetInfo { name: string; namespace: string; desired: number; current: number; ready: number; up_to_date: number; available: number; age: string; labels: Record; } export interface NodeMetrics { name: string; cpu_usage: string; memory_usage: string; cpu_percentage: number; memory_percentage: number; age: string; } export interface PodMetrics { name: string; namespace: string; cpu_usage: string; memory_usage: string; cpu_percentage: number; memory_percentage: number; } export interface LogResponse { logs: string; } export interface ExecResponse { stdout: string; stderr: string; exit_code: number | null; } export interface ExecSessionResponse { session_id: string; cluster_id: string; namespace: string; pod: string; container?: string; status: string; } // ─── Kubernetes Management Commands ─────────────────────────────────────────── export const addClusterCmd = (id: string, name: string, kubeconfigContent: string) => invoke("add_cluster", { id, name, kubeconfig_content: kubeconfigContent }); export const removeClusterCmd = (id: string) => invoke("remove_cluster", { id }); export const connectClusterFromKubeconfigCmd = (id: string) => invoke("connect_cluster_from_kubeconfig", { id }); export const listClustersCmd = () => invoke("list_clusters"); export const startPortForwardCmd = (request: PortForwardRequest) => invoke("start_port_forward", { request }); export const stopPortForwardCmd = (id: string) => invoke("stop_port_forward", { id }); export const deletePortForwardCmd = (id: string) => invoke("delete_port_forward", { id }); export const listPortForwardsCmd = () => invoke("list_port_forwards"); export const shutdownPortForwardsCmd = () => invoke("shutdown_port_forwards"); export const testClusterConnectionCmd = (clusterId: string) => invoke("test_cluster_connection", { clusterId }); export const discoverPodsCmd = (clusterId: string, namespace: string) => invoke("discover_pods", { clusterId, namespace }); // ─── Kubernetes Resource Discovery Commands ─────────────────────────────────── export const listNamespacesCmd = (clusterId: string) => invoke("list_namespaces", { clusterId }); export const listPodsCmd = (clusterId: string, namespace: string) => invoke("list_pods", { clusterId, namespace }); export const listServicesCmd = (clusterId: string, namespace: string) => invoke("list_services", { clusterId, namespace }); export const listDeploymentsCmd = (clusterId: string, namespace: string) => invoke("list_deployments", { clusterId, namespace }); export const listStatefulsetsCmd = (clusterId: string, namespace: string) => invoke("list_statefulsets", { clusterId, namespace }); export const listDaemonsetsCmd = (clusterId: string, namespace: string) => invoke("list_daemonsets", { clusterId, namespace }); // ─── Kubernetes Resource Management Commands ────────────────────────────────── export const getPodLogsCmd = (clusterId: string, namespace: string, podName: string, containerName: string) => invoke("get_pod_logs", { clusterId, namespace, podName, containerName }); export const scaleDeploymentCmd = (clusterId: string, namespace: string, deploymentName: string, replicas: number) => invoke("scale_deployment", { clusterId, namespace, deploymentName, replicas }); export const restartDeploymentCmd = (clusterId: string, namespace: string, deploymentName: string) => invoke("restart_deployment", { clusterId, namespace, deploymentName }); export const deleteResourceCmd = (clusterId: string, resourceType: string, namespace: string, resourceName: string) => invoke("delete_resource", { clusterId, resourceType, namespace, resourceName }); export const execPodCmd = (clusterId: string, namespace: string, podName: string, containerName: string, command: string, shell?: string) => invoke("exec_pod", { clusterId, namespace, podName, containerName, shell, command }); // ─── Additional Kubernetes Resource Discovery Types ─────────────────────────── export interface ReplicaSetInfo { name: string; namespace: string; replicas: number; ready: string; age: string; labels: Record; } export interface JobInfo { name: string; namespace: string; completions: string; duration: string; age: string; labels: Record; } export interface CronJobInfo { name: string; namespace: string; schedule: string; active: number; last_schedule: string; age: string; labels: Record; } export interface ConfigMapInfo { name: string; namespace: string; data_keys: number; age: string; } export interface SecretInfo { name: string; namespace: string; type: string; data_keys: number; age: string; } export interface NodeInfo { name: string; status: string; roles: string; version: string; internal_ip: string; external_ip?: string; os_image: string; kernel_version: string; kubelet_version: string; age: string; } export interface EventInfo { name: string; namespace: string; event_type: string; reason: string; object: string; count: number; first_seen: string; last_seen: string; message: string; } export interface IngressInfo { name: string; namespace: string; class?: string; host: string; addresses: string[]; age: string; } export interface PersistentVolumeClaimInfo { name: string; namespace: string; status: string; volume: string; capacity: string; access_modes: string[]; age: string; } export interface PersistentVolumeInfo { name: string; status: string; capacity: string; access_modes: string[]; reclaim_policy: string; storage_class: string; age: string; } export interface ServiceAccountInfo { name: string; namespace: string; secrets: number; age: string; } export interface RoleInfo { name: string; namespace: string; age: string; } export interface ClusterRoleInfo { name: string; age: string; } export interface RoleBindingInfo { name: string; namespace: string; role: string; age: string; } export interface ClusterRoleBindingInfo { name: string; cluster_role: string; age: string; } export interface HorizontalPodAutoscalerInfo { name: string; namespace: string; min_replicas: number; max_replicas: number; current_replicas: number; desired_replicas: number; age: string; } // ─── Additional Kubernetes Resource Discovery Commands ──────────────────────── export const listReplicasetsCmd = (clusterId: string, namespace: string) => invoke("list_replicasets", { clusterId, namespace }); export const listJobsCmd = (clusterId: string, namespace: string) => invoke("list_jobs", { clusterId, namespace }); export const listCronjobsCmd = (clusterId: string, namespace: string) => invoke("list_cronjobs", { clusterId, namespace }); export const listConfigmapsCmd = (clusterId: string, namespace: string) => invoke("list_configmaps", { clusterId, namespace }); export const listSecretsCmd = (clusterId: string, namespace: string) => invoke("list_secrets", { clusterId, namespace }); export const listNodesCmd = (clusterId: string) => invoke("list_nodes", { clusterId }); export const listEventsCmd = (clusterId: string, namespace?: string) => invoke("list_events", { clusterId, namespace }); export const listIngressesCmd = (clusterId: string, namespace: string) => invoke("list_ingresses", { clusterId, namespace }); export const listPersistentvolumeclaimsCmd = (clusterId: string, namespace: string) => invoke("list_persistentvolumeclaims", { clusterId, namespace }); export const listPersistentvolumesCmd = (clusterId: string) => invoke("list_persistentvolumes", { clusterId }); export const listServiceaccountsCmd = (clusterId: string, namespace: string) => invoke("list_serviceaccounts", { clusterId, namespace }); export const listRolesCmd = (clusterId: string, namespace: string) => invoke("list_roles", { clusterId, namespace }); export const listClusterrolesCmd = (clusterId: string) => invoke("list_clusterroles", { clusterId }); export const listRolebindingsCmd = (clusterId: string, namespace: string) => invoke("list_rolebindings", { clusterId, namespace }); export const listClusterrolebindingsCmd = (clusterId: string) => invoke("list_clusterrolebindings", { clusterId }); export const listHorizontalpodautoscalersCmd = (clusterId: string, namespace: string) => invoke("list_horizontalpodautoscalers", { clusterId, namespace }); // ─── Additional Lens Resource Types ─────────────────────────────────────────── export interface StorageClassInfo { name: string; provisioner: string; reclaim_policy: string; volume_binding_mode: string; allow_volume_expansion: boolean; age: string; } export interface NetworkPolicyInfo { name: string; namespace: string; pod_selector: string; policy_types: string[]; age: string; } export interface ResourceQuotaInfo { name: string; namespace: string; request_cpu: string; request_memory: string; limit_cpu: string; limit_memory: string; age: string; } export interface LimitRangeInfo { name: string; namespace: string; limit_count: number; age: string; } export const listStorageclassesCmd = (clusterId: string) => invoke("list_storageclasses", { clusterId }); export const listNetworkpoliciesCmd = (clusterId: string, namespace: string) => invoke("list_networkpolicies", { clusterId, namespace }); export const listResourcequotasCmd = (clusterId: string, namespace: string) => invoke("list_resourcequotas", { clusterId, namespace }); export const listLimitrangesCmd = (clusterId: string, namespace: string) => invoke("list_limitranges", { clusterId, namespace }); // ─── Additional Kubernetes Resource Management Commands ─────────────────────── export const cordonNodeCmd = (clusterId: string, nodeName: string) => invoke("cordon_node", { clusterId, nodeName }); export const uncordonNodeCmd = (clusterId: string, nodeName: string) => invoke("uncordon_node", { clusterId, nodeName }); export const drainNodeCmd = (clusterId: string, nodeName: string) => invoke("drain_node", { clusterId, nodeName }); export const rollbackDeploymentCmd = (clusterId: string, namespace: string, deploymentName: string) => invoke("rollback_deployment", { clusterId, namespace, deploymentName }); export const createResourceCmd = (clusterId: string, namespace: string, resourceType: string, yamlContent: string) => invoke("create_resource", { clusterId, namespace, resourceType, yamlContent }); export const editResourceCmd = (clusterId: string, namespace: string, resourceType: string, resourceName: string, yamlContent: string) => invoke("edit_resource", { clusterId, namespace, resourceType, resourceName, yamlContent });