mirror of
https://github.com/openclaw/openclaw.git
synced 2026-05-06 05:50:43 +00:00
refactor: share plugin validation diagnostics
This commit is contained in:
@@ -7,21 +7,7 @@ import {
|
||||
normalizeStringifiedOptionalString,
|
||||
} from "../shared/string-coerce.js";
|
||||
import type { PluginDiagnostic } from "./manifest-types.js";
|
||||
|
||||
function pushChannelDiagnostic(params: {
|
||||
level: PluginDiagnostic["level"];
|
||||
pluginId: string;
|
||||
source: string;
|
||||
message: string;
|
||||
pushDiagnostic: (diag: PluginDiagnostic) => void;
|
||||
}) {
|
||||
params.pushDiagnostic({
|
||||
level: params.level,
|
||||
pluginId: params.pluginId,
|
||||
source: params.source,
|
||||
message: params.message,
|
||||
});
|
||||
}
|
||||
import { pushPluginValidationDiagnostic } from "./validation-diagnostics.js";
|
||||
|
||||
function resolveBundledChannelMeta(id: string): ChannelMeta | undefined {
|
||||
return listChatChannels().find((meta) => meta.id === id);
|
||||
@@ -55,7 +41,7 @@ export function normalizeRegisteredChannelPlugin(params: {
|
||||
normalizeStringifiedOptionalString(params.plugin?.id) ??
|
||||
"";
|
||||
if (!id) {
|
||||
pushChannelDiagnostic({
|
||||
pushPluginValidationDiagnostic({
|
||||
level: "error",
|
||||
pluginId: params.pluginId,
|
||||
source: params.source,
|
||||
@@ -68,7 +54,7 @@ export function normalizeRegisteredChannelPlugin(params: {
|
||||
const rawMeta = params.plugin.meta as Partial<ChannelMeta> | undefined;
|
||||
const rawMetaId = normalizeOptionalString(rawMeta?.id);
|
||||
if (rawMetaId && rawMetaId !== id) {
|
||||
pushChannelDiagnostic({
|
||||
pushPluginValidationDiagnostic({
|
||||
level: "warn",
|
||||
pluginId: params.pluginId,
|
||||
source: params.source,
|
||||
@@ -79,7 +65,7 @@ export function normalizeRegisteredChannelPlugin(params: {
|
||||
|
||||
const missingFields = collectMissingChannelMetaFields(rawMeta);
|
||||
if (missingFields.length > 0) {
|
||||
pushChannelDiagnostic({
|
||||
pushPluginValidationDiagnostic({
|
||||
level: "warn",
|
||||
pluginId: params.pluginId,
|
||||
source: params.source,
|
||||
|
||||
@@ -2,26 +2,12 @@ import { normalizeOptionalString } from "../shared/string-coerce.js";
|
||||
import { normalizeTrimmedStringList } from "../shared/string-normalization.js";
|
||||
import type { PluginDiagnostic } from "./manifest-types.js";
|
||||
import type { ProviderAuthMethod, ProviderPlugin } from "./types.js";
|
||||
import { pushPluginValidationDiagnostic } from "./validation-diagnostics.js";
|
||||
|
||||
type ProviderWizardSetup = NonNullable<NonNullable<ProviderPlugin["wizard"]>["setup"]>;
|
||||
type ProviderWizardModelPicker = NonNullable<NonNullable<ProviderPlugin["wizard"]>["modelPicker"]>;
|
||||
type ProviderWizardModelAllowlist = NonNullable<ProviderWizardSetup["modelAllowlist"]>;
|
||||
|
||||
function pushProviderDiagnostic(params: {
|
||||
level: PluginDiagnostic["level"];
|
||||
pluginId: string;
|
||||
source: string;
|
||||
message: string;
|
||||
pushDiagnostic: (diag: PluginDiagnostic) => void;
|
||||
}) {
|
||||
params.pushDiagnostic({
|
||||
level: params.level,
|
||||
pluginId: params.pluginId,
|
||||
source: params.source,
|
||||
message: params.message,
|
||||
});
|
||||
}
|
||||
|
||||
function normalizeTextList(values: string[] | undefined): string[] | undefined {
|
||||
const normalized = Array.from(new Set(normalizeTrimmedStringList(values)));
|
||||
return normalized.length > 0 ? normalized : undefined;
|
||||
@@ -78,7 +64,7 @@ function resolveWizardMethodId(params: {
|
||||
if (params.auth.some((method) => method.id === params.methodId)) {
|
||||
return params.methodId;
|
||||
}
|
||||
pushProviderDiagnostic({
|
||||
pushPluginValidationDiagnostic({
|
||||
level: "warn",
|
||||
pluginId: params.pluginId,
|
||||
source: params.source,
|
||||
@@ -166,7 +152,7 @@ function normalizeProviderWizardSetup(params: {
|
||||
return undefined;
|
||||
}
|
||||
if (!hasAuthMethods) {
|
||||
pushProviderDiagnostic({
|
||||
pushPluginValidationDiagnostic({
|
||||
level: "warn",
|
||||
pluginId: params.pluginId,
|
||||
source: params.source,
|
||||
@@ -203,7 +189,7 @@ function normalizeProviderAuthMethods(params: {
|
||||
for (const method of params.auth) {
|
||||
const methodId = normalizeOptionalString(method.id);
|
||||
if (!methodId) {
|
||||
pushProviderDiagnostic({
|
||||
pushPluginValidationDiagnostic({
|
||||
level: "error",
|
||||
pluginId: params.pluginId,
|
||||
source: params.source,
|
||||
@@ -213,7 +199,7 @@ function normalizeProviderAuthMethods(params: {
|
||||
continue;
|
||||
}
|
||||
if (seenMethodIds.has(methodId)) {
|
||||
pushProviderDiagnostic({
|
||||
pushPluginValidationDiagnostic({
|
||||
level: "error",
|
||||
pluginId: params.pluginId,
|
||||
source: params.source,
|
||||
@@ -282,7 +268,7 @@ function normalizeProviderWizard(params: {
|
||||
return undefined;
|
||||
}
|
||||
if (!hasAuthMethods) {
|
||||
pushProviderDiagnostic({
|
||||
pushPluginValidationDiagnostic({
|
||||
level: "warn",
|
||||
pluginId: params.pluginId,
|
||||
source: params.source,
|
||||
@@ -324,7 +310,7 @@ export function normalizeRegisteredProvider(params: {
|
||||
}): ProviderPlugin | null {
|
||||
const id = normalizeOptionalString(params.provider.id);
|
||||
if (!id) {
|
||||
pushProviderDiagnostic({
|
||||
pushPluginValidationDiagnostic({
|
||||
level: "error",
|
||||
pluginId: params.pluginId,
|
||||
source: params.source,
|
||||
@@ -359,7 +345,7 @@ export function normalizeRegisteredProvider(params: {
|
||||
const catalog = params.provider.catalog;
|
||||
const discovery = params.provider.discovery;
|
||||
if (catalog && discovery) {
|
||||
pushProviderDiagnostic({
|
||||
pushPluginValidationDiagnostic({
|
||||
level: "warn",
|
||||
pluginId: params.pluginId,
|
||||
source: params.source,
|
||||
|
||||
16
src/plugins/validation-diagnostics.ts
Normal file
16
src/plugins/validation-diagnostics.ts
Normal file
@@ -0,0 +1,16 @@
|
||||
import type { PluginDiagnostic } from "./manifest-types.js";
|
||||
|
||||
export function pushPluginValidationDiagnostic(params: {
|
||||
level: PluginDiagnostic["level"];
|
||||
pluginId: string;
|
||||
source: string;
|
||||
message: string;
|
||||
pushDiagnostic: (diag: PluginDiagnostic) => void;
|
||||
}) {
|
||||
params.pushDiagnostic({
|
||||
level: params.level,
|
||||
pluginId: params.pluginId,
|
||||
source: params.source,
|
||||
message: params.message,
|
||||
});
|
||||
}
|
||||
Reference in New Issue
Block a user