惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

WordPress大学
WordPress大学
Microsoft Azure Blog
Microsoft Azure Blog
aimingoo的专栏
aimingoo的专栏
Vercel News
Vercel News
U
Unit 42
L
LangChain Blog
J
Java Code Geeks
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
The Cloudflare Blog
F
Fortinet All Blogs
小众软件
小众软件
I
InfoQ
P
Proofpoint News Feed
D
DataBreaches.Net
Martin Fowler
Martin Fowler
H
Help Net Security
T
Tailwind CSS Blog
N
Netflix TechBlog - Medium
有赞技术团队
有赞技术团队
Y
Y Combinator Blog
Recent Announcements
Recent Announcements
B
Blog RSS Feed
酷 壳 – CoolShell
酷 壳 – CoolShell
B
Blog

Recent Commits to openclaw:main

test: merge chat side-result checks · openclaw/openclaw@ddd2c2a test: merge cron history checks · openclaw/openclaw@f7eb746 test: merge responsive navigation shell checks · openclaw/openclaw@c2e4b47 docs(changelog): add codex oauth fixes · openclaw/openclaw@628e6cd test: merge navigation routing cases · openclaw/openclaw@5d8cecb Tests: mock channel registry bundled fallback · openclaw/openclaw@2b08233 Secrets: avoid broad web search discovery for single plugin config · openclaw/openclaw@a464f59 test: merge config view browser checks · openclaw/openclaw@20cf511 fix(status): align oauth health with runtime · openclaw/openclaw@eed7116 feat: add macOS screen snapshots for monitor preview (#67954) thanks … · openclaw/openclaw@f377db1 fix: report shared auth scopes in hello-ok (#67810) thanks @BunsDev · openclaw/openclaw@0b6c39b Auto-reply: avoid eager bundled route fallback · openclaw/openclaw@3ea1bf4 Tests: narrow session binding contract setup · openclaw/openclaw@54e4e16 fix(macOS): enable undo/redo in webchat composer text input (#34962) · openclaw/openclaw@00951dc Tests: speed up channel setup promotion · openclaw/openclaw@82b529a Docs: refresh agent instructions · openclaw/openclaw@5775fe2 fix(auth): serialize OAuth refresh across agents to fix #26322 (#67876) · openclaw/openclaw@8e79080 test: allow ollama public surface boundary test · openclaw/openclaw@7d4f1a6 Docs: add test performance guardrails · openclaw/openclaw@89706d3 Tests: restore context-engine usage proof · openclaw/openclaw@e4c4f95 Tests: slim context engine runtime coverage · openclaw/openclaw@74c198f ci: retry failed custom checkouts · openclaw/openclaw@0ee5baf test: trim duplicate provider auth onboarding cases · openclaw/openclaw@1ffc02e matrix: fix sessions_spawn --thread subagent session spawning (#67643) · openclaw/openclaw@1ce2596 test: reduce auth choice fixture churn · openclaw/openclaw@857b9cd test: mock health status config boundaries · openclaw/openclaw@9d5ab4a test: mock onboard config io boundary · openclaw/openclaw@299694d test: mock legacy state plugin boundaries · openclaw/openclaw@2713089 test: mock channel install boundaries · openclaw/openclaw@b945248 test: mock doctor preview channel boundaries · openclaw/openclaw@b1a3ad4
test(models): stabilize provider index list mocks · openc...
vincentkoc · 2026-04-26 · via Recent Commits to openclaw:main

@@ -63,6 +63,7 @@ const mocks = vi.hoisted(() => {

6363

loadModelCatalog: vi.fn(),

6464

loadProviderCatalogModelsForList: vi.fn(),

6565

loadStaticManifestCatalogRowsForList: vi.fn(),

66+

loadProviderIndexCatalogRowsForList: vi.fn(),

6667

hasProviderStaticCatalogForFilter: vi.fn(),

6768

resolveConfiguredEntries: vi.fn(),

6869

printModelTable: vi.fn(),

@@ -91,6 +92,7 @@ function resetMocks() {

9192

mocks.loadModelCatalog.mockResolvedValue([]);

9293

mocks.loadProviderCatalogModelsForList.mockResolvedValue([]);

9394

mocks.loadStaticManifestCatalogRowsForList.mockReturnValue([]);

95+

mocks.loadProviderIndexCatalogRowsForList.mockReturnValue([]);

9496

mocks.hasProviderStaticCatalogForFilter.mockResolvedValue(false);

9597

mocks.resolveConfiguredEntries.mockReturnValue({

9698

entries: [

@@ -154,6 +156,10 @@ function installModelsListCommandForwardCompatMocks() {

154156

loadStaticManifestCatalogRowsForList: mocks.loadStaticManifestCatalogRowsForList,

155157

}));

156158159+

vi.doMock("./list.provider-index-catalog.js", () => ({

160+

loadProviderIndexCatalogRowsForList: mocks.loadProviderIndexCatalogRowsForList,

161+

}));

162+157163

vi.doMock("./list.registry-load.js", () => ({

158164

loadListModelRegistry: async (

159165

cfg: unknown,

@@ -309,7 +315,6 @@ describe("modelsListCommand forward-compat", () => {

309315

},

310316

],

311317

});

312-

mocks.resolveModelWithRegistry.mockReturnValueOnce({ ...OPENAI_CODEX_MINI_MODEL });

313318

const runtime = createRuntime();

314319315320

await 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 });

342346

const runtime = createRuntime();

343347344348

await modelsListCommand({ json: true }, runtime as never);

@@ -422,11 +426,6 @@ describe("modelsListCommand forward-compat", () => {

422426

it("does not require the all-model registry result for configured-mode listing", async () => {

423427

const previousExitCode = process.exitCode;

424428

process.exitCode = undefined;

425-

mocks.loadModelRegistry.mockResolvedValueOnce({

426-

models: [],

427-

availableKeys: new Set<string>(),

428-

registry: undefined,

429-

});

430429

const runtime = createRuntime();

431430

let observedExitCode: number | undefined;

432431

@@ -439,6 +438,7 @@ describe("modelsListCommand forward-compat", () => {

439438440439

expect(runtime.error).not.toHaveBeenCalled();

441440

expect(observedExitCode).toBeUndefined();

441+

expect(mocks.loadModelRegistry).not.toHaveBeenCalled();

442442

expect(mocks.printModelTable).toHaveBeenCalled();

443443

});

444444

});

@@ -515,12 +515,27 @@ describe("modelsListCommand forward-compat", () => {

515515516516

it("uses provider index preview rows when an installable provider is not installed", async () => {

517517

mocks.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+

]);

519533

const runtime = createRuntime();

520534521535

await modelsListCommand({ all: true, provider: "moonshot", json: true }, runtime as never);

522536523537

expect(mocks.loadModelRegistry).not.toHaveBeenCalled();

538+

expect(mocks.hasProviderStaticCatalogForFilter).not.toHaveBeenCalled();

524539

expect(mocks.loadProviderCatalogModelsForList).not.toHaveBeenCalled();

525540

expect(lastPrintedRows<{ key: string; available: boolean }>()).toEqual([

526541

expect.objectContaining({

@@ -587,6 +602,7 @@ describe("modelsListCommand forward-compat", () => {

587602588603

it("includes provider-owned supplemental catalog rows with provider filters", async () => {

589604

mocks.resolveConfiguredEntries.mockReturnValueOnce({ entries: [] });

605+

mocks.hasProviderStaticCatalogForFilter.mockResolvedValueOnce(true);

590606

mocks.loadModelRegistry.mockResolvedValueOnce({

591607

models: [],

592608

availableKeys: new Set(["opencode-go/deepseek-v4-pro"]),

@@ -681,6 +697,7 @@ describe("modelsListCommand forward-compat", () => {

681697682698

it("uses provider runtime metadata for discovered codex gpt-5.5 rows", async () => {

683699

mocks.resolveConfiguredEntries.mockReturnValueOnce({ entries: [] });

700+

mocks.hasProviderStaticCatalogForFilter.mockResolvedValueOnce(true);

684701

mocks.loadModelRegistry.mockResolvedValueOnce({

685702

models: [

686703

{

@@ -798,6 +815,7 @@ describe("modelsListCommand forward-compat", () => {

798815

describe("provider filter canonicalization", () => {

799816

it("matches alias-valued discovered providers against canonical provider filters", async () => {

800817

mocks.resolveConfiguredEntries.mockReturnValueOnce({ entries: [] });

818+

mocks.hasProviderStaticCatalogForFilter.mockResolvedValueOnce(true);

801819

mocks.loadModelRegistry.mockResolvedValueOnce({

802820

models: [

803821

{