Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
2271 commits
Select commit Hold shift + click to select a range
f9ce6a0
feat:将评测集JSONL传递给SFTBridge辅助checkpoint择优
Jun 11, 2026
bced22e
fix(ui): 为精炼数据卡片的操作按钮添加水平内边距
Jun 12, 2026
fbeaba2
合并分支: [FIX] API文件库 查看原文 ('hxy30010-update-lianapp-2' 到 'develop-1.4.0')
Jun 12, 2026
5f6c069
合并分支: fix: create folder-type dataset error ('fix/2026060500201' 到 'd…
Jun 15, 2026
ea9caa3
合并分支: fix: 2026061100093修复评测审计指标 ('fix-2026061100093' 到 'develop-1.4.0')
Jun 15, 2026
c5d9d60
合并分支: feat(train):embedding展示hit@20、将评测集传递给SFTBridge选择ckpt ('12612-fe…
Jun 15, 2026
aa74f60
feat: clear collaborators when private model becomes public
Jun 15, 2026
7fea7e8
合并分支: feat: clear collaborators when private model becomes public ('f…
Jun 15, 2026
6f7822d
合并分支: feat: 重构知识库详情内的检索测试 Tab ('14864/test-refact' 到 'develop-1.4.0')
Jun 15, 2026
2534be5
feat: 新增支持用户导入
hellostronger Jun 10, 2026
06eeba2
[FIX]dataset_datas validation failed: q: Path is required
Jun 15, 2026
9a7cfcd
合并分支: feat: 新增支持用户导入 ('bjq-1.4.0-backend-new' 到 'develop-1.4.0')
Jun 15, 2026
d2dc02d
合并分支: [FIX] dataset_datas validation failed: q: Path is required ('hx…
Jun 15, 2026
1444407
feat(dataset): 添加知识处理配置(保留页眉页脚、附录、印章识别、统计图转表格)
Jun 15, 2026
7072d76
feat: Agent 类型应用支持导出为 Skill
Jun 15, 2026
4e77c82
[FIX]dataset_datas validation failed: q: Path is required 类型检查报错
Jun 15, 2026
37f9504
feat: 添加直连数据库开关配置,动态显示创建知识库时的数据库类型选项
Jun 15, 2026
19d19a4
合并分支: [FIX] dataset_datas validation failed: q: Path is required 类型检查…
Jun 15, 2026
a25eae0
fix: add chatAgent to go_to_chat menu and use AppTypeList for consist…
Jun 15, 2026
38a2311
合并分支: feat: Agent 类型应用支持导出为 Skill ('feat/agent-export-skill' 到 'devel…
Jun 15, 2026
a668844
feat: implicit model auth via app/dataset context and revocation dete…
Jun 15, 2026
10a09cf
合并分支: feat: implicit model auth via app/dataset context and revocatio…
Jun 15, 2026
6b5b914
合并分支: fix(ui): 为知识库分块数据卡片的操作按钮添加水平内边距 ('56800/update-style-3' 到 'deve…
Jun 15, 2026
94fccfd
合并分支: feat: 添加直连数据库开关配置,动态显示创建知识库时的数据库类型选项 ('56800/feat-direct' 到 'de…
Jun 15, 2026
c454802
fix: 修复 getTeamPlanStatus 请求去重失效问题
hellostronger Jun 15, 2026
d9f9b23
fix: 补全 embedding/rerank 训练任务 schema 中缺失的 evalDatasetFilePath 字段
Jun 15, 2026
3d7a964
合并分支: fix: 修复 getTeamPlanStatus 请求去重失效问题 ('bjq-1.4.0-backend-new' 到 '…
Jun 15, 2026
0f6bc98
fix: 2026061000344修复直连数据库无法测试使用问题
Jun 15, 2026
025b973
合并分支: fix: 2026061000344修复直连数据库无法测试使用问题 ('fix-2026061000344' 到 'devel…
Jun 15, 2026
6e28133
add reference check when update model permission
Jun 15, 2026
a9e27ef
合并分支: fix: 补全 embedding/rerank 训练任务 schema 中新增的 evalDatasetFilePath 字…
Jun 16, 2026
a36a68e
fix: 补全 EmbeddingDiTingDetailedResults 缺失的 embed_top20_* 字段
Jun 16, 2026
8d72cd1
合并分支: add reference check when update model permission ('fix/update-m…
Jun 16, 2026
56dc60b
feat: 超长用户输入自动压缩
Jun 16, 2026
55fdf04
chore: 更新版本号至 V1.4.0_P
Jun 16, 2026
ab4c828
fix: 调整直连数据库知识库的检索测试显示逻辑
Jun 16, 2026
21ab419
fix:json config import with pre-handle of removeUnauthModels
Jun 16, 2026
dc2125d
合并分支: fix:json config import with pre-handle of removeUnauthModels ('…
Jun 16, 2026
6bef2c7
fix: create app with model permission check
Jun 16, 2026
a997b32
合并分支: fix: create app with model permission check ('fix/2026061000291…
Jun 16, 2026
609e831
合并分支: chore: 更新版本号至 V1.4.0_P ('14864/update-version' 到 'develop-1.4.0')
Jun 16, 2026
a6daeef
合并分支: fix: 调整直连数据库知识库的检索测试显示逻辑 ('14864/test-database' 到 'develop-1.4.0')
Jun 16, 2026
badd5d7
feat(ui): 改进AI回复框样式并增强工作流Copilot交互体验
Jun 16, 2026
f0de175
合并分支: feat(ui): 改进AI回复框样式并增强工作流Copilot交互体验 ('14864/copilot-update' 到 …
Jun 16, 2026
751799f
fix(2026060400139): 优化“协助生成Skill”文案为“智能生成 Skill”
Jun 16, 2026
6eb8c9b
feat(api): 将数据集数据列表单次最大获取数量提升至100
Jun 16, 2026
a93bf2b
fix(2026060400087): 优化用量统计图表 tooltip 和 legend 的视觉展示
Jun 16, 2026
21071de
合并分支: fix(2026060400139): 优化“协助生成Skill”文案为“智能生成 Skill” ('14864/202606…
Jun 16, 2026
ea9d243
fix(2026060900275): 在添加模型表单数据中标记 isShared 为 true
Jun 16, 2026
bac016d
[UPDATE]Pro增加运维
Jun 16, 2026
92ec33d
合并分支: feat(api): 将数据集数据列表单次最大获取数量提升至100 ('14864/change-max' 到 'develo…
Jun 16, 2026
5c0ed97
合并分支: fix(2026060400087): 优化用量统计图表 tooltip 和 legend 的视觉展示 ('14864/202…
Jun 16, 2026
f95f5dc
合并分支: fix(2026060900275): 在添加模型表单数据中标记 isShared 为 true ('14864/202606…
Jun 16, 2026
2c94b23
fix(2026060800265): 严格化子导航栏路径激活匹配逻辑
Jun 16, 2026
cba2dc3
feat(ui): 区分普通文件选择与API文件库同步选择,更新相关i18n文本
Jun 16, 2026
36c49e9
fix(2026061000132): 在集合导航操作中支持权限作用域设置
Jun 16, 2026
cbe6c86
合并分支: fix(2026060800265): 严格化子导航栏路径激活匹配逻辑 ('14864/2026060800265' 到 'd…
Jun 16, 2026
cf5125f
feat(ui): 优化 Dashboard 页面滚动行为,由各页面自行管理
Jun 16, 2026
2977424
合并分支: feat(ui): 区分普通文件选择与API文件库同步选择,更新相关i18n文本 ('56800/update-select'…
Jun 16, 2026
8c0091f
合并分支: fix(2026061000132): 在集合导航操作中支持权限作用域设置 ('14864/2026061000132' 到 …
Jun 16, 2026
6956a18
feat(ai): 为千问模型自动注入内置指令并移除手动配置
Jun 16, 2026
5e12808
合并分支: [UPDATE] Pro增加运维 ('hxy30010-140-add-ssh' 到 'develop-1.4.0')
Jun 16, 2026
e30c53c
feat: restrict default models to public and add collaborator referenc…
Jun 16, 2026
72f91f1
合并分支: fix(ui): 防止数据集详情页布局溢出 ('56800/update-dataset-scroll' 到 'develop…
Jun 16, 2026
568f8e7
fix(2026052300017): 修复团队应用列表中应用名称过长时卡片宽度问题
Jun 16, 2026
d606b75
合并分支: feat: restrict default models to public and add collaborator re…
Jun 16, 2026
313d259
fix(2026060900239): 调整模型参数配置弹窗中表单项宽度与布局
Jun 16, 2026
aa6d0e0
合并分支: fix(2026052300017): 修复团队应用列表名称超长时未显示省略号的问题 ('56800/fix-20260523…
Jun 16, 2026
129de5b
合并分支: feat: 为千问模型自动注入内置指令并移除手动配置 ('56800/feat-instruction' 到 'develop…
Jun 16, 2026
3c0a167
合并分支: fix(2026060900239): 调整模型参数配置弹窗中表单项宽度与布局 ('56800/fix-20260609002…
Jun 16, 2026
7ca532a
fix: agentSkills zip procedure memory leak and OOM prevention
Jun 16, 2026
f5c6c44
合并分支: feat: 超长用户输入自动压缩 ('feat/input-auto-compress-20260616' 到 'develo…
Jun 16, 2026
e29cf32
合并分支: fix: agentSkills zip procedure memory leak and OOM prevention (…
Jun 17, 2026
2f89021
feat(agent): unify skill display — merge tool & skill items into enha…
Jun 17, 2026
8b4c60f
fix: 调整工作流节点模板弹窗位置及创建应用弹窗描述框高度
Jun 17, 2026
88162e6
合并分支: feat(agent): unify skill display — merge tool & skill items int…
Jun 17, 2026
36af987
合并分支: fix: (train) 补全 EmbeddingDiTingDetailedResults 缺失的 embed_top20_…
Jun 17, 2026
c2cf8e8
fix: 大文件分片超时时间从默认10分钟提高到60分钟
Jun 17, 2026
7384abf
合并分支: fix: 调整工作流节点模板弹窗位置及创建应用弹窗描述框高度 ('14864/copilot-limit' 到 'develo…
Jun 17, 2026
fbb3f26
fix(2026061500151): 统一页面标题样式
Jun 17, 2026
8382227
合并分支: fix(2026061500151): 统一页面标题字体样式,调整字号与字重 ('56800/fix-202606150015…
Jun 17, 2026
518b0b9
fix(2026061700099): 切换分页时自动滚动表格容器至顶部
Jun 17, 2026
c7feaa4
fix(2026051900220): 数据集引用结果按 collectionId 去重,同一文件仅保留得分最高分块
Jun 17, 2026
d44f06a
fix(2026061500179): 统一知识库、应用、skill卡片样式
Jun 17, 2026
4c156c8
合并分支: fix(2026061500179): 统一知识库、应用、skill卡片样式 ('56800/fix-202606150017…
Jun 17, 2026
53c04ef
fix(2026061700256): 统一模型日志与看板筛选器样式
Jun 17, 2026
bcd1960
fix: use configured embeddingModelId for dataset search
Jun 17, 2026
5976d01
合并分支: fix(2026061700256): 统一模型日志与看板筛选器样式 ('14864/2026061700256' 到 'de…
Jun 17, 2026
dd34df1
fix(agent): add runningTime display for piAgent tool calls in WholeRe…
Jun 17, 2026
767a3a3
合并分支: fix(2026061700099): 切换分页时自动滚动表格容器至顶部 ('14864/2026061700099' 到 '…
Jun 17, 2026
0db8854
fix(ui): 调整数据集详情导航栏左侧区域宽度
Jun 17, 2026
905831d
合并分支: fix(agent): add runningTime display for piAgent tool calls in W…
Jun 17, 2026
e5bd3af
fix: 2026061700436修复文件数据库检索测试报错
sxf-xiongtao Jun 17, 2026
41b39d4
合并分支: fix: 2026061700436修复文件数据库检索测试报错 ('fix-2026061700436' 到 'develop…
Jun 17, 2026
1850b7e
[UPDATE]放出 问题改写 按钮
Jun 17, 2026
f1a85fc
合并分支: fix(ui): 调整数据集详情导航栏左侧区域宽度 ('56800/update-sty' 到 'develop-1.4.0')
Jun 18, 2026
a99e8b9
feat(dev): 添加本地开发代理脚本,支持通过中间代理转发 API 请求
Jun 18, 2026
67ff557
[UPDATE]AI 对话节点,计算逻辑改为:计算首 token 响应时间
Jun 17, 2026
0fbbf8a
合并分支: [UPDATE] 放出 问题改写 按钮 ('hxy30010-140-product-1113627' 到 'develop-…
Jun 18, 2026
950097b
合并分支: [UPDATE] AI 对话节点,计算逻辑改为:计算首 token 响应时间 ('hxy30010-140-product-1…
Jun 18, 2026
bcba260
fix(i18n): 同步训练结果指标词条 - rerank 移除 Hit@5,embedding 改为 Hit@20/MRR@20
Jun 18, 2026
d9dc983
合并分支: feat(dev): 添加本地开发代理脚本,支持通过中间代理转发 API 请求 ('14864/dev-proxy' 到 'd…
Jun 18, 2026
22a02d6
[FIX]添加重名tag应该报错
Jun 18, 2026
3e38cc0
合并分支: fix: use configured embeddingModelId for dataset search ('fix/2…
Jun 18, 2026
19cd2b0
合并分支: [FIX] 添加重名tag应该报错 ('hxy30010-140-fix-2026061700066' 到 'develop-…
Jun 18, 2026
896d5cc
合并分支: feat(dataset): 添加知识处理配置(保留页眉页脚、附录、印章识别、统计图转表格) ('56800/feat-con…
Jun 18, 2026
a192847
合并分支: fix(2026051900220): 数据集引用结果按 collectionId 去重,同一文件仅保留得分最高分块 ('14…
Jun 18, 2026
77eee91
fix: 2026052700138修复agent沙盒读取用户上传文件HTTPS证书验证失败
Jun 18, 2026
053d9b6
fix(2026061700251): 提取模型引用弹窗为独立组件并统一使用
Jun 18, 2026
a7231c5
fix(2026060900283): 统一模型列表与配置表中价格展示,支持阶梯价格
Jun 18, 2026
0210e87
合并分支: fix(2026061700251): 提取模型引用弹窗为独立组件并统一样式 ('56800/fix-202606170025…
Jun 18, 2026
42113c6
合并分支: fix(2026060900283): 统一模型列表与配置表中价格展示,支持阶梯价格 ('56800/fix-20260609…
Jun 18, 2026
cf6d38c
fix: 优化模型ID校验提示,显示模型名称而非ID
Jun 18, 2026
3d6f8f6
fix: 2026061000264修复过滤软删除的知识库内容
sxf-xiongtao Jun 18, 2026
ed55362
合并分支: fix: 2026052700138修复agent沙盒读取用户上传文件HTTPS证书验证失败 ('fix-2026052700…
Jun 18, 2026
c941920
合并分支: fix: 优化模型ID校验提示,显示模型名称而非ID ('56800/fix-model-id' 到 'develop-1.4…
Jun 18, 2026
01c761f
feat(dataset): 将知识处理配置参数传递到 customParse 服务
Jun 16, 2026
393bf47
fix(dataset): 修复知识库更新接口未持久化解析配置字段(keep_header_footer/keep_appendix/im…
Jun 18, 2026
d615a17
合并分支: Add mineru parse config ('72536-add-parse-config' 到 'develop-1.…
Jun 18, 2026
1c3a89a
feat(dataset): 编辑知识库时添加知识处理配置变更提示
Jun 18, 2026
9ffaac0
合并分支: fix: 2026061000264修复过滤软删除的知识库内容 ('fix-2026061000264' 到 'develop…
Jun 18, 2026
7379583
合并分支: feat(dataset): 编辑知识库时添加知识处理配置变更提示 ('56800/feat-tip' 到 'develop-…
Jun 18, 2026
665d270
feat: 修复接口文档提出的参数校验问题
hellostronger Jun 22, 2026
da1392d
feat(kb): 添加 CodeGraph 集成配置与知识库文档生成
Jun 22, 2026
0de6bc7
合并分支: feat: 修复接口文档提出的参数校验问题 ('bjq-1.4.0-backend-new' 到 'develop-1.4.0')
Jun 22, 2026
5e38537
合并分支: feat(kb): 添加 CodeGraph 集成配置与知识库文档生成 ('56800/feat-kb' 到 'develop…
Jun 22, 2026
c9375ee
feat(agent): implement atomic semaphore-based sandbox count limit
Jun 18, 2026
ae20384
修改编辑知识库模型词条edit_model_warning
sxf-xiongtao Jun 22, 2026
cdb1837
fix(DateTimePicker): 优化日期时间选择器弹窗定位与点击外部关闭逻辑
Jun 22, 2026
0c85668
fix: 2026062200144修复创建mcp权限
sxf-xiongtao Jun 22, 2026
98309a7
合并分支: fix(DateTimePicker): 优化日期时间选择器弹窗定位与点击外部关闭逻辑 ('14864/datime-posi…
Jun 22, 2026
bbdab4b
合并分支: fix(chunk:2026061200277): 大文件分片超时时间从默认10分钟提高到60分钟 ('12612-fix-l…
Jun 22, 2026
21581fc
合并分支: fix(train): 同步训练结果前端展示的指标词条 - rerank 移除 Hit@5,embedding 改为 Hit@…
Jun 22, 2026
2532b50
合并分支: fix: 2026062200144修复创建mcp权限 ('fix-2026062200144' 到 'develop-1.4…
Jun 22, 2026
f959eba
合并分支: [UPDATE] 修改编辑知识库模型词条edit_model_warning ('fix-edit-ds-model' 到 '…
Jun 22, 2026
e61e324
合并分支: feat(agent): implement atomic semaphore-based sandbox count lim…
Jun 22, 2026
fe8474b
fix(ui): 修复表格内可聚焦文本行高不一致导致的对齐问题
Jun 22, 2026
c8c2fed
fix(2026062200126): 添加密码可见性切换功能
Jun 22, 2026
b08a1ab
fix: 修复工作流copilot文件上传设置提示
Jun 22, 2026
bfde800
[UPDATE]更新增量英文词条
sxf-xiongtao Jun 22, 2026
5cdb49c
合并分支: [UPDATE] 更新增量英文词条 ('add-i18n' 到 'develop-1.4.0')
Jun 23, 2026
6899d14
合并分支: fix(ui): 修复表格内可聚焦文本行高不一致导致的对齐问题 ('56800/fix-ui2' 到 'develop-1.4…
Jun 23, 2026
02062c4
合并分支: fix(2026062200126): 添加密码可见性切换功能 ('56800/fix-2026062200126' 到 'd…
Jun 23, 2026
9bca6b0
合并分支: fix: 修复工作流copilot文件上传设置提示 ('64146-vibe-workflow' 到 'develop-1.4…
Jun 23, 2026
c67a726
fix(2026061700396): 批量权限变更后刷新模型列表数据
Jun 23, 2026
c602c9c
合并分支: fix(2026061700396): 批量权限变更后刷新模型列表数据 ('14864/2026061700396' 到 'd…
Jun 23, 2026
31fbd14
fix(2026062200275): 团队应用列表支持滚动加载下一页
Jun 23, 2026
8de1892
合并分支: fix(2026062200275): 团队应用列表支持滚动加载下一页 ('fix/2026062200275-scroll-…
Jun 23, 2026
6deeda8
fix(ui): 统一账户页面标题文字颜色为 myGray.900 主题色
Jun 23, 2026
07685a9
feat: 修复直连数据库生成sql模型无法配置、问题改写没有生效
hellostronger Jun 23, 2026
9ed439a
fix(2026062200096): 工作流类型应用才显示导出配置菜单项
Jun 23, 2026
be54d1c
fix(MySelect): 重构下拉选择组件,使用 Portal 渲染并优化定位与交互逻辑
Jun 23, 2026
9f1dfdd
fix: 修复 chunk timeout 配置问题: 从10分钟超时改为60分钟超时
Jun 23, 2026
ea79f52
合并分支: fix(ui): 统一账户页面标题文字颜色为 myGray.900 主题色 ('56800/fix-2026061500151…
Jun 23, 2026
cb5cca5
合并分支: fix(2026062200096): 工作流类型应用才显示导出配置菜单项 ('56800/fix-2026062200096…
Jun 23, 2026
9fc7f1b
合并分支: fix: 修复 chunk timeout 配置问题: 从10分钟超时改为60分钟超时 ('12612-fix-chunk-t…
Jun 23, 2026
04b5a8b
feat: 修复同义词刷新向量,知识库文件状态显示异常问题
hellostronger Jun 23, 2026
d8c60bf
fix(ui): 优化 MyMenu 和 MyPopover 组件,支持关闭模糊与 Portal 控制
Jun 23, 2026
98600b5
fix: 2026062200144修改mcp创建服务权限错误
sxf-xiongtao Jun 23, 2026
cffe025
feat(dataset): 将知识处理配置参数传递到 customParse 服务
Jun 16, 2026
e41a8cd
合并分支: fix(MySelect): 重构下拉选择组件,使用 Portal 渲染并优化定位与交互逻辑 ('14864/select-p…
Jun 23, 2026
9ea2e40
合并分支: fix(ui): 优化 MyMenu 和 MyPopover 组件,支持关闭模糊与 Portal 控制 ('14864/men…
Jun 23, 2026
98f4878
feat: import user add column title check
hellostronger Jun 23, 2026
fecb8ac
合并分支: feat(dataset): 将知识处理配置参数传递到 customParse 服务 ('72536-add-parse-co…
Jun 23, 2026
2768ded
合并分支: fix: 2026062200144修改mcp创建服务权限错误 ('fix-2026062200144' 到 'develop…
Jun 23, 2026
a0626a6
fix: 数据集协作者更新接口增加入参校验,防止传入非本团队成员的ID
hellostronger Jun 22, 2026
1d2d117
fix: sandbox cron stop failure due to uninitialized provider
Jun 23, 2026
7946351
fix(MySelect): 优化下拉菜单定位逻辑,支持向上展开并避免溢出视口
Jun 23, 2026
0664446
feat: 协助者返回username
sxf-xiongtao Jun 23, 2026
e2a78db
合并分支: fix: 修复 cron 清理沙箱时 provider 未初始化导致死循环 ('fix/sandbox-cron-stop-u…
Jun 23, 2026
a4c76f7
合并分支: feat: 修复直连数据库生成sql模型无法配置、问题改写没有生效 ('bjq-fix-0623' 到 'develop-1.…
Jun 23, 2026
7306e75
合并分支: fix: 数据集协作者更新接口增加入参校验,防止传入非本团队成员的ID ('bjq-1.4.0-fix-api-check-n…
Jun 23, 2026
46c35c0
合并分支: feat: 协助者信息接口返回username ('feat-collaborator-add-username' 到 'de…
Jun 23, 2026
4c80be0
合并分支: feat: 修复同义词刷新向量,知识库文件状态显示异常问题 ('bjq-fix-Synonym-status' 到 'deve…
Jun 23, 2026
b819aac
fix: 2026061700085支持wmf格式图片转换为png
sxf-xiongtao Jun 23, 2026
c848de5
合并分支: fix(MySelect): 优化下拉菜单定位逻辑,支持向上展开并避免溢出视口 ('14864/select-position…
Jun 24, 2026
af68bc7
fix(2026062400034): 批量权限变更冲突时显示模型引用详情
Jun 24, 2026
60459f9
feat: 修复同义词和切换向量,索引中的进度数值显示问题
hellostronger Jun 24, 2026
4f0578b
合并分支: fix(2026062400034): 批量权限变更冲突时显示模型引用详情 ('56800/fix-2026062400034…
Jun 24, 2026
1aec742
fix(ui): 将编辑模式知识处理提示移至折叠面板内部
Jun 24, 2026
eb44b66
fix: prevent regex stack overflow on large base64 images in markdown …
Jun 24, 2026
a579a60
fix(ui): 统一页面内边距为4,优化布局一致性
Jun 24, 2026
6003f36
合并分支: fix(ui): 将编辑模式知识处理提示移至折叠面板内部 ('56800/fix-tip' 到 'develop-1.4.0')
Jun 24, 2026
185a12c
fix(2026052200248): 优化数据库列表和集合卡片表格的列宽与水平滚动
Jun 24, 2026
43185b4
合并分支: fix(ui): 统一页面内边距为4,优化布局一致性 ('56800/fix-ui-3' 到 'develop-1.4.0')
Jun 24, 2026
dc48eb4
fix: sandbox cron stop still skipping ensureRunning due to default Cr…
Jun 24, 2026
2a627f5
feat: 导入用户行数太大报错
hellostronger Jun 24, 2026
5a8954f
fix(ui): 模型选择列表将 SangforAICP 提供商模型置顶
Jun 24, 2026
3cc17e8
合并分支: fix: prevent regex stack overflow on large base64 images in mar…
Jun 24, 2026
a0da93f
feat: 补充缺失i8nkey
hellostronger Jun 24, 2026
e8cae96
合并分支: feat: 修复同义词和切换向量,索引中的进度数值显示问题 ('bjq-fix-Synonym-status' 到 'deve…
Jun 24, 2026
3fd1284
合并分支: feat: 补充缺失i8nkey ('bjq-fix-i18n' 到 'develop-1.4.0')
Jun 24, 2026
12268f6
合并分支: fix: sandbox cron stop 因默认 Creating 状态跳过 ensureRunning ('fix/sa…
Jun 24, 2026
11bfbed
合并分支: fix(ui): 模型选择列表将 SangforAICP 提供商模型置顶 ('14864/priority-aicp' 到 '…
Jun 24, 2026
6b05630
Revert: textSplitter回退到合并前的版本,移除装箱合并逻辑
Jun 25, 2026
0695d8e
合并分支: fix(2026052200248): 优化知识库集合列表表格列宽 ('56800/fix-2026052200248' 到 …
Jun 25, 2026
94eca5c
fix: review - 修复mergedChunks空数组保护和strIsHtmlTable多表格检查
Jun 25, 2026
9a81fa3
Merge branch 'develop-1.4.0' of mq.code.sangfor.org:AI-PaaS/FastGPT i…
Jun 25, 2026
2a8e4d4
fix: 修复md5比较过滤删除的collection
Jun 25, 2026
7a1b64b
fix(2026062400175): 修复 QuestionTip 组件 无法触发点击事件问题
Jun 25, 2026
2edc9af
fix: 修复md5比较过滤删除的collection
Jun 25, 2026
72f7a66
合并分支: fix: 修复md5比较过滤删除的collection ('fix-md5-dup' 到 'develop-1.4.0')
Jun 25, 2026
36340ca
合并分支: fix(2026062400175): 修复 QuestionTip 组件 无法触发点击事件问题 ('56800/fix-20…
Jun 25, 2026
e5c836e
合并分支: fix: textSplitter回退到合并前版本,移除装箱合并解决chunk超限 ('fix/textsplitter-re…
Jun 25, 2026
4348e35
Merge branch 'develop-1.4.0' of mq.code.sangfor.org:AI-PaaS/FastGPT i…
Jun 25, 2026
f68ba7d
[AI-COMMIT][FIX] 修复 piAgent Token 消耗在数据看板始终为 0 的问题
Jun 25, 2026
1ff23b5
合并分支: [AI-COMMIT] [FIX] 修复 piAgent Token 消耗在数据看板始终为 0 的问题 ('fix-20260…
Jun 26, 2026
fe66806
fix: resolve WriteConflict in large file parse via per-batch transact…
Jun 25, 2026
a9f6bd0
合并分支: fix: resolve WriteConflict in large file parse via per-batch tr…
Jun 26, 2026
8ea362a
Revert "fix: 2026061700085支持wmf格式图片转换为png"
Jun 26, 2026
5ccd870
[AI-COMMIT][FIX] 修复 Home 首页文件上传因 fileSelectConfig 参数触发 Write 权限检查导致普通…
Jun 26, 2026
9a5e08b
fix(2026061500082): 增加训练任务错误计数及部分错误状态展示
Jun 26, 2026
7caa373
合并分支: [FIX] 修复首页普通用户不能上传文件 ('fix-home-file' 到 'develop-1.4.0')
Jun 26, 2026
6f9556c
feat: 修复同义词刷新状态不完全问题
hellostronger Jun 25, 2026
abaa34a
合并分支: feat: 修复同义词刷新状态不完全问题 ('bjq-fix-i18n' 到 'develop-1.4.0')
Jun 26, 2026
e1724fe
合并分支: fix(2026061500082): 增加训练任务错误计数及部分错误状态展示 ('14864/2026061500082-2…
Jun 26, 2026
490f149
feat(模型管理): 支持服务端分页与筛选查询模型列表
Jun 26, 2026
3e1117f
合并分支 '14864/page-model' 到 'develop-1.4.0'
Jun 26, 2026
9dc36f0
[AI-COMMIT][FIX] 修复模型列表分页响应类型缺少 activeTotal 字段导致构建报错
Jun 27, 2026
5ebe4ff
合并分支: [AI-COMMIT] [FIX] 修复模型列表分页响应类型缺少 activeTotal 字段导致构建报错 ('fix-mod…
Jun 27, 2026
5ee3d16
feat: 编辑模式下隐藏数据库密码可见性切换按钮
Jun 29, 2026
726a198
fix(2026062700161): 默认启用附录保留并明确知识处理仅针对PDF
Jun 29, 2026
10d2fc8
合并分支: feat: 编辑模式下隐藏数据库密码可见性切换按钮 ('56800/feat-databaseconfig' 到 'devel…
Jun 29, 2026
05f128f
合并分支: fix(2026062700161): 默认启用附录保留并明确知识处理仅针对PDF ('56800/fix-202606270…
Jun 29, 2026
70c62fb
fix: 2026062900056扩大node内存,防止execl解析过大返回导致重启
Jun 29, 2026
a7f742e
合并分支: fix: 2026062900056扩大node内存,防止execl解析过大返回导致重启 ('fix-202606290005…
Jun 29, 2026
91c3b5b
fix(2026062900299): 修复模型列表排序逻辑并移除前端冗余排序
Jun 30, 2026
d7e625d
feat(对话日志): 浏览器标签页切回时自动刷新当前子 tab 数据
Jun 30, 2026
f292d57
feat: add task abort checks to all training stages
Jun 25, 2026
d2b2bbc
合并分支: fix(2026062900299): 修复模型列表排序逻辑并移除前端冗余排序 ('56800/fix-20260629002…
Jun 30, 2026
4a6c2d2
合并分支: feat: add task abort checks to all training stages ('78712-abor…
Jun 30, 2026
7770bc2
fix(2026062900401): 区分聊天日志与实时对话中用户消息的展示逻辑
Jun 30, 2026
0b0bad5
合并分支: feat(对话日志): 浏览器标签页切回时自动刷新当前子 tab 数据 ('56800/feat-refresh' 到 'de…
Jun 30, 2026
4fc5298
fix(2026061500082): 修复集合列表 errorCount 实时统计与训练队列错误计数逻辑
Jun 30, 2026
47a4699
合并分支: fix(2026062900401): 区分聊天日志与实时对话中用户消息的展示逻辑 ('14864/2026062900401…
Jun 30, 2026
5de2b97
feat(搜索路径): 支持在文件夹内递归搜索应用/技能/知识库
Jun 30, 2026
db18e29
合并分支: fix(2026061500082): 修复集合列表 errorCount 实时统计与训练队列错误计数逻辑 ('14864/2…
Jun 30, 2026
c62c11d
合并分支: feat: 支持在文件夹内递归搜索应用/技能/知识库 ('56800/feat-search-path' 到 'develop…
Jun 30, 2026
bab342e
feat:improve dataset training status tracking~
Jun 30, 2026
71622f7
合并分支: feat:improve dataset training status tracking~ ('feat/improve-d…
Jul 1, 2026
c9c571e
agent base需求:langfuse设置trace的name固定为messgae
Jul 1, 2026
359d86b
合并分支: agent base需求:langfuse设置trace的name固定为messgae ('64146-langfuse' 到…
Jul 1, 2026
7eba5cb
fix: add app id to langfuse observations
Jul 2, 2026
97dc775
合并分支: fix: add app id to langfuse observations ('64146-langfuse' 到 'd…
Jul 2, 2026
1c8029a
feat(openspec): 更新技能文件以支持工作区规划模式
Jul 2, 2026
1a14e4d
fix: unify terminal-error semantics in dataset training status
Jul 2, 2026
f570932
合并分支: fix: unify terminal-error semantics in dataset training status …
Jul 2, 2026
7f18448
feat(模型配置): 添加模型请求认证密码输入框类型
Jul 2, 2026
70c821c
合并分支: feat(openspec): 更新技能文件以支持工作区规划模式 ('14864/update-openspec' 到 'de…
Jul 2, 2026
909843d
合并分支: feat(模型配置): 自定义请求 Key 输入框密文显示 ('56800/feat-config2' 到 'develop-…
Jul 2, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
The table of contents is too big for display.
Diff view
Diff view
  •  
  •  
  •  
18 changes: 15 additions & 3 deletions .claude/CLAUDE.md
Original file line number Diff line number Diff line change
Expand Up @@ -88,7 +88,8 @@ FastGPT 是一个 AI Agent 构建平台,通过 Flow 提供开箱即用的数据
- **Node 版本**: 需要 Node.js >=20.x, pnpm >=9.x
- **数据库**: 支持 MongoDB、带 pgvector 的 PostgreSQL 或 Milvus 向量存储
- **AI 集成**: 通过统一接口支持多个 AI 提供商
- **国际化**: 完整支持中文、英文和日文
- **国际化**: 完整支持中文、英文和繁体中文
- **接口一致性**: 前端为请求参数添加的必填项、默认值等校验逻辑,必须与后端接口保持一致。不能仅在前端做特殊处理,否则暴露接口后,直接调用 API 的客户会因缺少这些参数或默认值而导致接口行为不一致。如果必须不一致需要用户代码调用时候维护的需要补充代码注释说明,否则在提交代码前提示用户处理,必须拒绝提交代码

## 关键文件模式

Expand Down Expand Up @@ -127,7 +128,7 @@ function agent_loop(用户需求){
提出问题,让用户提供答案;
调整需求文档;
}

// 2. 开发文档编写
while(开发文档编写未完成){
编写开发文档;
Expand Down Expand Up @@ -157,4 +158,15 @@ function agent_loop(用户需求){
2.2. 问题分析文档: .claude/issue
3. 相同需求文档,尽量写在一起(内容超过 300 行,可以分批写入),或者创建要给目录一起管理,不要随意平铺一堆不同版本的相同问题的文档。
4. 文件输出,使用正确的编码格式,例如UTF-8。
5. 除非用户指明,否则不要编写总结报告。
5. 除非用户指明,否则不要编写总结报告。

<!-- CODEGRAPH_START -->
## CodeGraph

In repositories indexed by CodeGraph (a `.codegraph/` directory exists at the repo root), reach for it BEFORE grep/find or reading files when you need to understand or locate code:

- **MCP tools** (when available): `codegraph_explore` answers most code questions in one call — the relevant symbols' verbatim source plus the call paths between them. `codegraph_node` returns one symbol's source + callers, or reads a whole file with line numbers. If the tools are listed but deferred, load them by name via tool search.
- **Shell** (always works): `codegraph explore "<symbol names or question>"` and `codegraph node <symbol-or-file>` print the same output.

If there is no `.codegraph/` directory, skip CodeGraph entirely — indexing is the user's decision.
<!-- CODEGRAPH_END -->
340 changes: 340 additions & 0 deletions .claude/design/aiproxy-channel-permission-design.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,340 @@
# FastGPT x AIProxy Channel 权限绕过修复方案

## 1. 文档目的

本文档用于沉淀 `aiproxy` channel 权限绕过问题的预研结论,作为后续实施、联调、测试和上线的指导文档。

适用问题场景:

1. 用户 A 创建了自定义模型 `00000xxx001`,模型名为 `qwen-3.6`,且未配置 `requestUrl/requestAuth`。
2. root 创建了另一条模型 `00000xxx002`,模型名同为 `qwen-3.6`,并在 `aiproxy` 中配置了对应 `model-channel`。
3. 用户 A 在 FastGPT 中测试或调用自己的模型时,实际越权命中了 root 的 `model-channel`。

## 2. 问题结论

问题本质不是 FastGPT 的“模型读权限”失效,而是:

1. FastGPT 在校验用户可访问某个 `modelId` 后,调用 `aiproxy` 时只传了上游模型名 `model=qwen-3.6`。
2. `aiproxy` 默认按“模型名 -> channel 列表”做路由,不知道当前请求实际对应的是哪一条 FastGPT 模型配置。
3. 因此,只要不同 FastGPT 模型共享同一个上游模型名,且其中某些模型没有直连配置,`aiproxy` 就可能把请求路由到不属于当前 FastGPT 模型的 channel。

## 3. 根因拆解

### 3.1 FastGPT 侧

FastGPT 当前链路的关键特征:

1. 先用 `modelId` 做权限校验,只能证明“用户能访问这条 FastGPT 模型配置”。
2. 当模型未配置 `requestUrl/requestAuth` 时,请求会回退到全局 `AIPROXY_API_ENDPOINT + AIPROXY_API_TOKEN`。
3. 发往 `aiproxy` 的运行时请求,通常只包含上游模型名,不包含 FastGPT 侧的来源模型身份。
4. 模型测试接口只有在显式传入 `channelId` 时,才会使用 `Aiproxy-Channel` 指定 channel。

涉及代码入口:

- `projects/app/src/pages/api/core/ai/model/test.ts`
- `packages/service/support/permission/model/auth.ts`
- `packages/service/core/ai/config.ts`
- `packages/service/core/ai/llm/request.ts`
- `packages/service/core/ai/embedding/index.ts`
- `packages/service/core/ai/rerank/index.ts`
- `packages/service/core/ai/audio/transcriptions.ts`

### 3.2 AIProxy 侧

`aiproxy` 当前链路的关键特征:

1. `TokenAuth` 只识别 token/group 级别权限,不理解 FastGPT 的 `teamId/tmbId/modelId`。
2. 默认选路时,直接从 `model -> channels` 缓存里获取候选 channel。
3. 只要 channel 声明支持 `qwen-3.6`,就会进入候选集。
4. `aiproxy` 虽然已经可以解析部分请求体中的 `metadata`,但目前没有用它约束 channel 归属。

涉及代码入口:

- `../aiproxy/core/middleware/auth.go`
- `../aiproxy/core/controller/relay-channel.go`
- `../aiproxy/core/model/model_caches.go`
- `../aiproxy/core/middleware/distributor.go`

## 4. 设计目标

本次修复目标:

1. 阻断“同名上游模型”在 `aiproxy` 侧误命中其他 FastGPT 模型专属 channel 的问题。
2. 尽量不引入 FastGPT 权限体系与 `aiproxy` token/group 体系的深度耦合。
3. 尽量不改 `aiproxy` 的数据库表结构和基础鉴权模型。
4. 保持现有公共 channel 的兼容性。
5. 让模型测试、正常推理、embedding、rerank、TTS、STT 等链路都能复用同一套约束机制。

## 5. 非目标

本次方案不做以下事情:

1. 不把 FastGPT 的 `teamId/tmbId/协作权限` 完整同步到 `aiproxy`。
2. 不重做 `aiproxy` 的 token/group 权限模型。
3. 不要求所有自定义模型都必须填写 `requestUrl/requestAuth`。
4. 不改变公共 channel 的默认行为。

## 6. 选型结论

选用“来源模型身份透传 + channel 归属过滤”的轻量方案。

核心思想:

1. FastGPT 在每次发往 `aiproxy` 的请求中,显式带上“来源 FastGPT 模型 ID”。
2. `aiproxy` 在选择 channel 前,判断该 channel 是否被限制为某个 FastGPT 模型专用。
3. 若 channel 是专用 channel,则只有来源模型 ID 命中时才允许参与路由。
4. 若 channel 未配置该限制,则保持当前行为,继续作为公共 channel 使用。

这是对现有方案的“实施化细化”,不改变原始选型原则,只是把“来源模型身份”的承载方式从抽象概念落到可实现的协议上。

## 7. 为什么最终建议用请求头承载身份

原始预研里,来源身份建议放在请求体 `metadata` 中。这条思路对 JSON 请求成立,但直接落地有一个缺口:

1. `aiproxy` 当前只会在部分 JSON 模式下解析 `metadata`。
2. `AudioTranscription` 等 `multipart/form-data` 请求路径,并不会走相同的 `metadata` 解析逻辑。
3. 仅靠 JSON `metadata`,无法完整覆盖模型测试和全部模型调用链路。

因此,实施时建议:

1. 以请求头作为来源模型身份的主承载方式。
2. 对支持 JSON `metadata` 的链路,再镜像写入一份 `metadata`,方便日志和后续扩展。

这样可以统一覆盖 JSON 请求和 multipart 请求。

## 8. 协议设计

### 8.1 FastGPT -> AIProxy 请求身份

建议新增以下请求头:

```http
X-FastGPT-Model-Id: 00000xxx001
X-FastGPT-Team-Id: <optional>
```

字段约定:

| 字段 | 必填 | 说明 |
|------|------|------|
| `X-FastGPT-Model-Id` | 是 | 当前请求在 FastGPT 中对应的模型 ID |
| `X-FastGPT-Team-Id` | 否 | 当前模型所属团队 ID,仅用于日志或未来扩展 |

对支持 JSON 请求体的链路,建议同步写入:

```json
{
"metadata": {
"fastgpt_model_id": "00000xxx001",
"fastgpt_team_id": "team-xxx"
}
}
```

落地约束:

1. 只要请求最终走 `aiproxy`,就应带上 `X-FastGPT-Model-Id`。
2. 若模型本身配置了 `requestUrl/requestAuth`,直接走外部地址,则不强制要求该头。
3. 如果调用方已存在 `metadata`,应做 merge,不应覆盖业务已有字段。

### 8.2 AIProxy Channel 归属配置

基于 `Channel.Configs` 增加一个可选字段:

```json
{
"fastgpt_owner_model_id": "00000xxx002"
}
```

字段定义:

| 字段 | 必填 | 说明 |
|------|------|------|
| `fastgpt_owner_model_id` | 否 | 声明该 channel 只允许某个 FastGPT 模型 ID 使用 |

选择这个字段的原因:

1. `Channel.Configs` 已经是扩展 JSON,无需表结构迁移。
2. 单值字段足够解决本次越权问题。
3. 语义清晰,便于排障和运营配置。

### 8.3 V1 匹配规则

V1 规则如下:

1. channel 未配置 `fastgpt_owner_model_id` 时,视为公共 channel,保持现有行为。
2. channel 配置了 `fastgpt_owner_model_id` 时:
- 请求必须携带 `X-FastGPT-Model-Id`
- 且请求头中的模型 ID 必须与 `fastgpt_owner_model_id` 相等
3. 不相等时,该 channel 不能进入候选集。
4. 对显式指定 channel 的路径,同样应用该校验,不能因为手工指定 `Aiproxy-Channel` 而绕过。

## 9. 路由行为定义

### 9.1 默认路由

默认路由流程调整为:

1. 先按当前逻辑拿到 `modelName` 对应的候选 channel 列表。
2. 再按 `fastgpt_owner_model_id` 与 `X-FastGPT-Model-Id` 进行二次过滤。
3. 过滤后的结果继续走原有优先级、错误率、重试和 fallback 逻辑。

### 9.2 显式 `Aiproxy-Channel`

当前 FastGPT 模型测试接口支持显式传 `channelId`。该路径必须补一层约束:

1. 先根据 `Aiproxy-Channel` 解析到 channel。
2. 再校验该 channel 是否允许当前 `X-FastGPT-Model-Id` 使用。
3. 校验失败时,直接返回无权限或 channel 不可用错误。

### 9.3 Pinned channel

`aiproxy` 某些链路会在上下文中带回 `ChannelID` 做回查。该路径同样应复用相同的归属校验函数,避免固定 channel 成为旁路。

## 10. 推荐实现方式

### 10.1 FastGPT 侧

建议新增一个统一的“AIProxy 请求身份构造器”,负责生成 headers 和 JSON metadata。

建议输出:

```ts
type AIProxyRequestIdentity = {
headers: Record<string, string>;
metadata: Record<string, string>;
};
```

建议责任:

1. 输入当前 `model.id`、可选 `teamId`。
2. 产出 `X-FastGPT-Model-Id` 和可选 `X-FastGPT-Team-Id`。
3. 对 JSON 请求产出可 merge 的 `metadata.fastgpt_model_id`。
4. 被 LLM、Embedding、Rerank、TTS、STT、模型测试等链路统一复用。

建议接入点:

- `projects/app/src/pages/api/core/ai/model/test.ts`
- `packages/service/core/ai/llm/request.ts`
- `packages/service/core/ai/embedding/index.ts`
- `packages/service/core/ai/rerank/index.ts`
- `packages/service/core/ai/audio/transcriptions.ts`
- 其他所有最终走 `AIPROXY_API_ENDPOINT` 的模型调用入口

### 10.2 AIProxy 侧

建议新增一个 channel 访问约束结构:

```go
type FastGPTChannelAccessConfig struct {
FastGPTOwnerModelID string `json:"fastgpt_owner_model_id"`
}
```

建议新增一个统一判定函数,例如:

```go
func isChannelAllowedForFastGPTModel(c *gin.Context, channel *model.Channel) bool
```

判定逻辑:

1. 读取 channel `Configs.fastgpt_owner_model_id`
2. 若为空,返回允许
3. 读取请求头 `X-FastGPT-Model-Id`
4. 若请求头为空,返回不允许
5. 若两者不相等,返回不允许
6. 相等则返回允许

建议接入点:

1. `GetChannelFromHeader`
2. `GetChannelFromRequest`
3. `getAvailableChannels`

这样可以同时覆盖:

1. 默认按模型名选路
2. 显式 `Aiproxy-Channel`
3. pinned channel 回查

## 11. 兼容性策略

该方案默认兼容现网,前提是按以下方式上线:

1. 新代码上线后,不立即给现有 channel 配置 `fastgpt_owner_model_id`
2. 先让 FastGPT 稳定透传 `X-FastGPT-Model-Id`
3. 确认日志中已能看到来源模型身份
4. 再逐步给“专属 channel”补上 `fastgpt_owner_model_id`

兼容性结论:

1. 不配置 `fastgpt_owner_model_id` 的 channel 完全保持旧行为。
2. 新版 FastGPT 对旧版 `aiproxy` 是向后兼容的,旧版会忽略新请求头。
3. 新版 `aiproxy` 对未加限制的 channel 是向后兼容的。
4. 只有在 channel 被配置为专属后,请求侧才必须带上来源模型身份。

## 12. 测试与验收

### 12.1 必测正向用例

1. root 模型 `00000xxx002` 调用 `qwen-3.6`,命中自己配置的专属 channel。
2. 用户 A 模型 `00000xxx001` 调用 `qwen-3.6`,若存在自己的专属 channel,则命中自己的 channel。
3. 用户 A 模型 `00000xxx001` 调用 `qwen-3.6`,若只有公共 channel,则正常走公共 channel。
4. 模型测试接口显式指定正确的 `channelId`,测试通过。

### 12.2 必测反向用例

1. 用户 A 模型 `00000xxx001` 不能命中 root 模型 `00000xxx002` 的专属 channel。
2. 模型测试接口即使显式传入 root 的 `channelId`,也不能绕过限制。
3. 缺少 `X-FastGPT-Model-Id` 的请求,不能命中任何配置了 `fastgpt_owner_model_id` 的 channel。
4. multipart 链路的 STT 测试与调用,仍然能正确做归属校验。

### 12.3 回归用例

1. 未配置 `fastgpt_owner_model_id` 的历史 channel 不受影响。
2. 重试、错误率降级、优先级选路逻辑不受影响。
3. embedding、rerank、TTS、STT、LLM 的公共调用能力不受影响。

## 13. 上线建议

建议按以下顺序上线:

1. `aiproxy` 发布支持识别 `X-FastGPT-Model-Id` 和 `fastgpt_owner_model_id` 的版本。
2. FastGPT 发布统一透传 `X-FastGPT-Model-Id` 的版本。
3. 联调验证 headers 和日志字段已生效。
4. 先选一组 root 专属 channel 做灰度配置。
5. 验证无误后,逐步为所有需要隔离的 channel 配置 `fastgpt_owner_model_id`。

## 14. 方案边界与后续扩展

V1 的边界:

1. 一个专属 channel 只绑定一个 FastGPT 模型 ID。
2. 如果后续需要“一个 channel 允许多个 FastGPT 模型共享”,再扩展为:

```json
{
"fastgpt_allowed_model_ids": ["model-a", "model-b"]
}
```

V1 不建议直接实现多值白名单,原因是:

1. 本次问题只需要解决“一对一专属 channel 被串用”。
2. 单值绑定更容易配置和排障。
3. 先上线最小闭环,再根据业务需要扩展。

## 15. 最终结论

最终推荐落地方案如下:

1. FastGPT 统一透传 `X-FastGPT-Model-Id` 作为来源模型身份。
2. 对 JSON 请求,额外镜像写入 `metadata.fastgpt_model_id` 用于日志和扩展。
3. `aiproxy` 在 channel `Configs` 中支持 `fastgpt_owner_model_id`。
4. `aiproxy` 在默认选路、显式指定 channel、pinned channel 三条路径上统一执行归属校验。
5. 未配置归属限制的 channel 继续保持公共行为。

该方案改动面小、耦合低、兼容性好,能以最小成本修复当前的 channel 权限绕过问题。
Loading