文件最后提交记录最后更新时间
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(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 天前