Skip to content

PluginContext

Defined in: packages/schema/src/plugin.ts:147

Plugin 上下文(Plugin 能访问的全部 API)

Plugin 只能看到受限的 Runtime API,看不到 React/Redux/Cloud。 通过 runtime 读写 Asset,通过 registerCapability 注册能力实现。

注意:Plugin SDK 已定位为浏览器内嵌入的兼容层(见 docs/AI生态冲击调整方案.md §4)。若目标是让 AI 客户端调用本地能力, 推荐使用 @lokvis/mcp-server(MCP 标准),而非 Plugin SDK。

runtime: object

Defined in: packages/schema/src/plugin.ts:149

Runtime 受限 API

getAsset: (id) => Promise<Asset>

获取资产元数据

string

Promise<Asset>

importAsset: (file) => Promise<string>

导入文件为资产,返回 AssetId

File | Blob

Promise<string>

getAssetBlob: (asset) => Promise<Blob>

读取资产的实际 Blob 数据(用于处理)

Asset

Promise<Blob>

createAsset: (blob, metadata, type) => Promise<Asset>

从 Blob 创建新资产(能力产出物)

Blob

AssetMetadata

AssetType

Promise<Asset>

listCapabilities: () => Promise<Capability[]>

列出所有已注册能力

Promise<Capability[]>


eventBus: EventBus

Defined in: packages/schema/src/plugin.ts:166

事件总线


readonly sandbox: PluginPermissionSandbox

Defined in: packages/schema/src/plugin.ts:201

权限沙箱(W18.6)。

Plugin 据此在调用受限 API 前主动断言: ctx.sandbox.assertNetworkAllowed(‘loading manifest’);

Runtime 在 installPlugin() 期间应用 network guard (monkey-patch fetch/XHR/WebSocket/EventSource),声明 network:none 时这些 API 调用立即抛 NetworkGuardError。 capability execute() 路径不自动应用守卫 —— plugin 应主动自检。

registerCapability(impl): void

Defined in: packages/schema/src/plugin.ts:168

注册能力实现(变换:Asset→Asset)

CapabilityImplementation

void


registerMetadataReader<T>(name, reader): void

Defined in: packages/schema/src/plugin.ts:179

注册元数据读取函数(查询:Asset→T)。

用于非变换类能力(如 EXIF 读取)。Runtime 持有 reader 引用, UI 通过 runtime.readAssetExif(id) 间接调用,不直接依赖 Plugin / Engine。 同名 reader 重复注册时覆盖前者(支持热更新)。

T

string

读取器名称,约定与能力名对齐(如 ‘image.read-exif’)

MetadataReader<T>

读取函数

void


registerPanel(panel): void

Defined in: packages/schema/src/plugin.ts:189

注册 UI Panel(UI 扩展点)。

Runtime 持有 PanelDefinition 并发射 panel:registered 事件; UI 层(ui-react)订阅事件并通过 runtime.listPanels() 消费, 按 location 挂载到 Workspace 对应区域。component 字段是渲染器 标识,由 UI 层的 panel renderer 注册表解析(runtime 不持有 React 组件,依赖反转)。同 id 重复注册覆盖前者(热更新语义)。

PanelDefinition

void


log(level, message): void

Defined in: packages/schema/src/plugin.ts:203

日志

"info" | "warn" | "error"

string

void