Files
openclaw/src/gateway/server-startup-plugins.ts
2026-04-20 20:52:42 +01:00

111 lines
3.9 KiB
TypeScript

import { resolveAgentWorkspaceDir, resolveDefaultAgentId } from "../agents/agent-scope.js";
import { initSubagentRegistry } from "../agents/subagent-registry.js";
import { runChannelPluginStartupMaintenance } from "../channels/plugins/lifecycle-startup.js";
import { applyPluginAutoEnable } from "../config/plugin-auto-enable.js";
import type { OpenClawConfig } from "../config/types.openclaw.js";
import {
resolveConfiguredDeferredChannelPluginIds,
resolveGatewayStartupPluginIds,
} from "../plugins/channel-plugin-ids.js";
import { createEmptyPluginRegistry } from "../plugins/registry.js";
import { getActivePluginRegistry, setActivePluginRegistry } from "../plugins/runtime.js";
import { listGatewayMethods } from "./server-methods-list.js";
import { coreGatewayHandlers } from "./server-methods.js";
import { loadGatewayStartupPlugins } from "./server-plugin-bootstrap.js";
import { runStartupSessionMigration } from "./server-startup-session-migration.js";
type GatewayPluginBootstrapLog = {
info: (message: string) => void;
warn: (message: string) => void;
error: (message: string) => void;
debug: (message: string) => void;
};
export async function prepareGatewayPluginBootstrap(params: {
cfgAtStart: OpenClawConfig;
startupRuntimeConfig: OpenClawConfig;
minimalTestGateway: boolean;
log: GatewayPluginBootstrapLog;
}) {
const startupMaintenanceConfig =
params.cfgAtStart.channels === undefined && params.startupRuntimeConfig.channels !== undefined
? {
...params.cfgAtStart,
channels: params.startupRuntimeConfig.channels,
}
: params.cfgAtStart;
if (!params.minimalTestGateway) {
await Promise.all([
runChannelPluginStartupMaintenance({
cfg: startupMaintenanceConfig,
env: process.env,
log: params.log,
}),
runStartupSessionMigration({
cfg: params.cfgAtStart,
env: process.env,
log: params.log,
}),
]);
}
initSubagentRegistry();
const gatewayPluginConfigAtStart = params.minimalTestGateway
? params.cfgAtStart
: applyPluginAutoEnable({
config: params.cfgAtStart,
env: process.env,
}).config;
const defaultAgentId = resolveDefaultAgentId(gatewayPluginConfigAtStart);
const defaultWorkspaceDir = resolveAgentWorkspaceDir(gatewayPluginConfigAtStart, defaultAgentId);
const deferredConfiguredChannelPluginIds = params.minimalTestGateway
? []
: resolveConfiguredDeferredChannelPluginIds({
config: gatewayPluginConfigAtStart,
workspaceDir: defaultWorkspaceDir,
env: process.env,
});
const startupPluginIds = params.minimalTestGateway
? []
: resolveGatewayStartupPluginIds({
config: gatewayPluginConfigAtStart,
activationSourceConfig: params.cfgAtStart,
workspaceDir: defaultWorkspaceDir,
env: process.env,
});
const baseMethods = listGatewayMethods();
const emptyPluginRegistry = createEmptyPluginRegistry();
let pluginRegistry = emptyPluginRegistry;
let baseGatewayMethods = baseMethods;
if (!params.minimalTestGateway) {
({ pluginRegistry, gatewayMethods: baseGatewayMethods } = loadGatewayStartupPlugins({
cfg: gatewayPluginConfigAtStart,
activationSourceConfig: params.cfgAtStart,
workspaceDir: defaultWorkspaceDir,
log: params.log,
coreGatewayHandlers,
baseMethods,
pluginIds: startupPluginIds,
preferSetupRuntimeForChannelPlugins: deferredConfiguredChannelPluginIds.length > 0,
suppressPluginInfoLogs: deferredConfiguredChannelPluginIds.length > 0,
}));
} else {
pluginRegistry = getActivePluginRegistry() ?? emptyPluginRegistry;
setActivePluginRegistry(pluginRegistry);
}
return {
gatewayPluginConfigAtStart,
defaultWorkspaceDir,
deferredConfiguredChannelPluginIds,
startupPluginIds,
baseMethods,
pluginRegistry,
baseGatewayMethods,
};
}