import { memo } from "react"; import type * as React from "react"; import { useUIStore } from "@/store/uiStore"; import AnimatedBrain from "@/components/chat/AnimatedBrain"; import { IconConnectors, IconSettings as IconSettingsSvg, } from "@/components/TabIcons"; import { FolderOpen, Activity, Bug, GitBranch, Rocket, Database, Lock, } from "lucide-react"; // S761: estratto da MainWorkspace.tsx (AUDIT P0 — decomposizione MoreTab) // Tutte le azioni leggono UIStore direttamente — zero prop drilling. // Unico prop esterno: onNewProject (local useState in MainWorkspace — non in store). interface WorkspaceMoreMenuProps { /** Callback per aprire NewProjectPanel (local useState in MainWorkspace) */ onNewProject: () => void; } const WorkspaceMoreMenu = memo(function WorkspaceMoreMenu(_props: WorkspaceMoreMenuProps) { const tab = useUIStore(s => s.activeTab); const setShowMemory = useUIStore(s => s.setShowMemory); const setShowConnectors = useUIStore(s => s.setShowConnectors); const setShowFileExplorer = useUIStore(s => s.setShowFileExplorer); const setShowSettings = useUIStore(s => s.setShowSettings); const toggleTelemetry = useUIStore(s => s.toggleTelemetry); const toggleWorkspacePicker = useUIStore(s => s.toggleWorkspacePicker); const toggleGitSync = useUIStore(s => s.toggleGitSync); const toggleDeployPanel = useUIStore(s => s.toggleDeployPanel); const toggleProblems = useUIStore(s => s.toggleProblems); const toggleDbBrowser = useUIStore(s => s.toggleDbBrowser); const toggleSecretsPanel = useUIStore(s => s.toggleSecretsPanel); const setShowNewProject = useUIStore(s => s.setShowNewProject); const items: { icon: React.ReactNode; label: string; desc: string; onClick: () => void }[] = [ { icon: , label: "Memoria Agente", desc: "Ricordi, sessioni, pattern appresi", onClick: () => setShowMemory(true) }, { icon: , label: "Connettori API", desc: "Servizi REST collegati all'agente", onClick: () => setShowConnectors(true) }, { icon: , label: "File System VFS", desc: "Esplora, carica ed esporta file nel VFS", onClick: () => setShowFileExplorer(true) }, { icon: , label: "Impostazioni", desc: "Token provider, modello AI, routing", onClick: () => setShowSettings(true) }, { icon: , label: "Statistiche", desc: "TTFT provider, tool usage, success rate", onClick: toggleTelemetry }, { icon: , label: "Workspace", desc: "Gestisci workspace multipli", onClick: toggleWorkspacePicker }, { icon: 🏗, label: "Nuovo progetto", desc: "Scaffold react/nextjs/fastapi/flask/…", onClick: () => setShowNewProject(true) }, { icon: , label: "Git Sync", desc: "Pull, diff e push VFS ↔ GitHub", onClick: toggleGitSync }, { icon: , label: "Deploy", desc: "Publish su Cloudflare Pages — 1 click", onClick: toggleDeployPanel }, { icon: , label: "Problemi", desc: "Diagnostics, run profiles e stato CI/CD", onClick: toggleProblems }, { icon: , label: "Database", desc: "Esplora tabelle IndexedDB, export, stats", onClick: toggleDbBrowser }, { icon: , label: "Segreti", desc: "Vault segreti cifrati — Railway", onClick: toggleSecretsPanel }, ]; return (

STRUMENTI / TOOLS

{items.map(item => ( ))}
); }); export default WorkspaceMoreMenu;