diff --git a/web/app/components/app/workflow-log/index.tsx b/web/app/components/app/workflow-log/index.tsx index c6f9d985ae..30a1974347 100644 --- a/web/app/components/app/workflow-log/index.tsx +++ b/web/app/components/app/workflow-log/index.tsx @@ -41,6 +41,7 @@ const Logs: FC = ({ appDetail }) => { const query = { page: currPage + 1, + detail: true, limit, ...(debouncedQueryParams.status !== 'all' ? { status: debouncedQueryParams.status } : {}), ...(debouncedQueryParams.keyword ? { keyword: debouncedQueryParams.keyword } : {}), diff --git a/web/app/components/app/workflow-log/list.tsx b/web/app/components/app/workflow-log/list.tsx index 036a356db1..0e9b5dd67f 100644 --- a/web/app/components/app/workflow-log/list.tsx +++ b/web/app/components/app/workflow-log/list.tsx @@ -13,6 +13,7 @@ import Indicator from '@/app/components/header/indicator' import useBreakpoints, { MediaType } from '@/hooks/use-breakpoints' import useTimestamp from '@/hooks/use-timestamp' import cn from '@/utils/classnames' +import type { WorkflowRunTriggeredFrom } from '@/models/log' type ILogs = { logs?: WorkflowLogsResponse @@ -162,7 +163,7 @@ const WorkflowAppLogList: FC = ({ logs, appDetail, onRefresh }) => { {isWorkflow && ( - + )} diff --git a/web/app/components/app/workflow-log/trigger-by-display.tsx b/web/app/components/app/workflow-log/trigger-by-display.tsx index e9355c288d..1411503cc2 100644 --- a/web/app/components/app/workflow-log/trigger-by-display.tsx +++ b/web/app/components/app/workflow-log/trigger-by-display.tsx @@ -11,15 +11,23 @@ import { } from '@/app/components/base/icons/src/vender/workflow' import BlockIcon from '@/app/components/workflow/block-icon' import { BlockEnum } from '@/app/components/workflow/types' +import useTheme from '@/hooks/use-theme' +import type { TriggerMetadata } from '@/models/log' +import { WorkflowRunTriggeredFrom } from '@/models/log' +import { Theme } from '@/types/app' type TriggerByDisplayProps = { - triggeredFrom: string + triggeredFrom: WorkflowRunTriggeredFrom className?: string showText?: boolean + triggerMetadata?: TriggerMetadata } -const getTriggerDisplayName = (triggeredFrom: string, t: any) => { - const nameMap: Record = { +const getTriggerDisplayName = (triggeredFrom: WorkflowRunTriggeredFrom, t: any, metadata?: TriggerMetadata) => { + if (triggeredFrom === WorkflowRunTriggeredFrom.PLUGIN && metadata?.event_name) + return metadata.event_name + + const nameMap: Record = { 'debugging': t('appLog.triggerBy.debugging'), 'app-run': t('appLog.triggerBy.appRun'), 'webhook': t('appLog.triggerBy.webhook'), @@ -32,7 +40,27 @@ const getTriggerDisplayName = (triggeredFrom: string, t: any) => { return nameMap[triggeredFrom] || triggeredFrom } -const getTriggerIcon = (triggeredFrom: string) => { +const getPluginIcon = (metadata: TriggerMetadata | undefined, theme: Theme) => { + if (!metadata) + return null + + const icon = theme === Theme.dark + ? metadata.icon_dark || metadata.icon + : metadata.icon || metadata.icon_dark + + if (!icon) + return null + + return ( + + ) +} + +const getTriggerIcon = (triggeredFrom: WorkflowRunTriggeredFrom, metadata: TriggerMetadata | undefined, theme: Theme) => { switch (triggeredFrom) { case 'webhook': return ( @@ -47,9 +75,7 @@ const getTriggerIcon = (triggeredFrom: string) => { ) case 'plugin': - // For plugin triggers in logs, use a generic plugin icon since we don't have specific plugin info - // This matches the standard BlockIcon styling for TriggerPlugin - return ( + return getPluginIcon(metadata, theme) || ( = ({ triggeredFrom, className = '', showText = true, + triggerMetadata, }) => { const { t } = useTranslation() + const { theme } = useTheme() - const displayName = getTriggerDisplayName(triggeredFrom, t) - const icon = getTriggerIcon(triggeredFrom) + const displayName = getTriggerDisplayName(triggeredFrom, t, triggerMetadata) + const icon = getTriggerIcon(triggeredFrom, triggerMetadata, theme) return (
diff --git a/web/models/log.ts b/web/models/log.ts index 3a16254d63..baa07a59c4 100644 --- a/web/models/log.ts +++ b/web/models/log.ts @@ -229,12 +229,38 @@ export type AnnotationsCountResponse = { count: number } +export enum WorkflowRunTriggeredFrom { + DEBUGGING = 'debugging', + APP_RUN = 'app-run', + RAG_PIPELINE_RUN = 'rag-pipeline-run', + RAG_PIPELINE_DEBUGGING = 'rag-pipeline-debugging', + WEBHOOK = 'webhook', + SCHEDULE = 'schedule', + PLUGIN = 'plugin', +} + +export type TriggerMetadata = { + type?: string + endpoint_id?: string + plugin_unique_identifier?: string + provider_id?: string + event_name?: string + icon_filename?: string + icon_dark_filename?: string + icon?: string | null + icon_dark?: string | null +} + +export type WorkflowLogDetails = { + trigger_metadata?: TriggerMetadata +} + export type WorkflowRunDetail = { id: string version: string status: 'running' | 'succeeded' | 'failed' | 'stopped' error?: string - triggered_from?: string + triggered_from?: WorkflowRunTriggeredFrom elapsed_time: number total_tokens: number total_price: number @@ -256,6 +282,7 @@ export type EndUserInfo = { export type WorkflowAppLogDetail = { id: string workflow_run: WorkflowRunDetail + details?: WorkflowLogDetails created_from: 'service-api' | 'web-app' | 'explore' created_by_role: 'account' | 'end_user' created_by_account?: AccountInfo