tauri.ts
Language TypeScript3.7 KB82 lines
import { Channel, invoke } from '@tauri-apps/api/core'import { listen } from '@tauri-apps/api/event'import { openUrl } from '@tauri-apps/plugin-opener'import type { IpcClient } from './client'import type { StreamEvent } from './gen/StreamEvent'// Tauri turns camelCase argument names into the Rust commands' snake_case.export const tauriClient: IpcClient = {appInfo: () => invoke('app_info'),windowReady: () => invoke('window_ready'),showMain: () => invoke('show_main'),listProviders: () => invoke('list_providers'),saveProvider: (provider) => invoke('save_provider', { provider }),deleteProvider: (id) => invoke('delete_provider', { id }),setApiKey: (providerId, key) => invoke('set_api_key', { providerId, key }),clearApiKey: (providerId) => invoke('clear_api_key', { providerId }),hasApiKey: (providerId) => invoke('has_api_key', { providerId }),listModels: (providerId) => invoke('list_models', { providerId }),refreshModels: (providerId) => invoke('refresh_models', { providerId }),listConversations: (includeArchived) => invoke('list_conversations', { includeArchived }),getConversation: (id) => invoke('get_conversation', { id }),createConversation: (providerId, modelId, presetId, origin) =>invoke('create_conversation', { providerId, modelId, presetId, origin }),renameConversation: (id, title) => invoke('rename_conversation', { id, title }),setPinned: (id, pinned) => invoke('set_pinned', { id, pinned }),setArchived: (id, archived) => invoke('set_archived', { id, archived }),deleteConversation: (id) => invoke('delete_conversation', { id }),setConversationModel: (id, providerId, modelId) => invoke('set_conversation_model', { id, providerId, modelId }),setSystemPrompt: (id, systemPrompt, presetId) => invoke('set_system_prompt', { id, systemPrompt, presetId }),sendMessage: (req, onEvent) => {const channel = new Channel<StreamEvent>()channel.onmessage = onEventreturn invoke('send_message', { req, onEvent: channel })},cancelStream: (streamId) => invoke('cancel_stream', { streamId }),truncateFrom: (conversationId, messageId) => invoke('truncate_from', { conversationId, messageId }),estimatePrompt: (a) =>invoke('estimate_prompt', {conversationId: a.conversationId,providerId: a.providerId,modelId: a.modelId,text: a.text,imageCount: a.imageCount,extraText: a.extraText ?? null,}),search: (query) => invoke('search', { query }),spendSummary: () => invoke('spend_summary'),usageReport: (days) => invoke('usage_report', { days }),listPresets: () => invoke('list_presets'),savePreset: (preset) => invoke('save_preset', { preset }),deletePreset: (id) => invoke('delete_preset', { id }),getSettings: () => invoke('get_settings'),saveSettings: (settings) => invoke('save_settings', { settings }),pickAttachments: (imagesAllowed) => invoke('pick_attachments', { imagesAllowed }),// Raw bytes in the body, the name in a header: no JSON number arrays.attachBytes: (filename, bytes) =>invoke('attach_bytes', bytes, { headers: { 'x-filename': encodeURIComponent(filename) } }),attachmentBytes: (id) => invoke('attachment_bytes', { id }),discardAttachment: (id) => invoke('discard_attachment', { id }),exportConversation: (id) => invoke('export_conversation', { id }),chooseVaultFolder: () => invoke('choose_vault_folder'),quickOpenInMain: (conversationId) => invoke('quick_open_in_main', { conversationId }),hideQuick: () => invoke('hide_quick'),resizeQuick: (height) => invoke('resize_quick', { height }),openUrl: (url) => openUrl(url),on: async (event, handler) => {const un = await listen(event, (e) => handler(e.payload))return un},}