mirror of
https://github.com/andy-stack/vaultkeeper-ai.git
synced 2026-07-22 06:42:03 +00:00
Add memories feature allowing AI to retain vault conventions, user preferences, and established workflows across conversation sessions. Include read-only mode option, validation requiring read-before-write, and settings UI with toggle controls. Adjusted default search and snippet size values in plugin settings.
60 lines
No EOL
1.8 KiB
TypeScript
60 lines
No EOL
1.8 KiB
TypeScript
import type VaultkeeperAIPlugin from "main";
|
|
import path from "path-browserify";
|
|
|
|
export function openPluginSettings(plugin: VaultkeeperAIPlugin) {
|
|
if (!("setting" in plugin.app) || typeof plugin.app.setting !== "object" || plugin.app.setting === null) {
|
|
return;
|
|
}
|
|
|
|
if ("open" in plugin.app.setting) {
|
|
// @ts-expect-error - accessing internal API
|
|
plugin.app.setting.open();
|
|
}
|
|
if ("openTabById" in plugin.app.setting) {
|
|
// @ts-expect-error - accessing internal API
|
|
plugin.app.setting.openTabById(plugin.manifest.id);
|
|
}
|
|
}
|
|
|
|
export function closePluginSettings(plugin: VaultkeeperAIPlugin) {
|
|
if (!("setting" in plugin.app) || typeof plugin.app.setting !== "object" || plugin.app.setting === null) {
|
|
return;
|
|
}
|
|
|
|
if ("close" in plugin.app.setting) {
|
|
// @ts-expect-error - accessing internal API
|
|
plugin.app.setting.close();
|
|
}
|
|
}
|
|
|
|
export function randomSample<T>(array: T[], n: number): T[] {
|
|
const result: T[] = [];
|
|
const taken = new Set<number>();
|
|
|
|
while (result.length < n && result.length < array.length) {
|
|
const index = Math.floor(Math.random() * array.length);
|
|
if (!taken.has(index)) {
|
|
taken.add(index);
|
|
result.push(array[index]);
|
|
}
|
|
}
|
|
|
|
return result;
|
|
}
|
|
|
|
export function shuffleArray<T>(array: T[]): T[] {
|
|
const shuffled = [...array];
|
|
for (let i = shuffled.length - 1; i > 0; i--) {
|
|
const j = Math.floor(Math.random() * (i + 1));
|
|
[shuffled[i], shuffled[j]] = [shuffled[j], shuffled[i]];
|
|
}
|
|
return shuffled;
|
|
}
|
|
|
|
export function pathExtname(filePath: string) {
|
|
return path.extname(filePath).substring(1).toLocaleLowerCase();
|
|
}
|
|
|
|
export async function sleep(ms: number): Promise<void> {
|
|
return new Promise(resolve => setTimeout(resolve, ms));
|
|
} |