// Core and Enums import { AIProvider } from "Enums/ApiProvider"; import { Environment } from "Enums/Environment"; import type VaultkeeperAIPlugin from "main"; import { AssetsService } from "./AssetsService"; // Services import { RegisterSingleton, RegisterTransient, Resolve } from "./DependencyService"; import { Services } from "./Services"; import { AbortService } from "./AbortService"; import { AIToolService } from "./AIServices/AIToolService"; import { ChatService } from "./ChatService"; import { ConversationFileSystemService } from "./ConversationFileSystemService"; import { ConversationNamingService } from "./ConversationNamingService"; import { DebugService } from "./DebugService"; import { DiffService } from "./DiffService"; import { EventService } from "./EventService"; import { PlanApprovalService } from "./PlanApprovalService"; import { FileSystemService } from "./FileSystemService"; import { HTMLService } from "./HTMLService"; import { InputService } from "./InputService"; import { MainAgent } from "./AIServices/MainAgent"; import { MemoriesService } from "./MemoriesService"; import { SanitiserService } from "./SanitiserService"; import { SettingsService, type IVaultkeeperAISettings } from "./SettingsService"; import { StreamingMarkdownService } from "./StreamingMarkdownService"; import { StreamingService } from "./StreamingService"; import { UserInputService } from "./UserInputService"; import { VaultCacheService } from "./VaultCacheService"; import { VaultService } from "./VaultService"; import { WorkSpaceService } from "./WorkSpaceService"; import { WebViewerService } from "./WebViewerService"; // Stores import { ExecutionPlanStore } from "Stores/ExecutionPlanStore"; import { SearchStateStore } from "Stores/SearchStateStore"; // Modals import { ConversationHistoryModal } from "Modals/ConversationHistoryModal"; import { HelpModal } from "Modals/HelpModal"; // AI Classes import type { IAIClass } from "AIClasses/IAIClass"; import type { IAIFileService } from "AIClasses/IAIFileService"; import type { IConversationNamingAgent } from "AIClasses/IConversationNamingAgent"; import { Claude } from "AIClasses/Claude/Claude"; import { ClaudeConversationNamingAgent } from "AIClasses/Claude/ClaudeConversationNamingAgent"; import { ClaudeFileService } from "AIClasses/Claude/ClaudeFileService"; import { Gemini } from "AIClasses/Gemini/Gemini"; import { GeminiConversationNamingAgent } from "AIClasses/Gemini/GeminiConversationNamingAgent"; import { GeminiFileService } from "AIClasses/Gemini/GeminiFileService"; import { Mistral } from "AIClasses/Mistral/Mistral"; import { MistralConversationNamingAgent } from "AIClasses/Mistral/MistralConversationNamingAgent"; import { MistralFileService } from "AIClasses/Mistral/MistralFileService"; import { OpenAI } from "AIClasses/OpenAI/OpenAI"; import { OpenAIConversationNamingAgent } from "AIClasses/OpenAI/OpenAIConversationNamingAgent"; import { OpenAIFileService } from "AIClasses/OpenAI/OpenAIFileService"; import { Local } from "AIClasses/Local/Local"; import { LocalConversationNamingAgent } from "AIClasses/Local/LocalConversationNamingAgent"; import { LocalFileService } from "AIClasses/Local/LocalFileService"; // Prompts import { AIPrompt, type IPrompt } from "AIPrompts/IPrompt"; import { QuickAgent } from "./AIServices/QuickAgent"; import { QuickActionsDefinitionsService } from "./QuickActions/QuickActionsDefinitionsService"; import { QuickActionsService } from "./QuickActions/QuickActionsService"; export async function RegisterPlugin(plugin: VaultkeeperAIPlugin) { RegisterSingleton(Services.VaultkeeperAIPlugin, plugin); RegisterSingleton(Services.SettingsService, new SettingsService(await plugin.loadData() as Partial)); RegisterSingleton(Services.AssetsService, new AssetsService()); } export function RegisterDependencies() { if (process.env.NODE_ENV === Environment.DEV) { RegisterTransient(Services.DebugService, () => new DebugService()); } 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.PlanApprovalService, new PlanApprovalService()); RegisterSingleton(Services.VaultService, new VaultService()); RegisterSingleton(Services.VaultCacheService, new VaultCacheService()); RegisterSingleton(Services.FileSystemService, new FileSystemService()); RegisterSingleton(Services.SearchStateStore, new SearchStateStore()); RegisterSingleton(Services.ExecutionPlanStore, new ExecutionPlanStore()); RegisterSingleton(Services.UserInputService, new UserInputService()); RegisterSingleton(Services.WorkSpaceService, new WorkSpaceService()); RegisterSingleton(Services.MemoriesService, new MemoriesService()); RegisterSingleton(Services.ConversationFileSystemService, new ConversationFileSystemService()); RegisterSingleton(Services.ConversationNamingService, new ConversationNamingService()); RegisterSingleton(Services.QuickActionsDefinitionsService, new QuickActionsDefinitionsService()); RegisterSingleton(Services.QuickActionsService, new QuickActionsService()); RegisterTransient(Services.WebViewerService, () => new WebViewerService()); RegisterSingleton(Services.IPrompt, new AIPrompt()); RegisterSingleton(Services.AIToolService, new AIToolService()); RegisterSingleton(Services.MainAgent, new MainAgent()); RegisterSingleton(Services.StreamingService, new StreamingService()); RegisterSingleton(Services.ChatService, new ChatService()); RegisterTransient(Services.QuickAgent, () => new QuickAgent()); RegisterTransient(Services.StreamingMarkdownService, () => new StreamingMarkdownService()); RegisterTransient(Services.InputService, () => new InputService()); RegisterModals(); RegisterAiProvider(); } export function RegisterAiProvider() { const settingsService = Resolve(Services.SettingsService); const provider = settingsService.settings.provider; if (provider == AIProvider.Claude) { RegisterSingleton(Services.IAIFileService, new ClaudeFileService()); RegisterSingleton(Services.IAIClass, new Claude()); RegisterSingleton(Services.IConversationNamingService, new ClaudeConversationNamingAgent()); } else if (provider == AIProvider.Gemini) { RegisterSingleton(Services.IAIFileService, new GeminiFileService()); RegisterSingleton(Services.IAIClass, new Gemini()); RegisterSingleton(Services.IConversationNamingService, new GeminiConversationNamingAgent()); } else if (provider == AIProvider.OpenAI) { RegisterSingleton(Services.IAIFileService, new OpenAIFileService()); RegisterSingleton(Services.IAIClass, new OpenAI()); RegisterSingleton(Services.IConversationNamingService, new OpenAIConversationNamingAgent()); } else if (provider == AIProvider.Mistral) { RegisterSingleton(Services.IAIFileService, new MistralFileService()); RegisterSingleton(Services.IAIClass, new Mistral()); RegisterSingleton(Services.IConversationNamingService, new MistralConversationNamingAgent()); } else if (provider == AIProvider.Local) { RegisterSingleton(Services.IAIFileService, new LocalFileService()); RegisterSingleton(Services.IAIClass, new Local()); RegisterSingleton(Services.IConversationNamingService, new LocalConversationNamingAgent()); } Resolve(Services.MainAgent).resolveAIProvider(); Resolve(Services.ConversationNamingService).resolveNamingProvider(); Resolve(Services.ConversationFileSystemService).resolveAIFileService(); } function RegisterModals() { RegisterTransient(Services.ConversationHistoryModal, () => new ConversationHistoryModal()); RegisterTransient(Services.HelpModal, () => new HelpModal()) }