功能修改

This commit is contained in:
npc0-hue
2026-07-20 16:42:33 +08:00
parent 48b8ad8d6c
commit a0e69417db
224 changed files with 22015 additions and 884 deletions
+75
View File
@@ -1,3 +1,5 @@
import type { GamePluginResponse } from "../api/types";
export type PluginPermission =
| "server.create"
| "server.read"
@@ -7,6 +9,13 @@ export type PluginPermission =
| "server.logs.read"
| "server.artifacts.read"
| "server.artifacts.write"
| "server.remote.access"
| "server.run.distribution"
| "server.dependencies.manage"
| "server.client-manager.manage"
| "server.game-client.read"
| "server.game-client.command"
| "server.game-client.maintenance"
| "ai.invoke";
export type PluginBridgeAction =
@@ -15,8 +24,56 @@ export type PluginBridgeAction =
| "logs.query"
| "artifacts.open"
| "files.request"
| "remote.access.request"
| "run.distribution.request"
| "dependencies.request"
| "logs.backfill.request"
| "client-manager.request"
| "plugin-lifecycle.request"
| "ai.invoke";
const pluginPermissions: readonly PluginPermission[] = [
"server.create",
"server.read",
"server.lifecycle",
"server.files.read",
"server.files.write",
"server.logs.read",
"server.artifacts.read",
"server.artifacts.write",
"server.remote.access",
"server.run.distribution",
"server.dependencies.manage",
"server.client-manager.manage",
"server.game-client.read",
"server.game-client.command",
"server.game-client.maintenance",
"ai.invoke"
];
const pluginBridgeActions: readonly PluginBridgeAction[] = [
"server.instances.read",
"jobs.dispatch",
"logs.query",
"artifacts.open",
"files.request",
"remote.access.request",
"run.distribution.request",
"dependencies.request",
"logs.backfill.request",
"client-manager.request",
"plugin-lifecycle.request",
"ai.invoke"
];
export function isPluginPermission(value: string): value is PluginPermission {
return pluginPermissions.includes(value as PluginPermission);
}
export function isPluginBridgeAction(value: string): value is PluginBridgeAction {
return pluginBridgeActions.includes(value as PluginBridgeAction);
}
export interface PluginPageContract {
key: string;
title: string;
@@ -33,6 +90,24 @@ export interface PluginBridgeManifestContract {
aiPurposes?: string[];
}
export function pluginBridgeManifestContractFromResponse(
plugin: Pick<GamePluginResponse, "id" | "declaredPermissions" | "bridgeActions" | "pages" | "aiPurposes">
): PluginBridgeManifestContract {
return {
id: plugin.id,
declaredPermissions: plugin.declaredPermissions.filter(isPluginPermission),
bridgeActions: plugin.bridgeActions.filter(isPluginBridgeAction),
pages: plugin.pages.map((page) => ({
key: page.key,
title: page.title,
path: page.path,
permissions: page.permissions.filter(isPluginPermission),
bridgeActions: page.bridgeActions?.filter(isPluginBridgeAction)
})),
aiPurposes: [...plugin.aiPurposes]
};
}
export interface PluginBridgeThemeTokens {
colorScheme: "light" | "dark";
accentColor: string;