diff --git a/src/features/runtime-provider-management/renderer/hooks/useRuntimeProviderManagement.ts b/src/features/runtime-provider-management/renderer/hooks/useRuntimeProviderManagement.ts index 67ede6c9..ad174900 100644 --- a/src/features/runtime-provider-management/renderer/hooks/useRuntimeProviderManagement.ts +++ b/src/features/runtime-provider-management/renderer/hooks/useRuntimeProviderManagement.ts @@ -505,6 +505,11 @@ export function useRuntimeProviderManagement( setDirectoryNextCursor(null); }, []); + const updateDirectoryQuery = useCallback((value: string): void => { + setDirectoryQuery(value); + setDirectoryNextCursor(null); + }, []); + const loadMoreDirectory = useCallback(async (): Promise => { if (!directoryNextCursor || directoryLoading || directoryRefreshing) { return; @@ -882,7 +887,7 @@ export function useRuntimeProviderManagement( setProviderQuery, openDirectory, closeDirectory, - setDirectoryQuery, + setDirectoryQuery: updateDirectoryQuery, setDirectoryFilter, loadMoreDirectory, refreshDirectory, @@ -919,6 +924,7 @@ export function useRuntimeProviderManagement( startConnect, submitConnect, testModel, + updateDirectoryQuery, useModelForNewTeams, ] ); diff --git a/src/features/runtime-provider-management/renderer/ui/RuntimeProviderManagementPanelView.tsx b/src/features/runtime-provider-management/renderer/ui/RuntimeProviderManagementPanelView.tsx index 11361880..99ac2344 100644 --- a/src/features/runtime-provider-management/renderer/ui/RuntimeProviderManagementPanelView.tsx +++ b/src/features/runtime-provider-management/renderer/ui/RuntimeProviderManagementPanelView.tsx @@ -113,6 +113,23 @@ function getDirectoryModelsLabel(provider: RuntimeProviderDirectoryEntryDto): st return `${provider.modelCount} model${provider.modelCount === 1 ? '' : 's'}`; } +function directoryEntryToProviderConnection( + provider: RuntimeProviderDirectoryEntryDto +): RuntimeProviderConnectionDto { + return { + providerId: provider.providerId, + displayName: provider.displayName, + state: provider.state, + ownership: provider.ownership, + recommended: provider.recommended, + modelCount: provider.modelCount ?? 1, + defaultModelId: provider.defaultModelId, + authMethods: provider.authMethods, + actions: provider.actions, + detail: provider.detail, + }; +} + function stateClassName(provider: RuntimeProviderConnectionDto): string { switch (provider.state) { case 'connected': @@ -727,10 +744,26 @@ function ProviderDirectoryPanel({ Providers -
- {state.directoryTotalCount === null - ? 'All OpenCode providers' - : `${state.directoryTotalCount} OpenCode providers`} +
+
+ {state.directoryTotalCount === null + ? 'All OpenCode providers' + : `${state.directoryTotalCount} OpenCode providers`} +
+
@@ -774,16 +807,30 @@ function ProviderDirectoryPanel({ {state.directoryLoading && state.directoryEntries.length === 0 ? ( ) : null} - {state.directoryEntries.map((provider) => ( - - ))} + {state.directoryEntries.map((provider) => { + const active = state.directorySelectedProviderId === provider.providerId; + return ( +
+ + {active && provider.state === 'connected' && provider.modelCount !== 0 ? ( +
+ +
+ ) : null} +
+ ); + })} {!state.directoryLoading && state.directoryEntries.length === 0 && !state.directoryError ? (