






















@@ -8,6 +8,7 @@ import {
88bundledPluginRoot,
99} from "openclaw/plugin-sdk/test-fixtures";
1010import { describe, expect, it, vi } from "vitest";
11+import { copyBundledPluginMetadata } from "../../scripts/copy-bundled-plugin-metadata.mjs";
1112import {
1213BUILD_STAMP_FILE,
1314RUNTIME_POSTBUILD_STAMP_FILE,
@@ -130,6 +131,13 @@ async function skipRuntimePostBuild(): Promise<void> {
130131return;
131132}
132133134+async function syncBundledPluginMetadata(params?: {
135+cwd?: string;
136+env?: Record<string, string | undefined>;
137+}): Promise<void> {
138+copyBundledPluginMetadata({ cwd: params?.cwd, env: params?.env });
139+}
140+133141function firstMockCall<T extends unknown[]>(mock: { mock: { calls: T[] } }): T | undefined {
134142return mock.mock.calls[0];
135143}
@@ -455,6 +463,7 @@ describe("run-node script", () => {
455463 tmp,
456464 spawn,
457465env: { OPENCLAW_FORCE_BUILD: "1" },
466+runRuntimePostBuild: syncBundledPluginMetadata,
458467});
459468460469expect(exitCode).toBe(0);
@@ -1698,7 +1707,12 @@ describe("run-node script", () => {
16981707});
1699170817001709const { spawnCalls, spawn, spawnSync } = createSpawnRecorder();
1701-const exitCode = await runStatusCommand({ tmp, spawn, spawnSync });
1710+const exitCode = await runStatusCommand({
1711+ tmp,
1712+ spawn,
1713+ spawnSync,
1714+runRuntimePostBuild: syncBundledPluginMetadata,
1715+});
1702171617031717expect(exitCode).toBe(0);
17041718expect(spawnCalls).toEqual([statusCommandSpawn()]);
@@ -1772,7 +1786,12 @@ describe("run-node script", () => {
17721786gitHead: "abc123\n",
17731787gitStatus: ` M ${EXTENSION_MANIFEST}\n`,
17741788});
1775-const exitCode = await runStatusCommand({ tmp, spawn, spawnSync });
1789+const exitCode = await runStatusCommand({
1790+ tmp,
1791+ spawn,
1792+ spawnSync,
1793+runRuntimePostBuild: syncBundledPluginMetadata,
1794+});
1776179517771796expect(exitCode).toBe(0);
17781797expect(spawnCalls).toEqual([statusCommandSpawn()]);
@@ -2317,37 +2336,39 @@ describe("run-node script", () => {
23172336});
2318233723192338it("reports missing core runtime postbuild outputs when runtime stamps match HEAD", async () => {
2320-for (const missingPath of [
2321-DIST_PLUGIN_SDK_ROOT_ALIAS,
2322-DIST_CHANNEL_CATALOG,
2323-DIST_LEGACY_CLI_EXIT_COMPAT,
2324-DIST_STABLE_ROOT_RUNTIME_ALIAS,
2325-DIST_LEGACY_ROOT_RUNTIME_COMPAT,
2326-]) {
2327-await withTempDir({ prefix: "openclaw-run-node-" }, async (tmp) => {
2328-await setupTrackedProject(tmp, {
2329-files: {
2330-[ROOT_SRC]: "export const value = 1;\n",
2331-[DIST_STABLE_ROOT_RUNTIME_SOURCE]: "export const value = 1;\n",
2332-[DIST_STABLE_ROOT_RUNTIME_ALIAS]:
2333-"export * from './model-catalog.runtime-AbCd1234.js';\n",
2334-[DIST_LEGACY_ROOT_RUNTIME_TARGET]: "export const aborted = true;\n",
2335-[DIST_LEGACY_ROOT_RUNTIME_COMPAT]: "export * from './abort.runtime.js';\n",
2336-[RUNTIME_POSTBUILD_STAMP]: '{"head":"abc123"}\n',
2337-},
2338-buildPaths: [
2339-ROOT_SRC,
2340-DIST_ENTRY,
2341-DIST_STABLE_ROOT_RUNTIME_SOURCE,
2342-DIST_STABLE_ROOT_RUNTIME_ALIAS,
2343-DIST_LEGACY_ROOT_RUNTIME_TARGET,
2344-DIST_LEGACY_ROOT_RUNTIME_COMPAT,
2345-BUILD_STAMP,
2346-RUNTIME_POSTBUILD_STAMP,
2347-],
2348-});
2349-await fs.rm(resolvePath(tmp, missingPath));
2339+await withTempDir({ prefix: "openclaw-run-node-" }, async (tmp) => {
2340+await setupTrackedProject(tmp, {
2341+files: {
2342+[ROOT_SRC]: "export const value = 1;\n",
2343+[DIST_STABLE_ROOT_RUNTIME_SOURCE]: "export const value = 1;\n",
2344+[DIST_STABLE_ROOT_RUNTIME_ALIAS]:
2345+"export * from './model-catalog.runtime-AbCd1234.js';\n",
2346+[DIST_LEGACY_ROOT_RUNTIME_TARGET]: "export const aborted = true;\n",
2347+[DIST_LEGACY_ROOT_RUNTIME_COMPAT]: "export * from './abort.runtime.js';\n",
2348+[RUNTIME_POSTBUILD_STAMP]: '{"head":"abc123"}\n',
2349+},
2350+buildPaths: [
2351+ROOT_SRC,
2352+DIST_ENTRY,
2353+DIST_STABLE_ROOT_RUNTIME_SOURCE,
2354+DIST_STABLE_ROOT_RUNTIME_ALIAS,
2355+DIST_LEGACY_ROOT_RUNTIME_TARGET,
2356+DIST_LEGACY_ROOT_RUNTIME_COMPAT,
2357+BUILD_STAMP,
2358+RUNTIME_POSTBUILD_STAMP,
2359+],
2360+});
235023612362+for (const missingPath of [
2363+DIST_PLUGIN_SDK_ROOT_ALIAS,
2364+DIST_CHANNEL_CATALOG,
2365+DIST_LEGACY_CLI_EXIT_COMPAT,
2366+DIST_STABLE_ROOT_RUNTIME_ALIAS,
2367+DIST_LEGACY_ROOT_RUNTIME_COMPAT,
2368+]) {
2369+const resolvedMissingPath = resolvePath(tmp, missingPath);
2370+const originalContent = await fs.readFile(resolvedMissingPath, "utf8");
2371+await fs.rm(resolvedMissingPath);
23512372const requirement = resolveRuntimePostBuildRequirement(
23522373createBuildRequirementDeps(tmp, {
23532374gitHead: "abc123\n",
@@ -2359,8 +2380,9 @@ describe("run-node script", () => {
23592380shouldSync: true,
23602381reason: "missing_runtime_postbuild_output",
23612382});
2362-});
2363-}
2383+await fs.writeFile(resolvedMissingPath, originalContent);
2384+}
2385+});
23642386});
2365238723662388it("does not require ambiguous stable runtime aliases that postbuild cannot create", async () => {
@@ -2567,7 +2589,12 @@ describe("run-node script", () => {
25672589gitHead: "abc123\n",
25682590gitStatus: "",
25692591});
2570-const exitCode = await runStatusCommand({ tmp, spawn, spawnSync });
2592+const exitCode = await runStatusCommand({
2593+ tmp,
2594+ spawn,
2595+ spawnSync,
2596+runRuntimePostBuild: syncBundledPluginMetadata,
2597+});
2571259825722599expect(exitCode).toBe(0);
25732600expect(spawnCalls).toEqual([statusCommandSpawn()]);
@@ -2602,7 +2629,12 @@ describe("run-node script", () => {
26022629gitHead: "abc123\n",
26032630gitStatus: "",
26042631});
2605-const exitCode = await runStatusCommand({ tmp, spawn, spawnSync });
2632+const exitCode = await runStatusCommand({
2633+ tmp,
2634+ spawn,
2635+ spawnSync,
2636+runRuntimePostBuild: syncBundledPluginMetadata,
2637+});
2606263826072639expect(exitCode).toBe(0);
26082640expect(spawnCalls).toEqual([statusCommandSpawn()]);
此内容由惯性聚合(RSS阅读器)自动聚合整理,仅供阅读参考。 原文来自 — 版权归原作者所有。