























@@ -29,6 +29,7 @@ const CURRENT_MODULE_PATH = fileURLToPath(import.meta.url);
2929const RUNNING_FROM_BUILT_ARTIFACT =
3030CURRENT_MODULE_PATH.includes(`${path.sep}dist${path.sep}`) ||
3131CURRENT_MODULE_PATH.includes(`${path.sep}dist-runtime${path.sep}`);
32+const DEFAULT_ROOT_METADATA_CACHE = new Map<string, readonly BundledPluginMetadata[]>();
32333334type BundledPluginPathPair = {
3435source: string;
@@ -82,12 +83,10 @@ function resolveBundledPluginLookupParams(params: { rootDir: string; scanDir?: s
8283}
83848485function collectBundledPluginMetadata(
85-packageRoot: string,
86+resolvedScanDir: string | undefined,
8687includeChannelConfigs: boolean,
8788includeSyntheticChannelConfigs: boolean,
88-scanDir?: string,
8989): readonly BundledPluginMetadata[] {
90-const resolvedScanDir = resolveBundledPluginMetadataScanDir(packageRoot, scanDir);
9190if (!resolvedScanDir || !fs.existsSync(resolvedScanDir)) {
9291return [];
9392}
@@ -183,22 +182,43 @@ export function listBundledPluginMetadata(params?: {
183182}): readonly BundledPluginMetadata[] {
184183const rootDir = path.resolve(params?.rootDir ?? OPENCLAW_PACKAGE_ROOT);
185184const scanDir = params?.scanDir ? path.resolve(params.scanDir) : undefined;
185+const resolvedScanDir = resolveBundledPluginMetadataScanDir(rootDir, scanDir);
186186const includeChannelConfigs = params?.includeChannelConfigs ?? !RUNNING_FROM_BUILT_ARTIFACT;
187187const includeSyntheticChannelConfigs =
188188params?.includeSyntheticChannelConfigs ?? includeChannelConfigs;
189-return Object.freeze(
189+const cacheKey =
190+!params?.rootDir && !scanDir
191+ ? JSON.stringify({
192+ resolvedScanDir,
193+ includeChannelConfigs,
194+ includeSyntheticChannelConfigs,
195+})
196+ : undefined;
197+const cached = cacheKey ? DEFAULT_ROOT_METADATA_CACHE.get(cacheKey) : undefined;
198+if (cached) {
199+return cached;
200+}
201+const metadata = Object.freeze(
190202collectBundledPluginMetadata(
191-rootDir,
203+resolvedScanDir,
192204includeChannelConfigs,
193205includeSyntheticChannelConfigs,
194-scanDir,
195206),
196207);
208+if (cacheKey) {
209+DEFAULT_ROOT_METADATA_CACHE.set(cacheKey, metadata);
210+}
211+return metadata;
197212}
198213199214export function findBundledPluginMetadataById(
200215pluginId: string,
201-params?: { rootDir?: string; scanDir?: string },
216+params?: {
217+rootDir?: string;
218+scanDir?: string;
219+includeChannelConfigs?: boolean;
220+includeSyntheticChannelConfigs?: boolean;
221+},
202222): BundledPluginMetadata | undefined {
203223return listBundledPluginMetadata(params).find((entry) => entry.manifest.id === pluginId);
204224}
@@ -208,13 +228,14 @@ export function resolveBundledPluginWorkspaceSourcePath(params: {
208228scanDir?: string;
209229pluginId: string;
210230}): string | null {
211-const metadata = findBundledPluginMetadataById(
212-params.pluginId,
213-resolveBundledPluginLookupParams({
231+const metadata = findBundledPluginMetadataById(params.pluginId, {
232+ ...resolveBundledPluginLookupParams({
214233rootDir: params.rootDir,
215234scanDir: params.scanDir,
216235}),
217-);
236+includeChannelConfigs: false,
237+includeSyntheticChannelConfigs: false,
238+});
218239if (!metadata) {
219240return null;
220241}
@@ -275,13 +296,14 @@ export function resolveBundledPluginRepoEntryPath(params: {
275296preferBuilt?: boolean;
276297scanDir?: string;
277298}): string | null {
278-const metadata = findBundledPluginMetadataById(
279-params.pluginId,
280-resolveBundledPluginLookupParams({
299+const metadata = findBundledPluginMetadataById(params.pluginId, {
300+ ...resolveBundledPluginLookupParams({
281301rootDir: params.rootDir,
282302scanDir: params.scanDir,
283303}),
284-);
304+includeChannelConfigs: false,
305+includeSyntheticChannelConfigs: false,
306+});
285307if (!metadata) {
286308return null;
287309}
此内容由惯性聚合(RSS阅读器)自动聚合整理,仅供阅读参考。 原文来自 — 版权归原作者所有。