oclaw/openclaw/extensions/cloudflare-ai-gateway/catalog-provider.ts
oliver dbbe3add6a 重构主控编排与运行时预热链路,统一工作区提示词/专家调度协议并补齐 wiki 记忆注入与写回闭环。
同时收敛启动与运维脚本默认行为(含 wiki worker)、更新 Admin 可观测性与相关测试,降低首轮时延并提高运行稳定性。

Made-with: Cursor
2026-04-26 08:34:33 +08:00

75 lines
2 KiB
TypeScript

import {
coerceSecretRef,
resolveNonEnvSecretRefApiKeyMarker,
} from "openclaw/plugin-sdk/provider-auth";
import { normalizeOptionalString } from "openclaw/plugin-sdk/text-runtime";
import {
buildCloudflareAiGatewayModelDefinition,
resolveCloudflareAiGatewayBaseUrl,
} from "./models.js";
export type CloudflareAiGatewayCredential =
| {
type?: string;
keyRef?: unknown;
key?: unknown;
metadata?: {
accountId?: unknown;
gatewayId?: unknown;
};
}
| undefined;
export function resolveCloudflareAiGatewayApiKey(
cred: CloudflareAiGatewayCredential,
): string | undefined {
if (!cred || cred.type !== "api_key") {
return undefined;
}
const keyRef = coerceSecretRef(cred.keyRef);
const keyRefId = normalizeOptionalString(keyRef?.id);
if (keyRef && keyRefId) {
return keyRef.source === "env" ? keyRefId : resolveNonEnvSecretRefApiKeyMarker(keyRef.source);
}
return normalizeOptionalString(cred.key);
}
export function resolveCloudflareAiGatewayMetadata(cred: CloudflareAiGatewayCredential): {
accountId?: string;
gatewayId?: string;
} {
if (!cred || cred.type !== "api_key") {
return {};
}
return {
accountId: normalizeOptionalString(cred.metadata?.accountId),
gatewayId: normalizeOptionalString(cred.metadata?.gatewayId),
};
}
export function buildCloudflareAiGatewayCatalogProvider(params: {
credential: CloudflareAiGatewayCredential;
envApiKey?: string;
}) {
const apiKey =
normalizeOptionalString(params.envApiKey) ??
resolveCloudflareAiGatewayApiKey(params.credential);
if (!apiKey) {
return null;
}
const { accountId, gatewayId } = resolveCloudflareAiGatewayMetadata(params.credential);
if (!accountId || !gatewayId) {
return null;
}
const baseUrl = resolveCloudflareAiGatewayBaseUrl({ accountId, gatewayId });
if (!baseUrl) {
return null;
}
return {
baseUrl,
api: "anthropic-messages" as const,
apiKey,
models: [buildCloudflareAiGatewayModelDefinition()],
};
}