diff --git a/README.md b/README.md
index 5effcb969078733a195ceff257022b93590e2011..aa50b91ecd6ca35e02731095a9f4f0d053d258f2 100644
--- a/README.md
+++ b/README.md
@@ -1,51 +1,88 @@
# openEuler Intelligence Smart Shell
-这是一个基于 Python Textual 库开发的 TUI(文本用户界面)应用程序。它允许用户输入命令,验证并执行这些命令。如果命令无法执行,应用程序会与大型语言模型交互,生成建议或纠正方案。
+一个基于 Python Textual 构建的智能终端应用程序,提供 AI 驱动的命令行交互体验。支持多种 LLM 后端,集成 MCP 协议,提供现代化的 TUI 界面。
-## 功能特点
+## 核心特性
-- 用户友好的命令输入和输出显示界面
-- 命令验证和执行支持
-- 集成大型语言模型提供智能命令建议
-- 提供本地或在线模型服务集成选项
-- 完整的日志记录功能,支持问题诊断和性能监控
+- **多后端支持**: 支持 OpenAI API 和 openEuler Intelligence(Hermes)后端
+- **智能终端界面**: 基于 Textual 的现代化 TUI 界面
+- **流式响应**: 实时显示 AI 回复内容
+- **会话管理**: 完整的对话历史管理功能
+- **部署助手**: 内置 openEuler Intelligence 自动部署功能
+- **配置管理**: 灵活的配置文件管理系统
+- **日志系统**: 完善的日志记录和管理功能
## 项目结构
```text
-euler-copilot-shell/
-├── README.md # 项目文档
-├── requirements.txt # 项目依赖
-└── src
- ├── app
- | ├── css
- │ │ └── styles.tcss # TUI 样式配置
+smart-shell/
+├── README.md # 项目说明文档
+├── requirements.txt # Python 依赖包列表
+├── setup.py # 包安装配置文件
+├── MANIFEST.in # 包文件清单
+├── LICENSE # 开源许可证
+├── distribution/ # 发布相关文件
+├── docs/ # 项目文档目录
+│ └── development/ # 开发设计文档
+│ └── server-side/ # 服务端相关文档
+├── scripts/ # 部署脚本目录
+│ └── deploy/ # 自动化部署脚本
+├── tests/ # 测试文件目录
+└── src/ # 源代码目录
+ ├── main.py # 应用程序入口点
+ ├── app/ # TUI 应用模块
│ ├── __init__.py
- │ ├── settings.py # 设置界面逻辑
- │ └── tui.py # 主界面布局和组件定义
- ├── backend
- │ ├── hermes
+ │ ├── tui.py # 主界面应用类
+ │ ├── mcp_widgets.py # MCP 交互组件
+ │ ├── tui_mcp_handler.py # MCP 事件处理器
+ │ ├── settings.py # 设置界面
+ │ ├── css/
+ │ │ └── styles.tcss # TUI 样式文件
+ │ ├── deployment/ # 部署助手模块
│ │ ├── __init__.py
- │ │ └── client.py # Hermes API 客户端
+ │ │ ├── models.py # 部署配置模型
+ │ │ ├── service.py # 部署服务逻辑
+ │ │ ├── ui.py # 部署界面组件
+ │ │ └── validators.py # 配置验证器
+ │ └── dialogs/ # 对话框组件
+ │ ├── __init__.py
+ │ ├── agent.py # 智能体选择对话框
+ │ └── common.py # 通用对话框组件
+ ├── backend/ # 后端适配模块
│ ├── __init__.py
│ ├── base.py # 后端客户端基类
│ ├── factory.py # 后端工厂类
- │ └── openai.py # OpenAI API 客户端
- ├── config
+ │ ├── mcp_handler.py # MCP 事件处理接口
+ │ ├── openai.py # OpenAI 兼容客户端
+ │ └── hermes/ # openEuler Intelligence 客户端
+ │ ├── __init__.py
+ │ ├── client.py # Hermes API 客户端
+ │ ├── constants.py # 常量定义
+ │ ├── exceptions.py # 异常类定义
+ │ ├── models.py # 数据模型
+ │ ├── stream.py # 流式响应处理
+ │ └── services/ # 服务层组件
+ │ ├── agent.py # 智能体服务
+ │ ├── conversation.py # 对话管理服务
+ │ ├── http.py # HTTP 请求服务
+ │ └── model.py # 模型管理服务
+ ├── config/ # 配置管理模块
│ ├── __init__.py
- │ ├── manager.py # 配置管理
- │ └── model.py # 配置模型定义
- ├── log
+ │ ├── manager.py # 配置管理器
+ │ └── model.py # 配置数据模型
+ ├── log/ # 日志管理模块
│ ├── __init__.py
│ └── manager.py # 日志管理器
- ├── main.py # TUI 应用程序入口点
- └── tool
+ └── tool/ # 工具模块
├── __init__.py
- └── command_processor.py # 命令验证和执行逻辑
+ ├── command_processor.py # 命令处理器
+ └── oi_backend_init.py # 后端初始化工具
```
## 安装说明
+### 方式一:从源码安装(推荐开发者)
+
1. 克隆仓库:
```sh
@@ -59,6 +96,14 @@ euler-copilot-shell/
pip install -r requirements.txt
```
+### 方式二:使用 pip 安装
+
+```sh
+pip install -e .
+```
+
+安装完成后,可以使用 `oi` 命令启动应用程序。
+
## 使用方法
直接运行应用程序:
@@ -67,20 +112,55 @@ euler-copilot-shell/
python src/main.py
```
+或者使用 pip 安装后:
+
+```sh
+oi
+```
+
查看最新的日志内容:
```sh
python src/main.py --logs
+# 或安装后使用
+oi --logs
+```
+
+设置日志级别并验证:
+
+```sh
+python src/main.py --log-level DEBUG
+# 或安装后使用
+oi --log-level INFO
```
初始化 openEuler Intelligence 后端(仅支持 openEuler 操作系统):
```sh
python src/main.py --init
+# 或安装后使用
+oi --init
```
应用启动后,您可以直接在输入框中输入命令。如果命令无效或无法执行,应用程序将基于您的输入提供智能建议。
+### 界面操作快捷键
+
+- **Ctrl+S**: 打开设置界面
+- **Ctrl+R**: 重置对话历史
+- **Ctrl+T**: 选择智能体
+- **Tab**: 在命令输入框和输出区域之间切换焦点
+- **Esc**: 退出应用程序
+
+### MCP 工具交互
+
+当使用支持 MCP (Model Context Protocol) 的后端时,应用程序会在需要工具确认或参数输入时:
+
+1. **工具执行确认**: 显示工具名称、风险级别和执行原因,用户可选择确认或取消
+2. **参数补全**: 动态生成参数输入表单,用户填写必要信息后提交
+
+应用程序使用内联交互模式,不会打开模态对话框,确保流畅的用户体验。
+
### --init 命令详细说明
`--init` 命令用于在 openEuler 操作系统上自动安装和配置 openEuler Intelligence 后端,它将执行以下步骤:
@@ -98,20 +178,58 @@ python src/main.py --init
**注意**: 此命令会自动安装系统服务,请在生产环境使用前仔细评估。
-## 大型语言模型集成
+### 自动部署助手
+
+应用程序内置了 TUI 部署助手,支持在 openEuler 系统上一键部署 openEuler Intelligence 后端:
+
+1. **系统环境检查**: 自动验证 openEuler 系统和权限
+2. **配置文件生成**: 根据用户输入自动生成配置文件
+3. **服务部署**: 支持 Web 界面和 RAG 功能的可选部署
+4. **实时进度显示**: 提供详细的部署日志和进度反馈
+
+该功能通过 `app.deployment` 模块实现,包含完整的配置验证和部署流程管理。
+
+## 配置说明
+
+应用程序支持两种后端配置,配置文件会自动保存在 `~/.config/eulerintelli/smart-shell.json`:
+
+### 后端类型
+
+1. **OpenAI 兼容 API** (包括 LM Studio、vLLM、Ollama 等)
+2. **openEuler Intelligence (Hermes)**
+
+### 配置示例
+
+首次运行时,可通过设置界面 (Ctrl+S) 配置以下参数:
-该应用程序利用大型语言模型(LLM)增强用户体验,提供智能命令建议。集成在 `backend/openai.py` 文件中处理,该文件与 OpenAI 兼容的 API 通信以获取基于用户输入的建议。应用支持配置不同的后端和模型。
+**OpenAI 兼容 API 配置:**
-## 配置设置
+- Base URL: 如 `http://localhost:1234/v1`
+- Model: 如 `qwen/qwen3-30b-a3b`
+- API Key: 如 `lm-studio`
-您可以通过应用内的设置界面(按 Ctrl+S)配置以下选项:
+**openEuler Intelligence 配置:**
-- 后端类型: OpenAI 或 Hermes
-- API 基础 URL
-- API 密钥
-- 模型选择(OpenAI 后端)
+- Base URL: 如 `http://your-server:8000`
+- API Key: 您的认证令牌
-配置会保存在`~/.config/eulerintelli/smart-shell.json`。
+### 智能体管理
+
+对于 openEuler Intelligence 后端,应用程序支持多智能体切换:
+
+1. **默认智能问答**: 通用 AI 助手
+2. **专业智能体**: 针对特定领域的专门助手
+
+使用 `Ctrl+T` 可以在运行时切换不同的智能体。
+
+### 日志配置
+
+应用程序提供多级日志记录:
+
+- **DEBUG**: 详细调试信息
+- **INFO**: 基本信息(默认)
+- **WARNING**: 警告信息
+- **ERROR**: 仅错误信息
## 日志功能
@@ -127,24 +245,136 @@ python src/main.py --init
- 异常和错误信息
- 模块级别的操作日志
+## 系统要求
+
+### 基本要求
+
+- **Python**: 3.9 或更高版本
+- **操作系统**: openEuler 24.03 LTS 或更高版本
+- **网络**: 访问配置的 LLM API 服务
+
+### 依赖包
+
+核心依赖(会自动安装):
+
+- **textual**: >=3.0.0 - TUI 界面框架
+- **rich**: >=14.1.0 - 富文本渲染
+- **httpx**: >=0.28.0 - HTTP 客户端
+- **openai**: >=1.97.0 - OpenAI API 客户端
+
+### 特殊功能要求
+
+**自动部署功能(`--init` 命令)**:
+
+- 仅支持 openEuler 操作系统
+- 需要管理员权限(sudo)
+- 需要 dnf 包管理器
+- 需要网络连接
+
+## 详细日志功能
+
+应用程序提供详细的日志记录功能,包括:
+
+- **操作日志**: 用户交互和系统状态
+- **性能监控**: 请求响应时间和系统资源使用
+- **错误追踪**: 异常和错误的详细堆栈信息
+- **API请求详情**: URL、状态码、耗时等
+- **异常和错误信息**: 完整的错误上下文
+- **模块级别的操作日志**: 各组件的运行状态
+
日志文件同时输出到控制台和文件,便于开发调试和生产环境监控。详细说明请参考 [日志功能文档](docs/development/日志功能说明.md)。
-## RPM打包
+## RPM 打包
我们提供了一个 spec 文件,可以使用 PyInstaller 打包并生成 RPM 包:
```sh
# 创建源代码归档
-tar czf euler-copilot-shell-0.9.6.tar.gz --transform 's,^smart-shell,euler-copilot-shell-0.9.6,' smart-shell
+tar czf euler-copilot-shell-0.10.0.tar.gz --transform 's,^smart-shell,euler-copilot-shell-0.10.0,' smart-shell
# 构建RPM包(需要已安装rpm-build工具)
-rpmbuild -ba euler-copilot-shell.spec
+rpmbuild -ba distribution/linux/euler-copilot-shell.spec
```
+## 高级功能
+
+### MCP (Model Context Protocol) 支持
+
+应用程序完整支持 Model Context Protocol,提供工具集成和交互功能:
+
+**特性**:
+
+- **内联工具确认**: 工具执行前的风险评估和确认界面
+- **动态参数收集**: 根据工具需求自动生成参数输入表单
+- **流式工具响应**: 实时显示工具执行结果
+- **事件驱动架构**: 完整的 MCP 事件处理流程
+
+**技术实现**:
+
+- `app.mcp_widgets`: MCP 交互组件
+- `app.tui_mcp_handler`: TUI MCP 事件处理器
+- `backend.mcp_handler`: MCP 事件处理器接口
+- 完整的 SSE (Server-Sent Events) 支持
+
+### 部署助手
+
+内置的可视化部署助手支持:
+
+**功能**:
+
+- **环境检测**: 自动检测 openEuler 系统和依赖
+- **配置验证**: LLM 和 Embedding API 连接性验证
+- **组件选择**: Web 界面和 RAG 功能的可选部署
+- **实时监控**: 部署过程的实时日志和进度显示
+
+**模块结构**:
+
+- `app.deployment.models`: 部署配置数据模型
+- `app.deployment.service`: 部署服务逻辑
+- `app.deployment.ui`: 部署界面组件
+- `app.deployment.validators`: 配置验证器
+
+### 多后端架构
+
+应用程序采用插件化的后端架构:
+
+**后端支持**:
+
+- **OpenAI 兼容**: 支持所有 OpenAI API 兼容的服务
+- **Hermes**: 专为 openEuler Intelligence 优化的后端
+- **可扩展**: 基于 `backend.base.LLMClientBase` 可轻松添加新后端
+
+**核心组件**:
+
+- `backend.factory`: 后端工厂类
+- `backend.openai`: OpenAI 兼容客户端
+- `backend.hermes`: Hermes 客户端实现
+
## 贡献
欢迎贡献代码!请随时提交 PR 或开启问题讨论任何功能增强或错误修复建议。
-## 许可证
+## 版本信息
+
+- **当前版本**: 0.10.0
+- **Python 要求**: >=3.9
+- **许可证**: MulanPSL-2.0
+
+## 相关文档
+
+### 开发文档
+
+- [项目整体设计](docs/development/项目整体设计.md) - 系统架构和整体设计方案
+- [TUI应用模块设计](docs/development/TUI应用模块设计.md) - 用户界面模块设计
+- [后端适配模块设计](docs/development/后端适配模块设计.md) - 多后端支持架构
+- [部署助手模块设计](docs/development/部署助手模块设计.md) - 自动部署功能设计
+- [配置管理模块设计](docs/development/配置管理模块设计.md) - 配置管理系统设计
+- [日志管理模块设计](docs/development/日志管理模块设计.md) - 日志记录系统设计
+
+### 部署文档
+
+- [安装部署手册](scripts/deploy/安装部署手册.md) - 详细的部署指南
+
+## 开源许可
-本项目采用木兰宽松许可证第2版(MulanPSL-2.0)。详情请参阅 LICENSE 文件。
+本项目采用 MulanPSL-2.0 许可证。详细信息请参见 [LICENSE](LICENSE) 文件。
diff --git "a/docs/development/\351\241\271\347\233\256\346\225\264\344\275\223\350\256\276\350\256\241.md" "b/docs/development/\351\241\271\347\233\256\346\225\264\344\275\223\350\256\276\350\256\241.md"
new file mode 100644
index 0000000000000000000000000000000000000000..da420a84462eb3def5fe45ea8dbc34ed406cf770
--- /dev/null
+++ "b/docs/development/\351\241\271\347\233\256\346\225\264\344\275\223\350\256\276\350\256\241.md"
@@ -0,0 +1,429 @@
+# openEuler Intelligence Smart Shell 项目整体设计
+
+## 方案设计
+
+### 整体方案设计
+
+openEuler Intelligence Smart Shell 是一个基于 Python Textual 框架的智能终端应用,采用插件化架构支持多 LLM 后端,提供命令验证、自然语言处理和 MCP 工具集成功能。
+
+#### 系统架构
+
+```mermaid
+graph TB
+ subgraph "用户界面层"
+ A[TUI 主界面
IntelligentTerminal]
+ B[MCP 交互组件
MCPConfirmWidget
MCPParameterWidget]
+ C[设置界面
SettingsScreen]
+ D[部署助手
DeploymentService]
+ end
+
+ subgraph "应用逻辑层"
+ E[命令处理器
process_command]
+ F{命令类型判断}
+ G[系统命令执行
execute_command]
+ H[后端路由
BackendFactory]
+ end
+
+ subgraph "后端适配层"
+ I[LLM 客户端基类
LLMClientBase]
+ J[OpenAI 客户端
OpenAIClient]
+ K[Hermes 客户端
HermesChatClient]
+ L[MCP 事件处理器
MCPEventHandler]
+ end
+
+ subgraph "基础设施层"
+ M[配置管理
ConfigManager]
+ N[日志管理
LogManager]
+ O[流式处理
HermesStreamProcessor]
+ end
+
+ A --> E
+ B --> L
+ C --> M
+ D --> DeploymentResourceManager
+ E --> F
+ F -->|系统命令| G
+ F -->|自然语言| H
+ H --> I
+ I --> J
+ I --> K
+ K --> L
+ K --> O
+ M --> H
+ N --> E
+```
+
+#### 核心模块
+
+1. **TUI 应用模块** (`app/`)
+ - 基于 Textual 的主界面和交互组件
+ - MCP 工具确认和参数输入界面
+ - 部署助手界面和设置管理
+ - 事件驱动的消息处理机制
+
+2. **后端适配模块** (`backend/`)
+ - 抽象基类 `LLMClientBase` 定义统一接口
+ - `OpenAIClient` 支持 OpenAI 兼容 API
+ - `HermesChatClient` 专用于 openEuler Intelligence
+ - MCP 事件处理和流式响应解析
+
+3. **工具处理模块** (`tool/`)
+ - 命令安全性验证和系统命令执行
+ - 智能化命令建议和错误处理
+
+4. **基础设施模块**
+ - 配置持久化存储和动态更新
+ - 结构化日志记录和异常追踪
+
+#### 设计原则
+
+- **插件化架构**: 工厂模式实现后端无缝切换
+- **事件驱动**: Textual 消息系统处理异步 UI 交互
+- **流式优先**: 实时显示 LLM 响应内容
+- **配置驱动**: 运行时动态配置和热重载
+
+### 详细设计
+
+#### 类图设计
+
+```mermaid
+classDiagram
+ class LLMClientBase {
+ <>
+ +get_llm_response(prompt: str) AsyncGenerator[str, None]
+ +get_available_models() list[str]
+ +reset_conversation() None
+ +close() None
+ }
+
+ class OpenAIClient {
+ -base_url: str
+ -model: str
+ -api_key: str
+ +get_llm_response(prompt: str) AsyncGenerator[str, None]
+ }
+
+ class HermesChatClient {
+ -http_manager: HermesHttpManager
+ -current_agent_id: str
+ -mcp_handler: MCPEventHandler
+ +get_llm_response(prompt: str) AsyncGenerator[str, None]
+ +get_available_agents() list[HermesAgent]
+ +send_mcp_response(task_id: str, params: bool|dict) AsyncGenerator[str, None]
+ +set_mcp_handler(handler: MCPEventHandler) None
+ }
+
+ class BackendFactory {
+ <>
+ +create_client(config_manager: ConfigManager) LLMClientBase
+ }
+
+ class IntelligentTerminal {
+ -processing: bool
+ -llm_client: LLMClientBase
+ -mcp_mode: str
+ +handle_input(event: Input.Submitted) None
+ +get_llm_client() LLMClientBase
+ +action_settings() None
+ +action_reset_conversation() None
+ }
+
+ class ConfigManager {
+ -data: ConfigModel
+ -config_path: Path
+ +get_backend() Backend
+ +set_backend(backend: Backend) None
+ +get_base_url() str
+ +set_base_url(url: str) None
+ }
+
+ LLMClientBase <|-- OpenAIClient
+ LLMClientBase <|-- HermesChatClient
+ BackendFactory ..> LLMClientBase
+ IntelligentTerminal --> LLMClientBase
+ IntelligentTerminal --> ConfigManager
+ BackendFactory --> ConfigManager
+```
+
+#### 配置数据模型
+
+```mermaid
+classDiagram
+ class ConfigModel {
+ +backend: Backend
+ +openai: OpenAIConfig
+ +eulerintelli: EulerIntelliConfig
+ +log_level: LogLevel
+ +to_dict() dict
+ +from_dict(data: dict) ConfigModel
+ }
+
+ class OpenAIConfig {
+ +base_url: str
+ +model: str
+ +api_key: str
+ }
+
+ class EulerIntelliConfig {
+ +base_url: str
+ +api_key: str
+ }
+
+ class Backend {
+ <>
+ OPENAI
+ EULERINTELLI
+ }
+
+ class LogLevel {
+ <>
+ DEBUG
+ INFO
+ WARNING
+ ERROR
+ }
+
+ ConfigModel --> OpenAIConfig
+ ConfigModel --> EulerIntelliConfig
+ ConfigModel --> Backend
+ ConfigModel --> LogLevel
+```
+
+配置文件位置: `~/.config/eulerintelli/smart-shell.json`
+
+#### 命令处理流程
+
+```mermaid
+flowchart TD
+ A[用户输入命令] --> B{检查命令类型}
+ B -->|系统命令| C[检查命令是否存在于PATH]
+ B -->|自然语言| D[直接发送给LLM]
+
+ C -->|存在| E{安全性检查}
+ C -->|不存在| D
+
+ E -->|安全| F[执行系统命令]
+ E -->|不安全| G[阻止执行并提示]
+
+ F -->|成功| H[显示命令输出]
+ F -->|失败| I[将错误发送给LLM]
+
+ D --> J[LLM 流式响应]
+ I --> J
+ J --> K[显示 Markdown 格式回答]
+
+ H --> L[等待下次输入]
+ K --> L
+ G --> L
+```
+
+#### MCP 工具集成时序图
+
+```mermaid
+sequenceDiagram
+ participant U as 用户
+ participant TUI as IntelligentTerminal
+ participant H as HermesChatClient
+ participant SP as HermesStreamProcessor
+ participant MCP as MCPEventHandler
+ participant S as openEuler Intelligence
+
+ U->>TUI: 输入需要工具的问题
+ TUI->>H: get_llm_response(prompt)
+ H->>S: POST /api/chat
+
+ Note over S: 服务端分析需要调用工具
+
+ S-->>H: SSE: step.waiting_for_start
+ H->>SP: 解析事件
+ SP->>MCP: handle_waiting_for_start
+ MCP->>TUI: SwitchToMCPConfirm 消息
+ TUI->>TUI: 切换到确认界面
+
+ U->>TUI: 确认执行工具
+ TUI->>H: send_mcp_response(task_id, true)
+ H->>S: POST /api/chat (taskId, confirmed)
+
+ Note over S: 执行工具并获取结果
+
+ S-->>H: SSE: 流式文本响应
+ H->>TUI: 逐步显示结果
+ TUI->>TUI: 恢复正常输入界面
+```
+
+#### 部署助手架构设计
+
+```mermaid
+flowchart TD
+ A[用户配置输入] --> B[DeploymentService]
+ B --> C[检查系统环境]
+
+ C --> D{openEuler 系统?}
+ D -->|否| E[部署失败]
+ D -->|是| F[检查安装器资源]
+
+ F --> G{资源完整?}
+ G -->|否| H[提示安装 RPM 包]
+ G -->|是| I[检查管理员权限]
+
+ I --> J{有权限?}
+ J -->|否| K[权限错误]
+ J -->|是| L[DeploymentResourceManager]
+
+ L --> M[更新 env 配置]
+ L --> N[更新 config.toml]
+ L --> O[设置部署模式]
+
+ M --> P[执行部署脚本]
+ N --> P
+ O --> P
+
+ P --> Q[实时监控部署进度]
+ Q --> R[部署完成]
+
+ subgraph "配置验证器"
+ S[LLM 连接验证]
+ T[Embedding 配置验证]
+ U[系统环境验证]
+ end
+
+ A --> S
+ A --> T
+ A --> U
+```
+
+#### 核心交互流程
+
+```mermaid
+stateDiagram-v2
+ [*] --> Normal: 应用启动
+
+ Normal --> ProcessingCommand: 用户输入
+ ProcessingCommand --> SystemCommand: 检测到系统命令
+ ProcessingCommand --> LLMQuery: 检测到自然语言
+ ProcessingCommand --> MCPInteraction: LLM 需要工具
+
+ SystemCommand --> CommandSafe: 安全检查
+ CommandSafe --> ExecuteCommand: 通过检查
+ CommandSafe --> BlockCommand: 不安全命令
+ ExecuteCommand --> Normal: 执行完成
+ BlockCommand --> Normal: 显示警告
+
+ LLMQuery --> StreamResponse: LLM 流式响应
+ StreamResponse --> Normal: 响应完成
+
+ MCPInteraction --> MCPConfirm: 等待用户确认
+ MCPInteraction --> MCPParameter: 等待参数输入
+ MCPConfirm --> MCPExecute: 用户确认
+ MCPConfirm --> Normal: 用户取消
+ MCPParameter --> MCPExecute: 参数提供
+ MCPParameter --> Normal: 用户取消
+ MCPExecute --> StreamResponse: 工具执行结果
+
+ Normal --> [*]: 应用退出
+```
+
+#### 流式数据处理
+
+```mermaid
+flowchart TD
+ A[服务端 SSE 流] --> B[HermesStreamEvent]
+ B --> C{事件类型解析}
+
+ C -->|text.delta| D[累积文本内容]
+ C -->|step.waiting_for_start| E[触发确认界面]
+ C -->|step.waiting_for_param| F[触发参数界面]
+ C -->|step.running| G[显示工具状态]
+ C -->|error| H[显示错误信息]
+
+ D --> I[MarkdownOutputLine]
+ E --> J[MCPConfirmWidget]
+ F --> K[MCPParameterWidget]
+ G --> L[OutputLine]
+ H --> L
+
+ I --> M[实时 UI 更新]
+ J --> N[用户交互响应]
+ K --> N
+ L --> M
+
+ N --> O[send_mcp_response]
+ O --> A
+```
+
+#### 部署流程状态机
+
+```mermaid
+stateDiagram-v2
+ [*] --> CheckEnvironment: 开始部署
+
+ CheckEnvironment --> CheckOS: 检查操作系统
+ CheckOS --> CheckInstaller: openEuler 系统
+ CheckOS --> Failed: 非 openEuler 系统
+
+ CheckInstaller --> CheckPermission: 安装器资源可用
+ CheckInstaller --> Failed: 缺少安装器
+
+ CheckPermission --> GenerateConfig: 有管理员权限
+ CheckPermission --> Failed: 权限不足
+
+ GenerateConfig --> UpdateEnv: 开始配置生成
+ UpdateEnv --> UpdateToml: env 文件更新完成
+ UpdateToml --> SetupMode: config.toml 更新完成
+
+ SetupMode --> RunDeploy: 部署模式设置完成
+ RunDeploy --> MonitorProgress: 开始执行脚本
+
+ MonitorProgress --> Success: 部署脚本成功
+ MonitorProgress --> Failed: 部署脚本失败
+
+ Success --> [*]
+ Failed --> [*]
+```
+
+#### 关键数据结构
+
+```mermaid
+classDiagram
+ class HermesStreamEvent {
+ +event_type: str
+ +step_name: str
+ +content: dict
+ +get_text_content() str
+ +get_step_name() str
+ +get_task_id() str
+ +from_line(line: str) HermesStreamEvent
+ }
+
+ class DeploymentConfig {
+ +server_ip: str
+ +enable_web: bool
+ +enable_rag: bool
+ +llm: LLMConfig
+ +embedding: EmbeddingConfig
+ +deployment_mode: str
+ }
+
+ class DeploymentState {
+ +is_running: bool
+ +is_completed: bool
+ +is_failed: bool
+ +current_step: int
+ +total_steps: int
+ +current_step_name: str
+ +logs: list[str]
+ +error_message: str
+ +add_log(message: str) None
+ +reset() None
+ }
+
+ class MCPConfirmResult {
+ +task_id: str
+ +confirmed: bool
+ }
+
+ class MCPParameterResult {
+ +task_id: str
+ +params: dict|None
+ }
+```