Skip to content

Releases

elab-Flow v4.0.0

Choose a tag to compare

@xkk6663 xkk6663 released this 06 Nov 16:24

elab-Flow v4.0.0 发布说明

GitHub Release 正文。tag v4.0.0 指向本版本内核提交。
详细变更见 CHANGELOG.md 的 [V4.0.0] 与 [DSH 插件 1.0.0] 两条。

这是什么

elab-Flow v4.0.0 —— 嵌入式闭环开发驾驶舱。agent 在一个面板里完成「发现 → 编译 → 烧录 → 调试校验 → 串口闭环」,
开发过程对用户全程可视化(阶梯进度、实时日志、RAM/FLASH 占用、多通道波形)。

本版是主仓大版本,同步发布 DSH 插件 1.0.0(npm 包 dsh-elab-cockpit)。

本版要点

帧协议补强:位域 / 变长 / 多 ID / 组帧

  • 字段支持 bit_offset / bit_length / bit_order(lsb0 默认、msb0 线性大端位流),
    有符号位域做符号扩展,位域只允许整型。
  • 新增 frame.length_field(type: u8|u16、offset/endian/mul/add)与 frame.id_field + variants
    (按 id 分发字段,未命中进 unknown_id 并跳过)。
  • 新增 serialcodec.encode:字段值 → 字节(枚举 label、逆 scale/bias、位写入、
    固定长/变长反算、head/tail/id/length/checksum 自动写)。
  • 只读模板库 templates/frames/*.json:telemetry_u16、mavlink_v1、modbus_rtu、dlt645_read。
  • 兼容红线:旧 profile 输出形状不变,未启用新特性时不出现 length_field / id_field / variants 键。

Modbus RTU 主站(★ 新能力)

从「看得懂帧」到「能跟设备对话」,协议层补齐工业现场最常见的那条总线:

  • 内核新增 services/elab/modbus.py(PDU 编解码 + CRC16 + 异常码 + 功能码元数据)与
    services/elab/modbusmaster.py(串口事务、寄存器映射、轮询调度)。
  • 功能码 01/02/03/04/05/06/0F/10 全支持,单次读、单次写、批量读写(FC15/16 一次多寄存器);
    从站 1..247,0 号只用于广播写。
  • 点表(31 点 / 5 组 / rev 乐观锁):点位带数据类型、字序、缩放与单位,
    轮询按 fast/diag/slow/bits 四档分组,一轮 31 点合并成 8 条事务发出。
  • 面板与 Agent 只渲染内核的 MODBUS_META 自描述(单位、限值、时序、异常码、错误分类),
    不各记一份数字。
  • WebUI 新增 modbus 工作区;DSH 插件右栏新增第 5 个页签 Modbus:
    连接条 / 统计行 / 点表 / 单次读写 / DMA 诊断卡 / 事务流水。
  • Agent 侧新增门面 elab_modbus(meta·status·open·close·read·write·start·stop·transactions·map)。

配套固件例程 examples/STM32F411_modbus 演示硬件串口双缓冲的推荐做法:
循环 DMA + HT/TC(只作搬运提示)+ IDLE + 20ms 静默定界,发送侧软件乒乓
(HAL_UART_TxCpltCallback 链式续传);rx_drain() 三处调用者用 PRIMASK 临界区保护。
教程见 docs/tutorials/09-协议上手_Modbus.md。

Agent 自学习协议(★ 新能力)

不写一行命令,从陌生字节到直播解码:

  1. 串口监视出现陌生字节 → 复制样本 HEX;
  2. elab_frame_learn action=learn 产出草稿(置信度 / 回放验证 / 等长证据链);
  3. 人复核字段名 → 落盘保存;
  4. 解码器下拉选 profile → 直播解码。

配套 verify / auto / codegen,learn 只产草稿不落盘。

工具链 provider(数据与执行分离)

  • 新增 services/elab/provider.py:manifest 校验、版本约束、注册表、ResolvedToolchain 解析、
    安装/卸载与内容哈希复核。
  • elab provider list|search|install|remove、elab.lock.yaml、elab doctor --strict-lock;
    market/index.json 新增 providers 数组。
  • ESP32-S31-Korvo 工程迁移为 provider: espressif/idf@>=1 <2,ESP-IDF v6.1 实机跑通
    编译 → 烧录 → 烧录校验 → 串口心跳闭环。

DSH 插件 1.0.0:Agent 工具门面化 27 → 15

破坏性变更。注册面从 27 个平铺 elab_* 工具收敛为 15 个混合入口(7 门面 + 8 细粒度):

门面 action 枚举
elab_run build / triple / loop / step / preview / cancel
elab_serial monitor / write / decode / decoded / stats / read / wait
elab_debug open / control / inspect / breakpoint / wait / close
elab_frame list / get / preview / save / delete / encode / templates / import
elab_frame_learn learn / verify / auto / codegen
elab_pkg status / search / install / activate / remove / update / verify / adapt
elab_modbus meta / status / open / close / read / write / start / stop / transactions / map

另有 8 个高频细粒度入口:elab_status · elab_guide · elab_log · elab_serial_read ·
elab_serial_wait · elab_serial_capture · elab_serial_widget · elab_debug_inspect。

  • elab_guide 升级为 group → action 两层意图树,每个入口带同义词、前置条件与调用示例;
    支持 topic=overview|run|serial|debug|frame|pkg 只取一组。
  • 工具契约上移 domain 层(src/domain/tools.ts),执行实现留在 adapters。
  • 过渡期:插件配置 toolMode: both 会额外注册 17 个旧名别名(带废弃提示,执行全转发门面,
    零重复实现)。默认 facade 不注册,上下文最省。

流程清单归位

STEP_META / KERNEL_PLANS 从 cockpit/server.py 挪到 services/elab/flow.py
(流程清单 = 芯片无关的步骤词汇与三档定义,唯一事实源),驾驶舱只引用不复制。
新增回归测试守卫「server.py 不得再内联流程清单」。

收尾健壮性批次

盘点报告 docs/reports/健壮性盘点_2026-11-05.md 的 11 条全部处置(8 条修复 + 3 条以更轻手段收敛):

  • GET /api/runs/active 只读进程内活动登记簿;list_runs 只读首尾行;
  • SSE 上限 8 → 16;调试壳层 SSE 按需建;断流状态可感知;
  • 串口四路合并轮询(每拍 1 个请求带回四路增量);全部 fetch 加超时;
  • run 清理入口 events.prune_runs(keep, days, dry_run);
  • 强杀内核不再留孤儿 openocd(Windows Job Object 兜底)。

安装

# DSH 插件(npm)
npm install dsh-elab-cockpit
# 或从源码路径装
dsh plugin --profile web add github:xkk6663/elab-flow#path:/packages/dsh-elab-cockpit

# 内核(从源码运行,无第三方依赖,Python ≥ 3.10)
git clone https://github.com/xkk6663/elab-flow.git
cd elab-flow && ./elab.cmd pkg bootstrap    # Windows 用 elab.cmd

上板另需 CMake + Ninja + ARM GCC + OpenOCD。

升级注意

  • 许可证变更:自 v4.0.0 起本仓改用 Apache-2.0(此前 v1.0.0 – v3.1.0 为 MIT)。
    已发布版本不受影响 —— MIT 授权永久有效。二次分发时请一并携带 LICENSE 与 NOTICE。
    详见 README 许可证小节。
  • 插件默认下载的内核版本同步为 v4.0.0;最低兼容内核仍是 2.1.0(MIN_KERNEL_VERSION,仅提示不阻断)。
  • 若你的 agent 脚本用的是旧工具名(elab_triple / elab_frame_profile / elab_debug_open …),
    打开 toolMode: both 过渡,或按 elab_guide 给出的迁移表改写。
  • 旧 elab_serial(project, data) 直写形态由新门面的参数推断兼容(action 可省)。

验证状态

项 结果
插件 npm test 171 pass / 0 fail
插件 tsc --noEmit(host + client) 无错
插件 npm run build PASS(client.js 418460 B,满足宿主 ModuleLoader 契约,5 个槽位)
插件 lib/ 与源码同步 二次构建指纹一致(幂等)
内核 unittest 687 passed / 5 skipped / 0 failed
elab doctor 通过
elab pkg index --check / elab lock --check --strict 均一致

实机验证机型:STM32F103C8T6(COM10,115200 bps)、STM32F411CEU6、
STM32F411_modbus(Modbus RTU 从站,DAPLink CDC / COM10,115200 bps / 700 次事务 0 失败)、
AT32F421G8U7、ESP32-S31-Korvo。

文档

  • 串口面板使用教程(含 §5.7 帧协议自学习按钮实操):docs/tutorials/07-串口面板使用.md
  • Modbus RTU 上手(双缓冲 + 点表 + 批量读写实机演示):docs/tutorials/09-协议上手_Modbus.md
  • DSH 插件上手:docs/tutorials/05-DSH插件上手_STM32F103C8T6.md
  • 完整变更日志:CHANGELOG.md

elab-Flow v3.1.0

Choose a tag to compare

@xkk6663 xkk6663 released this 03 Nov 15:07

elab-Flow v3.1.0

一套工具链 + 一条流程跑不同芯片:编译 → 烧录 → 调试 → 串口判据,业务工程零改动。

本版重点

  • 调试工作区 P0–P3:会话式调试器(调用栈 / 变量 / 寄存器 / 断点 / 监视 / 内存 / 反汇编 / 外设 / RTOS 栈 / 审计 / 输出 11 页签);断点与监视持久化(rev 乐观锁);CMSIS-SVD 外设视图;FreeRTOS 栈水位。新增 6 个 elab_debug_* agent 工具。
  • 探针切换:capabilities.meta.probes 下发可选探针,工程行胶囊可原地切换 atlink / dap / stlink / jlink;新增 POST /api/project set_probe。
  • 闭环三态:verdict = ok / failed / inconclusive;串口能开但没收到约定关键字记「未验证」,不再冒充通过;CLI 退出码 0 / 1 / 2。
  • 文档:README 重写(定位 → 是什么 → 功能 → 怎么用);新增教程 04 调试面板、05 DSH 插件;CLI / 波形 / 压测教程重编号为 06 / 07 / 08。

安装

  • 插件:npm i dsh-elab-cockpit@0.5.0,或 dsh plugin --profile web add github:xkk6663/elab-flow#path:/packages/dsh-elab-cockpit
  • 内核:本 Release 附带源码包 elab-flow-3.1.0.zip;运行需 Python >= 3.10(仅标准库),上板另需 CMake + Ninja + ARM GCC + OpenOCD

完整变更见 CHANGELOG.md。

V2.0.0 —— OTA 平台化 · 双槽 A/B Bank · 组合工程

Choose a tag to compare

@xkk6663 xkk6663 released this 08 Oct 14:43

V1.0.0 交付"闭环工作链";V2.0.0 把 OTA 从单点能力升级为平台能力,并以 STM32F411CEU6 完成全链路实板验收。

✨ 相比 V1.0.0 的升级内容

  • OTA 组件化 components/ota:core 场景层芯片无关 / port 平台层(flash HAL / Jump / 按键 / 复位);参考实现 examples/STM32F411CEU6(APP)+ examples/F411CEU6_BOOT(boot),含上位机工具链与驾驶舱可视化。
  • 双槽 A/B Bank + 坏固件自动回滚:trial 试运行(先减并落盘再跳,3 次上电耗尽 → === ROLLBACK ===)· OTA_Confirm() 心跳幂等晋级 · metadata 0x02 防回滚 · 0x17 版本查询决策。实弹四件套真机全绿(正常升级 / 坏固件回滚 / 版本决策 / 槽位交替,bank 记录 openocd 直读复核 active 0→1→0)。实弹抓出并修复 EraseRange 双语义潜伏 bug(向上对齐误用于整片擦除 → 坏固件"复活";新增 EraseRangeFull)。
  • 组合工程(C35):chips yaml 一字段 ota_layout.boot_project → elab build -p f411 自动级联构建 boot;boot 烧录走 md5 指纹台账,日常 app 迭代 boot 字节级零触碰;驾驶舱工程轨 boot 子工程嵌在宿主卡正下方(可收起)。
  • 分区表单一事实源:ota_layout: → 构建期 gen.h 强制注入 → doctor --deep 三方对账;ELAB_MFPU 下传 -mfpu(Cortex-M4F 硬浮点)。
  • skill 平台化:per-chip SKILL.md 淘汰 → 平台聚合(skills/st/stm32、skills/artery/at32)。
  • 驾驶舱 UI 重构:workspaces.ts 工作区注册表单一事实源;工具页可换行按钮行;OTA 投影 + boot 归属展示;默认端口 3333→8333(C34,避开 openocd gdb)。
  • 质量门:单测 151→209 + 集成 37/37;五工程全绿;STM32 上板烧录/调试/OTA 全链路实板验证(V1.0 已知限制清零)。

完整变更见 CHANGELOG.md。

elab-Flow V1.0.0 —— 首个正式发布

Choose a tag to compare

@xkk6663 xkk6663 released this 05 Oct 10:39

[V1.0.0] — 2026-10-05(首个正式发布)

一套工具链 + 一套流程,驱动不同芯片的编译 / 烧录 / 调试 / 串口闭环 —— 业务工程源码零改动。

V1.0.0 是 elab-Flow 的第一个正式版本:八层架构(L0 芯片卡 → L3 CLI → L5 CI →
L6 事件流 → L7 驾驶舱)全部贯通,三个真实工程(AT32 两个 + STM32 一个)接入并
完成上板验收。零第三方依赖 —— Python 侧仅标准库,前端产物已入仓(运行时不需要
Node)。

✨ 功能总览

接入与构建(L0–L2)

  • YAML 驱动接入:一个 projects/<name>.yaml 接入一个工程;芯片参数
    (chips/*.yaml)声明一次全局复用。
  • 两类图形配置器工程的原样接入(约束 C1/C2 的技术支点):
    • A 类(STM32CubeMX):-DCMAKE_TOOLCHAIN_FILE 接管工具链 + inject 在
      project() 之后"补回来"(-lm、.elf 后缀等);
    • B 类(AT32 WorkBench):工具链行内 include() → inject "抢回来"
      (重置 CMAKE_C_FLAGS、清链接旗标)。
  • 确定性适配器(elab adapt):扫描图形配置器导出的工程 → 生成接入 YAML
    (probe / write / check / verify 四段式);人工接管的文件绝不覆盖(A7 保护);
    UI 一键适配(probe 只读在前 → write 落盘 → 卡片自动出现,写入后服务端
    热重载 Config,约束 C29)。

闭环与 CLI(L3)

  • 五步闭环(elab loop -p <name>):doctor → build → flash → debug --verify → monitor,三个工程实测全绿(含上板烧录 ** Verified OK **、断点自检、
    串口闭环命中)。
  • 串口闭环判据引擎(elab monitor):close_on / fail_on / 静默超时 →
    ok / failed / inconclusive 三态;failed 必须有正面失败证据;fail_on
    对整缓冲区绝对优先(防"报活即崩"被掩盖);judge() 为纯函数、38 例离线单测。
  • 串口手写通道(elab serial,M3-b):无状态往返(open→write→read→close),
    与闭环天然串行;CLI 与驾驶舱共用同一份实现。
  • 只读命令预览(elab run/loop --dry-run、GET /api/plan):--clean 的
    删目录副作用显式标出(约束 C26:预览与实跑只有一份命令构造)。

CI(L5)

  • 本地与云端同源(K9):本地 elab ci 与 GitHub Actions 共用同一份
    ci/matrix.yaml。三个 job:host-gate(三工程编译,云端已验证全绿)、
    onhw-gate(上板步骤,self-hosted 门控)、web-dist-guard(前端产物一致性)。
  • 产物路径由 elab ci --json 的 build 步骤自报(约束 C22)—— 接入新工程
    无需改 workflow;门禁绿却零产物 → exit 1(C23)。

事件流(L6)

  • elab run --emit-events 把每步写成只追加的 JSONL 事件流(每 run 一个
    文件、seq 全局单调、单写者 C17);serial/* 域事件链
    (open → line → close → closed-loop)把"串口到底说了什么"落档。
  • SSE 推送:proc/* 100ms 合并、背压丢弃留痕(stream/overrun,C25)、
    控制帧绝不丢(C26)、SSE 合并判据只用 is_batched(C24 —— 实测事故的反向修复)。

驾驶舱(L7)

  • 三列布局:工程轨(YAML 卡片 + 芯片卡 + 一键适配面板)→ 阶段轨(流水线状态带、
    内存占位取自 .map、产物、零改动守卫、阶段账本)→ 证据轨(构建/烧录/串口
    三合一实时日志,环形缓冲 + 命令式 DOM 追加,上万行不卡)。
  • 单步执行 = 独立按钮(C30):阶段轨一排六颗;证据轨各 Tab 内对应按钮;
    可用性与置灰理由同源 card.steps[id].ok。「跑全闭环」显式传步序,
    空闲骨架与按钮同源。
  • 串口 Tab 常驻监视(C31,serialmon):「打开监视 / 关闭监视」—— 读线程
    异常自愈、单例一键关闭、写通道路由进会话;输出只活服务端环形缓冲
    (seq 增量 + gap 丢行报告)+ 前端 600ms 轮询,不进事件流也不落留档。
    监视与闭环双向 409 互斥、指名道姓。
  • TX/RX 独立留档(C28):serial-console.jsonl(有上限、会滚动、原子替换),
    界面进工程/起闭环时按工程回填最近 60 条。
  • 桌面一键启动:仓库根 cockpit.cmd + 桌面快捷方式(图标 cockpit.ico)。
    幂等(已在跑只开 UI);UI 走 Edge --app 独立窗口(无地址栏、任务栏独立
    图标,观感即原生应用且零依赖),Edge 缺失回落默认浏览器;裸 TCP 探测不受
    系统代理/TUN 影响;stdio UTF-8 守卫(C32 —— 修复"双击起服务后 UI 不弹")。
  • 真浏览器验收:日志实时滚动、页面与控制台零报错、契约版本先校验再渲染。

📜 设计约束(本仓库的"为什么")

README §10 收录 C1–C32 共 32 条硬约束,每条都附"为什么"与(多数情况下)
一次真实事故。精选:

# 一句话
C17 事件流单写者:只有 elab run --emit-events 写,其余一律不碰
C22/C23 CI 不写死产物路径;门禁绿却零产物 → 红
C24–C26 SSE 合并只认进程输出;背压丢弃留痕;控制帧绝不丢
C28/C31 手写留档、常驻监视输出都不进事件流(两条道互不污染)
C29/C30 适配写入后热重载 Config;「跑全闭环」必须显式传步序
C32 stdout 被重定向 + GBK 区域编码会崩 CLI/服务 —— 包入口统一守卫

✅ 验收证据(仓库内可复核)

  • 单元测试 151/151:python -m unittest discover -s tests -p "test_*.py"(约 35s)
  • 后端集成 37/37(真起服务、真编译):python -m unittest tests.it_cockpit_server(约 1min)
  • 上板验收:at32f421g8u7 五步全绿(烧录 Verified OK / 断到 main.c:103 /
    串口 2.6s 命中 [alive],无需 --reset-port)
  • GitHub Actions:host-gate 在 ubuntu-latest 全绿(§8.1)
  • 前端产物一致性:重建后 git diff --exit-code cockpit/web/dist/ 零差异

⚠️ 已知限制(诚实清单)

  • STM32 上板烧录/调试未验证(本机只有 AT32 板;命令已生成、只差 target cfg)
  • onhw-gate 需要 self-hosted 探针(云端编译门禁不受影响)
  • SVD 在 IDE 中实际加载未实测
  • 驾驶舱 profiles/*.yaml 插件化装配(M4)、elab skill --adapt(M5.5)未实现
  • 常驻监视的实时流只活服务端环形缓冲 + 浏览器本地缓冲(重启即失 —— 它是
    "看",不是"证据";要证据走闭环 monitor 步骤)

📦 从源码运行

git clone git@github.com:xkk6663/elab-flow.git
cd elab-flow
python -m cockpit.server        # → http://127.0.0.1:3333/(Windows 亦可双击 cockpit.cmd)
elab doctor_deep --all          # 或 ./elab …(MSYS)/ elab.cmd …(cmd)

要求:Python ≥ 3.11(仅标准库);可选:CMake + Ninja + ARM GCC 工具链 +
openocd(上板闭环用)。前端运行时不需要 Node(dist/ 已入仓)。