CANN 生态中面向 Agent 工作流的“哨兵”:观测 · 审计 · 评测三位一体的质量基础设施
| 文件 | 最后提交记录 | 最后更新时间 |
|---|---|---|
actions add ut | 22 天前 | |
infra(pre-commit): 引入 pre-commit/OAT 检查体系 Co-authored-by: gitcode_lijd<lijiandong20@huawei.com> # message auto-generated for no-merge-commit merge: !41 merge pre-commit into master infra(pre-commit): 引入 pre-commit/OAT 检查体系 Created-by: gitcode_lijd Commit-by: gitcode_lijd Merged-by: cann-robot Description: 关联Issue https://gitcode.com/cann/cannbot-sentry/issues/14 ## 背景 仓内无提交期检查(Issue #14)。引入 pre-commit + OAT 检查体系(skills-dev PR#191 已合入的同款实现,含批扫描修复/Left 口径等全部后续修订),经本仓 --all-files 全量实测校准。1 笔提交,8 文件 +953/-2。 ## 改动清单 | 件 | 内容 | |---|---| | .pre-commit-config.yaml | 五套钩子:pre-commit-hooks(7 项,trailing-whitespace 保 md 硬换行)、clang-format v18.1.8、ruff v0.14.14(豁免 8 项、F 系列全启用)、codespell v2.4.1(只查 md+yaml)、OAT 合规(local hook) | | OAT.xml | Huawei 版权策略项 + yaml/yml/csv/png/mjs 豁免;本仓增:requirements*.txt、*.jsonl(数据文件)、.npmignore(点文件)头豁免;png、*.jsonl.gz(**UT 固件压缩会话日志**)、.npmignore 二进制豁免 | | scripts/oat_check.sh | OAT 增量扫描:PR-range 自适应、done-marker **四守卫**、**120KB 自动分批 + 失败阻塞 + 数组传参**、失败留证 pre-commit_reports/oat_result.txt | | scripts/run_codespell.sh | codespell 输出 tee 到 pre-commit_reports/codespell.log | | scripts/format_cpp.sh | C++ 批量格式化(目录不存在报错退出;本仓暂无可格式化文件) | | .clang-format | Google 基线 + PointerAlignment: Left(int* p 指针随类型) | | docs/pre-commit_guide.md | 使用指南(快速使用/排查/FAQ/存量债增量治理) | | .gitignore | 忽略 pre-commit_reports/ | ## 校准结果(--all-files 实测) - 私钥 / check-json / check-yaml:全过 - codespell:14 命中中 afterAll/pressEnter 为 Jest/Playwright API 标识符(文档引述测试代码)入白名单,余 0 - ruff:仅 24 条全真问题残留(E741 17/F841 6/F401 1),存量债 - OAT:豁免非债务类后残留 159 条全真存量债(ts 89 / tsx 29 / sh 3 / txt 5 等缺头)——增量消化 ## 验证 - 本提交自身过全部钩子(含 OAT 分批真实扫描);yaml/xml/bash 语法全过 See merge request: cann/cannbot-sentry!41 | 1 个月前 | |
[fix] subagent 嵌套 subagent 显示修复 Co-authored-by: guanxinghua<guanxinghua@huawei.com> # message auto-generated for no-merge-commit merge: !104 merge fix/subagent-parsing into master [fix] subagent 嵌套 subagent 显示修复 Created-by: guanxinghua Commit-by: guanxinghua Merged-by: cann-robot Description: ## 概要 修复 Turns 页嵌套 subagent lane 的挂载位置:depth-2 子 lane(子代理派生的子代理)此前统一渲染在**父 lane 全部轮次之后**,改为**派发轮行后就地渲染**(与 root 层一致:单 lane 直渲 / 多 lane ParallelSubagentGroup)。 ## 问题现场 claude-code 会话 bc63bdfb(/day0-inference 多 agent 工作流):designer 子代理在 #1761 派生两个后台 Explore(真实运行 08:31-08:38,与 designer 后续轮并行),页面却把两个 Explore lane 渲染在 designer 末轮 #1847 之后——读作「由 #1847 启动」,错位 86 行、约 34 分钟,且完全抹掉三方并发。 ## 触发条件(为何长期未暴露) 1. 嵌套派生(depth≥2)——本库 27 会话仅 2 个命中; 2. 派发轮不在父 lane 末轮(否则末尾追加与就地挂载位置重合,无差别); 3. 后台并发形态放大——前台阻塞时孩子本就占 Td→T(d+1) 间隙,末尾显示仅弱化因果、叙事仍自洽;后台时孩子与父后续轮真实交错,末尾显示凭空制造先后关系; 4. 需要时序敏感的读者展开该父 lane(四层条件相乘,故长期无人报告)。 ## 修改 - packages/insight/src/components/observe/TurnTimeline.tsx:SubagentLaneView 的子 lane 从「收集后统一追加在 lane.turns 之后」改为逐行就地插入——每行 turn 后查 ctx.subagentBlocksByTurnId,命中即渲染(单个 → SubagentLaneView 递归,多个 → ParallelSubagentGroup,顺带获得 ⇄ N parallel 汇总展示);列表 key 从 button 移到外层包装 div。 - packages/insight/tests/ut/turn-timeline-parallel-overflow.test.tsx:新增回归用例锁定 DOM 顺序「子 lane 在派发轮 #636 之后、父 lane 后续轮 #637 之前」。 ## 验证 - 定向:timeline 相关 3 个测试文件 13/13 通过(含新用例) - 全量:npm run test 212 文件 / 1781 通过 / 2 跳过 🤖 Generated with [Claude Code](https://claude.com/claude-code) See merge request: cann/cannbot-sentry!104 | 25 天前 | |
[docs] 三方件合规文档删除 List.yaml、Notice 对齐 CANN 社区标准登记模板 Co-authored-by: guanxinghua<guanxinghua@huawei.com> # message auto-generated for no-merge-commit merge: !102 merge third-party-yaml-versiondel into master [docs] 三方件合规文档删除 List.yaml、Notice 对齐 CANN 社区标准登记模板 Created-by: guanxinghua Commit-by: guanxinghua Merged-by: cann-robot Description: ## 概要 三方件合规文档收敛为 **Notice 单源**,两步: ### ① 删除 Third_Party_Open_Source_Software_List.yaml 社区普查(CANN 84 仓):**List.yaml 基本是 C++ 主线仓的规范**(18 家有 yaml 的仓里 13 家是 C++);29 个 Python/JS/TS 仓中仅 5 家有 yaml,且全部写范围/通配版本( >=1.21、1.26.x),唯一的 JS 仓(cann-recipes-harmony-infer)只有 Notice。删除后 5 处文档引用(SECURITY/CONTRIBUTING/scripts·README/sift NOTICE/根 Notice)同步清向 Notice。 ### ② Notice 重写为 CANN 社区标准登记模板 对齐 npu-simulator / oil-gas-ops-prospect 模板:标准开头段(开源许可优先于 EULA)+ Warranty Disclaimer + **逐组件登记块 48 个**: - vendored 派生源码 2 块:Anthropic skill-creator(Apache-2.0,修改披露与保留要求原样保留)、shadcn UI primitives(MIT) - sift Python 直依赖 7 块(typer/rich/pydantic/PyYAML/pytest 族) - **insight/cpx npm 直依赖 39 块——补上此前 npm 依赖在法律文件里零登记的缺口** 每块含 Software(名字+版本声明)/ Obtained from(上游 URL)/ Usage / Copyright notice(取自各包随附 LICENSE 文件;Apache 系包手写权威值)/ License;MIT、ISC 全文内联,Apache-2.0 指向仓内既有 packages/sift/LICENSES 全文。 ## 测试 纯文档变更(删 yaml + 重写 Notice),无代码/测试依赖(check-license.sh 未迁入,无脚本引用该 yaml)。 See merge request: cann/cannbot-sentry!102 | 26 天前 | |
infra(pre-commit): 引入 pre-commit/OAT 检查体系 Co-authored-by: gitcode_lijd<lijiandong20@huawei.com> # message auto-generated for no-merge-commit merge: !41 merge pre-commit into master infra(pre-commit): 引入 pre-commit/OAT 检查体系 Created-by: gitcode_lijd Commit-by: gitcode_lijd Merged-by: cann-robot Description: 关联Issue https://gitcode.com/cann/cannbot-sentry/issues/14 ## 背景 仓内无提交期检查(Issue #14)。引入 pre-commit + OAT 检查体系(skills-dev PR#191 已合入的同款实现,含批扫描修复/Left 口径等全部后续修订),经本仓 --all-files 全量实测校准。1 笔提交,8 文件 +953/-2。 ## 改动清单 | 件 | 内容 | |---|---| | .pre-commit-config.yaml | 五套钩子:pre-commit-hooks(7 项,trailing-whitespace 保 md 硬换行)、clang-format v18.1.8、ruff v0.14.14(豁免 8 项、F 系列全启用)、codespell v2.4.1(只查 md+yaml)、OAT 合规(local hook) | | OAT.xml | Huawei 版权策略项 + yaml/yml/csv/png/mjs 豁免;本仓增:requirements*.txt、*.jsonl(数据文件)、.npmignore(点文件)头豁免;png、*.jsonl.gz(**UT 固件压缩会话日志**)、.npmignore 二进制豁免 | | scripts/oat_check.sh | OAT 增量扫描:PR-range 自适应、done-marker **四守卫**、**120KB 自动分批 + 失败阻塞 + 数组传参**、失败留证 pre-commit_reports/oat_result.txt | | scripts/run_codespell.sh | codespell 输出 tee 到 pre-commit_reports/codespell.log | | scripts/format_cpp.sh | C++ 批量格式化(目录不存在报错退出;本仓暂无可格式化文件) | | .clang-format | Google 基线 + PointerAlignment: Left(int* p 指针随类型) | | docs/pre-commit_guide.md | 使用指南(快速使用/排查/FAQ/存量债增量治理) | | .gitignore | 忽略 pre-commit_reports/ | ## 校准结果(--all-files 实测) - 私钥 / check-json / check-yaml:全过 - codespell:14 命中中 afterAll/pressEnter 为 Jest/Playwright API 标识符(文档引述测试代码)入白名单,余 0 - ruff:仅 24 条全真问题残留(E741 17/F841 6/F401 1),存量债 - OAT:豁免非债务类后残留 159 条全真存量债(ts 89 / tsx 29 / sh 3 / txt 5 等缺头)——增量消化 ## 验证 - 本提交自身过全部钩子(含 OAT 分批真实扫描);yaml/xml/bash 语法全过 See merge request: cann/cannbot-sentry!41 | 1 个月前 | |
infra(pre-commit): 引入 pre-commit/OAT 检查体系 Co-authored-by: gitcode_lijd<lijiandong20@huawei.com> # message auto-generated for no-merge-commit merge: !41 merge pre-commit into master infra(pre-commit): 引入 pre-commit/OAT 检查体系 Created-by: gitcode_lijd Commit-by: gitcode_lijd Merged-by: cann-robot Description: 关联Issue https://gitcode.com/cann/cannbot-sentry/issues/14 ## 背景 仓内无提交期检查(Issue #14)。引入 pre-commit + OAT 检查体系(skills-dev PR#191 已合入的同款实现,含批扫描修复/Left 口径等全部后续修订),经本仓 --all-files 全量实测校准。1 笔提交,8 文件 +953/-2。 ## 改动清单 | 件 | 内容 | |---|---| | .pre-commit-config.yaml | 五套钩子:pre-commit-hooks(7 项,trailing-whitespace 保 md 硬换行)、clang-format v18.1.8、ruff v0.14.14(豁免 8 项、F 系列全启用)、codespell v2.4.1(只查 md+yaml)、OAT 合规(local hook) | | OAT.xml | Huawei 版权策略项 + yaml/yml/csv/png/mjs 豁免;本仓增:requirements*.txt、*.jsonl(数据文件)、.npmignore(点文件)头豁免;png、*.jsonl.gz(**UT 固件压缩会话日志**)、.npmignore 二进制豁免 | | scripts/oat_check.sh | OAT 增量扫描:PR-range 自适应、done-marker **四守卫**、**120KB 自动分批 + 失败阻塞 + 数组传参**、失败留证 pre-commit_reports/oat_result.txt | | scripts/run_codespell.sh | codespell 输出 tee 到 pre-commit_reports/codespell.log | | scripts/format_cpp.sh | C++ 批量格式化(目录不存在报错退出;本仓暂无可格式化文件) | | .clang-format | Google 基线 + PointerAlignment: Left(int* p 指针随类型) | | docs/pre-commit_guide.md | 使用指南(快速使用/排查/FAQ/存量债增量治理) | | .gitignore | 忽略 pre-commit_reports/ | ## 校准结果(--all-files 实测) - 私钥 / check-json / check-yaml:全过 - codespell:14 命中中 afterAll/pressEnter 为 Jest/Playwright API 标识符(文档引述测试代码)入白名单,余 0 - ruff:仅 24 条全真问题残留(E741 17/F841 6/F401 1),存量债 - OAT:豁免非债务类后残留 159 条全真存量债(ts 89 / tsx 29 / sh 3 / txt 5 等缺头)——增量消化 ## 验证 - 本提交自身过全部钩子(含 OAT 分批真实扫描);yaml/xml/bash 语法全过 See merge request: cann/cannbot-sentry!41 | 1 个月前 | |
infra(pre-commit): 引入 pre-commit/OAT 检查体系 Co-authored-by: gitcode_lijd<lijiandong20@huawei.com> # message auto-generated for no-merge-commit merge: !41 merge pre-commit into master infra(pre-commit): 引入 pre-commit/OAT 检查体系 Created-by: gitcode_lijd Commit-by: gitcode_lijd Merged-by: cann-robot Description: 关联Issue https://gitcode.com/cann/cannbot-sentry/issues/14 ## 背景 仓内无提交期检查(Issue #14)。引入 pre-commit + OAT 检查体系(skills-dev PR#191 已合入的同款实现,含批扫描修复/Left 口径等全部后续修订),经本仓 --all-files 全量实测校准。1 笔提交,8 文件 +953/-2。 ## 改动清单 | 件 | 内容 | |---|---| | .pre-commit-config.yaml | 五套钩子:pre-commit-hooks(7 项,trailing-whitespace 保 md 硬换行)、clang-format v18.1.8、ruff v0.14.14(豁免 8 项、F 系列全启用)、codespell v2.4.1(只查 md+yaml)、OAT 合规(local hook) | | OAT.xml | Huawei 版权策略项 + yaml/yml/csv/png/mjs 豁免;本仓增:requirements*.txt、*.jsonl(数据文件)、.npmignore(点文件)头豁免;png、*.jsonl.gz(**UT 固件压缩会话日志**)、.npmignore 二进制豁免 | | scripts/oat_check.sh | OAT 增量扫描:PR-range 自适应、done-marker **四守卫**、**120KB 自动分批 + 失败阻塞 + 数组传参**、失败留证 pre-commit_reports/oat_result.txt | | scripts/run_codespell.sh | codespell 输出 tee 到 pre-commit_reports/codespell.log | | scripts/format_cpp.sh | C++ 批量格式化(目录不存在报错退出;本仓暂无可格式化文件) | | .clang-format | Google 基线 + PointerAlignment: Left(int* p 指针随类型) | | docs/pre-commit_guide.md | 使用指南(快速使用/排查/FAQ/存量债增量治理) | | .gitignore | 忽略 pre-commit_reports/ | ## 校准结果(--all-files 实测) - 私钥 / check-json / check-yaml:全过 - codespell:14 命中中 afterAll/pressEnter 为 Jest/Playwright API 标识符(文档引述测试代码)入白名单,余 0 - ruff:仅 24 条全真问题残留(E741 17/F841 6/F401 1),存量债 - OAT:豁免非债务类后残留 159 条全真存量债(ts 89 / tsx 29 / sh 3 / txt 5 等缺头)——增量消化 ## 验证 - 本提交自身过全部钩子(含 OAT 分批真实扫描);yaml/xml/bash 语法全过 See merge request: cann/cannbot-sentry!41 | 1 个月前 | |
[docs] 三方件合规文档删除 List.yaml、Notice 对齐 CANN 社区标准登记模板 Co-authored-by: guanxinghua<guanxinghua@huawei.com> # message auto-generated for no-merge-commit merge: !102 merge third-party-yaml-versiondel into master [docs] 三方件合规文档删除 List.yaml、Notice 对齐 CANN 社区标准登记模板 Created-by: guanxinghua Commit-by: guanxinghua Merged-by: cann-robot Description: ## 概要 三方件合规文档收敛为 **Notice 单源**,两步: ### ① 删除 Third_Party_Open_Source_Software_List.yaml 社区普查(CANN 84 仓):**List.yaml 基本是 C++ 主线仓的规范**(18 家有 yaml 的仓里 13 家是 C++);29 个 Python/JS/TS 仓中仅 5 家有 yaml,且全部写范围/通配版本( >=1.21、1.26.x),唯一的 JS 仓(cann-recipes-harmony-infer)只有 Notice。删除后 5 处文档引用(SECURITY/CONTRIBUTING/scripts·README/sift NOTICE/根 Notice)同步清向 Notice。 ### ② Notice 重写为 CANN 社区标准登记模板 对齐 npu-simulator / oil-gas-ops-prospect 模板:标准开头段(开源许可优先于 EULA)+ Warranty Disclaimer + **逐组件登记块 48 个**: - vendored 派生源码 2 块:Anthropic skill-creator(Apache-2.0,修改披露与保留要求原样保留)、shadcn UI primitives(MIT) - sift Python 直依赖 7 块(typer/rich/pydantic/PyYAML/pytest 族) - **insight/cpx npm 直依赖 39 块——补上此前 npm 依赖在法律文件里零登记的缺口** 每块含 Software(名字+版本声明)/ Obtained from(上游 URL)/ Usage / Copyright notice(取自各包随附 LICENSE 文件;Apache 系包手写权威值)/ License;MIT、ISC 全文内联,Apache-2.0 指向仓内既有 packages/sift/LICENSES 全文。 ## 测试 纯文档变更(删 yaml + 重写 Notice),无代码/测试依赖(check-license.sh 未迁入,无脚本引用该 yaml)。 See merge request: cann/cannbot-sentry!102 | 26 天前 | |
feat(structure):建立仓库一级目录框架,补齐开源最小必要集 Co-authored-by: chenyangwang2<wangchenyang58@huawei.com> # message auto-generated for no-merge-commit merge: !1 merge add-license into master feat(structure):建立仓库一级目录框架,补齐开源最小必要集 Created-by: chenyangwang2 Commit-by: chenyangwang2 Merged-by: cann-robot Description: <!-- 感谢您的合入申请! --> ### 当前PR是否有AI参与: [ ] 否 [x] 是 __1. AI Agent 平台: opencode __2. AI 模型: GLM __3. Prompt上下文 : 建仓需求(开源 checklist、cannbot-skills 参考仓) ### PR功能描述 / 为什么需要这个合入**: <!-- 本 PR 做了什么,为什么需要 / What does this PR do and why --> 建仓首个提交,建立 CANNBot-Relay 一级目录框架,并补齐开源最小必要集: - 合规文件: LICENSE(CANN OSL 2.0)、双语 README(概述/源码下载/目录结构/贡献指南/安全声明/许可证/SIG/问题反馈)、CONTRIBUTING.md、SECURITY.md(公网地址声明表 + 文件权限参考)、.gitignore、OAT.xml - 目录框架:packages/insight(观测)、packages/cpx(网关·流量捕获)、packages/sift(审计·评测,规划中)、docs/、scripts/ - 统一安装入口 install.sh:支持单包 / 组合 / all,委托各包安装脚本 ### 该PR关联的issue *(格式为fixes #<issue号>, 或者resolves #<issue号>)*: fixes # ### 希望检视人员了解: - 本阶段仅落地框架与合规文件,不含包代码;packages/* 为占位 README,代码将自 cannbot-skills cannbot-insight 迁入 ## 改动类型 / Change Type - [ ] Bug 修复 / Bug Fix - [x] 新功能 / New Feature - [ ] 性能优化 / Performance - [ ] 代码重构 / Refactoring - [x] 文档更新 / Documentation - [ ] 测试相关 / Test - [ ] 其它 / Other ## 测试信息 / Testing <!-- 简要测试说明或关键结果 / Brief test description or key results --> - [ ] 单元测试通过 / UT passed(本阶段无代码,无 UT) - [ ] 集成测试通过 / ST passed(本阶段无代码,无 ST) - [x] 人工验证通过 / Manual verified(install.sh:help / 未知包报错 / 未迁入提示 / all 递归均验证;URL 声明表 grep 核验;LICENSE 与 cannbot-skills diff 一致) ## 检查清单 / Checklist - [x] 代码符合规范 / Code follows style guide - [ ] 测试添加并通过 / Tests added and passed(随代码迁移补充) - [x] 文档已更新 / Docs updated if needed - [x] 无硬编码敏感信息 / No secrets hardcoded - [x] 提交信息符合规范 / Commit message follows convention See merge request: cann/cannbot-relay!1 | 2 个月前 | |
infra(pre-commit): 引入 pre-commit/OAT 检查体系 Co-authored-by: gitcode_lijd<lijiandong20@huawei.com> # message auto-generated for no-merge-commit merge: !41 merge pre-commit into master infra(pre-commit): 引入 pre-commit/OAT 检查体系 Created-by: gitcode_lijd Commit-by: gitcode_lijd Merged-by: cann-robot Description: 关联Issue https://gitcode.com/cann/cannbot-sentry/issues/14 ## 背景 仓内无提交期检查(Issue #14)。引入 pre-commit + OAT 检查体系(skills-dev PR#191 已合入的同款实现,含批扫描修复/Left 口径等全部后续修订),经本仓 --all-files 全量实测校准。1 笔提交,8 文件 +953/-2。 ## 改动清单 | 件 | 内容 | |---|---| | .pre-commit-config.yaml | 五套钩子:pre-commit-hooks(7 项,trailing-whitespace 保 md 硬换行)、clang-format v18.1.8、ruff v0.14.14(豁免 8 项、F 系列全启用)、codespell v2.4.1(只查 md+yaml)、OAT 合规(local hook) | | OAT.xml | Huawei 版权策略项 + yaml/yml/csv/png/mjs 豁免;本仓增:requirements*.txt、*.jsonl(数据文件)、.npmignore(点文件)头豁免;png、*.jsonl.gz(**UT 固件压缩会话日志**)、.npmignore 二进制豁免 | | scripts/oat_check.sh | OAT 增量扫描:PR-range 自适应、done-marker **四守卫**、**120KB 自动分批 + 失败阻塞 + 数组传参**、失败留证 pre-commit_reports/oat_result.txt | | scripts/run_codespell.sh | codespell 输出 tee 到 pre-commit_reports/codespell.log | | scripts/format_cpp.sh | C++ 批量格式化(目录不存在报错退出;本仓暂无可格式化文件) | | .clang-format | Google 基线 + PointerAlignment: Left(int* p 指针随类型) | | docs/pre-commit_guide.md | 使用指南(快速使用/排查/FAQ/存量债增量治理) | | .gitignore | 忽略 pre-commit_reports/ | ## 校准结果(--all-files 实测) - 私钥 / check-json / check-yaml:全过 - codespell:14 命中中 afterAll/pressEnter 为 Jest/Playwright API 标识符(文档引述测试代码)入白名单,余 0 - ruff:仅 24 条全真问题残留(E741 17/F841 6/F401 1),存量债 - OAT:豁免非债务类后残留 159 条全真存量债(ts 89 / tsx 29 / sh 3 / txt 5 等缺头)——增量消化 ## 验证 - 本提交自身过全部钩子(含 OAT 分批真实扫描);yaml/xml/bash 语法全过 See merge request: cann/cannbot-sentry!41 | 1 个月前 | |
[feat] 多人服务器部署(每用户一实例):端口登记发现契约 + 随会话零残留;会话归属 meta 持久化根治 + 字体离线化 Co-authored-by: duanbingzhe<duanbingzhe@huawei.com> # message auto-generated for no-merge-commit merge: !98 merge UGreen into master [feat] 多人服务器部署(每用户一实例):端口登记发现契约 + 随会话零残留;会话归属 meta 持久化根治 + 字体离线化 Created-by: duanbingzhe Commit-by: duanbingzhe Merged-by: cann-robot Description: 描述: ## 新增功能 ### 多人服务器部署(每用户一实例) 一台服务器多人各自使用:每人一实例,数据/凭据随 HOME 与 checkout 完全隔离(团队共享视角由数据湖承担)。部署指南 docs/multi-user-server.md,设计文档 docs/design/multi-user/。 - **端口固定不漂移**:CANNBOT_INSIGHT_PORT 按人分配(默认 21025 不变),被占直接报错给出处理指引——旧版静默换端口会让 cpx 导入与浏览器书签指错实例 - **端口登记发现契约**:服务就绪后写 ~/.cannbot-insight/insight-port;cpx 自动导入(新模块 insight-discovery:env → 登记 → 21025 兜底)与 cbi 默认连接(flag > env > config.json > 登记 > 默认)零配置对准自己的实例;单人本机无登记文件,行为不变 - **关闭即零残留**:trap 补 HUP(SSH 断开/关终端当场清干净全部子进程,治 smart-agent 残留半天的病根)+ 孤儿扫尾与 TERM→KILL 升级 + --stop 显式停止(start.sh 与 cbi 双形态);杀伤全部锚定(cwd/端口/精确 PID),多人互不误杀有 e2e 隔离锁 - **npm 形态(cbi)补齐**:smart-agent 每次全新拉起;修复每次启动白跑完整构建 30s~2min(Next 16 Turbopack 构建产物探测落空——产物回归 .next,二次启动秒级);修复 --server 分层解析失效(Commander 默认值致 env 与 config.json 从未生效) ## 修复的问题 - **会话归属污染两连修** - 导入列表提交人被 CANNBay Viewer 保存标记顶掉(显示成 lake-viewer、描述变 notes(viewer): …、时间平移到保存时刻)——归属跳过 viewer 维护提交,保持最后一条真实上传的提交信息;覆盖重传仍正常更新 - 根治:提交人/内容描述/备注随会话 meta 持久化(spec §4.4 可选字段,与 commit message 同源同值),导入列表/运行表/备注面板一律 **meta 优先、git log 推导回落**(存量会话零迁移、行为不变)——普通格式维护提交(指标回填、baseline 搬移)不再污染归属;「同内容 → unchanged」幂等判定随之包含提交信息 - **字体离线化**:geist 改 npm 包本地分发,构建期零联网——无法访问 Google Fonts 的环境不再构建失败;顺带修复 Geist Sans 因 CSS 变量未接线从未生效 ## 测试债清理 - 清零 4 个存量 e2e 失败(单源化迁移漏网的 env 切换、恒多根/存量区语义断言过时、mock 停在旧端点)——均为测试侧对齐,产品代码零行为改动 ## chore - CHANGELOG v0.2.37 / v0.1.8 定版收口(Unreleased 条目并入版本段) See merge request: cann/cannbot-sentry!98 | 26 天前 | |
[feat] 多人服务器部署(每用户一实例):端口登记发现契约 + 随会话零残留;会话归属 meta 持久化根治 + 字体离线化 Co-authored-by: duanbingzhe<duanbingzhe@huawei.com> # message auto-generated for no-merge-commit merge: !98 merge UGreen into master [feat] 多人服务器部署(每用户一实例):端口登记发现契约 + 随会话零残留;会话归属 meta 持久化根治 + 字体离线化 Created-by: duanbingzhe Commit-by: duanbingzhe Merged-by: cann-robot Description: 描述: ## 新增功能 ### 多人服务器部署(每用户一实例) 一台服务器多人各自使用:每人一实例,数据/凭据随 HOME 与 checkout 完全隔离(团队共享视角由数据湖承担)。部署指南 docs/multi-user-server.md,设计文档 docs/design/multi-user/。 - **端口固定不漂移**:CANNBOT_INSIGHT_PORT 按人分配(默认 21025 不变),被占直接报错给出处理指引——旧版静默换端口会让 cpx 导入与浏览器书签指错实例 - **端口登记发现契约**:服务就绪后写 ~/.cannbot-insight/insight-port;cpx 自动导入(新模块 insight-discovery:env → 登记 → 21025 兜底)与 cbi 默认连接(flag > env > config.json > 登记 > 默认)零配置对准自己的实例;单人本机无登记文件,行为不变 - **关闭即零残留**:trap 补 HUP(SSH 断开/关终端当场清干净全部子进程,治 smart-agent 残留半天的病根)+ 孤儿扫尾与 TERM→KILL 升级 + --stop 显式停止(start.sh 与 cbi 双形态);杀伤全部锚定(cwd/端口/精确 PID),多人互不误杀有 e2e 隔离锁 - **npm 形态(cbi)补齐**:smart-agent 每次全新拉起;修复每次启动白跑完整构建 30s~2min(Next 16 Turbopack 构建产物探测落空——产物回归 .next,二次启动秒级);修复 --server 分层解析失效(Commander 默认值致 env 与 config.json 从未生效) ## 修复的问题 - **会话归属污染两连修** - 导入列表提交人被 CANNBay Viewer 保存标记顶掉(显示成 lake-viewer、描述变 notes(viewer): …、时间平移到保存时刻)——归属跳过 viewer 维护提交,保持最后一条真实上传的提交信息;覆盖重传仍正常更新 - 根治:提交人/内容描述/备注随会话 meta 持久化(spec §4.4 可选字段,与 commit message 同源同值),导入列表/运行表/备注面板一律 **meta 优先、git log 推导回落**(存量会话零迁移、行为不变)——普通格式维护提交(指标回填、baseline 搬移)不再污染归属;「同内容 → unchanged」幂等判定随之包含提交信息 - **字体离线化**:geist 改 npm 包本地分发,构建期零联网——无法访问 Google Fonts 的环境不再构建失败;顺带修复 Geist Sans 因 CSS 变量未接线从未生效 ## 测试债清理 - 清零 4 个存量 e2e 失败(单源化迁移漏网的 env 切换、恒多根/存量区语义断言过时、mock 停在旧端点)——均为测试侧对齐,产品代码零行为改动 ## chore - CHANGELOG v0.2.37 / v0.1.8 定版收口(Unreleased 条目并入版本段) See merge request: cann/cannbot-sentry!98 | 26 天前 | |
[docs] 三方件合规文档删除 List.yaml、Notice 对齐 CANN 社区标准登记模板 Co-authored-by: guanxinghua<guanxinghua@huawei.com> # message auto-generated for no-merge-commit merge: !102 merge third-party-yaml-versiondel into master [docs] 三方件合规文档删除 List.yaml、Notice 对齐 CANN 社区标准登记模板 Created-by: guanxinghua Commit-by: guanxinghua Merged-by: cann-robot Description: ## 概要 三方件合规文档收敛为 **Notice 单源**,两步: ### ① 删除 Third_Party_Open_Source_Software_List.yaml 社区普查(CANN 84 仓):**List.yaml 基本是 C++ 主线仓的规范**(18 家有 yaml 的仓里 13 家是 C++);29 个 Python/JS/TS 仓中仅 5 家有 yaml,且全部写范围/通配版本( >=1.21、1.26.x),唯一的 JS 仓(cann-recipes-harmony-infer)只有 Notice。删除后 5 处文档引用(SECURITY/CONTRIBUTING/scripts·README/sift NOTICE/根 Notice)同步清向 Notice。 ### ② Notice 重写为 CANN 社区标准登记模板 对齐 npu-simulator / oil-gas-ops-prospect 模板:标准开头段(开源许可优先于 EULA)+ Warranty Disclaimer + **逐组件登记块 48 个**: - vendored 派生源码 2 块:Anthropic skill-creator(Apache-2.0,修改披露与保留要求原样保留)、shadcn UI primitives(MIT) - sift Python 直依赖 7 块(typer/rich/pydantic/PyYAML/pytest 族) - **insight/cpx npm 直依赖 39 块——补上此前 npm 依赖在法律文件里零登记的缺口** 每块含 Software(名字+版本声明)/ Obtained from(上游 URL)/ Usage / Copyright notice(取自各包随附 LICENSE 文件;Apache 系包手写权威值)/ License;MIT、ISC 全文内联,Apache-2.0 指向仓内既有 packages/sift/LICENSES 全文。 ## 测试 纯文档变更(删 yaml + 重写 Notice),无代码/测试依赖(check-license.sh 未迁入,无脚本引用该 yaml)。 See merge request: cann/cannbot-sentry!102 | 26 天前 | |
[docs] 三方件合规文档删除 List.yaml、Notice 对齐 CANN 社区标准登记模板 Co-authored-by: guanxinghua<guanxinghua@huawei.com> # message auto-generated for no-merge-commit merge: !102 merge third-party-yaml-versiondel into master [docs] 三方件合规文档删除 List.yaml、Notice 对齐 CANN 社区标准登记模板 Created-by: guanxinghua Commit-by: guanxinghua Merged-by: cann-robot Description: ## 概要 三方件合规文档收敛为 **Notice 单源**,两步: ### ① 删除 Third_Party_Open_Source_Software_List.yaml 社区普查(CANN 84 仓):**List.yaml 基本是 C++ 主线仓的规范**(18 家有 yaml 的仓里 13 家是 C++);29 个 Python/JS/TS 仓中仅 5 家有 yaml,且全部写范围/通配版本( >=1.21、1.26.x),唯一的 JS 仓(cann-recipes-harmony-infer)只有 Notice。删除后 5 处文档引用(SECURITY/CONTRIBUTING/scripts·README/sift NOTICE/根 Notice)同步清向 Notice。 ### ② Notice 重写为 CANN 社区标准登记模板 对齐 npu-simulator / oil-gas-ops-prospect 模板:标准开头段(开源许可优先于 EULA)+ Warranty Disclaimer + **逐组件登记块 48 个**: - vendored 派生源码 2 块:Anthropic skill-creator(Apache-2.0,修改披露与保留要求原样保留)、shadcn UI primitives(MIT) - sift Python 直依赖 7 块(typer/rich/pydantic/PyYAML/pytest 族) - **insight/cpx npm 直依赖 39 块——补上此前 npm 依赖在法律文件里零登记的缺口** 每块含 Software(名字+版本声明)/ Obtained from(上游 URL)/ Usage / Copyright notice(取自各包随附 LICENSE 文件;Apache 系包手写权威值)/ License;MIT、ISC 全文内联,Apache-2.0 指向仓内既有 packages/sift/LICENSES 全文。 ## 测试 纯文档变更(删 yaml + 重写 Notice),无代码/测试依赖(check-license.sh 未迁入,无脚本引用该 yaml)。 See merge request: cann/cannbot-sentry!102 | 26 天前 | |
Rename cannbot-relay to cannbot-sentry across the repo Co-authored-by: chenyangwang2<wangchenyang58@huawei.com> # message auto-generated for no-merge-commit merge: !3 merge rename-repo into master Rename cannbot-relay to cannbot-sentry across the repo Created-by: chenyangwang2 Commit-by: chenyangwang2 Merged-by: cann-robot Description: <!-- 感谢您的合入申请! --> ### 当前PR是否有AI参与: [x] 否 [ ] 是 __1. AI Agent 平台: __2. AI 模型: __3. Prompt上下文 : ### PR功能描述 / 为什么需要这个合入**: <!-- 本 PR 做了什么,为什么需要 / What does this PR do and why --> 仓库已更名为 cannbot-sentry,本 PR 将全仓残留的旧名 cannbot-relay / CANNBot-Relay 统一更新为 cannbot-sentry / CANNBot-Sentry ### 该PR关联的issue *(格式为fixes #<issue号>, 或者resolves #<issue号>)*: fixes # ### 希望检视人员了解: ## 改动类型 / Change Type - [ ] Bug 修复 / Bug Fix - [ ] 新功能 / New Feature - [ ] 性能优化 / Performance - [ ] 代码重构 / Refactoring - [x] 文档更新 / Documentation - [ ] 测试相关 / Test - [ ] 其它 / Other ## 测试信息 / Testing <!-- 简要测试说明或关键结果 / Brief test description or key results --> - [ ] 单元测试通过 / UT passed - [ ] 集成测试通过 / ST passed - [x] 人工验证通过 / Manual verified ## 检查清单 / Checklist - [x] 代码符合规范 / Code follows style guide - [x] 测试添加并通过 / Tests added and passed - [x] 文档已更新 / Docs updated if needed - [x] 无硬编码敏感信息 / No secrets hardcoded - [x] 提交信息符合规范 / Commit message follows convention See merge request: cann/cannbot-sentry!3 | 1 个月前 |
CANNBot-Sentry
CANNBot 是 CANN 社区的 Infra 智能体层,用 Agent 完成 AscendC/PyPTO/TileLang/Triton 等各类语言的算子开发、模型迁移与推理优化,并延伸至图模式、Runtime 等更多 CANN 开发场景。
本仓(cannbot-sentry)是其观测仓,面向 LLM 编码 Agent(opencode / Claude Code)提供观测 · 审计 · 评测能力;仓群还包括 cannbot、cannbot-skills、cannbot-knowledge、cannbot-dsl、cann-bench 等仓库,结构如下。

Agent 在场上跑,Sentry 在场边:记录现场 · 复盘事实 · 评鉴质量。
仓库状态:
packages/insight与packages/cpx已迁入落地(并已发布 npm);packages/sift(审计 / 评测)规划中、待迁入,详见目录结构。
核心能力
| 能力 | 回答的问题 | 亮点 |
|---|---|---|
| 观测 Observe(packages/insight) | 运行中发生了什么? | 全量画像:Token · 成本 · 上下文;Turn / Tool / Skill 可回放时间线;按时间戳重建文件现场(取证) |
| 捕获 Capture(packages/cpx) | 线上到底传了什么? | 网关旁路捕获全量上下文请求/响应;API Key 永不落盘(唯一落盘咽喉统一打码) |
| 审计 Audit(packages/sift) | 有没有按声明做? | 双重校验:流程合规 + 结果一致;执行 vs 声明(Skill · Agent · Workflow)对账,证据回链 |
| 评测 Evaluate(packages/sift) | 做得好不好? | 静态:分析 + 安全审查(规则驱动);动态:A/B —— 有无 Skill · 版本对比;判决报告 + CI 门禁 |
原则:零侵入 —— 不改 Agent 工作流、不改 opencode / Claude Code,能力叠加其上;本地优先 —— 只读取本地会话记录,数据不出域。
多人就绪:一台服务器多人可各自运行隔离实例——每人固定端口、数据与凭据随 HOME 隔离、捕获自动导入绝不串人(packages/insight/docs/multi-user-server.md)。
源码下载
git clone https://gitcode.com/cann/cannbot-sentry.git
cd cannbot-sentry
安装
npm(免克隆源码)——已发布到公共 npm registry,一条命令安装:
npm install -g cannbot-insight # insight 观测平台(cannbot-insight / cbi)
npm install -g cannbot-proxy # cpx 捕获代理(cpx)
# Context 品牌同款(会话数据完全互通):
npm install -g context-insight # insight 观测平台(context-insight / ctxi)
npm install -g context-cpx # cpx 捕获代理(cpx)
Tab 补全在安装时自动装配(bash/zsh),新开终端 cpx <TAB> 即可用。
源码安装——统一安装入口支持单包 / 组合 / 全量三种方式:
./install.sh insight # 安装单个包
./install.sh insight cpx # 组合安装
./install.sh all # 全量安装
insight 与 cpx 现已可安装;sift 待迁入暂为占位。各包前置要求见其 README。
目录结构
Monorepo,packages/ 下一个目录 = 一个独立安装包。包间零 import、零构建依赖,仅通过运行时契约(数据格式、CLI 接口)耦合。
cannbot-sentry/
├── README.md / README-zh.md # 双语总览 · 导航与安装
├── LICENSE # CANN OSL 2.0 · 全仓唯一
├── CONTRIBUTING.md # 贡献指南(Issue / PR 规范)
├── SECURITY.md # 安全声明
├── OAT.xml / .gitignore # 合规扫描 · 忽略规则
├── install.sh # 统一安装:单包 / 组合 / all
├── scripts/ # 治理脚本(许可证门禁等)
├── docs/ # 跨包文档(架构 · 安装)
└── packages/
├── insight/ # 会话洞察 · 观测
├── cpx/ # 网关 · 流量捕获
└── sift/ # 审计 · 评测
拓展 Sentry = 在 packages/ 下新增一个包,即插即用。
贡献指南
欢迎提交 Issue 与 PR。贡献流程、Issue/PR 规范与质量门槛见贡献指南。
问题反馈
- GitCode Issue — Bug / 功能建议 / 文档问题
- CANNBot SIG — 社区治理与项目方向
许可证
基于 CANN Open Software License v2.0 发布,见 LICENSE。