Skills Manager v1.28.3
发布日期:2026-07-13
递交范围:v1.28.2...v1.28.3
发布概览
- 以 Windows 稳定性为主的补丁:未完成的中央库迁移不再让应用启动时「打不开」,深层嵌套路径的技能可正常安装,另附工作区、备份、深色主题若干修复。
用户可见更新
- Windows:迁移中央库后应用不再打不开 — 把中央库迁到另一个盘后,一次未完成的迁移可能在目标位置留下只读的 Git pack 文件;下次启动尝试覆盖它们时报「拒绝访问(os error 5)」,且这一步在建窗口和日志之前执行,进程直接静默退出——表现为「软件打不开、没有界面、也没有日志」。现在迁移只会搬进「空目标」;一旦无法完成,应用会继续用原位置的现有技能库运行(数据不丢失),并弹出横幅说明如何完成迁移。迁移失败不再导致启动崩溃(#252)。
- Windows:深层嵌套路径的技能安装不再失败 — 应用现在在清单中声明「长路径感知」,安装文件位于长而深层嵌套路径下的技能不再报「path too long」(与 Windows 的
LongPathsEnabled协同生效)(#298、#299)。 - 同步/恢复后侧边栏预设立即恢复 — 克隆、重新克隆、同步、连接 GitHub 或恢复(含首次运行恢复)之后,侧边栏的预设列表会一直空着直到重启应用,尽管数据其实已恢复进数据库。现在会就地刷新(#302)。
- 工作区卡片统计在 Skills Manager 之外安装的技能 — agent 概览卡此前只统计「受管库」里的技能,导致技能通过其他方式安装的 agent 显示为 0。现在卡片会统计每个 agent 磁盘上的真实技能数,与逐 agent 详情徽标一致(#287)。
- 深色主题下 agent 图标重新可见 — 纯黑单色 agent 图标(codex、roo_code)在深色背景下不可见;现在深色主题下会反色显示(#279、#304)。
开发者与治理更新
migrate_repo_if_needed重写为「不可失败」——返回决策(Proceed/UseSource)而非错误,故迁移失败绝不会经run()里建窗口之前的.expect触发 panic。根因是崩溃只发生在「覆盖已存在的只读文件」时,因此迁移现在拒绝任何非空目标(不再把旧的源库 blind-merge 覆盖较新数据),而空目标让复制在结构上不可能覆盖只读 pack 文件。失败时通过运行时 base-dir override 回退到完好的源库;详细错误改用record_startup_error延迟到 logger 就绪后落盘(pre-logger 阶段的log::error!是空操作);CLI 有 base override 时跳过迁移。经 grok review 补了两处:源/目标改用fs::canonicalize规范化比较,避免仅大小写/8.3/软链接不同的「同一目录」被误判为真实迁移而永久循环提示;回退横幅重新措辞,绝不再让用户去清空设置里显示的路径(override 生效时那正是正在使用的实时库)。新增 6 个 Rust 测试。- Windows 长路径修复通过
build.rs嵌入自定义应用清单(app_manifest()会替换 Tauri 默认清单,故重新声明了 Common-Controls v6 依赖),非 Windows 平台忽略。工作区/备份/图标修复(#302、#287、#279/#304)经 codex(gpt-5.5)评审;后续补充:冲突解决与后台自动备份完成后也会刷新预设/技能,概览计数每次重建,扫描失败时回退到受管库。 - 后端 Rust 测试套件 393 全过;前端
npm run build通过。
当前校验状态
- ✅ 跨平台构建通过(macOS Intel / macOS ARM / Windows x64 / Linux x64)
- ✅ TypeScript typecheck 通过
English release notes
Release date: 2026-07-13
Commit range: v1.28.2...v1.28.3
Release Overview
- Windows-focused reliability patch: the app can no longer be bricked at launch by a half-finished central-library move, deeply nested skills install correctly on Windows, and several workspace, backup, and dark-theme fixes land alongside.
User-facing
- Windows: the app no longer fails to open after relocating the central library — After moving the central library to another drive, an incomplete move could leave read-only Git pack files at the destination. The next launch tried to copy over them, hit "access denied (os error 5)", and the app died before any window or log appeared — it just wouldn't open. Migration now only ever moves into an empty destination; if it can't complete, the app keeps running against your existing library at its previous location (nothing is lost) and shows a banner explaining how to finish the move. A failed migration can no longer crash startup (#252).
- Windows: installing skills with deeply nested paths no longer fails — The app now declares long-path awareness in its manifest, so installing a skill whose files sit behind a long, deeply nested path no longer fails with "path too long" (works together with Windows'
LongPathsEnabled) (#298, #299). - Sidebar presets reappear immediately after a sync or restore — After cloning, re-cloning, syncing, connecting to GitHub, or restoring (including first-run restore), the preset list in the sidebar stayed empty until you restarted the app, even though the data had already been restored to the database. It now refreshes in place (#302).
- Workspace cards count skills installed outside Skills Manager — An agent's overview card counted only skills from the managed library, so an agent whose skills were installed by other means showed 0. The card now counts each agent's real on-disk skills, matching the per-agent detail badge (#287).
- Dark-theme agent icons are visible again — Monochrome-black agent icons (codex, roo_code) were invisible on dark backgrounds; they are now inverted under the dark theme (#279, #304).
Developer & Governance
migrate_repo_if_neededwas rewritten to be infallible — it returns a decision (Proceed/UseSource) instead of an error, so a migration failure can never panic through the pre-window.expectinrun(). Root cause: the crash only occurred when overwriting an existing read-only file, so migration now refuses any non-empty target (never blind-merging older source over newer data) and a fresh target makes the copy structurally incapable of overwriting a read-only pack. On failure it falls back to the intact source via a runtime base-dir override; detailed errors are deferred torecord_startup_errorand flushed once the logger exists (the pre-loggerlog::error!was a no-op); migration is skipped when a CLI base override is active. A grok review pass added two fixes: source/target are compared canonically (fs::canonicalize) so a cosmetic path difference — case,8.3, or a symlink — isn't taken for a real move and looped forever; and the fallback banner was reworded so it never tells the user to empty the path shown in Settings (which, under the override, is the live library). +6 Rust tests.- The Windows long-path fix embeds a custom app manifest via
build.rs(app_manifest()replaces Tauri's default, so the Common-Controls v6 dependency is re-declared); it is ignored on non-Windows targets. The workspace/backup/icon fixes (#302, #287, #279/#304) were codex (gpt-5.5) reviewed; follow-ups: conflict-resolution and background auto-backup completion also refresh presets/skills, and overview counts rebuild fresh so a failed scan falls back to the managed library. - Backend Rust suite at 393 passing; frontend
npm run buildclean.
Current Verification
- ✅ Cross-platform build passed (macOS Intel / macOS ARM / Windows x64 / Linux x64)
- ✅ TypeScript typecheck passed
完整变更:v1.28.2...v1.28.3