export function createLiveTargetMatcher(params: {
providerFilter: Set<string> | null;
modelFilter: Set<string> | null;
config?: OpenClawConfig;
workspaceDir?: string;
env?: NodeJS.ProcessEnv;
}) { const providerFilter = normalizeCsvSet(params.providerFilter); const modelTargets = [...(normalizeCsvSet(params.modelFilter) ?? [])]
.map((value) => parseModelTarget(value))
.filter((value): value is ModelTarget => value !== null); const ownerCache = new Map<string, readonly string[]>();
return {
matchesProvider(provider: string): boolean { if (!providerFilter) { returntrue;
} const normalizedProvider = normalizeProviderId(provider); for (const requested of providerFilter) { const normalizedRequested = normalizeProviderId(requested); if (normalizedRequested === normalizedProvider) { returntrue;
} if (
liveProvidersShareOwningPlugin(normalizedRequested, normalizedProvider, {
config: params.config,
workspaceDir: params.workspaceDir,
env: params.env,
ownerCache,
})
) { returntrue;
}
} returnfalse;
},
matchesModel(provider: string, modelId: string): boolean { if (modelTargets.length === 0) { returntrue;
} const normalizedProvider = normalizeProviderId(provider); const normalizedModelId = normalizeOptionalLowercaseString(modelId); if (!normalizedModelId) { returnfalse;
} const directRef = `${normalizedProvider}/${normalizedModelId}`; for (const target of modelTargets) { if (normalizeOptionalLowercaseString(target.raw) === directRef) { returntrue;
} if (target.modelId !== normalizedModelId) { continue;
} if (!target.provider) { returntrue;
} if (target.provider === normalizedProvider) { returntrue;
} if (
liveProvidersShareOwningPlugin(target.provider, normalizedProvider, {
config: params.config,
workspaceDir: params.workspaceDir,
env: params.env,
ownerCache,
})
) { returntrue;
}
} returnfalse;
},
};
}
Messung V0.5 in Prozent
¤ Die Informationen auf dieser Webseite wurden
nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit,
noch Qualität der bereit gestellten Informationen zugesichert.0.12Bemerkung:
(vorverarbeitet am 2026-05-26)
¤
Die Informationen auf dieser Webseite wurden
nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit,
noch Qualität der bereit gestellten Informationen zugesichert.
Bemerkung:
Die farbliche Syntaxdarstellung und die Messung sind noch experimentell.