From 0cb7e134a2c94856307df761a6fe7db20cabde06 Mon Sep 17 00:00:00 2001 From: Hongyu Shi Date: Fri, 8 Aug 2025 15:52:00 +0800 Subject: [PATCH 1/2] docs: update README.md Signed-off-by: Hongyu Shi --- README.md | 312 +++++++++++++++++++++++++++++++++++++++++++++++------- 1 file changed, 271 insertions(+), 41 deletions(-) diff --git a/README.md b/README.md index 5effcb9..aa50b91 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) 文件。 -- Gitee From e2078e56345f68851650eed02ad612e39ac06651 Mon Sep 17 00:00:00 2001 From: Hongyu Shi Date: Fri, 8 Aug 2025 15:53:33 +0800 Subject: [PATCH 2/2] docs: add top-level design doc Signed-off-by: Hongyu Shi --- ...64\344\275\223\350\256\276\350\256\241.md" | 429 ++++++++++++++++++ 1 file changed, 429 insertions(+) create mode 100644 "docs/development/\351\241\271\347\233\256\346\225\264\344\275\223\350\256\276\350\256\241.md" 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 0000000..da420a8 --- /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 + } +``` -- Gitee