

















@@ -630,6 +630,90 @@ describe("repairMissingConfiguredPluginInstalls", () => {
630630});
631631});
632632633+it("defers channel-selected external payload repair during the package update doctor pass", async () => {
634+const records = {
635+discord: {
636+source: "npm",
637+spec: "@openclaw/discord",
638+installPath: "/missing/discord",
639+},
640+};
641+mocks.loadInstalledPluginIndexInstallRecords.mockResolvedValue(records);
642+mocks.listChannelPluginCatalogEntries.mockReturnValue([
643+{
644+id: "discord",
645+pluginId: "discord",
646+meta: { label: "Discord" },
647+install: {
648+npmSpec: "@openclaw/discord",
649+},
650+},
651+]);
652+653+const { repairMissingConfiguredPluginInstalls } =
654+await import("./missing-configured-plugin-install.js");
655+const result = await repairMissingConfiguredPluginInstalls({
656+cfg: {
657+channels: {
658+discord: { enabled: true, token: "secret" },
659+},
660+},
661+env: {
662+OPENCLAW_UPDATE_IN_PROGRESS: "1",
663+},
664+});
665+666+expect(mocks.updateNpmInstalledPlugins).not.toHaveBeenCalled();
667+expect(mocks.installPluginFromClawHub).not.toHaveBeenCalled();
668+expect(mocks.installPluginFromNpmSpec).not.toHaveBeenCalled();
669+expect(mocks.writePersistedInstalledPluginIndexInstallRecords).toHaveBeenCalledWith(
670+{},
671+{
672+env: {
673+OPENCLAW_UPDATE_IN_PROGRESS: "1",
674+},
675+},
676+);
677+expect(result).toEqual({
678+changes: [
679+'Deferred missing configured plugin "discord" install repair until post-update doctor.',
680+],
681+warnings: [],
682+});
683+});
684+685+it("does not install channel-selected external plugins during the package update doctor pass", async () => {
686+mocks.listChannelPluginCatalogEntries.mockReturnValue([
687+{
688+id: "discord",
689+pluginId: "discord",
690+meta: { label: "Discord" },
691+install: {
692+npmSpec: "@openclaw/discord",
693+},
694+},
695+]);
696+697+const { repairMissingConfiguredPluginInstalls } =
698+await import("./missing-configured-plugin-install.js");
699+const result = await repairMissingConfiguredPluginInstalls({
700+cfg: {
701+channels: {
702+discord: { enabled: true, token: "secret" },
703+},
704+},
705+env: {
706+OPENCLAW_UPDATE_IN_PROGRESS: "1",
707+},
708+});
709+710+expect(mocks.updateNpmInstalledPlugins).not.toHaveBeenCalled();
711+expect(mocks.installPluginFromClawHub).not.toHaveBeenCalled();
712+expect(mocks.installPluginFromNpmSpec).not.toHaveBeenCalled();
713+expect(mocks.writePersistedInstalledPluginIndexInstallRecords).not.toHaveBeenCalled();
714+expect(result).toEqual({ changes: [], warnings: [] });
715+});
716+633717it("does not install configured plugins when plugins are globally disabled", async () => {
634718mocks.listChannelPluginCatalogEntries.mockReturnValue([
635719{
此内容由惯性聚合(RSS阅读器)自动聚合整理,仅供阅读参考。 原文来自 — 版权归原作者所有。