Skills Manager v1.22.4
发布日期:2026-05-30
递交范围:v1.22.3...v1.22.4
发布概览
- 一个修复版本:把全局工作区的技能上传到技能仓库后,卡片上消失的删除/管理按钮重新出现;同时让「有可用更新」徽标和 Diff 标签页实际展示的内容保持一致。
用户可见更新
- 上传后的技能重新有了删除按钮 —— 把技能从全局工作区上传到技能仓库后,卡片以前会变得没有任何操作按钮:技能虽已同步却处于「未托管」状态,既没有删除键也没有重新上传键。现在新上传的技能会被注册为受管目标;同时新增一次性的启动修复,把此前因旧逻辑而卡死的技能的按钮也补回来。
- 更新徽标与 Diff 现在一致了 —— 「有可用更新」徽标是对整个技能目录做哈希,而 Diff 标签页以前只比较主文件
SKILL.md,因此references/、scripts/里的改动、文件增删、或可执行位变化都会点亮更新提示却显示空 diff。现在 Diff 标签页会按文件展示整个技能目录的改动,徽标和 diff 始终对得上。
开发者与治理更新
- 把本地 agent 技能上传到中心时,改为复用常规的
sync_single_skill_to_tool路径,使被采纳的技能成为与其他受管技能一致的受管目标;若目标注册失败,则回滚刚插入的技能记录。 - 新增启动修复
backfill_stranded_agent_targets:扫描每个已安装且启用的 agent,找出source_ref指向 agent 技能目录、却没有对应 target 的中心技能。它严格按source_ref匹配(绝不按内容哈希,以免误认领相似技能),且只修复工作区判定为in_sync的技能(因为同步会用中央副本重写 agent 侧产物)。该过程幂等,并在所有技能都已有 target 后通过廉价预检直接短路。 - 抽出统一的文件枚举辅助函数(
content_hash::list_content_files)供哈希和 diff 共用,确保两者范围永不漂移;新增get_skill_source_diff命令,返回按文件分项的差异(新增 / 删除 / 修改;文本 / 二进制 / 过大 / 仅权限变化);Diff 标签页按每个改动文件渲染SkillSourceDiffViewer,并在打开时懒加载。 - 在 README 中记录 macOS 15 Gatekeeper「无法验证此 App 不含恶意软件」对话框,附截图与照常打开 App 的步骤。
- CI:跳过 rust-cache 的保存步骤,避免 Windows 发布构建出现误报失败。
当前校验状态
- ✅ 跨平台构建通过(macOS Intel / macOS ARM / Windows x64 / Linux x64)
- ✅ TypeScript typecheck 通过
English release notes
Release date: 2026-05-30
Commit range: v1.22.3...v1.22.4
Release Overview
- A fix release that restores the missing delete/manage button after uploading a global-workspace skill to the central library, and makes the "update available" badge agree with what the Diff tab actually shows.
User-facing
- Uploaded skills get their delete button back — Uploading a skill from the Global Workspace to the central library used to leave the card with no actions at all: the skill was synced but unmanaged, so neither a delete nor a re-upload button appeared. Newly uploaded skills are now registered as managed targets, and a one-time startup repair restores the button for skills that were already stranded by the earlier behavior.
- Update badge and diff now agree — The "update available" badge hashed the whole skill directory, but the Diff tab only compared the main
SKILL.md, so a change insidereferences/,scripts/, an added/removed file, or an exec-bit flip would flag an update yet show an empty diff. The Diff tab now reports per-file changes across the entire skill directory, so the badge and the diff always match.
Developer & Governance
- Uploading a local agent skill to the center now reuses the regular
sync_single_skill_to_toolpath so the adopted skill becomes a managed target consistent with every other managed skill; the freshly inserted skill row is rolled back if target registration fails. - Added a
backfill_stranded_agent_targetsstartup repair that scans each installed, enabled agent for center skills whosesource_refpoints at an agent skills dir but lack a target. It matches strictly bysource_ref(never content hash, to avoid adopting look-alikes) and only repairs skills the workspace classifies asin_sync(since the sync rewrites the agent artifact from central). The pass is idempotent and short-circuits on a cheap pre-check once everything is targeted. - Shared one file-enumeration helper (
content_hash::list_content_files) for both hashing and diffing so their scope can never drift, and added aget_skill_source_diffcommand returning per-file entries (added / removed / modified; text / binary / too_large / permission_only); the Diff tab rendersSkillSourceDiffViewerper changed file, lazily loaded on open. - Documented the macOS 15 Gatekeeper "could not verify this app is free of malware" dialog in the README, with a screenshot and the steps to open the app anyway.
- CI: skip the rust-cache save step to avoid false-positive failures on Windows release builds.
Current Verification
- ✅ Cross-platform build passed (macOS Intel / macOS ARM / Windows x64 / Linux x64)
- ✅ TypeScript typecheck passed
完整变更:v1.22.3...v1.22.4