




























@@ -2,24 +2,16 @@ import { mkdirSync, mkdtempSync, rmSync, writeFileSync } from "node:fs";
22import { tmpdir } from "node:os";
33import { dirname, join } from "node:path";
44import { describe, expect, it } from "vitest";
5-import { listBundledPluginPackArtifacts } from "../scripts/lib/bundled-plugin-build-entries.mjs";
65import {
76buildPublishedInstallCommandArgs,
87buildPublishedInstallScenarios,
8+collectInstalledBundledRuntimeSidecarPaths,
99collectInstalledContextEngineRuntimeErrors,
1010collectInstalledRootDependencyManifestErrors,
1111collectInstalledPackageErrors,
1212normalizeInstalledBinaryVersion,
1313resolveInstalledBinaryPath,
1414} from "../scripts/openclaw-npm-postpublish-verify.ts";
15-import { BUNDLED_RUNTIME_SIDECAR_PATHS } from "../src/plugins/runtime-sidecar-paths.ts";
16-17-const PUBLISHED_BUNDLED_RUNTIME_SIDECAR_PATHS = BUNDLED_RUNTIME_SIDECAR_PATHS.filter(
18-(relativePath) => listBundledPluginPackArtifacts().includes(relativePath),
19-);
20-const REQUIRED_INSTALLED_RUNTIME_SIDECAR_PATHS = [
21- ...PUBLISHED_BUNDLED_RUNTIME_SIDECAR_PATHS,
22-] as const;
23152416describe("buildPublishedInstallScenarios", () => {
2517it("uses a single fresh scenario for plain stable releases", () => {
@@ -66,7 +58,11 @@ describe("buildPublishedInstallCommandArgs", () => {
6658});
67596860describe("collectInstalledPackageErrors", () => {
69-it("flags version mismatches and missing runtime sidecars", () => {
61+function makeInstalledPackageRoot(): string {
62+return mkdtempSync(join(tmpdir(), "openclaw-postpublish-package-"));
63+}
64+65+it("flags version mismatches", () => {
7066const errors = collectInstalledPackageErrors({
7167expectedVersion: "2026.3.23-2",
7268installedVersion: "2026.3.23",
@@ -76,17 +72,35 @@ describe("collectInstalledPackageErrors", () => {
7672expect(errors[0]).toBe(
7773"installed package version mismatch: expected 2026.3.23-2, found 2026.3.23.",
7874);
79-expect(errors).toEqual(
80-expect.arrayContaining(
81-REQUIRED_INSTALLED_RUNTIME_SIDECAR_PATHS.map(
82-(relativePath) =>
83-`installed package is missing required bundled runtime sidecar: ${relativePath}`,
84-),
85-),
86-);
87-expect(errors.length).toBeGreaterThanOrEqual(
88-1 + REQUIRED_INSTALLED_RUNTIME_SIDECAR_PATHS.length,
89-);
75+});
76+77+it("requires runtime sidecars for bundled extensions included in the package", () => {
78+const packageRoot = makeInstalledPackageRoot();
79+80+try {
81+writeFileSync(join(packageRoot, "package.json"), '{"version":"2026.3.23"}\n', "utf8");
82+mkdirSync(join(packageRoot, "dist", "extensions", "slack"), { recursive: true });
83+writeFileSync(
84+join(packageRoot, "dist", "extensions", "slack", "package.json"),
85+"{}\n",
86+"utf8",
87+);
88+89+expect(collectInstalledBundledRuntimeSidecarPaths(packageRoot)).toContain(
90+"dist/extensions/slack/runtime-api.js",
91+);
92+expect(
93+collectInstalledPackageErrors({
94+expectedVersion: "2026.3.23",
95+installedVersion: "2026.3.23",
96+ packageRoot,
97+}),
98+).toContain(
99+"installed package is missing required bundled runtime sidecar: dist/extensions/slack/runtime-api.js",
100+);
101+} finally {
102+rmSync(packageRoot, { recursive: true, force: true });
103+}
90104});
91105});
92106@@ -212,6 +226,27 @@ describe("collectInstalledRootDependencyManifestErrors", () => {
212226}
213227});
214228229+it("accepts optional or externalized runtime imports", () => {
230+const packageRoot = makeInstalledPackageRoot();
231+232+try {
233+writePackageFile(packageRoot, "package.json", {
234+version: "2026.4.22",
235+dependencies: {},
236+});
237+mkdirSync(join(packageRoot, "dist"), { recursive: true });
238+writeFileSync(
239+join(packageRoot, "dist", "optional-runtime.js"),
240+'await import("@lancedb/lancedb");\n',
241+"utf8",
242+);
243+244+expect(collectInstalledRootDependencyManifestErrors(packageRoot)).toEqual([]);
245+} finally {
246+rmSync(packageRoot, { recursive: true, force: true });
247+}
248+});
249+215250it("flags undeclared imports from mjs and cjs root dist files", () => {
216251const packageRoot = makeInstalledPackageRoot();
217252@@ -318,12 +353,12 @@ describe("collectInstalledRootDependencyManifestErrors", () => {
318353mkdirSync(join(packageRoot, "dist"), { recursive: true });
319354writeFileSync(
320355join(packageRoot, "dist", "oversized.js"),
321-"x".repeat(2 * 1024 * 1024 + 1),
356+"x".repeat(4 * 1024 * 1024 + 1),
322357"utf8",
323358);
324359325360expect(collectInstalledRootDependencyManifestErrors(packageRoot)).toEqual([
326-"installed package root dist file 'oversized.js' is invalid or exceeds 2097152 bytes.",
361+"installed package root dist file 'oversized.js' is invalid or exceeds 4194304 bytes.",
327362]);
328363} finally {
329364rmSync(packageRoot, { recursive: true, force: true });
此内容由惯性聚合(RSS阅读器)自动聚合整理,仅供阅读参考。 原文来自 — 版权归原作者所有。