# API設計書

## 概要

本ドキュメントは、OpenCode APIの設計書です。OpenCodeはAIアシスタントと対話するためのコード編集システムであり、セッション管理、プロジェクト管理、ファイル操作、MCPサーバー連携などの機能をREST APIとして提供します。

## 共通仕様

### ベースURL

```
http://localhost:{port}
```

ポートはOpenCodeサーバー起動時に動的に割り当てられます。

### 認証方式

現時点でAPIレベルの認証は実装されていません。ローカルホストからのアクセスを前提としています。

### 共通ヘッダー

| ヘッダー名 | 必須 | 説明 |
| --- | --- | --- |
| Content-Type | ○ | application/json |
| Accept | - | application/json |

### 共通クエリパラメータ

| パラメータ名 | 型 | 必須 | 説明 |
| --- | --- | --- | --- |
| directory | string | - | プロジェクトディレクトリを指定（多くのエンドポイントで使用） |

### 共通エラーレスポンス

| ステータスコード | 説明 |
| --- | --- |
| 400 | Bad Request - リクエストパラメータ不正 |
| 404 | Not Found - リソース未検出 |

**エラーレスポンス形式（400 Bad Request）**

```json
{
  "code": "BAD_REQUEST",
  "message": "エラーメッセージ"
}
```

**エラーレスポンス形式（404 Not Found）**

```json
{
  "code": "NOT_FOUND",
  "message": "エラーメッセージ"
}
```

## API一覧

| カテゴリ | エンドポイント | メソッド | 説明 |
| --- | --- | --- | --- |
| Global | /global/health | GET | ヘルスチェック |
| Global | /global/event | GET | グローバルイベント購読（SSE） |
| Global | /global/config | GET | グローバル設定取得 |
| Global | /global/config | PATCH | グローバル設定更新 |
| Global | /global/dispose | POST | 全インスタンス破棄 |
| Auth | /auth/{providerID} | PUT | 認証情報設定 |
| Auth | /auth/{providerID} | DELETE | 認証情報削除 |
| Project | /project | GET | プロジェクト一覧取得 |
| Project | /project/current | GET | 現在のプロジェクト取得 |
| Project | /project/{projectID} | PATCH | プロジェクト更新 |
| PTY | /pty | GET | PTYセッション一覧 |
| PTY | /pty | POST | PTYセッション作成 |
| PTY | /pty/{ptyID} | GET | PTYセッション取得 |
| PTY | /pty/{ptyID} | PUT | PTYセッション更新 |
| PTY | /pty/{ptyID} | DELETE | PTYセッション削除 |
| PTY | /pty/{ptyID}/connect | GET | PTYセッション接続（WebSocket） |
| Config | /config | GET | 設定取得 |
| Config | /config | PATCH | 設定更新 |
| Config | /config/providers | GET | プロバイダー一覧取得 |
| Tool | /experimental/tool/ids | GET | ツールID一覧取得 |
| Tool | /experimental/tool | GET | ツール一覧取得 |
| Worktree | /experimental/worktree | GET | Worktree一覧取得 |
| Worktree | /experimental/worktree | POST | Worktree作成 |
| Worktree | /experimental/worktree | DELETE | Worktree削除 |
| Worktree | /experimental/worktree/reset | POST | Worktreeリセット |
| Session | /session | GET | セッション一覧取得 |
| Session | /session | POST | セッション作成 |
| Session | /session/status | GET | セッションステータス取得 |
| Session | /session/{sessionID} | GET | セッション取得 |
| Session | /session/{sessionID} | DELETE | セッション削除 |
| Session | /session/{sessionID} | PATCH | セッション更新 |
| Session | /session/{sessionID}/children | GET | 子セッション取得 |
| Session | /session/{sessionID}/todo | GET | セッションToDo取得 |
| Session | /session/{sessionID}/init | POST | セッション初期化 |
| Session | /session/{sessionID}/fork | POST | セッションフォーク |
| Session | /session/{sessionID}/abort | POST | セッション中断 |
| Session | /session/{sessionID}/share | POST | セッション共有 |
| Session | /session/{sessionID}/share | DELETE | セッション共有解除 |
| Session | /session/{sessionID}/diff | GET | セッション差分取得 |
| Session | /session/{sessionID}/summarize | POST | セッション要約 |
| Session | /session/{sessionID}/message | GET | メッセージ一覧取得 |
| Session | /session/{sessionID}/message | POST | メッセージ送信 |
| Session | /session/{sessionID}/message/{messageID} | GET | メッセージ取得 |
| Session | /session/{sessionID}/prompt_async | POST | 非同期メッセージ送信 |
| Session | /session/{sessionID}/command | POST | コマンド送信 |
| Session | /session/{sessionID}/shell | POST | シェルコマンド実行 |
| Session | /session/{sessionID}/revert | POST | メッセージ取り消し |
| Session | /session/{sessionID}/unrevert | POST | 取り消し復元 |
| Part | /session/{sessionID}/message/{messageID}/part/{partID} | DELETE | パート削除 |
| Part | /session/{sessionID}/message/{messageID}/part/{partID} | PATCH | パート更新 |
| Permission | /permission | GET | 保留中の権限要求一覧 |
| Permission | /permission/{requestID}/reply | POST | 権限要求への応答 |
| Question | /question | GET | 保留中の質問一覧 |
| Question | /question/{requestID}/reply | POST | 質問への回答 |
| Question | /question/{requestID}/reject | POST | 質問の拒否 |
| Provider | /provider | GET | プロバイダー一覧取得 |
| Provider | /provider/auth | GET | プロバイダー認証方法取得 |
| Provider | /provider/{providerID}/oauth/authorize | POST | OAuth認可開始 |
| Provider | /provider/{providerID}/oauth/callback | POST | OAuthコールバック |
| Find | /find | GET | テキスト検索 |
| Find | /find/file | GET | ファイル検索 |
| Find | /find/symbol | GET | シンボル検索 |
| File | /file | GET | ファイル一覧取得 |
| File | /file/content | GET | ファイル内容取得 |
| File | /file/status | GET | ファイルステータス取得 |
| MCP | /mcp | GET | MCPステータス取得 |
| MCP | /mcp | POST | MCPサーバー追加 |
| MCP | /mcp/{name}/auth | POST | MCP OAuth開始 |
| MCP | /mcp/{name}/auth | DELETE | MCP OAuth削除 |
| MCP | /mcp/{name}/auth/callback | POST | MCP OAuthコールバック |
| MCP | /mcp/{name}/auth/authenticate | POST | MCP OAuth認証 |
| MCP | /mcp/{name}/connect | POST | MCPサーバー接続 |
| MCP | /mcp/{name}/disconnect | POST | MCPサーバー切断 |
| TUI | /tui/append-prompt | POST | TUIプロンプト追加 |
| TUI | /tui/submit-prompt | POST | TUIプロンプト送信 |
| TUI | /tui/clear-prompt | POST | TUIプロンプトクリア |
| TUI | /tui/open-help | POST | ヘルプダイアログ表示 |
| TUI | /tui/open-sessions | POST | セッションダイアログ表示 |
| TUI | /tui/open-themes | POST | テーマダイアログ表示 |
| TUI | /tui/open-models | POST | モデルダイアログ表示 |
| TUI | /tui/execute-command | POST | TUIコマンド実行 |
| TUI | /tui/show-toast | POST | トースト通知表示 |
| TUI | /tui/publish | POST | TUIイベント発行 |
| TUI | /tui/select-session | POST | セッション選択 |
| TUI | /tui/control/next | GET | 次のTUIリクエスト取得 |
| TUI | /tui/control/response | POST | TUIレスポンス送信 |
| Instance | /instance/dispose | POST | インスタンス破棄 |
| Path | /path | GET | パス情報取得 |
| VCS | /vcs | GET | VCS情報取得 |
| Command | /command | GET | コマンド一覧取得 |
| Log | /log | POST | ログ書き込み |
| Agent | /agent | GET | エージェント一覧取得 |
| Skill | /skill | GET | スキル一覧取得 |
| LSP | /lsp | GET | LSPステータス取得 |
| Formatter | /formatter | GET | フォーマッターステータス取得 |
| Event | /event | GET | イベント購読（SSE） |

---

## 各APIエンドポイント定義

### Global

#### 1. ヘルスチェック

OpenCodeサーバーのヘルス状態を取得します。

**基本情報**

| 項目 | 内容 |
| --- | --- |
| エンドポイント | `GET /global/health` |
| 認証 | 不要 |
| 権限 | なし |

**レスポンス（成功時）**

ステータスコード: `200 OK`

```json
{
  "healthy": true,
  "version": "1.0.0"
}
```

---

#### 2. グローバルイベント購読

サーバー送信イベント（SSE）でグローバルイベントを購読します。

**基本情報**

| 項目 | 内容 |
| --- | --- |
| エンドポイント | `GET /global/event` |
| 認証 | 不要 |
| 権限 | なし |

**レスポンス（成功時）**

ステータスコード: `200 OK`

Content-Type: `text/event-stream`

---

#### 3. グローバル設定取得

グローバル設定を取得します。

**基本情報**

| 項目 | 内容 |
| --- | --- |
| エンドポイント | `GET /global/config` |
| 認証 | 不要 |
| 権限 | なし |

**レスポンス（成功時）**

ステータスコード: `200 OK`

```json
{
  "provider": {},
  "model": {},
  "mcp": {},
  "theme": "catppuccin"
}
```

---

#### 4. グローバル設定更新

グローバル設定を更新します。

**基本情報**

| 項目 | 内容 |
| --- | --- |
| エンドポイント | `PATCH /global/config` |
| 認証 | 不要 |
| 権限 | なし |

**リクエストボディ**

```json
{
  "theme": "dracula"
}
```

**レスポンス（成功時）**

ステータスコード: `200 OK`

```json
{
  "provider": {},
  "model": {},
  "mcp": {},
  "theme": "dracula"
}
```

---

#### 5. 全インスタンス破棄

すべてのOpenCodeインスタンスをクリーンアップし、リソースを解放します。

**基本情報**

| 項目 | 内容 |
| --- | --- |
| エンドポイント | `POST /global/dispose` |
| 認証 | 不要 |
| 権限 | なし |

**レスポンス（成功時）**

ステータスコード: `200 OK`

```json
true
```

---

### Auth

#### 6. 認証情報設定

プロバイダーの認証情報を設定します。

**基本情報**

| 項目 | 内容 |
| --- | --- |
| エンドポイント | `PUT /auth/{providerID}` |
| 認証 | 不要 |
| 権限 | なし |

**パスパラメータ**

| パラメータ名 | 型 | 必須 | 説明 |
| --- | --- | --- | --- |
| providerID | string | ○ | プロバイダーID |

**リクエストボディ**

```json
{
  "type": "api_key",
  "api_key": "sk-..."
}
```

**レスポンス（成功時）**

ステータスコード: `200 OK`

```json
true
```

---

#### 7. 認証情報削除

プロバイダーの認証情報を削除します。

**基本情報**

| 項目 | 内容 |
| --- | --- |
| エンドポイント | `DELETE /auth/{providerID}` |
| 認証 | 不要 |
| 権限 | なし |

**パスパラメータ**

| パラメータ名 | 型 | 必須 | 説明 |
| --- | --- | --- | --- |
| providerID | string | ○ | プロバイダーID |

**レスポンス（成功時）**

ステータスコード: `200 OK`

```json
true
```

---

### Project

#### 8. プロジェクト一覧取得

OpenCodeで開かれたプロジェクトの一覧を取得します。

**基本情報**

| 項目 | 内容 |
| --- | --- |
| エンドポイント | `GET /project` |
| 認証 | 不要 |
| 権限 | なし |

**クエリパラメータ**

| パラメータ名 | 型 | 必須 | デフォルト | 説明 |
| --- | --- | --- | --- | --- |
| directory | string | - | - | ディレクトリでフィルタ |

**レスポンス（成功時）**

ステータスコード: `200 OK`

```json
[
  {
    "id": "proj_123",
    "worktree": "/path/to/project",
    "name": "my-project",
    "vcs": "git",
    "time": {
      "created": 1700000000000,
      "updated": 1700000000000
    },
    "sandboxes": []
  }
]
```

---

#### 9. 現在のプロジェクト取得

現在アクティブなプロジェクトを取得します。

**基本情報**

| 項目 | 内容 |
| --- | --- |
| エンドポイント | `GET /project/current` |
| 認証 | 不要 |
| 権限 | なし |

**クエリパラメータ**

| パラメータ名 | 型 | 必須 | デフォルト | 説明 |
| --- | --- | --- | --- | --- |
| directory | string | - | - | ディレクトリを指定 |

**レスポンス（成功時）**

ステータスコード: `200 OK`

```json
{
  "id": "proj_123",
  "worktree": "/path/to/project",
  "name": "my-project",
  "vcs": "git",
  "time": {
    "created": 1700000000000,
    "updated": 1700000000000
  },
  "sandboxes": []
}
```

---

#### 10. プロジェクト更新

プロジェクトのプロパティを更新します。

**基本情報**

| 項目 | 内容 |
| --- | --- |
| エンドポイント | `PATCH /project/{projectID}` |
| 認証 | 不要 |
| 権限 | なし |

**パスパラメータ**

| パラメータ名 | 型 | 必須 | 説明 |
| --- | --- | --- | --- |
| projectID | string | ○ | プロジェクトID |

**リクエストボディ**

```json
{
  "name": "新しいプロジェクト名",
  "icon": {
    "url": "https://example.com/icon.png",
    "color": "#ff0000"
  },
  "commands": {
    "start": "npm run dev"
  }
}
```

**レスポンス（成功時）**

ステータスコード: `200 OK`

```json
{
  "id": "proj_123",
  "worktree": "/path/to/project",
  "name": "新しいプロジェクト名",
  "vcs": "git",
  "time": {
    "created": 1700000000000,
    "updated": 1700000000001
  },
  "sandboxes": []
}
```

---

### Session

#### 11. セッション一覧取得

すべてのセッションの一覧を取得します（更新日時順）。

**基本情報**

| 項目 | 内容 |
| --- | --- |
| エンドポイント | `GET /session` |
| 認証 | 不要 |
| 権限 | なし |

**クエリパラメータ**

| パラメータ名 | 型 | 必須 | デフォルト | 説明 |
| --- | --- | --- | --- | --- |
| directory | string | - | - | プロジェクトディレクトリでフィルタ |
| roots | boolean | - | - | ルートセッションのみ取得 |
| start | number | - | - | この日時以降に更新されたセッション（ミリ秒） |
| search | string | - | - | タイトルでフィルタ（大文字小文字無視） |
| limit | number | - | - | 取得件数制限 |

**レスポンス（成功時）**

ステータスコード: `200 OK`

```json
[
  {
    "id": "ses_abc123",
    "title": "コード修正セッション",
    "projectID": "proj_123",
    "parentID": null,
    "share": null,
    "time": {
      "created": 1700000000000,
      "updated": 1700000000000
    }
  }
]
```

---

#### 12. セッション作成

新しいセッションを作成します。

**基本情報**

| 項目 | 内容 |
| --- | --- |
| エンドポイント | `POST /session` |
| 認証 | 不要 |
| 権限 | なし |

**リクエストボディ**

```json
{
  "parentID": "ses_parent123",
  "title": "新しいセッション"
}
```

| フィールド名 | 型 | 必須 | バリデーション | 説明 |
| --- | --- | --- | --- | --- |
| parentID | string | - | pattern: ^ses.* | 親セッションID |
| title | string | - | - | セッションタイトル |
| permission | object | - | - | 権限ルールセット |

**レスポンス（成功時）**

ステータスコード: `200 OK`

```json
{
  "id": "ses_new123",
  "title": "新しいセッション",
  "projectID": "proj_123",
  "parentID": "ses_parent123",
  "time": {
    "created": 1700000000000,
    "updated": 1700000000000
  }
}
```

---

#### 13. セッション取得

特定のセッションの詳細を取得します。

**基本情報**

| 項目 | 内容 |
| --- | --- |
| エンドポイント | `GET /session/{sessionID}` |
| 認証 | 不要 |
| 権限 | なし |

**パスパラメータ**

| パラメータ名 | 型 | 必須 | 説明 |
| --- | --- | --- | --- |
| sessionID | string | ○ | セッションID（pattern: ^ses.*） |

**レスポンス（成功時）**

ステータスコード: `200 OK`

```json
{
  "id": "ses_abc123",
  "title": "コード修正セッション",
  "projectID": "proj_123",
  "time": {
    "created": 1700000000000,
    "updated": 1700000000000
  }
}
```

---

#### 14. セッション削除

セッションとその関連データを完全に削除します。

**基本情報**

| 項目 | 内容 |
| --- | --- |
| エンドポイント | `DELETE /session/{sessionID}` |
| 認証 | 不要 |
| 権限 | なし |

**パスパラメータ**

| パラメータ名 | 型 | 必須 | 説明 |
| --- | --- | --- | --- |
| sessionID | string | ○ | セッションID（pattern: ^ses.*） |

**レスポンス（成功時）**

ステータスコード: `200 OK`

```json
true
```

---

#### 15. メッセージ送信

セッションにメッセージを送信し、AIレスポンスをストリーミングで受信します。

**基本情報**

| 項目 | 内容 |
| --- | --- |
| エンドポイント | `POST /session/{sessionID}/message` |
| 認証 | 不要 |
| 権限 | なし |

**パスパラメータ**

| パラメータ名 | 型 | 必須 | 説明 |
| --- | --- | --- | --- |
| sessionID | string | ○ | セッションID |

**リクエストボディ**

```json
{
  "parts": [
    {
      "type": "text",
      "text": "このコードを最適化してください"
    }
  ],
  "model": {
    "providerID": "anthropic",
    "modelID": "claude-3-opus"
  }
}
```

| フィールド名 | 型 | 必須 | 説明 |
| --- | --- | --- | --- |
| parts | array | ○ | メッセージパーツ（text, file, agent, subtask） |
| messageID | string | - | メッセージID（pattern: ^msg.*） |
| model | object | - | 使用するモデル（providerID, modelID） |
| agent | string | - | エージェント名 |
| noReply | boolean | - | AIからの応答を受け取らない |
| system | string | - | システムプロンプト |

**レスポンス（成功時）**

ステータスコード: `200 OK`

```json
{
  "info": {
    "id": "msg_resp123",
    "sessionID": "ses_abc123",
    "role": "assistant",
    "time": {
      "created": 1700000000000,
      "completed": 1700000000001
    }
  },
  "parts": [
    {
      "type": "text",
      "text": "以下のように最適化できます..."
    }
  ]
}
```

---

#### 16. セッション中断

アクティブなセッションを中断し、進行中のAI処理を停止します。

**基本情報**

| 項目 | 内容 |
| --- | --- |
| エンドポイント | `POST /session/{sessionID}/abort` |
| 認証 | 不要 |
| 権限 | なし |

**パスパラメータ**

| パラメータ名 | 型 | 必須 | 説明 |
| --- | --- | --- | --- |
| sessionID | string | ○ | セッションID |

**レスポンス（成功時）**

ステータスコード: `200 OK`

```json
true
```

---

### Provider

#### 17. プロバイダー一覧取得

利用可能なすべてのAIプロバイダーを取得します。

**基本情報**

| 項目 | 内容 |
| --- | --- |
| エンドポイント | `GET /provider` |
| 認証 | 不要 |
| 権限 | なし |

**レスポンス（成功時）**

ステータスコード: `200 OK`

```json
{
  "all": [
    {
      "id": "anthropic",
      "name": "Anthropic",
      "env": ["ANTHROPIC_API_KEY"],
      "models": {
        "claude-3-opus": {
          "id": "claude-3-opus",
          "name": "Claude 3 Opus",
          "release_date": "2024-03-04",
          "attachment": true,
          "reasoning": true,
          "temperature": true,
          "tool_call": true,
          "limit": {
            "context": 200000,
            "output": 4096
          },
          "options": {}
        }
      }
    }
  ],
  "default": {
    "chat": "anthropic/claude-3-opus"
  },
  "connected": ["anthropic"]
}
```

---

### File

#### 18. ファイル一覧取得

指定パスのファイルとディレクトリを一覧取得します。

**基本情報**

| 項目 | 内容 |
| --- | --- |
| エンドポイント | `GET /file` |
| 認証 | 不要 |
| 権限 | なし |

**クエリパラメータ**

| パラメータ名 | 型 | 必須 | デフォルト | 説明 |
| --- | --- | --- | --- | --- |
| path | string | ○ | - | ファイルパス |
| directory | string | - | - | プロジェクトディレクトリ |

**レスポンス（成功時）**

ステータスコード: `200 OK`

```json
[
  {
    "name": "src",
    "type": "directory"
  },
  {
    "name": "package.json",
    "type": "file"
  }
]
```

---

#### 19. ファイル内容取得

指定ファイルの内容を取得します。

**基本情報**

| 項目 | 内容 |
| --- | --- |
| エンドポイント | `GET /file/content` |
| 認証 | 不要 |
| 権限 | なし |

**クエリパラメータ**

| パラメータ名 | 型 | 必須 | デフォルト | 説明 |
| --- | --- | --- | --- | --- |
| path | string | ○ | - | ファイルパス |
| directory | string | - | - | プロジェクトディレクトリ |

**レスポンス（成功時）**

ステータスコード: `200 OK`

```json
{
  "content": "ファイルの内容...",
  "path": "/path/to/file.txt"
}
```

---

### Find

#### 20. テキスト検索

プロジェクト内でテキストパターンを検索します（ripgrep使用）。

**基本情報**

| 項目 | 内容 |
| --- | --- |
| エンドポイント | `GET /find` |
| 認証 | 不要 |
| 権限 | なし |

**クエリパラメータ**

| パラメータ名 | 型 | 必須 | デフォルト | 説明 |
| --- | --- | --- | --- | --- |
| pattern | string | ○ | - | 検索パターン |
| directory | string | - | - | プロジェクトディレクトリ |

**レスポンス（成功時）**

ステータスコード: `200 OK`

```json
[
  {
    "path": {
      "text": "src/index.ts"
    },
    "lines": {
      "text": "const result = search(pattern);"
    },
    "line_number": 42,
    "absolute_offset": 1024,
    "submatches": [
      {
        "match": {
          "text": "search"
        },
        "start": 16,
        "end": 22
      }
    ]
  }
]
```

---

#### 21. ファイル検索

ファイル名やパターンでファイルを検索します。

**基本情報**

| 項目 | 内容 |
| --- | --- |
| エンドポイント | `GET /find/file` |
| 認証 | 不要 |
| 権限 | なし |

**クエリパラメータ**

| パラメータ名 | 型 | 必須 | デフォルト | 説明 |
| --- | --- | --- | --- | --- |
| query | string | ○ | - | 検索クエリ |
| directory | string | - | - | プロジェクトディレクトリ |
| type | string | - | - | file または directory |
| limit | integer | - | - | 最大取得件数（1-200） |

**レスポンス（成功時）**

ステータスコード: `200 OK`

```json
[
  "src/index.ts",
  "src/utils/helper.ts"
]
```

---

### MCP

#### 22. MCPステータス取得

すべてのMCPサーバーのステータスを取得します。

**基本情報**

| 項目 | 内容 |
| --- | --- |
| エンドポイント | `GET /mcp` |
| 認証 | 不要 |
| 権限 | なし |

**レスポンス（成功時）**

ステータスコード: `200 OK`

```json
{
  "github": {
    "name": "github",
    "status": "connected",
    "tools": ["create_issue", "list_repos"]
  }
}
```

---

#### 23. MCPサーバー追加

新しいMCPサーバーを動的に追加します。

**基本情報**

| 項目 | 内容 |
| --- | --- |
| エンドポイント | `POST /mcp` |
| 認証 | 不要 |
| 権限 | なし |

**リクエストボディ**

```json
{
  "name": "my-mcp-server",
  "config": {
    "type": "local",
    "command": "npx",
    "args": ["-y", "@my/mcp-server"]
  }
}
```

**レスポンス（成功時）**

ステータスコード: `200 OK`

```json
{
  "my-mcp-server": {
    "name": "my-mcp-server",
    "status": "connected"
  }
}
```

---

### Event

#### 24. イベント購読

サーバー送信イベント（SSE）でイベントを購読します。

**基本情報**

| 項目 | 内容 |
| --- | --- |
| エンドポイント | `GET /event` |
| 認証 | 不要 |
| 権限 | なし |

**レスポンス（成功時）**

ステータスコード: `200 OK`

Content-Type: `text/event-stream`

イベント例:
- `installation.updated`
- `project.updated`
- `session.updated`
- `message.updated`

---

## 備考

### OpenAPI仕様

本APIはOpenAPI 3.1.1仕様に準拠しています。詳細な型定義は `/packages/sdk/openapi.json` を参照してください。

### 実験的API

`/experimental/` プレフィックスを持つエンドポイントは実験的な機能であり、将来のバージョンで変更または削除される可能性があります。

### SSEエンドポイント

`/global/event` および `/event` エンドポイントはServer-Sent Events (SSE)を使用してリアルタイムイベントを配信します。

### WebSocketエンドポイント

`/pty/{ptyID}/connect` はWebSocket接続を使用してPTYセッションとリアルタイム通信を行います。

### 非推奨API

以下のエンドポイントは非推奨です：
- `POST /session/{sessionID}/permissions/{permissionID}` - `POST /permission/{requestID}/reply` を使用してください
