dsh-vision-bench · Vision 模式
Requires DSH 0.1.5-rc.1. Install from an npm pack tarball, not a link: checkout. Supported contract is pinned in src/infrastructure/harness/dsh-contract.mjs.
日常开发用的会话工作台。跟 Claw 无关。
- 会话区标签:调试、上位机、监控。监控内:可视化、告警、串口报文、操作记录;调试内另有工程结构
- 设置页 Vision:Keil 绑定 UV4(无需 Python);Modbus/串口使用内置 Node 运行时;OpenOCD 仍是外部兼容绑定。一键 运行自检
- 安装后写入用户预设 Vision模式(从官方
standard 复制,再挂上 vision_bench,提示规则由插件 vision-bench:guidance 区段提供)
- Agent 需要时自己调用
vision_bench,不把现场状态塞进每一轮系统提示
- 编译 / 读点 / 写点 / 烧录进入共享任务与「操作记录」;Agent 发起的操作实时可见
- 连接状态只看真实链路:未连接 / 连接中 / 已连接 / 断开中 / 连接异常
- 只使用绑定路径,不在磁盘上搜索
Vision模式
宿主插件 dsh-vision-bench 只挂 connection / webServer。Agent 工具是另一条 loader:dsh-vision-bench/agent(export name 为 dsh-vision-bench-tools),由 Vision模式 预设插入,不和宿主同名。
预设是安装物,不在宿主 apply() 里 seed。首次安装或升级后执行 node scripts/seed-preset.mjs(或设置页重建),写入 $DSH_HOME/.agent-presets/vision-bench/。新建 Session 后生效。
vision_bench 只出现在这个预设里,避免每个 Agent 都多带一套工具。
| action | 作用 |
|---|
status | 当前工程、Target、下载包、进行中任务、操作记录、连接真实状态与点位 runtimeStatus |
ls | 列出工作区内目录和 .uvprojx(不含 .uvmpw) |
select | 选定工程 |
build | 编译 |
map | 当前 Target 的组、源文件、包含关系和函数名;超出上限时带 truncated |
read | 不传 address 则读点表全部段;传入则单次读 |
write | 写线圈 / 保持寄存器:values 长度 1 走 FC05/06,大于 1 走 FC15/16;写入后自动回读并报告一致性。Agent 发起的写点需要用户在界面上批准(上位机页确认卡,5 分钟内有效),结果以通知回到会话 |
manual | 请求用户完成现场人工操作(上电、接线、按复位等),text 必填;用户在调试页点击完成后以通知回到会话 |
visualization | op=list|get|add|update|remove|layout。layout 必须携带 expectedConfigVersion 与 items[{id,x,y,w,h}];CONFIG_DRIFT 后重新 list/get 再提交 |
当前能用
-
设置页绑定 UV4(Keil 编译与工程解析已完全纯 Node 实现,不再需要 Python)。上位机、点表、可视化、告警和串口报文不要求 Python。OpenOCD 烧录仍是外部兼容绑定
-
调试:工作区资源管理器选 .uvprojx(暂不支持 .uvmpw 多工程),选 Target 和输出格式,再编译。失败时编译输出给出错误数、前几条错误原文、阶段和日志路径;「查看完整日志」在应用内打开日志(尾部 256KB,支持搜索)。Agent 失败编译会把 logFile / phase / errors 写入共享任务。右侧「工程」页跟随当前 Session 的工程和 Target;只解析工作区内的 C/H,映射过大时标明截断。vision_bench map 返回同一份结构
-
烧录下载:绑定 OpenOCD 后选调试器(cmsis-dap/stlink/jlink…)和目标芯片(stm32f1x/stm32f4x/nrf52…),一键烧录走 确认卡:显示目标、固件、大小和 sha256,批准后才执行 program verify reset exit。下载进入 download 任务与「操作记录」
-
看总线报文:每次 Modbus 读/写记录事务报文(hex)。RTU 为 ADU(含 CRC);TCP 显示协议归一化报文,不是原始 MBAP。「串口报文」只展示当前或曾经使用过的 RTU 通道(TCP 与仿真连接不出现),负责选择串口与筛选查看(设备/方向/功能码/状态/关键字、暂停滚动、清空、复制 Hex、导出 JSONL),不再负责打开串口。串口由上位机连接持有,Windows 下 COM 独占,Worker owner 表按物理口互斥;占用返回 PORT_IN_USE
-
上位机:设备 / 连接 / 点位。RTU 串口扫描本机已连接 COM 口。真实读写走插件内置 Node Modbus 运行时(仿真不启动 Worker)。功能码 01/03 可写(FC05/06 单点、FC15/16 批量),02/04 只读。写入后显示 写前值 → 目标值 → 回读值。写入超时返回 WRITE_OUTCOME_UNKNOWN(结果未知),不要直接重试,先读回再由用户决定。操作流程:创建连接 → 配置 COM/TCP → 连接 → 添加设备(名称 + 连接内唯一 Unit ID)→ 设备卡片内添加点位(唯一键 = 连接+设备+功能码+地址,不同设备可用同地址)→ 开始采集 → 查看点表 / 可视化 / 告警 → 在「串口报文」选当前 RTU 串口查看报文。连接 / 断开中不可修改端点参数,先断开再改;采集由 Host 后台服务运行,点表/可视化/告警/报文共享同一实时值来源
-
Windows 无 Python 安装:从发布 .tgz 安装后,未安装 Python 即可完整使用 Keil 工程扫描、Target 枚举、工程结构映射与编译,以及 Modbus RTU/TCP 主机读写与轮询。Keil 仍需要本机 UV4;烧录仍需要外部 OpenOCD。macOS 自动测试不能代替 Windows 10/11 实机验收(见 docs/WINDOWS_ACCEPTANCE_0.27.md,尚未真机验收)
-
0.22 写入边界:Host 是工作区唯一写者。配置走 mutateConfig(成功才递增 configVersion),实时值/趋势/告警/报文走同一把 runExclusive 队列上的 mutateRuntime。配置已落盘但连接释放/事件通知失败时返回 ok: true 与 postCommitWarnings,不回滚。Agent 改配置无需确认卡;真实线圈/寄存器写入、烧录、复位仍需界面批准。Agent 与 Host 分进程时走 HTTP 命令桥;system.ping 是无副作用探活。失败会返回 HOST_UNAVAILABLE / HOST_TIMEOUT / HOST_UNAUTHORIZED / HOST_FORBIDDEN / HOST_INVALID_RESPONSE 等,而不是静默降级。
-
点表元数据:每段可带倍率 / 偏移 / 单位 / 告警上下限;CSV 导入导出(剪贴板往返)批量编辑
-
阈值告警:采集时评估越限,越限/恢复写入「操作记录」并通知当前会话;监控「告警」回看记录
还没做:CAN 监视。
安装
前置:本机已能运行 dsh web。安装本插件后即可使用调试、上位机、监控三个工作区。
dsh plugin --profile web add github:xingyingyuzhui/dsh-vision-bench
本机开发请先 npm pack 再 add 那个 .tgz,不要 link: 源码树(会把 node_modules/、coverage/ 整棵链进 profile)。
npm pack
dsh plugin --profile web add ./dsh-vision-bench-*.tgz
装完重启 dsh web。打开 调试 / 上位机 / 监控,或 设置 → Vision。新会话选 Vision模式。
卸载
dsh plugin --profile web remove dsh-vision-bench
绑定写在 $DSH_HOME/vision-bench/bindings.json。用户预设 Vision模式 不会随卸载删除。
开发
实现优先改 src/{domain,application,infrastructure,interfaces,ui};根目录 bench-*.mjs 仅为兼容 re-export。架构决策见 docs/architecture/(含 ADR-024)。然后在插件源码目录执行:
npm install
npm test
npm run quality
npm run build
npm test / npm run quality 需要 devDependencies(TypeScript、Biome、dependency-cruiser、Testing Library)。dsh plugin add 装到运行时后只有生产依赖,不要在那个安装目录跑测试。不要手改生成的 client.js。
License
MIT