// Moonshot plugin entrypoint registers its OpenClaw integration. import { defineSingleProviderPluginEntry } from "openclaw/plugin-sdk/provider-entry"; import { buildOpenAICompatibleReplayPolicy } from "openclaw/plugin-sdk/provider-model-shared"; import { MOONSHOT_THINKING_STREAM_HOOKS } from "openclaw/plugin-sdk/provider-stream-family"; import { applyMoonshotNativeStreamingUsageCompat } from "./api.js"; import { moonshotMediaUnderstandingProvider } from "./media-understanding-provider.js"; import { applyMoonshotConfig, applyMoonshotConfigCn, MOONSHOT_DEFAULT_MODEL_REF, } from "./onboard.js"; import { buildMoonshotProvider } from "./provider-catalog.js"; import { KIMI_K2_7_CODE_MODEL_ID, resolveThinkingProfile } from "./provider-policy-api.js"; import { createKimiWebSearchProvider } from "./src/kimi-web-search-provider.js"; const PROVIDER_ID = "moonshot"; const moonshotThinkingStreamHooks = MOONSHOT_THINKING_STREAM_HOOKS; export default defineSingleProviderPluginEntry({ id: PROVIDER_ID, name: "Moonshot Provider", description: "Bundled Moonshot provider plugin", provider: { label: "Moonshot", docsPath: "/providers/moonshot", aliases: ["moonshotai", "moonshot-ai"], auth: [ { methodId: "api-key", label: "Kimi API key (.ai)", hint: "Kimi K2.6 + Kimi", optionKey: "moonshotApiKey", flagName: "--moonshot-api-key", envVar: "MOONSHOT_API_KEY", promptMessage: "Enter Moonshot API key", defaultModel: MOONSHOT_DEFAULT_MODEL_REF, applyConfig: (cfg) => applyMoonshotConfig(cfg), wizard: { groupLabel: "Moonshot AI (Kimi K2.6)", }, }, { methodId: "api-key-cn", label: "Kimi API key (.cn)", hint: "Kimi K2.6 + Kimi", optionKey: "moonshotApiKey", flagName: "--moonshot-api-key", envVar: "MOONSHOT_API_KEY", promptMessage: "Enter Moonshot API key (.cn)", defaultModel: MOONSHOT_DEFAULT_MODEL_REF, applyConfig: (cfg) => applyMoonshotConfigCn(cfg), wizard: { groupLabel: "Moonshot AI (Kimi K2.6)", }, }, ], catalog: { buildProvider: buildMoonshotProvider, buildStaticProvider: buildMoonshotProvider, allowExplicitBaseUrl: true, }, applyNativeStreamingUsageCompat: ({ providerConfig }) => applyMoonshotNativeStreamingUsageCompat(providerConfig), buildReplayPolicy: ({ modelApi, modelId }) => buildOpenAICompatibleReplayPolicy(modelApi, { modelId, sanitizeToolCallIds: modelApi === "openai-completions", duplicateToolCallIdStyle: "openai", dropReasoningFromHistory: false, }), ...moonshotThinkingStreamHooks, wrapSimpleCompletionStreamFn: (ctx) => ctx.modelId.trim().toLowerCase() === KIMI_K2_7_CODE_MODEL_ID ? moonshotThinkingStreamHooks.wrapStreamFn?.(ctx) : ctx.streamFn, resolveThinkingProfile, isModernModelRef: ({ modelId }) => modelId.trim().toLowerCase() === KIMI_K2_7_CODE_MODEL_ID, }, register(api) { api.registerMediaUnderstandingProvider(moonshotMediaUnderstandingProvider); api.registerWebSearchProvider(createKimiWebSearchProvider()); }, });