


















@@ -27,6 +27,17 @@ function makeTempDir() {
2727return makeTrackedTempDir("openclaw-doctor-plugin-registry", tempDirs);
2828}
292930+async function readRequiredPersistedInstalledPluginIndex(
31+stateDir: string,
32+): Promise<InstalledPluginIndex> {
33+const persisted = await readPersistedInstalledPluginIndex({ stateDir });
34+expect(persisted).not.toBeNull();
35+if (!persisted) {
36+throw new Error("Expected persisted installed plugin index");
37+}
38+return persisted;
39+}
40+3041function hermeticEnv(overrides: NodeJS.ProcessEnv = {}): NodeJS.ProcessEnv {
3142return {
3243OPENCLAW_BUNDLED_PLUGINS_DIR: undefined,
@@ -226,14 +237,10 @@ describe("maybeRepairPluginRegistryState", () => {
226237});
227238228239expect(nextConfig).toStrictEqual({});
229-await expect(readPersistedInstalledPluginIndex({ stateDir })).resolves.toMatchObject({
230-refreshReason: "migration",
231-plugins: [
232-expect.objectContaining({
233-pluginId: "demo",
234-}),
235-],
236-});
240+const persisted = await readRequiredPersistedInstalledPluginIndex(stateDir);
241+expect(persisted.refreshReason).toBe("migration");
242+expect(persisted.plugins).toHaveLength(1);
243+expect(persisted.plugins[0]?.pluginId).toBe("demo");
237244});
238245239246it("does not repair when registry migration is disabled", async () => {
@@ -341,16 +348,12 @@ describe("maybeRepairPluginRegistryState", () => {
341348expect(
342349JSON.parse(fs.readFileSync(path.join(stateDir, "npm", "package.json"), "utf8")),
343350).not.toHaveProperty("dependencies");
344-await expect(readPersistedInstalledPluginIndex({ stateDir })).resolves.toMatchObject({
345-refreshReason: "migration",
346-plugins: [
347-expect.objectContaining({
348-pluginId: "google-meet",
349-origin: "bundled",
350-rootDir: bundledDir,
351-}),
352-],
353-});
351+const persisted = await readRequiredPersistedInstalledPluginIndex(stateDir);
352+expect(persisted.refreshReason).toBe("migration");
353+expect(persisted.plugins).toHaveLength(1);
354+expect(persisted.plugins[0]?.pluginId).toBe("google-meet");
355+expect(persisted.plugins[0]?.origin).toBe("bundled");
356+expect(persisted.plugins[0]?.rootDir).toBe(bundledDir);
354357expect(vi.mocked(note).mock.calls.join("\n")).toContain(
355358"Removed stale managed npm plugin package",
356359);
@@ -402,17 +405,13 @@ describe("maybeRepairPluginRegistryState", () => {
402405});
403406404407expect(fs.existsSync(managed.packageDir)).toBe(false);
405-await expect(readPersistedInstalledPluginIndex({ stateDir })).resolves.toMatchObject({
406-installRecords: {},
407-refreshReason: "migration",
408-plugins: [
409-expect.objectContaining({
410-pluginId: "google-meet",
411-origin: "bundled",
412-rootDir: bundledDir,
413-}),
414-],
415-});
408+const persisted = await readRequiredPersistedInstalledPluginIndex(stateDir);
409+expect(persisted.installRecords).toStrictEqual({});
410+expect(persisted.refreshReason).toBe("migration");
411+expect(persisted.plugins).toHaveLength(1);
412+expect(persisted.plugins[0]?.pluginId).toBe("google-meet");
413+expect(persisted.plugins[0]?.origin).toBe("bundled");
414+expect(persisted.plugins[0]?.rootDir).toBe(bundledDir);
416415});
417416418417it("removes stale managed npm packages from the package lock during repair", async () => {
此内容由惯性聚合(RSS阅读器)自动聚合整理,仅供阅读参考。 原文来自 — 版权归原作者所有。