4a989bf50fcfff53ecabb5aa3223c1aa93a114fe
后端: - 新增 /api/system/ws WebSocket端点 替代HTTP轮询 (每2s推送系统+框架数据) - 修复 uptime始终为0 (sm.start_time时间戳) - 网络采集新增TX上行+实时网速(delta法) - 进程内存采集 (/proc/self/status VmRSS) - 抑制aiohttp内部WS帧日志防刷爆日志文件 前端: - 仪表盘: HTTP轮询→WS连接+指数退避自动重连 - 实时日志: 修复onclose重连bug+批量渲染30fps+500行上限防卡死 - 网速卡片: DualLineChart双线图(下行实线/上行虚线) - Y轴零点偏移-5% 防止零网速贴底 - 所有按钮修复MD3组合类(btn+btn-tonal+btn-sm) - 页面加载器: 改动态script元素执行 修复onclick全局作用域问题 - emoji图标→Material Design SVG图标 - CSS去残留</style>+新增.nav-item svg约束 - 登录页输入框+标签左对齐+按钮MD3样式 - 多个版本号显示修复(去双重v前缀) - chart.js/app.js/HTML页面统一加版本号防浏览器缓存 - .gitignore新增docs/目录 Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
🐱 SenSu
万能 Python TUI 项目管理器 — 插件化架构,任何项目都能挂载运行。
✨ 特性
- 🎨 Textual TUI — 系统监控面板 + 命令补全 + CLI 回退
- 🔌 插件系统 — 热加载、权限隔离、依赖解析、进程隔离
- 🗄️ 项目引擎 — 接管任何 Python/命令行项目 (subprocess + 日志 + stdin)
- 🔀 反向代理 — HTTP/WS 代理,本地/局域网/公网端口映射
- 📊 SQLite 持久化 — 插件状态、权限、审计日志统一存储
- 🌐 Web 管理面板 — aiohttp + SSE,项目管理/代理/插件控制页
- 🔐 安全认证 — PBKDF2-SHA256、环境变量密码
- 🐳 Docker 部署 — Alpine 镜像,systemd 服务文件
- 🧪 28 个回归测试 — pytest,零失败
- 🛠️ 插件 SDK — 命令装饰器 + Web 面板 + API + SSE 推送
🚀 快速开始
pip install -r requirements.txt
python main.py # TUI 模式
python main.py --headless # 后台模式
python -m pytest tests/ -v # 运行测试
🏗️ 架构
main.py → SenSuFramework (15 服务)
├── ProjectEngine ← 接管任何项目 (subprocess + 日志)
├── ProxyService ← 反向代理 (HTTP+WS)
├── PyEnvManager ← Python 版本 + venv + git clone
├── PluginWebMixin ← 插件 Web 控制面板 SDK
├── PluginService ← 热加载 + 状态追踪
├── SenSuDB ← SQLite 5 表
├── TuiService ← Textual + 系统监控
├── InternetService ← HTTP :4200 + WS :4240
└── WebPanelManager ← /SenSu 管理面板
📁 目录
SenSu-Alpha/
├── main.py, service_manager.py
├── sdk/ plugin_command, plugin_status, plugin_error, plugin_web
├── services/ 15 个核心服务
├── bridges/ CoreBridge + PluginBridge + NetworkBridge
├── plugins/ 插件目录 + example_plugin (含 Web 面板)
├── deploy/ systemd + Dockerfile
├── tests/ 28 个测试
└── docs/ 开发文档
🌐 Web 面板
http://0.0.0.0:4200/SenSu/
├── /dashboard 仪表盘
├── /pages/projects 项目管理 (添加/启动/Git部署) ← NEW
├── /pages/proxy 反向代理管理 ← NEW
├── /plugin/{name} 插件控制面板 ← NEW
├── /console Web 终端
├── /logs 实时日志
└── /plugins 插件列表
🔌 插件开发
from sdk.plugin_command_decorator import plugin_command
from sdk.plugin_web import PluginWebMixin
class Plugin(PluginWebMixin):
def __init__(self, plugin_name=None, config=None, bridge=None):
PluginWebMixin.__init__(self)
self.plugin_name = plugin_name
async def initialize(self):
self.register_web_page("my_plugin", "My Panel", "<h1>Hello</h1>")
@plugin_command(name="hello")
async def cmd_hello(self, *args):
return "Hello World!"
🔧 环境变量
| 变量 | 默认值 |
|---|---|
SENSU_ADMIN_PASSWORD |
admin123 |
SENSU_API_PASSWORD |
api123 |
SENSU_PANEL_USER |
admin |
SENSU_PANEL_PASS |
admin |
📄 许可证
Apache License 2.0 · Copyright 2026 AskaEth
Description
Languages
Python
68%
HTML
14.8%
JavaScript
12.3%
CSS
4.1%
Batchfile
0.4%
Other
0.4%