import { Bot, ExternalLink, Plus } from "lucide-react"; import { Link } from "react-router"; import { toast } from "sonner"; import { useCreateAgentRun } from "~/api/agent.ts"; import { Button } from "~/components/ui/button.tsx"; import { Sheet, SheetContent, SheetDescription, SheetHeader, SheetTitle } from "~/components/ui/sheet.tsx"; import { errorMessage } from "~/lib/api.ts"; import { AgentRunPanel, GoalComposer } from "./agent-run-panel.tsx"; import { contextPrefix, openAgentDrawer, setAgentDrawerOpen, setAgentDrawerRun, useAgentDrawer, } from "./agent-store.ts"; /** * Agent 侧栏抽屉:任意页面可打开,带当前页面上下文(entityId 等)作为 goal 前缀。 * 挂载:在 console layout 里渲染一次 ;顶栏放 。 * 页面内打开:import { openAgentDrawer } from "~/components/agent/agent-store.ts"。 */ export function AgentDrawer() { const { open, context, runId } = useAgentDrawer(); const create = useCreateAgentRun(); const prefix = contextPrefix(context); return ( Agent {context?.label ? `当前对象:${context.label}` : "交代目标,Agent 在授权范围内边执行边汇报。"}
{runId ? ( ) : ( create.mutate( { goal: `${prefix}${goal}`, mode }, { onSuccess: (run) => setAgentDrawerRun(run.id), onError: (e) => toast.error(errorMessage(e)), }, ) } /> )}
{runId ? ( <> ) : ( )}
); } /** 顶栏按钮:打开抽屉(不带上下文;页面内按钮用 openAgentDrawer 传上下文) */ export function AgentDrawerTrigger() { return ( ); }