@hasna/skills 0.0.3 → 0.0.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (582) hide show
  1. package/LICENSE +200 -0
  2. package/README.md +19 -91
  3. package/bin/index.js +804 -324
  4. package/bin/mcp.js +465 -233
  5. package/dist/cli/cli.test.d.ts +1 -0
  6. package/dist/cli/components/App.d.ts +6 -0
  7. package/dist/cli/components/CategorySelect.d.ts +6 -0
  8. package/dist/cli/components/Header.d.ts +6 -0
  9. package/dist/cli/components/InstallProgress.d.ts +8 -0
  10. package/dist/cli/components/SearchView.d.ts +8 -0
  11. package/dist/cli/components/SkillSelect.d.ts +10 -0
  12. package/dist/cli/index.d.ts +2 -0
  13. package/dist/index.d.ts +12 -0
  14. package/{src/lib/registry.ts → dist/index.js} +727 -267
  15. package/dist/index.test.d.ts +1 -0
  16. package/dist/lib/installer.d.ts +67 -0
  17. package/dist/lib/installer.test.d.ts +1 -0
  18. package/dist/lib/registry.d.ts +16 -0
  19. package/dist/lib/registry.test.d.ts +1 -0
  20. package/dist/lib/skillinfo-run.test.d.ts +1 -0
  21. package/dist/lib/skillinfo.d.ts +44 -0
  22. package/dist/lib/skillinfo.test.d.ts +1 -0
  23. package/dist/lib/utils.d.ts +4 -0
  24. package/dist/lib/utils.test.d.ts +1 -0
  25. package/dist/lib/validation.test.d.ts +1 -0
  26. package/dist/mcp/index.d.ts +10 -0
  27. package/dist/mcp/mcp.test.d.ts +1 -0
  28. package/dist/server/serve.d.ts +7 -0
  29. package/package.json +16 -5
  30. package/skills/_common/index.ts +23 -0
  31. package/skills/skill-academic-journal-matcher/package.json +9 -8
  32. package/skills/skill-academic-journal-matcher/tsconfig.json +6 -10
  33. package/skills/skill-action-item-router/package.json +9 -8
  34. package/skills/skill-action-item-router/tsconfig.json +6 -10
  35. package/skills/skill-ad-creative-generator/package.json +9 -8
  36. package/skills/skill-ad-creative-generator/tsconfig.json +6 -10
  37. package/skills/skill-advanced-math/package.json +9 -8
  38. package/skills/skill-advanced-math/tsconfig.json +6 -10
  39. package/skills/skill-analyze-data/package.json +3 -5
  40. package/skills/skill-analyze-data/tsconfig.json +12 -9
  41. package/skills/skill-anomaly-investigator/package.json +9 -8
  42. package/skills/skill-anomaly-investigator/tsconfig.json +6 -10
  43. package/skills/skill-api-test-suite/package.json +9 -8
  44. package/skills/skill-api-test-suite/tsconfig.json +6 -10
  45. package/skills/skill-apidocs/CLAUDE.md +1 -1
  46. package/skills/skill-apidocs/LICENSE +192 -21
  47. package/skills/skill-apidocs/package.json +1 -2
  48. package/skills/skill-apidocs/tsconfig.json +12 -9
  49. package/skills/skill-audio/package.json +1 -1
  50. package/skills/skill-audio/src/index-local.ts +1 -1
  51. package/skills/skill-audio/src/index.ts +1 -2
  52. package/skills/skill-audio/tsconfig.json +11 -8
  53. package/skills/skill-audio-cleanup-lab/package.json +2 -5
  54. package/skills/skill-audio-cleanup-lab/tsconfig.json +6 -10
  55. package/skills/skill-audiobook-chapter-proofer/package.json +9 -8
  56. package/skills/skill-audiobook-chapter-proofer/tsconfig.json +6 -10
  57. package/skills/skill-banner-ad-suite/package.json +9 -8
  58. package/skills/skill-banner-ad-suite/tsconfig.json +6 -10
  59. package/skills/skill-benchmark-finder/package.json +9 -8
  60. package/skills/skill-benchmark-finder/tsconfig.json +6 -10
  61. package/skills/skill-bio-sequence-tool/package.json +9 -8
  62. package/skills/skill-bio-sequence-tool/tsconfig.json +6 -10
  63. package/skills/skill-blog-topic-cluster/package.json +9 -8
  64. package/skills/skill-blog-topic-cluster/tsconfig.json +6 -10
  65. package/skills/skill-brand-style-guide/package.json +3 -4
  66. package/skills/skill-brand-style-guide/tsconfig.json +12 -9
  67. package/skills/skill-brand-voice-audit/package.json +9 -8
  68. package/skills/skill-brand-voice-audit/tsconfig.json +6 -10
  69. package/skills/skill-browse/LICENSE +192 -21
  70. package/skills/skill-browse/package.json +1 -1
  71. package/skills/skill-browse/src/index-local.ts +1 -1
  72. package/skills/skill-browse/src/index.ts +1 -2
  73. package/skills/skill-browse/tsconfig.json +11 -8
  74. package/skills/skill-budget-variance-analyzer/package.json +2 -4
  75. package/skills/skill-budget-variance-analyzer/tsconfig.json +12 -7
  76. package/skills/skill-businessactivity/LICENSE +192 -21
  77. package/skills/skill-businessactivity/package.json +1 -1
  78. package/skills/skill-businessactivity/tsconfig.json +15 -7
  79. package/skills/skill-calendar-events/package.json +9 -8
  80. package/skills/skill-calendar-events/tsconfig.json +6 -10
  81. package/skills/skill-campaign-metric-brief/package.json +9 -8
  82. package/skills/skill-campaign-metric-brief/tsconfig.json +6 -10
  83. package/skills/skill-campaign-moodboard/package.json +9 -8
  84. package/skills/skill-campaign-moodboard/tsconfig.json +6 -10
  85. package/skills/skill-caption-style-stylist/package.json +9 -8
  86. package/skills/skill-caption-style-stylist/tsconfig.json +6 -10
  87. package/skills/skill-chemistry-calculator/package.json +9 -8
  88. package/skills/skill-chemistry-calculator/tsconfig.json +6 -10
  89. package/skills/skill-churn-risk-notifier/package.json +9 -8
  90. package/skills/skill-churn-risk-notifier/tsconfig.json +6 -10
  91. package/skills/skill-citation-formatter/package.json +9 -8
  92. package/skills/skill-citation-formatter/tsconfig.json +6 -10
  93. package/skills/skill-classroom-newsletter-kit/package.json +9 -8
  94. package/skills/skill-classroom-newsletter-kit/tsconfig.json +6 -10
  95. package/skills/skill-codefix/LICENSE +192 -21
  96. package/skills/skill-codefix/src/index-local.ts +1 -1
  97. package/skills/skill-codefix/src/index.ts +1 -2
  98. package/skills/skill-codefix/tsconfig.json +9 -10
  99. package/skills/skill-color-palette-harmonizer/package.json +9 -8
  100. package/skills/skill-color-palette-harmonizer/tsconfig.json +6 -10
  101. package/skills/skill-competitor-ad-analyzer/package.json +9 -8
  102. package/skills/skill-competitor-ad-analyzer/tsconfig.json +6 -10
  103. package/skills/skill-compliance-copy-check/package.json +9 -8
  104. package/skills/skill-compliance-copy-check/tsconfig.json +6 -10
  105. package/skills/skill-compliance-report-pack/package.json +9 -8
  106. package/skills/skill-compliance-report-pack/tsconfig.json +6 -10
  107. package/skills/skill-compress-video/package.json +2 -5
  108. package/skills/skill-compress-video/tsconfig.json +6 -10
  109. package/skills/skill-consolelog/LICENSE +192 -21
  110. package/skills/skill-consolelog/package.json +1 -2
  111. package/skills/skill-consolelog/tsconfig.json +14 -10
  112. package/skills/skill-contract-plainlanguage/package.json +9 -8
  113. package/skills/skill-contract-plainlanguage/tsconfig.json +6 -10
  114. package/skills/skill-convert/LICENSE +192 -21
  115. package/skills/skill-convert/src/index-local.ts +1 -1
  116. package/skills/skill-convert/src/index.ts +1 -2
  117. package/skills/skill-convert/tsconfig.json +9 -10
  118. package/skills/skill-copytone-translator/package.json +9 -8
  119. package/skills/skill-copytone-translator/tsconfig.json +6 -10
  120. package/skills/skill-create-blog-article/package.json +9 -8
  121. package/skills/skill-create-blog-article/tsconfig.json +6 -10
  122. package/skills/skill-create-ebook/package.json +9 -8
  123. package/skills/skill-create-ebook/tsconfig.json +6 -10
  124. package/skills/skill-crm-note-enhancer/package.json +9 -8
  125. package/skills/skill-crm-note-enhancer/tsconfig.json +6 -10
  126. package/skills/skill-customer-journey-mapper/package.json +9 -8
  127. package/skills/skill-customer-journey-mapper/tsconfig.json +6 -10
  128. package/skills/skill-dashboard-builder/package.json +9 -8
  129. package/skills/skill-dashboard-builder/tsconfig.json +6 -10
  130. package/skills/skill-dashboard-narrator/package.json +9 -8
  131. package/skills/skill-dashboard-narrator/tsconfig.json +6 -10
  132. package/skills/skill-data-anonymizer/package.json +9 -8
  133. package/skills/skill-data-anonymizer/tsconfig.json +6 -10
  134. package/skills/skill-database-explorer/package.json +9 -8
  135. package/skills/skill-database-explorer/tsconfig.json +6 -10
  136. package/skills/skill-dataset-health-check/package.json +9 -8
  137. package/skills/skill-dataset-health-check/tsconfig.json +6 -10
  138. package/skills/skill-decision-journal/package.json +9 -8
  139. package/skills/skill-decision-journal/tsconfig.json +6 -10
  140. package/skills/skill-deepresearch/package.json +1 -1
  141. package/skills/skill-deepresearch/tsconfig.json +11 -9
  142. package/skills/skill-delegation-brief-writer/package.json +9 -8
  143. package/skills/skill-delegation-brief-writer/tsconfig.json +6 -10
  144. package/skills/skill-deploy/LICENSE +192 -21
  145. package/skills/skill-deploy/src/hosts.ts +9 -26
  146. package/skills/skill-deploy/src/http-client.ts +1 -1
  147. package/skills/skill-deploy/src/index-local.ts +1 -1
  148. package/skills/skill-deploy/src/index.ts +1 -1
  149. package/skills/skill-deploy/tsconfig.json +10 -9
  150. package/skills/skill-destination-briefing/package.json +9 -8
  151. package/skills/skill-destination-briefing/tsconfig.json +6 -10
  152. package/skills/skill-diff-viewer/package.json +9 -8
  153. package/skills/skill-diff-viewer/tsconfig.json +6 -10
  154. package/skills/skill-domainpurchase/.env.example +1 -1
  155. package/skills/skill-domainpurchase/LICENSE +192 -21
  156. package/skills/skill-domainpurchase/package.json +3 -4
  157. package/skills/skill-domainpurchase/src/lib/config.ts +2 -2
  158. package/skills/skill-domainpurchase/tsconfig.json +4 -5
  159. package/skills/skill-domainsearch/.env.example +1 -1
  160. package/skills/skill-domainsearch/LICENSE +192 -21
  161. package/skills/skill-domainsearch/package.json +3 -5
  162. package/skills/skill-domainsearch/tsconfig.json +4 -4
  163. package/skills/skill-e2bswarm/package.json +1 -1
  164. package/skills/skill-e2bswarm/src/lib/config.ts +3 -6
  165. package/skills/skill-e2bswarm/tsconfig.json +9 -10
  166. package/skills/skill-educational-resource-finder/package.json +9 -8
  167. package/skills/skill-educational-resource-finder/tsconfig.json +6 -10
  168. package/skills/skill-email-campaign/package.json +9 -8
  169. package/skills/skill-email-campaign/tsconfig.json +6 -10
  170. package/skills/skill-emoji/package.json +1 -1
  171. package/skills/skill-emoji/tsconfig.json +9 -9
  172. package/skills/skill-exam-readiness-check/package.json +9 -8
  173. package/skills/skill-exam-readiness-check/tsconfig.json +6 -10
  174. package/skills/skill-experiment-power-calculator/package.json +9 -8
  175. package/skills/skill-experiment-power-calculator/tsconfig.json +6 -10
  176. package/skills/skill-extract/LICENSE +192 -21
  177. package/skills/skill-extract/package.json +1 -1
  178. package/skills/skill-extract/src/index-local.ts +1 -1
  179. package/skills/skill-extract/src/index.ts +1 -2
  180. package/skills/skill-extract/tsconfig.json +11 -9
  181. package/skills/skill-extract-audio/package.json +2 -5
  182. package/skills/skill-extract-audio/tsconfig.json +6 -10
  183. package/skills/skill-extract-frames/package.json +9 -8
  184. package/skills/skill-extract-frames/tsconfig.json +6 -10
  185. package/skills/skill-extract-invoice/package.json +9 -8
  186. package/skills/skill-extract-invoice/tsconfig.json +6 -10
  187. package/skills/skill-family-activity-curator/package.json +9 -8
  188. package/skills/skill-family-activity-curator/tsconfig.json +6 -10
  189. package/skills/skill-faq-packager/package.json +9 -8
  190. package/skills/skill-faq-packager/tsconfig.json +6 -10
  191. package/skills/skill-feedback-survey-designer/package.json +9 -8
  192. package/skills/skill-feedback-survey-designer/tsconfig.json +6 -10
  193. package/skills/skill-field-trip-planner/package.json +9 -8
  194. package/skills/skill-field-trip-planner/tsconfig.json +6 -10
  195. package/skills/skill-file-organizer/package.json +9 -8
  196. package/skills/skill-file-organizer/tsconfig.json +6 -10
  197. package/skills/skill-folder-tree/package.json +9 -8
  198. package/skills/skill-folder-tree/tsconfig.json +6 -10
  199. package/skills/skill-forecast-scenario-lab/package.json +9 -8
  200. package/skills/skill-forecast-scenario-lab/tsconfig.json +6 -10
  201. package/skills/skill-form-filler/package.json +9 -8
  202. package/skills/skill-form-filler/tsconfig.json +6 -10
  203. package/skills/skill-generate-api-client/package.json +9 -8
  204. package/skills/skill-generate-api-client/tsconfig.json +6 -10
  205. package/skills/skill-generate-book-cover/package.json +9 -8
  206. package/skills/skill-generate-book-cover/tsconfig.json +6 -10
  207. package/skills/skill-generate-chart/package.json +9 -8
  208. package/skills/skill-generate-chart/tsconfig.json +6 -10
  209. package/skills/skill-generate-diagram/package.json +9 -8
  210. package/skills/skill-generate-diagram/tsconfig.json +6 -10
  211. package/skills/skill-generate-dockerfile/package.json +9 -8
  212. package/skills/skill-generate-dockerfile/tsconfig.json +6 -10
  213. package/skills/skill-generate-documentation/package.json +9 -8
  214. package/skills/skill-generate-documentation/tsconfig.json +6 -10
  215. package/skills/skill-generate-docx/package.json +3 -5
  216. package/skills/skill-generate-docx/tsconfig.json +10 -10
  217. package/skills/skill-generate-env/package.json +9 -8
  218. package/skills/skill-generate-env/tsconfig.json +6 -10
  219. package/skills/skill-generate-excel/package.json +9 -8
  220. package/skills/skill-generate-excel/tsconfig.json +6 -10
  221. package/skills/skill-generate-favicon/package.json +9 -8
  222. package/skills/skill-generate-favicon/tsconfig.json +6 -10
  223. package/skills/skill-generate-mock-data/package.json +9 -8
  224. package/skills/skill-generate-mock-data/tsconfig.json +6 -10
  225. package/skills/skill-generate-pdf/package.json +3 -5
  226. package/skills/skill-generate-pdf/tsconfig.json +10 -10
  227. package/skills/skill-generate-pr-description/package.json +9 -8
  228. package/skills/skill-generate-pr-description/tsconfig.json +6 -10
  229. package/skills/skill-generate-presentation/package.json +9 -8
  230. package/skills/skill-generate-presentation/tsconfig.json +6 -10
  231. package/skills/skill-generate-qrcode/package.json +9 -8
  232. package/skills/skill-generate-qrcode/tsconfig.json +6 -10
  233. package/skills/skill-generate-regex/package.json +9 -8
  234. package/skills/skill-generate-regex/tsconfig.json +6 -10
  235. package/skills/skill-generate-resume/package.json +9 -8
  236. package/skills/skill-generate-resume/tsconfig.json +6 -10
  237. package/skills/skill-generate-sitemap/package.json +9 -8
  238. package/skills/skill-generate-sitemap/tsconfig.json +6 -10
  239. package/skills/skill-generate-social-posts/package.json +9 -8
  240. package/skills/skill-generate-social-posts/tsconfig.json +6 -10
  241. package/skills/skill-generate-sql/package.json +9 -8
  242. package/skills/skill-generate-sql/tsconfig.json +6 -10
  243. package/skills/skill-gif-maker/package.json +9 -8
  244. package/skills/skill-gif-maker/tsconfig.json +6 -10
  245. package/skills/skill-github-manager/package.json +9 -8
  246. package/skills/skill-github-manager/tsconfig.json +6 -10
  247. package/skills/skill-gmail/package.json +9 -8
  248. package/skills/skill-gmail/tsconfig.json +6 -10
  249. package/skills/skill-goal-quarterly-roadmap/package.json +9 -8
  250. package/skills/skill-goal-quarterly-roadmap/tsconfig.json +6 -10
  251. package/skills/skill-grant-application-drafter/package.json +9 -8
  252. package/skills/skill-grant-application-drafter/tsconfig.json +6 -10
  253. package/skills/skill-grocery-basket-optimizer/package.json +9 -8
  254. package/skills/skill-grocery-basket-optimizer/tsconfig.json +6 -10
  255. package/skills/skill-guest-communication-suite/package.json +9 -8
  256. package/skills/skill-guest-communication-suite/tsconfig.json +6 -10
  257. package/skills/skill-habit-reflection-digest/package.json +9 -8
  258. package/skills/skill-habit-reflection-digest/tsconfig.json +6 -10
  259. package/skills/skill-highlight-reel-generator/package.json +9 -8
  260. package/skills/skill-highlight-reel-generator/tsconfig.json +6 -10
  261. package/skills/skill-homework-feedback-coach/package.json +9 -8
  262. package/skills/skill-homework-feedback-coach/tsconfig.json +6 -10
  263. package/skills/skill-hook/LICENSE +192 -21
  264. package/skills/skill-hook/package.json +1 -1
  265. package/skills/skill-hook/src/commands/create.ts +1 -1
  266. package/skills/skill-hook/tsconfig.json +8 -8
  267. package/skills/skill-household-maintenance-mgr/package.json +9 -8
  268. package/skills/skill-household-maintenance-mgr/tsconfig.json +6 -10
  269. package/skills/skill-http-server/package.json +9 -8
  270. package/skills/skill-http-server/tsconfig.json +6 -10
  271. package/skills/skill-image/LICENSE +192 -21
  272. package/skills/skill-image/package.json +1 -1
  273. package/skills/skill-image/src/index-local.ts +1 -1
  274. package/skills/skill-image/src/index.ts +1 -2
  275. package/skills/skill-image/tsconfig.json +11 -9
  276. package/skills/skill-implementation/LICENSE +192 -21
  277. package/skills/skill-implementation/package.json +1 -1
  278. package/skills/skill-implementation/tsconfig.json +8 -8
  279. package/skills/skill-implementation-agent/package.json +9 -8
  280. package/skills/skill-implementation-agent/tsconfig.json +6 -10
  281. package/skills/skill-implementation-plan/package.json +9 -8
  282. package/skills/skill-implementation-plan/tsconfig.json +6 -10
  283. package/skills/skill-implementation-todo/package.json +9 -8
  284. package/skills/skill-implementation-todo/tsconfig.json +6 -10
  285. package/skills/skill-inbox-priority-planner/package.json +9 -8
  286. package/skills/skill-inbox-priority-planner/tsconfig.json +6 -10
  287. package/skills/skill-invoice/LICENSE +192 -21
  288. package/skills/skill-invoice/README.md +1 -1
  289. package/skills/skill-invoice/tsconfig.json +13 -9
  290. package/skills/skill-invoice-dispute-helper/package.json +9 -8
  291. package/skills/skill-invoice-dispute-helper/tsconfig.json +6 -10
  292. package/skills/skill-itinerary-architect/package.json +9 -8
  293. package/skills/skill-itinerary-architect/tsconfig.json +6 -10
  294. package/skills/skill-jingle-composer/package.json +9 -8
  295. package/skills/skill-jingle-composer/tsconfig.json +6 -10
  296. package/skills/skill-kpi-digest-generator/package.json +9 -8
  297. package/skills/skill-kpi-digest-generator/tsconfig.json +6 -10
  298. package/skills/skill-lab-notebook-formatter/package.json +9 -8
  299. package/skills/skill-lab-notebook-formatter/tsconfig.json +6 -10
  300. package/skills/skill-landing-page-copy/package.json +9 -8
  301. package/skills/skill-landing-page-copy/tsconfig.json +6 -10
  302. package/skills/skill-latex-table-generator/package.json +9 -8
  303. package/skills/skill-latex-table-generator/tsconfig.json +6 -10
  304. package/skills/skill-learning-style-profiler/package.json +9 -8
  305. package/skills/skill-learning-style-profiler/tsconfig.json +6 -10
  306. package/skills/skill-lesson-plan-customizer/package.json +9 -8
  307. package/skills/skill-lesson-plan-customizer/tsconfig.json +6 -10
  308. package/skills/skill-livestream-runofshow/package.json +9 -8
  309. package/skills/skill-livestream-runofshow/tsconfig.json +6 -10
  310. package/skills/skill-longform-structurer/package.json +9 -8
  311. package/skills/skill-longform-structurer/tsconfig.json +6 -10
  312. package/skills/skill-lorem-generator/package.json +9 -8
  313. package/skills/skill-lorem-generator/tsconfig.json +6 -10
  314. package/skills/skill-managehook/.env.example +2 -2
  315. package/skills/skill-managehook/CLAUDE.md +23 -134
  316. package/skills/skill-managehook/README.md +28 -27
  317. package/skills/skill-managehook/package.json +5 -6
  318. package/skills/skill-managehook/src/db/index.ts +2 -2
  319. package/skills/skill-managehook/src/lib/api-client.ts +2 -2
  320. package/skills/skill-managehook/src/lib/config.ts +1 -1
  321. package/skills/skill-managehook/src/lib/service-dir.ts +2 -2
  322. package/skills/skill-managehook/src/server/index.ts +2 -2
  323. package/skills/skill-managehook/tsconfig.json +15 -7
  324. package/skills/skill-managemcp/.env.example +2 -2
  325. package/skills/skill-managemcp/CLAUDE.md +23 -134
  326. package/skills/skill-managemcp/README.md +28 -27
  327. package/skills/skill-managemcp/package.json +5 -6
  328. package/skills/skill-managemcp/src/db/index.ts +2 -2
  329. package/skills/skill-managemcp/src/lib/api-client.ts +2 -2
  330. package/skills/skill-managemcp/src/lib/config.ts +1 -1
  331. package/skills/skill-managemcp/src/lib/service-dir.ts +2 -2
  332. package/skills/skill-managemcp/src/server/index.ts +2 -2
  333. package/skills/skill-managemcp/tsconfig.json +15 -7
  334. package/skills/skill-manageskill/.env.example +2 -2
  335. package/skills/skill-manageskill/CLAUDE.md +23 -134
  336. package/skills/skill-manageskill/README.md +28 -27
  337. package/skills/skill-manageskill/package.json +5 -6
  338. package/skills/skill-manageskill/src/db/index.ts +2 -2
  339. package/skills/skill-manageskill/src/lib/api-client.ts +2 -2
  340. package/skills/skill-manageskill/src/lib/config.ts +1 -1
  341. package/skills/skill-manageskill/src/lib/service-dir.ts +2 -2
  342. package/skills/skill-manageskill/src/server/index.ts +2 -2
  343. package/skills/skill-manageskill/tsconfig.json +15 -7
  344. package/skills/skill-markdown-validator/package.json +9 -8
  345. package/skills/skill-markdown-validator/tsconfig.json +6 -10
  346. package/skills/skill-mcp-builder/package.json +9 -8
  347. package/skills/skill-mcp-builder/tsconfig.json +6 -10
  348. package/skills/skill-meal-plan-designer/package.json +9 -8
  349. package/skills/skill-meal-plan-designer/tsconfig.json +6 -10
  350. package/skills/skill-meeting-insight-summarizer/package.json +9 -8
  351. package/skills/skill-meeting-insight-summarizer/tsconfig.json +6 -10
  352. package/skills/skill-merge-pdfs/package.json +9 -8
  353. package/skills/skill-merge-pdfs/tsconfig.json +6 -10
  354. package/skills/skill-microcopy-generator/package.json +9 -8
  355. package/skills/skill-microcopy-generator/tsconfig.json +6 -10
  356. package/skills/skill-mindfulness-prompt-cache/package.json +9 -8
  357. package/skills/skill-mindfulness-prompt-cache/tsconfig.json +6 -10
  358. package/skills/skill-notion-manager/package.json +9 -8
  359. package/skills/skill-notion-manager/tsconfig.json +6 -10
  360. package/skills/skill-npmpublish/package.json +1 -1
  361. package/skills/skill-npmpublish/tsconfig.json +7 -7
  362. package/skills/skill-onboarding-sequence-builder/package.json +9 -8
  363. package/skills/skill-onboarding-sequence-builder/tsconfig.json +6 -10
  364. package/skills/skill-onsite-ops-checklist/package.json +9 -8
  365. package/skills/skill-onsite-ops-checklist/tsconfig.json +6 -10
  366. package/skills/skill-outreach-cadence-designer/package.json +9 -8
  367. package/skills/skill-outreach-cadence-designer/tsconfig.json +6 -10
  368. package/skills/skill-packaging-concept-studio/package.json +9 -8
  369. package/skills/skill-packaging-concept-studio/tsconfig.json +6 -10
  370. package/skills/skill-packing-plan-pro/package.json +9 -8
  371. package/skills/skill-packing-plan-pro/tsconfig.json +6 -10
  372. package/skills/skill-parent-teacher-brief/package.json +9 -8
  373. package/skills/skill-parent-teacher-brief/tsconfig.json +6 -10
  374. package/skills/skill-partner-kit-assembler/package.json +9 -8
  375. package/skills/skill-partner-kit-assembler/tsconfig.json +6 -10
  376. package/skills/skill-payroll-change-prepper/package.json +9 -8
  377. package/skills/skill-payroll-change-prepper/tsconfig.json +6 -10
  378. package/skills/skill-persona-based-adwriter/package.json +9 -8
  379. package/skills/skill-persona-based-adwriter/tsconfig.json +6 -10
  380. package/skills/skill-persona-generator/package.json +9 -8
  381. package/skills/skill-persona-generator/tsconfig.json +6 -10
  382. package/skills/skill-personal-daily-ops/package.json +9 -8
  383. package/skills/skill-personal-daily-ops/tsconfig.json +6 -10
  384. package/skills/skill-pet-care-scheduler/package.json +9 -8
  385. package/skills/skill-pet-care-scheduler/tsconfig.json +6 -10
  386. package/skills/skill-podcast-show-notes/package.json +9 -8
  387. package/skills/skill-podcast-show-notes/tsconfig.json +6 -10
  388. package/skills/skill-presentation-theme-maker/package.json +9 -8
  389. package/skills/skill-presentation-theme-maker/tsconfig.json +6 -10
  390. package/skills/skill-press-release-drafter/package.json +9 -8
  391. package/skills/skill-press-release-drafter/tsconfig.json +6 -10
  392. package/skills/skill-print-collateral-designer/package.json +9 -8
  393. package/skills/skill-print-collateral-designer/tsconfig.json +6 -10
  394. package/skills/skill-procurement-scorecard/package.json +9 -8
  395. package/skills/skill-procurement-scorecard/tsconfig.json +6 -10
  396. package/skills/skill-product-demo-script/package.json +9 -8
  397. package/skills/skill-product-demo-script/tsconfig.json +6 -10
  398. package/skills/skill-product-mockup/package.json +9 -8
  399. package/skills/skill-product-mockup/tsconfig.json +6 -10
  400. package/skills/skill-project-retro-companion/package.json +9 -8
  401. package/skills/skill-project-retro-companion/tsconfig.json +6 -10
  402. package/skills/skill-proposal-redline-advisor/package.json +9 -8
  403. package/skills/skill-proposal-redline-advisor/tsconfig.json +6 -10
  404. package/skills/skill-regex-tester/package.json +9 -8
  405. package/skills/skill-regex-tester/tsconfig.json +6 -10
  406. package/skills/skill-remove-background/package.json +9 -8
  407. package/skills/skill-remove-background/tsconfig.json +6 -10
  408. package/skills/skill-risk-disclosure-kit/package.json +9 -8
  409. package/skills/skill-risk-disclosure-kit/tsconfig.json +6 -10
  410. package/skills/skill-roi-comparison-tool/package.json +9 -8
  411. package/skills/skill-roi-comparison-tool/tsconfig.json +6 -10
  412. package/skills/skill-sales-call-recapper/package.json +9 -8
  413. package/skills/skill-sales-call-recapper/tsconfig.json +6 -10
  414. package/skills/skill-salescopy/LICENSE +192 -21
  415. package/skills/skill-salescopy/README.md +1 -1
  416. package/skills/skill-salescopy/tsconfig.json +13 -9
  417. package/skills/skill-scaffold-project/package.json +8 -5
  418. package/skills/skill-scaffold-project/tsconfig.json +6 -10
  419. package/skills/skill-scholarship-tracker/package.json +9 -8
  420. package/skills/skill-scholarship-tracker/tsconfig.json +6 -10
  421. package/skills/skill-scientific-figure-check/package.json +9 -8
  422. package/skills/skill-scientific-figure-check/tsconfig.json +6 -10
  423. package/skills/skill-seating-chart-maker/package.json +9 -8
  424. package/skills/skill-seating-chart-maker/tsconfig.json +6 -10
  425. package/skills/skill-security-audit/package.json +9 -8
  426. package/skills/skill-security-audit/tsconfig.json +6 -10
  427. package/skills/skill-seo-brief-builder/package.json +9 -8
  428. package/skills/skill-seo-brief-builder/tsconfig.json +6 -10
  429. package/skills/skill-slack-assistant/package.json +9 -8
  430. package/skills/skill-slack-assistant/tsconfig.json +6 -10
  431. package/skills/skill-sleep-routine-analyzer/package.json +9 -8
  432. package/skills/skill-sleep-routine-analyzer/tsconfig.json +6 -10
  433. package/skills/skill-sms/package.json +1 -1
  434. package/skills/skill-sms/tsconfig.json +10 -9
  435. package/skills/skill-social-media-kit/package.json +9 -8
  436. package/skills/skill-social-media-kit/tsconfig.json +6 -10
  437. package/skills/skill-split-pdf/package.json +9 -8
  438. package/skills/skill-split-pdf/tsconfig.json +6 -10
  439. package/skills/skill-sponsorship-proposal-lab/package.json +9 -8
  440. package/skills/skill-sponsorship-proposal-lab/tsconfig.json +6 -10
  441. package/skills/skill-spreadsheet-cleanroom/package.json +9 -8
  442. package/skills/skill-spreadsheet-cleanroom/tsconfig.json +6 -10
  443. package/skills/skill-statistical-test-selector/package.json +9 -8
  444. package/skills/skill-statistical-test-selector/tsconfig.json +6 -10
  445. package/skills/skill-stress-relief-playbook/package.json +9 -8
  446. package/skills/skill-stress-relief-playbook/tsconfig.json +6 -10
  447. package/skills/skill-study-guide-builder/package.json +9 -8
  448. package/skills/skill-study-guide-builder/tsconfig.json +6 -10
  449. package/skills/skill-subscription-spend-watcher/package.json +9 -8
  450. package/skills/skill-subscription-spend-watcher/tsconfig.json +6 -10
  451. package/skills/skill-subtitle/LICENSE +192 -21
  452. package/skills/skill-subtitle/package.json +1 -1
  453. package/skills/skill-subtitle/tsconfig.json +13 -9
  454. package/skills/skill-survey-insight-extractor/package.json +9 -8
  455. package/skills/skill-survey-insight-extractor/tsconfig.json +6 -10
  456. package/skills/skill-terraform-generator/package.json +9 -8
  457. package/skills/skill-terraform-generator/tsconfig.json +6 -10
  458. package/skills/skill-testimonial-graphics/package.json +9 -8
  459. package/skills/skill-testimonial-graphics/tsconfig.json +6 -10
  460. package/skills/skill-timesheet/package.json +1 -1
  461. package/skills/skill-timesheet/tsconfig.json +15 -7
  462. package/skills/skill-transcript/LICENSE +192 -21
  463. package/skills/skill-transcript/package.json +1 -1
  464. package/skills/skill-transcript/src/index-local.ts +1 -1
  465. package/skills/skill-transcript/src/index.ts +1 -2
  466. package/skills/skill-transcript/tsconfig.json +9 -9
  467. package/skills/skill-travel-budget-balancer/package.json +9 -8
  468. package/skills/skill-travel-budget-balancer/tsconfig.json +6 -10
  469. package/skills/skill-validate-config/package.json +9 -8
  470. package/skills/skill-validate-config/tsconfig.json +6 -10
  471. package/skills/skill-video/LICENSE +192 -21
  472. package/skills/skill-video/package.json +1 -1
  473. package/skills/skill-video/src/index-local.ts +1 -1
  474. package/skills/skill-video/src/index.ts +1 -2
  475. package/skills/skill-video/tsconfig.json +5 -8
  476. package/skills/skill-video-cut-suggester/package.json +9 -8
  477. package/skills/skill-video-cut-suggester/tsconfig.json +6 -10
  478. package/skills/skill-video-downloader/package.json +9 -8
  479. package/skills/skill-video-downloader/tsconfig.json +6 -10
  480. package/skills/skill-video-thumbnail/package.json +9 -8
  481. package/skills/skill-video-thumbnail/tsconfig.json +6 -10
  482. package/skills/skill-voiceover-casting-assistant/package.json +9 -8
  483. package/skills/skill-voiceover-casting-assistant/tsconfig.json +6 -10
  484. package/skills/skill-watermark/package.json +9 -8
  485. package/skills/skill-watermark/tsconfig.json +6 -10
  486. package/skills/skill-webcrawling/LICENSE +192 -21
  487. package/skills/skill-webcrawling/package.json +1 -1
  488. package/skills/skill-webcrawling/tsconfig.json +14 -9
  489. package/skills/skill-webinar-script-coach/package.json +9 -8
  490. package/skills/skill-webinar-script-coach/tsconfig.json +6 -10
  491. package/skills/skill-wellness-progress-reporter/package.json +9 -8
  492. package/skills/skill-wellness-progress-reporter/tsconfig.json +6 -10
  493. package/skills/skill-workout-cycle-planner/package.json +9 -8
  494. package/skills/skill-workout-cycle-planner/tsconfig.json +6 -10
  495. package/skills/skill-write/LICENSE +192 -21
  496. package/skills/skill-write/package.json +1 -1
  497. package/skills/skill-write/src/index-local.ts +1 -1
  498. package/skills/skill-write/src/index.ts +1 -2
  499. package/skills/skill-write/tsconfig.json +9 -9
  500. package/skills/tsconfig.base.json +12 -0
  501. package/.env.example +0 -18
  502. package/.npmrc.example +0 -1
  503. package/CONTRIBUTING.md +0 -32
  504. package/bunfig.toml +0 -2
  505. package/skills/skill-audio/src/index-http.ts +0 -111
  506. package/skills/skill-browse/install.sh +0 -112
  507. package/skills/skill-browse/src/auth.ts +0 -49
  508. package/skills/skill-browse/src/http-client.ts +0 -128
  509. package/skills/skill-browse/src/index-http.ts +0 -111
  510. package/skills/skill-browse/src/installer.ts +0 -324
  511. package/skills/skill-browse/src/skill-install.ts +0 -205
  512. package/skills/skill-codefix/install.sh +0 -112
  513. package/skills/skill-codefix/src/auth.ts +0 -49
  514. package/skills/skill-codefix/src/http-client.ts +0 -128
  515. package/skills/skill-codefix/src/index-http.ts +0 -111
  516. package/skills/skill-codefix/src/installer.ts +0 -324
  517. package/skills/skill-codefix/src/skill-install.ts +0 -205
  518. package/skills/skill-consolelog/storage/login-error.png +0 -0
  519. package/skills/skill-consolelog/storage/products-page.png +0 -0
  520. package/skills/skill-convert/install.sh +0 -112
  521. package/skills/skill-convert/src/auth.ts +0 -49
  522. package/skills/skill-convert/src/http-client.ts +0 -128
  523. package/skills/skill-convert/src/index-http.ts +0 -111
  524. package/skills/skill-convert/src/installer.ts +0 -324
  525. package/skills/skill-convert/src/skill-install.ts +0 -205
  526. package/skills/skill-deploy/install.sh +0 -112
  527. package/skills/skill-deploy/src/auth.ts +0 -49
  528. package/skills/skill-deploy/src/index-http.ts +0 -111
  529. package/skills/skill-deploy/src/installer.ts +0 -324
  530. package/skills/skill-deploy/src/skill-install.ts +0 -205
  531. package/skills/skill-extract/install.sh +0 -112
  532. package/skills/skill-extract/src/auth.ts +0 -49
  533. package/skills/skill-extract/src/http-client.ts +0 -128
  534. package/skills/skill-extract/src/index-http.ts +0 -111
  535. package/skills/skill-extract/src/installer.ts +0 -324
  536. package/skills/skill-extract/src/skill-install.ts +0 -205
  537. package/skills/skill-image/install.sh +0 -112
  538. package/skills/skill-image/src/auth.ts +0 -49
  539. package/skills/skill-image/src/http-client.ts +0 -128
  540. package/skills/skill-image/src/index-http.ts +0 -111
  541. package/skills/skill-image/src/installer.ts +0 -324
  542. package/skills/skill-image/src/skill-install.ts +0 -205
  543. package/skills/skill-transcript/install.sh +0 -112
  544. package/skills/skill-transcript/src/auth.ts +0 -49
  545. package/skills/skill-transcript/src/http-client.ts +0 -128
  546. package/skills/skill-transcript/src/index-http.ts +0 -111
  547. package/skills/skill-transcript/src/installer.ts +0 -324
  548. package/skills/skill-transcript/src/skill-install.ts +0 -205
  549. package/skills/skill-video/install.sh +0 -112
  550. package/skills/skill-video/src/auth.ts +0 -49
  551. package/skills/skill-video/src/http-client.ts +0 -128
  552. package/skills/skill-video/src/index-http.ts +0 -111
  553. package/skills/skill-video/src/installer.ts +0 -324
  554. package/skills/skill-video/src/skill-install.ts +0 -205
  555. package/skills/skill-write/install.sh +0 -112
  556. package/skills/skill-write/src/auth.ts +0 -49
  557. package/skills/skill-write/src/http-client.ts +0 -128
  558. package/skills/skill-write/src/index-http.ts +0 -111
  559. package/skills/skill-write/src/installer.ts +0 -324
  560. package/skills/skill-write/src/skill-install.ts +0 -205
  561. package/src/cli/cli.test.ts +0 -325
  562. package/src/cli/components/App.tsx +0 -186
  563. package/src/cli/components/CategorySelect.tsx +0 -38
  564. package/src/cli/components/Header.tsx +0 -18
  565. package/src/cli/components/InstallProgress.tsx +0 -97
  566. package/src/cli/components/SearchView.tsx +0 -108
  567. package/src/cli/components/SkillSelect.tsx +0 -92
  568. package/src/cli/index.tsx +0 -559
  569. package/src/index.ts +0 -49
  570. package/src/lib/installer.test.ts +0 -328
  571. package/src/lib/installer.ts +0 -297
  572. package/src/lib/registry.test.ts +0 -147
  573. package/src/lib/skillinfo.test.ts +0 -195
  574. package/src/lib/skillinfo.ts +0 -356
  575. package/src/mcp/index.ts +0 -234
  576. package/src/mcp/mcp.test.ts +0 -212
  577. package/tsconfig.json +0 -17
  578. /package/skills/{skill-audio/src → _common}/auth.ts +0 -0
  579. /package/skills/{skill-audio/src → _common}/http-client.ts +0 -0
  580. /package/skills/{skill-audio → _common}/install.sh +0 -0
  581. /package/skills/{skill-audio/src → _common}/installer.ts +0 -0
  582. /package/skills/{skill-audio/src → _common}/skill-install.ts +0 -0
@@ -1,328 +0,0 @@
1
- import { describe, test, expect, beforeEach, afterEach } from "bun:test";
2
- import { mkdtempSync, existsSync, readdirSync, readFileSync, mkdirSync, writeFileSync } from "fs";
3
- import { join } from "path";
4
- import { tmpdir } from "os";
5
- import {
6
- getSkillPath,
7
- skillExists,
8
- installSkill,
9
- installSkills,
10
- getInstalledSkills,
11
- removeSkill,
12
- getAgentSkillsDir,
13
- getAgentSkillPath,
14
- installSkillForAgent,
15
- removeSkillForAgent,
16
- AGENT_TARGETS,
17
- } from "./installer";
18
-
19
- let testDir: string;
20
-
21
- beforeEach(() => {
22
- testDir = mkdtempSync(join(tmpdir(), "skills-test-"));
23
- });
24
-
25
- afterEach(() => {
26
- const { rmSync } = require("fs");
27
- rmSync(testDir, { recursive: true, force: true });
28
- });
29
-
30
- describe("installer", () => {
31
- describe("getSkillPath", () => {
32
- test("returns path for skill name without prefix", () => {
33
- const path = getSkillPath("deepresearch");
34
- expect(path).toContain("skill-deepresearch");
35
- });
36
-
37
- test("returns path for skill name with prefix", () => {
38
- const path = getSkillPath("skill-deepresearch");
39
- expect(path).toContain("skill-deepresearch");
40
- // Should not double-prefix
41
- expect(path).not.toContain("skill-skill-");
42
- });
43
- });
44
-
45
- describe("skillExists", () => {
46
- test("returns true for existing skill", () => {
47
- expect(skillExists("deepresearch")).toBe(true);
48
- });
49
-
50
- test("returns true with skill- prefix", () => {
51
- expect(skillExists("skill-deepresearch")).toBe(true);
52
- });
53
-
54
- test("returns false for nonexistent skill", () => {
55
- expect(skillExists("nonexistent-skill-xyz")).toBe(false);
56
- });
57
- });
58
-
59
- describe("installSkill", () => {
60
- test("installs a skill to target directory", () => {
61
- const result = installSkill("deepresearch", { targetDir: testDir });
62
- expect(result.success).toBe(true);
63
- expect(result.skill).toBe("deepresearch");
64
- expect(result.path).toBeDefined();
65
- expect(existsSync(join(testDir, ".skills", "skill-deepresearch"))).toBe(true);
66
- });
67
-
68
- test("creates .skills directory if it does not exist", () => {
69
- expect(existsSync(join(testDir, ".skills"))).toBe(false);
70
- installSkill("deepresearch", { targetDir: testDir });
71
- expect(existsSync(join(testDir, ".skills"))).toBe(true);
72
- });
73
-
74
- test("creates index.ts in .skills directory", () => {
75
- installSkill("deepresearch", { targetDir: testDir });
76
- const indexPath = join(testDir, ".skills", "index.ts");
77
- expect(existsSync(indexPath)).toBe(true);
78
- const content = readFileSync(indexPath, "utf-8");
79
- expect(content).toContain("deepresearch");
80
- expect(content).toContain("skill-deepresearch");
81
- });
82
-
83
- test("fails for nonexistent skill", () => {
84
- const result = installSkill("nonexistent-xyz", { targetDir: testDir });
85
- expect(result.success).toBe(false);
86
- expect(result.error).toContain("not found");
87
- });
88
-
89
- test("fails if already installed without overwrite", () => {
90
- installSkill("deepresearch", { targetDir: testDir });
91
- const result = installSkill("deepresearch", { targetDir: testDir });
92
- expect(result.success).toBe(false);
93
- expect(result.error).toContain("Already installed");
94
- });
95
-
96
- test("succeeds with overwrite flag", () => {
97
- installSkill("deepresearch", { targetDir: testDir });
98
- const result = installSkill("deepresearch", { targetDir: testDir, overwrite: true });
99
- expect(result.success).toBe(true);
100
- });
101
-
102
- test("does not copy .git directory", () => {
103
- installSkill("deepresearch", { targetDir: testDir });
104
- const gitDir = join(testDir, ".skills", "skill-deepresearch", ".git");
105
- expect(existsSync(gitDir)).toBe(false);
106
- });
107
-
108
- test("handles skill- prefix in name", () => {
109
- const result = installSkill("skill-deepresearch", { targetDir: testDir });
110
- expect(result.success).toBe(true);
111
- expect(existsSync(join(testDir, ".skills", "skill-deepresearch"))).toBe(true);
112
- });
113
- });
114
-
115
- describe("installSkills", () => {
116
- test("installs multiple skills", () => {
117
- const results = installSkills(["deepresearch", "image"], { targetDir: testDir });
118
- expect(results.length).toBe(2);
119
- expect(results[0].success).toBe(true);
120
- expect(results[1].success).toBe(true);
121
- });
122
-
123
- test("returns mixed results for valid and invalid skills", () => {
124
- const results = installSkills(["deepresearch", "nonexistent-xyz"], { targetDir: testDir });
125
- expect(results.length).toBe(2);
126
- expect(results[0].success).toBe(true);
127
- expect(results[1].success).toBe(false);
128
- });
129
-
130
- test("index.ts contains all installed skills", () => {
131
- installSkills(["deepresearch", "image"], { targetDir: testDir });
132
- const content = readFileSync(join(testDir, ".skills", "index.ts"), "utf-8");
133
- expect(content).toContain("deepresearch");
134
- expect(content).toContain("image");
135
- });
136
- });
137
-
138
- describe("getInstalledSkills", () => {
139
- test("returns empty array when no skills installed", () => {
140
- const installed = getInstalledSkills(testDir);
141
- expect(installed).toEqual([]);
142
- });
143
-
144
- test("returns empty array when .skills directory does not exist", () => {
145
- const noDir = join(testDir, "nonexistent");
146
- const installed = getInstalledSkills(noDir);
147
- expect(installed).toEqual([]);
148
- });
149
-
150
- test("returns installed skill names without prefix", () => {
151
- installSkill("deepresearch", { targetDir: testDir });
152
- installSkill("image", { targetDir: testDir });
153
- const installed = getInstalledSkills(testDir);
154
- expect(installed).toContain("deepresearch");
155
- expect(installed).toContain("image");
156
- expect(installed.length).toBe(2);
157
- });
158
-
159
- test("does not include non-skill files", () => {
160
- installSkill("deepresearch", { targetDir: testDir });
161
- // Create a non-skill file
162
- writeFileSync(join(testDir, ".skills", "random.txt"), "test");
163
- const installed = getInstalledSkills(testDir);
164
- expect(installed.length).toBe(1);
165
- });
166
- });
167
-
168
- describe("removeSkill", () => {
169
- test("removes an installed skill", () => {
170
- installSkill("deepresearch", { targetDir: testDir });
171
- expect(getInstalledSkills(testDir)).toContain("deepresearch");
172
- const result = removeSkill("deepresearch", testDir);
173
- expect(result).toBe(true);
174
- expect(getInstalledSkills(testDir)).not.toContain("deepresearch");
175
- });
176
-
177
- test("returns false for non-installed skill", () => {
178
- const result = removeSkill("nonexistent-xyz", testDir);
179
- expect(result).toBe(false);
180
- });
181
-
182
- test("updates index.ts after removal", () => {
183
- installSkills(["deepresearch", "image"], { targetDir: testDir });
184
- removeSkill("deepresearch", testDir);
185
- const content = readFileSync(join(testDir, ".skills", "index.ts"), "utf-8");
186
- expect(content).not.toContain("deepresearch");
187
- expect(content).toContain("image");
188
- });
189
-
190
- test("handles skill- prefix in name", () => {
191
- installSkill("deepresearch", { targetDir: testDir });
192
- const result = removeSkill("skill-deepresearch", testDir);
193
- expect(result).toBe(true);
194
- expect(getInstalledSkills(testDir)).not.toContain("deepresearch");
195
- });
196
- });
197
-
198
- describe("agent install", () => {
199
- test("AGENT_TARGETS contains all three agents", () => {
200
- expect(AGENT_TARGETS).toContain("claude");
201
- expect(AGENT_TARGETS).toContain("codex");
202
- expect(AGENT_TARGETS).toContain("gemini");
203
- expect(AGENT_TARGETS.length).toBe(3);
204
- });
205
-
206
- describe("getAgentSkillsDir", () => {
207
- test("returns global path for claude", () => {
208
- const dir = getAgentSkillsDir("claude", "global");
209
- expect(dir).toContain(".claude/skills");
210
- });
211
-
212
- test("returns project path for claude", () => {
213
- const dir = getAgentSkillsDir("claude", "project", testDir);
214
- expect(dir).toBe(join(testDir, ".claude", "skills"));
215
- });
216
-
217
- test("returns global path for codex", () => {
218
- const dir = getAgentSkillsDir("codex", "global");
219
- expect(dir).toContain(".codex/skills");
220
- });
221
-
222
- test("returns global path for gemini", () => {
223
- const dir = getAgentSkillsDir("gemini", "global");
224
- expect(dir).toContain(".gemini/skills");
225
- });
226
- });
227
-
228
- describe("getAgentSkillPath", () => {
229
- test("returns correct path with skill- prefix", () => {
230
- const path = getAgentSkillPath("image", "claude", "project", testDir);
231
- expect(path).toBe(join(testDir, ".claude", "skills", "skill-image"));
232
- });
233
-
234
- test("does not double-prefix", () => {
235
- const path = getAgentSkillPath("skill-image", "claude", "project", testDir);
236
- expect(path).toContain("skill-image");
237
- expect(path).not.toContain("skill-skill-");
238
- });
239
- });
240
-
241
- describe("installSkillForAgent", () => {
242
- test("installs SKILL.md for a skill that has one", () => {
243
- const result = installSkillForAgent("image", {
244
- agent: "claude",
245
- scope: "project",
246
- projectDir: testDir,
247
- });
248
- expect(result.success).toBe(true);
249
- expect(result.path).toBeDefined();
250
- const skillMdPath = join(result.path!, "SKILL.md");
251
- expect(existsSync(skillMdPath)).toBe(true);
252
- const content = readFileSync(skillMdPath, "utf-8");
253
- expect(content).toContain("Image Generation");
254
- });
255
-
256
- test("generates SKILL.md when skill lacks one", () => {
257
- const result = installSkillForAgent("deepresearch", {
258
- agent: "claude",
259
- scope: "project",
260
- projectDir: testDir,
261
- }, (name) => `---\nname: ${name}\ndescription: test\n---\n\n# Test\n`);
262
- expect(result.success).toBe(true);
263
- const skillMdPath = join(result.path!, "SKILL.md");
264
- expect(existsSync(skillMdPath)).toBe(true);
265
- });
266
-
267
- test("fails without generator when skill has no SKILL.md", () => {
268
- // scaffold-project has no SKILL.md
269
- const result = installSkillForAgent("scaffold-project", {
270
- agent: "claude",
271
- scope: "project",
272
- projectDir: testDir,
273
- });
274
- expect(result.success).toBe(false);
275
- expect(result.error).toContain("SKILL.md");
276
- });
277
-
278
- test("fails for nonexistent skill", () => {
279
- const result = installSkillForAgent("nonexistent-xyz", {
280
- agent: "claude",
281
- scope: "project",
282
- projectDir: testDir,
283
- });
284
- expect(result.success).toBe(false);
285
- expect(result.error).toContain("not found");
286
- });
287
-
288
- test("installs to correct agent directory", () => {
289
- for (const agent of AGENT_TARGETS) {
290
- installSkillForAgent("image", {
291
- agent,
292
- scope: "project",
293
- projectDir: testDir,
294
- });
295
- const expected = join(testDir, `.${agent}`, "skills", "skill-image", "SKILL.md");
296
- expect(existsSync(expected)).toBe(true);
297
- }
298
- });
299
- });
300
-
301
- describe("removeSkillForAgent", () => {
302
- test("removes an installed skill", () => {
303
- installSkillForAgent("image", {
304
- agent: "claude",
305
- scope: "project",
306
- projectDir: testDir,
307
- });
308
- const result = removeSkillForAgent("image", {
309
- agent: "claude",
310
- scope: "project",
311
- projectDir: testDir,
312
- });
313
- expect(result).toBe(true);
314
- const skillDir = join(testDir, ".claude", "skills", "skill-image");
315
- expect(existsSync(skillDir)).toBe(false);
316
- });
317
-
318
- test("returns false for non-installed skill", () => {
319
- const result = removeSkillForAgent("nonexistent-xyz", {
320
- agent: "claude",
321
- scope: "project",
322
- projectDir: testDir,
323
- });
324
- expect(result).toBe(false);
325
- });
326
- });
327
- });
328
- });
@@ -1,297 +0,0 @@
1
- /**
2
- * Skill installer - handles copying skills to user projects
3
- */
4
-
5
- import { existsSync, cpSync, mkdirSync, writeFileSync, rmSync, readdirSync, statSync, readFileSync } from "fs";
6
- import { join, dirname } from "path";
7
- import { homedir } from "os";
8
- import { fileURLToPath } from "url";
9
-
10
- const __dirname = dirname(fileURLToPath(import.meta.url));
11
-
12
- // Find the skills directory - works from both src/lib/ (dev) and bin/ or dist/ (built)
13
- function findSkillsDir(): string {
14
- let dir = __dirname;
15
- for (let i = 0; i < 5; i++) {
16
- const candidate = join(dir, "skills");
17
- if (existsSync(candidate)) {
18
- return candidate;
19
- }
20
- dir = dirname(dir);
21
- }
22
- return join(__dirname, "..", "skills");
23
- }
24
-
25
- const SKILLS_DIR = findSkillsDir();
26
-
27
- export interface InstallResult {
28
- skill: string;
29
- success: boolean;
30
- error?: string;
31
- path?: string;
32
- }
33
-
34
- export interface InstallOptions {
35
- targetDir?: string;
36
- overwrite?: boolean;
37
- }
38
-
39
- /**
40
- * Get the path to a skill in the package
41
- */
42
- export function getSkillPath(name: string): string {
43
- const skillName = name.startsWith("skill-") ? name : `skill-${name}`;
44
- return join(SKILLS_DIR, skillName);
45
- }
46
-
47
- /**
48
- * Check if a skill exists in the package
49
- */
50
- export function skillExists(name: string): boolean {
51
- return existsSync(getSkillPath(name));
52
- }
53
-
54
- /**
55
- * Install a single skill to the target directory
56
- */
57
- export function installSkill(
58
- name: string,
59
- options: InstallOptions = {}
60
- ): InstallResult {
61
- const { targetDir = process.cwd(), overwrite = false } = options;
62
-
63
- const skillName = name.startsWith("skill-") ? name : `skill-${name}`;
64
- const sourcePath = getSkillPath(name);
65
- const destDir = join(targetDir, ".skills");
66
- const destPath = join(destDir, skillName);
67
-
68
- // Check if skill exists in package
69
- if (!existsSync(sourcePath)) {
70
- return {
71
- skill: name,
72
- success: false,
73
- error: `Skill '${name}' not found`,
74
- };
75
- }
76
-
77
- // Check if already installed
78
- if (existsSync(destPath) && !overwrite) {
79
- return {
80
- skill: name,
81
- success: false,
82
- error: `Already installed. Use --overwrite to replace.`,
83
- path: destPath,
84
- };
85
- }
86
-
87
- try {
88
- // Ensure .skills directory exists
89
- if (!existsSync(destDir)) {
90
- mkdirSync(destDir, { recursive: true });
91
- }
92
-
93
- // Remove existing if overwriting
94
- if (existsSync(destPath) && overwrite) {
95
- rmSync(destPath, { recursive: true, force: true });
96
- }
97
-
98
- // Copy skill (skip .git, node_modules)
99
- cpSync(sourcePath, destPath, {
100
- recursive: true,
101
- filter: (src) => {
102
- const rel = src.slice(sourcePath.length);
103
- return !rel.includes("/.git") && !rel.includes("/node_modules");
104
- },
105
- });
106
-
107
- // Update or create .skills/index.ts for easy imports
108
- updateSkillsIndex(destDir);
109
-
110
- return {
111
- skill: name,
112
- success: true,
113
- path: destPath,
114
- };
115
- } catch (error) {
116
- return {
117
- skill: name,
118
- success: false,
119
- error: error instanceof Error ? error.message : "Unknown error",
120
- };
121
- }
122
- }
123
-
124
- /**
125
- * Install multiple skills
126
- */
127
- export function installSkills(
128
- names: string[],
129
- options: InstallOptions = {}
130
- ): InstallResult[] {
131
- return names.map((name) => installSkill(name, options));
132
- }
133
-
134
- /**
135
- * Update the .skills/index.ts file to export all installed skills
136
- */
137
- function updateSkillsIndex(skillsDir: string): void {
138
- const indexPath = join(skillsDir, "index.ts");
139
-
140
- const skills = readdirSync(skillsDir).filter(
141
- (f: string) => f.startsWith("skill-") && !f.includes(".")
142
- );
143
-
144
- const exports = skills
145
- .map((s: string) => {
146
- const name = s.replace("skill-", "").replace(/-/g, "_");
147
- return `export * as ${name} from './${s}/src/index.js';`;
148
- })
149
- .join("\n");
150
-
151
- const content = `/**
152
- * Auto-generated index of installed skills
153
- * Do not edit manually - run 'skills install' to update
154
- */
155
-
156
- ${exports}
157
- `;
158
-
159
- writeFileSync(indexPath, content);
160
- }
161
-
162
- /**
163
- * Get list of installed skills in a directory
164
- */
165
- export function getInstalledSkills(targetDir: string = process.cwd()): string[] {
166
- const skillsDir = join(targetDir, ".skills");
167
-
168
- if (!existsSync(skillsDir)) {
169
- return [];
170
- }
171
-
172
- return readdirSync(skillsDir)
173
- .filter((f: string) => {
174
- const fullPath = join(skillsDir, f);
175
- return f.startsWith("skill-") && statSync(fullPath).isDirectory();
176
- })
177
- .map((f: string) => f.replace("skill-", ""));
178
- }
179
-
180
- /**
181
- * Remove an installed skill
182
- */
183
- export function removeSkill(
184
- name: string,
185
- targetDir: string = process.cwd()
186
- ): boolean {
187
- const skillName = name.startsWith("skill-") ? name : `skill-${name}`;
188
- const skillsDir = join(targetDir, ".skills");
189
- const skillPath = join(skillsDir, skillName);
190
-
191
- if (!existsSync(skillPath)) {
192
- return false;
193
- }
194
-
195
- rmSync(skillPath, { recursive: true, force: true });
196
- updateSkillsIndex(skillsDir);
197
- return true;
198
- }
199
-
200
- // ---- Agent install support ----
201
-
202
- export type AgentTarget = "claude" | "codex" | "gemini";
203
- export type AgentScope = "global" | "project";
204
-
205
- export const AGENT_TARGETS: AgentTarget[] = ["claude", "codex", "gemini"];
206
-
207
- export interface AgentInstallOptions {
208
- agent: AgentTarget;
209
- scope?: AgentScope;
210
- projectDir?: string;
211
- }
212
-
213
- /**
214
- * Get the skills directory for a given agent and scope
215
- */
216
- export function getAgentSkillsDir(agent: AgentTarget, scope: AgentScope = "global", projectDir?: string): string {
217
- const agentDir = `.${agent}`;
218
-
219
- if (scope === "project") {
220
- return join(projectDir || process.cwd(), agentDir, "skills");
221
- }
222
-
223
- return join(homedir(), agentDir, "skills");
224
- }
225
-
226
- /**
227
- * Get the full path where a skill's SKILL.md would be installed for an agent
228
- */
229
- export function getAgentSkillPath(name: string, agent: AgentTarget, scope: AgentScope = "global", projectDir?: string): string {
230
- const skillName = name.startsWith("skill-") ? name : `skill-${name}`;
231
- return join(getAgentSkillsDir(agent, scope, projectDir), skillName);
232
- }
233
-
234
- /**
235
- * Install a skill's SKILL.md for a specific agent
236
- * If the skill has no SKILL.md, one will be generated using the provided generator function
237
- */
238
- export function installSkillForAgent(
239
- name: string,
240
- options: AgentInstallOptions,
241
- generateSkillMd?: (name: string) => string | null
242
- ): InstallResult {
243
- const { agent, scope = "global", projectDir } = options;
244
-
245
- const skillName = name.startsWith("skill-") ? name : `skill-${name}`;
246
- const sourcePath = getSkillPath(name);
247
-
248
- if (!existsSync(sourcePath)) {
249
- return { skill: name, success: false, error: `Skill '${name}' not found` };
250
- }
251
-
252
- // Find or generate SKILL.md content
253
- let skillMdContent: string | null = null;
254
- const skillMdPath = join(sourcePath, "SKILL.md");
255
-
256
- if (existsSync(skillMdPath)) {
257
- skillMdContent = readFileSync(skillMdPath, "utf-8");
258
- } else if (generateSkillMd) {
259
- skillMdContent = generateSkillMd(name);
260
- }
261
-
262
- if (!skillMdContent) {
263
- return { skill: name, success: false, error: `No SKILL.md found and could not generate one for '${name}'` };
264
- }
265
-
266
- const destDir = getAgentSkillPath(name, agent, scope, projectDir);
267
-
268
- try {
269
- mkdirSync(destDir, { recursive: true });
270
- writeFileSync(join(destDir, "SKILL.md"), skillMdContent);
271
- return { skill: name, success: true, path: destDir };
272
- } catch (error) {
273
- return {
274
- skill: name,
275
- success: false,
276
- error: error instanceof Error ? error.message : "Unknown error",
277
- };
278
- }
279
- }
280
-
281
- /**
282
- * Remove a skill from an agent's skill directory
283
- */
284
- export function removeSkillForAgent(
285
- name: string,
286
- options: AgentInstallOptions
287
- ): boolean {
288
- const { agent, scope = "global", projectDir } = options;
289
- const destDir = getAgentSkillPath(name, agent, scope, projectDir);
290
-
291
- if (!existsSync(destDir)) {
292
- return false;
293
- }
294
-
295
- rmSync(destDir, { recursive: true, force: true });
296
- return true;
297
- }