From 41c16620e89143797c27aa35952acc44171ed4c2 Mon Sep 17 00:00:00 2001 From: NeilJo-GY <43027886+NeilJo-GY@users.noreply.github.com> Date: Sat, 5 Sep 2026 14:05:16 +0800 Subject: [PATCH] feat(composer): load the official Host shelf in one catalog pass Ask the catalog for official_shelf and paint options as pages arrive. CN hops stop waiting on sixteen unfiltered OpenRouter pages. --- packages/agent-chat/src/gateway.ts | 2 ++ packages/agent-chat/src/ranch-shell/RanchChatShell.tsx | 3 ++- 2 files changed, 4 insertions(+), 1 deletion(-) diff --git a/packages/agent-chat/src/gateway.ts b/packages/agent-chat/src/gateway.ts index 03a2107..950ea64 100644 --- a/packages/agent-chat/src/gateway.ts +++ b/packages/agent-chat/src/gateway.ts @@ -543,6 +543,7 @@ export type GatewayClient = { q?: string; source?: string; active_only?: boolean; + official_shelf?: boolean; limit?: number; offset?: number; }) => Promise; @@ -842,6 +843,7 @@ export function createGatewayClient( if (opts?.q?.trim()) params.set("q", opts.q.trim()); if (opts?.source?.trim()) params.set("source", opts.source.trim()); if (opts?.active_only === false) params.set("active_only", "false"); + if (opts?.official_shelf) params.set("official_shelf", "true"); params.set("limit", String(opts?.limit ?? 100)); params.set("offset", String(opts?.offset ?? 0)); return request(`/api/model-catalog?${params.toString()}`); diff --git a/packages/agent-chat/src/ranch-shell/RanchChatShell.tsx b/packages/agent-chat/src/ranch-shell/RanchChatShell.tsx index 195b56d..41ddd58 100644 --- a/packages/agent-chat/src/ranch-shell/RanchChatShell.tsx +++ b/packages/agent-chat/src/ranch-shell/RanchChatShell.tsx @@ -3251,6 +3251,7 @@ export function RanchChatShell(props: RanchChatShellProps) { const data = await client.listModelCatalog({ source: "openrouter", active_only: true, + official_shelf: official, limit: page, offset, }); @@ -3267,10 +3268,10 @@ export function RanchChatShell(props: RanchChatShellProps) { if (acc.some((item) => sameModelId(item.id, id))) continue; acc.push({ id, in: quote.input, out: quote.output }); } + if (!cancelled) setComposerCatalog([...acc]); if (!data.items.length) break; offset += data.items.length; } - if (!cancelled) setComposerCatalog(acc); } catch { if (!cancelled) setComposerCatalog([]); } finally {