Skip to content

完善skill管理界面 - #2570

Merged
BigPizzaV3 merged 18 commits into
BigPizzaV3:mainfrom
130040167:codex/improve-skills-management
Oct 17, 2026
Merged

BigPizzaV3 merged 18 commits into
BigPizzaV3:mainfrom
130040167:codex/improve-skills-management

Conversation

@130040167

@130040167 130040167 commented Oct 16, 2026 •

Copy link
Copy Markdown
Contributor

做了一个完整的skill管理界面,基础功能基本都有吧

本地已安装的 Skill 原先未正确出现在“已安装”中,仍显示安装入口;仓库添加、编辑和目录刷新也缺少完整反馈。仓库扫描期间会禁用切换操作,大目录一次挂载全部条目,打开 Skill 详情还会退出仓库管理。

本 PR 完善同一套 Skills 管理流程:

  • 正确识别本地已安装状态,支持临时启停、从 cc-switch 导入,以及更新时保留停用状态。
  • 展示已添加仓库,支持链接解析、编辑、启停和删除;保存前检查可访问性并扫描 Skill,验证失败不保存。递归发现根目录与嵌套目录中的 SKILL.md,修正同名条目冲突,并持久化仓库目录缓存。
  • GitHub API 失败时支持 codeload ZIP 回退,识别默认分支,并对 GitHub 目标地址解析 Windows 自动代理。
  • 仓库管理占满窗口,压缩侧栏行高,增强深色分割线和文字层级;添加、编辑面板固定在底部,详情与安装状态保持列对齐。
  • 浏览操作不再受扫描锁影响,过期扫描响应不会覆盖当前选择;列表仅挂载可视区域附近的条目。详情叠加打开,关闭后保留仓库选择、搜索词和滚动位置,Escape 只关闭最上层面板。
  • 卸载前备份本地实体目录与受控源,保留复制回退后的用户修改;备份失败不直接删除唯一副本。cc-switch 同名导入先暂存,保留冲突内容,切换或状态保存失败时回滚。
  • 远端 Skill 使用稳定的仓库路径身份,安装记录保存来源路径;新增同名目录不会转移安装状态或更新目标。缺少路径的旧安装记录继续保留,但拒绝不确定的自动覆盖,需要先备份卸载再重新安装。
  • 已保存仓库仅变更启停状态时本地保存,不依赖仓库可访问性;新增或修改地址、分支、子目录仍须验证后保存。无变更的保存仍执行验证和扫描。
  • 复制安装的 Skill 停用时先暂存当前内容,保留用户修改和来源信息;本地接管拒绝将源目录放入待复制目录内部。停用和卸载在状态保存失败或中途备份失败时恢复原目录与记录,提交后的备份清理失败不误报为事务失败。
  • 备份恢复先暂存内容,再一起提交目录、启用链接和记录;保存或建链失败仍保留原备份。恢复遇到已存在的源或本地目录时拒绝覆盖;启用也不会删除缺少清单的现有目录,复制启用失败会清理半成品。

验证:

  • 独立 PR 分支:TypeScript 检查、前端测试(625 通过、1 跳过)、Vite 生产构建和 cargo check -p codex-plus-manager --tests --locked 通过;差异检查通过。
  • 相同 Skills 实现已在隔离的 Windows 管理器中验证真实仓库扫描、解析保存、安装、缓存恢复和布局。挂起首次加载时仍能切换仓库;864 项目录只挂载可视区条目且可滚动到底;详情关闭后选择、搜索和滚动位置保持不变。可用 node scripts/test-skills-repository-browser.mjs <release-executable> 复验。
  • 独立分支的 Rust Skills 测试在链接阶段受现有 sherpa-onnx 静态库与 MSVC 标准库符号不兼容阻挡(LNK2019/LNK1120),未将该次测试记为通过。本 PR 不修改相关音频依赖的链接配置。
  • 当前 Skills 核心回归 43 项、生命周期专项回归 10 项通过,覆盖本地唯一副本恢复、不同实体副本保留、备份失败、导入冲突和保存失败回滚、同名路径新增、旧记录拒绝误更新、不可访问仓库的本地启停,以及复制安装保留修改、只读状态文件回滚、Windows 目录占用、递归暂存保护、恢复保存或建链失败和本地目录冲突保护。该运行使用共享音频库的本地构建配置;独立 PR 分支保持原有依赖配置,双平台完整验证以新 head CI 为准。
  • 新 Release 已通过隔离原生管理器回归,包含本地 Skill 卸载恢复原文、只读状态下恢复失败仍保留备份、恢复拒绝覆盖本地内容、停用再启用保留修改、只读状态文件下停用和卸载失败恢复、外部目录联接接管、不可访问仓库直接停用,以及既有仓库扫描、安装、嵌套详情、窄窗口、无底部冗余栏和列表响应性检查;测试实例和状态已清理。最新独立 PR 分支的生命周期测试 cargo check 通过。

@BigPizzaV3 BigPizzaV3 left a comment

Copy link
Copy Markdown
Owner

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

已审核当前 head d3ce7004。双平台 CI 和原有测试通过,但本轮确认了以下问题,需要修改后再合并。

  1. [P1] 本地自建 Skill 的“卸载”会删除唯一副本,且不产生备份。 crates/codex-plus-core/src/skills.rs:377 将未纳管的本地目录标成已安装,ManagementExtra.tsx:233-235 因此开放卸载。现有 uninstall() 先删除 $CODEX_HOME/skills/<id>,而这类 Skill 没有 SSOT 源目录,后续备份分支不会执行。公共 API 回归已复现:创建本地 SKILL.md → local_inventory() 显示已安装 → uninstall() 后原文件消失且备份列表为空。请先把本地实体目录纳管或备份,再允许卸载。

  2. [P1] cc-switch 导入同名 Skill 会无备份覆盖或删除已有用户内容。 skills.rs:399-407 直接移除已有源目录再复制;随后 424 行停用时,如果 $CODEX_HOME/skills/<id> 原本是用户自建实体目录,也会直接删除它。已用“本地内容与 cc-switch 内容不同、ID 相同”的公共 API 回归复现,导入后用户原内容在本地、SSOT 和备份中均找不到。请检测冲突并保留原内容,采用暂存、备份和失败回滚,不要先删旧目录。

  3. [P2] 同名条目的 ID 不稳定,会把已安装状态及更新目标移给另一个 Skill。 skills.rs:819-827 按遍历先后给第一个同名目录短 ID。仓库最初只有 z/alpha/SKILL.md,安装后 ID 为 alpha;新增 a/alpha/SKILL.md 后,alpha 改指向 a/alpha,merge_entries() 将新条目标成已安装、可更新,原条目却变成未安装。该回归已实测失败。请使用稳定的仓库路径身份,安装记录也要保留对应路径,避免更新替换成另一项。

  4. [P2] 仓库不可访问时反而无法停用。 ManagementExtra.tsx:115 的启停调用同一个 upsert_skill_repo;commands.rs:5460-5466 无论是否仅修改 enabled 都先联网验证,网络失败、仓库删除或权限失效就拒绝保存。请让已保存仓库的停用操作可以本地完成,新增或修改仓库地址再做网络验证。

本轮 TypeScript 检查、仓库地址解析 3 项、原有 Skills 单测 32 项通过;上述三个数据/身份回归分别实测失败。修复后请补入对应回归,并补跑新 head 的 Windows/macOS CI。

@BigPizzaV3 BigPizzaV3 left a comment

Copy link
Copy Markdown
Owner

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

复审当前 head e7a89345af816ab9629b8d162d2b6ff052d1d532,此前两项 P1 和两项 P2 均已处理:本地唯一副本卸载前备份,cc-switch 同名导入先暂存并保留冲突内容,远端条目按稳定仓库路径关联安装状态和更新目标,既有仓库的单纯启停可离线保存。目录、链接和状态保存的失败回滚,以及备份恢复的冲突保护均有补充回归。

本轮独立实跑 Skills 核心单测 43 项、生命周期测试 5 项、前端仓库解析 3 项,全部通过。已核实 CI run 38931568421 的 headSha 与当前 SHA 一致,Windows artifacts 和 macOS DMG 均成功;对最新 main 5e2762d9 无冲突。

原 Request changes 的阻塞项已解决,本轮批准。

@BigPizzaV3
BigPizzaV3 merged commit e1f08d2 into BigPizzaV3:main Oct 17, 2026
2 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants