为 UniFlow 开发插件
用 TypeScript 和 UniFlow 插件 SDK,给 UniMind 加上新工具、做自己的面板、在后台定期做事。打包成一个 .uniplugin,审核通过即上架插件商店 —— 学生一键获取,装上立即生效。
import { definePlugin, PluginCommand } from '@uniflow/plugin-sdk'
const countDue: PluginCommand<{ days?: number }> = {
action: 'count_due',
description: 'Count assignments due in the next N days.',
parameters: {
type: 'object',
properties: { days: { type: 'integer' } },
},
async run(args, ctx) {
const list = await ctx.assignments!.list()
const until = ctx.now().getTime() + (args.days ?? 7) * 86_400_000
const due = list.filter((a) => Date.parse(a.dueDate) <= until)
return { count: due.length }
},
}
export default definePlugin({ commands: [countDue] })插件能做的三件事
官方插件与第三方插件用的是完全相同的格式、SDK 和运行时,没有任何私有通道。
给 UniMind 加工具
插件声明的命令直接进入 UniMind 的工具清单。只读命令模型可以直接调用;会改数据的命令先弹确认卡片,用户点了确认才执行,而且可以撤销。
有自己的面板
以标签页打开的界面,React 或原生 TypeScript 都行。用与应用相同的设计令牌和 Tailwind 预设,深浅色自动跟随。
在后台定期做事
声明一个后台命令,插件启用期间由应用按间隔(至少 30 分钟)代为执行 —— 比如每 6 小时刷新一次日历订阅。
三步上手
从想法到上架
一个命令生成项目,保存即热重载,打包后在控制台提交。
生成项目
脚手架生成 plugin.json、命令、面板、中英文文案和测试。纯 TypeScript 与 React + Tailwind 两种模板可选。
$ npx uniflow-plugin init my-timer$ cd my-timer && npm install边写边试
每次保存自动构建。在 UniFlow 侧边栏「插件 › 开发者 › 加载开发中的插件」选中 dist/,改代码即热重载,命令立刻出现在 UniMind 里。
$ npm run dev # 保存即重新构建$ npm test打包提交
在开发者控制台上传包、填好商店页、配上 banner,提交审核。通过后自动上架,所有用户都能在侧边栏「插件」里找到。
$ npm run pack# → my-timer-1.0.0.uniplugin安全是默认值
插件能碰到的一切都经过应用,用户始终知道它能做什么。
沙箱隔离
代码运行在独立源的 iframe 与 Web Worker 里,CSP 禁止一切网络请求和外部资源,只能经 ctx 与应用打交道。
最小权限
12 项权限按需声明,没声明的能力在 ctx 上根本不存在。安装时权限翻译成人话、按风险标色。
用户说了算
模型发起的写操作都要用户在确认卡片上点确认,卡片如实描述将要发生的事,每一步都能撤销。
人工审核
每个版本上架前都由 UniFlow 团队审核:新增的权限、给 UniMind 的命令说明、确认卡片是否说实话。
每个版本的上架流程
从提交到用户收到更新,每一步都有记录。
- 提交 .uniplugin01
- 自动校验(与安装同一套规则)02
- 人工审核03
- 上架插件商店04
- 用户一键更新05
从官方插件学起
闪卡、考试规划、日历同步都是标准的 SDK 工程,与你用 init 生成的项目结构相同 —— 它们的源码就是最好的示范。