# 언어 선택: Python 유지 vs 재작성 — 장단점 비교

요구사항을 만족시키기 위해 "언어를 바꿀지"를 먼저 따졌습니다. 결론은 **하이브리드(Python 두뇌 유지 + Node/bun Discord 레이어 신규)** 입니다. 근거를 정리합니다.

## 결정을 좌우한 핵심 사실

1. **디스코드 봇은 영상(Go Live)을 송출할 수 없다.** Discord가 봇 계정의 영상 전송을 정책적으로 막아둠 (2026년 현재도 동일, 공식 API 변화 없음).
2. **봇 영상 송출이 되는 라이브러리는 Node 전용이고 셀프봇(유저 토큰)을 요구한다.** `@dank074/discord-video-stream`(v6, 2026-03 기준 유지보수 중) + `discord.js-selfbot-v13`. Python에는 동등한 동작 라이브러리가 없음.
3. **기존 jarvis 두뇌는 Python 약 39,000줄**(메모리 그래프·벡터스토어·planner/evaluator 답변엔진·MCP 툴·redaction·STT(faster-whisper)·TTS(piper)). 검증된 자산.
4. 음성 입출력/슬래시 명령/ephemeral/음성채널 접속은 Python(py-cord)·Node(discord.js) 모두 가능하지만, **Node 생태계가 더 성숙**.

## 옵션별 비교

| 항목 | A. Python 단일 유지 | B. 전면 Node/bun 재작성 | C. 하이브리드 (채택) |
|---|---|---|---|
| VNC 영상 송출(native) | ❌ 사실상 불가 | ✅ 가능 | ✅ 가능(Node 레이어) |
| 음성 입출력 | ✅ | ✅ | ✅ |
| 슬래시/ephemeral | ✅ | ✅(더 성숙) | ✅ |
| 기존 두뇌 재사용 | ✅ 그대로 | ❌ 39k줄 재작성 | ✅ 그대로 |
| 작업량/리스크 | 중(영상 막힘) | 매우 큼/높음 | 작음/낮음 |
| 유지보수 | 단일 언어 | 단일 언어 | 2개 런타임(경계 단순) |

- **A 탈락**: 핵심 요구(디스코드 화면 방송)를 만족 못 함.
- **B 탈락**: 성숙한 두뇌를 버리고 수 주간 재작성. 회귀·버그 위험 큼. 이득(언어 통일)이 비용보다 작음.
- **C 채택**: 영상이 가능한 Node로 "디스코드/음성/영상 인터페이스"만 새로 짜고, 두뇌는 Python 그대로 둔 뒤 얇은 HTTP 브릿지로 연결.

## 하이브리드 경계 설계

```
Discord  ──voice/video/slash──▶  bot/ (Node + bun, discord.js)
                                   │  HTTP (localhost)
                                   ▼
                               bridge/ (Python, Flask)
                                   │  in-process import
                                   ▼
                               src/jarvis (기존 두뇌)
```

- 경계는 단 하나(HTTP localhost). 직렬화는 WAV(오디오) + JSON(텍스트)뿐이라 단순.
- Node는 AI 로직을 일절 갖지 않음 → 두 런타임의 책임이 깨끗하게 분리.

## Node 채택부의 bun 적극 활용

- 패키지 매니저/런타임 모두 **bun** 사용 (`bun install`, `bun run`).
- TypeScript를 트랜스파일 없이 직접 실행(`bun run src/index.ts`).
- 네이티브 의존(`@discordjs/opus`, video-stream의 node-av/node-datachannel)은 bun에서 install 스크립트 허용 필요 → 본 레포는 무거운 네이티브 의존을 `optionalDependencies`로 분리해 기본 설치를 가볍게 유지.
