
# 開発

## 必要条件

- ワークスペースのインストールとスクリプトには **Bun**
- **Node.js 20+**
- エンドツーエンドテストには **tmux** と **cloudflared**
- サンドボックス統合テストには **Daytona API key + git credentials**（任意）
- UI のE2Eテストには **Playwright**

## インストール

```bash
bun install
```

## アプリの実行

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

これにより CLI がビルドされ、ポート `8787`（`TERMBRIDGE_DEV_PORT` で変更可能）でローカルサーバーがtmuxセッション `codex`（`TERMBRIDGE_DEV_SESSION` で変更可能）とともに起動します。また、Vite開発 UI も起動し、`/__tb`（WebSocketを含む）をそのサーバーにプロキシします。ブラウザーで開くための開発用redeem URL が表示されます。`TERMBRIDGE_SKIP_BUILD=1` を設定すると CLI ビルドをスキップできます。

### 複数セッション

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

または、ショートカットを使います。

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

### ローカルCookieモード

`dev:beam` は、独自に設定しない限り `TERMBRIDGE_INSECURE_COOKIE=1` を設定するため、通常の HTTP でもセッションCookieが機能します。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/ja/) で公開されています。次のコマンドで検証できます。

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

Docsコンテンツのワークフローでは、`docs/` に変更があるプルリクエストに対して同じチェックを実行します。
