refactor: split remaining monitor runtime helpers

This commit is contained in:
Peter Steinberger
2026-03-17 21:27:14 -07:00
parent 4e94f3aa02
commit b86bc9de95
19 changed files with 1825 additions and 1676 deletions

View File

@@ -80,10 +80,8 @@ vi.mock("../plugins/provider-runtime.js", async (importOriginal) => {
const thinkingLevel = skipReasoningInjection ? undefined : params.context.thinkingLevel;
return createOpenRouterSystemCacheWrapper(createOpenRouterWrapper(streamFn, thinkingLevel));
},
resolveProviderCapabilitiesWithPlugin: (params: {
provider: string;
workspaceDir?: string;
}) => resolveProviderCapabilitiesWithPluginMock(params),
resolveProviderCapabilitiesWithPlugin: (params: { provider: string; workspaceDir?: string }) =>
resolveProviderCapabilitiesWithPluginMock(params),
};
});

View File

@@ -89,11 +89,14 @@ function hasOpenAiAnthropicToolPayloadCompatFlag(model: { compat?: unknown }): b
);
}
function requiresAnthropicToolPayloadCompatibilityForModel(model: {
api?: unknown;
provider?: unknown;
compat?: unknown;
}, options?: AnthropicToolPayloadResolverOptions): boolean {
function requiresAnthropicToolPayloadCompatibilityForModel(
model: {
api?: unknown;
provider?: unknown;
compat?: unknown;
},
options?: AnthropicToolPayloadResolverOptions,
): boolean {
if (model.api !== "anthropic-messages") {
return false;
}
@@ -107,10 +110,13 @@ function requiresAnthropicToolPayloadCompatibilityForModel(model: {
return hasOpenAiAnthropicToolPayloadCompatFlag(model);
}
function usesOpenAiFunctionAnthropicToolSchemaForModel(model: {
provider?: unknown;
compat?: unknown;
}, options?: AnthropicToolPayloadResolverOptions): boolean {
function usesOpenAiFunctionAnthropicToolSchemaForModel(
model: {
provider?: unknown;
compat?: unknown;
},
options?: AnthropicToolPayloadResolverOptions,
): boolean {
if (
typeof model.provider === "string" &&
usesOpenAiFunctionAnthropicToolSchema(model.provider, options)
@@ -120,10 +126,13 @@ function usesOpenAiFunctionAnthropicToolSchemaForModel(model: {
return hasOpenAiAnthropicToolPayloadCompatFlag(model);
}
function usesOpenAiStringModeAnthropicToolChoiceForModel(model: {
provider?: unknown;
compat?: unknown;
}, options?: AnthropicToolPayloadResolverOptions): boolean {
function usesOpenAiStringModeAnthropicToolChoiceForModel(
model: {
provider?: unknown;
compat?: unknown;
},
options?: AnthropicToolPayloadResolverOptions,
): boolean {
if (
typeof model.provider === "string" &&
usesOpenAiStringModeAnthropicToolChoice(model.provider, options)

View File

@@ -1,6 +1,6 @@
import type { OpenClawConfig } from "../config/config.js";
import { resolveProviderCapabilitiesWithPlugin } from "../plugins/provider-runtime.js";
import { normalizeProviderId } from "./model-selection.js";
import type { OpenClawConfig } from "../config/config.js";
export type ProviderCapabilities = {
anthropicToolSchemaMode: "native" | "openai-functions";
@@ -125,8 +125,7 @@ export function usesOpenAiStringModeAnthropicToolChoice(
options?: ProviderCapabilityLookupOptions,
): boolean {
return (
resolveProviderCapabilities(provider, options).anthropicToolChoiceMode ===
"openai-string-modes"
resolveProviderCapabilities(provider, options).anthropicToolChoiceMode === "openai-string-modes"
);
}

View File

@@ -56,6 +56,10 @@ function normalizeTrimmedSet(
.filter((id): id is string => Boolean(id));
}
function objectValues<T>(value: Record<string, T> | undefined): T[] {
return Object.values(value ?? {});
}
export async function listSlackDirectoryPeersFromConfig(
params: DirectoryConfigParams,
): Promise<ChannelDirectoryEntry[]> {
@@ -123,9 +127,9 @@ export async function listDiscordDirectoryPeersFromConfig(
account.config.allowFrom ?? account.config.dm?.allowFrom,
account.config.dms,
);
for (const guild of Object.values(account.config.guilds ?? {})) {
for (const guild of objectValues(account.config.guilds)) {
addTrimmedEntries(ids, guild.users ?? []);
for (const channel of Object.values(guild.channels ?? {})) {
for (const channel of objectValues(guild.channels)) {
addTrimmedEntries(ids, channel.users ?? []);
}
}
@@ -153,7 +157,7 @@ export async function listDiscordDirectoryGroupsFromConfig(
return [];
}
const ids = new Set<string>();
for (const guild of Object.values(account.config.guilds ?? {})) {
for (const guild of objectValues(account.config.guilds)) {
addTrimmedEntries(ids, Object.keys(guild.channels ?? {}));
}

View File

@@ -99,7 +99,8 @@ function readExportStatements(path: string): string[] {
return sourceFile.statements.flatMap((statement) => {
if (!ts.isExportDeclaration(statement)) {
if (!statement.modifiers?.some((modifier) => modifier.kind === ts.SyntaxKind.ExportKeyword)) {
const modifiers = ts.canHaveModifiers(statement) ? ts.getModifiers(statement) : undefined;
if (!modifiers?.some((modifier) => modifier.kind === ts.SyntaxKind.ExportKeyword)) {
return [];
}
return [statement.getText(sourceFile).replaceAll(/\s+/g, " ").trim()];