Commit Graph

1372 Commits

Author SHA1 Message Date
shaw
7bb41a492f fix: 修复 git-cliff 安装路径错误
- 修正解压后的文件路径为 git-cliff-1.4.0/git-cliff
- 同时修复了 auto-release.yml 和 release.yml 中的路径问题
2025-07-19 22:11:19 +08:00
shaw
6a86204223 fix: 修复自动发布工作流配置
- 修复 Docker 镜像 tag 格式错误(移除有问题的 sha prefix 配置)
- 替换 git-cliff-action 为直接使用 git-cliff CLI 工具
- 解决了 GitHub Actions 构建失败的问题

现在工作流应该可以正常运行了
2025-07-19 22:03:12 +08:00
shaw
acd1d24186 fix: 修复自动发布工作流配置
- 移除 .github/** 从 paths-ignore,避免工作流更新时无法触发
- 添加 workflow_dispatch 支持手动触发
2025-07-19 21:53:46 +08:00
shaw
edf8c7e348 feat: 添加自动版本发布功能
- 新增 auto-release.yml 工作流,推送到 main 分支时自动递增版本号
- 自动创建 GitHub Release 和生成更新日志
- 添加 AUTO_RELEASE_GUIDE.md 详细使用指南
- 更新 WORKFLOW_USAGE.md 说明文档

现在每次推送到 main 分支都会自动:
1. 递增 patch 版本号(如 v1.0.1 → v1.0.2)
2. 创建新的 Git 标签和 GitHub Release
3. 生成更新日志并更新 CHANGELOG.md

🤖 Generated with [Claude Code](https://claude.ai/code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-07-19 21:44:13 +08:00
shaw
afe9e259c8 Merge branch 'dev': 添加API Key模型限制功能
- 前端添加模型限制的开关和输入界面
- 后端存储和验证模型限制
- 修复模型限制不生效的问题
2025-07-19 21:18:52 +08:00
shaw
4bb2050093 fix: 修复API Key模型限制功能不生效的问题
- 在apiKeyService.validateApiKey()中添加缺失的enableModelRestriction和restrictedModels字段返回
- 添加详细的调试日志来追踪模型限制检查的执行流程
- 解析存储在Redis中的restrictedModels JSON数据
- 确保模型限制数据正确传递到claudeRelayService

🤖 Generated with [Claude Code](https://claude.ai/code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-07-19 21:13:11 +08:00
shaw
f962083752 feat: 为API Key添加模型限制功能
- 前端:在API Key创建和编辑表单中添加模型限制开关和标签输入
- 前端:支持动态添加/删除限制的模型列表
- 后端:更新API Key数据结构,新增enableModelRestriction和restrictedModels字段
- 后端:在中转请求时检查模型访问权限
- 修复:Enter键提交表单问题,使用@keydown.enter.prevent
- 优化:限制模型数据持久化,关闭开关时不清空数据

🤖 Generated with [Claude Code](https://claude.ai/code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-07-19 20:54:26 +08:00
shaw
382efff867 fix: 简化为root用户运行,彻底解决权限问题
- 移除claude用户创建,直接使用root用户运行
- 删除所有复杂的权限设置和chown操作
- 恢复简单的sed命令修改配置文件
- 移除调试权限信息输出
- 简化Dockerfile,减少构建复杂度
- 确保所有文件操作都有完整权限

🤖 Generated with [Claude Code](https://claude.ai/code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-07-19 02:48:35 +08:00
shaw
3f7234aa91 fix: 一次性解决所有权限问题
- 设置/app目录为775权限,解决sed临时文件创建问题
- 替换sed为awk进行文件内容修改,避免权限问题
- 使用/tmp目录作为临时文件存储位置
- 确保claude用户对所有必要目录和文件都有完整读写权限
- 彻底解决"couldn't open temporary file"和"permission denied"错误

🤖 Generated with [Claude Code](https://claude.ai/code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-07-19 02:39:18 +08:00
shaw
30010c121d fix: 修复data目录所有者权限问题
- 明确设置/app/data目录所有者为claude:nodejs用户
- 避免之前chown -R /app导致的权限覆盖问题
- 精确控制每个目录的权限:logs、data、temp、config都为775权限
- 确保setup.js可以在/app/data目录中创建init.json文件
- 解决"EACCES: permission denied"错误

🤖 Generated with [Claude Code](https://claude.ai/code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-07-19 02:32:04 +08:00
shaw
ea5ee199b6 fix: 彻底修复权限问题,确保data目录可写
- 修复Dockerfile中权限设置顺序,避免递归覆盖
- 设置data目录权限为775,确保claude用户可写入init.json
- 为config目录和配置文件设置正确权限(775/664)
- 添加调试信息显示用户和目录权限状态
- 移除-R标志,精确控制每个目录的权限
- 确保setup.js能够成功创建/app/data/init.json文件

🤖 Generated with [Claude Code](https://claude.ai/code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-07-19 02:20:09 +08:00
shaw
0eb2561a8a fix: 解决Docker权限问题,预先创建配置文件
- 在Dockerfile中预先创建config.js和.env文件避免运行时权限问题
- 设置正确的目录权限(755)和文件所有者(claude:nodejs)
- 简化docker-entrypoint.sh脚本,只处理文件内容修改而非创建
- 添加调试信息和错误处理
- 确保claude用户有足够权限修改配置文件

🤖 Generated with [Claude Code](https://claude.ai/code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-07-19 02:12:17 +08:00
shaw
5d4b39b7a7 fix: 自动处理配置文件复制和密钥生成
- 修改docker-entrypoint.sh自动从模板复制config.js和.env文件
- 自动生成JWT_SECRET(64字符)和ENCRYPTION_KEY(32字符)
- 自动配置Redis连接到容器内的redis服务
- 添加sed工具到Dockerfile确保脚本正常运行
- 解决Docker镜像部署时找不到配置文件的问题

🤖 Generated with [Claude Code](https://claude.ai/code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-07-19 01:54:55 +08:00
shaw
883a0f8c2d 修复 GitHub Actions 权限设置 2025-07-19 01:26:21 +08:00
shaw
756c149282 docs: 更新 README.md 文档 2025-07-19 01:10:56 +08:00
shaw
fba9a43c99 Merge branch 'dev' 2025-07-19 01:01:38 +08:00
shaw
f9933f7061 docs: 更新 README.md 文档
🤖 Generated with [Claude Code](https://claude.ai/code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-07-19 00:59:21 +08:00
shaw
5c83cf1d53 feat: 添加 Docker Hub 自动构建和改进部署体验
- 支持环境变量预设管理员账号密码
- 添加 docker-entrypoint.sh 自动初始化脚本
- 配置 GitHub Actions 自动构建多平台镜像(amd64, arm64)
- 添加版本标签管理和自动发布流程
- 集成 Trivy 安全漏洞扫描
- 更新文档说明 Docker Hub 使用方法
- 优化 Docker 部署用户体验

🤖 Generated with [Claude Code](https://claude.ai/code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-07-19 00:49:04 +08:00
shaw
f5968e518e feat: 改进管理界面弹窗体验和滚动条美化
- 修复API Key创建/编辑弹窗和账户信息修改弹窗在低高度屏幕上被遮挡的问题
- 为所有弹窗添加自适应高度支持,最大高度限制为90vh
- 美化Claude账户弹窗的滚动条样式,使用紫蓝渐变色与主题保持一致
- 添加响应式适配,移动设备上弹窗高度调整为85vh
- 优化滚动条交互体验,支持悬停和激活状态

🤖 Generated with [Claude Code](https://claude.ai/code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-07-18 23:49:55 +08:00
shaw
6988be0806 fix: 修复长上下文请求超时问题
- 设置HTTP服务器超时时间与代理超时时间一致
- 默认超时时间为5分钟(可通过DEFAULT_PROXY_TIMEOUT环境变量配置)
- 同时设置keepAliveTimeout避免连接过早断开
- 解决了Node.js默认2分钟超时导致的长上下文处理中断问题

🤖 Generated with [Claude Code](https://claude.ai/code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-07-18 14:04:51 +08:00
shaw
7e30fbb945 Merge branch 'dev' 2025-07-17 21:21:09 +08:00
shaw
4372b29252 fix: 修复管理界面用户菜单z-index层级问题
- 修复了querySelector语法错误,移除了无效的@click属性选择器
- 为用户菜单容器添加专门的类名user-menu-container
- 简化点击检测逻辑,提高代码可维护性
- 解决了控制台报错问题

🤖 Generated with [Claude Code](https://claude.ai/code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-07-17 21:07:50 +08:00
shaw
11873ed78b fix: 统一管理员密码管理机制,以init.json为唯一数据源
- app.js: 每次启动强制从init.json加载管理员凭据到Redis,确保数据一致性
- web.js: 修改密码时先更新init.json,成功后再更新Redis缓存
- cli/index.js: CLI创建管理员时同时更新init.json和Redis
- setup.js: 优化提示信息,明确重置密码需要重启服务
- admin.js: 修复Claude账户专属绑定功能的验证逻辑

解决了之前存在的双重存储同步问题,现在init.json是唯一真实数据源。

🤖 Generated with [Claude Code](https://claude.ai/code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-07-17 20:57:31 +08:00
shaw
e059d3fa9d update readme 2025-07-17 11:02:19 +08:00
shaw
6bb39dadd9 Merge branch 'dev' 2025-07-17 08:55:59 +08:00
shaw
ee9bd4aea4 feat: 实现Claude账户专属绑定功能
- 添加账户类型(dedicated/shared)支持
- API Key可绑定专属账户,优先使用绑定账户
- 未绑定的API Key继续使用共享池和粘性会话
- 修复专属账户下拉框显示问题(isActive类型不匹配)
- 修复getBoundAccountName方法未定义错误
- 添加删除账户前的API Key绑定检查
- 完全保留原有粘性会话机制

🤖 Generated with [Claude Code](https://claude.ai/code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-07-17 08:50:12 +08:00
shaw
7e61a31f0f fix: process.env.REDIS_ENABLE_TLS 字符串引起的判断问题 2025-07-16 21:20:59 +08:00
shaw
522065c5bb update readme 2025-07-16 18:40:44 +08:00
shaw
f9bf2d544e update readme 2025-07-16 18:33:28 +08:00
shaw
a64ced0e36 fix: 修复非流式响应JSON解析错误和max_tokens参数校验
- 修复gzip压缩响应处理:添加zlib模块支持,正确解压缩Claude API响应
- 优化max_tokens验证机制:从硬编码改为动态读取model_pricing.json文件
- 改进错误处理:增强响应数据处理的容错性
- 修复SSE错误事件格式:统一字符串引号风格

🤖 Generated with [Claude Code](https://claude.ai/code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-07-16 18:12:19 +08:00
shaw
66a53230e1 fix: 修复管理界面用户菜单z-index层级问题
- 修复用户菜单被主内容区域遮挡的问题
- 调整顶部导航和主内容区域的z-index层级
- 优化用户菜单的定位方式,改为相对定位
- 确保用户菜单在所有情况下都能正确显示

🤖 Generated with [Claude Code](https://claude.ai/code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-07-16 17:57:14 +08:00
shaw
8ca9ffee68 fix: 改进socket hang up和网络错误处理机制
- 修复socket hang up错误导致返回空字符串的问题
- 改进非流式请求的错误处理,根据错误类型返回适当的HTTP状态码
- 优化流式请求的错误处理,返回SSE格式的错误事件
- 增强错误日志记录,包含详细的网络错误信息
- 确保在任何情况下都返回有效的JSON响应格式

修复内容:
- ECONNRESET错误返回502状态码和明确的错误信息
- ENOTFOUND错误返回502状态码和DNS解析失败信息
- ECONNREFUSED错误返回502状态码和连接被拒绝信息
- ETIMEDOUT错误返回504状态码和超时信息
- 流式请求错误时返回符合SSE规范的错误事件

🤖 Generated with [Claude Code](https://claude.ai/code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-07-16 17:56:29 +08:00
shaw
06ad6ec440 fix: 修复用户界面显示问题
- 修复用户菜单下拉框被glass-strong元素遮挡的问题,改为fixed定位并提高z-index
- 修复登录界面label颜色与背景色相同的问题,改为text-gray-900
- 修复错误消息提示框文字颜色问题,从text-red-200改为text-red-800提高可读性
- 确保所有UI元素在各种背景下都有良好的可见性和对比度

🤖 Generated with [Claude Code](https://claude.ai/code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-07-16 17:32:56 +08:00
shaw
c16c6b63cf fix: 修复用户菜单显示问题和真实用户名显示
- 修复登录接口返回真实用户名而非输入用户名
- 新增获取当前用户信息的API接口(/web/auth/user)
- 修复前端用户名显示逻辑,页面初始化时获取真实用户名
- 提高下拉菜单z-index确保正确显示
- 解决用户名显示为Admin而非data/init.json中真实用户名的问题

🤖 Generated with [Claude Code](https://claude.ai/code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-07-16 17:26:02 +08:00
shaw
156bfa9b58 feat: 添加管理员账户信息修改功能
- 新增右上角用户菜单,包含修改账户信息和退出登录选项
- 实现修改用户名和密码功能,支持独立修改或同时修改
- 添加密码强度验证(最少8位)和确认密码验证
- 修改后自动退出登录,确保安全性
- 同步更新Redis和data/init.json文件,保持数据一致性
- 优化用户体验,提供实时反馈和错误提示

🤖 Generated with [Claude Code](https://claude.ai/code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-07-16 17:16:29 +08:00
shaw
5a0271d536 fix: 统一仪表盘Token消耗费用计算逻辑
- 修复今日费用和总费用计算不一致的问题
- 总费用计算现在优先使用Redis中的详细模型统计数据
- 使用真实模型价格进行费用计算,而不是固定的'unknown'价格
- 添加智能回退机制,无模型数据时使用Haiku价格
- 增加详细的日志记录以便跟踪费用计算过程
- 解决了总Token消耗大但费用显示偏低的异常问题

🤖 Generated with [Claude Code](https://claude.ai/code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-07-16 16:41:54 +08:00
shaw
63906c9fa3 refactor: 简化CLI工具管理命令
- 移除复杂的API Key管理和账户管理命令
- 简化admin命令直接创建初始管理员
- 保留核心的status命令用于系统状态查看
- 减少CLI工具的复杂度,专注于核心功能

🤖 Generated with [Claude Code](https://claude.ai/code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-07-16 16:17:07 +08:00
shaw
48c09b1286 feat: 优化SSL证书获取推荐和token刷新机制
- 将README中的certbot推荐改为acme.sh,更轻量且功能更强
- 中英文文档同步更新SSL证书获取方式
- 调整token刷新提前时间从10秒改为60秒,提供更充足的缓冲时间

🤖 Generated with [Claude Code](https://claude.ai/code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-07-16 16:15:17 +08:00
shaw
59bc309ae4 fix: 修复 User-Agent 暴露问题并实现安全的 header 转发
- 移除硬编码的 'claude-relay-service/1.0.0' User-Agent,防止代理身份暴露
- 添加 _filterClientHeaders 方法过滤敏感请求头
- 实现完整的客户端 header 转发功能
- 默认 User-Agent 设置为 'claude-cli/1.0.53 (external, cli)'
- 过滤 x-api-key, authorization, host 等敏感 headers
- 更新所有 _makeClaudeRequest 方法支持 clientHeaders 参数
- 修改 API 路由传递 req.headers 到服务层

安全改进:
- 防止代理服务身份暴露
- 提升请求透明性和安全性
- 保持客户端原始请求特征

🤖 Generated with [Claude Code](https://claude.ai/code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-07-16 16:01:11 +08:00
shaw
567e3b25aa feat: 优化并发控制和移除冗余限制功能
主要改进:
1. 改进并发控制机制
   - 使用 once 代替 on 避免重复监听
   - 监听多个事件确保可靠性(close、finish)
   - 支持客户端断开时立即释放并发槽位

2. 支持非流式请求的客户端断开处理
   - 客户端断开时立即中断上游请求
   - 避免资源浪费和不必要的 API 调用

3. 移除 requestLimit(请求数限制)功能
   - 移除配置和验证逻辑
   - 保留请求统计用于监控分析

4. 移除速率限制(Rate Limit)功能
   - 移除 RATE_LIMIT_* 配置
   - 简化中间件逻辑
   - 避免与并发控制重复

现在系统仅保留:
- Token 使用量限制
- 并发数限制(更精确的资源控制)

🤖 Generated with [Claude Code](https://claude.ai/code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-07-16 14:40:37 +08:00
shaw
f9bc2ddb23 fix: 优化 API Key 并发控制机制
- 调整并发计数器过期时间为3分钟,支持长时间流式请求
- 为流式响应添加客户端断开检测,确保计数正确减少
- 添加响应关闭和错误事件监听器,防止并发计数泄漏
- 提高系统稳定性和资源管理准确性

🤖 Generated with [Claude Code](https://claude.ai/code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-07-16 11:10:44 +08:00
shaw
de0a2f685a feat: 添加手动输入 Access Token 时的获取说明
- 在添加 Claude 账户时,选择手动输入方式会显示详细提示
- 说明 Access Token 应从 ~/.claude/.credentials.json 文件获取
- 明确提醒不要使用 Claude 官网 API Keys 页面的密钥

🤖 Generated with [Claude Code](https://claude.ai/code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-07-16 11:08:26 +08:00
shaw
08f93e9872 fix: 修复并发计数器在请求异常时不能正确减少的问题
- 增强事件监听机制
  - 监听 req 的 close 和 aborted 事件
  - 监听 res 的 finish 和 error 事件
  - 使用标志位确保只减少一次计数

- 改进日志记录
  - 增加并发计数增减的详细日志
  - 记录请求关闭和中断事件

- 确保计数器安全性
  - 使用 Lua 脚本原子操作防止负数
  - 优化 Redis 操作逻辑

- 增强管理界面
  - API Keys 列表显示当前并发数
  - 并发数超过 0 时用橙色标记
  - 显示当前并发数/限制数格式

🤖 Generated with Claude Code

Co-Authored-By: Claude <noreply@anthropic.com>
2025-07-16 10:21:17 +08:00
shaw
e2c9f26135 chore: 移除测试脚本和文档文件
- 删除 test-concurrency.js 测试脚本
- 删除 CONCURRENCY_CONTROL.md 文档
- 删除 API_KEY_EDIT_FEATURE.md 文档

保留核心功能代码,移除仅用于开发测试的文件

🤖 Generated with Claude Code

Co-Authored-By: Claude <noreply@anthropic.com>
2025-07-16 09:48:39 +08:00
shaw
12b41ceb25 feat: 添加API Key并发控制和编辑功能
- 新增API Key并发控制功能
  - 创建API Key时可设置并发限制(0为不限制)
  - 在认证中间件中实现并发检查
  - 使用Redis原子操作确保计数准确
  - 添加自动清理机制处理异常情况

- 新增API Key编辑功能
  - 支持修改Token限制和并发限制
  - 前端添加编辑按钮和模态框
  - 后端限制只能修改指定字段

- 其他改进
  - 添加test-concurrency.js测试脚本
  - 添加详细的功能说明文档
  - 所有代码通过ESLint检查

🤖 Generated with Claude Code

Co-Authored-By: Claude <noreply@anthropic.com>
2025-07-16 09:48:07 +08:00
Wesley Liddick
efa7048018 Merge pull request #8 from hst-Sunday/main
feat: 添加 Redis TLS 支持
2025-07-16 08:59:58 +08:00
sunday
36bf69adbb feat: 添加 Redis TLS 支持
- 在 .env.example 中新增 REDIS_ENABLE_TLS 配置项
- 更新 config.example.js 以支持 TLS 连接
- 修改 RedisClient 类以根据配置启用或禁用 TLS
2025-07-16 02:52:21 +08:00
shaw
ec9847fa05 update readme 2025-07-15 22:57:41 +08:00
shaw
45a1832f6b update readme 2025-07-15 22:25:09 +08:00
shaw
fbf942a5fd feat: 支持手动添加 Claude 账户 Access Token
- 添加 OAuth 和手动输入两种账户添加方式
- 支持直接输入 Access Token 和 Refresh Token
- 新增账户编辑功能,可更新 Token 和代理设置
- 优化 Token 刷新失败时的回退机制
- 改进用户体验,支持手动维护长期有效的 Token

🤖 Generated with [Claude Code](https://claude.ai/code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-07-15 19:28:14 +08:00