49 lines
1.6 KiB
TypeScript
49 lines
1.6 KiB
TypeScript
/**
|
|
* 浏览器插件(内置,组件级: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')
|
|
}
|
|
}
|
|
}
|