Forest
|
e99b344b2b
|
refactor(backend): 引入端口接口模式
|
2025-12-19 21:26:19 +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 |
|
shaw
|
1ed93a5fd0
|
refactor: 提取 Claude 客户端常量到独立包
- 新增 internal/pkg/claude 包统一管理 Claude Code 相关常量
- 统一账号测试逻辑,所有账号类型使用相同的 Claude Code 风格请求
- 网关服务使用常量包替换硬编码的 beta header 字符串
|
2025-12-19 15:22:52 +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 |
|
shaw
|
8e4bd42e8c
|
fix: 修复安装/升级无法重启服务的问题
|
2025-12-18 17:44:49 +08:00 |
|
shaw
|
642842c29e
|
First commit
|
2025-12-18 13:50:39 +08:00 |
|