mirror of
https://github.com/NomaDamas/k-skill.git
synced 2026-06-24 02:04:11 +00:00
Merge origin/dev into feature/#274 — keep stricter Cloud Run/WIF assertions in skill-docs test
This commit is contained in:
commit
f57eb3e5d0
39 changed files with 152 additions and 125 deletions
|
|
@ -1,18 +0,0 @@
|
|||
---
|
||||
"court-auction-notice-search": minor
|
||||
---
|
||||
|
||||
Add Workflow C property free-condition search via `searchProperties()` (`POST /pgj/pgjsearch/searchControllerMain.on`).
|
||||
|
||||
The request body matches the canonical PGJ151M01 submission captured from a real browser session — numeric `pageNo`/`pageSize`/`statNum`, full `dma_pageInfo` shape, and the upstream-correct field names (`mvprpArtclKndCd`/`mvprpAtchmPlcTypCd`, not the previously-guessed `mvprpArtclKnd`/`mvrpDspslPlcTyp`).
|
||||
|
||||
The static usage/region codetables come from upstream discovery captures: 4 대분류 (`10000=토지`, `20000=건물`, `30000=차량및운송장비`, `40000=기타`) plus representative mid/small classes; 19 시도 with their official codes. Sigungu/dong cascade XHRs are not reliable so callers pass raw codes (e.g. `"11680"`) directly.
|
||||
|
||||
`searchProperties()` automatically falls back to the Playwright client only for WAF-style raw HTTP `UPSTREAM_ERROR` 400 responses. Confirmed `BLOCKED` / `ipcheck=false` responses stop by default to avoid extending an IP block; retrying that condition requires explicit `fallbackOnBlocked:true`. Disable fallback entirely with `{ fallback: false }`.
|
||||
|
||||
Other fixes:
|
||||
- `resolveUsageCode(name, level)` now refuses to silently return a wrong-level code for ambiguous names (e.g. `"아파트"` exists at multiple levels) — returns the input unchanged so the upstream rejects it instead of producing a wrong query.
|
||||
- `resolveRegionCodes({})` no longer accidentally maps "no region" to the first row's sido.
|
||||
- `flbdCount` is integer-only; `pageSize` is restricted to the observed PGJ151 dropdown values `10`/`20`/`50`/`100` to avoid unsupported upstream requests.
|
||||
- Endpoint-aware HTTP/Playwright warmup (`PGJ151F00` for property search instead of `PGJ143M01`).
|
||||
- CLI `search` accepts `--region 시도:시군구:읍면동` and `--usage 대:중:소` colon shorthand alongside the existing split flags.
|
||||
|
|
@ -1,5 +0,0 @@
|
|||
---
|
||||
"donation-place-search": minor
|
||||
---
|
||||
|
||||
Add a donation place recommendation skill and package for Korean location/category-based donation recipient lookup.
|
||||
|
|
@ -1,5 +0,0 @@
|
|||
---
|
||||
"court-auction-notice-search": patch
|
||||
---
|
||||
|
||||
Fix sale notice search to post the court site month key (`YYYYMM`) and filter exact-day requests locally; normalize the current nested notice-detail response shape and HTML-formatted prices.
|
||||
|
|
@ -1,5 +0,0 @@
|
|||
---
|
||||
"gangnamunni-clinic-search": minor
|
||||
---
|
||||
|
||||
Add Gangnam Unni public clinic search skill and package.
|
||||
|
|
@ -1,7 +0,0 @@
|
|||
---
|
||||
"gongsijiga-search": patch
|
||||
---
|
||||
|
||||
feat: extract realtyprice.kr lookup from k-skill-proxy into a standalone `gongsijiga-search` workspace package
|
||||
|
||||
The previous `/v1/realtyprice` proxy route called a fully public endpoint (realtyprice.kr) that needs no API key, so per the new k-skill-proxy inclusion rule (proxy is for keyed upstreams only) the helper now ships as its own package and is invoked directly from the user's machine.
|
||||
|
|
@ -1,5 +0,0 @@
|
|||
---
|
||||
"k-skill-proxy": patch
|
||||
---
|
||||
|
||||
refactor: remove realtyprice route (moved to standalone gongsijiga-search package)
|
||||
|
|
@ -1,5 +0,0 @@
|
|||
---
|
||||
"daiso-product-search": patch
|
||||
---
|
||||
|
||||
Handle Daiso Mall pickup-stock Unauthorized responses as structured unavailable results, include pickup-stock retrieval and inventory states, and mark online-stock fallback as reference-only.
|
||||
|
|
@ -1,5 +0,0 @@
|
|||
---
|
||||
"korean-marathon-schedule": minor
|
||||
---
|
||||
|
||||
Add a Korean marathon and triathlon schedule lookup skill backed by public event pages.
|
||||
|
|
@ -1,5 +0,0 @@
|
|||
---
|
||||
"k-skill-proxy": patch
|
||||
---
|
||||
|
||||
Add National Tax Service business registration status and authenticity proxy routes.
|
||||
|
|
@ -1,5 +0,0 @@
|
|||
---
|
||||
"daishin-report-search": minor
|
||||
---
|
||||
|
||||
Add a Daishin Securities report search skill backed by the public GitHub Pages report mirror.
|
||||
|
|
@ -1,5 +0,0 @@
|
|||
---
|
||||
"k-skill-proxy": minor
|
||||
---
|
||||
|
||||
Add `/v1/seoul-density/citydata` route that proxies the Seoul Open Data realtime hotspot crowd-level API (`citydata_ppltn`) using the server-side `SEOUL_OPEN_API_KEY`.
|
||||
|
|
@ -1,11 +0,0 @@
|
|||
---
|
||||
"toss-securities": minor
|
||||
---
|
||||
|
||||
Improve toss-securities session-expiry handling and diagnostics.
|
||||
|
||||
- Add `auth doctor` wiring and `checkSession()` helper.
|
||||
- Add `TossSessionExpiredError` for clearer invalid-session failures.
|
||||
- Promote silent empty-array responses from portfolio/watchlist into explicit session-expired errors when `auth doctor` says session is invalid.
|
||||
- Add `search/stocks 403` upstream hinting for quote failures.
|
||||
- Extend tests and README to document behavior and `tossctl >= 0.3.6` recommendation.
|
||||
|
|
@ -1,16 +0,0 @@
|
|||
module.exports = {
|
||||
apps: [
|
||||
{
|
||||
name: "k-skill-proxy",
|
||||
cwd: __dirname,
|
||||
script: "./scripts/run-k-skill-proxy.sh",
|
||||
interpreter: "/bin/bash",
|
||||
exec_mode: "fork",
|
||||
autorestart: true,
|
||||
watch: false,
|
||||
env: {
|
||||
NODE_ENV: "production"
|
||||
}
|
||||
}
|
||||
]
|
||||
};
|
||||
|
|
@ -1,5 +1,29 @@
|
|||
# court-auction-notice-search
|
||||
|
||||
## 0.3.0
|
||||
|
||||
### Minor Changes
|
||||
|
||||
- f527515: Add Workflow C property free-condition search via `searchProperties()` (`POST /pgj/pgjsearch/searchControllerMain.on`).
|
||||
|
||||
The request body matches the canonical PGJ151M01 submission captured from a real browser session — numeric `pageNo`/`pageSize`/`statNum`, full `dma_pageInfo` shape, and the upstream-correct field names (`mvprpArtclKndCd`/`mvprpAtchmPlcTypCd`, not the previously-guessed `mvprpArtclKnd`/`mvrpDspslPlcTyp`).
|
||||
|
||||
The static usage/region codetables come from upstream discovery captures: 4 대분류 (`10000=토지`, `20000=건물`, `30000=차량및운송장비`, `40000=기타`) plus representative mid/small classes; 19 시도 with their official codes. Sigungu/dong cascade XHRs are not reliable so callers pass raw codes (e.g. `"11680"`) directly.
|
||||
|
||||
`searchProperties()` automatically falls back to the Playwright client only for WAF-style raw HTTP `UPSTREAM_ERROR` 400 responses. Confirmed `BLOCKED` / `ipcheck=false` responses stop by default to avoid extending an IP block; retrying that condition requires explicit `fallbackOnBlocked:true`. Disable fallback entirely with `{ fallback: false }`.
|
||||
|
||||
Other fixes:
|
||||
|
||||
- `resolveUsageCode(name, level)` now refuses to silently return a wrong-level code for ambiguous names (e.g. `"아파트"` exists at multiple levels) — returns the input unchanged so the upstream rejects it instead of producing a wrong query.
|
||||
- `resolveRegionCodes({})` no longer accidentally maps "no region" to the first row's sido.
|
||||
- `flbdCount` is integer-only; `pageSize` is restricted to the observed PGJ151 dropdown values `10`/`20`/`50`/`100` to avoid unsupported upstream requests.
|
||||
- Endpoint-aware HTTP/Playwright warmup (`PGJ151F00` for property search instead of `PGJ143M01`).
|
||||
- CLI `search` accepts `--region 시도:시군구:읍면동` and `--usage 대:중:소` colon shorthand alongside the existing split flags.
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- a25d641: Fix sale notice search to post the court site month key (`YYYYMM`) and filter exact-day requests locally; normalize the current nested notice-detail response shape and HTML-formatted prices.
|
||||
|
||||
## 0.2.0
|
||||
|
||||
### Minor Changes
|
||||
|
|
|
|||
|
|
@ -1,6 +1,6 @@
|
|||
{
|
||||
"name": "court-auction-notice-search",
|
||||
"version": "0.2.0",
|
||||
"version": "0.3.0",
|
||||
"description": "Korean court auction (대법원경매정보) real estate sale notice and case lookup with direct HTTP + Playwright fallback",
|
||||
"license": "MIT",
|
||||
"main": "src/index.js",
|
||||
|
|
|
|||
7
packages/daishin-report-search/CHANGELOG.md
Normal file
7
packages/daishin-report-search/CHANGELOG.md
Normal file
|
|
@ -0,0 +1,7 @@
|
|||
# daishin-report-search
|
||||
|
||||
## 0.2.0
|
||||
|
||||
### Minor Changes
|
||||
|
||||
- d48a962: Add a Daishin Securities report search skill backed by the public GitHub Pages report mirror.
|
||||
|
|
@ -1,6 +1,6 @@
|
|||
{
|
||||
"name": "daishin-report-search",
|
||||
"version": "0.1.0",
|
||||
"version": "0.2.0",
|
||||
"description": "Public Daishin Securities report lookup client for GitHub Pages mirrored HTML reports",
|
||||
"license": "MIT",
|
||||
"main": "src/index.js",
|
||||
|
|
|
|||
|
|
@ -1,5 +1,21 @@
|
|||
# daiso-product-search
|
||||
|
||||
## 0.4.0
|
||||
|
||||
### Minor Changes
|
||||
|
||||
- 271ea18: Restore Daiso store pickup stock quantities through the official non-login Bearer flow (`/api/auth/request` + AES-128-CBC token) while keeping the resilient `selPkupStr` fallback API. `getStorePickupStock()` now retries once with a fresh token on 401/403 and returns structured `retrievalStatus: "blocked"` after repeated auth blocks instead of throwing. `getStorePickupEligibility()` remains public, and `lookupStoreProductAvailability()` fills `pickupEligibility` when exact pickup stock remains unavailable.
|
||||
|
||||
## 0.3.0
|
||||
|
||||
### Minor Changes
|
||||
|
||||
- af55f58: Restore actionable Daiso pickup answers when store pickup stock is blocked by adding a `selPkupStr`-backed `getStorePickupEligibility()` helper plus `pickupEligibility` field on `lookupStoreProductAvailability()`. When pickup stock returns `Unauthorized`, the package now reports whether the selected store is registered as a pickup-capable store for the product instead of only saying "unknown".
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- e873308: Handle Daiso Mall pickup-stock Unauthorized responses as structured unavailable results, include pickup-stock retrieval and inventory states, and mark online-stock fallback as reference-only.
|
||||
|
||||
## 0.2.0
|
||||
|
||||
### Minor Changes
|
||||
|
|
|
|||
|
|
@ -1,6 +1,6 @@
|
|||
{
|
||||
"name": "daiso-product-search",
|
||||
"version": "0.2.0",
|
||||
"version": "0.4.0",
|
||||
"description": "Official Daiso Mall store/product search and pickup-stock client",
|
||||
"license": "MIT",
|
||||
"main": "src/index.js",
|
||||
|
|
|
|||
7
packages/donation-place-search/CHANGELOG.md
Normal file
7
packages/donation-place-search/CHANGELOG.md
Normal file
|
|
@ -0,0 +1,7 @@
|
|||
# donation-place-search
|
||||
|
||||
## 0.2.0
|
||||
|
||||
### Minor Changes
|
||||
|
||||
- 4e5abf0: Add a donation place recommendation skill and package for Korean location/category-based donation recipient lookup.
|
||||
|
|
@ -1,6 +1,6 @@
|
|||
{
|
||||
"name": "donation-place-search",
|
||||
"version": "0.1.0",
|
||||
"version": "0.2.0",
|
||||
"description": "Recommend Korean donation recipients by location and category with best-effort 1365 Give Korea search-assist links and curated fallback data",
|
||||
"license": "MIT",
|
||||
"main": "src/index.js",
|
||||
|
|
|
|||
7
packages/emergency-room-beds/CHANGELOG.md
Normal file
7
packages/emergency-room-beds/CHANGELOG.md
Normal file
|
|
@ -0,0 +1,7 @@
|
|||
# emergency-room-beds
|
||||
|
||||
## 0.2.0
|
||||
|
||||
### Minor Changes
|
||||
|
||||
- 271ea18: Add an E-Gen based nearby emergency-room status skill and package.
|
||||
|
|
@ -1,6 +1,6 @@
|
|||
{
|
||||
"name": "emergency-room-beds",
|
||||
"version": "0.1.0",
|
||||
"version": "0.2.0",
|
||||
"description": "Public E-Gen nearby emergency room status lookup for Korean location queries",
|
||||
"license": "MIT",
|
||||
"main": "src/index.js",
|
||||
|
|
|
|||
7
packages/gangnamunni-clinic-search/CHANGELOG.md
Normal file
7
packages/gangnamunni-clinic-search/CHANGELOG.md
Normal file
|
|
@ -0,0 +1,7 @@
|
|||
# gangnamunni-clinic-search
|
||||
|
||||
## 0.2.0
|
||||
|
||||
### Minor Changes
|
||||
|
||||
- da0632c: Add Gangnam Unni public clinic search skill and package.
|
||||
|
|
@ -1,6 +1,6 @@
|
|||
{
|
||||
"name": "gangnamunni-clinic-search",
|
||||
"version": "0.1.0",
|
||||
"version": "0.2.0",
|
||||
"description": "Public Gangnam Unni clinic search client for k-skill",
|
||||
"license": "MIT",
|
||||
"main": "src/index.js",
|
||||
|
|
|
|||
9
packages/gongsijiga-search/CHANGELOG.md
Normal file
9
packages/gongsijiga-search/CHANGELOG.md
Normal file
|
|
@ -0,0 +1,9 @@
|
|||
# gongsijiga-search
|
||||
|
||||
## 0.1.1
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- 2ff51db: feat: extract realtyprice.kr lookup from k-skill-proxy into a standalone `gongsijiga-search` workspace package
|
||||
|
||||
The previous `/v1/realtyprice` proxy route called a fully public endpoint (realtyprice.kr) that needs no API key, so per the new k-skill-proxy inclusion rule (proxy is for keyed upstreams only) the helper now ships as its own package and is invoked directly from the user's machine.
|
||||
|
|
@ -1,6 +1,6 @@
|
|||
{
|
||||
"name": "gongsijiga-search",
|
||||
"version": "0.1.0",
|
||||
"version": "0.1.1",
|
||||
"description": "Client-side query helpers for Korean individual official land prices (개별공시지가) from realtyprice.kr",
|
||||
"license": "MIT",
|
||||
"main": "src/index.js",
|
||||
|
|
|
|||
|
|
@ -1,5 +1,27 @@
|
|||
# k-skill-proxy
|
||||
|
||||
## 0.4.0
|
||||
|
||||
### Minor Changes
|
||||
|
||||
- 271ea18: Add `/v1/kstartup/{business-info,announcements,contents,statistics}` routes that wrap the data.go.kr `15125364` (창업진흥원\_K-Startup) Open API. The routes inject `DATA_GO_KR_API_KEY` server-side, return 503 when the key (or the per-dataset 활용신청) is missing, and cache successful JSON responses while bypassing the cache for upstream error envelopes (`resultCode != "00"`).
|
||||
|
||||
## 0.3.0
|
||||
|
||||
### Minor Changes
|
||||
|
||||
- 315dbbb: Add `/v1/seoul-density/citydata` route that proxies the Seoul Open Data realtime hotspot crowd-level API (`citydata_ppltn`) using the server-side `SEOUL_OPEN_API_KEY`.
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- cd3366a: Add National Tax Service business registration status and authenticity proxy routes.
|
||||
|
||||
## 0.2.1
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- 2ff51db: refactor: remove realtyprice route (moved to standalone gongsijiga-search package)
|
||||
|
||||
## 0.2.0
|
||||
|
||||
### Minor Changes
|
||||
|
|
|
|||
|
|
@ -1,6 +1,6 @@
|
|||
{
|
||||
"name": "k-skill-proxy",
|
||||
"version": "0.2.0",
|
||||
"version": "0.4.0",
|
||||
"private": true,
|
||||
"description": "Fastify proxy for k-skill upstream APIs",
|
||||
"license": "MIT",
|
||||
|
|
|
|||
7
packages/korean-marathon-schedule/CHANGELOG.md
Normal file
7
packages/korean-marathon-schedule/CHANGELOG.md
Normal file
|
|
@ -0,0 +1,7 @@
|
|||
# korean-marathon-schedule
|
||||
|
||||
## 0.2.0
|
||||
|
||||
### Minor Changes
|
||||
|
||||
- 667e2e1: Add a Korean marathon and triathlon schedule lookup skill backed by public event pages.
|
||||
|
|
@ -1,6 +1,6 @@
|
|||
{
|
||||
"name": "korean-marathon-schedule",
|
||||
"version": "0.1.0",
|
||||
"version": "0.2.0",
|
||||
"description": "Public Korean marathon and triathlon schedule lookup client",
|
||||
"license": "MIT",
|
||||
"main": "src/index.js",
|
||||
|
|
|
|||
7
packages/local-election-candidate-search/CHANGELOG.md
Normal file
7
packages/local-election-candidate-search/CHANGELOG.md
Normal file
|
|
@ -0,0 +1,7 @@
|
|||
# local-election-candidate-search
|
||||
|
||||
## 0.2.0
|
||||
|
||||
### Minor Changes
|
||||
|
||||
- 271ea18: Add a public NEC local election candidate lookup skill and helper CLI.
|
||||
|
|
@ -1,6 +1,6 @@
|
|||
{
|
||||
"name": "local-election-candidate-search",
|
||||
"version": "0.1.0",
|
||||
"version": "0.2.0",
|
||||
"description": "Public NEC Korean local election candidate lookup client for k-skill",
|
||||
"license": "MIT",
|
||||
"main": "src/index.js",
|
||||
|
|
|
|||
7
packages/sh-notice-search/CHANGELOG.md
Normal file
7
packages/sh-notice-search/CHANGELOG.md
Normal file
|
|
@ -0,0 +1,7 @@
|
|||
# sh-notice-search
|
||||
|
||||
## 0.2.0
|
||||
|
||||
### Minor Changes
|
||||
|
||||
- 271ea18: Add a policy-compliant SH public notice search skill and direct HTML lookup client.
|
||||
|
|
@ -1,6 +1,6 @@
|
|||
{
|
||||
"name": "sh-notice-search",
|
||||
"version": "0.1.0",
|
||||
"version": "0.2.0",
|
||||
"description": "Public SH Seoul Housing notice lookup client for k-skill",
|
||||
"license": "MIT",
|
||||
"main": "src/index.js",
|
||||
|
|
|
|||
|
|
@ -1,5 +1,17 @@
|
|||
# toss-securities
|
||||
|
||||
## 0.4.0
|
||||
|
||||
### Minor Changes
|
||||
|
||||
- 01de419: Improve toss-securities session-expiry handling and diagnostics.
|
||||
|
||||
- Add `auth doctor` wiring and `checkSession()` helper.
|
||||
- Add `TossSessionExpiredError` for clearer invalid-session failures.
|
||||
- Promote silent empty-array responses from portfolio/watchlist into explicit session-expired errors when `auth doctor` says session is invalid.
|
||||
- Add `search/stocks 403` upstream hinting for quote failures.
|
||||
- Extend tests and README to document behavior and `tossctl >= 0.3.6` recommendation.
|
||||
|
||||
## 0.3.0
|
||||
|
||||
### Minor Changes
|
||||
|
|
|
|||
|
|
@ -1,6 +1,6 @@
|
|||
{
|
||||
"name": "toss-securities",
|
||||
"version": "0.3.0",
|
||||
"version": "0.4.0",
|
||||
"description": "Safe read-only tossctl wrapper for Toss Securities skill workflows",
|
||||
"license": "MIT",
|
||||
"main": "src/index.js",
|
||||
|
|
|
|||
|
|
@ -1,15 +0,0 @@
|
|||
#!/usr/bin/env bash
|
||||
set -euo pipefail
|
||||
|
||||
ROOT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")/.." && pwd)"
|
||||
SECRETS_FILE="${KSKILL_SECRETS_FILE:-$HOME/.config/k-skill/secrets.env}"
|
||||
|
||||
if [[ -f "$SECRETS_FILE" ]]; then
|
||||
set -a
|
||||
# shellcheck disable=SC1090
|
||||
source "$SECRETS_FILE"
|
||||
set +a
|
||||
fi
|
||||
|
||||
cd "$ROOT_DIR"
|
||||
exec node packages/k-skill-proxy/src/server.js
|
||||
|
|
@ -177,7 +177,14 @@ test("repository publishes Korean contribution guidance for external contributor
|
|||
assert.match(contributing, /릴리스나 패키징 관련 변경은 `npm run ci`/);
|
||||
assert.match(contributing, /`~\/\.claude\/skills\/<skill-name>`/);
|
||||
assert.match(contributing, /`~\/\.agents\/skills\/<skill-name>`/);
|
||||
assert.match(contributing, /프로덕션 프록시는 \*\*Google Cloud Run\*\*/);
|
||||
assert.match(
|
||||
contributing,
|
||||
/프로덕션 프록시는 \*\*Google Cloud Run\*\* \(project `k-skill-proxy`, region `asia-northeast1`\)에서 운영하며 `k-skill-proxy\.nomadamas\.org` 도메인에 매핑/,
|
||||
);
|
||||
assert.match(
|
||||
contributing,
|
||||
/프로덕션 시크릿은 GCP Secret Manager에 보관되고 Cloud Run 런타임에 주입됩니다\. 프록시 운영자\(maintainer\)가 한 번 수행해야 하는 WIF\/Secret Manager 셋업과 운영 점검 절차는 \[`docs\/deploy-k-skill-proxy\.md`\]\(docs\/deploy-k-skill-proxy\.md\)에 정리/,
|
||||
);
|
||||
});
|
||||
|
||||
test("README links to the contribution guide", () => {
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue