client.ts
Language TypeScript3.9 KB102 lines
// The interface to Rust. Components only ever see this, so the same app runs// against the real shell (tauri.ts) or in a plain browser on sample data// (mock/mockClient.ts), which is how the UI tests and screenshots run.import type { AppInfo } from './gen/AppInfo'import type { AttachmentMeta } from './gen/AttachmentMeta'import type { Conversation } from './gen/Conversation'import type { ConversationSummary } from './gen/ConversationSummary'import type { ConversationView } from './gen/ConversationView'import type { Estimate } from './gen/Estimate'import type { ExportResult } from './gen/ExportResult'import type { KeySaved } from './gen/KeySaved'import type { ModelsResponse } from './gen/ModelsResponse'import type { Preset } from './gen/Preset'import type { Provider } from './gen/Provider'import type { SaveSettingsResult } from './gen/SaveSettingsResult'import type { SearchHit } from './gen/SearchHit'import type { SendAck } from './gen/SendAck'import type { SendRequest } from './gen/SendRequest'import type { Settings } from './gen/Settings'import type { SpendSummary } from './gen/SpendSummary'import type { StreamEvent } from './gen/StreamEvent'import type { UsageReport } from './gen/UsageReport'export type AppEvent =| 'open-conversation'| 'new-chat'| 'open-settings'| 'conversations-changed'| 'models-updated'| 'settings-changed'| 'quick-shown'export interface EstimateArgs {conversationId: string | nullproviderId: stringmodelId: stringtext: stringimageCount: numberextraText?: string}export interface IpcClient {appInfo(): Promise<AppInfo>windowReady(): Promise<void>showMain(): Promise<void>listProviders(): Promise<Provider[]>saveProvider(provider: Provider): Promise<Provider>deleteProvider(id: string): Promise<void>setApiKey(providerId: string, key: string): Promise<KeySaved>clearApiKey(providerId: string): Promise<void>hasApiKey(providerId: string): Promise<boolean>listModels(providerId: string): Promise<ModelsResponse>refreshModels(providerId: string): Promise<ModelsResponse>listConversations(includeArchived: boolean): Promise<ConversationSummary[]>getConversation(id: string): Promise<ConversationView>createConversation(providerId: string,modelId: string,presetId: string | null,origin: 'main' | 'quick',): Promise<Conversation>renameConversation(id: string, title: string): Promise<void>setPinned(id: string, pinned: boolean): Promise<void>setArchived(id: string, archived: boolean): Promise<void>deleteConversation(id: string): Promise<void>setConversationModel(id: string, providerId: string, modelId: string): Promise<void>setSystemPrompt(id: string, systemPrompt: string, presetId: string | null): Promise<void>sendMessage(req: SendRequest, onEvent: (e: StreamEvent) => void): Promise<SendAck>cancelStream(streamId: string): Promise<void>truncateFrom(conversationId: string, messageId: string): Promise<void>estimatePrompt(args: EstimateArgs): Promise<Estimate>search(query: string): Promise<SearchHit[]>spendSummary(): Promise<SpendSummary>usageReport(days: number | null): Promise<UsageReport>listPresets(): Promise<Preset[]>savePreset(preset: Preset): Promise<Preset>deletePreset(id: string): Promise<void>getSettings(): Promise<Settings>saveSettings(settings: Settings): Promise<SaveSettingsResult>pickAttachments(imagesAllowed: boolean): Promise<AttachmentMeta[]>attachBytes(filename: string, bytes: Uint8Array): Promise<AttachmentMeta>attachmentBytes(id: string): Promise<ArrayBuffer>discardAttachment(id: string): Promise<void>exportConversation(id: string): Promise<ExportResult>chooseVaultFolder(): Promise<string | null>quickOpenInMain(conversationId: string): Promise<void>hideQuick(): Promise<void>resizeQuick(height: number): Promise<void>openUrl(url: string): Promise<void>on(event: AppEvent, handler: (payload: unknown) => void): Promise<() => void>}