插件与主题
这里只记录当前 runtime 实际可用的功能。
Plugin SDK
import { definePlugin } from "@vyline/plugin-sdk";
export default definePlugin({
id: "my-plugin",
name: "My Plugin",
version: "0.1.0",
permissions: ["messages:read"],
activate(ctx) {
ctx.messages.on("message", (message) => {
ctx.logger.info(`received: ${message.id}`);
});
},
deactivate() {},
});
在 data/plugins/<pluginId>/ 中放置 manifest.json 与 index.ts 或 index.js,再从设置或 API 按账号启用。Bun 可直接加载 TypeScript,因此 plugin 本身不强制要求单独 build。
当前 runtime 可用权限
| 权限 | 公开功能 |
|---|---|
messages:read | ctx.messages.on("message", ...) |
settings:read | ctx.settings.get(...) |
settings:write | ctx.settings.set(...) |
SDK 类型中还存在为未来预留的 permission 名称。类型里有 permission 字符串,不代表 runtime 已实现对应 capability。不要把发送、通知、media、storage、UI 扩展视为当前已公开的 runtime API。
plugin 异常会在 activate/handler 边界被捕获。启用状态与设置按账号保存。但 plugin 仍作为本机代码在同一 host 上执行,因此不要安装不可信 plugin。
Themes
Theme 不只是 accent color。代表性 token 包括:
id, name, accent, accentContrast,
bg, surface, surface2, sidebar,
text, textDim, border,
msgIn, msgOut, msgInText, msgOutText,
radius, chatBg, pattern
在 Vyline/packages/themes/src/index.ts 的 THEME_PRESETS 中添加 preset。主程序直接读取 @vyline/themes,因此只添加 preset 时不需要修改 Frontend 状态管理或 Backend。