@skillsmith/mcp-server 0.4.13 → 0.5.1

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 (407) hide show
  1. package/CHANGELOG.md +37 -4
  2. package/README.md +89 -13
  3. package/dist/.tsbuildinfo +1 -1
  4. package/dist/src/__tests__/compare.test.js +5 -5
  5. package/dist/src/__tests__/compare.test.js.map +1 -1
  6. package/dist/src/__tests__/context-listeners.test.d.ts +12 -0
  7. package/dist/src/__tests__/context-listeners.test.d.ts.map +1 -0
  8. package/dist/src/__tests__/context-listeners.test.js +87 -0
  9. package/dist/src/__tests__/context-listeners.test.js.map +1 -0
  10. package/dist/src/__tests__/context.test.js +84 -82
  11. package/dist/src/__tests__/context.test.js.map +1 -1
  12. package/dist/src/__tests__/get-skill.api-path.test.js +21 -14
  13. package/dist/src/__tests__/get-skill.api-path.test.js.map +1 -1
  14. package/dist/src/__tests__/get-skill.test.js +5 -5
  15. package/dist/src/__tests__/get-skill.test.js.map +1 -1
  16. package/dist/src/__tests__/index-local.test.js +5 -5
  17. package/dist/src/__tests__/index-local.test.js.map +1 -1
  18. package/dist/src/__tests__/recommend-online-path.test.js +5 -5
  19. package/dist/src/__tests__/recommend-online-path.test.js.map +1 -1
  20. package/dist/src/__tests__/recommend.test.js +9 -9
  21. package/dist/src/__tests__/recommend.test.js.map +1 -1
  22. package/dist/src/__tests__/search-compatible-with.test.d.ts +10 -0
  23. package/dist/src/__tests__/search-compatible-with.test.d.ts.map +1 -0
  24. package/dist/src/__tests__/search-compatible-with.test.js +96 -0
  25. package/dist/src/__tests__/search-compatible-with.test.js.map +1 -0
  26. package/dist/src/__tests__/search-online-path.test.js +5 -5
  27. package/dist/src/__tests__/search-online-path.test.js.map +1 -1
  28. package/dist/src/__tests__/search.test.js +16 -101
  29. package/dist/src/__tests__/search.test.js.map +1 -1
  30. package/dist/src/__tests__/test-utils.d.ts +18 -3
  31. package/dist/src/__tests__/test-utils.d.ts.map +1 -1
  32. package/dist/src/__tests__/test-utils.js +24 -7
  33. package/dist/src/__tests__/test-utils.js.map +1 -1
  34. package/dist/src/audit/audit-history.d.ts +77 -0
  35. package/dist/src/audit/audit-history.d.ts.map +1 -0
  36. package/dist/src/audit/audit-history.js +98 -0
  37. package/dist/src/audit/audit-history.js.map +1 -0
  38. package/dist/src/audit/audit-report-writer.d.ts +82 -0
  39. package/dist/src/audit/audit-report-writer.d.ts.map +1 -0
  40. package/dist/src/audit/audit-report-writer.js +241 -0
  41. package/dist/src/audit/audit-report-writer.js.map +1 -0
  42. package/dist/src/audit/audit-suggestions.d.ts +52 -0
  43. package/dist/src/audit/audit-suggestions.d.ts.map +1 -0
  44. package/dist/src/audit/audit-suggestions.js +90 -0
  45. package/dist/src/audit/audit-suggestions.js.map +1 -0
  46. package/dist/src/audit/bootstrap-unmanaged.d.ts +66 -0
  47. package/dist/src/audit/bootstrap-unmanaged.d.ts.map +1 -0
  48. package/dist/src/audit/bootstrap-unmanaged.js +91 -0
  49. package/dist/src/audit/bootstrap-unmanaged.js.map +1 -0
  50. package/dist/src/audit/collision-detector.d.ts +72 -0
  51. package/dist/src/audit/collision-detector.d.ts.map +1 -0
  52. package/dist/src/audit/collision-detector.helpers.d.ts +63 -0
  53. package/dist/src/audit/collision-detector.helpers.d.ts.map +1 -0
  54. package/dist/src/audit/collision-detector.helpers.js +141 -0
  55. package/dist/src/audit/collision-detector.helpers.js.map +1 -0
  56. package/dist/src/audit/collision-detector.js +172 -0
  57. package/dist/src/audit/collision-detector.js.map +1 -0
  58. package/dist/src/audit/collision-detector.semantic.helpers.d.ts +49 -0
  59. package/dist/src/audit/collision-detector.semantic.helpers.d.ts.map +1 -0
  60. package/dist/src/audit/collision-detector.semantic.helpers.js +121 -0
  61. package/dist/src/audit/collision-detector.semantic.helpers.js.map +1 -0
  62. package/dist/src/audit/collision-detector.types.d.ts +70 -0
  63. package/dist/src/audit/collision-detector.types.d.ts.map +1 -0
  64. package/dist/src/audit/collision-detector.types.js +9 -0
  65. package/dist/src/audit/collision-detector.types.js.map +1 -0
  66. package/dist/src/audit/edit-applier.d.ts +64 -0
  67. package/dist/src/audit/edit-applier.d.ts.map +1 -0
  68. package/dist/src/audit/edit-applier.js +233 -0
  69. package/dist/src/audit/edit-applier.js.map +1 -0
  70. package/dist/src/audit/edit-applier.types.d.ts +72 -0
  71. package/dist/src/audit/edit-applier.types.d.ts.map +1 -0
  72. package/dist/src/audit/edit-applier.types.js +13 -0
  73. package/dist/src/audit/edit-applier.types.js.map +1 -0
  74. package/dist/src/audit/edit-suggester.d.ts +63 -0
  75. package/dist/src/audit/edit-suggester.d.ts.map +1 -0
  76. package/dist/src/audit/edit-suggester.js +326 -0
  77. package/dist/src/audit/edit-suggester.js.map +1 -0
  78. package/dist/src/audit/edit-suggester.types.d.ts +148 -0
  79. package/dist/src/audit/edit-suggester.types.d.ts.map +1 -0
  80. package/dist/src/audit/edit-suggester.types.js +17 -0
  81. package/dist/src/audit/edit-suggester.types.js.map +1 -0
  82. package/dist/src/audit/framework-adapter.d.ts +54 -0
  83. package/dist/src/audit/framework-adapter.d.ts.map +1 -0
  84. package/dist/src/audit/framework-adapter.js +251 -0
  85. package/dist/src/audit/framework-adapter.js.map +1 -0
  86. package/dist/src/audit/framework-adapter.types.d.ts +162 -0
  87. package/dist/src/audit/framework-adapter.types.d.ts.map +1 -0
  88. package/dist/src/audit/framework-adapter.types.js +31 -0
  89. package/dist/src/audit/framework-adapter.types.js.map +1 -0
  90. package/dist/src/audit/index.d.ts +46 -0
  91. package/dist/src/audit/index.d.ts.map +1 -0
  92. package/dist/src/audit/index.js +44 -0
  93. package/dist/src/audit/index.js.map +1 -0
  94. package/dist/src/audit/install-preflight.d.ts +99 -0
  95. package/dist/src/audit/install-preflight.d.ts.map +1 -0
  96. package/dist/src/audit/install-preflight.js +320 -0
  97. package/dist/src/audit/install-preflight.js.map +1 -0
  98. package/dist/src/audit/namespace-audit.types.d.ts +100 -0
  99. package/dist/src/audit/namespace-audit.types.d.ts.map +1 -0
  100. package/dist/src/audit/namespace-audit.types.js +20 -0
  101. package/dist/src/audit/namespace-audit.types.js.map +1 -0
  102. package/dist/src/audit/namespace-overrides.d.ts +79 -0
  103. package/dist/src/audit/namespace-overrides.d.ts.map +1 -0
  104. package/dist/src/audit/namespace-overrides.js +228 -0
  105. package/dist/src/audit/namespace-overrides.js.map +1 -0
  106. package/dist/src/audit/namespace-overrides.types.d.ts +115 -0
  107. package/dist/src/audit/namespace-overrides.types.d.ts.map +1 -0
  108. package/dist/src/audit/namespace-overrides.types.js +26 -0
  109. package/dist/src/audit/namespace-overrides.types.js.map +1 -0
  110. package/dist/src/audit/rename-engine.apply-paths.d.ts +54 -0
  111. package/dist/src/audit/rename-engine.apply-paths.d.ts.map +1 -0
  112. package/dist/src/audit/rename-engine.apply-paths.js +126 -0
  113. package/dist/src/audit/rename-engine.apply-paths.js.map +1 -0
  114. package/dist/src/audit/rename-engine.d.ts +59 -0
  115. package/dist/src/audit/rename-engine.d.ts.map +1 -0
  116. package/dist/src/audit/rename-engine.helpers.d.ts +63 -0
  117. package/dist/src/audit/rename-engine.helpers.d.ts.map +1 -0
  118. package/dist/src/audit/rename-engine.helpers.js +224 -0
  119. package/dist/src/audit/rename-engine.helpers.js.map +1 -0
  120. package/dist/src/audit/rename-engine.js +393 -0
  121. package/dist/src/audit/rename-engine.js.map +1 -0
  122. package/dist/src/audit/rename-engine.types.d.ts +157 -0
  123. package/dist/src/audit/rename-engine.types.d.ts.map +1 -0
  124. package/dist/src/audit/rename-engine.types.js +15 -0
  125. package/dist/src/audit/rename-engine.types.js.map +1 -0
  126. package/dist/src/audit/run-inventory-audit.d.ts +95 -0
  127. package/dist/src/audit/run-inventory-audit.d.ts.map +1 -0
  128. package/dist/src/audit/run-inventory-audit.js +245 -0
  129. package/dist/src/audit/run-inventory-audit.js.map +1 -0
  130. package/dist/src/audit/suggestion-chain.d.ts +89 -0
  131. package/dist/src/audit/suggestion-chain.d.ts.map +1 -0
  132. package/dist/src/audit/suggestion-chain.js +121 -0
  133. package/dist/src/audit/suggestion-chain.js.map +1 -0
  134. package/dist/src/audit-tool-dispatch.d.ts +61 -0
  135. package/dist/src/audit-tool-dispatch.d.ts.map +1 -0
  136. package/dist/src/audit-tool-dispatch.js +114 -0
  137. package/dist/src/audit-tool-dispatch.js.map +1 -0
  138. package/dist/src/index.js +34 -2
  139. package/dist/src/index.js.map +1 -1
  140. package/dist/src/indexer/LocalIndexer.d.ts +8 -1
  141. package/dist/src/indexer/LocalIndexer.d.ts.map +1 -1
  142. package/dist/src/indexer/LocalIndexer.js +42 -38
  143. package/dist/src/indexer/LocalIndexer.js.map +1 -1
  144. package/dist/src/middleware/__tests__/license.gate.test.js +21 -2
  145. package/dist/src/middleware/__tests__/license.gate.test.js.map +1 -1
  146. package/dist/src/middleware/license.gate.d.ts +14 -0
  147. package/dist/src/middleware/license.gate.d.ts.map +1 -1
  148. package/dist/src/middleware/license.gate.js +52 -1
  149. package/dist/src/middleware/license.gate.js.map +1 -1
  150. package/dist/src/onboarding/install-assets.d.ts.map +1 -1
  151. package/dist/src/onboarding/install-assets.js +11 -5
  152. package/dist/src/onboarding/install-assets.js.map +1 -1
  153. package/dist/src/tool-dispatch.d.ts.map +1 -1
  154. package/dist/src/tool-dispatch.js +6 -4
  155. package/dist/src/tool-dispatch.js.map +1 -1
  156. package/dist/src/tools/analytics.service.test.js +6 -4
  157. package/dist/src/tools/analytics.service.test.js.map +1 -1
  158. package/dist/src/tools/apply-namespace-rename.d.ts +71 -0
  159. package/dist/src/tools/apply-namespace-rename.d.ts.map +1 -0
  160. package/dist/src/tools/apply-namespace-rename.js +137 -0
  161. package/dist/src/tools/apply-namespace-rename.js.map +1 -0
  162. package/dist/src/tools/apply-namespace-rename.types.d.ts +46 -0
  163. package/dist/src/tools/apply-namespace-rename.types.d.ts.map +1 -0
  164. package/dist/src/tools/apply-namespace-rename.types.js +9 -0
  165. package/dist/src/tools/apply-namespace-rename.types.js.map +1 -0
  166. package/dist/src/tools/apply-recommended-edit.d.ts +50 -0
  167. package/dist/src/tools/apply-recommended-edit.d.ts.map +1 -0
  168. package/dist/src/tools/apply-recommended-edit.js +112 -0
  169. package/dist/src/tools/apply-recommended-edit.js.map +1 -0
  170. package/dist/src/tools/apply-recommended-edit.types.d.ts +49 -0
  171. package/dist/src/tools/apply-recommended-edit.types.d.ts.map +1 -0
  172. package/dist/src/tools/apply-recommended-edit.types.js +14 -0
  173. package/dist/src/tools/apply-recommended-edit.types.js.map +1 -0
  174. package/dist/src/tools/audit-tools.d.ts +4 -4
  175. package/dist/src/tools/compare.types.js +1 -1
  176. package/dist/src/tools/compare.types.js.map +1 -1
  177. package/dist/src/tools/compliance-tools.service.test.js +6 -4
  178. package/dist/src/tools/compliance-tools.service.test.js.map +1 -1
  179. package/dist/src/tools/get-skill.d.ts.map +1 -1
  180. package/dist/src/tools/get-skill.js +1 -1
  181. package/dist/src/tools/get-skill.js.map +1 -1
  182. package/dist/src/tools/install.backup-gc.d.ts +61 -0
  183. package/dist/src/tools/install.backup-gc.d.ts.map +1 -0
  184. package/dist/src/tools/install.backup-gc.js +166 -0
  185. package/dist/src/tools/install.backup-gc.js.map +1 -0
  186. package/dist/src/tools/install.conflict-helpers.d.ts +29 -2
  187. package/dist/src/tools/install.conflict-helpers.d.ts.map +1 -1
  188. package/dist/src/tools/install.conflict-helpers.js +37 -4
  189. package/dist/src/tools/install.conflict-helpers.js.map +1 -1
  190. package/dist/src/tools/install.d.ts +15 -1
  191. package/dist/src/tools/install.d.ts.map +1 -1
  192. package/dist/src/tools/install.js +168 -8
  193. package/dist/src/tools/install.js.map +1 -1
  194. package/dist/src/tools/install.ledger-replay.d.ts +52 -0
  195. package/dist/src/tools/install.ledger-replay.d.ts.map +1 -0
  196. package/dist/src/tools/install.ledger-replay.js +88 -0
  197. package/dist/src/tools/install.ledger-replay.js.map +1 -0
  198. package/dist/src/tools/install.namespace-gate.d.ts +68 -0
  199. package/dist/src/tools/install.namespace-gate.d.ts.map +1 -0
  200. package/dist/src/tools/install.namespace-gate.js +129 -0
  201. package/dist/src/tools/install.namespace-gate.js.map +1 -0
  202. package/dist/src/tools/install.test.js +136 -1
  203. package/dist/src/tools/install.test.js.map +1 -1
  204. package/dist/src/tools/install.tool.d.ts +17 -0
  205. package/dist/src/tools/install.tool.d.ts.map +1 -1
  206. package/dist/src/tools/install.tool.js +19 -1
  207. package/dist/src/tools/install.tool.js.map +1 -1
  208. package/dist/src/tools/install.types.d.ts +35 -1
  209. package/dist/src/tools/install.types.d.ts.map +1 -1
  210. package/dist/src/tools/install.types.js +24 -2
  211. package/dist/src/tools/install.types.js.map +1 -1
  212. package/dist/src/tools/namespace-audit/telemetry.d.ts +80 -0
  213. package/dist/src/tools/namespace-audit/telemetry.d.ts.map +1 -0
  214. package/dist/src/tools/namespace-audit/telemetry.js +129 -0
  215. package/dist/src/tools/namespace-audit/telemetry.js.map +1 -0
  216. package/dist/src/tools/outdated.test.js +2 -2
  217. package/dist/src/tools/outdated.test.js.map +1 -1
  218. package/dist/src/tools/publish-private.test.js +2 -2
  219. package/dist/src/tools/publish-private.test.js.map +1 -1
  220. package/dist/src/tools/recommend.types.d.ts +2 -2
  221. package/dist/src/tools/recommend.types.js +1 -1
  222. package/dist/src/tools/recommend.types.js.map +1 -1
  223. package/dist/src/tools/search.d.ts +2 -2
  224. package/dist/src/tools/search.d.ts.map +1 -1
  225. package/dist/src/tools/search.js +3 -3
  226. package/dist/src/tools/search.js.map +1 -1
  227. package/dist/src/tools/skill-audit.test.js +2 -2
  228. package/dist/src/tools/skill-audit.test.js.map +1 -1
  229. package/dist/src/tools/skill-diff.d.ts +1 -1
  230. package/dist/src/tools/skill-inventory-audit.d.ts +67 -0
  231. package/dist/src/tools/skill-inventory-audit.d.ts.map +1 -0
  232. package/dist/src/tools/skill-inventory-audit.js +112 -0
  233. package/dist/src/tools/skill-inventory-audit.js.map +1 -0
  234. package/dist/src/tools/skill-inventory-audit.types.d.ts +67 -0
  235. package/dist/src/tools/skill-inventory-audit.types.d.ts.map +1 -0
  236. package/dist/src/tools/skill-inventory-audit.types.js +14 -0
  237. package/dist/src/tools/skill-inventory-audit.types.js.map +1 -0
  238. package/dist/src/tools/skill-pack-audit.d.ts.map +1 -1
  239. package/dist/src/tools/skill-pack-audit.helpers.d.ts.map +1 -1
  240. package/dist/src/tools/skill-pack-audit.helpers.js +15 -2
  241. package/dist/src/tools/skill-pack-audit.helpers.js.map +1 -1
  242. package/dist/src/tools/skill-pack-audit.js +15 -1
  243. package/dist/src/tools/skill-pack-audit.js.map +1 -1
  244. package/dist/src/tools/skill-rescan.d.ts.map +1 -1
  245. package/dist/src/tools/skill-rescan.js +4 -2
  246. package/dist/src/tools/skill-rescan.js.map +1 -1
  247. package/dist/src/tools/suggest.d.ts +2 -2
  248. package/dist/src/tools/uninstall.d.ts +1 -1
  249. package/dist/src/tools/uninstall.d.ts.map +1 -1
  250. package/dist/src/tools/uninstall.js +17 -3
  251. package/dist/src/tools/uninstall.js.map +1 -1
  252. package/dist/src/tools/validate.types.d.ts +10 -1
  253. package/dist/src/tools/validate.types.d.ts.map +1 -1
  254. package/dist/src/tools/validate.types.js +11 -2
  255. package/dist/src/tools/validate.types.js.map +1 -1
  256. package/dist/src/utils/installed-skills.d.ts.map +1 -1
  257. package/dist/src/utils/installed-skills.js +8 -6
  258. package/dist/src/utils/installed-skills.js.map +1 -1
  259. package/dist/src/utils/local-inventory.d.ts +29 -0
  260. package/dist/src/utils/local-inventory.d.ts.map +1 -0
  261. package/dist/src/utils/local-inventory.helpers.d.ts +96 -0
  262. package/dist/src/utils/local-inventory.helpers.d.ts.map +1 -0
  263. package/dist/src/utils/local-inventory.helpers.js +279 -0
  264. package/dist/src/utils/local-inventory.helpers.js.map +1 -0
  265. package/dist/src/utils/local-inventory.js +202 -0
  266. package/dist/src/utils/local-inventory.js.map +1 -0
  267. package/dist/src/utils/local-inventory.types.d.ts +100 -0
  268. package/dist/src/utils/local-inventory.types.d.ts.map +1 -0
  269. package/dist/src/utils/local-inventory.types.js +9 -0
  270. package/dist/src/utils/local-inventory.types.js.map +1 -0
  271. package/dist/src/webhooks/stripe-webhook-endpoint.d.ts +12 -0
  272. package/dist/src/webhooks/stripe-webhook-endpoint.d.ts.map +1 -1
  273. package/dist/src/webhooks/stripe-webhook-endpoint.js +30 -9
  274. package/dist/src/webhooks/stripe-webhook-endpoint.js.map +1 -1
  275. package/dist/src/webhooks/webhook-endpoint.d.ts +13 -0
  276. package/dist/src/webhooks/webhook-endpoint.d.ts.map +1 -1
  277. package/dist/src/webhooks/webhook-endpoint.js +31 -9
  278. package/dist/src/webhooks/webhook-endpoint.js.map +1 -1
  279. package/dist/tests/compare.test.js +5 -5
  280. package/dist/tests/compare.test.js.map +1 -1
  281. package/dist/tests/context-async-listeners.test.d.ts +12 -0
  282. package/dist/tests/context-async-listeners.test.d.ts.map +1 -0
  283. package/dist/tests/context-async-listeners.test.js +62 -0
  284. package/dist/tests/context-async-listeners.test.js.map +1 -0
  285. package/dist/tests/e2e/compare.e2e.test.js +9 -3
  286. package/dist/tests/e2e/compare.e2e.test.js.map +1 -1
  287. package/dist/tests/e2e/install-flow.e2e.test.js +9 -3
  288. package/dist/tests/e2e/install-flow.e2e.test.js.map +1 -1
  289. package/dist/tests/e2e/recommend.e2e.test.js +9 -3
  290. package/dist/tests/e2e/recommend.e2e.test.js.map +1 -1
  291. package/dist/tests/e2e/skill-flow.e2e.test.js +17 -5
  292. package/dist/tests/e2e/skill-flow.e2e.test.js.map +1 -1
  293. package/dist/tests/e2e/suggest.e2e.test.js +11 -3
  294. package/dist/tests/e2e/suggest.e2e.test.js.map +1 -1
  295. package/dist/tests/install-assets.test.d.ts +16 -0
  296. package/dist/tests/install-assets.test.d.ts.map +1 -0
  297. package/dist/tests/install-assets.test.js +72 -0
  298. package/dist/tests/install-assets.test.js.map +1 -0
  299. package/dist/tests/integration/audit-roundtrip.test.d.ts +29 -0
  300. package/dist/tests/integration/audit-roundtrip.test.d.ts.map +1 -0
  301. package/dist/tests/integration/audit-roundtrip.test.js +214 -0
  302. package/dist/tests/integration/audit-roundtrip.test.js.map +1 -0
  303. package/dist/tests/integration/install-namespace.integration.test.d.ts +14 -0
  304. package/dist/tests/integration/install-namespace.integration.test.d.ts.map +1 -0
  305. package/dist/tests/integration/install-namespace.integration.test.js +414 -0
  306. package/dist/tests/integration/install-namespace.integration.test.js.map +1 -0
  307. package/dist/tests/performance/search-performance.test.js +9 -3
  308. package/dist/tests/performance/search-performance.test.js.map +1 -1
  309. package/dist/tests/tool-descriptions.test.d.ts +16 -0
  310. package/dist/tests/tool-descriptions.test.d.ts.map +1 -0
  311. package/dist/tests/tool-descriptions.test.js +63 -0
  312. package/dist/tests/tool-descriptions.test.js.map +1 -0
  313. package/dist/tests/tools.test.js +5 -5
  314. package/dist/tests/tools.test.js.map +1 -1
  315. package/dist/tests/unit/apply-namespace-rename.test.d.ts +24 -0
  316. package/dist/tests/unit/apply-namespace-rename.test.d.ts.map +1 -0
  317. package/dist/tests/unit/apply-namespace-rename.test.js +205 -0
  318. package/dist/tests/unit/apply-namespace-rename.test.js.map +1 -0
  319. package/dist/tests/unit/apply-recommended-edit.test.d.ts +28 -0
  320. package/dist/tests/unit/apply-recommended-edit.test.d.ts.map +1 -0
  321. package/dist/tests/unit/apply-recommended-edit.test.js +229 -0
  322. package/dist/tests/unit/apply-recommended-edit.test.js.map +1 -0
  323. package/dist/tests/unit/audit-history.test.d.ts +11 -0
  324. package/dist/tests/unit/audit-history.test.d.ts.map +1 -0
  325. package/dist/tests/unit/audit-history.test.js +183 -0
  326. package/dist/tests/unit/audit-history.test.js.map +1 -0
  327. package/dist/tests/unit/audit-report-writer.test.d.ts +7 -0
  328. package/dist/tests/unit/audit-report-writer.test.d.ts.map +1 -0
  329. package/dist/tests/unit/audit-report-writer.test.js +249 -0
  330. package/dist/tests/unit/audit-report-writer.test.js.map +1 -0
  331. package/dist/tests/unit/audit-tool-dispatch.test.d.ts +17 -0
  332. package/dist/tests/unit/audit-tool-dispatch.test.d.ts.map +1 -0
  333. package/dist/tests/unit/audit-tool-dispatch.test.js +133 -0
  334. package/dist/tests/unit/audit-tool-dispatch.test.js.map +1 -0
  335. package/dist/tests/unit/collision-detector.semantic.test.d.ts +12 -0
  336. package/dist/tests/unit/collision-detector.semantic.test.d.ts.map +1 -0
  337. package/dist/tests/unit/collision-detector.semantic.test.js +281 -0
  338. package/dist/tests/unit/collision-detector.semantic.test.js.map +1 -0
  339. package/dist/tests/unit/collision-detector.test.d.ts +8 -0
  340. package/dist/tests/unit/collision-detector.test.d.ts.map +1 -0
  341. package/dist/tests/unit/collision-detector.test.js +266 -0
  342. package/dist/tests/unit/collision-detector.test.js.map +1 -0
  343. package/dist/tests/unit/edit-applier.test.d.ts +17 -0
  344. package/dist/tests/unit/edit-applier.test.d.ts.map +1 -0
  345. package/dist/tests/unit/edit-applier.test.js +165 -0
  346. package/dist/tests/unit/edit-applier.test.js.map +1 -0
  347. package/dist/tests/unit/edit-suggester.fixtures.d.ts +38 -0
  348. package/dist/tests/unit/edit-suggester.fixtures.d.ts.map +1 -0
  349. package/dist/tests/unit/edit-suggester.fixtures.js +84 -0
  350. package/dist/tests/unit/edit-suggester.fixtures.js.map +1 -0
  351. package/dist/tests/unit/edit-suggester.test.d.ts +17 -0
  352. package/dist/tests/unit/edit-suggester.test.d.ts.map +1 -0
  353. package/dist/tests/unit/edit-suggester.test.js +356 -0
  354. package/dist/tests/unit/edit-suggester.test.js.map +1 -0
  355. package/dist/tests/unit/framework-adapter.test.d.ts +30 -0
  356. package/dist/tests/unit/framework-adapter.test.d.ts.map +1 -0
  357. package/dist/tests/unit/framework-adapter.test.js +221 -0
  358. package/dist/tests/unit/framework-adapter.test.js.map +1 -0
  359. package/dist/tests/unit/install-preflight.test.d.ts +17 -0
  360. package/dist/tests/unit/install-preflight.test.d.ts.map +1 -0
  361. package/dist/tests/unit/install-preflight.test.js +270 -0
  362. package/dist/tests/unit/install-preflight.test.js.map +1 -0
  363. package/dist/tests/unit/install.backup-gc.test.d.ts +18 -0
  364. package/dist/tests/unit/install.backup-gc.test.d.ts.map +1 -0
  365. package/dist/tests/unit/install.backup-gc.test.js +177 -0
  366. package/dist/tests/unit/install.backup-gc.test.js.map +1 -0
  367. package/dist/tests/unit/install.ledger-replay.test.d.ts +12 -0
  368. package/dist/tests/unit/install.ledger-replay.test.d.ts.map +1 -0
  369. package/dist/tests/unit/install.ledger-replay.test.js +98 -0
  370. package/dist/tests/unit/install.ledger-replay.test.js.map +1 -0
  371. package/dist/tests/unit/local-inventory.test.d.ts +8 -0
  372. package/dist/tests/unit/local-inventory.test.d.ts.map +1 -0
  373. package/dist/tests/unit/local-inventory.test.js +165 -0
  374. package/dist/tests/unit/local-inventory.test.js.map +1 -0
  375. package/dist/tests/unit/namespace-audit-telemetry.test.d.ts +10 -0
  376. package/dist/tests/unit/namespace-audit-telemetry.test.d.ts.map +1 -0
  377. package/dist/tests/unit/namespace-audit-telemetry.test.js +215 -0
  378. package/dist/tests/unit/namespace-audit-telemetry.test.js.map +1 -0
  379. package/dist/tests/unit/namespace-overrides.test.d.ts +18 -0
  380. package/dist/tests/unit/namespace-overrides.test.d.ts.map +1 -0
  381. package/dist/tests/unit/namespace-overrides.test.js +210 -0
  382. package/dist/tests/unit/namespace-overrides.test.js.map +1 -0
  383. package/dist/tests/unit/rename-engine.test.d.ts +26 -0
  384. package/dist/tests/unit/rename-engine.test.d.ts.map +1 -0
  385. package/dist/tests/unit/rename-engine.test.js +367 -0
  386. package/dist/tests/unit/rename-engine.test.js.map +1 -0
  387. package/dist/tests/unit/skill-inventory-audit.test.d.ts +20 -0
  388. package/dist/tests/unit/skill-inventory-audit.test.d.ts.map +1 -0
  389. package/dist/tests/unit/skill-inventory-audit.test.js +299 -0
  390. package/dist/tests/unit/skill-inventory-audit.test.js.map +1 -0
  391. package/dist/tests/unit/skill-pack-audit.helpers.test.d.ts +11 -0
  392. package/dist/tests/unit/skill-pack-audit.helpers.test.d.ts.map +1 -0
  393. package/dist/tests/unit/skill-pack-audit.helpers.test.js +61 -0
  394. package/dist/tests/unit/skill-pack-audit.helpers.test.js.map +1 -0
  395. package/dist/tests/unit/skill-pack-audit.test.js +1 -1
  396. package/dist/tests/unit/skill-pack-audit.test.js.map +1 -1
  397. package/dist/tests/unit/suggestion-chain.test.d.ts +17 -0
  398. package/dist/tests/unit/suggestion-chain.test.d.ts.map +1 -0
  399. package/dist/tests/unit/suggestion-chain.test.js +191 -0
  400. package/dist/tests/unit/suggestion-chain.test.js.map +1 -0
  401. package/dist/tests/webhooks/standalone-shutdown.test.d.ts +12 -0
  402. package/dist/tests/webhooks/standalone-shutdown.test.d.ts.map +1 -0
  403. package/dist/tests/webhooks/standalone-shutdown.test.js +91 -0
  404. package/dist/tests/webhooks/standalone-shutdown.test.js.map +1 -0
  405. package/package.json +17 -4
  406. package/server.json +3 -3
  407. package/src/assets/skills/skillsmith/SKILL.md +109 -80
@@ -12,11 +12,13 @@
12
12
  */
13
13
  import * as fs from 'node:fs';
14
14
  import * as path from 'node:path';
15
- import * as os from 'node:os';
15
+ import { resolveClientPath } from '@skillsmith/core/install';
16
16
  /**
17
- * Default skills directory path
17
+ * Resolve the active skills directory from the `SKILLSMITH_CLIENT` env
18
+ * var (defaults to `claude-code` when unset). SMI-4578: computed at call
19
+ * time so a runtime override is picked up.
18
20
  */
19
- const DEFAULT_SKILLS_DIR = path.join(os.homedir(), '.claude', 'skills');
21
+ const getDefaultSkillsDir = () => resolveClientPath();
20
22
  /**
21
23
  * Parse SKILL.md frontmatter to extract skill metadata.
22
24
  *
@@ -114,7 +116,7 @@ export function getSkillIdFromDir(skillDir, dirName) {
114
116
  * const skills = await getInstalledSkills('/path/to/custom/skills');
115
117
  */
116
118
  export async function getInstalledSkills(skillsDir) {
117
- const dir = skillsDir || DEFAULT_SKILLS_DIR;
119
+ const dir = skillsDir || getDefaultSkillsDir();
118
120
  // Check if directory exists
119
121
  if (!fs.existsSync(dir)) {
120
122
  return [];
@@ -145,7 +147,7 @@ export async function getInstalledSkills(skillsDir) {
145
147
  * @returns Array of skill IDs
146
148
  */
147
149
  export function getInstalledSkillsSync(skillsDir) {
148
- const dir = skillsDir || DEFAULT_SKILLS_DIR;
150
+ const dir = skillsDir || getDefaultSkillsDir();
149
151
  // Check if directory exists
150
152
  if (!fs.existsSync(dir)) {
151
153
  return [];
@@ -170,7 +172,7 @@ export function getInstalledSkillsSync(skillsDir) {
170
172
  }
171
173
  }
172
174
  export async function getInstalledSkillsDetailed(skillsDir) {
173
- const dir = skillsDir || DEFAULT_SKILLS_DIR;
175
+ const dir = skillsDir || getDefaultSkillsDir();
174
176
  // Check if directory exists
175
177
  if (!fs.existsSync(dir)) {
176
178
  return [];
@@ -1 +1 @@
1
- {"version":3,"file":"installed-skills.js","sourceRoot":"","sources":["../../../src/utils/installed-skills.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH,OAAO,KAAK,EAAE,MAAM,SAAS,CAAA;AAC7B,OAAO,KAAK,IAAI,MAAM,WAAW,CAAA;AACjC,OAAO,KAAK,EAAE,MAAM,SAAS,CAAA;AAE7B;;GAEG;AACH,MAAM,kBAAkB,GAAG,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,OAAO,EAAE,EAAE,SAAS,EAAE,QAAQ,CAAC,CAAA;AAcvE;;;;;;;;;;;;;;;;GAgBG;AACH,MAAM,UAAU,YAAY,CAAC,OAAe;IAC1C,MAAM,MAAM,GAAkB;QAC5B,EAAE,EAAE,IAAI;QACR,IAAI,EAAE,IAAI;QACV,WAAW,EAAE,IAAI;KAClB,CAAA;IAED,0CAA0C;IAC1C,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,KAAK,CAAC,EAAE,CAAC;QAC/B,OAAO,MAAM,CAAA;IACf,CAAC;IAED,iCAAiC;IACjC,MAAM,oBAAoB,GAAG,OAAO,CAAC,OAAO,CAAC,KAAK,EAAE,CAAC,CAAC,CAAA;IACtD,IAAI,oBAAoB,KAAK,CAAC,CAAC,EAAE,CAAC;QAChC,OAAO,MAAM,CAAA;IACf,CAAC;IAED,8BAA8B;IAC9B,MAAM,WAAW,GAAG,OAAO,CAAC,SAAS,CAAC,CAAC,EAAE,oBAAoB,CAAC,CAAC,IAAI,EAAE,CAAA;IAErE,0DAA0D;IAC1D,MAAM,KAAK,GAAG,WAAW,CAAC,KAAK,CAAC,IAAI,CAAC,CAAA;IACrC,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;QACzB,MAAM,UAAU,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,CAAA;QACpC,IAAI,UAAU,KAAK,CAAC,CAAC;YAAE,SAAQ;QAE/B,MAAM,GAAG,GAAG,IAAI,CAAC,SAAS,CAAC,CAAC,EAAE,UAAU,CAAC,CAAC,IAAI,EAAE,CAAC,WAAW,EAAE,CAAA;QAC9D,MAAM,KAAK,GAAG,IAAI,CAAC,SAAS,CAAC,UAAU,GAAG,CAAC,CAAC,CAAC,IAAI,EAAE,CAAA;QAEnD,IAAI,GAAG,KAAK,MAAM,IAAI,KAAK,EAAE,CAAC;YAC5B,MAAM,CAAC,IAAI,GAAG,KAAK,CAAA;YACnB,MAAM,CAAC,EAAE,GAAG,KAAK,CAAA,CAAC,2BAA2B;QAC/C,CAAC;aAAM,IAAI,GAAG,KAAK,aAAa,IAAI,KAAK,EAAE,CAAC;YAC1C,MAAM,CAAC,WAAW,GAAG,KAAK,CAAA;QAC5B,CAAC;IACH,CAAC;IAED,OAAO,MAAM,CAAA;AACf,CAAC;AAED;;;;;;;;;GASG;AACH,MAAM,UAAU,iBAAiB,CAAC,QAAgB,EAAE,OAAe;IACjE,MAAM,WAAW,GAAG,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,UAAU,CAAC,CAAA;IAEnD,IAAI,CAAC;QACH,IAAI,EAAE,CAAC,UAAU,CAAC,WAAW,CAAC,EAAE,CAAC;YAC/B,MAAM,OAAO,GAAG,EAAE,CAAC,YAAY,CAAC,WAAW,EAAE,OAAO,CAAC,CAAA;YACrD,MAAM,MAAM,GAAG,YAAY,CAAC,OAAO,CAAC,CAAA;YACpC,IAAI,MAAM,CAAC,EAAE,EAAE,CAAC;gBACd,OAAO,MAAM,CAAC,EAAE,CAAA;YAClB,CAAC;QACH,CAAC;IACH,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO,CAAC,IAAI,CACV,8CAA8C,EAC9C,WAAW,EACX,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CACvD,CAAA;IACH,CAAC;IAED,OAAO,OAAO,CAAA;AAChB,CAAC;AAED;;;;;;;;;;;;;;;;;GAiBG;AACH,MAAM,CAAC,KAAK,UAAU,kBAAkB,CAAC,SAAkB;IACzD,MAAM,GAAG,GAAG,SAAS,IAAI,kBAAkB,CAAA;IAE3C,4BAA4B;IAC5B,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;QACxB,OAAO,EAAE,CAAA;IACX,CAAC;IAED,IAAI,CAAC;QACH,MAAM,OAAO,GAAG,EAAE,CAAC,WAAW,CAAC,GAAG,EAAE,EAAE,aAAa,EAAE,IAAI,EAAE,CAAC,CAAA;QAC5D,MAAM,QAAQ,GAAa,EAAE,CAAA;QAE7B,KAAK,MAAM,KAAK,IAAI,OAAO,EAAE,CAAC;YAC5B,8CAA8C;YAC9C,IAAI,CAAC,KAAK,CAAC,WAAW,EAAE,IAAI,KAAK,CAAC,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;gBACvD,SAAQ;YACV,CAAC;YAED,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,CAAC,CAAA;YAC3C,MAAM,OAAO,GAAG,iBAAiB,CAAC,QAAQ,EAAE,KAAK,CAAC,IAAI,CAAC,CAAA;YACvD,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC,CAAA;QACxB,CAAC;QAED,OAAO,QAAQ,CAAC,IAAI,EAAE,CAAA;IACxB,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO,CAAC,IAAI,CACV,qDAAqD,EACrD,GAAG,EACH,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CACvD,CAAA;QACD,OAAO,EAAE,CAAA;IACX,CAAC;AACH,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,sBAAsB,CAAC,SAAkB;IACvD,MAAM,GAAG,GAAG,SAAS,IAAI,kBAAkB,CAAA;IAE3C,4BAA4B;IAC5B,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;QACxB,OAAO,EAAE,CAAA;IACX,CAAC;IAED,IAAI,CAAC;QACH,MAAM,OAAO,GAAG,EAAE,CAAC,WAAW,CAAC,GAAG,EAAE,EAAE,aAAa,EAAE,IAAI,EAAE,CAAC,CAAA;QAC5D,MAAM,QAAQ,GAAa,EAAE,CAAA;QAE7B,KAAK,MAAM,KAAK,IAAI,OAAO,EAAE,CAAC;YAC5B,8CAA8C;YAC9C,IAAI,CAAC,KAAK,CAAC,WAAW,EAAE,IAAI,KAAK,CAAC,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;gBACvD,SAAQ;YACV,CAAC;YAED,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,CAAC,CAAA;YAC3C,MAAM,OAAO,GAAG,iBAAiB,CAAC,QAAQ,EAAE,KAAK,CAAC,IAAI,CAAC,CAAA;YACvD,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC,CAAA;QACxB,CAAC;QAED,OAAO,QAAQ,CAAC,IAAI,EAAE,CAAA;IACxB,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO,CAAC,IAAI,CACV,qDAAqD,EACrD,GAAG,EACH,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CACvD,CAAA;QACD,OAAO,EAAE,CAAA;IACX,CAAC;AACH,CAAC;AAuBD,MAAM,CAAC,KAAK,UAAU,0BAA0B,CAC9C,SAAkB;IAElB,MAAM,GAAG,GAAG,SAAS,IAAI,kBAAkB,CAAA;IAE3C,4BAA4B;IAC5B,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;QACxB,OAAO,EAAE,CAAA;IACX,CAAC;IAED,IAAI,CAAC;QACH,MAAM,OAAO,GAAG,EAAE,CAAC,WAAW,CAAC,GAAG,EAAE,EAAE,aAAa,EAAE,IAAI,EAAE,CAAC,CAAA;QAC5D,MAAM,MAAM,GAAyB,EAAE,CAAA;QAEvC,KAAK,MAAM,KAAK,IAAI,OAAO,EAAE,CAAC;YAC5B,8CAA8C;YAC9C,IAAI,CAAC,KAAK,CAAC,WAAW,EAAE,IAAI,KAAK,CAAC,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;gBACvD,SAAQ;YACV,CAAC;YAED,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,CAAC,CAAA;YAC3C,MAAM,WAAW,GAAG,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,UAAU,CAAC,CAAA;YACnD,IAAI,UAAU,GAAG,KAAK,CAAA;YACtB,IAAI,WAAW,GAAkB,IAAI,CAAA;YACrC,IAAI,EAAE,GAAG,KAAK,CAAC,IAAI,CAAA;YAEnB,IAAI,CAAC;gBACH,IAAI,EAAE,CAAC,UAAU,CAAC,WAAW,CAAC,EAAE,CAAC;oBAC/B,UAAU,GAAG,IAAI,CAAA;oBACjB,MAAM,OAAO,GAAG,EAAE,CAAC,YAAY,CAAC,WAAW,EAAE,OAAO,CAAC,CAAA;oBACrD,MAAM,MAAM,GAAG,YAAY,CAAC,OAAO,CAAC,CAAA;oBACpC,IAAI,MAAM,CAAC,EAAE,EAAE,CAAC;wBACd,EAAE,GAAG,MAAM,CAAC,EAAE,CAAA;oBAChB,CAAC;oBACD,WAAW,GAAG,MAAM,CAAC,WAAW,CAAA;gBAClC,CAAC;YACH,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBACf,OAAO,CAAC,IAAI,CACV,gEAAgE,EAChE,WAAW,EACX,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CACvD,CAAA;YACH,CAAC;YAED,MAAM,CAAC,IAAI,CAAC;gBACV,EAAE;gBACF,SAAS,EAAE,KAAK,CAAC,IAAI;gBACrB,IAAI,EAAE,QAAQ;gBACd,UAAU;gBACV,WAAW;aACZ,CAAC,CAAA;QACJ,CAAC;QAED,OAAO,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,aAAa,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAA;IACxD,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO,CAAC,IAAI,CACV,mDAAmD,EACnD,GAAG,EACH,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CACvD,CAAA;QACD,OAAO,EAAE,CAAA;IACX,CAAC;AACH,CAAC"}
1
+ {"version":3,"file":"installed-skills.js","sourceRoot":"","sources":["../../../src/utils/installed-skills.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH,OAAO,KAAK,EAAE,MAAM,SAAS,CAAA;AAC7B,OAAO,KAAK,IAAI,MAAM,WAAW,CAAA;AACjC,OAAO,EAAE,iBAAiB,EAAE,MAAM,0BAA0B,CAAA;AAE5D;;;;GAIG;AACH,MAAM,mBAAmB,GAAG,GAAW,EAAE,CAAC,iBAAiB,EAAE,CAAA;AAc7D;;;;;;;;;;;;;;;;GAgBG;AACH,MAAM,UAAU,YAAY,CAAC,OAAe;IAC1C,MAAM,MAAM,GAAkB;QAC5B,EAAE,EAAE,IAAI;QACR,IAAI,EAAE,IAAI;QACV,WAAW,EAAE,IAAI;KAClB,CAAA;IAED,0CAA0C;IAC1C,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,KAAK,CAAC,EAAE,CAAC;QAC/B,OAAO,MAAM,CAAA;IACf,CAAC;IAED,iCAAiC;IACjC,MAAM,oBAAoB,GAAG,OAAO,CAAC,OAAO,CAAC,KAAK,EAAE,CAAC,CAAC,CAAA;IACtD,IAAI,oBAAoB,KAAK,CAAC,CAAC,EAAE,CAAC;QAChC,OAAO,MAAM,CAAA;IACf,CAAC;IAED,8BAA8B;IAC9B,MAAM,WAAW,GAAG,OAAO,CAAC,SAAS,CAAC,CAAC,EAAE,oBAAoB,CAAC,CAAC,IAAI,EAAE,CAAA;IAErE,0DAA0D;IAC1D,MAAM,KAAK,GAAG,WAAW,CAAC,KAAK,CAAC,IAAI,CAAC,CAAA;IACrC,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;QACzB,MAAM,UAAU,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,CAAA;QACpC,IAAI,UAAU,KAAK,CAAC,CAAC;YAAE,SAAQ;QAE/B,MAAM,GAAG,GAAG,IAAI,CAAC,SAAS,CAAC,CAAC,EAAE,UAAU,CAAC,CAAC,IAAI,EAAE,CAAC,WAAW,EAAE,CAAA;QAC9D,MAAM,KAAK,GAAG,IAAI,CAAC,SAAS,CAAC,UAAU,GAAG,CAAC,CAAC,CAAC,IAAI,EAAE,CAAA;QAEnD,IAAI,GAAG,KAAK,MAAM,IAAI,KAAK,EAAE,CAAC;YAC5B,MAAM,CAAC,IAAI,GAAG,KAAK,CAAA;YACnB,MAAM,CAAC,EAAE,GAAG,KAAK,CAAA,CAAC,2BAA2B;QAC/C,CAAC;aAAM,IAAI,GAAG,KAAK,aAAa,IAAI,KAAK,EAAE,CAAC;YAC1C,MAAM,CAAC,WAAW,GAAG,KAAK,CAAA;QAC5B,CAAC;IACH,CAAC;IAED,OAAO,MAAM,CAAA;AACf,CAAC;AAED;;;;;;;;;GASG;AACH,MAAM,UAAU,iBAAiB,CAAC,QAAgB,EAAE,OAAe;IACjE,MAAM,WAAW,GAAG,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,UAAU,CAAC,CAAA;IAEnD,IAAI,CAAC;QACH,IAAI,EAAE,CAAC,UAAU,CAAC,WAAW,CAAC,EAAE,CAAC;YAC/B,MAAM,OAAO,GAAG,EAAE,CAAC,YAAY,CAAC,WAAW,EAAE,OAAO,CAAC,CAAA;YACrD,MAAM,MAAM,GAAG,YAAY,CAAC,OAAO,CAAC,CAAA;YACpC,IAAI,MAAM,CAAC,EAAE,EAAE,CAAC;gBACd,OAAO,MAAM,CAAC,EAAE,CAAA;YAClB,CAAC;QACH,CAAC;IACH,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO,CAAC,IAAI,CACV,8CAA8C,EAC9C,WAAW,EACX,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CACvD,CAAA;IACH,CAAC;IAED,OAAO,OAAO,CAAA;AAChB,CAAC;AAED;;;;;;;;;;;;;;;;;GAiBG;AACH,MAAM,CAAC,KAAK,UAAU,kBAAkB,CAAC,SAAkB;IACzD,MAAM,GAAG,GAAG,SAAS,IAAI,mBAAmB,EAAE,CAAA;IAE9C,4BAA4B;IAC5B,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;QACxB,OAAO,EAAE,CAAA;IACX,CAAC;IAED,IAAI,CAAC;QACH,MAAM,OAAO,GAAG,EAAE,CAAC,WAAW,CAAC,GAAG,EAAE,EAAE,aAAa,EAAE,IAAI,EAAE,CAAC,CAAA;QAC5D,MAAM,QAAQ,GAAa,EAAE,CAAA;QAE7B,KAAK,MAAM,KAAK,IAAI,OAAO,EAAE,CAAC;YAC5B,8CAA8C;YAC9C,IAAI,CAAC,KAAK,CAAC,WAAW,EAAE,IAAI,KAAK,CAAC,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;gBACvD,SAAQ;YACV,CAAC;YAED,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,CAAC,CAAA;YAC3C,MAAM,OAAO,GAAG,iBAAiB,CAAC,QAAQ,EAAE,KAAK,CAAC,IAAI,CAAC,CAAA;YACvD,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC,CAAA;QACxB,CAAC;QAED,OAAO,QAAQ,CAAC,IAAI,EAAE,CAAA;IACxB,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO,CAAC,IAAI,CACV,qDAAqD,EACrD,GAAG,EACH,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CACvD,CAAA;QACD,OAAO,EAAE,CAAA;IACX,CAAC;AACH,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,sBAAsB,CAAC,SAAkB;IACvD,MAAM,GAAG,GAAG,SAAS,IAAI,mBAAmB,EAAE,CAAA;IAE9C,4BAA4B;IAC5B,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;QACxB,OAAO,EAAE,CAAA;IACX,CAAC;IAED,IAAI,CAAC;QACH,MAAM,OAAO,GAAG,EAAE,CAAC,WAAW,CAAC,GAAG,EAAE,EAAE,aAAa,EAAE,IAAI,EAAE,CAAC,CAAA;QAC5D,MAAM,QAAQ,GAAa,EAAE,CAAA;QAE7B,KAAK,MAAM,KAAK,IAAI,OAAO,EAAE,CAAC;YAC5B,8CAA8C;YAC9C,IAAI,CAAC,KAAK,CAAC,WAAW,EAAE,IAAI,KAAK,CAAC,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;gBACvD,SAAQ;YACV,CAAC;YAED,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,CAAC,CAAA;YAC3C,MAAM,OAAO,GAAG,iBAAiB,CAAC,QAAQ,EAAE,KAAK,CAAC,IAAI,CAAC,CAAA;YACvD,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC,CAAA;QACxB,CAAC;QAED,OAAO,QAAQ,CAAC,IAAI,EAAE,CAAA;IACxB,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO,CAAC,IAAI,CACV,qDAAqD,EACrD,GAAG,EACH,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CACvD,CAAA;QACD,OAAO,EAAE,CAAA;IACX,CAAC;AACH,CAAC;AAuBD,MAAM,CAAC,KAAK,UAAU,0BAA0B,CAC9C,SAAkB;IAElB,MAAM,GAAG,GAAG,SAAS,IAAI,mBAAmB,EAAE,CAAA;IAE9C,4BAA4B;IAC5B,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;QACxB,OAAO,EAAE,CAAA;IACX,CAAC;IAED,IAAI,CAAC;QACH,MAAM,OAAO,GAAG,EAAE,CAAC,WAAW,CAAC,GAAG,EAAE,EAAE,aAAa,EAAE,IAAI,EAAE,CAAC,CAAA;QAC5D,MAAM,MAAM,GAAyB,EAAE,CAAA;QAEvC,KAAK,MAAM,KAAK,IAAI,OAAO,EAAE,CAAC;YAC5B,8CAA8C;YAC9C,IAAI,CAAC,KAAK,CAAC,WAAW,EAAE,IAAI,KAAK,CAAC,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;gBACvD,SAAQ;YACV,CAAC;YAED,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,CAAC,CAAA;YAC3C,MAAM,WAAW,GAAG,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,UAAU,CAAC,CAAA;YACnD,IAAI,UAAU,GAAG,KAAK,CAAA;YACtB,IAAI,WAAW,GAAkB,IAAI,CAAA;YACrC,IAAI,EAAE,GAAG,KAAK,CAAC,IAAI,CAAA;YAEnB,IAAI,CAAC;gBACH,IAAI,EAAE,CAAC,UAAU,CAAC,WAAW,CAAC,EAAE,CAAC;oBAC/B,UAAU,GAAG,IAAI,CAAA;oBACjB,MAAM,OAAO,GAAG,EAAE,CAAC,YAAY,CAAC,WAAW,EAAE,OAAO,CAAC,CAAA;oBACrD,MAAM,MAAM,GAAG,YAAY,CAAC,OAAO,CAAC,CAAA;oBACpC,IAAI,MAAM,CAAC,EAAE,EAAE,CAAC;wBACd,EAAE,GAAG,MAAM,CAAC,EAAE,CAAA;oBAChB,CAAC;oBACD,WAAW,GAAG,MAAM,CAAC,WAAW,CAAA;gBAClC,CAAC;YACH,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBACf,OAAO,CAAC,IAAI,CACV,gEAAgE,EAChE,WAAW,EACX,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CACvD,CAAA;YACH,CAAC;YAED,MAAM,CAAC,IAAI,CAAC;gBACV,EAAE;gBACF,SAAS,EAAE,KAAK,CAAC,IAAI;gBACrB,IAAI,EAAE,QAAQ;gBACd,UAAU;gBACV,WAAW;aACZ,CAAC,CAAA;QACJ,CAAC;QAED,OAAO,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,aAAa,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAA;IACxD,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO,CAAC,IAAI,CACV,mDAAmD,EACnD,GAAG,EACH,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CACvD,CAAA;QACD,OAAO,EAAE,CAAA;IACX,CAAC;AACH,CAAC"}
@@ -0,0 +1,29 @@
1
+ /**
2
+ * @fileoverview Local-inventory scanner for the consumer namespace audit.
3
+ * @module @skillsmith/mcp-server/utils/local-inventory
4
+ * @see SMI-4587 Wave 1 Step 2 — scan ~/.claude/{skills,commands,agents} +
5
+ * CLAUDE.md trigger phrases into a unified InventoryEntry[].
6
+ *
7
+ * Each source is independent — failure in one does not fail the others.
8
+ * The scanner is read-only; bootstrapping unmanaged skills via `index_local`
9
+ * is wired in a subsequent PR (Step 6a).
10
+ */
11
+ import type { ScanResult } from './local-inventory.types.js';
12
+ export interface ScanLocalInventoryOptions {
13
+ /** Defaults to `os.homedir()`. */
14
+ homeDir?: string;
15
+ /** Optional project CLAUDE.md to scan in addition to the user one. */
16
+ projectDir?: string;
17
+ /** Override path to `~/.skillsmith/manifest.json`. */
18
+ manifestPath?: string;
19
+ }
20
+ /**
21
+ * Scan `~/.claude/{skills,commands,agents}` and CLAUDE.md trigger phrases.
22
+ *
23
+ * Returns `entries[]` sorted by `kind` then `identifier`, plus any soft
24
+ * `warnings[]` raised during scanning. `durationMs` measures wall-clock
25
+ * time for the whole scan (excluding the optional bootstrap step that
26
+ * lands in a subsequent PR).
27
+ */
28
+ export declare function scanLocalInventory(opts?: ScanLocalInventoryOptions): Promise<ScanResult>;
29
+ //# sourceMappingURL=local-inventory.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"local-inventory.d.ts","sourceRoot":"","sources":["../../../src/utils/local-inventory.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAMH,OAAO,KAAK,EAAkB,UAAU,EAAe,MAAM,4BAA4B,CAAA;AAiBzF,MAAM,WAAW,yBAAyB;IACxC,kCAAkC;IAClC,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB,sEAAsE;IACtE,UAAU,CAAC,EAAE,MAAM,CAAA;IACnB,sDAAsD;IACtD,YAAY,CAAC,EAAE,MAAM,CAAA;CACtB;AAED;;;;;;;GAOG;AACH,wBAAsB,kBAAkB,CACtC,IAAI,GAAE,yBAA8B,GACnC,OAAO,CAAC,UAAU,CAAC,CA+CrB"}
@@ -0,0 +1,96 @@
1
+ /**
2
+ * @fileoverview Helpers for the local-inventory scanner (SMI-4587 Wave 1 Step 2).
3
+ * @module @skillsmith/mcp-server/utils/local-inventory.helpers
4
+ *
5
+ * Pure functions extracted to keep `local-inventory.ts` thin. CLAUDE.md
6
+ * regex extraction lives here so the regex behavior can be tested in
7
+ * isolation. Frontmatter helpers wrap the existing `parseYamlFrontmatter`.
8
+ */
9
+ import type { InventoryEntry, ScanWarning } from './local-inventory.types.js';
10
+ /**
11
+ * Stable warning code catalog. Keep this in sync with the writer; the audit
12
+ * report renders messages keyed off `code`.
13
+ */
14
+ export declare const WARNING_CODES: {
15
+ readonly TRIGGER_SURFACE_TRUNCATED: "namespace.inventory.trigger_surface_truncated";
16
+ readonly BOOTSTRAP_FAILED: "namespace.inventory.bootstrap_failed";
17
+ readonly CLAUDE_MD_RECALL_LOW: "namespace.inventory.claude_md_recall_low";
18
+ readonly REGEX_EXTRACTION_SKIPPED: "namespace.inventory.regex_extraction_skipped";
19
+ readonly UNMANAGED_SKILL_BOOTSTRAPPED: "namespace.inventory.unmanaged_skill_bootstrapped";
20
+ readonly PARSE_FAILED: "namespace.inventory.parse_failed";
21
+ };
22
+ /** Maximum trigger phrases retained per entry — matches `OverlapDetector.MAX_TRIGGER_PHRASES_PER_SKILL`. */
23
+ export declare const MAX_TRIGGER_PHRASES_PER_SKILL = 50;
24
+ /**
25
+ * Cap an array of trigger phrases at MAX_TRIGGER_PHRASES_PER_SKILL. When
26
+ * truncation occurs, append a warning of code `trigger_surface_truncated`
27
+ * with the dropped count so the user sees it in the audit report.
28
+ */
29
+ export declare function capTriggerSurface(identifier: string, phrases: string[], warnings: ScanWarning[]): string[];
30
+ /**
31
+ * Split a description into sentence-level trigger phrases. Empty or
32
+ * whitespace-only segments are filtered.
33
+ */
34
+ export declare function splitDescriptionToPhrases(description: string | undefined): string[];
35
+ /**
36
+ * Read the YAML frontmatter from a `.md` file. Returns `{}` if no
37
+ * frontmatter or the file cannot be parsed.
38
+ */
39
+ export declare function readFrontmatter(filePath: string): Record<string, unknown>;
40
+ /**
41
+ * Extract the body of a `.md` file (everything after the closing
42
+ * frontmatter delimiter, or the full content if no frontmatter).
43
+ */
44
+ export declare function readBody(filePath: string): string;
45
+ /**
46
+ * Pull the first non-empty line from a body string. Used as the fallback
47
+ * trigger surface for frontmatter-less command files.
48
+ */
49
+ export declare function firstNonEmptyLine(body: string): string;
50
+ /**
51
+ * Stable identifier for a CLAUDE.md trigger line. The identifier doubles as
52
+ * dedup key — two scans of the same line produce the same id. Hashed
53
+ * because the line itself can be long; first 12 hex chars are sufficient.
54
+ */
55
+ export declare function hashClaudeMdLine(claudeMdPath: string, line: string): string;
56
+ /**
57
+ * Best-effort regex extractor for CLAUDE.md trigger phrases.
58
+ *
59
+ * Two patterns are recognized (per Wave 0 spike goal #3):
60
+ *
61
+ * 1. Bullet items under headings matching
62
+ * `/^#{1,3}\s*(Trigger phrases|Use when|Skills)\b/i`. Recall is
63
+ * best-effort — false negatives expected for non-standard heading text.
64
+ * 2. Any line containing the high-confidence marker
65
+ * `<!-- skillsmith:trigger -->`. The full line is captured as a phrase.
66
+ *
67
+ * Returns one `InventoryEntry` per extracted line. Failures (file missing,
68
+ * unparseable) emit a `warnings[]` entry — never throw.
69
+ */
70
+ export declare function extractClaudeMdTriggers(claudeMdPath: string, warnings: ScanWarning[]): InventoryEntry[];
71
+ /**
72
+ * Resolve `~/.skillsmith/manifest.json` and return the parsed object, or
73
+ * `null` if absent / unreadable. Scanner uses this to populate
74
+ * `entry.meta.author` for installed skills.
75
+ */
76
+ export declare function loadManifest(manifestPath: string): Record<string, unknown> | null;
77
+ /**
78
+ * Look up an `author` (and `tags`) for a given skill identifier in the
79
+ * manifest. Manifest shape varies — be tolerant: walk the top-level keys
80
+ * and any obvious `skills` array/object.
81
+ */
82
+ export declare function lookupAuthor(manifest: Record<string, unknown> | null, identifier: string): {
83
+ author?: string;
84
+ tags?: string[];
85
+ };
86
+ /**
87
+ * Cross-platform mtime read. Returns `undefined` on stat failure rather
88
+ * than throwing — mtime is informational for ordering, not load-bearing.
89
+ */
90
+ export declare function readMtime(filePath: string): number | undefined;
91
+ /**
92
+ * Resolve absolute path joining `dir + filename`. Centralized so future
93
+ * portability work (E-ANTI-1 v2) can swap in a relative-to-home derivation.
94
+ */
95
+ export declare function joinPath(dir: string, filename: string): string;
96
+ //# sourceMappingURL=local-inventory.helpers.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"local-inventory.helpers.d.ts","sourceRoot":"","sources":["../../../src/utils/local-inventory.helpers.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAOH,OAAO,KAAK,EAAE,cAAc,EAAE,WAAW,EAAE,MAAM,4BAA4B,CAAA;AAE7E;;;GAGG;AACH,eAAO,MAAM,aAAa;;;;;;;CAOhB,CAAA;AAEV,4GAA4G;AAC5G,eAAO,MAAM,6BAA6B,KAAK,CAAA;AAE/C;;;;GAIG;AACH,wBAAgB,iBAAiB,CAC/B,UAAU,EAAE,MAAM,EAClB,OAAO,EAAE,MAAM,EAAE,EACjB,QAAQ,EAAE,WAAW,EAAE,GACtB,MAAM,EAAE,CAeV;AAED;;;GAGG;AACH,wBAAgB,yBAAyB,CAAC,WAAW,EAAE,MAAM,GAAG,SAAS,GAAG,MAAM,EAAE,CAQnF;AAED;;;GAGG;AACH,wBAAgB,eAAe,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAOzE;AAED;;;GAGG;AACH,wBAAgB,QAAQ,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,CAUjD;AAED;;;GAGG;AACH,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAMtD;AAED;;;;GAIG;AACH,wBAAgB,gBAAgB,CAAC,YAAY,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,MAAM,CAQ3E;AAED;;;;;;;;;;;;;GAaG;AACH,wBAAgB,uBAAuB,CACrC,YAAY,EAAE,MAAM,EACpB,QAAQ,EAAE,WAAW,EAAE,GACtB,cAAc,EAAE,CAwElB;AAiBD;;;;GAIG;AACH,wBAAgB,YAAY,CAAC,YAAY,EAAE,MAAM,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI,CAQjF;AAED;;;;GAIG;AACH,wBAAgB,YAAY,CAC1B,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI,EACxC,UAAU,EAAE,MAAM,GACjB;IAAE,MAAM,CAAC,EAAE,MAAM,CAAC;IAAC,IAAI,CAAC,EAAE,MAAM,EAAE,CAAA;CAAE,CAgCtC;AAED;;;GAGG;AACH,wBAAgB,SAAS,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAM9D;AAED;;;GAGG;AACH,wBAAgB,QAAQ,CAAC,GAAG,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,MAAM,CAE9D"}
@@ -0,0 +1,279 @@
1
+ /**
2
+ * @fileoverview Helpers for the local-inventory scanner (SMI-4587 Wave 1 Step 2).
3
+ * @module @skillsmith/mcp-server/utils/local-inventory.helpers
4
+ *
5
+ * Pure functions extracted to keep `local-inventory.ts` thin. CLAUDE.md
6
+ * regex extraction lives here so the regex behavior can be tested in
7
+ * isolation. Frontmatter helpers wrap the existing `parseYamlFrontmatter`.
8
+ */
9
+ import * as crypto from 'node:crypto';
10
+ import * as fs from 'node:fs';
11
+ import * as path from 'node:path';
12
+ import { parseYamlFrontmatter } from '../tools/validate.helpers.js';
13
+ /**
14
+ * Stable warning code catalog. Keep this in sync with the writer; the audit
15
+ * report renders messages keyed off `code`.
16
+ */
17
+ export const WARNING_CODES = {
18
+ TRIGGER_SURFACE_TRUNCATED: 'namespace.inventory.trigger_surface_truncated',
19
+ BOOTSTRAP_FAILED: 'namespace.inventory.bootstrap_failed',
20
+ CLAUDE_MD_RECALL_LOW: 'namespace.inventory.claude_md_recall_low',
21
+ REGEX_EXTRACTION_SKIPPED: 'namespace.inventory.regex_extraction_skipped',
22
+ UNMANAGED_SKILL_BOOTSTRAPPED: 'namespace.inventory.unmanaged_skill_bootstrapped',
23
+ PARSE_FAILED: 'namespace.inventory.parse_failed',
24
+ };
25
+ /** Maximum trigger phrases retained per entry — matches `OverlapDetector.MAX_TRIGGER_PHRASES_PER_SKILL`. */
26
+ export const MAX_TRIGGER_PHRASES_PER_SKILL = 50;
27
+ /**
28
+ * Cap an array of trigger phrases at MAX_TRIGGER_PHRASES_PER_SKILL. When
29
+ * truncation occurs, append a warning of code `trigger_surface_truncated`
30
+ * with the dropped count so the user sees it in the audit report.
31
+ */
32
+ export function capTriggerSurface(identifier, phrases, warnings) {
33
+ if (phrases.length <= MAX_TRIGGER_PHRASES_PER_SKILL) {
34
+ return phrases;
35
+ }
36
+ warnings.push({
37
+ code: WARNING_CODES.TRIGGER_SURFACE_TRUNCATED,
38
+ message: `triggerSurface for "${identifier}" was capped at ${MAX_TRIGGER_PHRASES_PER_SKILL} phrases (${phrases.length - MAX_TRIGGER_PHRASES_PER_SKILL} dropped)`,
39
+ context: {
40
+ entry_identifier: identifier,
41
+ dropped_count: phrases.length - MAX_TRIGGER_PHRASES_PER_SKILL,
42
+ },
43
+ });
44
+ return phrases.slice(0, MAX_TRIGGER_PHRASES_PER_SKILL);
45
+ }
46
+ /**
47
+ * Split a description into sentence-level trigger phrases. Empty or
48
+ * whitespace-only segments are filtered.
49
+ */
50
+ export function splitDescriptionToPhrases(description) {
51
+ if (!description)
52
+ return [];
53
+ // Split on sentence terminators; tolerate runs of whitespace and trailing
54
+ // punctuation. Not a strict NLP tokenizer — close-enough for trigger surface.
55
+ return description
56
+ .split(/[.!?\n]+/)
57
+ .map((s) => s.trim())
58
+ .filter((s) => s.length > 0);
59
+ }
60
+ /**
61
+ * Read the YAML frontmatter from a `.md` file. Returns `{}` if no
62
+ * frontmatter or the file cannot be parsed.
63
+ */
64
+ export function readFrontmatter(filePath) {
65
+ try {
66
+ const content = fs.readFileSync(filePath, 'utf-8');
67
+ return parseYamlFrontmatter(content) ?? {};
68
+ }
69
+ catch {
70
+ return {};
71
+ }
72
+ }
73
+ /**
74
+ * Extract the body of a `.md` file (everything after the closing
75
+ * frontmatter delimiter, or the full content if no frontmatter).
76
+ */
77
+ export function readBody(filePath) {
78
+ try {
79
+ const content = fs.readFileSync(filePath, 'utf-8');
80
+ if (!content.startsWith('---'))
81
+ return content;
82
+ const end = content.indexOf('---', 3);
83
+ if (end === -1)
84
+ return content;
85
+ return content.slice(end + 3).trimStart();
86
+ }
87
+ catch {
88
+ return '';
89
+ }
90
+ }
91
+ /**
92
+ * Pull the first non-empty line from a body string. Used as the fallback
93
+ * trigger surface for frontmatter-less command files.
94
+ */
95
+ export function firstNonEmptyLine(body) {
96
+ for (const line of body.split('\n')) {
97
+ const trimmed = line.trim();
98
+ if (trimmed)
99
+ return trimmed;
100
+ }
101
+ return '';
102
+ }
103
+ /**
104
+ * Stable identifier for a CLAUDE.md trigger line. The identifier doubles as
105
+ * dedup key — two scans of the same line produce the same id. Hashed
106
+ * because the line itself can be long; first 12 hex chars are sufficient.
107
+ */
108
+ export function hashClaudeMdLine(claudeMdPath, line) {
109
+ const norm = line.trim().toLowerCase();
110
+ const hash = crypto
111
+ .createHash('sha256')
112
+ .update(`${claudeMdPath}:${norm}`)
113
+ .digest('hex')
114
+ .slice(0, 12);
115
+ return `claude_md:${hash}`;
116
+ }
117
+ /**
118
+ * Best-effort regex extractor for CLAUDE.md trigger phrases.
119
+ *
120
+ * Two patterns are recognized (per Wave 0 spike goal #3):
121
+ *
122
+ * 1. Bullet items under headings matching
123
+ * `/^#{1,3}\s*(Trigger phrases|Use when|Skills)\b/i`. Recall is
124
+ * best-effort — false negatives expected for non-standard heading text.
125
+ * 2. Any line containing the high-confidence marker
126
+ * `<!-- skillsmith:trigger -->`. The full line is captured as a phrase.
127
+ *
128
+ * Returns one `InventoryEntry` per extracted line. Failures (file missing,
129
+ * unparseable) emit a `warnings[]` entry — never throw.
130
+ */
131
+ export function extractClaudeMdTriggers(claudeMdPath, warnings) {
132
+ let content;
133
+ try {
134
+ content = fs.readFileSync(claudeMdPath, 'utf-8');
135
+ }
136
+ catch {
137
+ // Missing file is silent (no CLAUDE.md is a normal state).
138
+ return [];
139
+ }
140
+ const entries = [];
141
+ let stat;
142
+ try {
143
+ stat = fs.statSync(claudeMdPath);
144
+ }
145
+ catch {
146
+ stat = undefined;
147
+ }
148
+ let captureMode = 'idle';
149
+ let lines;
150
+ try {
151
+ lines = content.split('\n');
152
+ }
153
+ catch {
154
+ warnings.push({
155
+ code: WARNING_CODES.REGEX_EXTRACTION_SKIPPED,
156
+ message: `CLAUDE.md at ${claudeMdPath} unparseable; trigger-phrase scan skipped`,
157
+ context: { path: claudeMdPath },
158
+ });
159
+ return [];
160
+ }
161
+ // Headings considered as trigger sections. Case-insensitive, allow up to
162
+ // three leading hashes (per spec line 104).
163
+ const headingRe = /^#{1,3}\s*(Trigger phrases|Use when|Skills)\b/i;
164
+ const otherHeadingRe = /^#{1,6}\s+/;
165
+ const bulletRe = /^[-*]\s+(.+)$/;
166
+ const markerRe = /<!--\s*skillsmith:trigger\s*-->/;
167
+ for (const rawLine of lines) {
168
+ const line = rawLine.trim();
169
+ if (markerRe.test(line)) {
170
+ // High-confidence marker line — capture the whole line minus the marker.
171
+ const phrase = line.replace(markerRe, '').trim();
172
+ if (phrase) {
173
+ entries.push(makeClaudeMdEntry(claudeMdPath, phrase, stat?.mtimeMs));
174
+ }
175
+ continue;
176
+ }
177
+ if (headingRe.test(line)) {
178
+ captureMode = 'heading';
179
+ continue;
180
+ }
181
+ // Reset capture mode on any other heading.
182
+ if (otherHeadingRe.test(line)) {
183
+ captureMode = 'idle';
184
+ continue;
185
+ }
186
+ if (captureMode === 'heading') {
187
+ const m = bulletRe.exec(line);
188
+ if (m && m[1]) {
189
+ const phrase = m[1].trim();
190
+ if (phrase) {
191
+ entries.push(makeClaudeMdEntry(claudeMdPath, phrase, stat?.mtimeMs));
192
+ }
193
+ }
194
+ }
195
+ }
196
+ return entries;
197
+ }
198
+ function makeClaudeMdEntry(claudeMdPath, phrase, mtime) {
199
+ return {
200
+ kind: 'claude_md_rule',
201
+ source_path: claudeMdPath,
202
+ identifier: hashClaudeMdLine(claudeMdPath, phrase),
203
+ triggerSurface: [phrase],
204
+ mtime,
205
+ meta: { description: phrase },
206
+ };
207
+ }
208
+ /**
209
+ * Resolve `~/.skillsmith/manifest.json` and return the parsed object, or
210
+ * `null` if absent / unreadable. Scanner uses this to populate
211
+ * `entry.meta.author` for installed skills.
212
+ */
213
+ export function loadManifest(manifestPath) {
214
+ try {
215
+ if (!fs.existsSync(manifestPath))
216
+ return null;
217
+ const raw = fs.readFileSync(manifestPath, 'utf-8');
218
+ return JSON.parse(raw);
219
+ }
220
+ catch {
221
+ return null;
222
+ }
223
+ }
224
+ /**
225
+ * Look up an `author` (and `tags`) for a given skill identifier in the
226
+ * manifest. Manifest shape varies — be tolerant: walk the top-level keys
227
+ * and any obvious `skills` array/object.
228
+ */
229
+ export function lookupAuthor(manifest, identifier) {
230
+ if (!manifest)
231
+ return {};
232
+ // Many manifest shapes possible; check common ones.
233
+ const skills = (manifest.skills ?? manifest.installed);
234
+ if (Array.isArray(skills)) {
235
+ for (const s of skills) {
236
+ if (s &&
237
+ typeof s === 'object' &&
238
+ (s.id === identifier ||
239
+ s.name === identifier)) {
240
+ const rec = s;
241
+ return {
242
+ author: typeof rec.author === 'string' ? rec.author : undefined,
243
+ tags: Array.isArray(rec.tags) ? rec.tags : undefined,
244
+ };
245
+ }
246
+ }
247
+ }
248
+ if (skills && typeof skills === 'object') {
249
+ const rec = skills[identifier];
250
+ if (rec && typeof rec === 'object') {
251
+ const r = rec;
252
+ return {
253
+ author: typeof r.author === 'string' ? r.author : undefined,
254
+ tags: Array.isArray(r.tags) ? r.tags : undefined,
255
+ };
256
+ }
257
+ }
258
+ return {};
259
+ }
260
+ /**
261
+ * Cross-platform mtime read. Returns `undefined` on stat failure rather
262
+ * than throwing — mtime is informational for ordering, not load-bearing.
263
+ */
264
+ export function readMtime(filePath) {
265
+ try {
266
+ return fs.statSync(filePath).mtimeMs;
267
+ }
268
+ catch {
269
+ return undefined;
270
+ }
271
+ }
272
+ /**
273
+ * Resolve absolute path joining `dir + filename`. Centralized so future
274
+ * portability work (E-ANTI-1 v2) can swap in a relative-to-home derivation.
275
+ */
276
+ export function joinPath(dir, filename) {
277
+ return path.join(dir, filename);
278
+ }
279
+ //# sourceMappingURL=local-inventory.helpers.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"local-inventory.helpers.js","sourceRoot":"","sources":["../../../src/utils/local-inventory.helpers.ts"],"names":[],"mappings":"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"}