mirror of
https://github.com/openclaw/openclaw.git
synced 2026-05-06 13:10:43 +00:00
fix: add plugin load debug shape
This commit is contained in:
@@ -1022,6 +1022,53 @@ function resolvePluginModuleExport(moduleExport: unknown): {
|
||||
return {};
|
||||
}
|
||||
|
||||
function isPluginLoadDebugEnabled(env: NodeJS.ProcessEnv): boolean {
|
||||
const normalized = normalizeLowercaseStringOrEmpty(env.OPENCLAW_PLUGIN_LOAD_DEBUG);
|
||||
return normalized === "1" || normalized === "true" || normalized === "yes" || normalized === "on";
|
||||
}
|
||||
|
||||
function describePluginModuleExportShape(
|
||||
value: unknown,
|
||||
label = "export",
|
||||
seen: Set<unknown> = new Set(),
|
||||
): string[] {
|
||||
if (value === null) {
|
||||
return [`${label}:null`];
|
||||
}
|
||||
if (typeof value !== "object") {
|
||||
return [`${label}:${typeof value}`];
|
||||
}
|
||||
if (seen.has(value)) {
|
||||
return [`${label}:circular`];
|
||||
}
|
||||
seen.add(value);
|
||||
|
||||
const record = value as Record<string, unknown>;
|
||||
const keys = Object.keys(record).toSorted();
|
||||
const visibleKeys = keys.slice(0, 8);
|
||||
const extraCount = keys.length - visibleKeys.length;
|
||||
const keySummary =
|
||||
visibleKeys.length > 0
|
||||
? `${visibleKeys.join(",")}${extraCount > 0 ? `,+${extraCount}` : ""}`
|
||||
: "none";
|
||||
const details = [`${label}:object keys=${keySummary}`];
|
||||
|
||||
for (const key of ["default", "module", "register", "activate"]) {
|
||||
if (Object.prototype.hasOwnProperty.call(record, key)) {
|
||||
details.push(...describePluginModuleExportShape(record[key], `${label}.${key}`, seen));
|
||||
}
|
||||
}
|
||||
return details;
|
||||
}
|
||||
|
||||
function formatMissingPluginRegisterError(moduleExport: unknown, env: NodeJS.ProcessEnv): string {
|
||||
const message = "plugin export missing register/activate";
|
||||
if (!isPluginLoadDebugEnabled(env)) {
|
||||
return message;
|
||||
}
|
||||
return `${message} (module shape: ${describePluginModuleExportShape(moduleExport).join("; ")})`;
|
||||
}
|
||||
|
||||
function mergeChannelPluginSection<T>(
|
||||
baseValue: T | undefined,
|
||||
overrideValue: T | undefined,
|
||||
@@ -2511,7 +2558,7 @@ export function loadOpenClawPlugins(options: PluginLoadOptions = {}): PluginRegi
|
||||
|
||||
if (typeof register !== "function") {
|
||||
logger.error(`[plugins] ${record.id} missing register/activate export`);
|
||||
pushPluginLoadError("plugin export missing register/activate");
|
||||
pushPluginLoadError(formatMissingPluginRegisterError(mod, env));
|
||||
continue;
|
||||
}
|
||||
|
||||
@@ -2934,7 +2981,7 @@ export async function loadOpenClawPluginCliRegistry(
|
||||
|
||||
if (typeof register !== "function") {
|
||||
logger.error(`[plugins] ${record.id} missing register/activate export`);
|
||||
pushPluginLoadError("plugin export missing register/activate");
|
||||
pushPluginLoadError(formatMissingPluginRegisterError(mod, env));
|
||||
continue;
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user