andy-stack_vaultkeeper-ai/Services/SettingsService.ts
Andrew Beal 4d8edc8b96 Update delete functionality to support folders and use trash
- Enhance DeleteVaultFiles to handle both files and folders
- Change VaultService.delete to use vault.trash instead of permanent deletion
- Remove TFile type check to allow folder deletion
- Simplify delete method signature by removing unused force parameter
- Increase default snippet size limit from 150 to 300 characters
- Fix IPrompt to use SettingsService instead of direct plugin access
- Update all tests to reflect trash behavior and folder support
2025-11-03 21:37:47 +00:00

86 lines
No EOL
2.3 KiB
TypeScript

import type AIAgentPlugin from "main";
import { Resolve } from "./DependencyService";
import { Services } from "./Services";
import { AIProvider, AIProviderModel } from "Enums/ApiProvider";
const DEFAULT_SETTINGS: IAIAgentSettings = {
firstTimeStart: true,
userInstruction: "",
model: AIProviderModel.ClaudeSonnet_4_5,
apiKeys: {
claude: "",
openai: "",
gemini: ""
},
exclusions: [],
searchResultsLimit: 15,
snippetSizeLimit: 300
}
export interface IAIAgentSettings {
firstTimeStart: boolean;
userInstruction: string;
model: string;
apiKeys: {
claude: string;
openai: string;
gemini: string;
};
exclusions: string[];
searchResultsLimit: number;
snippetSizeLimit: number;
}
export class SettingsService {
private readonly plugin: AIAgentPlugin;
public readonly settings: IAIAgentSettings;
public constructor(loadedSettings: Partial<IAIAgentSettings>) {
this.plugin = Resolve<AIAgentPlugin>(Services.AIAgentPlugin);
this.settings = Object.assign({}, DEFAULT_SETTINGS, loadedSettings);
}
public async saveSettings(onSave?: () => void) {
await this.plugin.saveData(this.settings);
if (onSave) {
onSave();
}
}
public getApiKeyForCurrentModel(): string {
const provider = AIProvider.fromModel(this.settings.model);
return this.getApiKeyForProvider(provider);
}
public getApiKeyForProvider(provider: AIProvider): string {
switch (provider) {
case AIProvider.Claude:
return this.settings.apiKeys.claude;
case AIProvider.OpenAI:
return this.settings.apiKeys.openai;
case AIProvider.Gemini:
return this.settings.apiKeys.gemini;
}
}
public setApiKeyForProvider(provider: AIProvider, key: string): void {
switch (provider) {
case AIProvider.Claude:
this.settings.apiKeys.claude = key;
break;
case AIProvider.OpenAI:
this.settings.apiKeys.openai = key;
break;
case AIProvider.Gemini:
this.settings.apiKeys.gemini = key;
break;
}
}
}