Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
33 commits
Select commit Hold shift + click to select a range
e068f15
fix: 失败响应保留 data,修复 SSH「测试连接」弹不出主机指纹确认框
massif-01 Oct 9, 2026
7b899a0
feat: 指纹变化时的确认框改为明确的安全警告(可选,单独提交)
massif-01 Oct 9, 2026
85d8474
refactor: 删除 50 个无入口的旧界面函数及其残留
massif-01 Oct 9, 2026
46303b2
feat(firmware): 手动触发被拒和 SSH 连接失败时,如实报告具体原因
massif-01 Oct 9, 2026
fed2920
feat(webui): 失败提示按"动作:原因。下一步。"重写——规则启停保存、快捷操作、SSH 测试连接(样板间)
massif-01 Oct 9, 2026
08f05c0
feat(firmware): 自动化引擎、动作模板、数据源失败时如实报告具体原因
massif-01 Oct 9, 2026
ca8cbf6
feat(webui): 自动化页失败提示迁到统一目录(引擎、规则、动作模板、数据源)
massif-01 Oct 9, 2026
a52346d
feat(firmware): 数据源连接测试与配置包导入导出失败时如实报告具体原因
massif-01 Oct 9, 2026
767eb53
feat(webui): 自动化页其余失败提示迁到统一目录(连接测试、配置包、选择列表)
massif-01 Oct 9, 2026
87b716f
feat(firmware): SSH 主机、密钥、指令、执行失败时如实报告具体原因
massif-01 Oct 9, 2026
75f0ab4
feat(webui): SSH 主机、密钥、指令页失败提示迁到统一目录
massif-01 Oct 9, 2026
bdc0354
docs: 重写中英文 README,更新 0.6.1 项目说明
massif-01 Oct 9, 2026
2bdd714
fix: 防止动作模板删除产生失效规则引用
massif-01 Oct 9, 2026
33fc4c6
Merge remote-tracking branch 'origin/main' into fix/automation-delete…
massif-01 Oct 9, 2026
15962f3
docs: 更新中英文 README 的 TianshanOS 头图
massif-01 Oct 9, 2026
af6fcf2
fix: implement durable save-only rule pack import
massif-01 Oct 9, 2026
796b00a
test: 声明删除引用主机测试所需的 POSIX 接口
massif-01 Oct 10, 2026
0e5be43
feat(firmware): 配置包校验、应用、导出失败时如实报告具体原因代号
massif-01 Oct 10, 2026
e595443
feat(webui): 全站操作失败提示迁到统一目录(登录与改密、服务与重启、OTA、文件、网络、风扇、LED、证书与密钥、配置包)
massif-01 Oct 10, 2026
df54028
fix(automation): close rule-pack deletion and dependency review gaps
massif-01 Oct 10, 2026
899eaaf
Merge reviewed rule-pack import into automation deletion protection
massif-01 Oct 10, 2026
bdc987d
test: link rule-pack math and declare POSIX gate APIs on Linux
massif-01 Oct 10, 2026
1f7e451
Merge main (动作模板删除保护、规则配置包导入) into fix/clear-user-prompts
massif-01 Oct 10, 2026
3a63ee4
feat(webui): 合并后补齐上游新功能的提示语(规则配置包导入、规则待重启/待删除、模板缺失)走统一目录
massif-01 Oct 10, 2026
474bec1
fix(webui): 验证中发现并修复的问题
massif-01 Oct 12, 2026
9db1b3c
test: 跟上合并与提示语迁移——新增页面场景测试、调用点参数检查,修正钉着旧句子的断言
massif-01 Oct 12, 2026
61df8d5
test: 补上“待删除规则被拒绝”的引擎、线上字节与页面用例;去掉一处行尾空格
massif-01 Oct 12, 2026
5f37643
fix(webui): 文件选择器读取目录失败时保留设备给出的原因
massif-01 Oct 12, 2026
68f7638
Merge origin/main (#47、#48 已合并) into fix/clear-user-prompts
massif-01 Oct 12, 2026
25b7808
发布 v0.6.2:版本号、中文发布说明与验证记录
massif-01 Oct 12, 2026
5ae368b
test: 证书页测试跟上新的失败提示方式
massif-01 Oct 12, 2026
774c3a9
chore: 同步 sdkconfig 新增配置项的默认值;新增 build/ 清单生成脚本
massif-01 Oct 12, 2026
6b518bb
发布 v0.6.2:更新 build/ 默认刷机镜像到 0.6.2
massif-01 Oct 12, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion README.md
Original file line number Diff line number Diff line change
Expand Up @@ -23,7 +23,7 @@ TianshanOS 是 RM-01 的设备管理系统,运行在 ESP32 带外管理控制
2. 在同一网络中的电脑上打开浏览器,输入设备的 IP 地址。
3. 使用设备账号登录,在首页查看状态并打开需要的功能页面。

终端、指令和自动化页面需要 root 权限。配置保存、SD 卡备份和固件更新的操作步骤,请参阅用户说明。更新 0.6.1 固件时,应用固件和 Web 界面资源应使用同一版本。
终端、指令和自动化页面需要 root 权限。配置保存、SD 卡备份和固件更新的操作步骤,请参阅用户说明。更新 0.6.2 固件时,应用固件和 Web 界面资源应使用同一版本。

## 用户说明

Expand Down
4 changes: 2 additions & 2 deletions README_EN.md
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@

TianshanOS is the device management system for RM-01. It runs on the ESP32 out-of-band management controller. Use a browser to check device status, manage power, fans and lighting, configure networking, and set up SSH commands and automation rules.

**Current version: 0.6.1** · Web interface in Chinese and English · [0.6.1 release notes (Chinese)](docs/releases/v0.6.1.md)
**Current version: 0.6.2** · Web interface in Chinese and English · [0.6.2 release notes (Chinese)](docs/releases/v0.6.2.md)

## Features

Expand All @@ -25,7 +25,7 @@ TianshanOS is the device management system for RM-01. It runs on the ESP32 out-o
2. Open a browser on a computer connected to the same network and enter the device's IP address.
3. Sign in with your device account. Check status on the dashboard and open the page you need.

The Terminal, SSH Commands and Automation pages require root access. See the user guide for configuration saving, SD card backups and firmware updates. When updating to 0.6.1, use matching versions of the application firmware and Web interface resources.
The Terminal, SSH Commands and Automation pages require root access. See the user guide for configuration saving, SD card backups and firmware updates. When updating to 0.6.2, use matching versions of the application firmware and Web interface resources.

## User guides

Expand Down
Binary file modified build/TianShanOS.bin
Binary file not shown.
Binary file modified build/bootloader/bootloader.bin
Binary file not shown.
16 changes: 8 additions & 8 deletions build/firmware-manifest.json
Original file line number Diff line number Diff line change
@@ -1,17 +1,17 @@
{
"version": "0.6.1",
"build_version": "0.6.1+73069d24d.10090811",
"version": "0.6.2",
"build_version": "0.6.2+774c3a97.10130158",
"idf_version": "5.5.2",
"source_base_commit": "73069d24da043a124d89028d25a5e4659d736652",
"source_inputs_sha256": "62e8ba896b9dff39133cecebf677da7c662b850d18981bd1323c0b053e7b1f2d",
"source_base_commit": "774c3a975311604fe629c34ed6600d7fcebcc93b",
"source_inputs_sha256": "8a4a1fdf9f1f6bd492866af1d88620502e2965ce31bdb512798196d5dc8e3836",
"files": {
"TianShanOS.bin": {
"bytes": 2202336,
"sha256": "15f99d11092b91255d8fa24b632316b217d6efeb3acc3e20ed290e0e9fd54378"
"bytes": 2226000,
"sha256": "064564898345b1bc2adaac04650fe5290a74a0ef5e5c1d1953d0c5d7a06ab17f"
},
"www.bin": {
"bytes": 3145728,
"sha256": "feb4bc6f737aff611e534ca439990c99233b7a8879485d65a6e47e82bf075111"
"sha256": "a33d3be59eb2dd293735c633052e53aa14fd0cddc62f621a49326f0056c23a3b"
},
"ota_data_initial.bin": {
"bytes": 8192,
Expand All @@ -23,7 +23,7 @@
},
"bootloader/bootloader.bin": {
"bytes": 22496,
"sha256": "ac6d47f0b046fe2cb91b0bc86f9924885c8ac96d20da87b4d9841ec8c14ee3d8"
"sha256": "106e473278fbefdce277341a2e77a097deea877ccc525ec2b7623a650397b851"
},
"partition_table/partition-table.bin": {
"bytes": 3072,
Expand Down
Binary file modified build/www.bin
Binary file not shown.
15 changes: 15 additions & 0 deletions components/ts_api/include/ts_api.h
Original file line number Diff line number Diff line change
Expand Up @@ -216,6 +216,21 @@ void ts_api_result_ok(ts_api_result_t *result, cJSON *data);
void ts_api_result_error(ts_api_result_t *result, ts_api_result_code_t code,
const char *message);

/**
* @brief Set result error with a reason the Web UI can state exactly
*
* The reason token (lower_snake, e.g. "ssh_auth_failed") becomes the message: the page translates it into the user's
* language. `detail` (optional) goes to data.detail and is only shown in the page's folded details. The numeric `code`
* is still the nearest error class, so an older page degrades to the class sentence.
*
* @param result Result structure
* @param code Nearest error class
* @param token Reason token
* @param detail Optional technical detail (the device's own text), may be NULL
*/
void ts_api_result_reason(ts_api_result_t *result, ts_api_result_code_t code,
const char *token, const char *detail);

/**
* @brief Convert result to JSON
*
Expand Down
14 changes: 14 additions & 0 deletions components/ts_api/src/ts_api.c
Original file line number Diff line number Diff line change
Expand Up @@ -449,6 +449,20 @@ void ts_api_result_error(ts_api_result_t *result, ts_api_result_code_t code,
}
}

void ts_api_result_reason(ts_api_result_t *result, ts_api_result_code_t code,
const char *token, const char *detail)
{
ts_api_result_error(result, code, token);
if (result && detail && detail[0]) {
cJSON *data = cJSON_CreateObject();
if (data && cJSON_AddStringToObject(data, "detail", detail)) {
result->data = data;
} else {
cJSON_Delete(data);
}
}
}

cJSON *ts_api_result_to_json(const ts_api_result_t *result)
{
if (result == NULL) {
Expand Down
Loading
Loading