Repository navigation
Commit 403a471
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<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>1 parent 20f5201 commit 403a471
30 files changed
Lines changed: 2065 additions & 1710 deletions
File tree
- assets
- docs
- src/coding/proxy
- cli
- config
- convert
- logging
- routing
- server
- tests
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
23 | 23 | | |
24 | 24 | | |
25 | 25 | | |
| 26 | + | |
| 27 | + | |
| 28 | + | |
26 | 29 | | |
27 | 30 | | |
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
52 | 52 | | |
53 | 53 | | |
54 | 54 | | |
| 55 | + | |
55 | 56 | | |
56 | 57 | | |
57 | 58 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
4 | 4 | | |
5 | 5 | | |
6 | 6 | | |
7 | | - | |
8 | | - | |
9 | | - | |
| 7 | + | |
10 | 8 | | |
11 | | - | |
| 9 | + | |
| 10 | + | |
| 11 | + | |
| 12 | + | |
| 13 | + | |
| 14 | + | |
| 15 | + | |
| 16 | + | |
| 17 | + | |
| 18 | + | |
| 19 | + | |
| 20 | + | |
| 21 | + | |
| 22 | + | |
12 | 23 | | |
13 | | - | |
14 | | - | |
15 | | - | |
| 24 | + | |
| 25 | + | |
| 26 | + | |
| 27 | + | |
16 | 28 | | |
17 | 29 | | |
18 | 30 | | |
| |||
Loading
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
45 | 45 | | |
46 | 46 | | |
47 | 47 | | |
48 | | - | |
49 | | - | |
50 | | - | |
51 | | - | |
52 | | - | |
53 | | - | |
54 | | - | |
55 | | - | |
56 | | - | |
57 | | - | |
58 | | - | |
59 | | - | |
60 | | - | |
61 | | - | |
62 | | - | |
63 | | - | |
64 | | - | |
65 | | - | |
66 | | - | |
67 | | - | |
68 | | - | |
69 | | - | |
70 | | - | |
71 | | - | |
72 | | - | |
73 | | - | |
74 | | - | |
75 | | - | |
76 | | - | |
77 | | - | |
78 | | - | |
79 | | - | |
80 | | - | |
81 | | - | |
82 | | - | |
83 | | - | |
84 | | - | |
85 | | - | |
86 | | - | |
87 | | - | |
88 | | - | |
89 | | - | |
90 | | - | |
91 | | - | |
92 | | - | |
93 | | - | |
94 | | - | |
95 | | - | |
96 | | - | |
97 | | - | |
98 | | - | |
99 | | - | |
100 | | - | |
101 | | - | |
102 | | - | |
103 | | - | |
104 | | - | |
105 | | - | |
106 | | - | |
107 | | - | |
108 | | - | |
109 | | - | |
110 | | - | |
111 | | - | |
112 | | - | |
113 | | - | |
114 | | - | |
115 | | - | |
116 | | - | |
117 | | - | |
118 | | - | |
119 | | - | |
120 | | - | |
121 | | - | |
122 | | - | |
123 | | - | |
124 | | - | |
125 | | - | |
126 | | - | |
127 | | - | |
128 | | - | |
129 | | - | |
130 | | - | |
131 | | - | |
132 | | - | |
133 | | - | |
134 | | - | |
135 | | - | |
136 | | - | |
137 | | - | |
138 | | - | |
139 | | - | |
140 | | - | |
141 | | - | |
142 | | - | |
143 | | - | |
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
1 | 1 | | |
2 | 2 | | |
3 | | - | |
| 3 | + | |
4 | 4 | | |
5 | 5 | | |
6 | 6 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
30 | 30 | | |
31 | 31 | | |
32 | 32 | | |
| 33 | + | |
| 34 | + | |
| 35 | + | |
| 36 | + | |
33 | 37 | | |
34 | 38 | | |
35 | 39 | | |
| |||
264 | 268 | | |
265 | 269 | | |
266 | 270 | | |
| 271 | + | |
| 272 | + | |
| 273 | + | |
| 274 | + | |
| 275 | + | |
| 276 | + | |
| 277 | + | |
| 278 | + | |
| 279 | + | |
| 280 | + | |
| 281 | + | |
| 282 | + | |
| 283 | + | |
| 284 | + | |
| 285 | + | |
| 286 | + | |
| 287 | + | |
| 288 | + | |
| 289 | + | |
| 290 | + | |
| 291 | + | |
| 292 | + | |
| 293 | + | |
| 294 | + | |
| 295 | + | |
| 296 | + | |
| 297 | + | |
| 298 | + | |
| 299 | + | |
| 300 | + | |
| 301 | + | |
| 302 | + | |
| 303 | + | |
| 304 | + | |
| 305 | + | |
| 306 | + | |
| 307 | + | |
| 308 | + | |
| 309 | + | |
| 310 | + | |
| 311 | + | |
| 312 | + | |
| 313 | + | |
| 314 | + | |
| 315 | + | |
| 316 | + | |
| 317 | + | |
| 318 | + | |
| 319 | + | |
| 320 | + | |
| 321 | + | |
| 322 | + | |
| 323 | + | |
| 324 | + | |
| 325 | + | |
| 326 | + | |
| 327 | + | |
| 328 | + | |
| 329 | + | |
| 330 | + | |
| 331 | + | |
| 332 | + | |
| 333 | + | |
| 334 | + | |
| 335 | + | |
| 336 | + | |
| 337 | + | |
| 338 | + | |
| 339 | + | |
| 340 | + | |
| 341 | + | |
| 342 | + | |
| 343 | + | |
| 344 | + | |
| 345 | + | |
| 346 | + | |
| 347 | + | |
| 348 | + | |
| 349 | + | |
| 350 | + | |
| 351 | + | |
| 352 | + | |
| 353 | + | |
| 354 | + | |
| 355 | + | |
| 356 | + | |
| 357 | + | |
| 358 | + | |
| 359 | + | |
| 360 | + | |
| 361 | + | |
267 | 362 | | |
268 | 363 | | |
269 | 364 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
644 | 644 | | |
645 | 645 | | |
646 | 646 | | |
| 647 | + | |
| 648 | + | |
| 649 | + | |
| 650 | + | |
| 651 | + | |
| 652 | + | |
| 653 | + | |
| 654 | + | |
| 655 | + | |
| 656 | + | |
| 657 | + | |
| 658 | + | |
| 659 | + | |
| 660 | + | |
| 661 | + | |
| 662 | + | |
| 663 | + | |
| 664 | + | |
| 665 | + | |
| 666 | + | |
| 667 | + | |
| 668 | + | |
| 669 | + | |
| 670 | + | |
| 671 | + | |
| 672 | + | |
| 673 | + | |
| 674 | + | |
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
44 | 44 | | |
45 | 45 | | |
46 | 46 | | |
| 47 | + | |
47 | 48 | | |
48 | 49 | | |
49 | 50 | | |
| |||
152 | 153 | | |
153 | 154 | | |
154 | 155 | | |
| 156 | + | |
| 157 | + | |
| 158 | + | |
| 159 | + | |
| 160 | + | |
| 161 | + | |
| 162 | + | |
| 163 | + | |
155 | 164 | | |
156 | 165 | | |
157 | 166 | | |
158 | 167 | | |
159 | | - | |
| 168 | + | |
160 | 169 | | |
161 | 170 | | |
162 | 171 | | |
| |||
165 | 174 | | |
166 | 175 | | |
167 | 176 | | |
| 177 | + | |
| 178 | + | |
| 179 | + | |
| 180 | + | |
| 181 | + | |
| 182 | + | |
168 | 183 | | |
169 | 184 | | |
170 | 185 | | |
| |||
331 | 346 | | |
332 | 347 | | |
333 | 348 | | |
| 349 | + | |
| 350 | + | |
334 | 351 | | |
0 commit comments