| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209 | 
							- import { useStrategyProviderDetail } from '@/service/use-strategy'
 
- import useNodeCrud from '../_base/hooks/use-node-crud'
 
- import useVarList from '../_base/hooks/use-var-list'
 
- import useOneStepRun from '../_base/hooks/use-one-step-run'
 
- import type { AgentNodeType } from './types'
 
- import {
 
-   useNodesReadOnly,
 
- } from '@/app/components/workflow/hooks'
 
- import { useCallback, useMemo } from 'react'
 
- import { type ToolVarInputs, VarType } from '../tool/types'
 
- import { useCheckInstalled, useFetchPluginsInMarketPlaceByIds } from '@/service/use-plugins'
 
- import type { Var } from '../../types'
 
- import { VarType as VarKindType } from '../../types'
 
- import useAvailableVarList from '../_base/hooks/use-available-var-list'
 
- export type StrategyStatus = {
 
-   plugin: {
 
-     source: 'external' | 'marketplace'
 
-     installed: boolean
 
-   }
 
-   isExistInPlugin: boolean
 
- }
 
- export const useStrategyInfo = (
 
-   strategyProviderName?: string,
 
-   strategyName?: string,
 
- ) => {
 
-   const strategyProvider = useStrategyProviderDetail(
 
-     strategyProviderName || '',
 
-     { retry: false },
 
-   )
 
-   const strategy = strategyProvider.data?.declaration.strategies.find(
 
-     str => str.identity.name === strategyName,
 
-   )
 
-   const marketplace = useFetchPluginsInMarketPlaceByIds([strategyProviderName!], {
 
-     retry: false,
 
-   })
 
-   const strategyStatus: StrategyStatus | undefined = useMemo(() => {
 
-     if (strategyProvider.isLoading || marketplace.isLoading)
 
-       return undefined
 
-     const strategyExist = !!strategy
 
-     const isPluginInstalled = !strategyProvider.isError
 
-     const isInMarketplace = !!marketplace.data?.data.plugins.at(0)
 
-     return {
 
-       plugin: {
 
-         source: isInMarketplace ? 'marketplace' : 'external',
 
-         installed: isPluginInstalled,
 
-       },
 
-       isExistInPlugin: strategyExist,
 
-     }
 
-   }, [strategy, marketplace, strategyProvider.isError, strategyProvider.isLoading])
 
-   const refetch = useCallback(() => {
 
-     strategyProvider.refetch()
 
-     marketplace.refetch()
 
-   }, [marketplace, strategyProvider])
 
-   return {
 
-     strategyProvider,
 
-     strategy,
 
-     strategyStatus,
 
-     refetch,
 
-   }
 
- }
 
- const useConfig = (id: string, payload: AgentNodeType) => {
 
-   const { nodesReadOnly: readOnly } = useNodesReadOnly()
 
-   const { inputs, setInputs } = useNodeCrud<AgentNodeType>(id, payload)
 
-   // variables
 
-   const { handleVarListChange, handleAddVariable } = useVarList<AgentNodeType>({
 
-     inputs,
 
-     setInputs,
 
-   })
 
-   const {
 
-     strategyStatus: currentStrategyStatus,
 
-     strategy: currentStrategy,
 
-     strategyProvider,
 
-   } = useStrategyInfo(
 
-     inputs.agent_strategy_provider_name,
 
-     inputs.agent_strategy_name,
 
-   )
 
-   const pluginId = inputs.agent_strategy_provider_name?.split('/').splice(0, 2).join('/')
 
-   const pluginDetail = useCheckInstalled({
 
-     pluginIds: [pluginId!],
 
-     enabled: Boolean(pluginId),
 
-   })
 
-   const formData = useMemo(() => {
 
-     return Object.fromEntries(
 
-       Object.entries(inputs.agent_parameters || {}).map(([key, value]) => {
 
-         return [key, value.value]
 
-       }),
 
-     )
 
-   }, [inputs.agent_parameters])
 
-   const onFormChange = (value: Record<string, any>) => {
 
-     const res: ToolVarInputs = {}
 
-     Object.entries(value).forEach(([key, val]) => {
 
-       res[key] = {
 
-         type: VarType.constant,
 
-         value: val,
 
-       }
 
-     })
 
-     setInputs({
 
-       ...inputs,
 
-       agent_parameters: res,
 
-     })
 
-   }
 
-   // vars
 
-   const filterMemoryPromptVar = useCallback((varPayload: Var) => {
 
-     return [
 
-       VarKindType.arrayObject,
 
-       VarKindType.array,
 
-       VarKindType.number,
 
-       VarKindType.string,
 
-       VarKindType.secret,
 
-       VarKindType.arrayString,
 
-       VarKindType.arrayNumber,
 
-       VarKindType.file,
 
-       VarKindType.arrayFile,
 
-     ].includes(varPayload.type)
 
-   }, [])
 
-   const {
 
-     availableVars,
 
-     availableNodesWithParent,
 
-   } = useAvailableVarList(id, {
 
-     onlyLeafNodeVar: false,
 
-     filterVar: filterMemoryPromptVar,
 
-   })
 
-   // single run
 
-   const {
 
-     isShowSingleRun,
 
-     showSingleRun,
 
-     hideSingleRun,
 
-     toVarInputs,
 
-     runningStatus,
 
-     handleRun,
 
-     handleStop,
 
-     runInputData,
 
-     setRunInputData,
 
-     runResult,
 
-     getInputVars,
 
-   } = useOneStepRun<AgentNodeType>({
 
-     id,
 
-     data: inputs,
 
-     defaultRunInputData: {},
 
-   })
 
-   const allVarStrArr = (() => {
 
-     const arr = currentStrategy?.parameters.filter(item => item.type === 'string').map((item) => {
 
-       return formData[item.name]
 
-     }) || []
 
-     return arr
 
-   })()
 
-   const varInputs = (() => {
 
-     const vars = getInputVars(allVarStrArr)
 
-     return vars
 
-   })()
 
-   const outputSchema = useMemo(() => {
 
-     const res: any[] = []
 
-     if (!inputs.output_schema)
 
-       return []
 
-     Object.keys(inputs.output_schema.properties).forEach((outputKey) => {
 
-       const output = inputs.output_schema.properties[outputKey]
 
-       res.push({
 
-         name: outputKey,
 
-         type: output.type === 'array'
 
-           ? `Array[${output.items?.type.slice(0, 1).toLocaleUpperCase()}${output.items?.type.slice(1)}]`
 
-           : `${output.type.slice(0, 1).toLocaleUpperCase()}${output.type.slice(1)}`,
 
-         description: output.description,
 
-       })
 
-     })
 
-     return res
 
-   }, [inputs.output_schema])
 
-   return {
 
-     readOnly,
 
-     inputs,
 
-     setInputs,
 
-     handleVarListChange,
 
-     handleAddVariable,
 
-     currentStrategy,
 
-     formData,
 
-     onFormChange,
 
-     currentStrategyStatus,
 
-     strategyProvider: strategyProvider.data,
 
-     pluginDetail: pluginDetail.data?.plugins.at(0),
 
-     availableVars,
 
-     availableNodesWithParent,
 
-     isShowSingleRun,
 
-     showSingleRun,
 
-     hideSingleRun,
 
-     toVarInputs,
 
-     runningStatus,
 
-     handleRun,
 
-     handleStop,
 
-     runInputData,
 
-     setRunInputData,
 
-     runResult,
 
-     varInputs,
 
-     outputSchema,
 
-   }
 
- }
 
- export default useConfig
 
 
  |