Skip to content

发布 v0.6.0:全新 WebUI、SSH 主机管理与风扇温度监控更新 - #44

Merged
massif-01 merged 5 commits into
RMinte-AI:mainfrom
massif-01:feat/macos27-webui
Oct 2, 2026
Merged

massif-01 merged 5 commits into
RMinte-AI:mainfrom
massif-01:feat/macos27-webui

Conversation

@massif-01

@massif-01 massif-01 commented Oct 2, 2026 •

Copy link
Copy Markdown
Member

本次更新

将固件版本提升到 0.6.0,把当前已完成的 WebUI 重设计、SSH 主机管理修复与风扇温度监控修复一起提交。本次 UI 更新覆盖整个控制台及主要设置面板,采用统一的 macOS 风格视觉与交互;具体发布文案位于 docs/releases/v0.6.0.md,侧重新版的整体感受。

1. WebUI 外壳、视觉与资源

  • components/ts_webui/web/index.html:重做登录与导航外壳、首屏样式和品牌表现,统一页面入口与资源缓存版本;用内联 SVG 图标精灵替代旧 Remix Icon 字体资源。
  • web/css/style.css:建立统一颜色、字体、字号层级、卡片、分组、按钮、输入、列表、标签和 sheet 面板样式;调整导航、表格、设置面板及窄屏布局,提供减少动态、减少透明度、高对比与强制颜色环境下的相关回退样式。
  • 移除 fonts/remixicon.css 和 fonts/remixicon.woff2,加入 fonts/quantify-bold.woff2;保留使用到的 Phosphor 图标 MIT 许可证。
  • web/js/router.js:固件升级路由与系统入口导航高亮保持一致。
  • web/js/terminal.js:调整终端字体、字号、行高、背景、前景、光标、选择和 ANSI 配色,与新版界面协调。

2. 页面与设置交互

web/js/app.js 大幅调整各页模板与面板结构,同时保留现有设备 API 和业务能力:

  • 系统概览:重新组织时间、CPU、内存、网络、电源、风扇、温度、服务状态及数据组件;重做风扇曲线、温度变量绑定、保护参数、时区与相关详情设置。
  • LED:重做设备卡片、亮度滑块、颜色选择、效果、矩阵内容、文本及滤镜面板,统一快速操作与设置入口。
  • 网络:统一接口、Wi-Fi、DHCP、NAT、连接状态和相关配置表单的视觉及信息分组。
  • 文件管理:统一目录工具栏、文件列表、批量操作,以及新建、重命名、上传、预览和配置包相关面板。
  • SSH 指令:重做主机选择、指令列表、执行结果、后台服务观察和指令编辑界面。
  • 自动化:重新组织变量、数据源、规则、动作模板及编辑、测试、导入导出面板。
  • 安全:统一密钥、已部署主机、Known Hosts、证书与 PKI 管理界面及相关详情/设置面板。
  • 固件升级:统一固件与 WebUI 上传、更新、回滚和确认界面。
  • 用异步 confirmSheet / confirmAction 替代原生确认交互,调用方等待用户结果;危险操作默认聚焦取消、Enter 不自动继续,Esc 可取消。
  • 新增/调整中文和英文提示,修复英文 automation.selectCommand 缺失及动作导出说明 actionId 插值不匹配。

3. SSH 公钥部署、登记与持久化

  • ts_api_ssh.c:把远端公钥部署、登录验证、本地主机登记作为独立结果;新增 host_id、registered、registration_error。登记失败返回业务错误,同时通过现有 HTTP 序列化保留 deployed / verified 等部分结果,避免把部分完成报告为全部成功。
  • ts_ssh_hosts_config.c:启动恢复按记录合并 SD 配置,保留其他 NVS 主机;串行化 SD 导入与异步备份,避免备份覆盖尚未读取的配置文件。只有本次导入写入跳过备份,并发正常新增仍同步。
  • NVS 查找、新增及迭代传播实际存储错误和尺寸错误,避免误报为空列表或空槽;导入统计成功、失败和首个错误。
  • ts_ssh_service.c / .h:新增运行时主机占用判断;缺失主机恢复不再被历史指令引用永久阻止,实际运行/占用的服务仍保护其绑定。
  • WebUI 在部署后重新读取并渲染主机列表,区分登记失败、验证未确认和列表刷新失败;旧固件通过目标元组匹配确认登记;过期响应不能覆盖新列表,读取失败保留现有缓存。

4. 风扇温度监控

  • ts_fan.c:温度快照更新与控制模式解耦;手动、关闭或已初始化但禁用的风扇也更新有效温度,手动占空比及关闭输出保持原行为。
  • 继续使用非阻塞温度读取;显式关闭自动温度监控仍生效,自动/曲线控制与真实失效温度的既有回退保持。

5. 压缩、测试与发布

  • tools/minify_web.py:保留 CSS calc() 加号两侧的必要空白,不把伪类 :not() 错改成媒体查询式 not (。
  • 新增 SSH 部署/登记、HTTP 部分结果、NVS/SD 故障/并发、旧响应覆盖,以及风扇监控生产函数主机回归。
  • 更新提示测试以适配异步确认和新的组件/SSH 登记结果;新增真实页面危险确认键盘与取消回归;新增 CSS 压缩语法回归。
  • 运行时 Python 编译测试仅在 macOS 加 SDK 参数,使用标准 cc,为 glibc 下的旧 BSD 网络字段和 POSIX 字符串函数声明所需的编译特性;Actions 获取匹配 ESP-IDF 版本的 cJSON,支持 Ubuntu 主机回归。
  • 保留 tests/macos27/、tests/macos27-r2/ 与 docs/macos27/ 的设计、迁移、审查及历史实验脚本。上游 docs: 保存 macOS 27 WebUI 界面优化稿与设计系统 #43 的设计系统文档已同步,PR 不重复修改该设计稿。
  • version.txt 更新到 0.6.0,并更新仓库已有预编译主固件、启动固件与 www 镜像。
  • 增加运行时/风扇 CI 检查。上游 main 的自动 Release 等待 固件构建、WebUI 回归、运行时/风扇回归 全部成功,再创建 v0.6.0、读取中文说明并上传 CI 构建产物;PR 与 fork 不发布上游 Release。

验证

  • ESP-IDF 5.5.2 独立构建成功,0.6.0 主固件为 2,184,448 字节,应用分区剩余约 31%。
  • 13 个 gzip 文件解压与构建文件一致。
  • 提示/翻译回归 40 项、真实 Chrome 页面回归 40 项全部通过。
  • tests/runtime/run_all.sh 全部通过;风扇主机测试 8 组通过。
  • 发布校验 3 项、CSS 压缩回归 2 项通过。
  • 当前源码及实际压缩产物分别完成 8 路由 × 2 种语言加载,共 32 组,无脚本/资源错误或未知端点。
  • 详见 docs/releases/v0.6.0-validation.md。

这些是本地构建、主机测试与浏览器替身证据。历史候选报告保留其原始范围,不构成当前版本全状态验收;本轮未刷入 0.6.0,未重新执行真实 SSH 部署、证书签名、OTA、真实手机或硬件长时负载测试。部分历史实验脚本依赖本机工具路径及未随 PR 上传的原始输出。

GitHub Actions 实际结果

最新 PR 提交 b970c8220dc33ea5f716606339a05931576fa4c6 的 Actions 运行 37066544448 成功:

  • Build ESP32-S3 Firmware:成功,已上传 CI 固件产物。
  • WebUI regression tests:成功。
  • Runtime and fan regression tests:成功。
  • Create or Update Release:PR 阶段按条件跳过,合并至上游 main 后自动执行。

首次 Linux 测试暴露的 hostent.h_addr 编译声明问题已修复,以上结论来自修复后的最新运行。

合并与发布

此 PR 留给维护者手动合并。合并到上游 main 后,GitHub Actions 检查通过才自动发布 v0.6.0,使用本次中文 Release 说明。源码、测试和发布文件已同步推送至 massif-01/TianshanOS 与上游同名分支。本地输出、缓存和风扇实验原始采集资料未进入提交。

@massif-01
massif-01 merged commit 73069d2 into RMinte-AI:main Oct 2, 2026
4 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant