@@ -837,6 +837,24 @@ afterAll(() => {
|
837 | 837 | }); |
838 | 838 | |
839 | 839 | describe("loadOpenClawPlugins", () => { |
| 840 | +it("refreshes bundled plugin-sdk aliases without deleting the shared alias directory", () => { |
| 841 | +const distRoot = makeTempDir(); |
| 842 | +const pluginSdkDir = path.join(distRoot, "plugin-sdk"); |
| 843 | +const aliasDir = path.join(distRoot, "extensions", "node_modules", "openclaw", "plugin-sdk"); |
| 844 | +mkdirSafe(pluginSdkDir); |
| 845 | +mkdirSafe(aliasDir); |
| 846 | +fs.writeFileSync(path.join(pluginSdkDir, "index.js"), "export const value = 1;\n", "utf8"); |
| 847 | +fs.writeFileSync(path.join(pluginSdkDir, "core.js"), "export const core = 1;\n", "utf8"); |
| 848 | +fs.writeFileSync(path.join(aliasDir, "sentinel.txt"), "keep\n", "utf8"); |
| 849 | + |
| 850 | +__testing.ensureOpenClawPluginSdkAlias(distRoot); |
| 851 | +fs.writeFileSync(path.join(pluginSdkDir, "core.js"), "export const core = 2;\n", "utf8"); |
| 852 | +__testing.ensureOpenClawPluginSdkAlias(distRoot); |
| 853 | + |
| 854 | +expect(fs.existsSync(path.join(aliasDir, "sentinel.txt"))).toBe(true); |
| 855 | +expect(fs.readFileSync(path.join(aliasDir, "core.js"), "utf8")).toContain("core.js"); |
| 856 | +}); |
| 857 | + |
840 | 858 | it("disables bundled plugins by default", () => { |
841 | 859 | const bundledDir = makeTempDir(); |
842 | 860 | writePlugin({ |
|