Skip to content

feat(dashboard): 拆分首页为 Overview / Recent Active Sessions 双页签;#220

Merged
ThreeFish-AI merged 1 commit into
feature/1.x.xfrom
ThreeFish-AI/dashboard-tabs
Apr 30, 2026
Merged

feat(dashboard): 拆分首页为 Overview / Recent Active Sessions 双页签;#220
ThreeFish-AI merged 1 commit into
feature/1.x.xfrom
ThreeFish-AI/dashboard-tabs

Conversation

@ThreeFish-AI
Copy link
Copy Markdown
Owner

@ThreeFish-AI ThreeFish-AI commented Apr 30, 2026

变更内容

将 Dashboard 首页从单页布局拆分为 OverviewRecent Active Sessions 两个独立页签,降低单页信息密度,提升浏览体验。

变更动机

首页同时展示 KPI 卡片、供应商状态、多维度图表和会话表格,内容密集导致首屏加载缓慢。拆分后各页签按需加载数据,减少不必要的 API 请求。

实现要点

  • 页签 UI:新增 <nav class="tabs"> 导航栏,配合 .tab-btn / .tab-pane 实现 CSS 驱动的页签切换,包含 focus-visible 键盘焦点样式与完整 ARIA 属性(role="tablist/tab/tabpanel", aria-controls, aria-selected
  • 懒加载机制:通过 tabLoaded 标记实现按需加载,首次切到某页签时才拉取对应 API 数据;refresh() 仅刷新当前活跃页签
  • URL 状态同步:页签状态通过 ?tab= 查询参数同步到 URL(history.replaceState),刷新页面后可恢复上次浏览的页签位置
  • 并发安全refresh() 内置 while-loop 快照机制(const tab = currentTab),正确处理 await 期间用户切换页签的竞态条件,确保 tabLoaded 不错位,循环最多迭代页签总数次

🤖 Generated with Claude Code, CodeX, Gemini
Co-Authored-By: Aurelius Huangthreefish.ai@gmail.com

- 顶部新增 Tab 导航(Overview / Recent Active Sessions),用 `?tab=` 同步 URL 状态,F5 与书签可保留页签;
- 将 refresh() 拆为 refreshOverview() + refreshSessions() + 分发器,⟳ 按钮与 10 分钟 setInterval 均仅刷新当前页签;
- 页签切换采用懒加载(首次切到才请求,再切回不重复请求),降低无关 API 调用;
- refresh() 加入循环补刷快照机制,防止 await 期间用户切页签导致 tabLoaded 标记错位;
- 沿用既有 CSS 变量与暗色主题,新增 .tabs / .tab-btn / .tab-pane 样式。

🤖 Generated with [Claude Code](https://github.com/claude), [CodeX](https://openai.com), [Gemini](https://github.com/apps/gemini-code-assist)
Co-Authored-By: Aurelius Huang<threefish.ai@gmail.com>
@ThreeFish-AI ThreeFish-AI changed the title feat(dashboard): 拆分首页为 Overview / Recent Active Sessions 双页签 feat(dashboard): 拆分首页为 Overview / Recent Active Sessions 双页签; Apr 30, 2026
@ThreeFish-AI ThreeFish-AI merged commit 02d3aa5 into feature/1.x.x Apr 30, 2026
6 checks passed
@ThreeFish-AI ThreeFish-AI deleted the ThreeFish-AI/dashboard-tabs branch April 30, 2026 09:43
ThreeFish-AI added a commit that referenced this pull request May 1, 2026
* fix(proxy): 修复 tool_use.input 非法 JSON 序列化导致的级联故障转移失败; (#213)

- 防御性 tool_use.input 序列化: 非 dict 类型(None/字符串等)降级为空字典,
  避免向 copilot 发送非 JSON 对象的 arguments 字段
- 识别 zhipu 500 'ClaudeContentBlockToolResult' 错误为格式不兼容,
  不计入熔断器, 确保干净的故障转移到 copilot
- 扩展 _is_likely_request_format_error 覆盖结构化 400 响应中
  invalid_tool_call_format 错误码的检测
- 新增对应单元测试: input 类型降级、zhipu 格式错误检测、结构化 400 检测

🤖 Generated with [Claude Code](https://github.com/claude), [CodeX](https://openai.com), [Gemini](https://github.com/apps/gemini-code-assist)

* fix(usage-parser): 补充 OpenAI/Gemini SSE 流式分支的 model_served 提取; (#214)

OpenAI 和 Gemini 的 SSE 流式响应解析中,model_served 仅写入证据记录而未赋值
到主 usage 字典,导致 Native API 流式路径下模型名称回退为 "unknown"。

🤖 Generated with [Claude Code](https://github.com/claude), [CodeX](https://openai.com), [Gemini](https://github.com/apps/gemini-code-assist)

* build(version): 升级版本号 0.3.1a3 → 0.3.1a4;

🤖 Generated with [Claude Code](https://github.com/claude), [CodeX](https://openai.com), [Gemini](https://github.com/apps/gemini-code-assist)
Co-Authored-By: Aurelius Huang<threefish.ai@gmail.com>

* fix(vendor-channels): 为 tool_result 块注入 id 字段,修复 zhipu GLM-5 后端 500 错误; (#215)

新增 _inject_tool_result_id_for_zhipu 辅助函数,在所有 targeting zhipu 的转换通道
(copilot→zhipu、anthropic→zhipu、zhipu self-cleanup)末尾统一注入 tool_result.id,
解决 zhipu 后端错误访问 .id 属性导致的 'ClaudeContentBlockToolResult' object has no attribute 'id' 级联故障转移问题。

🤖 Generated with [Claude Code](https://github.com/claude), [CodeX](https://openai.com), [Gemini](https://github.com/apps/gemini-code-assist)

* build(version): 升级版本号 0.3.1a4 → 0.3.1a5;

🤖 Generated with [Claude Code](https://github.com/claude), [CodeX](https://openai.com), [Gemini](https://github.com/apps/gemini-code-assist)
Co-Authored-By: Aurelius Huang<threefish.ai@gmail.com>

* fix(vendor-channels): 移除 zhipu 目标转换中有害步骤,修复 500 级联故障及遗留测试; (#216)

* fix(vendor-channels): 移除 zhipu 目标转换中的有害步骤,修复 500 级联故障;

从 prepare_copilot_to_zhipu、prepare_anthropic_to_zhipu、prepare_zhipu_self_cleanup
三个通道中移除 enforce_anthropic_tool_pairing(tool_result 搬迁触发 zhipu 500)、
_inject_tool_result_id_for_zhipu(zhipu 类不读取 JSON id,注入无效)、
_strip_cache_control(GLM-5 原生支持 cache_control)。

🤖 Generated with [Claude Code](https://github.com/claude), [CodeX](https://openai.com), [Gemini](https://github.com/apps/gemini-code-assist)
Co-Authored-By: Aurelius Huang<threefish.ai@gmail.com>

* fix(vendor-channels): 修复 zhipu 移除 id 注入后遗留测试断言错误;

6 处测试的断言仍检查旧行为(id 被注入 / cache_control 被移除 / tool_result 被搬迁),
导致 KeyError 或 AssertionError。统一更新为验证新语义:id 不注入、cache_control 保留、
inline tool_result 保留在 assistant 原位。

🤖 Generated with [Claude Code](https://github.com/claude), [CodeX](https://openai.com), [Gemini](https://github.com/apps/gemini-code-assist)
Co-Authored-By: Aurelius Huang<threefish.ai@gmail.com>

* docs(agents): 新增"In-depth and close to the facts"协作准则;

🤖 Generated with [Claude Code](https://github.com/claude), [CodeX](https://openai.com), [Gemini](https://github.com/apps/gemini-code-assist)
Co-Authored-By: Aurelius Huang<threefish.ai@gmail.com>

* build(version): 升级版本号 0.3.1a5 → 0.3.1a6;

🤖 Generated with [Claude Code](https://github.com/claude), [CodeX](https://openai.com), [Gemini](https://github.com/apps/gemini-code-assist)
Co-Authored-By: Aurelius Huang<threefish.ai@gmail.com>

* build(version): 升级版本号 0.3.1a6 → 0.3.1a7;

🤖 Generated with [Claude Code](https://github.com/claude), [CodeX](https://openai.com), [Gemini](https://github.com/apps/gemini-code-assist)
Co-Authored-By: Aurelius Huang<threefish.ai@gmail.com>

* fix(vendor-channels): 修复 zhipu tool_result 500 级联故障 (#217)

* fix(vendor-channels): 移除 zhipu 目标转换中的有害步骤,修复 500 级联故障;

从 prepare_copilot_to_zhipu、prepare_anthropic_to_zhipu、prepare_zhipu_self_cleanup
三个通道中移除 enforce_anthropic_tool_pairing(tool_result 搬迁触发 zhipu 500)、
_inject_tool_result_id_for_zhipu(zhipu 类不读取 JSON id,注入无效)、
_strip_cache_control(GLM-5 原生支持 cache_control)。

🤖 Generated with [Claude Code](https://github.com/claude), [CodeX](https://openai.com), [Gemini](https://github.com/apps/gemini-code-assist)
Co-Authored-By: Aurelius Huang<threefish.ai@gmail.com>

* fix(vendor-channels): 修复 zhipu 移除 id 注入后遗留测试断言错误;

6 处测试的断言仍检查旧行为(id 被注入 / cache_control 被移除 / tool_result 被搬迁),
导致 KeyError 或 AssertionError。统一更新为验证新语义:id 不注入、cache_control 保留、
inline tool_result 保留在 assistant 原位。

🤖 Generated with [Claude Code](https://github.com/claude), [CodeX](https://openai.com), [Gemini](https://github.com/apps/gemini-code-assist)
Co-Authored-By: Aurelius Huang<threefish.ai@gmail.com>

* fix(vendor-channels): 在 tier 门控层主动跳过含 tool_result 的 zhipu 请求;

修正前两次诊断:zhipu 500 发生于所有含 tool_result 块的请求(非仅 tool pairing 后)。
根因是 zhipu 后端 ClaudeContentBlockToolResult 类缺少 id 属性且 JSON 注入无效。
通过 RequestCapabilities.has_tool_results 门控,在发送请求前跳过 zhipu tier,
消除「尝试 → 500 → failover」的无效延迟。

🤖 Generated with [Claude Code](https://github.com/claude), [CodeX](https://openai.com), [Gemini](https://github.com/apps/gemini-code-assist)
Co-Authored-By: Aurelius Huang<threefish.ai@gmail.com>

* fix(vendor-channels): 将 tool_use/tool_result 展平为 text 块,彻底修复 zhipu 500 错误

zhipu 后端的 ClaudeContentBlockToolResult 类缺少 id 属性,
无法通过 JSON 注入修复。改用在转换通道中将所有 tool_use 和
tool_result 块转为 text 块的策略,让 zhipu 仅看到纯文本对话。

- 新增 _flatten_tool_blocks 辅助函数
- 三个 zhipu 目标通道均调用展平逻辑
- 移除 ZhipuVendor.supports_request 中的 tool_result 门控
- 更新全部相关测试用例

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>

---------

Co-authored-by: Claude Opus 4.7 <noreply@anthropic.com>

* revert(vendor-channels): 还原至 v0.3.0 基线,修复 failover 级联 server_tool_use.id 400 错误 (#218)

* revert(vendor-channels): 还原至 v0.3.0 基线,修复 failover 级联 server_tool_use.id 400 错误;

- 还原 vendor_channels.py 至 v0.3.0(移除 _flatten_tool_blocks、_inject_tool_result_id_for_zhipu、
  _enforce_pairing_sanity_pass、zhipu 自清理通道、anthropic→zhipu 通道等 v0.3.0 后引入的特殊处理)
- 修复 _determine_source_vendor Priority 1 逻辑:仅当 failed_tier 有已注册转换通道时才返回,
  否则降级到 session history / body inference,确保 copilot→anthropic failover 时能通过
  session 找到 zhipu 源并正确清理 server_tool_use 块
- 还原 model/vendor.py(移除 TOOL_RESULTS capability)
- 部分还原 error_classifier.py(保留 CN 语义拒绝标记,移除 has_tool_results)
- 还原 executor.py(移除 zhipu 500 特殊检测,保留 invalid_tool_call_format 检测)
- 同步更新测试用例,全部 1399 测试通过

🤖 Generated with [Claude Code](https://github.com/claude), [CodeX](https://openai.com), [Gemini](https://github.com/apps/gemini-code-assist)
Co-Authored-By: Aurelius Huang<threefish.ai@gmail.com>

* docs(issue): 恢复与 vendor-channels 回退无关的 Issue #1 文档;

回退 vendor-channels 至 v0.3.0 基线时误删了 docs/issue.md 全部内容,
其中 Issue #1(streaming usage parse failed)描述的 null 防护修复
仍保留在 usage_parser.py 中,属于无关文档,不应被连带删除。

🤖 Generated with [Claude Code](https://github.com/claude), [CodeX](https://openai.com), [Gemini](https://github.com/apps/gemini-code-assist)
Co-Authored-By: Aurelius Huang<threefish.ai@gmail.com>

* feat(session-policy): 新增 Session 级别路由策略与会话活动面板 (#219)

* feat(session-policy): 新增 Session 级别路由策略与会话活动面板;

- 新增 SessionPolicy 配置模型(Pydantic),支持按 session_key / client_category 匹配并覆盖 vendor 优先级
- 新增 SessionPolicyResolver 解析引擎,启动时构建索引实现 O(1) 查找
- 为 usage_log 表新增 session_key 列及索引,含幂等迁移逻辑
- 新增 query_recent_sessions / query_session_profile 聚合查询方法
- executor 路由流式/非流式请求时按 Session Policy 动态重排 tier 顺序
- Dashboard 新增 Recent Active Sessions 面板,展示近期会话聚合数据
- 新增 /api/dashboard/sessions API 端点
- 新增完整测试覆盖(schema、迁移、策略解析、tier 重排、聚合查询)

🤖 Generated with [Claude Code](https://github.com/claude), [CodeX](https://openai.com), [Gemini](https://github.com/apps/gemini-code-assist)
Co-Authored-By: Aurelius Huang<threefish.ai@gmail.com>

* fix(session-policy): 修复 Dashboard XSS 风险并标注 client_category 为预留字段;

- 新增 escapeHtml() 工具函数,对所有用户可控数据(session_key、models、vendors、categories)插入 innerHTML 前进行 HTML 实体转义
- title 属性中的 session_key 同样使用转义后的值
- 在 SessionPolicyMatch.client_category 字段描述和 config.default.yaml 中明确标注该条件为预留功能,当前版本暂未生效

🤖 Generated with [Claude Code](https://github.com/claude), [CodeX](https://openai.com), [Gemini](https://github.com/apps/gemini-code-assist)
Co-Authored-By: Aurelius Huang<threefish.ai@gmail.com>

* build(version): 升级版本号 0.3.1a7 → 0.3.1a8;

🤖 Generated with [Claude Code](https://github.com/claude), [CodeX](https://openai.com), [Gemini](https://github.com/apps/gemini-code-assist)
Co-Authored-By: Aurelius Huang<threefish.ai@gmail.com>

* feat(dashboard): 拆分首页为 Overview / Recent Active Sessions 双页签; (#220)

- 顶部新增 Tab 导航(Overview / Recent Active Sessions),用 `?tab=` 同步 URL 状态,F5 与书签可保留页签;
- 将 refresh() 拆为 refreshOverview() + refreshSessions() + 分发器,⟳ 按钮与 10 分钟 setInterval 均仅刷新当前页签;
- 页签切换采用懒加载(首次切到才请求,再切回不重复请求),降低无关 API 调用;
- refresh() 加入循环补刷快照机制,防止 await 期间用户切页签导致 tabLoaded 标记错位;
- 沿用既有 CSS 变量与暗色主题,新增 .tabs / .tab-btn / .tab-pane 样式。

🤖 Generated with [Claude Code](https://github.com/claude), [CodeX](https://openai.com), [Gemini](https://github.com/apps/gemini-code-assist)

* feat(session-vendor): 新增 Session 级别运行时 vendor 绑定能力 (#221)

* feat(session-vendor): 新增 Session 级别运行时 vendor 绑定能力

- SessionPolicyResolver 支持运行时 upsert/remove/list 操作,无需重启服务
- 新增 PUT/DELETE/GET /api/session-vendor API 端点
- Dashboard Sessions 表新增 "Vendor Bind" 下拉选择器,即时绑定 vendor
- CLI 新增 session 子命令组(bind/unbind/list)

🤖 Generated with [Claude Code](https://github.com/claude), [CodeX](https://openai.com), [Gemini](https://github.com/apps/gemini-code-assist)
Co-Authored-By: Aurelius Huang<threefish.ai@gmail.com>

* fix(session-vendor): 修复 CLI unbind URL 编码与 list_runtime_bindings 类型标注;

- session_unbind 中 key 参数使用 urllib.parse.quote 进行 URL 编码,防止特殊字符导致路由匹配失败
- 修正 list_runtime_bindings 返回类型为 dict[str, str | list[str]],准确反映 session_key 为 str、vendors 为 list[str]

🤖 Generated with [Claude Code](https://github.com/claude), [CodeX](https://openai.com), [Gemini](https://github.com/apps/gemini-code-assist)
Co-Authored-By: Aurelius Huang<threefish.ai@gmail.com>

* fix(session-vendor): 修复 Dashboard bind 变更响应检查与 XSS 防护;

- handleBindChange 增加 resp.ok 检查,失败时 revert select 并输出错误日志
- buildBindSelect 改用 data-session-key 属性 + 事件委托替代 inline onchange,消除字符串拼接注入风险
- resolve() docstring 补充 SessionPolicy 不可变约束说明

🤖 Generated with [Claude Code](https://github.com/claude), [CodeX](https://openai.com), [Gemini](https://github.com/apps/gemini-code-assist)
Co-Authored-By: Aurelius Huang<threefish.ai@gmail.com>

* fix(session-vendor): 修复运行时绑定覆盖配置策略与 Dashboard 容错;

- upsert 时备份被覆盖的配置策略,remove 时自动恢复,避免配置策略永久丢失
- Dashboard updateSessions 改用 Promise.allSettled,bind/status 请求失败时降级而不阻塞表格渲染
- 新增 test_runtime_remove_restores_config_policy 测试用例覆盖恢复路径

🤖 Generated with [Claude Code](https://github.com/claude), [CodeX](https://openai.com), [Gemini](https://github.com/apps/gemini-code-assist)
Co-Authored-By: Aurelius Huang<threefish.ai@gmail.com>

* fix(session-vendor): 修复 API JSON 解析异常处理与 Dashboard 多绑定显示;

- routes: request.json() 添加 try/except,malformed JSON 返回 400 而非 500
- routes: 区分 "非 JSON" 与 "非 JSON Object" 两种错误消息
- dashboard: buildBindSelect 多 vendor 绑定时显示 (+N) 后缀提示

🤖 Generated with [Claude Code](https://github.com/claude), [CodeX](https://openai.com), [Gemini](https://github.com/apps/gemini-code-assist)
Co-Authored-By: Aurelius Huang<threefish.ai@gmail.com>

* build(version): 升级版本号 0.3.1a8 → 0.3.1a9;

🤖 Generated with [Claude Code](https://github.com/claude), [CodeX](https://openai.com), [Gemini](https://github.com/apps/gemini-code-assist)
Co-Authored-By: Aurelius Huang<threefish.ai@gmail.com>

* fix(dashboard): 优化 Recent Active Sessions 表格 UI,消除滚动条并新增分页 (#222)

* fix(dashboard): 优化 Recent Active Sessions 表格 UI,消除滚动条并新增分页;

- 解析 session_key JSON,分别展示 session_id(首列完整显示)、device_id 与 account_uuid(紧凑副文本)
- 采用 table-layout: fixed + colgroup 固定列宽比例,消除底部水平滚动条
- 新增客户端分页(默认 30 行/页,显示总行数与页码),消除右侧垂直滚动条
- 后端 API limit 上限从 100 调整到 200,支持前端拉取更多数据

🤖 Generated with [Claude Code](https://github.com/claude), [CodeX](https://openai.com), [Gemini](https://github.com/apps/gemini-code-assist)
Co-Authored-By: Aurelius Huang<threefish.ai@gmail.com>

* fix(dashboard): 提升 session-key 样式选择器优先级,确保覆盖通用 td 规则;

🤖 Generated with [Claude Code](https://github.com/claude), [CodeX](https://openai.com), [Gemini](https://github.com/apps/gemini-code-assist)
Co-Authored-By: Aurelius Huang<threefish.ai@gmail.com>

* build(version): 升级版本号 0.3.1a9 → 0.3.1a10;

🤖 Generated with [Claude Code](https://github.com/claude), [CodeX](https://openai.com), [Gemini](https://github.com/apps/gemini-code-assist)
Co-Authored-By: Aurelius Huang<threefish.ai@gmail.com>

* fix(dashboard): 优化 Recent Active Sessions 表格列显示,消除内容截断 (#223)

- 重分配列宽:Session ID 22%→16%,Client 6%→10%,Vendor Bind 8%→10%,
  Models 14%→16%,Vendors 12%→14%,解决 Client/Vendor Bind 每行溢出问题
- 供应商标签去文本前缀,改用颜色区分 API(蓝)/CC(绿) 类型,节省约 40% 列宽
- Models/Vendors 列允许标签换行,解除全局 nowrap 约束
- Models 显示上限 2→3,"+N" 标签添加 title tooltip 显示完整列表
- Vendors 增加上限 4,超出部分 "+N" + tooltip

🤖 Generated with [Claude Code](https://github.com/claude), [CodeX](https://openai.com), [Gemini](https://github.com/apps/gemini-code-assist)

* fix(dashboard): 优化 Recent Active Sessions 表格显示与交互体验 (#224)

* fix(dashboard): 优化 Recent Active Sessions 表格列显示,消除内容截断

- 重分配列宽:Session ID 22%→16%,Client 6%→10%,Vendor Bind 8%→10%,
  Models 14%→16%,Vendors 12%→14%,解决 Client/Vendor Bind 每行溢出问题
- 供应商标签去文本前缀,改用颜色区分 API(蓝)/CC(绿) 类型,节省约 40% 列宽
- Models/Vendors 列允许标签换行,解除全局 nowrap 约束
- Models 显示上限 2→3,"+N" 标签添加 title tooltip 显示完整列表
- Vendors 增加上限 4,超出部分 "+N" + tooltip

🤖 Generated with [Claude Code](https://github.com/claude), [CodeX](https://openai.com), [Gemini](https://github.com/apps/gemini-code-assist)
Co-Authored-By: Aurelius Huang<threefish.ai@gmail.com>

* fix(dashboard): 优化 Session 表格显示 — 禁止换行、添加 Tooltip 与 Copy 按钮

- 移除 cell-tags 换行样式,所有单元格统一 nowrap + ellipsis,行高统一 48px
- Session ID 列缩窄至 12%,添加 ⧉ Copy 按钮一键拷贝 Session Key
- Models/Vendors 单元格添加 title tooltip,鼠标悬停显示完整标签列表
- 修复 Success 列 "..." 问题:添加 cell-success 类禁用 ellipsis(进度条复合内容)
- 进一步优化列宽:Vendors 14%→12%、Client/Vendor Bind 10%→12%、Models 16%→17%

🤖 Generated with [Claude Code](https://github.com/claude), [CodeX](https://openai.com), [Gemini](https://github.com/apps/gemini-code-assist)
Co-Authored-By: Aurelius Huang<threefish.ai@gmail.com>

* fix(dashboard): Avg Latency 列使用可读时长单位(ms/s/min)自动换算

- <1s 显示毫秒(如 234ms)
- 1s~60s 显示秒(如 2.3s、15s)
- >=60s 显示分钟+秒(如 2min 30s、5min)

🤖 Generated with [Claude Code](https://github.com/claude), [CodeX](https://openai.com), [Gemini](https://github.com/apps/gemini-code-assist)
Co-Authored-By: Aurelius Huang<threefish.ai@gmail.com>

* feat(dashboard): 支持点击行展开详情卡片,显示完整字段内容

- 点击任意数据行展开/收起 detail-card(手风琴模式,仅展开一行)
- 卡片以 grid 布局展示全部字段完整值:Session ID、Device、Account、
  Models(全量标签)、Vendors(全量标签)、Avg Latency、Success Rate、Client
- Session ID 列和 Vendor Bind 列点击事件隔离(stopPropagation),
  避免误触展开
- 新增 toggleRow 函数,切换 .row-detail.open 类控制显隐

🤖 Generated with [Claude Code](https://github.com/claude), [CodeX](https://openai.com), [Gemini](https://github.com/apps/gemini-code-assist)
Co-Authored-By: Aurelius Huang<threefish.ai@gmail.com>

* chore(gitignore): 添加 .playwright-mcp/ 到忽略规则

🤖 Generated with [Claude Code](https://github.com/claude), [CodeX](https://openai.com), [Gemini](https://github.com/apps/gemini-code-assist)
Co-Authored-By: Aurelius Huang<threefish.ai@gmail.com>

* fix(dashboard): 优化 Session 表格显示与交互体验 (#225)

* fix(dashboard): 优化 Recent Active Sessions 表格列显示,消除内容截断

- 重分配列宽:Session ID 22%→16%,Client 6%→10%,Vendor Bind 8%→10%,
  Models 14%→16%,Vendors 12%→14%,解决 Client/Vendor Bind 每行溢出问题
- 供应商标签去文本前缀,改用颜色区分 API(蓝)/CC(绿) 类型,节省约 40% 列宽
- Models/Vendors 列允许标签换行,解除全局 nowrap 约束
- Models 显示上限 2→3,"+N" 标签添加 title tooltip 显示完整列表
- Vendors 增加上限 4,超出部分 "+N" + tooltip

🤖 Generated with [Claude Code](https://github.com/claude), [CodeX](https://openai.com), [Gemini](https://github.com/apps/gemini-code-assist)
Co-Authored-By: Aurelius Huang<threefish.ai@gmail.com>

* fix(dashboard): 优化 Session 表格显示 — 禁止换行、添加 Tooltip 与 Copy 按钮

- 移除 cell-tags 换行样式,所有单元格统一 nowrap + ellipsis,行高统一 48px
- Session ID 列缩窄至 12%,添加 ⧉ Copy 按钮一键拷贝 Session Key
- Models/Vendors 单元格添加 title tooltip,鼠标悬停显示完整标签列表
- 修复 Success 列 "..." 问题:添加 cell-success 类禁用 ellipsis(进度条复合内容)
- 进一步优化列宽:Vendors 14%→12%、Client/Vendor Bind 10%→12%、Models 16%→17%

🤖 Generated with [Claude Code](https://github.com/claude), [CodeX](https://openai.com), [Gemini](https://github.com/apps/gemini-code-assist)
Co-Authored-By: Aurelius Huang<threefish.ai@gmail.com>

* fix(dashboard): Avg Latency 列使用可读时长单位(ms/s/min)自动换算

- <1s 显示毫秒(如 234ms)
- 1s~60s 显示秒(如 2.3s、15s)
- >=60s 显示分钟+秒(如 2min 30s、5min)

🤖 Generated with [Claude Code](https://github.com/claude), [CodeX](https://openai.com), [Gemini](https://github.com/apps/gemini-code-assist)
Co-Authored-By: Aurelius Huang<threefish.ai@gmail.com>

* feat(dashboard): 支持点击行展开详情卡片,显示完整字段内容

- 点击任意数据行展开/收起 detail-card(手风琴模式,仅展开一行)
- 卡片以 grid 布局展示全部字段完整值:Session ID、Device、Account、
  Models(全量标签)、Vendors(全量标签)、Avg Latency、Success Rate、Client
- Session ID 列和 Vendor Bind 列点击事件隔离(stopPropagation),
  避免误触展开
- 新增 toggleRow 函数,切换 .row-detail.open 类控制显隐

🤖 Generated with [Claude Code](https://github.com/claude), [CodeX](https://openai.com), [Gemini](https://github.com/apps/gemini-code-assist)
Co-Authored-By: Aurelius Huang<threefish.ai@gmail.com>

* chore(gitignore): 添加 .playwright-mcp/ 到忽略规则

🤖 Generated with [Claude Code](https://github.com/claude), [CodeX](https://openai.com), [Gemini](https://github.com/apps/gemini-code-assist)
Co-Authored-By: Aurelius Huang<threefish.ai@gmail.com>

* fix(dashboard): 修复 Copy 按钮导致 JS 报错、展开卡片样式不可读及版本号显示异常

- 将 copyText 内联值改为 copyFromParent 从 data-key 属性读取,避免 JSON 双引号在 onclick 中导致 JS 解析失败
- 优化展开卡片样式:渐变背景、蓝色边框、阴影、增大间距与圆角
- 页面初始化时立即加载版本号,修复直接进入 Sessions tab 时版本显示为 v-.-.- 的问题

🤖 Generated with [Claude Code](https://github.com/claude), [CodeX](https://openai.com), [Gemini](https://github.com/apps/gemini-code-assist)
Co-Authored-By: Aurelius Huang<threefish.ai@gmail.com>

* style(dashboard): 重命名页签「Recent Active Sessions」为「Sessions」

🤖 Generated with [Claude Code](https://github.com/claude), [CodeX](https://openai.com), [Gemini](https://github.com/apps/gemini-code-assist)
Co-Authored-By: Aurelius Huang<threefish.ai@gmail.com>

* style(dashboard): 增强 Success 列进度条底色对比度

🤖 Generated with [Claude Code](https://github.com/claude), [CodeX](https://openai.com), [Gemini](https://github.com/apps/gemini-code-assist)
Co-Authored-By: Aurelius Huang<threefish.ai@gmail.com>

* style(dashboard): 将页签导航移至头部栏,优化为胶囊样式; (#226)

🤖 Generated with [Claude Code](https://github.com/claude), [CodeX](https://openai.com), [Gemini](https://github.com/apps/gemini-code-assist)

* fix(dashboard): 重构 Session 详情卡片布局,解决内容重叠问题; (#227)

将 Session 详情卡片的扁平网格布局重构为身份信息行 + 指标网格两层结构,
分离 Session ID/Device/Account 等身份字段与指标字段的展示区域,
新增 title 属性提供完整值悬浮提示,消除窄屏下的内容重叠与截断。

🤖 Generated with [Claude Code](https://github.com/claude), [CodeX](https://openai.com), [Gemini](https://github.com/apps/gemini-code-assist)

* style(dashboard): 优化 Session 详情卡片布局与信息展示; (#228)

- 调整 identity-row flex 比例,首项 2 其余 3,改善空间分配
- 将 Success Rate 与 Client 合并为 inline-pair 横向排列,减少纵向高度
- 移除 Sessions 卡片冗余标题(Tab 已提供上下文)
- 修复 success-bar-fill display 属性确保正确渲染

🤖 Generated with [Claude Code](https://github.com/claude), [CodeX](https://openai.com), [Gemini](https://github.com/apps/gemini-code-assist)

* fix(dashboard): 切换页签时自动刷新当前页数据; (#229)

移除 switchTab() 中的 tabLoaded 条件守卫,使每次在 Overview 与 Sessions
页签间切换时都触发 refresh(),而非仅首次访问时加载数据。

🤖 Generated with [Claude Code](https://github.com/claude), [CodeX](https://openai.com), [Gemini](https://github.com/apps/gemini-code-assist)

* fix(dashboard): 修复供应商状态卡片进度条显示异常,使用 quota-group 包裹配额元素确保折行一致性; (#230)

🤖 Generated with [Claude Code](https://github.com/claude), [CodeX](https://openai.com), [Gemini](https://github.com/apps/gemini-code-assist)

* style(dashboard): 收窄 KPI 卡片间隙至原来的 1/3; (#231)

🤖 Generated with [Claude Code](https://github.com/claude), [CodeX](https://openai.com), [Gemini](https://github.com/apps/gemini-code-assist)

* fix(dashboard): 修复 Session 详情卡片内容折行问题,强制单行显示; (#232)

- 身份行(Session ID/Device/Account)长值不再折行,超长部分以省略号截断
- 指标网格改为固定 8 列布局,确保所有指标在一行中均匀排列

🤖 Generated with [Claude Code](https://github.com/claude), [CodeX](https://openai.com), [Gemini](https://github.com/apps/gemini-code-assist)

* chore(release): 发布 v0.4.0 版本;

🤖 Generated with [Claude Code](https://github.com/claude), [CodeX](https://openai.com), [Gemini](https://github.com/apps/gemini-code-assist)
Co-Authored-By: Aurelius Huang<threefish.ai@gmail.com>

---------

Co-authored-by: Claude Opus 4.7 <noreply@anthropic.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant