fix: speed up status json channel detection

Signed-off-by: sallyom <somalley@redhat.com>
This commit is contained in:
sallyom
2026-05-08 00:05:50 -04:00
committed by Sally O'Malley
parent d29201fe4f
commit 07e8aecb39
4 changed files with 24 additions and 16 deletions

View File

@@ -55,6 +55,7 @@ describe("scanStatusJsonFast", () => {
await scanStatusJsonFast({}, {} as never);
expect(mocks.hasConfiguredChannelsForReadOnlyScope).not.toHaveBeenCalled();
expect(mocks.ensurePluginRegistryLoaded).not.toHaveBeenCalled();
expect(loggingStateRef.forceConsoleToStderr).toBe(false);
});

View File

@@ -1,5 +1,5 @@
import { hasPotentialConfiguredChannels } from "../channels/config-presence.js";
import type { OpenClawConfig } from "../config/types.js";
import { hasConfiguredChannelsForReadOnlyScope } from "../plugins/channel-plugin-ids.js";
import type { RuntimeEnv } from "../runtime.js";
import { executeStatusScanFromOverview } from "./status.scan-execute.ts";
import {
@@ -58,11 +58,8 @@ export async function scanStatusJsonFast(
commandName: "status --json",
allowMissingConfigFastPath: true,
includeChannelSummary: false,
resolveHasConfiguredChannels: (cfg, sourceConfig) =>
hasConfiguredChannelsForReadOnlyScope({
config: cfg,
activationSourceConfig: sourceConfig,
env: process.env,
resolveHasConfiguredChannels: (cfg) =>
hasPotentialConfiguredChannels(cfg, process.env, {
includePersistedAuthState: false,
}),
resolveMemory: async ({ cfg, agentStatus, memoryPlugin }) =>

View File

@@ -8,6 +8,7 @@ type ResolveConfigPathMock = Mock<() => string>;
type StatusScanSharedMocks = {
resolveConfigPath: ResolveConfigPathMock;
hasPotentialConfiguredChannels: UnknownMock;
hasConfiguredChannelsForReadOnlyScope: UnknownMock;
readBestEffortConfig: UnknownMock;
resolveCommandSecretRefsViaGateway: UnknownMock;
getUpdateCheckResult: UnknownMock;
@@ -26,6 +27,7 @@ export function createStatusScanSharedMocks(configPathLabel: string): StatusScan
return {
resolveConfigPath: vi.fn(() => `/tmp/openclaw-${configPathLabel}-missing-${process.pid}.json`),
hasPotentialConfiguredChannels: vi.fn(),
hasConfiguredChannelsForReadOnlyScope: vi.fn(),
readBestEffortConfig: vi.fn(),
resolveCommandSecretRefsViaGateway: vi.fn(),
getUpdateCheckResult: vi.fn(),
@@ -187,16 +189,7 @@ export async function loadStatusScanModuleForTest(
config: OpenClawConfig;
env?: NodeJS.ProcessEnv;
includePersistedAuthState?: boolean;
}) =>
Boolean(
mocks.hasPotentialConfiguredChannels(
params.config,
params.env,
params.includePersistedAuthState === undefined
? undefined
: { includePersistedAuthState: params.includePersistedAuthState },
),
),
}) => mocks.hasConfiguredChannelsForReadOnlyScope(params),
listConfiguredChannelIdsForReadOnlyScope: (params: {
config: OpenClawConfig;
env?: NodeJS.ProcessEnv;
@@ -409,6 +402,22 @@ export function applyStatusScanDefaults(
const resolvedConfig = options.resolvedConfig ?? sourceConfig;
mocks.hasPotentialConfiguredChannels.mockReturnValue(options.hasConfiguredChannels ?? false);
mocks.hasConfiguredChannelsForReadOnlyScope.mockImplementation((rawParams: unknown) => {
const params = rawParams as {
config: OpenClawConfig;
env?: NodeJS.ProcessEnv;
includePersistedAuthState?: boolean;
};
return Boolean(
mocks.hasPotentialConfiguredChannels(
params.config,
params.env,
params.includePersistedAuthState === undefined
? undefined
: { includePersistedAuthState: params.includePersistedAuthState },
),
);
});
mocks.readBestEffortConfig.mockResolvedValue(sourceConfig);
mocks.resolveCommandSecretRefsViaGateway.mockResolvedValue({
resolvedConfig,