import { useQuery, useQueryClient } from "@tanstack/react-query"; import { AgentSpend, AttentionSummary } from "@umt/contracts"; import { useRef } from "react"; import { useSse } from "~/lib/sse.ts"; import { apiParsed } from "./parse.ts"; // 需要关注的汇总(2026-10-06 去掉待处理中心后):铃铛只放等你批准的智能体操作与系统健康, // 首页 / 运行状态放汇总计数(整理需要处理的条数等),点进去到对应页面。 export const attentionKeys = { all: ["attention"] as const, spend: ["attention", "agent-spend"] as const }; /** 事项、整理记录变化时(节流)刷新;另有 60 秒兜底轮询 */ export function useAttention() { const qc = useQueryClient(); const timer = useRef | null>(null); useSse(["decision.created", "decision.updated", "organization.changed"], () => { if (timer.current) return; timer.current = setTimeout(() => { timer.current = null; void qc.invalidateQueries({ queryKey: attentionKeys.all }); }, 800); }); return useQuery({ queryKey: attentionKeys.all, queryFn: ({ signal }) => apiParsed(AttentionSummary, "/api/v1/attention", { signal }), refetchInterval: 60_000, }); } /** 智能体用量:今天与最近 7 天按会话类型的次数、token 与费用(不设上限,只展示) */ export function useAgentSpend() { return useQuery({ queryKey: attentionKeys.spend, queryFn: ({ signal }) => apiParsed(AgentSpend, "/api/v1/agent/usage", { signal }), refetchInterval: 5 * 60_000, }); }