
# 개발

## 요구 사항

- 작업 공간 설치와 스크립트용 Bun
- Node.js 20+
- 엔드투엔드 테스트용 tmux 및 cloudflared
- 샌드박스 통합 테스트(선택 사항)에 필요한 Daytona API 키와 git 자격 증명
- UI 엔드투엔드 테스트용 Playwright

## 설치

```bash
bun install
```

## 앱 실행

```bash
bun run dev:beam
```

CLI을 빌드하고 로컬 서버를 포트 `8787`에서 시작합니다(`TERMBRIDGE_DEV_PORT`로 재정의 가능). `codex` 세션 tmux도 시작합니다(`TERMBRIDGE_DEV_SESSION`로 재정의 가능). 그런 다음 UI 개발 Vite을 실행해 `/__tb`(WebSocket 포함)를 서버로 프록시합니다. 브라우저에서 열 수 있는 개발용 교환 URL도 출력합니다. CLI 빌드를 건너뛰려면 `TERMBRIDGE_SKIP_BUILD=1`을 설정하세요.

### 여러 세션

```bash
TERMBRIDGE_SESSIONS=2 bun run dev:beam
```

또는 바로 가기를 사용하세요:

```bash
bun run dev:beam:multi
```

### 로컬 쿠키 모드

`dev:beam`은 직접 설정하지 않으면 `TERMBRIDGE_INSECURE_COOKIE=1`을 설정하므로 세션 쿠키가 일반 HTTP에서도 작동합니다. HTTPS 없이 CLI을 직접 실행하는 경우 명시적으로 설정하세요:

```bash
TERMBRIDGE_INSECURE_COOKIE=1 node cli/dist/bin.js --no-tunnel --public-url http://127.0.0.1:8080 --port 8080
```

## 테스트

```bash
bun run test
```

- `test:mocked`은 100% 커버리지로 단위/통합 테스트를 실행합니다.
- `test:cli`은 실제 CLI + UI e2e 테스트를 실행합니다(tmux + cloudflared + Playwright).
- `test:cli`의 Daytona 샌드박스 테스트는 이 저장소 옆의 `termbridge-test-app` 디렉터리에 있는 `.env` 파일에서만 설정을 읽습니다(`../termbridge-test-app/.env`). 해당 파일에 `TERMBRIDGE_E2E_DAYTONA=1` 및 `TERMBRIDGE_DAYTONA_API_KEY`이 설정된 경우 실행됩니다. 복제할 수 있는 저장소를 `TERMBRIDGE_SANDBOX_REPO`에 지정하세요. 기본 테스트 저장소는 비공개이므로 `TERMBRIDGE_SANDBOX_GIT_USERNAME` 및 `TERMBRIDGE_SANDBOX_GIT_TOKEN`도 필요합니다.

## 문서

문서는 `docs/`의 일반 Markdown 파일이며, 각 페이지에 프런트매터가 있고 탐색 순서를 정하는 `meta.json` 파일이 있습니다. [termbridge.dev](https://termbridge.inline0.dev/ko/)에서 게시됩니다. 다음 명령으로 유효성을 검사하세요:

```bash
node scripts/check-docs-content.mjs --root docs --expected-docs 16 --expected-nav 3
```

문서 콘텐츠 워크플로는 `docs/`을 수정하는 풀 리퀘스트에서 동일한 검사를 실행합니다.
