Skip to content

feat(emuseum-collection-search): 국립중앙박물관 e뮤지엄 소장품 조회 스킬 - #692

Closed
sungjunlee wants to merge 5 commits into
NomaDamas:mainfrom
sungjunlee:nightly/ds-ali1-20260926-144035-209020
Closed

sungjunlee wants to merge 5 commits into
NomaDamas:mainfrom
sungjunlee:nightly/ds-ali1-20260926-144035-209020

Conversation

@sungjunlee

Copy link
Copy Markdown

새 public API 스킬 emuseum-collection-search 를 추가한다(이슈 #374).

추가

  • emuseum-collection-search/SKILL.md, instruction.md, skill.json — 이슈가 지정한 국립중앙박물관
    e뮤지엄 소장품 검색 API, 기대 범위(유물명·시대·박물관 필터, 페이지네이션), 인증키 발급 경로와
    명시적 실패 모드를 적었다.
  • emuseum-collection-search/scripts/emuseum_collection_search.py — read-only 조회 헬퍼.
    접근 경로는 hosted k-skill-proxy → BYOK 직접 호출 순. 키는 소스·URL·로그에 남기지 않고,
    로그/JSON 출력의 serviceKey 는 REDACTED 로 가린다.
  • emuseum-collection-search/tests/ — 네트워크 없이 fixture(XML·JSON·빈 결과·오류 봉투)로
    요청 파라미터 인코딩, 응답 정규화, 키 해석 우선순위, 실패 모드를 고정한다.

엔드포인트 변동 대응

e뮤지엄 OpenAPI 는 https://www.emuseum.go.kr/openApi 아래 오퍼레이션 경로로 열린다. 포털 개편 시
코드 수정 없이 대응할 수 있도록 base URL·오퍼레이션 path 를 --base-url / --search-path
(env KSKILL_EMUSEUM_BASE_URL / KSKILL_EMUSEUM_SEARCH_PATH)로 덮을 수 있게 했고, 테스트는
"지금 살아 있다"를 주장하지 않고 요청 필드·정규화 동작만 fixture 로 고정한다.

검증

python3 -m pytest emuseum-collection-search/tests -q   -> 23 passed
python3 -m py_compile emuseum-collection-search/scripts/emuseum_collection_search.py   -> ok

실제 API 호출·키 발급·프록시 배포는 하지 않았다.

하지 않은 것

  • 공유 registry/CLI 번들 파일(README.md, .claude-plugin/plugin.json, docs/features/**,
    docs/runtime-action-audit.md, packages/k-skill-cli/skills/**)은 이 PR에서 수정하지 않았다.
    새 스킬 카탈로그 반영은 별도 변경이 필요하다.
  • 기존 스킬과 의미가 겹치지 않도록 범위를 e뮤지엄 소장품 조회로 한정했다.

Refs #374

- e뮤지엄 OpenAPI(selectRelicList.do) 기반 소장품/유물 검색 스킬 추가
- base URL·search path 를 --base-url/--search-path(env) 로 덮을 수 있게 해 포털 개편에 코드 수정 없이 대응
- 네트워크 없이 fixture 로 파싱·정규화·실패 모드(키 미설정, upstream 오류, 빈 결과)를 고정하는 테스트 23개
- skill stub / CLI asset / plugin manifest 생성·sync 결과 반영
- docs/features/emuseum-collection-search.md 추가 + README 표 링크
- docs/runtime-action-audit.md 카탈로그 행과 mode/total 수치 갱신
- scripts/skill-docs.test.js 의 top-level 스킬 수 갱신
- --dry-run: 키가 없어도 요청 URL을 출력하도록 missing-key 조기 종료보다 먼저 처리
- 응답 봉투(items/body/header) 미식별 JSON 오류 객체/XML 오류 문서를 빈 성공 대신
  malformed response 실패로 변경
- 응답에 관리번호가 없을 때 항목 id로 대체하지 않고 빈 문자열 유지
- 각 동작을 고정하는 offline 테스트 추가, instruction.md 계약 문구 동기화
- packages/k-skill-cli/skills/emuseum-collection-search/** 를 scripts/sync-cli-skills.js 결과로 갱신
- 회귀 테스트 29 passed, 생성물 4종 --check OK
- body 가 item container·pagination·item 어느 것도 아닌 dict(예: {"error": ...})면 EmuseumError 로 실패시킨다
- 빈 body({})는 no-data 로 계속 허용한다
- 회귀 테스트: body/header+body/response.body 세 형태의 오류 객체, 빈 body 허용
- python3 -m pytest emuseum-collection-search/tests -q -> 31 passed, 3 subtests
@sungjunlee sungjunlee closed this Sep 26, 2026
@sungjunlee
sungjunlee deleted the nightly/ds-ali1-20260926-144035-209020 branch September 26, 2026 16:51
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant