Commit Graph

1594 Commits

Author SHA1 Message Date
shaw
b2ad2a4a61 fix: 修复 OpenAI 兼容路由的 Claude API 认证和 Function Calling 支持
- 添加必需的系统消息 "You are Claude Code, Anthropic's official CLI for Claude."
- 修改 anthropic-beta header 为 OAuth-only 模式 (oauth-2025-04-20)
- 不再传递客户端 headers,使用固定的 4 个必需 headers
- 增强流式响应的 Function Calling 支持,正确处理 tool_use 事件
- 支持自定义 beta header 参数,允许不同路由使用不同的认证模式

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

Co-Authored-By: Claude <noreply@anthropic.com>
2025-07-22 14:38:30 +08:00
shaw
6ceed5c3ee fix 修复openai格式转发失败的问题 2025-07-22 13:55:14 +08:00
shaw
9ad7feb94c fix: 修复 OpenAI 路由中的 req.apiKeyData undefined 错误
- 将所有路由中的 req.apiKeyData 改为 req.apiKey(与中间件一致)
- 在 authenticateApiKey 中间件中添加缺失的字段(permissions, geminiAccountId, usage)
- 修复 openaiClaudeRoutes.js、openaiGeminiRoutes.js 和 geminiRoutes.js 中的引用错误
- 确保 API 权限检查正常工作

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

Co-Authored-By: Claude <noreply@anthropic.com>
2025-07-22 13:08:24 +08:00
shaw
6b0832bc2d fix: 修复 OpenAI 兼容路由中的 router.handle() 错误
- 移除了 openaiClaudeRoutes.js 中错误的 router.handle() 调用
- 提取 handleChatCompletion 函数作为共享处理逻辑
- 修复了 /v1/completions 端点的实现
- 确保 /openai/claude 和 /openai/gemini 路由正常工作

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

Co-Authored-By: Claude <noreply@anthropic.com>
2025-07-22 12:58:11 +08:00
shaw
12d68af421 update default redirectUri 2025-07-22 11:52:07 +08:00
shaw
11318c22b0 feat: 优化 Gemini OAuth 授权流程,使用固定的 localhost 回调地址
- 将 Gemini OAuth 回调地址固定为 http://localhost:45462
- 更新前端提示文字为"复制oauth后的链接"
- 实现自动提取 localhost:45462 链接中的 code 参数功能
- 删除不再需要的 web/auth_gemini 路由
- 添加详细的用户操作说明和错误处理提示
- 支持两种输入方式:完整链接或仅授权码

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

Co-Authored-By: Claude <noreply@anthropic.com>
2025-07-22 11:42:54 +08:00
shaw
ed99043127 fix: 修复 geminiAccountService 配置读取错误并添加 secret scanning 排除规则
- 直接使用硬编码的 Gemini OAuth 凭据,避免配置依赖
- 添加 .github/secret_scanning.yml 排除公开的 OAuth 凭据文件

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

Co-Authored-By: Claude <noreply@anthropic.com>
2025-07-22 10:37:43 +08:00
shaw
38c1fc4785 feat: 添加多模型支持和OpenAI兼容接口
- 新增 Gemini 模型支持和账户管理功能
- 实现 OpenAI 格式到 Claude/Gemini 的请求转换
- 添加自动 token 刷新服务,支持提前刷新策略
- 增强 Web 管理界面,支持 Gemini 账户管理
- 优化 token 显示,添加掩码功能
- 完善日志记录和错误处理

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

Co-Authored-By: Claude <noreply@anthropic.com>
2025-07-22 10:17:39 +08:00
shaw
22dcd4d171 Merge branch 'dev' 2025-07-20 22:45:56 +08:00
shaw
4f0d8db757 fix: 修复总Token消耗USD计算重复统计问题
- 将usage-costs的all模式改为只使用monthly数据,避免daily、monthly、hourly重复计算
- 更新正则表达式只匹配monthly格式的key
- 确保总消耗与模型统计表格的USD计算保持一致

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

Co-Authored-By: Claude <noreply@anthropic.com>
2025-07-20 21:36:51 +08:00
shaw
ff554d7c70 fix: 修复总Token消耗USD计算与模型统计不一致的问题
- 修正Redis key匹配模式从 'usage:model:*:*' 到 'usage:model:*:*:*'
- 更新正则表达式以支持hourly统计数据
- 确保所有模型都使用正确的价格计算费用

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

Co-Authored-By: Claude <noreply@anthropic.com>
2025-07-20 21:18:39 +08:00
shaw
ddf814526d Merge branch 'dev' into main 2025-07-20 20:38:10 +08:00
shaw
7e5fb514cb fix: 修复 Docker 镜像版本号与 Release 版本号不一致的问题
- 在 auto-release.yml 中集成 Docker 构建步骤,确保版本号一致性
- 优化 docker-publish.yml 的标签生成策略,添加 sha- 前缀避免混淆
- 现在每次自动发布时会同时构建对应版本的 Docker 镜像

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

Co-Authored-By: Claude <noreply@anthropic.com>
2025-07-20 20:33:00 +08:00
shaw
b77c600f05 fix: 修复更新日志链接,指向 GitHub Releases 页面 2025-07-20 17:36:45 +08:00
shaw
262ca74d19 chore: 移除手动维护的 CHANGELOG.md,使用自动生成方案 2025-07-20 17:30:49 +08:00
shaw
1348941cd6 docs: 添加完整的 CHANGELOG.md 文件 2025-07-20 17:24:23 +08:00
shaw
088ce266ba feat: 添加API Key时间窗口限流功能并移除累计总量限制
- 新增时间窗口限流功能,支持按分钟设置时间窗口
- 支持在时间窗口内限制请求次数和Token使用量
- 移除原有的累计总量限制,只保留时间窗口限制
- Token统计包含所有4种类型:输入、输出、缓存创建、缓存读取
- 前端UI优化,明确显示限流参数的作用范围
- 限流触发时提供友好的错误提示和重置时间

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

Co-Authored-By: Claude <noreply@anthropic.com>
2025-07-20 15:58:00 +08:00
shaw
0aa986a0d8 fix: 彻底修复 YAML 语法错误
- 避免使用 heredoc,改用字符串拼接方式构建消息
- 使用 $'\n' 来处理换行符
- 将 jq 输出直接通过管道传给 curl
- 确保 YAML 语法正确无误
2025-07-20 00:52:49 +08:00
shaw
c6fb87b726 fix: 修复自动发布工作流的 YAML 语法错误
- 使用 heredoc 语法避免多行字符串中的转义问题
- 使用 jq 工具正确构建 JSON 数据
- 修复了第 170 行的 YAML 语法错误
2025-07-20 00:47:49 +08:00
shaw
6ca8d465db feat: 添加 Telegram 自动通知功能
- 在 auto-release.yml 中添加 Telegram 通知步骤
- 新版本发布时自动发送通知到 Telegram 频道
- 包含版本号、更新内容、Docker 命令等信息
- 添加 TELEGRAM_SETUP.md 详细配置指南
- 更新相关文档说明

通知功能是可选的,需要配置以下 GitHub Secrets:
- TELEGRAM_BOT_TOKEN
- TELEGRAM_CHAT_ID

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

Co-Authored-By: Claude <noreply@anthropic.com>
2025-07-20 00:39:07 +08:00
shaw
4291983c87 chore: remove raw sse chunk logging 2025-07-20 00:19:00 +08:00
shaw
aa59178db3 chore: 优化 changelog 显示,移除 [unreleased] 标记 2025-07-19 22:15:54 +08:00
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