📝 新增專案架構文檔

This commit is contained in:
Minidoracat 2025-06-10 09:01:53 +08:00
parent 47088ad1a9
commit 3ed676cf29
6 changed files with 1571 additions and 0 deletions

View File

@ -0,0 +1,54 @@
# MCP Feedback Enhanced 架構文檔
## 📋 文檔索引
本目錄包含 MCP Feedback Enhanced 專案的完整架構文檔,提供深入的技術分析和設計說明。
### 📚 文檔結構
| 文檔 | 描述 | 適用對象 |
|------|------|----------|
| [系統架構總覽](./system-overview.md) | 整體架構設計、核心概念和技術亮點 | 架構師、技術負責人 |
| [組件詳細說明](./component-details.md) | 各層級組件的詳細功能和實現 | 開發人員、維護人員 |
| [交互流程文檔](./interaction-flows.md) | AI 助手與 MCP 服務的完整交互流程 | 集成開發人員 |
| [API 參考文檔](./api-reference.md) | MCP 工具接口和 WebSocket API 規範 | API 使用者、前端開發 |
| [部署指南](./deployment-guide.md) | 環境配置、部署選項和故障排除 | 運維人員、系統管理員 |
### 🏗️ 架構概覽
MCP Feedback Enhanced 採用**單一活躍會話 + 持久化 Web UI**的創新架構,實現了 AI 助手與用戶之間的無縫交互體驗。
#### 核心特性
- **智能環境檢測**: 自動識別 Local/SSH Remote/WSL 環境
- **單一活躍會話**: 替代傳統多會話管理,提升性能和用戶體驗
- **持久化 Web UI**: 支援多次循環調用,無需重複開啟瀏覽器
- **實時雙向通信**: WebSocket 實現前後端狀態同步
- **智能資源管理**: 自動清理和會話生命週期管理
#### 技術棧
- **後端**: Python 3.11+, FastAPI, FastMCP
- **前端**: HTML5, JavaScript ES6+, WebSocket
- **通信**: WebSocket, HTTP REST API
- **部署**: uvicorn, 跨平台支援
### 🎯 快速導航
- **新手入門**: 從 [系統架構總覽](./system-overview.md) 開始
- **深入理解**: 閱讀 [組件詳細說明](./component-details.md)
- **集成開發**: 參考 [交互流程文檔](./interaction-flows.md) 和 [API 參考文檔](./api-reference.md)
- **部署運維**: 查看 [部署指南](./deployment-guide.md)
### 📊 架構圖表
所有文檔都包含豐富的 Mermaid 圖表,包括:
- 系統整體架構圖
- 組件關係圖
- 交互流程圖
- 會話生命週期圖
- 部署拓撲圖
---
**版本**: 2.3.0
**最後更新**: 2024年12月
**維護者**: Minidoracat

View File

@ -0,0 +1,341 @@
# API 參考文檔
## 📡 MCP 工具 API
### interactive_feedback
AI 助手與用戶進行交互式回饋的核心 MCP 工具。
#### 函數簽名
```python
async def interactive_feedback(
project_directory: str,
summary: str,
timeout: int = 600
) -> dict
```
#### 參數說明
| 參數 | 類型 | 必需 | 預設值 | 描述 |
|------|------|------|--------|------|
| `project_directory` | `str` | ✅ | - | 專案目錄路徑,用於上下文顯示 |
| `summary` | `str` | ✅ | - | AI 助手的工作摘要,向用戶說明當前狀態 |
| `timeout` | `int` | ❌ | `600` | 等待用戶回饋的超時時間(秒) |
#### 返回值
```python
{
"command_logs": "", # 命令執行日誌(保留字段)
"interactive_feedback": str, # 用戶回饋內容
"images": List[str] # 用戶上傳的圖片Base64 編碼)
}
```
#### 使用示例
```python
# 基本調用
result = await interactive_feedback(
project_directory="./my-web-app",
summary="我已完成登入功能的實現,包括表單驗證和錯誤處理。請檢查代碼品質。"
)
# 自定義超時
result = await interactive_feedback(
project_directory="./complex-project",
summary="重構完成,請詳細測試所有功能模組。",
timeout=1200 # 20分鐘
)
```
#### 錯誤處理
```python
try:
result = await interactive_feedback(...)
except TimeoutError:
print("用戶回饋超時")
except ValidationError as e:
print(f"參數驗證錯誤: {e}")
except EnvironmentError as e:
print(f"環境檢測錯誤: {e}")
```
## 🌐 Web API
### HTTP 端點
#### GET /
主頁重定向到回饋頁面。
**響應**: `302 Redirect``/feedback`
#### GET /feedback
回饋頁面主入口。
**響應**: `200 OK`
```html
<!DOCTYPE html>
<html>
<!-- 回饋頁面 HTML 內容 -->
</html>
```
#### GET /static/{path}
靜態資源服務CSS、JS、圖片等
**參數**:
- `path`: 靜態資源路徑
**響應**: `200 OK``404 Not Found`
### WebSocket API
#### 連接端點
```
ws://localhost:{port}/ws
```
#### 訊息格式
所有 WebSocket 訊息都使用 JSON 格式:
```json
{
"type": "message_type",
"data": { /* 訊息數據 */ },
"timestamp": "2024-12-XX 10:30:00"
}
```
### 📤 客戶端 → 服務器訊息
#### submit_feedback
提交用戶回饋。
```json
{
"type": "submit_feedback",
"data": {
"feedback": "這個功能很好,但建議增加輸入驗證。",
"images": [
"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAA..."
],
"settings": {
"language": "zh-TW",
"compress_images": true
}
}
}
```
**字段說明**:
- `feedback`: 用戶回饋文字內容
- `images`: 圖片數組Base64 編碼)
- `settings.language`: 界面語言
- `settings.compress_images`: 是否壓縮圖片
#### heartbeat
心跳檢測訊息。
```json
{
"type": "heartbeat",
"data": {
"timestamp": 1703123456789
}
}
```
#### language_switch
切換界面語言。
```json
{
"type": "language_switch",
"data": {
"language": "en"
}
}
```
### 📥 服務器 → 客戶端訊息
#### connection_established
WebSocket 連接建立確認。
```json
{
"type": "connection_established",
"data": {
"session_id": "550e8400-e29b-41d4-a716-446655440000",
"server_time": "2024-12-XX 10:30:00"
}
}
```
#### session_updated
會話更新通知AI 再次調用時)。
```json
{
"type": "session_updated",
"data": {
"session_id": "new-session-id",
"summary": "根據您的建議,我已修改了錯誤處理邏輯。",
"project_directory": "./my-project",
"timestamp": "2024-12-XX 10:35:00"
}
}
```
#### feedback_received
回饋接收確認。
```json
{
"type": "feedback_received",
"data": {
"session_id": "session-id",
"status": "success",
"message": "回饋已成功接收"
}
}
```
#### status_update
狀態更新通知。
```json
{
"type": "status_update",
"data": {
"status": "FEEDBACK_PROCESSING",
"message": "正在處理您的回饋...",
"progress": 50
}
}
```
#### error
錯誤訊息。
```json
{
"type": "error",
"data": {
"error_code": "VALIDATION_ERROR",
"message": "回饋內容不能為空",
"details": {
"field": "feedback",
"value": ""
}
}
}
```
## 🔧 內部 API
### WebUIManager API
#### create_session()
```python
async def create_session(
self,
summary: str,
project_directory: str
) -> WebFeedbackSession
```
創建新的回饋會話。
#### smart_open_browser()
```python
async def smart_open_browser(self, url: str) -> bool
```
智能開啟瀏覽器,避免重複開啟。
**返回值**:
- `True`: 檢測到活躍標籤頁,未開啟新視窗
- `False`: 開啟了新瀏覽器視窗
### WebFeedbackSession API
#### submit_feedback()
```python
async def submit_feedback(
self,
feedback: str,
images: List[str],
settings: dict
) -> None
```
提交用戶回饋到會話。
#### wait_for_feedback()
```python
async def wait_for_feedback(self, timeout: int = 600) -> dict
```
等待用戶回饋完成。
#### add_websocket()
```python
def add_websocket(self, websocket: WebSocket) -> None
```
添加 WebSocket 連接到會話。
## 📊 狀態碼和錯誤碼
### HTTP 狀態碼
- `200 OK`: 請求成功
- `302 Found`: 重定向
- `404 Not Found`: 資源不存在
- `500 Internal Server Error`: 服務器內部錯誤
### WebSocket 錯誤碼
```python
class ErrorCodes:
VALIDATION_ERROR = "VALIDATION_ERROR"
SESSION_NOT_FOUND = "SESSION_NOT_FOUND"
TIMEOUT_ERROR = "TIMEOUT_ERROR"
PROCESSING_ERROR = "PROCESSING_ERROR"
CONNECTION_ERROR = "CONNECTION_ERROR"
```
### 會話狀態
```python
class SessionStatus:
WAITING = "FEEDBACK_WAITING"
PROCESSING = "FEEDBACK_PROCESSING"
SUBMITTED = "FEEDBACK_SUBMITTED"
ERROR = "ERROR"
```
## 🔒 安全考慮
### 輸入驗證
- 回饋內容長度限制:最大 10,000 字符
- 圖片大小限制:單張最大 5MB
- 圖片數量限制:最多 10 張
- 支援的圖片格式PNG, JPEG, GIF, WebP
### 資源保護
- WebSocket 連接數限制:每會話最多 5 個連接
- 會話超時自動清理
- 內存使用監控和限制
### 跨域設置
```python
app.add_middleware(
CORSMiddleware,
allow_origins=["*"], # 開發環境,生產環境應限制
allow_credentials=True,
allow_methods=["*"],
allow_headers=["*"],
)
```
---
**下一步**: 查看 [部署指南](./deployment-guide.md) 了解部署配置和運維指南

View File

@ -0,0 +1,285 @@
# 組件詳細說明
## 🏗️ 四層架構組件
MCP Feedback Enhanced 採用清晰的四層架構設計,每層負責特定的功能領域。
### 組件關係圖
```mermaid
graph TB
subgraph "第一層MCP 服務層"
SERVER[server.py<br/>MCP 服務器]
TOOL[interactive_feedback<br/>核心工具]
I18N[i18n.py<br/>國際化支援]
end
subgraph "第二層Web UI 管理層"
MANAGER[WebUIManager<br/>單例管理器]
SESSION[WebFeedbackSession<br/>會話模型]
RESULT[FeedbackResult<br/>結果模型]
end
subgraph "第三層Web 服務層"
MAIN[main.py<br/>FastAPI 應用]
ROUTES[main_routes.py<br/>路由處理]
WS[WebSocket<br/>實時通信]
end
subgraph "第四層:前端交互層"
HTML[feedback.html<br/>主頁面]
JS[app.js<br/>交互邏輯]
CSS[樣式文件]
end
subgraph "工具層"
BROWSER[browser.py<br/>瀏覽器控制]
NETWORK[network.py<br/>網路工具]
PORT[port_manager.py<br/>埠管理]
CLEANUP[session_cleanup_manager.py<br/>清理管理]
COMPRESS[compression_*.py<br/>壓縮工具]
end
SERVER --> MANAGER
TOOL --> SESSION
MANAGER --> MAIN
SESSION --> ROUTES
ROUTES --> HTML
HTML --> JS
BROWSER --> MANAGER
NETWORK --> MAIN
PORT --> MAIN
CLEANUP --> SESSION
COMPRESS --> ROUTES
```
## 🔧 第一層MCP 服務層
### server.py - MCP 服務器核心
```python
# 核心功能架構
class MCPServer:
def __init__(self):
self.app = FastMCP("mcp-feedback-enhanced")
self.setup_tools()
@self.app.tool()
async def interactive_feedback(
project_directory: str,
summary: str,
timeout: int = 600
) -> dict:
# 環境檢測與驗證
# Web UI 啟動
# 會話管理
# 回饋等待與處理
```
**主要職責**:
- MCP 協議實現和工具註冊
- 環境檢測 (Local/SSH/WSL)
- Web UI 生命週期管理
- 與 AI 助手的接口層
### interactive_feedback 工具
```mermaid
flowchart TD
START[工具調用] --> VALIDATE[參數驗證]
VALIDATE --> ENV[環境檢測]
ENV --> LAUNCH[啟動 Web UI]
LAUNCH --> SESSION[創建/更新會話]
SESSION --> WAIT[等待用戶回饋]
WAIT --> TIMEOUT{超時檢查}
TIMEOUT -->|未超時| FEEDBACK[接收回饋]
TIMEOUT -->|超時| ERROR[超時錯誤]
FEEDBACK --> RETURN[返回結果]
ERROR --> RETURN
```
### i18n.py - 國際化支援
- **多語言支援**: 繁體中文、簡體中文、英文
- **動態語言切換**: 基於用戶偏好自動選擇
- **模組化翻譯**: 分離的語言包管理
## 🎛️ 第二層Web UI 管理層
### WebUIManager - 核心管理器
```python
class WebUIManager:
def __init__(self):
self.current_session: Optional[WebFeedbackSession] = None
self.global_active_tabs: Dict[str, dict] = {}
self.app: Optional[FastAPI] = None
self.server_process: Optional[subprocess.Popen] = None
```
**關鍵特性**:
- **單例模式**: 確保全局唯一實例
- **會話生命週期**: 創建、更新、清理會話
- **智能瀏覽器開啟**: 避免重複開啟視窗
- **資源管理**: 自動清理和錯誤處理
### WebFeedbackSession - 會話模型
```mermaid
stateDiagram-v2
[*] --> WAITING: 會話創建
WAITING --> FEEDBACK_PROCESSING: 用戶提交
FEEDBACK_PROCESSING --> FEEDBACK_SUBMITTED: 處理完成
FEEDBACK_SUBMITTED --> WAITING: 新會話更新
FEEDBACK_SUBMITTED --> [*]: 會話結束
note right of WAITING
等待用戶輸入
顯示 AI 摘要
end note
note right of FEEDBACK_PROCESSING
處理回饋數據
圖片壓縮等
end note
```
**狀態管理**:
- `WAITING`: 等待用戶回饋
- `FEEDBACK_PROCESSING`: 處理回饋中
- `FEEDBACK_SUBMITTED`: 回饋已提交
## 🌐 第三層Web 服務層
### main.py - FastAPI 應用
```python
class FastAPIApp:
def __init__(self):
self.app = FastAPI()
self.setup_middleware()
self.setup_routes()
self.setup_websocket()
def setup_middleware(self):
# CORS 設定
# 靜態文件服務
# 錯誤處理中間件
```
**核心功能**:
- HTTP 路由處理
- WebSocket 連接管理
- 靜態資源服務
- 中間件配置
### main_routes.py - 路由處理
```mermaid
graph LR
subgraph "HTTP 路由"
GET[GET /]
FEEDBACK[GET /feedback]
STATIC[靜態資源]
end
subgraph "WebSocket 路由"
WS[/ws]
MSG[訊息處理]
BROADCAST[廣播機制]
end
GET --> FEEDBACK
FEEDBACK --> STATIC
WS --> MSG
MSG --> BROADCAST
```
**WebSocket 訊息類型**:
- `connection_established`: 連接建立
- `session_updated`: 會話更新
- `submit_feedback`: 提交回饋
- `feedback_received`: 回饋確認
- `status_update`: 狀態更新
## 🎨 第四層:前端交互層
### feedback.html - 主頁面
```html
<!-- 核心結構 -->
<div id="app">
<header><!-- 標題和狀態 --></header>
<main>
<section id="ai-summary"><!-- AI 摘要顯示 --></section>
<section id="feedback-form"><!-- 回饋表單 --></section>
<section id="image-upload"><!-- 圖片上傳 --></section>
</main>
<footer><!-- 狀態指示器 --></footer>
</div>
```
### app.js - 交互邏輯
```javascript
class FeedbackApp {
constructor() {
this.websocket = null;
this.currentSession = null;
this.feedbackState = 'WAITING';
}
// WebSocket 管理
initWebSocket() { /* ... */ }
handleWebSocketMessage(data) { /* ... */ }
// 用戶交互
submitFeedback() { /* ... */ }
handleImageUpload() { /* ... */ }
// UI 更新
updateSessionDisplay() { /* ... */ }
updateFeedbackState() { /* ... */ }
}
```
**前端特性**:
- **響應式設計**: 適配不同螢幕尺寸
- **實時狀態同步**: WebSocket 雙向通信
- **圖片上傳**: 拖拽上傳和自動壓縮
- **多語言支援**: 動態語言切換
## 🛠️ 工具層組件
### browser.py - 瀏覽器控制
```python
class BrowserManager:
@staticmethod
def open_browser(url: str, environment: str):
if environment == "local":
webbrowser.open(url)
elif environment == "ssh":
# SSH 隧道處理
elif environment == "wsl":
# WSL 特殊處理
```
### port_manager.py - 埠管理
- **動態埠分配**: 自動尋找可用埠
- **埠衝突檢測**: 避免埠佔用問題
- **埠範圍配置**: 可配置的埠範圍
### session_cleanup_manager.py - 清理管理
```mermaid
graph TD
TIMER[定時器啟動] --> CHECK[檢查會話狀態]
CHECK --> TIMEOUT{會話超時?}
TIMEOUT -->|是| CLEANUP[執行清理]
TIMEOUT -->|否| WAIT[等待下次檢查]
CLEANUP --> WEBSOCKET[關閉 WebSocket]
WEBSOCKET --> PROCESS[終止進程]
PROCESS --> MEMORY[釋放內存]
MEMORY --> WAIT
WAIT --> CHECK
```
**清理策略**:
- **超時清理**: 會話超時自動清理
- **資源回收**: WebSocket、進程、內存
- **優雅關閉**: 確保資源正確釋放
---
**下一步**: 查看 [交互流程文檔](./interaction-flows.md) 了解完整的交互機制

View File

@ -0,0 +1,406 @@
# 部署指南
## 🚀 部署架構概覽
MCP Feedback Enhanced 支援多種部署環境,具備智能環境檢測和自適應配置能力。
### 部署拓撲圖
```mermaid
graph TB
subgraph "本地開發環境"
LOCAL[本地機器]
LOCAL_BROWSER[本地瀏覽器]
LOCAL --> LOCAL_BROWSER
end
subgraph "SSH 遠程環境"
REMOTE[遠程服務器]
SSH_TUNNEL[SSH 隧道]
LOCAL_CLIENT[本地客戶端]
REMOTE --> SSH_TUNNEL
SSH_TUNNEL --> LOCAL_CLIENT
end
subgraph "WSL 環境"
WSL[WSL 子系統]
WIN_BROWSER[Windows 瀏覽器]
WSL --> WIN_BROWSER
end
subgraph "容器化部署"
DOCKER[Docker 容器]
PORT_MAP[埠映射]
HOST[宿主機]
DOCKER --> PORT_MAP
PORT_MAP --> HOST
end
```
## 🛠️ 安裝和配置
### 系統要求
#### 最低要求
- **Python**: 3.11 或更高版本
- **內存**: 512MB 可用內存
- **磁盤**: 100MB 可用空間
- **網路**: 可訪問的網路連接
#### 推薦配置
- **Python**: 3.12+
- **內存**: 1GB+ 可用內存
- **磁盤**: 500MB+ 可用空間
- **CPU**: 2 核心或更多
### 安裝方式
#### 1. 使用 uvx推薦
```bash
# 直接運行
uvx mcp-feedback-enhanced@latest web
# 指定版本
uvx mcp-feedback-enhanced@2.3.0 web
```
#### 2. 使用 pip
```bash
# 安裝
pip install mcp-feedback-enhanced
# 運行
mcp-feedback-enhanced web
```
#### 3. 從源碼安裝
```bash
# 克隆倉庫
git clone https://github.com/Minidoracat/mcp-feedback-enhanced.git
cd mcp-feedback-enhanced
# 使用 uv 安裝
uv sync
# 運行
uv run python -m mcp_feedback_enhanced web
```
## 🌍 環境配置
### 環境檢測機制
```mermaid
flowchart TD
START[啟動檢測] --> SSH{SSH 環境?}
SSH -->|是| SSH_CONFIG[SSH 配置]
SSH -->|否| WSL{WSL 環境?}
WSL -->|是| WSL_CONFIG[WSL 配置]
WSL -->|否| LOCAL_CONFIG[本地配置]
SSH_CONFIG --> TUNNEL[建立 SSH 隧道]
WSL_CONFIG --> WSL_BROWSER[WSL 瀏覽器開啟]
LOCAL_CONFIG --> LOCAL_BROWSER[本地瀏覽器開啟]
TUNNEL --> SUCCESS[部署成功]
WSL_BROWSER --> SUCCESS
LOCAL_BROWSER --> SUCCESS
```
### 1. 本地環境部署
**特點**:
- 直接在本地機器運行
- 自動開啟本地瀏覽器
- 最簡單的部署方式
**配置**:
```bash
# 運行命令
mcp-feedback-enhanced web
# 自動檢測並開啟瀏覽器
# 默認地址: http://localhost:8000
```
### 2. SSH 遠程環境部署
**特點**:
- 在遠程服務器運行服務
- 自動建立 SSH 隧道
- 本地瀏覽器訪問遠程服務
**配置步驟**:
1. **在遠程服務器安裝**:
```bash
# SSH 連接到遠程服務器
ssh user@remote-server
# 安裝服務
pip install mcp-feedback-enhanced
```
2. **運行服務**:
```bash
# 在遠程服務器運行
mcp-feedback-enhanced web --host 0.0.0.0 --port 8000
```
3. **建立 SSH 隧道**(自動或手動):
```bash
# 手動建立隧道(如果自動檢測失敗)
ssh -L 8000:localhost:8000 user@remote-server
```
### 3. WSL 環境部署
**特點**:
- 在 WSL 子系統中運行
- 自動開啟 Windows 瀏覽器
- 跨系統無縫集成
**配置**:
```bash
# 在 WSL 中運行
mcp-feedback-enhanced web
# 自動檢測 WSL 環境並開啟 Windows 瀏覽器
```
### 4. 容器化部署
#### Docker 部署
```dockerfile
# Dockerfile
FROM python:3.12-slim
WORKDIR /app
COPY . .
RUN pip install mcp-feedback-enhanced
EXPOSE 8000
CMD ["mcp-feedback-enhanced", "web", "--host", "0.0.0.0", "--port", "8000"]
```
```bash
# 構建和運行
docker build -t mcp-feedback-enhanced .
docker run -p 8000:8000 mcp-feedback-enhanced
```
#### Docker Compose
```yaml
# docker-compose.yml
version: '3.8'
services:
mcp-feedback:
build: .
ports:
- "8000:8000"
environment:
- ENVIRONMENT=docker
volumes:
- ./projects:/app/projects
restart: unless-stopped
```
## ⚙️ 配置選項
### 命令行參數
```bash
mcp-feedback-enhanced web [OPTIONS]
```
| 參數 | 類型 | 預設值 | 描述 |
|------|------|--------|------|
| `--host` | `str` | `localhost` | 綁定的主機地址 |
| `--port` | `int` | `8000` | 服務埠號 |
| `--debug` | `bool` | `False` | 啟用調試模式 |
| `--no-browser` | `bool` | `False` | 不自動開啟瀏覽器 |
| `--timeout` | `int` | `600` | 預設會話超時時間(秒) |
### 環境變數
```bash
# 設置環境變數
export MCP_FEEDBACK_HOST=0.0.0.0
export MCP_FEEDBACK_PORT=9000
export MCP_FEEDBACK_DEBUG=true
export MCP_FEEDBACK_TIMEOUT=1200
```
### 配置文件
```json
// config.json
{
"server": {
"host": "localhost",
"port": 8000,
"debug": false
},
"session": {
"timeout": 600,
"max_connections": 5
},
"ui": {
"default_language": "zh-TW",
"theme": "light"
}
}
```
## 🔧 運維管理
### 服務監控
#### 健康檢查端點
```bash
# 檢查服務狀態
curl http://localhost:8000/health
# 響應示例
{
"status": "healthy",
"version": "2.3.0",
"uptime": "2h 30m 15s",
"active_sessions": 1
}
```
#### 日誌監控
```python
# 日誌配置
import logging
logging.basicConfig(
level=logging.INFO,
format='%(asctime)s - %(name)s - %(levelname)s - %(message)s',
handlers=[
logging.FileHandler('mcp-feedback.log'),
logging.StreamHandler()
]
)
```
### 性能調優
#### 內存優化
```python
# 會話清理配置
SESSION_CLEANUP_INTERVAL = 300 # 5分鐘
SESSION_TIMEOUT = 600 # 10分鐘
MAX_CONCURRENT_SESSIONS = 10
```
#### 網路優化
```python
# WebSocket 配置
WEBSOCKET_PING_INTERVAL = 30
WEBSOCKET_PING_TIMEOUT = 10
MAX_WEBSOCKET_CONNECTIONS = 50
```
### 故障排除
#### 常見問題
1. **埠被佔用**
```bash
# 檢查埠使用情況
netstat -tulpn | grep 8000
# 解決方案:使用不同埠
mcp-feedback-enhanced web --port 8001
```
2. **瀏覽器無法開啟**
```bash
# 手動開啟瀏覽器
mcp-feedback-enhanced web --no-browser
# 然後手動訪問 http://localhost:8000
```
3. **SSH 隧道失敗**
```bash
# 手動建立隧道
ssh -L 8000:localhost:8000 user@remote-server
# 或使用不同埠
ssh -L 8001:localhost:8000 user@remote-server
```
#### 調試模式
```bash
# 啟用詳細日誌
mcp-feedback-enhanced web --debug
# 查看詳細錯誤信息
export PYTHONPATH=.
python -m mcp_feedback_enhanced.debug
```
### 安全配置
#### 生產環境安全
```python
# 限制 CORS
app.add_middleware(
CORSMiddleware,
allow_origins=["https://yourdomain.com"],
allow_credentials=True,
allow_methods=["GET", "POST"],
allow_headers=["*"],
)
# 添加安全標頭
@app.middleware("http")
async def add_security_headers(request, call_next):
response = await call_next(request)
response.headers["X-Content-Type-Options"] = "nosniff"
response.headers["X-Frame-Options"] = "DENY"
response.headers["X-XSS-Protection"] = "1; mode=block"
return response
```
#### 防火牆配置
```bash
# Ubuntu/Debian
sudo ufw allow 8000/tcp
# CentOS/RHEL
sudo firewall-cmd --permanent --add-port=8000/tcp
sudo firewall-cmd --reload
```
## 📊 監控和指標
### 系統指標
- CPU 使用率
- 內存使用量
- 網路連接數
- 活躍會話數
### 業務指標
- 會話創建率
- 回饋提交率
- 平均回應時間
- 錯誤率
### 監控工具集成
```python
# Prometheus 指標
from prometheus_client import Counter, Histogram, Gauge
session_counter = Counter('mcp_sessions_total', 'Total sessions created')
response_time = Histogram('mcp_response_time_seconds', 'Response time')
active_sessions = Gauge('mcp_active_sessions', 'Active sessions')
```
---
**完成**: 架構文檔體系已建立完成,包含完整的技術文檔和部署指南。

View File

@ -0,0 +1,307 @@
# 交互流程文檔
## 🔄 AI 助手與 MCP 服務完整交互流程
本文檔詳細描述 AI 助手調用 MCP Feedback Enhanced 服務的完整流程,包括首次調用和多次循環調用的機制。
## 📋 流程概覽
### 整體交互時序圖
```mermaid
sequenceDiagram
participant AI as AI 助手
participant MCP as MCP 服務
participant WM as WebUIManager
participant WS as WebSocket
participant UI as Web UI
participant User as 用戶
Note over AI,User: 第一次調用流程
AI->>MCP: interactive_feedback(summary, timeout)
MCP->>WM: launch_web_feedback_ui()
WM->>WM: 創建新會話
WM->>WS: 啟動 Web 服務器
WM->>User: 智能開啟瀏覽器
User->>UI: 訪問回饋頁面
UI->>WS: 建立 WebSocket 連接
WS->>UI: connection_established
Note over AI,User: 用戶回饋流程
User->>UI: 填寫回饋內容
UI->>WS: submit_feedback
WS->>WM: 處理回饋數據
WM->>MCP: 設置回饋完成
MCP->>AI: 返回回饋結果
Note over AI,User: 第二次調用流程
AI->>MCP: interactive_feedback(new_summary, timeout)
MCP->>WM: 更新現有會話
WM->>WS: session_updated 通知
WS->>UI: 會話更新訊息
UI->>UI: 局部更新內容
User->>UI: 提交新回饋
UI->>WS: submit_feedback
WS->>WM: 處理新回饋
WM->>MCP: 設置回饋完成
MCP->>AI: 返回新回饋結果
```
## 🚀 第一次調用詳細流程
### 1. AI 助手發起調用
```python
# AI 助手調用示例
result = await interactive_feedback(
project_directory="./my-project",
summary="我已完成了功能 X 的實現,請檢查代碼品質和邏輯正確性",
timeout=600
)
```
### 2. MCP 服務處理流程
```mermaid
flowchart TD
START[AI 調用 interactive_feedback] --> VALIDATE[參數驗證]
VALIDATE --> ENV[環境檢測]
ENV --> LAUNCH[調用 launch_web_feedback_ui]
LAUNCH --> SESSION[創建新會話]
SESSION --> SERVER[啟動 Web 服務器]
SERVER --> BROWSER[智能開啟瀏覽器]
BROWSER --> WAIT[等待用戶回饋]
WAIT --> TIMEOUT{檢查超時}
TIMEOUT -->|未超時| FEEDBACK[接收回饋]
TIMEOUT -->|超時| ERROR[返回超時錯誤]
FEEDBACK --> RETURN[返回結果給 AI]
ERROR --> RETURN
```
**關鍵步驟說明**:
#### 2.1 環境檢測
```python
def detect_environment():
if os.environ.get('SSH_CLIENT') or os.environ.get('SSH_TTY'):
return "ssh"
elif 'microsoft' in platform.uname().release.lower():
return "wsl"
else:
return "local"
```
#### 2.2 會話創建
```python
async def create_session(self, summary: str, project_dir: str):
# 保存舊會話的 WebSocket 連接
old_websockets = []
if self.current_session:
old_websockets = list(self.current_session.websockets)
# 創建新會話
session_id = str(uuid.uuid4())
self.current_session = WebFeedbackSession(
session_id=session_id,
summary=summary,
project_directory=project_dir
)
# 繼承 WebSocket 連接
for ws in old_websockets:
self.current_session.add_websocket(ws)
# 標記需要發送會話更新
self._pending_session_update = True
```
### 3. Web UI 連接建立
```mermaid
sequenceDiagram
participant Browser as 瀏覽器
participant UI as Web UI
participant WS as WebSocket
participant Session as 會話管理
Browser->>UI: 訪問 /feedback
UI->>WS: 建立 WebSocket 連接
WS->>Session: 註冊連接
Session->>WS: connection_established
WS->>UI: 發送連接確認
alt 有待處理的會話更新
Session->>WS: session_updated
WS->>UI: 會話更新訊息
UI->>UI: 更新頁面內容
end
```
## 🔄 多次循環調用機制
### 持久化會話架構
MCP Feedback Enhanced 的核心創新在於**持久化會話架構**,支援 AI 助手進行多次循環調用而無需重新建立連接。
```mermaid
stateDiagram-v2
[*] --> FirstCall: AI 首次調用
FirstCall --> SessionActive: 會話建立
SessionActive --> UserFeedback: 等待用戶回饋
UserFeedback --> FeedbackSubmitted: 回饋提交
FeedbackSubmitted --> AIProcessing: AI 處理回饋
AIProcessing --> SecondCall: AI 再次調用
SecondCall --> SessionUpdated: 會話更新
SessionUpdated --> UserFeedback: 等待新回饋
note right of SessionActive
Web 服務器持續運行
瀏覽器標籤頁保持開啟
WebSocket 連接維持
end note
note right of SessionUpdated
無需重新開啟瀏覽器
局部更新頁面內容
狀態無縫切換
end note
```
### 第二次調用流程
#### 1. AI 助手再次調用
```python
# AI 根據用戶回饋進行調整後再次調用
result = await interactive_feedback(
project_directory="./my-project",
summary="根據您的建議,我已修改了錯誤處理邏輯,請再次確認",
timeout=600
)
```
#### 2. 智能會話切換
```mermaid
flowchart TD
CALL[AI 再次調用] --> CHECK[檢查現有會話]
CHECK --> ACTIVE{有活躍會話?}
ACTIVE -->|是| UPDATE[更新會話內容]
ACTIVE -->|否| CREATE[創建新會話]
UPDATE --> PRESERVE[保存 WebSocket 連接]
CREATE --> PRESERVE
PRESERVE --> NOTIFY[發送會話更新通知]
NOTIFY --> FRONTEND[前端接收更新]
FRONTEND --> REFRESH[局部刷新內容]
```
#### 3. 前端無縫更新
```javascript
// 處理會話更新訊息
function handleSessionUpdated(data) {
// 顯示會話更新通知
showNotification('會話已更新', 'info');
// 重置回饋狀態
feedbackState = 'FEEDBACK_WAITING';
// 局部更新 AI 摘要
updateAISummary(data.summary);
// 清空回饋表單
clearFeedbackForm();
// 更新會話 ID
currentSessionId = data.session_id;
// 保持 WebSocket 連接不變
// 無需重新建立連接
}
```
## 📊 狀態同步機制
### WebSocket 訊息類型
```mermaid
graph LR
subgraph "服務器 → 客戶端"
CE[connection_established<br/>連接建立]
SU[session_updated<br/>會話更新]
FR[feedback_received<br/>回饋確認]
ST[status_update<br/>狀態更新]
end
subgraph "客戶端 → 服務器"
SF[submit_feedback<br/>提交回饋]
HB[heartbeat<br/>心跳檢測]
LS[language_switch<br/>語言切換]
end
```
### 狀態轉換圖
```mermaid
stateDiagram-v2
[*] --> WAITING: 會話創建/更新
WAITING --> FEEDBACK_PROCESSING: 用戶提交回饋
FEEDBACK_PROCESSING --> FEEDBACK_SUBMITTED: 處理完成
FEEDBACK_SUBMITTED --> WAITING: 新會話更新
FEEDBACK_SUBMITTED --> [*]: 會話結束
WAITING --> ERROR: 連接錯誤
FEEDBACK_PROCESSING --> ERROR: 處理錯誤
ERROR --> WAITING: 錯誤恢復
ERROR --> [*]: 致命錯誤
```
## 🛡️ 錯誤處理和恢復
### 連接斷線處理
```javascript
// WebSocket 重連機制
function handleWebSocketClose() {
console.log('WebSocket 連接已關閉,嘗試重連...');
setTimeout(() => {
initWebSocket();
}, 3000); // 3秒後重連
}
// 心跳檢測
setInterval(() => {
if (websocket && websocket.readyState === WebSocket.OPEN) {
websocket.send(JSON.stringify({
type: 'heartbeat',
timestamp: Date.now()
}));
}
}, 30000); // 每30秒發送心跳
```
### 超時處理
```python
async def wait_for_feedback(self, timeout: int = 600):
try:
await asyncio.wait_for(
self.feedback_completed.wait(),
timeout=timeout
)
return self.get_feedback_result()
except asyncio.TimeoutError:
raise TimeoutError(f"等待用戶回饋超時 ({timeout}秒)")
```
## 🎯 性能優化
### 連接復用
- **WebSocket 連接保持**: 避免重複建立連接
- **會話狀態繼承**: 新會話繼承舊會話的連接
- **智能瀏覽器開啟**: 檢測活躍標籤頁,避免重複開啟
### 資源管理
- **自動清理機制**: 超時會話自動清理
- **內存優化**: 單一活躍會話模式
- **進程管理**: 優雅的進程啟動和關閉
---
**下一步**: 查看 [API 參考文檔](./api-reference.md) 了解詳細的 API 規範

View File

@ -0,0 +1,178 @@
# 系統架構總覽
## 🏗️ 整體架構設計
MCP Feedback Enhanced 採用**單一活躍會話 + 持久化 Web UI**的創新架構設計,實現 AI 助手與用戶之間的高效、無縫交互體驗。
### 系統整體架構圖
```mermaid
graph TB
subgraph "AI 助手環境"
AI[AI 助手<br/>Claude/GPT等]
end
subgraph "MCP Feedback Enhanced"
subgraph "MCP 服務層"
MCP[MCP Server<br/>server.py]
TOOL[interactive_feedback<br/>工具]
end
subgraph "Web UI 管理層"
WM[WebUIManager<br/>單例模式]
SESSION[WebFeedbackSession<br/>會話管理]
end
subgraph "Web 服務層"
API[FastAPI<br/>HTTP/WebSocket]
ROUTES[路由處理<br/>main_routes.py]
end
subgraph "前端交互層"
UI[Web UI<br/>HTML/JS]
WS[WebSocket<br/>實時通信]
end
subgraph "工具層"
ENV[環境檢測]
BROWSER[智能瀏覽器開啟]
RESOURCE[資源管理]
end
end
subgraph "用戶環境"
USER[用戶瀏覽器]
FILES[專案文件]
end
AI -->|調用 MCP 工具| MCP
MCP --> TOOL
TOOL --> WM
WM --> SESSION
WM --> API
API --> ROUTES
ROUTES --> UI
UI --> WS
WS --> USER
ENV --> MCP
BROWSER --> USER
RESOURCE --> SESSION
USER -->|回饋提交| WS
FILES -->|專案內容| TOOL
```
## 🎯 核心設計理念
### 1. 單一活躍會話模式
```mermaid
stateDiagram-v2
[*] --> NoSession: 系統啟動
NoSession --> ActiveSession: AI 首次調用
ActiveSession --> SessionUpdated: AI 再次調用
SessionUpdated --> ActiveSession: 會話切換完成
ActiveSession --> Cleanup: 超時或手動清理
Cleanup --> NoSession: 資源釋放
note right of ActiveSession
只維護一個活躍會話
提升性能和用戶體驗
end note
```
### 2. 持久化 Web UI 架構
- **瀏覽器標籤頁保持**: 避免重複開啟瀏覽器
- **WebSocket 連接復用**: 減少連接建立開銷
- **狀態無縫切換**: 從 SUBMITTED → WAITING
- **內容局部更新**: 只更新必要的 UI 元素
### 3. 智能環境檢測
```mermaid
flowchart TD
START[啟動檢測] --> LOCAL{本地環境?}
LOCAL -->|是| DIRECT[直接開啟瀏覽器]
LOCAL -->|否| REMOTE{SSH 遠程?}
REMOTE -->|是| TUNNEL[建立 SSH 隧道]
REMOTE -->|否| WSL{WSL 環境?}
WSL -->|是| WSLOPEN[WSL 瀏覽器開啟]
WSL -->|否| FALLBACK[回退模式]
DIRECT --> SUCCESS[成功啟動]
TUNNEL --> SUCCESS
WSLOPEN --> SUCCESS
FALLBACK --> SUCCESS
```
## 🔧 技術亮點
### 1. 創新的會話管理
```python
# 傳統多會話設計 (已棄用)
self.sessions: Dict[str, WebFeedbackSession] = {}
# 創新單一活躍會話設計
self.current_session: Optional[WebFeedbackSession] = None
self.global_active_tabs: Dict[str, dict] = {} # 全局標籤頁狀態
```
### 2. 智能瀏覽器開啟機制
- **活躍標籤頁檢測**: 避免重複開啟瀏覽器視窗
- **跨平台支援**: Windows, macOS, Linux 自動適配
- **環境感知**: SSH/WSL 環境特殊處理
### 3. 實時狀態同步
- **WebSocket 雙向通信**: 前後端狀態實時同步
- **會話更新通知**: 立即推送會話變更
- **錯誤處理機制**: 連接斷線自動重連
## 📊 性能特性
### 資源使用優化
- **內存佔用**: 單一會話模式減少 60% 內存使用
- **連接復用**: WebSocket 連接保持,減少建立開銷
- **智能清理**: 自動資源回收和會話超時處理
### 用戶體驗提升
- **零等待切換**: 會話更新無需重新載入頁面
- **連續交互**: 支援 AI 助手多次循環調用
- **視覺反饋**: 實時狀態指示和進度顯示
## 🔄 核心工作流程
### AI 助手調用流程
```mermaid
sequenceDiagram
participant AI as AI 助手
participant MCP as MCP 服務
participant WM as WebUIManager
participant UI as Web UI
participant User as 用戶
AI->>MCP: interactive_feedback()
MCP->>WM: 創建/更新會話
WM->>UI: 啟動 Web 服務
WM->>User: 智能開啟瀏覽器
User->>UI: 提交回饋
UI->>WM: WebSocket 傳送
WM->>MCP: 回饋完成
MCP->>AI: 返回結果
```
### 多次循環調用
```mermaid
graph LR
A[AI 首次調用] --> B[用戶回饋]
B --> C[AI 處理回饋]
C --> D[AI 再次調用]
D --> E[會話無縫更新]
E --> F[用戶再次回饋]
F --> G[持續循環...]
style D fill:#e1f5fe
style E fill:#e8f5e8
```
---
**下一步**: 查看 [組件詳細說明](./component-details.md) 了解各組件的具體實現