版本:1.0.9(未独立发布)
状态:已并入 1.1.0(内容随 1.1.0 发布)
发布时间:—(随 1.1.0 发布,2026-09-05)
文档状态:1.0.9 为 1.0.8 之后的开发周期版本,未在 PyPI 独立发布;其全部迭代明细(迭代 1–25)并入 1.1.0 发布。本文档仅作归档,后续开发请迭代到新的版本文档
目录:页面级行为细则见docs/prds/;版本路线见docs/Roadmap.md
1.0.9 为 1.0.8(独立精度测试模块 + 性能页增强)发布后的迭代开发版本,目标范围待规划,后续按需求/用户确认补充并在此按时间顺序记录迭代明细。
规划功能见 docs/Roadmap.md 1.0.9 小节。
(待规划)
功能概述:
- 1.0.8 发布完成后开启下一迭代版本:版本号升至
1.0.9.dev0(pyproject.toml/benchscope/__init__.py/web/package.json三处单一来源同步),新建本文档。 - 目标范围待规划,后续按时间顺序追加迭代明细。
TODO 状态:
- 版本 — 升版本号至
1.0.9.dev0(三处统一) - 文档 — 新建
VERSION_1_0_9.md;docs/Readme.md版本表 +docs/Roadmap.md增 1.0.9 - 规划 — 1.0.9 目标范围与 TODO 清单(待补充)
功能概述:
- 新增项目级强制约定:沙箱环境启动「沙箱开发模式」,主机环境启动「主机开发模式」;涉及代码更新的任务执行完毕须重启对应环境开发模式。
变更内容:
- 约定落地(
agents/Memory.md/agents/Readme.md/docs/rules/Development.md):Memory.md强制约定速查表新增 #11 开发模式分环境 + 新增 §10 开发模式(主机dev.sh/ 沙箱自起 mock+后端的两套启动、数据目录、端口与验证步骤)agents/Readme.md§4.5 新增「开发模式(分环境启动)」约定docs/rules/Development.md§1 头部新增分环境启动强约束
- 背景:沙箱为
bwrap --unshare-pid,看不到主进程 PID(无法 stop/kill 主环境服务)、连不上主环境 mock,故沙箱内需自起一套开发环境;两套环境独立数据目录、端口占位互不干扰。
TODO 状态:
- 约定 —
Memory.md#11 + §10(分环境启动、各自步骤、重启规则) - 约定 —
agents/Readme.md§4.5 同步 - 规范 —
docs/rules/Development.md§1 分环境强约束 - 迭代记录 — 本文件追加
功能概述:
- Cache Paths 面板:Data → Root Dir(根目录);改 Root Dir 无需重启服务,以环境变量形式透传子进程;失焦即创建子目录;8 个子目录只读高亮;去掉重启/迁移流程。
变更内容:
- 后端 — config.py:
update()的 data_dir 联动改为全部子目录重置为新根下的默认子目录(不再只联动"未自定义"项)- 启动与更新时把数据根目录同步到
os.environ['BENCHSCOPE_DATA_DIR'](以环境变量形式使用)
- 后端 — benches/runner.py:
minimal_env显式透传BENCHSCOPE_DATA_DIR给 bench 子进程(vllm / sglang / bench CLI) - 后端 — server/api_config.py:
update_cache_dirs去掉requires_restart(改 Root Dir 不再要求重启),移除state.migration_sourceget_cache_dirs子目录项加readonly: True(data_dir 可编辑);CACHE_DIR_INFOdata_dir命名Root Dir / 根目录,子目录 desc 更新
- 前端 — SettingsView.vue:
- Cache Paths:Root Dir 失焦(blur)/回车即保存并创建子目录,静默无提醒;8 个子目录只读高亮展示(
.dir-value.readonly) - 移除"运行中锁定"标签、重启/迁移 Modal、
notifyLocked/askMigrate/restartWithMigrate/迁移 WS 逻辑与相关 import/样式
- Cache Paths:Root Dir 失焦(blur)/回车即保存并创建子目录,静默无提醒;8 个子目录只读高亮展示(
验证(增量):
- 后端:
tests/api/test_config.py全量 22 项通过,新增 3 项 ——test_cache_dirs_root_readonly_contract(Root Dir 可编辑、子目录 readonly、命名 Root Dir/根目录)、test_update_data_dir_no_restart_and_subdirs_reset(requires_restart=False + 子目录重置新根)、test_config_update_creates_subdirs_and_sync_env(同进程创建子目录 + 环境变量同步) - 前端
npm run build成功;check-i18nOK - 实测量:改 Root Dir →
requires_restart=false、8 子目录重置为新根、共享磁盘上子目录真实创建
TODO 状态:
- 后端 — Root Dir 改名 / 子目录重置 / 去重启 / env 注入 + runner 透传
- 前端 — Root Dir 失焦保存 + 子目录只读高亮 + 去迁移弹窗
- 测试 — test_config(契约 / 重置 / 创建 / env)+ 构建
- 文档 — Settings / Architecture / VERSION 同步
功能概述:
- Settings 页四类细节优化:侧边栏字号缩小、Root Dir 变更加确认弹窗、子目录只读改灰字无框、Provider 模型列表化加复制图标。
变更内容:
- 前端 — SettingsView.vue
- 侧边栏字号:
.menu-item14px→13px、.menu-icon18px→16px,区别于顶部主导航(14px) - Cache Paths / Root Dir 变更确认:编辑框后附加小 Save 按钮(
.dir-save-btn,不使用失焦/回车自动保存);点击 Save 或按回车时若值有变更,弹出确认弹窗(.dir-confirm-modal)——确定保存新空白路径(原数据不迁移);取消不保存、恢复原路径;新增confirmSaveDir/doSaveDir/cancelSaveDir与dirConfirmOpen/dirConfirmTarget - Cache Paths / 子目录:
.dir-value.readonly由浅蓝底+描边改纯灰色文字、无框 - Providers / 模型:模型由横排
a-tag改纵向内部列表(.provider-models-list,panel-row column)——一行一个、左对齐、文字 12px、每行带复制图标(.pm-copy,CopyOutlined,点击复制模型名,新增copyModel)
- 侧边栏字号:
- i18n — en.js / zh.js:新增
rootDirChangeTitle/rootDirChangeContent/copyModel(en/zh 双语,check-i18n通过) - 测试 — tests/webui/test_ui.py:更新
test_settings_providers_no_activate_with_status(模型标签.provider-model-tag→ 模型列表.pm-item/.pm-copy);新增test_settings_root_dir_confirm_cancel(取消恢复原路径)、test_settings_root_dir_confirm_ok_saves(确定保存,结束后恢复原根目录防污染) - 文档:
docs/prds/Settings.md§1.2 / §2 / §9 同步更新
验证(增量):
- 前端
npm run build成功;check-i18nOK;py_compile test_ui.py通过 - (本沙箱缺 pytest/playwright/Chromium,WebUI 测试未在本机执行;API 后端不受前端改动影响,构建产物已在开发环境 8080 验证可达)
- 沙箱 500 根因与修复:沙箱内
~/.benchscope(Home 目录)不可写,Root Dir 确认保存触发save()写settings.json时PermissionError→ 500。已按沙箱开发模式约定将后端以BENCHSCOPE_DATA_DIR=<workspace>/.dev-data重启(数据根落在可写工作区内),POST /api/config/dirs实测返回 200 + 8 子目录重置新根,500 消除。
TODO 状态:
- 前端 — 侧边栏字号 / Root Dir 确认弹窗 / 子目录灰字 / Provider 模型列表 + 复制
- i18n — 新增 rootDirChange* / copyModel(en/zh)
- 测试 — test_ui 更新与新增
- 文档 — Settings / VERSION 同步
功能概述:
- Settings → Bench Engines 每个引擎卡片边框加色:内置引擎蓝色、用户上传自定义引擎紫色。
变更内容:
- 后端 — benchs.py:
engine_summary新增origin字段(builtin/custom),依BUILTIN_ENGINE_IDS(随包内置引擎 id 集:benchscope / vllm-0.23 / sglang-0.5.10 / native-hf / mock)判定;上传新增的引擎 id 不在集内 →custom - 前端 — SettingsView.vue:
.bench-card依eng.origin附加.bench-origin-builtin(蓝,--ant-color-primary)/.bench-origin-custom(紫,--ant-color-purple)边框类 - 文档:
docs/prds/Settings.md§5.2 同步
验证(增量):
py_compile benchs.py通过;npm run build成功- 实测
GET /api/benchs:现有 5 引擎均返回origin=builtin(定制引擎经 Upload 导入后为custom) - 前端构建产物已含两条边框规则,dev 后端(重启加载新代码)8080 可达
TODO 状态:
- 后端 — engine_summary 加 origin(builtin/custom)
- 前端 — 引擎卡片边框蓝/紫
- 文档 — Settings / VERSION 同步
功能概述:
- Performance 默认页三张介绍卡片样式与 Accuracy 默认页一致,图标补充渐变背景色;
- Settings → Providers 卡片模型由「一行一个列表」改回「绿色标签框 + 复制小图标」。
变更内容:
- 前端 — PerformanceView.vue:
feature-card图标按序号附加fi-${idx % 4}渐变底色类(蓝/绿/橙/紫,对齐 Accuracy 的.fi-0..3);卡片标题/描述样式同步 Accuracy(标题 14px/600、描述次级色 2 行截断) - 前端 — SettingsView.vue:Provider 模型行改回绿色标签框(
a-tag color="green".provider-model-tag,可换行),标签内带复制小图标(.tag-copy,点击复制模型名);移除上一版的.provider-models-list/.pm-item/.pm-copy列表样式 - 测试 — tests/webui/test_ui.py:
test_settings_providers_no_activate_with_status改回断言.provider-model-tag/.tag-copy - 文档:
docs/prds/Settings.md§2、docs/prds/Performance.md§0.1 同步
验证(增量):
npm run build成功;check-i18nOK;py_compile test_ui.py通过- 实测 dev 8080:Performance 构建产物含
.fi-0..3渐变类、Settings 构建产物含.tag-copy样式,均 HTTP 200 可达
TODO 状态:
- 前端 — Performance 三卡图标背景色 + 卡片样式对齐 Accuracy
- 前端 — Provider 模型改回绿色标签 + 复制图标
- 测试 — test_ui 更新
- 文档 — Settings / Performance / VERSION 同步
功能概述:
- Sessions 顶部性能栏新增对话采样参数 top_k / temperature / top_p(随发送请求携带,覆盖 quality 映射);
- 前端 Markdown 渲染由自实现解析升级为 marked + DOMPurify(支持 GFM 表格 / 标题 / 引用等,XSS 净化);
- 配套 UI 细化:输入栏下拉统一样式、发送/停止改圆形图标按钮、会话气泡与侧栏样式优化。
变更内容:
- 后端:
benchscope/server/api_sessions.py:ChatRequest新增可选top_k/temperature/top_pbenchscope/session_manager.py:stream_chat透传三参数到 payload;显式temperature优先于 quality 映射(high 0.9 / medium 0.5 / low 0.2),top_k>0/top_p非空时写入(扩展字段,缺失/不支持忽略)
- 前端 — web/src/views/SessionsView.vue:
- 顶部性能栏新增三个
a-input-number采样参数输入(top_k 1–200 / temp 0–2 / top_p 0–1),localStorage 记忆(benchscope_chat_top_k/benchscope_chat_temperature/benchscope_chat_top_p),随发送请求体携带 renderMarkdown改用marked.parse+DOMPurify.sanitize;代码块经wrapCodeBlocks包装(语言标签 + Copy 按钮),Copy 用事件委托onDocClick(v-html 动态插入,避免内联 onclick 被净化),onBeforeUnmount移除监听- UI:输入栏 Provider/Model/Quality 下拉统一灰色小字样式;发送/停止改圆形小图标按钮(蓝圆白箭头 / 白色方块);会话气泡渐变、侧栏浅色化等
- 依赖新增:
marked ^18+dompurify ^3.4(web/package.json+package-lock.json)
- 顶部性能栏新增三个
- 测试:
tests/api/test_sessions.py新增test_chat_with_sampling_params(携带三参数走 SSE 流式并通过 mock)
验证(增量):
- 后端
tests/api/test_sessions.py增量运行通过(SSE 对话 + 采样参数;mock 流式约 16KB 回复、逐块 0.015s,单次对话约 45s 完成) - 前端
npm run build成功;check:i18nOK(采样参数名 top_k/temp/top_p 为技术参数,不新增 i18n 键) npm run build刷新benchscope/webui构建产物(含 marked/dompurify)
TODO 状态:
- 后端 — ChatRequest + stream_chat 透传采样参数
- 前端 — 采样参数输入 + 持久化 + 随请求携带
- 前端 — Markdown 渲染升级(marked + DOMPurify + 代码块 Copy 事件委托)
- 测试 — test_chat_with_sampling_params
- 文档 — Sessions / Software / VERSION 同步
功能概述:
- Sessions 侧栏会话项升级:每项显示标题 + 修改时间,末尾新增三点菜单(重命名 / 删除);新建按钮图标改为加号;
- 会话项前置小图标在该会话通讯中切换为三个点滚动动画(表示正在沟通);
- 代码块统一黑底白字、绿色高亮样式。
变更内容:
- 后端 — 会话重命名 API:
benchscope/session_manager.py:新增SessionManager.update_title(更新标题 + 刷新updated_at+ 持久化)benchscope/server/api_sessions.py:新增RenameRequest与PATCH /api/sessions/{session_id}/title(未知会话 404,返回{ok, session})
- 前端 — web/src/views/SessionsView.vue:
- 新建会话按钮图标
SmileOutlined→PlusOutlined(加号) - 会话项布局改为:前置小图标 +
session-main(标题session-name+ 修改时间session-time,formatModTime格式化)+ 末尾三点MoreOutlined(a-dropdown→ 重命名 / 删除菜单) - 重命名弹框
a-modal(renameOpen/renameValue/renaming/renameTargetId,confirmRename调api.renameSession后刷新列表) - 通讯动画:新增
streamingId(sendMessage置为当前会话、finally清空);会话项图标streamingId === s.session_id时渲染.session-typing三个点并@keyframes sessionDotRoll起伏滚动 - 代码块样式改黑底白字绿高亮:
.code-block背景#0d1117、正文#e6edf3、语言标签 / Copy hover 用绿#3fb950、.inline-code黑底绿字 - 移除旧的 hover
CloseOutlined删除图标(删除改入三点菜单)
- 新建会话按钮图标
- 前端 API — web/src/api/index.js:新增
renameSession(id, title) - i18n — en.js / zh.js:新增
sessionRename/sessionRenamePlaceholder(双语,check-i18n通过) - 测试:
tests/api/test_sessions.py:新增test_rename_session(创建 → 重命名 → 列表读取新标题 → 未知会话 404)tests/webui/test_ui.py:新增test_sessions_rename_modal(三点菜单 → 重命名弹框 → 保存后列表标题更新)
验证(增量):
- 后端
tests/api/test_sessions.py增量运行(含新 rename 用例,SSE 对话用例因 mock 默认 16KB 回复、逐块 0.015s 较慢) - 实测
PATCH /api/sessions/{id}/title:返回新标题 + 刷新updated_at;未知会话 404 - 前端
npm run build成功;check:i18nOK;py_compile test_ui.py通过 - (本沙箱缺 playwright/Chromium,WebUI 测试未本机执行;API 后端不受前端改动影响)
TODO 状态:
- 后端 — update_title + PATCH title API
- 前端 — 加号按钮 / 会话项时间 + 三点菜单(重命名 / 删除)/ 通讯三点滚动 / 代码黑底绿字
- i18n — sessionRename*(en/zh)
- 测试 — test_rename_session + test_sessions_rename_modal
- 文档 — Sessions / VERSION 同步
功能概述:
- Sessions 对话记录落盘为日志文件到
logs_dir/sessions/<id>.log(此前只在sessions/*.json缓存,日志目录无文件); - 「清空会话」由 popconfirm 改为页面居中确认弹窗;
- 顶部采样参数 top_k / temperature / top_p:宽度足够时右对齐,宽度不足时换行。
变更内容:
- 后端 — session_manager.py(会话日志落盘):
- 新增
SessionManager.persist_log(session):把会话以可读 transcript 写到logs_dir/sessions/<id>.log(标题 / ID / 模型 / Provider / 创建 / 更新时间 + 逐条[时间戳] role+[thinking]+ 正文) - 在
create_session、add_message、update_perf、update_title处调用persist_log delete_session同步删除对应.log;clear_all清空logs_dir/sessions/*.log
- 新增
- 前端 — web/src/views/SessionsView.vue:
- 清空居中弹窗:
clear-all按钮改为@click="clearOpen = true"打开居中a-modal(centered、ok-danger,内容含WarningOutlined警告图标 +clearConfirm文案),去掉原a-popconfirm;clearAllSessions成功后关闭弹窗 - 采样参数布局:
.chat-header改display:flex; flex-wrap:wrap; align-items:center;.perf-barflex:1 1 auto;.chat-paramsmargin-left:auto; justify-content:flex-end—— 宽度足够参数右对齐同排,宽度不足换行仍靠右 - 新增
clearOpenref;新增 i18n 键clear - 弹窗/菜单类为 teleport 到 body 的样式用
:global()(.clear-modal-content/.clear-warn-icon/.menu-icon/.menu-danger)
- 清空居中弹窗:
- i18n — en.js / zh.js:新增
clear(Clear / 清空,双语,check-i18n通过)
验证(增量):
- 前置单测(同一进程、同命名空间):
create_session→add_message→persist_log生成logs/sessions/<id>.log;update_title刷新;delete_session删除日志,均符合预期 - 沙箱后端实际 HTTP 走查(创建会话/重命名/删除):日志随会话增删同步
- 前端
npm run build成功;check:i18nOK - 后端
tests/api/test_sessions.py增量运行(含 rename 用例;SSE 对话用例因 mock 16KB 回复较慢)
TODO 状态:
- 后端 — persist_log + delete/clear 同步日志
- 前端 — 清空居中弹窗 / 采样参数右对齐换行
- i18n — clear(en/zh)
- 验证 — 日志落盘单测 + 构建 + 会话 API 测试
- 文档 — Sessions / VERSION 同步
功能概述:
- 对话区 Markdown 代码块由「纯黑底」升级为 highlight.js 语法着色 + 暗色主题,按语言高亮关键字 / 字符串 / 注释等。
变更内容:
- 依赖 — web/package.json + package-lock.json:新增
highlight.js ^11.12.0 - 前端 — web/src/views/SessionsView.vue:
- 按需引入
highlight.js/lib/core并注册常用语言(javascript / typescript / python / json / bash / xml / css / sql / java / c / cpp / go / rust / yaml / markdown / plaintext)+ 引入暗色主题highlight.js/styles/atom-one-dark.css - 自定义
marked.Renderer().code(marked v18 现为单 token 参数{text, lang, escaped}):highlightCode(code, lang)按语言高亮,未识别自动highlightAuto,失败回退escapePlain;输出<pre><code class="language-x hljs">…</code></pre> wrapCodeBlocks正则改为<pre><code([^>]*)>…,从开标签提取language-(\w+)作语言标签(兼容language-x hljs与仅hljs)- CSS:
.code-block pre code.hljs去掉主题自带底色/内边距、沿用黑底#0d1117,保留语法配色;SessionsView分块含主题 CSS - 高亮
span class="hljs-*"经DOMPurify.sanitize保留(默认允许 span/class)
- 按需引入
- 文档:
docs/rules/Software.md§3 前端依赖 +docs/prds/Sessions.md§2 代码高亮小节
验证(增量):
- node 端到端模拟(marked + hljs + wrapCodeBlocks):python/js 代码块输出
hljs-keyword/hljs-string/hljs-numberspan 且语言标签正确,无语言代码块降级为code,行内代码不受影响,<等正常转义 - 构建产物:
SessionsView-*.js分块体积约 177kB(含 hljs core + 语言 + 主题),SessionsView-*.css含.hljs-*主题规则 - 前端
npm run build成功;check:i18nOK(无新增 i18n 键) - host 8080 已服务最新构建(最新
index-*.js+SessionsView-*.js分块 HTTP 200)
TODO 状态:
- 依赖 — highlight.js 引入 + 注册常用语言 + 暗色主题
- 前端 — marked 自定义 code renderer 高亮 + wrapCodeBlocks 适配 + CSS 主题覆盖
- 验证 — node 端到端 + 构建
- 文档 — Software / Sessions / VERSION 同步
功能概述:
- 代码块改用纯黑背景,增加行号侧栏,并整体优化代码等宽字体(字号/行高/缩进)。
变更内容:
- 前端 — web/src/views/SessionsView.vue:
- 行号:
wrapCodeBlocks新增.code-body(flex:左侧.code-gutter+ 右侧<pre>);按 hljs 高亮输出中换行数(1:1 保留源码换行)统计总行数,为每行生成<span>n</span>行号;横向滚动仅作用于代码区,行号侧栏固定 - 纯黑背景:
.code-block背景#0a0a0a、header#151515、gutter#0d0d0d+ 右侧分隔线#262626;行号置灰#555 - 字体优化:代码统一
JetBrains Mono / Fira Code / SF Mono / SFMono-Regular / Cascadia Code / Consolas / Liberty Mono / monospace(无则回退系统等宽),font-size 13px、line-height 1.6、tab-size 4、font-variant-ligatures:none;.code-lang/.copy-btn同步小字号加字距;行内.inline-code同一字体栈
- 行号:
- 文档:
docs/prds/Sessions.md§2 代码样式/语法高亮小节同步(黑底、行号、字体)
验证(增量):
- node 端到端:3 行 python 块 →
.code-gutter生成<span>1</span><span>2</span><span>3</span>,code-body结构 + hljs 高亮 span 均保留 - 构建产物
SessionsView-*.css含code-gutter/code-body/#0a0a0a/JetBrains Mono规则 - 前端
npm run build成功;check:i18nOK;host 8080 已服务最新构建
TODO 状态:
- 前端 — 行号侧栏 + 纯黑底 + 代码字体优化
- 验证 — node 端到端 + 构建 + host 8080
- 文档 — Sessions / VERSION 同步
功能概述:
- 修复「行号不在每行」:从「独立行号侧栏」改为每行一个 flex 行(行号 + 代码),保证行号与代码严格逐行对齐(多行字符串跨行 span 亦正确)。
- 弱化「Copy 按钮 / 语言提示突兀」:Header 极简、语言标签置灰小字、Copy 默认隐藏仅悬停显示。
变更内容:
- 前端 — web/src/views/SessionsView.vue:
- 新增
splitCodeLines(html):把 hljs 高亮 HTML 按\n拆行,遇跨行 span 在本行末</span>闭合、下一行重开,保证每行标签闭合且高亮不丢 mdRenderer.code直接在 renderer 内生成完整.code-block(不再经wrapCodeBlocks):按行输出<div class="code-line"><span class="code-ln">N</span><span class="code-lc">…高亮…</span></div>;wrapCodeBlocks移除、renderMarkdown不再二次包装onDocClick复制改为拼接各.code-lc的textContent(浏览器自动解码实体,含多行 span),不包含行号- CSS:
.code-lineflex 行(.code-ln定宽 44px 右对齐置灰/.code-lcwhite-space:pre);.code-bodyoverflow-x:auto横向滚动;Header 极简(官方背景#0e0e0e、code-lang置灰#6b6b6b小字、.copy-btnopacity:0悬停.code-block:hover` 显示)
- 新增
- 文档:
docs/prds/Sessions.md§2 代码样式/语法高亮小节同步
验证(增量):
- node 端到端:6 行 python(含
"""多行字符串跨行高亮 span)→ 生成 6 行.code-line,每行行号+代码齐全、跨行 span 闭合/重开;拼接.code-lctextContent 还原 === 源码 - 构建产物
SessionsView-*.css含code-line/code-ln/code-lc/copy-btn规则;npm run build成功;check:i18nOK - host 8080 已服务最新构建
TODO 状态:
- 前端 — splitCodeLines 逐行结构 + renderer 内生成 + onDocClick 改拼接 + CSS 逐行 flex / Header 弱化
- 验证 — node 端到端(含多行 span)+ 构建 + host 8080
- 文档 — Sessions / VERSION 同步
功能概述:
- 对话代码块移除行号,只展示代码;代码字体调比正文更小、更紧凑。
变更内容:
- 前端 — web/src/views/SessionsView.vue:
- 移除
splitCodeLines与逐行.code-line结构;mdRenderer.code简化为直接输出<div class="code-block"><header><pre><code>高亮 HTML</code></pre></div>(无行号) onDocClick复制改回读取<pre>的textContent- CSS:删除
.code-line/.code-ln/.code-lc/.code-lines/.code-body规则;.code-block pre/code代码字体定为 12.5px / line-height 1.4 / tab-size 4(正文为 14px/1.75,代码更小更紧凑),代码区padding 8px 14px
- 移除
- 文档:
docs/prds/Sessions.md§2 代码样式/语法高亮小节同步(无行号、紧凑小号字体)
验证(增量):
- node 端到端:python 块输出简洁
<pre><code>(含 hljs span、无行号、无 code-line 结构),行内代码不受影响 - 构建产物
SessionsView-*.css含.code-block/12.5px/line-height:1.4,不含code-line/code-ln/code-gutter npm run build成功;check:i18nOK;host 8080 已服务最新构建
TODO 状态:
- 前端 — 去行号 + renderer 简化 + onDocClick 改回 pre + 紧凑字体 CSS
- 验证 — node + 构建 + host 8080
- 文档 — Sessions / VERSION 同步
功能概述:
- 第一行 Console 面板改名 Logs:日志行高亮(命令/错误/警告/成功/区块着色)+ 字体减小(10px)。
- 第二行由单张「Realtime Data」card 改为双面板:Profile Progress(1/3) + Real-Time Metrics(2/3)(后者承载原 MetricsTable + 本地阈值)。
- Phase-1:用现有数据(完成行/进度/
currentPos/elapsed)实现布局与进度、指标网格;真实逐请求实时流规划在 Phase-2。
变更内容(前端 — web/src/views/PerformanceView.vue + i18n):
- Logs:标题
t('terminal')→t('logs');新增logLineClass(line)按内容返回 CSS 类(.log-cmd/.log-error/.log-warn/.log-ok/.log-head),.terminal-box字体 11px→10px - 第二行双面板(
.row-2):- Profile Progress(
.profile-panel1/3):状态卡片(profiling/error/completed 三态着色 + Error 图标)、双进度条(Profiling 请求完成度reqPct、Records case 处理度recPct)、6 卡关键指标(Progress/Errors/Request Rate/Processing Rate/Elapsed/ETA,均profileMetricscomputed,Phase-1 按完成行/elapsed 估算,fmtSec格式化) - Real-Time Metrics(
.rtm-panel2/3):header 右侧 case-请求数(rtCaseText)+ 原 TPOT/Output 本地阈值控件 + 原MetricsTable - 两面板 header 右侧灰色
.rt-case-text
- Profile Progress(
- i18n en/zh:新增
logs/profileProgress/realTimeMetrics/profCurrentStatus/profProfiling/profError/profCompleted/profRecords/profProgress/profErrors/profReqRate/profProcRate/profElapsed/profEta/reqCountSuffix - 文档:
docs/prds/Performance.md§1.5(Console→Logs)+ 新增 §1.6(第二行双面板,含 Phase-1/Phase-2 说明)
验证(增量):
npm run build成功;check:i18nOK- host 8080 服务最新构建:
PerformanceView-*.js含profileProgress/realTimeMetrics/prof-status-card/prof-metrics/rt-case-text/logLineClass,PerformanceView-*.css含row-2/prof-status-card/prof-metrics/rt-case-text/log-error规则 - 沙箱 dev 后端 8080 可达(
v1.0.9-dev)
TODO 状态:
- Logs 改名 + 高亮 + 小字
- 第二行双面板布局 + Profile Progress(状态/双进度/指标网格)+ Real-Time Metrics(MetricsTable + header)
- i18n 新键 + 构建 + dev 8080 验证
- 文档 — Performance / VERSION 同步
- Phase-2(规划)— 后端实时逐请求指标流 + 趋势图/sparkline/实时 req/s
迭代 15(2026-09-04 22:30:00):Performance 第二行两面板重做 —— Realtime Data 独立整行 + Profile Progress / Real-Time Metrics(antd 版)
功能概述:
- 布局厘清:原始「Realtime Data」面板(所有请求行表格
MetricsTable,含 Best/BestPerf、本地面板阈值、列设置、导出)保持不变,平移到独立整行(.realtime-data-card,位于第二行与统计图行之间);第二行为两个“单个请求”面板 Profile Progress(1/3)+ Real-Time Metrics(2/3)。 - Profile Progress / Real-Time Metrics 重做:由终端绿风格改为 antd 对齐(卡片样式、antd 色板),指标内容保持一致。
- 韧性问题修复:
rtCaseText内const t = theTask.value遮蔽 i18nt,运行中任务(有currentPos)触发TypeError: t is not a function导致 Performance 视图空白 → 局部变量改名tk。
变更内容(前端 — web/src/views/PerformanceView.vue):
- Realtime Data 独立整行:原
MetricsTable+ TPOT/Output 本地阈值控件从 Real-Time Metrics 面板移出,置于独立.realtime-data-card整行(标题t('realtimeData'))。 - Profile Progress(左 1/3):状态卡片(
.pp-status三态:profiling 蓝 / error 红+Error 图标 / completed 绿)、双进度条(.pp-bar-rowProfiling=reqPct、Records=recPct)、每个指标一行(.pp-metrics):Progress / Errors(errorsHaveErr有错标红)/ Request Rate / Processing Rate / Elapsed(fmtClockMm Ss)/ ETA(完成显示0s)。 - Real-Time Metrics(右 2/3):
- 单表 + 单表头(
.rtm-grid.rtm-head):Metric | avg | min | max | p99 | p90 | p50 | std,Metric 列右对齐 - 固定 11 行(
LIVE_METRIC_DEFS):TTFT(ms) / TTST(ms) / TPOT(ms)(近似(ReqLatency−TTFT)/max(OSL−1,1))/ Req Latency(ms) / ITL(ms) / Output TPS/User(=output_tps/并发)/ OSL(tokens) / ISL(tokens) / Output TPS / Req-sec / Requests - 默认值 N/A 灰色(
.rtm-empty),有值绿色高亮(.rtm-cv);移除异常红/!告警条件样式(不再阈值变色) - 表格行
flex:1拉伸填满面板;Real-Time 高度与 Profile 保持等高(profilePanelRef/measureProfileRow测量 →rtmCardStyle赋高,ResizeObserver + 任务状态变化重测) - 移除:单位换算开关(Unit ms/tok↔s/k)、复制快照小图标按钮、
copySnapshot函数、CopyOutlined导入
- 单表 + 单表头(
- Logs 高亮收窄:错误正则去掉宽泛
fail(避免Failed requests:汇总行误标红),改为error|exception|traceback|失败|FAILED。 - i18n en/zh:新增
liveGroupLatency/liveGroupThroughput/liveGroupLength/liveCopySnapshot/liveCopied/liveSamples(部分后续弃用,保留无副作用)。 - 文档:
docs/prds/Performance.md§1.5/§1.6 同步(第二行 antd 版、等高、单表右对齐、N/A 绿值)。
验证(增量):
npm run build成功;check:i18nOK;dev 8080 / mock 8001 均 UP(v1.0.9-dev)- 运行中任务 Performance 页不再抛
TypeError: t is not a function(视图正常渲染)
TODO 状态:
- Realtime Data 独立整行(保持不变)
- Profile Progress(antd:状态/双进度/每指标一行/ETA 补齐)
- Real-Time Metrics(单表单表头右对齐 + TPOT/Output TPS-User 派生 + N/A 灰/有值绿 + 等高/填满)
- 移除单位开关 / 复制按钮 / 异常告警条件样式
-
rtCaseText变量遮蔽修复(运行中页面空白) - 文档 — Performance / VERSION 同步
- Phase-2(规划)— 后端实时逐请求指标流 + 趋势图/实时 req/s
功能概述:
- Real-Time Metrics 表格每个指标全量统计(7 列)直算:TPOT 与 Output TPS/User 由后端逐请求分布下发(不再前端近似/仅 avg),min/max/p99/p90/p50/std 均真实可算。
- 单元格状态着色:可计算未出值→灰色横线
-;有值→蓝色;不可计算→灰黑N/A。 - 表格内容垂直居中、header 右侧 case-请求数完整显示(不再截断);高亮改为蓝色;Perf/Cases 保持 antd 配色。
变更内容:
- 后端
benchscope/benches/builtin_bench.py_live_stats:- 新增逐请求分布:
TPOT((end−first_token)×1000/max(completion−1,1))、OutputTPSPerUser(completion/(end−start))→stat_of全量统计 stats.metrics新增TPOT/OutputTPSPerUser两键
- 新增逐请求分布:
- 前端
web/src/views/PerformanceView.vue:LIVE_METRIC_DEFS:TPOT、Output TPS/User 改为src分布行(读取metrics.TPOT/metrics.OutputTPSPerUser),去掉前端近似与单值 N/A 特殊分支- 单元格改为带类型(
numCell/dashCell/naCell→cols数组),模板按类型渲染;CSS.rtm-fill(蓝)#1677ff /.rtm-dash(灰横线)#bfbfbf /.rtm-na(灰黑)#595959 .rtm-grid增加align-items:center垂直居中;.rt-case-text去截断完整显示
- 文档:
docs/prds/Performance.md§1.6(Real-Time Metrics 指标表 + 每指标计算方式 + 单元格类型着色);本文件迭代记录
验证(增量):
builtin_bench.py语法 OK;npm run build成功;check:i18n OK;dev 8080 / mock 8001 UP- 运行任务后
task_live快照metrics含TPOT/OutputTPSPerUser,前端两行显示全部统计而非 N/A
TODO 状态:
- 后端直算 TPOT / Output TPS/User 全量统计
- 前端映射为完整分布行 + 单元格状态着色(灰横线 / N/A / 蓝)
- 表格垂直居中 + header 完整显示 + 蓝色高亮 + Perf/Cases antd
- 文档 — Performance / VERSION 同步
- Phase-2(规划)— 后端实时逐请求指标流 + 趋势图/实时 req/s
功能概述:
- Performance:每个请求(case×concurrency)的 Profile Progress / Real-Time Metrics 均被缓存;任务完成后点击 Cases 中的请求数颜色块可查看该请求的两个面板,默认显示最后一个已完成请求的数据。
- 抽出可复用
LivePanels组件(snapshot+live两 prop),由单个请求快照渲染两个面板。 - Datas/Perfs:Perf Datas 表格末尾加固定「详情」列,点击弹窗展示该请求的 Profile Progress / Real-Time Metrics。
- 后端持久化:内置引擎每个请求结束落盘实时快照到
run_dir/live/<reqKey>.json,新增GET /api/logs/runs/{run_id}/live读取。
变更内容:
- 前端
web/src/components/LivePanels.vue(新增):从snapshot.stats渲染 Profile Progress + Real-Time Metrics(把原 PerformanceView 第二行逻辑抽离),内部含等高测量;同组件复用于 Performance 第二行与 Datas/Perfs 弹窗。 - 前端 PerformanceView.vue:第二行改用
<LivePanels :snapshot="activeLiveSnapshot" :live="isLiveRunning" />;新增selectedReqKey/selectReq/isReqSelected;Cases 请求数标签可点击(.req-tag/.req-selected);activeLiveSnapshot依次优先:选中请求 → 执行中currentPos→ 最后一个已完成请求。 - 前端 store/test.js:新增
liveReq[taskId][reqKey]逐请求缓存(reqKeyOf(label, case_id, concurrency)与后端口径一致),task_live每帧更新;删除任务时清理;导出reqKeyOf。 - 后端 task_manager.py:内置引擎分支捕获每请求最终快照 →
_save_request_live写run_dir/live/<key>.json(_request_live_key)。 - 后端 api_logs.py:新增
GET /runs/{run_id}/live返回按请求快照列表。 - Datas/Perfs:
MetricsTable新增showDetail/detail事件 + 最后固定列;RunDataPanel透传并 re-emit;DatasPerfsView调用api.getRunLive、openDetail匹配快照弹出 Modal 展示<LivePanels>(无快照回退行指标构造最小 Profile 快照)。 - i18n en/zh:新增
perfDetail/reqViewHint。 - 文档:
docs/prds/Performance.md§1.6(LivePanels 复用、单个请求回看、Datas 详情弹窗、持久化);本文件迭代记录。
验证(增量):
npm run build成功;check:i18nOK;后端语法 OK;dev 8080 / mock 8001 UP- 端到端:内置引擎小任务运行完成 →
run_dir/live/*.json落盘(含 TTFT 全分布),GET /runs/{run_id}/live返回该快照 /api/logs/runs/{run_id}/live端点对旧运行返回空数组(不报错)
TODO 状态:
- LivePanels 组件(snapshot 驱动,复用于 Performance / Datas 弹窗)
- Performance 逐请求缓存 + Cases 点击回看 + 默认末请求
- 后端按请求持久化实时快照 +
/runs/{id}/live端点 - Datas/Perfs 详情固定列 + 弹窗(Profile Progress + Real-Time Metrics)
- i18n + 文档同步
- Phase-2(规划)— 趋势图/sparkline/实时 req/s 增强
功能概述:
- 单请求快照拓展到原生引擎:vLLM/SGLang 无逐请求实时流,现于每个并发点结束时用解析指标构造每请求快照并落盘;Datas/Perfs 详情弹窗与 Performance 点击回看同样可用。
- 优化引擎创建/导入逻辑(Settings → Bench Engines Upload Engine):写文件改为原子写;上传包合并前先做包内自检。
变更内容:
- 后端 task_manager.py:
_record_row:非内置引擎时用_snapshot_from_row(row)构造每请求快照并_save_request_live落盘run_dir/live/<key>.json- 新增模块级
_snapshot_from_row:由解析 metrics 构造快照(TTFT/TPOT/ITL/ReqLatency 的 avg(=mean)/p50(=median)/p99、Output TPS/Req-sec/OSL/ISL 的 avg;min/max/p90/std 置 None)
- 前端 PerformanceView.vue:新增
loadPersistedLive(taskId)用api.getRunLive加载已落盘快照并入test.liveReq(原生引擎回看);任务切换/加载及任务变为 done/stopped/error 时调用。 - 后端 benchs.py(引擎导入优化):
- 新增
_atomic_write(path, text)(临时文件 +os.replace),save_benchs_yaml_text与import_engine_package写benchs.yaml/bench-params.yaml均原子化 import_engine_package合并前包内自检:id 必填且包内唯一、kind ∈ {builtin,vllm,sglang,native,mock}
- 新增
- 前端 api/index.js:新增
getRunLive。 - 文档:
docs/prds/Performance.md§1.6(原生引擎快照构造 + 引擎导入优化);本文件迭代记录。
验证(增量):
npm run build、check:i18n、后端语法 OK;dev 8080 / mock 8001 UP_snapshot_from_row单测:合成原生行 → 快照 total/errors/t、TTFT avg/p99/p50、OSL/ISL avg 均正确GET /api/benchs列表正常(原子写/自检不破坏现有引擎)- 内置引擎端到端落盘不受影响(
_save_request_live路径未变)
TODO 状态:
- 原生引擎每请求快照构造 + 落盘(
_snapshot_from_row) - Performance 完成后/切换加载持久化快照(原生回看)
- Datas/Perfs 原生详情(读取同一 live/ 目录)
- 引擎导入:原子写 + 包内自检
- i18n / 文档同步
- Phase-2(规划)— 趋势图/sparkline/实时 req/s 增强
功能概述:
- 原生引擎(vLLM/SGLang)无逐请求实时流,之前第二行面板在运行中不更新;现每个并发点完成时广播
task_live(用解析指标构造的快照),面板随各并发点完成而逐步更新,并同步落盘供历史回看。
变更内容:
task_manager.py_record_row:原生引擎分支在持久化每请求快照后额外广播task_live(_snapshot_from_row(row)构造快照)→ storeliveReq/activeLiveSnapshot随即更新,第二行展示该并发点 Profile Progress / Real-Time Metrics(状态 Profiling)。
验证(增量):
- 原生 mock 任务(concurrency [1,2])运行完成 →
/runs/{id}/live返回 2 个按并发点快照(1、2),运行中面板随点完成更新 - build/语法/i18n OK;dev 8080 / mock 8001 UP
TODO 状态:
- 原生运行中按并发点广播 task_live(面板随请求完成更新)
- 文档同步
- Phase-2(规划)— 趋势图/sparkline/逐请求连续实时流
功能概述:
- 原生引擎(vLLM/SGLang)无逐请求流的数据源,但可让面板在单个高并发点内部连续滚动:执行时每秒广播
task_live(Elapsed 实时滚动、进度实时解析、状态 Profiling);mock/FAKE 原生通过增量进度行实现点内进度连续递增,真实引擎无逐请求量则点内仅 Elapsed/状态滚动。
变更内容:
task_manager.py原生分支:runner.run前起 1s 广播线程(_ticker),点内持续广播task_live(t=Elapsed、completed=解析进度、status Profiling);_stream包装解析增量进度行;点结束 join 停止。- 新增模块级
_parse_native_done:解析benchscope-live-done k/N增量进度行。 mocks/bench_outputs.py:新增_done_lines(num_prompts),在 vLLM/SGLang 仿真输出中插入逐请求完成行(benchscope-live-done k/N,N 大时按步长采样)。benches/runner.py_run_fake:改为在模拟耗时过程中逐行流式输出(每行小步 sleep,总时长不变、可被 kill 中断)→ 增量进度行被实时解析、面板点内滚动。
说明/边界:
- mock/FAKE 原生:点内进度随
k/N连续递增;但 mock 点完成很快(≤0.6s),实际可见滚动有限;真实高并发长点(>1s)Elapsed/状态每秒滚动。 - 真实安装的 vLLM/SGLang CLI 无可解析逐请求进度行:点内仅 Elapsed/状态滚动,进度点结束上满(数据源固有限制)。
验证(增量):
- WS 抓取原生 mock 任务
task_live:点完成广播completed=1/8与完成快照;_run_fake逐行流式、进度解析正常 - 后端语法 / build OK;dev 8080 / mock 8001 UP
TODO 状态:
- 原生点内 1s
task_live广播(Elapsed/状态滚动) - mock 增量进度行 + 逐行流式(点内进度连续)
- 文档同步
- Phase-2(规划)— 趋势图/sparkline/真实引擎逐请求流
功能概述:
- 明确第三方(原生)引擎每个指标哪些能拿到、哪些不能;
_snapshot_from_row统一按“可得填数值 / 不可得填None”输出,前端据此渲染:数值=蓝、null=灰黑 N/A、缺失=灰横线。
变更内容:
task_manager.py_snapshot_from_row:重写为固定 11 指标输出(含 TTST、OutputTPSPerUser 全None);可得字段填数值(TTFT/TPOT/ITL/ReqLatency 的 avg/p50/p99、Output TPS/ReqSec/OSL/ISL 的 avg),不可得字段(min/max/p90/std)填None。web/src/components/LivePanels.vuenumCell:null → N/A(不可得),undefined/缺失 → 灰横线(尚未出值),数值 → 蓝。
第三方引擎可得性(最终口径):
- TTFT/TPOT/ITL/Req Latency:avg(=mean)、p50(=median)、p99 可得;min/max/p90/std 不可得(N/A)
- Output TPS、Req/sec:仅 avg 可得;其余 N/A
- OSL、ISL:仅 avg(=总量/请求数) 可得;其余 N/A
- TTST、Output TPS/User:整体不可得 → 全 N/A
验证(增量):
- 原生 mock 运行后快照:TTFT
{avg:70.0,p50:68.9,p99:93.3,min/max/p90/std:null}、Output TPS{avg:47.0,其余 null}、TTST 与 OutputTPSPerUser 全null - build / 语法 / i18n OK;dev 8080 / mock 8001 UP
TODO 状态:
-
_snapshot_from_row可得/不可得显式化 - 前端
null→N/A、缺失→灰横线 - 文档:可得性盘点表 + 迭代记录
- Phase-2(规划)— 趋势图/sparkline/真实引擎逐请求流
功能概述:
- 未完成功能以「敬请期待」占位,前端统一使用新增 i18n 键
comingSoon(zh=敬请期待 / en=Coming soon)。
变更内容:
DashboardView.vue:暂时移除 Eval Records 面板(可自 git 历史恢复)。AccuracyView.vue:「创建精度任务」不再跳转/accuracy/create,改为弹出「敬请期待」提示弹窗(goCreate→ 打开模态)。DatasView.vue:副导航**隐藏 Evals**,仅保留 Perfs / Analysis。router/index.js:/datas/evals重定向到/datas/perfs(隐藏后不可直接访问)。DatasAnalysisView.vue:Analysis 页改为「敬请期待」占位(a-result大标题 +analysisPlanned副标题)。SettingsView.vue:Settings/Models 厂商头部隐藏 Homepage 链接(仅占位注释,未删数据字段)。
验证(增量):
check-i18nOK(新增comingSoon键 zh/en 一致)npm run buildOK;dev 8080 / mock 8001 UP
TODO 状态:
- Dashboard 隐藏 Eval Records
- Accuracy 创建精度任务 → 敬请期待弹窗
- Datas 隐藏 Evals + Analysis 敬请期待 + evals 路由重定向
- Settings/Models 隐藏 Homepage
- i18n
comingSoon键 + 构建验证
功能概述:
- Overview 统计只保留 Total Perfs / Total Acc,移除未实现的占位与状态项。
- Envs info 的 Network 面板补全每个主联网口的 UUID(MAC) / IP / 子网 / 掩码。
变更内容:
web/src/views/DashboardView.vue:- Overview 移除 Max Perf Records (RUN ID) / Max Acc Records (RUN ID) / Running Tasks / Test Env Status 四个统计格,仅保留 Total Perfs Records 与 Total Acc Records。
- Network 面板改为按网口渲染
iface标题 +UUID / IP / 子网 / 掩码四行(新增.net-block/.net-iface样式);未联网口回退—。
benchscope/env_info.py_network_interfaces():每个网口新增mac(即用户口径的 UUID,主联网口 MAC)、mask(子网掩码)、subnet(子网地址)字段:- Linux:
ip -o -4 addr show取 IP/CIDR 前缀 →_cidr_to_netmask算掩码、_net_addr算子网;ip -o link show解析 MAC。 - macOS:
ifconfig解析ether(MAC) 与inet ... netmask 0xffffff00→_hex_netmask_to_str转点分十进制掩码,再算子网。 - 使用标准库
ipaddress/re,无新增依赖。
- Linux:
web/src/i18n/zh.js、en.js:新增netUuid / netIp / netSubnet / netMask键。
验证(增量):
py_compile benchscope/env_info.pyOK;本机 macOS 采集输出en0→mac:78:4f:43:8c:66:2b, ip:192.168.71.29, subnet:192.168.71.0, mask:255.255.255.0。check-i18nOK;npm run buildOK。- 重启 dev 后
GET /api/dashboard/env返回含mac/subnet/mask的网口数据;dev 8080 / mock 8001 UP。
TODO 状态:
- Overview 移除 4 个统计格(仅保留 Total Perfs / Total Acc)
- Network 补全 UUID(MAC) / IP / 子网 / 掩码(前后端)
- i18n 键 + 构建 + dev 重启验证
功能概述:
- Overview 面板由「Total Perfs / Total Acc」扩展为 7 个子面板:Performance、Accuracy、Sessions、Skills(内置)、Models、Datasets、以及占整行的 Providers(内含 Provider 数量 + Provider Models 两个小格)。
- 布局:Providers 整行 1 个,其余 6 个每行 2 个。
变更内容:
web/src/views/DashboardView.vue:- Overview 模板:6 个 stat-box(Performance=
stats.total_runs、Accuracy=stats.total_acc_runs、Sessions=sessionCount、Skills=skillCount带(内置)标记、Models=modelDownloadCount、Datasets=datasetDownloadCount)+ 整行.prov-box(Provider 数量 / Provider Models)。 - 新增计数 ref 与
loadOverviewCounts():并行拉取/api/sessions、/api/skills、/api/config/providers;Provider Models 对各 Provider 并行testConnection求和模型数。Models / Datasets 下载数暂未实现,默认 0。 - 新增
.prov-box/.prov-col样式。
- Overview 模板:6 个 stat-box(Performance=
web/src/i18n/zh.js、en.js:新增perfCount / accCount / builtin / providerCount / providerModelCount键。
数据口径:
- Performance = Performance 记录数(
stats.total_runs);Accuracy = 精度记录数(stats.total_acc_runs) - Sessions = 会话数量(
sessions.length);Skills(内置) = 技能数量(skills.length) - Models / Datasets = 下载数(暂未实现 → 0)
- Providers = Provider 数量(
providers.length);Provider Models = 各 Provider 探测模型数之和(testConnection)
验证(增量):
check-i18nOK;npm run buildOK。- 运行后端各端点返回符合预期:
/api/sessions、/api/skills、/api/config/providers、/api/dashboard/stats。 - 纯前端改动,dev 8080 无需重启即可加载新构建。
TODO 状态:
- Overview 重构为 7 子面板(Providers 占整行)
- 接入 Sessions / Skills / Providers 实时计数
- Models / Datasets 下载数占位(默认 0)
- i18n 键 + 构建验证
功能概述:
- Envs info 面板文字改用 antd Typography 样式,整体字号缩小。
- Network 面板下的 UUID 标签改为 MAC。
变更内容:
web/src/views/DashboardView.vue:- Envs info 各
env-row-item的标签<span>改用<a-typography-text type="secondary">(antd secondary 文字样式),值保留<b>。 - 字号缩小:
.env-box-title13px→12px、.env-row-item12px→11px、.net-iface12px→11px;.env-row-item :deep(.ant-typography)强制 11px / 行高 1.5。
- Envs info 各
web/src/i18n/zh.js、en.js:netUuid值由UUID改为MAC(键名保留 netUuid 以最小改动)。
验证(增量):
check-i18nOK;npm run buildOK。- 纯前端改动,dev 8080 无需重启。
TODO 状态:
- Envs info 使用 antd 文字样式
- 整体文字减小
- Network 下 UUID 标签改为 MAC
(1.0.9 待办,按规划补充后逐项勾选)
- 页面级功能与约束:
docs/prds/(Performance / Performance-Create / Dashboard / Accuracy / Sessions / Settings / Datas / TopBar) - 架构 / 方案 / 设计 / 开发规范:
docs/rules/(Architecture / Software / Design / Development / BenchEngine / BenchCore / BenchUpstream / AccuracyEngine) - 版本路线:
docs/Roadmap.md