@hotmeshio/long-tail 0.1.3 → 0.1.5
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.
- package/README.md +118 -173
- package/build/examples/seed.js +1 -1
- package/build/examples/workflows/basic-echo/activities.d.ts +2 -2
- package/build/examples/workflows/basic-echo/activities.js +7 -7
- package/build/examples/workflows/basic-echo/index.js +1 -1
- package/build/examples/workflows/kitchen-sink/index.js +2 -2
- package/build/index.d.ts +12 -10
- package/build/index.js +15 -12
- package/build/lib/db/index.d.ts +18 -0
- package/build/{services → lib}/db/index.js +9 -0
- package/build/{services → lib}/db/migrate.js +3 -3
- package/build/{services → lib}/telemetry/honeycomb.d.ts +2 -2
- package/build/{services → lib}/telemetry/honeycomb.js +2 -2
- package/build/modules/defaults.d.ts +2 -0
- package/build/modules/defaults.js +3 -1
- package/build/routes/controlplane.js +1 -1
- package/build/routes/dba.js +4 -0
- package/build/routes/docs.d.ts +2 -0
- package/build/routes/docs.js +87 -0
- package/build/routes/escalations/bulk.js +120 -202
- package/build/routes/escalations/resolve.js +1 -1
- package/build/routes/escalations/single.js +1 -1
- package/build/routes/files.js +1 -1
- package/build/routes/index.js +2 -0
- package/build/routes/insight.js +2 -1
- package/build/routes/mcp.js +3 -2
- package/build/routes/oauth.js +1 -1
- package/build/routes/settings.js +4 -4
- package/build/routes/workflows/discovery.js +3 -3
- package/build/routes/workflows/invocation.js +1 -1
- package/build/routes/yaml-workflows/crud.js +1 -1
- package/build/routes/yaml-workflows/deployment.js +25 -0
- package/build/services/auth/bot-api-key.js +1 -1
- package/build/services/auth/index.d.ts +4 -0
- package/build/services/auth/index.js +17 -0
- package/build/services/auth/service-token.js +1 -1
- package/build/services/config/provider.js +1 -1
- package/build/services/config/read.js +1 -1
- package/build/services/config/write.js +1 -1
- package/build/services/controlplane/index.js +3 -4
- package/build/services/controlplane/quorum-bridge.js +2 -2
- package/build/services/cron/index.js +4 -5
- package/build/services/dba.d.ts +4 -0
- package/build/services/dba.js +3 -6
- package/build/services/escalation/bulk.js +1 -1
- package/build/services/escalation/crud.js +1 -1
- package/build/services/escalation/queries.js +1 -1
- package/build/services/export/client.js +2 -5
- package/build/services/export/index.js +14 -2
- package/build/services/hotmesh-utils.js +1 -1
- package/build/services/iam/bots.js +6 -12
- package/build/services/iam/context.d.ts +1 -1
- package/build/services/iam/context.js +5 -5
- package/build/services/iam/credentials.js +1 -1
- package/build/services/iam/ephemeral.js +8 -15
- package/build/services/iam/principal.js +3 -10
- package/build/services/iam/resolve.js +1 -1
- package/build/services/iam/sql.d.ts +10 -0
- package/build/services/iam/sql.js +42 -0
- package/build/services/insight/index.d.ts +1 -0
- package/build/services/insight/index.js +4 -6
- package/build/services/interceptor/activities/escalation.js +1 -1
- package/build/services/interceptor/activities/task.js +9 -6
- package/build/services/interceptor/activities/workflow.js +4 -5
- package/build/services/interceptor/activity-interceptor.d.ts +1 -1
- package/build/services/interceptor/activity-interceptor.js +5 -5
- package/build/services/interceptor/completion.js +1 -1
- package/build/services/interceptor/escalation.js +1 -1
- package/build/services/interceptor/index.js +4 -4
- package/build/services/interceptor/lifecycle.js +1 -1
- package/build/services/maintenance/index.js +4 -5
- package/build/services/mcp/adapter.js +1 -16
- package/build/services/mcp/client/connection.d.ts +1 -1
- package/build/services/mcp/client/connection.js +2 -2
- package/build/services/mcp/client/tools.js +1 -1
- package/build/services/mcp/db-server/index.js +1 -1
- package/build/services/mcp/db-server/tools.js +17 -4
- package/build/services/mcp/db.js +1 -1
- package/build/services/mcp/playwright-server/index.js +1 -1
- package/build/services/mcp/playwright-server/lifecycle.js +1 -1
- package/build/services/mcp/playwright-server/schemas.d.ts +2 -2
- package/build/services/mcp/playwright-server/tools.js +1 -1
- package/build/services/mcp/register-tool.d.ts +11 -0
- package/build/services/mcp/register-tool.js +15 -0
- package/build/services/mcp/server.js +1 -1
- package/build/services/mcp/sql.d.ts +6 -0
- package/build/services/mcp/sql.js +34 -1
- package/build/services/mcp/workflow-compiler-server.js +1 -1
- package/build/services/mcp/workflow-server.js +1 -1
- package/build/services/mcp-runs/execution-builder.js +8 -6
- package/build/services/mcp-runs/queries.js +2 -2
- package/build/services/mcp-runs/sql.d.ts +4 -1
- package/build/services/mcp-runs/sql.js +23 -2
- package/build/services/namespace/index.js +1 -1
- package/build/services/oauth/db.js +9 -37
- package/build/services/oauth/index.js +1 -1
- package/build/services/oauth/providers/registry.js +1 -1
- package/build/services/oauth/sql.d.ts +7 -0
- package/build/services/oauth/sql.js +32 -0
- package/build/services/orchestrator/index.js +3 -3
- package/build/services/role/index.js +1 -1
- package/build/services/task/crud.js +1 -1
- package/build/services/task/process.js +1 -1
- package/build/services/task/resolve.js +1 -1
- package/build/services/user/auth.js +1 -1
- package/build/services/user/crud.js +1 -1
- package/build/services/user/rbac.js +1 -1
- package/build/services/user/roles.js +1 -1
- package/build/services/user/sql.d.ts +2 -0
- package/build/services/user/sql.js +3 -1
- package/build/services/yaml-workflow/db-utils.js +1 -1
- package/build/services/yaml-workflow/db.js +1 -1
- package/build/services/yaml-workflow/deployer-helpers.js +1 -1
- package/build/services/yaml-workflow/deployer.js +4 -4
- package/build/services/yaml-workflow/generator.js +1 -1
- package/build/services/yaml-workflow/input-analyzer-helpers.d.ts +6 -0
- package/build/services/yaml-workflow/input-analyzer-helpers.js +36 -7
- package/build/services/yaml-workflow/input-analyzer.js +16 -3
- package/build/services/yaml-workflow/pipeline/analyze.js +1 -1
- package/build/services/yaml-workflow/pipeline/build/dag.js +10 -5
- package/build/services/yaml-workflow/pipeline/compile/llm-call.js +1 -1
- package/build/services/yaml-workflow/pipeline/extract.js +5 -3
- package/build/services/yaml-workflow/pipeline/index.d.ts +5 -0
- package/build/services/yaml-workflow/pipeline/index.js +22 -0
- package/build/services/yaml-workflow/pipeline/validate.js +2 -2
- package/build/services/yaml-workflow/workers/callbacks.js +1 -1
- package/build/services/yaml-workflow/workers/events.js +2 -2
- package/build/services/yaml-workflow/workers/register.js +8 -8
- package/build/start/adapters.js +7 -7
- package/build/start/index.js +4 -4
- package/build/start/server.js +1 -1
- package/build/start/workers.d.ts +1 -2
- package/build/start/workers.js +8 -7
- package/build/system/activities/claude-code.js +1 -1
- package/build/system/activities/file-storage.js +1 -1
- package/build/system/activities/knowledge.d.ts +58 -0
- package/build/system/activities/knowledge.js +128 -0
- package/build/system/activities/sql.d.ts +9 -0
- package/build/system/activities/sql.js +41 -0
- package/build/system/activities/triage/context.js +1 -1
- package/build/system/activities/triage/discovery.d.ts +2 -14
- package/build/system/activities/triage/discovery.js +5 -161
- package/build/system/activities/triage/llm.d.ts +1 -8
- package/build/system/activities/triage/llm.js +2 -28
- package/build/system/activities/triage/tools.d.ts +1 -17
- package/build/system/activities/triage/tools.js +8 -167
- package/build/system/index.js +5 -4
- package/build/system/mcp-servers/admin/escalations.d.ts +5 -0
- package/build/system/mcp-servers/admin/escalations.js +149 -0
- package/build/system/mcp-servers/admin/index.d.ts +31 -0
- package/build/system/mcp-servers/admin/index.js +80 -0
- package/build/system/mcp-servers/admin/maintenance.d.ts +5 -0
- package/build/system/mcp-servers/admin/maintenance.js +58 -0
- package/build/system/mcp-servers/admin/mcp-servers.d.ts +5 -0
- package/build/system/mcp-servers/admin/mcp-servers.js +146 -0
- package/build/system/mcp-servers/admin/schemas.d.ts +411 -0
- package/build/system/mcp-servers/admin/schemas.js +177 -0
- package/build/system/mcp-servers/admin/tasks.d.ts +5 -0
- package/build/system/mcp-servers/admin/tasks.js +112 -0
- package/build/system/mcp-servers/admin/users.d.ts +5 -0
- package/build/system/mcp-servers/admin/users.js +167 -0
- package/build/system/mcp-servers/admin/workflow-config.d.ts +9 -0
- package/build/system/mcp-servers/admin/workflow-config.js +118 -0
- package/build/system/mcp-servers/admin/workflows.d.ts +6 -0
- package/build/system/mcp-servers/admin/workflows.js +138 -0
- package/build/system/mcp-servers/admin/yaml-workflows.d.ts +8 -0
- package/build/system/mcp-servers/admin/yaml-workflows.js +237 -0
- package/build/system/mcp-servers/claude-code.js +1 -1
- package/build/system/mcp-servers/db-query/index.js +1 -1
- package/build/system/mcp-servers/db-query/tools.js +17 -4
- package/build/system/mcp-servers/docs.d.ts +5 -0
- package/build/system/mcp-servers/docs.js +147 -0
- package/build/system/mcp-servers/file-storage.js +1 -1
- package/build/system/mcp-servers/http-fetch.js +1 -1
- package/build/system/mcp-servers/human-queue.js +1 -1
- package/build/system/mcp-servers/knowledge.d.ts +4 -0
- package/build/system/mcp-servers/knowledge.js +137 -0
- package/build/system/mcp-servers/oauth.js +1 -1
- package/build/system/mcp-servers/playwright/browser-lifecycle.js +1 -1
- package/build/system/mcp-servers/playwright/index.js +1 -1
- package/build/system/mcp-servers/playwright/schemas.d.ts +19 -8
- package/build/system/mcp-servers/playwright/schemas.js +3 -0
- package/build/system/mcp-servers/playwright/tools-navigation.js +22 -9
- package/build/system/mcp-servers/playwright/tools-run-script.js +20 -3
- package/build/system/mcp-servers/playwright/vision-helper.d.ts +12 -0
- package/build/system/mcp-servers/playwright/vision-helper.js +81 -0
- package/build/system/mcp-servers/playwright-cli/helpers.js +2 -2
- package/build/system/mcp-servers/playwright-cli/index.js +1 -1
- package/build/system/mcp-servers/playwright-cli/schemas.d.ts +28 -28
- package/build/system/mcp-servers/playwright-cli/schemas.js +1 -1
- package/build/system/mcp-servers/playwright-cli/tools-auth.js +1 -1
- package/build/system/mcp-servers/playwright-cli/tools-capture.js +4 -2
- package/build/system/mcp-servers/translation.d.ts +14 -0
- package/build/system/mcp-servers/translation.js +130 -0
- package/build/system/mcp-servers/vision-prompts.d.ts +2 -0
- package/build/system/mcp-servers/vision-prompts.js +9 -0
- package/build/system/mcp-servers/{document-vision.d.ts → vision.d.ts} +3 -4
- package/build/system/mcp-servers/vision.js +221 -0
- package/build/system/mcp-servers/workflow-compiler.js +1 -1
- package/build/system/mcp-servers/workflow.js +1 -1
- package/build/system/seed/index.js +13 -2
- package/build/system/seed/server-definitions.d.ts +1954 -322
- package/build/system/seed/server-definitions.js +65 -34
- package/build/system/seed/tool-manifests-admin.d.ts +1645 -0
- package/build/system/seed/tool-manifests-admin.js +45 -0
- package/build/system/seed/tool-manifests-browser.d.ts +1 -1
- package/build/system/seed/tool-manifests-browser.js +3 -3
- package/build/system/seed/tool-manifests-data.d.ts +62 -21
- package/build/system/seed/tool-manifests-data.js +55 -17
- package/build/system/seed/tool-manifests-knowledge.d.ts +171 -0
- package/build/system/seed/tool-manifests-knowledge.js +94 -0
- package/build/system/workflows/mcp-deterministic/index.js +1 -1
- package/build/system/workflows/mcp-query/activities/discovery.d.ts +2 -20
- package/build/system/workflows/mcp-query/activities/discovery.js +5 -163
- package/build/system/workflows/mcp-query/activities/llm.d.ts +1 -7
- package/build/system/workflows/mcp-query/activities/llm.js +2 -27
- package/build/system/workflows/mcp-query/activities/tool-executor.d.ts +0 -4
- package/build/system/workflows/mcp-query/activities/tool-executor.js +2 -106
- package/build/system/workflows/mcp-query/activities/tool-loader.d.ts +0 -9
- package/build/system/workflows/mcp-query/activities/tool-loader.js +2 -87
- package/build/system/workflows/mcp-query/index.js +55 -5
- package/build/system/workflows/mcp-query/prompts.d.ts +1 -2
- package/build/system/workflows/mcp-query/prompts.js +5 -32
- package/build/system/workflows/mcp-query/strategy-advisors.d.ts +3 -14
- package/build/system/workflows/mcp-query/strategy-advisors.js +4 -107
- package/build/system/workflows/mcp-query/types.d.ts +2 -10
- package/build/system/workflows/mcp-query/types.js +0 -1
- package/build/system/workflows/mcp-query-router/index.js +1 -1
- package/build/system/workflows/mcp-triage/index.d.ts +2 -2
- package/build/system/workflows/mcp-triage/index.js +39 -7
- package/build/system/workflows/mcp-triage/prompts.js +7 -14
- package/build/system/workflows/mcp-triage-deterministic/index.js +1 -1
- package/build/system/workflows/mcp-triage-router/index.js +1 -1
- package/build/system/workflows/shared/discovery.d.ts +35 -0
- package/build/system/workflows/shared/discovery.js +175 -0
- package/build/system/workflows/shared/index.d.ts +7 -0
- package/build/system/workflows/shared/index.js +18 -0
- package/build/system/workflows/shared/llm-caller.d.ts +8 -0
- package/build/system/workflows/shared/llm-caller.js +31 -0
- package/build/system/workflows/shared/prompts.d.ts +2 -0
- package/build/system/workflows/shared/prompts.js +32 -0
- package/build/system/workflows/shared/strategy-advisors.d.ts +14 -0
- package/build/system/workflows/shared/strategy-advisors.js +109 -0
- package/build/system/workflows/shared/tool-executor.d.ts +11 -0
- package/build/system/workflows/shared/tool-executor.js +111 -0
- package/build/system/workflows/shared/tool-loader.d.ts +19 -0
- package/build/system/workflows/shared/tool-loader.js +94 -0
- package/build/system/workflows/shared/types.d.ts +9 -0
- package/build/system/workflows/shared/types.js +2 -0
- package/build/system/workflows/tool-result-guard.d.ts +14 -0
- package/build/system/workflows/tool-result-guard.js +78 -0
- package/build/tsconfig.tsbuildinfo +1 -1
- package/build/types/user.d.ts +2 -0
- package/build/vitest.config.d.ts +1 -1
- package/build/vitest.integration.config.d.ts +1 -1
- package/build/workers/index.js +2 -8
- package/dashboard/dist/assets/AdminDashboard-CTyAMUJR.js +2 -0
- package/dashboard/dist/assets/AdminDashboard-CTyAMUJR.js.map +1 -0
- package/dashboard/dist/assets/AvailableEscalationsPage-BMXV3Q4l.js +2 -0
- package/dashboard/dist/assets/AvailableEscalationsPage-BMXV3Q4l.js.map +1 -0
- package/dashboard/dist/assets/BotPicker-C51nKFEu.js +2 -0
- package/dashboard/dist/assets/{BotPicker-D6FYW1Gt.js.map → BotPicker-C51nKFEu.js.map} +1 -1
- package/dashboard/dist/assets/CollapsibleSection-BSyfd8uL.js +2 -0
- package/dashboard/dist/assets/{CollapsibleSection-Cxk4wvjT.js.map → CollapsibleSection-BSyfd8uL.js.map} +1 -1
- package/dashboard/dist/assets/ConfirmDeleteModal-CBdhia5T.js +2 -0
- package/dashboard/dist/assets/{ConfirmDeleteModal-FSXyKjaB.js.map → ConfirmDeleteModal-CBdhia5T.js.map} +1 -1
- package/dashboard/dist/assets/CopyableId-dGlewBCS.js +2 -0
- package/dashboard/dist/assets/{CopyableId-CBdxWfp8.js.map → CopyableId-dGlewBCS.js.map} +1 -1
- package/dashboard/dist/assets/CredentialsPage-CoBNFSAu.js +2 -0
- package/dashboard/dist/assets/{CredentialsPage-Ikzsot0w.js.map → CredentialsPage-CoBNFSAu.js.map} +1 -1
- package/dashboard/dist/assets/CustomDurationPicker-BataWFj8.js +2 -0
- package/dashboard/dist/assets/{CustomDurationPicker-CAninCbl.js.map → CustomDurationPicker-BataWFj8.js.map} +1 -1
- package/dashboard/dist/assets/DataTable-B3uf5CCo.js +2 -0
- package/dashboard/dist/assets/DataTable-B3uf5CCo.js.map +1 -0
- package/dashboard/dist/assets/ElapsedCell-G5oSwTpT.js +2 -0
- package/dashboard/dist/assets/ElapsedCell-G5oSwTpT.js.map +1 -0
- package/dashboard/dist/assets/EmptyState-BChBJNGS.js +2 -0
- package/dashboard/dist/assets/{EmptyState-2CmV-IaS.js.map → EmptyState-BChBJNGS.js.map} +1 -1
- package/dashboard/dist/assets/EscalationsOverview-CxUv8xjG.js +2 -0
- package/dashboard/dist/assets/{EscalationsOverview-GXYFPASS.js.map → EscalationsOverview-CxUv8xjG.js.map} +1 -1
- package/dashboard/dist/assets/EventTable-CVt8B0BZ.js +2 -0
- package/dashboard/dist/assets/{EventTable-B01oJf6Y.js.map → EventTable-CVt8B0BZ.js.map} +1 -1
- package/dashboard/dist/assets/FilterBar-CShf0oe7.js +2 -0
- package/dashboard/dist/assets/{FilterBar-Ck4K4rzu.js.map → FilterBar-CShf0oe7.js.map} +1 -1
- package/dashboard/dist/assets/McpOverview-CbaZRnJl.js +2 -0
- package/dashboard/dist/assets/{McpOverview-JkvRcX2e.js.map → McpOverview-CbaZRnJl.js.map} +1 -1
- package/dashboard/dist/assets/McpQueryDetailPage-CGoR9XK6.js +5 -0
- package/dashboard/dist/assets/McpQueryDetailPage-CGoR9XK6.js.map +1 -0
- package/dashboard/dist/assets/McpQueryPage-BjXoYQuU.js +2 -0
- package/dashboard/dist/assets/McpQueryPage-BjXoYQuU.js.map +1 -0
- package/dashboard/dist/assets/McpRunDetailPage-DLkA5Aar.js +2 -0
- package/dashboard/dist/assets/McpRunDetailPage-DLkA5Aar.js.map +1 -0
- package/dashboard/dist/assets/McpRunsPage-DCh9n11D.js +2 -0
- package/dashboard/dist/assets/McpRunsPage-DCh9n11D.js.map +1 -0
- package/dashboard/dist/assets/Modal-CI5RBPOQ.js +2 -0
- package/dashboard/dist/assets/{Modal-B4rbIVAn.js.map → Modal-CI5RBPOQ.js.map} +1 -1
- package/dashboard/dist/assets/OperatorDashboard-Dc80suXd.js +2 -0
- package/dashboard/dist/assets/OperatorDashboard-Dc80suXd.js.map +1 -0
- package/dashboard/dist/assets/PageHeader-SMD9qtOO.js +2 -0
- package/dashboard/dist/assets/PageHeader-SMD9qtOO.js.map +1 -0
- package/dashboard/dist/assets/PageHeaderWithStats-TikLQsTp.js +2 -0
- package/dashboard/dist/assets/PageHeaderWithStats-TikLQsTp.js.map +1 -0
- package/dashboard/dist/assets/PriorityBadge-CQ0EsLTA.js +2 -0
- package/dashboard/dist/assets/{PriorityBadge-DfQY9St9.js.map → PriorityBadge-CQ0EsLTA.js.map} +1 -1
- package/dashboard/dist/assets/ProcessDetailPage-B2GKuGzk.js +2 -0
- package/dashboard/dist/assets/ProcessDetailPage-B2GKuGzk.js.map +1 -0
- package/dashboard/dist/assets/ProcessesListPage-CTjI3Wn6.js +2 -0
- package/dashboard/dist/assets/ProcessesListPage-CTjI3Wn6.js.map +1 -0
- package/dashboard/dist/assets/RefreshButton-BcQDObrv.js +2 -0
- package/dashboard/dist/assets/RefreshButton-BcQDObrv.js.map +1 -0
- package/dashboard/dist/assets/RolePill-Crj4TH5p.js +2 -0
- package/dashboard/dist/assets/{RolePill-BTPa8L-P.js.map → RolePill-Crj4TH5p.js.map} +1 -1
- package/dashboard/dist/assets/RolesPage-C_RInUwS.js +2 -0
- package/dashboard/dist/assets/RolesPage-C_RInUwS.js.map +1 -0
- package/dashboard/dist/assets/RowActions-Cp5HyK_w.js +2 -0
- package/dashboard/dist/assets/{RowActions-Dg-Fsm5O.js.map → RowActions-Cp5HyK_w.js.map} +1 -1
- package/dashboard/dist/assets/RunAsSelector-BhyWtofX.js +2 -0
- package/dashboard/dist/assets/RunAsSelector-BhyWtofX.js.map +1 -0
- package/dashboard/dist/assets/StatCard-BKZLSgNV.js +2 -0
- package/dashboard/dist/assets/{StatCard-DlgF0CJC.js.map → StatCard-BKZLSgNV.js.map} +1 -1
- package/dashboard/dist/assets/StatusBadge-BYNGGZK5.js +2 -0
- package/dashboard/dist/assets/StatusBadge-BYNGGZK5.js.map +1 -0
- package/dashboard/dist/assets/StickyPagination-CTosgiU2.js +2 -0
- package/dashboard/dist/assets/{StickyPagination-F9FZsRy9.js.map → StickyPagination-CTosgiU2.js.map} +1 -1
- package/dashboard/dist/assets/SwimlaneTimeline-ylG5Ps1s.js +2 -0
- package/dashboard/dist/assets/SwimlaneTimeline-ylG5Ps1s.js.map +1 -0
- package/dashboard/dist/assets/TaskDetailPage-C9pDGdD2.js +2 -0
- package/dashboard/dist/assets/TaskDetailPage-C9pDGdD2.js.map +1 -0
- package/dashboard/dist/assets/TaskQueuePill-BtJbZTT0.js +2 -0
- package/dashboard/dist/assets/{TaskQueuePill-awmtb0qw.js.map → TaskQueuePill-BtJbZTT0.js.map} +1 -1
- package/dashboard/dist/assets/TasksListPage-DtFLUEhg.js +2 -0
- package/dashboard/dist/assets/{TasksListPage-C_QF23c1.js.map → TasksListPage-DtFLUEhg.js.map} +1 -1
- package/dashboard/dist/assets/TimeAgo-WuM6xImZ.js +2 -0
- package/dashboard/dist/assets/TimeAgo-WuM6xImZ.js.map +1 -0
- package/dashboard/dist/assets/TimestampCell-IVL_-Upy.js +2 -0
- package/dashboard/dist/assets/TimestampCell-IVL_-Upy.js.map +1 -0
- package/dashboard/dist/assets/UserName-DU9qeg13.js +2 -0
- package/dashboard/dist/assets/{UserName-DaP4YAKr.js.map → UserName-DU9qeg13.js.map} +1 -1
- package/dashboard/dist/assets/WorkflowExecutionPage-DOocX81f.js +2 -0
- package/dashboard/dist/assets/WorkflowExecutionPage-DOocX81f.js.map +1 -0
- package/dashboard/dist/assets/WorkflowPill-Diw8iWBP.js +2 -0
- package/dashboard/dist/assets/WorkflowPill-Diw8iWBP.js.map +1 -0
- package/dashboard/dist/assets/WorkflowsDashboard-DDtUIrTy.js +2 -0
- package/dashboard/dist/assets/WorkflowsDashboard-DDtUIrTy.js.map +1 -0
- package/dashboard/dist/assets/WorkflowsOverview-CPuvA4t3.js +2 -0
- package/dashboard/dist/assets/{WorkflowsOverview-D9OzzQqw.js.map → WorkflowsOverview-CPuvA4t3.js.map} +1 -1
- package/dashboard/dist/assets/YamlWorkflowsPage-DlwwkluN.js +2 -0
- package/dashboard/dist/assets/YamlWorkflowsPage-DlwwkluN.js.map +1 -0
- package/dashboard/dist/assets/{bots-BkKVMbUW.js → bots-BPiZXf2h.js} +2 -2
- package/dashboard/dist/assets/{bots-BkKVMbUW.js.map → bots-BPiZXf2h.js.map} +1 -1
- package/dashboard/dist/assets/constants-BHkpVaqx.js +2 -0
- package/dashboard/dist/assets/constants-BHkpVaqx.js.map +1 -0
- package/dashboard/dist/assets/escalation-DTY_OKRh.js +2 -0
- package/dashboard/dist/assets/escalation-DTY_OKRh.js.map +1 -0
- package/dashboard/dist/assets/escalation-columns-C91fHSkp.js +2 -0
- package/dashboard/dist/assets/{escalation-columns-D6aqStaY.js.map → escalation-columns-C91fHSkp.js.map} +1 -1
- package/dashboard/dist/assets/helpers-DBUZ9pnG.js +2 -0
- package/dashboard/dist/assets/helpers-DBUZ9pnG.js.map +1 -0
- package/dashboard/dist/assets/index-BOeA-gfK.js +17 -0
- package/dashboard/dist/assets/{index-X85K5bHC.js.map → index-BOeA-gfK.js.map} +1 -1
- package/dashboard/dist/assets/index-BZ6K_kmL.js +3 -0
- package/dashboard/dist/assets/index-BZ6K_kmL.js.map +1 -0
- package/dashboard/dist/assets/index-Bpm0yeoi.js +2 -0
- package/dashboard/dist/assets/index-Bpm0yeoi.js.map +1 -0
- package/dashboard/dist/assets/index-BtOwLI0K.js +2 -0
- package/dashboard/dist/assets/{index-DTPzZr_X.js.map → index-BtOwLI0K.js.map} +1 -1
- package/dashboard/dist/assets/index-CBF3ZvRZ.js +6 -0
- package/dashboard/dist/assets/index-CBF3ZvRZ.js.map +1 -0
- package/dashboard/dist/assets/index-CDWOfCmi.js +2 -0
- package/dashboard/dist/assets/index-CDWOfCmi.js.map +1 -0
- package/dashboard/dist/assets/index-Ce6sL__n.js +2 -0
- package/dashboard/dist/assets/index-Ce6sL__n.js.map +1 -0
- package/dashboard/dist/assets/index-DSzSoku1.js +283 -0
- package/dashboard/dist/assets/index-DSzSoku1.js.map +1 -0
- package/dashboard/dist/assets/index-D_qEAYrg.js +2 -0
- package/dashboard/dist/assets/index-D_qEAYrg.js.map +1 -0
- package/dashboard/dist/assets/index-gCy9XX3W.css +1 -0
- package/dashboard/dist/assets/mcp-BzVpaaKF.js +2 -0
- package/dashboard/dist/assets/{mcp-blCW6IL7.js.map → mcp-BzVpaaKF.js.map} +1 -1
- package/dashboard/dist/assets/mcp-query-wTuxTTCV.js +2 -0
- package/dashboard/dist/assets/mcp-query-wTuxTTCV.js.map +1 -0
- package/dashboard/dist/assets/{mcp-runs-ChPbpvXK.js → mcp-runs-DmXYJD19.js} +2 -2
- package/dashboard/dist/assets/{mcp-runs-ChPbpvXK.js.map → mcp-runs-DmXYJD19.js.map} +1 -1
- package/dashboard/dist/assets/namespaces-DoGa7jc7.js +2 -0
- package/dashboard/dist/assets/{namespaces-BgbaC3ow.js.map → namespaces-DoGa7jc7.js.map} +1 -1
- package/dashboard/dist/assets/{roles-ZNrqqnQl.js → roles-wCdQ2Z7k.js} +2 -2
- package/dashboard/dist/assets/{roles-ZNrqqnQl.js.map → roles-wCdQ2Z7k.js.map} +1 -1
- package/dashboard/dist/assets/settings-DDe_L7JT.js +2 -0
- package/dashboard/dist/assets/{settings-eBRSE0mQ.js.map → settings-DDe_L7JT.js.map} +1 -1
- package/dashboard/dist/assets/tasks-3Hih8Bt7.js +2 -0
- package/dashboard/dist/assets/{tasks-tRqClPns.js.map → tasks-3Hih8Bt7.js.map} +1 -1
- package/dashboard/dist/assets/{useFilterParams-BaXUAkYK.js → useFilterParams-BUyLHcx_.js} +2 -2
- package/dashboard/dist/assets/{useFilterParams-BaXUAkYK.js.map → useFilterParams-BUyLHcx_.js.map} +1 -1
- package/dashboard/dist/assets/{useNatsEvents-Xr43X1fG.js → useNatsEvents-DeGKHFTX.js} +2 -2
- package/dashboard/dist/assets/{useNatsEvents-Xr43X1fG.js.map → useNatsEvents-DeGKHFTX.js.map} +1 -1
- package/dashboard/dist/assets/{useYamlActivityEvents-BO51u8tm.js → useYamlActivityEvents-B5dHec6Y.js} +2 -2
- package/dashboard/dist/assets/{useYamlActivityEvents-BO51u8tm.js.map → useYamlActivityEvents-B5dHec6Y.js.map} +1 -1
- package/dashboard/dist/assets/{users-tMvNyOo8.js → users-BTagPmGW.js} +2 -2
- package/dashboard/dist/assets/{users-tMvNyOo8.js.map → users-BTagPmGW.js.map} +1 -1
- package/dashboard/dist/assets/{vendor-icons-ZTAKVwGc.js → vendor-icons-DCLlGYO9.js} +112 -57
- package/dashboard/dist/assets/vendor-icons-DCLlGYO9.js.map +1 -0
- package/dashboard/dist/assets/vendor-query-DLp59M9_.js +35 -0
- package/dashboard/dist/assets/vendor-query-DLp59M9_.js.map +1 -0
- package/dashboard/dist/assets/vendor-react-Co3Y8ikm.js +26 -0
- package/dashboard/dist/assets/vendor-react-Co3Y8ikm.js.map +1 -0
- package/dashboard/dist/assets/{workflows-Cc4VHcrp.js → workflows-B20dR3NE.js} +2 -2
- package/dashboard/dist/assets/{workflows-Cc4VHcrp.js.map → workflows-B20dR3NE.js.map} +1 -1
- package/dashboard/dist/assets/yaml-workflows-CaLPMQha.js +2 -0
- package/dashboard/dist/assets/yaml-workflows-CaLPMQha.js.map +1 -0
- package/dashboard/dist/index.html +5 -5
- package/docs/api/dba.md +81 -0
- package/docs/api/escalations.md +575 -0
- package/docs/api/exports.md +170 -0
- package/docs/api/maintenance.md +93 -0
- package/docs/api/mcp-runs.md +128 -0
- package/docs/api/mcp-servers.md +195 -0
- package/docs/api/namespaces.md +48 -0
- package/docs/api/roles.md +390 -0
- package/docs/api/service-accounts.md +188 -0
- package/docs/api/settings.md +33 -0
- package/docs/api/tasks.md +167 -0
- package/docs/api/users.md +180 -0
- package/docs/api/workflows.md +616 -0
- package/docs/api/yaml-workflows.md +312 -0
- package/docs/architecture.md +221 -0
- package/docs/auth.md +181 -0
- package/docs/cloud.md +272 -0
- package/docs/compilation.md +136 -0
- package/docs/contributing.md +56 -0
- package/docs/dashboard.md +145 -0
- package/docs/data.md +478 -0
- package/docs/escalation-strategies.md +264 -0
- package/docs/events.md +251 -0
- package/docs/iam.md +222 -0
- package/docs/img/01-login.png +0 -0
- package/docs/img/02-dashboard-home.png +0 -0
- package/docs/img/03-processes-list.png +0 -0
- package/docs/img/04-escalations-list.png +0 -0
- package/docs/img/05-mcp-servers.png +0 -0
- package/docs/img/06-mcp-pipelines.png +0 -0
- package/docs/img/07-workflows-list.png +0 -0
- package/docs/img/compilation/01-query-submit.png +0 -0
- package/docs/img/compilation/02-mcp-servers.png +0 -0
- package/docs/img/compilation/03-query-completed.png +0 -0
- package/docs/img/compilation/04-wizard-original.png +0 -0
- package/docs/img/compilation/05-wizard-timeline.png +0 -0
- package/docs/img/compilation/06-wizard-profile.png +0 -0
- package/docs/img/compilation/07-wizard-deploy.png +0 -0
- package/docs/img/compilation/08-wizard-test-modal.png +0 -0
- package/docs/img/compilation/09-wizard-test-compare.png +0 -0
- package/docs/img/compilation/10-wizard-verify.png +0 -0
- package/docs/logging.md +110 -0
- package/docs/maintenance.md +221 -0
- package/docs/mcp.md +715 -0
- package/docs/oauth-and-delegation.md +469 -0
- package/docs/telemetry.md +144 -0
- package/docs/workflows.md +695 -0
- package/lib/db/schemas/015_knowledge.sql +23 -0
- package/package.json +8 -9
- package/build/services/db/index.d.ts +0 -3
- package/build/services/mcp/vision-server.d.ts +0 -15
- package/build/services/mcp/vision-server.js +0 -214
- package/build/system/mcp-servers/document-vision.js +0 -228
- package/build/system/mcp-servers/prompts.d.ts +0 -4
- package/build/system/mcp-servers/prompts.js +0 -10
- package/dashboard/dist/assets/AdminDashboard-jfacvOC7.js +0 -2
- package/dashboard/dist/assets/AdminDashboard-jfacvOC7.js.map +0 -1
- package/dashboard/dist/assets/AvailableEscalationsPage-BglLDoT8.js +0 -2
- package/dashboard/dist/assets/AvailableEscalationsPage-BglLDoT8.js.map +0 -1
- package/dashboard/dist/assets/BotPicker-D6FYW1Gt.js +0 -2
- package/dashboard/dist/assets/CollapsibleSection-Cxk4wvjT.js +0 -2
- package/dashboard/dist/assets/ConfirmDeleteModal-FSXyKjaB.js +0 -2
- package/dashboard/dist/assets/CopyableId-CBdxWfp8.js +0 -2
- package/dashboard/dist/assets/CredentialsPage-Ikzsot0w.js +0 -2
- package/dashboard/dist/assets/CustomDurationPicker-CAninCbl.js +0 -2
- package/dashboard/dist/assets/DataTable-BDn1WBHS.js +0 -2
- package/dashboard/dist/assets/DataTable-BDn1WBHS.js.map +0 -1
- package/dashboard/dist/assets/EmptyState-2CmV-IaS.js +0 -2
- package/dashboard/dist/assets/EscalationsOverview-GXYFPASS.js +0 -2
- package/dashboard/dist/assets/EventTable-B01oJf6Y.js +0 -2
- package/dashboard/dist/assets/Field-DuFBAYhu.js +0 -2
- package/dashboard/dist/assets/Field-DuFBAYhu.js.map +0 -1
- package/dashboard/dist/assets/FilterBar-Ck4K4rzu.js +0 -2
- package/dashboard/dist/assets/McpOverview-JkvRcX2e.js +0 -2
- package/dashboard/dist/assets/McpQueryDetailPage-CUMqhQdS.js +0 -2
- package/dashboard/dist/assets/McpQueryDetailPage-CUMqhQdS.js.map +0 -1
- package/dashboard/dist/assets/McpQueryPage-DRRhw4nN.js +0 -2
- package/dashboard/dist/assets/McpQueryPage-DRRhw4nN.js.map +0 -1
- package/dashboard/dist/assets/McpRunDetailPage-CmPs5EvE.js +0 -2
- package/dashboard/dist/assets/McpRunDetailPage-CmPs5EvE.js.map +0 -1
- package/dashboard/dist/assets/McpRunsPage-Dl5Y2u6k.js +0 -2
- package/dashboard/dist/assets/McpRunsPage-Dl5Y2u6k.js.map +0 -1
- package/dashboard/dist/assets/Modal-B4rbIVAn.js +0 -2
- package/dashboard/dist/assets/OperatorDashboard-B56il28q.js +0 -2
- package/dashboard/dist/assets/OperatorDashboard-B56il28q.js.map +0 -1
- package/dashboard/dist/assets/PageHeader-CpWFly5S.js +0 -2
- package/dashboard/dist/assets/PageHeader-CpWFly5S.js.map +0 -1
- package/dashboard/dist/assets/PriorityBadge-DfQY9St9.js +0 -2
- package/dashboard/dist/assets/ProcessDetailPage-CMLq4M7D.js +0 -2
- package/dashboard/dist/assets/ProcessDetailPage-CMLq4M7D.js.map +0 -1
- package/dashboard/dist/assets/ProcessesListPage-CZ_HF06v.js +0 -2
- package/dashboard/dist/assets/ProcessesListPage-CZ_HF06v.js.map +0 -1
- package/dashboard/dist/assets/RolePill-BTPa8L-P.js +0 -2
- package/dashboard/dist/assets/RolesPage-9grZW7yR.js +0 -2
- package/dashboard/dist/assets/RolesPage-9grZW7yR.js.map +0 -1
- package/dashboard/dist/assets/RowActions-Dg-Fsm5O.js +0 -2
- package/dashboard/dist/assets/SimpleMarkdown-CBlvaWP4.js +0 -4
- package/dashboard/dist/assets/SimpleMarkdown-CBlvaWP4.js.map +0 -1
- package/dashboard/dist/assets/StatCard-DlgF0CJC.js +0 -2
- package/dashboard/dist/assets/StatusBadge-TlC4jiig.js +0 -2
- package/dashboard/dist/assets/StatusBadge-TlC4jiig.js.map +0 -1
- package/dashboard/dist/assets/StickyPagination-F9FZsRy9.js +0 -2
- package/dashboard/dist/assets/SwimlaneTimeline-7SiwATsZ.js +0 -2
- package/dashboard/dist/assets/SwimlaneTimeline-7SiwATsZ.js.map +0 -1
- package/dashboard/dist/assets/TaskDetailPage-CbPVTakt.js +0 -2
- package/dashboard/dist/assets/TaskDetailPage-CbPVTakt.js.map +0 -1
- package/dashboard/dist/assets/TaskQueuePill-awmtb0qw.js +0 -2
- package/dashboard/dist/assets/TasksListPage-C_QF23c1.js +0 -2
- package/dashboard/dist/assets/TimeAgo-UPG6DoH8.js +0 -2
- package/dashboard/dist/assets/TimeAgo-UPG6DoH8.js.map +0 -1
- package/dashboard/dist/assets/TimestampCell-DoWMKg6w.js +0 -2
- package/dashboard/dist/assets/TimestampCell-DoWMKg6w.js.map +0 -1
- package/dashboard/dist/assets/UserName-DaP4YAKr.js +0 -2
- package/dashboard/dist/assets/VersionHistory-Bt7WBr6m.js +0 -5
- package/dashboard/dist/assets/VersionHistory-Bt7WBr6m.js.map +0 -1
- package/dashboard/dist/assets/WorkflowExecutionPage-DjtAQ3hy.js +0 -2
- package/dashboard/dist/assets/WorkflowExecutionPage-DjtAQ3hy.js.map +0 -1
- package/dashboard/dist/assets/WorkflowPill-CCDSVaQj.js +0 -2
- package/dashboard/dist/assets/WorkflowPill-CCDSVaQj.js.map +0 -1
- package/dashboard/dist/assets/WorkflowsDashboard-D8z9uBNB.js +0 -2
- package/dashboard/dist/assets/WorkflowsDashboard-D8z9uBNB.js.map +0 -1
- package/dashboard/dist/assets/WorkflowsOverview-D9OzzQqw.js +0 -2
- package/dashboard/dist/assets/YamlWorkflowDetailPage-DrDvvP62.js +0 -3
- package/dashboard/dist/assets/YamlWorkflowDetailPage-DrDvvP62.js.map +0 -1
- package/dashboard/dist/assets/YamlWorkflowsPage-COqiNCQK.js +0 -2
- package/dashboard/dist/assets/YamlWorkflowsPage-COqiNCQK.js.map +0 -1
- package/dashboard/dist/assets/constants-CgaZfe5d.js +0 -2
- package/dashboard/dist/assets/constants-CgaZfe5d.js.map +0 -1
- package/dashboard/dist/assets/escalation-columns-D6aqStaY.js +0 -2
- package/dashboard/dist/assets/escalation-qalymbKB.js +0 -2
- package/dashboard/dist/assets/escalation-qalymbKB.js.map +0 -1
- package/dashboard/dist/assets/format-gXZXQ-HJ.js +0 -2
- package/dashboard/dist/assets/format-gXZXQ-HJ.js.map +0 -1
- package/dashboard/dist/assets/helpers-0gSleuzT.js +0 -2
- package/dashboard/dist/assets/helpers-0gSleuzT.js.map +0 -1
- package/dashboard/dist/assets/index-BWvMHed7.js +0 -6
- package/dashboard/dist/assets/index-BWvMHed7.js.map +0 -1
- package/dashboard/dist/assets/index-BaszoPO_.css +0 -1
- package/dashboard/dist/assets/index-Cn2jyj9A.js +0 -2
- package/dashboard/dist/assets/index-Cn2jyj9A.js.map +0 -1
- package/dashboard/dist/assets/index-D8VH6K8B.js +0 -54
- package/dashboard/dist/assets/index-D8VH6K8B.js.map +0 -1
- package/dashboard/dist/assets/index-D9SYwJsi.js +0 -3
- package/dashboard/dist/assets/index-D9SYwJsi.js.map +0 -1
- package/dashboard/dist/assets/index-DTPzZr_X.js +0 -2
- package/dashboard/dist/assets/index-D_6AB5BE.js +0 -2
- package/dashboard/dist/assets/index-D_6AB5BE.js.map +0 -1
- package/dashboard/dist/assets/index-S9Ks2Lj2.js +0 -2
- package/dashboard/dist/assets/index-S9Ks2Lj2.js.map +0 -1
- package/dashboard/dist/assets/index-X85K5bHC.js +0 -17
- package/dashboard/dist/assets/index-rjmgHlSH.js +0 -2
- package/dashboard/dist/assets/index-rjmgHlSH.js.map +0 -1
- package/dashboard/dist/assets/mcp-blCW6IL7.js +0 -2
- package/dashboard/dist/assets/mcp-query-DoAyPbjC.js +0 -2
- package/dashboard/dist/assets/mcp-query-DoAyPbjC.js.map +0 -1
- package/dashboard/dist/assets/namespaces-BgbaC3ow.js +0 -2
- package/dashboard/dist/assets/settings-eBRSE0mQ.js +0 -2
- package/dashboard/dist/assets/tasks-tRqClPns.js +0 -2
- package/dashboard/dist/assets/vendor-icons-ZTAKVwGc.js.map +0 -1
- package/dashboard/dist/assets/vendor-query-B2UbickB.js +0 -18
- package/dashboard/dist/assets/vendor-query-B2UbickB.js.map +0 -1
- package/dashboard/dist/assets/vendor-react-Cw8Gy8NJ.js +0 -22
- package/dashboard/dist/assets/vendor-react-Cw8Gy8NJ.js.map +0 -1
- package/dashboard/dist/assets/yaml-workflows-BL4V5CQy.js +0 -2
- package/dashboard/dist/assets/yaml-workflows-BL4V5CQy.js.map +0 -1
- /package/build/{services → lib}/db/migrate.d.ts +0 -0
- /package/build/{services → lib}/events/index.d.ts +0 -0
- /package/build/{services → lib}/events/index.js +0 -0
- /package/build/{services → lib}/events/memory.d.ts +0 -0
- /package/build/{services → lib}/events/memory.js +0 -0
- /package/build/{services → lib}/events/nats.d.ts +0 -0
- /package/build/{services → lib}/events/nats.js +0 -0
- /package/build/{services → lib}/events/publish.d.ts +0 -0
- /package/build/{services → lib}/events/publish.js +0 -0
- /package/build/{services → lib}/events/socketio.d.ts +0 -0
- /package/build/{services → lib}/events/socketio.js +0 -0
- /package/build/{services → lib}/logger/index.d.ts +0 -0
- /package/build/{services → lib}/logger/index.js +0 -0
- /package/build/{services → lib}/logger/pino.d.ts +0 -0
- /package/build/{services → lib}/logger/pino.js +0 -0
- /package/build/{services → lib}/storage/index.d.ts +0 -0
- /package/build/{services → lib}/storage/index.js +0 -0
- /package/build/{services → lib}/storage/local.d.ts +0 -0
- /package/build/{services → lib}/storage/local.js +0 -0
- /package/build/{services → lib}/storage/s3.d.ts +0 -0
- /package/build/{services → lib}/storage/s3.js +0 -0
- /package/build/{services → lib}/storage/types.d.ts +0 -0
- /package/build/{services → lib}/storage/types.js +0 -0
- /package/build/{services → lib}/telemetry/index.d.ts +0 -0
- /package/build/{services → lib}/telemetry/index.js +0 -0
- /package/{services → lib}/db/README.md +0 -0
- /package/{services → lib}/db/schemas/001_schema.sql +0 -0
- /package/{services → lib}/db/schemas/002_seed.sql +0 -0
- /package/{services → lib}/db/schemas/003_workflow_discovery.sql +0 -0
- /package/{services → lib}/db/schemas/004_query_router.sql +0 -0
- /package/{services → lib}/db/schemas/005_triage_router.sql +0 -0
- /package/{services → lib}/db/schemas/006_oauth.sql +0 -0
- /package/{services → lib}/db/schemas/007_security.sql +0 -0
- /package/{services → lib}/db/schemas/008_bot_accounts.sql +0 -0
- /package/{services → lib}/db/schemas/009_audit_trail.sql +0 -0
- /package/{services → lib}/db/schemas/010_credential_providers.sql +0 -0
- /package/{services → lib}/db/schemas/011_system_workflow_configs.sql +0 -0
- /package/{services → lib}/db/schemas/012_drop_modality.sql +0 -0
- /package/{services → lib}/db/schemas/013_execute_as.sql +0 -0
- /package/{services → lib}/db/schemas/014_ephemeral_credentials.sql +0 -0
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"TaskDetailPage-CbPVTakt.js","sources":["../../src/components/common/display/Timeline.tsx","../../src/pages/workflows/TaskDetailPage.tsx"],"sourcesContent":["import type { ReactNode } from 'react';\n\nexport interface TimelineItem {\n id: string | number;\n label: string;\n timestamp?: string;\n detail?: ReactNode;\n category?: 'system' | 'user';\n}\n\nexport function Timeline({ items }: { items: TimelineItem[] }) {\n if (items.length === 0) return null;\n\n return (\n <div className=\"relative\">\n {/* Vertical line */}\n <div className=\"absolute left-[7px] top-3 bottom-3 w-px bg-surface-border\" />\n\n <div className=\"space-y-0\">\n {items.map((item) => (\n <div key={item.id} className=\"relative flex gap-4 py-3\">\n {/* Dot */}\n <div className=\"relative z-10 mt-1\">\n <div\n className={`w-[15px] h-[15px] rounded-full border-2 ${\n item.category === 'system'\n ? 'border-accent-muted bg-surface-raised'\n : 'border-accent bg-accent'\n }`}\n />\n </div>\n\n {/* Content */}\n <div className=\"flex-1 min-w-0\">\n <div className=\"flex items-baseline gap-3\">\n <p className=\"text-sm text-text-primary\">{item.label}</p>\n {item.timestamp && (\n <time className=\"text-[10px] text-text-tertiary font-mono shrink-0\">\n {new Date(item.timestamp).toLocaleTimeString()}\n </time>\n )}\n </div>\n {item.detail && <div className=\"mt-1\">{item.detail}</div>}\n </div>\n </div>\n ))}\n </div>\n </div>\n );\n}\n","import { useParams, Link } from 'react-router-dom';\nimport { useTask } from '../../api/tasks';\nimport { StatusBadge } from '../../components/common/display/StatusBadge';\nimport { PriorityBadge } from '../../components/common/display/PriorityBadge';\nimport { Field } from '../../components/common/data/Field';\nimport { JsonViewer } from '../../components/common/data/JsonViewer';\nimport { PageHeader } from '../../components/common/layout/PageHeader';\nimport { SectionLabel } from '../../components/common/layout/SectionLabel';\nimport { Timeline, type TimelineItem } from '../../components/common/display/Timeline';\n\nexport function TaskDetailPage() {\n const { id } = useParams<{ id: string }>();\n const { data: task, isLoading } = useTask(id!);\n\n if (isLoading) {\n return (\n <div className=\"animate-pulse space-y-4\">\n <div className=\"h-8 bg-surface-sunken rounded w-48\" />\n <div className=\"h-40 bg-surface-sunken rounded\" />\n </div>\n );\n }\n\n if (!task) {\n return <p className=\"text-sm text-text-secondary\">Task not found.</p>;\n }\n\n const milestoneItems: TimelineItem[] = (task.milestones ?? []).map((m, i) => ({\n id: i,\n label: m.name,\n timestamp: m.created_at,\n detail: (\n <span className=\"text-xs text-text-secondary font-mono\">\n {typeof m.value === 'object' ? JSON.stringify(m.value) : String(m.value)}\n </span>\n ),\n category: 'user' as const,\n }));\n\n return (\n <div>\n <PageHeader title=\"Task Detail\" />\n\n <div className=\"grid grid-cols-1 lg:grid-cols-3 gap-12\">\n {/* Left column — metadata */}\n <div className=\"lg:col-span-2 space-y-10\">\n <div className=\"grid grid-cols-2 sm:grid-cols-3 gap-6\">\n <Field label=\"Status\" value={<StatusBadge status={task.status} />} />\n <Field label=\"Priority\" value={<PriorityBadge priority={task.priority} />} />\n <Field label=\"Workflow Type\" value={<span className=\"font-mono text-xs\">{task.workflow_type}</span>} />\n <Field label=\"LT Type\" value={<span className=\"font-mono text-xs\">{task.lt_type}</span>} />\n <Field label=\"Task Queue\" value={<span className=\"font-mono text-xs\">{task.task_queue}</span>} />\n <Field label=\"Workflow ID\" value={<span className=\"font-mono text-xs break-all\">{task.workflow_id}</span>} />\n <Field label=\"Started\" value={task.started_at ? new Date(task.started_at).toLocaleString() : '—'} />\n <Field label=\"Completed\" value={task.completed_at ? new Date(task.completed_at).toLocaleString() : '—'} />\n <Field label=\"Signal ID\" value={<span className=\"font-mono text-xs break-all\">{task.signal_id}</span>} />\n </div>\n\n {task.error && (\n <div>\n <SectionLabel className=\"mb-2 text-status-error\">Error</SectionLabel>\n <p className=\"text-sm text-text-primary font-mono\">{task.error}</p>\n </div>\n )}\n\n {milestoneItems.length > 0 && (\n <div>\n <SectionLabel className=\"mb-4\">Milestones</SectionLabel>\n <Timeline items={milestoneItems} />\n </div>\n )}\n\n <Link\n to={`/workflows/executions/${task.workflow_id}`}\n className=\"btn-secondary inline-block text-xs\"\n >\n View Workflow Execution\n </Link>\n </div>\n\n {/* Right column — payloads */}\n <div className=\"space-y-8\">\n <JsonViewer data={task.envelope} label=\"Envelope\" />\n {task.metadata && <JsonViewer data={task.metadata} label=\"Metadata\" />}\n {task.data && <JsonViewer data={task.data} label=\"Result Data\" />}\n </div>\n </div>\n </div>\n );\n}\n"],"names":["Timeline","items","jsxs","jsx","item","TaskDetailPage","id","useParams","task","isLoading","useTask","milestoneItems","m","i","PageHeader","Field","StatusBadge","PriorityBadge","SectionLabel","Link","JsonViewer"],"mappings":"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"}
|
|
@@ -1,2 +0,0 @@
|
|
|
1
|
-
import{j as t}from"./vendor-query-B2UbickB.js";import{R as o}from"./vendor-icons-ZTAKVwGc.js";function p({queue:e,size:s="sm"}){const n=s==="md"?"px-2.5 py-0.5 text-[11px] gap-1.5":"px-2 py-0.5 text-[10px] gap-1",a=s==="md"?"w-3 h-3":"w-2.5 h-2.5";return t.jsxs("span",{className:`inline-flex items-center ${n} font-mono bg-accent/[0.06] text-text-secondary rounded-lg`,children:[t.jsx(o,{className:`${a} shrink-0 text-accent/75`}),e]})}export{p as T};
|
|
2
|
-
//# sourceMappingURL=TaskQueuePill-awmtb0qw.js.map
|
|
@@ -1,2 +0,0 @@
|
|
|
1
|
-
import{j as t}from"./vendor-query-B2UbickB.js";import{c as u}from"./tasks-tRqClPns.js";import{u as g}from"./workflows-Cc4VHcrp.js";import{u as w}from"./useFilterParams-BaXUAkYK.js";import{D as y}from"./DataTable-BDn1WBHS.js";import{S as k}from"./StatusBadge-TlC4jiig.js";import{P as c}from"./PriorityBadge-DfQY9St9.js";import{T as n}from"./TimeAgo-UPG6DoH8.js";import{S as x}from"./StickyPagination-F9FZsRy9.js";import{F as b,b as p}from"./FilterBar-Ck4K4rzu.js";import{P}from"./PageHeader-CpWFly5S.js";import{W as _}from"./WorkflowPill-CCDSVaQj.js";import{b as j}from"./vendor-react-Cw8Gy8NJ.js";import"./index-D8VH6K8B.js";import"./vendor-icons-ZTAKVwGc.js";import"./EmptyState-2CmV-IaS.js";import"./format-gXZXQ-HJ.js";const v=[{value:"pending",label:"Pending"},{value:"in_progress",label:"In Progress"},{value:"completed",label:"Completed"},{value:"needs_intervention",label:"Needs Intervention"},{value:"cancelled",label:"Cancelled"}],S=[{key:"status",label:"Status",render:e=>t.jsx(k,{status:e.status}),className:"w-40"},{key:"workflow_type",label:"Workflow Type",render:e=>t.jsx(_,{type:e.workflow_type})},{key:"lt_type",label:"LT Type",render:e=>t.jsx("span",{className:"text-text-secondary text-xs",children:e.lt_type})},{key:"priority",label:"Priority",render:e=>t.jsx(c,{priority:e.priority}),className:"w-20"},{key:"started_at",label:"Started",render:e=>t.jsx(n,{date:e.started_at}),className:"w-28"},{key:"updated_at",label:"Updated",render:e=>t.jsx(n,{date:e.updated_at}),className:"w-28"}];function U(){const e=j(),{filters:r,setFilter:l,pagination:s}=w({filters:{status:"",workflow_type:""}}),{data:m}=g(),d=[...new Set((m??[]).map(a=>a.workflow_type))].sort(),{data:o,isLoading:f}=u({status:r.status||void 0,workflow_type:r.workflow_type||void 0,limit:s.pageSize,offset:s.offset}),i=(o==null?void 0:o.total)??0;return t.jsxs("div",{children:[t.jsx(P,{title:"Tasks"}),t.jsxs(b,{children:[t.jsx(p,{label:"Status",value:r.status,onChange:a=>l("status",a),options:v}),t.jsx(p,{label:"Workflow Type",value:r.workflow_type,onChange:a=>l("workflow_type",a),options:d.map(a=>({value:a,label:a}))})]}),t.jsx(y,{columns:S,data:(o==null?void 0:o.tasks)??[],keyFn:a=>a.id,onRowClick:a=>e(`/workflows/tasks/detail/${a.id}`),isLoading:f,emptyMessage:"No tasks found"}),t.jsx(x,{page:s.page,totalPages:s.totalPages(i),onPageChange:s.setPage,total:i,pageSize:s.pageSize,onPageSizeChange:s.setPageSize})]})}export{U as TasksListPage};
|
|
2
|
-
//# sourceMappingURL=TasksListPage-C_QF23c1.js.map
|
|
@@ -1,2 +0,0 @@
|
|
|
1
|
-
import{a as e,j as i}from"./vendor-query-B2UbickB.js";import{c as n}from"./format-gXZXQ-HJ.js";function x({date:t,className:r=""}){const[,s]=e.useState(0);return e.useEffect(()=>{const a=setInterval(()=>s(o=>o+1),3e4);return()=>clearInterval(a)},[]),i.jsx("time",{dateTime:t,title:new Date(t).toLocaleString(),className:`text-xs text-text-tertiary ${r}`,children:n(t)})}export{x as T};
|
|
2
|
-
//# sourceMappingURL=TimeAgo-UPG6DoH8.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"TimeAgo-UPG6DoH8.js","sources":["../../src/components/common/display/TimeAgo.tsx"],"sourcesContent":["import { useState, useEffect } from 'react';\nimport { formatTimeAgo } from '../../../lib/format';\n\nexport function TimeAgo({ date, className = '' }: { date: string; className?: string }) {\n const [, setTick] = useState(0);\n\n useEffect(() => {\n const interval = setInterval(() => setTick((t) => t + 1), 30_000);\n return () => clearInterval(interval);\n }, []);\n\n return (\n <time\n dateTime={date}\n title={new Date(date).toLocaleString()}\n className={`text-xs text-text-tertiary ${className}`}\n >\n {formatTimeAgo(date)}\n </time>\n );\n}\n"],"names":["TimeAgo","date","className","setTick","useState","useEffect","interval","t","jsx"],"mappings":"+FAGO,SAASA,EAAQ,CAAE,KAAAC,EAAM,UAAAC,EAAY,IAA4C,CACtF,KAAM,EAAGC,CAAO,EAAIC,EAAAA,SAAS,CAAC,EAE9BC,OAAAA,EAAAA,UAAU,IAAM,CACd,MAAMC,EAAW,YAAY,IAAMH,EAASI,GAAMA,EAAI,CAAC,EAAG,GAAM,EAChE,MAAO,IAAM,cAAcD,CAAQ,CACrC,EAAG,CAAA,CAAE,EAGHE,EAAAA,IAAC,OAAA,CACC,SAAUP,EACV,MAAO,IAAI,KAAKA,CAAI,EAAE,eAAA,EACtB,UAAW,8BAA8BC,CAAS,GAEjD,WAAcD,CAAI,CAAA,CAAA,CAGzB"}
|
|
@@ -1,2 +0,0 @@
|
|
|
1
|
-
import{j as e}from"./vendor-query-B2UbickB.js";import{T as s}from"./TimeAgo-UPG6DoH8.js";function i({date:t}){return e.jsxs("div",{children:[e.jsx(s,{date:t}),e.jsxs("p",{className:"text-[9px] font-mono text-text-secondary mt-0.5 whitespace-nowrap",children:[new Date(t).toISOString().replace("T"," ").slice(0,19)," UTC"]})]})}export{i as T};
|
|
2
|
-
//# sourceMappingURL=TimestampCell-DoWMKg6w.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"TimestampCell-DoWMKg6w.js","sources":["../../src/components/common/display/TimestampCell.tsx"],"sourcesContent":["import { TimeAgo } from './TimeAgo';\n\ninterface TimestampCellProps {\n date: string;\n}\n\n/**\n * Standard timestamp cell for data tables.\n * Shows friendly \"ago\" text with UTC timestamp below.\n */\nexport function TimestampCell({ date }: TimestampCellProps) {\n return (\n <div>\n <TimeAgo date={date} />\n <p className=\"text-[9px] font-mono text-text-secondary mt-0.5 whitespace-nowrap\">\n {new Date(date).toISOString().replace('T', ' ').slice(0, 19)} UTC\n </p>\n </div>\n );\n}\n"],"names":["TimestampCell","date","jsx","TimeAgo","jsxs"],"mappings":"yFAUO,SAASA,EAAc,CAAE,KAAAC,GAA4B,CAC1D,cACG,MAAA,CACC,SAAA,CAAAC,MAACC,GAAQ,KAAAF,EAAY,EACrBG,EAAAA,KAAC,IAAA,CAAE,UAAU,oEACV,SAAA,CAAA,IAAI,KAAKH,CAAI,EAAE,cAAc,QAAQ,IAAK,GAAG,EAAE,MAAM,EAAG,EAAE,EAAE,MAAA,CAAA,CAC/D,CAAA,EACF,CAEJ"}
|
|
@@ -1,2 +0,0 @@
|
|
|
1
|
-
import{j as r}from"./vendor-query-B2UbickB.js";import{a as t}from"./users-tMvNyOo8.js";function m({userId:a,fallback:s}){const{data:e}=t(a);return e?r.jsx(r.Fragment,{children:e.display_name||e.email||e.external_id}):r.jsx(r.Fragment,{children:s??`${a.slice(0,8)}…`})}export{m as U};
|
|
2
|
-
//# sourceMappingURL=UserName-DaP4YAKr.js.map
|
|
@@ -1,5 +0,0 @@
|
|
|
1
|
-
import{a as N,j as e}from"./vendor-query-B2UbickB.js";import{X as I}from"./vendor-icons-ZTAKVwGc.js";import{C as R}from"./CollapsibleSection-Cxk4wvjT.js";import{J as S,S as _}from"./index-D8VH6K8B.js";function $(t){return t.toLowerCase().replace(/[^a-z0-9-]/g,"").replace(/^-|-$/g,"")}function K({tags:t,onChange:l,placeholder:x="Add tag...",compact:u}){const[a,i]=N.useState(""),p=N.useRef(null),o=s=>{const r=$(s);r&&!t.includes(r)&&l([...t,r]),i("")},n=s=>{l(t.filter(r=>r!==s))},m=s=>{s.key==="Enter"||s.key===","?(s.preventDefault(),o(a)):s.key==="Backspace"&&!a&&t.length>0&&n(t[t.length-1])};return e.jsxs("div",{className:u?"flex flex-wrap items-center gap-1.5":"flex flex-wrap items-center gap-1.5 bg-surface-sunken border border-surface-border rounded-md px-2 py-1.5 focus-within:ring-1 focus-within:ring-accent-primary cursor-text",onClick:()=>{var s;return(s=p.current)==null?void 0:s.focus()},children:[t.map(s=>e.jsxs("span",{className:"inline-flex items-center gap-1 px-2 py-0.5 rounded-full bg-accent/10 text-accent text-[11px] font-medium",children:[s,e.jsx("button",{type:"button",onClick:r=>{r.stopPropagation(),n(s)},className:"hover:text-status-error transition-colors",children:e.jsx(I,{className:"w-2.5 h-2.5"})})]},s)),e.jsx("input",{ref:p,type:"text",value:a,onChange:s=>i(s.target.value),onKeyDown:m,onBlur:()=>{a.trim()&&o(a)},placeholder:t.length===0?x:"",className:"flex-1 min-w-[80px] bg-transparent text-xs text-text-primary outline-none placeholder:text-text-tertiary"})]})}const L={dynamic:{bg:"bg-status-success/10",text:"text-status-success",label:"Dynamic"},fixed:{bg:"bg-surface-sunken",text:"text-text-tertiary",label:"Fixed"},wired:{bg:"bg-blue-500/10",text:"text-blue-500",label:"Wired"}};function z({classification:t}){const l=L[t]||L.fixed;return e.jsx("span",{className:`px-1.5 py-0.5 text-[9px] font-medium rounded ${l.bg} ${l.text}`,children:l.label})}function F({fields:t,onChange:l,editing:x}){const[u,a]=N.useState(null),i=(s,r)=>{const d=t.map((c,f)=>f===s?{...c,...r}:c);l(d)},p=s=>{const r=t[s],d=r.classification==="dynamic"?"fixed":"dynamic",c={classification:d};d==="fixed"&&r.default===void 0&&(c.default=r.type==="string"?"":r.type==="number"?0:r.type==="boolean"?!1:null),i(s,c)},o=s=>{l(t.filter((r,d)=>d!==s))};if(t.length===0)return e.jsx("div",{className:"py-4 text-center",children:e.jsx("p",{className:"text-xs text-text-tertiary",children:"No input fields detected from the execution."})});const n=t.filter(s=>s.classification==="dynamic"),m=t.filter(s=>s.classification==="fixed");return e.jsxs("div",{className:"space-y-4",children:[e.jsxs("div",{className:"flex items-center gap-3 text-[10px] text-text-tertiary",children:[e.jsxs("span",{children:[n.length," dynamic (user provides)"]}),e.jsxs("span",{children:[m.length," fixed (defaults from execution)"]})]}),n.length>0&&e.jsxs("div",{children:[e.jsx("p",{className:"text-[9px] font-semibold uppercase tracking-widest text-status-success/70 mb-2",children:"Dynamic Inputs (required at invocation)"}),e.jsx("div",{className:"space-y-1",children:n.map(s=>{const r=t.indexOf(s),d=u===s.key;return e.jsx(O,{field:s,editing:x,expanded:d,onToggleExpand:()=>a(d?null:s.key),onToggleClassification:()=>p(r),onUpdate:c=>i(r,c),onRemove:()=>o(r)},s.key)})})]}),m.length>0&&e.jsxs("div",{children:[e.jsx("p",{className:"text-[9px] font-semibold uppercase tracking-widest text-text-tertiary mb-2",children:"Fixed Defaults (from execution)"}),e.jsx("div",{className:"space-y-1",children:m.map(s=>{const r=t.indexOf(s),d=u===s.key;return e.jsx(O,{field:s,editing:x,expanded:d,onToggleExpand:()=>a(d?null:s.key),onToggleClassification:()=>p(r),onUpdate:c=>i(r,c),onRemove:()=>o(r)},s.key)})})]})]})}function O({field:t,editing:l,expanded:x,onToggleExpand:u,onToggleClassification:a,onUpdate:i,onRemove:p}){return e.jsxs("div",{className:"border border-surface-border rounded-lg overflow-hidden",children:[e.jsxs("button",{type:"button",onClick:u,className:"w-full flex items-center gap-2 px-3 py-2 hover:bg-surface-hover/50 transition-colors",children:[e.jsx("span",{className:"font-mono text-xs text-text-primary",children:t.key}),e.jsx("span",{className:"text-[9px] text-text-tertiary",children:t.type}),e.jsx(z,{classification:t.classification}),t.default!==void 0&&e.jsxs("span",{className:"text-[9px] font-mono text-text-tertiary truncate max-w-[120px]",children:["= ",JSON.stringify(t.default)]}),e.jsx("span",{className:"text-[9px] text-text-tertiary ml-auto truncate max-w-[150px]",children:t.source_tool}),e.jsx("svg",{className:`w-3 h-3 text-text-tertiary shrink-0 transition-transform ${x?"rotate-180":""}`,fill:"none",viewBox:"0 0 24 24",stroke:"currentColor",strokeWidth:2,children:e.jsx("path",{strokeLinecap:"round",strokeLinejoin:"round",d:"M19 9l-7 7-7-7"})})]}),x&&e.jsxs("div",{className:"px-3 pb-3 pt-1 border-t border-surface-border/50 space-y-2",children:[e.jsx("p",{className:"text-[10px] text-text-tertiary",children:t.description}),l&&e.jsxs("div",{className:"space-y-2",children:[e.jsxs("div",{children:[e.jsx("label",{className:"text-[9px] font-semibold uppercase tracking-widest text-text-tertiary",children:"Description"}),e.jsx("input",{type:"text",value:t.description,onChange:o=>i({description:o.target.value}),className:"input text-[11px] w-full mt-0.5"})]}),t.classification==="fixed"&&e.jsxs("div",{children:[e.jsx("label",{className:"text-[9px] font-semibold uppercase tracking-widest text-text-tertiary",children:"Default Value"}),e.jsx("input",{type:"text",value:t.default!==void 0?typeof t.default=="string"?t.default:JSON.stringify(t.default):"",onChange:o=>{let n=o.target.value;if(t.type==="number")n=Number(n)||0;else if(t.type==="boolean")n=n==="true";else try{n=JSON.parse(n)}catch{}i({default:n})},className:"input text-[11px] font-mono w-full mt-0.5"})]}),e.jsxs("div",{className:"flex items-center gap-3 pt-1",children:[e.jsx("button",{type:"button",onClick:a,className:"text-[10px] text-accent hover:underline",children:t.classification==="dynamic"?"Make fixed (add default)":"Make dynamic (require input)"}),e.jsx("button",{type:"button",onClick:p,className:"text-[10px] text-status-error hover:underline ml-auto",children:"Remove"})]})]})]})]})}function H({wf:t,resolvedInputSchema:l,resolvedOutputSchema:x,resolvedYaml:u,configEditing:a,setConfigEditing:i,canEditConfig:p,yamlDraft:o,setYamlDraft:n,inputSchemaDraft:m,setInputSchemaDraft:s,outputSchemaDraft:r,setOutputSchemaDraft:d,inputFieldMetaDraft:c,setInputFieldMetaDraft:f,onSave:b,onCancel:j,updateMutation:y,yamlTextareaRef:v,isCollapsed:g,onToggle:A,schemasGrid:E}){const k=c.length>0,[C,T]=N.useState(!1);return e.jsx(R,{sectionKey:"config",title:"Configuration",isCollapsed:g,onToggle:A,children:e.jsxs("div",{className:"space-y-6",children:[e.jsxs("div",{className:"flex items-center justify-between",children:[e.jsxs("div",{className:"flex items-center gap-3",children:[e.jsxs("a",{href:"https://github.com/hotmeshio/sdk-typescript/blob/main/docs/quickstart.md",target:"_blank",rel:"noopener noreferrer",className:"text-[10px] text-accent hover:underline flex items-center gap-1",children:[e.jsx("svg",{className:"w-3 h-3",fill:"none",viewBox:"0 0 24 24",stroke:"currentColor",strokeWidth:2,children:e.jsx("path",{strokeLinecap:"round",strokeLinejoin:"round",d:"M12 6.253v13m0-13C10.832 5.477 9.246 5 7.5 5S4.168 5.477 3 6.253v13C4.168 18.477 5.754 18 7.5 18s3.332.477 4.5 1.253m0-13C13.168 5.477 14.754 5 16.5 5c1.747 0 3.332.477 4.5 1.253v13C19.832 18.477 18.247 18 16.5 18c-1.746 0-3.332.477-4.5 1.253"})}),"YAML Guide"]}),a&&k&&e.jsx("button",{type:"button",onClick:()=>T(!C),className:"text-[10px] text-text-tertiary hover:text-text-primary",children:C?"Visual editor":"Advanced (JSON)"})]}),e.jsxs("div",{className:"flex items-center gap-3",children:[p&&!a&&e.jsx("button",{onClick:()=>{i(!0),setTimeout(()=>{var h;return(h=v.current)==null?void 0:h.focus()},50)},className:"text-[10px] text-accent hover:underline",children:"Edit"}),a&&e.jsxs(e.Fragment,{children:[e.jsx("button",{onClick:j,className:"text-[10px] text-text-tertiary hover:text-text-primary",children:"Cancel"}),e.jsx("button",{onClick:b,disabled:y.isPending||o===t.yaml_content&&m===JSON.stringify(t.input_schema,null,2)&&r===JSON.stringify(t.output_schema,null,2),className:"text-[10px] text-accent hover:underline disabled:opacity-40 disabled:no-underline",children:y.isPending?"Saving...":"Save"})]})]})]}),y.error&&e.jsx("p",{className:"text-xs text-status-error",children:y.error.message}),e.jsxs("div",{className:E?"grid grid-cols-1 lg:grid-cols-2 gap-6":"space-y-6",children:[e.jsxs("div",{children:[e.jsx("h4",{className:"text-[10px] font-semibold uppercase tracking-widest text-text-tertiary mb-2",children:"Input Schema"}),a&&k&&!C?e.jsx(F,{fields:c,onChange:f,editing:a}):a?e.jsx("textarea",{value:m,onChange:h=>s(h.target.value),className:"w-full p-4 bg-surface-sunken rounded-md text-xs font-mono text-text-primary leading-relaxed border border-surface-border focus:border-accent focus:outline-none resize-none overflow-hidden",rows:Math.max(m.split(`
|
|
2
|
-
`).length+1,6),style:{fieldSizing:"content"},spellCheck:!1}):k?e.jsx(F,{fields:c,onChange:()=>{},editing:!1}):e.jsx(S,{data:l??{},label:""})]}),e.jsxs("div",{children:[e.jsx("h4",{className:"text-[10px] font-semibold uppercase tracking-widest text-text-tertiary mb-2",children:"Output Schema"}),a?e.jsx("textarea",{value:r,onChange:h=>d(h.target.value),className:"w-full p-4 bg-surface-sunken rounded-md text-xs font-mono text-text-primary leading-relaxed border border-surface-border focus:border-accent focus:outline-none resize-none overflow-hidden",rows:Math.max(r.split(`
|
|
3
|
-
`).length+1,6),style:{fieldSizing:"content"},spellCheck:!1}):e.jsx(S,{data:x??{},label:""})]})]}),e.jsxs("div",{children:[e.jsx("h4",{className:"text-[10px] font-semibold uppercase tracking-widest text-text-tertiary mb-2",children:"YAML Definition"}),a?e.jsx("textarea",{ref:v,value:o,onChange:h=>n(h.target.value),className:"w-full p-4 bg-surface-sunken rounded-md text-xs font-mono text-text-primary leading-relaxed border border-surface-border focus:border-accent focus:outline-none resize-none overflow-hidden",rows:o.split(`
|
|
4
|
-
`).length+1,style:{fieldSizing:"content"},spellCheck:!1}):e.jsx("pre",{className:"p-4 bg-surface-sunken rounded-md text-xs font-mono text-text-secondary overflow-x-auto whitespace-pre",children:u??t.yaml_content})]})]})})}const w=["draft","active","archived"],J={draft:"Draft",active:"Active",archived:"Archived"},D={draft:{filled:"bg-status-draft border-status-draft",line:"bg-status-draft/30"},active:{filled:"bg-status-success border-status-success",line:"bg-status-success/30"},archived:{filled:"bg-text-tertiary border-text-tertiary",line:"bg-text-tertiary/30"}};function U({status:t,sourceWorkflowId:l,contentVersion:x,deployedContentVersion:u,onDeploy:a,onArchive:i,onDelete:p,onRegenerate:o,isPending:n,error:m}){const s=t==="deployed"?"active":t,r=w.indexOf(s),d=x!=null&&x>(u??0);return e.jsxs("div",{children:[e.jsx(_,{className:"mb-4",children:"Lifecycle"}),d&&s!=="draft"&&s!=="archived"&&e.jsxs("div",{className:"mb-4 px-3 py-2 rounded-md bg-status-pending/10 border border-status-pending/30",children:[e.jsx("p",{className:"text-[10px] font-semibold text-status-pending mb-1",children:"YAML modified"}),e.jsxs("p",{className:"text-[10px] text-text-secondary leading-relaxed",children:["v",x," edited since deploy (v",u,"). Redeploy to apply changes."]}),e.jsx("button",{onClick:a,disabled:n,className:"mt-1.5 text-[10px] font-medium text-status-pending hover:underline",children:n?"Deploying...":"Deploy now"})]}),e.jsx("div",{className:"space-y-0",children:w.map((c,f)=>{const b=c===s,j=f<r,y=f>r,v=f===w.length-1,g=D[c];return e.jsxs("div",{className:"flex items-stretch gap-3",children:[e.jsxs("div",{className:"flex flex-col items-center w-5 shrink-0",children:[e.jsx("span",{className:`w-3 h-3 rounded-full shrink-0 border-2 transition-colors ${b||j?g.filled:"bg-surface-sunken border-surface-border"}`}),!v&&e.jsx("span",{className:`w-px flex-1 ${j?g.line:"bg-surface-border"}`})]}),e.jsxs("div",{className:`pb-5 ${v?"pb-0":""}`,children:[e.jsx("p",{className:`text-xs font-medium ${b?"text-text-primary":y?"text-text-tertiary":"text-text-secondary"}`,children:J[c]}),b&&c==="draft"&&e.jsxs("div",{className:"mt-2 flex items-center gap-2",children:[e.jsx("button",{onClick:a,disabled:n,className:"btn-primary text-[11px] px-3 py-1",children:n?"Deploying...":"Deploy"}),l&&e.jsx("button",{onClick:o,disabled:n,className:"text-[10px] text-text-tertiary hover:text-text-primary",children:"Regenerate"})]}),b&&c==="active"&&e.jsxs("div",{className:"mt-2 flex items-center gap-2",children:[e.jsx("button",{onClick:i,disabled:n,className:"text-[11px] text-text-tertiary hover:text-status-error",children:"Archive"}),l&&e.jsx("button",{onClick:o,disabled:n,className:"text-[10px] text-text-tertiary hover:text-text-primary",children:"Regenerate"})]})]})]},c)})}),x!=null&&e.jsxs("div",{className:"mt-4 pt-4 border-t border-surface-border",children:[e.jsx("p",{className:"text-[10px] font-semibold uppercase tracking-widest text-text-tertiary mb-1",children:"Content Version"}),e.jsxs("p",{className:"text-xs font-mono text-text-primary",children:["v",x,u!=null&&e.jsxs("span",{className:"text-text-tertiary ml-1.5",children:["(deployed: v",u,")"]})]})]}),(t==="draft"||t==="archived")&&e.jsx("div",{className:"mt-4 pt-4 border-t border-surface-border",children:e.jsx("button",{onClick:p,disabled:n,className:"text-[11px] text-status-error hover:underline",children:"Delete workflow tool"})}),m&&e.jsx("p",{className:"mt-3 text-[11px] text-status-error",children:m})]})}function W({versionsData:t,searchParams:l,setSearchParams:x,currentVersion:u,viewingVersion:a}){return e.jsxs("div",{children:[e.jsx(_,{className:"mb-3",children:"Version History"}),e.jsx("div",{className:"space-y-1",children:t.versions.map(i=>{const p=i.version===u,o=a===i.version;return e.jsxs("button",{type:"button",onClick:()=>{const n=new URLSearchParams(l);p?n.delete("version"):n.set("version",String(i.version)),x(n)},className:`w-full text-left px-2 py-1.5 rounded text-xs transition-colors ${o?"bg-accent/10 text-accent":"text-text-secondary hover:bg-surface-sunken hover:text-text-primary"}`,children:[e.jsxs("span",{className:"font-mono font-medium",children:["v",i.version]}),p&&e.jsx("span",{className:"text-text-tertiary ml-1",children:"(current)"}),i.change_summary&&e.jsx("p",{className:"text-[10px] text-text-tertiary truncate mt-0.5",children:i.change_summary})]},i.version)})})]})}export{H as C,U as L,K as T,W as V};
|
|
5
|
-
//# sourceMappingURL=VersionHistory-Bt7WBr6m.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"VersionHistory-Bt7WBr6m.js","sources":["../../src/components/common/form/TagInput.tsx","../../src/pages/workflows/yaml-workflow-detail/InputSchemaEditor.tsx","../../src/pages/workflows/yaml-workflow-detail/ConfigurationSection.tsx","../../src/pages/workflows/yaml-workflow-detail/LifecycleSidebar.tsx","../../src/pages/workflows/yaml-workflow-detail/VersionHistory.tsx"],"sourcesContent":["import { useState, useRef, type KeyboardEvent } from 'react';\nimport { X } from 'lucide-react';\n\ninterface TagInputProps {\n tags: string[];\n onChange: (tags: string[]) => void;\n placeholder?: string;\n /** Show as compact inline pills (no border wrapper) */\n compact?: boolean;\n}\n\nfunction sanitizeTag(raw: string): string {\n return raw.toLowerCase().replace(/[^a-z0-9-]/g, '').replace(/^-|-$/g, '');\n}\n\nexport function TagInput({ tags, onChange, placeholder = 'Add tag...', compact }: TagInputProps) {\n const [input, setInput] = useState('');\n const inputRef = useRef<HTMLInputElement>(null);\n\n const addTag = (raw: string) => {\n const tag = sanitizeTag(raw);\n if (tag && !tags.includes(tag)) {\n onChange([...tags, tag]);\n }\n setInput('');\n };\n\n const removeTag = (tag: string) => {\n onChange(tags.filter((t) => t !== tag));\n };\n\n const handleKeyDown = (e: KeyboardEvent<HTMLInputElement>) => {\n if (e.key === 'Enter' || e.key === ',') {\n e.preventDefault();\n addTag(input);\n } else if (e.key === 'Backspace' && !input && tags.length > 0) {\n removeTag(tags[tags.length - 1]);\n }\n };\n\n return (\n <div\n className={\n compact\n ? 'flex flex-wrap items-center gap-1.5'\n : 'flex flex-wrap items-center gap-1.5 bg-surface-sunken border border-surface-border rounded-md px-2 py-1.5 focus-within:ring-1 focus-within:ring-accent-primary cursor-text'\n }\n onClick={() => inputRef.current?.focus()}\n >\n {tags.map((tag) => (\n <span\n key={tag}\n className=\"inline-flex items-center gap-1 px-2 py-0.5 rounded-full bg-accent/10 text-accent text-[11px] font-medium\"\n >\n {tag}\n <button\n type=\"button\"\n onClick={(e) => { e.stopPropagation(); removeTag(tag); }}\n className=\"hover:text-status-error transition-colors\"\n >\n <X className=\"w-2.5 h-2.5\" />\n </button>\n </span>\n ))}\n <input\n ref={inputRef}\n type=\"text\"\n value={input}\n onChange={(e) => setInput(e.target.value)}\n onKeyDown={handleKeyDown}\n onBlur={() => { if (input.trim()) addTag(input); }}\n placeholder={tags.length === 0 ? placeholder : ''}\n className=\"flex-1 min-w-[80px] bg-transparent text-xs text-text-primary outline-none placeholder:text-text-tertiary\"\n />\n </div>\n );\n}\n","import { useState } from 'react';\nimport type { InputFieldMeta } from '../../../api/types';\n\ninterface InputSchemaEditorProps {\n fields: InputFieldMeta[];\n onChange: (fields: InputFieldMeta[]) => void;\n editing: boolean;\n}\n\nconst CLASSIFICATION_STYLES: Record<string, { bg: string; text: string; label: string }> = {\n dynamic: { bg: 'bg-status-success/10', text: 'text-status-success', label: 'Dynamic' },\n fixed: { bg: 'bg-surface-sunken', text: 'text-text-tertiary', label: 'Fixed' },\n wired: { bg: 'bg-blue-500/10', text: 'text-blue-500', label: 'Wired' },\n};\n\nfunction ClassificationBadge({ classification }: { classification: string }) {\n const style = CLASSIFICATION_STYLES[classification] || CLASSIFICATION_STYLES.fixed;\n return (\n <span className={`px-1.5 py-0.5 text-[9px] font-medium rounded ${style.bg} ${style.text}`}>\n {style.label}\n </span>\n );\n}\n\nexport function InputSchemaEditor({ fields, onChange, editing }: InputSchemaEditorProps) {\n const [expandedField, setExpandedField] = useState<string | null>(null);\n\n const updateField = (index: number, updates: Partial<InputFieldMeta>) => {\n const next = fields.map((f, i) => i === index ? { ...f, ...updates } : f);\n onChange(next);\n };\n\n const toggleClassification = (index: number) => {\n const field = fields[index];\n const nextClass = field.classification === 'dynamic' ? 'fixed' : 'dynamic';\n const updates: Partial<InputFieldMeta> = { classification: nextClass };\n if (nextClass === 'fixed' && field.default === undefined) {\n // Set a sensible default when switching to fixed\n updates.default = field.type === 'string' ? '' : field.type === 'number' ? 0 : field.type === 'boolean' ? false : null;\n }\n updateField(index, updates);\n };\n\n const removeField = (index: number) => {\n onChange(fields.filter((_, i) => i !== index));\n };\n\n if (fields.length === 0) {\n return (\n <div className=\"py-4 text-center\">\n <p className=\"text-xs text-text-tertiary\">No input fields detected from the execution.</p>\n </div>\n );\n }\n\n const dynamicFields = fields.filter(f => f.classification === 'dynamic');\n const fixedFields = fields.filter(f => f.classification === 'fixed');\n\n return (\n <div className=\"space-y-4\">\n {/* Summary */}\n <div className=\"flex items-center gap-3 text-[10px] text-text-tertiary\">\n <span>{dynamicFields.length} dynamic (user provides)</span>\n <span>{fixedFields.length} fixed (defaults from execution)</span>\n </div>\n\n {/* Dynamic fields */}\n {dynamicFields.length > 0 && (\n <div>\n <p className=\"text-[9px] font-semibold uppercase tracking-widest text-status-success/70 mb-2\">\n Dynamic Inputs (required at invocation)\n </p>\n <div className=\"space-y-1\">\n {dynamicFields.map((field) => {\n const index = fields.indexOf(field);\n const isExpanded = expandedField === field.key;\n return (\n <FieldRow\n key={field.key}\n field={field}\n editing={editing}\n expanded={isExpanded}\n onToggleExpand={() => setExpandedField(isExpanded ? null : field.key)}\n onToggleClassification={() => toggleClassification(index)}\n onUpdate={(updates) => updateField(index, updates)}\n onRemove={() => removeField(index)}\n />\n );\n })}\n </div>\n </div>\n )}\n\n {/* Fixed fields */}\n {fixedFields.length > 0 && (\n <div>\n <p className=\"text-[9px] font-semibold uppercase tracking-widest text-text-tertiary mb-2\">\n Fixed Defaults (from execution)\n </p>\n <div className=\"space-y-1\">\n {fixedFields.map((field) => {\n const index = fields.indexOf(field);\n const isExpanded = expandedField === field.key;\n return (\n <FieldRow\n key={field.key}\n field={field}\n editing={editing}\n expanded={isExpanded}\n onToggleExpand={() => setExpandedField(isExpanded ? null : field.key)}\n onToggleClassification={() => toggleClassification(index)}\n onUpdate={(updates) => updateField(index, updates)}\n onRemove={() => removeField(index)}\n />\n );\n })}\n </div>\n </div>\n )}\n </div>\n );\n}\n\n// ── Field Row ────────────────────────────────────────────────────────────────\n\nfunction FieldRow({\n field,\n editing,\n expanded,\n onToggleExpand,\n onToggleClassification,\n onUpdate,\n onRemove,\n}: {\n field: InputFieldMeta;\n editing: boolean;\n expanded: boolean;\n onToggleExpand: () => void;\n onToggleClassification: () => void;\n onUpdate: (updates: Partial<InputFieldMeta>) => void;\n onRemove: () => void;\n}) {\n return (\n <div className=\"border border-surface-border rounded-lg overflow-hidden\">\n <button\n type=\"button\"\n onClick={onToggleExpand}\n className=\"w-full flex items-center gap-2 px-3 py-2 hover:bg-surface-hover/50 transition-colors\"\n >\n <span className=\"font-mono text-xs text-text-primary\">{field.key}</span>\n <span className=\"text-[9px] text-text-tertiary\">{field.type}</span>\n <ClassificationBadge classification={field.classification} />\n {field.default !== undefined && (\n <span className=\"text-[9px] font-mono text-text-tertiary truncate max-w-[120px]\">\n = {JSON.stringify(field.default)}\n </span>\n )}\n <span className=\"text-[9px] text-text-tertiary ml-auto truncate max-w-[150px]\">\n {field.source_tool}\n </span>\n <svg\n className={`w-3 h-3 text-text-tertiary shrink-0 transition-transform ${expanded ? 'rotate-180' : ''}`}\n fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" strokeWidth={2}\n >\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" d=\"M19 9l-7 7-7-7\" />\n </svg>\n </button>\n\n {expanded && (\n <div className=\"px-3 pb-3 pt-1 border-t border-surface-border/50 space-y-2\">\n <p className=\"text-[10px] text-text-tertiary\">{field.description}</p>\n\n {editing && (\n <div className=\"space-y-2\">\n {/* Description */}\n <div>\n <label className=\"text-[9px] font-semibold uppercase tracking-widest text-text-tertiary\">Description</label>\n <input\n type=\"text\"\n value={field.description}\n onChange={(e) => onUpdate({ description: e.target.value })}\n className=\"input text-[11px] w-full mt-0.5\"\n />\n </div>\n\n {/* Default value (for fixed fields) */}\n {field.classification === 'fixed' && (\n <div>\n <label className=\"text-[9px] font-semibold uppercase tracking-widest text-text-tertiary\">Default Value</label>\n <input\n type=\"text\"\n value={field.default !== undefined ? (typeof field.default === 'string' ? field.default : JSON.stringify(field.default)) : ''}\n onChange={(e) => {\n let val: unknown = e.target.value;\n if (field.type === 'number') val = Number(val) || 0;\n else if (field.type === 'boolean') val = val === 'true';\n else { try { val = JSON.parse(val as string); } catch { /* keep as string */ } }\n onUpdate({ default: val });\n }}\n className=\"input text-[11px] font-mono w-full mt-0.5\"\n />\n </div>\n )}\n\n {/* Actions */}\n <div className=\"flex items-center gap-3 pt-1\">\n <button\n type=\"button\"\n onClick={onToggleClassification}\n className=\"text-[10px] text-accent hover:underline\"\n >\n {field.classification === 'dynamic' ? 'Make fixed (add default)' : 'Make dynamic (require input)'}\n </button>\n <button\n type=\"button\"\n onClick={onRemove}\n className=\"text-[10px] text-status-error hover:underline ml-auto\"\n >\n Remove\n </button>\n </div>\n </div>\n )}\n </div>\n )}\n </div>\n );\n}\n","import { useState } from 'react';\nimport { CollapsibleSection } from '../../../components/common/layout/CollapsibleSection';\nimport { JsonViewer } from '../../../components/common/data/JsonViewer';\nimport { InputSchemaEditor } from './InputSchemaEditor';\nimport type { InputFieldMeta } from '../../../api/types';\n\nexport function ConfigurationSection({\n wf,\n resolvedInputSchema,\n resolvedOutputSchema,\n resolvedYaml,\n configEditing,\n setConfigEditing,\n canEditConfig,\n yamlDraft,\n setYamlDraft,\n inputSchemaDraft,\n setInputSchemaDraft,\n outputSchemaDraft,\n setOutputSchemaDraft,\n inputFieldMetaDraft,\n setInputFieldMetaDraft,\n onSave,\n onCancel,\n updateMutation,\n yamlTextareaRef,\n isCollapsed,\n onToggle,\n schemasGrid,\n}: {\n wf: any;\n resolvedInputSchema: any;\n resolvedOutputSchema: any;\n resolvedYaml: string | undefined;\n configEditing: boolean;\n setConfigEditing: (v: boolean) => void;\n canEditConfig: boolean;\n yamlDraft: string;\n setYamlDraft: (v: string) => void;\n inputSchemaDraft: string;\n setInputSchemaDraft: (v: string) => void;\n outputSchemaDraft: string;\n setOutputSchemaDraft: (v: string) => void;\n inputFieldMetaDraft: InputFieldMeta[];\n setInputFieldMetaDraft: (v: InputFieldMeta[]) => void;\n onSave: () => void;\n onCancel: () => void;\n updateMutation: any;\n yamlTextareaRef: React.RefObject<HTMLTextAreaElement | null>;\n isCollapsed: boolean;\n onToggle: (key: string) => void;\n /** Render input/output schemas side-by-side in a 2-column grid. */\n schemasGrid?: boolean;\n}) {\n const hasFieldMeta = inputFieldMetaDraft.length > 0;\n const [advancedMode, setAdvancedMode] = useState(false);\n\n return (\n <CollapsibleSection sectionKey=\"config\" title=\"Configuration\" isCollapsed={isCollapsed} onToggle={onToggle} >\n <div className=\"space-y-6\">\n {/* Edit / Save / Cancel controls */}\n <div className=\"flex items-center justify-between\">\n <div className=\"flex items-center gap-3\">\n <a\n href=\"https://github.com/hotmeshio/sdk-typescript/blob/main/docs/quickstart.md\"\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n className=\"text-[10px] text-accent hover:underline flex items-center gap-1\"\n >\n <svg className=\"w-3 h-3\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" strokeWidth={2}>\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" d=\"M12 6.253v13m0-13C10.832 5.477 9.246 5 7.5 5S4.168 5.477 3 6.253v13C4.168 18.477 5.754 18 7.5 18s3.332.477 4.5 1.253m0-13C13.168 5.477 14.754 5 16.5 5c1.747 0 3.332.477 4.5 1.253v13C19.832 18.477 18.247 18 16.5 18c-1.746 0-3.332.477-4.5 1.253\" />\n </svg>\n YAML Guide\n </a>\n {configEditing && hasFieldMeta && (\n <button\n type=\"button\"\n onClick={() => setAdvancedMode(!advancedMode)}\n className=\"text-[10px] text-text-tertiary hover:text-text-primary\"\n >\n {advancedMode ? 'Visual editor' : 'Advanced (JSON)'}\n </button>\n )}\n </div>\n <div className=\"flex items-center gap-3\">\n {canEditConfig && !configEditing && (\n <button\n onClick={() => { setConfigEditing(true); setTimeout(() => yamlTextareaRef.current?.focus(), 50); }}\n className=\"text-[10px] text-accent hover:underline\"\n >\n Edit\n </button>\n )}\n {configEditing && (\n <>\n <button onClick={onCancel} className=\"text-[10px] text-text-tertiary hover:text-text-primary\">\n Cancel\n </button>\n <button\n onClick={onSave}\n disabled={updateMutation.isPending || (\n yamlDraft === wf.yaml_content\n && inputSchemaDraft === JSON.stringify(wf.input_schema, null, 2)\n && outputSchemaDraft === JSON.stringify(wf.output_schema, null, 2)\n )}\n className=\"text-[10px] text-accent hover:underline disabled:opacity-40 disabled:no-underline\"\n >\n {updateMutation.isPending ? 'Saving...' : 'Save'}\n </button>\n </>\n )}\n </div>\n </div>\n\n {updateMutation.error && (\n <p className=\"text-xs text-status-error\">{updateMutation.error.message}</p>\n )}\n\n {/* Input + Output Schemas */}\n <div className={schemasGrid ? 'grid grid-cols-1 lg:grid-cols-2 gap-6' : 'space-y-6'}>\n {/* Input Schema — visual editor or raw JSON */}\n <div>\n <h4 className=\"text-[10px] font-semibold uppercase tracking-widest text-text-tertiary mb-2\">Input Schema</h4>\n\n {configEditing && hasFieldMeta && !advancedMode ? (\n <InputSchemaEditor\n fields={inputFieldMetaDraft}\n onChange={setInputFieldMetaDraft}\n editing={configEditing}\n />\n ) : configEditing ? (\n <textarea\n value={inputSchemaDraft}\n onChange={(e) => setInputSchemaDraft(e.target.value)}\n className=\"w-full p-4 bg-surface-sunken rounded-md text-xs font-mono text-text-primary leading-relaxed border border-surface-border focus:border-accent focus:outline-none resize-none overflow-hidden\"\n rows={Math.max(inputSchemaDraft.split('\\n').length + 1, 6)}\n style={{ fieldSizing: 'content' } as React.CSSProperties}\n spellCheck={false}\n />\n ) : hasFieldMeta ? (\n <InputSchemaEditor\n fields={inputFieldMetaDraft}\n onChange={() => {}}\n editing={false}\n />\n ) : (\n <JsonViewer data={resolvedInputSchema ?? {}} label=\"\" />\n )}\n </div>\n\n {/* Output Schema */}\n <div>\n <h4 className=\"text-[10px] font-semibold uppercase tracking-widest text-text-tertiary mb-2\">Output Schema</h4>\n {configEditing ? (\n <textarea\n value={outputSchemaDraft}\n onChange={(e) => setOutputSchemaDraft(e.target.value)}\n className=\"w-full p-4 bg-surface-sunken rounded-md text-xs font-mono text-text-primary leading-relaxed border border-surface-border focus:border-accent focus:outline-none resize-none overflow-hidden\"\n rows={Math.max(outputSchemaDraft.split('\\n').length + 1, 6)}\n style={{ fieldSizing: 'content' } as React.CSSProperties}\n spellCheck={false}\n />\n ) : (\n <JsonViewer data={resolvedOutputSchema ?? {}} label=\"\" />\n )}\n </div>\n </div>\n\n {/* YAML Definition */}\n <div>\n <h4 className=\"text-[10px] font-semibold uppercase tracking-widest text-text-tertiary mb-2\">YAML Definition</h4>\n {configEditing ? (\n <textarea\n ref={yamlTextareaRef}\n value={yamlDraft}\n onChange={(e) => setYamlDraft(e.target.value)}\n className=\"w-full p-4 bg-surface-sunken rounded-md text-xs font-mono text-text-primary leading-relaxed border border-surface-border focus:border-accent focus:outline-none resize-none overflow-hidden\"\n rows={yamlDraft.split('\\n').length + 1}\n style={{ fieldSizing: 'content' } as React.CSSProperties}\n spellCheck={false}\n />\n ) : (\n <pre className=\"p-4 bg-surface-sunken rounded-md text-xs font-mono text-text-secondary overflow-x-auto whitespace-pre\">\n {resolvedYaml ?? wf.yaml_content}\n </pre>\n )}\n </div>\n </div>\n </CollapsibleSection>\n );\n}\n","import { SectionLabel } from '../../../components/common/layout/SectionLabel';\n\nconst LIFECYCLE_STEPS = ['draft', 'active', 'archived'] as const;\nconst LIFECYCLE_LABELS: Record<string, string> = {\n draft: 'Draft',\n active: 'Active',\n archived: 'Archived',\n};\n\nconst LIFECYCLE_COLORS: Record<string, { filled: string; line: string }> = {\n draft: { filled: 'bg-status-draft border-status-draft', line: 'bg-status-draft/30' },\n active: { filled: 'bg-status-success border-status-success', line: 'bg-status-success/30' },\n archived: { filled: 'bg-text-tertiary border-text-tertiary', line: 'bg-text-tertiary/30' },\n};\n\nexport function LifecycleSidebar({\n status,\n sourceWorkflowId,\n contentVersion,\n deployedContentVersion,\n onDeploy,\n onArchive,\n onDelete,\n onRegenerate,\n isPending,\n error,\n}: {\n status: string;\n sourceWorkflowId?: string | null;\n contentVersion?: number;\n deployedContentVersion?: number | null;\n onDeploy: () => void;\n onArchive: () => void;\n onDelete: () => void;\n onRegenerate: () => void;\n isPending: boolean;\n error?: string;\n}) {\n // Treat 'deployed' as 'active' since deploy now auto-activates\n const effectiveStatus = status === 'deployed' ? 'active' : status;\n const currentIdx = LIFECYCLE_STEPS.indexOf(effectiveStatus as any);\n const needsRedeploy = contentVersion != null && contentVersion > (deployedContentVersion ?? 0);\n\n return (\n <div>\n <SectionLabel className=\"mb-4\">Lifecycle</SectionLabel>\n\n {/* Out-of-sync warning */}\n {needsRedeploy && effectiveStatus !== 'draft' && effectiveStatus !== 'archived' && (\n <div className=\"mb-4 px-3 py-2 rounded-md bg-status-pending/10 border border-status-pending/30\">\n <p className=\"text-[10px] font-semibold text-status-pending mb-1\">YAML modified</p>\n <p className=\"text-[10px] text-text-secondary leading-relaxed\">\n v{contentVersion} edited since deploy (v{deployedContentVersion}). Redeploy to apply changes.\n </p>\n <button onClick={onDeploy} disabled={isPending} className=\"mt-1.5 text-[10px] font-medium text-status-pending hover:underline\">\n {isPending ? 'Deploying...' : 'Deploy now'}\n </button>\n </div>\n )}\n\n {/* Step sequence */}\n <div className=\"space-y-0\">\n {LIFECYCLE_STEPS.map((step, idx) => {\n const isCurrent = step === effectiveStatus;\n const isDone = idx < currentIdx;\n const isFuture = idx > currentIdx;\n const isLast = idx === LIFECYCLE_STEPS.length - 1;\n const colors = LIFECYCLE_COLORS[step];\n\n return (\n <div key={step} className=\"flex items-stretch gap-3\">\n {/* Vertical track */}\n <div className=\"flex flex-col items-center w-5 shrink-0\">\n <span\n className={`w-3 h-3 rounded-full shrink-0 border-2 transition-colors ${\n isCurrent || isDone\n ? colors.filled\n : 'bg-surface-sunken border-surface-border'\n }`}\n />\n {!isLast && (\n <span className={`w-px flex-1 ${isDone ? colors.line : 'bg-surface-border'}`} />\n )}\n </div>\n\n {/* Label + action */}\n <div className={`pb-5 ${isLast ? 'pb-0' : ''}`}>\n <p className={`text-xs font-medium ${isCurrent ? 'text-text-primary' : isFuture ? 'text-text-tertiary' : 'text-text-secondary'}`}>\n {LIFECYCLE_LABELS[step]}\n </p>\n {/* Show the next-step action */}\n {isCurrent && step === 'draft' && (\n <div className=\"mt-2 flex items-center gap-2\">\n <button onClick={onDeploy} disabled={isPending} className=\"btn-primary text-[11px] px-3 py-1\">\n {isPending ? 'Deploying...' : 'Deploy'}\n </button>\n {sourceWorkflowId && (\n <button onClick={onRegenerate} disabled={isPending} className=\"text-[10px] text-text-tertiary hover:text-text-primary\">\n Regenerate\n </button>\n )}\n </div>\n )}\n {isCurrent && step === 'active' && (\n <div className=\"mt-2 flex items-center gap-2\">\n <button onClick={onArchive} disabled={isPending} className=\"text-[11px] text-text-tertiary hover:text-status-error\">\n Archive\n </button>\n {sourceWorkflowId && (\n <button onClick={onRegenerate} disabled={isPending} className=\"text-[10px] text-text-tertiary hover:text-text-primary\">\n Regenerate\n </button>\n )}\n </div>\n )}\n </div>\n </div>\n );\n })}\n </div>\n\n {/* Version info */}\n {contentVersion != null && (\n <div className=\"mt-4 pt-4 border-t border-surface-border\">\n <p className=\"text-[10px] font-semibold uppercase tracking-widest text-text-tertiary mb-1\">Content Version</p>\n <p className=\"text-xs font-mono text-text-primary\">\n v{contentVersion}\n {deployedContentVersion != null && (\n <span className=\"text-text-tertiary ml-1.5\">(deployed: v{deployedContentVersion})</span>\n )}\n </p>\n </div>\n )}\n\n {/* Delete -- only for draft/archived */}\n {(status === 'draft' || status === 'archived') && (\n <div className=\"mt-4 pt-4 border-t border-surface-border\">\n <button onClick={onDelete} disabled={isPending} className=\"text-[11px] text-status-error hover:underline\">\n Delete workflow tool\n </button>\n </div>\n )}\n\n {error && <p className=\"mt-3 text-[11px] text-status-error\">{error}</p>}\n </div>\n );\n}\n","import { SectionLabel } from '../../../components/common/layout/SectionLabel';\n\nexport function VersionHistory({\n versionsData,\n searchParams,\n setSearchParams,\n currentVersion,\n viewingVersion,\n}: {\n versionsData: any;\n searchParams: URLSearchParams;\n setSearchParams: (v: URLSearchParams) => void;\n currentVersion: number;\n viewingVersion: number | null;\n}) {\n return (\n <div>\n <SectionLabel className=\"mb-3\">Version History</SectionLabel>\n <div className=\"space-y-1\">\n {versionsData.versions.map((v: any) => {\n const isCurrent = v.version === currentVersion;\n const isViewing = viewingVersion === v.version;\n return (\n <button\n key={v.version}\n type=\"button\"\n onClick={() => {\n const next = new URLSearchParams(searchParams);\n if (isCurrent) next.delete('version');\n else next.set('version', String(v.version));\n setSearchParams(next);\n }}\n className={`w-full text-left px-2 py-1.5 rounded text-xs transition-colors ${\n isViewing\n ? 'bg-accent/10 text-accent'\n : 'text-text-secondary hover:bg-surface-sunken hover:text-text-primary'\n }`}\n >\n <span className=\"font-mono font-medium\">v{v.version}</span>\n {isCurrent && <span className=\"text-text-tertiary ml-1\">(current)</span>}\n {v.change_summary && (\n <p className=\"text-[10px] text-text-tertiary truncate mt-0.5\">{v.change_summary}</p>\n )}\n </button>\n );\n })}\n </div>\n </div>\n );\n}\n"],"names":["sanitizeTag","raw","TagInput","tags","onChange","placeholder","compact","input","setInput","useState","inputRef","useRef","addTag","tag","removeTag","t","handleKeyDown","e","jsxs","_a","jsx","X","CLASSIFICATION_STYLES","ClassificationBadge","classification","style","InputSchemaEditor","fields","editing","expandedField","setExpandedField","updateField","index","updates","next","f","i","toggleClassification","field","nextClass","removeField","_","dynamicFields","fixedFields","isExpanded","FieldRow","expanded","onToggleExpand","onToggleClassification","onUpdate","onRemove","val","ConfigurationSection","wf","resolvedInputSchema","resolvedOutputSchema","resolvedYaml","configEditing","setConfigEditing","canEditConfig","yamlDraft","setYamlDraft","inputSchemaDraft","setInputSchemaDraft","outputSchemaDraft","setOutputSchemaDraft","inputFieldMetaDraft","setInputFieldMetaDraft","onSave","onCancel","updateMutation","yamlTextareaRef","isCollapsed","onToggle","schemasGrid","hasFieldMeta","advancedMode","setAdvancedMode","CollapsibleSection","Fragment","JsonViewer","LIFECYCLE_STEPS","LIFECYCLE_LABELS","LIFECYCLE_COLORS","LifecycleSidebar","status","sourceWorkflowId","contentVersion","deployedContentVersion","onDeploy","onArchive","onDelete","onRegenerate","isPending","error","effectiveStatus","currentIdx","needsRedeploy","SectionLabel","step","idx","isCurrent","isDone","isFuture","isLast","colors","VersionHistory","versionsData","searchParams","setSearchParams","currentVersion","viewingVersion","v","isViewing"],"mappings":"yMAWA,SAASA,EAAYC,EAAqB,CACxC,OAAOA,EAAI,cAAc,QAAQ,cAAe,EAAE,EAAE,QAAQ,SAAU,EAAE,CAC1E,CAEO,SAASC,EAAS,CAAE,KAAAC,EAAM,SAAAC,EAAU,YAAAC,EAAc,aAAc,QAAAC,GAA0B,CAC/F,KAAM,CAACC,EAAOC,CAAQ,EAAIC,EAAAA,SAAS,EAAE,EAC/BC,EAAWC,EAAAA,OAAyB,IAAI,EAExCC,EAAUX,GAAgB,CAC9B,MAAMY,EAAMb,EAAYC,CAAG,EACvBY,GAAO,CAACV,EAAK,SAASU,CAAG,GAC3BT,EAAS,CAAC,GAAGD,EAAMU,CAAG,CAAC,EAEzBL,EAAS,EAAE,CACb,EAEMM,EAAaD,GAAgB,CACjCT,EAASD,EAAK,OAAQY,GAAMA,IAAMF,CAAG,CAAC,CACxC,EAEMG,EAAiBC,GAAuC,CACxDA,EAAE,MAAQ,SAAWA,EAAE,MAAQ,KACjCA,EAAE,eAAA,EACFL,EAAOL,CAAK,GACHU,EAAE,MAAQ,aAAe,CAACV,GAASJ,EAAK,OAAS,GAC1DW,EAAUX,EAAKA,EAAK,OAAS,CAAC,CAAC,CAEnC,EAEA,OACEe,EAAAA,KAAC,MAAA,CACC,UACEZ,EACI,sCACA,6KAEN,QAAS,IAAA,OAAM,OAAAa,EAAAT,EAAS,UAAT,YAAAS,EAAkB,SAEhC,SAAA,CAAAhB,EAAK,IAAKU,GACTK,EAAAA,KAAC,OAAA,CAEC,UAAU,2GAET,SAAA,CAAAL,EACDO,EAAAA,IAAC,SAAA,CACC,KAAK,SACL,QAAUH,GAAM,CAAEA,EAAE,gBAAA,EAAmBH,EAAUD,CAAG,CAAG,EACvD,UAAU,4CAEV,SAAAO,EAAAA,IAACC,EAAA,CAAE,UAAU,aAAA,CAAc,CAAA,CAAA,CAC7B,CAAA,EAVKR,CAAA,CAYR,EACDO,EAAAA,IAAC,QAAA,CACC,IAAKV,EACL,KAAK,OACL,MAAOH,EACP,SAAWU,GAAMT,EAASS,EAAE,OAAO,KAAK,EACxC,UAAWD,EACX,OAAQ,IAAM,CAAMT,EAAM,QAAQK,EAAOL,CAAK,CAAG,EACjD,YAAaJ,EAAK,SAAW,EAAIE,EAAc,GAC/C,UAAU,0GAAA,CAAA,CACZ,CAAA,CAAA,CAGN,CCnEA,MAAMiB,EAAqF,CACzF,QAAS,CAAE,GAAI,uBAAwB,KAAM,sBAAuB,MAAO,SAAA,EAC3E,MAAO,CAAE,GAAI,oBAAqB,KAAM,qBAAsB,MAAO,OAAA,EACrE,MAAO,CAAE,GAAI,iBAAkB,KAAM,gBAAiB,MAAO,OAAA,CAC/D,EAEA,SAASC,EAAoB,CAAE,eAAAC,GAA8C,CAC3E,MAAMC,EAAQH,EAAsBE,CAAc,GAAKF,EAAsB,MAC7E,OACEF,EAAAA,IAAC,OAAA,CAAK,UAAW,gDAAgDK,EAAM,EAAE,IAAIA,EAAM,IAAI,GACpF,SAAAA,EAAM,MACT,CAEJ,CAEO,SAASC,EAAkB,CAAE,OAAAC,EAAQ,SAAAvB,EAAU,QAAAwB,GAAmC,CACvF,KAAM,CAACC,EAAeC,CAAgB,EAAIrB,EAAAA,SAAwB,IAAI,EAEhEsB,EAAc,CAACC,EAAeC,IAAqC,CACvE,MAAMC,EAAOP,EAAO,IAAI,CAACQ,EAAGC,IAAMA,IAAMJ,EAAQ,CAAE,GAAGG,EAAG,GAAGF,CAAA,EAAYE,CAAC,EACxE/B,EAAS8B,CAAI,CACf,EAEMG,EAAwBL,GAAkB,CAC9C,MAAMM,EAAQX,EAAOK,CAAK,EACpBO,EAAYD,EAAM,iBAAmB,UAAY,QAAU,UAC3DL,EAAmC,CAAE,eAAgBM,CAAA,EACvDA,IAAc,SAAWD,EAAM,UAAY,SAE7CL,EAAQ,QAAUK,EAAM,OAAS,SAAW,GAAKA,EAAM,OAAS,SAAW,EAAIA,EAAM,OAAS,UAAY,GAAQ,MAEpHP,EAAYC,EAAOC,CAAO,CAC5B,EAEMO,EAAeR,GAAkB,CACrC5B,EAASuB,EAAO,OAAO,CAACc,EAAGL,IAAMA,IAAMJ,CAAK,CAAC,CAC/C,EAEA,GAAIL,EAAO,SAAW,EACpB,OACEP,EAAAA,IAAC,OAAI,UAAU,mBACb,eAAC,IAAA,CAAE,UAAU,6BAA6B,SAAA,8CAAA,CAA4C,CAAA,CACxF,EAIJ,MAAMsB,EAAgBf,EAAO,OAAOQ,GAAKA,EAAE,iBAAmB,SAAS,EACjEQ,EAAchB,EAAO,OAAOQ,GAAKA,EAAE,iBAAmB,OAAO,EAEnE,OACEjB,EAAAA,KAAC,MAAA,CAAI,UAAU,YAEb,SAAA,CAAAA,EAAAA,KAAC,MAAA,CAAI,UAAU,yDACb,SAAA,CAAAA,OAAC,OAAA,CAAM,SAAA,CAAAwB,EAAc,OAAO,0BAAA,EAAwB,SACnD,OAAA,CAAM,SAAA,CAAAC,EAAY,OAAO,kCAAA,CAAA,CAAgC,CAAA,EAC5D,EAGCD,EAAc,OAAS,GACtBxB,EAAAA,KAAC,MAAA,CACC,SAAA,CAAAE,EAAAA,IAAC,IAAA,CAAE,UAAU,iFAAiF,SAAA,0CAE9F,QACC,MAAA,CAAI,UAAU,YACZ,SAAAsB,EAAc,IAAKJ,GAAU,CAC5B,MAAMN,EAAQL,EAAO,QAAQW,CAAK,EAC5BM,EAAaf,IAAkBS,EAAM,IAC3C,OACElB,EAAAA,IAACyB,EAAA,CAEC,MAAAP,EACA,QAAAV,EACA,SAAUgB,EACV,eAAgB,IAAMd,EAAiBc,EAAa,KAAON,EAAM,GAAG,EACpE,uBAAwB,IAAMD,EAAqBL,CAAK,EACxD,SAAWC,GAAYF,EAAYC,EAAOC,CAAO,EACjD,SAAU,IAAMO,EAAYR,CAAK,CAAA,EAP5BM,EAAM,GAAA,CAUjB,CAAC,CAAA,CACH,CAAA,EACF,EAIDK,EAAY,OAAS,GACpBzB,EAAAA,KAAC,MAAA,CACC,SAAA,CAAAE,EAAAA,IAAC,IAAA,CAAE,UAAU,6EAA6E,SAAA,kCAE1F,QACC,MAAA,CAAI,UAAU,YACZ,SAAAuB,EAAY,IAAKL,GAAU,CAC1B,MAAMN,EAAQL,EAAO,QAAQW,CAAK,EAC5BM,EAAaf,IAAkBS,EAAM,IAC3C,OACElB,EAAAA,IAACyB,EAAA,CAEC,MAAAP,EACA,QAAAV,EACA,SAAUgB,EACV,eAAgB,IAAMd,EAAiBc,EAAa,KAAON,EAAM,GAAG,EACpE,uBAAwB,IAAMD,EAAqBL,CAAK,EACxD,SAAWC,GAAYF,EAAYC,EAAOC,CAAO,EACjD,SAAU,IAAMO,EAAYR,CAAK,CAAA,EAP5BM,EAAM,GAAA,CAUjB,CAAC,CAAA,CACH,CAAA,CAAA,CACF,CAAA,EAEJ,CAEJ,CAIA,SAASO,EAAS,CAChB,MAAAP,EACA,QAAAV,EACA,SAAAkB,EACA,eAAAC,EACA,uBAAAC,EACA,SAAAC,EACA,SAAAC,CACF,EAQG,CACD,OACEhC,EAAAA,KAAC,MAAA,CAAI,UAAU,0DACb,SAAA,CAAAA,EAAAA,KAAC,SAAA,CACC,KAAK,SACL,QAAS6B,EACT,UAAU,uFAEV,SAAA,CAAA3B,EAAAA,IAAC,OAAA,CAAK,UAAU,sCAAuC,SAAAkB,EAAM,IAAI,EACjElB,EAAAA,IAAC,OAAA,CAAK,UAAU,gCAAiC,WAAM,KAAK,EAC5DA,EAAAA,IAACG,EAAA,CAAoB,eAAgBe,EAAM,cAAA,CAAgB,EAC1DA,EAAM,UAAY,QACjBpB,EAAAA,KAAC,OAAA,CAAK,UAAU,iEAAiE,SAAA,CAAA,KAC5E,KAAK,UAAUoB,EAAM,OAAO,CAAA,EACjC,EAEFlB,EAAAA,IAAC,OAAA,CAAK,UAAU,+DACb,WAAM,YACT,EACAA,EAAAA,IAAC,MAAA,CACC,UAAW,4DAA4D0B,EAAW,aAAe,EAAE,GACnG,KAAK,OAAO,QAAQ,YAAY,OAAO,eAAe,YAAa,EAEnE,eAAC,OAAA,CAAK,cAAc,QAAQ,eAAe,QAAQ,EAAE,gBAAA,CAAiB,CAAA,CAAA,CACxE,CAAA,CAAA,EAGDA,GACC5B,EAAAA,KAAC,MAAA,CAAI,UAAU,6DACb,SAAA,CAAAE,EAAAA,IAAC,IAAA,CAAE,UAAU,iCAAkC,SAAAkB,EAAM,YAAY,EAEhEV,GACCV,EAAAA,KAAC,MAAA,CAAI,UAAU,YAEb,SAAA,CAAAA,OAAC,MAAA,CACC,SAAA,CAAAE,EAAAA,IAAC,QAAA,CAAM,UAAU,wEAAwE,SAAA,cAAW,EACpGA,EAAAA,IAAC,QAAA,CACC,KAAK,OACL,MAAOkB,EAAM,YACb,SAAWrB,GAAMgC,EAAS,CAAE,YAAahC,EAAE,OAAO,MAAO,EACzD,UAAU,iCAAA,CAAA,CACZ,EACF,EAGCqB,EAAM,iBAAmB,SACxBpB,EAAAA,KAAC,MAAA,CACC,SAAA,CAAAE,EAAAA,IAAC,QAAA,CAAM,UAAU,wEAAwE,SAAA,gBAAa,EACtGA,EAAAA,IAAC,QAAA,CACC,KAAK,OACL,MAAOkB,EAAM,UAAY,OAAa,OAAOA,EAAM,SAAY,SAAWA,EAAM,QAAU,KAAK,UAAUA,EAAM,OAAO,EAAK,GAC3H,SAAWrB,GAAM,CACf,IAAIkC,EAAelC,EAAE,OAAO,MAC5B,GAAIqB,EAAM,OAAS,SAAUa,EAAM,OAAOA,CAAG,GAAK,UACzCb,EAAM,OAAS,UAAWa,EAAMA,IAAQ,WAC1C,IAAI,CAAEA,EAAM,KAAK,MAAMA,CAAa,CAAG,MAAQ,CAAuB,CAC7EF,EAAS,CAAE,QAASE,EAAK,CAC3B,EACA,UAAU,2CAAA,CAAA,CACZ,EACF,EAIFjC,EAAAA,KAAC,MAAA,CAAI,UAAU,+BACb,SAAA,CAAAE,EAAAA,IAAC,SAAA,CACC,KAAK,SACL,QAAS4B,EACT,UAAU,0CAET,SAAAV,EAAM,iBAAmB,UAAY,2BAA6B,8BAAA,CAAA,EAErElB,EAAAA,IAAC,SAAA,CACC,KAAK,SACL,QAAS8B,EACT,UAAU,wDACX,SAAA,QAAA,CAAA,CAED,CAAA,CACF,CAAA,CAAA,CACF,CAAA,CAAA,CAEJ,CAAA,EAEJ,CAEJ,CC7NO,SAASE,EAAqB,CACnC,GAAAC,EACA,oBAAAC,EACA,qBAAAC,EACA,aAAAC,EACA,cAAAC,EACA,iBAAAC,EACA,cAAAC,EACA,UAAAC,EACA,aAAAC,EACA,iBAAAC,EACA,oBAAAC,EACA,kBAAAC,EACA,qBAAAC,EACA,oBAAAC,EACA,uBAAAC,EACA,OAAAC,EACA,SAAAC,EACA,eAAAC,EACA,gBAAAC,EACA,YAAAC,EACA,SAAAC,EACA,YAAAC,CACF,EAwBG,CACD,MAAMC,EAAeT,EAAoB,OAAS,EAC5C,CAACU,EAAcC,CAAe,EAAIpE,EAAAA,SAAS,EAAK,EAEtD,OACEW,EAAAA,IAAC0D,EAAA,CAAmB,WAAW,SAAS,MAAM,gBAAgB,YAAAN,EAA0B,SAAAC,EACtF,SAAAvD,EAAAA,KAAC,MAAA,CAAI,UAAU,YAEb,SAAA,CAAAA,EAAAA,KAAC,MAAA,CAAI,UAAU,oCACb,SAAA,CAAAA,EAAAA,KAAC,MAAA,CAAI,UAAU,0BACb,SAAA,CAAAA,EAAAA,KAAC,IAAA,CACC,KAAK,2EACL,OAAO,SACP,IAAI,sBACJ,UAAU,kEAEV,SAAA,CAAAE,EAAAA,IAAC,OAAI,UAAU,UAAU,KAAK,OAAO,QAAQ,YAAY,OAAO,eAAe,YAAa,EAC1F,SAAAA,EAAAA,IAAC,QAAK,cAAc,QAAQ,eAAe,QAAQ,EAAE,qPAAqP,CAAA,CAC5S,EAAM,YAAA,CAAA,CAAA,EAGPqC,GAAiBkB,GAChBvD,EAAAA,IAAC,SAAA,CACC,KAAK,SACL,QAAS,IAAMyD,EAAgB,CAACD,CAAY,EAC5C,UAAU,yDAET,WAAe,gBAAkB,iBAAA,CAAA,CACpC,EAEJ,EACA1D,EAAAA,KAAC,MAAA,CAAI,UAAU,0BACZ,SAAA,CAAAyC,GAAiB,CAACF,GACjBrC,EAAAA,IAAC,SAAA,CACC,QAAS,IAAM,CAAEsC,EAAiB,EAAI,EAAG,WAAW,IAAA,OAAM,OAAAvC,EAAAoD,EAAgB,UAAhB,YAAApD,EAAyB,SAAS,EAAE,CAAG,EACjG,UAAU,0CACX,SAAA,MAAA,CAAA,EAIFsC,GACCvC,EAAAA,KAAA6D,WAAA,CACE,SAAA,CAAA3D,MAAC,SAAA,CAAO,QAASiD,EAAU,UAAU,yDAAyD,SAAA,SAE9F,EACAjD,EAAAA,IAAC,SAAA,CACC,QAASgD,EACT,SAAUE,EAAe,WACvBV,IAAcP,EAAG,cACdS,IAAqB,KAAK,UAAUT,EAAG,aAAc,KAAM,CAAC,GAC5DW,IAAsB,KAAK,UAAUX,EAAG,cAAe,KAAM,CAAC,EAEnE,UAAU,oFAET,SAAAiB,EAAe,UAAY,YAAc,MAAA,CAAA,CAC5C,CAAA,CACF,CAAA,CAAA,CAEJ,CAAA,EACF,EAECA,EAAe,OACdlD,MAAC,IAAA,CAAE,UAAU,4BAA6B,SAAAkD,EAAe,MAAM,OAAA,CAAQ,EAIzEpD,EAAAA,KAAC,MAAA,CAAI,UAAWwD,EAAc,wCAA0C,YAEtE,SAAA,CAAAxD,OAAC,MAAA,CACC,SAAA,CAAAE,EAAAA,IAAC,KAAA,CAAG,UAAU,8EAA8E,SAAA,eAAY,EAEvGqC,GAAiBkB,GAAgB,CAACC,EACjCxD,EAAAA,IAACM,EAAA,CACC,OAAQwC,EACR,SAAUC,EACV,QAASV,CAAA,CAAA,EAETA,EACFrC,EAAAA,IAAC,WAAA,CACC,MAAO0C,EACP,SAAW7C,GAAM8C,EAAoB9C,EAAE,OAAO,KAAK,EACnD,UAAU,8LACV,KAAM,KAAK,IAAI6C,EAAiB,MAAM;AAAA,CAAI,EAAE,OAAS,EAAG,CAAC,EACzD,MAAO,CAAE,YAAa,SAAA,EACtB,WAAY,EAAA,CAAA,EAEZa,EACFvD,EAAAA,IAACM,EAAA,CACC,OAAQwC,EACR,SAAU,IAAM,CAAC,EACjB,QAAS,EAAA,CAAA,QAGVc,EAAA,CAAW,KAAM1B,GAAuB,CAAA,EAAI,MAAM,EAAA,CAAG,CAAA,EAE1D,SAGC,MAAA,CACC,SAAA,CAAAlC,EAAAA,IAAC,KAAA,CAAG,UAAU,8EAA8E,SAAA,gBAAa,EACxGqC,EACCrC,EAAAA,IAAC,WAAA,CACC,MAAO4C,EACP,SAAW/C,GAAMgD,EAAqBhD,EAAE,OAAO,KAAK,EACpD,UAAU,8LACV,KAAM,KAAK,IAAI+C,EAAkB,MAAM;AAAA,CAAI,EAAE,OAAS,EAAG,CAAC,EAC1D,MAAO,CAAE,YAAa,SAAA,EACtB,WAAY,EAAA,CAAA,QAGbgB,EAAA,CAAW,KAAMzB,GAAwB,CAAA,EAAI,MAAM,EAAA,CAAG,CAAA,CAAA,CAE3D,CAAA,EACF,SAGC,MAAA,CACC,SAAA,CAAAnC,EAAAA,IAAC,KAAA,CAAG,UAAU,8EAA8E,SAAA,kBAAe,EAC1GqC,EACCrC,EAAAA,IAAC,WAAA,CACC,IAAKmD,EACL,MAAOX,EACP,SAAW3C,GAAM4C,EAAa5C,EAAE,OAAO,KAAK,EAC5C,UAAU,8LACV,KAAM2C,EAAU,MAAM;AAAA,CAAI,EAAE,OAAS,EACrC,MAAO,CAAE,YAAa,SAAA,EACtB,WAAY,EAAA,CAAA,EAGdxC,EAAAA,IAAC,MAAA,CAAI,UAAU,wGACZ,SAAAoC,GAAgBH,EAAG,YAAA,CACtB,CAAA,CAAA,CAEJ,CAAA,CAAA,CACF,CAAA,CACF,CAEJ,CC5LA,MAAM4B,EAAkB,CAAC,QAAS,SAAU,UAAU,EAChDC,EAA2C,CAC/C,MAAO,QACP,OAAQ,SACR,SAAU,UACZ,EAEMC,EAAqE,CACzE,MAAU,CAAE,OAAQ,sCAA2C,KAAM,oBAAA,EACrE,OAAU,CAAE,OAAQ,0CAA2C,KAAM,sBAAA,EACrE,SAAU,CAAE,OAAQ,wCAA2C,KAAM,qBAAA,CACvE,EAEO,SAASC,EAAiB,CAC/B,OAAAC,EACA,iBAAAC,EACA,eAAAC,EACA,uBAAAC,EACA,SAAAC,EACA,UAAAC,EACA,SAAAC,EACA,aAAAC,EACA,UAAAC,EACA,MAAAC,CACF,EAWG,CAED,MAAMC,EAAkBV,IAAW,WAAa,SAAWA,EACrDW,EAAaf,EAAgB,QAAQc,CAAsB,EAC3DE,EAAgBV,GAAkB,MAAQA,GAAkBC,GAA0B,GAE5F,cACG,MAAA,CACC,SAAA,CAAApE,EAAAA,IAAC8E,EAAA,CAAa,UAAU,OAAO,SAAA,YAAS,EAGvCD,GAAiBF,IAAoB,SAAWA,IAAoB,YACnE7E,OAAC,MAAA,CAAI,UAAU,iFACb,SAAA,CAAAE,EAAAA,IAAC,IAAA,CAAE,UAAU,qDAAqD,SAAA,gBAAa,EAC/EF,EAAAA,KAAC,IAAA,CAAE,UAAU,kDAAkD,SAAA,CAAA,IAC3DqE,EAAe,0BAAwBC,EAAuB,+BAAA,EAClE,EACApE,EAAAA,IAAC,SAAA,CAAO,QAASqE,EAAU,SAAUI,EAAW,UAAU,qEACvD,SAAAA,EAAY,eAAiB,YAAA,CAChC,CAAA,EACF,EAIFzE,MAAC,OAAI,UAAU,YACZ,WAAgB,IAAI,CAAC+E,EAAMC,IAAQ,CAClC,MAAMC,EAAYF,IAASJ,EACrBO,EAASF,EAAMJ,EACfO,EAAWH,EAAMJ,EACjBQ,EAASJ,IAAQnB,EAAgB,OAAS,EAC1CwB,EAAStB,EAAiBgB,CAAI,EAEpC,OACEjF,EAAAA,KAAC,MAAA,CAAe,UAAU,2BAExB,SAAA,CAAAA,EAAAA,KAAC,MAAA,CAAI,UAAU,0CACb,SAAA,CAAAE,EAAAA,IAAC,OAAA,CACC,UAAW,4DACTiF,GAAaC,EACTG,EAAO,OACP,yCACN,EAAA,CAAA,EAED,CAACD,GACApF,EAAAA,IAAC,OAAA,CAAK,UAAW,eAAekF,EAASG,EAAO,KAAO,mBAAmB,EAAA,CAAI,CAAA,EAElF,SAGC,MAAA,CAAI,UAAW,QAAQD,EAAS,OAAS,EAAE,GAC1C,SAAA,CAAApF,EAAAA,IAAC,IAAA,CAAE,UAAW,uBAAuBiF,EAAY,oBAAsBE,EAAW,qBAAuB,qBAAqB,GAC3H,SAAArB,EAAiBiB,CAAI,EACxB,EAECE,GAAaF,IAAS,SACrBjF,EAAAA,KAAC,MAAA,CAAI,UAAU,+BACb,SAAA,CAAAE,EAAAA,IAAC,SAAA,CAAO,QAASqE,EAAU,SAAUI,EAAW,UAAU,oCACvD,SAAAA,EAAY,eAAiB,QAAA,CAChC,EACCP,SACE,SAAA,CAAO,QAASM,EAAc,SAAUC,EAAW,UAAU,yDAAyD,SAAA,YAAA,CAEvH,CAAA,EAEJ,EAEDQ,GAAaF,IAAS,UACrBjF,EAAAA,KAAC,MAAA,CAAI,UAAU,+BACb,SAAA,CAAAE,EAAAA,IAAC,UAAO,QAASsE,EAAW,SAAUG,EAAW,UAAU,yDAAyD,SAAA,SAAA,CAEpH,EACCP,SACE,SAAA,CAAO,QAASM,EAAc,SAAUC,EAAW,UAAU,yDAAyD,SAAA,YAAA,CAEvH,CAAA,CAAA,CAEJ,CAAA,CAAA,CAEJ,CAAA,CAAA,EA7CQM,CA8CV,CAEJ,CAAC,CAAA,CACH,EAGCZ,GAAkB,MACjBrE,OAAC,MAAA,CAAI,UAAU,2CACb,SAAA,CAAAE,EAAAA,IAAC,IAAA,CAAE,UAAU,8EAA8E,SAAA,kBAAe,EAC1GF,EAAAA,KAAC,IAAA,CAAE,UAAU,sCAAsC,SAAA,CAAA,IAC/CqE,EACDC,GAA0B,MACzBtE,OAAC,OAAA,CAAK,UAAU,4BAA4B,SAAA,CAAA,eAAasE,EAAuB,GAAA,CAAA,CAAC,CAAA,CAAA,CAErF,CAAA,EACF,GAIAH,IAAW,SAAWA,IAAW,aACjCjE,MAAC,OAAI,UAAU,2CACb,SAAAA,EAAAA,IAAC,SAAA,CAAO,QAASuE,EAAU,SAAUE,EAAW,UAAU,gDAAgD,gCAE1G,EACF,EAGDC,GAAS1E,EAAAA,IAAC,IAAA,CAAE,UAAU,qCAAsC,SAAA0E,CAAA,CAAM,CAAA,EACrE,CAEJ,CChJO,SAASY,EAAe,CAC7B,aAAAC,EACA,aAAAC,EACA,gBAAAC,EACA,eAAAC,EACA,eAAAC,CACF,EAMG,CACD,cACG,MAAA,CACC,SAAA,CAAA3F,EAAAA,IAAC8E,EAAA,CAAa,UAAU,OAAO,SAAA,kBAAe,EAC9C9E,MAAC,OAAI,UAAU,YACZ,WAAa,SAAS,IAAK4F,GAAW,CACrC,MAAMX,EAAYW,EAAE,UAAYF,EAC1BG,EAAYF,IAAmBC,EAAE,QACvC,OACE9F,EAAAA,KAAC,SAAA,CAEC,KAAK,SACL,QAAS,IAAM,CACb,MAAMgB,EAAO,IAAI,gBAAgB0E,CAAY,EACzCP,EAAWnE,EAAK,OAAO,SAAS,IAC1B,IAAI,UAAW,OAAO8E,EAAE,OAAO,CAAC,EAC1CH,EAAgB3E,CAAI,CACtB,EACA,UAAW,kEACT+E,EACI,2BACA,qEACN,GAEA,SAAA,CAAA/F,EAAAA,KAAC,OAAA,CAAK,UAAU,wBAAwB,SAAA,CAAA,IAAE8F,EAAE,OAAA,EAAQ,EACnDX,GAAajF,EAAAA,IAAC,OAAA,CAAK,UAAU,0BAA0B,SAAA,YAAS,EAChE4F,EAAE,gBACD5F,EAAAA,IAAC,KAAE,UAAU,iDAAkD,WAAE,cAAA,CAAe,CAAA,CAAA,EAjB7E4F,EAAE,OAAA,CAqBb,CAAC,CAAA,CACH,CAAA,EACF,CAEJ"}
|
|
@@ -1,2 +0,0 @@
|
|
|
1
|
-
import{a as g,j as e}from"./vendor-query-B2UbickB.js";import{a as W,g as I}from"./workflows-Cc4VHcrp.js";import{b as S}from"./useNatsEvents-Xr43X1fG.js";import{u as $,E as L}from"./EventTable-B01oJf6Y.js";import{b as M,e as P}from"./tasks-tRqClPns.js";import{J as N,b as R}from"./index-D8VH6K8B.js";import{P as A}from"./PageHeader-CpWFly5S.js";import{C as k}from"./CollapsibleSection-Cxk4wvjT.js";import{S as T}from"./StatusBadge-TlC4jiig.js";import{b as _,f as z}from"./format-gXZXQ-HJ.js";import{L as v,d as B,u as H,b as K}from"./vendor-react-Cw8Gy8NJ.js";import{S as O}from"./SwimlaneTimeline-7SiwATsZ.js";import"./FilterBar-Ck4K4rzu.js";import"./vendor-icons-ZTAKVwGc.js";function d({label:t,value:r,mono:a,truncate:s}){return e.jsxs("div",{children:[e.jsx("p",{className:"text-[10px] font-semibold uppercase tracking-widest text-text-tertiary mb-1",children:t}),e.jsx("p",{className:`text-xs text-text-primary ${a?"font-mono":""} ${s?"truncate":""}`,title:s?r:void 0,children:r})]})}function Q(t){const r=t.lastIndexOf("-");return r<=0?{taskQueue:t,workflowType:t}:{taskQueue:t.substring(0,r),workflowType:t.substring(r+1)}}function D({execution:t,task:r,escalations:a,hasToolCalls:s,onAction:m}){const[l,u]=g.useState(!1),n=g.useRef(null);g.useEffect(()=>{if(!l)return;const i=j=>{n.current&&!n.current.contains(j.target)&&u(!1)};return document.addEventListener("mousedown",i),()=>document.removeEventListener("mousedown",i)},[l]);const x=r&&r.workflow_id===t.workflow_id?r.parent_workflow_id:null,p=t.status!=="completed"&&t.status!=="failed",{taskQueue:f,workflowType:h}=Q(t.workflow_type);return e.jsxs("div",{className:"px-6 py-6 mb-6",children:[e.jsxs("div",{className:"flex items-center gap-4 mb-5",children:[e.jsx("h2",{className:"text-lg font-medium text-text-primary font-mono truncate flex-1",children:t.workflow_id}),e.jsx(T,{status:t.status}),m&&e.jsxs("div",{className:"relative",ref:n,children:[e.jsx("button",{onClick:()=>u(!l),className:"btn-primary text-xs",children:"Actions"}),l&&e.jsxs("div",{className:"absolute right-0 mt-1 w-44 bg-surface-raised border border-surface-border rounded-md shadow-lg z-10",children:[e.jsx("button",{onClick:()=>{m("restart"),u(!1)},className:"block w-full text-left px-4 py-2 text-xs text-text-secondary hover:bg-surface-hover",children:"Restart Workflow"}),p&&e.jsx("button",{onClick:()=>{m("terminate"),u(!1)},className:"block w-full text-left px-4 py-2 text-xs text-status-error hover:bg-surface-hover",children:"Terminate"}),s&&e.jsx(v,{to:`/mcp/queries/${t.workflow_id}?step=3`,className:"block w-full text-left px-4 py-2 text-xs text-accent hover:bg-surface-hover",onClick:()=>u(!1),children:"Compile into Pipeline"})]})]})]}),e.jsxs("div",{className:"grid grid-cols-2 sm:grid-cols-4 gap-y-4 gap-x-8",children:[e.jsx(d,{label:"Workflow Type",value:h,mono:!0}),e.jsx(d,{label:"Task Queue",value:f,mono:!0}),e.jsx(d,{label:"Start Time",value:_(t.start_time)}),e.jsx(d,{label:"End Time",value:_(t.close_time)}),e.jsx(d,{label:"Duration",value:z(t.duration_ms),mono:!0}),e.jsx(d,{label:"History Size",value:`${t.summary.total_events} events`}),e.jsx(d,{label:"Activities",value:`${t.summary.activities.completed} / ${t.summary.activities.total}`}),e.jsx(d,{label:"Run ID",value:t.workflow_id,mono:!0,truncate:!0})]}),(x||r||a&&a.length>0)&&e.jsxs("div",{className:"mt-5 pt-4 border-t border-surface-border space-y-3",children:[x&&e.jsxs("div",{className:"flex items-center gap-2",children:[e.jsx("span",{className:"text-[10px] font-semibold uppercase tracking-widest text-text-tertiary shrink-0",children:"Parent"}),e.jsx(v,{to:`/workflows/executions/${x}`,className:"text-xs font-mono text-accent hover:underline truncate",title:x,children:x})]}),!1,a&&a.length>0&&e.jsxs("div",{className:"flex items-start gap-2",children:[e.jsx("span",{className:"text-[10px] font-semibold uppercase tracking-widest text-text-tertiary shrink-0 mt-0.5",children:a.length===1?"Escalation":"Escalations"}),e.jsx("div",{className:"flex flex-wrap gap-x-4 gap-y-1",children:a.map(i=>e.jsxs(v,{to:`/escalations/detail/${i.id}`,className:"inline-flex items-center gap-1.5 text-xs font-mono text-accent hover:underline",children:[e.jsx("span",{children:i.type}),e.jsx(T,{status:i.status})]},i.id))})]})]})]})}function J(t){var s;const r=t.events.find(m=>m.event_type==="workflow_execution_started"),a=(s=r==null?void 0:r.attributes)==null?void 0:s.input;return a&&typeof a=="object"?a:null}function V({execution:t}){const r=J(t),a=t.result,s=(a==null?void 0:a.data)??a??null;return!r&&!s?null:e.jsxs("div",{className:"grid grid-cols-1 md:grid-cols-2 gap-4 mb-6",children:[r!==null&&e.jsx("div",{children:e.jsx(N,{data:r,label:"Input Envelope"})}),s!==null&&e.jsx("div",{children:e.jsx(N,{data:s,label:"Result"})})]})}function le(){const{workflowId:t}=B(),{pathname:r}=H();S(t);const a=r.startsWith("/workflows/durable/")?"Durable Execution":"Certified Execution",{data:s,isLoading:m,error:l}=W(t),{data:u}=M(t),{data:n}=P(t),{data:w}=R(t),x=K(),p=I(),{isCollapsed:f,toggle:h}=$("workflow-execution"),i=c=>{var o;if(c==="terminate")confirm("Are you sure you want to terminate this workflow?")&&p.mutate(t);else if(c==="restart"&&s){const E=s.workflow_id.replace(/-[A-Za-z0-9_-]{20,}$/,""),b=s.events.find(C=>C.event_type==="workflow_execution_started"),y=(o=b==null?void 0:b.attributes)==null?void 0:o.input;y&&sessionStorage.setItem("lt:invoke:prefill",JSON.stringify(y)),x(`/workflows/start?type=${encodeURIComponent(E)}&mode=now`)}};if(m)return e.jsxs("div",{className:"animate-pulse space-y-4",children:[e.jsx("div",{className:"h-8 bg-surface-sunken rounded w-64"}),e.jsx("div",{className:"h-60 bg-surface-sunken rounded"})]});if(l||!s){const c=(l==null?void 0:l.message)??"",o=c.includes("expired")||c.includes("no longer available");return e.jsxs("div",{children:[e.jsx(v,{to:"/workflows/executions",className:"text-xs text-text-tertiary hover:text-text-primary",children:"← Workflows"}),e.jsxs("div",{className:"mt-4 text-center py-8",children:[e.jsx("p",{className:"text-sm text-text-primary mb-1",children:o?"Execution data is no longer available":l?"Unable to load execution":"Execution not found"}),e.jsx("p",{className:"text-xs text-text-tertiary",children:o?"This workflow's underlying job has expired. The task record is preserved, but the execution timeline has been cleaned up.":c||"The workflow could not be resolved."})]})]})}const j=s.status==="completed"&&s.events.some(c=>{if(c.event_type!=="activity_task_completed")return!1;const o=c.attributes.activity_type;return o==="callDbTool"||o==="callVisionTool"||o==="callMcpTool"||(o==null?void 0:o.startsWith("mcp_"))});return e.jsxs("div",{children:[e.jsx(A,{title:a,actions:j?e.jsxs(v,{to:`/mcp/queries/${t}?step=3`,className:"group flex items-center gap-2 text-left",children:[e.jsx("span",{className:"flex items-center justify-center w-5 h-5 rounded-full bg-accent/10 text-accent shrink-0",children:e.jsx("svg",{className:"w-3 h-3",fill:"none",viewBox:"0 0 24 24",stroke:"currentColor",strokeWidth:2,children:e.jsx("path",{strokeLinecap:"round",strokeLinejoin:"round",d:"M9.663 17h4.674M12 3v1m6.364 1.636l-.707.707M21 12h-1M4 12H3m3.343-5.657l-.707-.707m2.828 9.9a5 5 0 117.072 0l-.548.547A3.374 3.374 0 0014 18.469V19a2 2 0 11-4 0v-.531c0-.895-.356-1.754-.988-2.386l-.548-.547z"})})}),e.jsxs("span",{className:"text-xs text-text-secondary group-hover:text-text-primary transition-colors",children:["This execution used MCP tools."," ",e.jsx("span",{className:"text-accent group-hover:underline",children:"Compile into Pipeline"})]})]}):void 0}),e.jsx(D,{execution:s,task:u,childTasks:n==null?void 0:n.tasks,escalations:w==null?void 0:w.escalations,hasToolCalls:j,onAction:i}),p.error&&e.jsx("div",{className:"py-3 mb-6",children:e.jsxs("p",{className:"text-xs text-status-error",children:["Terminate failed: ",p.error.message]})}),e.jsxs("div",{className:"space-y-6",children:[e.jsx(k,{title:"Details",sectionKey:"details",isCollapsed:f("details"),onToggle:h,contentClassName:"mt-4 ml-9",children:e.jsx(V,{execution:s})}),e.jsx(k,{title:"Execution Timeline",sectionKey:"timeline",isCollapsed:f("timeline"),onToggle:h,contentClassName:"mt-4 ml-9",children:e.jsx(O,{events:s.events,childTasks:n==null?void 0:n.tasks})}),e.jsx(k,{title:"Events",sectionKey:"events",isCollapsed:f("events"),onToggle:h,contentClassName:"mt-4 ml-9",children:e.jsx(L,{events:s.events,childTasks:n==null?void 0:n.tasks})})]})]})}export{le as WorkflowExecutionPage};
|
|
2
|
-
//# sourceMappingURL=WorkflowExecutionPage-DjtAQ3hy.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"WorkflowExecutionPage-DjtAQ3hy.js","sources":["../../src/pages/workflows/workflow-execution/ExecutionHeader.tsx","../../src/pages/workflows/workflow-execution/ExecutionInputResult.tsx","../../src/pages/workflows/WorkflowExecutionPage.tsx"],"sourcesContent":["import { useState, useRef, useEffect } from 'react';\nimport { Link } from 'react-router-dom';\nimport { StatusBadge } from '../../../components/common/display/StatusBadge';\nimport type { WorkflowExecution, LTTaskRecord, LTEscalationRecord } from '../../../api/types';\nimport { formatDuration, formatDateTime } from './utils';\n\nfunction MetadataField({\n label,\n value,\n mono,\n truncate,\n}: {\n label: string;\n value: string;\n mono?: boolean;\n truncate?: boolean;\n}) {\n return (\n <div>\n <p className=\"text-[10px] font-semibold uppercase tracking-widest text-text-tertiary mb-1\">\n {label}\n </p>\n <p\n className={`text-xs text-text-primary ${mono ? 'font-mono' : ''} ${truncate ? 'truncate' : ''}`}\n title={truncate ? value : undefined}\n >\n {value}\n </p>\n </div>\n );\n}\n\n/**\n * Split a HotMesh compound entity key (taskQueue-workflowName) on the last '-'.\n * Workflow names are camelCase, so the last segment is always the workflow type.\n */\nfunction splitEntityKey(compound: string): { taskQueue: string; workflowType: string } {\n const lastDash = compound.lastIndexOf('-');\n if (lastDash <= 0) return { taskQueue: compound, workflowType: compound };\n return {\n taskQueue: compound.substring(0, lastDash),\n workflowType: compound.substring(lastDash + 1),\n };\n}\n\ninterface ExecutionHeaderProps {\n execution: WorkflowExecution;\n task?: LTTaskRecord | null;\n childTasks?: LTTaskRecord[];\n escalations?: LTEscalationRecord[];\n hasToolCalls?: boolean;\n onAction?: (action: 'restart' | 'terminate') => void;\n}\n\nexport function ExecutionHeader({ execution, task, escalations, hasToolCalls, onAction }: ExecutionHeaderProps) {\n const [actionsOpen, setActionsOpen] = useState(false);\n const dropdownRef = useRef<HTMLDivElement>(null);\n\n // Close dropdown when clicking outside\n useEffect(() => {\n if (!actionsOpen) return;\n const handler = (e: MouseEvent) => {\n if (dropdownRef.current && !dropdownRef.current.contains(e.target as Node)) {\n setActionsOpen(false);\n }\n };\n document.addEventListener('mousedown', handler);\n return () => document.removeEventListener('mousedown', handler);\n }, [actionsOpen]);\n\n // Determine parent relationship\n const isLeaf = task && task.workflow_id === execution.workflow_id;\n const parentWorkflowId = isLeaf ? task.parent_workflow_id : null;\n\n const isRunning = execution.status !== 'completed' && execution.status !== 'failed';\n\n // Split compound HotMesh keys into separate task queue / workflow type\n const { taskQueue, workflowType } = splitEntityKey(execution.workflow_type);\n\n return (\n <div className=\"px-6 py-6 mb-6\">\n <div className=\"flex items-center gap-4 mb-5\">\n <h2 className=\"text-lg font-medium text-text-primary font-mono truncate flex-1\">\n {execution.workflow_id}\n </h2>\n <StatusBadge status={execution.status} />\n {onAction && (\n <div className=\"relative\" ref={dropdownRef}>\n <button\n onClick={() => setActionsOpen(!actionsOpen)}\n className=\"btn-primary text-xs\"\n >\n Actions\n </button>\n {actionsOpen && (\n <div className=\"absolute right-0 mt-1 w-44 bg-surface-raised border border-surface-border rounded-md shadow-lg z-10\">\n <button\n onClick={() => {\n onAction('restart');\n setActionsOpen(false);\n }}\n className=\"block w-full text-left px-4 py-2 text-xs text-text-secondary hover:bg-surface-hover\"\n >\n Restart Workflow\n </button>\n {isRunning && (\n <button\n onClick={() => {\n onAction('terminate');\n setActionsOpen(false);\n }}\n className=\"block w-full text-left px-4 py-2 text-xs text-status-error hover:bg-surface-hover\"\n >\n Terminate\n </button>\n )}\n {hasToolCalls && (\n <Link\n to={`/mcp/queries/${execution.workflow_id}?step=3`}\n className=\"block w-full text-left px-4 py-2 text-xs text-accent hover:bg-surface-hover\"\n onClick={() => setActionsOpen(false)}\n >\n Compile into Pipeline\n </Link>\n )}\n </div>\n )}\n </div>\n )}\n </div>\n\n <div className=\"grid grid-cols-2 sm:grid-cols-4 gap-y-4 gap-x-8\">\n <MetadataField label=\"Workflow Type\" value={workflowType} mono />\n <MetadataField label=\"Task Queue\" value={taskQueue} mono />\n <MetadataField label=\"Start Time\" value={formatDateTime(execution.start_time)} />\n <MetadataField label=\"End Time\" value={formatDateTime(execution.close_time)} />\n <MetadataField\n label=\"Duration\"\n value={formatDuration(execution.duration_ms)}\n mono\n />\n <MetadataField\n label=\"History Size\"\n value={`${execution.summary.total_events} events`}\n />\n <MetadataField\n label=\"Activities\"\n value={`${execution.summary.activities.completed} / ${execution.summary.activities.total}`}\n />\n <MetadataField\n label=\"Run ID\"\n value={execution.workflow_id}\n mono\n truncate\n />\n </div>\n\n {/* Related links */}\n {(parentWorkflowId || task || (escalations && escalations.length > 0)) && (\n <div className=\"mt-5 pt-4 border-t border-surface-border space-y-3\">\n {/* Parent navigation */}\n {parentWorkflowId && (\n <div className=\"flex items-center gap-2\">\n <span className=\"text-[10px] font-semibold uppercase tracking-widest text-text-tertiary shrink-0\">\n Parent\n </span>\n <Link\n to={`/workflows/executions/${parentWorkflowId}`}\n className=\"text-xs font-mono text-accent hover:underline truncate\"\n title={parentWorkflowId}\n >\n {parentWorkflowId}\n </Link>\n </div>\n )}\n\n {/* Process link — deep-links to process list filtered by this workflow */}\n {false && (\n <div className=\"flex items-center gap-2\">\n <span className=\"text-[10px] font-semibold uppercase tracking-widest text-text-tertiary shrink-0\">\n Process\n </span>\n <Link\n to={`/processes/all?search=${encodeURIComponent(execution.workflow_id)}`}\n className=\"text-xs font-mono text-accent hover:underline truncate\"\n >\n Find in Processes\n </Link>\n </div>\n )}\n\n {/* Escalation links */}\n {escalations && escalations.length > 0 && (\n <div className=\"flex items-start gap-2\">\n <span className=\"text-[10px] font-semibold uppercase tracking-widest text-text-tertiary shrink-0 mt-0.5\">\n {escalations.length === 1 ? 'Escalation' : 'Escalations'}\n </span>\n <div className=\"flex flex-wrap gap-x-4 gap-y-1\">\n {escalations.map((esc) => (\n <Link\n key={esc.id}\n to={`/escalations/detail/${esc.id}`}\n className=\"inline-flex items-center gap-1.5 text-xs font-mono text-accent hover:underline\"\n >\n <span>{esc.type}</span>\n <StatusBadge status={esc.status} />\n </Link>\n ))}\n </div>\n </div>\n )}\n </div>\n )}\n </div>\n );\n}\n","import { JsonViewer } from '../../../components/common/data/JsonViewer';\nimport type { WorkflowExecution } from '../../../api/types';\n\ninterface ExecutionInputResultProps {\n execution: WorkflowExecution;\n}\n\n/**\n * Extract the workflow input envelope from the workflow_execution_started event.\n * HotMesh 0.13.0+ includes the actual trigger arguments (the envelope passed\n * to startWorkflow) in the start event's `input` attribute.\n */\nfunction extractInput(execution: WorkflowExecution): Record<string, unknown> | null {\n const startEvent = execution.events.find(\n (e) => e.event_type === 'workflow_execution_started',\n );\n const input = (startEvent?.attributes as any)?.input;\n return input && typeof input === 'object' ? input : null;\n}\n\nexport function ExecutionInputResult({ execution }: ExecutionInputResultProps) {\n const input = extractInput(execution);\n\n // Result: unwrap the workflow return — the `data` field is what LT users care about\n const rawResult = execution.result as Record<string, unknown> | null | undefined;\n const result = rawResult?.data ?? rawResult ?? null;\n\n if (!input && !result) return null;\n\n return (\n <div className=\"grid grid-cols-1 md:grid-cols-2 gap-4 mb-6\">\n {input !== null && (\n <div>\n <JsonViewer data={input} label=\"Input Envelope\" />\n </div>\n )}\n {result !== null && (\n <div>\n <JsonViewer data={result} label=\"Result\" />\n </div>\n )}\n </div>\n );\n}\n","import { useParams, useLocation, useNavigate, Link } from 'react-router-dom';\nimport { useWorkflowExecution, useTerminateWorkflow } from '../../api/workflows';\nimport { useWorkflowDetailEvents } from '../../hooks/useNatsEvents';\nimport { useCollapsedSections } from '../../hooks/useCollapsedSections';\nimport { useTaskByWorkflowId, useChildTasks } from '../../api/tasks';\nimport { useEscalationsByWorkflowId } from '../../api/escalations';\n\nimport { PageHeader } from '../../components/common/layout/PageHeader';\nimport { CollapsibleSection } from '../../components/common/layout/CollapsibleSection';\n\nimport { ExecutionHeader } from './workflow-execution/ExecutionHeader';\nimport { ExecutionInputResult } from './workflow-execution/ExecutionInputResult';\nimport { SwimlaneTimeline } from './workflow-execution/SwimlaneTimeline';\nimport { EventTable } from './workflow-execution/EventTable';\nexport function WorkflowExecutionPage() {\n const { workflowId } = useParams<{ workflowId: string }>();\n const { pathname } = useLocation();\n useWorkflowDetailEvents(workflowId);\n\n const executionTitle = pathname.startsWith('/workflows/durable/')\n ? 'Durable Execution'\n : 'Certified Execution';\n const { data: execution, isLoading, error } = useWorkflowExecution(workflowId!);\n const { data: task } = useTaskByWorkflowId(workflowId!);\n const { data: childTasksData } = useChildTasks(workflowId!);\n const { data: escalationsData } = useEscalationsByWorkflowId(workflowId);\n const navigate = useNavigate();\n const terminateMutation = useTerminateWorkflow();\n const { isCollapsed, toggle } = useCollapsedSections('workflow-execution');\n\n const handleAction = (action: 'restart' | 'terminate') => {\n if (action === 'terminate') {\n if (confirm('Are you sure you want to terminate this workflow?')) {\n terminateMutation.mutate(workflowId!);\n }\n } else if (action === 'restart' && execution) {\n // Extract entity from workflow_id (format: {entity}-{guid})\n const entity = execution.workflow_id.replace(/-[A-Za-z0-9_-]{20,}$/, '');\n // Extract original input from the started event\n const startEvent = execution.events.find((e) => e.event_type === 'workflow_execution_started');\n const input = (startEvent?.attributes as any)?.input;\n if (input) {\n sessionStorage.setItem('lt:invoke:prefill', JSON.stringify(input));\n }\n navigate(`/workflows/start?type=${encodeURIComponent(entity)}&mode=now`);\n }\n };\n\n if (isLoading) {\n return (\n <div className=\"animate-pulse space-y-4\">\n <div className=\"h-8 bg-surface-sunken rounded w-64\" />\n <div className=\"h-60 bg-surface-sunken rounded\" />\n </div>\n );\n }\n\n if (error || !execution) {\n const msg = (error as Error)?.message ?? '';\n const isExpired = msg.includes('expired') || msg.includes('no longer available');\n\n return (\n <div>\n <Link to=\"/workflows/executions\" className=\"text-xs text-text-tertiary hover:text-text-primary\">\n ← Workflows\n </Link>\n <div className=\"mt-4 text-center py-8\">\n <p className=\"text-sm text-text-primary mb-1\">\n {isExpired\n ? 'Execution data is no longer available'\n : error\n ? 'Unable to load execution'\n : 'Execution not found'}\n </p>\n <p className=\"text-xs text-text-tertiary\">\n {isExpired\n ? \"This workflow's underlying job has expired. The task record is preserved, but the execution timeline has been cleaned up.\"\n : msg || 'The workflow could not be resolved.'}\n </p>\n </div>\n </div>\n );\n }\n\n const hasToolCalls = execution.status === 'completed' && execution.events.some(\n (e) => {\n if (e.event_type !== 'activity_task_completed') return false;\n const actType = (e.attributes as any).activity_type;\n return actType === 'callDbTool' || actType === 'callVisionTool' || actType === 'callMcpTool' || actType?.startsWith('mcp_');\n },\n );\n\n return (\n <div>\n <PageHeader\n title={executionTitle}\n actions={\n hasToolCalls ? (\n <Link\n to={`/mcp/queries/${workflowId}?step=3`}\n className=\"group flex items-center gap-2 text-left\"\n >\n <span className=\"flex items-center justify-center w-5 h-5 rounded-full bg-accent/10 text-accent shrink-0\">\n <svg className=\"w-3 h-3\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" strokeWidth={2}>\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" d=\"M9.663 17h4.674M12 3v1m6.364 1.636l-.707.707M21 12h-1M4 12H3m3.343-5.657l-.707-.707m2.828 9.9a5 5 0 117.072 0l-.548.547A3.374 3.374 0 0014 18.469V19a2 2 0 11-4 0v-.531c0-.895-.356-1.754-.988-2.386l-.548-.547z\" />\n </svg>\n </span>\n <span className=\"text-xs text-text-secondary group-hover:text-text-primary transition-colors\">\n This execution used MCP tools.{' '}\n <span className=\"text-accent group-hover:underline\">Compile into Pipeline</span>\n </span>\n </Link>\n ) : undefined\n }\n />\n\n <ExecutionHeader\n execution={execution}\n task={task}\n childTasks={childTasksData?.tasks}\n escalations={escalationsData?.escalations}\n hasToolCalls={hasToolCalls}\n onAction={handleAction}\n />\n\n {terminateMutation.error && (\n <div className=\"py-3 mb-6\">\n <p className=\"text-xs text-status-error\">\n Terminate failed: {terminateMutation.error.message}\n </p>\n </div>\n )}\n\n\n <div className=\"space-y-6\">\n <CollapsibleSection title=\"Details\" sectionKey=\"details\" isCollapsed={isCollapsed('details')} onToggle={toggle} contentClassName=\"mt-4 ml-9\">\n <ExecutionInputResult execution={execution} />\n </CollapsibleSection>\n\n <CollapsibleSection title=\"Execution Timeline\" sectionKey=\"timeline\" isCollapsed={isCollapsed('timeline')} onToggle={toggle} contentClassName=\"mt-4 ml-9\">\n <SwimlaneTimeline\n events={execution.events}\n childTasks={childTasksData?.tasks}\n />\n </CollapsibleSection>\n\n <CollapsibleSection title=\"Events\" sectionKey=\"events\" isCollapsed={isCollapsed('events')} onToggle={toggle} contentClassName=\"mt-4 ml-9\">\n <EventTable\n events={execution.events}\n childTasks={childTasksData?.tasks}\n />\n </CollapsibleSection>\n </div>\n </div>\n );\n}\n"],"names":["MetadataField","label","value","mono","truncate","jsx","splitEntityKey","compound","lastDash","ExecutionHeader","execution","task","escalations","hasToolCalls","onAction","actionsOpen","setActionsOpen","useState","dropdownRef","useRef","useEffect","handler","e","parentWorkflowId","isRunning","taskQueue","workflowType","jsxs","StatusBadge","Link","formatDateTime","formatDuration","esc","extractInput","startEvent","input","_a","ExecutionInputResult","rawResult","result","JsonViewer","WorkflowExecutionPage","workflowId","useParams","pathname","useLocation","useWorkflowDetailEvents","executionTitle","isLoading","error","useWorkflowExecution","useTaskByWorkflowId","childTasksData","useChildTasks","escalationsData","useEscalationsByWorkflowId","navigate","useNavigate","terminateMutation","useTerminateWorkflow","isCollapsed","toggle","useCollapsedSections","handleAction","action","entity","msg","isExpired","actType","PageHeader","CollapsibleSection","SwimlaneTimeline","EventTable"],"mappings":"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"}
|
|
@@ -1,2 +0,0 @@
|
|
|
1
|
-
import{j as o}from"./vendor-query-B2UbickB.js";import{q as r,d as l}from"./vendor-icons-ZTAKVwGc.js";function i({type:n,size:s="sm",certified:t}){const e=s==="md"?"px-2.5 py-0.5 text-[11px] gap-1.5":"px-2 py-0.5 text-[10px] gap-1",c=s==="md"?"w-3 h-3":"w-2.5 h-2.5",a=t?r:l,x=t?"text-status-success":"text-accent/75";return o.jsxs("span",{className:`inline-flex items-center ${e} font-mono bg-accent/[0.06] text-text-secondary rounded-lg`,children:[o.jsx(a,{className:`${c} shrink-0 ${x}`}),n]})}export{i as W};
|
|
2
|
-
//# sourceMappingURL=WorkflowPill-CCDSVaQj.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"WorkflowPill-CCDSVaQj.js","sources":["../../src/components/common/display/WorkflowPill.tsx"],"sourcesContent":["import { Workflow, ShieldCheck } from 'lucide-react';\n\ninterface WorkflowPillProps {\n type: string;\n size?: 'sm' | 'md';\n certified?: boolean;\n}\n\nexport function WorkflowPill({ type, size = 'sm', certified }: WorkflowPillProps) {\n const sizeClass = size === 'md'\n ? 'px-2.5 py-0.5 text-[11px] gap-1.5'\n : 'px-2 py-0.5 text-[10px] gap-1';\n const iconClass = size === 'md' ? 'w-3 h-3' : 'w-2.5 h-2.5';\n\n const Icon = certified ? ShieldCheck : Workflow;\n const iconColor = certified ? 'text-status-success' : 'text-accent/75';\n\n return (\n <span className={`inline-flex items-center ${sizeClass} font-mono bg-accent/[0.06] text-text-secondary rounded-lg`}>\n <Icon className={`${iconClass} shrink-0 ${iconColor}`} />\n {type}\n </span>\n );\n}\n"],"names":["WorkflowPill","type","size","certified","sizeClass","iconClass","Icon","ShieldCheck","Workflow","iconColor","jsxs","jsx"],"mappings":"qGAQO,SAASA,EAAa,CAAE,KAAAC,EAAM,KAAAC,EAAO,KAAM,UAAAC,GAAgC,CAChF,MAAMC,EAAYF,IAAS,KACvB,oCACA,gCACEG,EAAYH,IAAS,KAAO,UAAY,cAExCI,EAAOH,EAAYI,EAAcC,EACjCC,EAAYN,EAAY,sBAAwB,iBAEtD,OACEO,EAAAA,KAAC,OAAA,CAAK,UAAW,4BAA4BN,CAAS,6DACpD,SAAA,CAAAO,MAACL,GAAK,UAAW,GAAGD,CAAS,aAAaI,CAAS,GAAI,EACtDR,CAAA,EACH,CAEJ"}
|
|
@@ -1,2 +0,0 @@
|
|
|
1
|
-
import{a as p,j as s}from"./vendor-query-B2UbickB.js";import{T as b}from"./TimestampCell-DoWMKg6w.js";import{u as N,b as F}from"./workflows-Cc4VHcrp.js";import{f as P}from"./index-D8VH6K8B.js";import{a as R}from"./useNatsEvents-Xr43X1fG.js";import{u as $}from"./useFilterParams-BaXUAkYK.js";import{D as A}from"./DataTable-BDn1WBHS.js";import{W}from"./WorkflowPill-CCDSVaQj.js";import{P as z}from"./PageHeader-CpWFly5S.js";import{F as D,b as x}from"./FilterBar-Ck4K4rzu.js";import{S as E}from"./StickyPagination-F9FZsRy9.js";import{R as I,a as y}from"./RowActions-Dg-Fsm5O.js";import{F as M,S as U}from"./vendor-icons-ZTAKVwGc.js";import{b as L}from"./vendor-react-Cw8Gy8NJ.js";import"./TimeAgo-UPG6DoH8.js";import"./format-gXZXQ-HJ.js";import"./EmptyState-2CmV-IaS.js";const O={running:"in_progress",completed:"completed",failed:"failed"},B={in_progress:"bg-status-active",completed:"bg-status-success",failed:"bg-status-error"},G={running:"text-status-active",completed:"text-status-success",failed:"text-status-error"};function H(d,l,m,a,o){return[{key:"workflow_id",label:"Workflow ID / Type",render:e=>{const i=B[O[e.status]??e.status]??"bg-status-pending",f=e.status==="running"?" animate-pulse":"";return s.jsxs("div",{className:"flex items-start gap-2 min-w-0",children:[s.jsx("span",{className:`w-[9px] h-[9px] shrink-0 rounded-full mt-1 ${i}${f}`,title:e.status}),s.jsxs("div",{className:"min-w-0",children:[s.jsx("span",{className:"font-mono text-xs text-text-primary truncate block",children:e.workflow_id}),s.jsx("div",{className:"mt-0.5",children:s.jsx(W,{type:e.entity,certified:o.has(e.entity)})})]})]})}},{key:"created_at",label:"Created",render:e=>s.jsx(b,{date:e.created_at}),className:"w-40",sortable:!0},{key:"updated_at",label:"Updated",render:e=>s.jsx(b,{date:e.updated_at}),className:"w-40",sortable:!0},{key:"actions",label:"",render:e=>s.jsxs(I,{children:[s.jsx(y,{icon:M,title:`Filter by ${e.entity}`,onClick:()=>d(e.entity)}),s.jsx("button",{onClick:i=>{i.stopPropagation(),l(e.status)},className:"opacity-0 group-hover/row:opacity-100 transition-opacity",title:`Filter by ${e.status}`,children:s.jsx("svg",{className:`w-[18px] h-[18px] ${G[e.status]??"text-text-tertiary"} hover:opacity-70`,viewBox:"0 0 24 24",fill:"currentColor",children:s.jsx("circle",{cx:"12",cy:"12",r:"6"})})}),m&&s.jsx(y,{icon:U,title:"View config",onClick:()=>a(`/workflows/registry/${encodeURIComponent(e.entity)}`)})]}),className:"w-24 text-right"}]}function ce({tier:d="all"}){R();const l=L(),{isSuperAdmin:m}=P(),{filters:a,setFilter:o,pagination:e,sort:i,setSort:f}=$({filters:{search:"",entity:"",status:"",tier:d}}),n=a.tier||"all",h=n==="certified"?"true":n==="durable"?"false":void 0,{data:c}=N(),w=p.useMemo(()=>new Set((c??[]).map(t=>t.workflow_type)),[c]),v=H(t=>o("entity",t),t=>o("status",t),m,l,w),[u,k]=p.useState(a.search);p.useEffect(()=>{if(u===a.search)return;const t=setTimeout(()=>o("search",u),300);return()=>clearTimeout(t)},[u,o,a.search]);const{data:r,isLoading:j}=F({limit:e.pageSize,offset:e.offset,entity:a.entity||void 0,search:a.search||void 0,status:a.status||void 0,sort_by:i.sort_by||void 0,order:i.sort_by?i.order:void 0,registered:h}),g=(r==null?void 0:r.total)??0,S=(r==null?void 0:r.jobs)??[],C=p.useMemo(()=>[...new Set((c??[]).map(t=>t.workflow_type))].sort(),[c]),_="Durable Executions",T=n==="certified"?"No certified workflow executions found":n==="durable"?"No durable workflow executions found":"No workflow executions found";return s.jsxs("div",{children:[s.jsx(z,{title:_}),s.jsxs(D,{children:[s.jsx("input",{type:"text",placeholder:"Search workflow ID...",value:u,onChange:t=>k(t.target.value),className:"input text-[11px] py-1 px-2 w-56"}),s.jsx(x,{label:"Type",value:a.entity,onChange:t=>o("entity",t),options:C.map(t=>({value:t,label:t}))}),s.jsx(x,{label:"Status",value:a.status,onChange:t=>o("status",t),options:[{value:"running",label:"Running"},{value:"completed",label:"Completed"},{value:"failed",label:"Failed"}]}),s.jsx(x,{label:"Tier",value:a.tier==="all"?"":a.tier,onChange:t=>o("tier",t||"all"),options:[{value:"certified",label:"Certified"},{value:"durable",label:"Durable"}]})]}),s.jsx(A,{columns:v,data:S,keyFn:t=>t.workflow_id,onRowClick:t=>l(`/workflows/executions/${t.workflow_id}`),isLoading:j,emptyMessage:T,sort:i,onSort:f}),s.jsx(E,{page:e.page,totalPages:e.totalPages(g),onPageChange:e.setPage,total:g,pageSize:e.pageSize,onPageSizeChange:e.setPageSize})]})}export{ce as WorkflowsDashboard};
|
|
2
|
-
//# sourceMappingURL=WorkflowsDashboard-D8z9uBNB.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"WorkflowsDashboard-D8z9uBNB.js","sources":["../../src/pages/workflows/WorkflowsDashboard.tsx"],"sourcesContent":["import { useState, useEffect, useMemo } from 'react';\nimport { useNavigate } from 'react-router-dom';\nimport { Filter, Settings } from 'lucide-react';\nimport { TimestampCell } from '../../components/common/display/TimestampCell';\nimport { useJobs, useWorkflowConfigs } from '../../api/workflows';\nimport { useAuth } from '../../hooks/useAuth';\nimport { useWorkflowListEvents } from '../../hooks/useNatsEvents';\nimport { useFilterParams } from '../../hooks/useFilterParams';\nimport { DataTable, type Column } from '../../components/common/data/DataTable';\nimport { WorkflowPill } from '../../components/common/display/WorkflowPill';\nimport { PageHeader } from '../../components/common/layout/PageHeader';\nimport { FilterBar, FilterSelect } from '../../components/common/data/FilterBar';\nimport { StickyPagination } from '../../components/common/data/StickyPagination';\nimport { RowAction, RowActionGroup } from '../../components/common/layout/RowActions';\nimport type { LTJob } from '../../api/types';\n\nexport type ExecutionsTier = 'all' | 'certified' | 'durable';\n\nconst jobStatusMap: Record<string, string> = {\n running: 'in_progress',\n completed: 'completed',\n failed: 'failed',\n};\n\nconst STATUS_DOT: Record<string, string> = {\n in_progress: 'bg-status-active',\n completed: 'bg-status-success',\n failed: 'bg-status-error',\n};\n\nconst STATUS_COLORS: Record<string, string> = {\n running: 'text-status-active',\n completed: 'text-status-success',\n failed: 'text-status-error',\n};\n\nfunction buildColumns(\n onFilterEntity: (entity: string) => void,\n onFilterStatus: (status: string) => void,\n isSuperAdmin: boolean,\n navigate: (path: string) => void,\n certifiedTypes: Set<string>,\n): Column<LTJob>[] {\n return [\n {\n key: 'workflow_id',\n label: 'Workflow ID / Type',\n render: (row) => {\n const dotClass = STATUS_DOT[jobStatusMap[row.status] ?? row.status] ?? 'bg-status-pending';\n const pulseClass = row.status === 'running' ? ' animate-pulse' : '';\n return (\n <div className=\"flex items-start gap-2 min-w-0\">\n <span className={`w-[9px] h-[9px] shrink-0 rounded-full mt-1 ${dotClass}${pulseClass}`} title={row.status} />\n <div className=\"min-w-0\">\n <span className=\"font-mono text-xs text-text-primary truncate block\">\n {row.workflow_id}\n </span>\n <div className=\"mt-0.5\">\n <WorkflowPill type={row.entity} certified={certifiedTypes.has(row.entity)} />\n </div>\n </div>\n </div>\n );\n },\n },\n {\n key: 'created_at',\n label: 'Created',\n render: (row) => <TimestampCell date={row.created_at} />,\n className: 'w-40',\n sortable: true,\n },\n {\n key: 'updated_at',\n label: 'Updated',\n render: (row) => <TimestampCell date={row.updated_at} />,\n className: 'w-40',\n sortable: true,\n },\n {\n key: 'actions',\n label: '',\n render: (row) => (\n <RowActionGroup>\n <RowAction\n icon={Filter}\n title={`Filter by ${row.entity}`}\n onClick={() => onFilterEntity(row.entity)}\n />\n <button\n onClick={(e) => { e.stopPropagation(); onFilterStatus(row.status); }}\n className=\"opacity-0 group-hover/row:opacity-100 transition-opacity\"\n title={`Filter by ${row.status}`}\n >\n <svg className={`w-[18px] h-[18px] ${STATUS_COLORS[row.status] ?? 'text-text-tertiary'} hover:opacity-70`} viewBox=\"0 0 24 24\" fill=\"currentColor\">\n <circle cx=\"12\" cy=\"12\" r=\"6\" />\n </svg>\n </button>\n {isSuperAdmin && (\n <RowAction\n icon={Settings}\n title=\"View config\"\n onClick={() => navigate(`/workflows/registry/${encodeURIComponent(row.entity)}`)}\n />\n )}\n </RowActionGroup>\n ),\n className: 'w-24 text-right',\n },\n ];\n}\n\nexport function WorkflowsDashboard({ tier: initialTier = 'all' }: { tier?: ExecutionsTier }) {\n useWorkflowListEvents();\n const navigate = useNavigate();\n const { isSuperAdmin } = useAuth();\n\n const { filters, setFilter, pagination, sort, setSort } = useFilterParams({\n filters: { search: '', entity: '', status: '', tier: initialTier },\n });\n\n const activeTier = (filters.tier || 'all') as ExecutionsTier;\n\n // Map tier to server-side registered filter\n const registeredFilter = activeTier === 'certified' ? 'true'\n : activeTier === 'durable' ? 'false'\n : undefined;\n\n const { data: configs } = useWorkflowConfigs();\n\n const certifiedTypes = useMemo(\n () => new Set((configs ?? []).map((c) => c.workflow_type)),\n [configs],\n );\n\n const columns = buildColumns(\n (entity) => setFilter('entity', entity),\n (status) => setFilter('status', status),\n isSuperAdmin,\n navigate,\n certifiedTypes,\n );\n const [searchInput, setSearchInput] = useState(filters.search);\n\n useEffect(() => {\n if (searchInput === filters.search) return;\n const timer = setTimeout(() => setFilter('search', searchInput), 300);\n return () => clearTimeout(timer);\n }, [searchInput, setFilter, filters.search]);\n\n const { data: jobsData, isLoading } = useJobs({\n limit: pagination.pageSize,\n offset: pagination.offset,\n entity: filters.entity || undefined,\n search: filters.search || undefined,\n status: filters.status || undefined,\n sort_by: sort.sort_by || undefined,\n order: sort.sort_by ? sort.order : undefined,\n registered: registeredFilter,\n });\n\n const total = jobsData?.total ?? 0;\n const jobs = jobsData?.jobs ?? [];\n\n const entities = useMemo(() => {\n return [...new Set((configs ?? []).map((c) => c.workflow_type))].sort();\n }, [configs]);\n\n const pageTitle = 'Durable Executions';\n\n const emptyMessage = activeTier === 'certified'\n ? 'No certified workflow executions found'\n : activeTier === 'durable'\n ? 'No durable workflow executions found'\n : 'No workflow executions found';\n\n return (\n <div>\n <PageHeader title={pageTitle} />\n\n <FilterBar>\n <input\n type=\"text\"\n placeholder=\"Search workflow ID...\"\n value={searchInput}\n onChange={(e) => setSearchInput(e.target.value)}\n className=\"input text-[11px] py-1 px-2 w-56\"\n />\n <FilterSelect\n label=\"Type\"\n value={filters.entity}\n onChange={(v) => setFilter('entity', v)}\n options={entities.map((e) => ({ value: e, label: e }))}\n />\n <FilterSelect\n label=\"Status\"\n value={filters.status}\n onChange={(v) => setFilter('status', v)}\n options={[\n { value: 'running', label: 'Running' },\n { value: 'completed', label: 'Completed' },\n { value: 'failed', label: 'Failed' },\n ]}\n />\n <FilterSelect\n label=\"Tier\"\n value={filters.tier === 'all' ? '' : filters.tier}\n onChange={(v) => setFilter('tier', v || 'all')}\n options={[\n { value: 'certified', label: 'Certified' },\n { value: 'durable', label: 'Durable' },\n ]}\n />\n </FilterBar>\n\n <DataTable\n columns={columns}\n data={jobs}\n keyFn={(row) => row.workflow_id}\n onRowClick={(row) => navigate(`/workflows/executions/${row.workflow_id}`)}\n isLoading={isLoading}\n emptyMessage={emptyMessage}\n sort={sort}\n onSort={setSort}\n />\n\n <StickyPagination\n page={pagination.page}\n totalPages={pagination.totalPages(total)}\n onPageChange={pagination.setPage}\n total={total}\n pageSize={pagination.pageSize}\n onPageSizeChange={pagination.setPageSize}\n />\n </div>\n );\n}\n"],"names":["jobStatusMap","STATUS_DOT","STATUS_COLORS","buildColumns","onFilterEntity","onFilterStatus","isSuperAdmin","navigate","certifiedTypes","row","dotClass","pulseClass","jsxs","jsx","WorkflowPill","TimestampCell","RowActionGroup","RowAction","Filter","e","Settings","WorkflowsDashboard","initialTier","useWorkflowListEvents","useNavigate","useAuth","filters","setFilter","pagination","sort","setSort","useFilterParams","activeTier","registeredFilter","configs","useWorkflowConfigs","useMemo","c","columns","entity","status","searchInput","setSearchInput","useState","useEffect","timer","jobsData","isLoading","useJobs","total","jobs","entities","pageTitle","emptyMessage","PageHeader","FilterBar","FilterSelect","v","DataTable","StickyPagination"],"mappings":"iwBAkBA,MAAMA,EAAuC,CAC3C,QAAS,cACT,UAAW,YACX,OAAQ,QACV,EAEMC,EAAqC,CACzC,YAAa,mBACb,UAAW,oBACX,OAAQ,iBACV,EAEMC,EAAwC,CAC5C,QAAS,qBACT,UAAW,sBACX,OAAQ,mBACV,EAEA,SAASC,EACPC,EACAC,EACAC,EACAC,EACAC,EACiB,CACjB,MAAO,CACL,CACE,IAAK,cACL,MAAO,qBACP,OAASC,GAAQ,CACf,MAAMC,EAAWT,EAAWD,EAAaS,EAAI,MAAM,GAAKA,EAAI,MAAM,GAAK,oBACjEE,EAAaF,EAAI,SAAW,UAAY,iBAAmB,GACjE,OACEG,EAAAA,KAAC,MAAA,CAAI,UAAU,iCACb,SAAA,CAAAC,EAAAA,IAAC,OAAA,CAAK,UAAW,8CAA8CH,CAAQ,GAAGC,CAAU,GAAI,MAAOF,EAAI,MAAA,CAAQ,EAC3GG,EAAAA,KAAC,MAAA,CAAI,UAAU,UACb,SAAA,CAAAC,EAAAA,IAAC,OAAA,CAAK,UAAU,qDACb,SAAAJ,EAAI,YACP,EACAI,EAAAA,IAAC,MAAA,CAAI,UAAU,SACb,eAACC,EAAA,CAAa,KAAML,EAAI,OAAQ,UAAWD,EAAe,IAAIC,EAAI,MAAM,EAAG,CAAA,CAC7E,CAAA,CAAA,CACF,CAAA,EACF,CAEJ,CAAA,EAEF,CACE,IAAK,aACL,MAAO,UACP,OAASA,SAASM,EAAA,CAAc,KAAMN,EAAI,WAAY,EACtD,UAAW,OACX,SAAU,EAAA,EAEZ,CACE,IAAK,aACL,MAAO,UACP,OAASA,SAASM,EAAA,CAAc,KAAMN,EAAI,WAAY,EACtD,UAAW,OACX,SAAU,EAAA,EAEZ,CACE,IAAK,UACL,MAAO,GACP,OAASA,GACPG,EAAAA,KAACI,EAAA,CACC,SAAA,CAAAH,EAAAA,IAACI,EAAA,CACC,KAAMC,EACN,MAAO,aAAaT,EAAI,MAAM,GAC9B,QAAS,IAAML,EAAeK,EAAI,MAAM,CAAA,CAAA,EAE1CI,EAAAA,IAAC,SAAA,CACC,QAAUM,GAAM,CAAEA,EAAE,gBAAA,EAAmBd,EAAeI,EAAI,MAAM,CAAG,EACnE,UAAU,2DACV,MAAO,aAAaA,EAAI,MAAM,GAE9B,SAAAI,EAAAA,IAAC,OAAI,UAAW,qBAAqBX,EAAcO,EAAI,MAAM,GAAK,oBAAoB,oBAAqB,QAAQ,YAAY,KAAK,eAClI,eAAC,SAAA,CAAO,GAAG,KAAK,GAAG,KAAK,EAAE,GAAA,CAAI,CAAA,CAChC,CAAA,CAAA,EAEDH,GACCO,EAAAA,IAACI,EAAA,CACC,KAAMG,EACN,MAAM,cACN,QAAS,IAAMb,EAAS,uBAAuB,mBAAmBE,EAAI,MAAM,CAAC,EAAE,CAAA,CAAA,CACjF,EAEJ,EAEF,UAAW,iBAAA,CACb,CAEJ,CAEO,SAASY,GAAmB,CAAE,KAAMC,EAAc,OAAoC,CAC3FC,EAAA,EACA,MAAMhB,EAAWiB,EAAA,EACX,CAAE,aAAAlB,CAAA,EAAiBmB,EAAA,EAEnB,CAAE,QAAAC,EAAS,UAAAC,EAAW,WAAAC,EAAY,KAAAC,EAAM,QAAAC,CAAA,EAAYC,EAAgB,CACxE,QAAS,CAAE,OAAQ,GAAI,OAAQ,GAAI,OAAQ,GAAI,KAAMT,CAAA,CAAY,CAClE,EAEKU,EAAcN,EAAQ,MAAQ,MAG9BO,EAAmBD,IAAe,YAAc,OAClDA,IAAe,UAAY,QAC3B,OAEE,CAAE,KAAME,CAAA,EAAYC,EAAA,EAEpB3B,EAAiB4B,EAAAA,QACrB,IAAM,IAAI,KAAKF,GAAW,CAAA,GAAI,IAAKG,GAAMA,EAAE,aAAa,CAAC,EACzD,CAACH,CAAO,CAAA,EAGJI,EAAUnC,EACboC,GAAWZ,EAAU,SAAUY,CAAM,EACrCC,GAAWb,EAAU,SAAUa,CAAM,EACtClC,EACAC,EACAC,CAAA,EAEI,CAACiC,EAAaC,CAAc,EAAIC,EAAAA,SAASjB,EAAQ,MAAM,EAE7DkB,EAAAA,UAAU,IAAM,CACd,GAAIH,IAAgBf,EAAQ,OAAQ,OACpC,MAAMmB,EAAQ,WAAW,IAAMlB,EAAU,SAAUc,CAAW,EAAG,GAAG,EACpE,MAAO,IAAM,aAAaI,CAAK,CACjC,EAAG,CAACJ,EAAad,EAAWD,EAAQ,MAAM,CAAC,EAE3C,KAAM,CAAE,KAAMoB,EAAU,UAAAC,CAAA,EAAcC,EAAQ,CAC5C,MAAOpB,EAAW,SAClB,OAAQA,EAAW,OACnB,OAAQF,EAAQ,QAAU,OAC1B,OAAQA,EAAQ,QAAU,OAC1B,OAAQA,EAAQ,QAAU,OAC1B,QAASG,EAAK,SAAW,OACzB,MAAOA,EAAK,QAAUA,EAAK,MAAQ,OACnC,WAAYI,CAAA,CACb,EAEKgB,GAAQH,GAAA,YAAAA,EAAU,QAAS,EAC3BI,GAAOJ,GAAA,YAAAA,EAAU,OAAQ,CAAA,EAEzBK,EAAWf,EAAAA,QAAQ,IAChB,CAAC,GAAG,IAAI,KAAKF,GAAW,CAAA,GAAI,IAAKG,GAAMA,EAAE,aAAa,CAAC,CAAC,EAAE,KAAA,EAChE,CAACH,CAAO,CAAC,EAENkB,EAAY,qBAEZC,EAAerB,IAAe,YAChC,yCACAA,IAAe,UACb,uCACA,+BAEN,cACG,MAAA,CACC,SAAA,CAAAnB,EAAAA,IAACyC,EAAA,CAAW,MAAOF,CAAA,CAAW,SAE7BG,EAAA,CACC,SAAA,CAAA1C,EAAAA,IAAC,QAAA,CACC,KAAK,OACL,YAAY,wBACZ,MAAO4B,EACP,SAAWtB,GAAMuB,EAAevB,EAAE,OAAO,KAAK,EAC9C,UAAU,kCAAA,CAAA,EAEZN,EAAAA,IAAC2C,EAAA,CACC,MAAM,OACN,MAAO9B,EAAQ,OACf,SAAW+B,GAAM9B,EAAU,SAAU8B,CAAC,EACtC,QAASN,EAAS,IAAKhC,IAAO,CAAE,MAAOA,EAAG,MAAOA,GAAI,CAAA,CAAA,EAEvDN,EAAAA,IAAC2C,EAAA,CACC,MAAM,SACN,MAAO9B,EAAQ,OACf,SAAW+B,GAAM9B,EAAU,SAAU8B,CAAC,EACtC,QAAS,CACP,CAAE,MAAO,UAAW,MAAO,SAAA,EAC3B,CAAE,MAAO,YAAa,MAAO,WAAA,EAC7B,CAAE,MAAO,SAAU,MAAO,QAAA,CAAS,CACrC,CAAA,EAEF5C,EAAAA,IAAC2C,EAAA,CACC,MAAM,OACN,MAAO9B,EAAQ,OAAS,MAAQ,GAAKA,EAAQ,KAC7C,SAAW+B,GAAM9B,EAAU,OAAQ8B,GAAK,KAAK,EAC7C,QAAS,CACP,CAAE,MAAO,YAAa,MAAO,WAAA,EAC7B,CAAE,MAAO,UAAW,MAAO,SAAA,CAAU,CACvC,CAAA,CACF,EACF,EAEA5C,EAAAA,IAAC6C,EAAA,CACC,QAAApB,EACA,KAAMY,EACN,MAAQzC,GAAQA,EAAI,YACpB,WAAaA,GAAQF,EAAS,yBAAyBE,EAAI,WAAW,EAAE,EACxE,UAAAsC,EACA,aAAAM,EACA,KAAAxB,EACA,OAAQC,CAAA,CAAA,EAGVjB,EAAAA,IAAC8C,EAAA,CACC,KAAM/B,EAAW,KACjB,WAAYA,EAAW,WAAWqB,CAAK,EACvC,aAAcrB,EAAW,QACzB,MAAAqB,EACA,SAAUrB,EAAW,SACrB,iBAAkBA,EAAW,WAAA,CAAA,CAC/B,EACF,CAEJ"}
|
|
@@ -1,2 +0,0 @@
|
|
|
1
|
-
import{a as x,j as t}from"./vendor-query-B2UbickB.js";import{b as C,u as k}from"./workflows-Cc4VHcrp.js";import{a as $}from"./useNatsEvents-Xr43X1fG.js";import{P as D}from"./PageHeader-CpWFly5S.js";import{S as h}from"./StatCard-DlgF0CJC.js";import{b as w}from"./vendor-react-Cw8Gy8NJ.js";import"./index-D8VH6K8B.js";import"./vendor-icons-ZTAKVwGc.js";const v=[{label:"1h",ms:36e5},{label:"24h",ms:864e5},{label:"7d",ms:6048e5},{label:"30d",ms:2592e6}];function T(r){return r<1e3?`${Math.round(r)}ms`:r<6e4?`${(r/1e3).toFixed(1)}s`:r<36e5?`${(r/6e4).toFixed(1)}m`:`${(r/36e5).toFixed(1)}h`}function p({value:r,colorClass:o,onClick:f}){return r===0?t.jsx("span",{className:"text-text-tertiary",children:"0"}):t.jsx("button",{onClick:f,className:`${o} hover:underline tabular-nums font-medium`,children:r})}function _(){$();const r=w(),[o,f]=x.useState("24h"),{data:c}=C({limit:500}),{data:g}=k(),b=x.useMemo(()=>{const e=v.find(i=>i.label===o);return Date.now()-e.ms},[o]),n=x.useMemo(()=>((c==null?void 0:c.jobs)??[]).filter(e=>new Date(e.created_at).getTime()>=b),[c==null?void 0:c.jobs,b]),j=x.useMemo(()=>{const e=new Map;for(const a of n){const s=e.get(a.entity)??{total:0,running:0,completed:0,failed:0,durations:[]};if(s.total++,a.status==="running"&&s.running++,a.status==="completed"){s.completed++;const m=new Date(a.updated_at).getTime()-new Date(a.created_at).getTime();m>0&&s.durations.push(m)}a.status==="failed"&&s.failed++,e.set(a.entity,s)}const i=[];for(const[a,s]of e)i.push({type:a,...s,avgDuration:s.durations.length>0?s.durations.reduce((m,N)=>m+N,0)/s.durations.length:null});return i.sort((a,s)=>s.total-a.total)},[n]),u=x.useMemo(()=>({total:n.length,running:n.filter(e=>e.status==="running").length,completed:n.filter(e=>e.status==="completed").length,failed:n.filter(e=>e.status==="failed").length}),[n]),y=(g==null?void 0:g.length)??0,l=(e,i)=>{const a=new URLSearchParams;e&&a.set("entity",e),i&&a.set("status",i);const s=a.toString();r(`/workflows/executions${s?`?${s}`:""}`)},d="pb-2 text-[10px] font-semibold uppercase tracking-widest text-text-tertiary";return t.jsxs("div",{children:[t.jsx(D,{title:"Workflows",actions:t.jsxs("span",{className:"text-xs text-text-tertiary",children:[y," certified type",y!==1?"s":""]})}),t.jsx("div",{className:"flex items-center gap-1 mb-6",children:v.map(e=>t.jsx("button",{onClick:()=>f(e.label),className:`px-3 py-1 text-xs rounded-full transition-colors ${o===e.label?"bg-accent text-text-inverse":"text-text-tertiary hover:text-text-primary hover:bg-surface-hover"}`,children:e.label},e.label))}),t.jsxs("div",{className:"grid grid-cols-4 gap-4 mb-8",children:[t.jsx(h,{label:"Total",value:u.total,onClick:()=>l()}),t.jsx(h,{label:"Running",value:u.running,colorClass:"text-status-active",onClick:()=>l(void 0,"running")}),t.jsx(h,{label:"Completed",value:u.completed,colorClass:"text-status-success",onClick:()=>l(void 0,"completed")}),t.jsx(h,{label:"Failed",value:u.failed,colorClass:"text-status-error",onClick:()=>l(void 0,"failed")})]}),j.length>0&&t.jsxs("table",{className:"w-full text-left",children:[t.jsx("thead",{children:t.jsxs("tr",{className:"border-b border-surface-border",children:[t.jsx("th",{className:d,children:"Type"}),t.jsx("th",{className:`${d} text-right w-20`,children:"Total"}),t.jsx("th",{className:`${d} text-right w-20`,children:"Running"}),t.jsx("th",{className:`${d} text-right w-24`,children:"Completed"}),t.jsx("th",{className:`${d} text-right w-20`,children:"Failed"}),t.jsx("th",{className:`${d} text-right w-28`,children:"Avg Duration"})]})}),t.jsx("tbody",{children:j.map(e=>t.jsxs("tr",{className:"border-b border-surface-border last:border-b-0",children:[t.jsx("td",{className:"py-3 text-sm font-mono text-text-primary",children:t.jsx("button",{onClick:()=>l(e.type),className:"hover:text-accent hover:underline",children:e.type})}),t.jsx("td",{className:"py-3 text-sm text-right",children:t.jsx(p,{value:e.total,colorClass:"text-text-secondary",onClick:()=>l(e.type)})}),t.jsx("td",{className:"py-3 text-sm text-right",children:t.jsx(p,{value:e.running,colorClass:"text-status-active",onClick:()=>l(e.type,"running")})}),t.jsx("td",{className:"py-3 text-sm text-right",children:t.jsx(p,{value:e.completed,colorClass:"text-status-success",onClick:()=>l(e.type,"completed")})}),t.jsx("td",{className:"py-3 text-sm text-right",children:t.jsx(p,{value:e.failed,colorClass:"text-status-error",onClick:()=>l(e.type,"failed")})}),t.jsx("td",{className:"py-3 text-sm font-mono text-text-secondary text-right",children:e.avgDuration!==null?T(e.avgDuration):"—"})]},e.type))})]}),j.length===0&&t.jsx("div",{className:"py-16 text-center",children:t.jsxs("p",{className:"text-sm text-text-tertiary",children:["No workflow activity in the last ",o]})})]})}export{_ as WorkflowsOverview};
|
|
2
|
-
//# sourceMappingURL=WorkflowsOverview-D9OzzQqw.js.map
|
|
@@ -1,3 +0,0 @@
|
|
|
1
|
-
import{j as e,a as d,b as Se}from"./vendor-query-B2UbickB.js";import{T as we,C as ke,L as Ce,V as Oe}from"./VersionHistory-Bt7WBr6m.js";import{c as Ie,e as De,f as Pe,l as Te,g as We,h as Re,i as Ae,j as Me,d as Je,k as Le}from"./yaml-workflows-BL4V5CQy.js";import{S as Ve}from"./StatusBadge-TlC4jiig.js";import{P as $e}from"./PageHeader-CpWFly5S.js";import{F as S}from"./Field-DuFBAYhu.js";import{C as ce}from"./CollapsibleSection-Cxk4wvjT.js";import{u as Ye}from"./settings-eBRSE0mQ.js";import{s as Ee,a as Ue,m as le,f as He,i as Ke,b as Fe}from"./helpers-0gSleuzT.js";import{J as ie,C as Be,S as qe}from"./index-D8VH6K8B.js";import{L as A,d as ze,e as Qe}from"./vendor-react-Cw8Gy8NJ.js";import{P as de}from"./vendor-icons-ZTAKVwGc.js";function Ge({activities:s,selectedIdx:x,onSelect:l}){return e.jsx("div",{className:"flex items-center gap-1 overflow-x-auto pb-2",children:s.map((c,t)=>{const r=t===x;return e.jsxs("div",{className:"flex items-center shrink-0",children:[t>0&&e.jsx("div",{className:"w-4 h-px bg-surface-border mx-0.5"}),e.jsxs("button",{type:"button",onClick:()=>l(t),className:"flex items-center gap-1.5 cursor-pointer",children:[e.jsx("span",{className:`w-5 h-5 rounded-full text-[10px] font-semibold flex items-center justify-center shrink-0 transition-colors ${r?"bg-accent text-text-inverse":"bg-surface-sunken text-text-tertiary hover:bg-accent-muted hover:text-accent"}`,children:t+1}),e.jsx("span",{className:`text-[10px] font-semibold uppercase tracking-wider whitespace-nowrap transition-colors ${r?"text-text-primary":"text-text-tertiary hover:text-text-primary"}`,children:c.title})]})]},c.activity_id)})})}function Xe({activity:s}){const x=Object.keys(s.input_mappings).length>0,l=s.output_fields.length>0,c=s.tool_source==="llm",t=s.mcp_server_id||(s.tool_source==="db"?"db":""),r=!c&&s.mcp_tool_name?`${t}/${s.mcp_tool_name}`:null,m=!c&&s.mcp_tool_name&&t;return e.jsxs("div",{className:"pt-2 space-y-6",children:[e.jsxs("div",{className:"flex items-center gap-3",children:[e.jsx("h4",{className:"text-base font-medium text-text-primary",children:s.title}),e.jsx("span",{className:`text-[10px] px-2 py-0.5 rounded-full font-medium ${Ue(s.tool_source)}`,children:Ee(s.tool_source)})]}),e.jsxs("div",{className:"grid grid-cols-1 sm:grid-cols-2 gap-x-10 gap-y-4",children:[e.jsxs("div",{children:[e.jsx("p",{className:"text-[10px] font-semibold uppercase tracking-widest text-text-tertiary mb-1",children:"Mapped Workflow Topic"}),e.jsx("p",{className:"text-sm font-mono text-text-primary",children:s.topic})]}),r&&e.jsxs("div",{children:[e.jsx("p",{className:"text-[10px] font-semibold uppercase tracking-widest text-text-tertiary mb-1",children:"Tool"}),m?e.jsx(A,{to:`/mcp/servers?search=${encodeURIComponent(s.mcp_tool_name)}`,className:"text-sm font-mono text-accent hover:underline",children:r}):e.jsx("p",{className:"text-sm font-mono text-text-primary",children:r})]}),c&&e.jsxs("div",{children:[e.jsx("p",{className:"text-[10px] font-semibold uppercase tracking-widest text-text-tertiary mb-1",children:"Model"}),e.jsx("p",{className:"text-sm font-mono text-text-primary",children:s.model||"gpt-4o-mini"})]})]}),(x||l)&&e.jsxs("div",{className:"grid grid-cols-1 sm:grid-cols-2 gap-x-6 gap-y-0",children:[x&&e.jsxs("div",{className:"border border-surface-border rounded-md p-4",children:[e.jsx("p",{className:"text-[10px] font-semibold uppercase tracking-widest text-text-tertiary mb-2",children:"Inputs"}),e.jsx("div",{className:"space-y-1.5",children:Object.entries(s.input_mappings).map(([h,b])=>e.jsxs("p",{className:"text-xs font-mono text-text-secondary leading-relaxed",children:[e.jsx("span",{className:"text-text-primary",children:h}),e.jsx("span",{className:"text-text-tertiary mx-1.5",children:"←"}),e.jsx("span",{className:"text-accent",children:b})]},h))})]}),l&&e.jsxs("div",{className:"border border-surface-border rounded-md p-4",children:[e.jsx("p",{className:"text-[10px] font-semibold uppercase tracking-widest text-text-tertiary mb-2",children:"Outputs"}),e.jsx("div",{className:"space-y-1.5",children:s.output_fields.map(h=>e.jsx("p",{className:"text-xs font-mono text-text-secondary leading-relaxed",children:h},h))})]})]}),!c&&s.tool_arguments&&Object.keys(s.tool_arguments).length>0&&e.jsx(ie,{data:s.tool_arguments,label:"Default Arguments",variant:"panel"}),c&&s.prompt_template&&e.jsxs("div",{children:[e.jsx("p",{className:"text-[10px] font-semibold uppercase tracking-widest text-text-tertiary mb-2",children:"Prompt Template"}),e.jsx("pre",{className:"p-4 bg-surface-sunken rounded-lg text-xs font-mono text-text-secondary whitespace-pre-wrap leading-relaxed max-h-64 overflow-y-auto",children:s.prompt_template})]})]})}function Ze({result:s,showMetadata:x,onToggleMetadata:l,traceUrl:c,namespace:t}){const r=(s==null?void 0:s.result)??s,m=s==null?void 0:s.job_id,h=(r==null?void 0:r.metadata)&&(r==null?void 0:r.data),b=h?r.data:r;return e.jsxs("div",{className:"space-y-2",children:[e.jsxs("div",{className:"flex items-center justify-between",children:[e.jsx("span",{className:"text-[10px] font-semibold uppercase tracking-widest text-text-tertiary",children:"Result"}),e.jsxs("div",{className:"flex items-center gap-3",children:[m&&e.jsx(A,{to:`/mcp/executions/${encodeURIComponent(m)}?namespace=${encodeURIComponent(t||"longtail")}`,className:"text-[10px] text-accent hover:underline",children:"View Execution Details"}),h&&e.jsx("button",{type:"button",onClick:l,className:"text-[10px] text-accent hover:underline",children:x?"Hide metadata":"Show metadata"})]})]}),e.jsx(Be,{open:x&&!!h,children:e.jsxs("div",{className:"bg-surface-raised border border-surface-border rounded-md p-3 mb-2",children:[e.jsx("p",{className:"text-[10px] font-semibold uppercase tracking-widest text-text-tertiary mb-2",children:"Metadata"}),e.jsx("div",{className:"grid grid-cols-2 gap-x-6 gap-y-2",children:h&&Object.entries(r.metadata).sort((g,p)=>{const N=Object.keys(le);return(N.indexOf(g[0])===-1?99:N.indexOf(g[0]))-(N.indexOf(p[0])===-1?99:N.indexOf(p[0]))}).map(([g,p])=>e.jsxs("div",{children:[e.jsx("p",{className:"text-[10px] text-text-tertiary",children:le[g]??g}),g==="trc"&&c&&p?e.jsx("a",{href:c.replace("{traceId}",String(p)),target:"_blank",rel:"noopener noreferrer",className:"text-xs font-mono text-accent hover:underline truncate block",title:String(p),children:String(p)}):e.jsx("p",{className:"text-xs font-mono text-text-primary truncate",title:String(p??""),children:He(g,p)})]},g))})]})}),e.jsx(ie,{data:b,label:"Data"})]})}function et({wf:s,inputSchema:x,invokeFields:l,setInvokeFields:c,invokeJson:t,setInvokeJson:r,invokeJsonMode:m,setInvokeJsonMode:h,invokeResult:b,setInvokeResult:g,showMetadata:p,setShowMetadata:N,invokeMutation:y,inputFieldMeta:v,settings:w,onInvoke:M,isCollapsed:J,onToggle:L}){var P;const V=(x==null?void 0:x.properties)||{},$=Object.keys(V),k=v&&v.length>0,[T,I]=d.useState(!1),Y=k?v.filter(a=>a.classification==="dynamic").map(a=>a.key):$,C=k?v.filter(a=>a.classification==="fixed").map(a=>a.key):[],O=T?[...Y,...C]:Y,D=(a,j,o)=>{let i=j;o==="number"||o==="integer"?i=j===""?0:Number(j):o==="boolean"&&(i=j==="true"||j===!0);const u={...l,[a]:i};c(u),r(JSON.stringify(u,null,2))};return e.jsx(ce,{sectionKey:"invoke",title:"Invoke / Try",isCollapsed:J,onToggle:L,children:e.jsxs("div",{className:"space-y-4",children:[!b&&e.jsxs("form",{className:"space-y-4",onSubmit:a=>{a.preventDefault(),M()},children:[e.jsxs("div",{className:"flex items-center justify-between",children:[e.jsx(qe,{children:"Input"}),e.jsxs("div",{className:"flex items-center gap-3",children:[k&&C.length>0&&!m&&e.jsx("button",{type:"button",onClick:()=>I(!T),className:"text-[10px] text-text-tertiary hover:text-text-primary",children:T?`Hide ${C.length} fixed`:`Show ${C.length} fixed`}),e.jsx("button",{type:"button",onClick:()=>{if(!m)r(JSON.stringify(l,null,2));else try{c(JSON.parse(t))}catch{}h(!m)},className:"text-[10px] text-accent hover:underline",children:m?"Form view":"JSON view"})]})]}),m?e.jsx("textarea",{value:t,onChange:a=>r(a.target.value),className:"input font-mono text-[11px] w-full leading-relaxed",rows:8,spellCheck:!1}):O.length>0?e.jsx("div",{className:"space-y-3",children:O.map(a=>{var E,W;const j=V[a],o=Ke(j),i=j==null?void 0:j.description,u=typeof l[a]=="string"?l[a]:JSON.stringify(l[a]??(o==="array"?[]:{}),null,2),f=Math.min(20,Math.max(4,((W=(E=u==null?void 0:u.split)==null?void 0:E.call(u,`
|
|
2
|
-
`))==null?void 0:W.length)??4));return e.jsxs("div",{children:[e.jsxs("label",{className:"block text-[10px] font-semibold uppercase tracking-widest text-text-tertiary mb-1",children:[a,e.jsx("span",{className:"ml-2 font-normal normal-case",children:o}),k&&C.includes(a)&&e.jsx("span",{className:"ml-2 px-1 py-0.5 text-[8px] bg-surface-sunken rounded",children:"fixed"})]}),i&&e.jsx("p",{className:"text-[10px] text-text-tertiary mb-1",children:i}),o==="boolean"?e.jsxs("select",{value:String(l[a]??!1),onChange:_=>D(a,_.target.value,o),className:"select text-xs w-full",children:[e.jsx("option",{value:"true",children:"true"}),e.jsx("option",{value:"false",children:"false"})]}):o==="object"||o==="array"?e.jsx("textarea",{value:u,onChange:_=>{try{D(a,JSON.parse(_.target.value),o)}catch{c({...l,[a]:_.target.value})}},className:"input font-mono text-[11px] w-full leading-relaxed",rows:f,spellCheck:!1}):e.jsx("input",{type:o==="number"||o==="integer"?"number":"text",value:l[a]??"",onChange:_=>D(a,_.target.value,o),className:"input text-xs w-full"})]},a)})}):e.jsx("p",{className:"text-xs text-text-tertiary",children:"No input schema defined. Switch to JSON view to provide custom input."}),y.error&&!b&&e.jsx("p",{className:"text-xs text-status-error",children:y.error.message}),e.jsx("button",{type:"submit",disabled:y.isPending,className:"btn-primary text-xs",children:y.isPending?e.jsxs("span",{className:"flex items-center gap-2",children:[e.jsx("span",{className:"inline-block w-3 h-3 border-2 border-text-inverse border-t-transparent rounded-full animate-spin"}),"Running..."]}):e.jsxs("span",{className:"flex items-center gap-1.5",children:[e.jsx(de,{className:"w-3 h-3",fill:"currentColor"}),"Invoke"]})})]}),b&&e.jsxs("div",{className:"space-y-4",children:[e.jsx(Ze,{result:b,showMetadata:p,onToggleMetadata:()=>N(!p),traceUrl:(P=w==null?void 0:w.telemetry)==null?void 0:P.traceUrl,namespace:s.app_id}),e.jsx("button",{onClick:()=>{g(null),y.reset()},className:"text-xs text-accent hover:underline",children:"Run again"})]})]})})}function pt(){var se,ae,ne,re,oe;const{id:s}=ze(),[x,l]=Qe(),c=Se(),{data:t,isLoading:r,refetch:m}=Ie(s),{data:h}=Ye(),b=De(),g=Pe(),p=Te(),N=We(),y=Re(),v=Ae(),w=Me(),[M,J]=d.useState({}),[L,V]=d.useState(!1),[$,k]=d.useState("{}"),[T,I]=d.useState(null),[Y,C]=d.useState(!1),[O,D]=d.useState("tools"),[P,a]=d.useState(0),j=x.get("version"),o=j?parseInt(j,10):null,i=o!==null&&t&&o!==t.content_version,{data:u}=Je(s),{data:f}=Le(s,i?o:null),E=i&&f?f.activity_manifest:t==null?void 0:t.activity_manifest,W=i&&f?f.input_schema:t==null?void 0:t.input_schema,_=i&&f?f.output_schema:t==null?void 0:t.output_schema,xe=i&&f?f.yaml_content:t==null?void 0:t.yaml_content,[z,H]=d.useState(""),[Q,K]=d.useState(""),[G,F]=d.useState(""),[me,X]=d.useState([]),[pe,B]=d.useState(!1),ue=d.useRef(null);if(d.useEffect(()=>{t!=null&&t.yaml_content&&H(t.yaml_content),t!=null&&t.input_schema&&K(JSON.stringify(t.input_schema,null,2)),t!=null&&t.output_schema&&F(JSON.stringify(t.output_schema,null,2)),t!=null&&t.input_field_meta&&X(t.input_field_meta)},[t==null?void 0:t.id,t==null?void 0:t.yaml_content,t==null?void 0:t.input_schema,t==null?void 0:t.output_schema,t==null?void 0:t.input_field_meta]),d.useEffect(()=>{if(t!=null&&t.input_schema){const n=Fe(t.input_schema);J(n),k(JSON.stringify(n,null,2))}},[t==null?void 0:t.id]),r)return e.jsxs("div",{className:"animate-pulse space-y-4",children:[e.jsx("div",{className:"h-8 bg-surface-sunken rounded w-48"}),e.jsx("div",{className:"h-60 bg-surface-sunken rounded"})]});if(!t)return e.jsx("p",{className:"text-sm text-text-secondary",children:"Workflow server not found."});const U=(E??t.activity_manifest).filter(n=>n.type==="worker"),he=((se=b.error)==null?void 0:se.message)||((ae=g.error)==null?void 0:ae.message)||((ne=N.error)==null?void 0:ne.message)||((re=y.error)==null?void 0:re.message)||((oe=v.error)==null?void 0:oe.message),Z=b.isPending||g.isPending||N.isPending||y.isPending||v.isPending,ee=async()=>{await b.mutateAsync(t.id),m()},fe=async()=>{confirm("Archive this workflow server? It will no longer accept invocations.")&&(await N.mutateAsync(t.id),m())},ge=async()=>{confirm("Delete this workflow server permanently?")&&await y.mutateAsync(t.id)},je=async()=>{confirm("Re-generate from the source execution? This will overwrite the current definition.")&&(await v.mutateAsync({id:t.id}),m())},be=async()=>{let n,R;try{n=JSON.parse(Q)}catch{}try{R=JSON.parse(G)}catch{}await w.mutateAsync({id:t.id,yaml_content:z,...n?{input_schema:n}:{},...R?{output_schema:R}:{}}),B(!1),m()},Ne=()=>{H(t.yaml_content),K(JSON.stringify(t.input_schema,null,2)),F(JSON.stringify(t.output_schema,null,2)),B(!1)},ye=async()=>{I(null);try{const n=L?JSON.parse($):M,R=await p.mutateAsync({id:t.id,data:n,sync:!0});I(R)}catch(n){I({error:n.message})}},te=t.status==="active"||t.status==="deployed",ve=t.status!=="archived"&&!i,_e=te&&!i,q=n=>D(O===n?null:n);return e.jsxs("div",{children:[e.jsx($e,{title:"Workflow Tool",actions:t.status==="draft"&&!i?e.jsxs("button",{onClick:ee,disabled:Z,className:"group flex items-center gap-2 text-left",children:[e.jsx("span",{className:"flex items-center justify-center w-5 h-5 rounded-full bg-accent/10 text-accent shrink-0",children:e.jsx("svg",{className:"w-3 h-3",fill:"none",viewBox:"0 0 24 24",stroke:"currentColor",strokeWidth:2,children:e.jsx("path",{strokeLinecap:"round",strokeLinejoin:"round",d:"M9.663 17h4.674M12 3v1m6.364 1.636l-.707.707M21 12h-1M4 12H3m3.343-5.657l-.707-.707m2.828 9.9a5 5 0 117.072 0l-.548.547A3.374 3.374 0 0014 18.469V19a2 2 0 11-4 0v-.531c0-.895-.356-1.754-.988-2.386l-.548-.547z"})})}),e.jsxs("span",{className:"text-xs text-text-secondary group-hover:text-text-primary transition-colors",children:[e.jsx("span",{className:"inline-flex items-center px-2 py-0.5 rounded bg-accent/10 text-accent font-medium group-hover:bg-accent/20 transition-colors mr-1",children:"Deploy"})," ","to register ",e.jsxs("span",{className:"font-mono font-medium text-text-primary",children:[t.app_id,"/",t.graph_topic]})," as an MCP Workflow Tool."]})]}):void 0}),i&&e.jsxs("div",{className:"mb-6 px-4 py-3 rounded-md bg-purple-500/10 border border-purple-500/20 flex items-center justify-between",children:[e.jsxs("p",{className:"text-xs text-text-primary",children:["Viewing version ",e.jsx("span",{className:"font-mono font-medium",children:o}),(f==null?void 0:f.change_summary)&&e.jsxs("span",{className:"text-text-tertiary ml-2",children:["— ",f.change_summary]}),e.jsx("span",{className:"ml-2 text-text-tertiary",children:"(read-only)"})]}),e.jsx("button",{onClick:()=>{const n=new URLSearchParams(x);n.delete("version"),l(n)},className:"text-xs text-accent hover:underline",children:"Back to current"})]}),e.jsxs("div",{className:"grid grid-cols-1 lg:grid-cols-[1fr_220px] gap-12",children:[e.jsxs("div",{children:[e.jsxs("div",{className:"bg-surface-raised border border-surface-border rounded-md p-5 mb-8",children:[e.jsxs("div",{className:"flex items-center gap-4 mb-4",children:[e.jsx("h2",{className:"text-lg font-medium text-text-primary font-mono truncate flex-1",children:t.name}),e.jsx(Ve,{status:t.status}),te&&!i&&e.jsxs("button",{type:"button",onClick:()=>D("invoke"),className:"flex items-center gap-1.5 px-3 py-1.5 rounded-md bg-emerald-500/10 text-emerald-600 border border-emerald-500/20 text-xs font-medium hover:bg-emerald-500/20 transition-colors",children:[e.jsx(de,{className:"w-3 h-3"}),"Invoke"]})]}),t.description&&e.jsx("p",{className:"text-xs text-text-secondary mb-4",children:t.description}),e.jsxs("div",{className:"grid grid-cols-2 sm:grid-cols-4 gap-y-3 gap-x-8",children:[e.jsx(S,{label:"Tool Server",value:e.jsx("span",{className:"font-mono text-xs",children:t.app_id})}),e.jsx(S,{label:"Pipeline Tool",value:e.jsx("span",{className:"font-mono text-xs",children:t.graph_topic})}),e.jsx(S,{label:"Version",value:e.jsxs("span",{className:"font-mono text-xs",children:[t.app_version,u&&u.total>1&&e.jsxs("span",{className:"text-text-tertiary ml-1",children:["(v",t.content_version,")"]})]})}),e.jsx(S,{label:"Tool Calls",value:e.jsx("span",{className:"text-xs",children:U.length})}),t.source_workflow_id&&e.jsxs(e.Fragment,{children:[e.jsx(S,{label:"Compiled From Workflow",value:e.jsx(A,{to:`/workflows/executions/${t.source_workflow_id}`,className:"font-mono text-xs text-accent hover:underline",children:t.source_workflow_id})}),e.jsx(S,{label:"",value:e.jsx(A,{to:`/mcp/queries/${t.source_workflow_id}`,className:"text-xs text-accent hover:underline",children:"Open in Compilation Wizard"})})]}),e.jsx(S,{label:"Invocations",value:e.jsx(A,{to:`/mcp/executions?entity=${encodeURIComponent(t.graph_topic)}&namespace=${encodeURIComponent(t.app_id)}`,className:"text-xs text-accent hover:underline",children:"View runs"})}),e.jsx(S,{label:"Created",value:e.jsx("span",{className:"text-xs",children:new Date(t.created_at).toLocaleString()})})]}),e.jsxs("div",{className:"mt-4 pt-4 border-t border-surface-border",children:[e.jsx("p",{className:"text-[10px] font-semibold uppercase tracking-widest text-text-tertiary mb-2",children:"Tags"}),t.status!=="archived"?e.jsx(we,{tags:t.tags??[],onChange:n=>{c.setQueryData(["yamlWorkflows",t.id],{...t,tags:n}),w.mutate({id:t.id,tags:n})},placeholder:"Add tags for tool discovery..."}):e.jsx("div",{className:"flex flex-wrap gap-1.5",children:(t.tags??[]).length>0?(t.tags??[]).map(n=>e.jsx("span",{className:"inline-flex items-center px-2 py-0.5 rounded-full bg-accent/10 text-accent text-[11px] font-medium",children:n},n)):e.jsx("span",{className:"text-xs text-text-tertiary",children:"No tags"})})]})]}),e.jsxs("div",{className:"space-y-6",children:[_e&&e.jsx(et,{wf:t,inputSchema:W,invokeFields:M,setInvokeFields:J,invokeJson:$,setInvokeJson:k,invokeJsonMode:L,setInvokeJsonMode:V,invokeResult:T,setInvokeResult:I,showMetadata:Y,setShowMetadata:C,invokeMutation:p,inputFieldMeta:t.input_field_meta,settings:h,onInvoke:ye,isCollapsed:O!=="invoke",onToggle:q}),e.jsx(ce,{sectionKey:"tools",title:"Tools",isCollapsed:O!=="tools",onToggle:q,children:e.jsxs("div",{className:"space-y-4",children:[e.jsx(Ge,{activities:U,selectedIdx:P,onSelect:a}),U[P]&&e.jsx(Xe,{activity:U[P]})]})}),e.jsx(ke,{wf:t,resolvedInputSchema:W,resolvedOutputSchema:_,resolvedYaml:xe,configEditing:pe,setConfigEditing:B,canEditConfig:ve,yamlDraft:z,setYamlDraft:H,inputSchemaDraft:Q,setInputSchemaDraft:K,outputSchemaDraft:G,setOutputSchemaDraft:F,inputFieldMetaDraft:me,setInputFieldMetaDraft:X,onSave:be,onCancel:Ne,updateMutation:w,yamlTextareaRef:ue,isCollapsed:O!=="config",onToggle:q})]})]}),e.jsxs("div",{className:"lg:border-l lg:border-surface-border lg:pl-8 space-y-8",children:[e.jsx(Ce,{status:t.status,sourceWorkflowId:t.source_workflow_id,contentVersion:t.content_version,deployedContentVersion:t.deployed_content_version,onDeploy:ee,onArchive:fe,onDelete:ge,onRegenerate:je,isPending:Z,error:he}),u&&u.versions.length>1&&e.jsx(Oe,{versionsData:u,searchParams:x,setSearchParams:l,currentVersion:t.content_version,viewingVersion:o})]})]})]})}export{pt as YamlWorkflowDetailPage};
|
|
3
|
-
//# sourceMappingURL=YamlWorkflowDetailPage-DrDvvP62.js.map
|