Skip to content

Tags: ThreeFish-AI/coding-proxy

Tags

v0.5.2

Toggle v0.5.2's commit message

Verified

This commit was created on GitHub.com and signed with GitHub’s verified signature.
build(version): 发布 v0.5.2 — 供应商状态复位按钮 + quota 复位修复,v0.5.2 周期正式收口; (#280)

版本号升级至 0.5.2,CHANGELOG 定版。本版为 v0.5.2a1–a8 预发布周期的正式收口版,
增量收敛 PR #279 三项改动:QuotaGuard.reset() 拆解「状态机复位」与「用量清零」的
耦合(复位后 1d 配额徽章不再永久停 0%);Overview 供应商状态卡片新增「状态复位」
按钮(POST /api/reset,不重排序、不清用量);修复 rlInfo.limited 与
is_rate_limited 键名不匹配致「限速中」徽章从未渲染。

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

v0.5.1

Toggle v0.5.1's commit message
build(version): 版本号升级至 0.5.1;

🤖 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<[email protected]>

v0.5.0

Toggle v0.5.0's commit message

Verified

This commit was created on GitHub.com and signed with GitHub’s verified signature.
Merge pull request #252 from ThreeFish-AI/feature/1.x.x

v0.5.0

v0.4.0

Toggle v0.4.0's commit message

Verified

This commit was created on GitHub.com and signed with GitHub’s verified signature.
v0.4.0 (#233)

* 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<[email protected]>

* 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<[email protected]>

* 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<[email protected]>

* 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<[email protected]>

* 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<[email protected]>

* 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<[email protected]>

* 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<[email protected]>

* 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<[email protected]>

* 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<[email protected]>

* 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<[email protected]>

* 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 <[email protected]>

---------

Co-authored-by: Claude Opus 4.7 <[email protected]>

* 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<[email protected]>

* 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<[email protected]>

* 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<[email protected]>

* 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<[email protected]>

* 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<[email protected]>

* 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<[email protected]>

* 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<[email protected]>

* 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<[email protected]>

* 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<[email protected]>

* 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<[email protected]>

* 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<[email protected]>

* 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<[email protected]>

* 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<[email protected]>

* 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<[email protected]>

* 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<[email protected]>

* 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<[email protected]>

* 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<[email protected]>

* 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<[email protected]>

* 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<[email protected]>

* 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<[email protected]>

* 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<[email protected]>

* 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<[email protected]>

* 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<[email protected]>

* 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<[email protected]>

* 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<[email protected]>

* 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<[email protected]>

* 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<[email protected]>

* 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<[email protected]>

---------

Co-authored-by: Claude Opus 4.7 <[email protected]>

v0.3.0

Toggle v0.3.0's commit message

Verified

This commit was created on GitHub.com and signed with GitHub’s verified signature.
Merge pull request #201 from ThreeFish-AI/feature/1.x.x

v0.3.0

v0.2.3

Toggle v0.2.3's commit message

Verified

This commit was created on GitHub.com and signed with GitHub’s verified signature.
Merge pull request #180 from ThreeFish-AI/feature/1.x.x

fix(test): 修复 mock 函数签名缺少 normalization 参数导致 CI 全线失败;

v0.2.2

Toggle v0.2.2's commit message

Verified

This commit was created on GitHub.com and signed with GitHub’s verified signature.
Merge pull request #157 from ThreeFish-AI/feature/1.x.x

feat(reset): CLI reset 命令新增 -v/--vendor 参数,支持运行时 N-tier 链路重排序(逗号分隔的 vendor 列表);

v0.2.1

Toggle v0.2.1's commit message

Verified

This commit was created on GitHub.com and signed with GitHub’s verified signature.
Merge pull request #154 from ThreeFish-AI/feature/1.x.x

v0.2.1

v0.2.0

Toggle v0.2.0's commit message

Verified

This commit was created on GitHub.com and signed with GitHub’s verified signature.
Merge pull request #140 from ThreeFish-AI/feature/1.x.x

v0.2.0

v0.1.3

Toggle v0.1.3's commit message

Verified

This commit was created on GitHub.com and signed with GitHub’s verified signature.
Merge pull request #119 from ThreeFish-AI/feature/1.x.x

v0.1.3