Commit Graph

31 Commits

Author SHA1 Message Date
3227091c58 feat: MCP 서버에 SVG 아이콘 엔드포인트 추가
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-15 09:55:35 +09:00
c8f3d3a6ea feat: MCP best practices 적용 - tool annotations, server instructions, error codes
- 모든 도구에 annotations 추가 (readOnlyHint, destructiveHint, idempotentHint, openWorldHint)
- Server instructions 추가 (워크플로우 안내)
- McpError + ErrorCode로 파라미터 검증 및 에러 처리 개선
- server-card.json에 annotations, capabilities, 상세 설명 추가

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-15 09:43:01 +09:00
e939f0d2a1 feat: MCP server-card.json 엔드포인트 추가
Smithery 품질 점수 개선을 위한 메타데이터 엔드포인트 추가

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-15 09:34:50 +09:00
39cf58df01 feat: get_issues에 사이트 검사 이슈 집계 지원
- site_inspection_id를 받으면 모든 페이지의 이슈를 자동 수집/집계
- page_url 파라미터로 특정 페이지 필터링 가능
- 페이지별 이슈 수 테이블 + 심각도순 상위 이슈 15개 표시
- i18n 설명 업데이트 (en/ko)

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-15 09:12:18 +09:00
39ffe879f0 fix: inspect_page 폴링에서 404 응답을 재시도하도록 수정
검사 시작 직후 결과가 아직 DB에 저장되기 전 404가 반환되면
폴링을 계속하도록 에러 핸들링 추가

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-15 08:45:36 +09:00
6eaef94a78 chore: dist/ 를 .gitignore에 추가, 캐시에서 제거
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-14 15:59:40 +09:00
69e0f80282 feat: MCP 서버 추가 — AI 에이전트용 웹 검사 도구
Node.js + TypeScript MCP 서버 구현:
- 5개 도구: inspect_page, inspect_site, get_inspection, get_issues, get_history
- 듀얼 트랜스포트: stdio (Claude Desktop) + Streamable HTTP (Docker/원격)
- i18n 지원 (영어/한국어)
- Docker 통합 (port 3100) + Nginx /mcp 프록시
- Smithery 레지스트리 배포 설정

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-14 15:44:35 +09:00
bffce65aca feat: 접근성 검사 표준 선택 기능 — WCAG/KWCAG 버전별 선택 지원
3가지 검사 모드(한 페이지, 사이트 크롤링, 목록 업로드) 모두에서 접근성 표준을
선택할 수 있도록 추가. WCAG 2.0 A/AA, 2.1 AA, 2.2 AA와 KWCAG 2.1, 2.2를
지원하며, KWCAG 선택 시 axe-core 결과를 KWCAG 검사항목으로 자동 매핑.

- KWCAG 2.2 (33항목) / 2.1 (24항목) ↔ WCAG 매핑 테이블 (kwcag_mapping.py)
- AccessibilityChecker에 표준 파싱 및 KWCAG 변환 로직 추가
- 전체 API 파이프라인에 accessibility_standard 파라미터 전파
- 프론트엔드 3개 폼에 공용 표준 선택 드롭다운 추가

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-14 08:36:14 +09:00
21259eb40a docs: SSL 정보 수정 — Namecheap 와일드카드 SSL
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-14 08:17:17 +09:00
03bf8a0a2e docs: README.md 갱신 — 프로젝트 구조, 기능, API, 스택 정보 반영
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-14 08:13:29 +09:00
96ff721ea6 fix: 쿼리 파라미터 다르면 유니크 URL로 판단 — 트래킹 파라미터 제거 로직 삭제
모든 쿼리 파라미터를 보존하여 파라미터가 다른 URL은 별도 페이지로 취급.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-14 08:00:16 +09:00
816b31e0d4 fix: 크롤러 리다이렉트 중복 URL 제거 — max_pages를 유니크 URL 기준으로 카운트
리다이렉트 후 최종 URL을 정규화하여 visited에 추가, 이미 방문한 URL로 리다이렉트되면 스킵.
결과에는 최종 URL을 사용하여 중복 제거.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-14 07:53:54 +09:00
1d7544cdfe fix: 크롤링 완료 시 페이지 status를 pending으로 초기화
SSE crawl_complete 이벤트의 pages에 status 필드가 없어서
검사 중 스피너가 표시되지 않던 문제 수정

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-14 07:47:21 +09:00
c88967cb6f fix: 트리 경로 표시 개선 - 슬래시 제거 + 쿼리 파라미터 분리
- 자식 노드에서 부모와 겹치는 경로 + 앞의 / 제거
  /about → about, /about/press → press
- 쿼리 파라미터가 있는 URL을 path 하위에 쿼리만 표시
  /search?q=foo → search 하위에 q=foo
- findPathParent에서 쿼리 URL의 부모를 같은 path로 매핑

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-14 07:42:28 +09:00
de0863c8ad fix: 트리 노드에서 부모와 겹치는 경로 접두사만 제거
/about/press → /press (부모 /about 제거)
/about → /about (루트 직속은 전체 경로)
/ → /

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-14 07:29:22 +09:00
9c41b2f95d fix: 트리 노드에 마지막 경로 세그먼트만 표시
/about/press → press, /about → about, / → /
들여쓰기로 계층이 표현되므로 전체 경로 반복 불필요

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-14 07:26:30 +09:00
645ec56bd1 fix: 크롤링 중복 URL 제거 + URL 정규화 강화
- normalize_url: www. prefix 제거, UTM 등 트래킹 파라미터 제거
- site inspection: 크롤링 후 검사 전 중복 URL 필터링
- batch inspection: 업로드 URL 목록 중복 제거

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-14 07:26:00 +09:00
9f58485a87 fix: URL 경로 기반으로 페이지 트리 계층 구성 + 중복 제거
parent_url(크롤링 발견 순서) 대신 URL path 계층으로 트리를 구성하여
/howyoutubeworks가 /about 하위로 잘못 표시되는 문제 수정.
동일 URL 중복 노드도 제거.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-14 07:17:43 +09:00
1098e9e05f chore: add SSL certificate renewal script
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-13 21:31:29 +09:00
8326c84be9 feat: 3-mode inspection with tabbed UI + batch upload
- Add batch inspection backend (multipart upload, SSE streaming, MongoDB)
- Add tabbed UI (single page / site crawling / batch upload) on home and history pages
- Add batch inspection progress, result pages with 2-panel layout
- Rename "사이트 전체" to "사이트 크롤링" across codebase
- Add python-multipart dependency for file upload
- Consolidate nginx SSE location for all inspection types

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-13 19:15:27 +09:00
9bb844c5e1 fix: remove stale React Query cache on site inspection complete
SSE complete event now removes the cached siteInspection query data
so the result page fetches fresh data with aggregate_scores from API.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-13 17:57:37 +09:00
3d03c47aaa fix: 진행 페이지 리로드 시 무한 로딩 + 동시 검사 수 상한 수정
- 리로드 시 API에서 현재 상태를 조회하여 스토어 복원 (initFromApi)
- SITE_CONCURRENCY 서버 상한 4→8로 변경 (사용자 설정 8이 제대로 동작)

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-13 17:50:14 +09:00
1e50b72fd8 feat: 사이트 검사 동시 검사 수 설정 추가
- 기본값 2→4로 변경, 사용자가 [1, 2, 4, 8] 중 선택 가능
- 백엔드: concurrency 파라미터 추가 (API → 서비스 → Semaphore)
- 프론트: 드롭다운에 "동시 검사 수" 옵션 UI 추가

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-13 17:44:22 +09:00
c440f1c332 fix: 사이트 검사 3가지 UI 이슈 수정
1. SSE page_complete 이벤트 필드명 score→overall_score 불일치 수정
   (진행 페이지에서 각 페이지별 점수가 표시되지 않던 버그)
2. 진행 페이지 재방문 시 완료된 검사는 결과 대시보드로 자동 리다이렉트
3. 카테고리 상세(이슈 목록)를 인라인으로 표시하여 트리 사이드바 유지
   (이전: 별도 페이지로 이동하여 트리가 사라지는 문제)

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-13 17:37:14 +09:00
3e224d221a feat: 사이트 검사 최대 페이지 수 무제한 옵션 추가
- max_pages=0으로 무제한 모드 지원 (안전 상한 500페이지)
- 프론트엔드에 "무제한" 버튼 추가

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-13 17:14:32 +09:00
81b9104aea feat: 사이트 전체 검사 기능 추가
도메인 하위 링크를 BFS로 자동 크롤링하여 페이지별 검사 수행.
- BFS 링크 크롤러 (같은 도메인 필터링, max_pages/max_depth 설정)
- 사이트 검사 오케스트레이션 (크롤링→순차 검사→집계)
- SSE 실시간 진행 상태 (크롤링/검사/완료)
- 페이지 트리 + 집계 결과 UI
- UrlInputForm에 "사이트 전체 검사" 버튼 추가

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-13 16:46:49 +09:00
44ad36e2ab refactor: 4개 검사 엔진을 YAML 기반 표준 규칙으로 리팩토링
- YAML 규칙 파일 4개 신규 생성 (html_css, accessibility, seo, performance_security)
  W3C, WCAG 2.0/2.1/2.2, OWASP, Google Search Essentials 공식 표준 기반
- rules/__init__.py: YAML 로더 + 캐싱 + 리로드 모듈
- html_css.py: 30개 폐기 요소, 100+개 폐기 속성을 YAML에서 동적 로드
- accessibility.py: WCAG 버전 선택 지원 (wcag_version 파라미터)
- seo.py: title/description 길이, OG 필수 태그 등 임계값 YAML 로드
- performance_security.py: COOP/COEP/CORP 검사 추가, 정보 노출 헤더 검사 추가,
  TTFB/페이지 크기 임계값 YAML 로드
- PyYAML 의존성 추가

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-13 15:49:57 +09:00
cdb6405714 fix: API_BASE_URL fallback을 same-origin으로 변경
|| 대신 ?? 사용하여 빈 문자열(same-origin)도 유효한 값으로 처리

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-13 14:22:36 +09:00
88ff592815 fix: 도메인 배포 설정 (web-inspector.yakenator.io)
- NEXT_PUBLIC_API_URL을 same-origin(빈값)으로 변경 (Nginx 리버스 프록시 사용)
- Nginx 설정 추가 (SSE 버퍼링 OFF, API/Frontend 프록시)
- Dockerfile, docker-compose.yml 업데이트

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-13 14:12:01 +09:00
b5fa5d96b9 feat: 웹사이트 표준화 검사 도구 구현
- 4개 검사 엔진: HTML/CSS, 접근성(WCAG), SEO, 성능/보안 (총 50개 항목)
- FastAPI 백엔드 (9개 API, SSE 실시간 진행, PDF/JSON 리포트)
- Next.js 15 프론트엔드 (6개 페이지, 29개 컴포넌트, 반원 게이지 차트)
- Docker Compose 배포 (Backend:8011, Frontend:3011, MongoDB:27022, Redis:6392)
- 전체 테스트 32/32 PASS

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-13 13:57:27 +09:00
c37cda5b13 Initial commit: 프로젝트 초기 구성
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-12 16:10:57 +09:00