





























@@ -63,6 +63,7 @@ const mocks = vi.hoisted(() => {
6363loadModelCatalog: vi.fn(),
6464loadProviderCatalogModelsForList: vi.fn(),
6565loadStaticManifestCatalogRowsForList: vi.fn(),
66+loadProviderIndexCatalogRowsForList: vi.fn(),
6667hasProviderStaticCatalogForFilter: vi.fn(),
6768resolveConfiguredEntries: vi.fn(),
6869printModelTable: vi.fn(),
@@ -91,6 +92,7 @@ function resetMocks() {
9192mocks.loadModelCatalog.mockResolvedValue([]);
9293mocks.loadProviderCatalogModelsForList.mockResolvedValue([]);
9394mocks.loadStaticManifestCatalogRowsForList.mockReturnValue([]);
95+mocks.loadProviderIndexCatalogRowsForList.mockReturnValue([]);
9496mocks.hasProviderStaticCatalogForFilter.mockResolvedValue(false);
9597mocks.resolveConfiguredEntries.mockReturnValue({
9698entries: [
@@ -154,6 +156,10 @@ function installModelsListCommandForwardCompatMocks() {
154156loadStaticManifestCatalogRowsForList: mocks.loadStaticManifestCatalogRowsForList,
155157}));
156158159+vi.doMock("./list.provider-index-catalog.js", () => ({
160+loadProviderIndexCatalogRowsForList: mocks.loadProviderIndexCatalogRowsForList,
161+}));
162+157163vi.doMock("./list.registry-load.js", () => ({
158164loadListModelRegistry: async (
159165cfg: unknown,
@@ -309,7 +315,6 @@ describe("modelsListCommand forward-compat", () => {
309315},
310316],
311317});
312-mocks.resolveModelWithRegistry.mockReturnValueOnce({ ...OPENAI_CODEX_MINI_MODEL });
313318const runtime = createRuntime();
314319315320await modelsListCommand({ json: true }, runtime as never);
@@ -338,7 +343,6 @@ describe("modelsListCommand forward-compat", () => {
338343},
339344],
340345});
341-mocks.resolveModelWithRegistry.mockReturnValueOnce({ ...OPENAI_CODEX_PRO_MODEL });
342346const runtime = createRuntime();
343347344348await modelsListCommand({ json: true }, runtime as never);
@@ -422,11 +426,6 @@ describe("modelsListCommand forward-compat", () => {
422426it("does not require the all-model registry result for configured-mode listing", async () => {
423427const previousExitCode = process.exitCode;
424428process.exitCode = undefined;
425-mocks.loadModelRegistry.mockResolvedValueOnce({
426-models: [],
427-availableKeys: new Set<string>(),
428-registry: undefined,
429-});
430429const runtime = createRuntime();
431430let observedExitCode: number | undefined;
432431@@ -439,6 +438,7 @@ describe("modelsListCommand forward-compat", () => {
439438440439expect(runtime.error).not.toHaveBeenCalled();
441440expect(observedExitCode).toBeUndefined();
441+expect(mocks.loadModelRegistry).not.toHaveBeenCalled();
442442expect(mocks.printModelTable).toHaveBeenCalled();
443443});
444444});
@@ -515,12 +515,27 @@ describe("modelsListCommand forward-compat", () => {
515515516516it("uses provider index preview rows when an installable provider is not installed", async () => {
517517mocks.resolveConfiguredEntries.mockReturnValueOnce({ entries: [] });
518-mocks.hasProviderStaticCatalogForFilter.mockResolvedValueOnce(false);
518+mocks.loadProviderIndexCatalogRowsForList.mockReturnValueOnce([
519+{
520+provider: "moonshot",
521+id: "kimi-k2.6",
522+ref: "moonshot/kimi-k2.6",
523+mergeKey: "moonshot::kimi-k2.6",
524+name: "Kimi K2.6",
525+source: "provider-index",
526+input: ["text", "image"],
527+reasoning: false,
528+status: "available",
529+baseUrl: "https://api.moonshot.ai/v1",
530+contextWindow: 262_144,
531+},
532+]);
519533const runtime = createRuntime();
520534521535await modelsListCommand({ all: true, provider: "moonshot", json: true }, runtime as never);
522536523537expect(mocks.loadModelRegistry).not.toHaveBeenCalled();
538+expect(mocks.hasProviderStaticCatalogForFilter).not.toHaveBeenCalled();
524539expect(mocks.loadProviderCatalogModelsForList).not.toHaveBeenCalled();
525540expect(lastPrintedRows<{ key: string; available: boolean }>()).toEqual([
526541expect.objectContaining({
@@ -587,6 +602,7 @@ describe("modelsListCommand forward-compat", () => {
587602588603it("includes provider-owned supplemental catalog rows with provider filters", async () => {
589604mocks.resolveConfiguredEntries.mockReturnValueOnce({ entries: [] });
605+mocks.hasProviderStaticCatalogForFilter.mockResolvedValueOnce(true);
590606mocks.loadModelRegistry.mockResolvedValueOnce({
591607models: [],
592608availableKeys: new Set(["opencode-go/deepseek-v4-pro"]),
@@ -681,6 +697,7 @@ describe("modelsListCommand forward-compat", () => {
681697682698it("uses provider runtime metadata for discovered codex gpt-5.5 rows", async () => {
683699mocks.resolveConfiguredEntries.mockReturnValueOnce({ entries: [] });
700+mocks.hasProviderStaticCatalogForFilter.mockResolvedValueOnce(true);
684701mocks.loadModelRegistry.mockResolvedValueOnce({
685702models: [
686703{
@@ -798,6 +815,7 @@ describe("modelsListCommand forward-compat", () => {
798815describe("provider filter canonicalization", () => {
799816it("matches alias-valued discovered providers against canonical provider filters", async () => {
800817mocks.resolveConfiguredEntries.mockReturnValueOnce({ entries: [] });
818+mocks.hasProviderStaticCatalogForFilter.mockResolvedValueOnce(true);
801819mocks.loadModelRegistry.mockResolvedValueOnce({
802820models: [
803821{
此内容由惯性聚合(RSS阅读器)自动聚合整理,仅供阅读参考。 原文来自 — 版权归原作者所有。