@kb-labs/workflow-entry 2.104.0 → 2.106.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (56) hide show
  1. package/dist/manifest.json +901 -0
  2. package/dist/widgets/117.js +2 -3
  3. package/dist/widgets/165.js +1 -2
  4. package/dist/widgets/326.js +1 -2
  5. package/dist/widgets/370.js +1 -2
  6. package/dist/widgets/405.js +1 -2
  7. package/dist/widgets/46.js +2 -3
  8. package/dist/widgets/50.js +1 -2
  9. package/dist/widgets/546.js +1 -2
  10. package/dist/widgets/62.js +2 -3
  11. package/dist/widgets/648.js +1 -2
  12. package/dist/widgets/669.js +1 -2
  13. package/dist/widgets/707.js +1 -2
  14. package/dist/widgets/716.js +1 -2
  15. package/dist/widgets/733.js +2 -3
  16. package/dist/widgets/775.js +1 -2
  17. package/dist/widgets/78.js +1 -2
  18. package/dist/widgets/945.js +1 -2
  19. package/dist/widgets/968.js +1 -2
  20. package/dist/widgets/__federation_expose_Crons.js +1 -2
  21. package/dist/widgets/__federation_expose_Dashboard.js +1 -2
  22. package/dist/widgets/__federation_expose_DefinitionDetail.js +1 -2
  23. package/dist/widgets/__federation_expose_Definitions.js +1 -2
  24. package/dist/widgets/__federation_expose_Jobs.js +1 -2
  25. package/dist/widgets/__federation_expose_RunDetail.js +2 -3
  26. package/dist/widgets/__federation_expose_Runs.js +1 -2
  27. package/dist/widgets/mf-manifest.json +12 -12
  28. package/dist/widgets/mf-stats.json +19 -18
  29. package/dist/widgets/remoteEntry.js +3 -4
  30. package/package.json +25 -25
  31. package/dist/widgets/117.js.map +0 -1
  32. package/dist/widgets/165.js.map +0 -1
  33. package/dist/widgets/326.js.map +0 -1
  34. package/dist/widgets/370.js.map +0 -1
  35. package/dist/widgets/405.js.map +0 -1
  36. package/dist/widgets/46.js.map +0 -1
  37. package/dist/widgets/50.js.map +0 -1
  38. package/dist/widgets/546.js.map +0 -1
  39. package/dist/widgets/62.js.map +0 -1
  40. package/dist/widgets/648.js.map +0 -1
  41. package/dist/widgets/669.js.map +0 -1
  42. package/dist/widgets/707.js.map +0 -1
  43. package/dist/widgets/716.js.map +0 -1
  44. package/dist/widgets/733.js.map +0 -1
  45. package/dist/widgets/775.js.map +0 -1
  46. package/dist/widgets/78.js.map +0 -1
  47. package/dist/widgets/945.js.map +0 -1
  48. package/dist/widgets/968.js.map +0 -1
  49. package/dist/widgets/__federation_expose_Crons.js.map +0 -1
  50. package/dist/widgets/__federation_expose_Dashboard.js.map +0 -1
  51. package/dist/widgets/__federation_expose_DefinitionDetail.js.map +0 -1
  52. package/dist/widgets/__federation_expose_Definitions.js.map +0 -1
  53. package/dist/widgets/__federation_expose_Jobs.js.map +0 -1
  54. package/dist/widgets/__federation_expose_RunDetail.js.map +0 -1
  55. package/dist/widgets/__federation_expose_Runs.js.map +0 -1
  56. package/dist/widgets/remoteEntry.js.map +0 -1
@@ -1 +0,0 @@
1
- {"version":3,"file":"__federation_expose_Dashboard.js","sources":["webpack://@kb-labs/workflow-entry/../../../node_modules/.pnpm/react@19.2.5/node_modules/react/cjs/react-jsx-runtime.production.js","webpack://@kb-labs/workflow-entry/../../../node_modules/.pnpm/react@19.2.5/node_modules/react/jsx-runtime.js","webpack://@kb-labs/workflow-entry/./src/studio/components/RunWorkflowModal.tsx","webpack://@kb-labs/workflow-entry/./src/studio/components/ActiveRunsPanel.tsx","webpack://@kb-labs/workflow-entry/./src/studio/pages/WorkflowsDashboard.tsx"],"sourcesContent":["/**\n * @license React\n * react-jsx-runtime.production.js\n *\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n\"use strict\";\nvar REACT_ELEMENT_TYPE = Symbol.for(\"react.transitional.element\"),\n REACT_FRAGMENT_TYPE = Symbol.for(\"react.fragment\");\nfunction jsxProd(type, config, maybeKey) {\n var key = null;\n void 0 !== maybeKey && (key = \"\" + maybeKey);\n void 0 !== config.key && (key = \"\" + config.key);\n if (\"key\" in config) {\n maybeKey = {};\n for (var propName in config)\n \"key\" !== propName && (maybeKey[propName] = config[propName]);\n } else maybeKey = config;\n config = maybeKey.ref;\n return {\n $$typeof: REACT_ELEMENT_TYPE,\n type: type,\n key: key,\n ref: void 0 !== config ? config : null,\n props: maybeKey\n };\n}\nexports.Fragment = REACT_FRAGMENT_TYPE;\nexports.jsx = jsxProd;\nexports.jsxs = jsxProd;\n","'use strict';\n\nif (process.env.NODE_ENV === 'production') {\n module.exports = require('./cjs/react-jsx-runtime.production.js');\n} else {\n module.exports = require('./cjs/react-jsx-runtime.development.js');\n}\n","/**\n * @module @kb-labs/studio-app/modules/workflows/components/run-workflow-modal\n * Modal dialog for running a workflow with optional input parameters.\n * Supports two modes:\n * 1. Single workflow (workflow prop) — used from definition page\n * 2. Workflow picker (workflows prop) — used from dashboard\n */\n\nimport * as React from 'react';\nimport {\n UIModal,\n UIButton,\n UISpace,\n UITypographyText,\n UIInput,\n UIInputTextArea,\n UIInputNumber,\n UISwitch,\n UISelect,\n UIIcon,\n} from '@kb-labs/sdk/studio';\nimport type { WorkflowInfo } from '@kb-labs/workflow-contracts';\n\ntype InputField = NonNullable<WorkflowInfo['inputs']>[string];\n\ninterface RunWorkflowModalBaseProps {\n open: boolean;\n onClose: () => void;\n onRun: (workflowId: string, input: Record<string, unknown>) => void;\n loading?: boolean;\n}\n\ninterface SingleWorkflowProps extends RunWorkflowModalBaseProps {\n workflow: WorkflowInfo | null;\n workflows?: never;\n}\n\ninterface MultiWorkflowProps extends RunWorkflowModalBaseProps {\n workflow?: never;\n workflows: WorkflowInfo[];\n}\n\nexport type RunWorkflowModalProps = SingleWorkflowProps | MultiWorkflowProps;\n\nfunction DynamicField({\n name,\n schema,\n value,\n onChange,\n}: {\n name: string;\n schema: InputField;\n value: unknown;\n onChange: (val: unknown) => void;\n}) {\n const label = (\n <UISpace className=\"gap-tight\" style={{ marginBottom: 4 }}>\n <UITypographyText className=\"typo-label\">\n {name}\n {schema.required && (\n <span style={{ color: 'var(--color-error)', marginLeft: 2 }}>*</span>\n )}\n </UITypographyText>\n {schema.description && (\n <UITypographyText className=\"typo-caption text-tertiary\">\n — {schema.description}\n </UITypographyText>\n )}\n </UISpace>\n );\n\n if (schema.type === 'boolean') {\n return (\n <div style={{ marginBottom: 16 }}>\n {label}\n <div>\n <UISwitch\n checked={value !== undefined ? Boolean(value) : (schema.default as boolean ?? false)}\n onChange={onChange}\n />\n </div>\n </div>\n );\n }\n\n if (schema.type === 'number') {\n return (\n <div style={{ marginBottom: 16 }}>\n {label}\n <UIInputNumber\n style={{ width: '100%' }}\n value={value as number | undefined}\n placeholder={schema.default !== undefined ? String(schema.default) : undefined}\n onChange={onChange}\n />\n </div>\n );\n }\n\n return (\n <div style={{ marginBottom: 16 }}>\n {label}\n <UIInput\n value={value as string | undefined}\n placeholder={schema.default !== undefined ? String(schema.default) : undefined}\n onChange={(val) => onChange(val)}\n />\n </div>\n );\n}\n\nexport function RunWorkflowModal(props: RunWorkflowModalProps) {\n const { open, onClose, onRun, loading } = props;\n\n const isMulti = 'workflows' in props && Array.isArray(props.workflows);\n const workflowList: WorkflowInfo[] = isMulti ? (props as MultiWorkflowProps).workflows : [];\n\n const [selectedId, setSelectedId] = React.useState<string | undefined>(undefined);\n const [jsonValue, setJsonValue] = React.useState('{}');\n const [jsonError, setJsonError] = React.useState<string | null>(null);\n const [fieldValues, setFieldValues] = React.useState<Record<string, unknown>>({});\n\n // Resolve the active workflow\n const activeWorkflow: WorkflowInfo | null = isMulti\n ? workflowList.find((w) => w.id === selectedId) ?? null\n : (props as SingleWorkflowProps).workflow ?? null;\n\n const inputs = activeWorkflow?.inputs;\n const hasSchema = !!inputs && Object.keys(inputs).length > 0;\n\n // Reset form when modal opens or workflow changes\n React.useEffect(() => {\n if (open) {\n setJsonValue('{}');\n setJsonError(null);\n if (!isMulti) {\n setSelectedId(undefined);\n }\n if (inputs) {\n const defaults: Record<string, unknown> = {};\n for (const [key, schema] of Object.entries(inputs)) {\n if (schema.default !== undefined) {\n defaults[key] = schema.default;\n }\n }\n setFieldValues(defaults);\n } else {\n setFieldValues({});\n }\n }\n }, [open, activeWorkflow?.id, inputs, isMulti]);\n\n // Reset fields when selected workflow changes in multi mode\n React.useEffect(() => {\n if (!isMulti || !selectedId) {return;}\n setJsonValue('{}');\n setJsonError(null);\n if (inputs) {\n const defaults: Record<string, unknown> = {};\n for (const [key, schema] of Object.entries(inputs)) {\n if (schema.default !== undefined) {\n defaults[key] = schema.default;\n }\n }\n setFieldValues(defaults);\n } else {\n setFieldValues({});\n }\n }, [selectedId, inputs, isMulti]);\n\n const handleJsonChange = (e: React.ChangeEvent<HTMLTextAreaElement>) => {\n const val = e.target.value;\n setJsonValue(val);\n if (!val.trim() || val.trim() === '{}') {\n setJsonError(null);\n return;\n }\n try {\n JSON.parse(val);\n setJsonError(null);\n } catch {\n setJsonError('Invalid JSON');\n }\n };\n\n const handleRun = () => {\n if (!activeWorkflow) {return;}\n if (hasSchema) {\n onRun(activeWorkflow.id, fieldValues);\n } else {\n const trimmed = jsonValue.trim();\n if (!trimmed || trimmed === '{}') {\n onRun(activeWorkflow.id, {});\n return;\n }\n try {\n const parsed = JSON.parse(trimmed) as Record<string, unknown>;\n onRun(activeWorkflow.id, parsed);\n } catch {\n setJsonError('Invalid JSON');\n }\n }\n };\n\n const footer = (\n <UISpace style={{ justifyContent: 'flex-end' }}>\n <UIButton onClick={onClose} disabled={loading}>\n Cancel\n </UIButton>\n <UIButton\n variant=\"primary\"\n icon={<UIIcon name=\"PlayCircleOutlined\" />}\n loading={loading}\n disabled={!activeWorkflow || (!hasSchema && !!jsonError)}\n onClick={handleRun}\n >\n Run\n </UIButton>\n </UISpace>\n );\n\n const title = activeWorkflow\n ? `Run Workflow: ${activeWorkflow.name}`\n : 'Run Workflow';\n\n return (\n <UIModal\n open={open}\n title={\n <UISpace className=\"gap-item\">\n <UIIcon name=\"ThunderboltOutlined\" />\n <span>{title}</span>\n </UISpace>\n }\n onCancel={onClose}\n footer={footer}\n maskClosable={!loading}\n >\n {/* Workflow picker (multi mode only) */}\n {isMulti && (\n <div style={{ marginTop: 16 }}>\n <UITypographyText className=\"typo-label\" style={{ display: 'block', marginBottom: 8 }}>\n Select Workflow\n </UITypographyText>\n <UISelect\n style={{ width: '100%' }}\n placeholder=\"Choose a workflow...\"\n value={selectedId}\n onChange={(val) => setSelectedId(val as string)}\n showSearch\n options={workflowList.map((w) => ({\n label: w.name,\n value: w.id,\n description: w.description,\n }))}\n />\n </div>\n )}\n\n {/* Input form (shown when workflow is selected) */}\n {activeWorkflow && hasSchema && (\n <div style={{ marginTop: 16 }}>\n {Object.entries(inputs!).map(([key, schema]) => (\n <DynamicField\n key={key}\n name={key}\n schema={schema}\n value={fieldValues[key]}\n onChange={(val) => setFieldValues((prev) => ({ ...prev, [key]: val }))}\n />\n ))}\n </div>\n )}\n\n {activeWorkflow && !hasSchema && (\n <div style={{ marginTop: 16 }}>\n <UITypographyText className=\"typo-label\" style={{ display: 'block', marginBottom: 8 }}>\n Input payload (JSON)\n </UITypographyText>\n <UIInputTextArea\n value={jsonValue}\n onChange={handleJsonChange}\n rows={6}\n placeholder=\"{}\"\n style={{ fontFamily: 'var(--font-mono, monospace)', fontSize: 13 }}\n status={jsonError ? 'error' : undefined}\n />\n {jsonError && (\n <UITypographyText className=\"typo-caption text-error\" style={{ display: 'block', marginTop: 4 }}>\n {jsonError}\n </UITypographyText>\n )}\n <UITypographyText className=\"typo-caption text-tertiary\" style={{ display: 'block', marginTop: 8 }}>\n Leave empty or <code>{'{}'}</code> to run without parameters\n </UITypographyText>\n </div>\n )}\n </UIModal>\n );\n}\n","/**\n * @module @kb-labs/studio-app/modules/workflows/components/active-runs-panel\n * Always-visible panel showing actively running workflows with clickable links\n */\n\nimport * as React from 'react';\nimport { Link } from 'react-router-dom';\nimport {\n UIList,\n UIListItem,\n UIListItemMeta,\n UIProgress,\n UISpace,\n UITypographyText,\n UIButton,\n UIIcon,\n UIAlert,\n UICard,\n} from '@kb-labs/sdk/studio';\nimport { useData, useMutateData } from '@kb-labs/sdk/studio';\nimport { useUIMessage } from '@kb-labs/sdk/studio';\nimport type { DashboardStatsResponse } from '@kb-labs/workflow-contracts';\n\nfunction CancelRunButton({ runId, onSuccess }: { runId: string; onSuccess: () => void }) {\n const [messageApi, contextHolder] = useUIMessage();\n const cancel = useMutateData<void, void>(`/exec/api/v1/runs/${runId}/cancel`);\n return (\n <>\n {contextHolder}\n <UIButton\n variant=\"text\"\n size=\"small\"\n danger\n icon={<UIIcon name=\"StopOutlined\" />}\n loading={cancel.isLoading}\n onClick={async (e) => {\n e.preventDefault();\n e.stopPropagation();\n try {\n await cancel.mutateAsync();\n messageApi.success(`Run ${runId.slice(0, 8)} cancelled`);\n onSuccess();\n } catch (error) {\n messageApi.error(`Failed to cancel: ${(error as Error).message}`);\n }\n }}\n >\n Cancel\n </UIButton>\n </>\n );\n}\n\nexport function ActiveRunsPanel() {\n const [messageApi, contextHolder] = useUIMessage();\n\n const { data: stats, isLoading, refetch } = useData<DashboardStatsResponse>('/exec/api/v1/stats', {\n pollingMs: 3000,\n });\n\n const activeExecutions = stats?.activeExecutions || [];\n const hasRunningJobs = activeExecutions.length > 0;\n\n const hasPendingApprovals = activeExecutions.some(\n (ex) => (ex as { status: string }).status === 'waiting_approval'\n );\n\n\n const formatDuration = (ms?: number) => {\n if (!ms) {return '-';}\n const seconds = Math.floor(ms / 1000);\n if (seconds < 60) {return `${seconds}s`;}\n const minutes = Math.floor(seconds / 60);\n if (minutes < 60) {return `${minutes}m ${seconds % 60}s`;}\n const hours = Math.floor(minutes / 60);\n return `${hours}h ${minutes % 60}m`;\n };\n\n return (\n <>\n {contextHolder}\n\n {hasPendingApprovals && (\n <UIAlert\n variant=\"warning\"\n message=\"Waiting for your approval\"\n description=\"One or more workflow steps require your decision.\"\n showIcon\n style={{ marginBottom: 'var(--spacing-card)' }}\n />\n )}\n\n <UICard\n title={\n <UISpace className=\"gap-item\">\n <UITypographyText className=\"typo-card-title\">\n Active Runs ({activeExecutions.length})\n </UITypographyText>\n <UIButton\n variant=\"text\"\n size=\"small\"\n icon={<UIIcon name=\"ReloadOutlined\" spin={isLoading} />}\n onClick={() => refetch()}\n />\n </UISpace>\n }\n style={{ marginBottom: 'var(--spacing-section)' }}\n >\n {hasRunningJobs ? (\n <UIList\n dataSource={activeExecutions}\n renderItem={(execution) => (\n <UIListItem\n actions={[\n <CancelRunButton key=\"cancel\" runId={execution.id} onSuccess={() => refetch()} />,\n ]}\n >\n <UIListItemMeta\n title={\n <Link\n to={`/p/workflows/runs/${execution.id}`}\n style={{ color: 'inherit', textDecoration: 'none' }}\n >\n <UISpace>\n <UITypographyText className=\"typo-body\" style={{ color: 'var(--color-link)' }}>\n {execution.workflowName || execution.type}\n </UITypographyText>\n {execution.progress !== undefined && (\n <UITypographyText className=\"typo-caption text-secondary\">\n {execution.progress}%\n </UITypographyText>\n )}\n </UISpace>\n </Link>\n }\n description={\n <UISpace direction=\"vertical\" className=\"gap-tight\" style={{ width: '100%' }}>\n {execution.progressMessage && (\n <UITypographyText className=\"typo-description\">{execution.progressMessage}</UITypographyText>\n )}\n <UISpace className=\"gap-item\">\n <UIIcon name=\"ClockCircleOutlined\" className=\"text-secondary\" />\n <UITypographyText className=\"typo-caption text-secondary\">\n {formatDuration(execution.durationMs)}\n </UITypographyText>\n <UITypographyText className=\"typo-caption text-tertiary\">\n ID: {execution.id.slice(0, 8)}\n </UITypographyText>\n </UISpace>\n </UISpace>\n }\n />\n {execution.progress !== undefined && (\n <UIProgress\n percent={execution.progress}\n size=\"small\"\n status=\"active\"\n style={{ width: 120 }}\n />\n )}\n </UIListItem>\n )}\n />\n ) : (\n <UITypographyText className=\"typo-description text-secondary\">\n No active runs\n </UITypographyText>\n )}\n </UICard>\n </>\n );\n}\n","/**\n * @module @kb-labs/studio-app/modules/workflows/pages/workflows-dashboard-page\n * Main Workflow Dashboard - Activity-first view with active runs, stats, and recent history\n */\n\nimport * as React from 'react';\nimport { useNavigate } from 'react-router-dom';\nimport {\n UIRow,\n UICol,\n UISpace,\n UITypographyText,\n UIIcon,\n UICard,\n UITable,\n UITag,\n UIButton,\n useUIMessage,\n} from '@kb-labs/sdk/studio';\nimport { useData, useMutateData } from '@kb-labs/sdk/studio';\nimport type { DashboardStatsResponse, WorkflowInfo } from '@kb-labs/workflow-contracts';\nimport { ActiveRunsPanel } from '../components/ActiveRunsPanel';\nimport { RunWorkflowModal } from '../components/RunWorkflowModal';\nimport { UIPage, UIPageHeader } from '@kb-labs/sdk/studio';\n\nconst STATUS_ICONS: Record<string, React.ReactNode> = {\n completed: <UIIcon name=\"CheckCircleOutlined\" className=\"text-success\" />,\n failed: <UIIcon name=\"CloseCircleOutlined\" className=\"text-error\" />,\n cancelled: <UIIcon name=\"StopOutlined\" className=\"text-warning\" />,\n};\n\nconst STATUS_COLORS: Record<string, string> = {\n completed: 'success',\n failed: 'error',\n cancelled: 'warning',\n};\n\nfunction formatRelativeDate(dateStr: string) {\n const date = new Date(dateStr);\n const now = new Date();\n const diffMs = now.getTime() - date.getTime();\n const diffMins = Math.floor(diffMs / 60000);\n\n if (diffMins < 1) {return 'Just now';}\n if (diffMins < 60) {return `${diffMins}m ago`;}\n const diffHours = Math.floor(diffMins / 60);\n if (diffHours < 24) {return `${diffHours}h ago`;}\n const diffDays = Math.floor(diffHours / 24);\n return `${diffDays}d ago`;\n}\n\nfunction formatDuration(ms?: number) {\n if (!ms) {return '-';}\n const seconds = Math.floor(ms / 1000);\n if (seconds < 60) {return `${seconds}s`;}\n const minutes = Math.floor(seconds / 60);\n if (minutes < 60) {return `${minutes}m ${seconds % 60}s`;}\n const hours = Math.floor(minutes / 60);\n return `${hours}h ${minutes % 60}m`;\n}\n\nexport default function WorkflowsDashboard() {\n const navigate = useNavigate();\n const [messageApi, contextHolder] = useUIMessage();\n const [runModalOpen, setRunModalOpen] = React.useState(false);\n\n const { data: stats } = useData<DashboardStatsResponse>('/exec/api/v1/stats', { pollingMs: 3000 });\n const { data: workflowsData } = useData<{ workflows: WorkflowInfo[] }>('/exec/api/v1/workflows', { params: { limit: 100 } });\n\n const runWorkflowMutation = useMutateData<\n { workflowId: string; input: Record<string, unknown> },\n { runId: string; status: string }\n >(\n (p) => `/exec/api/v1/workflows/${encodeURIComponent(p.workflowId)}/runs`,\n { mapBody: (p) => p.input },\n );\n\n const recentActivity = stats?.recentActivity || [];\n\n const recentColumns = [\n {\n title: 'Time',\n dataIndex: 'finishedAt',\n key: 'finishedAt',\n width: 100,\n render: (date: string) => (\n <UITypographyText className=\"typo-caption\" style={{ whiteSpace: 'nowrap' }}>\n {formatRelativeDate(date)}\n </UITypographyText>\n ),\n },\n {\n title: 'Workflow / Job',\n dataIndex: 'workflowName',\n key: 'workflowName',\n width: 280,\n render: (name: string | undefined, record: typeof recentActivity[0]) => (\n <div style={{ overflow: 'hidden' }}>\n <UITypographyText\n className=\"typo-body\"\n ellipsis={{ tooltip: name || record.type }}\n style={{ display: 'block' }}\n >\n {name || record.type}\n </UITypographyText>\n <UITypographyText\n className=\"typo-caption text-tertiary\"\n code\n ellipsis={{ tooltip: record.id }}\n style={{ display: 'block' }}\n >\n {record.id.slice(0, 16)}...\n </UITypographyText>\n </div>\n ),\n },\n {\n title: 'Status',\n dataIndex: 'status',\n key: 'status',\n width: 140,\n render: (status: 'completed' | 'failed' | 'cancelled') => (\n <UITag icon={STATUS_ICONS[status]} color={STATUS_COLORS[status]}>\n {status.toUpperCase()}\n </UITag>\n ),\n },\n {\n title: 'Duration',\n dataIndex: 'durationMs',\n key: 'durationMs',\n width: 100,\n render: (ms?: number) => (\n <UITypographyText className=\"typo-caption\">{formatDuration(ms)}</UITypographyText>\n ),\n },\n {\n title: 'Error',\n dataIndex: 'error',\n key: 'error',\n render: (error?: string) =>\n error ? (\n <UITypographyText\n className=\"typo-caption text-error\"\n ellipsis={{ tooltip: error }}\n style={{ display: 'block' }}\n >\n {error}\n </UITypographyText>\n ) : (\n <UITypographyText className=\"typo-caption text-tertiary\">-</UITypographyText>\n ),\n },\n ];\n\n const handleOpenRunModal = () => {\n setRunModalOpen(true);\n };\n\n return (\n <UIPage width=\"full\">\n {contextHolder}\n <UIPageHeader\n title=\"Workflows\"\n description=\"Monitor workflows, jobs, and scheduled tasks\"\n breadcrumbs={[{ title: 'Home', href: '/' }, { title: 'Workflows' }]}\n actions={\n <UIButton\n variant=\"primary\"\n icon={<UIIcon name=\"PlayCircleOutlined\" />}\n onClick={handleOpenRunModal}\n >\n Run Workflow\n </UIButton>\n }\n />\n\n {/* Active Runs - always visible */}\n <ActiveRunsPanel />\n\n {/* Stats Row */}\n <UICard style={{ marginBottom: 'var(--spacing-section)' }}>\n <UIRow gutter={16}>\n <UICol span={6}>\n <UISpace direction=\"vertical\" className=\"gap-tight\">\n <UITypographyText className=\"typo-label text-secondary\">Total Workflows</UITypographyText>\n <UITypographyText className=\"typo-section-title\">{stats?.workflows.total || 0}</UITypographyText>\n <UISpace className=\"gap-tight\">\n <UITypographyText className=\"typo-caption text-success\">\n {stats?.workflows.active || 0} active\n </UITypographyText>\n <UITypographyText className=\"typo-caption text-secondary\">\n {stats?.workflows.inactive || 0} inactive\n </UITypographyText>\n </UISpace>\n </UISpace>\n </UICol>\n <UICol span={6}>\n <UISpace direction=\"vertical\" className=\"gap-tight\">\n <UITypographyText className=\"typo-label text-secondary\">Jobs Running</UITypographyText>\n <UITypographyText className=\"typo-section-title text-info\">\n {stats?.jobs.running || 0}\n </UITypographyText>\n <UISpace className=\"gap-tight\">\n <UITypographyText className=\"typo-caption text-secondary\">\n {stats?.jobs.pending || 0} pending\n </UITypographyText>\n </UISpace>\n </UISpace>\n </UICol>\n <UICol span={6}>\n <UISpace direction=\"vertical\" className=\"gap-tight\">\n <UITypographyText className=\"typo-label text-secondary\">Jobs Completed</UITypographyText>\n <UITypographyText className=\"typo-section-title text-success\">\n {stats?.jobs.completed || 0}\n </UITypographyText>\n <UISpace className=\"gap-tight\">\n <UITypographyText className=\"typo-caption text-error\">\n {stats?.jobs.failed || 0} failed\n </UITypographyText>\n </UISpace>\n </UISpace>\n </UICol>\n <UICol span={6}>\n <UISpace direction=\"vertical\" className=\"gap-tight\">\n <UITypographyText className=\"typo-label text-secondary\">Cron Jobs</UITypographyText>\n <UITypographyText className=\"typo-section-title\">{stats?.crons.total || 0}</UITypographyText>\n <UISpace className=\"gap-tight\">\n <UITypographyText className=\"typo-caption text-success\">\n {stats?.crons.enabled || 0} enabled\n </UITypographyText>\n <UITypographyText className=\"typo-caption text-secondary\">\n {stats?.crons.disabled || 0} disabled\n </UITypographyText>\n </UISpace>\n </UISpace>\n </UICol>\n </UIRow>\n </UICard>\n\n {/* Recent Activity */}\n <UICard\n title={<UITypographyText className=\"typo-card-title\">Recent Activity</UITypographyText>}\n style={{ marginBottom: 'var(--spacing-section)' }}\n >\n <UITable\n dataSource={recentActivity}\n columns={recentColumns}\n rowKey=\"id\"\n scroll={{ x: 760 }}\n pagination={{ pageSize: 20 }}\n onRow={(record: typeof recentActivity[0]) => ({\n style: { cursor: 'pointer' },\n onClick: () => navigate(`/p/workflows/runs/${record.id}`),\n })}\n />\n </UICard>\n\n <RunWorkflowModal\n open={runModalOpen}\n workflows={workflowsData?.workflows ?? []}\n loading={runWorkflowMutation.isLoading}\n onClose={() => setRunModalOpen(false)}\n onRun={(workflowId, input) => {\n runWorkflowMutation.mutate({ workflowId, input }, {\n onSuccess: (data) => {\n setRunModalOpen(false);\n navigate(`/p/workflows/runs/${data.runId}`);\n },\n onError: (err) => {\n messageApi.error(`Failed to start workflow \"${workflowId}\": ${err.message}`);\n },\n });\n }}\n />\n </UIPage>\n );\n}\n"],"names":["Symbol","r","DynamicField","param","_schema_default","name","schema","value","onChange","label","UISpace","UITypographyText","UISwitch","undefined","Boolean","UIInputNumber","String","UIInput","onChange1","val","RunWorkflowModal","props","_workflowList_find","_props_workflow","open","onClose","onRun","loading","isMulti","Array","workflowList","_React_useState","selectedId","setSelectedId","_React_useState1","jsonValue","setJsonValue","_React_useState2","jsonError","setJsonError","_React_useState3","fieldValues","setFieldValues","activeWorkflow","w","inputs","hasSchema","Object","React","defaults","_iteratorError","key","footer","UIButton","UIIcon","trimmed","parsed","JSON","title","UIModal","UISelect","prev","UIInputTextArea","e","CancelRunButton","runId","onSuccess","_useUIMessage","messageApi","contextHolder","cancel","useMutateData","onClick","error","ActiveRunsPanel","_useData","stats","isLoading","refetch","activeExecutions","hasRunningJobs","hasPendingApprovals","ex","formatDuration","ms","seconds","Math","minutes","hours","UIAlert","UICard","UIList","renderItem","execution","UIListItem","UIListItemMeta","Link","UIProgress","STATUS_ICONS","STATUS_COLORS","WorkflowsDashboard","navigate","useNavigate","runModalOpen","setRunModalOpen","workflowsData","_useData1","runWorkflowMutation","p","encodeURIComponent","mapBody","recentActivity","recentColumns","render","date","formatRelativeDate","dateStr","Date","diffMins","diffMs","now","diffHours","diffDays","record","status","UITag","UIPage","UIPageHeader","UIRow","UICol","UITable","onRow","workflowId","input","data","onError","err"],"mappings":"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"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"__federation_expose_DefinitionDetail.js","sources":["webpack://@kb-labs/workflow-entry/../../../node_modules/.pnpm/react@19.2.5/node_modules/react/cjs/react-jsx-runtime.production.js","webpack://@kb-labs/workflow-entry/../../../node_modules/.pnpm/react@19.2.5/node_modules/react/jsx-runtime.js","webpack://@kb-labs/workflow-entry/./src/studio/components/RunWorkflowModal.tsx","webpack://@kb-labs/workflow-entry/./src/studio/pages/WorkflowDefinitionDetail.tsx"],"sourcesContent":["/**\n * @license React\n * react-jsx-runtime.production.js\n *\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n\"use strict\";\nvar REACT_ELEMENT_TYPE = Symbol.for(\"react.transitional.element\"),\n REACT_FRAGMENT_TYPE = Symbol.for(\"react.fragment\");\nfunction jsxProd(type, config, maybeKey) {\n var key = null;\n void 0 !== maybeKey && (key = \"\" + maybeKey);\n void 0 !== config.key && (key = \"\" + config.key);\n if (\"key\" in config) {\n maybeKey = {};\n for (var propName in config)\n \"key\" !== propName && (maybeKey[propName] = config[propName]);\n } else maybeKey = config;\n config = maybeKey.ref;\n return {\n $$typeof: REACT_ELEMENT_TYPE,\n type: type,\n key: key,\n ref: void 0 !== config ? config : null,\n props: maybeKey\n };\n}\nexports.Fragment = REACT_FRAGMENT_TYPE;\nexports.jsx = jsxProd;\nexports.jsxs = jsxProd;\n","'use strict';\n\nif (process.env.NODE_ENV === 'production') {\n module.exports = require('./cjs/react-jsx-runtime.production.js');\n} else {\n module.exports = require('./cjs/react-jsx-runtime.development.js');\n}\n","/**\n * @module @kb-labs/studio-app/modules/workflows/components/run-workflow-modal\n * Modal dialog for running a workflow with optional input parameters.\n * Supports two modes:\n * 1. Single workflow (workflow prop) — used from definition page\n * 2. Workflow picker (workflows prop) — used from dashboard\n */\n\nimport * as React from 'react';\nimport {\n UIModal,\n UIButton,\n UISpace,\n UITypographyText,\n UIInput,\n UIInputTextArea,\n UIInputNumber,\n UISwitch,\n UISelect,\n UIIcon,\n} from '@kb-labs/sdk/studio';\nimport type { WorkflowInfo } from '@kb-labs/workflow-contracts';\n\ntype InputField = NonNullable<WorkflowInfo['inputs']>[string];\n\ninterface RunWorkflowModalBaseProps {\n open: boolean;\n onClose: () => void;\n onRun: (workflowId: string, input: Record<string, unknown>) => void;\n loading?: boolean;\n}\n\ninterface SingleWorkflowProps extends RunWorkflowModalBaseProps {\n workflow: WorkflowInfo | null;\n workflows?: never;\n}\n\ninterface MultiWorkflowProps extends RunWorkflowModalBaseProps {\n workflow?: never;\n workflows: WorkflowInfo[];\n}\n\nexport type RunWorkflowModalProps = SingleWorkflowProps | MultiWorkflowProps;\n\nfunction DynamicField({\n name,\n schema,\n value,\n onChange,\n}: {\n name: string;\n schema: InputField;\n value: unknown;\n onChange: (val: unknown) => void;\n}) {\n const label = (\n <UISpace className=\"gap-tight\" style={{ marginBottom: 4 }}>\n <UITypographyText className=\"typo-label\">\n {name}\n {schema.required && (\n <span style={{ color: 'var(--color-error)', marginLeft: 2 }}>*</span>\n )}\n </UITypographyText>\n {schema.description && (\n <UITypographyText className=\"typo-caption text-tertiary\">\n — {schema.description}\n </UITypographyText>\n )}\n </UISpace>\n );\n\n if (schema.type === 'boolean') {\n return (\n <div style={{ marginBottom: 16 }}>\n {label}\n <div>\n <UISwitch\n checked={value !== undefined ? Boolean(value) : (schema.default as boolean ?? false)}\n onChange={onChange}\n />\n </div>\n </div>\n );\n }\n\n if (schema.type === 'number') {\n return (\n <div style={{ marginBottom: 16 }}>\n {label}\n <UIInputNumber\n style={{ width: '100%' }}\n value={value as number | undefined}\n placeholder={schema.default !== undefined ? String(schema.default) : undefined}\n onChange={onChange}\n />\n </div>\n );\n }\n\n return (\n <div style={{ marginBottom: 16 }}>\n {label}\n <UIInput\n value={value as string | undefined}\n placeholder={schema.default !== undefined ? String(schema.default) : undefined}\n onChange={(val) => onChange(val)}\n />\n </div>\n );\n}\n\nexport function RunWorkflowModal(props: RunWorkflowModalProps) {\n const { open, onClose, onRun, loading } = props;\n\n const isMulti = 'workflows' in props && Array.isArray(props.workflows);\n const workflowList: WorkflowInfo[] = isMulti ? (props as MultiWorkflowProps).workflows : [];\n\n const [selectedId, setSelectedId] = React.useState<string | undefined>(undefined);\n const [jsonValue, setJsonValue] = React.useState('{}');\n const [jsonError, setJsonError] = React.useState<string | null>(null);\n const [fieldValues, setFieldValues] = React.useState<Record<string, unknown>>({});\n\n // Resolve the active workflow\n const activeWorkflow: WorkflowInfo | null = isMulti\n ? workflowList.find((w) => w.id === selectedId) ?? null\n : (props as SingleWorkflowProps).workflow ?? null;\n\n const inputs = activeWorkflow?.inputs;\n const hasSchema = !!inputs && Object.keys(inputs).length > 0;\n\n // Reset form when modal opens or workflow changes\n React.useEffect(() => {\n if (open) {\n setJsonValue('{}');\n setJsonError(null);\n if (!isMulti) {\n setSelectedId(undefined);\n }\n if (inputs) {\n const defaults: Record<string, unknown> = {};\n for (const [key, schema] of Object.entries(inputs)) {\n if (schema.default !== undefined) {\n defaults[key] = schema.default;\n }\n }\n setFieldValues(defaults);\n } else {\n setFieldValues({});\n }\n }\n }, [open, activeWorkflow?.id, inputs, isMulti]);\n\n // Reset fields when selected workflow changes in multi mode\n React.useEffect(() => {\n if (!isMulti || !selectedId) {return;}\n setJsonValue('{}');\n setJsonError(null);\n if (inputs) {\n const defaults: Record<string, unknown> = {};\n for (const [key, schema] of Object.entries(inputs)) {\n if (schema.default !== undefined) {\n defaults[key] = schema.default;\n }\n }\n setFieldValues(defaults);\n } else {\n setFieldValues({});\n }\n }, [selectedId, inputs, isMulti]);\n\n const handleJsonChange = (e: React.ChangeEvent<HTMLTextAreaElement>) => {\n const val = e.target.value;\n setJsonValue(val);\n if (!val.trim() || val.trim() === '{}') {\n setJsonError(null);\n return;\n }\n try {\n JSON.parse(val);\n setJsonError(null);\n } catch {\n setJsonError('Invalid JSON');\n }\n };\n\n const handleRun = () => {\n if (!activeWorkflow) {return;}\n if (hasSchema) {\n onRun(activeWorkflow.id, fieldValues);\n } else {\n const trimmed = jsonValue.trim();\n if (!trimmed || trimmed === '{}') {\n onRun(activeWorkflow.id, {});\n return;\n }\n try {\n const parsed = JSON.parse(trimmed) as Record<string, unknown>;\n onRun(activeWorkflow.id, parsed);\n } catch {\n setJsonError('Invalid JSON');\n }\n }\n };\n\n const footer = (\n <UISpace style={{ justifyContent: 'flex-end' }}>\n <UIButton onClick={onClose} disabled={loading}>\n Cancel\n </UIButton>\n <UIButton\n variant=\"primary\"\n icon={<UIIcon name=\"PlayCircleOutlined\" />}\n loading={loading}\n disabled={!activeWorkflow || (!hasSchema && !!jsonError)}\n onClick={handleRun}\n >\n Run\n </UIButton>\n </UISpace>\n );\n\n const title = activeWorkflow\n ? `Run Workflow: ${activeWorkflow.name}`\n : 'Run Workflow';\n\n return (\n <UIModal\n open={open}\n title={\n <UISpace className=\"gap-item\">\n <UIIcon name=\"ThunderboltOutlined\" />\n <span>{title}</span>\n </UISpace>\n }\n onCancel={onClose}\n footer={footer}\n maskClosable={!loading}\n >\n {/* Workflow picker (multi mode only) */}\n {isMulti && (\n <div style={{ marginTop: 16 }}>\n <UITypographyText className=\"typo-label\" style={{ display: 'block', marginBottom: 8 }}>\n Select Workflow\n </UITypographyText>\n <UISelect\n style={{ width: '100%' }}\n placeholder=\"Choose a workflow...\"\n value={selectedId}\n onChange={(val) => setSelectedId(val as string)}\n showSearch\n options={workflowList.map((w) => ({\n label: w.name,\n value: w.id,\n description: w.description,\n }))}\n />\n </div>\n )}\n\n {/* Input form (shown when workflow is selected) */}\n {activeWorkflow && hasSchema && (\n <div style={{ marginTop: 16 }}>\n {Object.entries(inputs!).map(([key, schema]) => (\n <DynamicField\n key={key}\n name={key}\n schema={schema}\n value={fieldValues[key]}\n onChange={(val) => setFieldValues((prev) => ({ ...prev, [key]: val }))}\n />\n ))}\n </div>\n )}\n\n {activeWorkflow && !hasSchema && (\n <div style={{ marginTop: 16 }}>\n <UITypographyText className=\"typo-label\" style={{ display: 'block', marginBottom: 8 }}>\n Input payload (JSON)\n </UITypographyText>\n <UIInputTextArea\n value={jsonValue}\n onChange={handleJsonChange}\n rows={6}\n placeholder=\"{}\"\n style={{ fontFamily: 'var(--font-mono, monospace)', fontSize: 13 }}\n status={jsonError ? 'error' : undefined}\n />\n {jsonError && (\n <UITypographyText className=\"typo-caption text-error\" style={{ display: 'block', marginTop: 4 }}>\n {jsonError}\n </UITypographyText>\n )}\n <UITypographyText className=\"typo-caption text-tertiary\" style={{ display: 'block', marginTop: 8 }}>\n Leave empty or <code>{'{}'}</code> to run without parameters\n </UITypographyText>\n </div>\n )}\n </UIModal>\n );\n}\n","/**\n * @module @kb-labs/studio-app/modules/workflows/pages/workflow-definition-page\n * Workflow definition detail page with recent runs\n */\n\nimport * as React from 'react';\nimport { useParams, useNavigate } from 'react-router-dom';\nimport {\n UISpin,\n UITag,\n UISpace,\n UITypographyText,\n UICard,\n UITable,\n UIButton,\n UIIcon,\n UIDescriptions,\n UIEmptyState,\n useUIMessage,\n} from '@kb-labs/sdk/studio';\nimport { useData, useMutateData } from '@kb-labs/sdk/studio';\nimport { UIPage, UIPageHeader } from '@kb-labs/sdk/studio';\nimport type { WorkflowRunInfo, WorkflowInfo } from '@kb-labs/workflow-contracts';\nimport { RunWorkflowModal } from '../components/RunWorkflowModal';\n\nconst STATUS_COLORS: Record<string, string> = {\n queued: 'default',\n running: 'processing',\n success: 'success',\n failed: 'error',\n cancelled: 'warning',\n skipped: 'default',\n waiting_approval: 'gold',\n};\n\nfunction formatDate(dateStr?: string) {\n if (!dateStr) {return '-';}\n return new Date(dateStr).toLocaleString();\n}\n\nfunction formatDuration(ms?: number) {\n if (!ms) {return '-';}\n const seconds = Math.floor(ms / 1000);\n if (seconds < 60) {return `${seconds}s`;}\n const minutes = Math.floor(seconds / 60);\n if (minutes < 60) {return `${minutes}m ${seconds % 60}s`;}\n const hours = Math.floor(minutes / 60);\n return `${hours}h ${minutes % 60}m`;\n}\n\nfunction CancelRunButton({ runId, onSuccess }: { runId: string; onSuccess: () => void }) {\n const cancel = useMutateData<void, void>(`/exec/api/v1/runs/${runId}/cancel`);\n return (\n <UIButton\n variant=\"link\"\n size=\"small\"\n danger\n icon={<UIIcon name=\"StopOutlined\" />}\n loading={cancel.isLoading}\n onClick={(e) => {\n e.stopPropagation();\n cancel.mutateAsync().then(onSuccess).catch(() => {});\n }}\n >\n Cancel\n </UIButton>\n );\n}\n\nexport default function WorkflowDefinitionDetail() {\n const { workflowId: encodedId } = useParams<{ workflowId: string }>();\n const navigate = useNavigate();\n const [messageApi, contextHolder] = useUIMessage();\n\n const workflowId = encodedId ? decodeURIComponent(encodedId) : '';\n const [runModalOpen, setRunModalOpen] = React.useState(false);\n\n const { data: workflowDef, isLoading: workflowLoading } = useData<WorkflowInfo>(\n workflowId ? `/exec/api/v1/workflows/${encodeURIComponent(workflowId)}` : '/exec/api/v1/workflows/__none__',\n { enabled: !!workflowId },\n );\n\n const { data: runsData, isLoading: runsLoading, refetch } = useData<{ runs: WorkflowRunInfo[] }>(\n workflowId ? `/exec/api/v1/workflows/${encodeURIComponent(workflowId)}/runs` : '/exec/api/v1/workflows/__none__/runs',\n { enabled: !!workflowId, pollingMs: 5000, params: { limit: 50 } },\n );\n\n const runWorkflowMutation = useMutateData<Record<string, unknown>, { runId: string }>(\n `/exec/api/v1/workflows/${encodeURIComponent(workflowId)}/runs`,\n );\n\n const runsColumns = [\n {\n title: 'Run ID',\n dataIndex: 'id',\n key: 'id',\n width: 200,\n render: (id: string) => (\n <UITypographyText\n className=\"typo-caption\"\n code\n ellipsis={{ tooltip: id }}\n style={{ cursor: 'pointer', color: 'var(--color-link)' }}\n onClick={(e: React.MouseEvent) => {\n e.stopPropagation();\n navigate(`/p/workflows/runs/${id}`);\n }}\n >\n {id.slice(0, 16)}...\n </UITypographyText>\n ),\n },\n {\n title: 'Status',\n dataIndex: 'status',\n key: 'status',\n width: 140,\n render: (status: string) => (\n <UITag color={STATUS_COLORS[status] ?? 'default'}>{status.toUpperCase()}</UITag>\n ),\n },\n {\n title: 'Triggered By',\n dataIndex: 'trigger',\n key: 'user',\n width: 160,\n render: (trigger?: { user?: string }) => (\n <UITypographyText className=\"typo-caption text-secondary\">{trigger?.user ?? '-'}</UITypographyText>\n ),\n },\n {\n title: 'Started At',\n dataIndex: 'startedAt',\n key: 'startedAt',\n width: 180,\n render: (date?: string) => (\n <UITypographyText className=\"typo-caption\">{formatDate(date)}</UITypographyText>\n ),\n },\n {\n title: 'Duration',\n dataIndex: 'durationMs',\n key: 'durationMs',\n width: 100,\n render: (ms?: number) => (\n <UITypographyText className=\"typo-caption\">{formatDuration(ms)}</UITypographyText>\n ),\n },\n {\n title: 'Actions',\n key: 'actions',\n width: 100,\n fixed: 'right' as const,\n render: (_: unknown, record: WorkflowRunInfo) => {\n const canCancel = record.status === 'running' || record.status === 'pending';\n if (!canCancel) {return null;}\n return <CancelRunButton runId={record.id} onSuccess={() => void refetch()} />;\n },\n },\n ];\n\n if (workflowLoading) {\n return (\n <UIPage>\n <div style={{ textAlign: 'center', padding: '80px 0' }}>\n <UISpin size=\"large\" />\n </div>\n </UIPage>\n );\n }\n\n if (!workflowDef) {\n return (\n <UIPage>\n <UIEmptyState\n description={`Workflow \"${workflowId}\" not found`}\n action={\n <UIButton onClick={() => navigate('/p/workflows/definitions')}>Back to Definitions</UIButton>\n }\n />\n </UIPage>\n );\n }\n\n return (\n <UIPage>\n {contextHolder}\n <UIPageHeader\n title={workflowDef.name}\n description={workflowDef.description}\n breadcrumbs={[\n { title: 'Home', href: '/' },\n { title: 'Workflows', href: '/workflows' },\n { title: 'Definitions', href: '/p/workflows/definitions' },\n { title: workflowDef.name },\n ]}\n actions={\n <UIButton\n variant=\"primary\"\n icon={<UIIcon name=\"PlayCircleOutlined\" />}\n onClick={() => setRunModalOpen(true)}\n >\n Run\n </UIButton>\n }\n />\n\n <UICard style={{ marginBottom: 'var(--spacing-section)' }}>\n <UIDescriptions\n column={3}\n items={[\n {\n key: 'id',\n label: 'ID',\n children: (\n <UITypographyText code className=\"typo-caption\">{workflowDef.id}</UITypographyText>\n ),\n },\n {\n key: 'source',\n label: 'Source',\n children: (\n <UITag color={workflowDef.source === 'manifest' ? 'blue' : 'green'}>\n {workflowDef.source === 'manifest' ? 'Plugin' : 'Standalone'}\n </UITag>\n ),\n },\n {\n key: 'status',\n label: 'Status',\n children: workflowDef.status ? (\n <UITag color={workflowDef.status === 'active' ? 'success' : 'default'}>\n {workflowDef.status.toUpperCase()}\n </UITag>\n ) : '-',\n },\n {\n key: 'plugin',\n label: 'Plugin',\n children: (\n <UITypographyText className=\"typo-caption\">\n {workflowDef.pluginId ?? '-'}\n </UITypographyText>\n ),\n },\n {\n key: 'tags',\n label: 'Tags',\n span: 2,\n children: workflowDef.tags && workflowDef.tags.length > 0 ? (\n <UISpace className=\"gap-tight\">\n {workflowDef.tags.map((tag) => (\n <UITag key={tag}>{tag}</UITag>\n ))}\n </UISpace>\n ) : '-',\n },\n ]}\n />\n </UICard>\n\n <UICard\n title={\n <UITypographyText className=\"typo-card-title\">Recent Runs</UITypographyText>\n }\n >\n <UITable\n dataSource={runsData?.runs ?? []}\n columns={runsColumns}\n loading={runsLoading}\n rowKey=\"id\"\n scroll={{ x: 900 }}\n pagination={{ pageSize: 20 }}\n onRow={(record: WorkflowRunInfo) => ({\n style: { cursor: 'pointer' },\n onClick: () => navigate(`/p/workflows/runs/${record.id}`),\n })}\n />\n </UICard>\n\n <RunWorkflowModal\n open={runModalOpen}\n workflow={workflowDef}\n loading={runWorkflowMutation.isLoading}\n onClose={() => setRunModalOpen(false)}\n onRun={(_workflowId, input) => {\n runWorkflowMutation.mutate(input, {\n onSuccess: (data) => {\n setRunModalOpen(false);\n navigate(`/p/workflows/runs/${data.runId}`);\n },\n onError: (err) => {\n messageApi.error(`Failed to start workflow \"${workflowId}\": ${err.message}`);\n },\n });\n }}\n />\n </UIPage>\n );\n}\n"],"names":["Symbol","DynamicField","param","_schema_default","name","schema","value","onChange","label","UISpace","UITypographyText","UISwitch","undefined","Boolean","UIInputNumber","String","UIInput","onChange1","val","RunWorkflowModal","props","_workflowList_find","_props_workflow","open","onClose","onRun","loading","isMulti","Array","workflowList","_React_useState","selectedId","setSelectedId","_React_useState1","jsonValue","setJsonValue","_React_useState2","jsonError","setJsonError","_React_useState3","fieldValues","setFieldValues","activeWorkflow","w","inputs","hasSchema","Object","React","defaults","_iteratorError","key","footer","UIButton","UIIcon","trimmed","parsed","JSON","title","UIModal","UISelect","prev","UIInputTextArea","e","STATUS_COLORS","CancelRunButton","runId","onSuccess","cancel","useMutateData","onClick","WorkflowDefinitionDetail","_workflowDef_pluginId","encodedId","_useParams","navigate","useNavigate","_useUIMessage","messageApi","contextHolder","workflowId","decodeURIComponent","runModalOpen","setRunModalOpen","_useData","encodeURIComponent","workflowDef","workflowLoading","_useData1","runsData","runsLoading","refetch","runWorkflowMutation","runsColumns","render","id","status","_STATUS_COLORS_status","UITag","trigger","date","Date","ms","formatDuration","seconds","Math","minutes","hours","_","record","UIPage","UISpin","UIPageHeader","UICard","UIDescriptions","tag","UITable","onRow","_workflowId","input","data","onError","err","UIEmptyState"],"mappings":"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"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"__federation_expose_Definitions.js","sources":["webpack://@kb-labs/workflow-entry/../../../node_modules/.pnpm/react@19.2.5/node_modules/react/cjs/react-jsx-runtime.production.js","webpack://@kb-labs/workflow-entry/../../../node_modules/.pnpm/react@19.2.5/node_modules/react/jsx-runtime.js","webpack://@kb-labs/workflow-entry/./src/studio/components/RunWorkflowModal.tsx","webpack://@kb-labs/workflow-entry/./src/studio/pages/WorkflowsDefinitions.tsx"],"sourcesContent":["/**\n * @license React\n * react-jsx-runtime.production.js\n *\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n\"use strict\";\nvar REACT_ELEMENT_TYPE = Symbol.for(\"react.transitional.element\"),\n REACT_FRAGMENT_TYPE = Symbol.for(\"react.fragment\");\nfunction jsxProd(type, config, maybeKey) {\n var key = null;\n void 0 !== maybeKey && (key = \"\" + maybeKey);\n void 0 !== config.key && (key = \"\" + config.key);\n if (\"key\" in config) {\n maybeKey = {};\n for (var propName in config)\n \"key\" !== propName && (maybeKey[propName] = config[propName]);\n } else maybeKey = config;\n config = maybeKey.ref;\n return {\n $$typeof: REACT_ELEMENT_TYPE,\n type: type,\n key: key,\n ref: void 0 !== config ? config : null,\n props: maybeKey\n };\n}\nexports.Fragment = REACT_FRAGMENT_TYPE;\nexports.jsx = jsxProd;\nexports.jsxs = jsxProd;\n","'use strict';\n\nif (process.env.NODE_ENV === 'production') {\n module.exports = require('./cjs/react-jsx-runtime.production.js');\n} else {\n module.exports = require('./cjs/react-jsx-runtime.development.js');\n}\n","/**\n * @module @kb-labs/studio-app/modules/workflows/components/run-workflow-modal\n * Modal dialog for running a workflow with optional input parameters.\n * Supports two modes:\n * 1. Single workflow (workflow prop) — used from definition page\n * 2. Workflow picker (workflows prop) — used from dashboard\n */\n\nimport * as React from 'react';\nimport {\n UIModal,\n UIButton,\n UISpace,\n UITypographyText,\n UIInput,\n UIInputTextArea,\n UIInputNumber,\n UISwitch,\n UISelect,\n UIIcon,\n} from '@kb-labs/sdk/studio';\nimport type { WorkflowInfo } from '@kb-labs/workflow-contracts';\n\ntype InputField = NonNullable<WorkflowInfo['inputs']>[string];\n\ninterface RunWorkflowModalBaseProps {\n open: boolean;\n onClose: () => void;\n onRun: (workflowId: string, input: Record<string, unknown>) => void;\n loading?: boolean;\n}\n\ninterface SingleWorkflowProps extends RunWorkflowModalBaseProps {\n workflow: WorkflowInfo | null;\n workflows?: never;\n}\n\ninterface MultiWorkflowProps extends RunWorkflowModalBaseProps {\n workflow?: never;\n workflows: WorkflowInfo[];\n}\n\nexport type RunWorkflowModalProps = SingleWorkflowProps | MultiWorkflowProps;\n\nfunction DynamicField({\n name,\n schema,\n value,\n onChange,\n}: {\n name: string;\n schema: InputField;\n value: unknown;\n onChange: (val: unknown) => void;\n}) {\n const label = (\n <UISpace className=\"gap-tight\" style={{ marginBottom: 4 }}>\n <UITypographyText className=\"typo-label\">\n {name}\n {schema.required && (\n <span style={{ color: 'var(--color-error)', marginLeft: 2 }}>*</span>\n )}\n </UITypographyText>\n {schema.description && (\n <UITypographyText className=\"typo-caption text-tertiary\">\n — {schema.description}\n </UITypographyText>\n )}\n </UISpace>\n );\n\n if (schema.type === 'boolean') {\n return (\n <div style={{ marginBottom: 16 }}>\n {label}\n <div>\n <UISwitch\n checked={value !== undefined ? Boolean(value) : (schema.default as boolean ?? false)}\n onChange={onChange}\n />\n </div>\n </div>\n );\n }\n\n if (schema.type === 'number') {\n return (\n <div style={{ marginBottom: 16 }}>\n {label}\n <UIInputNumber\n style={{ width: '100%' }}\n value={value as number | undefined}\n placeholder={schema.default !== undefined ? String(schema.default) : undefined}\n onChange={onChange}\n />\n </div>\n );\n }\n\n return (\n <div style={{ marginBottom: 16 }}>\n {label}\n <UIInput\n value={value as string | undefined}\n placeholder={schema.default !== undefined ? String(schema.default) : undefined}\n onChange={(val) => onChange(val)}\n />\n </div>\n );\n}\n\nexport function RunWorkflowModal(props: RunWorkflowModalProps) {\n const { open, onClose, onRun, loading } = props;\n\n const isMulti = 'workflows' in props && Array.isArray(props.workflows);\n const workflowList: WorkflowInfo[] = isMulti ? (props as MultiWorkflowProps).workflows : [];\n\n const [selectedId, setSelectedId] = React.useState<string | undefined>(undefined);\n const [jsonValue, setJsonValue] = React.useState('{}');\n const [jsonError, setJsonError] = React.useState<string | null>(null);\n const [fieldValues, setFieldValues] = React.useState<Record<string, unknown>>({});\n\n // Resolve the active workflow\n const activeWorkflow: WorkflowInfo | null = isMulti\n ? workflowList.find((w) => w.id === selectedId) ?? null\n : (props as SingleWorkflowProps).workflow ?? null;\n\n const inputs = activeWorkflow?.inputs;\n const hasSchema = !!inputs && Object.keys(inputs).length > 0;\n\n // Reset form when modal opens or workflow changes\n React.useEffect(() => {\n if (open) {\n setJsonValue('{}');\n setJsonError(null);\n if (!isMulti) {\n setSelectedId(undefined);\n }\n if (inputs) {\n const defaults: Record<string, unknown> = {};\n for (const [key, schema] of Object.entries(inputs)) {\n if (schema.default !== undefined) {\n defaults[key] = schema.default;\n }\n }\n setFieldValues(defaults);\n } else {\n setFieldValues({});\n }\n }\n }, [open, activeWorkflow?.id, inputs, isMulti]);\n\n // Reset fields when selected workflow changes in multi mode\n React.useEffect(() => {\n if (!isMulti || !selectedId) {return;}\n setJsonValue('{}');\n setJsonError(null);\n if (inputs) {\n const defaults: Record<string, unknown> = {};\n for (const [key, schema] of Object.entries(inputs)) {\n if (schema.default !== undefined) {\n defaults[key] = schema.default;\n }\n }\n setFieldValues(defaults);\n } else {\n setFieldValues({});\n }\n }, [selectedId, inputs, isMulti]);\n\n const handleJsonChange = (e: React.ChangeEvent<HTMLTextAreaElement>) => {\n const val = e.target.value;\n setJsonValue(val);\n if (!val.trim() || val.trim() === '{}') {\n setJsonError(null);\n return;\n }\n try {\n JSON.parse(val);\n setJsonError(null);\n } catch {\n setJsonError('Invalid JSON');\n }\n };\n\n const handleRun = () => {\n if (!activeWorkflow) {return;}\n if (hasSchema) {\n onRun(activeWorkflow.id, fieldValues);\n } else {\n const trimmed = jsonValue.trim();\n if (!trimmed || trimmed === '{}') {\n onRun(activeWorkflow.id, {});\n return;\n }\n try {\n const parsed = JSON.parse(trimmed) as Record<string, unknown>;\n onRun(activeWorkflow.id, parsed);\n } catch {\n setJsonError('Invalid JSON');\n }\n }\n };\n\n const footer = (\n <UISpace style={{ justifyContent: 'flex-end' }}>\n <UIButton onClick={onClose} disabled={loading}>\n Cancel\n </UIButton>\n <UIButton\n variant=\"primary\"\n icon={<UIIcon name=\"PlayCircleOutlined\" />}\n loading={loading}\n disabled={!activeWorkflow || (!hasSchema && !!jsonError)}\n onClick={handleRun}\n >\n Run\n </UIButton>\n </UISpace>\n );\n\n const title = activeWorkflow\n ? `Run Workflow: ${activeWorkflow.name}`\n : 'Run Workflow';\n\n return (\n <UIModal\n open={open}\n title={\n <UISpace className=\"gap-item\">\n <UIIcon name=\"ThunderboltOutlined\" />\n <span>{title}</span>\n </UISpace>\n }\n onCancel={onClose}\n footer={footer}\n maskClosable={!loading}\n >\n {/* Workflow picker (multi mode only) */}\n {isMulti && (\n <div style={{ marginTop: 16 }}>\n <UITypographyText className=\"typo-label\" style={{ display: 'block', marginBottom: 8 }}>\n Select Workflow\n </UITypographyText>\n <UISelect\n style={{ width: '100%' }}\n placeholder=\"Choose a workflow...\"\n value={selectedId}\n onChange={(val) => setSelectedId(val as string)}\n showSearch\n options={workflowList.map((w) => ({\n label: w.name,\n value: w.id,\n description: w.description,\n }))}\n />\n </div>\n )}\n\n {/* Input form (shown when workflow is selected) */}\n {activeWorkflow && hasSchema && (\n <div style={{ marginTop: 16 }}>\n {Object.entries(inputs!).map(([key, schema]) => (\n <DynamicField\n key={key}\n name={key}\n schema={schema}\n value={fieldValues[key]}\n onChange={(val) => setFieldValues((prev) => ({ ...prev, [key]: val }))}\n />\n ))}\n </div>\n )}\n\n {activeWorkflow && !hasSchema && (\n <div style={{ marginTop: 16 }}>\n <UITypographyText className=\"typo-label\" style={{ display: 'block', marginBottom: 8 }}>\n Input payload (JSON)\n </UITypographyText>\n <UIInputTextArea\n value={jsonValue}\n onChange={handleJsonChange}\n rows={6}\n placeholder=\"{}\"\n style={{ fontFamily: 'var(--font-mono, monospace)', fontSize: 13 }}\n status={jsonError ? 'error' : undefined}\n />\n {jsonError && (\n <UITypographyText className=\"typo-caption text-error\" style={{ display: 'block', marginTop: 4 }}>\n {jsonError}\n </UITypographyText>\n )}\n <UITypographyText className=\"typo-caption text-tertiary\" style={{ display: 'block', marginTop: 8 }}>\n Leave empty or <code>{'{}'}</code> to run without parameters\n </UITypographyText>\n </div>\n )}\n </UIModal>\n );\n}\n","/**\n * @module @kb-labs/studio-app/modules/workflows/pages/workflows-definitions-page\n * Workflow definitions list - standalone page\n */\n\nimport * as React from 'react';\nimport { useNavigate } from 'react-router-dom';\nimport {\n UITable,\n UITag,\n UISpace,\n UITypographyText,\n UIButton,\n UIIcon,\n useUIMessage,\n} from '@kb-labs/sdk/studio';\nimport { useData, useMutateData } from '@kb-labs/sdk/studio';\nimport type { WorkflowInfo } from '@kb-labs/workflow-contracts';\nimport { UICard } from '@kb-labs/sdk/studio';\nimport { RunWorkflowModal } from '../components/RunWorkflowModal';\nimport { UIPage, UIPageHeader } from '@kb-labs/sdk/studio';\n\nexport default function WorkflowsDefinitions() {\n const navigate = useNavigate();\n const [messageApi, contextHolder] = useUIMessage();\n const [runModalWorkflow, setRunModalWorkflow] = React.useState<WorkflowInfo | null>(null);\n\n const { data: workflowsData, isLoading } = useData<{ workflows: WorkflowInfo[] }>('/exec/api/v1/workflows', {\n params: { limit: 100 },\n });\n\n const runWorkflowMutation = useMutateData<\n { workflowId: string; input: Record<string, unknown> },\n { runId: string; status: string }\n >(\n (p) => `/exec/api/v1/workflows/${encodeURIComponent(p.workflowId)}/runs`,\n { mapBody: (p) => ({ inputs: p.input }) },\n );\n\n const columns = [\n {\n title: 'Workflow',\n dataIndex: 'name',\n key: 'name',\n width: 280,\n render: (name: string, record: WorkflowInfo) => (\n <div style={{ width: '100%', overflow: 'hidden' }}>\n <UITypographyText className=\"typo-body\" strong style={{ display: 'block' }}>{name}</UITypographyText>\n {record.description && (\n <UITypographyText\n className=\"typo-description text-secondary\"\n ellipsis={{ tooltip: record.description }}\n style={{ display: 'block' }}\n >\n {record.description}\n </UITypographyText>\n )}\n </div>\n ),\n },\n {\n title: 'ID',\n dataIndex: 'id',\n key: 'id',\n width: 220,\n render: (id: string) => (\n <UITypographyText className=\"typo-caption text-tertiary\" code ellipsis={{ tooltip: id }}>{id}</UITypographyText>\n ),\n },\n {\n title: 'Source',\n dataIndex: 'source',\n key: 'source',\n width: 120,\n render: (source: 'manifest' | 'standalone') => (\n <UITag color={source === 'manifest' ? 'blue' : 'green'}>\n {source === 'manifest' ? 'Plugin' : 'Standalone'}\n </UITag>\n ),\n },\n {\n title: 'Plugin',\n dataIndex: 'pluginId',\n key: 'pluginId',\n width: 200,\n render: (pluginId?: string) => (\n pluginId ? (\n <UITypographyText className=\"typo-caption\">{pluginId}</UITypographyText>\n ) : (\n <UITypographyText className=\"typo-caption text-tertiary\">-</UITypographyText>\n )\n ),\n },\n {\n title: 'Version',\n dataIndex: 'version',\n key: 'version',\n width: 100,\n render: (version?: string, record?: WorkflowInfo) => {\n if (!version) {return <UITypographyText className=\"typo-caption text-tertiary\">-</UITypographyText>;}\n const tooltip = record?.updatedAt\n ? `Updated ${new Date(record.updatedAt).toLocaleString()}`\n : undefined;\n return (\n <UITypographyText className=\"typo-caption\" code title={tooltip}>\n v{version}\n </UITypographyText>\n );\n },\n },\n {\n title: 'Status',\n dataIndex: 'status',\n key: 'status',\n width: 100,\n render: (status?: 'active' | 'inactive') => {\n if (!status) {return <UITypographyText className=\"typo-caption text-tertiary\">-</UITypographyText>;}\n return (\n <UITag color={status === 'active' ? 'success' : 'default'}>\n {status.toUpperCase()}\n </UITag>\n );\n },\n },\n {\n title: 'Actions',\n key: 'actions',\n width: 160,\n fixed: 'right' as const,\n render: (_: unknown, record: WorkflowInfo) => (\n <UISpace className=\"gap-tight\">\n <UIButton\n variant=\"link\"\n size=\"small\"\n icon={<UIIcon name=\"EyeOutlined\" />}\n onClick={(e) => {\n e.stopPropagation();\n navigate(`/p/workflows/definitions/${encodeURIComponent(record.id)}`);\n }}\n >\n View\n </UIButton>\n <UIButton\n variant=\"link\"\n size=\"small\"\n icon={<UIIcon name=\"PlayCircleOutlined\" />}\n onClick={(e) => {\n e.stopPropagation();\n setRunModalWorkflow(record);\n }}\n >\n Run\n </UIButton>\n </UISpace>\n ),\n },\n ];\n\n return (\n <UIPage width=\"full\">\n {contextHolder}\n <UIPageHeader\n title=\"Workflow Definitions\"\n description=\"All registered workflow definitions\"\n breadcrumbs={[\n { title: 'Home', href: '/' },\n { title: 'Workflows', href: '/workflows' },\n { title: 'Definitions' },\n ]}\n />\n\n <UICard>\n <UITable\n dataSource={workflowsData?.workflows || []}\n columns={columns}\n loading={isLoading}\n rowKey=\"id\"\n scroll={{ x: 1210 }}\n pagination={{ pageSize: 20 }}\n onRow={(record: WorkflowInfo) => ({\n style: { cursor: 'pointer' },\n onClick: () => navigate(`/p/workflows/definitions/${encodeURIComponent(record.id)}`),\n })}\n />\n </UICard>\n\n <RunWorkflowModal\n open={!!runModalWorkflow}\n workflow={runModalWorkflow}\n loading={runWorkflowMutation.isLoading}\n onClose={() => setRunModalWorkflow(null)}\n onRun={(workflowId, input) => {\n runWorkflowMutation.mutate({ workflowId, input }, {\n onSuccess: (data) => {\n setRunModalWorkflow(null);\n navigate(`/p/workflows/runs/${data.runId}`);\n },\n onError: (err) => {\n messageApi.error(`Failed to start workflow \"${workflowId}\": ${err.message}`);\n },\n });\n }}\n />\n </UIPage>\n );\n}\n"],"names":["Symbol","r","DynamicField","param","_schema_default","name","schema","value","onChange","label","UISpace","UITypographyText","UISwitch","undefined","Boolean","UIInputNumber","String","UIInput","onChange1","val","RunWorkflowModal","props","_workflowList_find","_props_workflow","open","onClose","onRun","loading","isMulti","Array","workflowList","_React_useState","selectedId","setSelectedId","_React_useState1","jsonValue","setJsonValue","_React_useState2","jsonError","setJsonError","_React_useState3","fieldValues","setFieldValues","activeWorkflow","w","inputs","hasSchema","Object","React","defaults","_iteratorError","key","footer","UIButton","UIIcon","trimmed","parsed","JSON","title","UIModal","UISelect","prev","UIInputTextArea","e","WorkflowsDefinitions","navigate","useNavigate","_useUIMessage","messageApi","contextHolder","runModalWorkflow","setRunModalWorkflow","_useData","workflowsData","isLoading","runWorkflowMutation","useMutateData","p","encodeURIComponent","mapBody","columns","render","record","id","source","UITag","pluginId","version","tooltip","Date","status","_","onClick","UIPage","UIPageHeader","UICard","UITable","onRow","workflowId","input","onSuccess","data","onError","err"],"mappings":"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"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"__federation_expose_Jobs.js","sources":["webpack://@kb-labs/workflow-entry/../../../node_modules/.pnpm/react@19.2.5/node_modules/react/cjs/react-jsx-runtime.production.js","webpack://@kb-labs/workflow-entry/../../../node_modules/.pnpm/react@19.2.5/node_modules/react/jsx-runtime.js","webpack://@kb-labs/workflow-entry/./src/studio/pages/WorkflowsJobs.tsx"],"sourcesContent":["/**\n * @license React\n * react-jsx-runtime.production.js\n *\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n\"use strict\";\nvar REACT_ELEMENT_TYPE = Symbol.for(\"react.transitional.element\"),\n REACT_FRAGMENT_TYPE = Symbol.for(\"react.fragment\");\nfunction jsxProd(type, config, maybeKey) {\n var key = null;\n void 0 !== maybeKey && (key = \"\" + maybeKey);\n void 0 !== config.key && (key = \"\" + config.key);\n if (\"key\" in config) {\n maybeKey = {};\n for (var propName in config)\n \"key\" !== propName && (maybeKey[propName] = config[propName]);\n } else maybeKey = config;\n config = maybeKey.ref;\n return {\n $$typeof: REACT_ELEMENT_TYPE,\n type: type,\n key: key,\n ref: void 0 !== config ? config : null,\n props: maybeKey\n };\n}\nexports.Fragment = REACT_FRAGMENT_TYPE;\nexports.jsx = jsxProd;\nexports.jsxs = jsxProd;\n","'use strict';\n\nif (process.env.NODE_ENV === 'production') {\n module.exports = require('./cjs/react-jsx-runtime.production.js');\n} else {\n module.exports = require('./cjs/react-jsx-runtime.development.js');\n}\n","/**\n * @module @kb-labs/studio-app/modules/workflows/pages/workflows-jobs-page\n * Background jobs list - standalone page\n */\n\nimport * as React from 'react';\nimport {\n UITable,\n UITag,\n UISpace,\n UITypographyText,\n UISelect,\n UIRow,\n UICol,\n} from '@kb-labs/sdk/studio';\nimport { useData } from '@kb-labs/sdk/studio';\nimport type { JobStatusInfo, JobListFilter } from '@kb-labs/workflow-contracts';\nimport { UICard } from '@kb-labs/sdk/studio';\nimport { UIPage, UIPageHeader } from '@kb-labs/sdk/studio';\n\nconst STATUS_COLORS: Record<string, string> = {\n pending: 'default',\n running: 'processing',\n completed: 'success',\n failed: 'error',\n cancelled: 'warning',\n};\n\nexport default function WorkflowsJobs() {\n const [filters, setFilters] = React.useState<JobListFilter>({ limit: 50 });\n\n const { data: jobsData, isLoading } = useData<{ jobs: JobStatusInfo[] }>('/exec/api/v1/jobs', {\n params: filters as Record<string, string | number | boolean>,\n });\n\n const formatDate = (date?: Date | string) => {\n if (!date) {return '-';}\n return new Date(date).toLocaleString();\n };\n\n const formatDuration = (start?: Date | string, end?: Date | string) => {\n if (!start) {return '-';}\n const startMs = new Date(start).getTime();\n const endMs = end ? new Date(end).getTime() : Date.now();\n const durationMs = endMs - startMs;\n const seconds = Math.floor(durationMs / 1000);\n if (seconds < 60) {return `${seconds}s`;}\n const minutes = Math.floor(seconds / 60);\n if (minutes < 60) {return `${minutes}m ${seconds % 60}s`;}\n const hours = Math.floor(minutes / 60);\n return `${hours}h ${minutes % 60}m`;\n };\n\n const columns = [\n {\n title: 'Job ID',\n dataIndex: 'id',\n key: 'id',\n width: 180,\n render: (id: string) => (\n <UITypographyText className=\"typo-caption\" code ellipsis={{ tooltip: id }} style={{ whiteSpace: 'nowrap' }}>{id.slice(0, 16)}...</UITypographyText>\n ),\n },\n {\n title: 'Type',\n dataIndex: 'type',\n key: 'type',\n width: 260,\n render: (type: string) => (\n <UITypographyText className=\"typo-body\" ellipsis={{ tooltip: type }} style={{ display: 'block' }}>{type}</UITypographyText>\n ),\n },\n {\n title: 'Status',\n dataIndex: 'status',\n key: 'status',\n width: 130,\n render: (status: string, record: JobStatusInfo) => (\n <UISpace direction=\"vertical\" className=\"gap-tight\">\n <UITag color={STATUS_COLORS[status] || 'default'}>\n {status.toUpperCase()}\n </UITag>\n {record.progress !== undefined && status === 'running' && (\n <UITypographyText className=\"typo-caption text-secondary\">\n {record.progress}%{record.progressMessage && ` · ${record.progressMessage}`}\n </UITypographyText>\n )}\n </UISpace>\n ),\n },\n {\n title: 'Created',\n dataIndex: 'createdAt',\n key: 'createdAt',\n width: 220,\n render: (date: Date | string | undefined) => (\n <UITypographyText className=\"typo-caption\" style={{ whiteSpace: 'nowrap' }}>{formatDate(date)}</UITypographyText>\n ),\n },\n {\n title: 'Duration',\n key: 'duration',\n width: 100,\n render: (_: unknown, record: JobStatusInfo) => (\n <UITypographyText className=\"typo-caption\">\n {formatDuration(record.startedAt, record.finishedAt)}\n </UITypographyText>\n ),\n },\n {\n title: 'Attempts',\n key: 'attempts',\n width: 90,\n render: (_: unknown, record: JobStatusInfo) => (\n <UITypographyText className=\"typo-caption\">\n {record.attempt || 0} / {record.maxRetries || 3}\n </UITypographyText>\n ),\n },\n {\n title: 'Error',\n dataIndex: 'error',\n key: 'error',\n width: 260,\n render: (error?: string) => (\n error ? (\n <UITypographyText className=\"typo-caption text-error\" ellipsis={{ tooltip: error }} style={{ display: 'block' }}>\n {error}\n </UITypographyText>\n ) : (\n <UITypographyText className=\"typo-caption text-tertiary\">-</UITypographyText>\n )\n ),\n },\n ];\n\n return (\n <UIPage width=\"full\">\n <UIPageHeader\n title=\"Background Jobs\"\n description=\"Monitor background job execution and status\"\n breadcrumbs={[\n { title: 'Home', href: '/' },\n { title: 'Workflows', href: '/workflows' },\n { title: 'Jobs' },\n ]}\n />\n\n <UICard style={{ marginBottom: 'var(--spacing-section)' }}>\n <UIRow gutter={16}>\n <UICol span={8}>\n <UITypographyText className=\"typo-label\">Filter by Status</UITypographyText>\n <UISelect\n style={{ width: '100%', marginTop: 8 }}\n placeholder=\"All statuses\"\n allowClear\n value={filters.status}\n onChange={(status) => setFilters({ ...filters, status: status as typeof filters.status })}\n options={[\n { label: 'Pending', value: 'pending' },\n { label: 'Running', value: 'running' },\n { label: 'Completed', value: 'completed' },\n { label: 'Failed', value: 'failed' },\n { label: 'Cancelled', value: 'cancelled' },\n ]}\n />\n </UICol>\n <UICol span={8}>\n <UITypographyText className=\"typo-label\">Filter by Type</UITypographyText>\n <UISelect\n style={{ width: '100%', marginTop: 8 }}\n placeholder=\"All types\"\n allowClear\n showSearch\n value={filters.type}\n onChange={(type) => setFilters({ ...filters, type: type as string | undefined })}\n options={[]}\n />\n </UICol>\n <UICol span={8}>\n <UITypographyText className=\"typo-label\">Limit</UITypographyText>\n <UISelect\n style={{ width: '100%', marginTop: 8 }}\n value={filters.limit || 50}\n onChange={(limit) => setFilters({ ...filters, limit: limit as number })}\n options={[\n { label: '25', value: 25 },\n { label: '50', value: 50 },\n { label: '100', value: 100 },\n { label: '200', value: 200 },\n ]}\n />\n </UICol>\n </UIRow>\n </UICard>\n\n <UICard>\n <UITable\n dataSource={jobsData?.jobs || []}\n columns={columns}\n loading={isLoading}\n rowKey=\"id\"\n scroll={{ x: 1240 }}\n pagination={{ pageSize: 20 }}\n />\n </UICard>\n </UIPage>\n );\n}\n"],"names":["Symbol","r","STATUS_COLORS","WorkflowsJobs","_React_useState","filters","setFilters","_useData","jobsData","isLoading","formatDuration","start","end","startMs","Date","seconds","Math","durationMs","endMs","minutes","hours","columns","render","id","UITypographyText","type","status","record","UISpace","UITag","undefined","date","_","error","UIPage","UIPageHeader","UICard","UIRow","UICol","UISelect","onChange","limit","UITable"],"mappings":"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"}