# v0.2.12 — 세션 윈도우 키보드/포인터 인터랙션 강화 + 사이드바 워크스페이스 reorder 포인터 기반 재구현

릴리즈 일자: 2026-05-30
이전 버전: v0.2.11

## 요약 (TL;DR)

세션 floating window를 매일 쓰면서 누적된 작은 마찰들을 한 번에 정리했습니다 — 터미널 바디 어디든 클릭하면 윈도우가 raise되고, 활성 윈도우가 info 톤 border + glow로 시각 표시되며, `Ctrl+Tab` / `Ctrl+Shift+Tab`으로 같은 그룹의 탭을 순환할 수 있습니다. 탭바 우측의 `+` 버튼이나 `Ctrl+T` (Mac은 `Cmd+T`)로 raw-shell 세션을 즉시 한 탭 추가할 수 있어 폼을 거치지 않고도 OS 셸이 빠르게 뜹니다. 사이드바의 워크스페이스 순서 변경은 Edge / Chrome의 네이티브 "분할 뷰" 드롭 오버레이를 피하기 위해 HTML5 drag-and-drop 대신 포인터 제스처로 통째 재구현되었고, 항목 절반 단위 드롭으로 정확도도 회복했습니다. 세션 리스트의 새 세션 브랜치 라벨이 프로젝트 default가 아닌 현재 체크아웃된 브랜치를 우선 표시하며, SVN 상태 패널이 viewport-aware 카드 레이아웃으로 통일됐습니다.

## 주요 변경

### 세션 윈도우: 활성 표시 + 바디 클릭으로 raise

- 여러 floating window를 동시에 띄운 상태에서 **topmost(z 최상위) 윈도우의 border가 info 톤으로 바뀌고 outer ring + 부드러운 glow**가 적용됩니다. 다음 키 입력이 어디로 갈지 시각으로 즉시 확인 가능.
- 터미널 viewport 어디든 클릭하면 그 윈도우가 raise됩니다(이전엔 chrome(타이틀바)을 잡아야 했음). chrome drag는 여전히 정상 동작.
- 120ms 트랜지션으로 raise 시 표시가 슬라이드.

### 세션 탭 키보드 사이클 (`Ctrl+Tab` / `Ctrl+Shift+Tab`)

- 같은 그룹 안의 다음/이전 탭으로 순환합니다. wrap-around 지원.
- xterm 터미널 viewport에 focus가 있을 때만 동작 — 폼 입력이나 다른 chrome에는 영향 없음.
- 단일 탭 stack에서는 키가 PTY로 fall-through됩니다 (일부 TUI가 native로 `Ctrl+Tab`을 쓸 가능성 고려).

### 빠른 raw-shell 탭 (`+` 버튼 / `Ctrl+T` / `Cmd+T`)

- 탭바 우측의 `+` 버튼이나 글로벌 단축키로 즉시 raw-shell 세션을 spawn합니다. 폼을 거치지 않고도 OS 셸이 한 탭 추가됩니다.
- main-owned 가시 그룹이 있으면 그 그룹의 stack에 탭으로 삽입, 없으면 새 floating window를 띄움.
- AI CLI 세션(Claude / Gemini / Codex)은 폼 경로(`Add Session`)를 그대로 유지 — 단축 경로는 빠른 OS 셸 spawn 전용입니다.
- xterm은 같은 조합을 swallow해서 PTY로 `^T`가 흘러가지 않습니다.

### 사이드바 워크스페이스 reorder를 포인터 기반으로 재구현

- 기존 HTML5 drag-and-drop은 Microsoft Edge / Chrome이 화면 좌측에 페이지가 막을 수 없는 **네이티브 "분할 뷰 만들기" 드롭 오버레이**를 띄워서 사용자를 혼란시켰고, 거기에 드롭해도 우리 reorder는 작동하지 않았습니다. HTML5 drag 메커니즘 자체를 들어내고 `mousedown` 기반 포인터 제스처로 통째 교체했습니다.
- 드롭 타겟이 항목 사이 8px 갭이 아니라 **항목 절반 단위**로 작동합니다(top half → 이 항목 앞, bottom half → 이 항목 뒤). 픽셀 단위 정밀도 없이도 의도가 표현됩니다.
- 6px 이동 threshold로 클릭 vs 드래그 구분, `Escape`로 진행 중 reorder 캔슬, 드래그 중 cursor가 `grabbing`으로 변경됩니다.
- 사이드바 안의 다른 요소(`<a>` 태그, SVG 로고 등)에서 브라우저가 native drag를 시작하지 못하도록 belt-and-suspenders 가드를 적용 — `draggable={false}` + mousedown / dragStart preventDefault + 컨테이너 onDragStart preventDefault.

### 세션 리스트: 현재 git branch 우선 표시

- 새 세션 생성 시 브랜치 라벨이 프로젝트 default branch 대신 **현재 체크아웃된 브랜치**를 우선 표시합니다. feature 브랜치 위에서 세션을 만들 때 어디로 갈지 라벨에서 바로 확인 가능.

### SvnStatusPanel 카드 레이아웃 + viewport-aware 높이

- SVN 작업 사본 패널이 고정 600px 최소 높이 대신 `calc(100vh - 260px)`로 동작하며, 사이드바와 메인 패널이 카드 컨테이너로 분리됐습니다.
- 다른 패널들(Git / Files / Wiki)과 시각 일관성 회복. SVN 자체 동작에는 영향 없음.

## 설치 / 업데이트

```bash
npm i -g clitrigger@0.2.12
```

데스크탑 앱: GitHub Release 자산의 `.exe` / `.dmg` / `.AppImage` 사용.

## 전체 커밋 목록

- c578118 WIP(docs): add 5/29–5/30 changelogs and document tab/window interactions
- 41c8f07 WIP(client): suppress native sidebar drag with mousedown/dragStart preventDefault
- 8495531 WIP(client): prevent native image-drag and text selection on sidebar project links
- cdccf7f WIP(client): replace HTML5 sidebar reorder drag with pointer-based gesture
- 37c6e53 WIP(client): make sidebar project drag-drop snap to item halves
- 7b36f6d WIP(session): add "+" / Ctrl+T to spawn raw-shell tabs
- b870856 feat(session): cycle session window tabs with Ctrl+Tab / Ctrl+Shift+Tab
- 9acc7ad WIP(client): show current git branch in session list branch label
- a4c67c4 WIP(scripts): condense dev.bat by stripping comments and inlining loops
- 6394743 feat(session): raise floating window on body click and mark active window
- 7f02e9c WIP(client): restyle SvnStatusPanel with card layout and viewport height

## 관련 문서

- [상세 changelog](../changelog/) — 날짜별 기술 결정 기록
