shaw
ef81aeb463
fix: 修复dashboard页面用户名的显示bug
2025-12-19 22:41:26 +08:00
shaw
22414326cc
fix: 修复前端切换页面时logo跟标题闪烁的问题
2025-12-19 22:33:36 +08:00
Wesley Liddick
14b155c66b
Merge pull request #7 from NepetaLemon/refactor/ports-pattern
...
refactor(backend): 引入端口接口模式
2025-12-19 08:29:04 -05:00
Forest
e99b344b2b
refactor(backend): 引入端口接口模式
2025-12-19 21:26:19 +08:00
shaw
7fd94ab78b
fix: 修复usage页面未显示缓存写入的问题
2025-12-19 16:57:31 +08:00
shaw
078529e51e
chore: 更新docker的postgres版本为18
2025-12-19 16:42:03 +08:00
shaw
23a4cf11c8
fix: 设置默认logo作为favicon
2025-12-19 16:41:00 +08:00
shaw
d1f0902ec0
feat(account): 支持账号级别拦截预热请求
...
- 新增 intercept_warmup_requests 配置项,存储在 credentials 字段
- 启用后,标题生成、Warmup 等预热请求返回 mock 响应,不消耗上游 token
- 前端支持所有账号类型(OAuth、Setup Token、API Key)的开关配置
- 修复 OAuth 凭证刷新时丢失非 token 配置的问题
2025-12-19 16:39:25 +08:00
shaw
ee86dbca9d
feat(account): 账号测试支持选择模型
...
- 新增 GET /api/v1/admin/accounts/:id/models 接口获取账号可用模型
- 账号测试弹窗新增模型选择下拉框
- 测试时支持传入 model_id 参数,不传则默认使用 Sonnet
- API Key 账号支持根据 model_mapping 映射测试模型
- 将模型常量提取到 claude 包统一管理
2025-12-19 16:00:09 +08:00
Wesley Liddick
733d4c2b85
Merge pull request #6 from dexcoder6/main
...
fix(frontend): 修复移动端菜单栏和使用记录页面 UI 问题
2025-12-19 02:59:05 -05:00
dexcoder6
406d3f3cab
fix(frontend): 修复移动端菜单栏和使用记录页面 UI 问题
...
- 修复移动端无法打开菜单栏的问题
- 在 app.ts 中添加 mobileOpen 状态管理
- 修复 AppHeader.vue 中移动端菜单按钮调用错误的方法
- 修复 AppSidebar.vue 使用本地 ref 而非全局状态的问题
- 添加移动端菜单自动关闭功能
- 点击菜单项后自动关闭侧边栏
- 添加 150ms 延迟以显示关闭动画
- 修复使用记录页面总消费卡片溢出问题
- 调整总消费卡片布局,将删除线价格移至说明行
- 添加 min-w-0 flex-1 防止内容溢出
- 保持与其他卡片高度一致
🤖 Generated with [Claude Code](https://claude.com/claude-code )
Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com >
2025-12-19 15:55:42 +08:00
shaw
1ed93a5fd0
refactor: 提取 Claude 客户端常量到独立包
...
- 新增 internal/pkg/claude 包统一管理 Claude Code 相关常量
- 统一账号测试逻辑,所有账号类型使用相同的 Claude Code 风格请求
- 网关服务使用常量包替换硬编码的 beta header 字符串
2025-12-19 15:22:52 +08:00
shaw
463ddea36f
fix(frontend): 修复代理快捷添加弹窗的 i18n 解析错误
...
batchInputHint 中的 @ 符号需要使用 {'@'} 转义
2025-12-19 11:24:22 +08:00
shaw
e769f67699
fix(setup): 支持从配置文件读取 Setup Wizard 监听地址
...
Setup Wizard 之前硬编码使用 8080 端口,现在支持从 config.yaml 或
环境变量 (SERVER_HOST, SERVER_PORT) 读取监听地址,方便用户在端口
被占用时使用其他地址启动初始化向导。
2025-12-19 11:21:58 +08:00
shaw
52d2ae9708
feat(gateway): 添加 /v1/messages/count_tokens 端点
...
实现 Claude API 的 token 计数功能,支持 OAuth、SetupToken 和 ApiKey 三种账号类型。
特点:
- 校验订阅/余额(不扣费)
- 不计算用户和账号并发
- 不记录使用量
- 支持模型映射(ApiKey 账号)
- 支持 OAuth 账号的指纹管理和 401 重试
2025-12-19 11:12:41 +08:00
shaw
2e59998c51
fix: 代理表单字段保存时自动去除前后空格
...
前后端同时处理,防止因意外空格导致代理连接失败
2025-12-19 10:39:30 +08:00
shaw
32e58115cc
fix(frontend): 修复代理快捷添加弹窗的 i18n 解析错误
...
转义 batchInputPlaceholder 中的 @ 符号,防止 Vue I18n 将其误解析为链接消息语法
2025-12-19 10:32:22 +08:00
shaw
ba27026399
docs: 调整源码编译步骤的顺序
2025-12-19 09:47:17 +08:00
shaw
c15b419c4c
feat(backend): 添加 event_logging 接口直接返回200
...
将原本在nginx处理的遥测日志请求移至后端,
忽略Claude Code客户端发送的日志数据。
2025-12-19 09:39:57 +08:00
shaw
5bd27a5d17
fix(frontend): 优化分组表单中订阅模式的字段显示逻辑
...
- 订阅模式下隐藏 Exclusive 字段并默认为开启状态
- 编辑分组时禁用计费类型字段,防止修改
- 移除编辑表单中无用的 subscription_type watch
2025-12-19 08:41:30 +08:00
Wesley Liddick
0e7b8aab8c
Merge pull request #4 from NepetaLemon/refactor/backend-wire-provider-sets
...
refactor(backend): 拆分 Wire ProviderSet
2025-12-18 19:27:49 -05:00
Forest
236908c03d
refactor(backend): 拆分 Wire ProviderSet
2025-12-19 00:03:29 +08:00
shaw
67d028cf50
fix: 修复用户修改密码接口404问题
...
将后端路由与前端API调用对齐:
- /user/profile -> /users/me
- PUT /user/password -> POST /users/me/password
2025-12-18 22:59:49 +08:00
shaw
66ba487697
fix: 修复前端github项目地址
2025-12-18 22:47:42 +08:00
Wesley Liddick
8c7875aa4d
Merge pull request #3 from NepetaLemon/refactor/backend-wire-bootstrap
...
refactor(backend): 引入 Wire 重构服务启动与依赖组装
2025-12-18 09:12:15 -05:00
shaw
145171464f
fix: 修复前端多个 bug
...
1. 版本号闪烁问题
- 将版本信息缓存到 Pinia store,避免每次路由切换都重新请求
- 添加加载占位符,版本为空时显示骨架屏
2. 管理员登录跳转问题
- 管理员登录后现在正确跳转到 /admin/dashboard
- 普通用户仍跳转到 /dashboard
3. Dashboard 页面空白报错
- 修复 API 返回 null 时访问 .length 导致的 TypeError
- 为 computed 属性添加可选链操作符保护
- 为数据赋值添加空数组默认值
2025-12-18 22:11:29 +08:00
Forest
e5aa676853
refactor(backend): 引入 Wire 重构服务启动与依赖组装
2025-12-18 22:07:17 +08:00
shaw
9b4fc42457
feat: 实现后台在线更新功能
...
- 前端添加更新和重启按钮,支持一键更新 Release 构建
- 修复条件判断优先级问题,确保错误/成功状态正确显示
- 后端使用原子文件替换模式,确保更新过程安全可靠
- 在可执行文件同目录创建临时文件,保证 rename 原子性
- 删除未使用的 copyFile 函数,保持代码整洁
2025-12-18 21:15:10 +08:00
shaw
caae7e4603
feat: 改进安装脚本的交互体验和自动化流程
...
- 修复 curl | bash 管道模式下无法交互式输入的问题
- 使用 /dev/tty 检测终端可用性替代 stdin 检测
- 所有 read 命令从 /dev/tty 读取用户输入
- 安装完成后自动启动服务和启用开机自启
- 使用 ipinfo.io API 获取公网 IP 用于显示访问地址
- 简化安装完成后的输出信息
2025-12-18 20:53:29 +08:00
shaw
a26db8b3e2
fix: 修复前端页面刷新时偶发空白渲染的竞态条件问题
...
使用 router.isReady() 等待路由器完成初始导航后再挂载应用,
避免 RouterView 在路由未就绪时渲染空的 Comment 节点。
2025-12-18 20:45:56 +08:00
shaw
8e81e395b3
refactor: 使用行业标准方案重构服务重启逻辑
...
重构内容:
- 移除复杂的 sudo systemctl restart 方案
- 改用 os.Exit(0) + systemd Restart=always 的标准做法
- 删除 sudoers 配置及相关代码
- 删除 sub2api-sudoers 文件
优势:
- 代码从 85+ 行简化到 47 行
- 无需 sudo 权限配置
- 无需特殊用户 shell 配置
- 更简单、更可靠
- 符合行业最佳实践(Docker/K8s 等均采用此方案)
工作原理:
- 服务调用 os.Exit(0) 优雅退出
- systemd 检测到退出后自动重启(Restart=always)
2025-12-18 20:32:24 +08:00
shaw
f0e89992f7
fix: 使用 setsid 确保重启命令独立于父进程执行
...
问题原因:
- cmd.Start() 启动的子进程与父进程在同一会话中
- 当 systemctl restart 发送 SIGTERM 给父进程时
- 子进程可能也会被终止,导致重启命令无法完成
修复内容:
- 使用 setsid 创建新会话,子进程完全独立于父进程
- 分离标准输入/输出/错误流
- 确保即使父进程被 kill,重启命令仍能执行完成
2025-12-18 20:00:53 +08:00
shaw
4eaa0cf14a
fix: 使用完整路径执行 sudo 和 systemctl 命令
...
问题原因:
- systemd 服务的 PATH 环境变量可能受限
- 直接使用 "sudo" 可能找不到可执行文件
修复内容:
- 添加 findExecutable 函数动态查找可执行文件路径
- 先尝试 exec.LookPath,再检查常见系统路径
- 添加日志显示实际使用的路径,方便调试
- 兼容不同 Linux 发行版的路径差异
2025-12-18 19:58:25 +08:00
shaw
e9ec2280ec
fix: 修复 sudo 在非交互模式下无法执行的问题
...
问题原因:
- sudo 命令没有 -n 选项
- 在后台服务中,sudo 会尝试从终端读取密码
- 由于没有终端,命令静默失败
修复内容:
- 添加 sudo -n 选项强制非交互模式
- 如果需要密码会立即失败并返回错误,而不是挂起
2025-12-18 19:37:41 +08:00
Wesley Liddick
bb7bfb6980
Merge pull request #1 from 7836246/fix/concurrent-proxy-race-condition
...
fix: 修复并发请求时共享httpClient.Transport导致的竞态条件
2025-12-18 06:37:22 -05:00
shaw
b66f97c100
fix: 修复 install.sh 优先使用旧 sudoers 文件的问题
...
问题原因:
- install.sh 优先从 tar.gz 复制 sudoers 文件
- 旧版 Release 中的 sudoers 文件没有 /usr/bin/systemctl 路径
- 即使脚本更新了,仍然会使用旧的配置
修复内容:
- 移除对 tar.gz 中 sudoers 文件的依赖
- 总是使用脚本中内嵌的最新配置
- 确保新版脚本立即生效,无需等待新 Release
2025-12-18 19:27:47 +08:00
shaw
b51ad0d893
fix: 修复 sudoers 中 systemctl 路径不兼容的问题
...
问题原因:
- sudoers 只配置了 /bin/systemctl 路径
- 部分系统(如 Ubuntu 22.04+)的 systemctl 位于 /usr/bin/systemctl
- 路径不匹配导致 sudo 仍然需要密码
修复内容:
- 同时支持 /bin/systemctl 和 /usr/bin/systemctl 两个路径
- 兼容 Debian/Ubuntu 和 RHEL/CentOS 等不同发行版
2025-12-18 19:17:05 +08:00
shaw
4eb22d8ee9
fix: 修复服务用户 shell 导致无法执行 sudo 重启的问题
...
问题原因:
- 服务用户 sub2api 的 shell 被设置为 /bin/false
- 导致无法执行 sudo systemctl restart 命令
- 安装/升级后服务无法自动重启
修复内容:
- 新安装时使用 /bin/sh 替代 /bin/false
- 升级时自动检测并修复旧版本用户的 shell 配置
- 修复失败时给出警告和手动修复命令,不中断安装流程
2025-12-18 19:07:33 +08:00
江西小徐
2392e7cf99
fix: 修复并发请求时共享httpClient.Transport导致的竞态条件
...
问题描述:
当多个请求并发执行且使用不同代理配置时,它们会同时修改共享的
s.httpClient.Transport,导致请求可能使用错误的代理(数据泄露风险)
或意外失败。
修复方案:
为需要代理的请求创建独立的http.Client,而不是修改共享的httpClient.Transport。
改动内容:
- 新增 buildUpstreamRequestResult 结构体,返回请求和可选的独立client
- 修改 buildUpstreamRequest 方法,配置代理时创建独立client
- 更新 Forward 方法,根据是否有代理选择合适的client
2025-12-18 18:14:48 +08:00
shaw
8e4bd42e8c
fix: 修复安装/升级无法重启服务的问题
2025-12-18 17:44:49 +08:00
shaw
ef3199f0ca
fix: 修复脚本的一些参数问题
2025-12-18 17:25:26 +08:00
shaw
e440530acc
fix: release error
2025-12-18 17:12:57 +08:00
shaw
e2ae9fe50b
fix: release error
2025-12-18 17:02:21 +08:00
shaw
20aee89dcc
fix: Fixed installation issues with the install.sh script.
2025-12-18 16:00:57 +08:00
shaw
6cf60176c3
fix: release error
2025-12-18 15:56:13 +08:00
shaw
268f4d28fb
fix: add missing deploy/DOCKER.md for Docker workflow
...
The release workflow references ./deploy/DOCKER.md to update DockerHub
description, but the file was missing causing ENOENT error.
2025-12-18 15:46:43 +08:00
shaw
882c2e1eef
fix: use environment variable to pass full tag message to GoReleaser
...
- Extract complete tag message body in workflow using git format
- Pass tag message via TAG_MESSAGE environment variable
- Update goreleaser config to use .Env.TAG_MESSAGE instead of .TagBody
- Fix release notes being truncated to first paragraph only
2025-12-18 15:30:35 +08:00
shaw
e63d95122a
fix: release error
2025-12-18 15:08:50 +08:00
shaw
3d05e50335
fix: frontend build error
2025-12-18 14:26:55 +08:00
shaw
642842c29e
First commit
2025-12-18 13:50:39 +08:00