# 插件 API 与 Context

插件入口函数 activate(context) 会拿到一个 context 对象。你通过它获取 API、日志、以及持久化存储。

# 插件生命周期

  • activate(context):插件被加载并激活时调用(当前版本通常在应用启动后激活)。
  • deactivate():插件被禁用/重载/应用退出时调用,用于清理资源。

# Context 字段(以实际实现为准)

context 由插件系统创建,包含:

  • context.pluginId:插件 ID(等同于 package.jsonname)。
  • 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 扩展(主页卡片/页面/菜单/前台组件)单独放在: