cc-discussion 1.0.0__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (31) hide show
  1. cc_discussion-1.0.0/MANIFEST.in +21 -0
  2. cc_discussion-1.0.0/PKG-INFO +527 -0
  3. cc_discussion-1.0.0/README.md +487 -0
  4. cc_discussion-1.0.0/backend/__init__.py +1 -0
  5. cc_discussion-1.0.0/backend/__main__.py +7 -0
  6. cc_discussion-1.0.0/backend/cli.py +44 -0
  7. cc_discussion-1.0.0/backend/main.py +167 -0
  8. cc_discussion-1.0.0/backend/models/__init__.py +2 -0
  9. cc_discussion-1.0.0/backend/models/database.py +244 -0
  10. cc_discussion-1.0.0/backend/routers/__init__.py +3 -0
  11. cc_discussion-1.0.0/backend/routers/history.py +202 -0
  12. cc_discussion-1.0.0/backend/routers/rooms.py +377 -0
  13. cc_discussion-1.0.0/backend/services/__init__.py +1 -0
  14. cc_discussion-1.0.0/backend/services/codex_agent.py +357 -0
  15. cc_discussion-1.0.0/backend/services/codex_history_reader.py +287 -0
  16. cc_discussion-1.0.0/backend/services/discussion_orchestrator.py +461 -0
  17. cc_discussion-1.0.0/backend/services/history_reader.py +455 -0
  18. cc_discussion-1.0.0/backend/services/meeting_prompts.py +291 -0
  19. cc_discussion-1.0.0/backend/services/parallel_orchestrator.py +908 -0
  20. cc_discussion-1.0.0/backend/services/participant_agent.py +394 -0
  21. cc_discussion-1.0.0/backend/websocket.py +292 -0
  22. cc_discussion-1.0.0/cc_discussion.egg-info/SOURCES.txt +28 -0
  23. cc_discussion-1.0.0/frontend/dist/assets/index-CnjhvlD6.js +9 -0
  24. cc_discussion-1.0.0/frontend/dist/assets/index-VJBoI-hP.css +1 -0
  25. cc_discussion-1.0.0/frontend/dist/assets/vendor-query-b54G1vTo.js +1 -0
  26. cc_discussion-1.0.0/frontend/dist/assets/vendor-react-BXXBRvhI.js +3 -0
  27. cc_discussion-1.0.0/frontend/dist/assets/vendor-ui-DmKgA75E.js +45 -0
  28. cc_discussion-1.0.0/frontend/dist/index.html +20 -0
  29. cc_discussion-1.0.0/frontend/dist/vite.svg +42 -0
  30. cc_discussion-1.0.0/pyproject.toml +76 -0
  31. cc_discussion-1.0.0/setup.cfg +4 -0
@@ -0,0 +1,21 @@
1
+ # Include documentation
2
+ include README.md
3
+ include LICENSE
4
+ include pyproject.toml
5
+
6
+ # Include frontend built files
7
+ recursive-include frontend/dist *
8
+
9
+ # Include backend Python files
10
+ recursive-include backend *.py
11
+
12
+ # Exclude development files
13
+ exclude .gitignore
14
+ exclude .env
15
+ exclude .env.example
16
+ prune .github
17
+ prune frontend/src
18
+ prune frontend/node_modules
19
+ prune venv
20
+ prune __pycache__
21
+ prune *.egg-info
@@ -0,0 +1,527 @@
1
+ Metadata-Version: 2.4
2
+ Name: cc-discussion
3
+ Version: 1.0.0
4
+ Summary: Multi-Claude discussion platform with ClaudeCode context
5
+ Author: nogataka
6
+ License: MIT
7
+ Project-URL: Homepage, https://github.com/nogataka/cc-discussion
8
+ Project-URL: Repository, https://github.com/nogataka/cc-discussion
9
+ Project-URL: Issues, https://github.com/nogataka/cc-discussion/issues
10
+ Keywords: claude,discussion,ai,multi-agent,codex,openai
11
+ Classifier: Development Status :: 4 - Beta
12
+ Classifier: Environment :: Web Environment
13
+ Classifier: Framework :: FastAPI
14
+ Classifier: Intended Audience :: Developers
15
+ Classifier: License :: OSI Approved :: MIT License
16
+ Classifier: Programming Language :: Python :: 3
17
+ Classifier: Programming Language :: Python :: 3.11
18
+ Classifier: Programming Language :: Python :: 3.12
19
+ Classifier: Programming Language :: Python :: 3.13
20
+ Classifier: Topic :: Scientific/Engineering :: Artificial Intelligence
21
+ Requires-Python: >=3.11
22
+ Description-Content-Type: text/markdown
23
+ Requires-Dist: fastapi>=0.115.0
24
+ Requires-Dist: uvicorn[standard]>=0.32.0
25
+ Requires-Dist: sqlalchemy>=2.0.0
26
+ Requires-Dist: python-dotenv>=1.0.0
27
+ Requires-Dist: click>=8.0.0
28
+ Provides-Extra: claude
29
+ Requires-Dist: claude-agent-sdk>=0.0.3; extra == "claude"
30
+ Provides-Extra: codex
31
+ Requires-Dist: codex-sdk-py>=0.0.3; extra == "codex"
32
+ Provides-Extra: all
33
+ Requires-Dist: claude-agent-sdk>=0.0.3; extra == "all"
34
+ Requires-Dist: codex-sdk-py>=0.0.3; extra == "all"
35
+ Provides-Extra: dev
36
+ Requires-Dist: ruff>=0.8.0; extra == "dev"
37
+ Requires-Dist: mypy>=1.13.0; extra == "dev"
38
+ Requires-Dist: build; extra == "dev"
39
+ Requires-Dist: twine; extra == "dev"
40
+
41
+ # Discussion Room
42
+
43
+ ![Discussion Room Screenshot](docs/assets/screenshot.png)
44
+
45
+ 複数のClaude/Codexインスタンスが、それぞれ異なるClaudeCode/Codex CLIの会話履歴(コンテキスト)を持ちながらディスカッションできるWebアプリケーションです。
46
+
47
+ ## 概要
48
+
49
+ Slackのような会議室を作成し、2〜3人のClaude/Codexを招待してディスカッションさせることができます。各Claude/Codexには過去のClaudeCode/Codex会話履歴を注入できるため、人間がコンテキストを橋渡しする必要なく、問題解決や状況確認を行えます。
50
+
51
+ ### 主な特徴
52
+
53
+ | 機能 | 説明 |
54
+ | -------------------------------- | ------------------------------------------------------------------------------ |
55
+ | **ClaudeCode/Codex履歴ブラウザ** | `~/.claude/projects/`および`~/.codex/`から過去のセッションを読み込み・選択 |
56
+ | **マルチエージェント会議室** | 2〜3人のClaude/Codex参加者でディスカッション |
57
+ | **コンテキスト注入** | 各エージェントに過去の会話履歴を自動注入 |
58
+ | **リアルタイムストリーミング** | WebSocketでディスカッションをリアルタイム表示 |
59
+ | **並列準備処理** | 次の発言者がバックグラウンドで準備(ファイル読み込み等)を行い、待ち時間を短縮 |
60
+ | **会議タイプ別プロンプト** | 9種類の会議タイプに応じた最適化されたプロンプトを自動適用 |
61
+ | **ファシリテーター機能** | AIファシリテーターが会議を進行・まとめ |
62
+ | **モデレーター介入** | 人間が途中で発言を挿入してディスカッションを誘導可能 |
63
+
64
+ ## 必要要件
65
+
66
+ - Python 3.11以上
67
+ - Node.js 20.19以上 または 22.12以上
68
+ - Claude CLI(インストール済み&ログイン済み)
69
+ - Codex CLI(オプション:Codexエージェントを使用する場合)
70
+
71
+ ## インストール・起動
72
+
73
+ ```bash
74
+ # リポジトリに移動
75
+ cd /path/to/cc-discussion
76
+
77
+ # 起動(初回は自動的にセットアップされます)
78
+ ./start.sh
79
+ ```
80
+
81
+ ### 起動オプション
82
+
83
+ ```bash
84
+ # 通常起動(プロダクションモード)
85
+ ./start.sh
86
+
87
+ # 開発モード(Viteホットリロード付き)
88
+ ./start.sh --dev
89
+
90
+ # カスタムポート指定
91
+ ./start.sh --port 9000
92
+
93
+ # リモートアクセス許可(セキュリティ注意)
94
+ ./start.sh --host 0.0.0.0
95
+ ```
96
+
97
+ 起動スクリプトは以下を自動的に行います:
98
+ 1. Python仮想環境の作成
99
+ 2. Python依存関係のインストール
100
+ 3. npm依存関係のインストール
101
+ 4. Reactフロントエンドのビルド
102
+ 5. サーバー起動(デフォルト: http://127.0.0.1:8888)
103
+ 6. ブラウザを自動で開く
104
+
105
+ ---
106
+
107
+ ## 使い方
108
+
109
+ ### 1. 会議室を作成
110
+
111
+ 1. 画面左上の「New Room」ボタンをクリック
112
+ 2. 会議設定を入力:
113
+ - **会議室名**: 識別しやすい名前
114
+ - **トピック**: ディスカッションのテーマ(詳細に書くほど良い結果に)
115
+ - **会議タイプ**: 9種類から選択(後述)
116
+ - **最大ターン数**: 会議の長さを制御(デフォルト: 20)
117
+ - **言語**: 日本語 or 英語
118
+ 3. 参加者を設定(2〜3人):
119
+ - **名前**: 表示名(例:Claude A, Claude B)
120
+ - **役割**: 専門性や視点(例:アーキテクト、コードレビュアー)
121
+ - **エージェントタイプ**: Claude または Codex
122
+ - **コンテキスト**: 過去のClaudeCode/Codexセッションを選択(オプション)
123
+ - **ファシリテーター**: チェックすると会議進行役として動作
124
+
125
+ ### 2. 会議タイプ
126
+
127
+ 会議の目的に応じて最適化されたプロンプトが自動適用されます:
128
+
129
+ | タイプ | 用途 | 議論のポイント |
130
+ | -------------------------- | -------------------------------------------------- | -------------------------------------------- |
131
+ | **進捗・状況確認** | 開発進捗の共有、スケジュール遅延・ブロッカーの把握 | 現在の進捗、予定との差異、ブロッカー特定 |
132
+ | **要件・仕様の認識合わせ** | 要件定義・仕様内容の確認、解釈差分の解消 | 仕様の解釈確認、曖昧点の明確化、エッジケース |
133
+ | **技術検討・設計判断** | アーキテクチャ・技術選定、実装方針の決定 | 選択肢比較、メリデメ、拡張性・保守性 |
134
+ | **課題・不具合対応** | 技術的課題・リスクの洗い出し、不具合の原因分析 | 再現手順、根本原因、対応策、優先度 |
135
+ | **レビュー** | 設計レビュー、実装レビュー、品質確認 | 品質評価、改善点、ベストプラクティス |
136
+ | **計画・タスク整理** | タスク分解、担当者・期限の明確化 | 粒度、依存関係、優先順位、リスク |
137
+ | **リリース・運用判断** | リリース可否判断、デプロイ手順確認 | 品質確認、ロールバック、監視項目 |
138
+ | **改善・振り返り** | 開発プロセスの振り返り、改善アクション決定 | Keep, Problem, Try |
139
+ | **その他** | カスタム説明を入力して自由に設定 | - |
140
+
141
+ ### 3. コンテキストの選択
142
+
143
+ 各参加者に過去のClaudeCode/Codex会話履歴を注入できます:
144
+
145
+ 1. 参加者フォームで「Select History」をクリック
146
+ 2. **ClaudeCode履歴**: `~/.claude/projects/`から読み込み
147
+ 3. **Codex履歴**: `~/.codex/`から読み込み
148
+ 4. プロジェクト → セッションの順に選択
149
+
150
+ 選択したセッションの会話内容が、そのエージェントのシステムプロンプトに注入されます。これにより、エージェントは過去のやり取りを「記憶」した状態で議論に参加できます。
151
+
152
+ ### 4. ディスカッションの実行
153
+
154
+ 1. 会議室を作成後、自動的に会議室ページに移動
155
+ 2. **Start**ボタンでディスカッション開始
156
+ 3. エージェントがラウンドロビン方式で順番に発言
157
+ - ファシリテーターがいる場合:オープニング → 参加者の議論 → クロージング
158
+ - いない場合:参加者のみで議論
159
+ 4. **Pause**で一時停止、**Stop**で終了
160
+
161
+ ### 5. 並列準備処理(Parallel Preparation)
162
+
163
+ Discussion Roomの特徴的な機能として、**並列準備処理**があります:
164
+
165
+ - 現在の発言者が話している間、次の発言者はバックグラウンドで準備
166
+ - 準備中にファイル読み込みやコード検索を実行
167
+ - 準備完了後、即座に発言を開始
168
+ - 待ち時間を大幅に短縮
169
+
170
+ ### 6. モデレーター介入
171
+
172
+ ディスカッション中に人間がモデレーターとして発言を挿入できます:
173
+
174
+ 1. 画面下部のテキストボックスにメッセージを入力
175
+ 2. Enter(またはSendボタン)で送信
176
+ 3. 次のエージェントの発言時にモデレーターメッセージが考慮されます
177
+
178
+ 用途例:
179
+ - 議論の方向性を修正
180
+ - 追加の情報や制約を提供
181
+ - 特定のトピックに焦点を当てるよう指示
182
+
183
+ ---
184
+
185
+ ## 技術スタック
186
+
187
+ ### バックエンド
188
+
189
+ | 技術 | 用途 |
190
+ | -------------------- | ------------------------- |
191
+ | **FastAPI** | 非同期REST API・WebSocket |
192
+ | **SQLAlchemy 2.0** | ORM(宣言的マッピング) |
193
+ | **SQLite** | データベース(設定不要) |
194
+ | **Claude Agent SDK** | Claudeエージェント制御 |
195
+ | **Codex SDK** | Codexエージェント制御 |
196
+ | **Pydantic** | リクエスト/レスポンス検証 |
197
+
198
+ ### フロントエンド
199
+
200
+ | 技術 | 用途 |
201
+ | ------------------- | ------------------------------------ |
202
+ | **React 19** | UIフレームワーク |
203
+ | **TypeScript** | 型安全性 |
204
+ | **Vite** | ビルドツール・開発サーバー |
205
+ | **Tailwind CSS v4** | ユーティリティファーストCSS |
206
+ | **Radix UI** | アクセシブルUIコンポーネント |
207
+ | **TanStack Query** | サーバー状態管理・データフェッチング |
208
+ | **React Router** | クライアントサイドルーティング |
209
+ | **Lucide React** | アイコン |
210
+
211
+ ---
212
+
213
+ ## アーキテクチャ
214
+
215
+ ### システム構成図
216
+
217
+ ```
218
+ ┌─────────────────────────────────────────────────────────────────┐
219
+ │ Frontend (React) │
220
+ ├─────────────────────────────────────────────────────────────────┤
221
+ │ RoomPage.tsx │ CreateRoomModal.tsx │ Slack-UI │
222
+ │ - メッセージ表示 │ - 会議室作成 │ - メッセージ │
223
+ │ - WebSocket接続 │ - 参加者設定 │ - サイドバー │
224
+ │ - コントロール │ - 履歴選択 │ - ステータス │
225
+ └────────────┬───────────┴───────────┬───────────┴────────────────┘
226
+ │ HTTP/REST │ WebSocket
227
+ ▼ ▼
228
+ ┌─────────────────────────────────────────────────────────────────┐
229
+ │ Backend (FastAPI) │
230
+ ├─────────────────────────────────────────────────────────────────┤
231
+ │ main.py │ rooms.py │ history.py │
232
+ │ - アプリ初期化 │ - ルームCRUD │ - 履歴API │
233
+ │ - 静的ファイル配信 │ - 制御API │ - プロジェクト │
234
+ │ - ライフサイクル │ - モデレーター │ - セッション │
235
+ ├─────────────────────────────────────────────────────────────────┤
236
+ │ websocket.py │
237
+ │ - WebSocket接続管理 - リアルタイム配信 - ルーム別ブロード │
238
+ └────────────────────────────┬────────────────────────────────────┘
239
+
240
+
241
+ ┌─────────────────────────────────────────────────────────────────┐
242
+ │ Services (オーケストレーション) │
243
+ ├─────────────────────────────────────────────────────────────────┤
244
+ │ parallel_orchestrator.py │ discussion_orchestrator.py │
245
+ │ - 並列準備処理 │ - 逐次処理(フォールバック)│
246
+ │ - バックグラウンド準備 │ │
247
+ │ - イベントキュー │ │
248
+ ├─────────────────────────────────────────────────────────────────┤
249
+ │ participant_agent.py │ codex_agent.py │
250
+ │ - Claude Agent SDK │ - Codex SDK │
251
+ │ - サブプロセス実行 │ - サブプロセス実行 │
252
+ ├─────────────────────────────────────────────────────────────────┤
253
+ │ history_reader.py │ codex_history_reader.py │
254
+ │ - ClaudeCode履歴読み込み │ - Codex履歴読み込み │
255
+ │ - JSONL解析 │ - JSONL解析 │
256
+ ├─────────────────────────────────────────────────────────────────┤
257
+ │ meeting_prompts.py │
258
+ │ - 会議タイプ別プロンプト - ファシリテータープロンプト │
259
+ └─────────────────────────────────────────────────────────────────┘
260
+
261
+
262
+ ┌─────────────────────────────────────────────────────────────────┐
263
+ │ Database (SQLite) │
264
+ ├─────────────────────────────────────────────────────────────────┤
265
+ │ DiscussionRoom │ RoomParticipant │ DiscussionMessage│
266
+ │ - name, topic │ - name, role │ - role, content │
267
+ │ - status │ - context_* │ - turn_number │
268
+ │ - meeting_type │ - is_facilitator │ - created_at │
269
+ │ - max_turns │ - agent_type │ │
270
+ └─────────────────────────────────────────────────────────────────┘
271
+ ```
272
+
273
+ ### ディスカッションフロー
274
+
275
+ ```
276
+ 1. ルーム作成
277
+ └─> 参加者登録 → コンテキスト読み込み → DB保存
278
+
279
+ 2. ディスカッション開始 (POST /api/rooms/{id}/start)
280
+ └─> Orchestrator初期化 → 参加者エージェント生成
281
+
282
+ 3. ターン実行 (並列準備処理)
283
+ ┌─────────────────────────────────────────────────────┐
284
+ │ [発言者A] Speaking ──────────────────────────────► │
285
+ │ [発言者B] ──── Preparing (background) ─────────► │
286
+ │ [発言者C] ──────────── Preparing (background) ──► │
287
+ └─────────────────────────────────────────────────────┘
288
+
289
+ 各ターン:
290
+ a. 現在の発言者がレスポンス生成(ストリーミング)
291
+ b. 次の2名がバックグラウンドで準備
292
+ c. WebSocket経由でリアルタイム配信
293
+ d. DB保存 → 次の発言者へ
294
+
295
+ 4. 完了/一時停止
296
+ └─> ステータス更新 → クリーンアップ
297
+ ```
298
+
299
+ ### データベースモデル
300
+
301
+ ```
302
+ DiscussionRoom (会議室)
303
+ ├── id: Integer (PK)
304
+ ├── name: String(200)
305
+ ├── topic: Text (nullable)
306
+ ├── status: Enum(waiting/active/paused/completed)
307
+ ├── meeting_type: Enum(9種類)
308
+ ├── custom_meeting_description: Text (nullable)
309
+ ├── language: String(10) = "ja"
310
+ ├── max_turns: Integer = 20
311
+ ├── current_turn: Integer = 0
312
+ ├── created_at: DateTime
313
+ └── updated_at: DateTime
314
+
315
+ RoomParticipant (参加者)
316
+ ├── id: Integer (PK)
317
+ ├── room_id: Integer (FK → DiscussionRoom)
318
+ ├── name: String(50)
319
+ ├── role: String(100) (nullable)
320
+ ├── color: String(7) = "#6366f1"
321
+ ├── context_project_dir: String(500) (nullable)
322
+ ├── context_session_id: String(100) (nullable)
323
+ ├── context_summary: Text (nullable)
324
+ ├── is_speaking: Boolean = False
325
+ ├── message_count: Integer = 0
326
+ ├── is_facilitator: Boolean = False
327
+ └── agent_type: Enum(claude/codex) = claude
328
+
329
+ DiscussionMessage (メッセージ)
330
+ ├── id: Integer (PK)
331
+ ├── room_id: Integer (FK → DiscussionRoom)
332
+ ├── participant_id: Integer (FK → RoomParticipant, nullable)
333
+ ├── role: String(20) = system/participant/moderator
334
+ ├── content: Text
335
+ ├── extra_data: JSON (nullable)
336
+ ├── turn_number: Integer
337
+ └── created_at: DateTime
338
+ ```
339
+
340
+ ---
341
+
342
+ ## プロジェクト構造
343
+
344
+ ```
345
+ cc-discussion/
346
+ ├── backend/ # バックエンド(Python/FastAPI)
347
+ │ ├── main.py # FastAPIエントリポイント
348
+ │ ├── websocket.py # WebSocketハンドラ
349
+ │ ├── models/
350
+ │ │ └── database.py # SQLAlchemyモデル・Enum定義
351
+ │ ├── routers/
352
+ │ │ ├── history.py # 履歴閲覧API
353
+ │ │ └── rooms.py # ルームCRUD API
354
+ │ └── services/
355
+ │ ├── parallel_orchestrator.py # 並列準備オーケストレーター
356
+ │ ├── discussion_orchestrator.py# 逐次オーケストレーター
357
+ │ ├── participant_agent.py # Claudeエージェント
358
+ │ ├── codex_agent.py # Codexエージェント
359
+ │ ├── history_reader.py # ClaudeCode履歴パーサー
360
+ │ ├── codex_history_reader.py # Codex履歴パーサー
361
+ │ └── meeting_prompts.py # 会議タイプ別プロンプト
362
+
363
+ ├── frontend/ # フロントエンド(React/TypeScript)
364
+ │ ├── src/
365
+ │ │ ├── App.tsx # メインアプリ・ルーティング
366
+ │ │ ├── main.tsx # エントリポイント
367
+ │ │ ├── pages/
368
+ │ │ │ └── RoomPage.tsx # ディスカッション表示
369
+ │ │ ├── components/
370
+ │ │ │ ├── CreateRoomModal.tsx # ルーム作成モーダル
371
+ │ │ │ ├── ParticipantAvatar.tsx # 参加者アバター
372
+ │ │ │ ├── ErrorBoundary.tsx # エラーハンドリング
373
+ │ │ │ ├── slack-ui/ # Slack風UIコンポーネント
374
+ │ │ │ │ ├── ChannelSidebar.tsx
375
+ │ │ │ │ ├── MessageList.tsx
376
+ │ │ │ │ ├── MessageGroup.tsx
377
+ │ │ │ │ ├── MessageInput.tsx
378
+ │ │ │ │ ├── RoomHeader.tsx
379
+ │ │ │ │ └── StatusIndicator.tsx
380
+ │ │ │ └── ui/ # 汎用UIコンポーネント(shadcn/ui)
381
+ │ │ ├── hooks/
382
+ │ │ │ └── useRoomWebSocket.ts # WebSocket状態管理
383
+ │ │ └── lib/
384
+ │ │ └── api.ts # APIクライアント
385
+ │ ├── index.html
386
+ │ ├── vite.config.ts
387
+ │ ├── tailwind.config.ts
388
+ │ └── package.json
389
+
390
+ ├── start.sh # 起動スクリプト(Unix)
391
+ ├── start_ui.py # Pythonランチャー
392
+ ├── requirements.txt # Python依存関係
393
+ ├── pyproject.toml # Python設定
394
+ ├── .env.example # 環境変数テンプレート
395
+ ├── .gitignore # Git除外設定
396
+ └── discussion.db # SQLiteデータベース(自動生成)
397
+ ```
398
+
399
+ ---
400
+
401
+ ## API リファレンス
402
+
403
+ ### 履歴閲覧API
404
+
405
+ | メソッド | エンドポイント | 説明 |
406
+ | -------- | ------------------------------------------- | -------------------------- |
407
+ | GET | `/api/history/projects` | ClaudeCodeプロジェクト一覧 |
408
+ | GET | `/api/history/projects/{id}/sessions` | セッション一覧 |
409
+ | GET | `/api/history/sessions/{id}` | セッション詳細 |
410
+ | GET | `/api/history/codex/projects` | Codexプロジェクト一覧 |
411
+ | GET | `/api/history/codex/projects/{id}/sessions` | Codexセッション一覧 |
412
+
413
+ ### ルーム管理API
414
+
415
+ | メソッド | エンドポイント | 説明 |
416
+ | -------- | -------------------------- | ------------------------------------ |
417
+ | POST | `/api/rooms` | ルーム作成 |
418
+ | GET | `/api/rooms` | ルーム一覧 |
419
+ | GET | `/api/rooms/{id}` | ルーム詳細(参加者・メッセージ含む) |
420
+ | DELETE | `/api/rooms/{id}` | ルーム削除 |
421
+ | POST | `/api/rooms/{id}/start` | ディスカッション開始 |
422
+ | POST | `/api/rooms/{id}/pause` | 一時停止 |
423
+ | POST | `/api/rooms/{id}/moderate` | モデレーター発言 |
424
+
425
+ ### WebSocket
426
+
427
+ | エンドポイント | 説明 |
428
+ | ------------------- | ---------------------------------------------------- |
429
+ | `WS /ws/rooms/{id}` | リアルタイム更新(メッセージ・ステータス・準備状況) |
430
+
431
+ **WebSocketイベントタイプ:**
432
+ - `message`: 新規メッセージ
433
+ - `status_change`: ルームステータス変更
434
+ - `participant_speaking`: 発言者変更
435
+ - `preparation_activity`: 準備中のアクティビティ
436
+ - `preparation_complete`: 準備完了
437
+
438
+ ---
439
+
440
+ ## 開発
441
+
442
+ ### バックエンドのみ起動
443
+
444
+ ```bash
445
+ source venv/bin/activate
446
+ python -m uvicorn backend.main:app --reload --port 8888
447
+ ```
448
+
449
+ ### フロントエンドのみ起動
450
+
451
+ ```bash
452
+ cd frontend
453
+ npm run dev
454
+ ```
455
+
456
+ ### ビルド
457
+
458
+ ```bash
459
+ cd frontend
460
+ npm run build
461
+ ```
462
+
463
+ ### コード品質
464
+
465
+ ```bash
466
+ # Python linting
467
+ source venv/bin/activate
468
+ ruff check backend/
469
+ mypy backend/
470
+
471
+ # TypeScript type check
472
+ cd frontend
473
+ npx tsc --noEmit
474
+ ```
475
+
476
+ ---
477
+
478
+ ## トラブルシューティング
479
+
480
+ ### Claude CLIが見つからない
481
+
482
+ ```bash
483
+ # Claude CLIをインストール
484
+ # https://claude.ai/download からダウンロード
485
+
486
+ # ログイン
487
+ claude login
488
+ ```
489
+
490
+ ### ポートが使用中
491
+
492
+ ```bash
493
+ # 別のポートを指定
494
+ ./start.sh --port 9000
495
+ ```
496
+
497
+ ### 仮想環境の問題
498
+
499
+ ```bash
500
+ # 仮想環境を削除して再作成
501
+ rm -rf venv
502
+ ./start.sh
503
+ ```
504
+
505
+ ### データベースのリセット
506
+
507
+ ```bash
508
+ # データベースファイルを削除(全データ消失)
509
+ rm discussion.db
510
+ ./start.sh
511
+ ```
512
+
513
+ ### Node.jsバージョンの問題
514
+
515
+ Vite 7.x は Node.js 20.19+ または 22.12+ を要求します。
516
+
517
+ ```bash
518
+ # nvm使用時
519
+ nvm install 22
520
+ nvm use 22
521
+ ```
522
+
523
+ ---
524
+
525
+ ## ライセンス
526
+
527
+ MIT License