andy-stack_vaultkeeper-ai/Helpers/Helpers.ts
Andrew Beal f1e6619923 feat: add memory system for cross-session context retention
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.
2026-04-04 20:04:41 +01:00

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));
}