@skillsmith/cli 0.7.1 → 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 +9 -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 -283
  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 -97
  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,2 +0,0 @@
1
- export declare const VERSION: string;
2
- //# sourceMappingURL=version.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"version.d.ts","sourceRoot":"","sources":["../../src/version.ts"],"names":[],"mappings":"AAwBA,eAAO,MAAM,OAAO,EAAE,MAAsB,CAAA"}
@@ -1,24 +0,0 @@
1
- // SMI-4454: CLI version helper — single source of truth for consumers that need
2
- // to report CLI identity to the backend (e.g., auth-device-code client_meta).
3
- //
4
- // Reads from packages/cli/package.json at runtime. This mirrors the existing
5
- // pattern in index.ts / utils/node-version.ts; we don't `import pkg from
6
- // '../package.json'` because resolveJsonModule would bundle package.json into
7
- // dist, which fights with npm publish's file layout.
8
- import { readFileSync } from 'node:fs';
9
- import { dirname, join } from 'node:path';
10
- import { fileURLToPath } from 'node:url';
11
- function readVersion() {
12
- try {
13
- // Compiled output lives at dist/src/version.js; package.json is two dirs up.
14
- const here = dirname(fileURLToPath(import.meta.url));
15
- const pkgPath = join(here, '..', '..', 'package.json');
16
- const pkg = JSON.parse(readFileSync(pkgPath, 'utf-8'));
17
- return pkg.version ?? '0.0.0';
18
- }
19
- catch {
20
- return '0.0.0';
21
- }
22
- }
23
- export const VERSION = readVersion();
24
- //# sourceMappingURL=version.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"version.js","sourceRoot":"","sources":["../../src/version.ts"],"names":[],"mappings":"AAAA,gFAAgF;AAChF,8EAA8E;AAC9E,EAAE;AACF,6EAA6E;AAC7E,yEAAyE;AACzE,8EAA8E;AAC9E,qDAAqD;AAErD,OAAO,EAAE,YAAY,EAAE,MAAM,SAAS,CAAA;AACtC,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAA;AACzC,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAA;AAExC,SAAS,WAAW;IAClB,IAAI,CAAC;QACH,6EAA6E;QAC7E,MAAM,IAAI,GAAG,OAAO,CAAC,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAA;QACpD,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,cAAc,CAAC,CAAA;QACtD,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,OAAO,EAAE,OAAO,CAAC,CAAyB,CAAA;QAC9E,OAAO,GAAG,CAAC,OAAO,IAAI,OAAO,CAAA;IAC/B,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,OAAO,CAAA;IAChB,CAAC;AACH,CAAC;AAED,MAAM,CAAC,MAAM,OAAO,GAAW,WAAW,EAAE,CAAA"}
@@ -1,42 +0,0 @@
1
- /**
2
- * @fileoverview SMI-4590 Wave 4 PR 5/6 — `sklx audit collisions` tests
3
- * @module @skillsmith/cli/tests/audit-collisions
4
- *
5
- * Coverage:
6
- *
7
- * Typed-confirmation gate (`requireConfirmationPhrase`) — load-bearing per
8
- * plan §235-239. Strict literal equality, NO normalization.
9
- * 1. Exact phrase ('APPLY ALL') — RESOLVES.
10
- * 2. Single-letter ('Y') — REJECTS.
11
- * 3. Lowercase word ('yes') — REJECTS.
12
- * 4. Lowercase phrase ('apply all') — REJECTS.
13
- * 5. No-space variant ('APPLYALL') — REJECTS.
14
- * 6. Trailing whitespace ('APPLY ALL ') — REJECTS (no trim).
15
- * 7. Empty string — REJECTS.
16
- *
17
- * Both interactive (TTY) and piped-stdin paths route through the same
18
- * `@inquirer/prompts` `input()` call, so the rejection invariant holds for
19
- * both. We mock `input` to assert the contract — the prompt library
20
- * receives the answer verbatim and our code applies strict equality.
21
- *
22
- * Interactive prompt loop (`runInteractiveLoop`):
23
- * 8. 'apply' choice → applyOneSuggestion called, status=applied.
24
- * 9. 'skip' choice → outcome recorded as skipped, no apply call.
25
- * 10. 'edit' choice → input prompts for custom name, applyRename
26
- * receives `customName`.
27
- * 11. 'quit' choice → loop terminates early; remaining suggestions
28
- * are NOT processed.
29
- * 12. Empty suggestion list → prints "No collisions found." and returns.
30
- *
31
- * Reset-ledger flow (`runResetLedger`):
32
- * 13. Backs up an existing ledger to `~/.skillsmith/backups/ledger-*.json`
33
- * BEFORE clearing.
34
- * 14. No backup file when no prior ledger exists.
35
- * 15. Confirmation phrase mismatch → throws, NO writeLedger call.
36
- *
37
- * `--json` output (`runAuditCollisions`):
38
- * 16. JSON mode prints `RunInventoryAuditResult` to stdout, no prompts,
39
- * no apply.
40
- */
41
- export {};
42
- //# sourceMappingURL=audit-collisions.test.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"audit-collisions.test.d.ts","sourceRoot":"","sources":["../../tests/audit-collisions.test.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAuCG"}
@@ -1,370 +0,0 @@
1
- /**
2
- * @fileoverview SMI-4590 Wave 4 PR 5/6 — `sklx audit collisions` tests
3
- * @module @skillsmith/cli/tests/audit-collisions
4
- *
5
- * Coverage:
6
- *
7
- * Typed-confirmation gate (`requireConfirmationPhrase`) — load-bearing per
8
- * plan §235-239. Strict literal equality, NO normalization.
9
- * 1. Exact phrase ('APPLY ALL') — RESOLVES.
10
- * 2. Single-letter ('Y') — REJECTS.
11
- * 3. Lowercase word ('yes') — REJECTS.
12
- * 4. Lowercase phrase ('apply all') — REJECTS.
13
- * 5. No-space variant ('APPLYALL') — REJECTS.
14
- * 6. Trailing whitespace ('APPLY ALL ') — REJECTS (no trim).
15
- * 7. Empty string — REJECTS.
16
- *
17
- * Both interactive (TTY) and piped-stdin paths route through the same
18
- * `@inquirer/prompts` `input()` call, so the rejection invariant holds for
19
- * both. We mock `input` to assert the contract — the prompt library
20
- * receives the answer verbatim and our code applies strict equality.
21
- *
22
- * Interactive prompt loop (`runInteractiveLoop`):
23
- * 8. 'apply' choice → applyOneSuggestion called, status=applied.
24
- * 9. 'skip' choice → outcome recorded as skipped, no apply call.
25
- * 10. 'edit' choice → input prompts for custom name, applyRename
26
- * receives `customName`.
27
- * 11. 'quit' choice → loop terminates early; remaining suggestions
28
- * are NOT processed.
29
- * 12. Empty suggestion list → prints "No collisions found." and returns.
30
- *
31
- * Reset-ledger flow (`runResetLedger`):
32
- * 13. Backs up an existing ledger to `~/.skillsmith/backups/ledger-*.json`
33
- * BEFORE clearing.
34
- * 14. No backup file when no prior ledger exists.
35
- * 15. Confirmation phrase mismatch → throws, NO writeLedger call.
36
- *
37
- * `--json` output (`runAuditCollisions`):
38
- * 16. JSON mode prints `RunInventoryAuditResult` to stdout, no prompts,
39
- * no apply.
40
- */
41
- import { describe, it, expect, vi, beforeEach, afterEach } from 'vitest';
42
- import * as fs from 'node:fs';
43
- import * as os from 'node:os';
44
- import { join } from 'node:path';
45
- // ============================================================================
46
- // Mock setup — must precede source imports.
47
- // ============================================================================
48
- const mocks = vi.hoisted(() => ({
49
- input: vi.fn(),
50
- select: vi.fn(),
51
- applyRename: vi.fn(),
52
- readLedger: vi.fn(),
53
- writeLedger: vi.fn(),
54
- runInventoryAudit: vi.fn(),
55
- getLicenseStatus: vi.fn(),
56
- }));
57
- vi.mock('@inquirer/prompts', () => ({
58
- input: (opts) => mocks.input(opts),
59
- select: (opts) => mocks.select(opts),
60
- }));
61
- vi.mock('@skillsmith/mcp-server/audit', () => ({
62
- applyRename: (opts) => mocks.applyRename(opts),
63
- readLedger: () => mocks.readLedger(),
64
- writeLedger: (data) => mocks.writeLedger(data),
65
- runInventoryAudit: (opts) => mocks.runInventoryAudit(opts),
66
- NAMESPACE_OVERRIDES_CURRENT_VERSION: 1,
67
- }));
68
- vi.mock('../src/utils/license.js', () => ({
69
- getLicenseStatus: () => mocks.getLicenseStatus(),
70
- }));
71
- import { requireConfirmationPhrase, runResetLedger, runInteractiveLoop, runAuditCollisions, APPLY_ALL_PHRASE, RESET_LEDGER_PHRASE, CONFIRMATION_REJECTED_MESSAGE, } from '../src/commands/audit-collisions.js';
72
- // ============================================================================
73
- // Helpers
74
- // ============================================================================
75
- function makeSuggestion(id, currentName, suggested) {
76
- return {
77
- collisionId: id,
78
- currentName,
79
- suggested,
80
- reason: `mock-reason-${id}`,
81
- targetMtime: 0,
82
- siblingMtime: 0,
83
- };
84
- }
85
- function makeAudit(overrides = {}) {
86
- return {
87
- auditId: '01HMOCKAUDITID000000000000',
88
- reportPath: '/tmp/audit-report.md',
89
- renameSuggestions: [],
90
- ...overrides,
91
- };
92
- }
93
- // ============================================================================
94
- // Tests
95
- // ============================================================================
96
- describe('SMI-4590 Wave 4 PR 5/6 — sklx audit collisions', () => {
97
- let stdoutSpy;
98
- beforeEach(() => {
99
- vi.clearAllMocks();
100
- mocks.applyRename.mockResolvedValue({ success: true, summary: 'renamed' });
101
- mocks.readLedger.mockResolvedValue({ version: 1, overrides: [] });
102
- mocks.writeLedger.mockResolvedValue(undefined);
103
- mocks.getLicenseStatus.mockResolvedValue({ tier: 'team' });
104
- stdoutSpy = vi.spyOn(console, 'log').mockImplementation(() => { });
105
- });
106
- afterEach(() => {
107
- stdoutSpy.mockRestore();
108
- });
109
- describe('typed-confirmation gate (plan §235-239)', () => {
110
- it('resolves on exact APPLY ALL match', async () => {
111
- mocks.input.mockResolvedValueOnce(APPLY_ALL_PHRASE);
112
- await expect(requireConfirmationPhrase(APPLY_ALL_PHRASE, 'msg')).resolves.toBeUndefined();
113
- });
114
- it('rejects single-letter Y', async () => {
115
- mocks.input.mockResolvedValueOnce('Y');
116
- await expect(requireConfirmationPhrase(APPLY_ALL_PHRASE, 'msg')).rejects.toThrow(CONFIRMATION_REJECTED_MESSAGE);
117
- });
118
- it('rejects lowercase yes', async () => {
119
- mocks.input.mockResolvedValueOnce('yes');
120
- await expect(requireConfirmationPhrase(APPLY_ALL_PHRASE, 'msg')).rejects.toThrow(CONFIRMATION_REJECTED_MESSAGE);
121
- });
122
- it('rejects lowercase apply all (case-sensitive)', async () => {
123
- mocks.input.mockResolvedValueOnce('apply all');
124
- await expect(requireConfirmationPhrase(APPLY_ALL_PHRASE, 'msg')).rejects.toThrow(CONFIRMATION_REJECTED_MESSAGE);
125
- });
126
- it('rejects no-space APPLYALL', async () => {
127
- mocks.input.mockResolvedValueOnce('APPLYALL');
128
- await expect(requireConfirmationPhrase(APPLY_ALL_PHRASE, 'msg')).rejects.toThrow(CONFIRMATION_REJECTED_MESSAGE);
129
- });
130
- it('rejects trailing whitespace (no trim)', async () => {
131
- mocks.input.mockResolvedValueOnce('APPLY ALL ');
132
- await expect(requireConfirmationPhrase(APPLY_ALL_PHRASE, 'msg')).rejects.toThrow(CONFIRMATION_REJECTED_MESSAGE);
133
- });
134
- it('rejects empty string', async () => {
135
- mocks.input.mockResolvedValueOnce('');
136
- await expect(requireConfirmationPhrase(APPLY_ALL_PHRASE, 'msg')).rejects.toThrow(CONFIRMATION_REJECTED_MESSAGE);
137
- });
138
- it('resolves on exact RESET LEDGER match', async () => {
139
- mocks.input.mockResolvedValueOnce(RESET_LEDGER_PHRASE);
140
- await expect(requireConfirmationPhrase(RESET_LEDGER_PHRASE, 'msg')).resolves.toBeUndefined();
141
- });
142
- });
143
- describe('interactive prompt loop choices', () => {
144
- it("'apply' choice triggers applyRename", async () => {
145
- const audit = makeAudit({
146
- renameSuggestions: [makeSuggestion('c1', 'foo/bar', 'foo/bar-2')],
147
- });
148
- mocks.select.mockResolvedValueOnce('apply');
149
- await runInteractiveLoop(audit);
150
- expect(mocks.applyRename).toHaveBeenCalledTimes(1);
151
- expect(mocks.applyRename.mock.calls[0]?.[0]).toMatchObject({
152
- request: { action: 'apply', auditId: audit.auditId },
153
- });
154
- });
155
- it("'skip' choice records skipped outcome and does NOT call applyRename", async () => {
156
- const audit = makeAudit({
157
- renameSuggestions: [makeSuggestion('c1', 'foo/bar', 'foo/bar-2')],
158
- });
159
- mocks.select.mockResolvedValueOnce('skip');
160
- await runInteractiveLoop(audit);
161
- expect(mocks.applyRename).not.toHaveBeenCalled();
162
- });
163
- it("'edit' choice forwards customName to applyRename", async () => {
164
- const audit = makeAudit({
165
- renameSuggestions: [makeSuggestion('c1', 'foo/bar', 'foo/bar-2')],
166
- });
167
- mocks.select.mockResolvedValueOnce('edit');
168
- mocks.input.mockResolvedValueOnce(' custom-renamed ');
169
- await runInteractiveLoop(audit);
170
- expect(mocks.applyRename).toHaveBeenCalledWith({
171
- suggestion: expect.objectContaining({ collisionId: 'c1' }),
172
- request: {
173
- action: 'apply',
174
- auditId: audit.auditId,
175
- customName: 'custom-renamed',
176
- },
177
- });
178
- });
179
- it("'quit' choice terminates the loop early", async () => {
180
- const audit = makeAudit({
181
- renameSuggestions: [
182
- makeSuggestion('c1', 'foo/bar', 'foo/bar-2'),
183
- makeSuggestion('c2', 'foo/baz', 'foo/baz-2'),
184
- ],
185
- });
186
- mocks.select.mockResolvedValueOnce('quit');
187
- await runInteractiveLoop(audit);
188
- // Loop aborted before processing any suggestion → applyRename never called.
189
- expect(mocks.applyRename).not.toHaveBeenCalled();
190
- // And select was only consulted once (for the first suggestion before quit).
191
- expect(mocks.select).toHaveBeenCalledTimes(1);
192
- });
193
- it('empty suggestions prints No collisions found and returns', async () => {
194
- const audit = makeAudit({ renameSuggestions: [] });
195
- await runInteractiveLoop(audit);
196
- expect(mocks.select).not.toHaveBeenCalled();
197
- expect(mocks.applyRename).not.toHaveBeenCalled();
198
- });
199
- });
200
- describe('--reset-ledger flow', () => {
201
- let tmpHome;
202
- let originalHome;
203
- beforeEach(() => {
204
- tmpHome = fs.mkdtempSync(join(os.tmpdir(), 'sklx-test-home-'));
205
- originalHome = process.env['HOME'];
206
- process.env['HOME'] = tmpHome;
207
- });
208
- afterEach(() => {
209
- if (originalHome !== undefined) {
210
- process.env['HOME'] = originalHome;
211
- }
212
- else {
213
- delete process.env['HOME'];
214
- }
215
- fs.rmSync(tmpHome, { recursive: true, force: true });
216
- });
217
- it('backs up an existing ledger before clearing', async () => {
218
- const ledgerDir = join(tmpHome, '.skillsmith');
219
- fs.mkdirSync(ledgerDir, { recursive: true });
220
- const ledgerFile = join(ledgerDir, 'namespace-overrides.json');
221
- fs.writeFileSync(ledgerFile, '{"version":1,"overrides":[{"id":"x"}]}', 'utf-8');
222
- mocks.input.mockResolvedValueOnce(RESET_LEDGER_PHRASE);
223
- await runResetLedger();
224
- // Backup file written.
225
- const backupsDir = join(ledgerDir, 'backups');
226
- expect(fs.existsSync(backupsDir)).toBe(true);
227
- const entries = fs.readdirSync(backupsDir).filter((f) => f.startsWith('ledger-'));
228
- expect(entries.length).toBe(1);
229
- // Backup contains the original payload.
230
- const backup = fs.readFileSync(join(backupsDir, entries[0]), 'utf-8');
231
- expect(backup).toContain('"id":"x"');
232
- // writeLedger called with empty overrides.
233
- expect(mocks.writeLedger).toHaveBeenCalledWith({
234
- version: 1,
235
- overrides: [],
236
- });
237
- });
238
- it('no backup file when no prior ledger exists', async () => {
239
- mocks.input.mockResolvedValueOnce(RESET_LEDGER_PHRASE);
240
- await runResetLedger();
241
- const backupsDir = join(tmpHome, '.skillsmith', 'backups');
242
- // backupsDir may not exist at all when no source ledger present.
243
- const entries = fs.existsSync(backupsDir) ? fs.readdirSync(backupsDir) : [];
244
- expect(entries.length).toBe(0);
245
- expect(mocks.writeLedger).toHaveBeenCalledWith({
246
- version: 1,
247
- overrides: [],
248
- });
249
- });
250
- it('confirmation mismatch throws and does NOT call writeLedger', async () => {
251
- mocks.input.mockResolvedValueOnce('reset ledger'); // wrong case
252
- await expect(runResetLedger()).rejects.toThrow(CONFIRMATION_REJECTED_MESSAGE);
253
- expect(mocks.writeLedger).not.toHaveBeenCalled();
254
- });
255
- });
256
- describe('--reset-ledger preflight (plan §297)', () => {
257
- let tmpHome;
258
- let originalHome;
259
- beforeEach(() => {
260
- tmpHome = fs.mkdtempSync(join(os.tmpdir(), 'sklx-test-home-'));
261
- originalHome = process.env['HOME'];
262
- process.env['HOME'] = tmpHome;
263
- });
264
- afterEach(() => {
265
- if (originalHome !== undefined) {
266
- process.env['HOME'] = originalHome;
267
- }
268
- else {
269
- delete process.env['HOME'];
270
- }
271
- fs.rmSync(tmpHome, { recursive: true, force: true });
272
- });
273
- it('reads the ledger BEFORE prompting (so version_unsupported errors surface first)', async () => {
274
- // Simulate a higher-version ledger by having readLedger throw.
275
- const versionError = new Error('namespace.ledger.version_unsupported');
276
- mocks.readLedger.mockRejectedValueOnce(versionError);
277
- await expect(runAuditCollisions({
278
- deep: false,
279
- json: false,
280
- applyAll: false,
281
- reportOnly: false,
282
- resetLedger: true,
283
- })).rejects.toThrow('namespace.ledger.version_unsupported');
284
- // The user was never prompted because readLedger threw first.
285
- expect(mocks.input).not.toHaveBeenCalled();
286
- expect(mocks.writeLedger).not.toHaveBeenCalled();
287
- });
288
- });
289
- describe('--apply-all end-to-end (typed gate + sequential apply)', () => {
290
- it('applies every suggestion sequentially after APPLY ALL phrase', async () => {
291
- const audit = makeAudit({
292
- renameSuggestions: [
293
- makeSuggestion('c1', 'a/x', 'a/x-2'),
294
- makeSuggestion('c2', 'a/y', 'a/y-2'),
295
- makeSuggestion('c3', 'a/z', 'a/z-2'),
296
- ],
297
- });
298
- mocks.runInventoryAudit.mockResolvedValueOnce(audit);
299
- mocks.input.mockResolvedValueOnce(APPLY_ALL_PHRASE);
300
- await runAuditCollisions({
301
- deep: false,
302
- json: false,
303
- applyAll: true,
304
- reportOnly: false,
305
- resetLedger: false,
306
- });
307
- // applyRename invoked once per suggestion.
308
- expect(mocks.applyRename).toHaveBeenCalledTimes(3);
309
- expect(mocks.select).not.toHaveBeenCalled();
310
- });
311
- it('rejects --apply-all when phrase is wrong; no applyRename calls', async () => {
312
- const audit = makeAudit({
313
- renameSuggestions: [makeSuggestion('c1', 'a/x', 'a/x-2')],
314
- });
315
- mocks.runInventoryAudit.mockResolvedValueOnce(audit);
316
- mocks.input.mockResolvedValueOnce('apply all'); // wrong case
317
- await expect(runAuditCollisions({
318
- deep: false,
319
- json: false,
320
- applyAll: true,
321
- reportOnly: false,
322
- resetLedger: false,
323
- })).rejects.toThrow(CONFIRMATION_REJECTED_MESSAGE);
324
- expect(mocks.applyRename).not.toHaveBeenCalled();
325
- });
326
- });
327
- describe('interactive default is `skip` (regression guard for inattentive Enter-press)', () => {
328
- it('defaults the select prompt to `skip` not `apply`', async () => {
329
- const audit = makeAudit({
330
- renameSuggestions: [makeSuggestion('c1', 'a/x', 'a/x-2')],
331
- });
332
- // Capture the options passed to select.
333
- let capturedOpts;
334
- mocks.select.mockImplementationOnce((opts) => {
335
- capturedOpts = opts;
336
- return Promise.resolve('skip');
337
- });
338
- await runInteractiveLoop(audit);
339
- expect(capturedOpts).toBeDefined();
340
- expect(capturedOpts?.default).toBe('skip');
341
- });
342
- });
343
- describe('--json output', () => {
344
- it('prints RunInventoryAuditResult JSON and skips prompts', async () => {
345
- const audit = makeAudit({
346
- renameSuggestions: [makeSuggestion('c1', 'foo/bar', 'foo/bar-2')],
347
- });
348
- mocks.runInventoryAudit.mockResolvedValueOnce(audit);
349
- await runAuditCollisions({
350
- deep: false,
351
- json: true,
352
- applyAll: false,
353
- reportOnly: false,
354
- resetLedger: false,
355
- });
356
- // No prompts consulted.
357
- expect(mocks.input).not.toHaveBeenCalled();
358
- expect(mocks.select).not.toHaveBeenCalled();
359
- expect(mocks.applyRename).not.toHaveBeenCalled();
360
- // Last console.log call should contain serialized JSON of audit.
361
- const calls = stdoutSpy.mock.calls.map((c) => String(c[0] ?? ''));
362
- const jsonOutput = calls.find((c) => c.includes(audit.auditId));
363
- expect(jsonOutput).toBeDefined();
364
- // Parse and check shape.
365
- const parsed = JSON.parse(jsonOutput);
366
- expect(parsed.auditId).toBe(audit.auditId);
367
- });
368
- });
369
- });
370
- //# sourceMappingURL=audit-collisions.test.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"audit-collisions.test.js","sourceRoot":"","sources":["../../tests/audit-collisions.test.ts"],"names":[],"mappings":"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"}
@@ -1,15 +0,0 @@
1
- /**
2
- * @fileoverview SMI-4590 Step 0a — `sklx audit` restructure tests
3
- * @module @skillsmith/cli/tests/audit-restructure
4
- *
5
- * Asserts the parent `audit` command surface:
6
- * - `sklx audit advisories` is registered as a subcommand.
7
- * - `sklx audit <skill-id>` (positional fallback) emits the deprecation
8
- * warning and forwards to the same advisories handler.
9
- * - `sklx audit` with no args prints parent help.
10
- *
11
- * Behavioral coverage of `runAdvisoriesAudit` itself stays under
12
- * `audit.ts`'s existing test surface — these tests verify the wiring only.
13
- */
14
- export {};
15
- //# sourceMappingURL=audit-restructure.test.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"audit-restructure.test.d.ts","sourceRoot":"","sources":["../../tests/audit-restructure.test.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG"}
@@ -1,151 +0,0 @@
1
- /**
2
- * @fileoverview SMI-4590 Step 0a — `sklx audit` restructure tests
3
- * @module @skillsmith/cli/tests/audit-restructure
4
- *
5
- * Asserts the parent `audit` command surface:
6
- * - `sklx audit advisories` is registered as a subcommand.
7
- * - `sklx audit <skill-id>` (positional fallback) emits the deprecation
8
- * warning and forwards to the same advisories handler.
9
- * - `sklx audit` with no args prints parent help.
10
- *
11
- * Behavioral coverage of `runAdvisoriesAudit` itself stays under
12
- * `audit.ts`'s existing test surface — these tests verify the wiring only.
13
- */
14
- import { describe, it, expect, vi, beforeEach, afterEach } from 'vitest';
15
- import { Command } from 'commander';
16
- // ============================================================================
17
- // Mock setup — must precede source imports so commander.action() bodies see
18
- // the mocked deps when they execute.
19
- // ============================================================================
20
- const mocks = vi.hoisted(() => ({
21
- requireTier: vi.fn(async (_tier) => undefined),
22
- createDatabaseAsync: vi.fn(async (_path) => ({
23
- close: () => undefined,
24
- })),
25
- initializeSchema: vi.fn((_db) => undefined),
26
- AdvisoryRepositoryCtor: vi.fn((_db) => undefined),
27
- getActiveAdvisories: vi.fn(() => []),
28
- }));
29
- vi.mock('@skillsmith/core', () => ({
30
- createDatabaseAsync: (path) => mocks.createDatabaseAsync(path),
31
- initializeSchema: (db) => mocks.initializeSchema(db),
32
- AdvisoryRepository: function AdvisoryRepository(db) {
33
- mocks.AdvisoryRepositoryCtor(db);
34
- this.getActiveAdvisories =
35
- mocks.getActiveAdvisories;
36
- },
37
- }));
38
- vi.mock('../src/utils/require-tier.js', () => ({
39
- requireTier: (tier) => mocks.requireTier(tier),
40
- }));
41
- import { createAuditCommand, createAuditAdvisoriesSubcommand, AUDIT_FLAT_DEPRECATION_NOTICE, } from '../src/commands/audit.js';
42
- function setupDbStub() {
43
- const db = { close: vi.fn() };
44
- mocks.createDatabaseAsync.mockResolvedValue(db);
45
- return db;
46
- }
47
- // ============================================================================
48
- // Tests
49
- // ============================================================================
50
- describe('SMI-4590 Step 0a — sklx audit restructure', () => {
51
- let stderrSpy;
52
- let stdoutSpy;
53
- let exitSpy;
54
- beforeEach(() => {
55
- vi.clearAllMocks();
56
- mocks.requireTier.mockResolvedValue(undefined);
57
- mocks.getActiveAdvisories.mockReturnValue([]);
58
- stderrSpy = vi.spyOn(console, 'error').mockImplementation(() => { });
59
- stdoutSpy = vi.spyOn(console, 'log').mockImplementation(() => { });
60
- // process.exit must throw so test bodies never actually exit the runner.
61
- exitSpy = vi.spyOn(process, 'exit').mockImplementation((() => {
62
- throw new Error('process.exit called');
63
- }));
64
- });
65
- afterEach(() => {
66
- stderrSpy.mockRestore();
67
- stdoutSpy.mockRestore();
68
- exitSpy.mockRestore();
69
- });
70
- describe('parent command shape', () => {
71
- it('registers `audit` as a parent command with description', () => {
72
- const audit = createAuditCommand();
73
- expect(audit.name()).toBe('audit');
74
- expect(audit.description()).toMatch(/audit/i);
75
- });
76
- it('registers `advisories` as a subcommand', () => {
77
- const audit = createAuditCommand();
78
- const subcommandNames = audit.commands.map((c) => c.name());
79
- expect(subcommandNames).toContain('advisories');
80
- });
81
- });
82
- describe('`sklx audit advisories` (canonical)', () => {
83
- it('runs the advisories handler', async () => {
84
- setupDbStub();
85
- const audit = createAuditCommand();
86
- const root = new Command().exitOverride();
87
- root.addCommand(audit);
88
- await root.parseAsync(['node', 'sklx', 'audit', 'advisories']);
89
- expect(mocks.requireTier).toHaveBeenCalledWith('team');
90
- expect(mocks.createDatabaseAsync).toHaveBeenCalled();
91
- expect(mocks.AdvisoryRepositoryCtor).toHaveBeenCalled();
92
- });
93
- it('does NOT emit the deprecation warning', async () => {
94
- setupDbStub();
95
- const audit = createAuditCommand();
96
- const root = new Command().exitOverride();
97
- root.addCommand(audit);
98
- await root.parseAsync(['node', 'sklx', 'audit', 'advisories']);
99
- const warnings = stderrSpy.mock.calls.flat().filter((arg) => typeof arg === 'string' && arg.includes('DEPRECATED'));
100
- expect(warnings).toHaveLength(0);
101
- });
102
- });
103
- describe('`sklx audit <skill-id>` deprecation alias', () => {
104
- it('emits the deprecation warning to stderr', async () => {
105
- setupDbStub();
106
- const audit = createAuditCommand();
107
- const root = new Command().exitOverride();
108
- root.addCommand(audit);
109
- await root.parseAsync(['node', 'sklx', 'audit', 'some/skill-id']);
110
- const warnings = stderrSpy.mock.calls.flat().filter((arg) => typeof arg === 'string' && arg.includes(AUDIT_FLAT_DEPRECATION_NOTICE));
111
- expect(warnings.length).toBeGreaterThan(0);
112
- });
113
- it('forwards to the same advisories handler', async () => {
114
- setupDbStub();
115
- const audit = createAuditCommand();
116
- const root = new Command().exitOverride();
117
- root.addCommand(audit);
118
- await root.parseAsync(['node', 'sklx', 'audit', 'some/skill-id']);
119
- expect(mocks.requireTier).toHaveBeenCalledWith('team');
120
- expect(mocks.createDatabaseAsync).toHaveBeenCalled();
121
- });
122
- it('mentions the canonical `audit advisories` form in the warning', () => {
123
- expect(AUDIT_FLAT_DEPRECATION_NOTICE).toMatch(/audit advisories/);
124
- });
125
- it('flags the alias as removed in the next minor', () => {
126
- expect(AUDIT_FLAT_DEPRECATION_NOTICE).toMatch(/next minor/i);
127
- });
128
- });
129
- describe('`sklx audit` with no args', () => {
130
- it('prints help (no advisories handler invocation)', async () => {
131
- const audit = createAuditCommand();
132
- const root = new Command().exitOverride();
133
- root.addCommand(audit);
134
- // commander's `.help()` calls process.exit; our spy throws.
135
- await expect(root.parseAsync(['node', 'sklx', 'audit'])).rejects.toThrow();
136
- expect(mocks.requireTier).not.toHaveBeenCalled();
137
- expect(mocks.createDatabaseAsync).not.toHaveBeenCalled();
138
- });
139
- });
140
- describe('subcommand factory exports (regression guard)', () => {
141
- it('createAuditAdvisoriesSubcommand returns a Command named `advisories`', () => {
142
- const cmd = createAuditAdvisoriesSubcommand();
143
- expect(cmd.name()).toBe('advisories');
144
- });
145
- it('createAuditCommand returns a Command named `audit`', () => {
146
- const cmd = createAuditCommand();
147
- expect(cmd.name()).toBe('audit');
148
- });
149
- });
150
- });
151
- //# sourceMappingURL=audit-restructure.test.js.map