文件最后提交记录最后更新时间
feat(tests/system): ST 框架新增正向看护能力(skill_activated 程序化断言 + Distractor 沙箱注入) Co-authored-by: hello_simida<wangyi206@huawei.com> Co-authored-by: zzZzz__zzZzz<821946509@qq.com> # message auto-generated for no-merge-commit merge: !254 merge skilltest into master feat(tests/system): ST 框架新增正向看护能力(skill_activated 程序化断言 + Distractor 沙箱注入) Created-by: zzZzz__zzZzz Commit-by: zzZzz__zzZzz;hello_simida Merged-by: cann-robot Description: ## 描述 本 PR 在 ST 框架现有的双 Phase 验证(静态结构 + AI 语义评测)基础上,新增 **正向看护(Forward Verification)能力** —— 验证 AI 在多个干扰 skill 同时可用的真实环境中,仍能正确选择并激活目标 skill。同时修复了 ST 文档与实际代码不一致的多处问题,并优化了评测报告的错误展示。 正向看护采用**程序化断言**(不依赖 AI 评审模型):从导出的 session JSON 中精确匹配 tool=skill 事件的 state.input.name,给出确定性判断。 ### 新特性 New Features - 【tests/system 程序化断言】test_skill_evals.py 新增 [skill_activated] 类型 Expectation:从 ses.json 解析所有 tool=skill 事件的 state.input.name(fallback 到 state.metadata.name),与期望 skill 名严格匹配;失败时列出实际激活的 skill 列表辅助定位。 - 【tests/system Distractor 配置】evals_parser.py 新增解析 case-level ## Config - Distractor skills: a;b;csandbox_manager 支持在沙箱 .opencode/skills/ 下同时部署目标 + 多个 distractor skill 的目录树(默认软链接,不重复复制)。 - 【tests/system HTML 正向看护块】conftest.py 新增 _parse_skill_activated_block 钩子,将正向看护失败渲染为紫色专属块:清晰展示"期望激活"vs"实际加载"对比 + 失败原因提示,与普通 contains/file 类失败块视觉区分。 - 【tests/system 示例用例】cases/cann-env-setup_evals.md 新增 Case 7「正向看护 - 多 skill 环境下正确触发目标 skill」:4 个 distractor + [skill_activated] cann-env-setup 断言。 ### 特性增强 - 【tests/system 报告优化】所有断言错误改为中文 + 过滤无关 traceback 行,提升评审可读性。 - 【tests/system 配置修复】skill-test.configskill_dirs 路径 model/skills 修正为 model,与实际仓库目录结构对齐。 - 【tests/system 静态验证扩展】test_skill_basic.py 新增 test_eval_cases_distractor_skills_valid —— 校验 distractor skill 名称在仓库中真实存在。 ### 文档更新 - 【tests/system ST 设计指南】ST_DESIGN_AND_DEVELOPMENT_GUIDE.md 大幅修订:补充缺失 skill 项、修正用例计数、移除无效引用、新增正向看护章节(+173/-97 行)。 ## 关联的Issue <!-- 暂未关联 Issue --> ## 测试 - **Phase 1 静态验证**:36/36 PASSED(含新增 distractor 字段校验) - **_validate_skill_activated 单元行为**:6 种场景人工注入 session JSON 验证全部符合预期(命中 input.name / 命中 metadata.name fallback / 加载错误 skill / 未加载任何 skill / 多 skill 命中 / 空 pattern 配置错误) - **沙箱多 skill 部署**:Case 7 的 1 目标 + 4 distractor 全部在 .opencode/skills/ 下完成软链接部署,SKILL.md 均可达 - **HTML 正向看护块渲染**:手工注入失败 longrepr 后 _parse_skill_activated_block 输出正确包含期望/实际对比与紫色样式 - **main.py 主流程**:Phase 1 → Phase 2 → 归档 zip 编排正常,exit code 反映失败状态 - **evals_parser 字段提取**:Case 7 正确解析出 distractor_skills=[ascendc-task-focus, npu-arch, ascendc-docs-search, ascendc-runtime-debug][skill_activated] cann-env-setup ## 文档更新 - 更新 tests/system/docs/ST_DESIGN_AND_DEVELOPMENT_GUIDE.md:补充正向看护章节、修正用例计数、移除无效引用。 ## 类型标签 <!-- [x] 表示选中 --> - [x] 🌟 新特性 - [x] ✨ 特性增强 - [ ] 🐛 Bug 修复 - [ ] ⚡ 性能优化 - [x] 🧪 测试用例 - [ ] 📦 构建 / CI - [x] 📝 文档更新 - [x] 🔧 配置变更 - [ ] ⬆️ 依赖升级 - [ ] 🔒 安全修复 - [ ] ♻️ 代码重构 - [ ] 🧹 代码清理 - [ ] ❓ 其他,请描述: ## 流水线故障排查 <!-- 如果下方的流水线检查未通过,可参考以下指引进行自助修复 --> > **UT_Test 未通过?** > 请在下方流水线表格的 **UT_Test** 行,点击右侧的 >>>>> 下载 **CANNBot-skills UT 测试报告**(HTML 格式)。 > 打开报告后,展开页面中的「UT Test 失败修复指南」,复制其中的提示词并粘贴给 Agent,Agent 将根据日志自动定位并修复问题。 See merge request: cann/cannbot-skills!2547 天前
feat(tests/system): ST 框架新增正向看护能力(skill_activated 程序化断言 + Distractor 沙箱注入) Co-authored-by: hello_simida<wangyi206@huawei.com> Co-authored-by: zzZzz__zzZzz<821946509@qq.com> # message auto-generated for no-merge-commit merge: !254 merge skilltest into master feat(tests/system): ST 框架新增正向看护能力(skill_activated 程序化断言 + Distractor 沙箱注入) Created-by: zzZzz__zzZzz Commit-by: zzZzz__zzZzz;hello_simida Merged-by: cann-robot Description: ## 描述 本 PR 在 ST 框架现有的双 Phase 验证(静态结构 + AI 语义评测)基础上,新增 **正向看护(Forward Verification)能力** —— 验证 AI 在多个干扰 skill 同时可用的真实环境中,仍能正确选择并激活目标 skill。同时修复了 ST 文档与实际代码不一致的多处问题,并优化了评测报告的错误展示。 正向看护采用**程序化断言**(不依赖 AI 评审模型):从导出的 session JSON 中精确匹配 tool=skill 事件的 state.input.name,给出确定性判断。 ### 新特性 New Features - 【tests/system 程序化断言】test_skill_evals.py 新增 [skill_activated] 类型 Expectation:从 ses.json 解析所有 tool=skill 事件的 state.input.name(fallback 到 state.metadata.name),与期望 skill 名严格匹配;失败时列出实际激活的 skill 列表辅助定位。 - 【tests/system Distractor 配置】evals_parser.py 新增解析 case-level ## Config - Distractor skills: a;b;csandbox_manager 支持在沙箱 .opencode/skills/ 下同时部署目标 + 多个 distractor skill 的目录树(默认软链接,不重复复制)。 - 【tests/system HTML 正向看护块】conftest.py 新增 _parse_skill_activated_block 钩子,将正向看护失败渲染为紫色专属块:清晰展示"期望激活"vs"实际加载"对比 + 失败原因提示,与普通 contains/file 类失败块视觉区分。 - 【tests/system 示例用例】cases/cann-env-setup_evals.md 新增 Case 7「正向看护 - 多 skill 环境下正确触发目标 skill」:4 个 distractor + [skill_activated] cann-env-setup 断言。 ### 特性增强 - 【tests/system 报告优化】所有断言错误改为中文 + 过滤无关 traceback 行,提升评审可读性。 - 【tests/system 配置修复】skill-test.configskill_dirs 路径 model/skills 修正为 model,与实际仓库目录结构对齐。 - 【tests/system 静态验证扩展】test_skill_basic.py 新增 test_eval_cases_distractor_skills_valid —— 校验 distractor skill 名称在仓库中真实存在。 ### 文档更新 - 【tests/system ST 设计指南】ST_DESIGN_AND_DEVELOPMENT_GUIDE.md 大幅修订:补充缺失 skill 项、修正用例计数、移除无效引用、新增正向看护章节(+173/-97 行)。 ## 关联的Issue <!-- 暂未关联 Issue --> ## 测试 - **Phase 1 静态验证**:36/36 PASSED(含新增 distractor 字段校验) - **_validate_skill_activated 单元行为**:6 种场景人工注入 session JSON 验证全部符合预期(命中 input.name / 命中 metadata.name fallback / 加载错误 skill / 未加载任何 skill / 多 skill 命中 / 空 pattern 配置错误) - **沙箱多 skill 部署**:Case 7 的 1 目标 + 4 distractor 全部在 .opencode/skills/ 下完成软链接部署,SKILL.md 均可达 - **HTML 正向看护块渲染**:手工注入失败 longrepr 后 _parse_skill_activated_block 输出正确包含期望/实际对比与紫色样式 - **main.py 主流程**:Phase 1 → Phase 2 → 归档 zip 编排正常,exit code 反映失败状态 - **evals_parser 字段提取**:Case 7 正确解析出 distractor_skills=[ascendc-task-focus, npu-arch, ascendc-docs-search, ascendc-runtime-debug][skill_activated] cann-env-setup ## 文档更新 - 更新 tests/system/docs/ST_DESIGN_AND_DEVELOPMENT_GUIDE.md:补充正向看护章节、修正用例计数、移除无效引用。 ## 类型标签 <!-- [x] 表示选中 --> - [x] 🌟 新特性 - [x] ✨ 特性增强 - [ ] 🐛 Bug 修复 - [ ] ⚡ 性能优化 - [x] 🧪 测试用例 - [ ] 📦 构建 / CI - [x] 📝 文档更新 - [x] 🔧 配置变更 - [ ] ⬆️ 依赖升级 - [ ] 🔒 安全修复 - [ ] ♻️ 代码重构 - [ ] 🧹 代码清理 - [ ] ❓ 其他,请描述: ## 流水线故障排查 <!-- 如果下方的流水线检查未通过,可参考以下指引进行自助修复 --> > **UT_Test 未通过?** > 请在下方流水线表格的 **UT_Test** 行,点击右侧的 >>>>> 下载 **CANNBot-skills UT 测试报告**(HTML 格式)。 > 打开报告后,展开页面中的「UT Test 失败修复指南」,复制其中的提示词并粘贴给 Agent,Agent 将根据日志自动定位并修复问题。 See merge request: cann/cannbot-skills!2547 天前
fix: 修复测试框架评测报告评分解析与 session 导出问题,优化 opencode 工作空间 Co-authored-by: hello_simida<wangyi206@huawei.com> # message auto-generated for no-merge-commit merge: !278 merge master into master fix: 修复测试框架评测报告评分解析与 session 导出问题,优化 opencode 工作空间 Created-by: hello_simida Commit-by: hello_simida Merged-by: cann-robot Description: ## 描述 本次 PR 包含以下改进: ### 1. 修复评测报告评分解析与 session 导出问题 - 修复 test_skill_evals.py 中评分解析逻辑 - 优化 conftest.py 配置管理 - 改进 main.py 评测流程控制 - 完善 opencode_runner.py 执行器 - 增强 sandbox_manager.py 沙箱管理 ### 2. 优化 opencode 执行工作空间 - 优化工作空间管理逻辑 - 提升执行环境稳定性 ### 3. 测试系统文档与安全改进 - 更新 tests/system/README.md 文档 - 移除废弃的测试用例 ascendc-task-focus_evals.md - 安全相关改进 ## 关联的Issue 无 ## 测试 测试框架内部改进,通过 CI 验证。 ## 文档更新 更新了 tests/system/README.md。 ## 类型标签 - [x] 🐛 Bug 修复 - [ ] ✨ 新特性 - [ ] ⚡ 性能优化 - [ ] ♻️ 重构 - [ ] 🧪 测试 - [ ] 📦 构建/CI - [ ] 🔧 配置变更 - [ ] 📝 文档更新 - [ ] ⬆️ 依赖升级 - [x] 🔒 安全修复 - [ ] 🧹 代码清理 - [ ] ❓ 其他,请描述: <!-- CODE_REVIEW_REPORT --> ## 🤖 自动代码检视报告 **检视状态:** 完成 ✅ **摘要:** - 检视文件数:7 个 - 发现风险点:3 个(CRITICAL: 0, HIGH: 0, MEDIUM: 2, LOW: 1) --- ### 变更概览 | 文件 | 变更行数 | 主要内容 | |------|---------|---------| | README.md | +128/-70 | 文档全面更新:沙箱机制、HTML 报告、配置说明 | | ascendc-task-focus_evals.md | +0/-22 | 移除格式错误的废弃期望断言 | | main.py | +38/-20 | 新增 --report-only 模式;提取 _eval_skills() 降低函数复杂度 | | conftest.py | +60/-10 | 新增 _find_json_by_depth() 深度追踪 JSON 解析;增强 JSON 修复兼容性;raw_output 包装容错 | | opencode_runner.py | +48/-15 | 新增 _safe_env() 安全环境隔离;-- 分隔 prompt 防 CLI 注入;导出超时容错 + 部分数据保留 | | sandbox_manager.py | +33/-4 | 沙箱安全加固:写入 opencode.json 工具权限白名单;skill 副本移至 .opencode/skills/ | | test_skill_evals.py | +65/-41 | 新增 _validate_prompt() 安全校验;提取 _setup_eval_sandbox();REPORT_ONLY 模式支持 | --- ### 详细问题列表 | 文件 | 行号 | 风险等级 | 问题类型 | 描述 | |------|------|---------|---------|------| | opencode_runner.py | 551 | MEDIUM | 安全配置 | --dangerously-skip-permissions 绕过了 opencode 内置权限提示系统。当前由 sandbox_manager.py 的 opencode.json 工具白名单(deny bash/websearch/webfetch 等)作为补偿控制。建议在代码注释中显式说明这一依赖关系,防止未来单独修改任一端导致安全漏洞。 | | opencode_runner.py | 496-501 | MEDIUM | 环境变量白名单 | _safe_env() 采用显式白名单方式传递环境变量,当前仅保留 PATH/HOME/USER 等 10 个基础变量。若未来 opencode 或评测框架需要额外的环境变量(如代理设置、自定义路径),可能导致静默失败。建议添加可配置的额外变量列表或提供覆盖机制。 | | test_skill_evals.py | 38-68 | LOW | 可维护性 | _validate_prompt() 新增了 4 项安全检查(长度上限、前导空白、控制字符、CLI 注入),设计合理。建议在文档中补充各检查项的触发阈值和错误信息示例,便于用例编写者排查问题。 | --- ### 正面发现 1. **沙箱安全隔离** (sandbox_manager.py): 通过在沙箱中写入 opencode.json 配置,deny bash/websearch/webfetch/repo_clone/external_directory/question 等危险工具,结合 --dangerously-skip-permissions 实现自动化评测的同时保持了安全边界。设计合理。 2. **Prompt 注入防护** (test_skill_evals.py + opencode_runner.py): 双重防护 — _validate_prompt() 拒绝控制字符和 - 开头的 prompt,_run_command() 使用 -- 分隔符防止 prompt 被解析为 CLI 参数。 3. **JSON 解析鲁棒性** (conftest.py): _find_json_by_depth() 正确处理字符串值内的花括号(如 ${ASCEND_HOME_PATH}),使用 early continue 降低嵌套深度,代码清晰。 4. **超时容错** (opencode_runner.py): 导出超时时保留部分数据(returncode -1),避免评测结果完全丢失。 5. **方法提取重构** (main.py + test_skill_evals.py): _eval_skills()_setup_eval_sandbox() 的提取不改变业务逻辑,纯重构降低函数复杂度,代码审查友好。 --- **检视信息:** - Agent: Claude Code CLI - Model: deepseek-v4-flash[1m] - Skill: cann-community-helper (code review workflow) 💡 此报告由 cann-community-helper code review workflow 自动生成,仅供参考。 <!-- /CODE_REVIEW_REPORT --> See merge request: cann/cannbot-skills!2789 天前
fix: 修复测试框架评测报告评分解析与 session 导出问题,优化 opencode 工作空间 Co-authored-by: hello_simida<wangyi206@huawei.com> # message auto-generated for no-merge-commit merge: !278 merge master into master fix: 修复测试框架评测报告评分解析与 session 导出问题,优化 opencode 工作空间 Created-by: hello_simida Commit-by: hello_simida Merged-by: cann-robot Description: ## 描述 本次 PR 包含以下改进: ### 1. 修复评测报告评分解析与 session 导出问题 - 修复 test_skill_evals.py 中评分解析逻辑 - 优化 conftest.py 配置管理 - 改进 main.py 评测流程控制 - 完善 opencode_runner.py 执行器 - 增强 sandbox_manager.py 沙箱管理 ### 2. 优化 opencode 执行工作空间 - 优化工作空间管理逻辑 - 提升执行环境稳定性 ### 3. 测试系统文档与安全改进 - 更新 tests/system/README.md 文档 - 移除废弃的测试用例 ascendc-task-focus_evals.md - 安全相关改进 ## 关联的Issue 无 ## 测试 测试框架内部改进,通过 CI 验证。 ## 文档更新 更新了 tests/system/README.md。 ## 类型标签 - [x] 🐛 Bug 修复 - [ ] ✨ 新特性 - [ ] ⚡ 性能优化 - [ ] ♻️ 重构 - [ ] 🧪 测试 - [ ] 📦 构建/CI - [ ] 🔧 配置变更 - [ ] 📝 文档更新 - [ ] ⬆️ 依赖升级 - [x] 🔒 安全修复 - [ ] 🧹 代码清理 - [ ] ❓ 其他,请描述: <!-- CODE_REVIEW_REPORT --> ## 🤖 自动代码检视报告 **检视状态:** 完成 ✅ **摘要:** - 检视文件数:7 个 - 发现风险点:3 个(CRITICAL: 0, HIGH: 0, MEDIUM: 2, LOW: 1) --- ### 变更概览 | 文件 | 变更行数 | 主要内容 | |------|---------|---------| | README.md | +128/-70 | 文档全面更新:沙箱机制、HTML 报告、配置说明 | | ascendc-task-focus_evals.md | +0/-22 | 移除格式错误的废弃期望断言 | | main.py | +38/-20 | 新增 --report-only 模式;提取 _eval_skills() 降低函数复杂度 | | conftest.py | +60/-10 | 新增 _find_json_by_depth() 深度追踪 JSON 解析;增强 JSON 修复兼容性;raw_output 包装容错 | | opencode_runner.py | +48/-15 | 新增 _safe_env() 安全环境隔离;-- 分隔 prompt 防 CLI 注入;导出超时容错 + 部分数据保留 | | sandbox_manager.py | +33/-4 | 沙箱安全加固:写入 opencode.json 工具权限白名单;skill 副本移至 .opencode/skills/ | | test_skill_evals.py | +65/-41 | 新增 _validate_prompt() 安全校验;提取 _setup_eval_sandbox();REPORT_ONLY 模式支持 | --- ### 详细问题列表 | 文件 | 行号 | 风险等级 | 问题类型 | 描述 | |------|------|---------|---------|------| | opencode_runner.py | 551 | MEDIUM | 安全配置 | --dangerously-skip-permissions 绕过了 opencode 内置权限提示系统。当前由 sandbox_manager.py 的 opencode.json 工具白名单(deny bash/websearch/webfetch 等)作为补偿控制。建议在代码注释中显式说明这一依赖关系,防止未来单独修改任一端导致安全漏洞。 | | opencode_runner.py | 496-501 | MEDIUM | 环境变量白名单 | _safe_env() 采用显式白名单方式传递环境变量,当前仅保留 PATH/HOME/USER 等 10 个基础变量。若未来 opencode 或评测框架需要额外的环境变量(如代理设置、自定义路径),可能导致静默失败。建议添加可配置的额外变量列表或提供覆盖机制。 | | test_skill_evals.py | 38-68 | LOW | 可维护性 | _validate_prompt() 新增了 4 项安全检查(长度上限、前导空白、控制字符、CLI 注入),设计合理。建议在文档中补充各检查项的触发阈值和错误信息示例,便于用例编写者排查问题。 | --- ### 正面发现 1. **沙箱安全隔离** (sandbox_manager.py): 通过在沙箱中写入 opencode.json 配置,deny bash/websearch/webfetch/repo_clone/external_directory/question 等危险工具,结合 --dangerously-skip-permissions 实现自动化评测的同时保持了安全边界。设计合理。 2. **Prompt 注入防护** (test_skill_evals.py + opencode_runner.py): 双重防护 — _validate_prompt() 拒绝控制字符和 - 开头的 prompt,_run_command() 使用 -- 分隔符防止 prompt 被解析为 CLI 参数。 3. **JSON 解析鲁棒性** (conftest.py): _find_json_by_depth() 正确处理字符串值内的花括号(如 ${ASCEND_HOME_PATH}),使用 early continue 降低嵌套深度,代码清晰。 4. **超时容错** (opencode_runner.py): 导出超时时保留部分数据(returncode -1),避免评测结果完全丢失。 5. **方法提取重构** (main.py + test_skill_evals.py): _eval_skills()_setup_eval_sandbox() 的提取不改变业务逻辑,纯重构降低函数复杂度,代码审查友好。 --- **检视信息:** - Agent: Claude Code CLI - Model: deepseek-v4-flash[1m] - Skill: cann-community-helper (code review workflow) 💡 此报告由 cann-community-helper code review workflow 自动生成,仅供参考。 <!-- /CODE_REVIEW_REPORT --> See merge request: cann/cannbot-skills!2789 天前
feat: 新增 skill 能力看护 CI 入口及脚本 Co-authored-by: hello_simida<wangyi206@huawei.com> # message auto-generated for no-merge-commit merge: !211 merge master_ci into master feat: 新增 skill 能力看护 CI 入口及脚本 Created-by: hello_simida Commit-by: hello_simida Merged-by: cann-robot Description: ## 描述 新增 skill 能力看护 CI 入口脚本和完整的 skill 测试框架,实现对仓库内 skill 的自动化测试和评估。 ### 新增功能 **1. CI 入口脚本 (gate/gate_check.sh)** - 自动化 CI gate check 入口,检测受影响的 skill 并触发对应测试 - 支持可选的 skill 白名单配置 **2. Skill 测试框架 (tests/system/)** - **Phase 1 基础验证**: 检查 evals.json 文件结构和约定是否正确 - **Phase 2 AI 语义评测**: 使用 opencode CLI 执行 skill 对话,基于打分标准对回复进行自动语义评测 - **测试脚本**: main.py, conftest.py, opencode_runner.py, test_skill_basic.py, test_skill_evals.py, test_opencode_runner.py, run_eval.py, session_stats.py - **配置文件**: pytest.ini, requirements.txt, config/skill-test.config - **示例代码**: opencode_runner_examples.py - **评测数据**: ascendc-task-focus_evals.json, cann-env-setup_evals.json **3. 文档** - tests/system/README.md — 框架概述和使用说明 - tests/system/docs/USER_GUIDE.md — 用户详细指南 ### CI 工作流程 ``` 代码变更 → 识别受影响的 skill → Phase 1 基础验证 → Phase 2 AI 语义评测 → 生成 HTML 报告 ``` ## 关联的Issue Closes #141 ## 测试 - 在仓库内执行 pytest 验证 OpencodeRunner 单元测试通过 - 执行 main.py --repo-root . --changed-files 验证 gate check 流程 ## 文档更新 - 新增 tests/system/README.md - 新增 tests/system/docs/USER_GUIDE.md ## 类型标签 - [ ] 新特性 - [x] 特性增强 - [ ] Bug 修复 - [ ] 性能优化 - [ ] 测试用例 - [x] 构建 / CI - [x] 文档更新 - [ ] 配置变更 - [ ] 依赖升级 - [ ] 安全修复 - [ ] 代码重构 - [ ] 代码清理 - [ ] 其他,请描述: See merge request: cann/cannbot-skills!21115 天前
feat: 新增 skill 能力看护 CI 入口及脚本 Co-authored-by: hello_simida<wangyi206@huawei.com> # message auto-generated for no-merge-commit merge: !211 merge master_ci into master feat: 新增 skill 能力看护 CI 入口及脚本 Created-by: hello_simida Commit-by: hello_simida Merged-by: cann-robot Description: ## 描述 新增 skill 能力看护 CI 入口脚本和完整的 skill 测试框架,实现对仓库内 skill 的自动化测试和评估。 ### 新增功能 **1. CI 入口脚本 (gate/gate_check.sh)** - 自动化 CI gate check 入口,检测受影响的 skill 并触发对应测试 - 支持可选的 skill 白名单配置 **2. Skill 测试框架 (tests/system/)** - **Phase 1 基础验证**: 检查 evals.json 文件结构和约定是否正确 - **Phase 2 AI 语义评测**: 使用 opencode CLI 执行 skill 对话,基于打分标准对回复进行自动语义评测 - **测试脚本**: main.py, conftest.py, opencode_runner.py, test_skill_basic.py, test_skill_evals.py, test_opencode_runner.py, run_eval.py, session_stats.py - **配置文件**: pytest.ini, requirements.txt, config/skill-test.config - **示例代码**: opencode_runner_examples.py - **评测数据**: ascendc-task-focus_evals.json, cann-env-setup_evals.json **3. 文档** - tests/system/README.md — 框架概述和使用说明 - tests/system/docs/USER_GUIDE.md — 用户详细指南 ### CI 工作流程 ``` 代码变更 → 识别受影响的 skill → Phase 1 基础验证 → Phase 2 AI 语义评测 → 生成 HTML 报告 ``` ## 关联的Issue Closes #141 ## 测试 - 在仓库内执行 pytest 验证 OpencodeRunner 单元测试通过 - 执行 main.py --repo-root . --changed-files 验证 gate check 流程 ## 文档更新 - 新增 tests/system/README.md - 新增 tests/system/docs/USER_GUIDE.md ## 类型标签 - [ ] 新特性 - [x] 特性增强 - [ ] Bug 修复 - [ ] 性能优化 - [ ] 测试用例 - [x] 构建 / CI - [x] 文档更新 - [ ] 配置变更 - [ ] 依赖升级 - [ ] 安全修复 - [ ] 代码重构 - [ ] 代码清理 - [ ] 其他,请描述: See merge request: cann/cannbot-skills!21115 天前
feat: 新增 skill 能力看护 CI 入口及脚本 Co-authored-by: hello_simida<wangyi206@huawei.com> # message auto-generated for no-merge-commit merge: !211 merge master_ci into master feat: 新增 skill 能力看护 CI 入口及脚本 Created-by: hello_simida Commit-by: hello_simida Merged-by: cann-robot Description: ## 描述 新增 skill 能力看护 CI 入口脚本和完整的 skill 测试框架,实现对仓库内 skill 的自动化测试和评估。 ### 新增功能 **1. CI 入口脚本 (gate/gate_check.sh)** - 自动化 CI gate check 入口,检测受影响的 skill 并触发对应测试 - 支持可选的 skill 白名单配置 **2. Skill 测试框架 (tests/system/)** - **Phase 1 基础验证**: 检查 evals.json 文件结构和约定是否正确 - **Phase 2 AI 语义评测**: 使用 opencode CLI 执行 skill 对话,基于打分标准对回复进行自动语义评测 - **测试脚本**: main.py, conftest.py, opencode_runner.py, test_skill_basic.py, test_skill_evals.py, test_opencode_runner.py, run_eval.py, session_stats.py - **配置文件**: pytest.ini, requirements.txt, config/skill-test.config - **示例代码**: opencode_runner_examples.py - **评测数据**: ascendc-task-focus_evals.json, cann-env-setup_evals.json **3. 文档** - tests/system/README.md — 框架概述和使用说明 - tests/system/docs/USER_GUIDE.md — 用户详细指南 ### CI 工作流程 ``` 代码变更 → 识别受影响的 skill → Phase 1 基础验证 → Phase 2 AI 语义评测 → 生成 HTML 报告 ``` ## 关联的Issue Closes #141 ## 测试 - 在仓库内执行 pytest 验证 OpencodeRunner 单元测试通过 - 执行 main.py --repo-root . --changed-files 验证 gate check 流程 ## 文档更新 - 新增 tests/system/README.md - 新增 tests/system/docs/USER_GUIDE.md ## 类型标签 - [ ] 新特性 - [x] 特性增强 - [ ] Bug 修复 - [ ] 性能优化 - [ ] 测试用例 - [x] 构建 / CI - [x] 文档更新 - [ ] 配置变更 - [ ] 依赖升级 - [ ] 安全修复 - [ ] 代码重构 - [ ] 代码清理 - [ ] 其他,请描述: See merge request: cann/cannbot-skills!21115 天前
feat: 新增 skill 能力看护 CI 入口及脚本 Co-authored-by: hello_simida<wangyi206@huawei.com> # message auto-generated for no-merge-commit merge: !211 merge master_ci into master feat: 新增 skill 能力看护 CI 入口及脚本 Created-by: hello_simida Commit-by: hello_simida Merged-by: cann-robot Description: ## 描述 新增 skill 能力看护 CI 入口脚本和完整的 skill 测试框架,实现对仓库内 skill 的自动化测试和评估。 ### 新增功能 **1. CI 入口脚本 (gate/gate_check.sh)** - 自动化 CI gate check 入口,检测受影响的 skill 并触发对应测试 - 支持可选的 skill 白名单配置 **2. Skill 测试框架 (tests/system/)** - **Phase 1 基础验证**: 检查 evals.json 文件结构和约定是否正确 - **Phase 2 AI 语义评测**: 使用 opencode CLI 执行 skill 对话,基于打分标准对回复进行自动语义评测 - **测试脚本**: main.py, conftest.py, opencode_runner.py, test_skill_basic.py, test_skill_evals.py, test_opencode_runner.py, run_eval.py, session_stats.py - **配置文件**: pytest.ini, requirements.txt, config/skill-test.config - **示例代码**: opencode_runner_examples.py - **评测数据**: ascendc-task-focus_evals.json, cann-env-setup_evals.json **3. 文档** - tests/system/README.md — 框架概述和使用说明 - tests/system/docs/USER_GUIDE.md — 用户详细指南 ### CI 工作流程 ``` 代码变更 → 识别受影响的 skill → Phase 1 基础验证 → Phase 2 AI 语义评测 → 生成 HTML 报告 ``` ## 关联的Issue Closes #141 ## 测试 - 在仓库内执行 pytest 验证 OpencodeRunner 单元测试通过 - 执行 main.py --repo-root . --changed-files 验证 gate check 流程 ## 文档更新 - 新增 tests/system/README.md - 新增 tests/system/docs/USER_GUIDE.md ## 类型标签 - [ ] 新特性 - [x] 特性增强 - [ ] Bug 修复 - [ ] 性能优化 - [ ] 测试用例 - [x] 构建 / CI - [x] 文档更新 - [ ] 配置变更 - [ ] 依赖升级 - [ ] 安全修复 - [ ] 代码重构 - [ ] 代码清理 - [ ] 其他,请描述: See merge request: cann/cannbot-skills!21115 天前
feat(sandbox): skill 沙箱默认使用软链接代替复制,增加token消耗限制 Co-authored-by: hello_simida<wangyi206@huawei.com> # message auto-generated for no-merge-commit merge: !289 merge master into master feat(sandbox): skill 沙箱默认使用软链接代替复制,增加token消耗限制 Created-by: hello_simida Commit-by: hello_simida Merged-by: cann-robot Description: ## 描述 将 skill 评测沙箱中 skill 目录的部署方式从 shutil.copytree 复制改为 os.symlink 软链接。每个 skill 有 5-6 个 eval case 时,不再重复拷贝同一份 skill 文件,显著节省磁盘空间并加快沙箱创建速度。 ### 改动内容 - **sandbox_manager.py**: __init__ 新增 use_symlink 参数(默认 True),create_skill_link 按模式选择 symlink_tocopytree - **conftest.py**: sandbox_manager fixture 读取 SKILL_SANDBOX_COPY=1 环境变量可切回复制模式(opt-out) - **test_skill_evals.py**: collect_generated_files 利用已有 original_skill_dir 参数过滤软链接追踪到的源 skill 文件 ### 使用方式 ```bash # 默认:软链接模式 python3 scripts/main.py --repo-root ... --changed-files "ops/ascendc-task-focus/SKILL.md" # 切回复制模式 SKILL_SANDBOX_COPY=1 python3 scripts/main.py ... ``` ## 关联的Issue 无 ## 测试 - [x] 默认模式(软链接)端到端测试:基础验证 17/17 PASS,AI 语义评测 5/5 PASS - [x] --fast 回归测试:10/10 PASS,0 失败 - [x] 沙箱清理后源文件完好无损 - [x] 复制模式 opt-out 功能正常 ## 类型标签 - [x] ✨ 新特性 See merge request: cann/cannbot-skills!2898 天前
feat: 新增 skill 能力看护 CI 入口及脚本 Co-authored-by: hello_simida<wangyi206@huawei.com> # message auto-generated for no-merge-commit merge: !211 merge master_ci into master feat: 新增 skill 能力看护 CI 入口及脚本 Created-by: hello_simida Commit-by: hello_simida Merged-by: cann-robot Description: ## 描述 新增 skill 能力看护 CI 入口脚本和完整的 skill 测试框架,实现对仓库内 skill 的自动化测试和评估。 ### 新增功能 **1. CI 入口脚本 (gate/gate_check.sh)** - 自动化 CI gate check 入口,检测受影响的 skill 并触发对应测试 - 支持可选的 skill 白名单配置 **2. Skill 测试框架 (tests/system/)** - **Phase 1 基础验证**: 检查 evals.json 文件结构和约定是否正确 - **Phase 2 AI 语义评测**: 使用 opencode CLI 执行 skill 对话,基于打分标准对回复进行自动语义评测 - **测试脚本**: main.py, conftest.py, opencode_runner.py, test_skill_basic.py, test_skill_evals.py, test_opencode_runner.py, run_eval.py, session_stats.py - **配置文件**: pytest.ini, requirements.txt, config/skill-test.config - **示例代码**: opencode_runner_examples.py - **评测数据**: ascendc-task-focus_evals.json, cann-env-setup_evals.json **3. 文档** - tests/system/README.md — 框架概述和使用说明 - tests/system/docs/USER_GUIDE.md — 用户详细指南 ### CI 工作流程 ``` 代码变更 → 识别受影响的 skill → Phase 1 基础验证 → Phase 2 AI 语义评测 → 生成 HTML 报告 ``` ## 关联的Issue Closes #141 ## 测试 - 在仓库内执行 pytest 验证 OpencodeRunner 单元测试通过 - 执行 main.py --repo-root . --changed-files 验证 gate check 流程 ## 文档更新 - 新增 tests/system/README.md - 新增 tests/system/docs/USER_GUIDE.md ## 类型标签 - [ ] 新特性 - [x] 特性增强 - [ ] Bug 修复 - [ ] 性能优化 - [ ] 测试用例 - [x] 构建 / CI - [x] 文档更新 - [ ] 配置变更 - [ ] 依赖升级 - [ ] 安全修复 - [ ] 代码重构 - [ ] 代码清理 - [ ] 其他,请描述: See merge request: cann/cannbot-skills!21115 天前
feat: 新增 skill 能力看护 CI 入口及脚本 Co-authored-by: hello_simida<wangyi206@huawei.com> # message auto-generated for no-merge-commit merge: !211 merge master_ci into master feat: 新增 skill 能力看护 CI 入口及脚本 Created-by: hello_simida Commit-by: hello_simida Merged-by: cann-robot Description: ## 描述 新增 skill 能力看护 CI 入口脚本和完整的 skill 测试框架,实现对仓库内 skill 的自动化测试和评估。 ### 新增功能 **1. CI 入口脚本 (gate/gate_check.sh)** - 自动化 CI gate check 入口,检测受影响的 skill 并触发对应测试 - 支持可选的 skill 白名单配置 **2. Skill 测试框架 (tests/system/)** - **Phase 1 基础验证**: 检查 evals.json 文件结构和约定是否正确 - **Phase 2 AI 语义评测**: 使用 opencode CLI 执行 skill 对话,基于打分标准对回复进行自动语义评测 - **测试脚本**: main.py, conftest.py, opencode_runner.py, test_skill_basic.py, test_skill_evals.py, test_opencode_runner.py, run_eval.py, session_stats.py - **配置文件**: pytest.ini, requirements.txt, config/skill-test.config - **示例代码**: opencode_runner_examples.py - **评测数据**: ascendc-task-focus_evals.json, cann-env-setup_evals.json **3. 文档** - tests/system/README.md — 框架概述和使用说明 - tests/system/docs/USER_GUIDE.md — 用户详细指南 ### CI 工作流程 ``` 代码变更 → 识别受影响的 skill → Phase 1 基础验证 → Phase 2 AI 语义评测 → 生成 HTML 报告 ``` ## 关联的Issue Closes #141 ## 测试 - 在仓库内执行 pytest 验证 OpencodeRunner 单元测试通过 - 执行 main.py --repo-root . --changed-files 验证 gate check 流程 ## 文档更新 - 新增 tests/system/README.md - 新增 tests/system/docs/USER_GUIDE.md ## 类型标签 - [ ] 新特性 - [x] 特性增强 - [ ] Bug 修复 - [ ] 性能优化 - [ ] 测试用例 - [x] 构建 / CI - [x] 文档更新 - [ ] 配置变更 - [ ] 依赖升级 - [ ] 安全修复 - [ ] 代码重构 - [ ] 代码清理 - [ ] 其他,请描述: See merge request: cann/cannbot-skills!21115 天前
feat(tests/system): ST 框架新增正向看护能力(skill_activated 程序化断言 + Distractor 沙箱注入) Co-authored-by: hello_simida<wangyi206@huawei.com> Co-authored-by: zzZzz__zzZzz<821946509@qq.com> # message auto-generated for no-merge-commit merge: !254 merge skilltest into master feat(tests/system): ST 框架新增正向看护能力(skill_activated 程序化断言 + Distractor 沙箱注入) Created-by: zzZzz__zzZzz Commit-by: zzZzz__zzZzz;hello_simida Merged-by: cann-robot Description: ## 描述 本 PR 在 ST 框架现有的双 Phase 验证(静态结构 + AI 语义评测)基础上,新增 **正向看护(Forward Verification)能力** —— 验证 AI 在多个干扰 skill 同时可用的真实环境中,仍能正确选择并激活目标 skill。同时修复了 ST 文档与实际代码不一致的多处问题,并优化了评测报告的错误展示。 正向看护采用**程序化断言**(不依赖 AI 评审模型):从导出的 session JSON 中精确匹配 tool=skill 事件的 state.input.name,给出确定性判断。 ### 新特性 New Features - 【tests/system 程序化断言】test_skill_evals.py 新增 [skill_activated] 类型 Expectation:从 ses.json 解析所有 tool=skill 事件的 state.input.name(fallback 到 state.metadata.name),与期望 skill 名严格匹配;失败时列出实际激活的 skill 列表辅助定位。 - 【tests/system Distractor 配置】evals_parser.py 新增解析 case-level ## Config - Distractor skills: a;b;csandbox_manager 支持在沙箱 .opencode/skills/ 下同时部署目标 + 多个 distractor skill 的目录树(默认软链接,不重复复制)。 - 【tests/system HTML 正向看护块】conftest.py 新增 _parse_skill_activated_block 钩子,将正向看护失败渲染为紫色专属块:清晰展示"期望激活"vs"实际加载"对比 + 失败原因提示,与普通 contains/file 类失败块视觉区分。 - 【tests/system 示例用例】cases/cann-env-setup_evals.md 新增 Case 7「正向看护 - 多 skill 环境下正确触发目标 skill」:4 个 distractor + [skill_activated] cann-env-setup 断言。 ### 特性增强 - 【tests/system 报告优化】所有断言错误改为中文 + 过滤无关 traceback 行,提升评审可读性。 - 【tests/system 配置修复】skill-test.configskill_dirs 路径 model/skills 修正为 model,与实际仓库目录结构对齐。 - 【tests/system 静态验证扩展】test_skill_basic.py 新增 test_eval_cases_distractor_skills_valid —— 校验 distractor skill 名称在仓库中真实存在。 ### 文档更新 - 【tests/system ST 设计指南】ST_DESIGN_AND_DEVELOPMENT_GUIDE.md 大幅修订:补充缺失 skill 项、修正用例计数、移除无效引用、新增正向看护章节(+173/-97 行)。 ## 关联的Issue <!-- 暂未关联 Issue --> ## 测试 - **Phase 1 静态验证**:36/36 PASSED(含新增 distractor 字段校验) - **_validate_skill_activated 单元行为**:6 种场景人工注入 session JSON 验证全部符合预期(命中 input.name / 命中 metadata.name fallback / 加载错误 skill / 未加载任何 skill / 多 skill 命中 / 空 pattern 配置错误) - **沙箱多 skill 部署**:Case 7 的 1 目标 + 4 distractor 全部在 .opencode/skills/ 下完成软链接部署,SKILL.md 均可达 - **HTML 正向看护块渲染**:手工注入失败 longrepr 后 _parse_skill_activated_block 输出正确包含期望/实际对比与紫色样式 - **main.py 主流程**:Phase 1 → Phase 2 → 归档 zip 编排正常,exit code 反映失败状态 - **evals_parser 字段提取**:Case 7 正确解析出 distractor_skills=[ascendc-task-focus, npu-arch, ascendc-docs-search, ascendc-runtime-debug][skill_activated] cann-env-setup ## 文档更新 - 更新 tests/system/docs/ST_DESIGN_AND_DEVELOPMENT_GUIDE.md:补充正向看护章节、修正用例计数、移除无效引用。 ## 类型标签 <!-- [x] 表示选中 --> - [x] 🌟 新特性 - [x] ✨ 特性增强 - [ ] 🐛 Bug 修复 - [ ] ⚡ 性能优化 - [x] 🧪 测试用例 - [ ] 📦 构建 / CI - [x] 📝 文档更新 - [x] 🔧 配置变更 - [ ] ⬆️ 依赖升级 - [ ] 🔒 安全修复 - [ ] ♻️ 代码重构 - [ ] 🧹 代码清理 - [ ] ❓ 其他,请描述: ## 流水线故障排查 <!-- 如果下方的流水线检查未通过,可参考以下指引进行自助修复 --> > **UT_Test 未通过?** > 请在下方流水线表格的 **UT_Test** 行,点击右侧的 >>>>> 下载 **CANNBot-skills UT 测试报告**(HTML 格式)。 > 打开报告后,展开页面中的「UT Test 失败修复指南」,复制其中的提示词并粘贴给 Agent,Agent 将根据日志自动定位并修复问题。 See merge request: cann/cannbot-skills!2547 天前
feat(tests/system): ST 框架新增正向看护能力(skill_activated 程序化断言 + Distractor 沙箱注入) Co-authored-by: hello_simida<wangyi206@huawei.com> Co-authored-by: zzZzz__zzZzz<821946509@qq.com> # message auto-generated for no-merge-commit merge: !254 merge skilltest into master feat(tests/system): ST 框架新增正向看护能力(skill_activated 程序化断言 + Distractor 沙箱注入) Created-by: zzZzz__zzZzz Commit-by: zzZzz__zzZzz;hello_simida Merged-by: cann-robot Description: ## 描述 本 PR 在 ST 框架现有的双 Phase 验证(静态结构 + AI 语义评测)基础上,新增 **正向看护(Forward Verification)能力** —— 验证 AI 在多个干扰 skill 同时可用的真实环境中,仍能正确选择并激活目标 skill。同时修复了 ST 文档与实际代码不一致的多处问题,并优化了评测报告的错误展示。 正向看护采用**程序化断言**(不依赖 AI 评审模型):从导出的 session JSON 中精确匹配 tool=skill 事件的 state.input.name,给出确定性判断。 ### 新特性 New Features - 【tests/system 程序化断言】test_skill_evals.py 新增 [skill_activated] 类型 Expectation:从 ses.json 解析所有 tool=skill 事件的 state.input.name(fallback 到 state.metadata.name),与期望 skill 名严格匹配;失败时列出实际激活的 skill 列表辅助定位。 - 【tests/system Distractor 配置】evals_parser.py 新增解析 case-level ## Config - Distractor skills: a;b;csandbox_manager 支持在沙箱 .opencode/skills/ 下同时部署目标 + 多个 distractor skill 的目录树(默认软链接,不重复复制)。 - 【tests/system HTML 正向看护块】conftest.py 新增 _parse_skill_activated_block 钩子,将正向看护失败渲染为紫色专属块:清晰展示"期望激活"vs"实际加载"对比 + 失败原因提示,与普通 contains/file 类失败块视觉区分。 - 【tests/system 示例用例】cases/cann-env-setup_evals.md 新增 Case 7「正向看护 - 多 skill 环境下正确触发目标 skill」:4 个 distractor + [skill_activated] cann-env-setup 断言。 ### 特性增强 - 【tests/system 报告优化】所有断言错误改为中文 + 过滤无关 traceback 行,提升评审可读性。 - 【tests/system 配置修复】skill-test.configskill_dirs 路径 model/skills 修正为 model,与实际仓库目录结构对齐。 - 【tests/system 静态验证扩展】test_skill_basic.py 新增 test_eval_cases_distractor_skills_valid —— 校验 distractor skill 名称在仓库中真实存在。 ### 文档更新 - 【tests/system ST 设计指南】ST_DESIGN_AND_DEVELOPMENT_GUIDE.md 大幅修订:补充缺失 skill 项、修正用例计数、移除无效引用、新增正向看护章节(+173/-97 行)。 ## 关联的Issue <!-- 暂未关联 Issue --> ## 测试 - **Phase 1 静态验证**:36/36 PASSED(含新增 distractor 字段校验) - **_validate_skill_activated 单元行为**:6 种场景人工注入 session JSON 验证全部符合预期(命中 input.name / 命中 metadata.name fallback / 加载错误 skill / 未加载任何 skill / 多 skill 命中 / 空 pattern 配置错误) - **沙箱多 skill 部署**:Case 7 的 1 目标 + 4 distractor 全部在 .opencode/skills/ 下完成软链接部署,SKILL.md 均可达 - **HTML 正向看护块渲染**:手工注入失败 longrepr 后 _parse_skill_activated_block 输出正确包含期望/实际对比与紫色样式 - **main.py 主流程**:Phase 1 → Phase 2 → 归档 zip 编排正常,exit code 反映失败状态 - **evals_parser 字段提取**:Case 7 正确解析出 distractor_skills=[ascendc-task-focus, npu-arch, ascendc-docs-search, ascendc-runtime-debug][skill_activated] cann-env-setup ## 文档更新 - 更新 tests/system/docs/ST_DESIGN_AND_DEVELOPMENT_GUIDE.md:补充正向看护章节、修正用例计数、移除无效引用。 ## 类型标签 <!-- [x] 表示选中 --> - [x] 🌟 新特性 - [x] ✨ 特性增强 - [ ] 🐛 Bug 修复 - [ ] ⚡ 性能优化 - [x] 🧪 测试用例 - [ ] 📦 构建 / CI - [x] 📝 文档更新 - [x] 🔧 配置变更 - [ ] ⬆️ 依赖升级 - [ ] 🔒 安全修复 - [ ] ♻️ 代码重构 - [ ] 🧹 代码清理 - [ ] ❓ 其他,请描述: ## 流水线故障排查 <!-- 如果下方的流水线检查未通过,可参考以下指引进行自助修复 --> > **UT_Test 未通过?** > 请在下方流水线表格的 **UT_Test** 行,点击右侧的 >>>>> 下载 **CANNBot-skills UT 测试报告**(HTML 格式)。 > 打开报告后,展开页面中的「UT Test 失败修复指南」,复制其中的提示词并粘贴给 Agent,Agent 将根据日志自动定位并修复问题。 See merge request: cann/cannbot-skills!2547 天前