Files
UHD_Media_Tool/apps/web/app/routes/console/agent.$runId.tsx
T
rootandClaude Opus 5.5 f5234cbcb9 fix(agent): 会话列表分栏跟随当前会话并进 URL,保留滚动位置
- 打开巡检会话(含巡检的子会话)时左栏自动切到「自动巡检」并选中当前项;
  手动切换分栏写进 ?tab=,刷新、窄屏「全部会话」返回都保持
- 列表页 / 会话页之间保留搜索、筛选和各分栏的滚动位置;当前会话看不见时滚进可见区
- 跳到子会话时展开父会话
- 演示模式的分栏筛选与服务端一致:子会话随父会话

Co-Authored-By: Claude Opus 5.5 <[email protected]>
Claude-Session: https://claude.ai/code/session_01Cxwgnn2pbzQ7rXv3rq7fei
2026-10-06 18:00:14 +08:00

49 lines
2.0 KiB
TypeScript

import { ArrowLeft } from "lucide-react";
import { Link, useParams } from "react-router";
import { agentMockEnabled } from "~/api/agent.ts";
import {
agentListHref,
agentRunHref,
pageListMemory,
usePageListGroup,
useRunGroup,
} from "~/components/agent/agent-nav.ts";
import { AgentRunPanel } from "~/components/agent/agent-run-panel.tsx";
import { AgentSessionList } from "~/components/agent/agent-session-list.tsx";
import { Button } from "~/components/ui/button.tsx";
// 会话页(AGUI-3):左栏会话列表(xl 以上)· 会话列占满其余宽度(顶部概况条、底部输入区)。
// 不再有页头目标描述和右侧栏;步骤、子会话、预算与模型在概况条里。
export default function AgentRunPage() {
const { runId = "" } = useParams();
const mock = agentMockEnabled();
// 左栏分栏跟随当前会话(巡检会话及其子会话在「自动巡检」),也可以手动切换(记在 URL)
const [group, setGroup] = usePageListGroup(useRunGroup(runId));
return (
<>
<h1 className="sr-only">智能体会话</h1>
<div className="grid grid-cols-1 gap-4 xl:grid-cols-[minmax(0,17rem)_minmax(0,1fr)]">
<aside className="pg-slab hidden rounded-xl p-3 xl:block xl:h-[calc(100dvh-7rem)] xl:overflow-hidden">
<AgentSessionList
activeId={runId}
hrefFor={(id) => agentRunHref(id, mock)}
group={group}
onGroupChange={setGroup}
memory={pageListMemory}
className="h-full"
/>
</aside>
<div className="pg-slab flex h-[calc(100dvh-7rem)] min-h-[28rem] flex-col gap-2 rounded-xl p-3 md:p-4">
<Button asChild variant="ghost" size="sm" className="-mt-1 -ml-2 self-start text-muted-foreground xl:hidden">
<Link to={agentListHref(group, mock)}>
<ArrowLeft />
全部会话
</Link>
</Button>
<AgentRunPanel key={runId} runId={runId} className="min-h-0 flex-1" />
</div>
</div>
</>
);
}