AI 侧边栏
AI 侧边栏负责承接用户输入、展示会话消息、展示工具调用、处理 HITL 确认和恢复中断会话。
入口交互
工作区内只有统一内容助手一个智能体,不再保留左侧收起窄条。对话面板在正常工作空间页面默认展开;用户通过面板头部按钮收起后,贴左边缘的悬浮 AI 形象(AgentFloatingTrigger)作为重新打开入口。形象沿左侧垂直拖拽可调整位置并全局持久化,面板展开期间自动隐藏。无工作空间、隐藏侧栏路由或窄窗口(< 960px)时不显示入口。
工具说明展示
工具说明、参数 JSON Schema、调用示例、返回示例、上下文要求和披露组来自 Backend 规格接口。前端不应维护第二份工具清单。
会话恢复
恢复会话时,应以 Backend 返回的会话、run、消息、事件和 requirement 为事实源。前端本地状态只用于交互体验,不应覆盖服务端状态。
前端运行态由 agent-session Pinia Store 的 sessions[sessionId] 保存;每个分片包含运行态与该会话的交互态。面板通过响应式读取和 Store action 更新它,不维护可写的扁平会话映射。待确认动作以暂停中 activeRun.pending_requirement 为唯一前端来源;服务端快照负责恢复,SSE 按事件序号推进,显式清空和失败回滚也更新同一字段。写入非空 requirement 前必须先让 activeRun 处于 paused,否则 Store 会拒绝写入并告警。
useAgentSessionContext 负责会话查询、选择和会话自身范围解析;useAgentSessionPreferences 按目标会话串行保存下一轮焦点与工作集(失败时若已有更新草稿则继续提交,不丢掉后续编辑);useAgentModelSelection 管理模型和推理选项;useAgentRunLifecycle 协调 Run 启动、订阅、取消与收尾;useAgentSessionRunStatus 提供会话列表徽标与首轮自动命名。面板保留视图组合与对外事件连接,路由切换后后台 Run 的恢复与收尾继续使用所属会话的范围。
会话选择按 workspace_id + agent_id 持久化。工作空间内切换项目或页面不得创建会话、切换会话、禁用输入或触发路由回跳。单智能体侧栏不展示助手切换 Tab;顶栏在 Run 未终止时以紧凑状态标签展示当前任务焦点,空闲时显示产品标题 Web-Presentation,且不再单独展示当前路由范围。“跟随路由 / 固定项目 / 工作空间级”焦点模式和项目工作集收纳在输入框内;活跃 Run 期间输入框仍可配置只影响下一轮的焦点与工作范围。
每个 Run 的第一条用户消息后紧跟只读的“本轮”上下文摘要,包含发送时固化的焦点和工作范围。摘要优先显示对象名称,通过悬浮信息补充对象类型与 ID;历史回放和实时 run.focus.snapshot 事件必须生成相同结构,避免路由变化后误解旧消息的操作范围。尚未落库的空白会话也必须允许编辑下一轮焦点和工作范围,首条消息创建会话时一次性提交草稿偏好。
本地存储使用 v4 工作空间 key,旧 scope key 不读取、不迁移、不 fallback。
HITL 确认
确认工具调用前,应清晰展示操作对象、参数和影响范围。用户拒绝或超时后,UI 需要反映 requirement 状态,避免重复提交。
图片附件
图片附件需要展示上传状态、预览和失败原因。上传可用性由图片理解或图片生成任一视觉槽位决定,不再依赖内容会话模型的 supports_image_input。
analyze_visuals 与 generate_image 使用专用工具卡:前者合并展示用户附件、工作空间资源图片与页面截图缩略图、分析类型、状态和短摘要;后者展示 queued/running/saving/completed/error 进度、输出画廊与资源库标记。SSE、runtime snapshot 和历史回放必须使用同一 progress/input_attachments/output_attachments 协议。普通工具继续使用通用卡片。