---
name: copilot-chat-converter
description: |
  GitHub Copilot ChatのエクスポートJSON形式をMarkdownに変換するスキル。
  "チャット変換して", "chat.jsonを変換", "Copilot Chatをマークダウンに",
  "JSONをMarkdownに", "/copilot-chat-converter" の場合に使用。
allowed-tools: Read, Bash
---

# Copilot Chat Converter

VS Code の「Chat: Export Chat...」でエクスポートされた GitHub Copilot Chat の JSON ファイルを、人間が読みやすい Markdown 形式に変換します。

## When to Use

以下のいずれかに該当する場合にこのスキルを使用する:

- ユーザーが「チャット変換して」「chat.json を変換」「Copilot Chat をマークダウンに」「JSON を Markdown に」と言った場合
- `.json` ファイルのパスと変換の指示が与えられた場合
- `/copilot-chat-converter` スラッシュコマンドが呼ばれた場合

## Commands

コマンドは必ず `uv run copilot-chat-converter` 形式で実行する（`uv` 環境のため）。

### 標準出力（1ファイル）

```bash
uv run copilot-chat-converter path/to/chat.json
```

標準出力に Markdown を出力する。`-o` オプションを省略した場合、1ファイルのみ標準出力可能。

### ファイル出力

```bash
uv run copilot-chat-converter path/to/chat.json -o output.md
```

指定したファイルに Markdown を書き出す。

### ディレクトリ出力（複数ファイル）

```bash
uv run copilot-chat-converter chat1.json chat2.json -o ./output/
```

複数ファイルを変換する場合は `-o` でディレクトリを指定する（省略するとエラー）。各 `.json` ファイルが同名の `.md` ファイルとして出力される。

### quiet モード

```bash
uv run copilot-chat-converter chat.json -o output.md --quiet
```

`--quiet` / `-q` フラグで進捗メッセージを抑制する。スクリプトやパイプラインで使用する場合に有効。

### オプション一覧

| オプション | 短縮形 | 説明 | デフォルト |
|-----------|--------|------|----------|
| `--output` | `-o` | 出力先（ファイルまたはディレクトリ） | なし（標準出力） |
| `--quiet` | `-q` | 進捗メッセージを非表示 | False |
| `--help` | `-h` | ヘルプを表示 | - |

## Output Interpretation

### 成功時の出力例

```
✅ 変換完了: chat.json → output.md (42 ターン)
```

```
✅ 変換完了: 3ファイル処理 (うち 0 件失敗)
  - chat1.json → output/chat1.md
  - chat2.json → output/chat2.md
  - chat3.json → output/chat3.md
```

読み取るべき情報:
- 変換されたターン数（会話の往復数）
- 出力先ファイルパス
- 複数ファイルの場合は成功・失敗件数

### エラー時の出力例

```
❌ chat.json: JSON パースエラー: Expecting value: line 1 column 1 (char 0)
```

```
❌ chat.json: ファイルが見つかりません: chat.json
```

```
❌ 複数ファイルを変換する場合は -o でディレクトリを指定してください
```

読み取るべき情報:
- エラーの種類（ファイル不存在、JSON 不正、構造不正）
- エラーが発生したファイル名
- 終了コード（エラー時は 1）

### 生成される Markdown の構造

```markdown
# Copilot Chat Session

## Metadata
- **Turns**: 5
- **Model**: gpt-4o
- **Requester**: username
- **Responder**: GitHub Copilot

---

## Turn 1

### User

ユーザーのメッセージ

### Copilot

> Model: gpt-4o | Elapsed: 1.2s

Copilot の回答テキスト

#### Tool Calls (Turn 1)

**read_file**
```json
{"path": "src/main.py"}
```

> Exit: 0 | Duration: 45ms
> ```
> def main():
>     pass
> ```
```

## Response to User

### 成功時の報告テンプレート

```
変換が完了しました。

- 出力先: [ファイルパス]
- ターン数: [N] ターン
- モデル: [model-id]
```

複数ファイルの場合:

```
[N] ファイルの変換が完了しました。

- 出力ディレクトリ: [ディレクトリパス]
- 成功: [N] 件 / 失敗: [N] 件
```

### エラー時の報告テンプレート

```
変換中にエラーが発生しました。

- ファイル: [ファイル名]
- エラー: [エラーメッセージ]

[対処方法の提案]
```

## Important Notes

### 入力ファイル形式

- VS Code の「Chat: Export Chat...」コマンドでエクスポートした JSON のみ対応
- 他の AI チャットツールのエクスポート形式は非対応
- JSON ファイルの拡張子は `.json` であること（`.txt` 等は動作するが非推奨）

### 複数ファイル処理

- 複数ファイルを指定する場合は `-o` でディレクトリパスを指定すること
- ディレクトリが存在しない場合は自動作成される
- 入力ファイルの拡張子 `.json` が `.md` に変換されて出力される
  - 例: `chat-2026-01-15.json` → `[output_dir]/chat-2026-01-15.md`
- 1件のエラーが発生しても他のファイルの変換は継続する（終了コードは 1）

### 標準出力の注意点

- 標準出力モード（`-o` なし）では進捗メッセージは自動的に抑制される
- 出力を別コマンドにパイプする場合は標準出力モードを使用する:
  ```bash
  uv run copilot-chat-converter chat.json | pbcopy
  ```
- 標準出力モードは1ファイルのみ対応。複数ファイルには `-o ディレクトリ` が必要

## Example Workflow

### 典型的なシナリオ 1: 単一チャットの変換

ユーザーが「この chat.json を変換して」と言ったとき:

```bash
# ファイルの存在を確認
uv run copilot-chat-converter /path/to/chat.json -o /path/to/chat.md
```

### 典型的なシナリオ 2: 複数チャットをまとめて変換

ユーザーが「exports/ フォルダの JSON を全部変換して」と言ったとき:

```bash
# ディレクトリ内の JSON を一括変換
uv run copilot-chat-converter exports/*.json -o docs/chats/
```

### 典型的なシナリオ 3: 内容を確認してから保存

ユーザーが「chat.json の内容を確認したい」と言ったとき:

```bash
# 標準出力で内容を確認
uv run copilot-chat-converter chat.json
```

内容を確認したうえでファイル保存が必要なら `-o` オプションを追加。

## Related

- **blog-scraper**: ブログ記事のスクレイピング
- **thumbnail-generator**: サムネイル生成
