# All Stop API — 자기 프로세스 kill 방지 버그 수정

## 개요
`POST /api/system/all-stop` API가 대시보드/cokacdir 프로세스까지 kill하는 버그를 수정한다.

## 현상
1팀이 All Stop API를 구현하고 curl 테스트 시, claude 프로세스를 kill하면서 **자기 자신(작업 중인 claude 봇)과 cokacdir 프로세스까지 함께 kill됨** → exit code 143 (SIGTERM)으로 비정상 종료.

## 수정 요구사항

### 1. kill 제외 대상 확장
**파일**: `dashboard/server.py` — `/api/system/all-stop` 핸들러

현재 제외 대상: dashboard 프로세스만
추가 제외 필요:
- `dashboard/server.py` — 대시보드 자체
- `cokacdir` — cokacdir 서비스 (봇 관리)  
- 현재 요청을 처리 중인 프로세스 자신 (`os.getpid()`)
- `systemd` 관련 프로세스

프로세스 필터링 시 다음 키워드가 포함된 프로세스는 제외:
```python
EXCLUDE_PATTERNS = [
    "dashboard/server.py",
    "cokacdir", 
    "systemd",
    "grep",
    str(os.getpid()),  # 자기 자신
]
```

### 2. 현재 코드 확인 및 수정
`dashboard/server.py`의 all-stop 핸들러(약 line 5816 부근)에서:
- `ps -eo pid,args`로 수집한 프로세스 목록에서 위 패턴을 제외
- kill 전에 로그에 "제외됨: PID=XXX reason=dashboard" 형태로 기록
- **cokacdir 봇은 자체적으로 종료되므로 kill 불필요** — claude 키워드로 잡히더라도 cokacdir 하위 프로세스는 제외

### 3. 테스트
All Stop API 호출 후:
- 대시보드 프로세스가 살아있어야 함
- cokacdir 서비스가 살아있어야 함
- 호출한 claude 세션(있다면)이 살아있어야 함

## 검증 시나리오
1. `curl -X POST http://localhost:8000/api/system/all-stop` 호출 후 대시보드가 계속 응답하면 성공
2. `systemctl --user status cokacdir`가 active이면 성공
3. `logs/all-stop.log`에 제외된 프로세스 목록이 기록되면 성공
4. claude 프로세스가 없을 때 `{"status":"ok","killed":0}` 반환하면 성공
5. 회귀: 시스템뷰 기존 기능 정상 동작