Commit Graph

21 Commits

Author SHA1 Message Date
qinglong 279ddfbdc9 fix: SystemMonitor.refresh() 移除不存在的 _refresh_stats 调用 2026-06-13 20:54:35 +08:00
qinglong cc50ecb813 fix: Windows兼容 + Textual 8.x + MD3 SVG图标替代emoji
1. Windows: reuse_port 仅非win32平台启用
2. Textual 8.2.7: refresh() 加 **kwargs 兼容 repaint 参数
3. WebUI: 设置页/插件页 emoji → SVG (fill:currentColor 日夜间适配)

Co-Authored-By: Claude <noreply@anthropic.com>
2026-06-13 20:42:22 +08:00
qinglong 2dc3c16787 fix: 系统监控改用 asyncio task 驱动,抗 Android 后台挂起
- SystemMonitor/PluginStatusPanel: 移除 set_interval, 改用外部 refresh()
- TuiService._refresh_monitors(): asyncio.sleep(2) 循环刷新
- asyncio.sleep 在 Android 恢复前台后能正常续跑
- shutdown 时 cancel refresh task

Co-Authored-By: Claude <noreply@anthropic.com>
2026-06-13 12:50:06 +08:00
qinglong 10d1a1fcb1 fix: 标题栏 背景改 + 行高加到2 增强可见性 2026-06-13 12:18:50 +08:00
qinglong feca81842b fix: 回到 grid 布局 + 顶部留空行 — 5行: 空/标题/状态栏/主区/输入
grid-rows: 1 1 auto 1fr 3
- Row 1: 空白行
- Row 2: 标题栏 (Static, bold)
- Row 3: 状态栏 (auto 高度)
- Row 4: 主显示区 (1fr 填满剩余)
- Row 5: 输入栏 (固定3行)

Co-Authored-By: Claude <noreply@anthropic.com>
2026-06-13 12:17:30 +08:00
qinglong ae8586bc4a fix: 用 Static 标题栏替代 Textual Header,确保始终显示
- 自定义 #title-bar (dock top, height 1, bold)
- 移除不可靠的 Header widget
- _setup_title 更新 title_bar 内容

Co-Authored-By: Claude <noreply@anthropic.com>
2026-06-13 12:00:36 +08:00
qinglong 18f9fcfcd3 fix: Header dock top 防止被 monitor-area 遮挡 2026-06-13 11:56:58 +08:00
qinglong f7117825ae fix: 日志区改用 dock 布局自动占满剩余空间
- monitor-area: dock top
- input-area: dock bottom, height 3
- main-area: 自动填充中间所有空白
- 去掉 grid 布局避免高度塌缩

Co-Authored-By: Claude <noreply@anthropic.com>
2026-06-13 11:54:27 +08:00
qinglong 7caf35281b fix: 移除输入区外部边框 2026-06-13 11:52:00 +08:00
qinglong 74fd337a4c fix: 输入框高度 5→3 + 主显示区 min-height 防塌缩 2026-06-13 11:49:57 +08:00
qinglong d88438be3b style: Header 与状态栏之间加一行间距 (padding-top: 1) 2026-06-13 11:46:23 +08:00
qinglong 9517afabd9 fix: 输入框置底 — 移除冲突的 height 属性,用 align center bottom
grid-rows 已设置行高 (auto auto 1fr 5),CSS height 会与 grid 冲突
改为 align: center bottom 让 Input 贴底

Co-Authored-By: Claude <noreply@anthropic.com>
2026-06-13 11:46:11 +08:00
qinglong cbc2dd6b82 fix: TUI 布局调整 — 标题恢复 + 增加输入/状态栏高度
- 恢复 Header 标题栏
- 4 行布局: auto(Header) + auto(Monitor) + 1fr(Main) + 5(Input)
- 状态栏高度 2→3 行
- 输入栏高度 3→5 行

Co-Authored-By: Claude <noreply@anthropic.com>
2026-06-13 11:42:08 +08:00
qinglong 6382c8019d refactor: TUI 布局重构 — 经典三行:状态栏 + 主显示区 + 固定底部输入
布局改为 grid-rows: auto 1fr 3:
- Row 1 (auto): 系统监控 + 插件状态 紧凑状态栏
- Row 2 (1fr): 合并日志/消息为单一可滚动主显示区
- Row 3 (3 lines): 固定高度输入栏,始终可见

同时:
- 移除 Header/Footer 节省空间
- show_message 路由到 log_display
- 清理未使用的 message_display 分离逻辑
- 移除未使用的 reactive/Horizontal imports

Co-Authored-By: Claude <noreply@anthropic.com>
2026-06-13 11:34:45 +08:00
qinglong 7518f4fd17 fix: textual.suggestion 兼容老版 Textual + 升级最低版本约束
- textual.suggestion 在 Textual < 2.0 中不存在
- 添加 try/except fallback 构造兼容 Suggestion 类
- requirements.txt: textual>=0.40.0 → >=0.47.0

Co-Authored-By: Claude <noreply@anthropic.com>
2026-06-13 11:15:09 +08:00
qinglong 37d1110f2b feat(v0.4.3): TUI 命令 Tab 补全
CommandSuggester 实现 Textual Suggester API:
- 根据已注册命令列表提供前缀匹配补全
- 前缀无匹配时 fallback 到包含匹配
- 按长度排序,优先最短匹配
- 在 Input placeholder 提示 'Tab 补全'

Co-Authored-By: Claude <noreply@anthropic.com>
2026-06-13 11:06:31 +08:00
qinglong 2d0a37ba19 feat(v0.4): TUI 系统监控面板 + 插件状态面板
v0.4.1 系统监控面板:
- 复用共享 SystemInfoCollector (TUI + Web面板同一数据源)
- CPU/MEM 彩色进度条 + 网络实时速率
- 2 秒刷新,set_interval 驱动

v0.4.2 插件状态面板:
- 展示已加载插件的名称/版本/命令数
- 3 秒刷新,PluginService 延迟注入

SystemInfoCollector:
- 注册为共享服务 (sys_collector)
- Web panel status.py 优先从 service_manager 获取
- 零重复数据采集

TUI 布局升级: 3行 → 4行 (monitor + log + message + input)

Co-Authored-By: Claude <noreply@anthropic.com>
2026-06-13 11:05:56 +08:00
AskaEth 7e682190ab Fix: URL spacing for terminal clickability, DEBUG level from config 2026-06-10 19:51:07 +08:00
AskaEth f5800cc6c3 Debug: fix headless mode, plugin compat, psutil optional, module imports
- headless: TUI skip now works correctly
- example_plugin: keyword args compat (plugin_name=, config=, bridge=)
- sysmon: psutil made optional (graceful degrade)
- tui_service: SysMonWidget optional
- All 22 modules import clean, 23 tests pass, integration verified
2026-06-10 19:26:41 +08:00
AskaEth 4b26b6f086 v0.4+v0.5: TUI dashboard, tab completion, systemd, Docker, process isolation
- New: services/sysmon_widget.py (CPU/MEM/DISK/NET real-time)
- Enhanced: tui_service.py (4-section layout, plugin status panel)
- Enhanced: command_service.py + tui (Tab completion)
- New: deploy/sensu.service (systemd)
- New: deploy/Dockerfile (Alpine, 4200+4240)
- New: services/process_isolated.py (multiprocess plugin isolation)
- Tests: 23/23 passing
2026-06-10 19:08:16 +08:00
AskaEth e6875f0b4b Initial commit: SenSu Alpha 0.2.0
- 13-service async plugin framework
- Textual TUI with CLI fallback
- Plugin hot-reload + permission system
- Web management panel (aiohttp)
- Bridge-based inter-module communication
- 10 regression tests

Fixes applied:
- PBKDF2-SHA256 auth (was plain SHA256)
- Auth bypass removed (was allow-all on fail)
- Bare excepts replaced with logged errors
- CatFramework/DreamSu -> SenSu naming unified
- ServiceManager: health checks + startup_order
- Env var credentials (SENSU_ADMIN_PASSWORD etc)
2026-06-10 12:28:05 +08:00