

























@@ -62,6 +62,7 @@ const mocks = vi.hoisted(() => {
6262loadModelRegistry: vi.fn(),
6363loadModelCatalog: vi.fn(),
6464loadProviderCatalogModelsForList: vi.fn(),
65+loadStaticManifestCatalogRowsForList: vi.fn(),
6566hasProviderStaticCatalogForFilter: vi.fn(),
6667resolveConfiguredEntries: vi.fn(),
6768printModelTable: vi.fn(),
@@ -89,6 +90,7 @@ function resetMocks() {
8990});
9091mocks.loadModelCatalog.mockResolvedValue([]);
9192mocks.loadProviderCatalogModelsForList.mockResolvedValue([]);
93+mocks.loadStaticManifestCatalogRowsForList.mockReturnValue([]);
9294mocks.hasProviderStaticCatalogForFilter.mockResolvedValue(false);
9395mocks.resolveConfiguredEntries.mockReturnValue({
9496entries: [
@@ -147,6 +149,10 @@ function installModelsListCommandForwardCompatMocks() {
147149hasProviderStaticCatalogForFilter: mocks.hasProviderStaticCatalogForFilter,
148150}));
149151152+vi.doMock("./list.manifest-catalog.js", () => ({
153+loadStaticManifestCatalogRowsForList: mocks.loadStaticManifestCatalogRowsForList,
154+}));
155+150156vi.doMock("./list.registry-load.js", () => ({
151157loadListModelRegistry: async (
152158cfg: unknown,
@@ -469,6 +475,38 @@ describe("modelsListCommand forward-compat", () => {
469475]);
470476});
471477478+it("uses manifest catalog rows before provider runtime catalog rows", async () => {
479+mocks.resolveConfiguredEntries.mockReturnValueOnce({ entries: [] });
480+mocks.loadStaticManifestCatalogRowsForList.mockReturnValueOnce([
481+{
482+provider: "moonshot",
483+id: "kimi-k2.6",
484+ref: "moonshot/kimi-k2.6",
485+mergeKey: "moonshot::kimi-k2.6",
486+name: "Kimi K2.6",
487+source: "manifest",
488+input: ["text", "image"],
489+reasoning: false,
490+status: "available",
491+baseUrl: "https://api.moonshot.ai/v1",
492+contextWindow: 262_144,
493+},
494+]);
495+const runtime = createRuntime();
496+497+await modelsListCommand({ all: true, provider: "moonshot", json: true }, runtime as never);
498+499+expect(mocks.loadModelRegistry).not.toHaveBeenCalled();
500+expect(mocks.hasProviderStaticCatalogForFilter).not.toHaveBeenCalled();
501+expect(mocks.loadProviderCatalogModelsForList).not.toHaveBeenCalled();
502+expect(lastPrintedRows<{ key: string; available: boolean }>()).toEqual([
503+expect.objectContaining({
504+key: "moonshot/kimi-k2.6",
505+available: false,
506+}),
507+]);
508+});
509+472510it("falls back to registry-backed rows when the fast-path catalog is empty", async () => {
473511mocks.resolveConfiguredEntries.mockReturnValueOnce({ entries: [] });
474512mocks.hasProviderStaticCatalogForFilter.mockResolvedValueOnce(true);
此内容由惯性聚合(RSS阅读器)自动聚合整理,仅供阅读参考。 原文来自 — 版权归原作者所有。