import { AIProvider, fromModel } from "Enums/ApiProvider"; import type VaultkeeperAIPlugin from "main"; import { RegisterSingleton, RegisterTransient, Resolve } from "./DependencyService"; import { Services } from "./Services"; import { AIPrompt, type IPrompt } from "AIPrompts/IPrompt"; import type { IAIClass } from "AIClasses/IAIClass"; import type { IConversationNamingService } from "AIClasses/IConversationNamingService"; import { Gemini } from "AIClasses/Gemini/Gemini"; import { GeminiConversationNamingService } from "AIClasses/Gemini/GeminiConversationNamingService"; import { StreamingMarkdownService } from "./StreamingMarkdownService"; import { FileSystemService } from "./FileSystemService"; import { ConversationFileSystemService } from "./ConversationFileSystemService"; import { ConversationHistoryModal } from "Modals/ConversationHistoryModal"; import { AIFunctionService } from "./AIFunctionService"; import { StreamingService } from "./StreamingService"; import { WorkSpaceService } from "./WorkSpaceService"; import { ChatService } from "./ChatService"; import { ConversationNamingService } from "./ConversationNamingService"; import { VaultService } from "./VaultService"; import { ClaudeConversationNamingService } from "AIClasses/Claude/ClaudeConversationNamingService"; import { Claude } from "AIClasses/Claude/Claude"; import { OpenAIConversationNamingService } from "AIClasses/OpenAI/OpenAIConversationNamingService"; import { OpenAI } from "AIClasses/OpenAI/OpenAI"; import { SanitiserService } from "./SanitiserService"; import { VaultCacheService } from "./VaultCacheService"; import { UserInputService } from "./UserInputService"; import { SearchStateStore } from "Stores/SearchStateStore"; import { InputService } from "./InputService"; import { HTMLService } from "./HTMLService"; import { SettingsService, type IVaultkeeperAISettings } from "./SettingsService"; import { HelpModal } from "Modals/HelpModal"; import { EventService } from "./EventService"; import { DiffService } from "./DiffService"; import { AbortService } from "./AbortService"; import type { IAIFileService } from "AIClasses/IAIFileService"; import { ClaudeFileService } from "AIClasses/Claude/ClaudeFileService"; import { GeminiFileService } from "AIClasses/Gemini/GeminiFileService"; import { OpenAIFileService } from "AIClasses/OpenAI/OpenAIFileService"; import { AIControllerService } from "./AIControllerService"; export async function RegisterPlugin(plugin: VaultkeeperAIPlugin) { RegisterSingleton(Services.VaultkeeperAIPlugin, plugin); RegisterSingleton(Services.SettingsService, new SettingsService(await plugin.loadData() as Partial)); } export function RegisterDependencies() { RegisterSingleton(Services.EventService, new EventService()); RegisterSingleton(Services.AbortService, new AbortService()); RegisterSingleton(Services.HTMLService, new HTMLService()); RegisterSingleton(Services.SanitiserService, new SanitiserService()); RegisterSingleton(Services.DiffService, new DiffService()); RegisterSingleton(Services.VaultService, new VaultService()); RegisterSingleton(Services.VaultCacheService, new VaultCacheService()); RegisterSingleton(Services.SearchStateStore, new SearchStateStore()); RegisterSingleton(Services.UserInputService, new UserInputService()); RegisterSingleton(Services.WorkSpaceService, new WorkSpaceService()); RegisterSingleton(Services.FileSystemService, new FileSystemService()); RegisterSingleton(Services.ConversationFileSystemService, new ConversationFileSystemService()); RegisterSingleton(Services.ConversationNamingService, new ConversationNamingService()); RegisterSingleton(Services.IPrompt, new AIPrompt()); RegisterSingleton(Services.AIFunctionService, new AIFunctionService()); RegisterSingleton(Services.AIControllerService, new AIControllerService()); RegisterSingleton(Services.StreamingService, new StreamingService()); RegisterSingleton(Services.ChatService, new ChatService()); RegisterTransient(Services.StreamingMarkdownService, () => new StreamingMarkdownService()); RegisterTransient(Services.InputService, () => new InputService()); RegisterModals(); RegisterAiProvider(); } export function RegisterAiProvider() { const settingsService = Resolve(Services.SettingsService); const provider = fromModel(settingsService.settings.model); if (provider == AIProvider.Claude) { RegisterSingleton(Services.IAIFileService, new ClaudeFileService()); RegisterSingleton(Services.IAIClass, new Claude()); RegisterSingleton(Services.IConversationNamingService, new ClaudeConversationNamingService()); } else if (provider == AIProvider.Gemini) { RegisterSingleton(Services.IAIFileService, new GeminiFileService()); RegisterSingleton(Services.IAIClass, new Gemini()); RegisterSingleton(Services.IConversationNamingService, new GeminiConversationNamingService()); } else if (provider == AIProvider.OpenAI) { RegisterSingleton(Services.IAIFileService, new OpenAIFileService()); RegisterSingleton(Services.IAIClass, new OpenAI()); RegisterSingleton(Services.IConversationNamingService, new OpenAIConversationNamingService()); } Resolve(Services.AIControllerService).resolveAIProvider(); Resolve(Services.ConversationNamingService).resolveNamingProvider(); Resolve(Services.ConversationFileSystemService).resolveAIFileService(); } function RegisterModals() { RegisterTransient(Services.ConversationHistoryModal, () => new ConversationHistoryModal()); RegisterTransient(Services.HelpModal, () => new HelpModal()) }