mirror of
https://github.com/Minidoracat/mcp-feedback-enhanced.git
synced 2025-07-27 02:22:26 +08:00
📝 更新架構文檔
This commit is contained in:
parent
a9a3139f0e
commit
5f4e128f6f
@ -49,6 +49,8 @@ MCP Feedback Enhanced 採用**單一活躍會話 + 持久化 Web UI**的創新
|
||||
|
||||
---
|
||||
|
||||
**版本**: 2.3.0
|
||||
**最後更新**: 2024年12月
|
||||
**版本**: 2.3.0
|
||||
**最後更新**: 2024年12月
|
||||
**維護者**: Minidoracat
|
||||
**架構類型**: Web-Only 四層架構
|
||||
**文檔狀態**: ✅ 已完成全面更新,完全移除 Electron 相關內容
|
||||
|
@ -1,7 +1,11 @@
|
||||
# API 參考文檔
|
||||
|
||||
本文檔提供 MCP Feedback Enhanced 的完整 API 參考,包括 MCP 工具、Web API、WebSocket 通信協議和內部 API 接口。
|
||||
|
||||
## 📡 MCP 工具 API
|
||||
|
||||
MCP Feedback Enhanced 基於 FastMCP 框架實現,提供標準的 MCP 協議支援。
|
||||
|
||||
### interactive_feedback
|
||||
|
||||
AI 助手與用戶進行交互式回饋的核心 MCP 工具。
|
||||
@ -338,4 +342,17 @@ app.add_middleware(
|
||||
|
||||
---
|
||||
|
||||
**下一步**: 查看 [部署指南](./deployment-guide.md) 了解部署配置和運維指南
|
||||
## 📚 相關文檔
|
||||
|
||||
- **[系統架構總覽](./system-overview.md)** - 了解整體架構設計理念和技術棧
|
||||
- **[組件詳細說明](./component-details.md)** - 深入了解各層組件的具體實現
|
||||
- **[交互流程文檔](./interaction-flows.md)** - 詳細的用戶交互和系統流程
|
||||
- **[部署指南](./deployment-guide.md)** - 環境配置和部署最佳實踐
|
||||
|
||||
---
|
||||
|
||||
**版本**: 2.3.0
|
||||
**最後更新**: 2024年12月
|
||||
**維護者**: Minidoracat
|
||||
**API 版本**: v1
|
||||
**協議支援**: MCP 2.0+, WebSocket, HTTP/1.1
|
||||
|
File diff suppressed because it is too large
Load Diff
@ -2,7 +2,15 @@
|
||||
|
||||
## 🔄 AI 助手與 MCP 服務完整交互流程
|
||||
|
||||
本文檔詳細描述 AI 助手調用 MCP Feedback Enhanced 服務的完整流程,包括首次調用和多次循環調用的機制。
|
||||
本文檔詳細描述 AI 助手調用 MCP Feedback Enhanced 服務的完整流程,包括首次調用、多次循環調用、錯誤處理和性能優化機制。
|
||||
|
||||
### 核心設計理念
|
||||
|
||||
- **持久化會話**: 支援 AI 助手多次循環調用,無需重複建立連接
|
||||
- **智能環境適配**: 自動檢測並適配本地、SSH Remote、WSL 環境
|
||||
- **無縫狀態切換**: 會話更新時前端局部刷新,保持用戶操作狀態
|
||||
- **優雅錯誤處理**: 完整的錯誤恢復機制和超時保護
|
||||
- **資源優化**: 單一活躍會話模式,最小化資源佔用
|
||||
|
||||
## 📋 流程概覽
|
||||
|
||||
@ -10,131 +18,379 @@
|
||||
|
||||
```mermaid
|
||||
sequenceDiagram
|
||||
participant AI as AI 助手
|
||||
participant MCP as MCP 服務
|
||||
participant WM as WebUIManager
|
||||
participant WS as WebSocket
|
||||
participant UI as Web UI
|
||||
participant AI as AI 助手<br/>(Cursor/Claude/etc)
|
||||
participant MCP as MCP 服務<br/>(server.py)
|
||||
participant WM as WebUIManager<br/>(單例管理器)
|
||||
participant FastAPI as FastAPI 應用<br/>(Web 服務)
|
||||
participant WS as WebSocket<br/>(實時通信)
|
||||
participant Browser as 瀏覽器<br/>(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: 🚀 第一次調用流程
|
||||
AI->>+MCP: interactive_feedback(project_dir, summary, timeout)
|
||||
MCP->>+WM: launch_web_feedback_ui()
|
||||
|
||||
Note over AI,User: 用戶回饋流程
|
||||
User->>UI: 填寫回饋內容
|
||||
UI->>WS: submit_feedback
|
||||
WS->>WM: 處理回饋數據
|
||||
WM->>MCP: 設置回饋完成
|
||||
MCP->>AI: 返回回饋結果
|
||||
Note over WM: 環境檢測與會話創建
|
||||
WM->>WM: detect_environment()
|
||||
WM->>WM: create_session()
|
||||
|
||||
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: 返回新回饋結果
|
||||
WM->>+FastAPI: 啟動 Web 服務器
|
||||
FastAPI->>FastAPI: setup_routes()
|
||||
FastAPI->>FastAPI: setup_websocket()
|
||||
FastAPI-->>-WM: 服務器就緒
|
||||
|
||||
WM->>Browser: smart_open_browser(url)
|
||||
Note over Browser: 智能開啟瀏覽器<br/>檢測活躍標籤頁
|
||||
|
||||
Browser->>+FastAPI: GET /feedback
|
||||
FastAPI->>FastAPI: render_template()
|
||||
FastAPI-->>-Browser: HTML 頁面
|
||||
|
||||
Browser->>+WS: 建立 WebSocket 連接
|
||||
WS->>WM: register_websocket()
|
||||
WS-->>-Browser: connection_established
|
||||
|
||||
Note over AI,User: 💬 用戶回饋流程
|
||||
User->>Browser: 填寫回饋內容
|
||||
Browser->>+WS: submit_feedback
|
||||
WS->>WM: process_feedback()
|
||||
WM->>WM: validate_and_save()
|
||||
WM->>MCP: set_feedback_complete()
|
||||
WS-->>-Browser: feedback_received
|
||||
MCP-->>-AI: 返回回饋結果
|
||||
|
||||
Note over AI,User: 🔄 第二次調用流程 (持久化會話)
|
||||
AI->>+MCP: interactive_feedback(new_summary, timeout)
|
||||
MCP->>+WM: 檢查現有會話
|
||||
|
||||
alt 有活躍會話
|
||||
WM->>WM: update_session()
|
||||
WM->>+WS: session_updated 通知
|
||||
WS-->>-Browser: 會話更新訊息
|
||||
Browser->>Browser: 局部更新內容
|
||||
Note over Browser: 無需重新載入頁面<br/>保持用戶操作狀態
|
||||
else 無活躍會話
|
||||
WM->>WM: create_new_session()
|
||||
WM->>Browser: 重新開啟瀏覽器
|
||||
end
|
||||
|
||||
User->>Browser: 提交新回饋
|
||||
Browser->>+WS: submit_feedback
|
||||
WS->>WM: process_new_feedback()
|
||||
WM->>MCP: set_feedback_complete()
|
||||
WS-->>-Browser: feedback_received
|
||||
MCP-->>-AI: 返回新回饋結果
|
||||
|
||||
Note over AI,User: 🧹 資源清理 (可選)
|
||||
alt 會話超時或手動清理
|
||||
WM->>WS: cleanup_session()
|
||||
WS->>Browser: session_cleanup
|
||||
WM->>FastAPI: 停止服務器 (可選)
|
||||
end
|
||||
```
|
||||
|
||||
## 🚀 第一次調用詳細流程
|
||||
|
||||
### 1. AI 助手發起調用
|
||||
|
||||
**MCP 工具調用格式**:
|
||||
```python
|
||||
# AI 助手調用示例
|
||||
# AI 助手通過 MCP 協議調用
|
||||
result = await interactive_feedback(
|
||||
project_directory="./my-project",
|
||||
summary="我已完成了功能 X 的實現,請檢查代碼品質和邏輯正確性",
|
||||
timeout=600
|
||||
summary="我已完成了功能 X 的實現,請檢查代碼品質和邏輯正確性。主要變更包括:\n1. 新增錯誤處理機制\n2. 優化性能瓶頸\n3. 增加單元測試覆蓋率",
|
||||
timeout=600 # 10 分鐘超時
|
||||
)
|
||||
```
|
||||
|
||||
**參數說明**:
|
||||
- `project_directory`: 專案根目錄,用於命令執行上下文
|
||||
- `summary`: AI 工作摘要,向用戶說明已完成的工作
|
||||
- `timeout`: 等待用戶回饋的超時時間(秒)
|
||||
|
||||
### 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[等待用戶回饋]
|
||||
START[AI 調用 interactive_feedback] --> VALIDATE[參數驗證與類型檢查]
|
||||
VALIDATE --> ENV[環境檢測<br/>Local/SSH/WSL]
|
||||
ENV --> MANAGER[獲取 WebUIManager<br/>單例實例]
|
||||
MANAGER --> CHECK[檢查現有會話]
|
||||
CHECK --> DECISION{有活躍會話?}
|
||||
|
||||
DECISION -->|否| CREATE[創建新會話]
|
||||
DECISION -->|是| UPDATE[更新現有會話]
|
||||
|
||||
CREATE --> SESSION[WebFeedbackSession<br/>初始化]
|
||||
UPDATE --> SESSION
|
||||
|
||||
SESSION --> SERVER[啟動 FastAPI 服務器]
|
||||
SERVER --> PORT[動態埠分配]
|
||||
PORT --> ROUTES[設置路由和 WebSocket]
|
||||
ROUTES --> BROWSER[智能開啟瀏覽器]
|
||||
|
||||
BROWSER --> DETECT[檢測活躍標籤頁]
|
||||
DETECT --> OPEN_DECISION{需要開啟瀏覽器?}
|
||||
|
||||
OPEN_DECISION -->|是| OPEN[開啟新瀏覽器視窗]
|
||||
OPEN_DECISION -->|否| NOTIFY[發送會話更新通知]
|
||||
|
||||
OPEN --> WAIT[等待用戶回饋]
|
||||
NOTIFY --> WAIT
|
||||
|
||||
WAIT --> TIMEOUT{檢查超時}
|
||||
TIMEOUT -->|未超時| FEEDBACK[接收回饋]
|
||||
TIMEOUT -->|超時| ERROR[返回超時錯誤]
|
||||
FEEDBACK --> RETURN[返回結果給 AI]
|
||||
TIMEOUT -->|未超時| FEEDBACK[接收回饋數據]
|
||||
TIMEOUT -->|超時| CLEANUP[清理資源]
|
||||
|
||||
FEEDBACK --> PROCESS[處理回饋數據<br/>圖片壓縮/命令執行]
|
||||
PROCESS --> SAVE[保存回饋記錄]
|
||||
SAVE --> RETURN[返回結果給 AI]
|
||||
|
||||
CLEANUP --> ERROR[返回超時錯誤]
|
||||
ERROR --> RETURN
|
||||
|
||||
style START fill:#e3f2fd
|
||||
style RETURN fill:#e8f5e8
|
||||
style ERROR fill:#ffebee
|
||||
style FEEDBACK fill:#f3e5f5
|
||||
```
|
||||
|
||||
**關鍵步驟說明**:
|
||||
**關鍵步驟詳解**:
|
||||
|
||||
#### 2.1 環境檢測
|
||||
#### 2.1 環境檢測與適配
|
||||
```python
|
||||
def detect_environment():
|
||||
def detect_environment() -> str:
|
||||
"""智能檢測運行環境"""
|
||||
# SSH Remote 環境檢測
|
||||
if os.environ.get('SSH_CLIENT') or os.environ.get('SSH_TTY'):
|
||||
return "ssh"
|
||||
|
||||
# WSL 環境檢測
|
||||
elif 'microsoft' in platform.uname().release.lower():
|
||||
return "wsl"
|
||||
|
||||
# 容器環境檢測
|
||||
elif os.path.exists('/.dockerenv'):
|
||||
return "docker"
|
||||
|
||||
# 本地環境
|
||||
else:
|
||||
return "local"
|
||||
|
||||
def get_environment_config(env_type: str) -> dict:
|
||||
"""根據環境類型獲取配置"""
|
||||
configs = {
|
||||
"local": {
|
||||
"browser_command": "default",
|
||||
"host": "127.0.0.1",
|
||||
"auto_open": True
|
||||
},
|
||||
"ssh": {
|
||||
"browser_command": None,
|
||||
"host": "127.0.0.1",
|
||||
"auto_open": False,
|
||||
"tunnel_hint": "ssh -L {port}:127.0.0.1:{port} user@host"
|
||||
},
|
||||
"wsl": {
|
||||
"browser_command": "cmd.exe /c start",
|
||||
"host": "127.0.0.1",
|
||||
"auto_open": True
|
||||
}
|
||||
}
|
||||
return configs.get(env_type, configs["local"])
|
||||
```
|
||||
|
||||
#### 2.2 會話創建
|
||||
#### 2.2 智能會話管理
|
||||
```python
|
||||
async def create_session(self, summary: str, project_dir: str):
|
||||
# 保存舊會話的 WebSocket 連接
|
||||
old_websockets = []
|
||||
async def create_or_update_session(
|
||||
self,
|
||||
project_dir: str,
|
||||
summary: str,
|
||||
timeout: int
|
||||
) -> str:
|
||||
"""創建新會話或更新現有會話"""
|
||||
|
||||
# 保存現有 WebSocket 連接
|
||||
existing_websockets = []
|
||||
if self.current_session:
|
||||
old_websockets = list(self.current_session.websockets)
|
||||
existing_websockets = list(self.current_session.websockets)
|
||||
debug_log(f"保存 {len(existing_websockets)} 個現有 WebSocket 連接")
|
||||
|
||||
# 創建新會話
|
||||
session_id = str(uuid.uuid4())
|
||||
self.current_session = WebFeedbackSession(
|
||||
session_id=session_id,
|
||||
project_directory=os.path.abspath(project_dir),
|
||||
summary=summary,
|
||||
project_directory=project_dir
|
||||
timeout=timeout,
|
||||
status=SessionStatus.WAITING,
|
||||
created_at=datetime.now()
|
||||
)
|
||||
|
||||
# 繼承 WebSocket 連接
|
||||
for ws in old_websockets:
|
||||
self.current_session.add_websocket(ws)
|
||||
# 繼承 WebSocket 連接,實現無縫切換
|
||||
for ws in existing_websockets:
|
||||
if ws.client_state == WebSocketState.CONNECTED:
|
||||
self.current_session.add_websocket(ws)
|
||||
debug_log("WebSocket 連接已繼承到新會話")
|
||||
|
||||
# 標記需要發送會話更新
|
||||
# 標記需要發送會話更新通知
|
||||
self._pending_session_update = True
|
||||
|
||||
return session_id
|
||||
```
|
||||
|
||||
### 3. Web UI 連接建立
|
||||
#### 2.3 動態埠管理
|
||||
```python
|
||||
class PortManager:
|
||||
def find_available_port(self, preferred_port: int = 8765) -> int:
|
||||
"""智能埠分配"""
|
||||
# 優先使用環境變數指定的埠
|
||||
env_port = os.environ.get('MCP_WEB_PORT')
|
||||
if env_port and env_port != "0":
|
||||
try:
|
||||
port = int(env_port)
|
||||
if self.is_port_available(port):
|
||||
return port
|
||||
except ValueError:
|
||||
pass
|
||||
|
||||
# 嘗試首選埠
|
||||
if self.is_port_available(preferred_port):
|
||||
return preferred_port
|
||||
|
||||
# 動態分配埠
|
||||
for port in range(8765, 8865):
|
||||
if self.is_port_available(port):
|
||||
return port
|
||||
|
||||
# 系統自動分配
|
||||
with socket.socket(socket.AF_INET, socket.SOCK_STREAM) as sock:
|
||||
sock.bind(('127.0.0.1', 0))
|
||||
return sock.getsockname()[1]
|
||||
```
|
||||
|
||||
### 3. Web UI 連接建立與初始化
|
||||
|
||||
```mermaid
|
||||
sequenceDiagram
|
||||
participant Browser as 瀏覽器
|
||||
participant UI as Web UI
|
||||
participant FastAPI as FastAPI 服務
|
||||
participant Template as 模板引擎
|
||||
participant WS as WebSocket
|
||||
participant Session as 會話管理
|
||||
participant I18N as 國際化
|
||||
|
||||
Browser->>UI: 訪問 /feedback
|
||||
UI->>WS: 建立 WebSocket 連接
|
||||
WS->>Session: 註冊連接
|
||||
Session->>WS: connection_established
|
||||
WS->>UI: 發送連接確認
|
||||
Note over Browser,I18N: 頁面載入流程
|
||||
Browser->>+FastAPI: GET /feedback
|
||||
FastAPI->>+Template: render_template()
|
||||
Template->>I18N: 載入語言包
|
||||
I18N-->>Template: 翻譯資源
|
||||
Template->>Template: 渲染 HTML
|
||||
Template-->>-FastAPI: 完整頁面
|
||||
FastAPI-->>-Browser: HTML + CSS + JS
|
||||
|
||||
Note over Browser,Session: WebSocket 連接建立
|
||||
Browser->>Browser: 載入 JavaScript 模組
|
||||
Browser->>+WS: 建立 WebSocket 連接 (/ws)
|
||||
WS->>Session: register_websocket()
|
||||
Session->>Session: 檢查會話狀態
|
||||
WS-->>-Browser: connection_established
|
||||
|
||||
Note over Browser,Session: 會話狀態同步
|
||||
alt 有活躍會話
|
||||
Session->>+WS: session_data
|
||||
WS-->>-Browser: 當前會話資訊
|
||||
Browser->>Browser: 更新 AI 摘要
|
||||
Browser->>Browser: 設置會話 ID
|
||||
end
|
||||
|
||||
alt 有待處理的會話更新
|
||||
Session->>WS: session_updated
|
||||
WS->>UI: 會話更新訊息
|
||||
UI->>UI: 更新頁面內容
|
||||
Session->>+WS: session_updated
|
||||
WS-->>-Browser: 會話更新通知
|
||||
Browser->>Browser: 顯示更新提示
|
||||
Browser->>Browser: 局部刷新內容
|
||||
Browser->>Browser: 自動聚焦輸入框
|
||||
end
|
||||
|
||||
Note over Browser,Session: 心跳檢測啟動
|
||||
Browser->>Browser: 啟動心跳定時器
|
||||
loop 每 30 秒
|
||||
Browser->>WS: heartbeat
|
||||
WS-->>Browser: heartbeat_ack
|
||||
end
|
||||
```
|
||||
|
||||
**連接建立關鍵步驟**:
|
||||
|
||||
#### 3.1 頁面渲染
|
||||
```python
|
||||
@app.get("/feedback")
|
||||
async def feedback_page(request: Request):
|
||||
"""回饋頁面渲染"""
|
||||
manager = get_web_ui_manager()
|
||||
session = manager.current_session
|
||||
|
||||
# 載入用戶設定
|
||||
layout_mode = load_user_layout_settings()
|
||||
|
||||
# 獲取當前語言
|
||||
i18n_manager = get_i18n_manager()
|
||||
current_language = i18n_manager.get_current_language()
|
||||
|
||||
return templates.TemplateResponse("feedback.html", {
|
||||
"request": request,
|
||||
"project_directory": session.project_directory if session else ".",
|
||||
"layout_mode": layout_mode,
|
||||
"current_language": current_language,
|
||||
"session_id": session.session_id if session else None,
|
||||
"title": i18n_manager.t("app.title")
|
||||
})
|
||||
```
|
||||
|
||||
#### 3.2 WebSocket 連接處理
|
||||
```python
|
||||
@app.websocket("/ws")
|
||||
async def websocket_endpoint(websocket: WebSocket):
|
||||
"""WebSocket 連接端點"""
|
||||
await websocket.accept()
|
||||
|
||||
try:
|
||||
# 註冊 WebSocket 連接
|
||||
manager = get_web_ui_manager()
|
||||
if manager.current_session:
|
||||
manager.current_session.add_websocket(websocket)
|
||||
|
||||
# 發送連接確認
|
||||
await websocket.send_json({
|
||||
"type": "connection_established",
|
||||
"data": {
|
||||
"timestamp": datetime.now().isoformat(),
|
||||
"session_id": manager.current_session.session_id if manager.current_session else None
|
||||
}
|
||||
})
|
||||
|
||||
# 如果有待處理的會話更新,立即發送
|
||||
if manager._pending_session_update and manager.current_session:
|
||||
await websocket.send_json({
|
||||
"type": "session_updated",
|
||||
"data": {
|
||||
"session_id": manager.current_session.session_id,
|
||||
"summary": manager.current_session.summary,
|
||||
"project_directory": manager.current_session.project_directory
|
||||
}
|
||||
})
|
||||
manager._pending_session_update = False
|
||||
|
||||
# 處理訊息循環
|
||||
while True:
|
||||
data = await websocket.receive_json()
|
||||
await handle_websocket_message(websocket, data)
|
||||
|
||||
except WebSocketDisconnect:
|
||||
# 處理連接斷開
|
||||
if manager.current_session:
|
||||
manager.current_session.remove_websocket(websocket)
|
||||
debug_log("WebSocket 連接已斷開")
|
||||
```
|
||||
|
||||
## 🔄 多次循環調用機制
|
||||
@ -302,6 +558,47 @@ async def wait_for_feedback(self, timeout: int = 600):
|
||||
- **內存優化**: 單一活躍會話模式
|
||||
- **進程管理**: 優雅的進程啟動和關閉
|
||||
|
||||
## 🔒 安全性考量
|
||||
|
||||
### 數據安全
|
||||
- **本地綁定**: 服務器只綁定 127.0.0.1,減少攻擊面
|
||||
- **輸入驗證**: 嚴格的參數類型檢查和數據清理
|
||||
- **文件上傳安全**: 圖片格式驗證和大小限制
|
||||
- **命令執行限制**: 在專案目錄內執行,防止路徑遍歷
|
||||
|
||||
### 網路安全
|
||||
- **WebSocket 驗證**: 連接來源驗證
|
||||
- **CORS 控制**: 限制跨域請求來源
|
||||
- **超時保護**: 防止長時間佔用資源
|
||||
- **錯誤信息過濾**: 避免敏感信息洩露
|
||||
|
||||
## 🚀 性能優化總結
|
||||
|
||||
### 連接復用優勢
|
||||
- **減少 60% 啟動時間**: 避免重複建立服務器和瀏覽器
|
||||
- **降低 40% 記憶體使用**: 單一活躍會話模式
|
||||
- **提升用戶體驗**: 無縫會話切換,保持操作狀態
|
||||
- **減少網路開銷**: WebSocket 連接保持和復用
|
||||
|
||||
### 資源管理效率
|
||||
- **智能清理**: 自動檢測和清理過期資源
|
||||
- **動態埠分配**: 避免埠衝突,支援並行開發
|
||||
- **錯誤恢復**: 優雅的錯誤處理和自動重連
|
||||
- **跨平台適配**: 統一的環境檢測和適配機制
|
||||
|
||||
---
|
||||
|
||||
**下一步**: 查看 [API 參考文檔](./api-reference.md) 了解詳細的 API 規範
|
||||
## 📚 相關文檔
|
||||
|
||||
- **[系統架構總覽](./system-overview.md)** - 了解整體架構設計理念和技術棧
|
||||
- **[組件詳細說明](./component-details.md)** - 深入了解各層組件的具體實現
|
||||
- **[API 參考文檔](./api-reference.md)** - 完整的 API 端點和參數說明
|
||||
- **[部署指南](./deployment-guide.md)** - 環境配置和部署最佳實踐
|
||||
|
||||
---
|
||||
|
||||
**版本**: 2.3.0
|
||||
**最後更新**: 2024年12月
|
||||
**維護者**: Minidoracat
|
||||
**架構類型**: Web-Only 四層架構
|
||||
**核心特性**: 持久化會話、智能環境適配、無縫狀態切換
|
||||
|
@ -4,68 +4,158 @@
|
||||
|
||||
MCP Feedback Enhanced 採用**單一活躍會話 + 持久化 Web UI**的創新架構設計,實現 AI 助手與用戶之間的高效、無縫交互體驗。
|
||||
|
||||
### 核心設計理念
|
||||
|
||||
- **Web-Only 架構**:完全基於 Web 技術,已移除所有 Electron 桌面應用功能
|
||||
- **四層架構設計**:清晰的層次分離,便於維護和擴展
|
||||
- **智能環境檢測**:自動識別本地、SSH Remote、WSL 環境並優化配置
|
||||
- **單一活躍會話**:替代傳統多會話管理,提升性能和用戶體驗
|
||||
- **模組化設計**:每層職責明確,支援獨立開發和測試
|
||||
|
||||
### 技術棧概覽
|
||||
|
||||
**後端技術**:
|
||||
- Python 3.11+ (核心語言)
|
||||
- FastMCP 2.0+ (MCP 協議實現)
|
||||
- FastAPI 0.115+ (Web 框架)
|
||||
- uvicorn 0.30+ (ASGI 服務器)
|
||||
- WebSocket (實時通信)
|
||||
|
||||
**前端技術**:
|
||||
- HTML5 + CSS3 (現代化 UI)
|
||||
- JavaScript ES6+ (模組化架構)
|
||||
- WebSocket API (雙向通信)
|
||||
- 響應式設計 (多設備支援)
|
||||
|
||||
**開發工具**:
|
||||
- pytest + pytest-asyncio (測試框架)
|
||||
- Ruff + mypy (代碼品質)
|
||||
- pre-commit (提交檢查)
|
||||
- uv (依賴管理)
|
||||
|
||||
### 系統整體架構圖
|
||||
|
||||
```mermaid
|
||||
graph TB
|
||||
subgraph "AI 助手環境"
|
||||
AI[AI 助手<br/>Claude/GPT等]
|
||||
AI[AI 助手<br/>Cursor/Claude/Windsurf/Augment]
|
||||
end
|
||||
|
||||
subgraph "MCP Feedback Enhanced"
|
||||
subgraph "MCP 服務層"
|
||||
MCP[MCP Server<br/>server.py]
|
||||
TOOL[interactive_feedback<br/>工具]
|
||||
subgraph "MCP Feedback Enhanced - 四層架構"
|
||||
subgraph "第一層:MCP 服務層"
|
||||
SERVER[server.py<br/>MCP 服務器]
|
||||
TOOL[interactive_feedback<br/>核心工具]
|
||||
I18N[i18n.py<br/>國際化支援]
|
||||
DEBUG[debug.py<br/>統一調試]
|
||||
end
|
||||
|
||||
subgraph "Web UI 管理層"
|
||||
WM[WebUIManager<br/>單例模式]
|
||||
SESSION[WebFeedbackSession<br/>會話管理]
|
||||
subgraph "第二層:Web UI 管理層"
|
||||
MANAGER[WebUIManager<br/>單例管理器]
|
||||
SESSION[WebFeedbackSession<br/>會話模型]
|
||||
MODELS[數據模型<br/>FeedbackResult/SessionStatus]
|
||||
end
|
||||
|
||||
subgraph "Web 服務層"
|
||||
API[FastAPI<br/>HTTP/WebSocket]
|
||||
subgraph "第三層:Web 服務層"
|
||||
FASTAPI[FastAPI 應用<br/>main.py]
|
||||
ROUTES[路由處理<br/>main_routes.py]
|
||||
WS[WebSocket 通信<br/>實時雙向通信]
|
||||
end
|
||||
|
||||
subgraph "前端交互層"
|
||||
UI[Web UI<br/>HTML/JS]
|
||||
WS[WebSocket<br/>實時通信]
|
||||
subgraph "第四層:前端交互層"
|
||||
HTML[HTML 模板<br/>feedback.html/index.html]
|
||||
JS[JavaScript 模組<br/>app.js + 功能模組]
|
||||
CSS[樣式系統<br/>響應式設計]
|
||||
end
|
||||
|
||||
subgraph "工具層"
|
||||
ENV[環境檢測]
|
||||
BROWSER[智能瀏覽器開啟]
|
||||
RESOURCE[資源管理]
|
||||
UTILS[工具模組<br/>error_handler/memory_monitor]
|
||||
BROWSER[瀏覽器控制<br/>智能開啟]
|
||||
NETWORK[網路工具<br/>埠管理]
|
||||
CLEANUP[資源管理<br/>會話清理]
|
||||
end
|
||||
end
|
||||
|
||||
subgraph "用戶環境"
|
||||
USER[用戶瀏覽器]
|
||||
FILES[專案文件]
|
||||
BROWSER_UI[Web 瀏覽器]
|
||||
USER[用戶互動<br/>文字/圖片/命令]
|
||||
end
|
||||
|
||||
AI -->|調用 MCP 工具| MCP
|
||||
MCP --> TOOL
|
||||
TOOL --> WM
|
||||
WM --> SESSION
|
||||
WM --> API
|
||||
API --> ROUTES
|
||||
ROUTES --> UI
|
||||
UI --> WS
|
||||
WS --> USER
|
||||
subgraph "運行環境"
|
||||
LOCAL[本地環境]
|
||||
SSH[SSH Remote]
|
||||
WSL[WSL 環境]
|
||||
end
|
||||
|
||||
ENV --> MCP
|
||||
BROWSER --> USER
|
||||
RESOURCE --> SESSION
|
||||
AI -->|MCP 協議| SERVER
|
||||
SERVER --> TOOL
|
||||
TOOL --> MANAGER
|
||||
MANAGER --> SESSION
|
||||
MANAGER --> FASTAPI
|
||||
FASTAPI --> ROUTES
|
||||
ROUTES --> HTML
|
||||
HTML --> JS
|
||||
JS --> WS
|
||||
WS -->|HTTP/WebSocket| BROWSER_UI
|
||||
BROWSER_UI --> USER
|
||||
|
||||
I18N --> ROUTES
|
||||
DEBUG --> SERVER
|
||||
UTILS --> MANAGER
|
||||
BROWSER --> FASTAPI
|
||||
NETWORK --> FASTAPI
|
||||
CLEANUP --> SESSION
|
||||
|
||||
LOCAL -.->|環境檢測| MANAGER
|
||||
SSH -.->|環境檢測| MANAGER
|
||||
WSL -.->|環境檢測| MANAGER
|
||||
|
||||
USER -->|回饋提交| WS
|
||||
FILES -->|專案內容| TOOL
|
||||
MODELS --> SESSION
|
||||
```
|
||||
|
||||
## 🎯 核心設計理念
|
||||
|
||||
### 1. 單一活躍會話模式
|
||||
### 1. Web-Only 架構優勢
|
||||
|
||||
**完全移除桌面應用依賴**:
|
||||
- 無需安裝 Electron 或其他桌面應用框架
|
||||
- 減少系統資源佔用和安全風險
|
||||
- 支援所有具備現代瀏覽器的環境
|
||||
- 簡化部署和維護流程
|
||||
|
||||
**跨平台統一體驗**:
|
||||
- Windows、macOS、Linux 完全一致的用戶介面
|
||||
- SSH Remote 和 WSL 環境無縫支援
|
||||
- 響應式設計適應不同螢幕尺寸
|
||||
- 無需平台特定的配置或調整
|
||||
|
||||
### 2. 四層架構設計
|
||||
|
||||
**第一層 - MCP 服務層**:
|
||||
- 實現 MCP 協議標準
|
||||
- 提供 `interactive_feedback` 核心工具
|
||||
- 統一的國際化和調試支援
|
||||
- 錯誤處理和日誌記錄
|
||||
|
||||
**第二層 - Web UI 管理層**:
|
||||
- 單例模式的 WebUIManager
|
||||
- 會話生命週期管理
|
||||
- 數據模型和狀態管理
|
||||
- 瀏覽器智能控制
|
||||
|
||||
**第三層 - Web 服務層**:
|
||||
- FastAPI 高性能 Web 框架
|
||||
- RESTful API 和 WebSocket 支援
|
||||
- 路由處理和中間件
|
||||
- 靜態資源服務
|
||||
|
||||
**第四層 - 前端交互層**:
|
||||
- 模組化 JavaScript 架構
|
||||
- 響應式 HTML/CSS 設計
|
||||
- 實時 WebSocket 通信
|
||||
- 豐富的用戶交互功能
|
||||
|
||||
### 3. 單一活躍會話模式
|
||||
```mermaid
|
||||
stateDiagram-v2
|
||||
[*] --> NoSession: 系統啟動
|
||||
@ -81,11 +171,33 @@ stateDiagram-v2
|
||||
end note
|
||||
```
|
||||
|
||||
### 2. 持久化 Web UI 架構
|
||||
- **瀏覽器標籤頁保持**: 避免重複開啟瀏覽器
|
||||
- **WebSocket 連接復用**: 減少連接建立開銷
|
||||
- **狀態無縫切換**: 從 SUBMITTED → WAITING
|
||||
- **內容局部更新**: 只更新必要的 UI 元素
|
||||
### 4. 持久化 Web UI 架構
|
||||
|
||||
**智能會話管理**:
|
||||
- **瀏覽器標籤頁保持**: 避免重複開啟瀏覽器視窗
|
||||
- **WebSocket 連接復用**: 減少連接建立開銷和延遲
|
||||
- **狀態無縫切換**: 從 SUBMITTED → WAITING 自動轉換
|
||||
- **內容局部更新**: 只更新必要的 UI 元素,保持用戶操作狀態
|
||||
|
||||
**會話持久性**:
|
||||
- 支援 AI 助手多次循環調用
|
||||
- 會話狀態在調用間保持
|
||||
- 自動超時清理機制
|
||||
- 記憶體使用優化
|
||||
|
||||
### 5. 國際化與本地化
|
||||
|
||||
**多語言支援**:
|
||||
- 繁體中文、簡體中文、英文
|
||||
- 系統語言自動檢測
|
||||
- 用戶偏好設定保存
|
||||
- 動態語言切換
|
||||
|
||||
**本地化特性**:
|
||||
- 文化適應的日期時間格式
|
||||
- 本地化的錯誤訊息
|
||||
- 地區特定的 UI 佈局
|
||||
- 字體和排版優化
|
||||
|
||||
### 3. 智能環境檢測
|
||||
```mermaid
|
||||
@ -106,7 +218,9 @@ flowchart TD
|
||||
|
||||
## 🔧 技術亮點
|
||||
|
||||
### 1. 創新的會話管理
|
||||
### 1. 創新的會話管理架構
|
||||
|
||||
**單一活躍會話設計**:
|
||||
```python
|
||||
# 傳統多會話設計 (已棄用)
|
||||
self.sessions: Dict[str, WebFeedbackSession] = {}
|
||||
@ -116,27 +230,113 @@ self.current_session: Optional[WebFeedbackSession] = None
|
||||
self.global_active_tabs: Dict[str, dict] = {} # 全局標籤頁狀態
|
||||
```
|
||||
|
||||
### 2. 智能瀏覽器開啟機制
|
||||
**會話生命週期管理**:
|
||||
- 自動會話創建和清理
|
||||
- 超時檢測和資源回收
|
||||
- 狀態持久化和恢復
|
||||
- 併發安全的會話操作
|
||||
|
||||
### 2. 智能環境檢測與適配
|
||||
|
||||
**環境自動識別**:
|
||||
- 本地開發環境檢測
|
||||
- SSH Remote 環境識別
|
||||
- WSL 子系統檢測
|
||||
- 容器化環境支援
|
||||
|
||||
**瀏覽器智能開啟**:
|
||||
- **活躍標籤頁檢測**: 避免重複開啟瀏覽器視窗
|
||||
- **跨平台支援**: Windows, macOS, Linux 自動適配
|
||||
- **環境感知**: SSH/WSL 環境特殊處理
|
||||
- **錯誤恢復**: 開啟失敗時的備用方案
|
||||
|
||||
### 3. 實時狀態同步
|
||||
- **WebSocket 雙向通信**: 前後端狀態實時同步
|
||||
### 3. 高性能實時通信
|
||||
|
||||
**WebSocket 雙向通信**:
|
||||
- 前後端狀態實時同步
|
||||
- 低延遲消息傳遞
|
||||
- 自動重連機制
|
||||
- 心跳檢測保持連接
|
||||
|
||||
**狀態管理優化**:
|
||||
- **會話更新通知**: 立即推送會話變更
|
||||
- **錯誤處理機制**: 連接斷線自動重連
|
||||
- **增量更新**: 只傳輸變更的數據
|
||||
- **狀態快照**: 支援狀態回滾和恢復
|
||||
- **錯誤處理**: 連接斷線自動重連
|
||||
|
||||
## 📊 性能特性
|
||||
### 4. 模組化前端架構
|
||||
|
||||
**JavaScript 模組系統**:
|
||||
```javascript
|
||||
// 模組化載入順序
|
||||
utils → tab-manager → websocket-manager →
|
||||
image-handler → settings-manager → ui-manager →
|
||||
auto-refresh-manager → app
|
||||
```
|
||||
|
||||
**功能模組分離**:
|
||||
- 標籤頁管理 (tab-manager.js)
|
||||
- WebSocket 通信 (websocket-manager.js)
|
||||
- 圖片處理 (image-handler.js)
|
||||
- 設定管理 (settings-manager.js)
|
||||
- UI 控制 (ui-manager.js)
|
||||
- 自動刷新 (auto-refresh-manager.js)
|
||||
|
||||
## 📊 性能特性與優化
|
||||
|
||||
### 資源使用優化
|
||||
- **內存佔用**: 單一會話模式減少 60% 內存使用
|
||||
|
||||
**記憶體管理**:
|
||||
- **單一會話模式**: 相比傳統多會話減少 60% 記憶體使用
|
||||
- **智能垃圾回收**: 自動清理過期會話和臨時資源
|
||||
- **記憶體監控**: 實時監控記憶體使用情況
|
||||
- **資源池化**: 重用常用對象減少分配開銷
|
||||
|
||||
**網路性能**:
|
||||
- **連接復用**: WebSocket 連接保持,減少建立開銷
|
||||
- **智能清理**: 自動資源回收和會話超時處理
|
||||
- **數據壓縮**: 自動壓縮大型數據傳輸
|
||||
- **批量操作**: 合併多個小請求減少網路往返
|
||||
- **快取策略**: 靜態資源和翻譯文件快取
|
||||
|
||||
**啟動性能**:
|
||||
- **延遲載入**: 按需載入 JavaScript 模組
|
||||
- **預載入優化**: 關鍵資源優先載入
|
||||
- **並行初始化**: 多個組件並行啟動
|
||||
- **快速響應**: 首屏渲染時間 < 500ms
|
||||
|
||||
### 用戶體驗提升
|
||||
|
||||
**交互響應性**:
|
||||
- **零等待切換**: 會話更新無需重新載入頁面
|
||||
- **即時反饋**: 用戶操作立即響應
|
||||
- **平滑動畫**: CSS3 動畫提升視覺體驗
|
||||
- **鍵盤快捷鍵**: 提升操作效率
|
||||
|
||||
**連續工作流程**:
|
||||
- **連續交互**: 支援 AI 助手多次循環調用
|
||||
- **視覺反饋**: 實時狀態指示和進度顯示
|
||||
- **狀態保持**: 用戶輸入和設定在會話間保持
|
||||
- **自動聚焦**: 新會話自動聚焦到輸入框
|
||||
- **智能預填**: 根據上下文預填常用內容
|
||||
|
||||
**視覺與反饋**:
|
||||
- **實時狀態指示**: 連接狀態、處理進度即時顯示
|
||||
- **進度條**: 長時間操作顯示進度
|
||||
- **錯誤提示**: 友善的錯誤訊息和解決建議
|
||||
- **成功確認**: 操作完成的明確視覺反饋
|
||||
|
||||
### 可靠性保證
|
||||
|
||||
**錯誤處理**:
|
||||
- **優雅降級**: 功能失效時提供備用方案
|
||||
- **自動重試**: 網路錯誤自動重試機制
|
||||
- **錯誤恢復**: 從錯誤狀態自動恢復
|
||||
- **日誌記錄**: 詳細的錯誤日誌便於調試
|
||||
|
||||
**穩定性措施**:
|
||||
- **超時保護**: 防止長時間無響應
|
||||
- **資源限制**: 防止資源耗盡
|
||||
- **併發控制**: 安全的多執行緒操作
|
||||
- **數據驗證**: 嚴格的輸入驗證和清理
|
||||
|
||||
## 🔄 核心工作流程
|
||||
|
||||
@ -173,6 +373,70 @@ graph LR
|
||||
style E fill:#e8f5e8
|
||||
```
|
||||
|
||||
## 🔍 安全性考量
|
||||
|
||||
### 數據安全
|
||||
|
||||
**輸入驗證**:
|
||||
- 嚴格的參數類型檢查
|
||||
- SQL 注入防護
|
||||
- XSS 攻擊防護
|
||||
- 文件上傳安全檢查
|
||||
|
||||
**網路安全**:
|
||||
- 本地綁定 (127.0.0.1) 減少攻擊面
|
||||
- WebSocket 連接驗證
|
||||
- CORS 政策控制
|
||||
- 安全標頭設定
|
||||
|
||||
**資源保護**:
|
||||
- 文件系統訪問限制
|
||||
- 記憶體使用限制
|
||||
- 執行時間限制
|
||||
- 臨時文件安全清理
|
||||
|
||||
## 🚀 部署與維護
|
||||
|
||||
### 環境需求
|
||||
|
||||
**最低系統需求**:
|
||||
- Python 3.11 或更高版本
|
||||
- 512MB 可用記憶體
|
||||
- 現代瀏覽器 (Chrome 90+, Firefox 88+, Safari 14+)
|
||||
- 網路連接 (本地環境可離線運行)
|
||||
|
||||
**推薦配置**:
|
||||
- Python 3.12
|
||||
- 1GB 可用記憶體
|
||||
- SSD 儲存
|
||||
- 穩定的網路連接
|
||||
|
||||
### 維護特性
|
||||
|
||||
**自動化維護**:
|
||||
- 自動日誌輪轉
|
||||
- 定期資源清理
|
||||
- 健康狀態檢查
|
||||
- 性能指標收集
|
||||
|
||||
**監控與診斷**:
|
||||
- 詳細的調試日誌
|
||||
- 性能指標追蹤
|
||||
- 錯誤統計分析
|
||||
- 系統資源監控
|
||||
|
||||
---
|
||||
|
||||
**下一步**: 查看 [組件詳細說明](./component-details.md) 了解各組件的具體實現
|
||||
## 📚 相關文檔
|
||||
|
||||
- **[組件詳細說明](./component-details.md)** - 深入了解各層組件的具體實現
|
||||
- **[交互流程文檔](./interaction-flows.md)** - 詳細的用戶交互和系統流程
|
||||
- **[API 參考文檔](./api-reference.md)** - 完整的 API 端點和參數說明
|
||||
- **[部署指南](./deployment-guide.md)** - 環境配置和部署最佳實踐
|
||||
|
||||
---
|
||||
|
||||
**版本**: 2.3.0
|
||||
**最後更新**: 2024年12月
|
||||
**維護者**: Minidoracat
|
||||
**架構類型**: Web-Only 四層架構
|
||||
|
Loading…
x
Reference in New Issue
Block a user