


















@@ -138,16 +138,52 @@ function prepareBundledPluginRuntimeDistMirror(params: {
138138}): string {
139139const sourceExtensionsRoot = path.dirname(params.pluginRoot);
140140const sourceDistRoot = path.dirname(sourceExtensionsRoot);
141-const mirrorDistRoot = path.join(params.installRoot, "dist");
141+const sourceDistRootName = path.basename(sourceDistRoot);
142+const mirrorDistRoot = path.join(params.installRoot, sourceDistRootName);
142143const mirrorExtensionsRoot = path.join(mirrorDistRoot, "extensions");
144+ensureBundledRuntimeMirrorDirectory(mirrorDistRoot);
143145fs.mkdirSync(mirrorExtensionsRoot, { recursive: true, mode: 0o755 });
144146ensureBundledRuntimeDistPackageJson(mirrorDistRoot);
145-for (const entry of fs.readdirSync(sourceDistRoot, { withFileTypes: true })) {
147+mirrorBundledRuntimeDistRootEntries({
148+ sourceDistRoot,
149+ mirrorDistRoot,
150+});
151+if (sourceDistRootName === "dist-runtime") {
152+mirrorCanonicalBundledRuntimeDistRoot({
153+installRoot: params.installRoot,
154+pluginRoot: params.pluginRoot,
155+sourceRuntimeDistRoot: sourceDistRoot,
156+});
157+}
158+ensureOpenClawPluginSdkAlias(mirrorDistRoot);
159+return mirrorExtensionsRoot;
160+}
161+162+function ensureBundledRuntimeMirrorDirectory(targetRoot: string): void {
163+try {
164+const stat = fs.lstatSync(targetRoot);
165+if (stat.isDirectory() && !stat.isSymbolicLink()) {
166+return;
167+}
168+fs.rmSync(targetRoot, { recursive: true, force: true });
169+} catch (error) {
170+if ((error as NodeJS.ErrnoException).code !== "ENOENT") {
171+throw error;
172+}
173+}
174+fs.mkdirSync(targetRoot, { recursive: true, mode: 0o755 });
175+}
176+177+function mirrorBundledRuntimeDistRootEntries(params: {
178+sourceDistRoot: string;
179+mirrorDistRoot: string;
180+}): void {
181+for (const entry of fs.readdirSync(params.sourceDistRoot, { withFileTypes: true })) {
146182if (entry.name === "extensions") {
147183continue;
148184}
149-const sourcePath = path.join(sourceDistRoot, entry.name);
150-const targetPath = path.join(mirrorDistRoot, entry.name);
185+const sourcePath = path.join(params.sourceDistRoot, entry.name);
186+const targetPath = path.join(params.mirrorDistRoot, entry.name);
151187if (path.resolve(sourcePath) === path.resolve(targetPath)) {
152188continue;
153189}
@@ -171,8 +207,39 @@ function prepareBundledPluginRuntimeDistMirror(params: {
171207}
172208}
173209}
174-ensureOpenClawPluginSdkAlias(mirrorDistRoot);
175-return mirrorExtensionsRoot;
210+}
211+212+function mirrorCanonicalBundledRuntimeDistRoot(params: {
213+installRoot: string;
214+pluginRoot: string;
215+sourceRuntimeDistRoot: string;
216+}): void {
217+const sourceCanonicalDistRoot = path.join(path.dirname(params.sourceRuntimeDistRoot), "dist");
218+if (!fs.existsSync(sourceCanonicalDistRoot)) {
219+return;
220+}
221+const targetCanonicalDistRoot = path.join(params.installRoot, "dist");
222+ensureBundledRuntimeMirrorDirectory(targetCanonicalDistRoot);
223+fs.mkdirSync(path.join(targetCanonicalDistRoot, "extensions"), { recursive: true, mode: 0o755 });
224+ensureBundledRuntimeDistPackageJson(targetCanonicalDistRoot);
225+mirrorBundledRuntimeDistRootEntries({
226+sourceDistRoot: sourceCanonicalDistRoot,
227+mirrorDistRoot: targetCanonicalDistRoot,
228+});
229+ensureOpenClawPluginSdkAlias(targetCanonicalDistRoot);
230+231+const pluginId = path.basename(params.pluginRoot);
232+const sourceCanonicalPluginRoot = path.join(sourceCanonicalDistRoot, "extensions", pluginId);
233+if (!fs.existsSync(sourceCanonicalPluginRoot)) {
234+return;
235+}
236+const targetCanonicalPluginRoot = path.join(targetCanonicalDistRoot, "extensions", pluginId);
237+refreshBundledPluginRuntimeMirrorRoot({
238+ pluginId,
239+sourceRoot: sourceCanonicalPluginRoot,
240+targetRoot: targetCanonicalPluginRoot,
241+tempDirParent: path.dirname(targetCanonicalPluginRoot),
242+});
176243}
177244178245function ensureBundledRuntimeDistPackageJson(mirrorDistRoot: string): void {
此内容由惯性聚合(RSS阅读器)自动聚合整理,仅供阅读参考。 原文来自 — 版权归原作者所有。