qinglong
d766df7833
fix: app_v3.js + 强制刷新插件页面
2026-06-14 15:07:21 +08:00
qinglong
ae553b564d
fix: 静态文件no-cache + app.js重命名防缓存
2026-06-14 11:54:18 +08:00
qinglong
f532a63a49
fix: 插件页面强制no-cache + app.js v0712
2026-06-14 11:45:07 +08:00
qinglong
f6117cbc5f
fix: 恢复被误删的 scripts.forEach(function(code){ (3处)
2026-06-14 11:12:07 +08:00
qinglong
66dc4cdfbf
fix: 彻底移除所有调试console.log
2026-06-14 11:09:16 +08:00
qinglong
bd454ab627
fix: 移除 loadPluginPage 的 console.log 调试
2026-06-14 11:08:58 +08:00
qinglong
3f72d6af70
fix: 撤销loadPage误加的debug日志
2026-06-14 11:08:25 +08:00
qinglong
3e632252ab
debug: loadPluginPage 加日志追踪错误来源
2026-06-14 11:07:29 +08:00
qinglong
29e7b2be41
fix: 插件页面加载加 ?t= 缓存破坏 + app.js v0706
2026-06-14 10:54:39 +08:00
qinglong
cb5f900c39
feat: 更新页面实时日志 — SSE轮询 + logs/updates_logs 文件记录
2026-06-14 10:45:08 +08:00
qinglong
63cd38cf22
fix: 手动更新按钮始终显示 — 有更新时变绿色'立即更新'
2026-06-13 21:39:30 +08:00
qinglong
70695b171e
fix: 版本号显示 — 始终设 current_version + 顶栏按钮显示版本
2026-06-13 21:34:21 +08:00
qinglong
94d56d8210
fix: 版本检查 — 后端设置 checked 字段 + 前端 info 合并显示
...
- UpdateService.status 增加 checked/current_version/latest_version
- _check_version 成功后设置 checked=True
- 设置页 update-notes 合并版本信息和时间戳 (替代 innerHTML 覆盖)
Co-Authored-By: Claude <noreply@anthropic.com >
2026-06-13 21:29:35 +08:00
qinglong
67d0f00525
fix: 版本更新 — 自动检查 + 手动备份 + 创建备份按钮
...
1. 设置页加载时自动触发版本检查
2. POST /api/updates/backup — 手动创建备份
3. 备份管理区新增「+ 创建备份」按钮
4. 顶栏版本按钮: checkTopUpdate 每10min轮询
Co-Authored-By: Claude <noreply@anthropic.com >
2026-06-13 21:08:54 +08:00
qinglong
faf695e361
style: 状态emoji( ✅ ❌ 🔄 ) → 纯文本符号(✓✗↻)
2026-06-13 20:49:17 +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
9a9a2975de
feat: WebUI 版本检测 — 顶栏按钮 + 设置页备份/回滚/更新管理
...
顶栏:
- 版本号按钮, 有更新时变绿色并显示新版本号
- 每10分钟自动检查
设置页新增「版本与更新」区域:
- 当前版本 + 更新状态徽章
- 检查更新 / 立即更新 按钮
- 备份列表 + 手动回滚
API:
- GET /api/updates/backups — 备份列表
- POST /api/updates/rollback — 执行回滚
Co-Authored-By: Claude <noreply@anthropic.com >
2026-06-13 20:39:28 +08:00
qinglong
6e0ed23012
fix: 页面 HTML 加载加 ?t= 缓存破坏 + app.js 版本号 0704→0705
2026-06-13 18:49:49 +08:00
qinglong
9c1a1d40e4
style: 导入卡片间距 gap 12→16px + align stretch 等高
2026-06-13 18:46:57 +08:00
qinglong
d0206121b1
fix: 统计卡片'安装失败'→'启动失败' + 合并 error_count 计数
2026-06-13 18:44:20 +08:00
qinglong
e16250c7e7
style: 插件导入卡片 CSS — 等高 / 文件按钮 / 纵向布局
2026-06-13 18:43:30 +08:00
qinglong
b2021a45ce
feat: 插件管理 — 导入安装 + 统计面板
...
新增 API:
- GET /api/plugins/stats — 统计 (总计/已启用/已停用/安装失败)
- POST /api/plugins/import — ZIP上传 或 Git clone 安装
- 自动 pip install -r requirements.txt (子进程隔离)
- 自动加载插件 (isolated 模式, 崩溃不影响框架)
- 安装失败记录到 _IMPORT_FAILS
前端:
- 横版统计卡片 (总数/启用/停用/失败)
- ZIP 上传按钮 + Git URL 输入
- 安装状态实时反馈
安全:
- 所有端点 panel_auth 保护
- 子进程安装 (pip/git), 超时120s
- 仅接受 .zip 文件
- 目录冲突检测
Co-Authored-By: Claude <noreply@anthropic.com >
2026-06-13 18:39:38 +08:00
qinglong
a2bd6486a0
fix: 动画改用 setInterval (兼容动态 script 加载) + try-catch 保护
2026-06-13 18:29:11 +08:00
qinglong
c4b44e0fd2
fix: 仪表盘动画改为模块方法 _animateNumber (避免全局作用域问题)
2026-06-13 18:26:38 +08:00
qinglong
81ebbc3e45
feat: WebUI 首页仪表盘 — CPU/MEM/进程内存 数字跳动动画
...
- animateNumber(): 900ms ease-out 缓动, 存储前值于 data-val
- CPU%、MEM%、进程内存 三个指标使用跳动动画
- 与 Sentinel 卡片动画风格统一
Co-Authored-By: Claude <noreply@anthropic.com >
2026-06-13 18:21:05 +08:00
qinglong
5e06c17b52
fix: WebSocket 鉴权 — Cookie 优先 (支持 HttpOnly)
...
根因: panel_token 是 HttpOnly cookie, JS getCookie() 读不到
→ 前端 WS ?token= 参数为空 → 认证失败 → 仪表盘无数据
修复:
- _ws_auth_wrapper: Cookie 优先 → query token 备用 → API Key
- 浏览器同源 WS 自动发送 Cookie, 无需 ?token=
- dashboard.js / logs.js 移除多余的 getCookie+?token=
Co-Authored-By: Claude <noreply@anthropic.com >
2026-06-13 17:45:58 +08:00
qinglong
66ad51002c
feat: WebUI 框架设置页面 + API Key 管理 UI
...
新增:
- static/web_panel/pages/settings.html — API Key CRUD 界面
- 侧边栏 '框架设置' 导航项 (齿轮图标)
- BUILTIN_PAGES 增加 'settings'
- UI 功能: 创建对话框(名称/权限/过期), 列表表格, 一键删除
权限模板:
- readonly — framework.status.read + plugin.info.read
- monitor — + framework.event.subscribe
- full — admin (全部)
Co-Authored-By: Claude <noreply@anthropic.com >
2026-06-13 14:28:59 +08:00
qinglong
a75b9d0975
security: 前端 WebSocket 连接传递 panel_token 认证
...
- dashboard.js / logs.js: WS URL 追加 ?token= 查询参数
- app.js: 添加 getCookie() 工具函数
Co-Authored-By: Claude <noreply@anthropic.com >
2026-06-13 13:38:38 +08:00
qinglong
9de094ea54
fix: 移除遗留fmfuncs目录创建 + 清理init_service无用导入 + 文件管理器SVG图标 + 示例插件MD3改造
...
- init_service: 删除_load_fmfuncs方法和fmfuncs目录创建(已迁移到sdk/)
- init_service: 清理未使用的importlib.util和sys导入
- 文件管理器: 全部emoji替换为MD3 SVG矢量图标(文件夹/文件类型/右键菜单)
- 示例插件: dashboard.html改为MD3风格 CSS变量自动适配日夜主题
- 面包屑: 加底色+模糊+左右外边距
- CSS: .btn::after加pointer-events:none
- 插件开发指南: 更新2.6节MD3主题同步和完善的CSS变量/组件类参考表
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com >
2026-06-12 19:00:19 +08:00
qinglong
9b997d8bda
fix: 文件选择器改为页内iframe弹窗 + 乱码编码修复 + API路径修复
...
- pickPath()从window.open改为页内iframe模态弹窗(遮罩+关闭按钮)
- files.html添加meta charset+CSS link,独立模式自动加载files.js
- API路径统一通过_apiUrl()构建,适配主面板和iframe两种上下文
- 独立iframe模式注入body/container覆写样式(无topbar)
- 选择模式栏移至底部margin-top:auto紧凑排列
- MD3风格toggle开关(显示隐藏复选框)
- CSS版本号缓存破坏
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com >
2026-06-11 21:51:42 +08:00
qinglong
dc0bb79a7e
feat: 全局文件选择器 + 项目管理路径选择按钮
...
- app.js新增window.pickPath(mode,callback)全局复用
- 项目管理「工作目录」+Git部署「目标目录」添加📁 选择按钮
- Git部署不再硬编码data/projects,改用用户选择的目标目录
- files.js picker模式读取URL cb参数实现callback_id回传
- app.js版本号更新至v=0701
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com >
2026-06-11 21:11:50 +08:00
qinglong
99c3e3e853
feat: hash路由 + 插件页面内联加载 + 侧边栏插件面板展开项
...
- Hash路由: #/dashboard #/files #/plugins/xxx 支持刷新保持/前进后退
- 登录过期保留hash,登录后自动跳回原页面
- 插件WebUI页面内联加载到page-container(不再弹新窗)
- 插件页面HTML自动处理: style提取/body剥离/script执行/padding归零
- 侧边栏新增「插件面板」可折叠项,展开列出所有已注册插件页面
- 内存卡片显示 已用/总容量(百分比右侧)
- 插件开发指南新增 2.6 WebUI页面开发章节
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com >
2026-06-11 20:56:39 +08:00
qinglong
fd715eac2b
feat: 文件管理器 + Windows兼容 + SVG主题适配 (v0.6.0)
...
新增:
- services/web_panel/routes/files.py — 全功能文件管理后端API (11个端点)
- pages/files.html + files.js — 文件管理前端 (浏览/编辑/上传/删除/右键菜单)
- 插件Picker API: window.open+postMessage唤出文件选择器
- 符号链接目录双层面包屑 (逻辑路径+物理路径)
- 文件系统全访问+跨平台 (Linux/Windows/macOS)
- permission_rules.yaml新增4个filemanager.*权限
修复:
- SVG fill=currentColor 日夜模式自适应
- 特殊目录容错 (/dev/fd损坏符号链接/proc)
- 面包屑每层级独立可点击+可编辑路径跳转
- ..行返回上级+data-is-dir补全
- rmlint→lstat回退 损坏符号链接不炸页面
文档:
- 插件开发指南新增第八章(文件管理器集成)
- 开发踩坑记录新增4条(特殊目录/双面包屑/SVG颜色/Windows)
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com >
2026-06-11 18:23:32 +08:00
qinglong
4a989bf50f
feat: WS实时推送、网速双线图、按钮MD3修复、页面加载器修复 (v0.6.0)
...
后端:
- 新增 /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 >
2026-06-11 16:23:31 +08:00
qinglong
c07cea4ff7
Fix page loader: execute inline scripts, JS module loading optional
...
- innerHTML strips script tags, now extract and eval them
- External .js module: 404 = skip gracefully (no error)
- Progress bar: completes regardless of JS module
- Proxy/projects pages now render with CSS + inline JS executes
2026-06-11 14:43:24 +08:00
qinglong
885929f3ff
Fix proxy/projects pages: error handling when API unavailable
...
- proxy: .catch() shows 'service not ready' instead of stuck loading
- projects: shows 'engine not ready' on API error
- Both: show 'no items' placeholder instead of blank
2026-06-11 12:47:39 +08:00
qinglong
a1dd401efc
Fix theme toggle: move init to app.js, remove duplicate script
...
- Theme initialized BEFORE page render (no flash)
- toggleTheme() now in app.js global scope
- Proxy page rewritten with btn-filled MD3 class
2026-06-11 12:46:33 +08:00
qinglong
c4e2783120
WebUI: MD3 projects/proxy pages, sidebar links, CSS animations
...
- Add projects + proxy nav items to sidebar
- Rewrite projects.html with MD3 cards + tabs + mgmt-cards
- Rewrite proxy.html with MD3 form + mgmt-cards
- CSS: button ripple, card elevation, page fade, tab slide, input glow, nav dot, status pulse, log entry fade, shimmer, scrollbar, badge bounce, card hover mouse-glow (428 lines)
2026-06-11 12:12:03 +08:00
AskaEth
b37cbf076c
WebUI: MD3 2026 redesign + light/dark theme toggle
...
- Rewrite CSS with full MD3 color tokens + elevation + shape system
- Add light theme with data-theme="light"
- Theme toggle button in top bar (persists to localStorage)
- 268 lines CSS, covers login/shell/dashboard/plugins/projects/proxy
2026-06-11 11:53:32 +08:00
AskaEth
7dc87d9f3a
Fix WebSocket log URL: extract base path instead of page path
2026-06-10 21:29:43 +08:00
AskaEth
e52f7f3566
Phase 3: PluginWebMixin SDK + web plugin control panels
...
- New: sdk/plugin_web.py (PluginWebMixin: web pages, API routes, SSE)
- New: services/web_panel/routes/plugin_web.py (3 endpoints)
- New: plugins/example_plugin/dashboard.html (counter + SSE demo)
- Updated: example_plugin uses PluginWebMixin
- Tests: 28/28 passing
2026-06-10 20:54:11 +08:00
AskaEth
c680fea8e0
Phase 2: ProxyService reverse proxy (HTTP+WebSocket forwarding)
...
- New: services/proxy_service.py (path->URL mapping)
- New: services/web_panel/routes/proxy.py (3 REST endpoints)
- New: static/web_panel/pages/proxy.html (WebUI)
- Tests: 28/28 passing
2026-06-10 20:47:17 +08:00
AskaEth
8dbf628dd6
Phase 1: ProjectEngine + PyEnvManager + project management WebUI
...
- New: services/project_engine.py (async subprocess manager)
- New: services/pyenv_manager.py (Python version + venv + git clone)
- New: services/web_panel/routes/projects.py (5 REST endpoints)
- New: static/web_panel/pages/projects.html (WebUI)
- Tests: 28/28 passing, API verified (GET /api/projects)
- Docs: Phase1_Progress.md (local)
2026-06-10 20:41:24 +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