import React, { useEffect, useState, useRef } from "react"; import Toggle, { SimpleToggleSwitch } from "@/components/lib/Toggle"; import { Link } from "react-router-dom"; import { useTranslation, Trans } from "react-i18next"; import { Warning, File, Files, PencilSimple, FloppyDisk, FolderPlus, FolderOpen, ArrowsLeftRight, MagnifyingGlass, Info, CircleNotch, Copy, } from "@phosphor-icons/react"; import Admin from "@/models/admin"; export const getFileSystemSubSkills = (t) => { return [ { name: "filesystem-read-text-file", title: t("agent.skill.filesystem.skills.read-text-file.title"), description: t( "agent.skill.filesystem.skills.read-text-file.description" ), icon: File, category: "read", }, { name: "filesystem-read-multiple-files", title: t("agent.skill.filesystem.skills.read-multiple-files.title"), description: t( "agent.skill.filesystem.skills.read-multiple-files.description" ), icon: Files, category: "read", }, { name: "filesystem-list-directory", title: t("agent.skill.filesystem.skills.list-directory.title"), description: t( "agent.skill.filesystem.skills.list-directory.description" ), icon: FolderOpen, category: "read", }, { name: "filesystem-search-files", title: t("agent.skill.filesystem.skills.search-files.title"), description: t("agent.skill.filesystem.skills.search-files.description"), icon: MagnifyingGlass, category: "read", }, { name: "filesystem-get-file-info", title: t("agent.skill.filesystem.skills.get-file-info.title"), description: t("agent.skill.filesystem.skills.get-file-info.description"), icon: Info, category: "read", }, { name: "filesystem-write-text-file", title: t("agent.skill.filesystem.skills.write-text-file.title"), description: t( "agent.skill.filesystem.skills.write-text-file.description" ), icon: FloppyDisk, category: "write", }, { name: "filesystem-edit-file", title: t("agent.skill.filesystem.skills.edit-file.title"), description: t("agent.skill.filesystem.skills.edit-file.description"), icon: PencilSimple, category: "write", }, { name: "filesystem-create-directory", title: t("agent.skill.filesystem.skills.create-directory.title"), description: t( "agent.skill.filesystem.skills.create-directory.description" ), icon: FolderPlus, category: "write", }, { name: "filesystem-copy-file", title: t("agent.skill.filesystem.skills.copy-file.title"), description: t("agent.skill.filesystem.skills.copy-file.description"), icon: Copy, category: "write", }, { name: "filesystem-move-file", title: t("agent.skill.filesystem.skills.move-file.title"), description: t("agent.skill.filesystem.skills.move-file.description"), icon: ArrowsLeftRight, category: "write", }, ]; }; export default function FileSystemSkillPanel({ title, skill, toggleSkill, enabled = false, disabled = false, image, icon, setHasChanges, hasChanges = false, }) { const { t } = useTranslation(); const [disabledSubSkills, setDisabledSubSkills] = useState([]); const [loading, setLoading] = useState(true); const prevHasChanges = useRef(hasChanges); const FILESYSTEM_SUB_SKILLS = getFileSystemSubSkills(t); useEffect(() => { setLoading(true); Admin.systemPreferencesByFields(["disabled_filesystem_skills"]) .then((res) => setDisabledSubSkills(res?.settings?.disabled_filesystem_skills ?? []) ) .catch(() => setDisabledSubSkills([])) .finally(() => setLoading(false)); }, []); useEffect(() => { if (prevHasChanges.current === true && hasChanges === false) { Admin.systemPreferencesByFields(["disabled_filesystem_skills"]) .then((res) => setDisabledSubSkills(res?.settings?.disabled_filesystem_skills ?? []) ) .catch(() => {}); } prevHasChanges.current = hasChanges; }, [hasChanges]); function toggleSubSkill(subSkillName) { setHasChanges(true); setDisabledSubSkills((prev) => { if (prev.includes(subSkillName)) { return prev.filter((s) => s !== subSkillName); } return [...prev, subSkillName]; }); } const readSkills = FILESYSTEM_SUB_SKILLS.filter((s) => s.category === "read"); const writeSkills = FILESYSTEM_SUB_SKILLS.filter( (s) => s.category === "write" ); return (
{t("agent.skill.filesystem.description")}
{t("agent.skill.filesystem.learnMore")} →{t("agent.skill.filesystem.configuration")}
{t("agent.skill.filesystem.readActions")}