Files
tkmind_go/ui/goose2/src/features/chat/lib/agentProviderResolution.ts
T
Matt Toohey f4fe8d5d7f fix(goose2): keep model picker and session config in sync (#9048)
Signed-off-by: Matt Toohey <contact@matttoohey.com>
Co-authored-by: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-05-07 07:30:40 +00:00

48 lines
1.4 KiB
TypeScript

import type { ProviderInventoryEntryDto } from "@aaif/goose-sdk";
import { resolveAgentProviderCatalogIdStrictFromEntries } from "@/features/providers/providerCatalog";
import type { ProviderCatalogEntry } from "@/shared/types/providers";
interface ResolveSelectedAgentIdOptions {
catalogEntries: ProviderCatalogEntry[];
catalogLoaded: boolean;
selectedProvider?: string;
getProviderInventoryEntry: (
providerId: string,
) => ProviderInventoryEntryDto | undefined;
}
export function resolveSelectedAgentId({
catalogEntries,
catalogLoaded,
selectedProvider,
getProviderInventoryEntry,
}: ResolveSelectedAgentIdOptions): string {
if (!selectedProvider) {
return "goose";
}
const resolvedAgentId = resolveAgentProviderCatalogIdStrictFromEntries(
catalogEntries,
selectedProvider,
);
if (resolvedAgentId) {
return resolvedAgentId;
}
if (!catalogLoaded) {
const inventoryEntry = getProviderInventoryEntry(selectedProvider);
if (inventoryEntry?.category === "agent") {
return selectedProvider;
}
// Catalog not loaded and no inventory info — preserve the stored
// selection so the UI doesn't briefly flash "Goose" before validation
// completes. Fall back to "goose" only when there is no selection or
// after the catalog has loaded and proven the provider is not an agent.
if (!inventoryEntry) {
return selectedProvider;
}
}
return "goose";
}