mirror of
https://github.com/browseros-ai/BrowserOS.git
synced 2026-05-13 23:53:25 +00:00
* fix(skills): separate built-in and user skills into distinct directories - Move built-in skills to ~/.browseros/skills/builtin/, user skills stay in root - Unify seed + sync into single syncBuiltinSkills() function, delete seed.ts - Preserve user's enabled/disabled state during remote sync version updates - Add catalog reconciliation — remove built-in skills dropped from remote catalog - Fallback to bundled defaults per-skill when remote sync fails - One-time migration moves existing default skills from root to builtin/ - Add builtIn field to SkillMeta, determined by directory (not metadata) - UI shows "Built-in" badge, hides delete button for built-in skills - Reject deletion of built-in skills in service layer - Check both dirs for ID collision on skill creation * fix(skills): address review — dedup by id, guard applyEnabled regex - loader.ts: deduplication now keys on skill.id (directory slug) not skill.name (display name), preventing silent drops on name collision - remote-sync.ts: applyEnabled checks if regex matched before writing, logs warning if remote content lacks an enabled field * fix(skills): reconciliation preserves bundled defaults, delete returns 403 - reconcileRemovedSkills now keeps DEFAULT_SKILLS IDs in the safe set, preventing delete-then-reinstall cycle that lost enabled:false state - DELETE /skills/:id returns 403 for built-in skills instead of 500 * refactor(skills): simplify syncBuiltinSkills to single clean pass Build content map (bundled + remote), iterate once, preserve enabled, reconcile deletions. Removes 7 helper functions, 70 lines of code. * refactor(skills): extract syncOneSkill, patch content before writing - syncBuiltinSkills is now 15 lines: build map, iterate, clean up - syncOneSkill: flat, patches enabled state before writing (single write) - setEnabled: pure function for content patching - removeObsoleteSkills: extracted from inline block