当用户要在 OpenLoaf 工作台 / 桌面上新增、修改、查看、删除 widget(桌面组件 / 小组件 / 仪表盘卡片)时触发。典型说法"加个天气 widget"、"做个番茄钟组件"、"改下这个 widget 的颜色"。**不用于**:聊天消息里一次性展示图表(→visualization-ops-skill)、AI 生成图片(→cloud-media-skill)、对话里随口提到"时钟 / 倒计时"(→直接回答)。
76
96%
Does it follow best practices?
Run evals on this skill
Adds up to 20 points to the overall score
View guide
Passed
No findings from the security scan
本 skill 负责 Widget 生命周期管理(创建脚手架、查询、验证编译)。编码细节(SDK API、组件写法、安全沙箱)在 generate-dynamic-widget skill 中,需要写代码时先 LoadSkill(skillName: "generate-dynamic-widget")。
| 工具 | 职责 | 只读 |
|---|---|---|
WidgetInit | 生成 widget 脚手架目录(~/.openloaf/dynamic-widgets/<id>/) | 否 |
WidgetList | 列出所有已创建的 widget | 是 |
WidgetGet | 读取单个 widget 详情 | 是 |
WidgetCheck | 编译 widget(TypeScript)+ 触发实时预览刷新 | 是 |
GenerateWidget | Widget 代码生成(详见 generate-dynamic-widget skill) | 否 |
Read | Widget 代码读取(常驻工具) | 是 |
Edit | Widget 代码编辑(常驻工具) | 否 |
加载:
Read/Edit始终可用;WidgetInit/WidgetList/WidgetGet/WidgetCheck/GenerateWidget调用前须先ToolSearch(names: "WidgetInit,WidgetList,WidgetGet,WidgetCheck,GenerateWidget")激活 schema。
用户想要 Widget
├── 已有 Widget?
│ ├── 是 → WidgetList → WidgetGet → Read → 了解现状
│ │ └── 需要改代码 → ToolSearch(names: "generate-dynamic-widget")
│ │ └── Edit → WidgetCheck
│ └── 否 → 创建新 Widget(见下方流程)
└── 只是查询/浏览?
└── WidgetList / WidgetGet 即可当用户想要变更已有 Widget 时:
WidgetInit — 生成脚手架目录
~/.openloaf/dynamic-widgets/<id>/)、package.json 和类型桩文件。跳过此步直接写文件会导致编译器找不到类型定义。ToolSearch(names: "generate-dynamic-widget") — 加载编码规范Write — 写入 widget.tsx(前端组件)Write — 写入 functions.ts(服务端函数,按需)WidgetCheck — 编译 + 触发实时预览
WidgetList → WidgetGet → Read — 定位并读取源码Edit — 精确替换修改WidgetCheck — 编译验证当 WidgetCheck 返回编译错误时:
Cannot find module 'xxx' → widget.tsx 只能 import react、react/jsx-runtime、@openloaf/widget-sdk,删除禁用的导入Type 'xxx' is not assignable → 检查 SDK 类型定义,确认 props/state 类型匹配JSX element type does not have any construct → 检查组件导出是否正确(必须 export default)Edit 修复 → 再次 WidgetCheck,直到编译通过适合做的事情:
不适合做的事情:
~/.openloaf/dynamic-widgets/<widget-id>/widget.tsx 只能 import:react、react/jsx-runtime、@openloaf/widget-sdkfunctions.ts 在 Server 端执行,10 秒超时.env 注入,禁止硬编码a1ab5be
If you maintain this skill, you can claim it as your own. Once claimed, you can manage eval scenarios, bundle related skills, attach documentation or rules, and ensure cross-agent compatibility.