Skills Manager v1.39.0
发布日期:2026-09-15
递交范围:v1.38.0...v1.39.0
发布概览
- Preset 标签过多时自动换行不再被裁掉,只差行尾也不再让技能显示为待更新。另新增 GitLab Duo 内置 Agent,并修掉两个会让你卡住的问题:确认弹框的按钮滚出屏幕够不到,以及导入的技能永久显示「原路径丢失」。
用户可见更新
- Preset 标签过多时自动换行,不再被裁掉 —— 超过约九个 Preset 时,这一行会溢出窗口,靠后的几个用鼠标根本够不到。现在它们会按需要换成多行,每个 Preset 都可见、可点。感谢 @ZhuYichuan(#447、#341)。
- Windows + macOS 双端不再出现永远「可更新」的技能 —— 从本地文件夹导入的技能会与那个文件夹逐字节比对,而 Git for Windows 默认在检出时转换行尾。于是同一个技能在一台机器上是 CRLF、另一台是 LF,比对永远不相等;重新导入只是把中央库改写成本地的编码,两台机器便把同一个技能来回推送,各自都看到对方刚「改」出来的更新。现在只差行尾不再算差异。其余一切照旧:读不了的文件、进不去的目录、不是合法 UTF-8 的内容,都仍然按字节严格比较而不是假定相同;技能的存储身份也没有改变。感谢 @WingSky2022(#440)。
- 新增 GitLab Duo 内置 Agent(开箱支持增至 54 个)。部署到
~/.gitlab/duo/skills,同时会发现共享根目录~/.agents/skills里的技能。Windows 用户请手动设置技能目录:GitLab Duo 实际读取%APPDATA%\GitLab\duo\skills,本版尚不能自动识别该路径,否则 Duo 会显示为未安装。(#433) - 修复:更新确认弹框在列出很多文件时无法操作。 当新版本要删除较多文件时,弹框会超出窗口上下边缘,既没有滚动条、确认和取消按钮又都在屏幕外。现在弹框会限制高度并让文件列表滚动,在所有字号下都有效。(#430)
- 修复:导入的技能在其来源目录被收编后,会永久显示「原路径丢失」。 当技能的导入来源目录被转成受管部署物后,一旦该部署物被移除,技能的来源就成了悬空路径——此后更新检查一直失败,尽管中央库副本完好。现在会在替换发生之前把来源重新指向中央库副本。若来源是通过符号链接抵达的则不受影响,因为符号链接只会被解除、其指向的真实目录仍然存在。(#425)
开发者与治理更新
- 字节 hash
hash_entries未作改动,仍是每个技能的存储身份。行尾比较是一个独立且更严格的函数,只在两个字节 hash 已经不等时才被调用,因此不会作废任何已存 hash,也不需要迁移。 npm run release:prepare现在会同步更新package-lock.json的版本号。此前它一直停留在 1.22.1,而应用已到 1.38.0,导致每个贡献者执行npm install都会产生一处无关改动。- 修正 GitLab Duo 适配器的路径注释:原注释正确写出了 Windows 的位置,却又声称 Unix 路径「除 XDG_CONFIG_HOME / GLAB_CONFIG_DIR 外到处适用」——恰恰漏掉了 Windows 本身。
当前校验状态
- ✅ 跨平台构建通过(macOS Intel / macOS ARM / Windows x64 / Linux x64 / Linux ARM64)
- ✅ TypeScript typecheck 通过
English release notes
Release date: 2026-09-15
Commit range: v1.38.0...v1.39.0
Release Overview
- Preset chips wrap instead of being cut off, and line endings alone no longer make a skill look out of date. Also adds GitLab Duo as a built-in agent, and fixes two bugs that could leave you stuck: a confirmation dialog whose buttons scrolled off screen, and imported skills that permanently reported a missing source.
User-facing
- Preset chips now wrap instead of being cut off — With more than about nine presets the row overflowed the window and the ones past the edge could not be reached with a mouse at all. They now wrap onto as many lines as they need, so every preset stays visible and clickable. Thanks to @ZhuYichuan (#447, #341).
- Skills no longer sit at "update available" forever on a Windows + macOS pair — A skill imported from a local folder is compared against that folder byte for byte, and Git for Windows converts line endings on checkout by default. The same skill is therefore CRLF on one machine and LF on the other, the comparison never matched, and re-importing only rewrote the library in the local encoding — so the two machines pushed the same skill back and forth, each seeing an update the other had just "made". Line endings alone no longer count as a difference. Everything else still does: a file the comparison cannot read, a directory it cannot enter, and content that is not valid UTF-8 all keep their byte-exact treatment rather than being assumed to match, and the stored identity of a skill is unchanged. Thanks to @WingSky2022 (#440).
- GitLab Duo is now a built-in agent (54 supported out of the box). It deploys to
~/.gitlab/duo/skillsand also discovers skills in the shared~/.agents/skillsroot. On Windows, set the skills directory manually: GitLab Duo reads%APPDATA%\GitLab\duo\skills, which this release does not detect automatically, so Duo will otherwise show as not installed. (#433) - Fixed: the update confirmation dialog could not be dismissed when it listed many files. Updating a skill whose new version drops a lot of files grew the dialog past the top and bottom of the window, with no scrollbar and both buttons off screen. The dialog now caps its height and scrolls the file list instead, at every text size. (#430)
- Fixed: an imported skill could permanently report "source missing" after its source directory was adopted. When the agent directory a skill was imported from got turned into a managed deployment, removing that deployment orphaned the skill's source — update checks then failed forever even though the central copy was intact. The source is now re-pointed at the central copy before the replacement happens. A skill whose source is reached through a symlink is left alone, since the symlink is only unlinked and the real folder survives. (#425)
Developer & Governance
- The byte hash
hash_entriesis untouched and remains every skill's stored identity. The line-ending comparison is a separate, stricter function consulted only when two byte hashes already disagree, so no stored hash is invalidated and no migration is needed. npm run release:preparenow syncspackage-lock.jsonalongsidepackage.json. Its version field had been stale at 1.22.1 while the app was at 1.38.0, so every contributor'snpm installproduced a stray diff.- Corrected the GitLab Duo adapter's path comment, which described the Windows location correctly and then claimed the Unix path applied everywhere but the
XDG_CONFIG_HOME/GLAB_CONFIG_DIRcases — omitting Windows itself.
Current Verification
- ✅ Cross-platform build passed (macOS Intel / macOS ARM / Windows x64 / Linux x64 / Linux ARM64)
- ✅ TypeScript typecheck passed
完整变更:v1.38.0...v1.39.0