-
+
{log.deploymentVersionName || `v${log.deploymentVersion}`}
diff --git a/apps/sim/app/workspace/[workspaceId]/logs/components/logs-toolbar/logs-toolbar.tsx b/apps/sim/app/workspace/[workspaceId]/logs/components/logs-toolbar/logs-toolbar.tsx
index e5d50d6da2..11280214fb 100644
--- a/apps/sim/app/workspace/[workspaceId]/logs/components/logs-toolbar/logs-toolbar.tsx
+++ b/apps/sim/app/workspace/[workspaceId]/logs/components/logs-toolbar/logs-toolbar.tsx
@@ -19,6 +19,7 @@ import { DatePicker } from '@/components/emcn/components/date-picker/date-picker
import { cn } from '@/lib/core/utils/cn'
import { hasActiveFilters } from '@/lib/logs/filters'
import { getTriggerOptions } from '@/lib/logs/get-trigger-options'
+import { type LogStatus, STATUS_CONFIG } from '@/app/workspace/[workspaceId]/logs/utils'
import { getBlock } from '@/blocks/registry'
import { useFolderStore } from '@/stores/folders/store'
import { useFilterStore } from '@/stores/logs/filters/store'
@@ -211,12 +212,12 @@ export function LogsToolbar({
}, [level])
const statusOptions: ComboboxOption[] = useMemo(
- () => [
- { value: 'error', label: 'Error', icon: getColorIcon('var(--text-error)') },
- { value: 'info', label: 'Info', icon: getColorIcon('var(--terminal-status-info-color)') },
- { value: 'running', label: 'Running', icon: getColorIcon('#22c55e') },
- { value: 'pending', label: 'Pending', icon: getColorIcon('#f59e0b') },
- ],
+ () =>
+ (Object.keys(STATUS_CONFIG) as LogStatus[]).map((status) => ({
+ value: status,
+ label: STATUS_CONFIG[status].label,
+ icon: getColorIcon(STATUS_CONFIG[status].color),
+ })),
[]
)
@@ -242,12 +243,8 @@ export function LogsToolbar({
const selectedStatusColor = useMemo(() => {
if (selectedStatuses.length !== 1) return null
- const status = selectedStatuses[0]
- if (status === 'error') return 'var(--text-error)'
- if (status === 'info') return 'var(--terminal-status-info-color)'
- if (status === 'running') return '#22c55e'
- if (status === 'pending') return '#f59e0b'
- return null
+ const status = selectedStatuses[0] as LogStatus
+ return STATUS_CONFIG[status]?.color ?? null
}, [selectedStatuses])
const workflowOptions: ComboboxOption[] = useMemo(
diff --git a/apps/sim/app/workspace/[workspaceId]/logs/utils.ts b/apps/sim/app/workspace/[workspaceId]/logs/utils.ts
index 5c4d83c54e..ef7a8c544d 100644
--- a/apps/sim/app/workspace/[workspaceId]/logs/utils.ts
+++ b/apps/sim/app/workspace/[workspaceId]/logs/utils.ts
@@ -5,7 +5,6 @@ import { getIntegrationMetadata } from '@/lib/logs/get-trigger-options'
import { getBlock } from '@/blocks/registry'
import { CORE_TRIGGER_TYPES } from '@/stores/logs/filters/types'
-/** Column configuration for logs table - shared between header and rows */
export const LOG_COLUMNS = {
date: { width: 'w-[8%]', minWidth: 'min-w-[70px]', label: 'Date' },
time: { width: 'w-[12%]', minWidth: 'min-w-[90px]', label: 'Time' },
@@ -16,10 +15,8 @@ export const LOG_COLUMNS = {
duration: { width: 'w-[20%]', minWidth: 'min-w-[100px]', label: 'Duration' },
} as const
-/** Type-safe column key derived from LOG_COLUMNS */
export type LogColumnKey = keyof typeof LOG_COLUMNS
-/** Ordered list of column keys for rendering table headers */
export const LOG_COLUMN_ORDER: readonly LogColumnKey[] = [
'date',
'time',
@@ -30,7 +27,6 @@ export const LOG_COLUMN_ORDER: readonly LogColumnKey[] = [
'duration',
] as const
-/** Possible execution status values for workflow logs */
export type LogStatus = 'error' | 'pending' | 'running' | 'info' | 'cancelled'
/**
@@ -53,30 +49,28 @@ export function getDisplayStatus(status: string | null | undefined): LogStatus {
}
}
-/** Configuration mapping log status to Badge variant and display label */
-const STATUS_VARIANT_MAP: Record<
+export const STATUS_CONFIG: Record<
LogStatus,
- { variant: React.ComponentProps
['variant']; label: string }
+ { variant: React.ComponentProps['variant']; label: string; color: string }
> = {
- error: { variant: 'red', label: 'Error' },
- pending: { variant: 'amber', label: 'Pending' },
- running: { variant: 'green', label: 'Running' },
- cancelled: { variant: 'gray', label: 'Cancelled' },
- info: { variant: 'gray', label: 'Info' },
+ error: { variant: 'red', label: 'Error', color: 'var(--text-error)' },
+ pending: { variant: 'amber', label: 'Pending', color: '#f59e0b' },
+ running: { variant: 'green', label: 'Running', color: '#22c55e' },
+ cancelled: { variant: 'orange', label: 'Cancelled', color: '#f97316' },
+ info: { variant: 'gray', label: 'Info', color: 'var(--terminal-status-info-color)' },
}
-/** Configuration mapping core trigger types to Badge color variants */
const TRIGGER_VARIANT_MAP: Record['variant']> = {
manual: 'gray-secondary',
api: 'blue',
schedule: 'green',
chat: 'purple',
webhook: 'orange',
+ mcp: 'cyan',
a2a: 'teal',
}
interface StatusBadgeProps {
- /** The execution status to display */
status: LogStatus
}
@@ -86,14 +80,13 @@ interface StatusBadgeProps {
* @returns A Badge with dot indicator and status label
*/
export const StatusBadge = React.memo(({ status }: StatusBadgeProps) => {
- const config = STATUS_VARIANT_MAP[status]
+ const config = STATUS_CONFIG[status]
return React.createElement(Badge, { variant: config.variant, dot: true }, config.label)
})
StatusBadge.displayName = 'StatusBadge'
interface TriggerBadgeProps {
- /** The trigger type identifier (e.g., 'manual', 'api', or integration block type) */
trigger: string
}
diff --git a/apps/sim/app/workspace/[workspaceId]/w/[workflowId]/components/action-bar/action-bar.tsx b/apps/sim/app/workspace/[workspaceId]/w/[workflowId]/components/action-bar/action-bar.tsx
index 835cf02184..59b3e5b091 100644
--- a/apps/sim/app/workspace/[workspaceId]/w/[workflowId]/components/action-bar/action-bar.tsx
+++ b/apps/sim/app/workspace/[workspaceId]/w/[workflowId]/components/action-bar/action-bar.tsx
@@ -142,7 +142,7 @@ export const ActionBar = memo(
)}
- {!isStartBlock && !isResponseBlock && !isSubflowBlock && (
+ {!isStartBlock && !isResponseBlock && (
)}