feat(plugins): surface imported runtime state in status tooling (#59659)

* feat(plugins): surface imported runtime state

* fix(plugins): keep status imports snapshot-only

* fix(plugins): keep status snapshots manifest-only

* fix(plugins): restore doctor load checks

* refactor(plugins): split snapshot and diagnostics reports

* fix(plugins): track imported erroring modules

* fix(plugins): keep hot metadata where required

* fix(plugins): keep hot doctor and write targeting

* fix(plugins): track throwing module imports
This commit is contained in:
Vincent Koc
2026-04-02 22:50:17 +09:00
committed by GitHub
parent 1ecd92af89
commit def5b954a8
18 changed files with 684 additions and 51 deletions

View File

@@ -18,7 +18,10 @@ export const resolveMarketplaceInstallShortcut = vi.fn();
export const enablePluginInConfig = vi.fn();
export const recordPluginInstall = vi.fn();
export const clearPluginManifestRegistryCache = vi.fn();
export const buildPluginStatusReport = vi.fn();
export const buildPluginSnapshotReport = vi.fn();
export const buildPluginDiagnosticsReport = vi.fn();
export const buildPluginStatusReport = buildPluginDiagnosticsReport;
export const buildPluginCompatibilityNotices = vi.fn();
export const applyExclusiveSlotSelection = vi.fn();
export const uninstallPlugin = vi.fn();
export const updateNpmInstalledPlugins = vi.fn();
@@ -72,7 +75,9 @@ vi.mock("../plugins/manifest-registry.js", () => ({
}));
vi.mock("../plugins/status.js", () => ({
buildPluginStatusReport: (...args: unknown[]) => buildPluginStatusReport(...args),
buildPluginSnapshotReport: (...args: unknown[]) => buildPluginSnapshotReport(...args),
buildPluginDiagnosticsReport: (...args: unknown[]) => buildPluginDiagnosticsReport(...args),
buildPluginCompatibilityNotices: (...args: unknown[]) => buildPluginCompatibilityNotices(...args),
}));
vi.mock("../plugins/slots.js", () => ({
@@ -154,7 +159,9 @@ export function resetPluginsCliTestState() {
enablePluginInConfig.mockReset();
recordPluginInstall.mockReset();
clearPluginManifestRegistryCache.mockReset();
buildPluginStatusReport.mockReset();
buildPluginSnapshotReport.mockReset();
buildPluginDiagnosticsReport.mockReset();
buildPluginCompatibilityNotices.mockReset();
applyExclusiveSlotSelection.mockReset();
uninstallPlugin.mockReset();
updateNpmInstalledPlugins.mockReset();
@@ -199,10 +206,13 @@ export function resetPluginsCliTestState() {
});
enablePluginInConfig.mockImplementation((cfg: OpenClawConfig) => ({ config: cfg }));
recordPluginInstall.mockImplementation((cfg: OpenClawConfig) => cfg);
buildPluginStatusReport.mockReturnValue({
const defaultPluginReport = {
plugins: [],
diagnostics: [],
});
};
buildPluginSnapshotReport.mockReturnValue(defaultPluginReport);
buildPluginDiagnosticsReport.mockReturnValue(defaultPluginReport);
buildPluginCompatibilityNotices.mockReturnValue([]);
applyExclusiveSlotSelection.mockImplementation(({ config }: { config: OpenClawConfig }) => ({
config,
warnings: [],