import { useEffect, useRef, useState } from "react"; import { Tooltip } from "react-tooltip"; import { At } from "@phosphor-icons/react"; import { useIsAgentSessionActive } from "@/utils/chat/agent"; import { useTranslation } from "react-i18next"; import { useSearchParams } from "react-router-dom"; export default function AvailableAgentsButton({ showing, setShowAgents }) { const { t } = useTranslation(); const agentSessionActive = useIsAgentSessionActive(); if (agentSessionActive) return null; return (
setShowAgents(!showing)} className={`flex justify-center items-center cursor-pointer ${ showing ? "!opacity-100" : "" }`} >
); } function AbilityTag({ text }) { return (

{text}

); } export function AvailableAgents({ showing, setShowing, sendCommand, promptRef, }) { const formRef = useRef(null); const agentSessionActive = useIsAgentSessionActive(); const [searchParams] = useSearchParams(); const { t } = useTranslation(); /* * @checklist-item * If the URL has the agent param, open the agent menu for the user * automatically when the component mounts. */ useEffect(() => { if (searchParams.get("action") === "set-agent-chat" && !showing) handleAgentClick(); }, [promptRef.current]); useEffect(() => { function listenForOutsideClick() { if (!showing || !formRef.current) return false; document.addEventListener("click", closeIfOutside); } listenForOutsideClick(); }, [showing, formRef.current]); const closeIfOutside = ({ target }) => { if (target.id === "agent-list-btn") return; const isOutside = !formRef?.current?.contains(target); if (!isOutside) return; setShowing(false); }; const handleAgentClick = () => { setShowing(false); sendCommand({ text: "@agent " }); promptRef?.current?.focus(); }; if (agentSessionActive) return null; return ( <> ); } export function useAvailableAgents() { const [showAgents, setShowAgents] = useState(false); return { showAgents, setShowAgents }; }