@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,251 @@
1
+ /**
2
+ * @fileoverview `claudeCodeAdapter` — v1 implementation of `FrameworkAdapter`.
3
+ * Wraps Wave 1's `scanLocalInventory`, Wave 2's `applyRename`,
4
+ * and Wave 3's `applyRecommendedEdit` behind a uniform seam.
5
+ * @module @skillsmith/mcp-server/audit/framework-adapter
6
+ *
7
+ * Plan: docs/internal/implementation/smi-4590-cli-mcp-framework-adapter.md §5.
8
+ *
9
+ * v1 contract (Claude-Code only):
10
+ * - `scanPaths` delegates to `scanLocalInventory` and returns `entries[]`.
11
+ * - `applyAction({kind:'rename'})` is REFUSED — a thin {from, to} pair
12
+ * cannot reconstruct the `InventoryEntry` Wave 2's `applyRename`
13
+ * needs (kind discriminator, identifier, source_path), and a raw
14
+ * `fs.rename` would bypass the backup + namespace ledger and leave
15
+ * the user without a revert path. Callers must use the
16
+ * `applyRename(entry, newName, { auditId })` convenience wrapper.
17
+ * The bare `{kind:'rename'}` shape stays in the union as a forward-
18
+ * compat surface for v2 adapters that own their own audit-history.
19
+ * - `applyAction({kind:'inline-edit', searchMode:'literal'})` translates
20
+ * the action into a Wave 3 `RecommendedEdit` and dispatches to
21
+ * `applyRecommendedEdit`. Requires `action.auditId` + `action.pattern`;
22
+ * missing context throws `namespace.adapter.missing_context`.
23
+ * - `applyAction({kind:'inline-edit', searchMode:'regex'})` throws the
24
+ * typed error `namespace.adapter.unsupported_search_mode`. Reserved
25
+ * for v2 cursorAdapter.
26
+ * - Convenience wrappers `applyRename` + `applyEdit` build the right
27
+ * `AdapterAction` shape from inventory/edit context and call
28
+ * `applyAction`. They do NOT re-implement Wave 2/3 — the rename
29
+ * wrapper goes through Wave 2's full path (backup + ledger), and the
30
+ * edit wrapper goes through Wave 3's `applyRecommendedEdit`.
31
+ */
32
+ import * as fs from 'node:fs/promises';
33
+ import { newAuditId, deriveCollisionId } from './audit-history.js';
34
+ import { applyRecommendedEdit, APPLY_TEMPLATE_REGISTRY } from './edit-applier.js';
35
+ import { applyRename as applyRenameEngine } from './rename-engine.js';
36
+ import { scanLocalInventory } from '../utils/local-inventory.js';
37
+ /**
38
+ * Typed error class for adapter-layer failures. Callers `switch` on
39
+ * `kind` to branch on the failure mode without parsing strings.
40
+ */
41
+ export class FrameworkAdapterError extends Error {
42
+ kind;
43
+ /**
44
+ * For `'subcall_failed'`, carries the inner typed-error `kind` from
45
+ * Wave 2 (`RenameError`) or Wave 3 (`EditApplyError`) so callers can
46
+ * `switch` on it without parsing strings.
47
+ */
48
+ innerKind;
49
+ constructor(kind, message, innerKind) {
50
+ super(message);
51
+ this.name = 'FrameworkAdapterError';
52
+ this.kind = kind;
53
+ this.innerKind = innerKind;
54
+ }
55
+ }
56
+ /**
57
+ * Map an `InventoryEntry.kind` to the Wave 2 `RenameAction` discriminator.
58
+ */
59
+ function inventoryKindToRenameAction(entry) {
60
+ switch (entry.kind) {
61
+ case 'command':
62
+ return 'rename_command_file';
63
+ case 'agent':
64
+ return 'rename_agent_file';
65
+ case 'skill':
66
+ return 'rename_skill_dir_and_frontmatter';
67
+ case 'claude_md_rule':
68
+ // CLAUDE.md trigger lines are not file-renamable — the inline-edit
69
+ // path is the right surface for them. Reject so callers cannot
70
+ // accidentally pass a `claude_md_rule` entry into the rename flow.
71
+ throw new FrameworkAdapterError('namespace.adapter.unsupported_action', `inventory kind "claude_md_rule" cannot be renamed; use applyEdit instead`);
72
+ default: {
73
+ const exhaustive = entry.kind;
74
+ throw new FrameworkAdapterError('namespace.adapter.unsupported_action', `unknown inventory kind: ${String(exhaustive)}`);
75
+ }
76
+ }
77
+ }
78
+ /**
79
+ * Translate an `InlineEditAction` (literal mode) into a Wave 3
80
+ * `RecommendedEdit`. Locates the literal `search` substring in the file
81
+ * and computes a 1-indexed inclusive line range covering it.
82
+ *
83
+ * Throws if `search` is absent from the file or appears more than once
84
+ * (Wave 3's stale-before guard requires byte-for-byte exact match at
85
+ * the recorded `lineRange`).
86
+ */
87
+ async function buildRecommendedEditFromInlineEdit(action) {
88
+ if (!action.auditId) {
89
+ throw new FrameworkAdapterError('namespace.adapter.missing_context', `inline-edit dispatch requires action.auditId for v1 claudeCodeAdapter`);
90
+ }
91
+ if (!action.pattern) {
92
+ throw new FrameworkAdapterError('namespace.adapter.missing_context', `inline-edit dispatch requires action.pattern for v1 claudeCodeAdapter`);
93
+ }
94
+ if (!APPLY_TEMPLATE_REGISTRY.has(action.pattern)) {
95
+ throw new FrameworkAdapterError('namespace.adapter.template_not_in_apply_registry', `template pattern "${action.pattern}" is not in APPLY_TEMPLATE_REGISTRY`);
96
+ }
97
+ const fileContent = await fs.readFile(action.filePath, 'utf-8');
98
+ const firstIndex = fileContent.indexOf(action.search);
99
+ if (firstIndex < 0) {
100
+ throw new FrameworkAdapterError('namespace.adapter.search_not_found', `literal search string not found in ${action.filePath}`);
101
+ }
102
+ const secondIndex = fileContent.indexOf(action.search, firstIndex + 1);
103
+ if (secondIndex >= 0) {
104
+ throw new FrameworkAdapterError('namespace.adapter.search_not_unique', `literal search string occurs more than once in ${action.filePath}; refusing to mutate`);
105
+ }
106
+ // Compute 1-indexed inclusive line range covering the match. Wave 3's
107
+ // applier uses line-based slicing (`fileLines.slice(start-1, end).join('\n')`
108
+ // must equal `before`), so we expand the substring search to the full
109
+ // line(s) it sits on and replace within those lines.
110
+ const fileLines = fileContent.split('\n');
111
+ // UTF-16 code-unit offsets (matches `String.indexOf` semantics) for
112
+ // the start of each line. Not byte offsets — for ASCII content the
113
+ // two coincide, but multi-byte glyphs (em dashes, emoji) make the
114
+ // distinction load-bearing if this is ever consumed as a byte index.
115
+ const lineStartOffsets = [0];
116
+ for (let i = 0; i < fileLines.length - 1; i++) {
117
+ // +1 for the consumed '\n' separator
118
+ lineStartOffsets.push(lineStartOffsets[i] + fileLines[i].length + 1);
119
+ }
120
+ // Locate the start line for `firstIndex`.
121
+ let startLine = 1;
122
+ for (let i = lineStartOffsets.length - 1; i >= 0; i--) {
123
+ if (firstIndex >= lineStartOffsets[i]) {
124
+ startLine = i + 1;
125
+ break;
126
+ }
127
+ }
128
+ // The match may span multiple lines if `search` contains '\n'.
129
+ const matchLineCount = action.search.split('\n').length;
130
+ const endLine = startLine + matchLineCount - 1;
131
+ // Whole-line `before` = the lines covering the substring match.
132
+ const beforeLines = fileLines.slice(startLine - 1, endLine).join('\n');
133
+ // Whole-line `after` = same lines with `search` substituted for `replace`.
134
+ const afterLines = beforeLines.replace(action.search, action.replace);
135
+ // collisionId is derived from auditId + filePath (single-entry adapter
136
+ // dispatch). Use a synthetic single-entry InventoryEntry shape solely
137
+ // to feed `deriveCollisionId`'s sorted-paths input — the resulting
138
+ // CollisionId is opaque to the caller and stable for the same
139
+ // (auditId, filePath) pair.
140
+ const collisionId = deriveCollisionId(action.auditId, [
141
+ {
142
+ kind: 'claude_md_rule',
143
+ source_path: action.filePath,
144
+ identifier: action.search.slice(0, 64),
145
+ triggerSurface: [],
146
+ },
147
+ ]);
148
+ return {
149
+ collisionId,
150
+ category: 'description_overlap',
151
+ pattern: action.pattern,
152
+ filePath: action.filePath,
153
+ lineRange: { start: startLine, end: endLine },
154
+ before: beforeLines,
155
+ after: afterLines,
156
+ rationale: 'inline-edit dispatched via claudeCodeAdapter.applyAction (literal-mode translation)',
157
+ applyAction: 'recommended_edit',
158
+ applyMode: 'apply_with_confirmation',
159
+ otherEntry: { identifier: '', sourcePath: '' },
160
+ };
161
+ }
162
+ /**
163
+ * v1 implementation of `FrameworkAdapter` for Claude-Code.
164
+ */
165
+ export const claudeCodeAdapter = {
166
+ name: 'claude-code',
167
+ describesFiles: () => [
168
+ '~/.claude/skills/*/SKILL.md',
169
+ '~/.claude/commands/*.md',
170
+ '~/.claude/agents/*.md',
171
+ '~/.claude/CLAUDE.md',
172
+ '<project>/CLAUDE.md',
173
+ ],
174
+ scanPaths: async (homeDir, projectDir) => {
175
+ const result = await scanLocalInventory({ homeDir, projectDir });
176
+ return result.entries;
177
+ },
178
+ applyAction: async (action) => {
179
+ if (action.kind === 'rename') {
180
+ // v1 Claude-Code refuses bare `applyAction({kind:'rename'})` — a
181
+ // raw `fs.rename` would bypass Wave 2's backup + namespace
182
+ // ledger, leaving the user without a revert path. Callers must
183
+ // use the `applyRename(entry, newName, { auditId })` convenience
184
+ // wrapper which routes through Wave 2's full flow. The richer
185
+ // entry context (kind discriminator, identifier, source_path)
186
+ // cannot be reconstructed from a thin {from, to} pair.
187
+ throw new FrameworkAdapterError('namespace.adapter.missing_context', `claudeCodeAdapter.applyAction({kind:'rename'}) refused — use applyRename(entry, newName, { auditId }) so the rename is backed up + recorded in the namespace ledger`);
188
+ }
189
+ if (action.kind === 'inline-edit') {
190
+ if (action.searchMode === 'regex') {
191
+ throw new FrameworkAdapterError('namespace.adapter.unsupported_search_mode', `searchMode "regex" not supported by v1 claudeCodeAdapter; reserved for v2 cursorAdapter`);
192
+ }
193
+ // Literal mode: translate to RecommendedEdit + dispatch to Wave 3.
194
+ const edit = await buildRecommendedEditFromInlineEdit(action);
195
+ const result = await applyRecommendedEdit(edit, {
196
+ // narrowed by buildRecommendedEditFromInlineEdit:
197
+ auditId: action.auditId,
198
+ mode: 'apply_with_confirmation',
199
+ });
200
+ if (!result.success) {
201
+ throw new FrameworkAdapterError('namespace.adapter.subcall_failed', `applyRecommendedEdit failed: ${result.error?.message ?? 'unknown'}`, result.error?.kind);
202
+ }
203
+ return;
204
+ }
205
+ // Exhaustiveness guard.
206
+ const exhaustive = action;
207
+ throw new FrameworkAdapterError('namespace.adapter.unsupported_action', `unsupported action shape: ${JSON.stringify(exhaustive)}`);
208
+ },
209
+ applyRename: async (entry, newName, opts) => {
210
+ // Build a minimal RenameSuggestion and call Wave 2's applyRename
211
+ // for the full backup + ledger + atomic rename flow. The
212
+ // collisionId is synthetic (derived from auditId + the single
213
+ // entry's path) — the Wave 2 ledger entry is keyed by
214
+ // (skillId, kind, originalIdentifier), not by collisionId, so
215
+ // a synthetic id is acceptable for adapter-mediated renames.
216
+ const collisionId = deriveCollisionId(opts.auditId, [entry]);
217
+ const suggestion = {
218
+ collisionId,
219
+ entry,
220
+ currentName: entry.identifier,
221
+ suggested: newName,
222
+ applyAction: inventoryKindToRenameAction(entry),
223
+ reason: 'claudeCodeAdapter.applyRename convenience wrapper',
224
+ };
225
+ const result = await applyRenameEngine({
226
+ suggestion,
227
+ request: { action: 'apply', auditId: opts.auditId },
228
+ });
229
+ if (!result.success) {
230
+ throw new FrameworkAdapterError('namespace.adapter.subcall_failed', `applyRename failed: ${result.error?.message ?? 'unknown'}`, result.error?.kind);
231
+ }
232
+ },
233
+ applyEdit: async (edit, opts) => {
234
+ // Convenience wrapper: build an InlineEditAction and dispatch
235
+ // through applyAction so the literal-mode translation path runs
236
+ // its registry guard + uniqueness check uniformly.
237
+ const action = {
238
+ kind: 'inline-edit',
239
+ filePath: edit.filePath,
240
+ search: edit.before,
241
+ replace: edit.after,
242
+ searchMode: 'literal',
243
+ auditId: opts.auditId,
244
+ pattern: edit.pattern,
245
+ };
246
+ await claudeCodeAdapter.applyAction(action);
247
+ },
248
+ };
249
+ // Re-export helpers used by tests + callers.
250
+ export { newAuditId };
251
+ //# sourceMappingURL=framework-adapter.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"framework-adapter.js","sourceRoot":"","sources":["../../../src/audit/framework-adapter.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,162 @@
1
+ /**
2
+ * @fileoverview Type vocabulary for the FrameworkAdapter seam — v1 ships
3
+ * `claude-code` only; v2 reserves `cursor`, `copilot`, `aider`,
4
+ * `continue`, `cline`. Defines `AdapterAction` (discriminated
5
+ * union over `FileRenameAction` + `InlineEditAction`) and the
6
+ * adapter interface.
7
+ * @module @skillsmith/mcp-server/audit/framework-adapter.types
8
+ *
9
+ * Plan: docs/internal/implementation/smi-4590-cli-mcp-framework-adapter.md §1, §5.
10
+ *
11
+ * Why this seam exists (per plan §5): `.cursorrules` (Cursor v2) is a
12
+ * monolithic file with multiple trigger phrases inside a single file; a
13
+ * `FileRenameAction`-only shape would break Cursor support. Shipping
14
+ * `InlineEditAction` from v1 is a forcing function that lets v2 swap in
15
+ * `cursorAdapter` without refactoring call sites.
16
+ *
17
+ * v1 contract (claudeCodeAdapter):
18
+ * - `FileRenameAction` is supported via convenience wrapper `applyRename`
19
+ * which performs the full Wave 2 `applyRename` flow (backup + ledger
20
+ * append + atomic rename). The bare `applyAction({kind:'rename'})`
21
+ * entry point is a raw transport seam (forward-compat for v2 adapters
22
+ * that own their own audit-history); v1 callers should prefer the
23
+ * `applyRename` wrapper which threads `auditId` through correctly.
24
+ * - `InlineEditAction` with `searchMode: 'literal'` translates to a
25
+ * `RecommendedEdit` and dispatches to Wave 3's `applyRecommendedEdit`.
26
+ * - `InlineEditAction` with `searchMode: 'regex'` is rejected with the
27
+ * typed error `namespace.adapter.unsupported_search_mode`. Reserved
28
+ * for v2 cursorAdapter.
29
+ */
30
+ import type { InventoryEntry } from '../utils/local-inventory.types.js';
31
+ import type { RecommendedEdit } from './edit-suggester.types.js';
32
+ /**
33
+ * Set of frameworks the audit pipeline can target. v1 ships `claude-code`
34
+ * exclusively. The v2 reserved values document the intended extension
35
+ * surface — adding a new entry here without a matching adapter
36
+ * implementation is a compile-time signal, not a runtime contract.
37
+ */
38
+ export type FrameworkName = 'claude-code' | 'cursor' | 'copilot' | 'aider' | 'continue' | 'cline';
39
+ /**
40
+ * Rename a single file (or directory + frontmatter for `.claude/skills/`).
41
+ *
42
+ * For Claude-Code, this maps to Wave 2's `applyRename` flow: the caller
43
+ * should normally invoke the `applyRename` convenience wrapper which
44
+ * builds the action from a full `InventoryEntry` + `auditId`. The bare
45
+ * `applyAction({kind:'rename'})` entry is a transport seam — it expects
46
+ * a richer caller-side context to resolve correctly (see `auditId`
47
+ * field).
48
+ */
49
+ export interface FileRenameAction {
50
+ kind: 'rename';
51
+ /** Absolute path (current). */
52
+ from: string;
53
+ /** Absolute path (target). */
54
+ to: string;
55
+ /**
56
+ * FK into `~/.skillsmith/audits/<auditId>/result.json`. Required by
57
+ * v1 Claude-Code adapter so the rename can be traced in the namespace
58
+ * overrides ledger. v2 adapters that own a different audit history
59
+ * may treat this as optional, hence the optional declaration here.
60
+ */
61
+ auditId?: string;
62
+ }
63
+ /**
64
+ * In-place edit at a specific point in a file. Required for monolithic
65
+ * files (`.cursorrules`, freeform CLAUDE.md sections) where renaming
66
+ * the file itself is meaningless — the edit happens at a section.
67
+ *
68
+ * v1 Claude-Code adapter accepts only `searchMode: 'literal'` and
69
+ * translates the action into a Wave 3 `RecommendedEdit` shape before
70
+ * dispatching to `applyRecommendedEdit`. `searchMode: 'regex'` is
71
+ * rejected with `namespace.adapter.unsupported_search_mode`.
72
+ */
73
+ export interface InlineEditAction {
74
+ kind: 'inline-edit';
75
+ /** Absolute path to the file to mutate. */
76
+ filePath: string;
77
+ /**
78
+ * Exact substring (when `searchMode === 'literal'`) or regex source
79
+ * string (when `searchMode === 'regex'`) to locate within the file.
80
+ */
81
+ search: string;
82
+ /** Replacement text. */
83
+ replace: string;
84
+ /**
85
+ * Required. v1 `claudeCodeAdapter` rejects `'regex'` with the typed
86
+ * error `namespace.adapter.unsupported_search_mode`. Future v2
87
+ * `cursorAdapter` supports both modes.
88
+ */
89
+ searchMode: 'literal' | 'regex';
90
+ /**
91
+ * FK into `~/.skillsmith/audits/<auditId>/result.json`. Required by
92
+ * v1 Claude-Code adapter so the edit-applier ledger entry is bound
93
+ * to the originating audit. v2 adapters may treat this as optional,
94
+ * hence the optional declaration here.
95
+ */
96
+ auditId?: string;
97
+ /**
98
+ * The edit-suggester template pattern that produced this action. v1
99
+ * Claude-Code adapter passes this through to Wave 3's
100
+ * `applyRecommendedEdit`, which gates on `APPLY_TEMPLATE_REGISTRY`.
101
+ * Only `'add_domain_qualifier'` is in the registry in v1.
102
+ */
103
+ pattern?: RecommendedEdit['pattern'];
104
+ }
105
+ /**
106
+ * Discriminated union over every adapter action shape. The `kind`
107
+ * literal narrows the union for downstream dispatchers.
108
+ */
109
+ export type AdapterAction = FileRenameAction | InlineEditAction;
110
+ /**
111
+ * Framework adapter — abstracts over `claude-code` (v1), `cursor`,
112
+ * `copilot`, `aider`, `continue`, `cline` (v2). Wave 4's MCP tools,
113
+ * the CLI, and Wave 2's install pre-flight all consume the adapter
114
+ * rather than calling `scanLocalInventory` / `applyRename` /
115
+ * `applyRecommendedEdit` directly. This is the seam that lets v2 swap
116
+ * in `cursorAdapter` without touching call sites.
117
+ */
118
+ export interface FrameworkAdapter {
119
+ name: FrameworkName;
120
+ /** Glob/path examples for transparency in audit reports. */
121
+ describesFiles(): string[];
122
+ /**
123
+ * Scan the framework's relevant filesystem locations for inventory.
124
+ * For `claude-code` this wraps Wave 1's `scanLocalInventory`.
125
+ */
126
+ scanPaths(homeDir: string, projectDir?: string): Promise<InventoryEntry[]>;
127
+ /**
128
+ * Required unified entry point. v1 Claude-Code:
129
+ * - `kind: 'rename'` — REFUSED. A thin {from, to} pair cannot
130
+ * reconstruct the `InventoryEntry` Wave 2's `applyRename` needs;
131
+ * a raw `fs.rename` would bypass the backup + namespace ledger.
132
+ * Callers must use the `applyRename(entry, newName, opts)`
133
+ * convenience wrapper. The shape stays in the union for v2
134
+ * adapters that own their own audit-history.
135
+ * - `kind: 'inline-edit'` with `searchMode: 'literal'` — translates
136
+ * to a `RecommendedEdit` and dispatches to Wave 3
137
+ * `applyRecommendedEdit`. Requires `auditId` + `pattern`.
138
+ * - `kind: 'inline-edit'` with `searchMode: 'regex'` — rejected
139
+ * with `namespace.adapter.unsupported_search_mode`.
140
+ */
141
+ applyAction(action: AdapterAction): Promise<void>;
142
+ /**
143
+ * Convenience wrapper for the common `claude-code` rename flow:
144
+ * builds a `FileRenameAction` and forwards. v1 Claude-Code wraps
145
+ * Wave 2's `applyRename` (full backup + ledger append + atomic
146
+ * rename). Optional on the interface — v2 adapters that don't have
147
+ * a per-file rename concept (Cursor) may omit it.
148
+ */
149
+ applyRename?(entry: InventoryEntry, newName: string, opts: {
150
+ auditId: string;
151
+ }): Promise<void>;
152
+ /**
153
+ * Convenience wrapper for Wave 3's prose-edit surface. v1
154
+ * Claude-Code builds an `InlineEditAction` with
155
+ * `searchMode: 'literal'` from the `RecommendedEdit` shape and
156
+ * forwards to `applyAction`.
157
+ */
158
+ applyEdit?(edit: RecommendedEdit, opts: {
159
+ auditId: string;
160
+ }): Promise<void>;
161
+ }
162
+ //# sourceMappingURL=framework-adapter.types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"framework-adapter.types.d.ts","sourceRoot":"","sources":["../../../src/audit/framework-adapter.types.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA4BG;AAEH,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,mCAAmC,CAAA;AACvE,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,2BAA2B,CAAA;AAEhE;;;;;GAKG;AACH,MAAM,MAAM,aAAa,GACrB,aAAa,GAEb,QAAQ,GACR,SAAS,GACT,OAAO,GACP,UAAU,GACV,OAAO,CAAA;AAEX;;;;;;;;;GASG;AACH,MAAM,WAAW,gBAAgB;IAC/B,IAAI,EAAE,QAAQ,CAAA;IACd,+BAA+B;IAC/B,IAAI,EAAE,MAAM,CAAA;IACZ,8BAA8B;IAC9B,EAAE,EAAE,MAAM,CAAA;IACV;;;;;OAKG;IACH,OAAO,CAAC,EAAE,MAAM,CAAA;CACjB;AAED;;;;;;;;;GASG;AACH,MAAM,WAAW,gBAAgB;IAC/B,IAAI,EAAE,aAAa,CAAA;IACnB,2CAA2C;IAC3C,QAAQ,EAAE,MAAM,CAAA;IAChB;;;OAGG;IACH,MAAM,EAAE,MAAM,CAAA;IACd,wBAAwB;IACxB,OAAO,EAAE,MAAM,CAAA;IACf;;;;OAIG;IACH,UAAU,EAAE,SAAS,GAAG,OAAO,CAAA;IAC/B;;;;;OAKG;IACH,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB;;;;;OAKG;IACH,OAAO,CAAC,EAAE,eAAe,CAAC,SAAS,CAAC,CAAA;CACrC;AAED;;;GAGG;AACH,MAAM,MAAM,aAAa,GAAG,gBAAgB,GAAG,gBAAgB,CAAA;AAE/D;;;;;;;GAOG;AACH,MAAM,WAAW,gBAAgB;IAC/B,IAAI,EAAE,aAAa,CAAA;IACnB,4DAA4D;IAC5D,cAAc,IAAI,MAAM,EAAE,CAAA;IAC1B;;;OAGG;IACH,SAAS,CAAC,OAAO,EAAE,MAAM,EAAE,UAAU,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,cAAc,EAAE,CAAC,CAAA;IAC1E;;;;;;;;;;;;;OAaG;IACH,WAAW,CAAC,MAAM,EAAE,aAAa,GAAG,OAAO,CAAC,IAAI,CAAC,CAAA;IACjD;;;;;;OAMG;IACH,WAAW,CAAC,CAAC,KAAK,EAAE,cAAc,EAAE,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE;QAAE,OAAO,EAAE,MAAM,CAAA;KAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAAA;IAC9F;;;;;OAKG;IACH,SAAS,CAAC,CAAC,IAAI,EAAE,eAAe,EAAE,IAAI,EAAE;QAAE,OAAO,EAAE,MAAM,CAAA;KAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAAA;CAC5E"}
@@ -0,0 +1,31 @@
1
+ /**
2
+ * @fileoverview Type vocabulary for the FrameworkAdapter seam — v1 ships
3
+ * `claude-code` only; v2 reserves `cursor`, `copilot`, `aider`,
4
+ * `continue`, `cline`. Defines `AdapterAction` (discriminated
5
+ * union over `FileRenameAction` + `InlineEditAction`) and the
6
+ * adapter interface.
7
+ * @module @skillsmith/mcp-server/audit/framework-adapter.types
8
+ *
9
+ * Plan: docs/internal/implementation/smi-4590-cli-mcp-framework-adapter.md §1, §5.
10
+ *
11
+ * Why this seam exists (per plan §5): `.cursorrules` (Cursor v2) is a
12
+ * monolithic file with multiple trigger phrases inside a single file; a
13
+ * `FileRenameAction`-only shape would break Cursor support. Shipping
14
+ * `InlineEditAction` from v1 is a forcing function that lets v2 swap in
15
+ * `cursorAdapter` without refactoring call sites.
16
+ *
17
+ * v1 contract (claudeCodeAdapter):
18
+ * - `FileRenameAction` is supported via convenience wrapper `applyRename`
19
+ * which performs the full Wave 2 `applyRename` flow (backup + ledger
20
+ * append + atomic rename). The bare `applyAction({kind:'rename'})`
21
+ * entry point is a raw transport seam (forward-compat for v2 adapters
22
+ * that own their own audit-history); v1 callers should prefer the
23
+ * `applyRename` wrapper which threads `auditId` through correctly.
24
+ * - `InlineEditAction` with `searchMode: 'literal'` translates to a
25
+ * `RecommendedEdit` and dispatches to Wave 3's `applyRecommendedEdit`.
26
+ * - `InlineEditAction` with `searchMode: 'regex'` is rejected with the
27
+ * typed error `namespace.adapter.unsupported_search_mode`. Reserved
28
+ * for v2 cursorAdapter.
29
+ */
30
+ export {};
31
+ //# sourceMappingURL=framework-adapter.types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"framework-adapter.types.js","sourceRoot":"","sources":["../../../src/audit/framework-adapter.types.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA4BG"}
@@ -0,0 +1,46 @@
1
+ /**
2
+ * @fileoverview Public barrel for the consumer-namespace audit module
3
+ * (SMI-4587 Wave 1 Step 9). Wave 2/3/4 callers import from
4
+ * this entrypoint instead of reaching into individual files.
5
+ * @module @skillsmith/mcp-server/audit
6
+ *
7
+ * Surface:
8
+ * - Detection: `detectCollisions`, kind-specific helpers
9
+ * - History: `writeAuditHistory`, `readAuditHistory`, `newAuditId`
10
+ * - Report: `writeAuditReport`, `renderAuditReport`
11
+ * - Telemetry: `emitAuditCompleteEvent`
12
+ * - Bootstrap: `bootstrapUnmanagedSkills`, `isUnmanagedSkill`
13
+ * - Types: `InventoryAuditResult`, collision flag types, branded ids
14
+ */
15
+ export { bootstrapUnmanagedSkills, detectCollisions, detectExactCollisions, detectGenericTokenFlags, getLastBootstrapWarnings, isUnmanagedSkill, } from './collision-detector.js';
16
+ export type { BootstrapFn, DetectCollisionsOptions } from './collision-detector.js';
17
+ export { deriveCollisionId, hasClaudeMdEntries, newAuditId, readAuditHistory, writeAuditHistory, } from './audit-history.js';
18
+ export type { AuditHistoryOptions, WriteAuditHistoryResult } from './audit-history.js';
19
+ export { renderAuditReport, writeAuditReport } from './audit-report-writer.js';
20
+ export type { AuditReportRenderOptions, AuditReportWriteOptions, AuditReportWriteResult, } from './audit-report-writer.js';
21
+ export { emitAuditCompleteEvent } from '../tools/namespace-audit/telemetry.js';
22
+ export type { AuditCompleteContext, AuditCompleteTelemetryOptions, } from '../tools/namespace-audit/telemetry.js';
23
+ export type { AuditId, CollisionId, ExactCollisionFlag, GenericTokenFlag, InventoryAuditResult, SemanticCollisionFlag, } from './collision-detector.types.js';
24
+ export { appendOverride, findOverride, readLedger, readLedgerResult, writeLedger, } from './namespace-overrides.js';
25
+ export type { LedgerPathOptions } from './namespace-overrides.js';
26
+ export { CURRENT_VERSION as NAMESPACE_OVERRIDES_CURRENT_VERSION } from './namespace-overrides.types.js';
27
+ export type { LedgerVersion, LedgerVersionUnsupportedError, OverrideRecord, OverridesLedger, ReadLedgerResult, } from './namespace-overrides.types.js';
28
+ export type { NamespaceWarning, PendingCollision } from './namespace-audit.types.js';
29
+ export { applyRename, generateSuggestionChain, REVERT_SUMMARY_PREFIX } from './rename-engine.js';
30
+ export type { ApplyRenameRequest, ApplyRenameResult, RenameAction, RenameActionRequest, RenameError, RenameSuggestion, SuggestionChain, } from './rename-engine.types.js';
31
+ export { runInstallPreflight } from './install-preflight.js';
32
+ export type { CandidateSkill, RunInstallPreflightInput, RunInstallPreflightResult, } from './install-preflight.js';
33
+ export { runBackupGC } from '../tools/install.backup-gc.js';
34
+ export type { RunBackupGCOptions, RunBackupGCResult } from '../tools/install.backup-gc.js';
35
+ export { runEditSuggester, V1_TEMPLATE_PATTERNS } from './edit-suggester.js';
36
+ export type { EditCategory, EditTemplate, EditTemplatePattern, RecommendedEdit, } from './edit-suggester.types.js';
37
+ export { APPLY_TEMPLATE_REGISTRY, applyRecommendedEdit } from './edit-applier.js';
38
+ export type { ApplyRecommendedEditOptions } from './edit-applier.js';
39
+ export type { EditApplyError, EditApplyResult } from './edit-applier.types.js';
40
+ export { claudeCodeAdapter, FrameworkAdapterError } from './framework-adapter.js';
41
+ export type { AdapterAction, FileRenameAction, FrameworkAdapter, FrameworkName, InlineEditAction, } from './framework-adapter.types.js';
42
+ export { runInventoryAudit } from './run-inventory-audit.js';
43
+ export type { RunInventoryAuditOptions, RunInventoryAuditResult } from './run-inventory-audit.js';
44
+ export { readAuditSuggestions, writeAuditSuggestions } from './audit-suggestions.js';
45
+ export type { AuditSuggestionsFile, AuditSuggestionsOptions } from './audit-suggestions.js';
46
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/audit/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAEH,OAAO,EACL,wBAAwB,EACxB,gBAAgB,EAChB,qBAAqB,EACrB,uBAAuB,EACvB,wBAAwB,EACxB,gBAAgB,GACjB,MAAM,yBAAyB,CAAA;AAEhC,YAAY,EAAE,WAAW,EAAE,uBAAuB,EAAE,MAAM,yBAAyB,CAAA;AAEnF,OAAO,EACL,iBAAiB,EACjB,kBAAkB,EAClB,UAAU,EACV,gBAAgB,EAChB,iBAAiB,GAClB,MAAM,oBAAoB,CAAA;AAE3B,YAAY,EAAE,mBAAmB,EAAE,uBAAuB,EAAE,MAAM,oBAAoB,CAAA;AAEtF,OAAO,EAAE,iBAAiB,EAAE,gBAAgB,EAAE,MAAM,0BAA0B,CAAA;AAE9E,YAAY,EACV,wBAAwB,EACxB,uBAAuB,EACvB,sBAAsB,GACvB,MAAM,0BAA0B,CAAA;AAEjC,OAAO,EAAE,sBAAsB,EAAE,MAAM,uCAAuC,CAAA;AAC9E,YAAY,EACV,oBAAoB,EACpB,6BAA6B,GAC9B,MAAM,uCAAuC,CAAA;AAE9C,YAAY,EACV,OAAO,EACP,WAAW,EACX,kBAAkB,EAClB,gBAAgB,EAChB,oBAAoB,EACpB,qBAAqB,GACtB,MAAM,+BAA+B,CAAA;AAGtC,OAAO,EACL,cAAc,EACd,YAAY,EACZ,UAAU,EACV,gBAAgB,EAChB,WAAW,GACZ,MAAM,0BAA0B,CAAA;AAEjC,YAAY,EAAE,iBAAiB,EAAE,MAAM,0BAA0B,CAAA;AAEjE,OAAO,EAAE,eAAe,IAAI,mCAAmC,EAAE,MAAM,gCAAgC,CAAA;AAEvG,YAAY,EACV,aAAa,EACb,6BAA6B,EAC7B,cAAc,EACd,eAAe,EACf,gBAAgB,GACjB,MAAM,gCAAgC,CAAA;AAGvC,YAAY,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,MAAM,4BAA4B,CAAA;AAGpF,OAAO,EAAE,WAAW,EAAE,uBAAuB,EAAE,qBAAqB,EAAE,MAAM,oBAAoB,CAAA;AAEhG,YAAY,EACV,kBAAkB,EAClB,iBAAiB,EACjB,YAAY,EACZ,mBAAmB,EACnB,WAAW,EACX,gBAAgB,EAChB,eAAe,GAChB,MAAM,0BAA0B,CAAA;AAGjC,OAAO,EAAE,mBAAmB,EAAE,MAAM,wBAAwB,CAAA;AAE5D,YAAY,EACV,cAAc,EACd,wBAAwB,EACxB,yBAAyB,GAC1B,MAAM,wBAAwB,CAAA;AAK/B,OAAO,EAAE,WAAW,EAAE,MAAM,+BAA+B,CAAA;AAE3D,YAAY,EAAE,kBAAkB,EAAE,iBAAiB,EAAE,MAAM,+BAA+B,CAAA;AAI1F,OAAO,EAAE,gBAAgB,EAAE,oBAAoB,EAAE,MAAM,qBAAqB,CAAA;AAE5E,YAAY,EACV,YAAY,EACZ,YAAY,EACZ,mBAAmB,EACnB,eAAe,GAChB,MAAM,2BAA2B,CAAA;AAIlC,OAAO,EAAE,uBAAuB,EAAE,oBAAoB,EAAE,MAAM,mBAAmB,CAAA;AAEjF,YAAY,EAAE,2BAA2B,EAAE,MAAM,mBAAmB,CAAA;AAEpE,YAAY,EAAE,cAAc,EAAE,eAAe,EAAE,MAAM,yBAAyB,CAAA;AAG9E,OAAO,EAAE,iBAAiB,EAAE,qBAAqB,EAAE,MAAM,wBAAwB,CAAA;AAEjF,YAAY,EACV,aAAa,EACb,gBAAgB,EAChB,gBAAgB,EAChB,aAAa,EACb,gBAAgB,GACjB,MAAM,8BAA8B,CAAA;AAMrC,OAAO,EAAE,iBAAiB,EAAE,MAAM,0BAA0B,CAAA;AAE5D,YAAY,EAAE,wBAAwB,EAAE,uBAAuB,EAAE,MAAM,0BAA0B,CAAA;AAEjG,OAAO,EAAE,oBAAoB,EAAE,qBAAqB,EAAE,MAAM,wBAAwB,CAAA;AAEpF,YAAY,EAAE,oBAAoB,EAAE,uBAAuB,EAAE,MAAM,wBAAwB,CAAA"}
@@ -0,0 +1,44 @@
1
+ /**
2
+ * @fileoverview Public barrel for the consumer-namespace audit module
3
+ * (SMI-4587 Wave 1 Step 9). Wave 2/3/4 callers import from
4
+ * this entrypoint instead of reaching into individual files.
5
+ * @module @skillsmith/mcp-server/audit
6
+ *
7
+ * Surface:
8
+ * - Detection: `detectCollisions`, kind-specific helpers
9
+ * - History: `writeAuditHistory`, `readAuditHistory`, `newAuditId`
10
+ * - Report: `writeAuditReport`, `renderAuditReport`
11
+ * - Telemetry: `emitAuditCompleteEvent`
12
+ * - Bootstrap: `bootstrapUnmanagedSkills`, `isUnmanagedSkill`
13
+ * - Types: `InventoryAuditResult`, collision flag types, branded ids
14
+ */
15
+ export { bootstrapUnmanagedSkills, detectCollisions, detectExactCollisions, detectGenericTokenFlags, getLastBootstrapWarnings, isUnmanagedSkill, } from './collision-detector.js';
16
+ export { deriveCollisionId, hasClaudeMdEntries, newAuditId, readAuditHistory, writeAuditHistory, } from './audit-history.js';
17
+ export { renderAuditReport, writeAuditReport } from './audit-report-writer.js';
18
+ export { emitAuditCompleteEvent } from '../tools/namespace-audit/telemetry.js';
19
+ // SMI-4588 Wave 2 PR #1 — namespace-overrides ledger surface.
20
+ export { appendOverride, findOverride, readLedger, readLedgerResult, writeLedger, } from './namespace-overrides.js';
21
+ export { CURRENT_VERSION as NAMESPACE_OVERRIDES_CURRENT_VERSION } from './namespace-overrides.types.js';
22
+ // SMI-4588 Wave 2 PR #2 — rename engine + suggestion chain.
23
+ export { applyRename, generateSuggestionChain, REVERT_SUMMARY_PREFIX } from './rename-engine.js';
24
+ // SMI-4588 Wave 2 PR #3 — install pre-flight.
25
+ export { runInstallPreflight } from './install-preflight.js';
26
+ // SMI-4588 Wave 2 PR #4 — backup garbage collector. Re-exported via the
27
+ // audit barrel so Wave 4's session-start audit hook can import the
28
+ // helper without reaching into `tools/`.
29
+ export { runBackupGC } from '../tools/install.backup-gc.js';
30
+ // SMI-4589 Wave 3 — edit-suggester (templated prose-edit recommendations
31
+ // for `description_overlap` semantic collisions).
32
+ export { runEditSuggester, V1_TEMPLATE_PATTERNS } from './edit-suggester.js';
33
+ // SMI-4589 Wave 3 — edit-applier (mutation path for the registered
34
+ // `add_domain_qualifier` template, gated by APPLY_TEMPLATE_REGISTRY).
35
+ export { APPLY_TEMPLATE_REGISTRY, applyRecommendedEdit } from './edit-applier.js';
36
+ // SMI-4590 Wave 4 PR 2/6 — FrameworkAdapter seam + claudeCodeAdapter (v1).
37
+ export { claudeCodeAdapter, FrameworkAdapterError } from './framework-adapter.js';
38
+ // SMI-4590 Wave 4 PR 4/6 — shared `runInventoryAudit` composition helper
39
+ // + per-audit suggestion persistence. Consumed by the MCP tool surface
40
+ // (`skill_inventory_audit`) and (PR 5) the CLI `sklx audit collisions`
41
+ // command.
42
+ export { runInventoryAudit } from './run-inventory-audit.js';
43
+ export { readAuditSuggestions, writeAuditSuggestions } from './audit-suggestions.js';
44
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/audit/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAEH,OAAO,EACL,wBAAwB,EACxB,gBAAgB,EAChB,qBAAqB,EACrB,uBAAuB,EACvB,wBAAwB,EACxB,gBAAgB,GACjB,MAAM,yBAAyB,CAAA;AAIhC,OAAO,EACL,iBAAiB,EACjB,kBAAkB,EAClB,UAAU,EACV,gBAAgB,EAChB,iBAAiB,GAClB,MAAM,oBAAoB,CAAA;AAI3B,OAAO,EAAE,iBAAiB,EAAE,gBAAgB,EAAE,MAAM,0BAA0B,CAAA;AAQ9E,OAAO,EAAE,sBAAsB,EAAE,MAAM,uCAAuC,CAAA;AAe9E,8DAA8D;AAC9D,OAAO,EACL,cAAc,EACd,YAAY,EACZ,UAAU,EACV,gBAAgB,EAChB,WAAW,GACZ,MAAM,0BAA0B,CAAA;AAIjC,OAAO,EAAE,eAAe,IAAI,mCAAmC,EAAE,MAAM,gCAAgC,CAAA;AAavG,4DAA4D;AAC5D,OAAO,EAAE,WAAW,EAAE,uBAAuB,EAAE,qBAAqB,EAAE,MAAM,oBAAoB,CAAA;AAYhG,8CAA8C;AAC9C,OAAO,EAAE,mBAAmB,EAAE,MAAM,wBAAwB,CAAA;AAQ5D,wEAAwE;AACxE,mEAAmE;AACnE,yCAAyC;AACzC,OAAO,EAAE,WAAW,EAAE,MAAM,+BAA+B,CAAA;AAI3D,yEAAyE;AACzE,kDAAkD;AAClD,OAAO,EAAE,gBAAgB,EAAE,oBAAoB,EAAE,MAAM,qBAAqB,CAAA;AAS5E,mEAAmE;AACnE,sEAAsE;AACtE,OAAO,EAAE,uBAAuB,EAAE,oBAAoB,EAAE,MAAM,mBAAmB,CAAA;AAMjF,2EAA2E;AAC3E,OAAO,EAAE,iBAAiB,EAAE,qBAAqB,EAAE,MAAM,wBAAwB,CAAA;AAUjF,yEAAyE;AACzE,uEAAuE;AACvE,uEAAuE;AACvE,WAAW;AACX,OAAO,EAAE,iBAAiB,EAAE,MAAM,0BAA0B,CAAA;AAI5D,OAAO,EAAE,oBAAoB,EAAE,qBAAqB,EAAE,MAAM,wBAAwB,CAAA"}