@skillsmith/cli 0.7.2 → 0.7.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (560) hide show
  1. package/CHANGELOG.md +9 -0
  2. package/dist/.tsbuildinfo +1 -1
  3. package/dist/cli.js +44014 -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,163 +0,0 @@
1
- /**
2
- * License status utilities for Skillsmith CLI
3
- *
4
- * Handles license validation, status display, and tier formatting.
5
- * Supports community (free), team, and enterprise license tiers.
6
- *
7
- * When @skillsmith/enterprise is available, uses proper RS256 JWT validation.
8
- * Otherwise, falls back to community tier (no error).
9
- *
10
- * Environment variable: SKILLSMITH_LICENSE_KEY
11
- *
12
- * @see SMI-1090: CLI should use enterprise LicenseValidator when available
13
- */
14
- import chalk from 'chalk';
15
- export { TIER_FEATURES, TIER_QUOTAS } from './license-types.js';
16
- // Re-export validation functions
17
- export { tryLoadEnterpriseValidator, _resetEnterpriseValidatorCache, decodeLicenseKey, isExpired, getLicenseStatus, getLicenseStatusLegacy, } from './license-validation.js';
18
- import { getLicenseStatus } from './license-validation.js';
19
- // ============================================================================
20
- // Display Helpers
21
- // ============================================================================
22
- /**
23
- * Format a tier badge with color
24
- *
25
- * @param tier - License tier
26
- * @returns Formatted tier badge string
27
- */
28
- export function formatTierBadge(tier) {
29
- switch (tier) {
30
- case 'enterprise':
31
- return chalk.magenta.bold('Enterprise');
32
- case 'team':
33
- return chalk.blue.bold('Team');
34
- case 'individual':
35
- return chalk.cyan.bold('Individual');
36
- case 'community':
37
- default:
38
- return chalk.yellow('Community');
39
- }
40
- }
41
- /**
42
- * Display a progress bar for quota usage
43
- *
44
- * @param used - API calls used
45
- * @param limit - API call limit
46
- * @returns Formatted progress bar string
47
- */
48
- export function displayQuotaProgressBar(used, limit) {
49
- const width = 30;
50
- const percent = Math.min((used / limit) * 100, 100);
51
- const filled = Math.round((percent / 100) * width);
52
- const empty = width - filled;
53
- // Color based on usage level
54
- let color = chalk.green;
55
- if (percent >= 90)
56
- color = chalk.red;
57
- else if (percent >= 80)
58
- color = chalk.yellow;
59
- const bar = color('█'.repeat(filled)) + chalk.gray('░'.repeat(empty));
60
- return `[${bar}] ${percent.toFixed(0)}%`;
61
- }
62
- /**
63
- * Display a quota warning box
64
- *
65
- * @param quota - Quota information
66
- * @param tier - Current tier for upgrade suggestions
67
- */
68
- export function displayQuotaWarning(quota, tier) {
69
- const percentUsed = quota.percentUsed;
70
- const resetFormatted = quota.resetAt.toLocaleDateString();
71
- console.log();
72
- if (percentUsed >= 100) {
73
- console.log(chalk.red('━'.repeat(50)));
74
- console.log(chalk.red.bold('❌ API Quota Exceeded'));
75
- console.log(chalk.red(`You've used all ${quota.limit.toLocaleString()} API calls this month`));
76
- console.log(chalk.red(`Quota resets on ${resetFormatted}`));
77
- if (tier !== 'enterprise') {
78
- console.log(chalk.dim(`Upgrade at: https://skillsmith.app/upgrade`));
79
- }
80
- console.log(chalk.red('━'.repeat(50)));
81
- }
82
- else if (percentUsed >= 90) {
83
- console.log(chalk.yellow('━'.repeat(50)));
84
- console.log(chalk.yellow.bold('⚠️ API Quota Warning'));
85
- console.log(chalk.yellow(`You've used ${percentUsed.toFixed(0)}% of your monthly quota (${quota.used.toLocaleString()}/${quota.limit.toLocaleString()})`));
86
- console.log(chalk.yellow(`${(quota.limit - quota.used).toLocaleString()} calls remaining until ${resetFormatted}`));
87
- if (tier !== 'enterprise') {
88
- console.log(chalk.dim(`Upgrade at: https://skillsmith.app/upgrade`));
89
- }
90
- console.log(chalk.yellow('━'.repeat(50)));
91
- }
92
- else if (percentUsed >= 80) {
93
- console.log(chalk.yellow('━'.repeat(50)));
94
- console.log(chalk.yellow('⚠️ Approaching API Quota Limit'));
95
- console.log(chalk.yellow(`${percentUsed.toFixed(0)}% used (${quota.used.toLocaleString()}/${quota.limit.toLocaleString()})`));
96
- console.log(chalk.yellow('━'.repeat(50)));
97
- }
98
- }
99
- /**
100
- * Display license status on CLI startup
101
- *
102
- * Shows license tier, expiration (if applicable), features for paid tiers,
103
- * and quota usage information.
104
- * Uses colored output: green for valid, yellow for community, red for expired/invalid.
105
- *
106
- * @param status - License status to display
107
- */
108
- export function displayLicenseStatus(status) {
109
- const tierBadge = formatTierBadge(status.tier);
110
- if (status.tier === 'community') {
111
- console.log(`License: ${tierBadge} ${chalk.dim('(free tier - 1,000 API calls/month)')}`);
112
- }
113
- else if (status.tier === 'individual') {
114
- const expiresInfo = status.expiresAt
115
- ? chalk.green(`(expires: ${status.expiresAt.toISOString().split('T')[0]})`)
116
- : '';
117
- console.log(`License: ${tierBadge} ${expiresInfo}`);
118
- }
119
- else if (status.valid && status.expiresAt) {
120
- const expiresFormatted = status.expiresAt.toISOString().split('T')[0];
121
- console.log(`License: ${tierBadge} ${chalk.green(`(expires: ${expiresFormatted})`)}`);
122
- console.log(`Features: ${chalk.dim(status.features.join(', '))}`);
123
- }
124
- // Display quota information if available
125
- if (status.quota && status.tier !== 'enterprise') {
126
- const { used, limit, percentUsed, resetAt } = status.quota;
127
- const resetFormatted = resetAt.toISOString().split('T')[0];
128
- if (percentUsed >= 100) {
129
- console.log(chalk.red.bold(`API Quota: EXCEEDED (${used.toLocaleString()}/${limit.toLocaleString()} calls)`));
130
- console.log(chalk.red(`Quota resets on ${resetFormatted}. Upgrade to continue.`));
131
- }
132
- else if (percentUsed >= 90) {
133
- console.log(chalk.yellow.bold(`API Quota: ${used.toLocaleString()}/${limit.toLocaleString()} (${percentUsed.toFixed(0)}%)`));
134
- console.log(chalk.yellow(`Warning: Approaching limit. Resets ${resetFormatted}`));
135
- }
136
- else if (percentUsed >= 80) {
137
- console.log(chalk.yellow(`API Quota: ${used.toLocaleString()}/${limit.toLocaleString()} (${percentUsed.toFixed(0)}%)`));
138
- }
139
- else {
140
- console.log(chalk.dim(`API Quota: ${used.toLocaleString()}/${limit.toLocaleString()} calls used`));
141
- }
142
- }
143
- else if (status.tier === 'enterprise') {
144
- console.log(chalk.dim('API Quota: Unlimited'));
145
- }
146
- // Show warnings for invalid/expired licenses
147
- if (status.error) {
148
- console.log(chalk.red(`Warning: ${status.error}`));
149
- console.log(chalk.dim('Continuing with community tier features'));
150
- }
151
- }
152
- /**
153
- * Display the full CLI header with version and license info
154
- *
155
- * @param version - CLI version string
156
- */
157
- export async function displayStartupHeader(version) {
158
- console.log(`Skillsmith CLI v${version}`);
159
- const status = await getLicenseStatus();
160
- displayLicenseStatus(status);
161
- console.log(); // Empty line after header
162
- }
163
- //# sourceMappingURL=license.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"license.js","sourceRoot":"","sources":["../../../src/utils/license.ts"],"names":[],"mappings":"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"}
@@ -1,7 +0,0 @@
1
- /**
2
- * Tests for license utilities
3
- *
4
- * @see SMI-1090: CLI should use enterprise LicenseValidator when available
5
- */
6
- export {};
7
- //# sourceMappingURL=license.test.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"license.test.d.ts","sourceRoot":"","sources":["../../../src/utils/license.test.ts"],"names":[],"mappings":"AAAA;;;;GAIG"}
@@ -1,308 +0,0 @@
1
- /**
2
- * Tests for license utilities
3
- *
4
- * @see SMI-1090: CLI should use enterprise LicenseValidator when available
5
- */
6
- import { describe, it, expect, beforeEach, afterEach, vi } from 'vitest';
7
- import { getLicenseStatus, getLicenseStatusLegacy, displayLicenseStatus, formatTierBadge, _resetEnterpriseValidatorCache, } from './license.js';
8
- // Mock chalk to avoid ANSI codes in test output
9
- vi.mock('chalk', () => ({
10
- default: {
11
- green: (s) => `[green]${s}[/green]`,
12
- yellow: (s) => `[yellow]${s}[/yellow]`,
13
- red: (s) => `[red]${s}[/red]`,
14
- blue: {
15
- bold: (s) => `[blue.bold]${s}[/blue.bold]`,
16
- },
17
- magenta: {
18
- bold: (s) => `[magenta.bold]${s}[/magenta.bold]`,
19
- },
20
- dim: (s) => `[dim]${s}[/dim]`,
21
- },
22
- }));
23
- describe('license utilities', () => {
24
- const originalEnv = process.env['SKILLSMITH_LICENSE_KEY'];
25
- beforeEach(() => {
26
- delete process.env['SKILLSMITH_LICENSE_KEY'];
27
- // Reset the enterprise validator cache before each test
28
- _resetEnterpriseValidatorCache();
29
- });
30
- afterEach(() => {
31
- if (originalEnv !== undefined) {
32
- process.env['SKILLSMITH_LICENSE_KEY'] = originalEnv;
33
- }
34
- else {
35
- delete process.env['SKILLSMITH_LICENSE_KEY'];
36
- }
37
- // Reset mock state
38
- vi.restoreAllMocks();
39
- });
40
- /**
41
- * Helper to create a valid legacy license key (base64 JSON)
42
- */
43
- function createLegacyLicenseKey(tier, expiresAt, features) {
44
- const payload = {
45
- tier,
46
- expiresAt: expiresAt.toISOString(),
47
- features: features || [],
48
- };
49
- return Buffer.from(JSON.stringify(payload)).toString('base64');
50
- }
51
- describe('getLicenseStatus (without enterprise package)', () => {
52
- beforeEach(() => {
53
- // Mock the enterprise package to simulate it not being available
54
- vi.doMock('@skillsmith/enterprise', () => {
55
- throw new Error('Module not found');
56
- });
57
- });
58
- afterEach(() => {
59
- vi.doUnmock('@skillsmith/enterprise');
60
- });
61
- it('returns community tier when no license key is set', async () => {
62
- const status = await getLicenseStatus();
63
- expect(status.valid).toBe(true);
64
- expect(status.tier).toBe('community');
65
- expect(status.features).toContain('basic_search');
66
- expect(status.features).toContain('skill_install');
67
- expect(status.features).toContain('local_validation');
68
- expect(status.error).toBeUndefined();
69
- expect(status.expiresAt).toBeUndefined();
70
- });
71
- it('returns community tier when license key is set but enterprise package unavailable', async () => {
72
- // Set a license key - without enterprise package, should fall back to community
73
- process.env['SKILLSMITH_LICENSE_KEY'] = 'some-license-key';
74
- // Reset cache to force re-evaluation of enterprise availability
75
- _resetEnterpriseValidatorCache();
76
- const status = await getLicenseStatus();
77
- // In monorepo CI, enterprise package IS available and will validate the key
78
- // An invalid key results in valid: false with community fallback
79
- // This is the correct security behavior - invalid keys should not be valid
80
- expect(status.tier).toBe('community');
81
- expect(status.features).toContain('basic_search');
82
- });
83
- });
84
- describe('getLicenseStatus (with enterprise package)', () => {
85
- // Mock the enterprise package for these tests
86
- beforeEach(() => {
87
- // Reset cache to allow fresh mocking
88
- _resetEnterpriseValidatorCache();
89
- });
90
- it('falls back to community tier when enterprise validator cannot validate', async () => {
91
- // Note: This test verifies fallback behavior when enterprise validation fails
92
- // Due to dynamic import mocking limitations in vitest, the enterprise package
93
- // cannot be properly mocked to return validated results. This test confirms
94
- // the graceful fallback to community tier when validation cannot complete.
95
- //
96
- // SMI-1588: Increased timeout to handle enterprise validator initialization
97
- // in monorepo CI where the package is available but validation may be slow.
98
- process.env['SKILLSMITH_LICENSE_KEY'] = 'valid-jwt-token';
99
- // Since we can't easily mock dynamic imports in vitest without module reset,
100
- // getLicenseStatus will attempt to load enterprise and fall back gracefully
101
- const status = await getLicenseStatus();
102
- // Without actual enterprise package validation, falls back to community
103
- // In CI with enterprise available, the key is validated and rejected (invalid format)
104
- // Both outcomes result in community tier, which is correct behavior
105
- expect(status.tier).toBe('community');
106
- }, 15000); // Extended timeout for enterprise validator initialization
107
- it('returns community tier for invalid license', async () => {
108
- // When enterprise package IS available but no public key is configured,
109
- // or the license key is invalid, it falls back to community tier.
110
- // The exact behavior depends on environment configuration.
111
- process.env['SKILLSMITH_LICENSE_KEY'] = 'expired-jwt-token';
112
- const status = await getLicenseStatus();
113
- // Either valid=false (validator active, key rejected) or valid=true (no validator/key)
114
- // In both cases, tier should be community
115
- expect(status.tier).toBe('community');
116
- // If enterprise validator is active but no public key configured,
117
- // it returns valid:false. If validator unavailable, returns valid:true.
118
- // Both are acceptable security behavior.
119
- expect(typeof status.valid).toBe('boolean');
120
- });
121
- });
122
- describe('getLicenseStatusLegacy (base64 JSON decoding)', () => {
123
- it('returns community tier when no license key is set', async () => {
124
- const status = await getLicenseStatusLegacy();
125
- expect(status.valid).toBe(true);
126
- expect(status.tier).toBe('community');
127
- expect(status.features).toContain('basic_search');
128
- expect(status.features).toContain('skill_install');
129
- expect(status.features).toContain('local_validation');
130
- expect(status.error).toBeUndefined();
131
- expect(status.expiresAt).toBeUndefined();
132
- });
133
- it('returns valid team tier for valid team license', async () => {
134
- const futureDate = new Date();
135
- futureDate.setFullYear(futureDate.getFullYear() + 1);
136
- const features = ['team_workspaces', 'private_skills', 'usage_analytics'];
137
- process.env['SKILLSMITH_LICENSE_KEY'] = createLegacyLicenseKey('team', futureDate, features);
138
- const status = await getLicenseStatusLegacy();
139
- expect(status.valid).toBe(true);
140
- expect(status.tier).toBe('team');
141
- expect(status.features).toEqual(features);
142
- expect(status.expiresAt).toBeDefined();
143
- expect(status.error).toBeUndefined();
144
- });
145
- it('returns valid enterprise tier for valid enterprise license', async () => {
146
- const futureDate = new Date();
147
- futureDate.setFullYear(futureDate.getFullYear() + 1);
148
- // Use canonical feature names from enterprise package
149
- const features = ['sso_saml', 'audit_logging', 'rbac', 'siem_export'];
150
- process.env['SKILLSMITH_LICENSE_KEY'] = createLegacyLicenseKey('enterprise', futureDate, features);
151
- const status = await getLicenseStatusLegacy();
152
- expect(status.valid).toBe(true);
153
- expect(status.tier).toBe('enterprise');
154
- expect(status.features).toEqual(features);
155
- expect(status.expiresAt).toBeDefined();
156
- expect(status.error).toBeUndefined();
157
- });
158
- it('returns error for expired license', async () => {
159
- const pastDate = new Date();
160
- pastDate.setFullYear(pastDate.getFullYear() - 1);
161
- process.env['SKILLSMITH_LICENSE_KEY'] = createLegacyLicenseKey('team', pastDate);
162
- const status = await getLicenseStatusLegacy();
163
- expect(status.valid).toBe(false);
164
- expect(status.tier).toBe('community');
165
- expect(status.error).toContain('License expired');
166
- expect(status.features).toContain('basic_search'); // Falls back to community features
167
- });
168
- it('returns error for invalid license key format', async () => {
169
- process.env['SKILLSMITH_LICENSE_KEY'] = 'not-valid-base64!!!';
170
- const status = await getLicenseStatusLegacy();
171
- expect(status.valid).toBe(false);
172
- expect(status.tier).toBe('community');
173
- expect(status.error).toBe('Invalid license key format');
174
- });
175
- it('returns error for malformed JSON in license key', async () => {
176
- process.env['SKILLSMITH_LICENSE_KEY'] = Buffer.from('not valid json').toString('base64');
177
- const status = await getLicenseStatusLegacy();
178
- expect(status.valid).toBe(false);
179
- expect(status.tier).toBe('community');
180
- expect(status.error).toBe('Invalid license key format');
181
- });
182
- it('returns error for license with invalid tier', async () => {
183
- const payload = {
184
- tier: 'invalid_tier',
185
- expiresAt: new Date().toISOString(),
186
- features: [],
187
- };
188
- process.env['SKILLSMITH_LICENSE_KEY'] = Buffer.from(JSON.stringify(payload)).toString('base64');
189
- const status = await getLicenseStatusLegacy();
190
- expect(status.valid).toBe(false);
191
- expect(status.tier).toBe('community');
192
- expect(status.error).toBe('Invalid license key format');
193
- });
194
- it('returns error for license with invalid expiration date', async () => {
195
- const payload = {
196
- tier: 'team',
197
- expiresAt: 'not-a-date',
198
- features: [],
199
- };
200
- process.env['SKILLSMITH_LICENSE_KEY'] = Buffer.from(JSON.stringify(payload)).toString('base64');
201
- const status = await getLicenseStatusLegacy();
202
- expect(status.valid).toBe(false);
203
- expect(status.tier).toBe('community');
204
- expect(status.error).toBe('Invalid license key format');
205
- });
206
- it('uses default tier features when features array is empty', async () => {
207
- const futureDate = new Date();
208
- futureDate.setFullYear(futureDate.getFullYear() + 1);
209
- const payload = {
210
- tier: 'team',
211
- expiresAt: futureDate.toISOString(),
212
- features: [], // Empty features should use defaults
213
- };
214
- process.env['SKILLSMITH_LICENSE_KEY'] = Buffer.from(JSON.stringify(payload)).toString('base64');
215
- const status = await getLicenseStatusLegacy();
216
- // When features array is empty, it should use the provided empty array
217
- // (this is intentional - allows explicit empty features)
218
- expect(status.features).toEqual([]);
219
- });
220
- });
221
- describe('formatTierBadge', () => {
222
- it('formats community tier with yellow color', () => {
223
- const badge = formatTierBadge('community');
224
- expect(badge).toContain('Community');
225
- expect(badge).toContain('[yellow]');
226
- });
227
- it('formats team tier with blue bold', () => {
228
- const badge = formatTierBadge('team');
229
- expect(badge).toContain('Team');
230
- expect(badge).toContain('[blue.bold]');
231
- });
232
- it('formats enterprise tier with magenta bold', () => {
233
- const badge = formatTierBadge('enterprise');
234
- expect(badge).toContain('Enterprise');
235
- expect(badge).toContain('[magenta.bold]');
236
- });
237
- });
238
- describe('displayLicenseStatus', () => {
239
- let consoleSpy;
240
- beforeEach(() => {
241
- consoleSpy = vi.spyOn(console, 'log').mockImplementation(() => { });
242
- });
243
- afterEach(() => {
244
- consoleSpy.mockRestore();
245
- });
246
- it('displays community tier with free tier label', () => {
247
- const status = {
248
- valid: true,
249
- tier: 'community',
250
- features: ['basic_search'],
251
- };
252
- displayLicenseStatus(status);
253
- expect(consoleSpy).toHaveBeenCalledWith(expect.stringContaining('Community'));
254
- expect(consoleSpy).toHaveBeenCalledWith(expect.stringContaining('free tier'));
255
- });
256
- it('displays team tier with expiration date', () => {
257
- const expiresAt = new Date('2026-12-31T00:00:00.000Z');
258
- const status = {
259
- valid: true,
260
- tier: 'team',
261
- expiresAt,
262
- features: ['team_workspaces', 'private_skills'],
263
- };
264
- displayLicenseStatus(status);
265
- expect(consoleSpy).toHaveBeenCalledWith(expect.stringContaining('Team'));
266
- expect(consoleSpy).toHaveBeenCalledWith(expect.stringContaining('2026-12-31'));
267
- expect(consoleSpy).toHaveBeenCalledWith(expect.stringContaining('team_workspaces'));
268
- });
269
- it('displays enterprise tier with features', () => {
270
- const expiresAt = new Date('2027-06-15T00:00:00.000Z');
271
- const status = {
272
- valid: true,
273
- tier: 'enterprise',
274
- expiresAt,
275
- // Use canonical feature names from enterprise package
276
- features: ['sso_saml', 'audit_logging', 'rbac'],
277
- };
278
- displayLicenseStatus(status);
279
- expect(consoleSpy).toHaveBeenCalledWith(expect.stringContaining('Enterprise'));
280
- expect(consoleSpy).toHaveBeenCalledWith(expect.stringContaining('sso_saml'));
281
- expect(consoleSpy).toHaveBeenCalledWith(expect.stringContaining('audit_logging'));
282
- });
283
- it('displays warning for invalid license', () => {
284
- const status = {
285
- valid: false,
286
- tier: 'community',
287
- features: ['basic_search'],
288
- error: 'Invalid license key format',
289
- };
290
- displayLicenseStatus(status);
291
- expect(consoleSpy).toHaveBeenCalledWith(expect.stringContaining('Invalid license key format'));
292
- expect(consoleSpy).toHaveBeenCalledWith(expect.stringContaining('Continuing with community tier'));
293
- });
294
- it('displays warning for expired license', () => {
295
- const status = {
296
- valid: false,
297
- tier: 'community',
298
- expiresAt: new Date('2024-01-15'),
299
- features: ['basic_search'],
300
- error: 'License expired on 2024-01-15',
301
- };
302
- displayLicenseStatus(status);
303
- expect(consoleSpy).toHaveBeenCalledWith(expect.stringContaining('License expired'));
304
- expect(consoleSpy).toHaveBeenCalledWith(expect.stringContaining('Continuing with community tier'));
305
- });
306
- });
307
- });
308
- //# sourceMappingURL=license.test.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"license.test.js","sourceRoot":"","sources":["../../../src/utils/license.test.ts"],"names":[],"mappings":"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"}
@@ -1,121 +0,0 @@
1
- /**
2
- * @fileoverview Thin manifest reader for the Skillsmith CLI
3
- * @module @skillsmith/cli/utils/manifest
4
- * @see SMI-skill-version-tracking Wave 2
5
- * @see SMI-5012 Wave 3: telemetry block + annual anonymous_id rotation
6
- *
7
- * Reads (and optionally writes) the ~/.skillsmith/manifest.json file.
8
- * This mirrors the SkillManifest types defined in
9
- * @skillsmith/mcp-server/tools/install.types without creating a cross-package
10
- * dependency on mcp-server.
11
- *
12
- * The CLI owns its own read path; write operations (pin/unpin) use
13
- * updateManifestEntry below which does an atomic temp-file rename.
14
- *
15
- * Concurrency note (v1): the atomic temp-file rename guarantees readers never
16
- * see partial writes (POSIX rename(2) is atomic). A full file-lock (proper-lockfile)
17
- * is NOT used here because proper-lockfile is not in the CLI's dependencies.
18
- * v1 assumes single-writer-per-process; concurrent writers from the same machine
19
- * (e.g., two concurrent `skillsmith telemetry` calls) may last-write-wins.
20
- * This matches the shared-state matrix entry (plan line 715) which notes the
21
- * proper-lockfile pattern but is aspirational for v2.
22
- */
23
- export interface SkillManifestEntry {
24
- id: string;
25
- name: string;
26
- version: string;
27
- source: string;
28
- installPath: string;
29
- installedAt: string;
30
- lastUpdated: string;
31
- originalContentHash?: string;
32
- contentHash?: string;
33
- /** Wave 2: pinned content hash (8-char truncation of full SHA-256) */
34
- pinnedVersion?: string;
35
- updatePolicy?: 'auto' | 'manual' | 'never';
36
- }
37
- export interface SkillManifest {
38
- version: string;
39
- installedSkills: Record<string, SkillManifestEntry>;
40
- /** SMI-5012 W3: telemetry opt-in block. Absent on older configs; treated as { enabled: false }. */
41
- telemetry?: TelemetryManifest;
42
- }
43
- /**
44
- * Telemetry configuration stored in ~/.skillsmith/manifest.json.
45
- *
46
- * Schema is additive: older configs without this block continue to load
47
- * (missing block is treated as { enabled: false } everywhere it is read).
48
- *
49
- * anonymous_id rotation policy (U6 / M7):
50
- * - Generated via SHA-256(crypto.randomUUID()) on first opt-in
51
- * - Auto-rotates after 365 days (checked on `skillsmith telemetry status`)
52
- * - One-week overlap window: previous id is retained in previousAnonymousId
53
- * until previousAnonymousIdRetiredAt so cross-rotation events can be joined
54
- * - Manual rotation: `skillsmith telemetry reset-id` (SMI-5021)
55
- */
56
- export interface TelemetryManifest {
57
- /** Whether telemetry is enabled. Always opt-in; default false. */
58
- enabled: boolean;
59
- /** SHA-256 hex of a random UUID; 64 hex chars. Present only when enabled. */
60
- anonymousId?: string;
61
- /** ISO-8601 date when anonymousId was generated. Enables annual rotation check. */
62
- anonymousIdCreatedAt?: string;
63
- /** Previous anonymousId retained for one-week overlap window after rotation. */
64
- previousAnonymousId?: string;
65
- /** ISO-8601 date after which previousAnonymousId can be swept. */
66
- previousAnonymousIdRetiredAt?: string;
67
- /** Telemetry scope. Default 'personal'. */
68
- scope?: 'personal' | 'team';
69
- /** Present when scope === 'team'. */
70
- teamId?: string;
71
- /** Override for staging. Default: prod events endpoint. */
72
- endpoint?: string;
73
- /** ISO-8601 date when the Claude Code hook was last installed. */
74
- installedAt?: string;
75
- }
76
- export declare const MANIFEST_PATH: string;
77
- /**
78
- * Load the manifest from disk.
79
- * Returns an empty manifest if the file does not exist.
80
- */
81
- export declare function loadManifest(): Promise<SkillManifest>;
82
- /**
83
- * Save the manifest atomically (temp file → rename).
84
- */
85
- export declare function saveManifest(manifest: SkillManifest): Promise<void>;
86
- /**
87
- * Load the manifest, apply an update function, and save atomically.
88
- */
89
- export declare function updateManifestEntry(updateFn: (manifest: SkillManifest) => SkillManifest): Promise<void>;
90
- /**
91
- * Generate a new anonymous telemetry id.
92
- *
93
- * Returns SHA-256(crypto.randomUUID()) as a 64-character lowercase hex string.
94
- * The UUID is not stored; only the hash reaches the wire (plan line 719).
95
- */
96
- export declare function generateAnonymousId(): string;
97
- /**
98
- * Returns true if the manifest's anonymousId should be rotated.
99
- *
100
- * Rotation is triggered when anonymousIdCreatedAt is older than 365 days.
101
- * Returns false if the field is absent (id was never generated).
102
- */
103
- export declare function shouldRotateAnonymousId(manifest: SkillManifest): boolean;
104
- /**
105
- * Rotate the anonymous id.
106
- *
107
- * Moves the current id to previousAnonymousId with a 7-day retirement window,
108
- * generates a fresh id, and updates anonymousIdCreatedAt to now.
109
- * Returns a new TelemetryManifest — does NOT write to disk.
110
- * Callers must persist via saveManifest / updateManifestEntry.
111
- */
112
- export declare function rotateAnonymousId(manifest: SkillManifest): TelemetryManifest;
113
- /**
114
- * Remove previousAnonymousId once its retirement window has passed.
115
- *
116
- * Should be called on every `skillsmith telemetry status` run and before
117
- * each hook-script read. No-op if the window has not yet elapsed or if
118
- * there is no previous id. Returns a new TelemetryManifest.
119
- */
120
- export declare function sweepExpiredPreviousId(manifest: SkillManifest): TelemetryManifest;
121
- //# sourceMappingURL=manifest.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"manifest.d.ts","sourceRoot":"","sources":["../../../src/utils/manifest.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;GAqBG;AAWH,MAAM,WAAW,kBAAkB;IACjC,EAAE,EAAE,MAAM,CAAA;IACV,IAAI,EAAE,MAAM,CAAA;IACZ,OAAO,EAAE,MAAM,CAAA;IACf,MAAM,EAAE,MAAM,CAAA;IACd,WAAW,EAAE,MAAM,CAAA;IACnB,WAAW,EAAE,MAAM,CAAA;IACnB,WAAW,EAAE,MAAM,CAAA;IACnB,mBAAmB,CAAC,EAAE,MAAM,CAAA;IAC5B,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,sEAAsE;IACtE,aAAa,CAAC,EAAE,MAAM,CAAA;IACtB,YAAY,CAAC,EAAE,MAAM,GAAG,QAAQ,GAAG,OAAO,CAAA;CAC3C;AAED,MAAM,WAAW,aAAa;IAC5B,OAAO,EAAE,MAAM,CAAA;IACf,eAAe,EAAE,MAAM,CAAC,MAAM,EAAE,kBAAkB,CAAC,CAAA;IACnD,mGAAmG;IACnG,SAAS,CAAC,EAAE,iBAAiB,CAAA;CAC9B;AAMD;;;;;;;;;;;;GAYG;AACH,MAAM,WAAW,iBAAiB;IAChC,kEAAkE;IAClE,OAAO,EAAE,OAAO,CAAA;IAChB,6EAA6E;IAC7E,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,mFAAmF;IACnF,oBAAoB,CAAC,EAAE,MAAM,CAAA;IAC7B,gFAAgF;IAChF,mBAAmB,CAAC,EAAE,MAAM,CAAA;IAC5B,kEAAkE;IAClE,4BAA4B,CAAC,EAAE,MAAM,CAAA;IACrC,2CAA2C;IAC3C,KAAK,CAAC,EAAE,UAAU,GAAG,MAAM,CAAA;IAC3B,qCAAqC;IACrC,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,2DAA2D;IAC3D,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,kEAAkE;IAClE,WAAW,CAAC,EAAE,MAAM,CAAA;CACrB;AAOD,eAAO,MAAM,aAAa,QAAwC,CAAA;AAMlE;;;GAGG;AACH,wBAAsB,YAAY,IAAI,OAAO,CAAC,aAAa,CAAC,CAO3D;AAED;;GAEG;AACH,wBAAsB,YAAY,CAAC,QAAQ,EAAE,aAAa,GAAG,OAAO,CAAC,IAAI,CAAC,CAKzE;AAED;;GAEG;AACH,wBAAsB,mBAAmB,CACvC,QAAQ,EAAE,CAAC,QAAQ,EAAE,aAAa,KAAK,aAAa,GACnD,OAAO,CAAC,IAAI,CAAC,CAIf;AAUD;;;;;GAKG;AACH,wBAAgB,mBAAmB,IAAI,MAAM,CAE5C;AAED;;;;;GAKG;AACH,wBAAgB,uBAAuB,CAAC,QAAQ,EAAE,aAAa,GAAG,OAAO,CAKxE;AAED;;;;;;;GAOG;AACH,wBAAgB,iBAAiB,CAAC,QAAQ,EAAE,aAAa,GAAG,iBAAiB,CAc5E;AAED;;;;;;GAMG;AACH,wBAAgB,sBAAsB,CAAC,QAAQ,EAAE,aAAa,GAAG,iBAAiB,CAOjF"}