Skip to content

v0.2.0#140

Merged
ThreeFish-AI merged 69 commits into
masterfrom
feature/1.x.x
Apr 10, 2026
Merged

v0.2.0#140
ThreeFish-AI merged 69 commits into
masterfrom
feature/1.x.x

Conversation

@ThreeFish-AI

Copy link
Copy Markdown
Owner

Important

🚀 供应商大扩军 × 用量仪表盘全面进化,双线暴击!

卡在一家供应商的限额天花板下抬不起头?现在你手握 九条命——新增 MiniMax、小米 MiMo、阿里千问、Kimi、豆包五路援军,全部原生讲 Anthropic 话,无缝接入 N-tier。 Token 烧到哪儿心里没数?新版 usage 命令解锁日/周/月/全量四档视角,多供应商并排比,汇总行一行看全局。备用仓更满,账单更透,从此宕机只是别人家的故事。

✨ 核心亮点

  • 5 家供应商集体入场:MiniMax、小米 MiMo、阿里千问、Kimi、豆包(火山引擎)正式入编 N-tier。备用通道数量直接翻倍,不怕堵;
  • usage 命令全面升级:从"只有天数"进化为日 / 周 / 月 / 全量四档时间维度(-d 7 / -w / -m / -t)。支持多值过滤——-v anthropic,kimi--model claude-opus-4-6,glm-5.1 用逗号隔开随便选。表格末行自动追加汇总行,请求总量、Token 总计、总成本、加权平均延迟四项一览无余。Token 花在哪家、烧了多少、谁最能扛——这张表给你答案;

🔧 更多特性

  • 品牌横幅正式上线proxy start 启动时打印 Coding Proxy 专属 ASCII Banner 与版本号,告别冷冰冰的裸日志起手式;
  • 529 过载纳入降级触发:HTTP 529 overloaded_error 正式加入故障转移白名单,Anthropic 喊"我堵了"时 Proxy 不再干等;
  • Zhipu 跨供应商级联故障根治Internal Network Failure 纳入 500 降级条件;tool_result 角色错位导致的下游级联崩溃彻底斩断,再也不因历史 message 的"历史遗留问题"把整条链拖下水;

ThreeFish-AI and others added 30 commits April 7, 2026 21:38
Anthropic 额度恢复后,_strip_thinking_blocks() 剥离 zhipu 签发的 thinking blocks 时,
若 assistant 消息仅含 thinking blocks,content 会变为空列表,触发 Anthropic API 400 错误
(tool_result blocks can only be in user messages),并因语义拒绝分类不记录熔断器失败,
导致每次请求都重复降级到 zhipu 的死循环。

修复:剥离后 content 为空时插入占位 text block {"type":"text","text":"[thinking]"},
保持消息结构合法性。新增 2 个测试用例覆盖该场景。

🤖 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(anthropic): 修复跨供应商迁移后 thinking-only 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>
使用 Rich Panel 构建紧凑的品牌展示面板,在 uvicorn 启动前输出
品牌名称、版本号与监听地址信息。遵循正交分解原则将横幅逻辑
独立提取为 cli/banner.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(cli): 启动时打印 Coding Proxy 品牌横幅并展示版本号
🤖 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>
🤖 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(test-banner): 移除未使用的 pytest 导入并修复导入排序
根因:factory.py 中 ZhipuVendor 构造时未传入 failover_cfg 参数,
导致 BaseVendor._failover_config 为 None,should_trigger_failover() 永远返回 False。
当 Zhipu 在 message(非流式)路径返回临时 429 时,executor 无法判定应降级,
直接将 429 原样返回给客户端导致任务中断。

修复:
- zhipu.py: __init__ 新增 failover_config 可选参数并转发至基类
- factory.py: _create_vendor_from_config 中给 ZhipuVendor 注入 failover_cfg
- test_router_executor.py: 新增 TestExecuteMessageFailoverOn429 测试类(5 个用例)

测试结果:971/971 passed,零回归

🤖 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(tiers): 修复 Zhipu 非流式 429 无法触发 tier 降级
将 query_daily 的 GROUP BY 维度从 (date, vendor, model_requested, model_served)
降为三维 (date, vendor, model_served),使用 GROUP_CONCAT(DISTINCT) 将多个
请求模型合并为逗号分隔列表,消除同日同供应商同实际模型的冗余行。

- db.py: SQL 层改用 GROUP_CONCAT(DISTINCT model_requested) 聚合
- stats.py: 展示层复用 _format_model_display 适配多值场景
- test_token_logger.py: 新增 5 个聚合场景测试(核心聚合/单值边界/
  DISTINCT 去重/过滤兼容/供应商隔离),971 测试全量通过零回归

🤖 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>
如图所示,将 coding-proxy usage 指令的统计结果中 同一天 的相同供应商和相同实际模型的结果聚合成一行,比如图中圈选的 2026-04-08 的 zhipu 的 (vibe-kanban)
🤖 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>
🤖 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>
Anthropic API 过载时返回 529,但该状态码未被纳入 FailoverConfig.status_codes,
导致请求被原样透传给客户端而未触发向下级 vendor 的降级。

- FailoverConfig 默认 status_codes 添加 529
- config.default.yaml 配置模板同步添加 529
- BaseVendor.should_trigger_failover 备用安全网逻辑添加 529
- 新增 3 个 529 降级相关单元测试

🤖 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 如下这种 529 的 Anthropic 响应你似乎没有考虑到降级条件中去,你需要将之纳入降级触发条件中,注意不单是 Anthropic -> zhipu 的降级,所有 vendors (vibe-kanban)
🤖 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>
TokenLogger.query_daily() 签名由 `days: int` 扩展为 `days: int | None`,
当 days=None 时跳过时间过滤条件,实现全量历史数据查询。
SQL 构建从硬编码 WHERE 改为条件化拼接模式,向后兼容默认值 days=7。

🤖 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>
- 新增 resolve_time_range() 将 -w/-m/-t 快捷选项解析为等价天数
  - -t (total): 返回 3650 天哨兵值覆盖全量
  - -m (month): 本月 1 日至今的自然天数
  - -w (week): 本周一至今的自然天数
- 提取 _build_title() 根据 days 动态生成表格标题
- show_usage() 签名扩展为 days: int | None

🤖 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>
- usage 命令新增 --week/-w、--month/-m、--total/-t 布尔选项
- --model 移除 -m 短标志(让位给 --month),保留 --model 长形式
- 通过 resolve_time_range() 统一解析时间维度参数
- days 参数 help 文本标注与快捷标志互斥

🤖 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>
- 用本地 _resolve_days() 替代外部 resolve_time_range(),职责更清晰
- -w 简化为固定 7 天、-m 固定 30 天、-t 返回 None 全量查询
- _run_usage() 签名更新为 days: int | None
- 移除未使用的 Optional 导入,精简 help 文本

🤖 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>
- 数据层(db.py): 新增 TimePeriod 枚举、local_week/local_month UDF、_PERIOD_SQL 映射表、
  query_usage() 核心查询方法,支持按日/周/月/全量聚合
- 数据层(db.py): query_daily/query_failover_stats 支持 days=None 全量查询
- CLI 层(cli): 新增 -w/--week、-m/--month、-t/--total 时间维度快捷标志,
  --model 保留长选项(-m 让渡给 --month)
- 展示层(stats.py): show_usage 签名适配 int|None,新增 _build_title 动态标题
- 测试: 新增 E 组时间维度 CLI 测试、test_time_range 纯函数测试

🤖 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>
- **3 个 Critical 问题**:测试 ImportError、total 模式数据错误、实现-测试架构断裂
- **5 个 Warning**:死代码、未使用的查询引擎、SQL 风格等
- **2 个 Suggestion**:修复方案和测试覆盖建议

建议���续按 **C1 → C3 → C2** 顺序修复,首先在 `stats.py` 中实现 `resolve_time_range()` 和 `_TOTAL_SENTINEL_DAYS` 消除 ImportError。
- 将 --week/-w 和 --month/-m 从 Optional[int] 简化为 bool 布尔开关
  - -w 表示「本周」,-m 表示「本月」,-t 表示「全部」
- 修复 query_daily(days=None) 通过 count=0 触发 _period_start_iso 返回 None
- 精简 test_cli_usage.py 测试断言,统一使用 _kwargs() 提取参数
- 重写 test_time_range.py 测试以匹配新的 _build_title/_period_to_days API

🤖 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>
/preening-substrate  给 coding-proxy usage 指令追加 -w(Week)、 -m(Month)和 -t(Total) (vibe-kanban)
根因分析与修复:
1. request_normalizer: 新增 _relocate_misplaced_tool_results() 自动将非 user 消息中错位的 tool_result 块迁移至合法位置,解决 Anthropic 400 `tool_result can only be in user messages` 错误;
2. executor: 新增 _is_likely_request_format_error() 启发式判断,将 Copilot 返回的纯文本 400 Bad Request(含 tool_result 时)识别为语义拒绝,跳过熔断器计数;
3. executor: _handle_token_error() 对 INSUFFICIENT_SCOPE / INVALID_CREDENTIALS 等永久性凭证错误跳过 record_failure(),避免 Antigravity OAuth scope 不足导致熔断器级联 OPEN;
4. error_classifier: 扩展 is_semantic_rejection() 标记列表以覆盖更多格式不兼容场景;

新增 20 个测试用例(7 + 13),全量 999 测试通过无回归。

🤖 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 降级到 copilot 和 antigravity 时存在各式各样的问题,具体见下方日志,深入分析所有问题,找到其根因并修复好每个 vendor 的使用及其中不同 vendor (vibe-kanban)
当 Zhipu GLM-5 遇到 429 错误后回退至 Anthropic Opus-4.6 时,
对话历史中 assistant 消息内可能包含 tool_result 内容块(GLM-5
可能在 assistant 响应中同时返回 tool_use 和 tool_result),
而 Anthropic API 严格要求 tool_result 只能出现在 user 消息中,
导致 400 invalid_request_error 并级联降级至 copilot。

修复策略(双层防御):
1. request_normalizer: 在路由前剥离非 user 消息中的 tool_result
2. AnthropicVendor._prepare_request: 纵深防御,剥离错位 tool_result

变更文件:
- src/coding/proxy/server/request_normalizer.py: 添加 tool_result 位置检测与剥离
- src/coding/proxy/vendors/anthropic.py: 添加 _strip_misplaced_tool_results() 函数
- tests/test_request_normalizer.py: 新增 5 个测试用例
- tests/test_vendors.py: 新增 4 个测试用例

全部 988 测试通过,无回归。

🤖 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>
根因:当 Zhipu GLM-5 返回含 tool_result 的 assistant 响应后,
Claude Code 存入对话历史,后续请求的 assistant 消息中出现 tool_result。
Zhipu 429 后回退到 Anthropic,Anthropic 严格校验返回 400,
is_semantic_rejection 将所有 invalid_request_error 视为语义拒绝,
导致同样的畸形请求继续级联到 Copilot。

修复内容:
1. error_classifier: 新增 is_structural_validation_error(),
   在 is_semantic_rejection() 中前置排除结构性验证错误,
   阻止 tool_result/tool_use 角色错位等结构性错误触发级联故障转移
2. executor: 流式路径中检测结构性错误后立即 raise 停止故障转移,
   避免将同样的畸形请求转发到下一层供应商
3. request_normalizer: 将 tool_result 处理从「剥离丢弃」升级为
   「修复到正确 user 消息」,包括:重复检测、新 user 消息创建、
   空 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>
ThreeFish-AI and others added 29 commits April 9, 2026 00:10
- F821: 移除 test_router_executor.py 中未定义的 Any 类型注解(改用 dict)
- F401: 移除 test_router_executor.py 中未使用的 time 导入
- Format: 对 9 个不符合 ruff format 规范的文件执行自动格式化

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
fix(ci): 修复 Ruff Lint 与 Format 检查失败
🤖 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>
- `-w` / `-m` 从 bool 改为 int | None,接受整数参数(如 `-w 1` 本周、`-w 2` 上周)
- WEEK 维度标题附加具体日期范围(如「最近 1 周:2026-04-07 ~ 2026-04-13」)
- DAY / MONTH / TOTAL 维度标题不变
- 新增 `_week_date_range()` 计算目标周的周一~周日范围
- 补充 CLI 参数传递、日期范围计算等测试用例

🤖 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(usage): usage -w/-m 支持整数参数查询最近第 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>
fix(test): 移除 test_time_range.py 中未使用的 pytest 导入以修复 CI Lint 失败
将逐条 WARNING 汇总为单条去重日志:首次出现的 tool_use_id 输出含完整因果上下文的
WARNING,后续降级为 DEBUG。集合超过 500 条时保留最近一半条目防止无限增长。

🤖 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(normalizer): 规范化 misplaced tool_result 剥离日志,消除跨请求重复警告
🤖 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>
- stats.py: show_usage 在表格末尾追加「总计」行,汇总请求数、各类 Token、Cost(支持多币种拼接)及加权平均耗时
- db.py: query_usage 的 vendor 参数扩展为 str | list[str] | None,SQL 改用 IN (?, ...) 子句安全过滤多 vendor
- cli/__init__.py: usage 命令解析逗号分隔 vendor(如 -v anthropic,zhipu),单 vendor 保持 str 类型向后兼容
- tests: 新增 TestMultiVendorFilter 测试类,覆盖多 vendor 解析、空格去除、与时间维度组合等场景

🤖 Generated with [Claude Code](https://github.com/claude)
Co-Authored-By: Aurelius Huang<threefish.ai@gmail.com>
- db.py: query_usage 的 model 参数类型扩展为 str | list[str] | None,过滤字段从 model_requested 改为 model_served,SQL 改用 IN (?, ...) 子句
- stats.py: show_usage 的 model 参数签名同步扩展为 str | list[str] | None
- cli/__init__.py: usage 命令解析逗号分隔 model(如 --model glm-5,glm-5.1),更新 help 文本说明过滤 model_served,_run_usage 签名扩展
- tests: 新增 TestMultiModelFilter 测试类(6 个用例),更新 test_query_daily_model_filter_still_works 测试数据与注释以对齐新语义

🤖 Generated with [Claude Code](https://github.com/claude)
Co-Authored-By: Aurelius Huang<threefish.ai@gmail.com>
给 coding-proxy usage 指令的查询结果最后一行增加一行「总计」,用于统计当前查询范围的各类 Token、Cost、平均耗时的汇总情况(需支持各种时间维度的查询:-d, -w, (vibe-kanban)
🤖 Generated with [Claude Code](https://github.com/claude)
Co-Authored-By: Aurelius Huang<threefish.ai@gmail.com>
…容供应商;

提取 NativeAnthropicVendor 公共基类,将 zhipu 及 5 个新供应商统一为薄透传代理子类,
仅做模型名映射和 x-api-key 认证头替换,其余请求体/响应原样透传。

- 配置层:VendorType 扩展、5 个 Config 类、schema re-export
- 供应商层:native_anthropic.py 基类 + zhipu 重构 + 5 个新子类
- 工厂/路由:factory.py match 分支、model_mapper/executor/session_manager 注册
- 默认配置:config.default.yaml 新增 vendor 定义、模型映射和定价条目(默认禁用)
- 测试:test_native_vendors.py 参数化测试 (65 cases) + 既有测试断言更新

🤖 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>
参考本项目转接和代理 zhipu 的模型,并使之满血在 Claude Code 使用 zhipu 模型的实现方式,新增接入如下 5 个新的 vendors(注意接入的方式与 zhipu (vibe-kanban)
- 版本号从 0.1.4a8 升级至 0.2.0a1(pyproject.toml + uv.lock 同步)
- 修正 MiniMax 模型名大小写(MiniMax-M2.7 → minimax-m2.7)
- 补全 minimax/kimi/doubao/xiaomi(mimo)/alibaba 实际定价数据
- 新增 minimax-m2.5、mimo-v2-omni、mimo-v2-flash 定价条目

🤖 Generated with [Claude Code](https://github.com/claude)
Co-Authored-By: Aurelius Huang<threefish.ai@gmail.com>
🤖 Generated with [Claude Code](https://github.com/claude)
Co-Authored-By: Aurelius Huang<threefish.ai@gmail.com>
docs(changelog): 新增 v0.2.0 Release Note,覆盖五大新供应商与用量统计升级
- 标语中供应商数量调整为"九条命"
- 精简供应商入场说明,移除冗余的实现细节描述
- 修正 usage 命令参数示例(-M → --model)
- 移除重复警告降噪条目

🤖 Generated with [Claude Code](https://github.com/claude)
Co-Authored-By: Aurelius Huang<threefish.ai@gmail.com>
- 将 zhipu 提升为首选 tier,anthropic 降为次选
- 按新顺序重排供应商(alibaba → xiaomi → kimi → doubao)
- 同步调整 model_mapping 与 pricing 区块排列,保持配置一致性
- 补充 alibaba qwen3.6-plus 及小米 MiMo 系列模型定价配置

🤖 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>
- 为 zhipu vendor 显式添加 enabled: true
- 将 alibaba、xiaomi、kimi、doubao 四个禁用供应商的 quota_guard.enabled 改为 false,避免无效的配额守卫逻辑运行

🤖 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>
_warn_irrelevant_fields 验证器仅跳过同名供应商,未处理共享字段集的供应商组,
导致 zhipu 配置 api_key 时误报"属于 minimax/kimi/doubao/xiaomi/alibaba 供应商"。
新增 field_name in exclusive 判断,跳过与当前 vendor 共享的字段;
同时修正测试 logger 名称并新增共享字段测试用例。

🤖 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(VendorConfig): 修复原生 Anthropic 兼容供应商共享字段误报跨供应商警告
- 版本号从 0.2.0a1 升级至 0.2.0a2(pyproject.toml + uv.lock 同步)
- 移除特性列表中的 emoji 前缀,统一文风
- 修正模型名示例(claude-opus-4 → claude-opus-4-6)

🤖 Generated with [Claude Code](https://github.com/claude)
Co-Authored-By: Aurelius Huang<threefish.ai@gmail.com>
- load_baseline() 新增可选 vendor 参数,日志输出包含供应商名称(如 Quota guard [anthropic]: loaded baseline ...)
- 移除 lifespan() 中 coding-proxy started 日志,该信息已由 Rich Banner 和 uvicorn 原生日志覆盖

🤖 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>
如图,启动时的日志中: (vibe-kanban)
- 版本号从 0.2.0a2 升级至 0.2.0 正式发布版
- pyproject.toml 与 uv.lock 同步更新

🤖 Generated with [Claude Code](https://github.com/claude)
Co-Authored-By: Aurelius Huang<threefish.ai@gmail.com>
@ThreeFish-AI
ThreeFish-AI merged commit 52a9b84 into master Apr 10, 2026
11 checks passed
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