@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,65 +0,0 @@
1
- /**
2
- * @fileoverview `skillsmith telemetry` command group — opt-in telemetry management.
3
- * @module @skillsmith/cli/commands/telemetry
4
- * @see SMI-5021 Wave 3 Step 2 — CLI subcommands for telemetry (plan lines 195–196, 576)
5
- * @see SMI-5128 batch D — action impls + run* logic moved to telemetry.action.ts
6
- * (sibling-split convention) so the 6 subcommand handlers are withTelemetry-
7
- * wrapped without this file exceeding the 500-LOC gate. This file retains the
8
- * commander factory and re-exports the run* test helpers for back-compat.
9
- *
10
- * Subcommands:
11
- * skillsmith telemetry enable
12
- * skillsmith telemetry disable
13
- * skillsmith telemetry status
14
- * skillsmith telemetry install-hook [--scope user|project] [--endpoint <url>]
15
- * skillsmith telemetry uninstall-hook [--scope user|project]
16
- * skillsmith telemetry reset-id
17
- *
18
- * Privacy invariants (plan line 719):
19
- * - anonymousId is NEVER printed in full. Only the last 8 hex chars appear in stdout.
20
- * - The full SHA-256 hex travels only to the events endpoint in hook payloads.
21
- *
22
- * Shared-state coordination (plan line 717):
23
- * - install-hook reads then writes ~/.claude/settings.json via telemetry.helpers.ts
24
- * - Refuses on foreign Skill matcher (security gate)
25
- * - manifest read/write always via loadManifest / saveManifest (atomic rename)
26
- */
27
- import { Command } from 'commander';
28
- import { telemetryEnableAction, telemetryDisableAction, telemetryStatusAction, telemetryInstallHookAction, telemetryUninstallHookAction, telemetryResetIdAction, } from './telemetry.action.js';
29
- // ---------------------------------------------------------------------------
30
- // Command factory
31
- // ---------------------------------------------------------------------------
32
- export function createTelemetryCommand() {
33
- const telemetry = new Command('telemetry').description('Manage Skillsmith telemetry preferences and Claude Code hook installation');
34
- telemetry
35
- .command('enable')
36
- .description('Opt in to anonymous skill-invocation telemetry')
37
- .action(telemetryEnableAction);
38
- telemetry
39
- .command('disable')
40
- .description('Opt out of telemetry (anonymous ID is retained for re-enable continuity)')
41
- .action(telemetryDisableAction);
42
- telemetry
43
- .command('status')
44
- .description('Show current telemetry state; triggers annual ID rotation if due')
45
- .action(telemetryStatusAction);
46
- telemetry
47
- .command('install-hook')
48
- .description('Install the Skill telemetry hook into ~/.claude/settings.json')
49
- .option('--scope <scope>', 'Settings scope: user (~/.claude/settings.json) or project (./.claude/settings.json)', 'user')
50
- .option('--endpoint <url>', 'Override the telemetry endpoint (default: prod Supabase events)')
51
- .action(telemetryInstallHookAction);
52
- telemetry
53
- .command('uninstall-hook')
54
- .description('Remove the Skillsmith Skill hook entries from settings.json')
55
- .option('--scope <scope>', 'Settings scope: user or project', 'user')
56
- .action(telemetryUninstallHookAction);
57
- telemetry
58
- .command('reset-id')
59
- .description('Immediately rotate the anonymous ID (previous ID kept for 7-day overlap window)')
60
- .action(telemetryResetIdAction);
61
- return telemetry;
62
- }
63
- // Internal exports for tests — sourced from telemetry.action.ts (SMI-5128 split).
64
- export { runEnable, runDisable, runStatus, runInstallHook, runUninstallHook, runResetId, idTail, } from './telemetry.action.js';
65
- //# sourceMappingURL=telemetry.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"telemetry.js","sourceRoot":"","sources":["../../../src/commands/telemetry.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAA;AAEnC,OAAO,EACL,qBAAqB,EACrB,sBAAsB,EACtB,qBAAqB,EACrB,0BAA0B,EAC1B,4BAA4B,EAC5B,sBAAsB,GACvB,MAAM,uBAAuB,CAAA;AAE9B,8EAA8E;AAC9E,kBAAkB;AAClB,8EAA8E;AAE9E,MAAM,UAAU,sBAAsB;IACpC,MAAM,SAAS,GAAG,IAAI,OAAO,CAAC,WAAW,CAAC,CAAC,WAAW,CACpD,2EAA2E,CAC5E,CAAA;IAED,SAAS;SACN,OAAO,CAAC,QAAQ,CAAC;SACjB,WAAW,CAAC,gDAAgD,CAAC;SAC7D,MAAM,CAAC,qBAAqB,CAAC,CAAA;IAEhC,SAAS;SACN,OAAO,CAAC,SAAS,CAAC;SAClB,WAAW,CAAC,0EAA0E,CAAC;SACvF,MAAM,CAAC,sBAAsB,CAAC,CAAA;IAEjC,SAAS;SACN,OAAO,CAAC,QAAQ,CAAC;SACjB,WAAW,CAAC,kEAAkE,CAAC;SAC/E,MAAM,CAAC,qBAAqB,CAAC,CAAA;IAEhC,SAAS;SACN,OAAO,CAAC,cAAc,CAAC;SACvB,WAAW,CAAC,+DAA+D,CAAC;SAC5E,MAAM,CACL,iBAAiB,EACjB,qFAAqF,EACrF,MAAM,CACP;SACA,MAAM,CAAC,kBAAkB,EAAE,iEAAiE,CAAC;SAC7F,MAAM,CAAC,0BAA0B,CAAC,CAAA;IAErC,SAAS;SACN,OAAO,CAAC,gBAAgB,CAAC;SACzB,WAAW,CAAC,6DAA6D,CAAC;SAC1E,MAAM,CAAC,iBAAiB,EAAE,iCAAiC,EAAE,MAAM,CAAC;SACpE,MAAM,CAAC,4BAA4B,CAAC,CAAA;IAEvC,SAAS;SACN,OAAO,CAAC,UAAU,CAAC;SACnB,WAAW,CAAC,iFAAiF,CAAC;SAC9F,MAAM,CAAC,sBAAsB,CAAC,CAAA;IAEjC,OAAO,SAAS,CAAA;AAClB,CAAC;AAED,kFAAkF;AAClF,OAAO,EACL,SAAS,EACT,UAAU,EACV,SAAS,EACT,cAAc,EACd,gBAAgB,EAChB,UAAU,EACV,MAAM,GACP,MAAM,uBAAuB,CAAA"}
@@ -1,18 +0,0 @@
1
- /**
2
- * @fileoverview Tests for `skillsmith telemetry` subcommands.
3
- * @module @skillsmith/cli/commands/telemetry.test
4
- * @see SMI-5021 Wave 3 Step 2 — plan lines 700, 703, 706
5
- *
6
- * Covers:
7
- * enable: fresh manifest → generates id, sets enabled=true; idempotent on re-run
8
- * disable: enabled manifest → sets enabled=false; anonymousId preserved
9
- * status: prints expected shape (ID tail only); detects + triggers rotation when backdated >365d
10
- * reset-id: rotates unconditionally; new id distinct; previous id populated
11
- * install-hook (mocked): adds PreToolUse+PostToolUse; idempotent; throws on foreign Skill matcher
12
- * uninstall-hook: removes only Skillsmith entries; preserves foreign hooks
13
- * install-hook --scope project: writes to ./.claude/settings.json
14
- *
15
- * Privacy invariant: idTail() — last 8 chars only, never full id.
16
- */
17
- export {};
18
- //# sourceMappingURL=telemetry.test.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"telemetry.test.d.ts","sourceRoot":"","sources":["../../../src/commands/telemetry.test.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG"}
@@ -1,401 +0,0 @@
1
- /**
2
- * @fileoverview Tests for `skillsmith telemetry` subcommands.
3
- * @module @skillsmith/cli/commands/telemetry.test
4
- * @see SMI-5021 Wave 3 Step 2 — plan lines 700, 703, 706
5
- *
6
- * Covers:
7
- * enable: fresh manifest → generates id, sets enabled=true; idempotent on re-run
8
- * disable: enabled manifest → sets enabled=false; anonymousId preserved
9
- * status: prints expected shape (ID tail only); detects + triggers rotation when backdated >365d
10
- * reset-id: rotates unconditionally; new id distinct; previous id populated
11
- * install-hook (mocked): adds PreToolUse+PostToolUse; idempotent; throws on foreign Skill matcher
12
- * uninstall-hook: removes only Skillsmith entries; preserves foreign hooks
13
- * install-hook --scope project: writes to ./.claude/settings.json
14
- *
15
- * Privacy invariant: idTail() — last 8 chars only, never full id.
16
- */
17
- import { describe, it, expect, vi, beforeEach, afterEach } from 'vitest';
18
- // ---------------------------------------------------------------------------
19
- // fs/promises mock (for manifest.ts)
20
- // ---------------------------------------------------------------------------
21
- const memfsAsync = {};
22
- vi.mock('fs/promises', () => ({
23
- mkdir: vi.fn(async () => undefined),
24
- writeFile: vi.fn(async (path, content) => {
25
- memfsAsync[path] = content;
26
- }),
27
- rename: vi.fn(async (src, dst) => {
28
- const content = memfsAsync[src];
29
- if (content === undefined)
30
- throw Object.assign(new Error(`ENOENT: ${src}`), { code: 'ENOENT' });
31
- memfsAsync[dst] = content;
32
- delete memfsAsync[src];
33
- }),
34
- readFile: vi.fn(async (path) => {
35
- const content = memfsAsync[path];
36
- if (content === undefined)
37
- throw Object.assign(new Error(`ENOENT: ${path}`), { code: 'ENOENT' });
38
- return content;
39
- }),
40
- }));
41
- // ---------------------------------------------------------------------------
42
- // node:fs mock (for telemetry.helpers.ts — settings.json operations)
43
- // ---------------------------------------------------------------------------
44
- const memfsSync = {};
45
- vi.mock('node:fs', () => ({
46
- existsSync: vi.fn((p) => p in memfsSync),
47
- readFileSync: vi.fn((path) => {
48
- const c = memfsSync[path];
49
- if (c === undefined)
50
- throw Object.assign(new Error(`ENOENT: ${path}`), { code: 'ENOENT' });
51
- return c;
52
- }),
53
- writeFileSync: vi.fn((path, content) => {
54
- memfsSync[path] = content;
55
- }),
56
- renameSync: vi.fn((src, dst) => {
57
- const c = memfsSync[src];
58
- if (c === undefined)
59
- throw new Error(`ENOENT: ${src}`);
60
- memfsSync[dst] = c;
61
- delete memfsSync[src];
62
- }),
63
- mkdirSync: vi.fn(() => undefined),
64
- chmodSync: vi.fn(() => undefined),
65
- copyFileSync: vi.fn((src, dst) => {
66
- memfsSync[dst] = memfsSync[src] ?? '# stub hook script';
67
- }),
68
- unlinkSync: vi.fn((p) => {
69
- delete memfsSync[p];
70
- }),
71
- readdirSync: vi.fn(() => []),
72
- statSync: vi.fn(() => ({ mtimeMs: Date.now() - 1000 })),
73
- }));
74
- // ---------------------------------------------------------------------------
75
- // Import after mocks are registered
76
- // ---------------------------------------------------------------------------
77
- import { runEnable, runDisable, runStatus, runResetId, runInstallHook, runUninstallHook, idTail, } from './telemetry.js';
78
- import { loadManifest, saveManifest, generateAnonymousId, } from '../utils/manifest.js';
79
- import { resolveSettingsPath } from './telemetry.helpers.js';
80
- // ---------------------------------------------------------------------------
81
- // Helpers
82
- // ---------------------------------------------------------------------------
83
- function daysAgo(n) {
84
- return new Date(Date.now() - n * 86_400_000).toISOString();
85
- }
86
- async function seedManifest(telemetry) {
87
- await saveManifest({ version: '1.0.0', installedSkills: {}, telemetry });
88
- }
89
- function captureConsole() {
90
- const lines = [];
91
- const origLog = console.log;
92
- const origWarn = console.warn;
93
- const origError = console.error;
94
- vi.spyOn(console, 'log').mockImplementation((...args) => lines.push(args.join(' ')));
95
- vi.spyOn(console, 'warn').mockImplementation((...args) => lines.push(args.join(' ')));
96
- vi.spyOn(console, 'error').mockImplementation((...args) => lines.push(args.join(' ')));
97
- return {
98
- lines,
99
- restore() {
100
- console.log = origLog;
101
- console.warn = origWarn;
102
- console.error = origError;
103
- },
104
- };
105
- }
106
- // ---------------------------------------------------------------------------
107
- // Setup / teardown
108
- // ---------------------------------------------------------------------------
109
- beforeEach(() => {
110
- for (const k of Object.keys(memfsAsync))
111
- delete memfsAsync[k];
112
- for (const k of Object.keys(memfsSync))
113
- delete memfsSync[k];
114
- vi.clearAllMocks();
115
- });
116
- afterEach(() => {
117
- for (const k of Object.keys(memfsAsync))
118
- delete memfsAsync[k];
119
- for (const k of Object.keys(memfsSync))
120
- delete memfsSync[k];
121
- vi.restoreAllMocks();
122
- });
123
- // ---------------------------------------------------------------------------
124
- // enable
125
- // ---------------------------------------------------------------------------
126
- describe('telemetry enable', () => {
127
- it('generates an anonymousId and sets enabled=true on fresh manifest', async () => {
128
- await runEnable();
129
- const m = await loadManifest();
130
- expect(m.telemetry?.enabled).toBe(true);
131
- expect(m.telemetry?.anonymousId).toMatch(/^[0-9a-f]{64}$/);
132
- expect(m.telemetry?.anonymousIdCreatedAt).toBeDefined();
133
- expect(m.telemetry?.scope).toBe('personal');
134
- });
135
- it('is idempotent — second enable does not change the anonymousId', async () => {
136
- await runEnable();
137
- const firstId = (await loadManifest()).telemetry?.anonymousId;
138
- await runEnable();
139
- const secondId = (await loadManifest()).telemetry?.anonymousId;
140
- expect(firstId).toBe(secondId);
141
- });
142
- it('does not overwrite an existing anonymousId when re-enabling after disable', async () => {
143
- const existingId = generateAnonymousId();
144
- await seedManifest({ enabled: false, anonymousId: existingId });
145
- await runEnable();
146
- const m = await loadManifest();
147
- expect(m.telemetry?.anonymousId).toBe(existingId);
148
- expect(m.telemetry?.enabled).toBe(true);
149
- });
150
- });
151
- // ---------------------------------------------------------------------------
152
- // disable
153
- // ---------------------------------------------------------------------------
154
- describe('telemetry disable', () => {
155
- it('sets enabled=false while preserving the anonymousId', async () => {
156
- const id = generateAnonymousId();
157
- await seedManifest({ enabled: true, anonymousId: id });
158
- await runDisable();
159
- const m = await loadManifest();
160
- expect(m.telemetry?.enabled).toBe(false);
161
- // anonymousId must be preserved for re-enable continuity (plan line 719)
162
- expect(m.telemetry?.anonymousId).toBe(id);
163
- });
164
- it('is a no-op when already disabled', async () => {
165
- await seedManifest({ enabled: false });
166
- const cap = captureConsole();
167
- try {
168
- await runDisable();
169
- }
170
- finally {
171
- cap.restore();
172
- }
173
- expect(cap.lines.some((l) => l.includes('already disabled'))).toBe(true);
174
- });
175
- });
176
- // ---------------------------------------------------------------------------
177
- // status
178
- // ---------------------------------------------------------------------------
179
- describe('telemetry status', () => {
180
- it('prints anonymousId-tail (last 8 chars) but not the full id', async () => {
181
- const id = generateAnonymousId();
182
- await seedManifest({
183
- enabled: true,
184
- anonymousId: id,
185
- anonymousIdCreatedAt: new Date().toISOString(),
186
- scope: 'personal',
187
- });
188
- const cap = captureConsole();
189
- try {
190
- await runStatus();
191
- }
192
- finally {
193
- cap.restore();
194
- }
195
- const output = cap.lines.join('\n');
196
- // Privacy: tail only
197
- expect(output).toContain(`...${id.slice(-8)}`);
198
- // Privacy: full id must not appear
199
- expect(output).not.toContain(id);
200
- });
201
- it('triggers rotation and reports "rotation triggered" when anonymousIdCreatedAt > 365d ago', async () => {
202
- const oldId = generateAnonymousId();
203
- await seedManifest({
204
- enabled: true,
205
- anonymousId: oldId,
206
- anonymousIdCreatedAt: daysAgo(400),
207
- });
208
- const cap = captureConsole();
209
- try {
210
- await runStatus();
211
- }
212
- finally {
213
- cap.restore();
214
- }
215
- const output = cap.lines.join('\n');
216
- expect(output.toLowerCase()).toContain('rotation triggered');
217
- // The manifest should now have a new id
218
- const m = await loadManifest();
219
- expect(m.telemetry?.anonymousId).not.toBe(oldId);
220
- expect(m.telemetry?.previousAnonymousId).toBe(oldId);
221
- });
222
- it('shows enabled=no when telemetry is disabled', async () => {
223
- await seedManifest({ enabled: false });
224
- const cap = captureConsole();
225
- try {
226
- await runStatus();
227
- }
228
- finally {
229
- cap.restore();
230
- }
231
- const output = cap.lines.join('\n');
232
- expect(output).toContain('no');
233
- expect(output.toLowerCase()).toContain('enabled');
234
- });
235
- });
236
- // ---------------------------------------------------------------------------
237
- // reset-id
238
- // ---------------------------------------------------------------------------
239
- describe('telemetry reset-id', () => {
240
- it('rotates unconditionally even when id is young (< 365d)', async () => {
241
- const currentId = generateAnonymousId();
242
- await seedManifest({
243
- enabled: true,
244
- anonymousId: currentId,
245
- anonymousIdCreatedAt: new Date().toISOString(), // brand new
246
- });
247
- await runResetId();
248
- const m = await loadManifest();
249
- expect(m.telemetry?.anonymousId).toBeDefined();
250
- expect(m.telemetry?.anonymousId).not.toBe(currentId);
251
- });
252
- it('populates previousAnonymousId with the old id', async () => {
253
- const currentId = generateAnonymousId();
254
- await seedManifest({
255
- enabled: true,
256
- anonymousId: currentId,
257
- anonymousIdCreatedAt: new Date().toISOString(),
258
- });
259
- await runResetId();
260
- const m = await loadManifest();
261
- expect(m.telemetry?.previousAnonymousId).toBe(currentId);
262
- });
263
- it('new id is distinct from current and previous', async () => {
264
- const currentId = generateAnonymousId();
265
- const previousId = generateAnonymousId();
266
- await seedManifest({
267
- enabled: true,
268
- anonymousId: currentId,
269
- previousAnonymousId: previousId,
270
- anonymousIdCreatedAt: new Date().toISOString(),
271
- });
272
- await runResetId();
273
- const m = await loadManifest();
274
- const newId = m.telemetry?.anonymousId;
275
- expect(newId).toBeDefined();
276
- expect(newId).not.toBe(currentId);
277
- expect(newId).not.toBe(previousId);
278
- });
279
- it('prints new ID tail (not full id) to stdout', async () => {
280
- const currentId = generateAnonymousId();
281
- await seedManifest({
282
- enabled: true,
283
- anonymousId: currentId,
284
- anonymousIdCreatedAt: new Date().toISOString(),
285
- });
286
- const cap = captureConsole();
287
- try {
288
- await runResetId();
289
- }
290
- finally {
291
- cap.restore();
292
- }
293
- const m = await loadManifest();
294
- const newId = m.telemetry?.anonymousId;
295
- if (!newId)
296
- throw new Error('telemetry.anonymousId missing after runResetId');
297
- const output = cap.lines.join('\n');
298
- // Tail visible
299
- expect(output).toContain(`...${newId.slice(-8)}`);
300
- // Full new id NOT in output
301
- expect(output).not.toContain(newId);
302
- });
303
- });
304
- // Shared constant — used by both install-hook and uninstall-hook describe blocks.
305
- const HOOK_PATH_TEST = `${process.env['HOME'] ?? '/tmp'}/.skillsmith/hooks/skill-telemetry.sh`;
306
- // ---------------------------------------------------------------------------
307
- // install-hook
308
- // ---------------------------------------------------------------------------
309
- describe('telemetry install-hook', () => {
310
- it('adds PreToolUse and PostToolUse Skill entries to empty settings.json', async () => {
311
- // Seed template in memfsSync so copyFileSync does not throw
312
- memfsSync['/stub/templates/skill-telemetry.sh'] = '#!/bin/sh\n';
313
- // Mock existsSync to return true for template path
314
- const { existsSync } = await import('node:fs');
315
- existsSync.mockImplementation((p) => {
316
- if (String(p).includes('skill-telemetry.sh') && !String(p).includes('.skillsmith/hooks'))
317
- return true;
318
- return p in memfsSync;
319
- });
320
- await runInstallHook({ scope: 'user' });
321
- const settingsPath = resolveSettingsPath('user');
322
- const raw = memfsSync[settingsPath];
323
- expect(raw).toBeDefined();
324
- const parsed = JSON.parse(raw);
325
- expect(parsed.hooks.PreToolUse).toHaveLength(1);
326
- expect(parsed.hooks.PostToolUse).toHaveLength(1);
327
- });
328
- it('is idempotent — installing twice does not add duplicate entries', async () => {
329
- const { existsSync } = await import('node:fs');
330
- existsSync.mockImplementation((p) => {
331
- if (String(p).includes('skill-telemetry.sh') && !String(p).includes('.skillsmith/hooks'))
332
- return true;
333
- return p in memfsSync;
334
- });
335
- await runInstallHook({ scope: 'user' });
336
- await runInstallHook({ scope: 'user' });
337
- const settingsPath = resolveSettingsPath('user');
338
- const parsed = JSON.parse(memfsSync[settingsPath]);
339
- expect(parsed.hooks.PreToolUse).toHaveLength(1);
340
- });
341
- it('uses ./.claude/settings.json when scope is project', async () => {
342
- const { existsSync } = await import('node:fs');
343
- existsSync.mockImplementation((p) => {
344
- if (String(p).includes('skill-telemetry.sh') && !String(p).includes('.skillsmith/hooks'))
345
- return true;
346
- return p in memfsSync;
347
- });
348
- await runInstallHook({ scope: 'project' });
349
- const projectPath = resolveSettingsPath('project');
350
- expect(memfsSync[projectPath]).toBeDefined();
351
- });
352
- });
353
- // ---------------------------------------------------------------------------
354
- // uninstall-hook
355
- // ---------------------------------------------------------------------------
356
- describe('telemetry uninstall-hook', () => {
357
- it('removes only Skillsmith entries; does not touch foreign hooks', async () => {
358
- // Seed settings with a Bash hook + Skillsmith Skill hook
359
- const settingsPath = resolveSettingsPath('user');
360
- memfsSync[settingsPath] = JSON.stringify({
361
- hooks: {
362
- PreToolUse: [
363
- { matcher: 'Bash', hooks: [{ type: 'command', command: 'echo bash' }] },
364
- { matcher: 'Skill', hooks: [{ type: 'command', command: `${HOOK_PATH_TEST} pre` }] },
365
- ],
366
- PostToolUse: [
367
- { matcher: 'Skill', hooks: [{ type: 'command', command: `${HOOK_PATH_TEST} post` }] },
368
- ],
369
- },
370
- });
371
- await runUninstallHook({ scope: 'user' });
372
- const raw = memfsSync[settingsPath];
373
- expect(raw).toBeDefined();
374
- const parsed = JSON.parse(raw);
375
- // Bash hook preserved
376
- expect(parsed.hooks.PreToolUse.some((e) => e.matcher === 'Bash')).toBe(true);
377
- // Skill hook removed
378
- expect(parsed.hooks.PreToolUse.some((e) => e.matcher === 'Skill')).toBe(false);
379
- expect(parsed.hooks.PostToolUse.some((e) => e.matcher === 'Skill')).toBe(false);
380
- });
381
- });
382
- // ---------------------------------------------------------------------------
383
- // idTail — privacy invariant unit test
384
- // ---------------------------------------------------------------------------
385
- describe('idTail privacy invariant', () => {
386
- it('returns only the last 8 characters of the id', () => {
387
- const id = 'a'.repeat(56) + 'b'.repeat(8);
388
- expect(idTail(id)).toBe('...bbbbbbbb');
389
- expect(idTail(id)).not.toContain('a'.repeat(56));
390
- });
391
- it('returns (none) when id is undefined', () => {
392
- expect(idTail(undefined)).toBe('(none)');
393
- });
394
- it('never leaks the full SHA-256 hex (64 chars) in the returned string', () => {
395
- const id = generateAnonymousId();
396
- const tail = idTail(id);
397
- expect(tail.length).toBeLessThan(20); // "..." + 8 chars = 11 chars max
398
- expect(tail).not.toBe(id);
399
- });
400
- });
401
- //# sourceMappingURL=telemetry.test.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"telemetry.test.js","sourceRoot":"","sources":["../../../src/commands/telemetry.test.ts"],"names":[],"mappings":"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"}
@@ -1,15 +0,0 @@
1
- /**
2
- * Whoami Command - Show current authentication status
3
- *
4
- * SMI-2715: CLI Login Device Flow
5
- *
6
- * Displays the masked API key and the storage source so users can
7
- * understand where their credentials are being read from.
8
- */
9
- import { Command } from 'commander';
10
- export declare const whoamiAction: () => Promise<void>;
11
- /**
12
- * Create the `skillsmith whoami` command.
13
- */
14
- export declare function createWhoamiCommand(): Command;
15
- //# sourceMappingURL=whoami.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"whoami.d.ts","sourceRoot":"","sources":["../../../src/commands/whoami.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAA;AA6CnC,eAAO,MAAM,YAAY,qBAIvB,CAAA;AAEF;;GAEG;AACH,wBAAgB,mBAAmB,IAAI,OAAO,CAI7C"}
@@ -1,55 +0,0 @@
1
- /**
2
- * Whoami Command - Show current authentication status
3
- *
4
- * SMI-2715: CLI Login Device Flow
5
- *
6
- * Displays the masked API key and the storage source so users can
7
- * understand where their credentials are being read from.
8
- */
9
- import { Command } from 'commander';
10
- import chalk from 'chalk';
11
- import { getAuthStatus } from '@skillsmith/core';
12
- import { withTelemetry } from '@skillsmith/core/telemetry';
13
- /** Human-readable labels for each credential source */
14
- const SOURCE_LABELS = {
15
- keyring: 'OS keyring',
16
- config: 'config file (~/.skillsmith/config.json)',
17
- env: 'environment variable (SKILLSMITH_API_KEY)',
18
- none: 'none',
19
- };
20
- // SMI-5040: extracted from inline .action() closure for withTelemetry wrap.
21
- async function whoamiActionImpl() {
22
- const status = await getAuthStatus();
23
- if (!status.authenticated || !status.keyPrefix) {
24
- console.log(`Not authenticated. Run ${chalk.cyan('`skillsmith login`')} to authenticate.`);
25
- process.exit(0);
26
- }
27
- // Mask: show first 12 chars + ellipsis
28
- // The full key is sk_live_ (8 chars) + 32-128 chars.
29
- // 12 chars shows "sk_live_xxxx" without revealing the secret suffix.
30
- const masked = `${status.keyPrefix}...`;
31
- console.log(chalk.bold('Skillsmith CLI'));
32
- console.log(chalk.dim(' Key: ') + chalk.cyan(masked));
33
- console.log(chalk.dim(' Source: ') + (SOURCE_LABELS[status.source] ?? status.source));
34
- console.log(chalk.dim(' Format: ') + chalk.green('valid'));
35
- // Hint: when using file fallback, let the user know they can upgrade to keyring
36
- if (status.source === 'config') {
37
- console.log(chalk.dim(' Tip: Install @isaacs/keytar for more secure OS keyring storage: ' +
38
- 'npm install -g @isaacs/keytar'));
39
- }
40
- process.exit(0);
41
- }
42
- export const whoamiAction = withTelemetry(whoamiActionImpl, {
43
- source: 'cli',
44
- extractSkillId: () => 'whoami',
45
- extractFramework: () => 'cli',
46
- });
47
- /**
48
- * Create the `skillsmith whoami` command.
49
- */
50
- export function createWhoamiCommand() {
51
- return new Command('whoami')
52
- .description('Show current authentication status')
53
- .action(whoamiAction);
54
- }
55
- //# sourceMappingURL=whoami.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"whoami.js","sourceRoot":"","sources":["../../../src/commands/whoami.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAA;AACnC,OAAO,KAAK,MAAM,OAAO,CAAA;AACzB,OAAO,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAA;AAChD,OAAO,EAAE,aAAa,EAAE,MAAM,4BAA4B,CAAA;AAE1D,uDAAuD;AACvD,MAAM,aAAa,GAA2B;IAC5C,OAAO,EAAE,YAAY;IACrB,MAAM,EAAE,yCAAyC;IACjD,GAAG,EAAE,2CAA2C;IAChD,IAAI,EAAE,MAAM;CACb,CAAA;AAED,4EAA4E;AAC5E,KAAK,UAAU,gBAAgB;IAC7B,MAAM,MAAM,GAAG,MAAM,aAAa,EAAE,CAAA;IAEpC,IAAI,CAAC,MAAM,CAAC,aAAa,IAAI,CAAC,MAAM,CAAC,SAAS,EAAE,CAAC;QAC/C,OAAO,CAAC,GAAG,CAAC,0BAA0B,KAAK,CAAC,IAAI,CAAC,oBAAoB,CAAC,mBAAmB,CAAC,CAAA;QAC1F,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;IACjB,CAAC;IAED,uCAAuC;IACvC,qDAAqD;IACrD,qEAAqE;IACrE,MAAM,MAAM,GAAG,GAAG,MAAM,CAAC,SAAS,KAAK,CAAA;IAEvC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC,CAAA;IACzC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,YAAY,CAAC,GAAG,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAA;IACzD,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,YAAY,CAAC,GAAG,CAAC,aAAa,CAAC,MAAM,CAAC,MAAM,CAAC,IAAI,MAAM,CAAC,MAAM,CAAC,CAAC,CAAA;IACtF,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,YAAY,CAAC,GAAG,KAAK,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAA;IAE3D,gFAAgF;IAChF,IAAI,MAAM,CAAC,MAAM,KAAK,QAAQ,EAAE,CAAC;QAC/B,OAAO,CAAC,GAAG,CACT,KAAK,CAAC,GAAG,CACP,uEAAuE;YACrE,+BAA+B,CAClC,CACF,CAAA;IACH,CAAC;IAED,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;AACjB,CAAC;AAED,MAAM,CAAC,MAAM,YAAY,GAAG,aAAa,CAAC,gBAAgB,EAAE;IAC1D,MAAM,EAAE,KAAK;IACb,cAAc,EAAE,GAAG,EAAE,CAAC,QAAQ;IAC9B,gBAAgB,EAAE,GAAG,EAAE,CAAC,KAAK;CAC9B,CAAC,CAAA;AAEF;;GAEG;AACH,MAAM,UAAU,mBAAmB;IACjC,OAAO,IAAI,OAAO,CAAC,QAAQ,CAAC;SACzB,WAAW,CAAC,oCAAoC,CAAC;SACjD,MAAM,CAAC,YAAY,CAAC,CAAA;AACzB,CAAC"}
@@ -1,8 +0,0 @@
1
- /**
2
- * SMI-2715: Whoami Command Tests
3
- *
4
- * Tests for `skillsmith whoami` — unauthenticated state, each source label,
5
- * and masked key display.
6
- */
7
- export {};
8
- //# sourceMappingURL=whoami.test.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"whoami.test.d.ts","sourceRoot":"","sources":["../../../src/commands/whoami.test.ts"],"names":[],"mappings":"AAAA;;;;;GAKG"}