fix: break plugin command spec import cycle

This commit is contained in:
Peter Steinberger
2026-04-26 09:15:43 +01:00
parent 1323683d72
commit 2f5e5e9a71
9 changed files with 32 additions and 36 deletions

View File

@@ -6,7 +6,6 @@ import {
import {
clearPluginCommands,
clearPluginCommandsForPlugin,
getPluginCommandSpecs,
isPluginCommandRegistryLocked,
listProviderPluginCommandSpecs,
pluginCommands,
@@ -197,10 +196,5 @@ export function registerPluginCommand(
return { ok: true };
}
export {
clearPluginCommands,
clearPluginCommandsForPlugin,
getPluginCommandSpecs,
listProviderPluginCommandSpecs,
};
export { clearPluginCommands, clearPluginCommandsForPlugin, listProviderPluginCommandSpecs };
export type { RegisteredPluginCommand };

View File

@@ -1,5 +1,3 @@
import { getLoadedChannelPlugin } from "../channels/plugins/index.js";
import { resolveReadOnlyChannelCommandDefaults } from "../channels/plugins/read-only-command-defaults.js";
import { resolveGlobalSingleton } from "../shared/global-singleton.js";
import { normalizeOptionalLowercaseString } from "../shared/string-coerce.js";
import type { OpenClawPluginCommandDefinition } from "./types.js";
@@ -83,24 +81,6 @@ function resolvePluginNativeName(
return command.name;
}
export function getPluginCommandSpecs(provider?: string): Array<{
name: string;
description: string;
acceptsArgs: boolean;
}> {
const providerName = normalizeOptionalLowercaseString(provider);
if (
providerName &&
(
getLoadedChannelPlugin(providerName)?.commands ??
resolveReadOnlyChannelCommandDefaults(providerName)
)?.nativeCommandsAutoEnabled !== true
) {
return [];
}
return listProviderPluginCommandSpecs(provider);
}
/** Resolve plugin command specs for a provider's native naming surface without support gating. */
export function listProviderPluginCommandSpecs(provider?: string): Array<{
name: string;

View File

@@ -0,0 +1,22 @@
import { getLoadedChannelPlugin } from "../channels/plugins/index.js";
import { resolveReadOnlyChannelCommandDefaults } from "../channels/plugins/read-only.js";
import { normalizeOptionalLowercaseString } from "../shared/string-coerce.js";
import { listProviderPluginCommandSpecs } from "./command-registry-state.js";
export function getPluginCommandSpecs(provider?: string): Array<{
name: string;
description: string;
acceptsArgs: boolean;
}> {
const providerName = normalizeOptionalLowercaseString(provider);
if (
providerName &&
(
getLoadedChannelPlugin(providerName)?.commands ??
resolveReadOnlyChannelCommandDefaults(providerName)
)?.nativeCommandsAutoEnabled !== true
) {
return [];
}
return listProviderPluginCommandSpecs(provider);
}

View File

@@ -12,7 +12,6 @@ import { normalizeLowercaseStringOrEmpty } from "../shared/string-coerce.js";
import {
clearPluginCommands,
clearPluginCommandsForPlugin,
getPluginCommandSpecs,
listPluginInvocationKeys,
listProviderPluginCommandSpecs,
registerPluginCommand,
@@ -24,6 +23,7 @@ import {
setPluginCommandRegistryLocked,
type RegisteredPluginCommand,
} from "./command-registry-state.js";
import { getPluginCommandSpecs } from "./command-specs.js";
import {
detachPluginConversationBinding,
getCurrentPluginConversationBinding,

View File

@@ -22,7 +22,8 @@ import {
type DetachedTaskLifecycleRuntime,
} from "../tasks/detached-task-runtime-state.js";
import { withEnv } from "../test-utils/env.js";
import { clearPluginCommands, getPluginCommandSpecs } from "./command-registry-state.js";
import { clearPluginCommands } from "./command-registry-state.js";
import { getPluginCommandSpecs } from "./command-specs.js";
import {
getGlobalHookRunner,
getGlobalPluginRegistry,