import type { AgentRunStatus } from "@umt/contracts"; import { FlaskConical, ShieldCheck } from "lucide-react"; import { useState } from "react"; import { useNavigate } from "react-router"; import { toast } from "sonner"; import { agentMockEnabled, useCreateAgentRun } from "~/api/agent.ts"; import { GoalComposer } from "~/components/agent/agent-run-panel.tsx"; import { AgentSessionList } from "~/components/agent/agent-session-list.tsx"; import { PageHeader } from "~/components/console/page-header.tsx"; import { Button } from "~/components/ui/button.tsx"; import { errorMessage } from "~/lib/api.ts"; export default function AgentPage() { const [status, setStatus] = useState<"" | AgentRunStatus>(""); const create = useCreateAgentRun(); const navigate = useNavigate(); const mock = agentMockEnabled(); return ( <> {mock ? (
演示模式:会话是本地假数据,不连后端,不会产生任何动作。
) : null}

新会话

create.mutate( { goal, mode }, { onSuccess: (run) => navigate(`/console/agent/${run.id}${mock ? "?mock=1" : ""}`), onError: (e) => toast.error(errorMessage(e)), }, ) } />

每一次工具调用都经服务端授权校验:不在白名单或没有授权覆盖的调用会被拒绝,并在对话里醒目标出。

运行结束后,汇报分两栏:模型的自述只作参考,"系统核实的结果"取自下载计划、下载任务与整理记录。

); }