/** * 浏览器插件(内置,组件级:UI 仍由宿主树 BrowserPanel 承载,面板 tab 见 App.tsx)。 * 主进程侧:browserTools 经 pi.registerTool 注册(原生路径,提示词注入/审批拦截 * 与 pi 生态一致),并示范内联 UI——受管浏览器打开时推状态胶囊。 */ import { getBrowserController } from '../../browser/browser-controller' import { browserTools } from '../../tools/browser-tools' import type { BuiltinPlugin } from './index' export const browserPlugin: BuiltinPlugin = { manifest: { id: 'browser', name: '浏览器', version: '0.1.0', minContract: '0.1.0', panel: true, order: 10, description: '受管浏览器' }, /** 宿主专属二级设置页(代理设置 + 登录态导入;见 SettingsModal 插件页特判) */ settingsPage: true, main: (api) => { for (const tool of browserTools) { api.pi.registerTool(tool) } const pushStatus = (): void => { const state = getBrowserController().getState() if (!state.open || state.tabs.length === 0) { api.ui.removeStatusItem('tabs') return } const active = state.tabs.find((t) => t.tabId === state.activeTabId) const title = active?.title?.trim() api.ui.setStatusItem('tabs', { text: `浏览器 ${state.tabs.length} 页${title ? ` · ${title.slice(0, 12)}` : ''}`, tone: 'default' }) } const off = getBrowserController().onState(pushStatus) pushStatus() return () => { off() api.ui.removeStatusItem('tabs') } } }