The rescued rich UI (rich-extension.ts, from the orphaned 0.0.1 experiment) carries its own skills.sh search, install, uninstall, popular-cache and skillkit-bin discovery instead of importing src/marketplace.ts and src/skillkit.ts. Data paths (scanner, conversations, tool-configs) are already unified through the shim; the marketplace/exec layer is the remaining duplication.
Fold rich-extension's marketplace handlers onto src/marketplace.ts exports (searchSkills, installSkillAsync, removeSkillAsync, getPopularSkills), keeping the rich extras worth preserving: multi-query popular cache and cleanupCopies on uninstall (consider upstreaming both into src/marketplace.ts so Obsidian benefits too).
Deliberately deferred during the rescue (#31): rewiring 1,400 lines of handlers without a test harness overnight was more risk than the duplication costs.
The rescued rich UI (rich-extension.ts, from the orphaned 0.0.1 experiment) carries its own skills.sh search, install, uninstall, popular-cache and skillkit-bin discovery instead of importing src/marketplace.ts and src/skillkit.ts. Data paths (scanner, conversations, tool-configs) are already unified through the shim; the marketplace/exec layer is the remaining duplication.
Fold rich-extension's marketplace handlers onto src/marketplace.ts exports (searchSkills, installSkillAsync, removeSkillAsync, getPopularSkills), keeping the rich extras worth preserving: multi-query popular cache and cleanupCopies on uninstall (consider upstreaming both into src/marketplace.ts so Obsidian benefits too).
Deliberately deferred during the rescue (#31): rewiring 1,400 lines of handlers without a test harness overnight was more risk than the duplication costs.