Repository navigation
자리났다 4.16.0
에이전트(MCP) 연결을 크게 손본 버전입니다. 에이전트에게 감시·예약을 맡길 때 승인 창에서 무엇을 승인하는지 문장으로 읽을 수 있고, 그 문장이 실제 요청과 다르면 서버가 거절합니다. 열차 검색은 코레일 목록을 고른 시간대 끝까지 읽습니다.
에이전트(MCP)
이미 연결한 에이전트는 한 번 다시 연결해 주세요. 도구 입력 형식이 바뀌었습니다(
summary필수,get_status·start_watch결과 모양 변경). 다시 연결하지 않으면 감시·예약 요청이 오류로 끝납니다. 권한(조회만·예약까지)은 그대로입니다.
승인 문장(summary)
- 승인 창은 도구 인자를 JSON 그대로 보여 줘서 무엇을 승인하는지 읽기 어려웠습니다. 이제
start_watch·stop_watch·reserve_seat·cancel_reservation은 사용자가 읽을 한두 문장(summary)을 꼭 받습니다. - 서버는 그 문장을 실제 호출과 맞춰 보고, 빠지거나 다르면 코레일 요청 한도를 쓰기 전에 거절합니다.
start_watch: 날짜·출발역→도착역·열차 번호, 특실이면 "특실",seat=any면 "일반실 우선(없으면 특실)",start_at이 있으면 "10월 15일 07:00부터"처럼 시작 시각, 예약 대기 여부reserve_seat:trainKey가 가리키는 열차의 날짜·구간·번호, 호차와 좌석("8C(2호차)"·"2호차 8 C"·"8C·D" 도 읽음), 특실 여부stop_watch: 멈추는 진행 중·예정 감시마다 날짜·구간cancel_reservation: 함께 취소되는 결제 대기 예약마다 열차 번호- 문장에 인원("2명"·"1석"·"한 명")을 적었다면
passengers와 같아야 합니다. 일반실을 특실이라 하거나 등급을 "말고"로 빼는 문장도 거절합니다.
- 멈추기·취소 검사는 실제 실행과 같은 사용자 잠금 안에서 한 번 더 상태를 읽어 확인합니다.
- 결과의
notes가 잡은 좌석·취소한 예약·시작하거나 예약된 감시 내용을 문장으로 다시 말합니다(열차 번호와 시각 포함).
상태와 결과
get_status와start_watch결과의 감시를 앱 필드(depDate:"20261019"·depTime:"0700"·specialInfoShow) 대신start_watch인자와 같은 말(date·from·to·earliest·latest·trains·passengers, 등급·좌석 방식은 한국어)로 줍니다.- 감시 상태가 앱의 "확인 지연"과 같은 기준(마지막 조회 120초)으로 조회가 없다고 알리고, 일부 좌석만 잡았으면 "N석 중 M석"을 알립니다.
- 실패를 도구별로 알립니다. 조회 실패는 "좌석이 없다는 뜻이 아니에요"로, 변경 도구의 응답 끊김은
get_status로 확인하라고 안내합니다. 매진 등급 예약은 좌석표 재조회 대신 감시를 안내합니다. - 날짜가 과거이거나
latest가earliest이하인 입력은 필드 이름과 함께 바로 거절해 요청 한도를 쓰지 않습니다. - 60일보다 먼 날짜의 조회 실패에는 아직 팔지 않는 날짜일 수 있다고 덧붙입니다(운영에서 60일 앞까지 조회됨을 확인).
열차 검색과 감시(앱·에이전트 공통)
- 코레일은 열차를 10줄씩 주고 다음 쪽 커서를 비워 보냅니다. 이제 마지막 줄의 출발 시각부터 이어 읽어(최대 5쪽) 하루 전체를 찾아도 앞쪽 열차(KTX 6편 남짓)만 나오던 문제를 고쳤습니다. 감시도 같은 방식으로 고른 열차를 찾습니다. 다 읽지 못하면
truncated로 알립니다. - 좌석을 고르지 않은 감시에서 종료 시각을 정하면, 예약 대기를 받는 매진 열차의 출발 시각을 0으로 읽어 빠뜨리던 문제를 고쳤습니다.
- 열차를 고르지 않은 감시가, 서울처럼 도시 이름으로 읽히는 역에서 다른 역(청량리 등)을 오가는 열차를 잡지 않습니다(예: 서울→부산 감시에 703 청량리→부전).
- 뒤쪽 쪽 조회가 실패하면 "빈자리 없음"이 아니라 조회 실패로 알립니다.
앱
- 열차 목록이 잘렸을 때의 안내를 "시간대를 좁혀 다시 조회하면 나머지를 볼 수 있어요"로 바꿨습니다. 그 밖의 화면은 4.15.1과 같습니다.
서버는 이미 이 변경으로 배포되어 있어 4.15.x 앱에서도 위 수정이 적용됩니다.
Android 7.0 이상이 필요합니다. 이 APK는 직접 설치용이며, Play에서 받은 앱과 서명이 달라 서로 업데이트되지 않습니다. 가능하면 Google Play 내부 테스트로 받아 주세요.
APK SHA-256: 6acae49c7c216beda0af9b1b36a1fc13090bd8623f024f68fb752dd925d442ac
APK 서명 인증서 SHA-256: cc949e18b5a541a7f533ef954d1b2f675aa0847d413e784234c016e233e34f5e (이전 릴리스와 같음)
배포·검증
- 서버(pit5):
ad24a72로 배포했습니다(2026-10-13, 진행 중인 감시·결제 대기 0건 확인 뒤 API만 재생성). - Google Play 내부 테스트: 4.16.0(versionCode 41600)을 2026-10-13 21:49(KST)에 출시했습니다(내부 테스터에게 제공됨). AAB SHA-256
fd3bdd41ad84bb3d26a45ac92d4755c4328776bdc6ffce2330c6f72c892e084e. - 태그
v4.16.0은 main 커밋ad24a72를 가리킵니다. - 이 Mac에서 에뮬레이터를 포함한
npm run verify전체 통과: 프론트 278개, 백엔드 1034개, 통합 18개, 브라우저·레이아웃(헤드리스) 116개와 에뮬레이터 기기 단계 44개. - GitHub Actions: 브랜치 실행에서
checks·device통과. 첫 실행에서 기기 단계의 뒤로가기 테스트가 한 번 실패했지만(시트가 뜬 직후 보낸 뒤로가기 키가 먹히지 않음) 재실행과 로컬 에뮬레이터에서는 통과해 재현되지 않았습니다. - MCP 변경은 독립 코드 리뷰를 여러 차례 거쳤고, 운영 서버에서 실제 코레일로 다시 검증했습니다(2026-10-13): 문장이 틀린 예약·감시·멈추기·취소는 상태 변화 없이 거절되고, 맞는 문장으로 1석 예약 후 바로 취소, 예정·진행 감시 시작 후 바로 멈춤까지 확인했습니다. 서울→강릉에 KTX-이음이 나오고 서울→부산에 703이 없는 것도 확인했습니다.
- 아직 실호출로 확인하지 않은 경로: 예약 대기(
waitlist=true), 일부만 취소, 승객 2명 이상, 1분 호출 한도 초과.