Skip to content

修复 Skill 更新队列阻塞与并发冲突 - #1

Closed
130040167 wants to merge 2 commits into
codex/skill-tree-timeout-fallback-20261103from
codex/skill-update-nonblocking-20261103
Closed

130040167 wants to merge 2 commits into
codex/skill-tree-timeout-fallback-20261103from
codex/skill-update-nonblocking-20261103

Conversation

@130040167

Copy link
Copy Markdown
Owner

依赖

本 PR 基于 BigPizzaV3#2859,仅展示队列及并发协调的后续变更。应先合入超时与 ZIP 回退修复,再将本变更提交至上游主分支。

问题

Skill 下载更新与 Agent 启停共用串行操作队列。仓库响应缓慢时,后续更新和无关 Skill 的启停都要等待;简单并行又可能使安装状态、仓库缓存或 Agent 副本被较旧结果覆盖。

修改

  • 将更新下载与 Agent 操作分离,限制全局及单仓库的并发数,队列仍可继续接收操作。
  • 基于同一个 ZIP 快照解析和安装 Skill,并在线程池中执行阻塞的归档解析和文件安装。
  • 在下载前捕获安装和仓库状态,在提交时重新检查,并协调同一进程内的写入及缓存发布;检测到冲突时保留现有内容并返回错误。
  • 保留 ZIP 子树与符号链接校验,并在副本发布和回滚时检查路径身份、保留恢复内容;支持 Windows 长路径。

验证

  • Windows 隔离测试中,对实际 Skill 源码执行 107 项测试,覆盖并发写入、状态变更、ZIP 校验和副本处理;另在两个不同卷上执行恢复测试。
  • 前端队列及模拟页面测试 34 项通过;TypeScript 检查和生产前端构建通过。
  • Windows 隔离管理器场景验证两个下载并行、第三个排队,期间另一个 Skill 可停用并重新启用,随后三个更新均完成。
  • Windows 隔离管理器使用真实 GitHub 仓库扫描并更新临时 Skill,更新后启用状态保持不变。

同一进程内的协调不构成对外部进程直接修改文件的全程原子性或进程意外退出后的自动恢复保证。失败回滚保留的内容会在错误信息中报告;macOS 和 Linux 上的真实运行时场景尚未验证。

@130040167 130040167 closed this Nov 3, 2026
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.

1 participant