# 插件 API 与 Context
插件入口函数 activate(context) 会拿到一个 context 对象。你通过它获取 API、日志、以及持久化存储。
# 插件生命周期
activate(context):插件被加载并激活时调用(当前版本通常在应用启动后激活)。deactivate():插件被禁用/重载/应用退出时调用,用于清理资源。
# Context 字段(以实际实现为准)
context 由插件系统创建,包含:
context.pluginId:插件 ID(等同于package.json的name)。context.manifest:解析后的package.json。context.storagePath:插件私有数据目录。context.subscriptions:可选的 Disposable 列表(停用插件时会自动逐个dispose())。context.globalState:简单键值存储(持久化到global-state.json)。context.workspaceState:简单键值存储(持久化到workspace-state.json)。context.log(...)/context.warn(...)/context.error(...):带插件前缀的日志。context.api:ASG.Director 提供的核心 API(见下文)。
# globalState / workspaceState 用法
async function activate(context) {
const counter = context.globalState.get('counter', 0)
context.globalState.set('counter', counter + 1)
context.workspaceState.set('lastRoomId', 'abc123')
}
# API 概览(context.api)
下面列出的接口来自主进程插件 API(PluginAPI)。
# 命令(commands)
// 注册
const disposable = context.api.commands.registerCommand('demo.cmd', async (...args) => {
context.api.notifications.showInfo('命令触发成功')
})
context.subscriptions.push(disposable)
// 执行
await context.api.commands.executeCommand('demo.cmd', 1, 2, 3)
# 通知(notifications)
context.api.notifications.showInfo('提示文本')
context.api.notifications.showWarning('警告文本')
context.api.notifications.showError('错误文本')
# 窗口(window)
常用于:弹对话框、创建插件自己的工具窗口。
// 打开选择文件
const files = await context.api.window.showOpenDialog({
properties: ['openFile'],
filters: [{ name: 'JSON', extensions: ['json'] }]
})
// 创建一个简单工具窗口
context.api.window.createWindow({
title: '我的插件窗口',
width: 900,
height: 600,
url: 'https://example.com'
})
# 状态栏(statusBar)
const item = context.api.statusBar.createStatusBarItem('right', 100)
item.text = '插件已就绪'
item.tooltip = '点击执行命令'
item.command = 'demo.cmd'
item.show()
context.subscriptions.push(item)
# 工具(utils)
context.api.utils.openExternal('https://example.com')
const text = context.api.utils.readClipboardText()
context.api.utils.writeClipboardText(text + '\nfrom plugin')
# UI 扩展接口
UI 扩展(主页卡片/页面/菜单/前台组件)单独放在: