Skip to content

fix: /clear 이후 이전 transcript가 남는 문제 수정 - #52

Open
Yoonwoo-Ha wants to merge 1 commit into
devswha:mainfrom
Yoonwoo-Ha:fix/transcript-clear-boundary
Open

fix: /clear 이후 이전 transcript가 남는 문제 수정#52
Yoonwoo-Ha wants to merge 1 commit into
devswha:mainfrom
Yoonwoo-Ha:fix/transcript-clear-boundary

Conversation

@Yoonwoo-Ha

Copy link
Copy Markdown
Contributor

문제

GJC와 Claude Code는 /clear 실행 후에도 provider session ID와 JSONL 파일을 그대로 유지합니다.

기존 ChatMux는 이를 새 대화 경계로 인식하지 않아 다음 문제가 있었습니다.

  • /clear 후 새 대화를 시작해도 이전 메시지가 채팅에 남음
  • 서버에서 새 기록을 읽더라도 프런트의 기존 메시지·실시간 캐시가 다시 합쳐짐
  • 이전 메시지 페이지를 불러오면 clear 이전 기록이 다시 나타날 수 있음

변경 사항

GJC

  • JSONL의 type: custom, customType: context_clear 이벤트를 대화 경계로 처리합니다.
  • 가장 최근 경계 이전의 정규화 메시지 버퍼를 즉시 초기화합니다.
  • 일반 메시지에 포함된 /clear 문자열은 경계로 취급하지 않습니다.

Claude Code

  • 공식 로컬 명령 레코드인 <command-name>/clear</command-name>만 경계로 인식합니다.
  • transcript 파일 순서를 기준으로 가장 최근 clear 이후 레코드만 반환합니다.
  • 타임스탬프가 약간 역전된 레코드가 있어도 clear 이전 메시지가 섞이지 않습니다.

클라이언트 캐시

  • history 응답에 provider-native historyEpoch를 추가했습니다.
  • 같은 session ID에서 epoch가 바뀌면 서버 메시지, 실시간 메시지, token usage 캐시를 초기화합니다.
  • 이전 epoch의 offset으로 진행 중이던 pagination 응답은 합치지 않고 offset 0부터 다시 동기화합니다.

호환성

  • historyEpoch는 optional 필드이므로 기존 provider 응답과 호환됩니다.
  • session ID가 실제로 바뀌는 Codex/OMP 등의 기존 동작에는 영향을 주지 않습니다.
  • clear 이벤트가 없는 기존 GJC/Claude transcript의 렌더링과 페이지네이션 방식은 유지됩니다.

테스트

  • npm run typecheck
  • npm run lint
  • npm run build
  • GJC/Claude provider 회귀 테스트: 18개 통과
  • session store 회귀 테스트: 12개 통과
  • 실제 GJC 및 Claude transcript와 설치된 3001 API에서 clear 이후 메시지만 반환되는 것 확인
  • clear 직후 빈 대화, 여러 번 clear, 일반 텍스트의 /clear, 파일 순서와 timestamp 역전, 페이지네이션 경계 케이스 확인

로컬 전체 테스트에서는 933개 중 931개가 통과했습니다. 나머지 2개는 사용자 HOME에 설치된 Codex/OpenCode skill 목록이 테스트 fixture에 추가되어 발생하는 기존 환경 의존 실패이며, 이번 변경 파일과는 무관합니다.

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.

2 participants