products
/
Sources
/
formale Sprachen
/
JAVA
/
Openclaw
/
src
/
plugin-sdk
/ (
Openclaw AI
Version 22
©
) Datei vom 26.3.2026 mit Größe 255 B
Bilddatei
models-config.plan.ts
products/Sources/formale Sprachen/JAVA/Openclaw/src/agents/models-config.plan.ts
import type { OpenClawConfig } from "../config/types.openclaw.js"; import { isRecord } from "../utils.js"; import { mergeProviders, mergeWithExistingProviderSecrets, type ExistingProviderConfig, } from "./models-config.merge.js"; import { applyNativeStreamingUsageCompat, enforceSourceManagedProviderSecrets, normalizeProviders, resolveImplicitProviders, type ProviderConfig, } from "./models-config.providers.js"; type ModelsConfig = NonNullable
; export type ResolveImplicitProvidersForModelsJson = (params: { agentDir: string; config: OpenClawConfig; env: NodeJS.ProcessEnv; explicitProviders: Record
; }) => Promise
>; export type ModelsJsonPlan = | { action: "skip"; } | { action: "noop"; } | { action: "write"; contents: string; }; export async function resolveProvidersForModelsJsonWithDeps( params: { cfg: OpenClawConfig; agentDir: string; env: NodeJS.ProcessEnv; }, deps?: { resolveImplicitProviders?: ResolveImplicitProvidersForModelsJson; }, ): Promise
> { const { cfg, agentDir, env } = params; const explicitProviders = cfg.models?.providers ?? {}; const resolveImplicitProvidersImpl = deps?.resolveImplicitProviders ?? resolveImplicitProviders; const implicitProviders = await resolveImplicitProvidersImpl({ agentDir, config: cfg, env, explicitProviders, }); return mergeProviders({ implicit: implicitProviders, explicit: explicitProviders, }); } function resolveProvidersForMode(params: { mode: NonNullable
; existingParsed: unknown; providers: Record
; secretRefManagedProviders: ReadonlySet
; }): Record
{ if (params.mode !== "merge") { return params.providers; } const existing = params.existingParsed; if (!isRecord(existing) || !isRecord(existing.providers)) { return params.providers; } const existingProviders = existing.providers as Record< string, NonNullable
[string] >; return mergeWithExistingProviderSecrets({ nextProviders: params.providers, existingProviders: existingProviders as Record
, secretRefManagedProviders: params.secretRefManagedProviders, }); } export async function planOpenClawModelsJsonWithDeps( params: { cfg: OpenClawConfig; sourceConfigForSecrets?: OpenClawConfig; agentDir: string; env: NodeJS.ProcessEnv; existingRaw: string; existingParsed: unknown; }, deps?: { resolveImplicitProviders?: ResolveImplicitProvidersForModelsJson; }, ): Promise
{ const { cfg, agentDir, env } = params; const providers = await resolveProvidersForModelsJsonWithDeps({ cfg, agentDir, env }, deps); if (Object.keys(providers).length === 0) { return { action: "skip" }; } const mode = cfg.models?.mode ?? "merge"; const secretRefManagedProviders = new Set
(); const normalizedProviders = normalizeProviders({ providers, agentDir, env, secretDefaults: cfg.secrets?.defaults, sourceProviders: params.sourceConfigForSecrets?.models?.providers, sourceSecretDefaults: params.sourceConfigForSecrets?.secrets?.defaults, secretRefManagedProviders, }) ?? providers; const mergedProviders = resolveProvidersForMode({ mode, existingParsed: params.existingParsed, providers: normalizedProviders, secretRefManagedProviders, }); const secretEnforcedProviders = enforceSourceManagedProviderSecrets({ providers: mergedProviders, sourceProviders: params.sourceConfigForSecrets?.models?.providers, sourceSecretDefaults: params.sourceConfigForSecrets?.secrets?.defaults, secretRefManagedProviders, }) ?? mergedProviders; const finalProviders = applyNativeStreamingUsageCompat(secretEnforcedProviders); const nextContents = `${JSON.stringify({ providers: finalProviders }, null, 2)}\n`; if (params.existingRaw === nextContents) { return { action: "noop" }; } return { action: "write", contents: nextContents, }; } export async function planOpenClawModelsJson( params: Parameters
[0], ): Promise
{ return planOpenClawModelsJsonWithDeps(params); }
2026-10-10