import React, { useState, useEffect } from "react"; import { useTranslation } from "react-i18next"; import { FileCode, Heart, User, IdCard, Wrench, Brain, Activity, Rocket, Power, CheckCircle2, Circle, } from "lucide-react"; import type { LucideIcon } from "lucide-react"; import { workspaceApi } from "@/lib/api/workspace"; import WorkspaceFileEditor from "./WorkspaceFileEditor"; interface WorkspaceFile { filename: string; icon: LucideIcon; descKey: string; } const WORKSPACE_FILES: WorkspaceFile[] = [ { filename: "AGENTS.md", icon: FileCode, descKey: "workspace.files.agents" }, { filename: "SOUL.md", icon: Heart, descKey: "workspace.files.soul" }, { filename: "USER.md", icon: User, descKey: "workspace.files.user" }, { filename: "IDENTITY.md", icon: IdCard, descKey: "workspace.files.identity", }, { filename: "TOOLS.md", icon: Wrench, descKey: "workspace.files.tools" }, { filename: "MEMORY.md", icon: Brain, descKey: "workspace.files.memory" }, { filename: "HEARTBEAT.md", icon: Activity, descKey: "workspace.files.heartbeat", }, { filename: "BOOTSTRAP.md", icon: Rocket, descKey: "workspace.files.bootstrap", }, { filename: "BOOT.md", icon: Power, descKey: "workspace.files.boot" }, ]; const WorkspaceFilesPanel: React.FC = () => { const { t } = useTranslation(); const [editingFile, setEditingFile] = useState(null); const [fileExists, setFileExists] = useState>({}); const checkFileExistence = async () => { const results: Record = {}; await Promise.all( WORKSPACE_FILES.map(async (f) => { try { const content = await workspaceApi.readFile(f.filename); results[f.filename] = content !== null; } catch { results[f.filename] = false; } }), ); setFileExists(results); }; useEffect(() => { void checkFileExistence(); }, []); const handleEditorClose = () => { setEditingFile(null); // Re-check file existence after closing editor (file may have been created) void checkFileExistence(); }; return (

~/.openclaw/workspace/

{WORKSPACE_FILES.map((file) => { const Icon = file.icon; const exists = fileExists[file.filename]; return ( ); })}
); }; export default WorkspaceFilesPanel;