mirror of
https://github.com/MODSetter/SurfSense.git
synced 2026-04-25 08:46:22 +02:00
feat(web): connect new chat UI to agent filesystem APIs
This commit is contained in:
parent
5c3a327a0c
commit
4899588cd7
5 changed files with 209 additions and 1 deletions
74
surfsense_desktop/src/modules/agent-filesystem.ts
Normal file
74
surfsense_desktop/src/modules/agent-filesystem.ts
Normal file
|
|
@ -0,0 +1,74 @@
|
|||
import { app, dialog } from "electron";
|
||||
import { mkdir, readFile, writeFile } from "node:fs/promises";
|
||||
import { dirname, join } from "node:path";
|
||||
|
||||
export type AgentFilesystemMode = "cloud" | "desktop_local_folder";
|
||||
|
||||
export interface AgentFilesystemSettings {
|
||||
mode: AgentFilesystemMode;
|
||||
localRootPath: string | null;
|
||||
updatedAt: string;
|
||||
}
|
||||
|
||||
const SETTINGS_FILENAME = "agent-filesystem-settings.json";
|
||||
|
||||
function getSettingsPath(): string {
|
||||
return join(app.getPath("userData"), SETTINGS_FILENAME);
|
||||
}
|
||||
|
||||
function getDefaultSettings(): AgentFilesystemSettings {
|
||||
return {
|
||||
mode: "cloud",
|
||||
localRootPath: null,
|
||||
updatedAt: new Date().toISOString(),
|
||||
};
|
||||
}
|
||||
|
||||
export async function getAgentFilesystemSettings(): Promise<AgentFilesystemSettings> {
|
||||
try {
|
||||
const raw = await readFile(getSettingsPath(), "utf8");
|
||||
const parsed = JSON.parse(raw) as Partial<AgentFilesystemSettings>;
|
||||
if (parsed.mode !== "cloud" && parsed.mode !== "desktop_local_folder") {
|
||||
return getDefaultSettings();
|
||||
}
|
||||
return {
|
||||
mode: parsed.mode,
|
||||
localRootPath: parsed.localRootPath ?? null,
|
||||
updatedAt: parsed.updatedAt ?? new Date().toISOString(),
|
||||
};
|
||||
} catch {
|
||||
return getDefaultSettings();
|
||||
}
|
||||
}
|
||||
|
||||
export async function setAgentFilesystemSettings(
|
||||
settings: Partial<Pick<AgentFilesystemSettings, "mode" | "localRootPath">>
|
||||
): Promise<AgentFilesystemSettings> {
|
||||
const current = await getAgentFilesystemSettings();
|
||||
const nextMode =
|
||||
settings.mode === "cloud" || settings.mode === "desktop_local_folder"
|
||||
? settings.mode
|
||||
: current.mode;
|
||||
const next: AgentFilesystemSettings = {
|
||||
mode: nextMode,
|
||||
localRootPath:
|
||||
settings.localRootPath === undefined ? current.localRootPath : settings.localRootPath,
|
||||
updatedAt: new Date().toISOString(),
|
||||
};
|
||||
|
||||
const settingsPath = getSettingsPath();
|
||||
await mkdir(dirname(settingsPath), { recursive: true });
|
||||
await writeFile(settingsPath, JSON.stringify(next, null, 2), "utf8");
|
||||
return next;
|
||||
}
|
||||
|
||||
export async function pickAgentFilesystemRoot(): Promise<string | null> {
|
||||
const result = await dialog.showOpenDialog({
|
||||
title: "Select local folder for Agent Filesystem",
|
||||
properties: ["openDirectory"],
|
||||
});
|
||||
if (result.canceled || result.filePaths.length === 0) {
|
||||
return null;
|
||||
}
|
||||
return result.filePaths[0] ?? null;
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue