@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
@@ -0,0 +1,393 @@
1
+ /**
2
+ * @fileoverview Rename engine — applies confirmed namespace renames
3
+ * (SMI-4588 Wave 2 Step 4, PR #2).
4
+ * @module @skillsmith/mcp-server/audit/rename-engine
5
+ *
6
+ * Three apply paths, gated on `RenameAction`:
7
+ *
8
+ * - `rename_command_file` — `~/.claude/commands/foo.md` → `<author>-foo.md`
9
+ * - `rename_agent_file` — `~/.claude/agents/foo.md` → `<author>-foo.md`
10
+ * - `rename_skill_dir_and_frontmatter` — rename the directory AND rewrite
11
+ * the SKILL.md `name:` frontmatter field.
12
+ *
13
+ * Plus `action: 'revert'` semantics: looks up the ledger entry by
14
+ * `auditId`, performs the inverse rename (back to `originalIdentifier`),
15
+ * removes the ledger entry, and restores the SKILL.md frontmatter.
16
+ *
17
+ * Backups are owned by the canonical `createSkillBackup` helper at
18
+ * `tools/install.conflict-helpers.ts:87` (plan §1 Edit 4). Single-file
19
+ * renames stage the file under a tmp directory so the helper (which
20
+ * expects a source dir) backs up only the relevant file. Backups land in
21
+ * `~/.claude/skills/.backups/<name>/<timestamp>_namespace-rename/`.
22
+ *
23
+ * Idempotency: before mutating, the engine consults the namespace-overrides
24
+ * ledger. When the same `(skillId, originalIdentifier)` pair is already
25
+ * in the ledger AND the on-disk filename matches the recorded
26
+ * `renamedTo`, the call is a no-op (returns success with
27
+ * `fromPath === toPath` and `backupPath === ''`).
28
+ *
29
+ * Disk-vs-ledger divergence: when the ledger has an entry but the on-disk
30
+ * filename does NOT match `renamedTo`, the engine returns
31
+ * `namespace.ledger.disk_divergence` rather than silently re-applying.
32
+ *
33
+ * Plan: docs/internal/implementation/smi-4588-rename-engine-ledger-install.md §1.
34
+ */
35
+ import * as fs from 'node:fs/promises';
36
+ import * as path from 'node:path';
37
+ import { getBackupsDir } from '../tools/install.conflict-helpers.js';
38
+ import { appendOverride, findOverride, readLedger, writeLedger } from './namespace-overrides.js';
39
+ import { actionToKind, buildSummary, computeDestPath, deriveSkillId, fsErr, pathExists, runBackup, } from './rename-engine.apply-paths.js';
40
+ import { rewriteFrontmatterName } from './rename-engine.helpers.js';
41
+ export { generateSuggestionChain } from './suggestion-chain.js';
42
+ /**
43
+ * Public summary prefix used by the agent / CLI to detect inline revert
44
+ * messages. Matches plan §1 decision #10 verbatim.
45
+ */
46
+ export const REVERT_SUMMARY_PREFIX = 'Renamed';
47
+ /**
48
+ * Apply (or revert) a rename. Single entrypoint for Wave 4's MCP tool.
49
+ * Each apply path runs: idempotency check → backup → mutate → ledger
50
+ * append → result. Revert: ledger lookup → inverse rename → ledger
51
+ * remove → result.
52
+ *
53
+ * Idempotency contract: re-applying the same suggestion when the ledger
54
+ * already records it AND on-disk state matches → returns success with
55
+ * `fromPath === toPath` and `backupPath === ''` (no second backup).
56
+ *
57
+ * Disk-vs-ledger divergence: ledger entry exists but on-disk path does
58
+ * NOT match `renamedTo` → `namespace.ledger.disk_divergence` error;
59
+ * caller decides whether to `customName` over the divergence.
60
+ */
61
+ export async function applyRename(input) {
62
+ const { suggestion, request } = input;
63
+ const auditId = request.auditId;
64
+ if (request.action === 'revert') {
65
+ return revertRename(suggestion, auditId);
66
+ }
67
+ const newName = request.customName ?? suggestion.suggested;
68
+ const skillId = deriveSkillId(suggestion);
69
+ const action = suggestion.applyAction;
70
+ const kind = actionToKind(action);
71
+ const ledger = await readLedger();
72
+ // Idempotency / divergence check: do we already have a ledger entry for
73
+ // this `(skillId, kind, originalIdentifier)`?
74
+ const existing = findOverride(ledger, {
75
+ skillId,
76
+ kind,
77
+ originalIdentifier: suggestion.currentName,
78
+ });
79
+ if (existing) {
80
+ const onDiskMatches = await pathExists(existing.renamedPath);
81
+ if (onDiskMatches) {
82
+ // Idempotent no-op. Return success without touching disk or ledger.
83
+ return {
84
+ success: true,
85
+ collisionId: suggestion.collisionId,
86
+ appliedAction: action,
87
+ appliedRequest: 'apply',
88
+ fromPath: existing.renamedPath,
89
+ toPath: existing.renamedPath,
90
+ backupPath: '',
91
+ ledgerEntryId: existing.id,
92
+ summary: buildSummary(suggestion.currentName, existing.renamedTo, auditId, 'apply'),
93
+ };
94
+ }
95
+ // Divergence — ledger says renamedTo, but it's not on disk. Refuse.
96
+ return {
97
+ success: false,
98
+ collisionId: suggestion.collisionId,
99
+ appliedAction: action,
100
+ appliedRequest: 'apply',
101
+ fromPath: suggestion.entry.source_path,
102
+ toPath: '',
103
+ backupPath: '',
104
+ ledgerEntryId: '',
105
+ summary: '',
106
+ error: {
107
+ kind: 'namespace.ledger.disk_divergence',
108
+ ledgerRenamedTo: existing.renamedTo,
109
+ onDisk: suggestion.entry.source_path,
110
+ message: `ledger records rename to ${existing.renamedTo} but no file at ${existing.renamedPath}`,
111
+ remediationHint: 're-run skill_inventory_audit and reapply, or call apply_namespace_rename with customName to overwrite the ledger entry',
112
+ },
113
+ };
114
+ }
115
+ // Compute destination + verify it doesn't already exist (other than as
116
+ // the source for an idempotent no-op handled above).
117
+ const destPath = computeDestPath(suggestion, newName);
118
+ if (destPath !== suggestion.entry.source_path && (await pathExists(destPath))) {
119
+ return {
120
+ success: false,
121
+ collisionId: suggestion.collisionId,
122
+ appliedAction: action,
123
+ appliedRequest: 'apply',
124
+ fromPath: suggestion.entry.source_path,
125
+ toPath: destPath,
126
+ backupPath: '',
127
+ ledgerEntryId: '',
128
+ summary: '',
129
+ error: {
130
+ kind: 'namespace.rename.target_exists',
131
+ target: destPath,
132
+ message: `rename target already exists: ${destPath}`,
133
+ },
134
+ };
135
+ }
136
+ // Backup before any mutation.
137
+ let backupPath;
138
+ try {
139
+ backupPath = await runBackup(suggestion);
140
+ }
141
+ catch (err) {
142
+ return {
143
+ success: false,
144
+ collisionId: suggestion.collisionId,
145
+ appliedAction: action,
146
+ appliedRequest: 'apply',
147
+ fromPath: suggestion.entry.source_path,
148
+ toPath: destPath,
149
+ backupPath: '',
150
+ ledgerEntryId: '',
151
+ summary: '',
152
+ error: {
153
+ kind: 'namespace.rename.backup_failed',
154
+ reason: err.message,
155
+ message: `backup failed: ${err.message}`,
156
+ },
157
+ };
158
+ }
159
+ // Mutate. For skill dirs: rewrite SKILL.md frontmatter, then rename the
160
+ // directory. For command/agent: just rename.
161
+ try {
162
+ if (action === 'rename_skill_dir_and_frontmatter') {
163
+ const skillMdPath = path.join(suggestion.entry.source_path, 'SKILL.md');
164
+ let original;
165
+ try {
166
+ original = await fs.readFile(skillMdPath, 'utf-8');
167
+ }
168
+ catch (err) {
169
+ return {
170
+ success: false,
171
+ collisionId: suggestion.collisionId,
172
+ appliedAction: action,
173
+ appliedRequest: 'apply',
174
+ fromPath: suggestion.entry.source_path,
175
+ toPath: destPath,
176
+ backupPath,
177
+ ledgerEntryId: '',
178
+ summary: '',
179
+ error: fsErr(`reading SKILL.md: ${err.message}`),
180
+ };
181
+ }
182
+ const rewriteResult = rewriteFrontmatterName(original, newName);
183
+ if (!rewriteResult.ok) {
184
+ return {
185
+ success: false,
186
+ collisionId: suggestion.collisionId,
187
+ appliedAction: action,
188
+ appliedRequest: 'apply',
189
+ fromPath: suggestion.entry.source_path,
190
+ toPath: destPath,
191
+ backupPath,
192
+ ledgerEntryId: '',
193
+ summary: '',
194
+ error: {
195
+ kind: 'namespace.rename.frontmatter_rewrite_failed',
196
+ reason: rewriteResult.error.message,
197
+ message: `frontmatter rewrite failed: ${rewriteResult.error.message}`,
198
+ },
199
+ };
200
+ }
201
+ await fs.writeFile(skillMdPath, rewriteResult.content, 'utf-8');
202
+ await fs.rename(suggestion.entry.source_path, destPath);
203
+ }
204
+ else {
205
+ await fs.rename(suggestion.entry.source_path, destPath);
206
+ }
207
+ }
208
+ catch (err) {
209
+ return {
210
+ success: false,
211
+ collisionId: suggestion.collisionId,
212
+ appliedAction: action,
213
+ appliedRequest: 'apply',
214
+ fromPath: suggestion.entry.source_path,
215
+ toPath: destPath,
216
+ backupPath,
217
+ ledgerEntryId: '',
218
+ summary: '',
219
+ error: fsErr(err.message),
220
+ };
221
+ }
222
+ // Append ledger entry + persist.
223
+ const updated = appendOverride(ledger, {
224
+ skillId,
225
+ kind,
226
+ originalIdentifier: suggestion.currentName,
227
+ renamedTo: newName,
228
+ originalPath: suggestion.entry.source_path,
229
+ renamedPath: destPath,
230
+ auditId,
231
+ reason: suggestion.reason,
232
+ });
233
+ // `appendOverride` returns reference-equal ledger when a duplicate
234
+ // exists. Fresh appends produce a non-equal copy. Either way, persist
235
+ // the updated state.
236
+ if (updated !== ledger) {
237
+ await writeLedger(updated);
238
+ }
239
+ const newEntry = updated === ledger
240
+ ? findOverride(updated, {
241
+ skillId,
242
+ kind,
243
+ originalIdentifier: suggestion.currentName,
244
+ })
245
+ : updated.overrides[updated.overrides.length - 1];
246
+ return {
247
+ success: true,
248
+ collisionId: suggestion.collisionId,
249
+ appliedAction: action,
250
+ appliedRequest: 'apply',
251
+ fromPath: suggestion.entry.source_path,
252
+ toPath: destPath,
253
+ backupPath,
254
+ ledgerEntryId: newEntry?.id ?? '',
255
+ summary: buildSummary(suggestion.currentName, newName, auditId, 'apply'),
256
+ };
257
+ }
258
+ /**
259
+ * Inverse of `applyRename`. Looks up the ledger entry by `auditId`,
260
+ * renames the file back to `originalIdentifier`, and removes the ledger
261
+ * entry. Backup is kept for forensics until the 30-day GC sweep.
262
+ *
263
+ * Idempotency: calling revert twice on the same `auditId` returns success
264
+ * with `fromPath === toPath` on the second call (the entry is gone, so
265
+ * we treat it as a no-op success).
266
+ */
267
+ async function revertRename(suggestion, auditId) {
268
+ const ledger = await readLedger();
269
+ const entry = ledger.overrides.find((o) => o.auditId === auditId);
270
+ if (!entry) {
271
+ // Idempotent no-op — already reverted.
272
+ return {
273
+ success: true,
274
+ collisionId: suggestion.collisionId,
275
+ appliedAction: suggestion.applyAction,
276
+ appliedRequest: 'revert',
277
+ fromPath: suggestion.entry.source_path,
278
+ toPath: suggestion.entry.source_path,
279
+ backupPath: '',
280
+ ledgerEntryId: '',
281
+ summary: buildSummary(suggestion.currentName, suggestion.currentName, auditId, 'revert'),
282
+ };
283
+ }
284
+ const action = suggestion.applyAction;
285
+ const onDisk = entry.renamedPath;
286
+ const target = entry.originalPath;
287
+ if (!(await pathExists(onDisk))) {
288
+ return {
289
+ success: false,
290
+ collisionId: suggestion.collisionId,
291
+ appliedAction: action,
292
+ appliedRequest: 'revert',
293
+ fromPath: onDisk,
294
+ toPath: target,
295
+ backupPath: '',
296
+ ledgerEntryId: entry.id,
297
+ summary: '',
298
+ error: {
299
+ kind: 'namespace.ledger.disk_divergence',
300
+ ledgerRenamedTo: entry.renamedTo,
301
+ onDisk,
302
+ message: `revert source missing on disk: ${onDisk}`,
303
+ remediationHint: 'restore from ~/.claude/skills/.backups or remove the ledger entry manually',
304
+ },
305
+ };
306
+ }
307
+ if (target !== onDisk && (await pathExists(target))) {
308
+ return {
309
+ success: false,
310
+ collisionId: suggestion.collisionId,
311
+ appliedAction: action,
312
+ appliedRequest: 'revert',
313
+ fromPath: onDisk,
314
+ toPath: target,
315
+ backupPath: '',
316
+ ledgerEntryId: entry.id,
317
+ summary: '',
318
+ error: {
319
+ kind: 'namespace.rename.target_exists',
320
+ target,
321
+ message: `revert target already exists: ${target}`,
322
+ },
323
+ };
324
+ }
325
+ // Inverse rename. For skills, also restore the SKILL.md frontmatter
326
+ // `name:` field to the original identifier. Backup is kept (forensics);
327
+ // no fresh backup is taken on revert — the apply backup covers this case.
328
+ try {
329
+ if (action === 'rename_skill_dir_and_frontmatter') {
330
+ const skillMdPath = path.join(onDisk, 'SKILL.md');
331
+ const current = await fs.readFile(skillMdPath, 'utf-8');
332
+ const restored = rewriteFrontmatterName(current, entry.originalIdentifier);
333
+ if (!restored.ok) {
334
+ return {
335
+ success: false,
336
+ collisionId: suggestion.collisionId,
337
+ appliedAction: action,
338
+ appliedRequest: 'revert',
339
+ fromPath: onDisk,
340
+ toPath: target,
341
+ backupPath: '',
342
+ ledgerEntryId: entry.id,
343
+ summary: '',
344
+ error: {
345
+ kind: 'namespace.rename.frontmatter_rewrite_failed',
346
+ reason: restored.error.message,
347
+ message: `revert frontmatter rewrite failed: ${restored.error.message}`,
348
+ },
349
+ };
350
+ }
351
+ await fs.writeFile(skillMdPath, restored.content, 'utf-8');
352
+ await fs.rename(onDisk, target);
353
+ }
354
+ else {
355
+ await fs.rename(onDisk, target);
356
+ }
357
+ }
358
+ catch (err) {
359
+ return {
360
+ success: false,
361
+ collisionId: suggestion.collisionId,
362
+ appliedAction: action,
363
+ appliedRequest: 'revert',
364
+ fromPath: onDisk,
365
+ toPath: target,
366
+ backupPath: '',
367
+ ledgerEntryId: entry.id,
368
+ summary: '',
369
+ error: fsErr(err.message),
370
+ };
371
+ }
372
+ // Remove the ledger entry.
373
+ const filtered = {
374
+ version: ledger.version,
375
+ overrides: ledger.overrides.filter((o) => o.id !== entry.id),
376
+ };
377
+ await writeLedger(filtered);
378
+ return {
379
+ success: true,
380
+ collisionId: suggestion.collisionId,
381
+ appliedAction: action,
382
+ appliedRequest: 'revert',
383
+ fromPath: onDisk,
384
+ toPath: target,
385
+ backupPath: '',
386
+ ledgerEntryId: entry.id,
387
+ summary: buildSummary(entry.renamedTo, entry.originalIdentifier, auditId, 'revert'),
388
+ };
389
+ }
390
+ // Re-export `getBackupsDir` so downstream tooling (Wave 4) can resolve the
391
+ // backup directory without reaching into `tools/install.conflict-helpers.js`.
392
+ export { getBackupsDir };
393
+ //# sourceMappingURL=rename-engine.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"rename-engine.js","sourceRoot":"","sources":["../../../src/audit/rename-engine.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,157 @@
1
+ /**
2
+ * @fileoverview Type vocabulary for the rename engine
3
+ * (SMI-4588 Wave 2 Steps 2-4, PR #2).
4
+ * @module @skillsmith/mcp-server/audit/rename-engine.types
5
+ *
6
+ * Defines the public surface for `generateSuggestionChain`, `applyRename`,
7
+ * and the `apply | revert` action discriminator. The shapes here are the
8
+ * canonical replacement for `RenameSuggestionRef` shipped in
9
+ * `namespace-audit.types.ts` PR #1 — the structural shape is preserved so
10
+ * the swap-in is a drop-in replacement.
11
+ *
12
+ * Plan: docs/internal/implementation/smi-4588-rename-engine-ledger-install.md §1.
13
+ */
14
+ import type { CollisionId, InventoryEntry } from './collision-detector.types.js';
15
+ /**
16
+ * Three on-disk apply paths. Each maps to a distinct mutation strategy:
17
+ *
18
+ * - `rename_command_file` — `~/.claude/commands/foo.md` → `~/.claude/commands/<author>-foo.md`
19
+ * - `rename_agent_file` — `~/.claude/agents/foo.md` → `~/.claude/agents/<author>-foo.md`
20
+ * - `rename_skill_dir_and_frontmatter` — rename the directory AND rewrite the
21
+ * `name:` field inside SKILL.md frontmatter.
22
+ */
23
+ export type RenameAction = 'rename_command_file' | 'rename_agent_file' | 'rename_skill_dir_and_frontmatter';
24
+ /**
25
+ * One concrete rename suggestion attached to a detected collision. PR #1's
26
+ * `RenameSuggestionRef` shim in `namespace-audit.types.ts` is structurally
27
+ * compatible with this shape; PR #2 replaces the shim with this canonical
28
+ * type.
29
+ *
30
+ * Wave 4's `apply_namespace_rename` MCP tool accepts a `RenameSuggestion`
31
+ * (or a `customName` override) plus an action discriminator and dispatches
32
+ * to `applyRename`.
33
+ */
34
+ export interface RenameSuggestion {
35
+ /** Stable across audit runs — derived via `deriveCollisionId`. */
36
+ collisionId: CollisionId;
37
+ /** The inventory entry whose identifier collides. */
38
+ entry: InventoryEntry;
39
+ /** Current on-disk identifier (filename without `.md`, or skill name). */
40
+ currentName: string;
41
+ /**
42
+ * First non-colliding candidate from `generateSuggestionChain`. Walking
43
+ * the chain (and selecting alternatives on collision) is the agent's job;
44
+ * `suggested` is the chain's first viable rename.
45
+ */
46
+ suggested: string;
47
+ /** Which on-disk mutation strategy applies. */
48
+ applyAction: RenameAction;
49
+ /** Human-readable, e.g. `"collision with skillsmith/release-tools /ship"`. */
50
+ reason: string;
51
+ }
52
+ /**
53
+ * Action discriminator for `applyRename`. PR #2 ships `apply` + `revert`;
54
+ * `customName` (caller supplies override) lands in PR #3 alongside the
55
+ * install-integration plumbing.
56
+ */
57
+ export type RenameActionRequest = {
58
+ action: 'apply';
59
+ auditId: string;
60
+ customName?: string;
61
+ } | {
62
+ action: 'revert';
63
+ auditId: string;
64
+ };
65
+ /**
66
+ * Top-level apply request. `auditId` is the FK into the audit-history
67
+ * `~/.skillsmith/audits/<auditId>/result.json` so forensic lookups can
68
+ * re-derive the original collision context.
69
+ */
70
+ export interface ApplyRenameRequest {
71
+ /** Suggestion produced by `generateRenameSuggestions` / chain walk. */
72
+ suggestion: RenameSuggestion;
73
+ /** `apply` (forward rename) or `revert` (inverse, by ledger lookup). */
74
+ request: RenameActionRequest;
75
+ }
76
+ /**
77
+ * Result of a rename apply (or revert). `success === false` populates
78
+ * `error` with a typed discriminator; `success === true` populates the
79
+ * ledger linkage + on-disk paths + the inline revert summary.
80
+ *
81
+ * Idempotent re-apply on the same `(skillId, originalIdentifier)` pair is
82
+ * indicated by `fromPath === toPath` and `backupPath === ''` — callers may
83
+ * detect a no-op without re-reading the ledger.
84
+ */
85
+ export interface ApplyRenameResult {
86
+ success: boolean;
87
+ collisionId: CollisionId;
88
+ appliedAction: RenameAction;
89
+ /** Action that ran — useful when `request.action === 'revert'`. */
90
+ appliedRequest: RenameActionRequest['action'];
91
+ /** Pre-mutation absolute path. */
92
+ fromPath: string;
93
+ /** Post-mutation absolute path. Equal to `fromPath` for idempotent no-ops. */
94
+ toPath: string;
95
+ /**
96
+ * Backup directory created by `createSkillBackup`. Empty string when the
97
+ * call was a no-op (idempotent re-apply) — no backup is created in that
98
+ * case because the on-disk state already matches the ledger.
99
+ */
100
+ backupPath: string;
101
+ /** ULID of the appended ledger entry — `''` for revert (ledger entry removed). */
102
+ ledgerEntryId: string;
103
+ /**
104
+ * Inline revert summary (decision #10). Populated on success; empty
105
+ * string on failure. Literal text:
106
+ *
107
+ * `"Renamed /<OLD> → /<NEW>. To undo: sklx audit revert <auditId>"`
108
+ *
109
+ * The agent surfaces this directly to the user in tool-response output.
110
+ */
111
+ summary: string;
112
+ /** Discriminated error on failure; `undefined` on success. */
113
+ error?: RenameError;
114
+ }
115
+ /**
116
+ * Typed errors surfaced by `applyRename`. Discriminated by `kind` so
117
+ * callers `switch` rather than parsing strings. Plan §1.
118
+ */
119
+ export type RenameError = {
120
+ kind: 'namespace.rename.target_exists';
121
+ target: string;
122
+ message: string;
123
+ } | {
124
+ kind: 'namespace.rename.backup_failed';
125
+ reason: string;
126
+ message: string;
127
+ } | {
128
+ kind: 'namespace.rename.frontmatter_rewrite_failed';
129
+ reason: string;
130
+ message: string;
131
+ } | {
132
+ kind: 'namespace.rename.fs_error';
133
+ reason: string;
134
+ message: string;
135
+ } | {
136
+ kind: 'namespace.ledger.disk_divergence';
137
+ ledgerRenamedTo: string;
138
+ onDisk: string;
139
+ message: string;
140
+ remediationHint: string;
141
+ } | {
142
+ kind: 'namespace.rename.revert_not_found';
143
+ auditId: string;
144
+ message: string;
145
+ };
146
+ /**
147
+ * Output of `generateSuggestionChain`. Up to 3 ordered candidates; if all
148
+ * three collide, `exhausted: true` and the agent must escalate to the
149
+ * human via `customName`.
150
+ */
151
+ export interface SuggestionChain {
152
+ /** Up to 3 ordered candidates per decision #11. */
153
+ candidates: string[];
154
+ /** `true` when all 3 candidates collide. */
155
+ exhausted: boolean;
156
+ }
157
+ //# sourceMappingURL=rename-engine.types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"rename-engine.types.d.ts","sourceRoot":"","sources":["../../../src/audit/rename-engine.types.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAEH,OAAO,KAAK,EAAE,WAAW,EAAE,cAAc,EAAE,MAAM,+BAA+B,CAAA;AAEhF;;;;;;;GAOG;AACH,MAAM,MAAM,YAAY,GACpB,qBAAqB,GACrB,mBAAmB,GACnB,kCAAkC,CAAA;AAEtC;;;;;;;;;GASG;AACH,MAAM,WAAW,gBAAgB;IAC/B,kEAAkE;IAClE,WAAW,EAAE,WAAW,CAAA;IACxB,qDAAqD;IACrD,KAAK,EAAE,cAAc,CAAA;IACrB,0EAA0E;IAC1E,WAAW,EAAE,MAAM,CAAA;IACnB;;;;OAIG;IACH,SAAS,EAAE,MAAM,CAAA;IACjB,+CAA+C;IAC/C,WAAW,EAAE,YAAY,CAAA;IACzB,8EAA8E;IAC9E,MAAM,EAAE,MAAM,CAAA;CACf;AAED;;;;GAIG;AACH,MAAM,MAAM,mBAAmB,GAC3B;IAAE,MAAM,EAAE,OAAO,CAAC;IAAC,OAAO,EAAE,MAAM,CAAC;IAAC,UAAU,CAAC,EAAE,MAAM,CAAA;CAAE,GACzD;IAAE,MAAM,EAAE,QAAQ,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,CAAA;AAEzC;;;;GAIG;AACH,MAAM,WAAW,kBAAkB;IACjC,uEAAuE;IACvE,UAAU,EAAE,gBAAgB,CAAA;IAC5B,wEAAwE;IACxE,OAAO,EAAE,mBAAmB,CAAA;CAC7B;AAED;;;;;;;;GAQG;AACH,MAAM,WAAW,iBAAiB;IAChC,OAAO,EAAE,OAAO,CAAA;IAChB,WAAW,EAAE,WAAW,CAAA;IACxB,aAAa,EAAE,YAAY,CAAA;IAC3B,mEAAmE;IACnE,cAAc,EAAE,mBAAmB,CAAC,QAAQ,CAAC,CAAA;IAC7C,kCAAkC;IAClC,QAAQ,EAAE,MAAM,CAAA;IAChB,8EAA8E;IAC9E,MAAM,EAAE,MAAM,CAAA;IACd;;;;OAIG;IACH,UAAU,EAAE,MAAM,CAAA;IAClB,kFAAkF;IAClF,aAAa,EAAE,MAAM,CAAA;IACrB;;;;;;;OAOG;IACH,OAAO,EAAE,MAAM,CAAA;IACf,8DAA8D;IAC9D,KAAK,CAAC,EAAE,WAAW,CAAA;CACpB;AAED;;;GAGG;AACH,MAAM,MAAM,WAAW,GACnB;IACE,IAAI,EAAE,gCAAgC,CAAA;IACtC,MAAM,EAAE,MAAM,CAAA;IACd,OAAO,EAAE,MAAM,CAAA;CAChB,GACD;IACE,IAAI,EAAE,gCAAgC,CAAA;IACtC,MAAM,EAAE,MAAM,CAAA;IACd,OAAO,EAAE,MAAM,CAAA;CAChB,GACD;IACE,IAAI,EAAE,6CAA6C,CAAA;IACnD,MAAM,EAAE,MAAM,CAAA;IACd,OAAO,EAAE,MAAM,CAAA;CAChB,GACD;IACE,IAAI,EAAE,2BAA2B,CAAA;IACjC,MAAM,EAAE,MAAM,CAAA;IACd,OAAO,EAAE,MAAM,CAAA;CAChB,GACD;IACE,IAAI,EAAE,kCAAkC,CAAA;IACxC,eAAe,EAAE,MAAM,CAAA;IACvB,MAAM,EAAE,MAAM,CAAA;IACd,OAAO,EAAE,MAAM,CAAA;IACf,eAAe,EAAE,MAAM,CAAA;CACxB,GACD;IACE,IAAI,EAAE,mCAAmC,CAAA;IACzC,OAAO,EAAE,MAAM,CAAA;IACf,OAAO,EAAE,MAAM,CAAA;CAChB,CAAA;AAEL;;;;GAIG;AACH,MAAM,WAAW,eAAe;IAC9B,mDAAmD;IACnD,UAAU,EAAE,MAAM,EAAE,CAAA;IACpB,4CAA4C;IAC5C,SAAS,EAAE,OAAO,CAAA;CACnB"}
@@ -0,0 +1,15 @@
1
+ /**
2
+ * @fileoverview Type vocabulary for the rename engine
3
+ * (SMI-4588 Wave 2 Steps 2-4, PR #2).
4
+ * @module @skillsmith/mcp-server/audit/rename-engine.types
5
+ *
6
+ * Defines the public surface for `generateSuggestionChain`, `applyRename`,
7
+ * and the `apply | revert` action discriminator. The shapes here are the
8
+ * canonical replacement for `RenameSuggestionRef` shipped in
9
+ * `namespace-audit.types.ts` PR #1 — the structural shape is preserved so
10
+ * the swap-in is a drop-in replacement.
11
+ *
12
+ * Plan: docs/internal/implementation/smi-4588-rename-engine-ledger-install.md §1.
13
+ */
14
+ export {};
15
+ //# sourceMappingURL=rename-engine.types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"rename-engine.types.js","sourceRoot":"","sources":["../../../src/audit/rename-engine.types.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG"}