前言¶
用 agent 写 LVGL 代码,最常见的失败模式是 API 版本混用。模型训练时见过的 v9 内容远多于 v8.4,生成的代码经常两边都沾:lv_display_create()(v9)和 lv_disp_drv_t(v8)出现在同一段里,或者调用 v8.4 中根本不存在的 lv_async_call()。对目标环境锁死在 v8.4 的项目,这类问题只能靠人逐行排查。
DSH 的理念是「一切皆插件」,技能(skill)机制正好可以承载这类领域知识。下面介绍 sa998aaron 维护的 better-LVGL-for-dsh,它把 agent 钉在 LVGL v8.4 事实上。
这是什么¶
better-LVGL-for-dsh 是面向 DeepSeek Harness(dsh)的离线 LVGL 8.4 知识技能包,当前版本 0.1.0,MIT 许可证。它在 ctx.skills 上注册 9 个按需加载的技能,让 agent 写出正确的 LVGL v8 API 代码,并重点避免混入 v9 API。知识以离线形式打包在技能文件里。
能力路径与目录结构¶
先看这个包是怎么接进 dsh 的。能力路径是:Cordis 插件 → 运行时把技能注册到 ctx.skills → 内置的 dsh-tool-skill 消费者 → 模型可见的技能目录与 skill 加载器。
技能格式遵循 Agent Skills 标准(SKILL.md + YAML frontmatter),纯 ESM、零依赖、无构建步骤。仓库结构如下:
better-LVGL-for-dsh/
├── package.json # dsh.bundle 声明
├── cordis.patch.yml # Cordis 组合 patch 行
├── index.js # 入口:扫描 skills/ 并逐个注册到 ctx.skills
└── skills/<name>/SKILL.md
九个技能的覆盖范围¶
| 技能 | 覆盖内容 |
|---|---|
lvgl84 |
入口与路由:v8/v9 API 混淆锚点、技能地图、最小可运行骨架 |
lvgl84-core |
对象模型、屏幕、创建/删除、坐标/对齐/尺寸、flags、滚动 |
lvgl84-widgets |
全部 30+ 内置 widget 速查:创建函数与各 widget 专属 API |
lvgl84-style |
样式系统:共享与本地样式、part/state 选择器、主题、过渡 |
lvgl84-event |
完整事件码表、user_data、事件冒泡、keypad/encoder 组、lv_msg |
lvgl84-layout |
Flex 与 Grid 布局全覆盖,附 CSS 到 LVGL 对照表 |
lvgl84-porting |
lv_conf.h、显示 flush_cb、输入驱动、tick、双缓冲 + DMA、线程安全 |
lvgl84-pitfalls |
症状→原因→修复表:花屏、卡死、OOM、点击失效、CJK 字体 |
lvgl84-migration |
v7→v8.4 迁移:改名/移除的 widget、重写的样式/事件/驱动 |
lvgl84 是入口,其余按主题拆分。所有技能按需加载,agent 用到哪个主题就读哪份。
安装与启用¶
从 GitHub 安装:
dsh plugin --profile web add github:sa998aaron/better-LVGL-for-dsh
或从本地克隆安装:
dsh plugin --profile web add <本仓库绝对路径>
安装后需要重载 profile。重载后 lvgl84-* 技能会出现在模型可见的技能目录里并按需加载;也可以用 /lvgl84-style 这类手势显式调用某个技能。
验证是否生效¶
让 agent 写一个简单界面:
Write an LVGL 8.4 UI with a title bar and three buttons.
如果生成的代码使用 lv_obj_create / lv_obj_set_flex_flow / lv_obj_add_event_cb,而不是 v9 的 lv_display_create,说明插件已经在起作用。
自建技能¶
这个包也支持往里面加自己的技能。在 skills/<kebab-case-name>/SKILL.md 创建文件,frontmatter 写 name、description,可选 whenToUse,正文为 Markdown:
---
name: my-skill
description: 一句话说明它是什么、什么时候用。
whenToUse: 可选的触发描述
---
正文(Markdown)……
重载插件后,apply 时会重新扫描目录,新技能随之注册。
适用场景与注意事项¶
适合两类人:用 dsh 做 LVGL v8.4 开发的 agent 工作流;以及从 v7 迁移到 v8.4 的项目,可以直接用 lvgl84-migration。
注意两点:
1、插件以当前 dsh 进程的权限运行。安装第三方插件前,建议先读一遍源码和许可证。这个仓库结构简单——一个 index.js 入口、一份 cordis.patch.yml、skills/ 下的 Markdown 技能文件,过一遍成本不高,许可证为 MIT。
2、安装后必须重载 profile 才生效,这一步容易漏。
小结¶
这个插件做的事情很集中:把「LVGL 该用 v8 API、别混 v9」这条经验固化成可分发、可按需加载的技能,而不是每次都在提示词里反复叮嘱。目录页:https://www.skillhub.cn/plugins/sa998aaron/better-LVGL-for-dsh(社区维护的独立站点,与 DeepSeek / 幻方无官方从属关系);源码仓库:https://github.com/sa998aaron/better-LVGL-for-dsh。