- 侧栏与命令面板没有「待处理」;/console/inbox?kind= 按问题类型跳到整理记录「需要处理」、下载面板、运行状态或订阅 - 整理记录加「需要处理」筛选,行内写原因与推荐动作(指定作品 / 重新整理 / 让智能体识别 / 替换·保留两者·跳过 / 忽略), 详情页同样可处理;处理按钮从原待处理页抽成 components/decisions/decision-actions.tsx 复用 - 铃铛只放等你批准的智能体操作与系统健康;首页「要我处理」与运行状态「需要关注」放汇总计数,运行状态加智能体用量 - 设置 → 智能体:预算卡改为「用量与限制」(只剩单次工具调用与时长,附花费统计),自动调查卡加「整理识别不到作品时叫智能体识别」 - 集数待确认的原因显示在作品页集数映射(可确认建议规则 / 智能体建议)与订阅详情;未识别资源在媒体库「未识别」里直接选候选或指定 - 下载、站点、任务里指向待处理的链接改到对应页面 Co-Authored-By: Claude Opus 5.5 <[email protected]> Claude-Session: https://claude.ai/code/session_01Cxwgnn2pbzQ7rXv3rq7fei
38 lines
1.5 KiB
TypeScript
38 lines
1.5 KiB
TypeScript
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<ReturnType<typeof setTimeout> | 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,
|
|
});
|
|
}
|