




















@@ -0,0 +1,79 @@
1+import { execFileSync } from "node:child_process";
2+import { mkdtempSync, mkdirSync, rmSync, writeFileSync } from "node:fs";
3+import { tmpdir } from "node:os";
4+import { join } from "node:path";
5+import { describe, expect, it } from "vitest";
6+7+const ASSERTIONS_PATH = "scripts/e2e/lib/upgrade-survivor/assertions.mjs";
8+9+function writeJson(path: string, value: unknown): void {
10+writeFileSync(path, `${JSON.stringify(value, null, 2)}\n`);
11+}
12+13+function assertConfiguredPluginState(params: { installPath?: string } = {}): void {
14+const root = mkdtempSync(join(tmpdir(), "openclaw-upgrade-survivor-"));
15+try {
16+const stateDir = join(root, "state");
17+const workspace = join(root, "workspace");
18+const matrixInstallDir = params.installPath ?? join(stateDir, "extensions", "matrix");
19+mkdirSync(join(stateDir, "agents", "main", "sessions"), { recursive: true });
20+mkdirSync(join(stateDir, "plugins"), { recursive: true });
21+mkdirSync(matrixInstallDir, { recursive: true });
22+mkdirSync(workspace, { recursive: true });
23+writeFileSync(join(workspace, "IDENTITY.md"), "# survivor\n");
24+writeJson(join(stateDir, "agents", "main", "sessions", "legacy-session.json"), {
25+id: "legacy-session",
26+});
27+writeJson(join(matrixInstallDir, "package.json"), {
28+name: "@openclaw/matrix",
29+});
30+writeJson(join(stateDir, "plugins", "installs.json"), {
31+installRecords: {
32+matrix: {
33+source: "clawhub",
34+spec: "clawhub:@openclaw/matrix",
35+installPath: matrixInstallDir,
36+clawhubPackage: "@openclaw/matrix",
37+clawhubChannel: "official",
38+artifactKind: "npm-pack",
39+},
40+},
41+plugins: [{ pluginId: "matrix", enabled: true }],
42+});
43+const coveragePath = join(root, "coverage.json");
44+writeJson(coveragePath, {
45+acceptedIntents: ["configured-plugin-installs"],
46+skippedIntents: [],
47+});
48+49+execFileSync(process.execPath, [ASSERTIONS_PATH, "assert-state"], {
50+env: {
51+ ...process.env,
52+OPENCLAW_STATE_DIR: stateDir,
53+OPENCLAW_TEST_WORKSPACE_DIR: workspace,
54+OPENCLAW_UPGRADE_SURVIVOR_CONFIG_COVERAGE_JSON: coveragePath,
55+OPENCLAW_UPGRADE_SURVIVOR_SCENARIO: "configured-plugin-installs",
56+},
57+stdio: "pipe",
58+});
59+} finally {
60+rmSync(root, { force: true, recursive: true });
61+}
62+}
63+64+describe("upgrade survivor assertions", () => {
65+it("accepts official ClawHub npm-pack installs for configured external plugins", () => {
66+expect(() => assertConfiguredPluginState()).not.toThrow();
67+});
68+69+it("rejects ClawHub npm-pack installs outside the managed extensions root", () => {
70+const root = mkdtempSync(join(tmpdir(), "openclaw-upgrade-survivor-outside-"));
71+try {
72+expect(() =>
73+assertConfiguredPluginState({ installPath: join(root, "outside-matrix") }),
74+).toThrow(/managed extensions root/);
75+} finally {
76+rmSync(root, { force: true, recursive: true });
77+}
78+});
79+});
此内容由惯性聚合(RSS阅读器)自动聚合整理,仅供阅读参考。 原文来自 — 版权归原作者所有。