Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
43 changes: 43 additions & 0 deletions dev-reports/issue/649/issue-review/hypothesis-verification.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,43 @@
# Issue #649 仮説検証レポート

## 仮説検証結果

| # | 前提条件 | ファイルパス | 判定 | 詳細 |
|---|---------|-----------|------|------|
| 1 | 現在の CLI セッションはすべて worktree 単位で紐づいている | `src/lib/session/cli-session.ts`, `src/lib/cli-tools/base.ts` | **Confirmed** | `resolveSessionContext()` で worktreeId を使用。セッション名フォーマット: `mcbd-{cli_tool_id}-{worktree_id}` |
| 2 | repositoryApi.list() が Issue #644 で追加済み | `src/app/api/repositories/route.ts`, `src/lib/db/db-repository.ts` | **Confirmed** | GET `/api/repositories` エンドポイントで `getAllRepositoriesWithWorktreeCount()` を実装済み |
| 3 | MessageInput コンポーネントが流用候補として存在 | `src/components/worktree/MessageInput.tsx` | **Confirmed** | Props: `worktreeId`, `cliToolId`, `isSessionRunning` を備える。ただし worktreeId 必須設計 |
| 4 | HomeSessionSummary が既存 Home コンポーネントとして存在 | `src/components/home/HomeSessionSummary.tsx` | **Confirmed** | Running/Waiting セッション数の集計表示。`src/app/page.tsx` で既に使用中 |
| 5 | CLIToolManager が CLI ツール管理として存在 | `src/lib/cli-tools/manager.ts` | **Confirmed** | シングルトン実装。`getTool()`, `getAllTools()`, `getInstalledTools()` メソッド提供 |
| 6 | src/app/page.tsx がHome画面のエントリポイント | `src/app/page.tsx` | **Confirmed** | HomeSessionSummary を包含し、ショートカットカード配置 |
| 7 | Gemini が CLI ツールとしてサポート | `src/lib/cli-tools/gemini.ts` | **Confirmed** | GeminiTool クラス実装済み。CLI_TOOL_IDS: `['claude', 'codex', 'gemini', 'vibe-local', 'opencode', 'copilot']` |

## 主な知見

### 1. 現在のセッションアーキテクチャ
- すべての CLI セッションは **worktree ベース**
- tmux セッション名の命名規則: `mcbd-{tool_id}-{worktree_id}`
- Session Transport 抽象化により、transport 層の切り替え可能

### 2. 汎用 CLI セッション実装のための現状
- CLIToolManager で複数ツール (Claude, Codex, Gemini, Vibe Local, OpenCode, Copilot) をサポート
- **Worktree に紐づかないセッション** の実装には新規インターフェース設計が必要

### 3. コンポーネント再利用の可能性
- **MessageInput**: worktreeId 依存設計のため、"汎用セッション"向けに Props 拡張が必要
- 現状: `worktreeId` 必須
- 提案: `sessionId` の追加フィールド or worktreeId をオプション化
- **HomeSessionSummary**: 実装内容がシンプルで再利用性が高い (worktree 集計のみ)

### 4. Architecture への影響
- 現在の CLI セッション管理は完全に worktree に紐づいており、汎用セッション実装には以下が必要:
1. **新しいセッション ID スキーム** (worktree ID に依存しない識別子)
2. **MessageInput の Props 拡張** (worktreeId と汎用セッションID の区分)
3. **ホーム画面のセッション開始フロー** (既存 worktree-based flow との分離)
4. **レスポンスポーリング機構** の汎用化 (現在は worktreeId を使用)

## Stage 1 レビューへの申し送り事項

- すべての前提条件が Confirmed だったため Rejected は0件
- ただし MessageInput の `worktreeId` 依存性は実装上の課題として申し送り(現状必須パラメータ)
- グローバルセッションのセッション名 `mcbd-global-home` はアーキテクチャ上実現可能だが、既存のポーリング・Auto-Yes 等が worktreeId を使うため API 設計の再考が必要
1 change: 1 addition & 0 deletions dev-reports/issue/649/issue-review/original-issue.json
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
{"body":"## 概要\n\nHome 画面にアシスタントチャット UI を追加し、特定の worktree に紐づかない汎用的な CLI セッション(Claude Code / Codex / Gemini)を利用可能にする。登録済みリポジトリの中から作業ディレクトリを選択し、リポジトリ横断の開発指示を行える。\n\nデフォルトで CommandMate CLI の使い方と登録済みリポジトリの情報をコンテキストとして付与する。\n\n## 背景・課題\n\n- 現在の CLI セッションはすべて worktree 単位で紐づいており、複数 worktree にまたがる操作(一括指示・状況確認・リポジトリ横断の質問)を行う場所がない\n- commandmatedev CLI の使い方を対話的に聞ける窓口がなく、ドキュメントを別途参照する必要がある\n- リポジトリ全体の俯瞰的な開発相談(設計判断・Issue 整理等)を行うための汎用的なセッションが存在しない\n\n## 提案する解決策\n\n### 1. グローバルセッション概念の追加\n\nworktree に紐づかない「グローバルセッション」を新設する:\n- tmux セッション名: `mcbd-global-home` (固定)\n- 作業ディレクトリ: 登録リポジトリの一覧から選択(ドロップダウン)\n- CLI ツール: Claude Code / Codex / Gemini から選択\n\n### 2. Home 画面への埋め込み\n\n現在の Home 画面(セッションサマリー + ショートカットカード)の上部にチャット UI を配置:\n- 既存の `MessageInput` + ターミナル出力表示を流用・簡略化\n- リポジトリ選択ドロップダウン + CLI ツール選択\n- チャット履歴(DB 保存 or セッション内のみ)\n\n### 3. デフォルトコンテキスト\n\nセッション開始時に以下を CLAUDE.md / システムプロンプト相当として自動付与:\n- CommandMate CLI コマンド一覧・使い方\n- 登録済みリポジトリ一覧(名前・パス・別名・worktree 数)\n- 現在アクティブな worktree セッションのステータス\n\n### 4. API 追加\n\n- `POST /api/assistant/terminal` — グローバルセッションへのメッセージ送信\n- `GET /api/assistant/current-output` — グローバルセッションの出力取得\n- `POST /api/assistant/start` — グローバルセッション開始(ディレクトリ・CLI ツール指定)\n\n## 実装タスク\n\n- [ ] グローバルセッション管理ロジック追加(tmux セッション作成・管理)\n- [ ] `POST/GET /api/assistant/*` API ルート追加\n- [ ] Home 画面にアシスタントチャット UI コンポーネント追加\n- [ ] リポジトリ選択ドロップダウン実装(登録リポジトリ一覧取得)\n- [ ] CLI ツール選択 UI 実装(Claude Code / Codex / Gemini)\n- [ ] デフォルトコンテキスト生成ロジック(CLI 使い方 + リポジトリ情報)\n- [ ] ユニットテスト・結合テスト追加\n\n## 受入条件\n\n- [ ] Home 画面でアシスタントチャットが利用できる\n- [ ] 登録済みリポジトリの一覧から作業ディレクトリを選択できる\n- [ ] Claude Code / Codex / Gemini のいずれかでセッションを開始できる\n- [ ] セッション開始時に CLI 使い方・リポジトリ情報がコンテキストとして付与される\n- [ ] メッセージの送受信が正常に動作する\n- [ ] 既存の worktree セッション機能に影響がない\n- [ ] ダークモード対応\n- [ ] `npm run lint` / `npx tsc --noEmit` / `npm run test:unit` がパスする\n\n## 影響範囲\n\n### 変更対象ファイル(想定)\n\n| ファイル | 変更内容 |\n|---------|---------|\n| `src/app/page.tsx` | アシスタントチャット UI の組み込み |\n| `src/app/api/assistant/` (新規) | グローバルセッション用 API ルート |\n| `src/lib/session/` | グローバルセッション管理ロジック追加 |\n| `src/lib/tmux/tmux.ts` | グローバルセッション用の tmux 操作対応 |\n| `src/components/home/` (新規) | アシスタントチャットコンポーネント |\n| `src/lib/db/` | グローバルセッションのチャット履歴(任意) |\n\n### 関連コンポーネント\n\n- `MessageInput` — メッセージ入力 UI(流用候補)\n- `CLIToolManager` — CLI ツール管理(セッション開始に利用)\n- `HomeSessionSummary` — 既存 Home コンポーネント(レイアウト調整)\n- `repositoryApi.list()` — リポジトリ一覧取得(Issue #644 で追加済み)","title":"アシスタントチャット機能"}
8 changes: 8 additions & 0 deletions dev-reports/issue/649/issue-review/stage1-review-context.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
{
"issue_number": "649",
"focus_area": "通常",
"iteration": 1,
"stage": 1,
"stage_name": "通常レビュー(1回目)",
"hypothesis_verification_path": "dev-reports/issue/649/issue-review/hypothesis-verification.md"
}
Loading
Loading