@nomadamas/k-skill 0.2.2 → 0.2.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 (60) hide show
  1. package/package.json +1 -1
  2. package/skills/bunjang-search/references/TRADEMARK-LEGAL-STATEMENT.md +9 -0
  3. package/skills/coupang-product-search/references/TRADEMARK-LEGAL-STATEMENT.md +9 -0
  4. package/skills/daangn-cars-search/references/TRADEMARK-LEGAL-STATEMENT.md +9 -0
  5. package/skills/daangn-jobs-search/references/TRADEMARK-LEGAL-STATEMENT.md +9 -0
  6. package/skills/daangn-realty-search/references/TRADEMARK-LEGAL-STATEMENT.md +9 -0
  7. package/skills/daangn-used-goods-search/references/TRADEMARK-LEGAL-STATEMENT.md +9 -0
  8. package/skills/daishin-report-search/references/TRADEMARK-LEGAL-STATEMENT.md +9 -0
  9. package/skills/daiso-product-search/references/TRADEMARK-LEGAL-STATEMENT.md +9 -0
  10. package/skills/danawa-price-search/references/TRADEMARK-LEGAL-STATEMENT.md +9 -0
  11. package/skills/delivery-tracking/references/TRADEMARK-LEGAL-STATEMENT.md +9 -0
  12. package/skills/express-bus-booking/references/TRADEMARK-LEGAL-STATEMENT.md +9 -0
  13. package/skills/flight-ticket-search/references/TRADEMARK-LEGAL-STATEMENT.md +9 -0
  14. package/skills/foresttrip-vacancy/references/TRADEMARK-LEGAL-STATEMENT.md +9 -0
  15. package/skills/intercity-bus-booking/references/TRADEMARK-LEGAL-STATEMENT.md +9 -0
  16. package/skills/job-posting-match/references/TRADEMARK-LEGAL-STATEMENT.md +9 -0
  17. package/skills/jobkorea-talent-search/references/TRADEMARK-LEGAL-STATEMENT.md +9 -0
  18. package/skills/kakao-bar-nearby/instruction.md +73 -31
  19. package/skills/kakao-bar-nearby/references/TRADEMARK-LEGAL-STATEMENT.md +9 -0
  20. package/skills/kakao-bar-nearby/skill.json +4 -2
  21. package/skills/kakao-map/references/TRADEMARK-LEGAL-STATEMENT.md +9 -0
  22. package/skills/kakaotalk-mac/references/TRADEMARK-LEGAL-STATEMENT.md +9 -0
  23. package/skills/kbl-results/references/TRADEMARK-LEGAL-STATEMENT.md +9 -0
  24. package/skills/kbo-results/references/TRADEMARK-LEGAL-STATEMENT.md +9 -0
  25. package/skills/kleague-results/references/TRADEMARK-LEGAL-STATEMENT.md +9 -0
  26. package/skills/korean-cinema-search/references/TRADEMARK-LEGAL-STATEMENT.md +9 -0
  27. package/skills/korean-transit-route/references/TRADEMARK-LEGAL-STATEMENT.md +9 -0
  28. package/skills/ktx-booking/references/TRADEMARK-LEGAL-STATEMENT.md +9 -0
  29. package/skills/lck-analytics/references/TRADEMARK-LEGAL-STATEMENT.md +9 -0
  30. package/skills/lotto-results/references/TRADEMARK-LEGAL-STATEMENT.md +9 -0
  31. package/skills/market-kurly-search/references/TRADEMARK-LEGAL-STATEMENT.md +9 -0
  32. package/skills/myrealtrip-search/references/TRADEMARK-LEGAL-STATEMENT.md +9 -0
  33. package/skills/naver-ad-performance/references/TRADEMARK-LEGAL-STATEMENT.md +9 -0
  34. package/skills/naver-blog-research/references/TRADEMARK-LEGAL-STATEMENT.md +9 -0
  35. package/skills/naver-news-search/references/TRADEMARK-LEGAL-STATEMENT.md +9 -0
  36. package/skills/naver-shopping-search/references/TRADEMARK-LEGAL-STATEMENT.md +9 -0
  37. package/skills/ohou-today-deal/references/TRADEMARK-LEGAL-STATEMENT.md +9 -0
  38. package/skills/olive-young-search/references/TRADEMARK-LEGAL-STATEMENT.md +9 -0
  39. package/skills/popbill/references/TRADEMARK-LEGAL-STATEMENT.md +9 -0
  40. package/skills/saramin-talent-search/references/TRADEMARK-LEGAL-STATEMENT.md +9 -0
  41. package/skills/seoul-weather-risk/instruction.md +111 -0
  42. package/skills/seoul-weather-risk/references/admin-dong-place-map.json +1 -0
  43. package/skills/seoul-weather-risk/scripts/seoul_weather_risk.py +503 -0
  44. package/skills/seoul-weather-risk/skill.json +9 -0
  45. package/skills/srt-booking/references/TRADEMARK-LEGAL-STATEMENT.md +9 -0
  46. package/skills/store-longevity-radar/instruction.md +91 -0
  47. package/skills/store-longevity-radar/scripts/store_longevity_radar.py +230 -0
  48. package/skills/store-longevity-radar/skill.json +8 -0
  49. package/skills/ticket-availability/references/TRADEMARK-LEGAL-STATEMENT.md +9 -0
  50. package/skills/toss-securities/instruction.md +9 -34
  51. package/skills/toss-securities/references/TRADEMARK-LEGAL-STATEMENT.md +9 -0
  52. package/skills/toss-securities/skill.json +2 -2
  53. package/skills/used-car-price-search/references/TRADEMARK-LEGAL-STATEMENT.md +9 -0
  54. package/skills/yebigun-training/instruction.md +1 -1
  55. package/skills/catchtable-sniper/instruction.md +0 -270
  56. package/skills/catchtable-sniper/skill.json +0 -9
  57. package/skills/gangnamunni-clinic-search/instruction.md +0 -121
  58. package/skills/gangnamunni-clinic-search/skill.json +0 -9
  59. package/skills/hipass-receipt/instruction.md +0 -97
  60. package/skills/hipass-receipt/skill.json +0 -10
@@ -1,121 +0,0 @@
1
- # Gangnam Unni Clinic Search
2
-
3
- ## What this skill does
4
-
5
- 강남언니(Gangnam Unni) 웹 병원 목록 페이지의 **비로그인 공개 Next.js payload**를 읽어 병원 후보를 조회한다.
6
-
7
- - 키워드로 병원 후보를 검색한다.
8
- - 공개 검색 결과에 포함된 평점, 리뷰 수, 지역/역, 거리, 공개 이미지, 병원 링크를 정리한다.
9
- - 예약, 상담, 결제, 리뷰 작성, 앱 로그인 등 사용자 계정이 필요한 액션은 하지 않는다.
10
-
11
- ## When to use
12
-
13
- - "강남언니에서 강남 성형외과 찾아줘"
14
- - "강남언니 병원 평점이랑 리뷰 수 봐줘"
15
- - "코성형 병원 후보를 강남언니 기준으로 몇 개만 보여줘"
16
- - "성형외과/피부과 병원 공개 링크를 찾아줘"
17
-
18
- ## When not to use
19
-
20
- - 상담 신청, 예약, 결제, 병원 채팅, 찜 같은 계정 기반 액션이 필요한 경우
21
- - 로그인 사용자에게만 보이는 이벤트, 가격, 개인화 추천을 확정해야 하는 경우
22
- - 의료적 판단, 시술 적합성, 안전성 보증을 대신해야 하는 경우
23
-
24
- ## Prerequisites
25
-
26
- - 인터넷 연결
27
- - Node.js 18+
28
- - 이 저장소의 `gangnamunni-clinic-search` package 또는 동일 로직
29
-
30
- ## Required inputs
31
-
32
- ### 1. Ask for a search keyword if it is missing
33
-
34
- 검색어가 없으면 먼저 확인한다.
35
-
36
- - 권장 질문: `강남언니에서 찾을 병원/시술/지역 키워드를 알려주세요. 예: 강남 성형외과, 코성형, 피부과`
37
- - 너무 넓으면: `검색어가 넓어요. 지역이나 시술명을 같이 주시면 후보를 더 좁힐 수 있어요.`
38
-
39
- ### 2. Keep the answer conservative
40
-
41
- 강남언니 공개 페이지 기준으로 확인한 후보임을 분명히 말한다. 병원 선택, 의료 조언, 수술 권유처럼 해석될 수 있는 표현은 피한다.
42
-
43
- ## Public Gangnam Unni surface
44
-
45
- - primary hospital list: `https://www.gangnamunni.com/hospitals?q=<keyword>`
46
- - primary payload: `<script id="__NEXT_DATA__" type="application/json">...props.pageProps.dehydratedState.queries[*].state.data.pages[*].data...</script>`
47
- - query selector: `queryKey[0] === "infinite-search-hospitals"`
48
- - same-payload legacy field fallback: 이전 `/search?q=<keyword>` HTML에서 쓰던 `props.pageProps.hospitals`
49
- - public hospital URL: `https://www.gangnamunni.com/hospitals/<id>`
50
-
51
- Discovery result: `curl`/Node fetch로 `/hospitals?q=` 비로그인 HTML이 200으로 응답하고, 병원 후보는 server-rendered `__NEXT_DATA__`의 react-query `dehydratedState`에 포함된다. 파서가 이전 `/search?q=` HTML의 `pageProps.hospitals`도 읽지만, `searchClinics`가 `/search`를 두 번째로 요청하지는 않는다. 이 경로는 공개 read-only endpoint이므로 `k-skill-proxy`를 사용하지 않는다.
52
-
53
- ## Workflow
54
-
55
- ### 1. Search by keyword
56
-
57
- ```js
58
- const { searchClinics } = require("gangnamunni-clinic-search")
59
-
60
- const result = await searchClinics({ query: "강남 성형외과", limit: 5 })
61
- console.log(result.items)
62
- ```
63
-
64
- CLI:
65
-
66
- ```bash
67
- npx gangnamunni-clinic-search "강남 성형외과" --limit 5
68
- ```
69
-
70
- ### 2. Interpret returned fields
71
-
72
- 우선 아래 필드를 본다.
73
-
74
- - `name`: 병원명
75
- - `rating`, `ratingCount`, `reviewCount`: 공개 검색 페이지에 포함된 평점/리뷰 지표
76
- - `integratedReviewCount`, `eventCount`: 통합 리뷰 수와 공개 이벤트 수
77
- - `district`, `subwayStation`, `distanceWithUnit`: 공개 지역/역/거리 정보. upstream이 값을 주지 않으면 필드가 생략될 수 있다.
78
- - `latitude`, `longitude`: upstream 병원 객체에 공개 좌표가 있을 때만 숫자로 반환한다. 현재 `/hospitals?q=` 응답에는 없을 수 있다.
79
- - `languages`: 공개 지원 언어
80
- - `url`: 강남언니 공개 병원 페이지
81
- - `profileImage`, `mainImage`: 공개 이미지 URL
82
-
83
- ### 3. Fallback order
84
-
85
- 1. 기본: `https://www.gangnamunni.com/hospitals?q=<keyword>`의 `__NEXT_DATA__`에서 `infinite-search-hospitals` query의 모든 `pages[*].data`를 합친다.
86
- 2. 입력 payload 자체에 이전 구조의 `props.pageProps.hospitals`가 있으면 같은 payload 안에서 fallback으로 읽는다. `/search`를 추가 요청하지 않는다.
87
- 3. payload가 없으면 로그인벽, CAPTCHA, 차단, 빈 HTML shell을 실패 모드로 분류한다.
88
- 4. `pageProps.totalLength` 또는 dehydrated page의 `recordsTotal`이 0보다 큰데 파싱 가능한 병원이 하나도 없으면 `failureMode: "empty-shell"`과 구조 변경 경고를 반환한다.
89
- 5. 검색 결과가 너무 적거나 앱 전용 정보가 필요하면 자동화를 멈추고 사용자가 공식 앱/웹에서 직접 확인하도록 안내한다.
90
-
91
- ### 4. Respond safely
92
-
93
- 응답은 짧고 보수적으로 정리한다.
94
-
95
- - 병원명
96
- - 공개 평점/리뷰 수
97
- - 지원 언어
98
- - 강남언니 공개 링크
99
- - `조회 시점 공개 검색 결과 기준이며, 의료 판단이나 실제 예약 가능 여부는 병원/공식 앱에서 확인해야 합니다.` 라고 명시한다.
100
-
101
- ## Done when
102
-
103
- - 검색 키워드를 확인했다.
104
- - 공개 검색 결과에서 병원 후보를 반환했거나, 실패 모드를 명확히 설명했다.
105
- - 계정 기반 액션과 의료 판단은 하지 않았다.
106
-
107
- ## Failure modes
108
-
109
- - 검색어가 너무 넓거나 강남언니가 병원 후보를 공개 payload에 일부만 넣을 수 있다.
110
- - 강남언니 웹 구조가 바뀌면 `__NEXT_DATA__` 경로가 깨질 수 있다.
111
- - 사이트가 결과 수를 보고하지만 병원 항목을 파싱할 수 없으면 `empty-shell` 실패로 보고한다.
112
- - 로그인 필요, CAPTCHA, 접근 차단, 빈 HTML shell은 자동 우회하지 않고 실패로 보고한다.
113
- - 평점, 리뷰 수, 노출 순서는 시점에 따라 달라진다.
114
- - 앱 전용/로그인 전용 정보는 비로그인 공개 조회만으로 확정할 수 없다.
115
-
116
- ## Notes
117
-
118
- - 조회형 스킬이다.
119
- - 비로그인 공개 표면 우선 원칙을 유지한다.
120
- - 프록시와 API key는 사용하지 않는다.
121
- - 의료 조언이나 병원 추천 보증이 아니라 공개 후보 정리로만 답한다.
@@ -1,9 +0,0 @@
1
- {
2
- "name": "gangnamunni-clinic-search",
3
- "description": "강남언니 공개 검색 페이지에서 성형외과·피부과 병원 후보, 평점, 리뷰 수, 지원 언어, 공개 병원 링크를 조회한다. 돌쇠에서는 공식 표면을 통한 후속 액션까지 진행한다.",
4
- "profiles": [
5
- "proxy",
6
- "action:booking"
7
- ],
8
- "frontmatter": "name: gangnamunni-clinic-search\ndescription: 강남언니 공개 검색 페이지에서 성형외과·피부과 병원 후보, 평점, 리뷰 수, 지원 언어, 공개 병원 링크를 조회한다. 돌쇠에서는 공식 표면을 통한 후속 액션까지 진행한다.\nlicense: MIT\nmetadata:\n category: beauty\n locale: ko-KR\n phase: v1"
9
- }
@@ -1,97 +0,0 @@
1
- # 하이패스 영수증 발급
2
-
3
- ## What this skill does
4
-
5
- 공식 하이패스 홈페이지(`https://www.hipass.co.kr`)에서 **이미 로그인된 브라우저 세션**을 재사용해:
6
-
7
- - 사용내역 조회
8
- - 특정 행 선택
9
- - 영수증 팝업/출력 화면 진입
10
- - 세션 만료 감지 후 재로그인 안내
11
-
12
- 까지를 반자동으로 돕는다.
13
-
14
- ## Hard limits
15
-
16
- - **로그인은 반드시 사용자가 직접 해야 한다.**
17
- - 이 스킬은 **로그인된 세션에서만** 동작한다.
18
- - ID/PW, 인증코드, OTP, 공동인증서 절차를 자동 입력하지 않는다.
19
- - `JSESSIONID` 쿠키만 저장해 장시간 재사용하는 방식은 지원하지 않는다.
20
- - 권장 세션 형태는 **Playwright persistent context** 또는 Chrome `user-data-dir` / remote-debugging 재사용이다.
21
- - **세션이 만료되면 즉시 중단하고 다시 로그인**해야 한다.
22
-
23
- ## Why this design
24
-
25
- 현재 공개 페이지 기준으로:
26
-
27
- - 로그인 페이지와 메인 페이지에 `session_time=1200` 이 노출된다.
28
- - 세션 연장은 `/comm/sessionCheck.do`
29
- - 세션 종료는 `/comm//sessionout.do`
30
- - 미로그인/세션 종료 보호 응답은 `mgs_type 11/12` 후 `/comm/lginpg.do` 로 이동한다.
31
- - 사용내역 조회는 `/usepculr/InitUsePculrTabSearch.do` → `hpForm` submit → `/usepculr/UsePculrTabSearchList.do` 흐름이다.
32
- - 영수증은 `/usepculr/UsePculrReceiptPrint.do` 팝업 진입으로 이어진다.
33
-
34
- 즉 v1은 **“로그인된 Chrome 세션 재사용”** 이 가장 현실적이다.
35
-
36
- ## Prerequisites
37
-
38
- - macOS 또는 Chrome 실행 가능한 환경
39
- - `npm install hipass-receipt` 또는 이 레포에서 `npm install` (`playwright-core` 포함)
40
- - Chrome 원격 디버깅 포트 사용 가능
41
- - 사용자가 직접 하이패스 로그인 가능
42
-
43
- ## Workflow
44
-
45
- ### 1. 전용 Chrome 프로필로 로그인 브라우저를 띄운다
46
-
47
- ```bash
48
- hipass-receipt chrome-command --profile-dir "$HOME/.cache/k-skill/hipass-chrome" --debugging-port 9222
49
- ```
50
-
51
- 위 명령이 출력한 Chrome 실행문으로 브라우저를 띄운 뒤, 사용자가 직접 `https://www.hipass.co.kr/comm/lginpg.do` 에 로그인한다.
52
-
53
- ### 2. 사용내역을 조회한다
54
-
55
- ```bash
56
- hipass-receipt list \
57
- --cdp-url http://127.0.0.1:9222 \
58
- --start-date 2026-04-01 \
59
- --end-date 2026-04-07 \
60
- --page-size 30
61
- ```
62
-
63
- - 카드사/암호화 카드번호를 알고 있으면 `--encrypted-card-number` 등으로 더 좁힐 수 있다.
64
- - `--encrypted-card-number` 는 CLI의 기존 `--ecd-no` 별칭이다.
65
- - 결과 JSON에서 `rowIndex` 를 확인한다.
66
-
67
- ### 3. 특정 row의 영수증 팝업을 연다
68
-
69
- ```bash
70
- hipass-receipt receipt \
71
- --cdp-url http://127.0.0.1:9222 \
72
- --start-date 2026-04-01 \
73
- --end-date 2026-04-07 \
74
- --row-index 1
75
- ```
76
-
77
- - 선택한 행의 `영수증`/`출력` control 을 클릭한다.
78
- - 팝업이 열리면 URL/title 을 반환한다.
79
-
80
- ## Response policy
81
-
82
- - “로그인 필수”, “세션 만료 시 재로그인 필요”를 항상 명확히 적는다.
83
- - 하이패스 계정 비밀번호를 받아 저장하거나 새 env var를 만들지 않는다.
84
- - 세션이 만료됐으면 즉시 실패시키고 `/comm/lginpg.do` 재로그인만 안내한다.
85
- - v1 범위를 넘어서는 완전 무인 로그인 유지/백그라운드 재인증은 약속하지 않는다.
86
-
87
- ## Verification
88
-
89
- - 자동 검증: fixture 기반 query/parser/session-detection 테스트
90
- - smoke 검증: `hipass-receipt fixture-demo --fixture ...`
91
- - 최종 실서비스 검증: **로그인된 세션으로 수동 smoke test**
92
-
93
- ## Done when
94
-
95
- - 로그인된 세션으로 사용내역 조회가 가능하다.
96
- - 특정 row를 선택해 영수증 팝업 진입을 시도할 수 있다.
97
- - 세션 종료 응답을 감지하면 재로그인을 요구한다.
@@ -1,10 +0,0 @@
1
- {
2
- "name": "hipass-receipt",
3
- "description": "공식 하이패스 홈페이지에서 사용자가 직접 로그인한 Chrome 세션을 재사용해 사용내역 조회와 영수증 팝업 진입을 돕는다. 돌쇠에서는 공식 표면을 통한 후속 액션까지 진행한다.",
4
- "profiles": [
5
- "vault",
6
- "browser",
7
- "action:account"
8
- ],
9
- "frontmatter": "name: hipass-receipt\ndescription: 공식 하이패스 홈페이지에서 사용자가 직접 로그인한 Chrome 세션을 재사용해 사용내역 조회와 영수증 팝업 진입을 돕는다. 돌쇠에서는 공식 표면을 통한 후속 액션까지 진행한다.\nlicense: MIT\nmetadata:\n category: transport\n locale: ko-KR\n phase: v1"
10
- }