Plugins & Themes
現在の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実装済みであることは同じではありません。送信・通知・media・storage・UI拡張は現行runtimeの公開機能として扱わないでください。
pluginの例外はactivate/handler単位で捕捉されます。有効状態と設定はアカウント別に保存されます。ただしpluginは同じホスト上で実行するローカルコードなので、信頼できないpluginを配置しないでください。
Themes
Themeは単なるaccent colorではありません。代表token:
id, name, accent, accentContrast,
bg, surface, surface2, sidebar,
text, textDim, border,
msgIn, msgOut, msgInText, msgOutText,
radius, chatBg, pattern
presetは Vyline/packages/themes/src/index.ts の THEME_PRESETS に追加します。本体側は @vyline/themes を読み込むため、presetの追加だけならUIの状態管理やBackendを変更する必要はありません。