merge: ui2/s-agent-ui

Co-Authored-By: Claude Opus 5.5 <[email protected]>
Claude-Session: https://claude.ai/code/session_01Cxwgnn2pbzQ7rXv3rq7fei
This commit is contained in:
rootandClaude Opus 5.5 committed 2026-10-06 18:27:06 +08:00
commit 3df9f35ebe
12 files changed
+732 -68

No files matched your search

+15 -3
View File
@@ -141,22 +141,34 @@ export const TRIGGER_LABEL: Record<AgentTrigger, string> = {
export type AgentRunGroup = "conversation" | "auto";
const isAutoTrigger = (t: AgentTrigger) => t === "schedule" || t === "event";
/** 会话所在分栏:子会话随父会话(与服务端 group 筛选一致);父会话未知时子会话归「对话」 */
export function runGroup(
run: Pick<AgentRunView, "trigger">,
parent?: Pick<AgentRunView, "trigger"> | null,
): AgentRunGroup {
const t = run.trigger === "subagent" && parent ? parent.trigger : run.trigger;
return isAutoTrigger(t) ? "auto" : "conversation";
}
export function useAgentRuns(status?: AgentRunStatus, trigger?: AgentTrigger, group?: AgentRunGroup) {
const mock = useAgentMockGate();
return useInfiniteQuery({
queryKey: [...agentKeys.runs(status, trigger, group), mock],
initialPageParam: undefined as string | undefined,
queryFn: async ({ pageParam, signal }) => {
if (mock)
if (mock) {
const all = MOCK_RUNS();
const byId = new Map(all.map((r) => [r.id, r] as const));
return {
items: MOCK_RUNS().filter(
items: all.filter(
(r) =>
(!status || r.status === status) &&
(!trigger || r.trigger === trigger) &&
(!group || isAutoTrigger(r.trigger) === (group === "auto")),
(!group || runGroup(r, r.parentRunId ? byId.get(r.parentRunId) : null) === group),
),
nextCursor: null,
};
}
return apiParsed(RunPage, AGENT_BASE, {
params: cleanParams({ status, trigger, group, cursor: pageParam, limit: 30 }),
signal,