Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
336 changes: 334 additions & 2 deletions CLAUDE.md
Original file line number Diff line number Diff line change
Expand Up @@ -27,8 +27,9 @@ ByeByeCode 是一个 Rust 编写的 Claude Code 状态栏增强工具,用于
| `fix/issue-9-subscription-usage-display` | Issue #9 修复 | PR #10 | ✅ 已合并 |
| `feature/progress-bar-usage-display` | 进度条功能 | PR #11 | ✅ 已合并 |
| `fix/skip-free-subscription` | 跳过 FREE 套餐 | PR #12 | ✅ 已合并 |
| `feature/simplify-subscription-display` | 精简订阅显示格式 | PR #15 | 🔄 待审核 |
| `feature/support-new-88code-domains` | 支持新域名 88code.ai | PR #16 | 🔄 待审核 |
| `feature/simplify-subscription-display` | 精简订阅显示格式 | PR #15 | ✅ 已合并 |
| `feature/support-new-88code-domains` | 支持新域名 88code.ai | PR #16 | ✅ 已合并 |
| `feature/sort-subscriptions-by-remaining-days` | 按剩余天数排序 | PR #18 | ✅ 已合并 |

### 分支工作流

Expand Down Expand Up @@ -331,3 +332,334 @@ Git 的 `link.exe` 干扰了 MSVC 的 `link.exe`。解决方案:
### 状态栏显示 FREE 套餐用量

确保代码包含跳过 FREE 的逻辑(PR #12)。

---

## 项目审查报告(2025-01-13)

本章节包含对 byebyecode 项目的全面审查,涵盖 UI/UX 优化建议、已发现的潜在 Bug、关键文件清单及实施建议。

### 📊 审查概览

- **审查日期**: 2025-01-13
- **审查范围**: UI/UX、架构设计、Bug 排查
- **发现数量**: 9 项 UI 优化建议、9 个潜在 Bug
- **关键文件**: 8 个核心文件需重点关注

---

## 🎨 UI 优化与高级感提升建议

### 🔴 P0 - 必须优化(严重影响用户体验)

#### 1. 额度用完:视觉警示强化

**当前问题**:
\`\`\`
❌ "已用完 提示:你有其他套餐可用"
\`\`\`
- 纯文字提示,无颜色/图标
- 缺少行动指引("手动重置" vs "切换套餐")

**优化方案**:
\`\`\`rust
// src/core/segments/byebyecode_usage.rs:107-125

// 额度用完时
primary: format!("⚠️ 已用完 ${}/${}", used, total) // 红色背景 + 感叹号图标
secondary: match has_reset_times {
true => format!("→ 可重置×{} 点击重置", reset_count), // 行动指引
false => "→ 切换至其他套餐".to_string(),
}

// 应用危险色
metadata.insert("danger_mode".to_string(), "true".to_string());
\`\`\`

---

### 🟡 P1 - 应该优化(用户体验改进)

#### 4. 错误提示改进

**当前**:API 失败显示 "未配置密钥"(可能是网络错误)

**改进**:
\`\`\`rust
match fetch_usage_sync(...) {
Ok(usage) => usage,
Err(e) => {
let error_msg = if e.to_string().contains("timeout") {
"⏱️ 网络超时"
} else if e.to_string().contains("401") {
"🔑 密钥无效"
} else {
format!("❌ API错误: {}", e)
};
return Some(SegmentData {
primary: error_msg,
secondary: String::new(),
});
}
}
\`\`\`

---

### 🟢 P2 - 可以优化(锦上添花)

#### 5. 响应式布局

\`\`\`rust
// 根据终端宽度自动切换精简模式
let terminal_width = terminal::size().map(|(w, _)| w).unwrap_or(80);
let compact_mode = terminal_width < 80;

if compact_mode {
// 只显示当前扣费套餐
// 缩短文字格式
}
\`\`\`

#### 6. 快过期警示

\`\`\`rust
// 订阅段:剩余天数 < 7 天时高亮显示
let days_color = if sub.remaining_days <= 7 {
AnsiColor::Color16 { c16: 9 } // 红色
} else if sub.remaining_days <= 30 {
AnsiColor::Color16 { c16: 11 } // 黄色
} else {
AnsiColor::Color16 { c16: 7 } // 白色
};
\`\`\`

#### 7. 配置项扩展

\`\`\`toml
[byebyecode_usage.options]
show_progress_bar = true
show_percentage = true
compact_mode = false
warning_threshold = 80 # 百分比超过 80% 显示黄色

[byebyecode_subscription.options]
show_reset_times = true
show_days_threshold = 30 # 只在剩余天数<30天时显示
compact_mode = false
\`\`\`

---

## 🐛 已发现的潜在 Bug

### 🔴 高严重性(可能导致 panic 或崩溃)

#### Bug #1: 货币计算可能溢出

**位置**:\`src/api/mod.rs:173\`

**问题**:浮点数乘 100 后转 u64,超过 u64::MAX 会 panic。

\`\`\`rust
// 当前代码
self.used_tokens = (used_credits * 100.0).max(0.0) as u64;

// 修复方案
self.used_tokens = (used_credits * 100.0)
.max(0.0)
.min(u64::MAX as f64) as u64;
\`\`\`

#### Bug #2: unwrap() 导致 panic

**位置**:\`src/core/segments/byebyecode_usage.rs\` 多处

**问题**:如果 model 为 None 会 panic。

\`\`\`rust
// 当前代码
let model_id = &input.model.id;

// 修复方案
let model_id = input.model.as_ref().map(|m| m.id.as_str());
\`\`\`

#### Bug #3: API 响应状态未验证

**位置**:\`src/api/client.rs:43-44\`

**问题**:只检查 HTTP 状态码,未检查业务状态码(\`code\` 字段)。

\`\`\`rust
// 当前代码
if !response.status().is_success() {
return Err(format!("API request failed: {}", response.status()).into());
}

// 修复方案
let resp: ResponseDTO<Code88UsageData> = serde_json::from_str(&response_text)?;
if resp.code != 0 { // 假设 0 表示成功
return Err(format!("API error: {}", resp.message).into());
}
\`\`\`

---

### 🟡 中等严重性(数据不一致或逻辑错误)

#### Bug #4: 浮点数精度问题

**位置**:\`src/api/mod.rs:167-168\`

**问题**:连续浮点运算可能累积误差。

\`\`\`rust
// 当前代码
self.percentage_used = (used_credits / credit_limit * 100.0).clamp(0.0, 100.0);

// 修复方案
self.percentage_used = ((used_credits / credit_limit) * 10000.0).round() / 100.0;
// 保留两位小数
\`\`\`

#### Bug #5: 订阅过滤边界错误

**位置**:\`src/core/segments/byebyecode_subscription.rs:120\`

**问题**:\`remaining_days == 0\` 当天仍然有效,不应过滤。

\`\`\`rust
// 当前代码
.filter(|sub| sub.is_active && sub.remaining_days > 0)

// 修复方案
.filter(|sub| sub.is_active && sub.remaining_days >= 0)
\`\`\`

#### Bug #6: 缓存 URL 硬编码

**位置**:\`src/api/cache.rs:120-142\`

**问题**:与实际使用的 88code API 不一致,缓存机制无法工作。

\`\`\`rust
// 当前代码(硬编码)
subscription_url: "https://api.cometix.cn/v1/billing/subscription/list"

// 修复方案:从配置或 Claude settings 读取
\`\`\`

---

### 🟢 低严重性(改进机会)

#### Bug #7: 线程安全隐患

**位置**:\`src/api/cache.rs:113-152\`

**问题**:多个并发刷新可能竞争写入缓存文件。

**建议**:使用文件锁或原子操作。

#### Bug #8: 配置错误提示不清晰

**位置**:\`src/core/segments/byebyecode_usage.rs:48-52\`

**当前**:
\`\`\`rust
primary: "未配置密钥".to_string(),
\`\`\`

**建议**:
\`\`\`rust
primary: "未配置密钥 (检查 ~/.claude/settings.json)".to_string(),
\`\`\`

#### Bug #9: URL 判断逻辑可能误判

**位置**:\`src/api/mod.rs:302-310\`

**问题**:\`rainapp.top\` 应该使用其原始域名,而非重定向到 \`88code.ai\`。

\`\`\`rust
// 当前代码
if base_url.contains("88code.ai") || base_url.contains("rainapp.top") {
Some("https://www.88code.ai/api/usage".to_string())
}

// 修复方案
if base_url.contains("rainapp.top") {
Some(format!("{}/api/usage", base_url)) // 保持原域名
} else if base_url.contains("88code.ai") {
Some("https://www.88code.ai/api/usage".to_string())
}
\`\`\`

---

## 📁 关键文件清单(按优先级)

### 🎨 UI 优化相关

1. **\`src/core/segments/byebyecode_usage.rs\`** (178 行)
- 用量段完整逻辑:进度条、百分比计算、状态色

2. **\`src/core/segments/byebyecode_subscription.rs\`** (182 行)
- 订阅段实现:颜色生成、格式化、排序

3. **\`src/core/statusline.rs\`** (522 行)
- 渲染引擎:ANSI 颜色、Powerline 箭头

### 🐛 Bug 修复相关

4. **\`src/api/mod.rs\`** (312 行)
- 货币计算溢出、浮点精度问题

5. **\`src/api/client.rs\`** (121 行)
- API 状态码验证、错误处理

6. **\`src/api/cache.rs\`** (152 行)
- 缓存 URL 硬编码、线程安全

### ⚙️ 配置与架构

7. **\`src/config/types.rs\`** (420 行)
- 配置结构定义、颜色类型

8. **\`src/ui/themes/theme_default.rs\`** (233 行)
- 默认主题配置、图标语义化

---

## 💡 实施建议与优先级

### 📊 优化收益评估

| 优化项 | 实施难度 | 用户体验提升 | 建议优先级 |
|--------|---------|-------------|-----------|
| 百分比优先 + 状态色 | ⭐⭐ | ⭐⭐⭐⭐⭐ | 🔴 P0 |
| 订阅段精简格式 | ⭐⭐⭐ | ⭐⭐⭐⭐ | 🔴 P0 |
| 额度用完视觉警示 | ⭐⭐ | ⭐⭐⭐⭐ | 🔴 P0 |
| 货币计算溢出修复 | ⭐ | ⭐⭐⭐⭐⭐ | 🔴 P0 |
| 加载状态可视化 | ⭐ | ⭐⭐⭐ | 🟡 P1 |
| 错误提示改进 | ⭐ | ⭐⭐⭐ | 🟡 P1 |
| 响应式布局 | ⭐⭐⭐⭐ | ⭐⭐ | 🟢 P2 |

### 🎯 推荐实施路径

**第一阶段(优先修复)**:
1. 修复货币计算溢出 bug(5分钟)
2. 修复订阅过滤边界错误(2分钟)
3. 实现状态色系统(30分钟)
4. 百分比优先显示(15分钟)

**第二阶段(用户体验提升)**:
5. 精简订阅段格式(1小时)
6. 额度用完视觉警示(30分钟)
7. 加载状态可视化(20分钟)

**第三阶段(按需优化)**:
8. 响应式布局
9. 配置项扩展
10. 其他低优先级优化
Loading