

























@@ -486,6 +486,66 @@ vi.mock("./model-selection.js", () => {
486486};
487487});
488488489+vi.mock("./model-visibility-policy.js", () => ({
490+createModelVisibilityPolicy: ({
491+ cfg,
492+ catalog,
493+ defaultProvider,
494+ defaultModel,
495+}: {
496+cfg?: unknown;
497+catalog?: Array<{ provider: string; id: string }>;
498+defaultProvider: string;
499+defaultModel?: string;
500+}) => {
501+const modelMap =
502+(cfg as { agents?: { defaults?: { models?: Record<string, unknown> } } } | undefined)?.agents
503+?.defaults?.models ?? {};
504+const allowedKeys = new Set<string>(
505+Object.keys(modelMap).map((ref) => {
506+const [provider, ...modelParts] = ref.split("/");
507+return `${provider}/${modelParts.join("/")}`;
508+}),
509+);
510+if (defaultModel) {
511+allowedKeys.add(`${defaultProvider}/${defaultModel}`);
512+}
513+const allowAny = Object.keys(modelMap).length === 0;
514+const allowedCatalog = allowAny
515+ ? (catalog ?? [])
516+ : (catalog ?? []).filter((entry) => allowedKeys.has(`${entry.provider}/${entry.id}`));
517+const allowsKey = (key: string) => {
518+if (allowAny || allowedKeys.has(key)) {
519+return true;
520+}
521+const slash = key.indexOf("/");
522+return slash > 0 && allowedKeys.has(`${key.slice(0, slash)}/*`);
523+};
524+return {
525+ allowAny,
526+ allowedKeys,
527+ allowedCatalog,
528+exactModelRefs: [],
529+providerWildcards: new Set<string>(),
530+hasConfiguredEntries: !allowAny,
531+hasProviderWildcards: [...allowedKeys].some((key) => key.endsWith("/*")),
532+ allowsKey,
533+allows: ({ provider, model }: { provider: string; model: string }) =>
534+allowsKey(`${provider}/${model}`),
535+resolveSelection: ({ provider, model }: { provider: string; model: string }) => {
536+const key = `${provider}/${model}`;
537+if (allowsKey(key)) {
538+return { provider, model };
539+}
540+const fallback = allowedCatalog[0];
541+return fallback ? { provider: fallback.provider, model: fallback.id } : null;
542+},
543+visibleCatalog: ({ catalog }: { catalog: Array<{ provider: string; id: string }> }) =>
544+catalog,
545+};
546+},
547+}));
548+489549vi.mock("./provider-auth-aliases.js", () => ({
490550resolveProviderAuthAliasMap: () => ({}),
491551resolveProviderIdForAuth: (provider: string) =>
此内容由惯性聚合(RSS阅读器)自动聚合整理,仅供阅读参考。 原文来自 — 版权归原作者所有。