ScienceDiscovery
English GitHub

前端:apps/web

React 浏览器 UI,构建后由控制 API 作为静态资源托管;开发时可独立热重载。刻意保持轻依赖:无路由库、无状态管理库。

1. 技术栈

2. 源码布局

文件 作用
App.tsx 根组件与状态壳:全局状态、会话/项目管理、运行流监听、顶层装配;纯逻辑委托给 timeline/、composer/、session/、run-stream/ 特性模块
api.ts / api/ api.ts 为兼容公共入口 barrel;ApiClient 与各域客户端(artifacts/auth/projects/runs/sessions/settings/skills/web)在 api/
timeline/RunTimeline.tsx 事件流 reducer + 时间线渲染(thinking / tool / assistant 条目);旧路径 RunTimeline.tsx 留兼容再导出
ProcessRecord.tsx / styles/process-records.css 活动卡片与终态可展开记录的展示、工作区一级分区、对齐与悬停样式;不改变执行状态
SkillReviewRecords.tsx 根据精确 draftId 查询待审状态,区分待审入口与已处理记录
session/ConversationArtifactList.tsx 本轮产物入口,保留固定版本与当前文件的语义区别
session/run-activity.ts 活动卡片(plan / subagent / remote job / permission / 产物预览)按 run 归组与锚点计算;卡片展开态纯函数(setActivityCardExpanded,区分「未记录」与 false)
Permissions.tsx 权限卡片与授权管理
Orchestration.tsx 子 Agent 卡片、specialist、计划展示
RemoteCompute.tsx / ScientificArtifacts.tsx / RuntimeControls.tsx / EnvironmentManager.tsx / SkillManager.tsx / MemoryGraphView.tsx 各系统配置与领域面板
UsagePage.tsx 用量看板:模型/日期筛选、Token 与费用总览、按日堆积柱状图、随筛选收敛的明细下钻与 CSV/JSON 导出;长日期范围可横向拖动/滚动,默认显示最新日期,向左查看更早记录
ManagementControls.tsx / WorkbenchNavigation.tsx 生命周期对话框、全局搜索与 composer 引用(@artifact、#session、/skill)
Markdown.tsx / Toasts.tsx / icons.tsx 渲染基础设施

3. 与服务端通信

4. 事件到 UI 的映射

RunStreamEvent 由 timeline/RunTimeline.tsx 归约到时间线,面板类事件由 App.tsx 装配并委托特性模块分发:

事件 UI
agent.phase / assistant.thinking.delta / assistant.delta 时间线 thinking / 正文条目
tool.started / tool.completed 工具条目状态与摘要
tool.output 工具输出按子流 streams/:streamId/events 增量追加,详情按需展开
permission.required 权限卡片(动作类型:code/connector/artifact_download/directory/host/remote_job)
plan.updated 右侧 Workspace 的 Tasks 区按 Agent 展示当前 Plan;空快照会移除该 Agent 的当前卡片,但事件仍保留在持久化事件流中
subagent.updated 在首次委派的位置逐个更新子任务,不因同时运行而强制合组;结束后每个子任务保留一条可展开记录,独立会话入口仍可访问
remote_job.proposed 按 run 归位的远程作业记录;待批状态保留审批卡片,终态可展开;展示历史记录不代表恢复远程执行能力
artifact_review.completed Reviewer Specialist 卡片与 Artifact 审核结果
run.completed / run.failed / run.cancelled 时间线收尾、工作区文件刷新、错误横幅/Toast

5. 展示生命周期

6. 右侧工作区

一级分区默认展开,二级详情和文件目录默认收起,各自独立切换。一级分区通过本地状态保留用户的展开选择,流式更新不重置,内部详情切换不改变外层状态;切换 Session 后重新默认展开,不跨会话持久化。内部功能继续使用原白色面板,不套用中间区域的终态去框规则。

一级分区 内容与条件
文件 上传、项目产物及 Session 分组、工作区文件与文件溯源;空产物/文件列表不显示对应入口,上传保留
任务 当前执行计划、Evolve、启用的 Reviewer 控制、执行记录、传输、提醒;无内容时整区隐藏,但活动轮询继续运行,收到新任务后重新显示
记忆 已启用的科学记忆摘要与图谱入口;未启用时连同二级入口隐藏,启用但空数据/不可达时保留相应提示

列表标题右侧只显示总条数,0 条列表隐藏;控制入口不伪造条数。工作区文件展开时才在数量左侧显示多选图标,收起后隐藏图标;多选、下载、删除和溯源操作不变。

计划标题过长时截断并提供完整悬停文本,进度单独一行,状态标签不换行。全部步骤完成显示“已完成”;Run 已终止但步骤未全完成显示“已结束”,不能因条目非空就显示“进行中”。空计划快照仍移除该 Agent 的当前计划。

移除右侧独立 Paper reader 面板、Provenance 统计卡和隔离常驻提示,仅改变入口布局,不删除论文解析、审计或隔离能力。文件区计数是总数,不表示未读数;本次没有实现下载后确认再隐藏的交互。

7. 开发与测试

相关文档