feat: 动态插件系统 M0-M3(两层能力模型 + pi 原生契约 + Obsidian 式 SDK)

This commit is contained in:
Rick Ye
2026-09-10 02:15:55 +08:00
parent 2b69a9aa13
commit 367f3f5c5b
37 changed files with 2009 additions and 5773 deletions
+36
View File
@@ -13,6 +13,9 @@ import type {
ModelCatalog,
NavigateTreeOptions,
PermissionMode,
PluginInfo,
PluginsUiState,
PluginViewChange,
ResourceDetails,
SendImage,
SessionMeta,
@@ -129,6 +132,39 @@ const api = {
return () => {
ipcRenderer.removeListener('browser:event', listener)
}
},
// ---- 插件系统 ----
pluginsList: (): Promise<PluginInfo[]> => ipcRenderer.invoke('plugins:list'),
pluginsUiState: (): Promise<PluginsUiState> => ipcRenderer.invoke('plugins:uiState'),
pluginsSetEnabled: (id: string, enabled: boolean): Promise<void> =>
ipcRenderer.invoke('plugins:setEnabled', id, enabled),
pluginsReload: (): Promise<void> => ipcRenderer.invoke('plugins:reload'),
pluginsOpenView: (view: string, params?: unknown): Promise<void> =>
ipcRenderer.invoke('plugins:openView', view, params),
/** 插件页桥转发(渲染层桥校验来源后调用;pluginId 键控写主进程单一事实源) */
pluginsSetStatus: (pluginId: string, itemId: string, item: unknown): Promise<void> =>
ipcRenderer.invoke('plugins:setStatus', pluginId, itemId, item),
onPluginsListChanged: (callback: () => void): (() => void) => {
const listener = (): void => callback()
ipcRenderer.on('plugins:listChanged', listener)
return () => {
ipcRenderer.removeListener('plugins:listChanged', listener)
}
},
onPluginsUiState: (callback: (state: PluginsUiState) => void): (() => void) => {
const listener = (_e: Electron.IpcRendererEvent, state: PluginsUiState): void => callback(state)
ipcRenderer.on('plugins:uiState', listener)
return () => {
ipcRenderer.removeListener('plugins:uiState', listener)
}
},
onPluginsView: (callback: (change: PluginViewChange) => void): (() => void) => {
const listener = (_e: Electron.IpcRendererEvent, change: PluginViewChange): void => callback(change)
ipcRenderer.on('plugins:view', listener)
return () => {
ipcRenderer.removeListener('plugins:view', listener)
}
}
}