<!-- task=typescript_impl plan=1 tag=REVIEW_API -->

# ws를 dependencies로 이동

## 이 파일을 읽는 구현 에이전트에게

체크리스트를 완료하고, 중간 검증 명령을 실행한 후 출력을 `CODE_REVIEW.md`의 `검증 결과` 섹션에 붙여넣어라. 계획과 다르게 구현한 부분은 `계획 대비 변경 사항`에 이유와 함께 기록하라.

---

## 배경

1차 리뷰에서 `ws` 패키지가 `devDependencies`에 잘못 배치된 것이 발견됐다. `ws_client.ts`와 `ws_server.ts`가 모두 `ws`를 런타임에 import하므로, `npm install --omit=dev` 또는 프로덕션 설치 환경에서 실패한다. `dependencies`로 이동해야 한다.

---

### [REVIEW_API-1] ws 패키지를 devDependencies에서 dependencies로 이동

#### 문제

`typescript/package.json` (현재 상태):
```json
"dependencies": {
  "@bufbuild/protobuf": "^2.2.5"
},
"devDependencies": {
  ...
  "ws": "^8.18.1"   ← 런타임 의존성인데 devDependencies에 있음
}
```

`ws_client.ts:1`과 `ws_server.ts:2`에서 `import WebSocket from "ws"`, `import { WebSocketServer } from "ws"`로 런타임에 사용한다.

#### 해결 방법

`ws`를 `dependencies`로 이동한다.

```diff
  "dependencies": {
-   "@bufbuild/protobuf": "^2.2.5"
+   "@bufbuild/protobuf": "^2.2.5",
+   "ws": "^8.18.1"
  },
  "devDependencies": {
    "@bufbuild/protoc-gen-es": "^2.2.5",
    "@types/node": "^22.15.21",
    "@types/ws": "^8.18.1",
    "tsx": "^4.19.3",
    "typescript": "^5.8.3",
-   "vitest": "^3.1.3",
-   "ws": "^8.18.1"
+   "vitest": "^3.1.3"
  }
```

그 후 `npm install`을 실행해 `package-lock.json`을 갱신한다.

#### 수정 파일 및 체크리스트

- [ ] `typescript/package.json`: `ws`를 `devDependencies`에서 제거, `dependencies`에 추가
- [ ] `npm install` 실행 후 `typescript/package-lock.json` 갱신

#### 테스트 작성

스킵. 기존 ws 테스트(`test/ws.test.ts`)가 동작 검증을 충분히 커버한다.

#### 중간 검증

```bash
cd typescript && npm install && npx tsc --noEmit && npx vitest run
```
기대 결과: 타입 오류 없음, 16개 테스트 PASS.

---

## 수정 파일 요약

| 파일 | 항목 |
|------|------|
| `typescript/package.json` | REVIEW_API-1 |
| `typescript/package-lock.json` | REVIEW_API-1 |

---

## 최종 검증

```bash
cd typescript && npm install && npx tsc --noEmit && npx vitest run
```

기대 결과: 타입 오류 없음, 16개 테스트 PASS.
