






















@@ -27,6 +27,7 @@ import { isModelNotFoundErrorMessage } from "../agents/live-model-errors.js";
2727import {
2828DEFAULT_HIGH_SIGNAL_LIVE_MODEL_LIMIT,
2929getHighSignalLiveModelPriorityIndex,
30+getHighSignalLiveModelProviders,
3031isHighSignalLiveModelRef,
3132resolveHighSignalLiveModelLimit,
3233selectHighSignalLiveItems,
@@ -169,7 +170,9 @@ function providerScopedModelRegistryProviders(params: {
169170return params.providerList;
170171}
171172if (!params.useExplicit) {
172-return undefined;
173+return getHighSignalLiveModelProviders().filter((provider) =>
174+params.providerFilter ? params.providerFilter.has(provider) : true,
175+);
173176}
174177return providerListFromExplicitModelFilter({
175178modelFilter: params.modelFilter,
@@ -402,28 +405,44 @@ function enterProductionEnvForLiveRun() {
402405const previous = {
403406vitest: process.env.VITEST,
404407nodeEnv: process.env.NODE_ENV,
408+testFast: process.env.OPENCLAW_TEST_FAST,
405409};
406410delete process.env.VITEST;
411+delete process.env.OPENCLAW_TEST_FAST;
407412process.env.NODE_ENV = "production";
408413return previous;
409414}
410415411416function restoreProductionEnvForLiveRun(previous: {
412417vitest: string | undefined;
413418nodeEnv: string | undefined;
419+testFast: string | undefined;
414420}) {
415421if (previous.vitest === undefined) {
416422delete process.env.VITEST;
417423} else {
418424process.env.VITEST = previous.vitest;
419425}
426+if (previous.testFast === undefined) {
427+delete process.env.OPENCLAW_TEST_FAST;
428+} else {
429+process.env.OPENCLAW_TEST_FAST = previous.testFast;
430+}
420431if (previous.nodeEnv === undefined) {
421432delete process.env.NODE_ENV;
422433} else {
423434process.env.NODE_ENV = previous.nodeEnv;
424435}
425436}
426437438+function restoreOptionalEnv(key: string, value: string | undefined): void {
439+if (value === undefined) {
440+delete process.env[key];
441+} else {
442+process.env[key] = value;
443+}
444+}
445+427446function formatFailurePreview(
428447failures: Array<{ model: string; error: string }>,
429448maxItems: number,
@@ -932,6 +951,28 @@ describe("resolveExplicitLiveModelCandidates", () => {
932951});
933952934953describe("providerScopedModelRegistryProviders", () => {
954+it("uses curated high-signal providers for default modern sweeps", () => {
955+expect(
956+providerScopedModelRegistryProviders({
957+providerList: undefined,
958+useExplicit: false,
959+modelFilter: null,
960+providerFilter: null,
961+}),
962+).toEqual(getHighSignalLiveModelProviders());
963+});
964+965+it("intersects default modern sweeps with provider filters", () => {
966+expect(
967+providerScopedModelRegistryProviders({
968+providerList: undefined,
969+useExplicit: false,
970+modelFilter: null,
971+providerFilter: new Set(["openai", "not-high-signal"]),
972+}),
973+).toEqual(["openai"]);
974+});
975+935976it("uses explicit provider-qualified model refs without enumerating the full registry", () => {
936977expect(
937978providerScopedModelRegistryProviders({
@@ -1002,6 +1043,31 @@ describe("buildLiveGatewayConfig", () => {
10021043});
10031044});
100410451046+describe("enterProductionEnvForLiveRun", () => {
1047+it("clears Vitest fast-reply flags while preserving caller state", () => {
1048+const previous = {
1049+vitest: process.env.VITEST,
1050+nodeEnv: process.env.NODE_ENV,
1051+testFast: process.env.OPENCLAW_TEST_FAST,
1052+};
1053+process.env.VITEST = "1";
1054+process.env.NODE_ENV = "test";
1055+process.env.OPENCLAW_TEST_FAST = "1";
1056+1057+const runtimeEnv = enterProductionEnvForLiveRun();
1058+try {
1059+expect(process.env.VITEST).toBeUndefined();
1060+expect(process.env.NODE_ENV).toBe("production");
1061+expect(process.env.OPENCLAW_TEST_FAST).toBeUndefined();
1062+} finally {
1063+restoreProductionEnvForLiveRun(runtimeEnv);
1064+restoreOptionalEnv("VITEST", previous.vitest);
1065+restoreOptionalEnv("NODE_ENV", previous.nodeEnv);
1066+restoreOptionalEnv("OPENCLAW_TEST_FAST", previous.testFast);
1067+}
1068+});
1069+});
1070+10051071function isGoogleModelNotFoundText(text: string): boolean {
10061072const trimmed = text.trim();
10071073if (!trimmed) {
此内容由惯性聚合(RSS阅读器)自动聚合整理,仅供阅读参考。 原文来自 — 版权归原作者所有。