






















@@ -102,6 +102,7 @@ import {
102102restoreMemoryPluginState,
103103} from "./memory-state.js";
104104import { unwrapDefaultModuleExport } from "./module-export.js";
105+import { tryNativeRequireJavaScriptModule } from "./native-module-require.js";
105106import { withProfile } from "./plugin-load-profile.js";
106107import {
107108createPluginIdScopeSet,
@@ -455,10 +456,9 @@ function runPluginRegisterSync(
455456}
456457}
457458458-function createPluginJitiLoader(options: Pick<PluginLoadOptions, "pluginSdkResolution">) {
459+function createPluginModuleLoader(options: Pick<PluginLoadOptions, "pluginSdkResolution">) {
459460const jitiLoaders: PluginJitiLoaderCache = new Map();
460-return (modulePath: string) => {
461-const tryNative = shouldPreferNativeJiti(modulePath);
461+const loadWithJiti = (modulePath: string) => {
462462return getCachedPluginJitiLoader({
463463cache: jitiLoaders,
464464 modulePath,
@@ -471,13 +471,21 @@ function createPluginJitiLoader(options: Pick<PluginLoadOptions, "pluginSdkResol
471471options.pluginSdkResolution,
472472),
473473pluginSdkResolution: options.pluginSdkResolution,
474-// Source .ts runtime shims import sibling ".js" specifiers that only exist
475-// after build. Disable native loading for source entries so Jiti rewrites
476-// those imports against the source graph, while keeping native dist/*.js
477-// loading for the canonical built module graph.
478- tryNative,
474+tryNative: false,
479475});
480476};
477+return (modulePath: string): unknown => {
478+if (shouldPreferNativeJiti(modulePath)) {
479+const native = tryNativeRequireJavaScriptModule(modulePath, { allowWindows: true });
480+if (native.ok) {
481+return native.moduleExport;
482+}
483+}
484+// Source .ts runtime shims import sibling ".js" specifiers that only exist
485+// after build. Jiti remains the dev/source fallback because it rewrites those
486+// imports against the source graph and applies SDK aliases.
487+return loadWithJiti(modulePath)(toSafeImportPath(modulePath));
488+};
481489}
482490483491function resolveCanonicalDistRuntimeSource(source: string): string {
@@ -1241,8 +1249,8 @@ export function loadOpenClawPlugins(options: PluginLoadOptions = {}): PluginRegi
12411249clearMemoryPluginState();
12421250}
124312511244-// Lazy: avoid creating the Jiti loader when all plugins are disabled (common in unit tests).
1245-const getJiti = createPluginJitiLoader(options);
1252+// Lazy: avoid creating module loaders when all plugins are disabled (common in unit tests).
1253+const loadPluginModule = createPluginModuleLoader(options);
1246125412471255let createPluginRuntimeFactory:
12481256| ((options?: CreatePluginRuntimeOptions) => PluginRuntime)
@@ -1259,12 +1267,11 @@ export function loadOpenClawPlugins(options: PluginLoadOptions = {}): PluginRegi
12591267if (!runtimeModulePath) {
12601268throw new Error("Unable to resolve plugin runtime module");
12611269}
1262-const safeRuntimePath = toSafeImportPath(runtimeModulePath);
12631270const runtimeModule = withProfile(
12641271{ source: runtimeModulePath },
12651272"runtime-module",
12661273() =>
1267-getJiti(runtimeModulePath)(safeRuntimePath) as {
1274+loadPluginModule(runtimeModulePath) as {
12681275createPluginRuntime?: (options?: CreatePluginRuntimeOptions) => PluginRuntime;
12691276},
12701277);
@@ -1715,7 +1722,6 @@ export function loadOpenClawPlugins(options: PluginLoadOptions = {}): PluginRegi
17151722}
17161723const safeSource = opened.path;
17171724fs.closeSync(opened.fd);
1718-const safeImportSource = toSafeImportPath(safeSource);
1719172517201726let mod: OpenClawPluginModule | null = null;
17211727try {
@@ -1727,7 +1733,7 @@ export function loadOpenClawPlugins(options: PluginLoadOptions = {}): PluginRegi
17271733mod = withProfile(
17281734{ pluginId: record.id, source: safeSource },
17291735registrationMode,
1730-() => getJiti(safeSource)(safeImportSource) as OpenClawPluginModule,
1736+() => loadPluginModule(safeSource) as OpenClawPluginModule,
17311737);
17321738} catch (err) {
17331739recordPluginError({
@@ -1801,13 +1807,12 @@ export function loadOpenClawPlugins(options: PluginLoadOptions = {}): PluginRegi
18011807}
18021808const safeRuntimeSource = runtimeOpened.path;
18031809fs.closeSync(runtimeOpened.fd);
1804-const safeRuntimeImportSource = toSafeImportPath(safeRuntimeSource);
18051810let runtimeMod: OpenClawPluginModule | null = null;
18061811try {
18071812runtimeMod = withProfile(
18081813{ pluginId: record.id, source: safeRuntimeSource },
18091814"load-setup-runtime-entry",
1810-() => getJiti(safeRuntimeSource)(safeRuntimeImportSource) as OpenClawPluginModule,
1815+() => loadPluginModule(safeRuntimeSource) as OpenClawPluginModule,
18111816);
18121817} catch (err) {
18131818recordPluginError({
@@ -2165,7 +2170,7 @@ export async function loadOpenClawPluginCliRegistry(
21652170});
21662171const logger = options.logger ?? defaultLogger();
21672172const onlyPluginIdSet = createPluginIdScopeSet(onlyPluginIds);
2168-const getJiti = createPluginJitiLoader(options);
2173+const loadPluginModule = createPluginModuleLoader(options);
21692174const { registry, registerCli } = createPluginRegistry({
21702175 logger,
21712176runtime: {} as PluginRuntime,
@@ -2387,14 +2392,13 @@ export async function loadOpenClawPluginCliRegistry(
23872392}
23882393const safeSource = opened.path;
23892394fs.closeSync(opened.fd);
2390-const safeImportSource = toSafeImportPath(safeSource);
2391239523922396let mod: OpenClawPluginModule | null = null;
23932397try {
23942398mod = withProfile(
23952399{ pluginId: record.id, source: safeSource },
23962400"cli-metadata",
2397-() => getJiti(safeSource)(safeImportSource) as OpenClawPluginModule,
2401+() => loadPluginModule(safeSource) as OpenClawPluginModule,
23982402);
23992403} catch (err) {
24002404recordPluginError({
此内容由惯性聚合(RSS阅读器)自动聚合整理,仅供阅读参考。 原文来自 — 版权归原作者所有。