Skills Manager v1.40.0
发布日期:2026-09-17
递交范围:v1.39.0...v1.40.0
发布概览
- 批量添加技能、项目工作区按技能计数不再重复,以及修掉「检查全部更新」在 macOS 上造成的磁盘抖动。
用户可见更新
- 批量添加技能 —— 添加技能面板新增「全选 / 取消全选」和 Shift 点击区间选择,并显示已选数量。以前配置一个新项目要逐个点击,现在一次启用 10–30 个只需两次点击。只会影响当前筛选结果中真正可添加的技能。感谢 @ZhuYichuan (#428)。
- 项目工作区现在按技能计数,不再重复 —— 一个仓库内含多个技能时计数是错的:同一个技能同步到三个 agent 就被数成三个,同步健康度也按副本而非按技能统计。更严重的是,把项目副本match回中央库技能时采用打分取最高,并列时等于随意选择——两个内容相同的技能可能让副本绑到错误的那一个,显示的是另一个技能的同步状态。现在先分组再计数,一组取其中最严重的状态;匹配改为分层进行,某一层留下多个候选时宁可不认。感谢 @lijianqiang12 (#267, #262)。
- macOS:检查全部更新不再造成磁盘抖动 —— 每次获取中央仓库锁都会 fsync 锁标记文件,这在 macOS 上会刷新整个卷的缓存,并把其中所有脏页(包括其他进程的)都计到本应用头上。更新检查按设计对每个技能各取一次锁,约 75 个技能的库每轮就是 75 次全卷屏障;持续一小时被系统记为 2.1 GB 的「file backed memory dirtied」,超出磁盘写入上限 24 倍。该标记文件只是为了在「仓库忙」的提示里说明是谁占着锁,互斥来自
flock,与文件内容无关。 - 非中文界面不再回落到中文 —— 所选语言缺少翻译的文案以前会显示简体中文。现在一律回落到英文,繁体中文除外(仍回落到简体)。感谢 @jonathanleiva15 (#394)。
- 修复:Shift 点击选择区间会把行内文字刷成高亮蓝 —— 这是浏览器自身从上一次点击处扩展文本选区的行为。选择器的行是点击目标而非正文,现已禁用文本选中。
开发者与治理更新
- Vite 开发服务器不再监听
src-tauri/target——一次cargo build会产生数万个文件事件,把热更新拖死。感谢 @loeanxi (#397)。 - 发版前复核 #267 发现两处缺陷。新的分层匹配把中央目录名排在内容哈希之前,于是当库中同时存在
Code Review与code-review时,前者按 slug 导出的code-review目录会被绑到后者那一行;而把项目副本导回中央库正是写入匹配到的那一行的目录,这会覆盖掉另一个技能。现在「只对应唯一一个技能」的哈希紧跟source_ref之后参与判断,多个技能共享同一哈希时仍然落到目录与名称层,因此 #267 自身的修复不受影响。另一处是:技能只部署到项目部分 agent 的 preset 会显示成「从未应用」,而不是「部分应用」。 - #267 新增的注释已翻译为英文,与代码库其余部分保持一致。
当前校验状态
- ✅ 跨平台构建通过(macOS Intel / macOS ARM / Windows x64 / Linux x64 / Linux ARM64)
- ✅ TypeScript typecheck 通过
English release notes
Release date: 2026-09-17
Commit range: v1.39.0...v1.40.0
Release Overview
- Adding skills in bulk, a project workspace that counts each skill once, and an end to the disk thrashing the update check caused on macOS.
User-facing
- Add skills in bulk — The Add Skills sheet gains Select all / Deselect all and Shift+click range selection, with a count of what is selected. Setting up a new project meant clicking every skill individually; enabling 10–30 at once is now two clicks. Only skills that are actually addable in the current filtered view are touched. Thanks to @ZhuYichuan (#428).
- A project workspace now counts each skill once — A repository that ships several skills was miscounted: the same skill deployed to three agents counted as three, and sync health was tallied per copy rather than per skill. Worse, matching a project copy back to its library skill scored the candidates and took the highest, so a tie was broken arbitrarily — two skills with identical content could bind a copy to the wrong one and show a sync status belonging to another skill. Copies are now grouped before counting, with a group reporting the most severe status it carries, and the match resolves in layers, refusing to guess when a layer leaves more than one candidate. Thanks to @lijianqiang12 (#267, #262).
- macOS: checking all updates no longer thrashes the disk — Every acquisition of the central repository lock fsynced its stamp file, which on macOS flushes the whole volume's cache and bills every dirty page in it — including other processes' — to this app. The update check takes that lock once per skill by design, so a library of ~75 skills issued 75 whole-volume barriers per round; one hour of it was reported by the system as 2.1 GB of "file backed memory dirtied", 24x over the disk-writes limit. The stamp exists only to name the operation holding the lock, and mutual exclusion comes from
flock, never from the file's contents. - A non-Chinese interface no longer falls back to Chinese — Any string without a translation in the selected language showed Simplified Chinese. English is the fallback everywhere now, except Traditional Chinese, which still falls back to Simplified. Thanks to @jonathanleiva15 (#394).
- Fixed: Shift+clicking a range painted the rows' text in highlight blue, because the browser extends its own text selection from the previous click. The picker rows are click targets rather than prose, so they now opt out of text selection.
Developer & Governance
- The Vite dev server no longer watches
src-tauri/target, where a singlecargo buildproduced tens of thousands of file events and stalled hot reload. Thanks to @loeanxi (#397). - Two defects were found reviewing #267 before release. The new layered match put the central directory name above the content hash, so a library holding both
Code Reviewandcode-reviewbound the first one's export — written under the slugcode-review— to the second one's row; since importing a project copy back installs into the matched row's directory, that would have overwritten the other skill. A hash identifying exactly one skill is now consulted right aftersource_ref, while several skills sharing a hash still fall through to the directory and name layers, so #267's own fix is untouched. Separately, a preset with copies on some but not all of a project's agents reported as never applied rather than partially applied. - The comments #267 added were translated to English, matching the rest of the codebase.
Current Verification
- ✅ Cross-platform build passed (macOS Intel / macOS ARM / Windows x64 / Linux x64 / Linux ARM64)
- ✅ TypeScript typecheck passed
完整变更:v1.39.0...v1.40.0