Files
openclaw/src/config/runtime-schema.ts
2026-05-02 08:18:52 +01:00

43 lines
1.7 KiB
TypeScript

import { resolveAgentWorkspaceDir, resolveDefaultAgentId } from "../agents/agent-scope.js";
import { getCurrentPluginMetadataSnapshot } from "../plugins/current-plugin-metadata-snapshot.js";
import { loadPluginMetadataSnapshot } from "../plugins/plugin-metadata-snapshot.js";
import {
collectChannelSchemaMetadata,
collectPluginSchemaMetadata,
} from "./channel-config-metadata.js";
import { getRuntimeConfig, readConfigFileSnapshot } from "./config.js";
import type { OpenClawConfig } from "./config.js";
import { buildConfigSchema, type ConfigSchemaResponse } from "./schema.js";
function loadManifestRegistry(config: OpenClawConfig, env?: NodeJS.ProcessEnv) {
const workspaceDir = resolveAgentWorkspaceDir(config, resolveDefaultAgentId(config));
const currentSnapshot = getCurrentPluginMetadataSnapshot({ config, env, workspaceDir });
if (currentSnapshot) {
return currentSnapshot.manifestRegistry;
}
return loadPluginMetadataSnapshot({
config,
env: env ?? process.env,
workspaceDir,
}).manifestRegistry;
}
export function loadGatewayRuntimeConfigSchema(): ConfigSchemaResponse {
const config = getRuntimeConfig();
const registry = loadManifestRegistry(config);
return buildConfigSchema({
plugins: collectPluginSchemaMetadata(registry),
channels: collectChannelSchemaMetadata(registry),
});
}
export async function readBestEffortRuntimeConfigSchema(): Promise<ConfigSchemaResponse> {
const snapshot = await readConfigFileSnapshot();
const config = snapshot.valid ? snapshot.config : { plugins: { enabled: true } };
const registry = loadManifestRegistry(config);
return buildConfigSchema({
plugins: snapshot.valid ? collectPluginSchemaMetadata(registry) : [],
channels: collectChannelSchemaMetadata(registry),
});
}