refactor: untangle remaining plugin sdk boundaries

This commit is contained in:
Peter Steinberger
2026-03-16 21:13:56 -07:00
parent afc0172cb1
commit 9ebe38b6e3
492 changed files with 5657 additions and 2877 deletions

View File

@@ -1,69 +1,47 @@
import {
emptyPluginConfigSchema,
type OpenClawPluginApi,
type ProviderRuntimeModel,
} from "openclaw/plugin-sdk/core";
import { findNormalizedProviderValue, normalizeProviderId } from "../../src/agents/provider-id.js";
import { createProviderApiKeyAuthMethod } from "../../src/plugins/provider-api-key-auth.js";
import { isRecord } from "../../src/utils.js";
import { applyKimiCodeConfig, KIMI_DEFAULT_MODEL_REF } from "./onboard.js";
import {
buildKimiProvider,
KIMI_DEFAULT_MODEL_ID,
KIMI_LEGACY_MODEL_ID,
KIMI_UPSTREAM_MODEL_ID,
} from "./provider-catalog.js";
import { emptyPluginConfigSchema, type OpenClawPluginApi } from "openclaw/plugin-sdk/core";
import { createProviderApiKeyAuthMethod } from "openclaw/plugin-sdk/provider-auth";
import { isRecord } from "openclaw/plugin-sdk/text-runtime";
import { applyKimiCodeConfig, KIMI_CODING_MODEL_REF } from "./onboard.js";
import { buildKimiCodingProvider } from "./provider-catalog.js";
const PROVIDER_ID = "kimi";
const KIMI_TRANSPORT_MODEL_IDS = new Set([KIMI_DEFAULT_MODEL_ID, KIMI_LEGACY_MODEL_ID]);
function normalizeKimiTransportModel(model: ProviderRuntimeModel): ProviderRuntimeModel {
if (!KIMI_TRANSPORT_MODEL_IDS.has(model.id)) {
return model;
}
return {
...model,
id: KIMI_UPSTREAM_MODEL_ID,
name: "Kimi Code",
};
}
const PROVIDER_ID = "kimi-coding";
const kimiCodingPlugin = {
id: PROVIDER_ID,
name: "Kimi Code Provider",
description: "Bundled Kimi Code provider plugin",
name: "Kimi Provider",
description: "Bundled Kimi provider plugin",
configSchema: emptyPluginConfigSchema(),
register(api: OpenClawPluginApi) {
api.registerProvider({
id: PROVIDER_ID,
label: "Kimi Code",
aliases: ["kimi-code", "kimi-coding"],
label: "Kimi",
aliases: ["kimi", "kimi-code"],
docsPath: "/providers/moonshot",
envVars: ["KIMI_API_KEY", "KIMICODE_API_KEY"],
auth: [
createProviderApiKeyAuthMethod({
providerId: PROVIDER_ID,
methodId: "api-key",
label: "Kimi Code API key",
hint: "Dedicated coding endpoint",
label: "Kimi API key (subscription)",
hint: "Kimi K2.5 + Kimi",
optionKey: "kimiCodeApiKey",
flagName: "--kimi-code-api-key",
envVar: "KIMI_API_KEY",
promptMessage: "Enter Kimi Code API key",
defaultModel: KIMI_DEFAULT_MODEL_REF,
promptMessage: "Enter Kimi API key",
defaultModel: KIMI_CODING_MODEL_REF,
expectedProviders: ["kimi", "kimi-code", "kimi-coding"],
applyConfig: (cfg) => applyKimiCodeConfig(cfg),
noteMessage: [
"Kimi Code uses a dedicated coding endpoint and API key.",
"Kimi uses a dedicated coding endpoint and API key.",
"Get your API key at: https://www.kimi.com/code/en",
].join("\n"),
noteTitle: "Kimi Code",
noteTitle: "Kimi",
wizard: {
choiceId: "kimi-code-api-key",
choiceLabel: "Kimi Code API key",
groupId: "kimi-code",
groupLabel: "Kimi Code",
groupHint: "Dedicated coding endpoint",
choiceLabel: "Kimi API key (subscription)",
groupId: "moonshot",
groupLabel: "Moonshot AI (Kimi K2.5)",
groupHint: "Kimi K2.5 + Kimi",
},
}),
],
@@ -74,11 +52,8 @@ const kimiCodingPlugin = {
if (!apiKey) {
return null;
}
const explicitProvider = findNormalizedProviderValue(
ctx.config.models?.providers,
PROVIDER_ID,
);
const builtInProvider = buildKimiProvider();
const explicitProvider = ctx.config.models?.providers?.[PROVIDER_ID];
const builtInProvider = buildKimiCodingProvider();
const explicitBaseUrl =
typeof explicitProvider?.baseUrl === "string" ? explicitProvider.baseUrl.trim() : "";
const explicitHeaders = isRecord(explicitProvider?.headers)
@@ -104,12 +79,6 @@ const kimiCodingPlugin = {
capabilities: {
preserveAnthropicThinkingSignatures: false,
},
normalizeResolvedModel: (ctx) => {
if (normalizeProviderId(ctx.provider) !== PROVIDER_ID) {
return undefined;
}
return normalizeKimiTransportModel(ctx.model);
},
});
},
};

View File

@@ -1,44 +1,38 @@
import {
applyAgentDefaultModelPrimary,
applyProviderConfigWithModelCatalog,
} from "../../src/commands/onboard-auth.config-shared.js";
import type { OpenClawConfig } from "../../src/config/config.js";
applyProviderConfigWithDefaultModel,
type OpenClawConfig,
} from "openclaw/plugin-sdk/provider-onboard";
import {
buildKimiCodingProvider,
KIMI_BASE_URL,
KIMI_DEFAULT_MODEL_ID,
KIMI_LEGACY_MODEL_ID,
KIMI_CODING_BASE_URL,
KIMI_CODING_DEFAULT_MODEL_ID,
} from "./provider-catalog.js";
export const KIMI_DEFAULT_MODEL_REF = `kimi/${KIMI_DEFAULT_MODEL_ID}`;
export const KIMI_LEGACY_MODEL_REF = `kimi/${KIMI_LEGACY_MODEL_ID}`;
export const KIMI_CODING_MODEL_REF = KIMI_DEFAULT_MODEL_REF;
export const KIMI_CODING_MODEL_REF = `kimi-coding/${KIMI_CODING_DEFAULT_MODEL_ID}`;
export function applyKimiCodeProviderConfig(cfg: OpenClawConfig): OpenClawConfig {
const models = { ...cfg.agents?.defaults?.models };
models[KIMI_DEFAULT_MODEL_REF] = {
...models[KIMI_DEFAULT_MODEL_REF],
alias: models[KIMI_DEFAULT_MODEL_REF]?.alias ?? "Kimi Code",
};
models[KIMI_LEGACY_MODEL_REF] = {
...models[KIMI_LEGACY_MODEL_REF],
alias: models[KIMI_LEGACY_MODEL_REF]?.alias ?? "Kimi Code",
models[KIMI_CODING_MODEL_REF] = {
...models[KIMI_CODING_MODEL_REF],
alias: models[KIMI_CODING_MODEL_REF]?.alias ?? "Kimi",
};
const catalog = buildKimiCodingProvider().models ?? [];
if (catalog.length === 0) {
const defaultModel = buildKimiCodingProvider().models[0];
if (!defaultModel) {
return cfg;
}
return applyProviderConfigWithModelCatalog(cfg, {
return applyProviderConfigWithDefaultModel(cfg, {
agentModels: models,
providerId: "kimi",
providerId: "kimi-coding",
api: "anthropic-messages",
baseUrl: KIMI_BASE_URL,
catalogModels: catalog,
baseUrl: KIMI_CODING_BASE_URL,
defaultModel,
defaultModelId: KIMI_CODING_DEFAULT_MODEL_ID,
});
}
export function applyKimiCodeConfig(cfg: OpenClawConfig): OpenClawConfig {
return applyAgentDefaultModelPrimary(applyKimiCodeProviderConfig(cfg), KIMI_DEFAULT_MODEL_REF);
return applyAgentDefaultModelPrimary(applyKimiCodeProviderConfig(cfg), KIMI_CODING_MODEL_REF);
}

View File

@@ -1,4 +1,4 @@
import type { ModelProviderConfig } from "../../src/config/types.models.js";
import type { ModelProviderConfig } from "openclaw/plugin-sdk/provider-models";
export const KIMI_BASE_URL = "https://api.kimi.com/coding/";
const KIMI_CODING_USER_AGENT = "claude-code/0.1.0";