"use client"; import { SparklesIcon } from "lucide-react"; import { useRouter } from "next/navigation"; import { useMemo, useState } from "react"; import { Button } from "@/components/ui/button"; import { Empty, EmptyContent, EmptyDescription, EmptyHeader, EmptyMedia, EmptyTitle, } from "@/components/ui/empty"; import { Item, ItemActions, ItemTitle, ItemContent, ItemDescription, } from "@/components/ui/item"; import { Switch } from "@/components/ui/switch"; import { Tabs, TabsList, TabsTrigger } from "@/components/ui/tabs"; import { useI18n } from "@/core/i18n/hooks"; import { useEnableSkill, useSkills } from "@/core/skills/hooks"; import type { Skill } from "@/core/skills/type"; import { env } from "@/env"; import { SettingsSection } from "./settings-section"; export function SkillSettingsPage({ onClose }: { onClose?: () => void } = {}) { const { t } = useI18n(); const { skills, isLoading, error } = useSkills(); return ( {isLoading ? (
{t.common.loading}
) : error ? (
Error: {error.message}
) : ( )}
); } function SkillSettingsList({ skills, onClose, }: { skills: Skill[]; onClose?: () => void; }) { const { t } = useI18n(); const router = useRouter(); const [filter, setFilter] = useState("public"); const { mutate: enableSkill } = useEnableSkill(); const filteredSkills = useMemo( () => skills.filter((skill) => skill.category === filter), [skills, filter], ); const handleCreateSkill = () => { onClose?.(); router.push("/workspace/chats/new?mode=skill"); }; return (
{t.common.public} {t.common.custom}
{filteredSkills.length === 0 && ( )} {filteredSkills.length > 0 && filteredSkills.map((skill) => (
{skill.name}
{skill.description}
enableSkill({ skillName: skill.name, enabled: checked }) } />
))}
); } function EmptySkill({ onCreateSkill }: { onCreateSkill: () => void }) { return ( No agent skill yet Put your agent skill folders under the `/skills/custom` folder under the root folder of DeerFlow. ); }