feat: 更新模块文档,添加详细说明和使用示例

This commit is contained in:
锦麟 王
2026-02-05 15:43:08 +08:00
parent 23bf2cfaef
commit 64dc18f477
37 changed files with 1252 additions and 168 deletions

View File

@@ -1,6 +1,36 @@
"""Web TUI 模块
"""Web TUI 模块 - Web 管理界面
提供 Web 终端界面、SSH 连接管理
本模块提供基于 Web 终端管理界面:
认证管理 (auth):
- AuthManager: 认证管理器
- AuthToken: 认证令牌
- 支持 JWT 令牌认证
- 令牌刷新和撤销
SSH 管理 (ssh_manager):
- SSHManager: SSH 连接管理器
- SSHSession: SSH 会话封装
- 支持多会话管理
- WebSocket 实时终端
Web 服务 (server):
- FastAPI 应用
- 静态文件服务
- WebSocket 终端
- RESTful API
使用示例:
>>> from minenasai.webtui import get_auth_manager
>>>
>>> # 获取认证管理器
>>> auth = get_auth_manager()
>>>
>>> # 生成令牌
>>> token = auth.generate_token(user_id="admin")
>>>
>>> # 验证令牌
>>> user_info = auth.verify_token(token.token)
"""
from minenasai.webtui.auth import AuthManager, AuthToken, get_auth_manager

View File

@@ -7,13 +7,14 @@ from __future__ import annotations
import asyncio
import uuid
from collections.abc import AsyncGenerator
from contextlib import asynccontextmanager
from pathlib import Path
from typing import Any, AsyncGenerator
from typing import Any
from fastapi import FastAPI, WebSocket, WebSocketDisconnect
from fastapi.middleware.cors import CORSMiddleware
from fastapi.responses import FileResponse, HTMLResponse
from fastapi.responses import HTMLResponse
from fastapi.staticfiles import StaticFiles
from minenasai.core import get_logger, get_settings, setup_logging
@@ -95,8 +96,12 @@ manager = ConnectionManager()
@asynccontextmanager
async def lifespan(app: FastAPI) -> AsyncGenerator[None, None]:
"""应用生命周期管理"""
async def lifespan(_app: FastAPI) -> AsyncGenerator[None, None]:
"""应用生命周期管理
Args:
_app: FastAPI 应用实例lifespan 标准签名要求)
"""
settings = get_settings()
setup_logging(settings.logging)
logger.info("Web TUI 服务启动", port=settings.webtui.port)

View File

@@ -6,10 +6,11 @@
from __future__ import annotations
import asyncio
import contextlib
import os
import time
from pathlib import Path
from typing import Any, Callable
from collections.abc import Callable
from typing import Any
import paramiko
@@ -128,10 +129,8 @@ class SSHSession:
if self._read_task:
self._read_task.cancel()
try:
with contextlib.suppress(asyncio.CancelledError):
await self._read_task
except asyncio.CancelledError:
pass
if self.channel:
self.channel.close()