Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
85 commits
Select commit Hold shift + click to select a range
621f7d9
feat(circuit-breaker): 添加动态配置支持及相关功能
Oct 28, 2025
e7ebfea
feat(provider): 扩展支持 claude-auth 供应商类型
Oct 28, 2025
7c310eb
feat(provider): 优化熔断器配置逻辑支持空值
Oct 28, 2025
4e09bc9
chore: sync VERSION file with release v0.2.7 [skip ci]
github-actions[bot] Oct 28, 2025
4810925
feat(circuit-breaker): 优化健康状态检查逻辑及 Redis 重试日志
Oct 28, 2025
5a15d53
Merge remote-tracking branch 'origin/main'
Oct 28, 2025
adcace7
chore: sync VERSION file with release v0.2.8 [skip ci]
github-actions[bot] Oct 28, 2025
c69dde0
fix(provider): 扩大 API 密钥的最大长度限制至 1024 个字符
Oct 28, 2025
b99f100
Merge remote-tracking branch 'origin/main'
Oct 28, 2025
2d051e9
chore: sync VERSION file with release v0.2.9 [skip ci]
github-actions[bot] Oct 28, 2025
f9a9091
feat(notification): 添加通知任务及管理界面支持
Oct 29, 2025
cde6648
Merge remote-tracking branch 'origin/main'
Oct 29, 2025
f2d394d
chore: sync VERSION file with release v0.2.10 [skip ci]
github-actions[bot] Oct 29, 2025
ea7f6ae
feat(notification): 动态生成每日排行榜及成本预警数据
Oct 29, 2025
9e6a120
Merge remote-tracking branch 'origin/main'
Oct 29, 2025
71674d7
chore: sync VERSION file with release v0.2.11 [skip ci]
github-actions[bot] Oct 29, 2025
e340c87
refactor(notification): 优化任务队列和消息模板构造逻辑
Oct 29, 2025
3a2aa27
Merge remote-tracking branch 'origin/main'
Oct 29, 2025
4809dc7
chore: sync VERSION file with release v0.2.12 [skip ci]
github-actions[bot] Oct 29, 2025
79ac40e
Fix #22: 供应商管理列表增加类型筛选和图标显示 (#24)
claude[bot] Oct 29, 2025
1fc87be
chore: format code (dev-79ac40e)
github-actions[bot] Oct 29, 2025
8a81719
fix: prevent infinite loop by excluding bot actions in GitHub Actions…
ding113 Oct 29, 2025
efaeea4
fix: 修复用户每日限额检查失效和若干代码问题
ding113 Oct 30, 2025
775a3a0
chore: format code (dev-efaeea4)
github-actions[bot] Oct 30, 2025
0914d17
Merge branch 'main' of https://github.com/ding113/claude-code-hub
Oct 30, 2025
e28c340
chore: sync VERSION file with release v0.2.13 [skip ci]
github-actions[bot] Oct 30, 2025
144b1c0
chore: update GitHub Actions workflows to streamline event triggers
ding113 Oct 30, 2025
26905e1
fix: auto-fix CI failures in Dev Branch CI/CD [skip ci]
github-actions[bot] Oct 30, 2025
dcaf549
fix: update commit message guidelines for CI auto-fixes
ding113 Oct 30, 2025
16fd744
feat: add experimental Codex Instructions injection feature
ding113 Oct 30, 2025
a693419
feat: add user group validation in ProxyProviderResolver
ding113 Oct 30, 2025
9085fa6
feat: update provider statistics query to use local date range
ding113 Oct 30, 2025
c257954
feat: add provider and user limit usage functions
ding113 Oct 30, 2025
c8b2cbe
chore: format code (dev-c257954)
github-actions[bot] Oct 30, 2025
a17892a
refactor: extract quota pages into modular components
ding113 Oct 30, 2025
1bffc4d
chore: format code (dev-a17892a)
github-actions[bot] Oct 30, 2025
18d59f4
feat: add key quota management with edit dialog and improved layout
ding113 Oct 30, 2025
37f7c50
chore: format code (dev-18d59f4)
github-actions[bot] Oct 30, 2025
48b7125
feat: unify currency display across all quota management pages
ding113 Oct 30, 2025
28c27bc
chore: format code (dev-48b7125)
github-actions[bot] Oct 30, 2025
c25e655
Merge branch 'main' into dev
ding113 Oct 30, 2025
4ac918a
feat(proxy): 修复探测请求处理和优化决策链逻辑
Oct 30, 2025
ffdfac4
Merge remote-tracking branch 'origin/main'
Oct 30, 2025
ef0df3e
chore: sync VERSION file with release v0.2.14 [skip ci]
github-actions[bot] Oct 30, 2025
633d6d5
feat(config): 添加服务端专用包的排除配置
Oct 30, 2025
e621c66
Merge remote-tracking branch 'origin/main'
Oct 30, 2025
bea8903
chore: sync VERSION file with release v0.2.15 [skip ci]
github-actions[bot] Oct 30, 2025
8b392b0
feat: add new columns to system_settings for provider info visibility…
ding113 Oct 31, 2025
8b2209f
feat(proxy): 支持客户端中断信号和智能 Session 绑定策略
Oct 31, 2025
4672167
Merge remote-tracking branch 'origin/main'
Oct 31, 2025
d35cee4
chore: sync VERSION file with release v0.2.16 [skip ci]
github-actions[bot] Oct 31, 2025
de6e2b2
Merge branch 'main' of https://github.com/ding113/claude-code-hub
Oct 31, 2025
f77866f
feat(quota): 添加限额管理工具函数及用户限额组件
Oct 31, 2025
44d5752
chore: sync VERSION file with release v0.2.17 [skip ci]
github-actions[bot] Oct 31, 2025
7b9efdf
fix(provider): 修复 SQL 查询日期字段类型不匹配的问题
Oct 31, 2025
f6c025e
Merge remote-tracking branch 'origin/main'
Oct 31, 2025
c0066fd
chore: sync VERSION file with release v0.2.18 [skip ci]
github-actions[bot] Oct 31, 2025
5522d0d
feat(quota): 添加倒计时 Hook 和限额标签组件扩展
Oct 31, 2025
c2cb10f
Merge remote-tracking branch 'origin/main'
Oct 31, 2025
1544148
chore: sync VERSION file with release v0.2.19 [skip ci]
github-actions[bot] Oct 31, 2025
e92a8a5
fix(repository): 替换 SQL 查询中的数组匹配逻辑为 inArray 方法
Oct 31, 2025
19fbe54
Merge remote-tracking branch 'origin/main'
Oct 31, 2025
f397ae2
chore: sync VERSION file with release v0.2.20 [skip ci]
github-actions[bot] Oct 31, 2025
80a6d8d
fix(repository): 使用时区感知的日期处理逻辑修复查询问题
Oct 31, 2025
58ff8e7
Merge remote-tracking branch 'origin/main'
Oct 31, 2025
bc898c1
chore: sync VERSION file with release v0.2.21 [skip ci]
github-actions[bot] Oct 31, 2025
7ddc048
Merge pull request #29 from ding113/main into dev
ding113 Oct 31, 2025
859e464
fix(cleanup-queue): 修复模块加载时立即初始化导致的 unhandledRejection
ding113 Oct 31, 2025
4e4a75e
Fix #35: 价格表页面增加分页功能 (#37)
claude[bot] Oct 31, 2025
9be8619
feat: add new API documentation link to settings navigation
ding113 Oct 31, 2025
7e7504c
chore: format code (dev-9be8619)
github-actions[bot] Oct 31, 2025
77fcce2
Merge branch 'main' into dev
ding113 Oct 31, 2025
939d606
fix: resolve TypeScript and ESLint errors to pass CI build
Oct 31, 2025
4c14b1f
feat: enhance API documentation and pagination features
ding113 Oct 31, 2025
bb9b779
chore: format code (dev-4c14b1f)
github-actions[bot] Oct 31, 2025
43f19ca
fix: auto-fix CI failures in PR Build Check (#43)
claude[bot] Oct 31, 2025
ad16e49
fix: #40 环境变量无法生效
ding113 Nov 1, 2025
11459a2
chore: format code (dev-ad16e49)
github-actions[bot] Nov 1, 2025
5d3c6d3
fix: 优化供应商优先级字段说明文案 (#45)
ding113 Nov 1, 2025
2cb425c
feat: add provider-level proxy support (HTTP/HTTPS/SOCKS4/SOCKS5)
ding113 Nov 1, 2025
a20d30e
chore: format code (dev-2cb425c)
github-actions[bot] Nov 1, 2025
7a24f93
fix: remove duplicate migration file 0013_optimal_darkhawk
ding113 Nov 1, 2025
460f6f2
Merge branch 'main' into dev
ding113 Nov 1, 2025
5400650
chore: format code (dev-460f6f2)
github-actions[bot] Nov 1, 2025
7cdfdf4
fix: 应用 PR #49 的代码审查建议
ding113 Nov 1, 2025
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
111 changes: 111 additions & 0 deletions CLAUDE.md
Original file line number Diff line number Diff line change
Expand Up @@ -215,6 +215,69 @@ Session 追踪和缓存 (`src/lib/session-manager.ts`):
- **决策链记录** - 完整的供应商选择和失败切换记录
- **自动清理** - TTL 过期自动清理

### 代理支持

供应商级别的代理配置 (`src/lib/proxy-agent.ts`):

- **支持协议**: HTTP、HTTPS、SOCKS4、SOCKS5
- **配置粒度**: 每个供应商独立配置代理
- **自动检测**: 根据 URL 协议自动选择代理类型(HTTP/HTTPS 使用 undici ProxyAgent,SOCKS 使用 socks-proxy-agent)
- **故障降级**: 可配置代理失败时是否降级到直连(`proxy_fallback_to_direct` 字段)
- **连接测试**: UI 提供测试按钮,使用 HEAD 请求验证代理配置
- **安全性**: 日志中自动脱敏代理密码

**配置方式**:

在供应商管理页面的"代理配置"部分:

1. **代理地址** (`proxy_url`): 支持以下格式
- HTTP: `http://proxy.example.com:8080`
- HTTPS: `https://proxy.example.com:8080`
- SOCKS4: `socks4://127.0.0.1:1080`
- SOCKS5: `socks5://user:password@proxy.example.com:1080`

2. **降级策略** (`proxy_fallback_to_direct`):
- 启用: 代理连接失败时自动尝试直连
- 禁用: 代理失败直接报错,不降级

3. **测试连接**: 点击"测试连接"按钮验证配置,显示:
- 连接成功/失败状态
- HTTP 状态码
- 响应时间
- 是否使用代理
- 错误详情(如果失败)

**技术实现**:

```typescript
// 代理工厂函数(src/lib/proxy-agent.ts)
export function createProxyAgentForProvider(
provider: Provider,
targetUrl: string
): ProxyConfig | null {
// 自动检测协议并创建对应的 ProxyAgent 或 SocksProxyAgent
// 返回 { agent, fallbackToDirect, proxyUrl }
}

// 请求转发层集成(src/app/v1/_lib/proxy/forwarder.ts)
const proxyConfig = createProxyAgentForProvider(provider, proxyUrl);
if (proxyConfig) {
init.dispatcher = proxyConfig.agent; // undici dispatcher

// 代理失败降级逻辑
if (proxyError && proxyConfig.fallbackToDirect) {
delete init.dispatcher;
response = await fetch(proxyUrl, init); // 直连重试
}
}
```

**使用场景**:

- 中国大陆访问海外 API 服务,改善连接性
- 企业内网环境,需要通过公司代理访问外网
- IP 限制场景,通过代理绕过 IP 封锁

### 数据库 Schema

核心表结构 (`src/drizzle/schema.ts`):
Expand Down Expand Up @@ -262,6 +325,41 @@ TZ=Asia/Shanghai # 时区设置
LOG_LEVEL=info # 日志级别
```

### 环境变量配置注意事项

#### 布尔值配置的正确方式

**重要**: 所有布尔类型的环境变量(如 `ENABLE_SECURE_COOKIES`, `AUTO_MIGRATE`, `ENABLE_RATE_LIMIT` 等)必须使用以下值:

- ✅ **表示 `true`**: `true`, `1`, `yes`, `on` 或任何非 `false`/`0` 的值
- ✅ **表示 `false`**: `false`, `0`

**常见错误**:

```bash
# ❌ 错误 - 字符串 "false" 会被解析为 true!
ENABLE_SECURE_COOKIES="false" # 错误:引号导致字符串被当作 true

# ✅ 正确 - 不带引号
ENABLE_SECURE_COOKIES=false # 正确:直接写 false
ENABLE_SECURE_COOKIES=0 # 正确:也可以用 0
```

**技术原因**: 项目使用 Zod 的自定义 transform 逻辑处理布尔值,而不是默认的 `z.coerce.boolean()`,因为后者会将任何非空字符串(包括 `"false"`)都强制转换为 `true`。详见 `src/lib/config/env.schema.ts:20-22` 的注释说明。

#### Cookie 安全策略说明

当通过 HTTP(非 HTTPS)访问系统时:

1. **localhost 访问** (`http://localhost` 或 `http://127.0.0.1`)
- 即使 `ENABLE_SECURE_COOKIES=true`,现代浏览器也允许设置 Secure Cookie
- 这是浏览器的安全例外,用于方便本地开发

2. **远程 IP/域名访问** (`http://192.168.x.x` 或 `http://example.com`)
- 如果 `ENABLE_SECURE_COOKIES=true`,浏览器会**拒绝**设置 Cookie,导致无法登录
- 必须设置 `ENABLE_SECURE_COOKIES=false` 才能正常使用
- 或者配置 HTTPS 反向代理(推荐)

## 开发注意事项

### 1. Redis 依赖和降级策略
Expand Down Expand Up @@ -419,6 +517,19 @@ SELECT ... LIMIT 50 OFFSET 0;
- 检查并发限制配置(`limit_concurrent_sessions`)
- 查看决策链记录(日志详情页面)

### 代理连接失败

- 使用"测试连接"按钮验证代理配置
- 检查代理地址格式(必须包含协议前缀:http://, https://, socks4://, socks5://)
- 检查代理服务器是否可访问(防火墙、端口)
- 检查代理认证信息(用户名/密码)
- 查看日志中的详细错误信息:
- `ProxyError`: 代理服务器连接失败
- `Timeout`: 连接超时(默认 5 秒)
- `NetworkError`: 网络错误或 DNS 解析失败
- 如启用了"降级到直连",检查是否自动降级成功
- 验证目标供应商 URL 是否正确

## 参考资源

- [Next.js 15 文档](https://nextjs.org/docs)
Expand Down
2 changes: 0 additions & 2 deletions drizzle/0013_optimal_darkhawk.sql

This file was deleted.

2 changes: 2 additions & 0 deletions drizzle/0014_overconfident_mongu.sql
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
ALTER TABLE "providers" ADD COLUMN "proxy_url" varchar(512);--> statement-breakpoint
ALTER TABLE "providers" ADD COLUMN "proxy_fallback_to_direct" boolean DEFAULT false;
Loading