11'use client'
22
3- import { useMemo } from 'react'
3+ import { useCallback , useMemo } from 'react'
4+ import type { RefetchOptions } from '@tanstack/react-query'
45import { useDeploymentShape } from '@/lib/core/config/deployment-shape'
56import { resolveAgentDefaultModel } from '@/lib/permission-groups/model-access'
67import {
@@ -20,6 +21,7 @@ import { PROVIDER_DEFINITIONS } from '@/providers/models'
2021export interface OperationAccess {
2122 agentDefaultModel : string | null
2223 isAgentDefaultReady : boolean
24+ refetchModelSettings : ( options ?: RefetchOptions ) => Promise < void >
2325 /**
2426 * Whether the permission config is still loading. Every list this module
2527 * filters reads as unrestricted until it resolves, so a surface that
@@ -78,23 +80,42 @@ export interface OperationAccess {
7880 */
7981export function useOperationAccess ( ) : OperationAccess {
8082 const { hosted } = useDeploymentShape ( )
81- const { config, isToolAllowed, isModelUsable, isLoading, isPermissionFetching } =
82- usePermissionConfig ( )
83+ const {
84+ config,
85+ isToolAllowed,
86+ isModelUsable,
87+ isLoading,
88+ isPermissionFetching,
89+ isPermissionReady,
90+ refetchPermissionConfig,
91+ } = usePermissionConfig ( )
8392 const blacklistedProviders = useBlacklistedProviders ( )
93+ const refetchModelSettings = useCallback (
94+ async ( options ?: RefetchOptions ) => {
95+ await Promise . all ( [ refetchPermissionConfig ( options ) , blacklistedProviders . refetch ( options ) ] )
96+ } ,
97+ [ refetchPermissionConfig , blacklistedProviders . refetch ]
98+ )
8499
85100 return useMemo ( ( ) => {
86101 const isReady = ! isLoading
87- const isAgentDefaultReady = isReady && ! isPermissionFetching && blacklistedProviders . isSuccess
102+ const isAgentDefaultReady =
103+ isReady &&
104+ isPermissionReady &&
105+ ! isPermissionFetching &&
106+ ( ! config . defaultAgentModel || blacklistedProviders . isSuccess )
88107 return {
89108 isAgentDefaultReady,
90- agentDefaultModel : isAgentDefaultReady
91- ? resolveAgentDefaultModel ( config , {
92- allowAuto : hosted ,
93- availableProviderIds : Object . keys ( PROVIDER_DEFINITIONS ) . filter (
94- ( provider ) => ! blacklistedProviders . data . blacklistedProviders . includes ( provider )
95- ) ,
96- } )
97- : null ,
109+ refetchModelSettings,
110+ agentDefaultModel :
111+ isAgentDefaultReady && blacklistedProviders . isSuccess
112+ ? resolveAgentDefaultModel ( config , {
113+ allowAuto : hosted ,
114+ availableProviderIds : Object . keys ( PROVIDER_DEFINITIONS ) . filter (
115+ ( provider ) => ! blacklistedProviders . data . blacklistedProviders . includes ( provider )
116+ ) ,
117+ } )
118+ : null ,
98119 isPermissionLoading : isLoading ,
99120 getDeniedOperations : ( block , operationIds ) =>
100121 isReady
@@ -120,6 +141,8 @@ export function useOperationAccess(): OperationAccess {
120141 isModelUsable ,
121142 isLoading ,
122143 isPermissionFetching ,
144+ isPermissionReady ,
145+ refetchModelSettings ,
123146 hosted ,
124147 blacklistedProviders . isSuccess ,
125148 blacklistedProviders . data ,
0 commit comments