Skip to content

Commit 2959173

Browse files
committed
feat: 增加插件商店和插件管理
1 parent 83cbc20 commit 2959173

10 files changed

Lines changed: 1472 additions & 32 deletions

File tree

package.json

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"name": "maibot-onekey-desktop",
3-
"version": "0.1.10",
3+
"version": "0.2.0",
44
"description": "Electron desktop shell for MaiBot OneKey.",
55
"author": "MotricSeven",
66
"license": "GPL-3.0-only",
@@ -95,6 +95,13 @@
9595
"!**/*.pyc",
9696
"!**/.git/index.lock",
9797
"!**/.git/objects/pack/.tmp-*",
98+
"!MaiBot/config/**",
99+
"!MaiBot/data/**",
100+
"!MaiBot/maibot_statistics.html",
101+
"!MaiBot/plugins/sengokucola_better-image/**",
102+
"!MaiBot/plugins/__init__.py",
103+
"!napcat/versions/**/resources/app/napcat/config/webui.json",
104+
"!napcatframework/versions/**/resources/app/LiteLoader/plugins/NapCat/config/webui.json",
98105
"!napcat/.git/**"
99106
]
100107
}

src/main/ipc/app.ts

Lines changed: 59 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,10 @@ import type {
1313
MaiBotConfigImportResult,
1414
MaiBotDataImportResult,
1515
MaiBotDataResetResult,
16+
MaiBotInstalledPlugin,
17+
MaiBotPluginListResult,
18+
MaiBotPluginOperationRequest,
19+
MaiBotPluginOperationResult,
1620
ManagedPythonPackageName,
1721
ModuleRuntimeVersions,
1822
ModuleUpdateResult,
@@ -40,6 +44,7 @@ import type {
4044
} from "../../shared/contracts";
4145
import { InitManager } from "../services/init-manager";
4246
import { LogStore } from "../services/log-store";
47+
import { MaiBotPluginClient } from "../services/maibot-plugin-client";
4348
import { ModuleUpdater } from "../services/module-updater";
4449
import { PythonDependencyManager } from "../services/python-dependency-manager";
4550
import { ServiceManager } from "../services/service-manager";
@@ -377,6 +382,11 @@ export function registerAppIpc({
377382
});
378383
};
379384

385+
const maibotPluginClient = new MaiBotPluginClient({
386+
maibotRoot: join(paths.modulesRoot, "MaiBot"),
387+
gitPath: initManager.getGitPath(),
388+
});
389+
380390
serviceManager.on("snapshot", (services: ServiceDescriptor[]) => {
381391
const window = getMainWindow();
382392
window?.webContents.send("services:snapshot", services);
@@ -581,6 +591,55 @@ export function registerAppIpc({
581591
},
582592
);
583593

594+
ipcMain.handle("plugins:listMarket", async (): Promise<MaiBotPluginListResult> => {
595+
return maibotPluginClient.listMarket();
596+
});
597+
598+
ipcMain.handle("plugins:listInstalled", async (): Promise<MaiBotInstalledPlugin[]> => {
599+
return maibotPluginClient.listInstalled();
600+
});
601+
602+
ipcMain.handle(
603+
"plugins:install",
604+
async (_event, request: MaiBotPluginOperationRequest): Promise<MaiBotPluginOperationResult> => {
605+
if (!request.pluginId || !request.repositoryUrl) {
606+
throw new Error("Plugin id and repository url are required.");
607+
}
608+
const result = await maibotPluginClient.install(request.pluginId, request.repositoryUrl, request.branch);
609+
logStore.append("desktop", "system", `MaiBot plugin installed: ${request.pluginId}`);
610+
return result;
611+
},
612+
);
613+
614+
ipcMain.handle(
615+
"plugins:update",
616+
async (_event, request: MaiBotPluginOperationRequest): Promise<MaiBotPluginOperationResult> => {
617+
if (!request.pluginId || !request.repositoryUrl) {
618+
throw new Error("Plugin id and repository url are required.");
619+
}
620+
const result = await maibotPluginClient.update(
621+
request.pluginId,
622+
request.repositoryUrl,
623+
request.branch,
624+
request.latestVersion,
625+
);
626+
logStore.append("desktop", "system", `MaiBot plugin updated: ${request.pluginId}`);
627+
return result;
628+
},
629+
);
630+
631+
ipcMain.handle(
632+
"plugins:uninstall",
633+
async (_event, pluginId: string): Promise<MaiBotPluginOperationResult> => {
634+
if (!pluginId) {
635+
throw new Error("Plugin id is required.");
636+
}
637+
const result = await maibotPluginClient.uninstall(pluginId);
638+
logStore.append("desktop", "system", `MaiBot plugin uninstalled: ${pluginId}`);
639+
return result;
640+
},
641+
);
642+
584643
ipcMain.handle("pythonDeps:getState", (): PythonOverridesState => {
585644
return pythonDependencyManager.getState();
586645
});

0 commit comments

Comments
 (0)