feat: basic app support mcp

pull/22091/head
Joel 11 months ago
parent 4e37a07fe9
commit 681261f8f8

@ -32,7 +32,7 @@ const CardView: FC<ICardViewProps> = ({ appId, isInPanel, className }) => {
const appDetail = useAppStore(state => state.appDetail) const appDetail = useAppStore(state => state.appDetail)
const setAppDetail = useAppStore(state => state.setAppDetail) const setAppDetail = useAppStore(state => state.setAppDetail)
const showMCPCard = isInPanel && (appDetail?.mode === 'advanced-chat' || appDetail?.mode === 'workflow') const showMCPCard = isInPanel
const updateAppDetail = async () => { const updateAppDetail = async () => {
try { try {

@ -27,6 +27,7 @@ import {
} from '@/service/use-tools' } from '@/service/use-tools'
import { BlockEnum } from '@/app/components/workflow/types' import { BlockEnum } from '@/app/components/workflow/types'
import cn from '@/utils/classnames' import cn from '@/utils/classnames'
import { fetchAppDetail } from '@/service/apps'
export type IAppCardProps = { export type IAppCardProps = {
appInfo: AppDetailResponse & Partial<AppSSO> appInfo: AppDetailResponse & Partial<AppSSO>
@ -36,6 +37,7 @@ function MCPServiceCard({
appInfo, appInfo,
}: IAppCardProps) { }: IAppCardProps) {
const { t } = useTranslation() const { t } = useTranslation()
const appId = appInfo.id
const { mutateAsync: updateMCPServer } = useUpdateMCPServer() const { mutateAsync: updateMCPServer } = useUpdateMCPServer()
const { mutateAsync: refreshMCPServerCode, isPending: genLoading } = useRefreshMCPServerCode() const { mutateAsync: refreshMCPServerCode, isPending: genLoading } = useRefreshMCPServerCode()
const invalidateMCPServerDetail = useInvalidateMCPServerDetail() const invalidateMCPServerDetail = useInvalidateMCPServerDetail()
@ -43,11 +45,33 @@ function MCPServiceCard({
const [showConfirmDelete, setShowConfirmDelete] = useState(false) const [showConfirmDelete, setShowConfirmDelete] = useState(false)
const [showMCPServerModal, setShowMCPServerModal] = useState(false) const [showMCPServerModal, setShowMCPServerModal] = useState(false)
const { data: currentWorkflow } = useAppWorkflow(appInfo.id) const isAdvancedApp = appInfo?.mode === 'advanced-chat' || appInfo?.mode === 'workflow'
const { data: detail } = useMCPServerDetail(appInfo.id) const isBasicApp = !isAdvancedApp
const { data: currentWorkflow } = useAppWorkflow(isAdvancedApp ? appId : '')
const [basicAppConfig, setBasicAppConfig] = useState<any>({})
const basicAppInputForm = useMemo(() => {
if(!isBasicApp || !basicAppConfig?.user_input_form)
return []
return basicAppConfig.user_input_form.map((item: any) => {
const type = Object.keys(item)[0]
return {
...item[type],
type: type || 'text-input',
}
})
}, [basicAppConfig.user_input_form, isBasicApp])
useEffect(() => {
if(isBasicApp && appId) {
(async () => {
const res = await fetchAppDetail({ url: '/apps', id: appId })
setBasicAppConfig(res?.model_config || {})
})()
}
}, [appId, isBasicApp])
const { data: detail } = useMCPServerDetail(appId)
const { id, status, server_code } = detail ?? {} const { id, status, server_code } = detail ?? {}
const appUnpublished = !currentWorkflow?.graph const appUnpublished = isAdvancedApp ? !currentWorkflow?.graph : !basicAppConfig.updated_at
const serverPublished = !!id const serverPublished = !!id
const serverActivated = status === 'active' const serverActivated = status === 'active'
const serverURL = serverPublished ? `${appInfo.api_base_url.replace('/v1', '')}/mcp/server/${server_code}/mcp` : '***********' const serverURL = serverPublished ? `${appInfo.api_base_url.replace('/v1', '')}/mcp/server/${server_code}/mcp` : '***********'
@ -56,15 +80,18 @@ function MCPServiceCard({
const [activated, setActivated] = useState(serverActivated) const [activated, setActivated] = useState(serverActivated)
const latestParams = useMemo(() => { const latestParams = useMemo(() => {
if (!currentWorkflow?.graph) if(isAdvancedApp) {
return [] if (!currentWorkflow?.graph)
const startNode = currentWorkflow?.graph.nodes.find(node => node.data.type === BlockEnum.Start) as any return []
return startNode?.data.variables as any[] || [] const startNode = currentWorkflow?.graph.nodes.find(node => node.data.type === BlockEnum.Start) as any
}, [currentWorkflow]) return startNode?.data.variables as any[] || []
}
return basicAppInputForm
}, [currentWorkflow, basicAppInputForm, isAdvancedApp])
const onGenCode = async () => { const onGenCode = async () => {
await refreshMCPServerCode(detail?.id || '') await refreshMCPServerCode(detail?.id || '')
invalidateMCPServerDetail(appInfo.id) invalidateMCPServerDetail(appId)
} }
const onChangeStatus = async (state: boolean) => { const onChangeStatus = async (state: boolean) => {
@ -76,23 +103,23 @@ function MCPServiceCard({
} }
await updateMCPServer({ await updateMCPServer({
appID: appInfo.id, appID: appId,
id: id || '', id: id || '',
description: detail?.description || '', description: detail?.description || '',
parameters: detail?.parameters || {}, parameters: detail?.parameters || {},
status: 'active', status: 'active',
}) })
invalidateMCPServerDetail(appInfo.id) invalidateMCPServerDetail(appId)
} }
else { else {
await updateMCPServer({ await updateMCPServer({
appID: appInfo.id, appID: appId,
id: id || '', id: id || '',
description: detail?.description || '', description: detail?.description || '',
parameters: detail?.parameters || {}, parameters: detail?.parameters || {},
status: 'inactive', status: 'inactive',
}) })
invalidateMCPServerDetail(appInfo.id) invalidateMCPServerDetail(appId)
} }
} }
@ -106,7 +133,7 @@ function MCPServiceCard({
setActivated(serverActivated) setActivated(serverActivated)
}, [serverActivated]) }, [serverActivated])
if (!currentWorkflow) if (!currentWorkflow && isAdvancedApp)
return null return null
return ( return (
@ -190,7 +217,7 @@ function MCPServiceCard({
{showMCPServerModal && ( {showMCPServerModal && (
<MCPServerModal <MCPServerModal
show={showMCPServerModal} show={showMCPServerModal}
appID={appInfo.id} appID={appId}
data={serverPublished ? detail : undefined} data={serverPublished ? detail : undefined}
latestParams={latestParams} latestParams={latestParams}
onHide={handleServerModalHide} onHide={handleServerModalHide}

Loading…
Cancel
Save