Support memory static files and plugin APIs

Introduce in-memory static file support and inter-plugin exports. Add MemoryStaticFile/MemoryFileGenerator types and expose staticOnMem in PluginRouterRegistry; router registry now tracks memory routes and exposes getters. Add getPluginExports to plugin manager adapters to allow plugins to call each other's exported modules. WebUI backend gains routes to serve /plugin/:pluginId/mem/* (memory files) and /plugin/:pluginId/files/* (plugin filesystem static) without auth. Update builtin plugin to demonstrate staticOnMem and inter-plugin call, and add frontend UI to open extension pages in a new window. Note: API router no longer mounts static filesystem routes — those are handled by webui-backend.
This commit is contained in:
手瓜一十雪
2026-02-02 15:01:26 +08:00
parent 3a841ed0f1
commit 610e19e34c
7 changed files with 230 additions and 11 deletions

View File

@@ -86,6 +86,14 @@ export default function ExtensionPage () {
setIframeLoading(false);
};
// 在新窗口打开页面
const openInNewWindow = (pluginId: string, path: string) => {
const cleanPath = path.replace(/^\//, '');
const token = localStorage.getItem('token') || '';
const url = `/api/Plugin/page/${pluginId}/${cleanPath}?webui_token=${token}`;
window.open(url, '_blank');
};
return (
<>
<title> - NapCat WebUI</title>
@@ -125,7 +133,16 @@ export default function ExtensionPage () {
title={
<div className='flex items-center gap-2'>
{tab.icon && <span>{tab.icon}</span>}
<span>{tab.title}</span>
<span
className='cursor-pointer hover:underline'
title='点击在新窗口打开'
onClick={(e) => {
e.stopPropagation();
openInNewWindow(tab.pluginId, tab.path);
}}
>
{tab.title}
</span>
<span className='text-xs text-default-400'>({tab.pluginName})</span>
</div>
}