@atlaskit/ads-mcp 0.20.3 → 0.20.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (425) hide show
  1. package/CHANGELOG.md +6 -0
  2. package/dist/cjs/entry-points/analyze-a11y.js +40 -0
  3. package/dist/cjs/entry-points/get-a11y-guidelines.js +26 -0
  4. package/dist/cjs/entry-points/get-all-components.js +19 -0
  5. package/dist/cjs/entry-points/get-all-icons.js +19 -0
  6. package/dist/cjs/entry-points/get-all-tokens.js +19 -0
  7. package/dist/cjs/entry-points/get-atlaskit-components.js +19 -0
  8. package/dist/cjs/entry-points/get-guidelines.js +26 -0
  9. package/dist/cjs/entry-points/get-lint-rules.js +26 -0
  10. package/dist/cjs/entry-points/i18n-conversion.js +26 -0
  11. package/dist/cjs/entry-points/migration-guides.js +26 -0
  12. package/dist/cjs/entry-points/plan.js +26 -0
  13. package/dist/cjs/entry-points/search-atlaskit-components.js +26 -0
  14. package/dist/cjs/entry-points/search-components.js +26 -0
  15. package/dist/cjs/entry-points/search-icons.js +26 -0
  16. package/dist/cjs/entry-points/search-tokens.js +26 -0
  17. package/dist/cjs/entry-points/suggest-a11y-fixes.js +26 -0
  18. package/dist/cjs/helpers/agent.js +9 -0
  19. package/dist/cjs/helpers/clean-query.js +10 -0
  20. package/dist/cjs/helpers/index.js +14 -11
  21. package/dist/cjs/helpers/send-operational-event.js +56 -0
  22. package/dist/cjs/helpers/validation.js +2 -2
  23. package/dist/cjs/helpers/zod-to-json-schema.js +12 -0
  24. package/dist/cjs/index.js +127 -85
  25. package/dist/cjs/tools/analyze-a11y/analyze-a11y-input-schema.js +13 -0
  26. package/dist/cjs/tools/analyze-a11y/analyze-a11y-localhost-input-schema.js +13 -0
  27. package/dist/cjs/tools/analyze-a11y/analyze-a11y-tool.js +242 -0
  28. package/dist/cjs/tools/analyze-a11y/analyze-localhost-a11y-tool.js +214 -0
  29. package/dist/cjs/tools/analyze-a11y/generate-ads-fix-for-violation.js +32 -0
  30. package/dist/cjs/tools/analyze-a11y/list-analyze-a11y-tool.js +20 -0
  31. package/dist/cjs/tools/analyze-a11y/list-analyze-localhost-a11y-tool.js +20 -0
  32. package/dist/cjs/tools/get-a11y-guidelines/get-a11y-guidelines-input-schema.js +14 -0
  33. package/dist/cjs/tools/get-a11y-guidelines/{index.js → get-a11y-guidelines-tool.js} +1 -18
  34. package/dist/cjs/tools/get-a11y-guidelines/list-get-a11y-guidelines-tool.js +22 -0
  35. package/dist/cjs/tools/get-all-components/{index.js → get-all-components-tool.js} +1 -15
  36. package/dist/cjs/tools/get-all-components/list-get-all-components-tool.js +22 -0
  37. package/dist/cjs/tools/get-all-icons/{index.js → get-all-icons-tool.js} +1 -15
  38. package/dist/cjs/tools/get-all-icons/list-get-all-icons-tool.js +22 -0
  39. package/dist/cjs/tools/get-all-tokens/{index.js → get-all-tokens-tool.js} +1 -18
  40. package/dist/cjs/tools/get-all-tokens/list-get-all-tokens-tool.js +23 -0
  41. package/dist/cjs/tools/get-atlaskit-components/atlaskit-components.codegen.js +1944 -0
  42. package/dist/cjs/tools/get-atlaskit-components/get-atlaskit-components-tool.js +40 -0
  43. package/dist/cjs/tools/get-atlaskit-components/list-get-atlaskit-components-tool.js +22 -0
  44. package/dist/cjs/tools/get-guidelines/get-guidelines-input-schema.js +11 -0
  45. package/dist/cjs/tools/get-guidelines/{index.js → get-guidelines-tool.js} +3 -20
  46. package/dist/cjs/tools/get-guidelines/list-get-guidelines-tool.js +22 -0
  47. package/dist/cjs/tools/get-lint-rules/get-lint-rules-input-schema.js +14 -0
  48. package/dist/cjs/tools/get-lint-rules/{index.js → get-lint-rules-tool.js} +3 -21
  49. package/dist/cjs/tools/get-lint-rules/list-get-lint-rules-tool.js +22 -0
  50. package/dist/cjs/tools/i18n-conversion/i18n-conversion-input-schema.js +12 -0
  51. package/dist/cjs/tools/i18n-conversion/i18n-conversion-tool.js +33 -0
  52. package/dist/cjs/tools/i18n-conversion/{index.js → list-i18n-conversion-tool.js} +5 -33
  53. package/dist/cjs/tools/migration-guides/get-available-migration-ids.js +22 -0
  54. package/dist/cjs/tools/migration-guides/get-available-migrations-description.js +25 -0
  55. package/dist/cjs/tools/migration-guides/list-migration-guides-tool.js +23 -0
  56. package/dist/cjs/tools/migration-guides/migration-guides-input-schema.js +17 -0
  57. package/dist/cjs/tools/migration-guides/{index.js → migration-guides-tool.js} +3 -24
  58. package/dist/cjs/tools/migration-guides/migration-registry.js +5 -2
  59. package/dist/cjs/tools/migration-guides/migrations/onboarding-jira-spotlight.js +29 -0
  60. package/dist/cjs/tools/migration-guides/migrations/onboarding-multi-step.js +23 -0
  61. package/dist/cjs/tools/migration-guides/migrations/onboarding-single-step.js +23 -0
  62. package/dist/cjs/tools/migration-guides/migrations/onboarding-with-motion.js +23 -0
  63. package/dist/cjs/tools/plan/list-plan-tool.js +22 -0
  64. package/dist/cjs/tools/plan/plan-input-schema.js +16 -0
  65. package/dist/cjs/tools/plan/{index.js → plan-tool.js} +28 -36
  66. package/dist/cjs/tools/search-atlaskit-components/list-search-atlaskit-components-tool.js +22 -0
  67. package/dist/cjs/tools/search-atlaskit-components/search-atlaskit-components-input-schema.js +11 -0
  68. package/dist/cjs/tools/search-atlaskit-components/search-atlaskit-components-tool.js +114 -0
  69. package/dist/cjs/tools/search-components/list-search-components-tool.js +22 -0
  70. package/dist/cjs/tools/search-components/search-components-input-schema.js +13 -0
  71. package/dist/cjs/tools/search-components/{index.js → search-components-tool.js} +3 -19
  72. package/dist/cjs/tools/search-icons/list-search-icons-tool.js +22 -0
  73. package/dist/cjs/tools/search-icons/search-icons-input-schema.js +13 -0
  74. package/dist/cjs/tools/search-icons/{index.js → search-icons-tool.js} +3 -19
  75. package/dist/cjs/tools/search-tokens/list-search-tokens-tool.js +22 -0
  76. package/dist/cjs/tools/search-tokens/search-tokens-input-schema.js +13 -0
  77. package/dist/cjs/tools/search-tokens/{index.js → search-tokens-tool.js} +3 -19
  78. package/dist/cjs/tools/suggest-a11y-fixes/list-suggest-a11y-fixes-tool.js +22 -0
  79. package/dist/cjs/tools/suggest-a11y-fixes/suggest-a11y-fixes-input-schema.js +15 -0
  80. package/dist/cjs/tools/suggest-a11y-fixes/{index.js → suggest-a11y-fixes-tool.js} +1 -22
  81. package/dist/es2019/entry-points/analyze-a11y.js +5 -0
  82. package/dist/es2019/entry-points/get-a11y-guidelines.js +3 -0
  83. package/dist/es2019/entry-points/get-all-components.js +2 -0
  84. package/dist/es2019/entry-points/get-all-icons.js +2 -0
  85. package/dist/es2019/entry-points/get-all-tokens.js +2 -0
  86. package/dist/es2019/entry-points/get-atlaskit-components.js +2 -0
  87. package/dist/es2019/entry-points/get-guidelines.js +3 -0
  88. package/dist/es2019/entry-points/get-lint-rules.js +3 -0
  89. package/dist/es2019/entry-points/i18n-conversion.js +3 -0
  90. package/dist/es2019/entry-points/migration-guides.js +3 -0
  91. package/dist/es2019/entry-points/plan.js +3 -0
  92. package/dist/es2019/entry-points/search-atlaskit-components.js +3 -0
  93. package/dist/es2019/entry-points/search-components.js +3 -0
  94. package/dist/es2019/entry-points/search-icons.js +3 -0
  95. package/dist/es2019/entry-points/search-tokens.js +3 -0
  96. package/dist/es2019/entry-points/suggest-a11y-fixes.js +3 -0
  97. package/dist/es2019/helpers/agent.js +3 -0
  98. package/dist/es2019/helpers/clean-query.js +2 -0
  99. package/dist/es2019/helpers/index.js +2 -7
  100. package/dist/es2019/helpers/send-operational-event.js +49 -0
  101. package/dist/es2019/helpers/validation.js +1 -1
  102. package/dist/es2019/helpers/zod-to-json-schema.js +6 -0
  103. package/dist/es2019/index.js +138 -92
  104. package/dist/es2019/tools/analyze-a11y/analyze-a11y-input-schema.js +7 -0
  105. package/dist/es2019/tools/analyze-a11y/analyze-a11y-localhost-input-schema.js +7 -0
  106. package/dist/es2019/tools/analyze-a11y/analyze-a11y-tool.js +212 -0
  107. package/dist/es2019/tools/analyze-a11y/analyze-localhost-a11y-tool.js +163 -0
  108. package/dist/es2019/tools/analyze-a11y/generate-ads-fix-for-violation.js +26 -0
  109. package/dist/es2019/tools/analyze-a11y/list-analyze-a11y-tool.js +21 -0
  110. package/dist/es2019/tools/analyze-a11y/list-analyze-localhost-a11y-tool.js +23 -0
  111. package/dist/es2019/tools/get-a11y-guidelines/get-a11y-guidelines-input-schema.js +7 -0
  112. package/dist/es2019/tools/get-a11y-guidelines/get-a11y-guidelines-tool.js +34 -0
  113. package/dist/es2019/tools/get-a11y-guidelines/list-get-a11y-guidelines-tool.js +23 -0
  114. package/dist/es2019/tools/get-all-components/get-all-components-tool.js +12 -0
  115. package/dist/es2019/tools/get-all-components/{index.js → list-get-all-components-tool.js} +1 -12
  116. package/dist/es2019/tools/get-all-icons/get-all-icons-tool.js +10 -0
  117. package/dist/es2019/tools/get-all-icons/{index.js → list-get-all-icons-tool.js} +2 -11
  118. package/dist/es2019/tools/get-all-tokens/get-all-tokens-tool.js +13 -0
  119. package/dist/es2019/tools/get-all-tokens/{index.js → list-get-all-tokens-tool.js} +2 -15
  120. package/dist/es2019/tools/get-atlaskit-components/atlaskit-components.codegen.js +1938 -0
  121. package/dist/es2019/tools/get-atlaskit-components/get-atlaskit-components-tool.js +14 -0
  122. package/dist/es2019/tools/get-atlaskit-components/list-get-atlaskit-components-tool.js +21 -0
  123. package/dist/es2019/tools/get-guidelines/get-guidelines-input-schema.js +5 -0
  124. package/dist/es2019/tools/get-guidelines/get-guidelines-tool.js +55 -0
  125. package/dist/es2019/tools/get-guidelines/{index.js → list-get-guidelines-tool.js} +2 -59
  126. package/dist/es2019/tools/get-lint-rules/get-lint-rules-input-schema.js +7 -0
  127. package/dist/es2019/tools/get-lint-rules/{index.js → get-lint-rules-tool.js} +1 -28
  128. package/dist/es2019/tools/get-lint-rules/list-get-lint-rules-tool.js +24 -0
  129. package/dist/es2019/tools/i18n-conversion/i18n-conversion-input-schema.js +5 -0
  130. package/dist/es2019/tools/i18n-conversion/i18n-conversion-tool.js +11 -0
  131. package/dist/es2019/tools/i18n-conversion/{index.js → list-i18n-conversion-tool.js} +2 -14
  132. package/dist/es2019/tools/migration-guides/get-available-migration-ids.js +17 -0
  133. package/dist/es2019/tools/migration-guides/get-available-migrations-description.js +18 -0
  134. package/dist/es2019/tools/migration-guides/list-migration-guides-tool.js +25 -0
  135. package/dist/es2019/tools/migration-guides/migration-guides-input-schema.js +10 -0
  136. package/dist/es2019/tools/migration-guides/migration-guides-tool.js +39 -0
  137. package/dist/es2019/tools/migration-guides/migration-registry.js +4 -1
  138. package/dist/es2019/tools/migration-guides/migrations/onboarding-jira-spotlight.js +230 -0
  139. package/dist/es2019/tools/migration-guides/migrations/onboarding-multi-step.js +179 -0
  140. package/dist/es2019/tools/migration-guides/migrations/onboarding-single-step.js +120 -0
  141. package/dist/es2019/tools/migration-guides/migrations/onboarding-with-motion.js +120 -0
  142. package/dist/es2019/tools/plan/list-plan-tool.js +47 -0
  143. package/dist/es2019/tools/plan/plan-input-schema.js +9 -0
  144. package/dist/es2019/tools/plan/plan-tool.js +111 -0
  145. package/dist/es2019/tools/search-atlaskit-components/list-search-atlaskit-components-tool.js +19 -0
  146. package/dist/es2019/tools/search-atlaskit-components/search-atlaskit-components-input-schema.js +5 -0
  147. package/dist/es2019/tools/search-atlaskit-components/search-atlaskit-components-tool.js +84 -0
  148. package/dist/es2019/tools/search-components/list-search-components-tool.js +19 -0
  149. package/dist/es2019/tools/search-components/search-components-input-schema.js +6 -0
  150. package/dist/es2019/tools/search-components/{index.js → search-components-tool.js} +2 -21
  151. package/dist/es2019/tools/search-icons/list-search-icons-tool.js +25 -0
  152. package/dist/es2019/tools/search-icons/search-icons-input-schema.js +6 -0
  153. package/dist/es2019/tools/search-icons/{index.js → search-icons-tool.js} +2 -27
  154. package/dist/es2019/tools/search-tokens/list-search-tokens-tool.js +25 -0
  155. package/dist/es2019/tools/search-tokens/search-tokens-input-schema.js +6 -0
  156. package/dist/es2019/tools/search-tokens/{index.js → search-tokens-tool.js} +2 -27
  157. package/dist/es2019/tools/suggest-a11y-fixes/list-suggest-a11y-fixes-tool.js +25 -0
  158. package/dist/es2019/tools/suggest-a11y-fixes/suggest-a11y-fixes-input-schema.js +8 -0
  159. package/dist/es2019/tools/suggest-a11y-fixes/{index.js → suggest-a11y-fixes-tool.js} +0 -30
  160. package/dist/esm/entry-points/analyze-a11y.js +5 -0
  161. package/dist/esm/entry-points/get-a11y-guidelines.js +3 -0
  162. package/dist/esm/entry-points/get-all-components.js +2 -0
  163. package/dist/esm/entry-points/get-all-icons.js +2 -0
  164. package/dist/esm/entry-points/get-all-tokens.js +2 -0
  165. package/dist/esm/entry-points/get-atlaskit-components.js +2 -0
  166. package/dist/esm/entry-points/get-guidelines.js +3 -0
  167. package/dist/esm/entry-points/get-lint-rules.js +3 -0
  168. package/dist/esm/entry-points/i18n-conversion.js +3 -0
  169. package/dist/esm/entry-points/migration-guides.js +3 -0
  170. package/dist/esm/entry-points/plan.js +3 -0
  171. package/dist/esm/entry-points/search-atlaskit-components.js +3 -0
  172. package/dist/esm/entry-points/search-components.js +3 -0
  173. package/dist/esm/entry-points/search-icons.js +3 -0
  174. package/dist/esm/entry-points/search-tokens.js +3 -0
  175. package/dist/esm/entry-points/suggest-a11y-fixes.js +3 -0
  176. package/dist/esm/helpers/agent.js +3 -0
  177. package/dist/esm/helpers/clean-query.js +4 -0
  178. package/dist/esm/helpers/index.js +2 -9
  179. package/dist/esm/helpers/send-operational-event.js +52 -0
  180. package/dist/esm/helpers/validation.js +1 -1
  181. package/dist/esm/helpers/zod-to-json-schema.js +6 -0
  182. package/dist/esm/index.js +65 -23
  183. package/dist/esm/tools/analyze-a11y/analyze-a11y-input-schema.js +7 -0
  184. package/dist/esm/tools/analyze-a11y/analyze-a11y-localhost-input-schema.js +7 -0
  185. package/dist/esm/tools/analyze-a11y/analyze-a11y-tool.js +235 -0
  186. package/dist/esm/tools/analyze-a11y/analyze-localhost-a11y-tool.js +207 -0
  187. package/dist/esm/tools/analyze-a11y/generate-ads-fix-for-violation.js +26 -0
  188. package/dist/esm/tools/analyze-a11y/list-analyze-a11y-tool.js +14 -0
  189. package/dist/esm/tools/analyze-a11y/list-analyze-localhost-a11y-tool.js +14 -0
  190. package/dist/esm/tools/get-a11y-guidelines/get-a11y-guidelines-input-schema.js +7 -0
  191. package/dist/esm/tools/get-a11y-guidelines/{index.js → get-a11y-guidelines-tool.js} +0 -17
  192. package/dist/esm/tools/get-a11y-guidelines/list-get-a11y-guidelines-tool.js +16 -0
  193. package/dist/esm/tools/get-all-components/{index.js → get-all-components-tool.js} +0 -15
  194. package/dist/esm/tools/get-all-components/list-get-all-components-tool.js +16 -0
  195. package/dist/esm/tools/get-all-icons/{index.js → get-all-icons-tool.js} +0 -15
  196. package/dist/esm/tools/get-all-icons/list-get-all-icons-tool.js +16 -0
  197. package/dist/esm/tools/get-all-tokens/{index.js → get-all-tokens-tool.js} +0 -17
  198. package/dist/esm/tools/get-all-tokens/list-get-all-tokens-tool.js +17 -0
  199. package/dist/esm/tools/get-atlaskit-components/atlaskit-components.codegen.js +1938 -0
  200. package/dist/esm/tools/get-atlaskit-components/get-atlaskit-components-tool.js +32 -0
  201. package/dist/esm/tools/get-atlaskit-components/list-get-atlaskit-components-tool.js +16 -0
  202. package/dist/esm/tools/get-guidelines/get-guidelines-input-schema.js +5 -0
  203. package/dist/esm/tools/get-guidelines/{index.js → get-guidelines-tool.js} +1 -19
  204. package/dist/esm/tools/get-guidelines/list-get-guidelines-tool.js +16 -0
  205. package/dist/esm/tools/get-lint-rules/get-lint-rules-input-schema.js +7 -0
  206. package/dist/esm/tools/get-lint-rules/{index.js → get-lint-rules-tool.js} +1 -19
  207. package/dist/esm/tools/get-lint-rules/list-get-lint-rules-tool.js +15 -0
  208. package/dist/esm/tools/i18n-conversion/i18n-conversion-input-schema.js +5 -0
  209. package/dist/esm/tools/i18n-conversion/i18n-conversion-tool.js +26 -0
  210. package/dist/esm/tools/i18n-conversion/{index.js → list-i18n-conversion-tool.js} +3 -30
  211. package/dist/esm/tools/migration-guides/get-available-migration-ids.js +17 -0
  212. package/dist/esm/tools/migration-guides/get-available-migrations-description.js +20 -0
  213. package/dist/esm/tools/migration-guides/list-migration-guides-tool.js +17 -0
  214. package/dist/esm/tools/migration-guides/migration-guides-input-schema.js +10 -0
  215. package/dist/esm/tools/migration-guides/{index.js → migration-guides-tool.js} +1 -23
  216. package/dist/esm/tools/migration-guides/migration-registry.js +4 -1
  217. package/dist/esm/tools/migration-guides/migrations/onboarding-jira-spotlight.js +23 -0
  218. package/dist/esm/tools/migration-guides/migrations/onboarding-multi-step.js +17 -0
  219. package/dist/esm/tools/migration-guides/migrations/onboarding-single-step.js +17 -0
  220. package/dist/esm/tools/migration-guides/migrations/onboarding-with-motion.js +17 -0
  221. package/dist/esm/tools/plan/list-plan-tool.js +16 -0
  222. package/dist/esm/tools/plan/plan-input-schema.js +9 -0
  223. package/dist/esm/tools/plan/{index.js → plan-tool.js} +24 -32
  224. package/dist/esm/tools/search-atlaskit-components/list-search-atlaskit-components-tool.js +16 -0
  225. package/dist/esm/tools/search-atlaskit-components/search-atlaskit-components-input-schema.js +5 -0
  226. package/dist/esm/tools/search-atlaskit-components/search-atlaskit-components-tool.js +107 -0
  227. package/dist/esm/tools/search-components/list-search-components-tool.js +16 -0
  228. package/dist/esm/tools/search-components/search-components-input-schema.js +6 -0
  229. package/dist/esm/tools/search-components/{index.js → search-components-tool.js} +2 -18
  230. package/dist/esm/tools/search-icons/list-search-icons-tool.js +16 -0
  231. package/dist/esm/tools/search-icons/search-icons-input-schema.js +6 -0
  232. package/dist/esm/tools/search-icons/{index.js → search-icons-tool.js} +2 -18
  233. package/dist/esm/tools/search-tokens/list-search-tokens-tool.js +16 -0
  234. package/dist/esm/tools/search-tokens/search-tokens-input-schema.js +6 -0
  235. package/dist/esm/tools/search-tokens/{index.js → search-tokens-tool.js} +2 -18
  236. package/dist/esm/tools/suggest-a11y-fixes/list-suggest-a11y-fixes-tool.js +16 -0
  237. package/dist/esm/tools/suggest-a11y-fixes/suggest-a11y-fixes-input-schema.js +8 -0
  238. package/dist/esm/tools/suggest-a11y-fixes/{index.js → suggest-a11y-fixes-tool.js} +0 -21
  239. package/dist/types/entry-points/analyze-a11y.d.ts +5 -0
  240. package/dist/types/entry-points/get-a11y-guidelines.d.ts +3 -0
  241. package/dist/types/entry-points/get-all-components.d.ts +2 -0
  242. package/dist/types/entry-points/get-all-icons.d.ts +2 -0
  243. package/dist/types/entry-points/get-all-tokens.d.ts +2 -0
  244. package/dist/types/entry-points/get-atlaskit-components.d.ts +2 -0
  245. package/dist/types/entry-points/get-guidelines.d.ts +3 -0
  246. package/dist/types/entry-points/get-lint-rules.d.ts +3 -0
  247. package/dist/types/entry-points/i18n-conversion.d.ts +3 -0
  248. package/dist/types/entry-points/migration-guides.d.ts +3 -0
  249. package/dist/types/entry-points/plan.d.ts +3 -0
  250. package/dist/types/entry-points/search-atlaskit-components.d.ts +3 -0
  251. package/dist/types/entry-points/search-components.d.ts +3 -0
  252. package/dist/types/entry-points/search-icons.d.ts +3 -0
  253. package/dist/types/entry-points/search-tokens.d.ts +3 -0
  254. package/dist/types/entry-points/suggest-a11y-fixes.d.ts +3 -0
  255. package/dist/types/helpers/agent.d.ts +3 -0
  256. package/dist/types/helpers/clean-query.d.ts +1 -0
  257. package/dist/types/helpers/index.d.ts +2 -4
  258. package/dist/types/helpers/send-operational-event.d.ts +13 -0
  259. package/dist/types/helpers/zod-to-json-schema.d.ts +3 -0
  260. package/dist/types/tools/analyze-a11y/analyze-a11y-input-schema.d.ts +17 -0
  261. package/dist/types/tools/analyze-a11y/analyze-a11y-localhost-input-schema.d.ts +17 -0
  262. package/dist/types/tools/analyze-a11y/analyze-a11y-tool.d.ts +8 -0
  263. package/dist/types/tools/analyze-a11y/analyze-localhost-a11y-tool.d.ts +8 -0
  264. package/dist/types/tools/analyze-a11y/generate-ads-fix-for-violation.d.ts +1 -0
  265. package/dist/types/tools/analyze-a11y/list-analyze-a11y-tool.d.ts +2 -0
  266. package/dist/types/tools/analyze-a11y/list-analyze-localhost-a11y-tool.d.ts +2 -0
  267. package/dist/types/tools/get-a11y-guidelines/get-a11y-guidelines-input-schema.d.ts +8 -0
  268. package/dist/types/tools/get-a11y-guidelines/get-a11y-guidelines-tool.d.ts +8 -0
  269. package/dist/types/tools/get-a11y-guidelines/list-get-a11y-guidelines-tool.d.ts +2 -0
  270. package/dist/types/tools/get-all-components/{index.d.ts → get-all-components-tool.d.ts} +0 -2
  271. package/dist/types/tools/get-all-components/list-get-all-components-tool.d.ts +2 -0
  272. package/dist/{types-ts4.5/tools/get-all-icons/index.d.ts → types/tools/get-all-icons/get-all-icons-tool.d.ts} +0 -2
  273. package/dist/types/tools/get-all-icons/list-get-all-icons-tool.d.ts +2 -0
  274. package/dist/types/tools/get-all-tokens/{index.d.ts → get-all-tokens-tool.d.ts} +0 -2
  275. package/dist/types/tools/get-all-tokens/list-get-all-tokens-tool.d.ts +2 -0
  276. package/dist/types/tools/get-atlaskit-components/atlaskit-components.codegen.d.ts +10 -0
  277. package/dist/types/tools/get-atlaskit-components/get-atlaskit-components-tool.d.ts +6 -0
  278. package/dist/types/tools/get-atlaskit-components/list-get-atlaskit-components-tool.d.ts +2 -0
  279. package/dist/types/tools/get-guidelines/get-guidelines-input-schema.d.ts +5 -0
  280. package/dist/types/tools/get-guidelines/get-guidelines-tool.d.ts +8 -0
  281. package/dist/types/tools/get-guidelines/list-get-guidelines-tool.d.ts +2 -0
  282. package/dist/types/tools/get-lint-rules/get-lint-rules-input-schema.d.ts +6 -0
  283. package/dist/types/tools/get-lint-rules/get-lint-rules-tool.d.ts +4 -0
  284. package/dist/types/tools/get-lint-rules/{index.d.ts → list-get-lint-rules-tool.d.ts} +0 -8
  285. package/dist/types/tools/i18n-conversion/i18n-conversion-input-schema.d.ts +8 -0
  286. package/dist/types/tools/i18n-conversion/i18n-conversion-tool.d.ts +8 -0
  287. package/dist/types/tools/i18n-conversion/list-i18n-conversion-tool.d.ts +2 -0
  288. package/dist/types/tools/migration-guides/get-available-migration-ids.d.ts +12 -0
  289. package/dist/types/tools/migration-guides/get-available-migrations-description.d.ts +13 -0
  290. package/dist/types/tools/migration-guides/list-migration-guides-tool.d.ts +2 -0
  291. package/dist/types/tools/migration-guides/migration-guides-input-schema.d.ts +11 -0
  292. package/dist/types/tools/migration-guides/migration-guides-tool.d.ts +8 -0
  293. package/dist/types/tools/migration-guides/migrations/onboarding-jira-spotlight.d.ts +2 -0
  294. package/dist/types/tools/migration-guides/migrations/onboarding-multi-step.d.ts +2 -0
  295. package/dist/types/tools/migration-guides/migrations/onboarding-single-step.d.ts +2 -0
  296. package/dist/types/tools/migration-guides/migrations/onboarding-with-motion.d.ts +2 -0
  297. package/dist/types/tools/plan/list-plan-tool.d.ts +2 -0
  298. package/dist/types/tools/plan/{index.d.ts → plan-input-schema.d.ts} +3 -15
  299. package/dist/types/tools/plan/plan-tool.d.ts +15 -0
  300. package/dist/types/tools/search-atlaskit-components/list-search-atlaskit-components-tool.d.ts +2 -0
  301. package/dist/types/tools/search-atlaskit-components/search-atlaskit-components-input-schema.d.ts +11 -0
  302. package/dist/types/tools/search-atlaskit-components/search-atlaskit-components-tool.d.ts +4 -0
  303. package/dist/types/tools/search-components/list-search-components-tool.d.ts +2 -0
  304. package/dist/{types-ts4.5/tools/search-components/index.d.ts → types/tools/search-components/search-components-input-schema.d.ts} +0 -3
  305. package/dist/types/tools/search-components/search-components-tool.d.ts +4 -0
  306. package/dist/types/tools/search-icons/list-search-icons-tool.d.ts +2 -0
  307. package/dist/{types-ts4.5/tools/search-icons/index.d.ts → types/tools/search-icons/search-icons-input-schema.d.ts} +0 -3
  308. package/dist/types/tools/search-icons/search-icons-tool.d.ts +4 -0
  309. package/dist/types/tools/search-tokens/list-search-tokens-tool.d.ts +2 -0
  310. package/dist/types/tools/search-tokens/{index.d.ts → search-tokens-input-schema.d.ts} +0 -3
  311. package/dist/types/tools/search-tokens/search-tokens-tool.d.ts +4 -0
  312. package/dist/types/tools/suggest-a11y-fixes/list-suggest-a11y-fixes-tool.d.ts +2 -0
  313. package/dist/types/tools/suggest-a11y-fixes/{index.d.ts → suggest-a11y-fixes-input-schema.d.ts} +0 -8
  314. package/dist/types/tools/suggest-a11y-fixes/suggest-a11y-fixes-tool.d.ts +8 -0
  315. package/dist/types-ts4.5/entry-points/analyze-a11y.d.ts +5 -0
  316. package/dist/types-ts4.5/entry-points/get-a11y-guidelines.d.ts +3 -0
  317. package/dist/types-ts4.5/entry-points/get-all-components.d.ts +2 -0
  318. package/dist/types-ts4.5/entry-points/get-all-icons.d.ts +2 -0
  319. package/dist/types-ts4.5/entry-points/get-all-tokens.d.ts +2 -0
  320. package/dist/types-ts4.5/entry-points/get-atlaskit-components.d.ts +2 -0
  321. package/dist/types-ts4.5/entry-points/get-guidelines.d.ts +3 -0
  322. package/dist/types-ts4.5/entry-points/get-lint-rules.d.ts +3 -0
  323. package/dist/types-ts4.5/entry-points/i18n-conversion.d.ts +3 -0
  324. package/dist/types-ts4.5/entry-points/migration-guides.d.ts +3 -0
  325. package/dist/types-ts4.5/entry-points/plan.d.ts +3 -0
  326. package/dist/types-ts4.5/entry-points/search-atlaskit-components.d.ts +3 -0
  327. package/dist/types-ts4.5/entry-points/search-components.d.ts +3 -0
  328. package/dist/types-ts4.5/entry-points/search-icons.d.ts +3 -0
  329. package/dist/types-ts4.5/entry-points/search-tokens.d.ts +3 -0
  330. package/dist/types-ts4.5/entry-points/suggest-a11y-fixes.d.ts +3 -0
  331. package/dist/types-ts4.5/helpers/agent.d.ts +3 -0
  332. package/dist/types-ts4.5/helpers/clean-query.d.ts +1 -0
  333. package/dist/types-ts4.5/helpers/index.d.ts +2 -4
  334. package/dist/types-ts4.5/helpers/send-operational-event.d.ts +13 -0
  335. package/dist/types-ts4.5/helpers/zod-to-json-schema.d.ts +3 -0
  336. package/dist/types-ts4.5/tools/analyze-a11y/analyze-a11y-input-schema.d.ts +17 -0
  337. package/dist/types-ts4.5/tools/analyze-a11y/analyze-a11y-localhost-input-schema.d.ts +17 -0
  338. package/dist/types-ts4.5/tools/analyze-a11y/analyze-a11y-tool.d.ts +8 -0
  339. package/dist/types-ts4.5/tools/analyze-a11y/analyze-localhost-a11y-tool.d.ts +8 -0
  340. package/dist/types-ts4.5/tools/analyze-a11y/generate-ads-fix-for-violation.d.ts +1 -0
  341. package/dist/types-ts4.5/tools/analyze-a11y/list-analyze-a11y-tool.d.ts +2 -0
  342. package/dist/types-ts4.5/tools/analyze-a11y/list-analyze-localhost-a11y-tool.d.ts +2 -0
  343. package/dist/types-ts4.5/tools/get-a11y-guidelines/get-a11y-guidelines-input-schema.d.ts +8 -0
  344. package/dist/types-ts4.5/tools/get-a11y-guidelines/get-a11y-guidelines-tool.d.ts +8 -0
  345. package/dist/types-ts4.5/tools/get-a11y-guidelines/list-get-a11y-guidelines-tool.d.ts +2 -0
  346. package/dist/types-ts4.5/tools/get-all-components/{index.d.ts → get-all-components-tool.d.ts} +0 -2
  347. package/dist/types-ts4.5/tools/get-all-components/list-get-all-components-tool.d.ts +2 -0
  348. package/dist/{types/tools/get-all-icons/index.d.ts → types-ts4.5/tools/get-all-icons/get-all-icons-tool.d.ts} +0 -2
  349. package/dist/types-ts4.5/tools/get-all-icons/list-get-all-icons-tool.d.ts +2 -0
  350. package/dist/types-ts4.5/tools/get-all-tokens/{index.d.ts → get-all-tokens-tool.d.ts} +0 -2
  351. package/dist/types-ts4.5/tools/get-all-tokens/list-get-all-tokens-tool.d.ts +2 -0
  352. package/dist/types-ts4.5/tools/get-atlaskit-components/atlaskit-components.codegen.d.ts +10 -0
  353. package/dist/types-ts4.5/tools/get-atlaskit-components/get-atlaskit-components-tool.d.ts +6 -0
  354. package/dist/types-ts4.5/tools/get-atlaskit-components/list-get-atlaskit-components-tool.d.ts +2 -0
  355. package/dist/types-ts4.5/tools/get-guidelines/get-guidelines-input-schema.d.ts +5 -0
  356. package/dist/types-ts4.5/tools/get-guidelines/get-guidelines-tool.d.ts +8 -0
  357. package/dist/types-ts4.5/tools/get-guidelines/list-get-guidelines-tool.d.ts +2 -0
  358. package/dist/types-ts4.5/tools/get-lint-rules/get-lint-rules-input-schema.d.ts +6 -0
  359. package/dist/types-ts4.5/tools/get-lint-rules/get-lint-rules-tool.d.ts +4 -0
  360. package/dist/types-ts4.5/tools/get-lint-rules/{index.d.ts → list-get-lint-rules-tool.d.ts} +0 -8
  361. package/dist/types-ts4.5/tools/i18n-conversion/{index.d.ts → i18n-conversion-input-schema.d.ts} +0 -8
  362. package/dist/types-ts4.5/tools/i18n-conversion/i18n-conversion-tool.d.ts +8 -0
  363. package/dist/types-ts4.5/tools/i18n-conversion/list-i18n-conversion-tool.d.ts +2 -0
  364. package/dist/types-ts4.5/tools/migration-guides/get-available-migration-ids.d.ts +12 -0
  365. package/dist/types-ts4.5/tools/migration-guides/get-available-migrations-description.d.ts +13 -0
  366. package/dist/types-ts4.5/tools/migration-guides/list-migration-guides-tool.d.ts +2 -0
  367. package/dist/types-ts4.5/tools/migration-guides/{index.d.ts → migration-guides-input-schema.d.ts} +0 -8
  368. package/dist/types-ts4.5/tools/migration-guides/migration-guides-tool.d.ts +8 -0
  369. package/dist/types-ts4.5/tools/migration-guides/migrations/onboarding-jira-spotlight.d.ts +2 -0
  370. package/dist/types-ts4.5/tools/migration-guides/migrations/onboarding-multi-step.d.ts +2 -0
  371. package/dist/types-ts4.5/tools/migration-guides/migrations/onboarding-single-step.d.ts +2 -0
  372. package/dist/types-ts4.5/tools/migration-guides/migrations/onboarding-with-motion.d.ts +2 -0
  373. package/dist/types-ts4.5/tools/plan/list-plan-tool.d.ts +2 -0
  374. package/dist/types-ts4.5/tools/plan/{index.d.ts → plan-input-schema.d.ts} +3 -15
  375. package/dist/types-ts4.5/tools/plan/plan-tool.d.ts +15 -0
  376. package/dist/types-ts4.5/tools/search-atlaskit-components/list-search-atlaskit-components-tool.d.ts +2 -0
  377. package/dist/types-ts4.5/tools/search-atlaskit-components/search-atlaskit-components-input-schema.d.ts +11 -0
  378. package/dist/types-ts4.5/tools/search-atlaskit-components/search-atlaskit-components-tool.d.ts +4 -0
  379. package/dist/types-ts4.5/tools/search-components/list-search-components-tool.d.ts +2 -0
  380. package/dist/{types/tools/search-components/index.d.ts → types-ts4.5/tools/search-components/search-components-input-schema.d.ts} +0 -3
  381. package/dist/types-ts4.5/tools/search-components/search-components-tool.d.ts +4 -0
  382. package/dist/types-ts4.5/tools/search-icons/list-search-icons-tool.d.ts +2 -0
  383. package/dist/{types/tools/search-icons/index.d.ts → types-ts4.5/tools/search-icons/search-icons-input-schema.d.ts} +0 -3
  384. package/dist/types-ts4.5/tools/search-icons/search-icons-tool.d.ts +4 -0
  385. package/dist/types-ts4.5/tools/search-tokens/list-search-tokens-tool.d.ts +2 -0
  386. package/dist/types-ts4.5/tools/search-tokens/{index.d.ts → search-tokens-input-schema.d.ts} +0 -3
  387. package/dist/types-ts4.5/tools/search-tokens/search-tokens-tool.d.ts +4 -0
  388. package/dist/types-ts4.5/tools/suggest-a11y-fixes/list-suggest-a11y-fixes-tool.d.ts +2 -0
  389. package/dist/types-ts4.5/tools/suggest-a11y-fixes/{index.d.ts → suggest-a11y-fixes-input-schema.d.ts} +0 -8
  390. package/dist/types-ts4.5/tools/suggest-a11y-fixes/suggest-a11y-fixes-tool.d.ts +8 -0
  391. package/index.js +0 -2
  392. package/package.json +4 -9
  393. package/tools/analyze-a11y/package.json +5 -5
  394. package/tools/get-a11y-guidelines/package.json +5 -5
  395. package/tools/get-all-components/package.json +5 -5
  396. package/tools/get-all-icons/package.json +5 -5
  397. package/tools/get-all-tokens/package.json +5 -5
  398. package/tools/get-guidelines/package.json +5 -5
  399. package/tools/get-lint-rules/package.json +5 -5
  400. package/tools/i18n-conversion/package.json +5 -5
  401. package/tools/migration-guides/package.json +5 -5
  402. package/tools/plan/package.json +5 -5
  403. package/tools/search-components/package.json +5 -5
  404. package/tools/search-icons/package.json +5 -5
  405. package/tools/search-tokens/package.json +5 -5
  406. package/tools/suggest-a11y-fixes/package.json +5 -5
  407. package/dist/cjs/tools/analyze-a11y/index.js +0 -483
  408. package/dist/cjs/tools/migration-guides/migrations/onboarding-to-spotlight.js +0 -77
  409. package/dist/es2019/tools/analyze-a11y/index.js +0 -432
  410. package/dist/es2019/tools/get-a11y-guidelines/index.js +0 -58
  411. package/dist/es2019/tools/migration-guides/index.js +0 -69
  412. package/dist/es2019/tools/migration-guides/migrations/onboarding-to-spotlight.js +0 -646
  413. package/dist/es2019/tools/plan/index.js +0 -147
  414. package/dist/esm/tools/analyze-a11y/index.js +0 -478
  415. package/dist/esm/tools/migration-guides/migrations/onboarding-to-spotlight.js +0 -71
  416. package/dist/types/tools/analyze-a11y/index.d.ts +0 -48
  417. package/dist/types/tools/get-a11y-guidelines/index.d.ts +0 -16
  418. package/dist/types/tools/get-guidelines/index.d.ts +0 -13
  419. package/dist/types/tools/i18n-conversion/index.d.ts +0 -16
  420. package/dist/types/tools/migration-guides/index.d.ts +0 -19
  421. package/dist/types/tools/migration-guides/migrations/onboarding-to-spotlight.d.ts +0 -5
  422. package/dist/types-ts4.5/tools/analyze-a11y/index.d.ts +0 -48
  423. package/dist/types-ts4.5/tools/get-a11y-guidelines/index.d.ts +0 -16
  424. package/dist/types-ts4.5/tools/get-guidelines/index.d.ts +0 -13
  425. package/dist/types-ts4.5/tools/migration-guides/migrations/onboarding-to-spotlight.d.ts +0 -5
@@ -0,0 +1,212 @@
1
+ import axe from 'axe-core';
2
+ import { generateADSFixForViolation } from './generate-ads-fix-for-violation';
3
+ const accessibilityPatterns = [{
4
+ pattern: /<button[^>]*>(?!.*aria-label|.*>.*<\/button>)/g,
5
+ violation: 'Button without accessible text',
6
+ severity: 'error',
7
+ suggestion: 'Use the ads_suggest_a11y_fixes tool for ADS Button solutions. Describe the issue as "button missing label", "empty button", or "button needs text".'
8
+ }, {
9
+ pattern: /<img[^>]*>(?!.*alt=)/g,
10
+ violation: 'Image without alt text',
11
+ severity: 'error',
12
+ suggestion: 'Use the ads_suggest_a11y_fixes tool for ADS Image solutions. Describe the issue as "image missing alt", "missing alt text", or "image accessibility".'
13
+ }, {
14
+ pattern: /<div[^>]*onClick[^>]*>/g,
15
+ violation: 'Clickable div without accessibility',
16
+ severity: 'warning',
17
+ suggestion: 'Use the ads_suggest_a11y_fixes tool for ADS solutions. Describe the issue as "clickable div", "interactive div", or "div with click handler".'
18
+ }, {
19
+ pattern: /color:\s*['"]#[0-9a-fA-F]{3,6}['"]/g,
20
+ violation: 'Hardcoded color values',
21
+ severity: 'warning',
22
+ suggestion: 'Use the ads_suggest_a11y_fixes tool for design token solutions. Describe the issue as "hardcoded colors", "hex colors", or "design tokens".'
23
+ }, {
24
+ pattern: /<input[^>]*>(?!.*id=)/g,
25
+ violation: 'Input without associated label',
26
+ severity: 'error',
27
+ suggestion: 'Use the ads_suggest_a11y_fixes tool for ADS form solutions. Describe the issue as "input missing label", "form field without label", or "unlabeled input".'
28
+ }, {
29
+ pattern: /<div[^>]*role="button"[^>]*>/g,
30
+ violation: 'Custom button without full accessibility',
31
+ severity: 'warning',
32
+ suggestion: 'Use the ads_suggest_a11y_fixes tool for ADS Button/Focusable solutions. Describe the issue as "custom button", "div with button role", or "interactive element".'
33
+ }, {
34
+ pattern: /style=\{[^}]*color[^}]*\}/g,
35
+ violation: 'Inline color styles',
36
+ severity: 'warning',
37
+ suggestion: 'Use the ads_suggest_a11y_fixes tool for design token solutions. Describe the issue as "inline styles", "hardcoded colors", or "color tokens".'
38
+ }];
39
+ const adsGuidelines = {
40
+ buttons: {
41
+ title: 'Button Accessibility',
42
+ guidelines: ['Always provide accessible labels for buttons', 'Use Button component for standard interactions', 'Use Focusable component for custom interactive elements', 'Avoid disabled buttons with tooltips', 'Ensure focus indicators are visible']
43
+ },
44
+ forms: {
45
+ title: 'Form Accessibility',
46
+ guidelines: ['Use TextField component for consistent labeling', 'Associate labels with inputs using id and htmlFor', 'Provide clear error messages with aria-describedby', 'Use MessageWrapper for form validation announcements']
47
+ },
48
+ images: {
49
+ title: 'Image Accessibility',
50
+ guidelines: ['Use Image component with proper alt text', 'Keep alt text under 125 characters', 'Leave alt="" for decorative images', 'Describe the purpose, not just the content']
51
+ },
52
+ colors: {
53
+ title: 'Color and Contrast',
54
+ guidelines: ['Use design tokens for consistent contrast ratios', 'Never rely on color alone for information', 'Use color.text tokens for proper contrast', 'Test with high contrast mode']
55
+ }
56
+ };
57
+ function mapAxeViolationsToADSFixes(violations) {
58
+ return violations.map(violation => {
59
+ const adsFix = generateADSFixForViolation(violation);
60
+ return {
61
+ ...violation,
62
+ type: adsFix.title,
63
+ // Use the specific fix key that matches fixes.ts
64
+ adsFix,
65
+ severity: violation.impact === 'critical' || violation.impact === 'serious' ? 'error' : 'warning'
66
+ };
67
+ });
68
+ }
69
+ export const analyzeA11yTool = async params => {
70
+ const {
71
+ code,
72
+ componentName,
73
+ context,
74
+ includePatternAnalysis = true
75
+ } = params;
76
+ const violations = [];
77
+ const suggestions = [];
78
+ const axeResults = {};
79
+ try {
80
+ var _axeResults$violation, _axeResults$passes, _axeResults$incomplet;
81
+ // Run axe-core analysis
82
+ const results = await axe.run({
83
+ fromFrames: ['iframe', 'html']
84
+ });
85
+
86
+ // Process axe-core results
87
+ if (results.violations && results.violations.length > 0) {
88
+ const adsViolations = mapAxeViolationsToADSFixes(results.violations);
89
+ violations.push(...adsViolations);
90
+ axeResults.violations = results.violations;
91
+ axeResults.passes = results.passes;
92
+ axeResults.incomplete = results.incomplete;
93
+ }
94
+
95
+ // Include pattern-based analysis if requested
96
+ if (includePatternAnalysis) {
97
+ accessibilityPatterns.forEach(pattern => {
98
+ const matches = code.match(pattern.pattern);
99
+ if (matches) {
100
+ violations.push({
101
+ type: pattern.violation,
102
+ severity: pattern.severity,
103
+ count: matches.length,
104
+ suggestion: pattern.suggestion,
105
+ adsFix: 'Use the ads_suggest_a11y_fixes tool for specific ADS component solutions',
106
+ example: 'The ads_suggest_a11y_fixes tool provides detailed code examples',
107
+ source: 'pattern-analysis'
108
+ });
109
+ }
110
+ });
111
+ }
112
+
113
+ // Generate ADS-specific suggestions
114
+ if (violations.length > 0) {
115
+ suggestions.push({
116
+ title: 'Accessibility Improvements Needed',
117
+ description: `Found ${violations.length} accessibility issues in your code.`,
118
+ violations,
119
+ nextSteps: ['Review each violation and apply the suggested fixes', 'Use ADS components instead of custom implementations', 'Test with screen readers and keyboard navigation', 'Run automated accessibility tests']
120
+ });
121
+ }
122
+
123
+ // Provide relevant ADS guidelines
124
+ const relevantGuidelines = [];
125
+ if (code.includes('button') || code.includes('onClick')) {
126
+ relevantGuidelines.push(adsGuidelines.buttons);
127
+ }
128
+ if (code.includes('input') || code.includes('form')) {
129
+ relevantGuidelines.push(adsGuidelines.forms);
130
+ }
131
+ if (code.includes('img') || code.includes('image')) {
132
+ relevantGuidelines.push(adsGuidelines.images);
133
+ }
134
+ if (code.includes('color') || code.includes('style')) {
135
+ relevantGuidelines.push(adsGuidelines.colors);
136
+ }
137
+
138
+ // Generate summary
139
+ const summary = {
140
+ componentName: componentName || 'Unknown component',
141
+ totalViolations: violations.length,
142
+ severityBreakdown: {
143
+ error: violations.filter(v => v.severity === 'error').length,
144
+ warning: violations.filter(v => v.severity === 'warning').length
145
+ },
146
+ context: context || 'No additional context provided',
147
+ axeResults: {
148
+ violations: ((_axeResults$violation = axeResults.violations) === null || _axeResults$violation === void 0 ? void 0 : _axeResults$violation.length) || 0,
149
+ passes: ((_axeResults$passes = axeResults.passes) === null || _axeResults$passes === void 0 ? void 0 : _axeResults$passes.length) || 0,
150
+ incomplete: ((_axeResults$incomplet = axeResults.incomplete) === null || _axeResults$incomplet === void 0 ? void 0 : _axeResults$incomplet.length) || 0
151
+ }
152
+ };
153
+ return {
154
+ content: [{
155
+ type: 'text',
156
+ text: JSON.stringify({
157
+ summary,
158
+ violations,
159
+ suggestions,
160
+ relevantGuidelines,
161
+ axeResults,
162
+ recommendations: ['Use ADS components for better accessibility out of the box', 'Reference https://atlassian.design/llms-a11y.txt for detailed guidelines', 'Test with keyboard navigation and screen readers', 'Use automated accessibility testing tools']
163
+ }, null, 2)
164
+ }]
165
+ };
166
+ } catch {
167
+ // Fallback to pattern-based analysis if axe-core fails
168
+ // console.warn('Axe-core analysis failed, falling back to pattern analysis:', error);
169
+
170
+ // Run pattern analysis as fallback
171
+ accessibilityPatterns.forEach(pattern => {
172
+ const matches = code.match(pattern.pattern);
173
+ if (matches) {
174
+ violations.push({
175
+ type: pattern.violation,
176
+ severity: pattern.severity,
177
+ count: matches.length,
178
+ suggestion: pattern.suggestion,
179
+ adsFix: 'Use the ads_suggest_a11y_fixes tool for specific ADS component solutions',
180
+ example: 'The ads_suggest_a11y_fixes tool provides detailed code examples',
181
+ source: 'pattern-analysis-fallback'
182
+ });
183
+ }
184
+ });
185
+ return {
186
+ content: [{
187
+ type: 'text',
188
+ text: JSON.stringify({
189
+ summary: {
190
+ componentName: componentName || 'Unknown component',
191
+ totalViolations: violations.length,
192
+ severityBreakdown: {
193
+ error: violations.filter(v => v.severity === 'error').length,
194
+ warning: violations.filter(v => v.severity === 'warning').length
195
+ },
196
+ context: context || 'No additional context provided',
197
+ note: 'Analysis completed using pattern matching (axe-core analysis failed)'
198
+ },
199
+ violations,
200
+ suggestions: violations.length > 0 ? [{
201
+ title: 'Accessibility Improvements Needed',
202
+ description: `Found ${violations.length} accessibility issues in your code.`,
203
+ violations,
204
+ nextSteps: ['Review each violation and apply the suggested fixes', 'Use ADS components instead of custom implementations', 'Test with screen readers and keyboard navigation', 'Run automated accessibility tests']
205
+ }] : [],
206
+ error: 'Axe-core analysis failed, used pattern-based analysis as fallback',
207
+ recommendations: ['Use ADS components for better accessibility out of the box', 'Reference https://atlassian.design/llms-a11y.txt for detailed guidelines', 'Test with keyboard navigation and screen readers', 'Use automated accessibility testing tools']
208
+ }, null, 2)
209
+ }]
210
+ };
211
+ }
212
+ };
@@ -0,0 +1,163 @@
1
+ import { AxePuppeteer } from '@axe-core/puppeteer';
2
+ import puppeteer from 'puppeteer';
3
+ import { generateADSFixForViolation } from './generate-ads-fix-for-violation';
4
+ const adsGuidelines = {
5
+ buttons: {
6
+ title: 'Button Accessibility',
7
+ guidelines: ['Always provide accessible labels for buttons', 'Use Button component for standard interactions', 'Use Focusable component for custom interactive elements', 'Avoid disabled buttons with tooltips', 'Ensure focus indicators are visible']
8
+ },
9
+ forms: {
10
+ title: 'Form Accessibility',
11
+ guidelines: ['Use TextField component for consistent labeling', 'Associate labels with inputs using id and htmlFor', 'Provide clear error messages with aria-describedby', 'Use MessageWrapper for form validation announcements']
12
+ },
13
+ images: {
14
+ title: 'Image Accessibility',
15
+ guidelines: ['Use Image component with proper alt text', 'Keep alt text under 125 characters', 'Leave alt="" for decorative images', 'Describe the purpose, not just the content']
16
+ },
17
+ colors: {
18
+ title: 'Color and Contrast',
19
+ guidelines: ['Use design tokens for consistent contrast ratios', 'Never rely on color alone for information', 'Use color.text tokens for proper contrast', 'Test with high contrast mode']
20
+ }
21
+ };
22
+ function mapAxeViolationsToADSFixes(violations) {
23
+ return violations.map(violation => {
24
+ const adsFix = generateADSFixForViolation(violation);
25
+ return {
26
+ ...violation,
27
+ type: adsFix.title,
28
+ // Use the specific fix key that matches fixes.ts
29
+ adsFix,
30
+ severity: violation.impact === 'critical' || violation.impact === 'serious' ? 'error' : 'warning'
31
+ };
32
+ });
33
+ }
34
+ export const analyzeLocalhostA11yTool = async params => {
35
+ const {
36
+ url,
37
+ componentName,
38
+ context,
39
+ selector
40
+ } = params;
41
+ const violations = [];
42
+ const suggestions = [];
43
+ const axeResults = {};
44
+ const browser = await puppeteer.launch();
45
+ const page = await browser.newPage();
46
+ try {
47
+ var _axeResults$violation, _axeResults$passes, _axeResults$incomplet;
48
+ await page.goto(url, {
49
+ waitUntil: 'networkidle0'
50
+ });
51
+
52
+ // If a selector is provided, check if the element exists
53
+ if (selector) {
54
+ const elementExists = await page.$(selector);
55
+ if (!elementExists) {
56
+ // Get list of available elements with IDs for helpful error message
57
+ const availableElements = await page.evaluate(() => {
58
+ const elements = Array.from(document.querySelectorAll('[id]'));
59
+ return elements.map(el => `#${el.id}`);
60
+ });
61
+ throw new Error(`Element with selector "${selector}" not found on the page after waiting. Available elements: ${availableElements.join(', ')}`);
62
+ }
63
+ }
64
+
65
+ // Run axe-core accessibility analysis
66
+ const axePuppeteer = new AxePuppeteer(page);
67
+
68
+ // If selector is provided, analyze only that element
69
+ if (selector) {
70
+ axePuppeteer.include(selector);
71
+ }
72
+ const results = await axePuppeteer.analyze();
73
+ if (results.violations && results.violations.length > 0) {
74
+ const adsViolations = mapAxeViolationsToADSFixes(results.violations);
75
+ violations.push(...adsViolations);
76
+ axeResults.violations = results.violations;
77
+ axeResults.passes = results.passes;
78
+ axeResults.incomplete = results.incomplete;
79
+ }
80
+
81
+ // Generate ADS-specific suggestions
82
+ if (violations.length > 0) {
83
+ suggestions.push({
84
+ title: 'Accessibility Improvements Needed',
85
+ description: `Found ${violations.length} accessibility issues in your code.`,
86
+ violations,
87
+ nextSteps: ['Review each violation and apply the suggested fixes', 'Use ADS components instead of custom implementations', 'Test with screen readers and keyboard navigation', 'Run automated accessibility tests']
88
+ });
89
+ }
90
+
91
+ // Provide relevant ADS guidelines
92
+ const relevantGuidelines = [];
93
+ if (url.includes('button') || url.includes('onClick')) {
94
+ relevantGuidelines.push(adsGuidelines.buttons);
95
+ }
96
+ if (url.includes('input') || url.includes('form')) {
97
+ relevantGuidelines.push(adsGuidelines.forms);
98
+ }
99
+ if (url.includes('img') || url.includes('image')) {
100
+ relevantGuidelines.push(adsGuidelines.images);
101
+ }
102
+ if (url.includes('color') || url.includes('style')) {
103
+ relevantGuidelines.push(adsGuidelines.colors);
104
+ }
105
+
106
+ // Generate summary
107
+ const summary = {
108
+ url,
109
+ selector: selector || 'Entire page analyzed',
110
+ componentName: componentName || 'Unknown component',
111
+ totalViolations: violations.length,
112
+ severityBreakdown: {
113
+ error: violations.filter(v => v.severity === 'error').length,
114
+ warning: violations.filter(v => v.severity === 'warning').length
115
+ },
116
+ context: context || 'No additional context provided',
117
+ axeResults: {
118
+ violations: ((_axeResults$violation = axeResults.violations) === null || _axeResults$violation === void 0 ? void 0 : _axeResults$violation.length) || 0,
119
+ passes: ((_axeResults$passes = axeResults.passes) === null || _axeResults$passes === void 0 ? void 0 : _axeResults$passes.length) || 0,
120
+ incomplete: ((_axeResults$incomplet = axeResults.incomplete) === null || _axeResults$incomplet === void 0 ? void 0 : _axeResults$incomplet.length) || 0
121
+ }
122
+ };
123
+ await browser.close();
124
+ return {
125
+ content: [{
126
+ type: 'text',
127
+ text: JSON.stringify({
128
+ summary,
129
+ violations,
130
+ suggestions,
131
+ relevantGuidelines,
132
+ axeResults,
133
+ recommendations: ['Use ADS components for better accessibility out of the box', 'Reference https://atlassian.design/llms-a11y.txt for detailed guidelines', 'Test with keyboard navigation and screen readers', 'Use automated accessibility testing tools']
134
+ }, null, 2)
135
+ }]
136
+ };
137
+ } catch (error) {
138
+ await browser.close();
139
+ return {
140
+ content: [{
141
+ type: 'text',
142
+ text: JSON.stringify({
143
+ summary: {
144
+ url,
145
+ selector: selector || 'Entire page analyzed',
146
+ componentName: componentName || 'Unknown component',
147
+ totalViolations: violations.length,
148
+ severityBreakdown: {
149
+ error: violations.filter(v => v.severity === 'error').length,
150
+ warning: violations.filter(v => v.severity === 'warning').length
151
+ },
152
+ context: context || 'No additional context provided',
153
+ note: 'Analysis failed to run on the provided URL'
154
+ },
155
+ violations,
156
+ suggestions: [],
157
+ error: String(error),
158
+ recommendations: ['Use ADS components for better accessibility out of the box', 'Reference https://atlassian.design/llms-a11y.txt for detailed guidelines', 'Test with keyboard navigation and screen readers', 'Use automated accessibility testing tools']
159
+ }, null, 2)
160
+ }]
161
+ };
162
+ }
163
+ };
@@ -0,0 +1,26 @@
1
+ // Helper function to provide ADS-specific guidance for axe-core violations
2
+ export function generateADSFixForViolation(violation) {
3
+ const {
4
+ id,
5
+ description,
6
+ help,
7
+ tags
8
+ } = violation;
9
+
10
+ // Provide general guidance without trying to map to specific fixes.ts keys
11
+ const adsFix = `Use the ads_suggest_a11y_fixes tool to get specific ADS component solutions. Describe the issue using the violation details: "${help}" or in your own words (e.g., "button has no text", "missing alt text", "form field needs label").`;
12
+ return {
13
+ title: help,
14
+ // Use axe-core's human-readable description
15
+ description: description,
16
+ adsFix,
17
+ example: 'The ads_suggest_a11y_fixes tool provides detailed code examples and ADS component solutions',
18
+ violationId: id,
19
+ axeHelp: help,
20
+ tags,
21
+ wcagTags: tags.filter(tag => tag.startsWith('wcag')),
22
+ // Extract WCAG compliance info
23
+ reference: `https://atlassian.design/llms-a11y.txt`,
24
+ recommendations: ['Use ADS components for better accessibility out of the box', 'Reference the ads_suggest_a11y_fixes tool for specific solutions', 'Test with keyboard navigation and screen readers', 'Use automated accessibility testing tools']
25
+ };
26
+ }
@@ -0,0 +1,21 @@
1
+ import { zodToJsonSchema } from '../../helpers/zod-to-json-schema';
2
+ import { analyzeA11yInputSchema } from './analyze-a11y-input-schema';
3
+ export const listAnalyzeA11yTool = {
4
+ name: 'ads_analyze_a11y',
5
+ description: `Analyzes a **string of React/JSX** code for likely accessibility issues (heuristics and/or axe-related paths) and returns hints that often **point to** \`ads_suggest_a11y_fixes\` or generic axe/WCAG-style context—not every finding maps to a specific ADS component fix.
6
+
7
+ WHEN TO USE:
8
+ You have component source as text and want automated checks or heuristics before or during a code review.
9
+
10
+ LIMITATIONS:
11
+ - Does not replace testing in a real browser with assistive technologies or full keyboard traversal.
12
+ - For rendered UI, \`ads_analyze_localhost_a11y\` (live URL + axe) is preferable when available—it is **only exposed when this MCP runs locally**, not in the remote MCP deployment.`,
13
+ annotations: {
14
+ title: 'Analyze accessibility (code string)',
15
+ readOnlyHint: true,
16
+ destructiveHint: false,
17
+ idempotentHint: true,
18
+ openWorldHint: true
19
+ },
20
+ inputSchema: zodToJsonSchema(analyzeA11yInputSchema)
21
+ };
@@ -0,0 +1,23 @@
1
+ import { zodToJsonSchema } from '../../helpers/zod-to-json-schema';
2
+ import { analyzeA11yLocalhostInputSchema } from './analyze-a11y-localhost-input-schema';
3
+ export const listAnalyzeLocalhostA11yTool = {
4
+ name: 'ads_analyze_localhost_a11y',
5
+ description: `Loads a **live URL** in a headless browser, runs **axe-core**, and returns violations with follow-up hints (often suggesting \`ads_suggest_a11y_fixes\`). Output is anchored in **axe** rule text; remediation may be generic or ADS-biased depending on the violation.
6
+
7
+ **Availability:** This tool is only registered when the ADS MCP runs **on your machine** (local MCP). It is **not** available in the **remote** MCP offering—use \`ads_analyze_a11y\` on source text there instead.
8
+
9
+ WHEN TO USE:
10
+ You have a running app or storybook page and need automated accessibility results on **rendered** UI—especially local or staging URLs.
11
+
12
+ LIMITATIONS:
13
+ - Does not replace manual testing with assistive technologies or keyboard-only navigation.
14
+ - Requires network access to the URL from the environment running the MCP.`,
15
+ annotations: {
16
+ title: 'Analyze accessibility (live URL)',
17
+ readOnlyHint: true,
18
+ destructiveHint: false,
19
+ idempotentHint: true,
20
+ openWorldHint: true
21
+ },
22
+ inputSchema: zodToJsonSchema(analyzeA11yLocalhostInputSchema)
23
+ };
@@ -0,0 +1,7 @@
1
+ /* eslint-disable-next-line import/extensions -- MCP SDK requires .js extensions for ESM imports */
2
+ import { z } from 'zod';
3
+ import { accessibilityGuidelines } from './guidelines';
4
+ const topics = Object.keys(accessibilityGuidelines);
5
+ export const getA11yGuidelinesInputSchema = z.object({
6
+ topic: z.string().optional().describe('ADS accessibility topic key. Omit to receive all topics and the full guideline bundle. Pass a valid key (see response \`availableTopics\`) or \`general\` for a focused overview when supported. Known topics: ' + topics.join(', ') + '.')
7
+ });
@@ -0,0 +1,34 @@
1
+ /* eslint-disable-next-line import/extensions -- MCP SDK requires .js extensions for ESM imports */
2
+
3
+ import { accessibilityGuidelines } from './guidelines';
4
+ const topics = Object.keys(accessibilityGuidelines);
5
+ export const getA11yGuidelinesTool = async ({
6
+ topic
7
+ }) => {
8
+ if (topic && accessibilityGuidelines[topic]) {
9
+ const guidelines = accessibilityGuidelines[topic];
10
+ return {
11
+ content: [{
12
+ type: 'text',
13
+ text: JSON.stringify({
14
+ topic,
15
+ ...guidelines,
16
+ additionalResources: ['https://atlassian.design/llms-a11y.txt - Complete ADS accessibility documentation', 'https://atlassian.design/foundations/accessibility - ADS accessibility foundation', 'https://www.w3.org/WAI/WCAG21/quickref/ - WCAG 2.1 guidelines']
17
+ }, null, 2)
18
+ }]
19
+ };
20
+ }
21
+
22
+ // Return all guidelines if no specific topic requested
23
+ return {
24
+ content: [{
25
+ type: 'text',
26
+ text: JSON.stringify({
27
+ availableTopics: topics,
28
+ message: 'Specify a topic to get detailed guidelines, or use "general" for overview',
29
+ guidelines: accessibilityGuidelines,
30
+ additionalResources: ['https://atlassian.design/llms-a11y.txt - Complete ADS accessibility documentation', 'https://atlassian.design/foundations/accessibility - ADS accessibility foundation']
31
+ }, null, 2)
32
+ }]
33
+ };
34
+ };
@@ -0,0 +1,23 @@
1
+ /* eslint-disable-next-line import/extensions -- MCP SDK requires .js extensions for ESM imports */
2
+
3
+ import { zodToJsonSchema } from '../../helpers/zod-to-json-schema';
4
+ import { getA11yGuidelinesInputSchema } from './get-a11y-guidelines-input-schema';
5
+ export const listGetA11yGuidelinesTool = {
6
+ name: 'ads_get_a11y_guidelines',
7
+ description: `Returns Atlassian Design System (ADS) accessibility guidance: best practices and patterns for buttons, interactions, color contrast, forms, and other design-system topics shipped in this tool.
8
+
9
+ Use this alongside the Context Engine MCP tool \`get_accessibility_docs\` for Atlassian-wide accessibility standards (e.g. A11YKB); this tool supplies ADS-specific component and pattern guidance.
10
+
11
+ WHEN TO USE:
12
+ You MUST call this when generating or substantially changing a new interactive or visual user interface built with ADS, or when you need topic-specific ADS guidance (e.g. focus, forms, motion).
13
+
14
+ DO NOT rely on generic web accessibility advice alone—ADS conventions may differ. Use \`get_accessibility_docs\` for org-wide standards and this tool for ADS-topic guidance.`,
15
+ annotations: {
16
+ title: 'Get ADS accessibility guidelines',
17
+ readOnlyHint: true,
18
+ destructiveHint: false,
19
+ idempotentHint: true,
20
+ openWorldHint: true
21
+ },
22
+ inputSchema: zodToJsonSchema(getA11yGuidelinesInputSchema)
23
+ };
@@ -0,0 +1,12 @@
1
+ /* eslint-disable-next-line import/extensions -- MCP SDK requires .js extensions for ESM imports */
2
+ import { loadAllComponents } from './load-all-components';
3
+ export const getAllComponentsTool = async () => {
4
+ return {
5
+ content: loadAllComponents().map(component => ({
6
+ // NOTE: Ideally one day the MCP would support structured content…
7
+ // eg. `type: 'object', data: component`
8
+ type: 'text',
9
+ text: JSON.stringify(component, null, 2)
10
+ }))
11
+ };
12
+ };
@@ -1,8 +1,7 @@
1
1
  /* eslint-disable-next-line import/extensions -- MCP SDK requires .js extensions for ESM imports */
2
2
 
3
3
  import { z } from 'zod';
4
- import { zodToJsonSchema } from '../../helpers';
5
- import { loadAllComponents } from './load-all-components';
4
+ import { zodToJsonSchema } from '../../helpers/zod-to-json-schema';
6
5
  export const listGetAllComponentsTool = {
7
6
  name: 'ads_get_all_components',
8
7
  description: `Returns **every** Atlassian Design System component record as separate JSON text chunks (full catalog; large payload).
@@ -19,14 +18,4 @@ No parameters.`,
19
18
  openWorldHint: true
20
19
  },
21
20
  inputSchema: zodToJsonSchema(z.object({}))
22
- };
23
- export const getAllComponentsTool = async () => {
24
- return {
25
- content: loadAllComponents().map(component => ({
26
- // NOTE: Ideally one day the MCP would support structured content…
27
- // eg. `type: 'object', data: component`
28
- type: 'text',
29
- text: JSON.stringify(component, null, 2)
30
- }))
31
- };
32
21
  };
@@ -0,0 +1,10 @@
1
+ /* eslint-disable-next-line import/extensions -- MCP SDK requires .js extensions for ESM imports */
2
+ import { icons } from './icons';
3
+ export const getAllIconsTool = async () => ({
4
+ content: icons.map(icon => ({
5
+ // NOTE: Ideally one day the MCP would support structured content…
6
+ // eg. `type: 'object', data: icon`
7
+ type: 'text',
8
+ text: JSON.stringify(icon, null, 2)
9
+ }))
10
+ });
@@ -1,8 +1,7 @@
1
1
  /* eslint-disable-next-line import/extensions -- MCP SDK requires .js extensions for ESM imports */
2
2
 
3
3
  import { z } from 'zod';
4
- import { zodToJsonSchema } from '../../helpers';
5
- import { icons } from './icons';
4
+ import { zodToJsonSchema } from '../../helpers/zod-to-json-schema';
6
5
  export const listGetAllIconsTool = {
7
6
  name: 'ads_get_all_icons',
8
7
  description: `Returns **every** ADS icon record as separate JSON text chunks (full catalog; large payload).
@@ -19,12 +18,4 @@ No parameters.`,
19
18
  openWorldHint: true
20
19
  },
21
20
  inputSchema: zodToJsonSchema(z.object({}))
22
- };
23
- export const getAllIconsTool = async () => ({
24
- content: icons.map(icon => ({
25
- // NOTE: Ideally one day the MCP would support structured content…
26
- // eg. `type: 'object', data: icon`
27
- type: 'text',
28
- text: JSON.stringify(icon, null, 2)
29
- }))
30
- });
21
+ };
@@ -0,0 +1,13 @@
1
+ import { tokens } from '@atlaskit/tokens/token-metadata';
2
+ export const getAllTokensTool = async () => ({
3
+ content: tokens.map(token => ({
4
+ // NOTE: Ideally one day the MCP would support structured content…
5
+ // eg. `type: 'object', data: token`
6
+ type: 'text',
7
+ text: JSON.stringify({
8
+ name: token.name,
9
+ exampleValue: token.exampleValue,
10
+ usageGuidelines: token.usageGuidelines
11
+ }, null, 2)
12
+ }))
13
+ });
@@ -1,8 +1,7 @@
1
1
  /* eslint-disable-next-line import/extensions -- MCP SDK requires .js extensions for ESM imports */
2
2
 
3
3
  import { z } from 'zod';
4
- import { tokens } from '@atlaskit/tokens/token-metadata';
5
- import { zodToJsonSchema } from '../../helpers';
4
+ import { zodToJsonSchema } from '../../helpers/zod-to-json-schema';
6
5
  const inputSchema = z.object({});
7
6
  export const listGetAllTokensTool = {
8
7
  name: 'ads_get_all_tokens',
@@ -20,16 +19,4 @@ No parameters.`,
20
19
  openWorldHint: true
21
20
  },
22
21
  inputSchema: zodToJsonSchema(inputSchema)
23
- };
24
- export const getAllTokensTool = async () => ({
25
- content: tokens.map(token => ({
26
- // NOTE: Ideally one day the MCP would support structured content…
27
- // eg. `type: 'object', data: token`
28
- type: 'text',
29
- text: JSON.stringify({
30
- name: token.name,
31
- exampleValue: token.exampleValue,
32
- usageGuidelines: token.usageGuidelines
33
- }, null, 2)
34
- }))
35
- });
22
+ };