Commit Graph
348 Commits
Author SHA1 Message Date
qian f13b583c35 feat(admin):渠道模型能力页面添加字段使用说明 2026-08-02 14:20:35 +08:00
qian 49b05b66ad fix(admin):修复渠道测试功能使用上游模型名称的问题
之前渠道测试时使用的是系统内模型名称,而不是上游配置的模型名称,
导致测试请求失败(上游供应商无法识别系统内模型名)。

修复内容:
- 将查询目标从 mdl_models 表改为 chn_abilities 表
- 查询条件:channel_id + model_name + enabled=true
- 获取 upstream_model 字段作为上游模型名称发送测试请求

影响范围:
- internal/logic/admin/channel_testing.go
2026-08-02 13:49:11 +08:00
qian 27d3cae94e chore:修改relay层注释为中文 2026-08-02 13:40:26 +08:00
qian 318bc0079f fix(relay):修复劣质中转转接入后claude code工具中出现报错的问题 2026-08-02 13:00:06 +08:00
qian 8a5ef91625 feat(relay):deepseek新增response端点 2026-08-02 11:52:28 +08:00
qian a24f9d29db feat(log):添加日志硬删除按钮,防止频繁错误影响数据库 2026-08-02 00:56:03 +08:00
qian 3a6a71b9e7 chore:调整管理后台菜单项位置 2026-08-02 00:45:05 +08:00
qian 7f4109302b improve(ui):优化管理后台UI 2026-08-02 00:40:37 +08:00
qian 14b9bbd4e9 fix(ui):修复管理端的页面显示问题 2026-08-01 23:55:27 +08:00
qian ec4a4682e5 improve(ui):优化租户端表格分页组件 2026-08-01 23:37:44 +08:00
qian 657c452ea1 improve(channel):优化渠道编辑功能 2026-08-01 23:19:37 +08:00
qian 4bf835394d Merge branch 'main' into dev
# Conflicts:
#	web/admin/src/views/ai/ChannelDetailPage.vue
2026-08-01 23:03:23 +08:00
qian fae0d1efba chore:渠道倒序排序 2026-08-01 23:02:30 +08:00
qian 56b4bcdc32 chore:移除过程文件 2026-08-01 23:02:19 +08:00
Qian 2ef5a40c26 新的调度方式 (#14)
重构模型渠道调度系统
2026-08-01 22:55:08 +08:00
chengqian f4debdfab2 fix(channel):修复渠道无法修改协议 2026-07-31 15:19:01 +08:00
chengqian 6ff5c6e949 fix(web): 防止页面异常阻塞路由切换 2026-07-30 14:40:10 +08:00
chengqian 8a8a96a012 fix(admin): 修复错误日志列表返回空元素 2026-07-30 14:26:34 +08:00
chengqian 49eb8d07cc fix(web): 统一请求失败提示和刷新队列处理 2026-07-30 14:10:04 +08:00
chengqian 25c9de0465 feat(tenant): 钱包页新增余额预警阈值设置入口
租户前端原本没有修改预警阈值的入口(后端 PUT /wallet/warning-threshold 已存在但无调用方)。owner/admin 只能找管理员代设,无法自助开关告警。

- 余额卡新增「余额预警」行:启用(>0)显示 $X.XX,关闭(=0)显示「已关闭」,点击打开编辑
- 编辑 modal:金额输入(校验 ≥0) + 关闭/$1/$5/$10 快捷项,保存调 PUT /tenant/wallet/warning-threshold
- 成功就地更新显示并关弹窗,失败由 request 拦截器统一报错
- 语义与后端统一的「0 = 关闭预警」对齐;钱包页本身要求 owner/admin,入口天然仅 owner/admin 可用
2026-07-30 10:17:58 +08:00
chengqian 245cedad47 fix(wallet): 修复预警阈值 nil 指针导致 /api/tenant/wallet 崩溃
warning_threshold 列可空,注册(Register)/后台建租户(CreateTenant)两条建钱包路径曾漏设该字段,导致这些租户的钱包阈值为 NULL。Wallet() 直接解引用 *w.WarningThreshold,owner/admin 访问 /api/tenant/wallet 时 panic recovered 500。

统一语义:warning_threshold = 0 表示关闭预警(也是新建默认值),正数 = 预警线,与告警引擎 alert.go「阈值 <= 0 视为未启用」一致。

- Wallet() 增加 nil 守卫,NULL 行按 0 返回,消除解引用崩溃
- 所有建钱包路径(懒初始化/Register/CreateTenant/EnsureWallet)显式写入 0,不再产生 NULL
- 管理后台阈值显示:>0 显示金额,否则显示「关闭」
2026-07-30 10:17:55 +08:00
chengqian d11a0b7e0a Merge remote-tracking branch 'origin/dev' into dev 2026-07-28 14:39:23 +08:00
chengqian 906662c7c5 chore:更换logo图片 2026-07-28 11:32:57 +08:00
martin bc2bbe747f chore:移除无用文件 2026-07-27 22:59:33 +08:00
Qian 274293462d Merge pull request #13 from qianfree/feat/ui_water
修复大量问题
2026-07-27 22:56:20 +08:00
martin c513d5730f refactor:重命名数据库变更文件 2026-07-27 22:53:45 +08:00
martin 82f7f56cba improve:调整配色方案 2026-07-27 22:44:08 +08:00
martin 90f55e65b1 improve:优化租户端页面 2026-07-27 22:34:38 +08:00
martin 5dbebbc4f2 improve:优化侧边栏菜单 2026-07-27 21:54:32 +08:00
chengqian 8372369ddd feat:优化看板 2026-07-27 21:51:51 +08:00
chengqian 7a2c9abd2b feat:表格优化 2026-07-27 21:21:34 +08:00
chengqian 065a2ee7e8 feat:表格优化 2026-07-27 18:56:11 +08:00
chengqian ba88fb6bf0 feat:表格优化 2026-07-27 18:30:33 +08:00
chengqian d14e5b00e1 fix:修复租户停用后令牌还能用的bug 2026-07-27 17:45:47 +08:00
chengqian 17d8fadad7 fix:修复异步图像可能导致的panic异常 2026-07-27 17:11:29 +08:00
chengqian 13628293ad refactor:重构租户端UI风格 2026-07-27 16:20:12 +08:00
chengqian ddade6ec54 fix:修复登录状态经常失效的问题 2026-07-27 14:03:58 +08:00
martin 92c2cc033b refactor: deduplicate task and security logic 2026-07-26 14:07:53 +08:00
martin 35a20cffeb fix: 修复 P1-Resource 资源/SSRF 类问题
- P1-R1 rehostFromURL SSRF:syncImageDownloadClient 改用 SSRF 加固的
  DialContext,dial 阶段拒绝 loopback/link-local/私网/multicast/unspecified,
  用已校验 IP 直拨号杜绝 DNS rebinding;入口加 validateSSRFURL 预检(仅
  http/https、字面量内网 IP 直接拒)。新增 isForbiddenIP/validateSSRFURL 单测。
- P1-R2 payment LockOrder 竞态:sync.Map + 手工引用计数改为 256 分片
  sharded mutex(FNV-1a),同订单恒命中同分片,无引用计数/Delete,内存恒定。
  公共 API 不变;同步更新 callback_test.go,-race 通过。
- P1-R4 OAuth 无超时:新增 oauthHTTPClient(10s 超时),替换全部 5 处
  http.DefaultClient.Do / http.Post 出站请求。
- P1-R5 告警派发 goroutine 无上限:新增 goDispatchAlertNotifications,
  阻塞式信号量(容量 16)封顶并发 + WithTimeout(30s) 兜底,不丢通知仅排队。
2026-07-26 12:54:41 +08:00
martin 4cc6ff307e fix: 修复 P1 事务边界问题
- P1-T1 SetTenantGroups/SetGroupModels 删-插包进事务,避免插入失败清空关联
- P1-T2 ApiKeyUpdate 主表与 scope 更新同事务,缓存失效移到提交后
- P1-T3 InvalidateWallet 移到 FulfillOrder 事务提交后,避免缓存污染窗口
- P1-T4 handleDeletionRequest 跨 4 表删改包进事务,杜绝中间态
- P1-T5 subscribePlanTx 加事务级 advisory lock,串行化同租户订阅
2026-07-26 12:41:28 +08:00
martin a7177cc6f5 fix: 修复 P2 可维护性与性能问题
- P2-3 ExportModelsJson N+1 改批量 WhereIn 查询定价
- P2-4 dashboard 聚合 Count 不再静默吞错,改 Warning 日志
- P2-5 promo_code/notification 的 map[string]any 返回值改 struct
- P2-6 CleanExpiredPreDeducts 改先 claim 再 release,避免多实例重复释放
- P2-7 trackPreDeduct 已由 P1-C 同步化+回滚覆盖,文档注明
- P2-8 支付金额容差比较改 decimal,消除 0.01 边界二进制误差
- P2-9 GetEnabledChannels 加 60s 进程内缓存,配置变更主动失效
- P2-10 OAuth callback 路径限定 provider 白名单 (github/google)
- P2-12 evaluateCondition eq 改浮点容差比较
- P2-13 api_metrics 加平台域调用方校验,防租户域误用泄露
- P2-14 删除 listProjectApiKeys 死代码
2026-07-26 12:31:41 +08:00
martin a6ed67d841 fix: 完成 P3 细节优化项
依据《代码分析结果.md》P3 章节,逐条修复 20 项细节问题:

正确性修复:
- P3-1 锁定剩余分钟改用 math.Ceil,避免「0.9 分钟」显示为「0 分钟」
- P3-12 移除 CheckAndUpgradeLevel 中恒真的 hasUpdate 标志
- P3-14 移除 CheckTrialExpiry 中恒真表达式(count > 0 || true)调试残留,改用 RowsAffected
- P3-2 成员不存在统一返回 NewNotFoundError(404),与其它方法语义一致

安全加固:
- P3-6 X-Request-Id 加格式校验 ^[A-Za-z0-9-]{1,64}$,防日志注入
- P3-7 新增公共 EscapeLikePattern,转义 admin LIKE 搜索的 %/_ 通配符
- P3-8 Encrypt 输出加 v1: 版本前缀,Decrypt 兼容无前缀历史密文
- P3-9 turnstile 响应体读取加 64KB 上限,防内存耗尽
- P3-11 backup codes 熵由 48-bit 提升到 64-bit
- P3-15 recordAudit 对 multipart/二进制体跳过 Unmarshal 与原文落库
- P3-17 错误日志按 Content-Type 跳过 multipart/二进制体读取
- P3-16 HandleRealtime 加 panic recover 与连接生命周期日志

可维护性/一致性:
- P3-3 oauth.go 时间格式统一为 time.RFC3339
- P3-5 MsgSuccess 统一为 ok,response.go 改用常量引用
- P3-4 错误码分段策略加注释,说明空洞与跳跃的成因
- P3-13 ModelMultiplier 占位语义加注释(计费公式设计位 + 快照列)
- P3-19 抽取 registerCronJobs,主启动流程清爽

重构:
- P3-18 删除死代码 BuildBillingSummary/SummaryParams(仅测试引用),保留共用 helper
- P3-20 抽取 relay.InvalidateMemberModelScopeCache 单一失效入口,
  消除三处 member_model 前缀字面量重复(原为有意跨包失效,原建议改名会破坏)

经核实保留 + 文档化:
- P3-10 TOTP 暂保留 SHA-1:totp.Validate 硬编码 SHA-1 且存储不保存算法元信息,
  直接切 SHA-256 会导致校验恒失败,需配合 schema 改动,超出 P3 范围
2026-07-26 12:16:33 +08:00
martin b7e71c685f fix: 修复并发与一致性问题 2026-07-26 11:45:03 +08:00
martin 0f87322f49 fix: 修复 P1 功能正确性问题 2026-07-26 11:03:22 +08:00
martin 6665b1e113 refactor:重构渠道调度功能 2026-07-25 20:48:15 +08:00
martin 75bc4038db fix:修复文件管理可能导致的越权操作 2026-07-25 20:10:35 +08:00
martin 48c72f1eb4 chore:抽取公共方法降低重复代码 2026-07-25 19:59:28 +08:00
martin e9b5592666 fix:修复租户数据导出功能 2026-07-25 19:57:50 +08:00
martin c35136bcf1 chore:添加新的配置要求 2026-07-25 19:51:13 +08:00
qian 9374c64bad feat:用户多次输错密码被锁后可以由管理员解锁 2026-07-24 00:18:29 +08:00