mirror of
https://github.com/diegosouzapw/OmniRoute.git
synced 2026-09-14 10:52:17 +03:00
Validado numa worktree combinada com as 16 PRs desta leva sobre `release/v3.8.51`: typecheck:core limpo, check-file-size e check-changelog-integrity OK, complexity 2788/3218 e cognitive 1261/1437, ESLint 0 erros nos 152 arquivos alterados, 771 testes unitários focados, 49 de integração e a suíte vitest:ui completa (2149) verdes. O ponto que sustenta a PR é o `models.dev` virar overlay de preço em vez de fonte de catálogo. Um catálogo estático que sobrevive à conta já ter listado ids mais novos é o tipo de defeito que só aparece quando o modelo novo é justamente o que se quer usar. Nota de integração: `activeSyncedCatalog.ts` colidiu com o #12934 (união dos `customModels` do picker no catálogo de despacho). Como você extraiu o bloco original para `loadConnectionCatalog`, os dois se compõem: a união dos irmãos agy/antigravity primeiro, o `unionCustomModels` por cima. Revalidei com `custom-models-live-catalog-12597`, `live-model-catalog-reconciliation-8926`, `sync-models-degraded-cached-catalog-9683`, `models-dev-catalog-read-gate`, `discovery-class`, `reactive-model-sync` e `l1-oauth-autosync-default` juntos — 48/48 — mais typecheck:core limpo. Sobre o `autoSync` padrão em Claude/Codex/Copilot com scheduler de 6h: passei isso pelo dono antes de mergear e a decisão foi manter como está.
49 lines
1.6 KiB
TypeScript
49 lines
1.6 KiB
TypeScript
import test from "node:test";
|
|
import assert from "node:assert/strict";
|
|
import {
|
|
ACCOUNT_LIVE_PROVIDER_IDS,
|
|
getDiscoveryClass,
|
|
} from "../../src/lib/providerModels/discoveryClass.ts";
|
|
import { HARDCODED_MODELS_CONFIG_IDS } from "../../src/lib/providerModels/hardcodedModelsConfigIds.ts";
|
|
import { PROVIDER_MODELS_CONFIG } from "../../src/app/api/providers/[id]/models/discovery/providerModelsConfig.ts";
|
|
import { getRegistryEntry } from "../../open-sse/config/providerRegistry.ts";
|
|
|
|
const L1 = [
|
|
"claude",
|
|
"codex",
|
|
"github",
|
|
"ghe-copilot",
|
|
"agy",
|
|
"antigravity",
|
|
"gemini",
|
|
"cursor",
|
|
"cu",
|
|
"grok-cli",
|
|
] as const;
|
|
|
|
test("test 1: L1 ids are account-live", () => {
|
|
assert.equal(ACCOUNT_LIVE_PROVIDER_IDS.length, 10);
|
|
for (const id of L1) {
|
|
assert.equal(getDiscoveryClass(id), "account-live", id);
|
|
}
|
|
assert.equal(getDiscoveryClass("CLAUDE"), "account-live");
|
|
});
|
|
|
|
test("test 2: curated web providers are static-only", () => {
|
|
for (const id of ["kimi-web", "chatgpt-web", "zai-web"]) {
|
|
assert.equal(getDiscoveryClass(id), "static-only", id);
|
|
}
|
|
});
|
|
|
|
test("test 3: modelsUrl gateway is openai-compat; unknown is static-only", () => {
|
|
assert.ok(getRegistryEntry("minimax")?.modelsUrl);
|
|
assert.equal(getDiscoveryClass("minimax"), "openai-compat");
|
|
assert.equal(getDiscoveryClass("no-such-provider-xyz"), "static-only");
|
|
});
|
|
|
|
test("hardcoded config keys lockstep with PROVIDER_MODELS_CONFIG", () => {
|
|
const fromModule = [...HARDCODED_MODELS_CONFIG_IDS].sort();
|
|
const fromConfig = Object.keys(PROVIDER_MODELS_CONFIG).sort();
|
|
assert.deepEqual(fromModule, fromConfig);
|
|
});
|