@skillsmith/cli 0.7.2 → 0.7.3

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 (560) hide show
  1. package/CHANGELOG.md +5 -0
  2. package/dist/.tsbuildinfo +1 -1
  3. package/dist/cli.js +44039 -0
  4. package/package.json +21 -11
  5. package/dist/src/commands/__meta__/telemetry-coverage.test.d.ts +0 -20
  6. package/dist/src/commands/__meta__/telemetry-coverage.test.d.ts.map +0 -1
  7. package/dist/src/commands/__meta__/telemetry-coverage.test.js +0 -118
  8. package/dist/src/commands/__meta__/telemetry-coverage.test.js.map +0 -1
  9. package/dist/src/commands/ab-test.d.ts +0 -29
  10. package/dist/src/commands/ab-test.d.ts.map +0 -1
  11. package/dist/src/commands/ab-test.js +0 -226
  12. package/dist/src/commands/ab-test.js.map +0 -1
  13. package/dist/src/commands/ab-test.test.d.ts +0 -7
  14. package/dist/src/commands/ab-test.test.d.ts.map +0 -1
  15. package/dist/src/commands/ab-test.test.js +0 -255
  16. package/dist/src/commands/ab-test.test.js.map +0 -1
  17. package/dist/src/commands/analyze.d.ts +0 -14
  18. package/dist/src/commands/analyze.d.ts.map +0 -1
  19. package/dist/src/commands/analyze.js +0 -191
  20. package/dist/src/commands/analyze.js.map +0 -1
  21. package/dist/src/commands/audit-collisions.d.ts +0 -68
  22. package/dist/src/commands/audit-collisions.d.ts.map +0 -1
  23. package/dist/src/commands/audit-collisions.js +0 -309
  24. package/dist/src/commands/audit-collisions.js.map +0 -1
  25. package/dist/src/commands/audit-sources.action.d.ts +0 -37
  26. package/dist/src/commands/audit-sources.action.d.ts.map +0 -1
  27. package/dist/src/commands/audit-sources.action.js +0 -321
  28. package/dist/src/commands/audit-sources.action.js.map +0 -1
  29. package/dist/src/commands/audit-sources.d.ts +0 -37
  30. package/dist/src/commands/audit-sources.d.ts.map +0 -1
  31. package/dist/src/commands/audit-sources.js +0 -55
  32. package/dist/src/commands/audit-sources.js.map +0 -1
  33. package/dist/src/commands/audit-sources.test.d.ts +0 -9
  34. package/dist/src/commands/audit-sources.test.d.ts.map +0 -1
  35. package/dist/src/commands/audit-sources.test.js +0 -228
  36. package/dist/src/commands/audit-sources.test.js.map +0 -1
  37. package/dist/src/commands/audit.d.ts +0 -40
  38. package/dist/src/commands/audit.d.ts.map +0 -1
  39. package/dist/src/commands/audit.js +0 -223
  40. package/dist/src/commands/audit.js.map +0 -1
  41. package/dist/src/commands/audit.test.d.ts +0 -8
  42. package/dist/src/commands/audit.test.d.ts.map +0 -1
  43. package/dist/src/commands/audit.test.js +0 -97
  44. package/dist/src/commands/audit.test.js.map +0 -1
  45. package/dist/src/commands/author/index.d.ts +0 -17
  46. package/dist/src/commands/author/index.d.ts.map +0 -1
  47. package/dist/src/commands/author/index.js +0 -21
  48. package/dist/src/commands/author/index.js.map +0 -1
  49. package/dist/src/commands/author/init.action.d.ts +0 -29
  50. package/dist/src/commands/author/init.action.d.ts.map +0 -1
  51. package/dist/src/commands/author/init.action.js +0 -131
  52. package/dist/src/commands/author/init.action.js.map +0 -1
  53. package/dist/src/commands/author/init.d.ts +0 -36
  54. package/dist/src/commands/author/init.d.ts.map +0 -1
  55. package/dist/src/commands/author/init.helpers.d.ts +0 -80
  56. package/dist/src/commands/author/init.helpers.d.ts.map +0 -1
  57. package/dist/src/commands/author/init.helpers.js +0 -107
  58. package/dist/src/commands/author/init.helpers.js.map +0 -1
  59. package/dist/src/commands/author/init.js +0 -320
  60. package/dist/src/commands/author/init.js.map +0 -1
  61. package/dist/src/commands/author/mcp-init.d.ts +0 -21
  62. package/dist/src/commands/author/mcp-init.d.ts.map +0 -1
  63. package/dist/src/commands/author/mcp-init.js +0 -202
  64. package/dist/src/commands/author/mcp-init.js.map +0 -1
  65. package/dist/src/commands/author/subagent.d.ts +0 -23
  66. package/dist/src/commands/author/subagent.d.ts.map +0 -1
  67. package/dist/src/commands/author/subagent.js +0 -174
  68. package/dist/src/commands/author/subagent.js.map +0 -1
  69. package/dist/src/commands/author/transform.d.ts +0 -23
  70. package/dist/src/commands/author/transform.d.ts.map +0 -1
  71. package/dist/src/commands/author/transform.js +0 -149
  72. package/dist/src/commands/author/transform.js.map +0 -1
  73. package/dist/src/commands/author/utils.d.ts +0 -27
  74. package/dist/src/commands/author/utils.d.ts.map +0 -1
  75. package/dist/src/commands/author/utils.js +0 -118
  76. package/dist/src/commands/author/utils.js.map +0 -1
  77. package/dist/src/commands/config.d.ts +0 -57
  78. package/dist/src/commands/config.d.ts.map +0 -1
  79. package/dist/src/commands/config.js +0 -226
  80. package/dist/src/commands/config.js.map +0 -1
  81. package/dist/src/commands/create.d.ts +0 -43
  82. package/dist/src/commands/create.d.ts.map +0 -1
  83. package/dist/src/commands/create.js +0 -336
  84. package/dist/src/commands/create.js.map +0 -1
  85. package/dist/src/commands/diff.d.ts +0 -21
  86. package/dist/src/commands/diff.d.ts.map +0 -1
  87. package/dist/src/commands/diff.js +0 -227
  88. package/dist/src/commands/diff.js.map +0 -1
  89. package/dist/src/commands/diff.test.d.ts +0 -6
  90. package/dist/src/commands/diff.test.d.ts.map +0 -1
  91. package/dist/src/commands/diff.test.js +0 -327
  92. package/dist/src/commands/diff.test.js.map +0 -1
  93. package/dist/src/commands/import-local.d.ts +0 -28
  94. package/dist/src/commands/import-local.d.ts.map +0 -1
  95. package/dist/src/commands/import-local.helpers.d.ts +0 -28
  96. package/dist/src/commands/import-local.helpers.d.ts.map +0 -1
  97. package/dist/src/commands/import-local.helpers.js +0 -166
  98. package/dist/src/commands/import-local.helpers.js.map +0 -1
  99. package/dist/src/commands/import-local.js +0 -273
  100. package/dist/src/commands/import-local.js.map +0 -1
  101. package/dist/src/commands/import-local.types.d.ts +0 -59
  102. package/dist/src/commands/import-local.types.d.ts.map +0 -1
  103. package/dist/src/commands/import-local.types.js +0 -2
  104. package/dist/src/commands/import-local.types.js.map +0 -1
  105. package/dist/src/commands/import.d.ts +0 -47
  106. package/dist/src/commands/import.d.ts.map +0 -1
  107. package/dist/src/commands/import.js +0 -314
  108. package/dist/src/commands/import.js.map +0 -1
  109. package/dist/src/commands/index.d.ts +0 -28
  110. package/dist/src/commands/index.d.ts.map +0 -1
  111. package/dist/src/commands/index.js +0 -50
  112. package/dist/src/commands/index.js.map +0 -1
  113. package/dist/src/commands/info.d.ts +0 -19
  114. package/dist/src/commands/info.d.ts.map +0 -1
  115. package/dist/src/commands/info.js +0 -110
  116. package/dist/src/commands/info.js.map +0 -1
  117. package/dist/src/commands/install-skill.d.ts +0 -16
  118. package/dist/src/commands/install-skill.d.ts.map +0 -1
  119. package/dist/src/commands/install-skill.js +0 -155
  120. package/dist/src/commands/install-skill.js.map +0 -1
  121. package/dist/src/commands/install.d.ts +0 -34
  122. package/dist/src/commands/install.d.ts.map +0 -1
  123. package/dist/src/commands/install.js +0 -311
  124. package/dist/src/commands/install.js.map +0 -1
  125. package/dist/src/commands/inventory.action.d.ts +0 -55
  126. package/dist/src/commands/inventory.action.d.ts.map +0 -1
  127. package/dist/src/commands/inventory.action.js +0 -179
  128. package/dist/src/commands/inventory.action.js.map +0 -1
  129. package/dist/src/commands/inventory.action.test.d.ts +0 -19
  130. package/dist/src/commands/inventory.action.test.d.ts.map +0 -1
  131. package/dist/src/commands/inventory.action.test.js +0 -371
  132. package/dist/src/commands/inventory.action.test.js.map +0 -1
  133. package/dist/src/commands/inventory.d.ts +0 -21
  134. package/dist/src/commands/inventory.d.ts.map +0 -1
  135. package/dist/src/commands/inventory.js +0 -42
  136. package/dist/src/commands/inventory.js.map +0 -1
  137. package/dist/src/commands/login.d.ts +0 -7
  138. package/dist/src/commands/login.d.ts.map +0 -1
  139. package/dist/src/commands/login.js +0 -323
  140. package/dist/src/commands/login.js.map +0 -1
  141. package/dist/src/commands/login.test-helpers.d.ts +0 -7
  142. package/dist/src/commands/login.test-helpers.d.ts.map +0 -1
  143. package/dist/src/commands/login.test-helpers.js +0 -44
  144. package/dist/src/commands/login.test-helpers.js.map +0 -1
  145. package/dist/src/commands/login.test.d.ts +0 -2
  146. package/dist/src/commands/login.test.d.ts.map +0 -1
  147. package/dist/src/commands/login.test.js +0 -387
  148. package/dist/src/commands/login.test.js.map +0 -1
  149. package/dist/src/commands/logout.d.ts +0 -15
  150. package/dist/src/commands/logout.d.ts.map +0 -1
  151. package/dist/src/commands/logout.js +0 -54
  152. package/dist/src/commands/logout.js.map +0 -1
  153. package/dist/src/commands/logout.test.d.ts +0 -8
  154. package/dist/src/commands/logout.test.d.ts.map +0 -1
  155. package/dist/src/commands/logout.test.js +0 -137
  156. package/dist/src/commands/logout.test.js.map +0 -1
  157. package/dist/src/commands/manage.d.ts +0 -19
  158. package/dist/src/commands/manage.d.ts.map +0 -1
  159. package/dist/src/commands/manage.js +0 -346
  160. package/dist/src/commands/manage.js.map +0 -1
  161. package/dist/src/commands/merge.d.ts +0 -24
  162. package/dist/src/commands/merge.d.ts.map +0 -1
  163. package/dist/src/commands/merge.js +0 -168
  164. package/dist/src/commands/merge.js.map +0 -1
  165. package/dist/src/commands/pin.d.ts +0 -26
  166. package/dist/src/commands/pin.d.ts.map +0 -1
  167. package/dist/src/commands/pin.js +0 -138
  168. package/dist/src/commands/pin.js.map +0 -1
  169. package/dist/src/commands/pin.test.d.ts +0 -6
  170. package/dist/src/commands/pin.test.d.ts.map +0 -1
  171. package/dist/src/commands/pin.test.js +0 -206
  172. package/dist/src/commands/pin.test.js.map +0 -1
  173. package/dist/src/commands/recommend-scoring.d.ts +0 -29
  174. package/dist/src/commands/recommend-scoring.d.ts.map +0 -1
  175. package/dist/src/commands/recommend-scoring.js +0 -141
  176. package/dist/src/commands/recommend-scoring.js.map +0 -1
  177. package/dist/src/commands/recommend.d.ts +0 -15
  178. package/dist/src/commands/recommend.d.ts.map +0 -1
  179. package/dist/src/commands/recommend.helpers.d.ts +0 -44
  180. package/dist/src/commands/recommend.helpers.d.ts.map +0 -1
  181. package/dist/src/commands/recommend.helpers.js +0 -303
  182. package/dist/src/commands/recommend.helpers.js.map +0 -1
  183. package/dist/src/commands/recommend.js +0 -198
  184. package/dist/src/commands/recommend.js.map +0 -1
  185. package/dist/src/commands/recommend.types.d.ts +0 -66
  186. package/dist/src/commands/recommend.types.d.ts.map +0 -1
  187. package/dist/src/commands/recommend.types.js +0 -14
  188. package/dist/src/commands/recommend.types.js.map +0 -1
  189. package/dist/src/commands/run-registry-sync.d.ts +0 -31
  190. package/dist/src/commands/run-registry-sync.d.ts.map +0 -1
  191. package/dist/src/commands/run-registry-sync.js +0 -45
  192. package/dist/src/commands/run-registry-sync.js.map +0 -1
  193. package/dist/src/commands/search-formatters.d.ts +0 -36
  194. package/dist/src/commands/search-formatters.d.ts.map +0 -1
  195. package/dist/src/commands/search-formatters.js +0 -132
  196. package/dist/src/commands/search-formatters.js.map +0 -1
  197. package/dist/src/commands/search-types.d.ts +0 -46
  198. package/dist/src/commands/search-types.d.ts.map +0 -1
  199. package/dist/src/commands/search-types.js +0 -12
  200. package/dist/src/commands/search-types.js.map +0 -1
  201. package/dist/src/commands/search.action.d.ts +0 -16
  202. package/dist/src/commands/search.action.d.ts.map +0 -1
  203. package/dist/src/commands/search.action.js +0 -384
  204. package/dist/src/commands/search.action.js.map +0 -1
  205. package/dist/src/commands/search.d.ts +0 -18
  206. package/dist/src/commands/search.d.ts.map +0 -1
  207. package/dist/src/commands/search.helpers.d.ts +0 -52
  208. package/dist/src/commands/search.helpers.d.ts.map +0 -1
  209. package/dist/src/commands/search.helpers.js +0 -95
  210. package/dist/src/commands/search.helpers.js.map +0 -1
  211. package/dist/src/commands/search.js +0 -48
  212. package/dist/src/commands/search.js.map +0 -1
  213. package/dist/src/commands/search.test.d.ts +0 -10
  214. package/dist/src/commands/search.test.d.ts.map +0 -1
  215. package/dist/src/commands/search.test.js +0 -179
  216. package/dist/src/commands/search.test.js.map +0 -1
  217. package/dist/src/commands/sync.action.d.ts +0 -39
  218. package/dist/src/commands/sync.action.d.ts.map +0 -1
  219. package/dist/src/commands/sync.action.js +0 -353
  220. package/dist/src/commands/sync.action.js.map +0 -1
  221. package/dist/src/commands/sync.d.ts +0 -24
  222. package/dist/src/commands/sync.d.ts.map +0 -1
  223. package/dist/src/commands/sync.helpers.d.ts +0 -55
  224. package/dist/src/commands/sync.helpers.d.ts.map +0 -1
  225. package/dist/src/commands/sync.helpers.js +0 -90
  226. package/dist/src/commands/sync.helpers.js.map +0 -1
  227. package/dist/src/commands/sync.js +0 -101
  228. package/dist/src/commands/sync.js.map +0 -1
  229. package/dist/src/commands/telemetry.action.d.ts +0 -38
  230. package/dist/src/commands/telemetry.action.d.ts.map +0 -1
  231. package/dist/src/commands/telemetry.action.js +0 -350
  232. package/dist/src/commands/telemetry.action.js.map +0 -1
  233. package/dist/src/commands/telemetry.d.ts +0 -30
  234. package/dist/src/commands/telemetry.d.ts.map +0 -1
  235. package/dist/src/commands/telemetry.helpers.d.ts +0 -58
  236. package/dist/src/commands/telemetry.helpers.d.ts.map +0 -1
  237. package/dist/src/commands/telemetry.helpers.js +0 -173
  238. package/dist/src/commands/telemetry.helpers.js.map +0 -1
  239. package/dist/src/commands/telemetry.helpers.test.d.ts +0 -15
  240. package/dist/src/commands/telemetry.helpers.test.d.ts.map +0 -1
  241. package/dist/src/commands/telemetry.helpers.test.js +0 -240
  242. package/dist/src/commands/telemetry.helpers.test.js.map +0 -1
  243. package/dist/src/commands/telemetry.js +0 -65
  244. package/dist/src/commands/telemetry.js.map +0 -1
  245. package/dist/src/commands/telemetry.test.d.ts +0 -18
  246. package/dist/src/commands/telemetry.test.d.ts.map +0 -1
  247. package/dist/src/commands/telemetry.test.js +0 -401
  248. package/dist/src/commands/telemetry.test.js.map +0 -1
  249. package/dist/src/commands/whoami.d.ts +0 -15
  250. package/dist/src/commands/whoami.d.ts.map +0 -1
  251. package/dist/src/commands/whoami.js +0 -55
  252. package/dist/src/commands/whoami.js.map +0 -1
  253. package/dist/src/commands/whoami.test.d.ts +0 -8
  254. package/dist/src/commands/whoami.test.d.ts.map +0 -1
  255. package/dist/src/commands/whoami.test.js +0 -133
  256. package/dist/src/commands/whoami.test.js.map +0 -1
  257. package/dist/src/config.d.ts +0 -29
  258. package/dist/src/config.d.ts.map +0 -1
  259. package/dist/src/config.js +0 -34
  260. package/dist/src/config.js.map +0 -1
  261. package/dist/src/index.d.ts +0 -22
  262. package/dist/src/index.d.ts.map +0 -1
  263. package/dist/src/index.js +0 -117
  264. package/dist/src/index.js.map +0 -1
  265. package/dist/src/templates/changelog.md.template.d.ts +0 -8
  266. package/dist/src/templates/changelog.md.template.d.ts.map +0 -1
  267. package/dist/src/templates/changelog.md.template.js +0 -19
  268. package/dist/src/templates/changelog.md.template.js.map +0 -1
  269. package/dist/src/templates/index.d.ts +0 -11
  270. package/dist/src/templates/index.d.ts.map +0 -1
  271. package/dist/src/templates/index.js +0 -11
  272. package/dist/src/templates/index.js.map +0 -1
  273. package/dist/src/templates/mcp-server.template.d.ts +0 -82
  274. package/dist/src/templates/mcp-server.template.d.ts.map +0 -1
  275. package/dist/src/templates/mcp-server.template.js +0 -430
  276. package/dist/src/templates/mcp-server.template.js.map +0 -1
  277. package/dist/src/templates/mcp-server.template.snippets.d.ts +0 -51
  278. package/dist/src/templates/mcp-server.template.snippets.d.ts.map +0 -1
  279. package/dist/src/templates/mcp-server.template.snippets.js +0 -162
  280. package/dist/src/templates/mcp-server.template.snippets.js.map +0 -1
  281. package/dist/src/templates/mcp-template-handlers.d.ts +0 -33
  282. package/dist/src/templates/mcp-template-handlers.d.ts.map +0 -1
  283. package/dist/src/templates/mcp-template-handlers.js +0 -106
  284. package/dist/src/templates/mcp-template-handlers.js.map +0 -1
  285. package/dist/src/templates/mcp-template-types.d.ts +0 -48
  286. package/dist/src/templates/mcp-template-types.d.ts.map +0 -1
  287. package/dist/src/templates/mcp-template-types.js +0 -18
  288. package/dist/src/templates/mcp-template-types.js.map +0 -1
  289. package/dist/src/templates/readme.md.template.d.ts +0 -8
  290. package/dist/src/templates/readme.md.template.d.ts.map +0 -1
  291. package/dist/src/templates/readme.md.template.js +0 -86
  292. package/dist/src/templates/readme.md.template.js.map +0 -1
  293. package/dist/src/templates/skill.md.template.d.ts +0 -8
  294. package/dist/src/templates/skill.md.template.d.ts.map +0 -1
  295. package/dist/src/templates/skill.md.template.js +0 -97
  296. package/dist/src/templates/skill.md.template.js.map +0 -1
  297. package/dist/src/templates/subagent.md.template.d.ts +0 -38
  298. package/dist/src/templates/subagent.md.template.d.ts.map +0 -1
  299. package/dist/src/templates/subagent.md.template.js +0 -128
  300. package/dist/src/templates/subagent.md.template.js.map +0 -1
  301. package/dist/src/utils/errors.d.ts +0 -52
  302. package/dist/src/utils/errors.d.ts.map +0 -1
  303. package/dist/src/utils/errors.js +0 -58
  304. package/dist/src/utils/errors.js.map +0 -1
  305. package/dist/src/utils/formatters.d.ts +0 -39
  306. package/dist/src/utils/formatters.d.ts.map +0 -1
  307. package/dist/src/utils/formatters.js +0 -69
  308. package/dist/src/utils/formatters.js.map +0 -1
  309. package/dist/src/utils/license-types.d.ts +0 -88
  310. package/dist/src/utils/license-types.d.ts.map +0 -1
  311. package/dist/src/utils/license-types.js +0 -60
  312. package/dist/src/utils/license-types.js.map +0 -1
  313. package/dist/src/utils/license-validation.d.ts +0 -61
  314. package/dist/src/utils/license-validation.d.ts.map +0 -1
  315. package/dist/src/utils/license-validation.js +0 -198
  316. package/dist/src/utils/license-validation.js.map +0 -1
  317. package/dist/src/utils/license.d.ts +0 -56
  318. package/dist/src/utils/license.d.ts.map +0 -1
  319. package/dist/src/utils/license.js +0 -163
  320. package/dist/src/utils/license.js.map +0 -1
  321. package/dist/src/utils/license.test.d.ts +0 -7
  322. package/dist/src/utils/license.test.d.ts.map +0 -1
  323. package/dist/src/utils/license.test.js +0 -308
  324. package/dist/src/utils/license.test.js.map +0 -1
  325. package/dist/src/utils/manifest.d.ts +0 -121
  326. package/dist/src/utils/manifest.d.ts.map +0 -1
  327. package/dist/src/utils/manifest.js +0 -133
  328. package/dist/src/utils/manifest.js.map +0 -1
  329. package/dist/src/utils/manifest.test.d.ts +0 -20
  330. package/dist/src/utils/manifest.test.d.ts.map +0 -1
  331. package/dist/src/utils/manifest.test.js +0 -344
  332. package/dist/src/utils/manifest.test.js.map +0 -1
  333. package/dist/src/utils/node-version.d.ts +0 -41
  334. package/dist/src/utils/node-version.d.ts.map +0 -1
  335. package/dist/src/utils/node-version.js +0 -123
  336. package/dist/src/utils/node-version.js.map +0 -1
  337. package/dist/src/utils/open-database.d.ts +0 -35
  338. package/dist/src/utils/open-database.d.ts.map +0 -1
  339. package/dist/src/utils/open-database.js +0 -73
  340. package/dist/src/utils/open-database.js.map +0 -1
  341. package/dist/src/utils/require-tier.d.ts +0 -38
  342. package/dist/src/utils/require-tier.d.ts.map +0 -1
  343. package/dist/src/utils/require-tier.js +0 -74
  344. package/dist/src/utils/require-tier.js.map +0 -1
  345. package/dist/src/utils/sanitize.d.ts +0 -30
  346. package/dist/src/utils/sanitize.d.ts.map +0 -1
  347. package/dist/src/utils/sanitize.js +0 -45
  348. package/dist/src/utils/sanitize.js.map +0 -1
  349. package/dist/src/utils/skill-name.d.ts +0 -19
  350. package/dist/src/utils/skill-name.d.ts.map +0 -1
  351. package/dist/src/utils/skill-name.js +0 -26
  352. package/dist/src/utils/skill-name.js.map +0 -1
  353. package/dist/src/utils/skills-directory.d.ts +0 -95
  354. package/dist/src/utils/skills-directory.d.ts.map +0 -1
  355. package/dist/src/utils/skills-directory.js +0 -285
  356. package/dist/src/utils/skills-directory.js.map +0 -1
  357. package/dist/src/utils/startup-header-gate.d.ts +0 -29
  358. package/dist/src/utils/startup-header-gate.d.ts.map +0 -1
  359. package/dist/src/utils/startup-header-gate.js +0 -44
  360. package/dist/src/utils/startup-header-gate.js.map +0 -1
  361. package/dist/src/utils/startup-header-gate.test.d.ts +0 -2
  362. package/dist/src/utils/startup-header-gate.test.d.ts.map +0 -1
  363. package/dist/src/utils/startup-header-gate.test.js +0 -46
  364. package/dist/src/utils/startup-header-gate.test.js.map +0 -1
  365. package/dist/src/utils/tool-analyzer.d.ts +0 -54
  366. package/dist/src/utils/tool-analyzer.d.ts.map +0 -1
  367. package/dist/src/utils/tool-analyzer.js +0 -156
  368. package/dist/src/utils/tool-analyzer.js.map +0 -1
  369. package/dist/src/version.d.ts +0 -2
  370. package/dist/src/version.d.ts.map +0 -1
  371. package/dist/src/version.js +0 -24
  372. package/dist/src/version.js.map +0 -1
  373. package/dist/tests/audit-collisions.test.d.ts +0 -42
  374. package/dist/tests/audit-collisions.test.d.ts.map +0 -1
  375. package/dist/tests/audit-collisions.test.js +0 -370
  376. package/dist/tests/audit-collisions.test.js.map +0 -1
  377. package/dist/tests/audit-restructure.test.d.ts +0 -15
  378. package/dist/tests/audit-restructure.test.d.ts.map +0 -1
  379. package/dist/tests/audit-restructure.test.js +0 -151
  380. package/dist/tests/audit-restructure.test.js.map +0 -1
  381. package/dist/tests/author.test.d.ts +0 -5
  382. package/dist/tests/author.test.d.ts.map +0 -1
  383. package/dist/tests/author.test.js +0 -653
  384. package/dist/tests/author.test.js.map +0 -1
  385. package/dist/tests/config.test.d.ts +0 -33
  386. package/dist/tests/config.test.d.ts.map +0 -1
  387. package/dist/tests/config.test.js +0 -240
  388. package/dist/tests/config.test.js.map +0 -1
  389. package/dist/tests/create.test.d.ts +0 -5
  390. package/dist/tests/create.test.d.ts.map +0 -1
  391. package/dist/tests/create.test.js +0 -449
  392. package/dist/tests/create.test.js.map +0 -1
  393. package/dist/tests/e2e/audit-sources-affix.test.d.ts +0 -11
  394. package/dist/tests/e2e/audit-sources-affix.test.d.ts.map +0 -1
  395. package/dist/tests/e2e/audit-sources-affix.test.js +0 -121
  396. package/dist/tests/e2e/audit-sources-affix.test.js.map +0 -1
  397. package/dist/tests/e2e/audit-sources-apply.test.d.ts +0 -13
  398. package/dist/tests/e2e/audit-sources-apply.test.d.ts.map +0 -1
  399. package/dist/tests/e2e/audit-sources-apply.test.js +0 -166
  400. package/dist/tests/e2e/audit-sources-apply.test.js.map +0 -1
  401. package/dist/tests/e2e/audit-sources-recovery.test.d.ts +0 -15
  402. package/dist/tests/e2e/audit-sources-recovery.test.d.ts.map +0 -1
  403. package/dist/tests/e2e/audit-sources-recovery.test.js +0 -179
  404. package/dist/tests/e2e/audit-sources-recovery.test.js.map +0 -1
  405. package/dist/tests/e2e/audit-sources-roundtrip.test.d.ts +0 -23
  406. package/dist/tests/e2e/audit-sources-roundtrip.test.d.ts.map +0 -1
  407. package/dist/tests/e2e/audit-sources-roundtrip.test.js +0 -139
  408. package/dist/tests/e2e/audit-sources-roundtrip.test.js.map +0 -1
  409. package/dist/tests/e2e/author.e2e.test.d.ts +0 -9
  410. package/dist/tests/e2e/author.e2e.test.d.ts.map +0 -1
  411. package/dist/tests/e2e/author.e2e.test.js +0 -666
  412. package/dist/tests/e2e/author.e2e.test.js.map +0 -1
  413. package/dist/tests/e2e/import.e2e.test.d.ts +0 -10
  414. package/dist/tests/e2e/import.e2e.test.d.ts.map +0 -1
  415. package/dist/tests/e2e/import.e2e.test.js +0 -213
  416. package/dist/tests/e2e/import.e2e.test.js.map +0 -1
  417. package/dist/tests/e2e/manage.e2e.test.d.ts +0 -9
  418. package/dist/tests/e2e/manage.e2e.test.d.ts.map +0 -1
  419. package/dist/tests/e2e/manage.e2e.test.js +0 -277
  420. package/dist/tests/e2e/manage.e2e.test.js.map +0 -1
  421. package/dist/tests/e2e/search.e2e.test.d.ts +0 -10
  422. package/dist/tests/e2e/search.e2e.test.d.ts.map +0 -1
  423. package/dist/tests/e2e/search.e2e.test.js +0 -324
  424. package/dist/tests/e2e/search.e2e.test.js.map +0 -1
  425. package/dist/tests/e2e/test-config.d.ts +0 -39
  426. package/dist/tests/e2e/test-config.d.ts.map +0 -1
  427. package/dist/tests/e2e/test-config.js +0 -44
  428. package/dist/tests/e2e/test-config.js.map +0 -1
  429. package/dist/tests/e2e/utils/baseline-collector.d.ts +0 -107
  430. package/dist/tests/e2e/utils/baseline-collector.d.ts.map +0 -1
  431. package/dist/tests/e2e/utils/baseline-collector.js +0 -211
  432. package/dist/tests/e2e/utils/baseline-collector.js.map +0 -1
  433. package/dist/tests/e2e/utils/hardcoded-detector.d.ts +0 -46
  434. package/dist/tests/e2e/utils/hardcoded-detector.d.ts.map +0 -1
  435. package/dist/tests/e2e/utils/hardcoded-detector.js +0 -238
  436. package/dist/tests/e2e/utils/hardcoded-detector.js.map +0 -1
  437. package/dist/tests/e2e/utils/index.d.ts +0 -12
  438. package/dist/tests/e2e/utils/index.d.ts.map +0 -1
  439. package/dist/tests/e2e/utils/index.js +0 -12
  440. package/dist/tests/e2e/utils/index.js.map +0 -1
  441. package/dist/tests/e2e/utils/linear-reporter.d.ts +0 -60
  442. package/dist/tests/e2e/utils/linear-reporter.d.ts.map +0 -1
  443. package/dist/tests/e2e/utils/linear-reporter.js +0 -223
  444. package/dist/tests/e2e/utils/linear-reporter.js.map +0 -1
  445. package/dist/tests/e2e/utils/mock-github.d.ts +0 -23
  446. package/dist/tests/e2e/utils/mock-github.d.ts.map +0 -1
  447. package/dist/tests/e2e/utils/mock-github.js +0 -60
  448. package/dist/tests/e2e/utils/mock-github.js.map +0 -1
  449. package/dist/tests/e2e/utils/mock-prompts.d.ts +0 -19
  450. package/dist/tests/e2e/utils/mock-prompts.d.ts.map +0 -1
  451. package/dist/tests/e2e/utils/mock-prompts.js +0 -48
  452. package/dist/tests/e2e/utils/mock-prompts.js.map +0 -1
  453. package/dist/tests/e2e/utils/source-recovery-fixture.d.ts +0 -49
  454. package/dist/tests/e2e/utils/source-recovery-fixture.d.ts.map +0 -1
  455. package/dist/tests/e2e/utils/source-recovery-fixture.js +0 -106
  456. package/dist/tests/e2e/utils/source-recovery-fixture.js.map +0 -1
  457. package/dist/tests/embedding-probe-stdio.test.d.ts +0 -11
  458. package/dist/tests/embedding-probe-stdio.test.d.ts.map +0 -1
  459. package/dist/tests/embedding-probe-stdio.test.js +0 -58
  460. package/dist/tests/embedding-probe-stdio.test.js.map +0 -1
  461. package/dist/tests/import.test.d.ts +0 -5
  462. package/dist/tests/import.test.d.ts.map +0 -1
  463. package/dist/tests/import.test.js +0 -11
  464. package/dist/tests/import.test.js.map +0 -1
  465. package/dist/tests/init.test.d.ts +0 -30
  466. package/dist/tests/init.test.d.ts.map +0 -1
  467. package/dist/tests/init.test.js +0 -357
  468. package/dist/tests/init.test.js.map +0 -1
  469. package/dist/tests/install-multi-client.test.d.ts +0 -2
  470. package/dist/tests/install-multi-client.test.d.ts.map +0 -1
  471. package/dist/tests/install-multi-client.test.js +0 -202
  472. package/dist/tests/install-multi-client.test.js.map +0 -1
  473. package/dist/tests/install-quarantine.test.d.ts +0 -10
  474. package/dist/tests/install-quarantine.test.d.ts.map +0 -1
  475. package/dist/tests/install-quarantine.test.js +0 -86
  476. package/dist/tests/install-quarantine.test.js.map +0 -1
  477. package/dist/tests/install-skill.test.d.ts +0 -8
  478. package/dist/tests/install-skill.test.d.ts.map +0 -1
  479. package/dist/tests/install-skill.test.js +0 -414
  480. package/dist/tests/install-skill.test.js.map +0 -1
  481. package/dist/tests/integration/import-local.test.d.ts +0 -2
  482. package/dist/tests/integration/import-local.test.d.ts.map +0 -1
  483. package/dist/tests/integration/import-local.test.js +0 -158
  484. package/dist/tests/integration/import-local.test.js.map +0 -1
  485. package/dist/tests/license-validation.test.d.ts +0 -8
  486. package/dist/tests/license-validation.test.d.ts.map +0 -1
  487. package/dist/tests/license-validation.test.js +0 -186
  488. package/dist/tests/license-validation.test.js.map +0 -1
  489. package/dist/tests/manage.test.d.ts +0 -5
  490. package/dist/tests/manage.test.d.ts.map +0 -1
  491. package/dist/tests/manage.test.js +0 -495
  492. package/dist/tests/manage.test.js.map +0 -1
  493. package/dist/tests/mcp-server-template.test.d.ts +0 -7
  494. package/dist/tests/mcp-server-template.test.d.ts.map +0 -1
  495. package/dist/tests/mcp-server-template.test.js +0 -372
  496. package/dist/tests/mcp-server-template.test.js.map +0 -1
  497. package/dist/tests/node-version.test.d.ts +0 -8
  498. package/dist/tests/node-version.test.d.ts.map +0 -1
  499. package/dist/tests/node-version.test.js +0 -200
  500. package/dist/tests/node-version.test.js.map +0 -1
  501. package/dist/tests/open-database.test.d.ts +0 -2
  502. package/dist/tests/open-database.test.d.ts.map +0 -1
  503. package/dist/tests/open-database.test.js +0 -77
  504. package/dist/tests/open-database.test.js.map +0 -1
  505. package/dist/tests/recommend-helpers.test.d.ts +0 -9
  506. package/dist/tests/recommend-helpers.test.d.ts.map +0 -1
  507. package/dist/tests/recommend-helpers.test.js +0 -308
  508. package/dist/tests/recommend-helpers.test.js.map +0 -1
  509. package/dist/tests/recommend-scoring.test.d.ts +0 -8
  510. package/dist/tests/recommend-scoring.test.d.ts.map +0 -1
  511. package/dist/tests/recommend-scoring.test.js +0 -184
  512. package/dist/tests/recommend-scoring.test.js.map +0 -1
  513. package/dist/tests/recommend.errors.test.d.ts +0 -8
  514. package/dist/tests/recommend.errors.test.d.ts.map +0 -1
  515. package/dist/tests/recommend.errors.test.js +0 -232
  516. package/dist/tests/recommend.errors.test.js.map +0 -1
  517. package/dist/tests/recommend.filters.test.d.ts +0 -9
  518. package/dist/tests/recommend.filters.test.d.ts.map +0 -1
  519. package/dist/tests/recommend.filters.test.js +0 -235
  520. package/dist/tests/recommend.filters.test.js.map +0 -1
  521. package/dist/tests/recommend.test-helpers.d.ts +0 -66
  522. package/dist/tests/recommend.test-helpers.d.ts.map +0 -1
  523. package/dist/tests/recommend.test-helpers.js +0 -79
  524. package/dist/tests/recommend.test-helpers.js.map +0 -1
  525. package/dist/tests/recommend.test.d.ts +0 -11
  526. package/dist/tests/recommend.test.d.ts.map +0 -1
  527. package/dist/tests/recommend.test.js +0 -320
  528. package/dist/tests/recommend.test.js.map +0 -1
  529. package/dist/tests/search-helpers.test.d.ts +0 -2
  530. package/dist/tests/search-helpers.test.d.ts.map +0 -1
  531. package/dist/tests/search-helpers.test.js +0 -110
  532. package/dist/tests/search-helpers.test.js.map +0 -1
  533. package/dist/tests/search.test.d.ts +0 -5
  534. package/dist/tests/search.test.d.ts.map +0 -1
  535. package/dist/tests/search.test.js +0 -91
  536. package/dist/tests/search.test.js.map +0 -1
  537. package/dist/tests/skills-directory-per-harness.test.d.ts +0 -2
  538. package/dist/tests/skills-directory-per-harness.test.d.ts.map +0 -1
  539. package/dist/tests/skills-directory-per-harness.test.js +0 -116
  540. package/dist/tests/skills-directory-per-harness.test.js.map +0 -1
  541. package/dist/tests/skills-directory.test.d.ts +0 -2
  542. package/dist/tests/skills-directory.test.d.ts.map +0 -1
  543. package/dist/tests/skills-directory.test.js +0 -108
  544. package/dist/tests/skills-directory.test.js.map +0 -1
  545. package/dist/tests/sync.auth-ux.test.d.ts +0 -14
  546. package/dist/tests/sync.auth-ux.test.d.ts.map +0 -1
  547. package/dist/tests/sync.auth-ux.test.js +0 -148
  548. package/dist/tests/sync.auth-ux.test.js.map +0 -1
  549. package/dist/tests/tool-analyzer.test.d.ts +0 -8
  550. package/dist/tests/tool-analyzer.test.d.ts.map +0 -1
  551. package/dist/tests/tool-analyzer.test.js +0 -149
  552. package/dist/tests/tool-analyzer.test.js.map +0 -1
  553. package/dist/tests/unit/commands/install.test.d.ts +0 -7
  554. package/dist/tests/unit/commands/install.test.d.ts.map +0 -1
  555. package/dist/tests/unit/commands/install.test.js +0 -482
  556. package/dist/tests/unit/commands/install.test.js.map +0 -1
  557. package/dist/tests/unit/import-local.helpers.test.d.ts +0 -2
  558. package/dist/tests/unit/import-local.helpers.test.d.ts.map +0 -1
  559. package/dist/tests/unit/import-local.helpers.test.js +0 -96
  560. package/dist/tests/unit/import-local.helpers.test.js.map +0 -1
@@ -1,414 +0,0 @@
1
- /**
2
- * SMI-824: Install Skillsmith Skill Command Tests
3
- *
4
- * Tests for the install-skill command that copies bundled skillsmith skill
5
- * assets to ~/.claude/skills/skillsmith/ for /skillsmith slash command support.
6
- */
7
- import { describe, it, expect, vi, beforeEach, afterEach } from 'vitest';
8
- import { Command } from 'commander';
9
- import { join } from 'path';
10
- import { homedir } from 'os';
11
- // ============================================================================
12
- // Mock Setup - Must be before imports
13
- // ============================================================================
14
- // Create a mocks container that survives hoisting
15
- const mocks = vi.hoisted(() => ({
16
- mkdir: vi.fn(),
17
- copyFile: vi.fn(),
18
- stat: vi.fn(),
19
- readdir: vi.fn(),
20
- spinner: {
21
- start: vi.fn().mockReturnThis(),
22
- stop: vi.fn().mockReturnThis(),
23
- succeed: vi.fn().mockReturnThis(),
24
- fail: vi.fn().mockReturnThis(),
25
- warn: vi.fn().mockReturnThis(),
26
- text: '',
27
- },
28
- }));
29
- vi.mock('fs/promises', () => ({
30
- mkdir: (...args) => mocks.mkdir(...args),
31
- copyFile: (...args) => mocks.copyFile(...args),
32
- stat: (...args) => mocks.stat(...args),
33
- readdir: (...args) => mocks.readdir(...args),
34
- }));
35
- vi.mock('ora', () => ({
36
- default: () => mocks.spinner,
37
- }));
38
- // Convenience aliases
39
- const mockMkdir = mocks.mkdir;
40
- const mockCopyFile = mocks.copyFile;
41
- const mockStat = mocks.stat;
42
- const mockReaddir = mocks.readdir;
43
- const mockSpinner = mocks.spinner;
44
- // Mock console.log/error for output verification
45
- const originalConsoleLog = console.log;
46
- const originalConsoleError = console.error;
47
- const mockConsoleLog = vi.fn();
48
- const mockConsoleError = vi.fn();
49
- // Mock process.exit
50
- const mockExit = vi.spyOn(process, 'exit').mockImplementation(() => undefined);
51
- // ============================================================================
52
- // Test Fixtures
53
- // ============================================================================
54
- // Target path used in assertions
55
- const EXPECTED_TARGET_PATH = join(homedir(), '.claude', 'skills', 'skillsmith');
56
- void EXPECTED_TARGET_PATH; // Used in tests below via mockMkdir assertions
57
- /**
58
- * Create a mock directory entry for readdir
59
- */
60
- function createDirEntry(name, isDir) {
61
- return {
62
- name,
63
- isDirectory: () => isDir,
64
- isFile: () => !isDir,
65
- isSymbolicLink: () => false,
66
- };
67
- }
68
- /**
69
- * Set up mocks for a successful installation scenario
70
- */
71
- function setupSuccessfulInstall() {
72
- // Assets directory exists
73
- mockStat.mockImplementation(async (path) => {
74
- if (path.includes('assets/skillsmith-skill') || path.includes('assets\\skillsmith-skill')) {
75
- return { isDirectory: () => true };
76
- }
77
- // Target directory does not exist
78
- throw Object.assign(new Error('ENOENT'), { code: 'ENOENT' });
79
- });
80
- // Assets directory has files
81
- mockReaddir.mockResolvedValue([createDirEntry('SKILL.md', false)]);
82
- // mkdir and copyFile succeed
83
- mockMkdir.mockResolvedValue(undefined);
84
- mockCopyFile.mockResolvedValue(undefined);
85
- }
86
- /**
87
- * Set up mocks for existing installation scenario
88
- */
89
- function setupExistingInstall() {
90
- mockStat.mockImplementation(async (_path) => {
91
- // Both assets and target exist
92
- return { isDirectory: () => true };
93
- });
94
- mockReaddir.mockResolvedValue([createDirEntry('SKILL.md', false)]);
95
- mockMkdir.mockResolvedValue(undefined);
96
- mockCopyFile.mockResolvedValue(undefined);
97
- }
98
- // ============================================================================
99
- // Tests
100
- // ============================================================================
101
- describe('SMI-824: Install Skillsmith Skill Command', () => {
102
- beforeEach(() => {
103
- vi.clearAllMocks();
104
- console.log = mockConsoleLog;
105
- console.error = mockConsoleError;
106
- });
107
- afterEach(() => {
108
- console.log = originalConsoleLog;
109
- console.error = originalConsoleError;
110
- });
111
- // ==========================================================================
112
- // Command Registration Tests
113
- // ==========================================================================
114
- describe('command registration', () => {
115
- it('should create a Command instance named "setup"', async () => {
116
- const { createInstallSkillCommand } = await import('../src/commands/install-skill.js');
117
- const cmd = createInstallSkillCommand();
118
- expect(cmd).toBeInstanceOf(Command);
119
- expect(cmd.name()).toBe('setup');
120
- });
121
- it('should have "install-skill" as a deprecation alias', async () => {
122
- const { createInstallSkillCommand } = await import('../src/commands/install-skill.js');
123
- const cmd = createInstallSkillCommand();
124
- expect(cmd.aliases()).toContain('install-skill');
125
- });
126
- it('should have a description mentioning slash command setup', async () => {
127
- const { createInstallSkillCommand } = await import('../src/commands/install-skill.js');
128
- const cmd = createInstallSkillCommand();
129
- const description = cmd.description();
130
- expect(description.toLowerCase()).toContain('skillsmith');
131
- expect(description.toLowerCase()).toContain('slash command');
132
- });
133
- it('should have --force option with short flag -f', async () => {
134
- const { createInstallSkillCommand } = await import('../src/commands/install-skill.js');
135
- const cmd = createInstallSkillCommand();
136
- const forceOpt = cmd.options.find((o) => o.short === '-f');
137
- expect(forceOpt).toBeDefined();
138
- expect(forceOpt?.long).toBe('--force');
139
- });
140
- it('should export as default', async () => {
141
- const mod = await import('../src/commands/install-skill.js');
142
- expect(mod.default).toBeDefined();
143
- expect(typeof mod.default).toBe('function');
144
- });
145
- });
146
- // ==========================================================================
147
- // Successful Installation Tests
148
- // ==========================================================================
149
- describe('successful installation', () => {
150
- beforeEach(() => {
151
- setupSuccessfulInstall();
152
- });
153
- it('should create target directory with recursive option', async () => {
154
- const { createInstallSkillCommand } = await import('../src/commands/install-skill.js');
155
- const cmd = createInstallSkillCommand();
156
- await cmd.parseAsync(['node', 'test']);
157
- // Should create parent directories
158
- expect(mockMkdir).toHaveBeenCalledWith(expect.stringContaining('.claude'), expect.objectContaining({ recursive: true }));
159
- });
160
- it('should copy files from assets to target directory', async () => {
161
- const { createInstallSkillCommand } = await import('../src/commands/install-skill.js');
162
- const cmd = createInstallSkillCommand();
163
- await cmd.parseAsync(['node', 'test']);
164
- expect(mockCopyFile).toHaveBeenCalled();
165
- });
166
- it('should show spinner during installation', async () => {
167
- const { createInstallSkillCommand } = await import('../src/commands/install-skill.js');
168
- const cmd = createInstallSkillCommand();
169
- await cmd.parseAsync(['node', 'test']);
170
- // ora() is called with text, then .start() is called without args
171
- expect(mockSpinner.start).toHaveBeenCalled();
172
- });
173
- it('should show success message after installation', async () => {
174
- const { createInstallSkillCommand } = await import('../src/commands/install-skill.js');
175
- const cmd = createInstallSkillCommand();
176
- await cmd.parseAsync(['node', 'test']);
177
- expect(mockSpinner.succeed).toHaveBeenCalledWith(expect.stringContaining('installed successfully'));
178
- });
179
- it('should display available commands after installation', async () => {
180
- const { createInstallSkillCommand } = await import('../src/commands/install-skill.js');
181
- const cmd = createInstallSkillCommand();
182
- await cmd.parseAsync(['node', 'test']);
183
- const output = mockConsoleLog.mock.calls.map((c) => c[0]).join('\n');
184
- expect(output).toContain('Available Commands');
185
- expect(output).toContain('/skillsmith search');
186
- expect(output).toContain('/skillsmith install');
187
- expect(output).toContain('/skillsmith recommend');
188
- });
189
- it('should display installation location', async () => {
190
- const { createInstallSkillCommand } = await import('../src/commands/install-skill.js');
191
- const cmd = createInstallSkillCommand();
192
- await cmd.parseAsync(['node', 'test']);
193
- const output = mockConsoleLog.mock.calls.map((c) => c[0]).join('\n');
194
- expect(output).toContain('Location');
195
- });
196
- it('should display files copied count', async () => {
197
- const { createInstallSkillCommand } = await import('../src/commands/install-skill.js');
198
- const cmd = createInstallSkillCommand();
199
- await cmd.parseAsync(['node', 'test']);
200
- const output = mockConsoleLog.mock.calls.map((c) => c[0]).join('\n');
201
- expect(output).toContain('Files copied');
202
- });
203
- });
204
- // ==========================================================================
205
- // Existing Installation Tests
206
- // ==========================================================================
207
- describe('existing installation', () => {
208
- beforeEach(() => {
209
- setupExistingInstall();
210
- });
211
- it('should show already installed message without --force', async () => {
212
- const { createInstallSkillCommand } = await import('../src/commands/install-skill.js');
213
- const cmd = createInstallSkillCommand();
214
- await cmd.parseAsync(['node', 'test']);
215
- const output = mockConsoleLog.mock.calls.map((c) => c[0]).join('\n');
216
- expect(output).toContain('already installed');
217
- });
218
- it('should suggest using --force when already installed', async () => {
219
- const { createInstallSkillCommand } = await import('../src/commands/install-skill.js');
220
- const cmd = createInstallSkillCommand();
221
- await cmd.parseAsync(['node', 'test']);
222
- const output = mockConsoleLog.mock.calls.map((c) => c[0]).join('\n');
223
- expect(output).toContain('--force');
224
- });
225
- it('should not copy files when already installed without --force', async () => {
226
- const { createInstallSkillCommand } = await import('../src/commands/install-skill.js');
227
- const cmd = createInstallSkillCommand();
228
- await cmd.parseAsync(['node', 'test']);
229
- // Spinner should not have been started for already installed case
230
- expect(mockSpinner.start).not.toHaveBeenCalled();
231
- });
232
- });
233
- // ==========================================================================
234
- // Force Flag Tests
235
- // ==========================================================================
236
- describe('--force flag', () => {
237
- beforeEach(() => {
238
- setupExistingInstall();
239
- });
240
- it('should reinstall when --force is provided', async () => {
241
- const { createInstallSkillCommand } = await import('../src/commands/install-skill.js');
242
- const cmd = createInstallSkillCommand();
243
- await cmd.parseAsync(['node', 'test', '--force']);
244
- // ora() is called with text, then .start() is called without args
245
- expect(mockSpinner.start).toHaveBeenCalled();
246
- expect(mockCopyFile).toHaveBeenCalled();
247
- });
248
- it('should show success message when reinstalling with --force', async () => {
249
- const { createInstallSkillCommand } = await import('../src/commands/install-skill.js');
250
- const cmd = createInstallSkillCommand();
251
- await cmd.parseAsync(['node', 'test', '-f']);
252
- expect(mockSpinner.succeed).toHaveBeenCalledWith(expect.stringContaining('installed successfully'));
253
- });
254
- it('should accept -f short flag', async () => {
255
- const { createInstallSkillCommand } = await import('../src/commands/install-skill.js');
256
- const cmd = createInstallSkillCommand();
257
- await cmd.parseAsync(['node', 'test', '-f']);
258
- expect(mockSpinner.start).toHaveBeenCalled();
259
- });
260
- });
261
- // ==========================================================================
262
- // Error Handling Tests
263
- // ==========================================================================
264
- describe('error handling', () => {
265
- it('should fail when assets directory not found', async () => {
266
- mockStat.mockRejectedValue(Object.assign(new Error('ENOENT'), { code: 'ENOENT' }));
267
- const { createInstallSkillCommand } = await import('../src/commands/install-skill.js');
268
- const cmd = createInstallSkillCommand();
269
- await cmd.parseAsync(['node', 'test']);
270
- expect(mockConsoleError).toHaveBeenCalled();
271
- const errorOutput = mockConsoleError.mock.calls
272
- .map((c) => String(c[0] || '') + String(c[1] || ''))
273
- .join(' ');
274
- expect(errorOutput.toLowerCase()).toContain('error');
275
- expect(mockExit).toHaveBeenCalledWith(1);
276
- });
277
- it('should fail spinner when copy fails', async () => {
278
- setupSuccessfulInstall();
279
- mockCopyFile.mockRejectedValue(new Error('Permission denied'));
280
- const { createInstallSkillCommand } = await import('../src/commands/install-skill.js');
281
- const cmd = createInstallSkillCommand();
282
- await cmd.parseAsync(['node', 'test']);
283
- expect(mockSpinner.fail).toHaveBeenCalledWith('Failed to install skillsmith skill');
284
- expect(mockExit).toHaveBeenCalledWith(1);
285
- });
286
- it('should fail spinner when mkdir fails', async () => {
287
- setupSuccessfulInstall();
288
- mockMkdir.mockRejectedValue(new Error('Cannot create directory'));
289
- const { createInstallSkillCommand } = await import('../src/commands/install-skill.js');
290
- const cmd = createInstallSkillCommand();
291
- await cmd.parseAsync(['node', 'test']);
292
- expect(mockSpinner.fail).toHaveBeenCalled();
293
- expect(mockExit).toHaveBeenCalledWith(1);
294
- });
295
- it('should sanitize error messages containing user paths', async () => {
296
- setupSuccessfulInstall();
297
- mockCopyFile.mockRejectedValue(new Error(`Error at ${homedir()}/secret/path`));
298
- const { createInstallSkillCommand } = await import('../src/commands/install-skill.js');
299
- const cmd = createInstallSkillCommand();
300
- await cmd.parseAsync(['node', 'test']);
301
- // Error should be logged but with sanitized paths
302
- expect(mockConsoleError).toHaveBeenCalled();
303
- const errorOutput = mockConsoleError.mock.calls.map((c) => c.join(' ')).join(' ');
304
- // The sanitizeError function replaces home paths with ~
305
- expect(errorOutput).not.toContain(homedir());
306
- });
307
- });
308
- // ==========================================================================
309
- // Recursive Directory Copy Tests
310
- // ==========================================================================
311
- describe('recursive directory copy', () => {
312
- it('should copy nested directories recursively', async () => {
313
- // Assets directory exists
314
- mockStat.mockImplementation(async (path) => {
315
- if (path.includes('assets/skillsmith-skill') || path.includes('assets\\skillsmith-skill')) {
316
- return { isDirectory: () => true };
317
- }
318
- // Target directory does not exist
319
- throw Object.assign(new Error('ENOENT'), { code: 'ENOENT' });
320
- });
321
- // Assets have nested structure
322
- mockReaddir.mockImplementation(async (path) => {
323
- if (path.includes('subdir')) {
324
- return [createDirEntry('nested-file.md', false)];
325
- }
326
- return [createDirEntry('SKILL.md', false), createDirEntry('subdir', true)];
327
- });
328
- mockMkdir.mockResolvedValue(undefined);
329
- mockCopyFile.mockResolvedValue(undefined);
330
- const { createInstallSkillCommand } = await import('../src/commands/install-skill.js');
331
- const cmd = createInstallSkillCommand();
332
- await cmd.parseAsync(['node', 'test']);
333
- // Should have copied multiple files
334
- expect(mockCopyFile).toHaveBeenCalledTimes(2); // SKILL.md and nested-file.md
335
- // Should have created subdirectory
336
- expect(mockMkdir).toHaveBeenCalledWith(expect.stringContaining('subdir'), expect.objectContaining({ recursive: true }));
337
- });
338
- it('should count all copied files correctly', async () => {
339
- // Assets directory exists
340
- mockStat.mockImplementation(async (path) => {
341
- if (path.includes('assets/skillsmith-skill') || path.includes('assets\\skillsmith-skill')) {
342
- return { isDirectory: () => true };
343
- }
344
- throw Object.assign(new Error('ENOENT'), { code: 'ENOENT' });
345
- });
346
- // Multiple files in assets
347
- mockReaddir.mockResolvedValue([
348
- createDirEntry('SKILL.md', false),
349
- createDirEntry('README.md', false),
350
- createDirEntry('config.json', false),
351
- ]);
352
- mockMkdir.mockResolvedValue(undefined);
353
- mockCopyFile.mockResolvedValue(undefined);
354
- const { createInstallSkillCommand } = await import('../src/commands/install-skill.js');
355
- const cmd = createInstallSkillCommand();
356
- await cmd.parseAsync(['node', 'test']);
357
- const output = mockConsoleLog.mock.calls.map((c) => c[0]).join('\n');
358
- expect(output).toContain('Files copied: 3');
359
- });
360
- it('should skip symlinks for security', async () => {
361
- // Assets directory exists
362
- mockStat.mockImplementation(async (path) => {
363
- if (path.includes('assets/skillsmith-skill') || path.includes('assets\\skillsmith-skill')) {
364
- return { isDirectory: () => true };
365
- }
366
- throw Object.assign(new Error('ENOENT'), { code: 'ENOENT' });
367
- });
368
- // Assets include a symlink (which should be skipped)
369
- mockReaddir.mockResolvedValue([
370
- createDirEntry('SKILL.md', false),
371
- {
372
- name: 'dangerous-symlink',
373
- isDirectory: () => false,
374
- isFile: () => false,
375
- isSymbolicLink: () => true,
376
- },
377
- ]);
378
- mockMkdir.mockResolvedValue(undefined);
379
- mockCopyFile.mockResolvedValue(undefined);
380
- const { createInstallSkillCommand } = await import('../src/commands/install-skill.js');
381
- const cmd = createInstallSkillCommand();
382
- await cmd.parseAsync(['node', 'test']);
383
- // Should only copy the regular file, not the symlink
384
- expect(mockCopyFile).toHaveBeenCalledTimes(1);
385
- expect(mockCopyFile).toHaveBeenCalledWith(expect.stringContaining('SKILL.md'), expect.stringContaining('SKILL.md'));
386
- // Should not have tried to copy the symlink
387
- expect(mockCopyFile).not.toHaveBeenCalledWith(expect.stringContaining('dangerous-symlink'), expect.any(String));
388
- });
389
- });
390
- // ==========================================================================
391
- // Target Path Tests
392
- // ==========================================================================
393
- describe('target path', () => {
394
- it('should install to ~/.claude/skills/skillsmith/', async () => {
395
- setupSuccessfulInstall();
396
- const { createInstallSkillCommand } = await import('../src/commands/install-skill.js');
397
- const cmd = createInstallSkillCommand();
398
- await cmd.parseAsync(['node', 'test']);
399
- // mkdir should be called with the correct target path
400
- expect(mockMkdir).toHaveBeenCalledWith(expect.stringContaining(join('.claude', 'skills', 'skillsmith')), expect.any(Object));
401
- });
402
- it('should display correct target path in output', async () => {
403
- setupSuccessfulInstall();
404
- const { createInstallSkillCommand } = await import('../src/commands/install-skill.js');
405
- const cmd = createInstallSkillCommand();
406
- await cmd.parseAsync(['node', 'test']);
407
- const output = mockConsoleLog.mock.calls.map((c) => c[0]).join('\n');
408
- expect(output).toContain('.claude');
409
- expect(output).toContain('skills');
410
- expect(output).toContain('skillsmith');
411
- });
412
- });
413
- });
414
- //# sourceMappingURL=install-skill.test.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"install-skill.test.js","sourceRoot":"","sources":["../../tests/install-skill.test.ts"],"names":[],"mappings":"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"}
@@ -1,2 +0,0 @@
1
- export {};
2
- //# sourceMappingURL=import-local.test.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"import-local.test.d.ts","sourceRoot":"","sources":["../../../tests/integration/import-local.test.ts"],"names":[],"mappings":""}
@@ -1,158 +0,0 @@
1
- /**
2
- * @fileoverview Integration tests for `skillsmith import-local` (SMI-4665)
3
- *
4
- * Exercises the action handler against a real SQLite DB on a tmpdir fixture.
5
- * Round-trip:
6
- * 1. Import — fixture skill lands in DB with source='local', trust_tier='local'
7
- * 2. Re-import is idempotent — same id, no duplicates
8
- * 3. SyncEngine.upsertSkills with force=true does NOT clobber the local row
9
- */
10
- import { describe, it, expect, beforeEach, afterEach } from 'vitest';
11
- import { promises as fs } from 'node:fs';
12
- import { join } from 'node:path';
13
- import { tmpdir } from 'node:os';
14
- import { createDatabaseAsync, initializeSchema, SkillRepository, SyncEngine, SyncConfigRepository, SyncHistoryRepository, } from '@skillsmith/core';
15
- import { runImportLocal } from '../../src/commands/import-local.js';
16
- import { vi } from 'vitest';
17
- let workDir;
18
- let dbPath;
19
- beforeEach(async () => {
20
- workDir = await fs.mkdtemp(join(tmpdir(), 'skillsmith-il-'));
21
- dbPath = join(workDir, 'skills.db');
22
- });
23
- afterEach(async () => {
24
- await fs.rm(workDir, { recursive: true, force: true });
25
- });
26
- async function writeSkill(name) {
27
- const dir = join(workDir, 'skills', name);
28
- await fs.mkdir(dir, { recursive: true });
29
- const file = join(dir, 'SKILL.md');
30
- await fs.writeFile(file, `---\nname: ${name}\ndescription: A test skill named ${name}\ntags:\n - test\n---\n# ${name}\n\nBody.\n`);
31
- return file;
32
- }
33
- describe('skillsmith import-local — round-trip', () => {
34
- it('imports SKILL.md files into the DB with source=local', async () => {
35
- await writeSkill('alpha');
36
- await writeSkill('beta');
37
- const result = await runImportLocal({
38
- path: join(workDir, 'skills'),
39
- dbPath,
40
- });
41
- expect(result.errors).toEqual([]);
42
- expect(result.imported).toBe(2);
43
- expect(result.scanned).toBe(2);
44
- const db = await createDatabaseAsync(dbPath);
45
- initializeSchema(db);
46
- try {
47
- const repo = new SkillRepository(db);
48
- const all = repo.findAll({ limit: 100 });
49
- expect(all.items).toHaveLength(2);
50
- for (const skill of all.items) {
51
- expect(skill.source).toBe('local');
52
- expect(skill.trustTier).toBe('local');
53
- }
54
- }
55
- finally {
56
- db.close();
57
- }
58
- });
59
- it('re-importing the same directory is idempotent (same id, no duplicates)', async () => {
60
- await writeSkill('gamma');
61
- const first = await runImportLocal({ path: join(workDir, 'skills'), dbPath });
62
- expect(first.imported).toBe(1);
63
- expect(first.updated).toBe(0);
64
- const second = await runImportLocal({ path: join(workDir, 'skills'), dbPath });
65
- expect(second.imported).toBe(0);
66
- expect(second.updated).toBe(1); // path is the same, id matches → update path
67
- const db = await createDatabaseAsync(dbPath);
68
- initializeSchema(db);
69
- try {
70
- const repo = new SkillRepository(db);
71
- expect(repo.count()).toBe(1);
72
- }
73
- finally {
74
- db.close();
75
- }
76
- });
77
- it('sync --force does NOT clobber locally-imported rows', async () => {
78
- const skillFile = await writeSkill('delta');
79
- await runImportLocal({ path: join(workDir, 'skills'), dbPath });
80
- const db = await createDatabaseAsync(dbPath);
81
- try {
82
- const skillRepo = new SkillRepository(db);
83
- const localSkills = skillRepo.findAll({ limit: 10 }).items;
84
- expect(localSkills).toHaveLength(1);
85
- const local = localSkills[0];
86
- // Build a SyncEngine that returns a colliding registry skill.
87
- const apiClient = {
88
- isOffline: vi.fn().mockReturnValue(false),
89
- checkHealth: vi.fn().mockResolvedValue({ status: 'healthy' }),
90
- search: vi.fn().mockResolvedValue({
91
- data: [
92
- {
93
- id: local.id,
94
- name: 'CLOBBERED REGISTRY NAME',
95
- description: 'should not appear',
96
- author: 'reg',
97
- repo_url: 'https://example.com/registry-collision',
98
- quality_score: 0.5,
99
- trust_tier: 'community',
100
- tags: [],
101
- stars: 0,
102
- installable: true,
103
- created_at: new Date().toISOString(),
104
- updated_at: new Date(Date.now() + 60_000).toISOString(),
105
- },
106
- ],
107
- total: 1,
108
- }),
109
- getSkill: vi.fn(),
110
- getHealthStatus: vi.fn(),
111
- };
112
- const syncConfigRepo = new SyncConfigRepository(db);
113
- const syncHistoryRepo = new SyncHistoryRepository(db);
114
- const skillVersionRepo = {
115
- recordVersion: vi.fn().mockResolvedValue(undefined),
116
- pruneVersions: vi.fn().mockResolvedValue(undefined),
117
- getLatestVersion: vi.fn().mockResolvedValue(null),
118
- getVersionHistory: vi.fn().mockResolvedValue([]),
119
- getVersionByHash: vi.fn().mockResolvedValue(null),
120
- };
121
- const engine = new SyncEngine(apiClient, skillRepo, syncConfigRepo, syncHistoryRepo, skillVersionRepo);
122
- const result = await engine.sync({ force: true });
123
- expect(result.success).toBe(true);
124
- expect(result.skillsUpdated).toBe(0);
125
- const after = skillRepo.findById(local.id);
126
- expect(after).not.toBeNull();
127
- expect(after.name).toBe('delta');
128
- expect(after.source).toBe('local');
129
- }
130
- finally {
131
- db.close();
132
- }
133
- // Sanity: the fixture file is still there (we didn't accidentally delete it).
134
- await fs.access(skillFile);
135
- });
136
- it('--dry-run does not mutate the DB', async () => {
137
- await writeSkill('echo');
138
- const result = await runImportLocal({
139
- path: join(workDir, 'skills'),
140
- dbPath,
141
- dryRun: true,
142
- });
143
- expect(result.dryRun).toBe(true);
144
- expect(result.imported).toBe(1);
145
- // The dry-run pass opens the DB only to read; it still initializes the
146
- // schema so subsequent reads work. Verify no skill rows landed.
147
- const db = await createDatabaseAsync(dbPath);
148
- initializeSchema(db);
149
- try {
150
- const repo = new SkillRepository(db);
151
- expect(repo.count()).toBe(0);
152
- }
153
- finally {
154
- db.close();
155
- }
156
- });
157
- });
158
- //# sourceMappingURL=import-local.test.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"import-local.test.js","sourceRoot":"","sources":["../../../tests/integration/import-local.test.ts"],"names":[],"mappings":"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"}
@@ -1,8 +0,0 @@
1
- /**
2
- * Unit tests for license-validation.ts pure logic functions
3
- *
4
- * Tests decodeLicenseKey, isExpired, getLicenseStatusLegacy.
5
- * No mocking of enterprise package — tests only the pure/legacy paths.
6
- */
7
- export {};
8
- //# sourceMappingURL=license-validation.test.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"license-validation.test.d.ts","sourceRoot":"","sources":["../../tests/license-validation.test.ts"],"names":[],"mappings":"AAAA;;;;;GAKG"}