File size: 3,904 Bytes
4c76b0d | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 | // Resolves config and metadata before publishing prepared plugin runtime load facts.
import { getRuntimeConfig } from "../../config/config.js";
import { resolveConfigWidePluginMetadataSnapshot } from "../../config/io.plugin-metadata.js";
import { applyPluginAutoEnable } from "../../config/plugin-auto-enable.js";
import type { OpenClawConfig } from "../../config/types.openclaw.js";
import { resolvePluginActivationSourceConfig } from "../activation-source-config.js";
import { resolvePluginControlPlaneWorkspace } from "../control-plane-workspace.js";
import { extractPluginInstallRecordsFromInstalledPluginIndex } from "../installed-plugin-index-install-records.js";
import type { PluginManifestRegistry } from "../manifest-registry.js";
import {
projectPluginMetadataSnapshot,
resolvePluginMetadataSnapshot,
} from "../plugin-metadata-snapshot.js";
import type { PluginMetadataSnapshot } from "../plugin-metadata-snapshot.types.js";
import type { PluginLogger } from "../types.js";
import { createPluginRuntimeLoaderLogger, type PluginRuntimeLoadContext } from "./load-context.js";
/** Options accepted while resolving plugin runtime load context. */
type PluginRuntimeLoadContextOptions = {
config?: OpenClawConfig;
activationSourceConfig?: OpenClawConfig;
env?: NodeJS.ProcessEnv;
workspaceDir?: string;
onlyPluginIds?: readonly string[];
logger?: PluginLogger;
manifestRegistry?: PluginManifestRegistry;
metadataSnapshot?: PluginMetadataSnapshot;
preferBuiltPluginArtifacts?: boolean;
expectedSourceDigests?: PluginRuntimeLoadContext["expectedSourceDigests"];
};
/** Resolves config, manifests, install records, and auto-enable state for runtime loads. */
export function resolvePluginRuntimeLoadContext(
options?: PluginRuntimeLoadContextOptions,
): PluginRuntimeLoadContext {
const env = options?.env ?? process.env;
const rawConfig = options?.config ?? getRuntimeConfig();
const rawWorkspaceDir = resolvePluginControlPlaneWorkspace({
config: rawConfig,
env,
workspaceDir: options?.workspaceDir,
}).workspaceDir;
const metadataSnapshot =
options?.metadataSnapshot ??
(options?.manifestRegistry !== undefined
? undefined
: options?.workspaceDir === undefined
? projectPluginMetadataSnapshot(
resolveConfigWidePluginMetadataSnapshot({ config: rawConfig, env }),
options?.onlyPluginIds,
)
: resolvePluginMetadataSnapshot({
config: rawConfig,
env,
workspaceDir: rawWorkspaceDir,
allowWorkspaceScopedCurrent: true,
...(options?.onlyPluginIds !== undefined ? { pluginIds: options.onlyPluginIds } : {}),
}));
const manifestRegistry = options?.manifestRegistry ?? metadataSnapshot?.manifestRegistry;
const activationSourceConfig = resolvePluginActivationSourceConfig({
config: rawConfig,
activationSourceConfig: options?.activationSourceConfig,
});
const autoEnabled = applyPluginAutoEnable({
config: rawConfig,
env,
manifestRegistry,
discovery: metadataSnapshot?.discovery,
});
const config = autoEnabled.config;
const workspaceDir = resolvePluginControlPlaneWorkspace({
config,
env,
workspaceDir: options?.workspaceDir,
}).workspaceDir;
const installRecords = metadataSnapshot
? extractPluginInstallRecordsFromInstalledPluginIndex(metadataSnapshot.index)
: undefined;
return {
rawConfig,
config,
activationSourceConfig,
autoEnabledReasons: autoEnabled.autoEnabledReasons,
workspaceDir,
env,
logger: options?.logger ?? createPluginRuntimeLoaderLogger(),
...(manifestRegistry ? { manifestRegistry } : {}),
...(metadataSnapshot ? { metadataSnapshot } : {}),
installRecords,
preferBuiltPluginArtifacts: options?.preferBuiltPluginArtifacts,
expectedSourceDigests: options?.expectedSourceDigests,
};
}
|