Pull Request已成功合入, 合并人@CANN-robot
(感谢 汪超 的贡献)Thanks for your pull-request.
The full list of commands accepted by me can be found at here.
You can get sig-info at here.
You can self-configure the PR merge rules for this repository. For more details, please refer to Here.
For more, you also can visit HICANN.
PR Approval Progress
✅ Congratulations! All modules have met the lgtm and approve requirements.
Module Approval Details
| module | lgtm status | approve status |
|---|---|---|
| repo-cann/cannbot-knowledge | ✅ zhanghz1, wangsj0012 (2/2) | ✅ zhanghz1 (1/1) |
💡 Tip:
- Committer can comment
/approveor/lgtm- Commenting
/approveimplies both code review (lgtm) and intent to merge (approve)
CLA Signature Pass
qq_41667743, thanks for your pull request. All authors of the commits have signed the CLA. 👍


| 🚀 CI 流水线已启动 |
|---|
| 📋 执行详情: 点击查看流水线 |


/lgtm


/approve


1. [P1] 首次 consumer 安装会误删用户自建的同名客户端链接
位置: install.sh:319,第 319–329 行。
remove_unselected_managed_skills 删除客户端 adapter 时,只检查它是否解析到项目中的 canonical 路径,却没有先确认这个 canonical Skill 属于本知识仓。canonical 自身是否指向 $KNOWLEDGE_ROOT/.agents/skills/<skill> 的检查直到 adapter 删除之后才执行。
复现: 项目原本有用户维护的真实目录 .agents/skills/knowledge-ingest/,以及指向它的 .claude/skills/knowledge-ingest 符号链接;此前没有安装 cannbot-knowledge。首次执行 bash install.sh codex <project> consumer --skip-resources,退出码为 0,但用户的 Claude 链接被删除。目录里的内容仍在,Claude 的原有 Skill 入口却被卸载了。基线 init.sh 在相同场景保留该链接。
必须调整: 先验证 canonical 链接确实归属于当前知识仓,再清理其 adapter;对用户真实目录、指向其他来源的 canonical 链接及其 adapter 全部保持不动。增加“从未安装过本仓、已有同名自定义 Skill”的回归,不能只测试本安装器创建的链接。
复现对比:PR 和基线均退出 0;PR 删除用户 adapter 链接,基线保留。基线代码见 init.sh。
2. [P2] 降级清理边删边检查,遇到后续路径冲突时留下损坏的原安装
位置: install.sh:315,第 315–330 行;调用位置 install.sh:837。
前置检查只遍历本次要安装的 skills。从 contributor 降为 consumer 时,待删除的贡献 Skill 和其他客户端的 adapter 没有被完整预检;remove_unselected_managed_skills 在删除过程中才调用 preflight_destination,因此后面的失败无法保护前面已删除的内容。
复现: 先正常安装 codex contributor,再令项目 .opencode 指向外部共享目录,其中 skills/knowledge-lint 链接到本项目已安装的 canonical knowledge-lint。降级 consumer 时,脚本先删除 canonical knowledge-ingest,随后因 OpenCode adapter 的父目录越出项目而退出 2。此时配置仍为 contributor,AGENTS.md 仍保留贡献流程,但 knowledge-ingest 已不存在。
必须调整: 在任何删除前收集完整清理清单,统一完成归属、父目录和路径检查;全部通过后才开始修改。新增失败路径回归,验证出错前后的 Skill 链接、配置和提示文件完全一致。
复现状态:退出码 2;knowledge-ingest 链接已删除,knowledge-lint 链接仍在,配置和提示文件仍为 contributor。
3. [P2] CRLF 提示文件不被识别,模式降级成功后仍保留旧贡献指令
位置: install.sh:747,第 747–750 行;影响第 818、853 行的跨客户端同步。
prompt_has_managed_marker 使用 grep -Fqx 精确匹配 marker,CRLF 行尾的 \r 会使匹配失败。后续 Python 的 manage_prompt 能处理 CRLF,但调用前已被这个判断跳过,导致有效的已有托管入口漏检、漏更新。
复现: 正常安装 claude contributor,只把生成的 CLAUDE.md 换成 CRLF 换行,再执行 codex consumer 安装。命令成功退出 0,配置已改为 consumer、Claude 的贡献 Skill 链接也已删除,但 CLAUDE.md 仍含“贡献者附加流程”及已不存在的 Skill 指令。Windows 编辑器或 Git 换行转换即可触发,无须损坏 marker 内容。
必须调整: marker 存在性检查与 manage_prompt 共用兼容 LF/CRLF 的行解析,确保其他客户端的有效托管块都进入预检和同步;增加跨客户端、CRLF 文件的模式切换回归。
复现状态:退出码 0;配置为 consumer,Claude 的 knowledge-ingest 链接已删除,CLAUDE.md 仍保留贡献流程。


| 🚀 CI 流水线已启动 |
|---|
| 📋 执行详情: 点击查看流水线 |


/lgtm


/lgtm


/approve


/lgtm


/approve


/lgtm


The following users do not have permission to comment /lgtm or /approve on any module in this PR:
/approve: qianbi1999
/lgtm: qianbi1999


Pull Request 说明
变更说明
给知识库安装和使用提供一个统一的文档以及安装脚本
变更类型
验证