2026-07-22
요약 (AI 작성)
영속 세션을 "실제로 살아남는" 물건으로 만든 날입니다. session.keep-alive-after-quit 게이트를 넣고 connect-or-launch 오케스트레이션과 AppSession 의 host-backed 배선을 붙인 뒤, host 연결을 앱 전역으로 올려 멀티 윈도우를 지원하고 workspace 에 runtime_id 를 영속시켜 재접속 경로를 열었습니다. 앱을 종료해도 host-backed 터미널이 detach 되어 살아남고, 그 대신 "Quit and End All Sessions" 종료 게이트와 keep-alive 연결 실패 알림을 P4 계약대로 제공합니다. 설정 GUI 에도 영속 세션 토글을 노출했습니다.
원격 화면의 충실도를 크게 끌어올린 것도 이날입니다. 원격 이미지 wire 모델을 kitty 충실로 재정의해 host 가 snapshot 에 kitty 이미지를 방출하고 client 조립기가 저장·재조립하며 세션 중 새 이미지는 delta 로 보내도록 했고, 원격 화면 색을 theme-aware 하게 만들고 OSC 133 prompt 마크를 전달하도록 했습니다. host-backed 터미널의 상호작용 패리티도 #6a~#6c 로 채웠습니다 — 스크롤백 host 스크롤 라우팅, 드래그 선택과 복사, 단어·줄 선택의 host 경계 계산, 스크롤백 검색(하이라이트+매치수)과 현재 매치 강조·⌘G 네비까지 전부 host-side 로 지원합니다. OSC 9/777 알림도 client 를 거쳐 GUI 알림 경로에 연결했습니다. 안정화로는 화면 desync 시 fresh snapshot 재요청 복구(#7), attach/detach 가 영속 runtime 을 terminate 하지 않게 한 수정(R1), 공유 connection 의 stream_id demux(R2), host 사망 시 in-process 폴백(R3), takeNotification 의 수동 디코더 전환, 그리고 /code-review max 리메디에이션 15건이 있었습니다.
파일 패널은 뷰어를 넓혔습니다. image·pdf 뷰어(FP14/FP15)를 격리 loadFileURL 재사용으로 붙이고 panzoom 이미지 뷰어와 탭 가로 스크롤·뷰어 겹침 수정을 더했으며, text/code·svg 열기와 터미널 테마 하이라이트를 지원했습니다. 프리뷰 쪽은 코드 하이라이트와 mermaid 테마를 적용하고 검은 박스·코드펜스 로드 실패를 고쳤지만, 라이브 프리뷰 자체는 백로그로 돌리고 당분간 읽기|소스 두 모드만 노출하기로 했습니다.
커밋
ohah/maru
- fix(session): /code-review max 리메디에이션 — 원격 화면 15건 수정
- docs(session): 영속 세션 host 문서를 현행화합니다
- feat(config): 영속 세션 토글을 설정 GUI에 노출합니다
- feat(session): 원격 화면이 OSC 133 prompt 마크를 전달합니다
- test(session): 원격 파이프라인 RenderSnapshot parity 인프라를 추가합니다
- feat(session): 세션 중 새 kitty 이미지를 delta로 전송합니다
- feat(session): 원격 화면이 kitty 이미지를 렌더에 노출합니다
- feat(session): client 조립기가 원격 kitty 이미지를 저장·재조립합니다
- feat(session): host가 원격 snapshot에 kitty 이미지를 방출합니다
- feat(session): 원격 이미지 wire 모델을 kitty 충실로 재정의합니다
- feat(file-panel): 탭 가로 스크롤 + 뷰어 겹침 수정 + 이미지 뷰어(panzoom)
- feat(session): 원격 화면 색을 theme-aware하게 합니다
- feat(session): host-backed 검색에 현재 매치 강조 + ⌘G 네비(매치로 스크롤)를 추가합니다
- feat(session): host-backed 터미널의 스크롤백 검색(하이라이트+매치수)을 host-side로 지원합니다
- feat(session): host-backed 터미널의 단어/줄 선택을 host 경계 계산으로 지원합니다
- feat(session): host-backed 터미널의 드래그 선택 + 복사를 host-side로 지원합니다
- style(file-panel): viewer.ts mermaid img 분기 oxfmt 정리
- feat(file-panel): 라이브 프리뷰 백로그화 — 읽기|소스만 노출
- feat(file-panel): 프리뷰 코드 하이라이트 + mermaid 테마 적용
- fix(file-panel): atomic 위젯 asset 캐시로 코드펜스 로드 실패 수정
- fix(file-panel): 라이브 프리뷰 mermaid 다이어그램 검은 박스 수정
- feat(session): host-backed 터미널의 스크롤백을 host 스크롤 라우팅으로 지원합니다
- fix(session): host-backed 화면 desync를 fresh snapshot 재요청으로 복구합니다
- feat(file-panel): image·pdf 파일 뷰어(FP14/FP15) — 격리 loadFileURL 재사용
- fix(session): takeNotification의 JSON 파싱을 수동 디코더로 바꿔 ReleaseSafe 링크를 고칩니다
- feat(session): host-backed 터미널의 OSC 9/777 알림을 GUI 알림 경로에 연결합니다
- docs(session)+refactor: stale 배너를 갱신하고 siblingMaruPath 중복을 제거합니다
- fix(session): host 사망 시 새 터미널을 in-process로 폴백하고 keep-alive 토글을 설정 UI에서 숨깁니다
- fix(session): 공유 connection에서 stream_id로 화면 배치를 demux합니다
- feat(file-panel): text/code·svg 파일 열기 + 터미널 테마 하이라이트 + 라이브 프리뷰 루프·플리커 수정
- fix(session): attach/detach 경로가 영속 runtime을 terminate하지 않게 합니다
- feat(session-host): host-backed 터미널의 OSC 9/777 알림을 client로 전달합니다
- feat(session-host): keep-alive host 연결 실패를 사용자에게 알립니다(P4 §6)
- feat(session-host): Quit and End All Sessions을 추가합니다(P4 종료 gate)
- feat(session-host): 앱 종료 시 host-backed 터미널을 detach해 생존시킵니다
- feat(session-host): workspace에 runtime_id 영속 + 재접속을 배선합니다
- feat(session-host): 기존 host runtime 재접속 plumbing을 추가합니다
- feat(session-host): host 연결을 앱 전역으로 올립니다(멀티 윈도우)
- test(session-host): keep-alive AppSession 통합 스모크를 추가합니다
- fix(session-host): app_session 원격 배선을 Linux 컴파일에 gate합니다
- feat(session-host): AppSession을 host-backed backend에 배선합니다
- feat(config): session.keep-alive-after-quit 게이트를 추가합니다
- feat(session-host): connect-or-launch 오케스트레이션을 추가합니다