//! AI 聊天 API — IPC invoke 封装 + 事件监听 import { invoke } from '@tauri-apps/api/core' import { listen, type UnlistenFn } from '@tauri-apps/api/event' import type { AiChatEvent, AiConversationDetail, AiConversationSummary, AiProviderConfig } from './types' export const aiApi = { /** 发送消息(非阻塞,通过 ai-chat-event 流式返回) */ sendMessage(message: string, language?: string): Promise { return invoke('ai_chat_send', { message, language: language || 'zh-CN' }) }, /** 批准/拒绝工具调用 */ approve(toolCallId: string, approved: boolean): Promise { return invoke('ai_approve', { toolCallId, approved }) }, /** 清空对话 */ clearChat(): Promise { return invoke('ai_chat_clear') }, /** 停止当前生成 */ stopChat(): Promise { return invoke('ai_chat_stop') }, /** 列出所有 AI 提供商 */ listProviders(): Promise { return invoke('ai_list_providers') }, /** 保存 AI 提供商 */ saveProvider(input: { id?: string name: string providerType: string baseUrl: string apiKey: string defaultModel: string }): Promise { return invoke('ai_save_provider', { id: input.id, name: input.name, providerType: input.providerType, baseUrl: input.baseUrl, apiKey: input.apiKey, defaultModel: input.defaultModel, }) }, /** 设置活跃提供商 */ setProvider(providerId: string): Promise { return invoke('ai_set_provider', { providerId }) }, /** 监听 AI 聊天事件 */ onEvent(callback: (event: AiChatEvent) => void): Promise { return listen('ai-chat-event', (e) => { callback(e.payload) }) }, // ── 对话管理 ── /** 创建新对话 */ createConversation(): Promise<{ id: string }> { return invoke('ai_conversation_create') }, /** 列出所有对话(摘要) */ listConversations(): Promise { return invoke('ai_conversation_list') }, /** 切换到指定对话 */ switchConversation(conversationId: string): Promise { return invoke('ai_conversation_switch', { conversationId }) }, /** 删除对话 */ deleteConversation(conversationId: string): Promise { return invoke('ai_conversation_delete', { conversationId }) }, /** 重命名对话标题 */ renameConversation(conversationId: string, title: string): Promise { return invoke('ai_conversation_rename', { conversationId, title }) }, }