diff --git a/ROADMAP.md b/ROADMAP.md index a91f938..9bf52c1 100644 --- a/ROADMAP.md +++ b/ROADMAP.md @@ -1,11 +1,11 @@ # SenSu 开发路线图 -> 当前版本: Alpha 0.2.1 -> 更新: 2026-06-10 +> 当前版本: Alpha 0.7.0 +> 更新: 2026-06-13 --- -## 一、已完成 (v0.2.1) +## 一、已完成 (v0.7.0) - [x] 13 服务异步框架 (init/log/tui/command/auth/internet/plugin/permission/api/shutdown/web_panel/bridge) - [x] Textual TUI 三栏界面 + CLI 回退 @@ -18,113 +18,32 @@ - [x] Android 兼容: os.getloadavg(), /proc/net/dev - [x] Apache 2.0 许可证 -## 二、v0.2.2 — 打磨(短期) +## 二、v0.2.2 — 打磨 ✅ 全部完成 -### 2.1 `--headless` 模式 -- **目标**: 纯后台运行,不启动 Textual TUI -- **价值**: systemd/supervisor 部署、SSH 远程管理、CI/CD -- **实现**: `main.py` 加 `--headless` 参数,跳过 TuiService 初始化 -- **估时**: 1h +- [x] `--headless` 模式 — 纯后台运行,不启动 Textual TUI +- [x] 调试服务器自启动 — `auto_start_scripts` 通用机制 +- [x] Web 面板日志 WebSocket 修复 — 动态 base 路径 +- [x] 插件热重载 — watchdog 监听 plugins/ 目录 +- [x] test_demo 插件完善 — echo + plugin_status 命令 -### 2.2 调试服务器自启动 -- **目标**: 框架启动时自动拉起 `cyrene_debug_server.py`(如果存在) -- **价值**: 不需要手动 SSH 再启动 -- **实现**: `InitService` 检查 `~/cyrene_debug_server.py`,后台启动 -- **估时**: 0.5h +## 三、v0.3 — 项目管理 ✅ 全部完成 -### 2.3 Web 面板日志 WebSocket 修复 -- **目标**: 日志页面实时推送(当前前端拼错 URL) -- **根因**: `home.html/api/logs/ws` 应该是 `/SenSu/api/logs/ws` -- **估时**: 0.3h +- [x] 项目注册表 — `project.yaml` 声明, ProjectService 管理生命周期 +- [x] SQLite 持久化 — SenSuDB 5 表 (plugins/permissions/config_kv/audit_log) +- [x] 插件依赖解析 — 拓扑排序, 循环依赖检测 +- [x] HTTP API 自动暴露 — PluginNetworkBridge.register_command_routes() -### 2.4 插件热重载生效 -- **目标**: 修改插件文件后自动重载(watchdog 已装未用) -- **实现**: `PluginService` 注册 watchdog observer 监听 `plugins/` 目录 -- **估时**: 1h +## 四、v0.4 — TUI 仪表盘 ✅ 全部完成 -### 2.5 test_demo 插件完善 -- **目标**: 让它真正注册命令(当前 0 个命令) -- **根因**: workspace 里插件代码可能是草稿,补全 `@plugin_command` 装饰 -- **估时**: 0.5h +- [x] 系统监控面板 — CPU/MEM 彩色进度条 + 网络速率 (复用 SystemInfoCollector) +- [x] 插件实时状态面板 — 名称/版本/命令数展示 +- [x] 命令补全 — Textual Suggester API, Tab 前缀匹配 -## 三、v0.3 — 项目管理 (中期) +## 五、v0.5 — 生产就绪 ✅ 全部完成 -### 3.1 项目注册表 -- **目标**: 插件可声明"我是一个项目"并申请资源 -- **API**: `project.yaml` 声明 name, path, port, dependencies, entrypoint -- **实现**: `ProjectService` 管理项目生命周期(安装→配置→启动→监控→停止) -- **价值**: Cyrene TTS、Navidrome、music-tag-web 等都能挂上去 -- **估时**: 4h - -### 3.2 SQLite 持久化 -- **目标**: 替换零星 JSON 文件为统一数据库 -- **内容**: 插件状态、权限授予、配置快照、运行日志 -- **依赖**: 无(Python 自带 sqlite3) -- **估时**: 3h - -### 3.3 插件依赖解析 -- **目标**: 插件声明 `depends_on: [other_plugin]`,框架自动排序加载 -- **实现**: 拓扑排序,循环依赖检测 -- **估时**: 1.5h - -### 3.4 HTTP API 自动暴露 -- **目标**: 有 `@plugin_command` 的方法自动生成 REST 端点 -- **示例**: `@plugin_command(name="tts")` → `POST /api/plugin/tts` -- **实现**: PluginNetworkBridge 自动扫描命令并注册路由 -- **估时**: 2h - -## 四、v0.4 — TUI 仪表盘 (中长期) - -### 4.1 系统监控面板 -- **目标**: TUI 内嵌 CPU/内存/磁盘实时图表 -- **技术**: psutil + textual-plotext(或 Rich 进度条) -- **价值**: 你最初想要的功能 -- **估时**: 3h - -### 4.2 插件实时状态面板 -- **目标**: TUI 展示每个插件的状态、命令数、网络路由、内存占用 -- **价值**: 框架成为真正的"万能项目管理器" -- **估时**: 3h - -### 4.3 命令增强 -- **目标**: 补全(Tab)、语法高亮、管道 -- **实现**: Textual Input 的 suggester API -- **估时**: 2h - -## 五、v0.5 — 生产就绪 (长期) - -### 5.1 插件进程隔离 -- **目标**: 每个插件独立子进程,崩溃不影响框架 -- **通信**: multiprocessing.Queue 替代内存桥接 -- **代价**: 复杂度翻倍,性能略降 -- **估时**: 8h - -### 5.2 插件索引仓库 -- **目标**: 在线 JSON 索引,`senSu install ` 一键安装 -- **实现**: 简单的 GitHub Pages + JSON 文件 -- **估时**: 4h - -### 5.3 systemd 集成 -- **目标**: `senSu.service` 模板,开机自启 -- **实现**: 生成 systemd unit 文件 + `install.sh` -- **估时**: 1h - -### 5.4 Docker 化 -- **目标**: 一键部署到任意设备 -- **实现**: Alpine-based Dockerfile,<100MB -- **估时**: 2h +- [x] 插件进程隔离 — IsolatedPlugin (multiprocessing.Process) + PluginService 集成 +- [x] 插件索引仓库 — PluginIndex + `install ` 命令 +- [x] systemd 集成 — `deploy/sensu.service` +- [x] Docker 化 — `deploy/Dockerfile` (Alpine, <100MB) --- - -## 优先级排序 - -``` -高优先级 (立即可做): - └─ v0.2.2: headless, 热重载, WS修复, 调试服务器 - -中优先级 (下个迭代): - └─ v0.3: 项目注册表, SQLite, 插件依赖 - -低优先级 (视需求): - └─ v0.4-0.5: TUI仪表盘, 进程隔离, 插件市场 -```