mirror of
https://github.com/langgenius/dify.git
synced 2026-05-13 08:57:28 +08:00
Extend MCP tool availability context to include sandbox mode check alongside version support. MCP tools are now blocked when sandbox is disabled, with appropriate tooltip messages for each blocking condition.
196 lines
5.5 KiB
TypeScript
196 lines
5.5 KiB
TypeScript
import type { WorkflowProps } from '@/app/components/workflow'
|
|
import {
|
|
useCallback,
|
|
useMemo,
|
|
} from 'react'
|
|
import { useFeatures, useFeaturesStore } from '@/app/components/base/features/hooks'
|
|
import { WorkflowWithInnerContext } from '@/app/components/workflow'
|
|
import { MCPToolAvailabilityProvider } from '@/app/components/workflow/nodes/_base/components/mcp-tool-availability'
|
|
import { useWorkflowStore } from '@/app/components/workflow/store'
|
|
import {
|
|
useAvailableNodesMetaData,
|
|
useConfigsMap,
|
|
useDSL,
|
|
useGetRunAndTraceUrl,
|
|
useInspectVarsCrud,
|
|
useNodesSyncDraft,
|
|
useSetWorkflowVarsWithValue,
|
|
useWorkflowRefreshDraft,
|
|
useWorkflowRun,
|
|
useWorkflowStartRun,
|
|
} from '../hooks'
|
|
import WorkflowChildren from './workflow-children'
|
|
|
|
type WorkflowMainProps = Pick<WorkflowProps, 'nodes' | 'edges' | 'viewport'>
|
|
const WorkflowMain = ({
|
|
nodes,
|
|
edges,
|
|
viewport,
|
|
}: WorkflowMainProps) => {
|
|
const sandboxEnabled = useFeatures(state => state.features.sandbox?.enabled) ?? false
|
|
const featuresStore = useFeaturesStore()
|
|
const workflowStore = useWorkflowStore()
|
|
|
|
const handleWorkflowDataUpdate = useCallback((payload: any) => {
|
|
const {
|
|
features,
|
|
conversation_variables,
|
|
environment_variables,
|
|
} = payload
|
|
if (features && featuresStore) {
|
|
const { setFeatures } = featuresStore.getState()
|
|
|
|
setFeatures(features)
|
|
}
|
|
if (conversation_variables) {
|
|
const { setConversationVariables } = workflowStore.getState()
|
|
setConversationVariables(conversation_variables)
|
|
}
|
|
if (environment_variables) {
|
|
const { setEnvironmentVariables } = workflowStore.getState()
|
|
setEnvironmentVariables(environment_variables)
|
|
}
|
|
}, [featuresStore, workflowStore])
|
|
|
|
const {
|
|
doSyncWorkflowDraft,
|
|
syncWorkflowDraftWhenPageClose,
|
|
} = useNodesSyncDraft()
|
|
const { handleRefreshWorkflowDraft } = useWorkflowRefreshDraft()
|
|
const {
|
|
handleBackupDraft,
|
|
handleLoadBackupDraft,
|
|
handleRestoreFromPublishedWorkflow,
|
|
handleRun,
|
|
handleStopRun,
|
|
} = useWorkflowRun()
|
|
const {
|
|
handleStartWorkflowRun,
|
|
handleWorkflowStartRunInChatflow,
|
|
handleWorkflowStartRunInWorkflow,
|
|
handleWorkflowTriggerScheduleRunInWorkflow,
|
|
handleWorkflowTriggerWebhookRunInWorkflow,
|
|
handleWorkflowTriggerPluginRunInWorkflow,
|
|
handleWorkflowRunAllTriggersInWorkflow,
|
|
} = useWorkflowStartRun()
|
|
const availableNodesMetaData = useAvailableNodesMetaData()
|
|
const { getWorkflowRunAndTraceUrl } = useGetRunAndTraceUrl()
|
|
const {
|
|
exportCheck,
|
|
handleExportDSL,
|
|
} = useDSL()
|
|
|
|
const configsMap = useConfigsMap()
|
|
const { fetchInspectVars } = useSetWorkflowVarsWithValue({
|
|
...configsMap,
|
|
})
|
|
const {
|
|
hasNodeInspectVars,
|
|
hasSetInspectVar,
|
|
fetchInspectVarValue,
|
|
editInspectVarValue,
|
|
renameInspectVarName,
|
|
appendNodeInspectVars,
|
|
deleteInspectVar,
|
|
deleteNodeInspectorVars,
|
|
deleteAllInspectorVars,
|
|
isInspectVarEdited,
|
|
resetToLastRunVar,
|
|
invalidateSysVarValues,
|
|
resetConversationVar,
|
|
invalidateConversationVarValues,
|
|
} = useInspectVarsCrud()
|
|
|
|
const hooksStore = useMemo(() => {
|
|
return {
|
|
syncWorkflowDraftWhenPageClose,
|
|
doSyncWorkflowDraft,
|
|
handleRefreshWorkflowDraft,
|
|
handleBackupDraft,
|
|
handleLoadBackupDraft,
|
|
handleRestoreFromPublishedWorkflow,
|
|
handleRun,
|
|
handleStopRun,
|
|
handleStartWorkflowRun,
|
|
handleWorkflowStartRunInChatflow,
|
|
handleWorkflowStartRunInWorkflow,
|
|
handleWorkflowTriggerScheduleRunInWorkflow,
|
|
handleWorkflowTriggerWebhookRunInWorkflow,
|
|
handleWorkflowTriggerPluginRunInWorkflow,
|
|
handleWorkflowRunAllTriggersInWorkflow,
|
|
availableNodesMetaData,
|
|
getWorkflowRunAndTraceUrl,
|
|
exportCheck,
|
|
handleExportDSL,
|
|
fetchInspectVars,
|
|
hasNodeInspectVars,
|
|
hasSetInspectVar,
|
|
fetchInspectVarValue,
|
|
editInspectVarValue,
|
|
renameInspectVarName,
|
|
appendNodeInspectVars,
|
|
deleteInspectVar,
|
|
deleteNodeInspectorVars,
|
|
deleteAllInspectorVars,
|
|
isInspectVarEdited,
|
|
resetToLastRunVar,
|
|
invalidateSysVarValues,
|
|
resetConversationVar,
|
|
invalidateConversationVarValues,
|
|
configsMap,
|
|
}
|
|
}, [
|
|
syncWorkflowDraftWhenPageClose,
|
|
doSyncWorkflowDraft,
|
|
handleRefreshWorkflowDraft,
|
|
handleBackupDraft,
|
|
handleLoadBackupDraft,
|
|
handleRestoreFromPublishedWorkflow,
|
|
handleRun,
|
|
handleStopRun,
|
|
handleStartWorkflowRun,
|
|
handleWorkflowStartRunInChatflow,
|
|
handleWorkflowStartRunInWorkflow,
|
|
handleWorkflowTriggerScheduleRunInWorkflow,
|
|
handleWorkflowTriggerWebhookRunInWorkflow,
|
|
handleWorkflowTriggerPluginRunInWorkflow,
|
|
handleWorkflowRunAllTriggersInWorkflow,
|
|
availableNodesMetaData,
|
|
getWorkflowRunAndTraceUrl,
|
|
exportCheck,
|
|
handleExportDSL,
|
|
fetchInspectVars,
|
|
hasNodeInspectVars,
|
|
hasSetInspectVar,
|
|
fetchInspectVarValue,
|
|
editInspectVarValue,
|
|
renameInspectVarName,
|
|
appendNodeInspectVars,
|
|
deleteInspectVar,
|
|
deleteNodeInspectorVars,
|
|
deleteAllInspectorVars,
|
|
isInspectVarEdited,
|
|
resetToLastRunVar,
|
|
invalidateSysVarValues,
|
|
resetConversationVar,
|
|
invalidateConversationVarValues,
|
|
configsMap,
|
|
])
|
|
|
|
return (
|
|
<WorkflowWithInnerContext
|
|
nodes={nodes}
|
|
edges={edges}
|
|
viewport={viewport}
|
|
onWorkflowDataUpdate={handleWorkflowDataUpdate}
|
|
hooksStore={hooksStore as any}
|
|
>
|
|
<MCPToolAvailabilityProvider sandboxEnabled={sandboxEnabled}>
|
|
<WorkflowChildren />
|
|
</MCPToolAvailabilityProvider>
|
|
</WorkflowWithInnerContext>
|
|
)
|
|
}
|
|
|
|
export default WorkflowMain
|