swwa-mcp 0.1.0

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 (175) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +50 -0
  3. package/assets/alt-text-ko.json +7 -0
  4. package/assets/axe-rule-map.json +196 -0
  5. package/assets/certification.json +47 -0
  6. package/assets/kwcag22-checklist.md +123 -0
  7. package/assets/kwcag22.json +1688 -0
  8. package/assets/link-text-ko.json +8 -0
  9. package/assets/mobile-app-2.0.md +38 -0
  10. package/assets/sources.json +68 -0
  11. package/assets/wcag22.json +780 -0
  12. package/bin/swwa-mcp.mjs +15 -0
  13. package/dist/color/contrast.js +175 -0
  14. package/dist/color/contrast.js.map +1 -0
  15. package/dist/data/axe-map.js +32 -0
  16. package/dist/data/axe-map.js.map +1 -0
  17. package/dist/data/certification.js +54 -0
  18. package/dist/data/certification.js.map +1 -0
  19. package/dist/data/kwcag22.js +91 -0
  20. package/dist/data/kwcag22.js.map +1 -0
  21. package/dist/data/loader.js +18 -0
  22. package/dist/data/loader.js.map +1 -0
  23. package/dist/data/sources.js +44 -0
  24. package/dist/data/sources.js.map +1 -0
  25. package/dist/data/wcag22.js +44 -0
  26. package/dist/data/wcag22.js.map +1 -0
  27. package/dist/data/wordlists.js +40 -0
  28. package/dist/data/wordlists.js.map +1 -0
  29. package/dist/engine/browser-detect.js +44 -0
  30. package/dist/engine/browser-detect.js.map +1 -0
  31. package/dist/engine/browser.js +114 -0
  32. package/dist/engine/browser.js.map +1 -0
  33. package/dist/engine/static-worker.js +18 -0
  34. package/dist/engine/static-worker.js.map +1 -0
  35. package/dist/engine/static.js +139 -0
  36. package/dist/engine/static.js.map +1 -0
  37. package/dist/engine/url-guard.js +37 -0
  38. package/dist/engine/url-guard.js.map +1 -0
  39. package/dist/index.js +23 -0
  40. package/dist/index.js.map +1 -0
  41. package/dist/messages.js +176 -0
  42. package/dist/messages.js.map +1 -0
  43. package/dist/normalize/axe.js +72 -0
  44. package/dist/normalize/axe.js.map +1 -0
  45. package/dist/normalize/checkpoints.js +47 -0
  46. package/dist/normalize/checkpoints.js.map +1 -0
  47. package/dist/normalize/finding.js +24 -0
  48. package/dist/normalize/finding.js.map +1 -0
  49. package/dist/normalize/locale.js +20 -0
  50. package/dist/normalize/locale.js.map +1 -0
  51. package/dist/prompts/audit-report.js +45 -0
  52. package/dist/prompts/audit-report.js.map +1 -0
  53. package/dist/prompts/review-markup.js +35 -0
  54. package/dist/prompts/review-markup.js.map +1 -0
  55. package/dist/report/cert.js +72 -0
  56. package/dist/report/cert.js.map +1 -0
  57. package/dist/report/format.js +36 -0
  58. package/dist/report/format.js.map +1 -0
  59. package/dist/report/summarize.js +61 -0
  60. package/dist/report/summarize.js.map +1 -0
  61. package/dist/report/types.js +2 -0
  62. package/dist/report/types.js.map +1 -0
  63. package/dist/resources/index.js +69 -0
  64. package/dist/resources/index.js.map +1 -0
  65. package/dist/rules/b/b-focus-order.js +33 -0
  66. package/dist/rules/b/b-focus-order.js.map +1 -0
  67. package/dist/rules/b/b-focus-visible.js +71 -0
  68. package/dist/rules/b/b-focus-visible.js.map +1 -0
  69. package/dist/rules/b/b-keyboard-reachable.js +82 -0
  70. package/dist/rules/b/b-keyboard-reachable.js.map +1 -0
  71. package/dist/rules/b/b-motion-runtime.js +50 -0
  72. package/dist/rules/b/b-motion-runtime.js.map +1 -0
  73. package/dist/rules/b/b-skip-link-works.js +58 -0
  74. package/dist/rules/b/b-skip-link-works.js.map +1 -0
  75. package/dist/rules/b/b-target-size-6mm.js +54 -0
  76. package/dist/rules/b/b-target-size-6mm.js.map +1 -0
  77. package/dist/rules/b/index.js +7 -0
  78. package/dist/rules/b/index.js.map +1 -0
  79. package/dist/rules/k/index.js +33 -0
  80. package/dist/rules/k/index.js.map +1 -0
  81. package/dist/rules/k/k-accesskey.js +20 -0
  82. package/dist/rules/k/k-accesskey.js.map +1 -0
  83. package/dist/rules/k/k-alt-meaningless.js +35 -0
  84. package/dist/rules/k/k-alt-meaningless.js.map +1 -0
  85. package/dist/rules/k/k-autocomplete-missing.js +36 -0
  86. package/dist/rules/k/k-autocomplete-missing.js.map +1 -0
  87. package/dist/rules/k/k-autoplay-media.js +30 -0
  88. package/dist/rules/k/k-autoplay-media.js.map +1 -0
  89. package/dist/rules/k/k-captcha-detect.js +24 -0
  90. package/dist/rules/k/k-captcha-detect.js.map +1 -0
  91. package/dist/rules/k/k-carousel-no-pause.js +33 -0
  92. package/dist/rules/k/k-carousel-no-pause.js.map +1 -0
  93. package/dist/rules/k/k-device-motion.js +22 -0
  94. package/dist/rules/k/k-device-motion.js.map +1 -0
  95. package/dist/rules/k/k-down-event-action.js +19 -0
  96. package/dist/rules/k/k-down-event-action.js.map +1 -0
  97. package/dist/rules/k/k-error-association.js +31 -0
  98. package/dist/rules/k/k-error-association.js.map +1 -0
  99. package/dist/rules/k/k-flash-animation.js +57 -0
  100. package/dist/rules/k/k-flash-animation.js.map +1 -0
  101. package/dist/rules/k/k-gesture-listener.js +30 -0
  102. package/dist/rules/k/k-gesture-listener.js.map +1 -0
  103. package/dist/rules/k/k-iframe-title.js +23 -0
  104. package/dist/rules/k/k-iframe-title.js.map +1 -0
  105. package/dist/rules/k/k-lang-ko-expected.js +29 -0
  106. package/dist/rules/k/k-lang-ko-expected.js.map +1 -0
  107. package/dist/rules/k/k-link-same-text-diff-href.js +41 -0
  108. package/dist/rules/k/k-link-same-text-diff-href.js.map +1 -0
  109. package/dist/rules/k/k-link-text-generic.js +29 -0
  110. package/dist/rules/k/k-link-text-generic.js.map +1 -0
  111. package/dist/rules/k/k-media-track.js +22 -0
  112. package/dist/rules/k/k-media-track.js.map +1 -0
  113. package/dist/rules/k/k-mouse-only-handler.js +27 -0
  114. package/dist/rules/k/k-mouse-only-handler.js.map +1 -0
  115. package/dist/rules/k/k-new-window-notice.js +27 -0
  116. package/dist/rules/k/k-new-window-notice.js.map +1 -0
  117. package/dist/rules/k/k-onload-popup.js +30 -0
  118. package/dist/rules/k/k-onload-popup.js.map +1 -0
  119. package/dist/rules/k/k-outline-none.js +55 -0
  120. package/dist/rules/k/k-outline-none.js.map +1 -0
  121. package/dist/rules/k/k-parse-errors.js +38 -0
  122. package/dist/rules/k/k-parse-errors.js.map +1 -0
  123. package/dist/rules/k/k-placeholder-only-label.js +32 -0
  124. package/dist/rules/k/k-placeholder-only-label.js.map +1 -0
  125. package/dist/rules/k/k-select-onchange.js +19 -0
  126. package/dist/rules/k/k-select-onchange.js.map +1 -0
  127. package/dist/rules/k/k-sensory-instruction.js +32 -0
  128. package/dist/rules/k/k-sensory-instruction.js.map +1 -0
  129. package/dist/rules/k/k-session-timeout-hint.js +29 -0
  130. package/dist/rules/k/k-session-timeout-hint.js.map +1 -0
  131. package/dist/rules/k/k-skip-link-first.js +23 -0
  132. package/dist/rules/k/k-skip-link-first.js.map +1 -0
  133. package/dist/rules/k/k-skip-target-exists.js +28 -0
  134. package/dist/rules/k/k-skip-target-exists.js.map +1 -0
  135. package/dist/rules/k/k-tabindex-positive.js +23 -0
  136. package/dist/rules/k/k-tabindex-positive.js.map +1 -0
  137. package/dist/rules/k/k-table-caption.js +26 -0
  138. package/dist/rules/k/k-table-caption.js.map +1 -0
  139. package/dist/rules/k/k-table-th-missing.js +28 -0
  140. package/dist/rules/k/k-table-th-missing.js.map +1 -0
  141. package/dist/rules/k/k-title-generic.js +35 -0
  142. package/dist/rules/k/k-title-generic.js.map +1 -0
  143. package/dist/rules/registry.js +62 -0
  144. package/dist/rules/registry.js.map +1 -0
  145. package/dist/rules/types.js +2 -0
  146. package/dist/rules/types.js.map +1 -0
  147. package/dist/rules/util/browser-dom.js +50 -0
  148. package/dist/rules/util/browser-dom.js.map +1 -0
  149. package/dist/rules/util/focusable.js +29 -0
  150. package/dist/rules/util/focusable.js.map +1 -0
  151. package/dist/rules/util/selector.js +19 -0
  152. package/dist/rules/util/selector.js.map +1 -0
  153. package/dist/rules/util/text.js +13 -0
  154. package/dist/rules/util/text.js.map +1 -0
  155. package/dist/schema-dialect.js +41 -0
  156. package/dist/schema-dialect.js.map +1 -0
  157. package/dist/server.js +36 -0
  158. package/dist/server.js.map +1 -0
  159. package/dist/tools/audit-url.js +109 -0
  160. package/dist/tools/audit-url.js.map +1 -0
  161. package/dist/tools/browser-status.js +29 -0
  162. package/dist/tools/browser-status.js.map +1 -0
  163. package/dist/tools/cert-readiness.js +76 -0
  164. package/dist/tools/cert-readiness.js.map +1 -0
  165. package/dist/tools/check-contrast.js +58 -0
  166. package/dist/tools/check-contrast.js.map +1 -0
  167. package/dist/tools/check-html.js +88 -0
  168. package/dist/tools/check-html.js.map +1 -0
  169. package/dist/tools/checklist.js +94 -0
  170. package/dist/tools/checklist.js.map +1 -0
  171. package/dist/tools/lookup.js +70 -0
  172. package/dist/tools/lookup.js.map +1 -0
  173. package/dist/tools/report-schema.js +49 -0
  174. package/dist/tools/report-schema.js.map +1 -0
  175. package/package.json +76 -0
@@ -0,0 +1,8 @@
1
+ {
2
+ "generic": [
3
+ "더보기", "여기", "여기를 클릭", "클릭", "클릭하세요", "자세히", "자세히 보기",
4
+ "바로가기", "이동", "링크", "상세보기", "전체보기",
5
+ "more", "click here", "read more", "learn more", "view more", "here", "link"
6
+ ],
7
+ "generic_prefix": ["자세히 보기", "더 알아보기"]
8
+ }
@@ -0,0 +1,38 @@
1
+ # 모바일 애플리케이션 콘텐츠 접근성 지침 2.0 (요약)
2
+
3
+ > 국가표준 KS X 3253 「모바일 애플리케이션 콘텐츠 접근성 지침 2.0」의 **요약 레퍼런스**다(00-overview.md
4
+ > 확정 결정: "모바일 앱 참고" 범위 — 웹 검사 도구인 `swwa`는 네이티브 앱을 직접 검사하지 않는다).
5
+ > 원문 전재 금지(NFR-04) — 조항 번호·정확한 지침 문구는 **표준 원문으로 재확인 필요**
6
+ > (`needsVerification`). 이 문서는 KWCAG 2.2와의 대응 감을 잡기 위한 참고용 개요다.
7
+
8
+ ## 개요
9
+
10
+ KWCAG 2.2가 웹 콘텐츠를 대상으로 하는 것과 달리, 이 지침은 **네이티브/하이브리드 모바일
11
+ 애플리케이션**의 접근성을 다룬다. 구조는 KWCAG와 유사하게 **4원칙**(인식·운용·이해·견고) 아래
12
+ 여러 지침·검사항목을 두는 형태를 따른다.
13
+
14
+ ## 4원칙별 핵심 관심사(요약, 조항 번호 미확정)
15
+
16
+ | 원칙 | 모바일 앱에서 특히 중요한 항목(요약) |
17
+ |---|---|
18
+ | 인식의 용이성 | 아이콘·이미지의 대체 텍스트, 앱 내 텍스트 확대(시스템 글꼴 크기 반영), 명도 대비 |
19
+ | 운용의 용이성 | 터치 타깃 크기, 제스처(스와이프 등) 대체 수단, 화면 회전 대응, 알림·팝업의 접근성 |
20
+ | 이해의 용이성 | 일관된 내비게이션·레이블, 오류 안내, 폼 입력 도움 |
21
+ | 견고성 | 플랫폼 접근성 API(Android AccessibilityService·iOS UIAccessibility)와의 연동, 커스텀 위젯의 role/name 노출 |
22
+
23
+ ## KWCAG 2.2와의 관계
24
+
25
+ 웹뷰(WebView) 기반 화면은 KWCAG 2.2 검사항목·`swwa`의 정적/브라우저 엔진으로 상당 부분 점검할
26
+ 수 있다. 네이티브 UI(플랫폼 고유 컨트롤)는 이 지침의 별도 기준을 따르며, 이 프로젝트의 자동 검사
27
+ 도구(`check_html`·`audit_url`)는 다루지 않는다.
28
+
29
+ ## 검증 필요 사항 (`needsVerification`)
30
+
31
+ - 정확한 지침·검사항목 번호 체계(웹 KWCAG의 "N.N.N"과 동일한지 여부)
32
+ - 표준 제정·개정 연혁 및 최신 개정판 발행일
33
+ - 국가표준 원문 열람 경로(공식 고시 URL)
34
+
35
+ ## 출처
36
+
37
+ 국립전파연구원(방송통신표준) 「모바일 애플리케이션 콘텐츠 접근성 지침 2.0」(KS X 3253). 원문 미대조
38
+ 상태이며, 정확한 조항 인용이 필요할 때는 표준 원문을 우선한다.
@@ -0,0 +1,68 @@
1
+ {
2
+ "sources": [
3
+ {
4
+ "id": "kwcag22-official",
5
+ "title": "한국형 웹 콘텐츠 접근성 지침 2.2 (KS X OT0003)",
6
+ "url": null,
7
+ "accessedOn": "2026-09-04",
8
+ "status": "needsVerification",
9
+ "license": "원문 저작권 국립전파연구원(국가표준). 요구 문장 한 줄 인용만 허용"
10
+ },
11
+ {
12
+ "id": "kwcag22-a11ykr",
13
+ "title": "KWCAG 2.2 비공식 HTML판",
14
+ "url": "https://a11ykr.github.io/kwcag22/",
15
+ "accessedOn": "2026-09-04",
16
+ "status": "ok",
17
+ "license": "비공식 변환본. 원문 저작권은 국립전파연구원, 이 사이트는 가독성을 위한 3자 변환"
18
+ },
19
+ {
20
+ "id": "kwcag22-websoul",
21
+ "title": "웹소울랩 KWCAG 2.2 안내",
22
+ "url": "https://websoul.co.kr/accessibility/WA_guide22.asp",
23
+ "accessedOn": "2026-09-04",
24
+ "status": "ok",
25
+ "license": "접근성 컨설팅사의 해설 자료. 요구 문장 대조용으로만 참고"
26
+ },
27
+ {
28
+ "id": "rra-kcs",
29
+ "title": "국립전파연구원 방송통신표준(KCS) 공고",
30
+ "url": null,
31
+ "accessedOn": "2026-09-04",
32
+ "status": "needsVerification",
33
+ "license": "표준 번호 KS X OT0003 확인 필요"
34
+ },
35
+ {
36
+ "id": "wcag22-w3c",
37
+ "title": "Web Content Accessibility Guidelines (WCAG) 2.2",
38
+ "url": "https://www.w3.org/TR/WCAG22/",
39
+ "accessedOn": "2026-09-04",
40
+ "status": "ok",
41
+ "license": "W3C Document License"
42
+ },
43
+ {
44
+ "id": "axe-core",
45
+ "title": "axe-core (Deque Systems)",
46
+ "url": "https://github.com/dequelabs/axe-core",
47
+ "accessedOn": "2026-09-04",
48
+ "status": "ok",
49
+ "license": "MPL-2.0. npm 의존성으로만 사용, 소스 재배포 없음"
50
+ },
51
+ {
52
+ "id": "easyread-mcp",
53
+ "title": "EASYREAD(전제 프로젝트, 동일 저자)",
54
+ "url": "https://github.com/SWJoong/EASYREAD",
55
+ "accessedOn": "2026-09-04",
56
+ "status": "ok",
57
+ "license": "컨벤션·schema-dialect.ts 등 파일 재사용(동일 저자·MIT)"
58
+ },
59
+ {
60
+ "id": "certification-agency",
61
+ "title": "웹접근성 품질인증 기관 공지(전문가·사용자 심사 기준 수치)",
62
+ "url": null,
63
+ "accessedOn": "2026-09-04",
64
+ "status": "needsVerification",
65
+ "license": "준수율·유효기간 수치는 인증기관이 개정할 수 있어 릴리스마다 재확인 필요"
66
+ }
67
+ ]
68
+ }