@hotmeshio/long-tail 0.1.4 → 0.1.6
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 +35 -5
- 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 +11 -10
- package/build/index.js +13 -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 +4 -7
- package/{services → build/lib}/db/schemas/001_schema.sql +3 -0
- package/{services → build/lib}/db/schemas/011_system_workflow_configs.sql +7 -0
- package/build/lib/db/schemas/015_knowledge.sql +23 -0
- package/build/lib/db/schemas/016_streamable_http.sql +7 -0
- 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 +105 -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 +65 -1
- package/build/routes/mcp.js +26 -3
- 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/cron.d.ts +2 -0
- package/build/routes/yaml-workflows/cron.js +117 -0
- package/build/routes/yaml-workflows/crud.js +39 -1
- package/build/routes/yaml-workflows/deployment.js +9 -9
- package/build/routes/yaml-workflows/index.js +4 -1
- 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.d.ts +17 -0
- package/build/services/cron/index.js +98 -6
- 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 +12 -0
- package/build/services/insight/index.js +34 -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 +10 -1
- package/build/services/mcp/client/connection.js +51 -3
- 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/schemas.d.ts +2 -2
- package/build/services/mcp/db-server/tools.js +17 -4
- package/build/services/mcp/db.d.ts +1 -1
- package/build/services/mcp/db.js +11 -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/server.js +1 -1
- package/build/services/mcp/sql.d.ts +7 -1
- package/build/services/mcp/sql.js +36 -3
- package/build/services/mcp/types.d.ts +3 -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.d.ts +3 -0
- package/build/services/yaml-workflow/db.js +25 -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/invoke.d.ts +19 -0
- package/build/services/yaml-workflow/invoke.js +80 -0
- package/build/services/yaml-workflow/pipeline/analyze.js +1 -1
- package/build/services/yaml-workflow/pipeline/build/dag.js +11 -6
- package/build/services/yaml-workflow/pipeline/build/wiring.d.ts +1 -1
- package/build/services/yaml-workflow/pipeline/build/wiring.js +89 -2
- 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/prompts.d.ts +1 -1
- package/build/services/yaml-workflow/pipeline/prompts.js +44 -1
- package/build/services/yaml-workflow/pipeline/validate.js +2 -2
- package/build/services/yaml-workflow/sql.d.ts +3 -0
- package/build/services/yaml-workflow/sql.js +16 -1
- package/build/services/yaml-workflow/types.d.ts +13 -1
- package/build/services/yaml-workflow/workers/callbacks.js +10 -2
- package/build/services/yaml-workflow/workers/events.js +2 -2
- package/build/services/yaml-workflow/workers/register.js +37 -9
- 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 +11 -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/schemas.d.ts +2 -2
- 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 +21 -10
- 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 +10 -10
- 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 +9 -3
- 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 +258 -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 +1961 -322
- package/build/system/seed/server-definitions.js +68 -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/seed/tool-manifests-workflows.d.ts +7 -0
- package/build/system/seed/tool-manifests-workflows.js +10 -3
- 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/mcp-workflow-builder/activities/caches.d.ts +5 -0
- package/build/system/workflows/mcp-workflow-builder/activities/caches.js +8 -0
- package/build/system/workflows/mcp-workflow-builder/activities/index.d.ts +2 -0
- package/build/system/workflows/mcp-workflow-builder/activities/index.js +7 -0
- package/build/system/workflows/mcp-workflow-builder/activities/llm.d.ts +2 -0
- package/build/system/workflows/mcp-workflow-builder/activities/llm.js +25 -0
- package/build/system/workflows/mcp-workflow-builder/activities/tool-loader.d.ts +5 -0
- package/build/system/workflows/mcp-workflow-builder/activities/tool-loader.js +8 -0
- package/build/system/workflows/mcp-workflow-builder/index.d.ts +16 -0
- package/build/system/workflows/mcp-workflow-builder/index.js +229 -0
- package/build/system/workflows/mcp-workflow-builder/prompts.d.ts +8 -0
- package/build/system/workflows/mcp-workflow-builder/prompts.js +247 -0
- 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 +97 -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/mcp.d.ts +4 -3
- package/build/types/user.d.ts +2 -0
- package/build/types/yaml-workflow.d.ts +6 -2
- 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-BXkKGkb5.js +2 -0
- package/dashboard/dist/assets/AdminDashboard-BXkKGkb5.js.map +1 -0
- package/dashboard/dist/assets/AvailableEscalationsPage-DcH592mc.js +2 -0
- package/dashboard/dist/assets/AvailableEscalationsPage-DcH592mc.js.map +1 -0
- package/dashboard/dist/assets/BotPicker-A6LtzyuO.js +2 -0
- package/dashboard/dist/assets/{BotPicker-D6FYW1Gt.js.map → BotPicker-A6LtzyuO.js.map} +1 -1
- package/dashboard/dist/assets/CollapsibleSection-C7nL2_mv.js +2 -0
- package/dashboard/dist/assets/{CollapsibleSection-Cxk4wvjT.js.map → CollapsibleSection-C7nL2_mv.js.map} +1 -1
- package/dashboard/dist/assets/ConfirmDeleteModal-CWFwJrSl.js +2 -0
- package/dashboard/dist/assets/{ConfirmDeleteModal-FSXyKjaB.js.map → ConfirmDeleteModal-CWFwJrSl.js.map} +1 -1
- package/dashboard/dist/assets/CopyableId-DbZ5c3jh.js +2 -0
- package/dashboard/dist/assets/{CopyableId-CBdxWfp8.js.map → CopyableId-DbZ5c3jh.js.map} +1 -1
- package/dashboard/dist/assets/CredentialsPage-ClWkmLPu.js +2 -0
- package/dashboard/dist/assets/CredentialsPage-ClWkmLPu.js.map +1 -0
- package/dashboard/dist/assets/CustomDurationPicker-CtH2hReF.js +2 -0
- package/dashboard/dist/assets/{CustomDurationPicker-CAninCbl.js.map → CustomDurationPicker-CtH2hReF.js.map} +1 -1
- package/dashboard/dist/assets/DataTable-CM5ZcpPi.js +2 -0
- package/dashboard/dist/assets/DataTable-CM5ZcpPi.js.map +1 -0
- package/dashboard/dist/assets/ElapsedCell-CwqavyeC.js +2 -0
- package/dashboard/dist/assets/ElapsedCell-CwqavyeC.js.map +1 -0
- package/dashboard/dist/assets/EmptyState-BBn78pmm.js +2 -0
- package/dashboard/dist/assets/{EmptyState-2CmV-IaS.js.map → EmptyState-BBn78pmm.js.map} +1 -1
- package/dashboard/dist/assets/EscalationsOverview-BcJ2E3X7.js +2 -0
- package/dashboard/dist/assets/{EscalationsOverview-GXYFPASS.js.map → EscalationsOverview-BcJ2E3X7.js.map} +1 -1
- package/dashboard/dist/assets/EventTable-C1en_KZ0.js +2 -0
- package/dashboard/dist/assets/{EventTable-B01oJf6Y.js.map → EventTable-C1en_KZ0.js.map} +1 -1
- package/dashboard/dist/assets/FilterBar-CZTlrLQT.js +2 -0
- package/dashboard/dist/assets/{FilterBar-Ck4K4rzu.js.map → FilterBar-CZTlrLQT.js.map} +1 -1
- package/dashboard/dist/assets/ListToolbar-Cdbsapig.js +2 -0
- package/dashboard/dist/assets/ListToolbar-Cdbsapig.js.map +1 -0
- package/dashboard/dist/assets/McpOverview-CSpEJxKa.js +2 -0
- package/dashboard/dist/assets/{McpOverview-JkvRcX2e.js.map → McpOverview-CSpEJxKa.js.map} +1 -1
- package/dashboard/dist/assets/McpQueryDetailPage-DhqEI180.js +5 -0
- package/dashboard/dist/assets/McpQueryDetailPage-DhqEI180.js.map +1 -0
- package/dashboard/dist/assets/McpQueryPage-CIiVMlqo.js +2 -0
- package/dashboard/dist/assets/McpQueryPage-CIiVMlqo.js.map +1 -0
- package/dashboard/dist/assets/McpRunDetailPage-9xdxgG4d.js +2 -0
- package/dashboard/dist/assets/McpRunDetailPage-9xdxgG4d.js.map +1 -0
- package/dashboard/dist/assets/McpRunsPage-wWLqHsd4.js +2 -0
- package/dashboard/dist/assets/McpRunsPage-wWLqHsd4.js.map +1 -0
- package/dashboard/dist/assets/Modal-kB_P7ZOr.js +2 -0
- package/dashboard/dist/assets/{Modal-B4rbIVAn.js.map → Modal-kB_P7ZOr.js.map} +1 -1
- package/dashboard/dist/assets/OperatorDashboard-jc0vrgDI.js +2 -0
- package/dashboard/dist/assets/OperatorDashboard-jc0vrgDI.js.map +1 -0
- package/dashboard/dist/assets/PageHeader-NkOeBR05.js +2 -0
- package/dashboard/dist/assets/PageHeader-NkOeBR05.js.map +1 -0
- package/dashboard/dist/assets/PageHeaderWithStats-ywNhrmFK.js +2 -0
- package/dashboard/dist/assets/PageHeaderWithStats-ywNhrmFK.js.map +1 -0
- package/dashboard/dist/assets/PriorityBadge-B2MQbSxy.js +2 -0
- package/dashboard/dist/assets/{PriorityBadge-DfQY9St9.js.map → PriorityBadge-B2MQbSxy.js.map} +1 -1
- package/dashboard/dist/assets/ProcessDetailPage-B7z7IdqE.js +2 -0
- package/dashboard/dist/assets/ProcessDetailPage-B7z7IdqE.js.map +1 -0
- package/dashboard/dist/assets/ProcessesListPage-C-uHadO6.js +2 -0
- package/dashboard/dist/assets/ProcessesListPage-C-uHadO6.js.map +1 -0
- package/dashboard/dist/assets/RolePill-C1dgC-fK.js +2 -0
- package/dashboard/dist/assets/{RolePill-BTPa8L-P.js.map → RolePill-C1dgC-fK.js.map} +1 -1
- package/dashboard/dist/assets/RolesPage-BSxrD1vm.js +2 -0
- package/dashboard/dist/assets/RolesPage-BSxrD1vm.js.map +1 -0
- package/dashboard/dist/assets/RowActions-lYaHGI-v.js +2 -0
- package/dashboard/dist/assets/{RowActions-Dg-Fsm5O.js.map → RowActions-lYaHGI-v.js.map} +1 -1
- package/dashboard/dist/assets/RunAsSelector-CJDnyp93.js +2 -0
- package/dashboard/dist/assets/RunAsSelector-CJDnyp93.js.map +1 -0
- package/dashboard/dist/assets/StatCard-v2TiITVr.js +2 -0
- package/dashboard/dist/assets/{StatCard-DlgF0CJC.js.map → StatCard-v2TiITVr.js.map} +1 -1
- package/dashboard/dist/assets/StatusBadge-DWlxevgG.js +2 -0
- package/dashboard/dist/assets/StatusBadge-DWlxevgG.js.map +1 -0
- package/dashboard/dist/assets/StepIndicator-CRM4ft28.js +2 -0
- package/dashboard/dist/assets/StepIndicator-CRM4ft28.js.map +1 -0
- package/dashboard/dist/assets/StickyPagination-CF0EToEU.js +2 -0
- package/dashboard/dist/assets/{StickyPagination-F9FZsRy9.js.map → StickyPagination-CF0EToEU.js.map} +1 -1
- package/dashboard/dist/assets/SwimlaneTimeline-CNlj7fgg.js +2 -0
- package/dashboard/dist/assets/SwimlaneTimeline-CNlj7fgg.js.map +1 -0
- package/dashboard/dist/assets/TagInput-CH8qMGhC.js +2 -0
- package/dashboard/dist/assets/TagInput-CH8qMGhC.js.map +1 -0
- package/dashboard/dist/assets/TaskDetailPage-CdWo-6mu.js +2 -0
- package/dashboard/dist/assets/TaskDetailPage-CdWo-6mu.js.map +1 -0
- package/dashboard/dist/assets/TaskQueuePill-BPj4ogVG.js +2 -0
- package/dashboard/dist/assets/{TaskQueuePill-awmtb0qw.js.map → TaskQueuePill-BPj4ogVG.js.map} +1 -1
- package/dashboard/dist/assets/TasksListPage-CtRkMpKU.js +2 -0
- package/dashboard/dist/assets/{TasksListPage-C_QF23c1.js.map → TasksListPage-CtRkMpKU.js.map} +1 -1
- package/dashboard/dist/assets/TimeAgo-Di1a3X5P.js +2 -0
- package/dashboard/dist/assets/TimeAgo-Di1a3X5P.js.map +1 -0
- package/dashboard/dist/assets/TimestampCell-CqrXql-S.js +2 -0
- package/dashboard/dist/assets/TimestampCell-CqrXql-S.js.map +1 -0
- package/dashboard/dist/assets/UserName-BUFYCnRa.js +2 -0
- package/dashboard/dist/assets/{UserName-DaP4YAKr.js.map → UserName-BUFYCnRa.js.map} +1 -1
- package/dashboard/dist/assets/WorkflowExecutionPage-25iusMml.js +2 -0
- package/dashboard/dist/assets/WorkflowExecutionPage-25iusMml.js.map +1 -0
- package/dashboard/dist/assets/WorkflowPill-DPKOcbf4.js +2 -0
- package/dashboard/dist/assets/WorkflowPill-DPKOcbf4.js.map +1 -0
- package/dashboard/dist/assets/WorkflowsDashboard-BgxslssH.js +2 -0
- package/dashboard/dist/assets/WorkflowsDashboard-BgxslssH.js.map +1 -0
- package/dashboard/dist/assets/WorkflowsOverview-Doe5L-Re.js +2 -0
- package/dashboard/dist/assets/{WorkflowsOverview-D9OzzQqw.js.map → WorkflowsOverview-Doe5L-Re.js.map} +1 -1
- package/dashboard/dist/assets/YamlWorkflowsPage-BliAckJ6.js +2 -0
- package/dashboard/dist/assets/YamlWorkflowsPage-BliAckJ6.js.map +1 -0
- package/dashboard/dist/assets/{bots-BkKVMbUW.js → bots-Bi2_O1Ts.js} +2 -2
- package/dashboard/dist/assets/{bots-BkKVMbUW.js.map → bots-Bi2_O1Ts.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-Ck1KlLkT.js +2 -0
- package/dashboard/dist/assets/escalation-Ck1KlLkT.js.map +1 -0
- package/dashboard/dist/assets/escalation-columns-ohDsj2eJ.js +2 -0
- package/dashboard/dist/assets/{escalation-columns-D6aqStaY.js.map → escalation-columns-ohDsj2eJ.js.map} +1 -1
- package/dashboard/dist/assets/helpers-BoD2SgUY.js +2 -0
- package/dashboard/dist/assets/helpers-BoD2SgUY.js.map +1 -0
- package/dashboard/dist/assets/index-BEtLIsML.js +2 -0
- package/dashboard/dist/assets/index-BEtLIsML.js.map +1 -0
- package/dashboard/dist/assets/index-Bn2xHDr8.js +5 -0
- package/dashboard/dist/assets/index-Bn2xHDr8.js.map +1 -0
- package/dashboard/dist/assets/index-BpT-6WgJ.js +2 -0
- package/dashboard/dist/assets/{index-DTPzZr_X.js.map → index-BpT-6WgJ.js.map} +1 -1
- package/dashboard/dist/assets/index-CZrJ09p-.js +2 -0
- package/dashboard/dist/assets/index-CZrJ09p-.js.map +1 -0
- package/dashboard/dist/assets/index-D3NyVADW.js +2 -0
- package/dashboard/dist/assets/index-D3NyVADW.js.map +1 -0
- package/dashboard/dist/assets/index-D7zYZOnH.js +2 -0
- package/dashboard/dist/assets/index-D7zYZOnH.js.map +1 -0
- package/dashboard/dist/assets/index-DOkHXmyf.js +17 -0
- package/dashboard/dist/assets/index-DOkHXmyf.js.map +1 -0
- package/dashboard/dist/assets/index-DYyLF-Qb.js +281 -0
- package/dashboard/dist/assets/index-DYyLF-Qb.js.map +1 -0
- package/dashboard/dist/assets/index-Dk2Q51o0.js +2 -0
- package/dashboard/dist/assets/index-Dk2Q51o0.js.map +1 -0
- package/dashboard/dist/assets/index-FuohTtaM.js +6 -0
- package/dashboard/dist/assets/index-FuohTtaM.js.map +1 -0
- package/dashboard/dist/assets/index-PyCTS05D.css +1 -0
- package/dashboard/dist/assets/mcp-CJtYjA7A.js +2 -0
- package/dashboard/dist/assets/mcp-CJtYjA7A.js.map +1 -0
- package/dashboard/dist/assets/mcp-query-jQJQrs_7.js +2 -0
- package/dashboard/dist/assets/mcp-query-jQJQrs_7.js.map +1 -0
- package/dashboard/dist/assets/{mcp-runs-ChPbpvXK.js → mcp-runs-DUWm9Z4V.js} +2 -2
- package/dashboard/dist/assets/{mcp-runs-ChPbpvXK.js.map → mcp-runs-DUWm9Z4V.js.map} +1 -1
- package/dashboard/dist/assets/namespaces-BM5P2qmL.js +2 -0
- package/dashboard/dist/assets/{namespaces-BgbaC3ow.js.map → namespaces-BM5P2qmL.js.map} +1 -1
- package/dashboard/dist/assets/{roles-ZNrqqnQl.js → roles-lv0shpjJ.js} +2 -2
- package/dashboard/dist/assets/{roles-ZNrqqnQl.js.map → roles-lv0shpjJ.js.map} +1 -1
- package/dashboard/dist/assets/settings-Wlq92mRo.js +2 -0
- package/dashboard/dist/assets/{settings-eBRSE0mQ.js.map → settings-Wlq92mRo.js.map} +1 -1
- package/dashboard/dist/assets/tasks-BFGm4PuE.js +2 -0
- package/dashboard/dist/assets/{tasks-tRqClPns.js.map → tasks-BFGm4PuE.js.map} +1 -1
- package/dashboard/dist/assets/useEventHooks-DIE6ue4x.js +2 -0
- package/dashboard/dist/assets/useEventHooks-DIE6ue4x.js.map +1 -0
- package/dashboard/dist/assets/useExpandedRows-Cg9iq6Vy.js +2 -0
- package/dashboard/dist/assets/useExpandedRows-Cg9iq6Vy.js.map +1 -0
- 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/{useYamlActivityEvents-BO51u8tm.js → useYamlActivityEvents-DCwSO73t.js} +2 -2
- package/dashboard/dist/assets/useYamlActivityEvents-DCwSO73t.js.map +1 -0
- package/dashboard/dist/assets/{users-tMvNyOo8.js → users-tA5-K0wA.js} +2 -2
- package/dashboard/dist/assets/{users-tMvNyOo8.js.map → users-tA5-K0wA.js.map} +1 -1
- package/dashboard/dist/assets/vendor-icons-BiIug1SK.js +402 -0
- package/dashboard/dist/assets/vendor-icons-BiIug1SK.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-CfLc15Wr.js} +2 -2
- package/dashboard/dist/assets/{workflows-Cc4VHcrp.js.map → workflows-CfLc15Wr.js.map} +1 -1
- package/dashboard/dist/assets/yaml-workflows-D7JXNqbM.js +2 -0
- package/dashboard/dist/assets/yaml-workflows-D7JXNqbM.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 +253 -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 +263 -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 +985 -0
- package/docs/oauth-and-delegation.md +469 -0
- package/docs/telemetry.md +144 -0
- package/docs/workflows.md +695 -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/CredentialsPage-Ikzsot0w.js.map +0 -1
- 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-X85K5bHC.js.map +0 -1
- 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-blCW6IL7.js.map +0 -1
- 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/useNatsEvents-Xr43X1fG.js +0 -2
- package/dashboard/dist/assets/useNatsEvents-Xr43X1fG.js.map +0 -1
- package/dashboard/dist/assets/useYamlActivityEvents-BO51u8tm.js.map +0 -1
- package/dashboard/dist/assets/vendor-icons-ZTAKVwGc.js +0 -292
- 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/services/db/README.md +0 -8
- /package/build/{services → lib}/db/migrate.d.ts +0 -0
- /package/{services → build/lib}/db/schemas/002_seed.sql +0 -0
- /package/{services → build/lib}/db/schemas/003_workflow_discovery.sql +0 -0
- /package/{services → build/lib}/db/schemas/004_query_router.sql +0 -0
- /package/{services → build/lib}/db/schemas/005_triage_router.sql +0 -0
- /package/{services → build/lib}/db/schemas/006_oauth.sql +0 -0
- /package/{services → build/lib}/db/schemas/007_security.sql +0 -0
- /package/{services → build/lib}/db/schemas/008_bot_accounts.sql +0 -0
- /package/{services → build/lib}/db/schemas/009_audit_trail.sql +0 -0
- /package/{services → build/lib}/db/schemas/010_credential_providers.sql +0 -0
- /package/{services → build/lib}/db/schemas/012_drop_modality.sql +0 -0
- /package/{services → build/lib}/db/schemas/013_execute_as.sql +0 -0
- /package/{services → build/lib}/db/schemas/014_ephemeral_credentials.sql +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
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index-D7zYZOnH.js","sources":["../../src/pages/admin/users/CreateUserModal.tsx","../../src/pages/admin/users/EditUserModal.tsx","../../src/pages/admin/bots/CreateBotModal.tsx","../../src/pages/admin/bots/EditBotModal.tsx","../../src/pages/admin/bots/BotDetailPanel.tsx","../../src/pages/admin/bots/BotsPage.tsx","../../src/pages/admin/users/RolePanel.tsx","../../src/pages/admin/users/AccountTabToggle.tsx","../../src/pages/admin/users/UsersPage.tsx"],"sourcesContent":["import { useState } from 'react';\nimport { useCreateUser } from '../../../api/users';\nimport { Modal } from '../../../components/common/modal/Modal';\n\nexport function CreateUserModal({\n open,\n onClose,\n}: {\n open: boolean;\n onClose: () => void;\n}) {\n const createUser = useCreateUser();\n const [form, setForm] = useState({\n external_id: '',\n email: '',\n display_name: '',\n password: '',\n });\n\n const [prevOpen, setPrevOpen] = useState(open);\n if (open !== prevOpen) {\n setPrevOpen(open);\n if (open) setForm({ external_id: '', email: '', display_name: '', password: '' });\n }\n\n const handleCreate = () => {\n if (!form.external_id.trim()) return;\n createUser.mutate(\n {\n external_id: form.external_id.trim(),\n email: form.email.trim() || undefined,\n display_name: form.display_name.trim() || undefined,\n password: form.password || undefined,\n },\n { onSuccess: onClose },\n );\n };\n\n const set = (field: string, value: string) =>\n setForm((f) => ({ ...f, [field]: value }));\n\n return (\n <Modal open={open} onClose={onClose} title=\"Create User\">\n <div className=\"space-y-4\">\n <div>\n <label className=\"block text-[10px] font-semibold uppercase tracking-widest text-text-tertiary mb-1\">\n External ID (required)\n </label>\n <input\n type=\"text\"\n value={form.external_id}\n onChange={(e) => set('external_id', e.target.value)}\n placeholder=\"e.g., john.doe\"\n className=\"input text-xs w-full\"\n />\n </div>\n <div>\n <label className=\"block text-[10px] font-semibold uppercase tracking-widest text-text-tertiary mb-1\">\n Display Name\n </label>\n <input\n type=\"text\"\n value={form.display_name}\n onChange={(e) => set('display_name', e.target.value)}\n placeholder=\"John Doe\"\n className=\"input text-xs w-full\"\n />\n </div>\n <div>\n <label className=\"block text-[10px] font-semibold uppercase tracking-widest text-text-tertiary mb-1\">\n Email\n </label>\n <input\n type=\"text\"\n value={form.email}\n onChange={(e) => set('email', e.target.value)}\n placeholder=\"john@example.com\"\n className=\"input text-xs w-full\"\n />\n </div>\n <div>\n <label className=\"block text-[10px] font-semibold uppercase tracking-widest text-text-tertiary mb-1\">\n Password\n </label>\n <input\n type=\"password\"\n value={form.password}\n onChange={(e) => set('password', e.target.value)}\n placeholder=\"Leave blank for no password\"\n className=\"input text-xs w-full\"\n />\n </div>\n\n {createUser.error && (\n <p className=\"text-xs text-status-error\">{(createUser.error as Error).message}</p>\n )}\n\n <div className=\"flex justify-end gap-3 pt-2\">\n <button onClick={onClose} className=\"btn-secondary text-xs\">\n Cancel\n </button>\n <button\n onClick={handleCreate}\n disabled={!form.external_id.trim() || createUser.isPending}\n className=\"btn-primary text-xs\"\n >\n {createUser.isPending ? 'Creating...' : 'Create'}\n </button>\n </div>\n </div>\n </Modal>\n );\n}\n","import { useState } from 'react';\nimport { useUpdateUser } from '../../../api/users';\nimport { Modal } from '../../../components/common/modal/Modal';\nimport type { LTUserRecord } from '../../../api/types';\n\nexport function EditUserModal({\n open,\n onClose,\n user,\n}: {\n open: boolean;\n onClose: () => void;\n user: LTUserRecord | null;\n}) {\n const updateUser = useUpdateUser();\n const [form, setForm] = useState({\n display_name: '',\n email: '',\n status: 'active' as string,\n });\n\n const [prevUser, setPrevUser] = useState(user);\n if (user !== prevUser) {\n setPrevUser(user);\n if (user) {\n setForm({\n display_name: user.display_name ?? '',\n email: user.email ?? '',\n status: user.status,\n });\n }\n }\n\n const handleSave = () => {\n if (!user) return;\n updateUser.mutate(\n {\n id: user.id,\n display_name: form.display_name.trim() || undefined,\n email: form.email.trim() || undefined,\n status: form.status,\n },\n { onSuccess: onClose },\n );\n };\n\n return (\n <Modal\n open={open}\n onClose={onClose}\n title={`Edit — ${user?.display_name || user?.external_id || ''}`}\n >\n <div className=\"space-y-4\">\n <div>\n <label className=\"block text-[10px] font-semibold uppercase tracking-widest text-text-tertiary mb-1\">\n Display Name\n </label>\n <input\n type=\"text\"\n value={form.display_name}\n onChange={(e) => setForm((f) => ({ ...f, display_name: e.target.value }))}\n className=\"input text-xs w-full\"\n />\n </div>\n <div>\n <label className=\"block text-[10px] font-semibold uppercase tracking-widest text-text-tertiary mb-1\">\n Email\n </label>\n <input\n type=\"text\"\n value={form.email}\n onChange={(e) => setForm((f) => ({ ...f, email: e.target.value }))}\n className=\"input text-xs w-full\"\n />\n </div>\n <div>\n <label className=\"block text-[10px] font-semibold uppercase tracking-widest text-text-tertiary mb-1\">\n Status\n </label>\n <select\n value={form.status}\n onChange={(e) => setForm((f) => ({ ...f, status: e.target.value }))}\n className=\"select text-xs w-full\"\n >\n <option value=\"active\">Active</option>\n <option value=\"inactive\">Inactive</option>\n <option value=\"suspended\">Suspended</option>\n </select>\n </div>\n\n {updateUser.error && (\n <p className=\"text-xs text-status-error\">{(updateUser.error as Error).message}</p>\n )}\n\n <div className=\"flex justify-end gap-3 pt-2\">\n <button onClick={onClose} className=\"btn-secondary text-xs\">\n Cancel\n </button>\n <button\n onClick={handleSave}\n disabled={updateUser.isPending}\n className=\"btn-primary text-xs\"\n >\n {updateUser.isPending ? 'Saving...' : 'Save'}\n </button>\n </div>\n </div>\n </Modal>\n );\n}\n","import { useState } from 'react';\nimport { useCreateBot } from '../../../api/bots';\nimport { Modal } from '../../../components/common/modal/Modal';\n\nexport function CreateBotModal({\n open,\n onClose,\n}: {\n open: boolean;\n onClose: () => void;\n}) {\n const createBot = useCreateBot();\n const [form, setForm] = useState({\n name: '',\n display_name: '',\n description: '',\n });\n\n const [prevOpen, setPrevOpen] = useState(open);\n if (open !== prevOpen) {\n setPrevOpen(open);\n if (open) setForm({ name: '', display_name: '', description: '' });\n }\n\n const handleCreate = () => {\n if (!form.name.trim()) return;\n createBot.mutate(\n {\n name: form.name.trim(),\n display_name: form.display_name.trim() || undefined,\n description: form.description.trim() || undefined,\n },\n { onSuccess: onClose },\n );\n };\n\n const set = (field: string, value: string) =>\n setForm((f) => ({ ...f, [field]: value }));\n\n return (\n <Modal open={open} onClose={onClose} title=\"Create Bot\">\n <div className=\"space-y-4\">\n <div>\n <label className=\"block text-[10px] font-semibold uppercase tracking-widest text-text-tertiary mb-1\">\n Name (required)\n </label>\n <input\n type=\"text\"\n value={form.name}\n onChange={(e) => set('name', e.target.value.replace(/\\s+/g, '-').toLowerCase())}\n placeholder=\"e.g., ci-bot\"\n className=\"input text-xs w-full font-mono\"\n />\n </div>\n <div>\n <label className=\"block text-[10px] font-semibold uppercase tracking-widest text-text-tertiary mb-1\">\n Display Name\n </label>\n <input\n type=\"text\"\n value={form.display_name}\n onChange={(e) => set('display_name', e.target.value)}\n placeholder=\"CI Bot\"\n className=\"input text-xs w-full\"\n />\n </div>\n <div>\n <label className=\"block text-[10px] font-semibold uppercase tracking-widest text-text-tertiary mb-1\">\n Description\n </label>\n <input\n type=\"text\"\n value={form.description}\n onChange={(e) => set('description', e.target.value)}\n placeholder=\"Runs scheduled workflows\"\n className=\"input text-xs w-full\"\n />\n </div>\n\n {createBot.error && (\n <p className=\"text-xs text-status-error\">{(createBot.error as Error).message}</p>\n )}\n\n <div className=\"flex justify-end gap-3 pt-2\">\n <button onClick={onClose} className=\"btn-secondary text-xs\">\n Cancel\n </button>\n <button\n onClick={handleCreate}\n disabled={!form.name.trim() || createBot.isPending}\n className=\"btn-primary text-xs\"\n >\n {createBot.isPending ? 'Creating...' : 'Create'}\n </button>\n </div>\n </div>\n </Modal>\n );\n}\n","import { useState } from 'react';\nimport { useUpdateBot } from '../../../api/bots';\nimport { Modal } from '../../../components/common/modal/Modal';\nimport type { BotRecord } from '../../../api/types';\n\nexport function EditBotModal({\n open,\n onClose,\n bot,\n}: {\n open: boolean;\n onClose: () => void;\n bot: BotRecord | null;\n}) {\n const updateBot = useUpdateBot();\n const [form, setForm] = useState({\n display_name: '',\n description: '',\n status: 'active' as string,\n });\n\n const [prevBot, setPrevBot] = useState(bot);\n if (bot !== prevBot) {\n setPrevBot(bot);\n if (bot) {\n setForm({\n display_name: bot.display_name ?? '',\n description: bot.description ?? '',\n status: bot.status,\n });\n }\n }\n\n const handleSave = () => {\n if (!bot) return;\n updateBot.mutate(\n {\n id: bot.id,\n display_name: form.display_name.trim() || undefined,\n description: form.description.trim() || undefined,\n status: form.status,\n },\n { onSuccess: onClose },\n );\n };\n\n return (\n <Modal\n open={open}\n onClose={onClose}\n title={`Edit — ${bot?.display_name || bot?.external_id || ''}`}\n >\n <div className=\"space-y-4\">\n <div>\n <label className=\"block text-[10px] font-semibold uppercase tracking-widest text-text-tertiary mb-1\">\n Display Name\n </label>\n <input\n type=\"text\"\n value={form.display_name}\n onChange={(e) => setForm((f) => ({ ...f, display_name: e.target.value }))}\n className=\"input text-xs w-full\"\n />\n </div>\n <div>\n <label className=\"block text-[10px] font-semibold uppercase tracking-widest text-text-tertiary mb-1\">\n Description\n </label>\n <input\n type=\"text\"\n value={form.description}\n onChange={(e) => setForm((f) => ({ ...f, description: e.target.value }))}\n className=\"input text-xs w-full\"\n />\n </div>\n <div>\n <label className=\"block text-[10px] font-semibold uppercase tracking-widest text-text-tertiary mb-1\">\n Status\n </label>\n <select\n value={form.status}\n onChange={(e) => setForm((f) => ({ ...f, status: e.target.value }))}\n className=\"select text-xs w-full\"\n >\n <option value=\"active\">Active</option>\n <option value=\"inactive\">Inactive</option>\n <option value=\"suspended\">Suspended</option>\n </select>\n </div>\n\n {updateBot.error && (\n <p className=\"text-xs text-status-error\">{(updateBot.error as Error).message}</p>\n )}\n\n <div className=\"flex justify-end gap-3 pt-2\">\n <button onClick={onClose} className=\"btn-secondary text-xs\">\n Cancel\n </button>\n <button\n onClick={handleSave}\n disabled={updateBot.isPending}\n className=\"btn-primary text-xs\"\n >\n {updateBot.isPending ? 'Saving...' : 'Save'}\n </button>\n </div>\n </div>\n </Modal>\n );\n}\n","import { useState, useMemo } from 'react';\nimport { Trash2, Key, Plus, Copy, Check } from 'lucide-react';\nimport {\n useBotApiKeys,\n useCreateBotApiKey,\n useRevokeBotApiKey,\n useAddBotRole,\n useRemoveBotRole,\n} from '../../../api/bots';\nimport { useRoles } from '../../../api/roles';\nimport { ConfirmDeleteModal } from '../../../components/common/modal/ConfirmDeleteModal';\nimport { RolePill } from '../../../components/common/display/RolePill';\nimport { TimeAgo } from '../../../components/common/display/TimeAgo';\nimport type { BotRecord, BotApiKeyRecord, LTRoleType } from '../../../api/types';\n\nfunction ApiKeysSection({ botId }: { botId: string }) {\n const { data } = useBotApiKeys(botId);\n const createKey = useCreateBotApiKey();\n const revokeKey = useRevokeBotApiKey();\n\n const [newKeyName, setNewKeyName] = useState('');\n const [generatedKey, setGeneratedKey] = useState<string | null>(null);\n const [copied, setCopied] = useState(false);\n const [confirmRevoke, setConfirmRevoke] = useState<BotApiKeyRecord | null>(null);\n\n const keys = data?.keys ?? [];\n\n const handleGenerate = () => {\n if (!newKeyName.trim()) return;\n createKey.mutate(\n { botId, name: newKeyName.trim(), scopes: ['mcp:tool:call'] },\n {\n onSuccess: (result: any) => {\n setGeneratedKey(result.rawKey);\n setNewKeyName('');\n },\n },\n );\n };\n\n const handleCopy = () => {\n if (!generatedKey) return;\n navigator.clipboard.writeText(generatedKey);\n setCopied(true);\n setTimeout(() => setCopied(false), 2000);\n };\n\n const handleRevoke = () => {\n if (!confirmRevoke) return;\n revokeKey.mutate(\n { botId, keyId: confirmRevoke.id },\n { onSuccess: () => setConfirmRevoke(null) },\n );\n };\n\n return (\n <div>\n <p className=\"text-[10px] font-semibold uppercase tracking-widest text-text-tertiary mb-3\">\n API Keys\n </p>\n\n {generatedKey && (\n <div className=\"mb-3 p-3 bg-status-success/10 border border-status-success/30 rounded-md\">\n <p className=\"text-[10px] font-semibold text-status-success mb-1\">\n Key generated — copy now, it won't be shown again\n </p>\n <div className=\"flex items-center gap-2\">\n <code className=\"text-[11px] font-mono text-text-primary bg-surface-sunken px-2 py-1 rounded flex-1 overflow-hidden text-ellipsis\">\n {generatedKey}\n </code>\n <button\n onClick={handleCopy}\n className=\"text-text-tertiary hover:text-text-primary shrink-0\"\n title=\"Copy to clipboard\"\n >\n {copied ? <Check className=\"w-3.5 h-3.5 text-status-success\" /> : <Copy className=\"w-3.5 h-3.5\" />}\n </button>\n </div>\n </div>\n )}\n\n {keys.length === 0 ? (\n <p className=\"text-xs text-text-tertiary mb-3\">No API keys.</p>\n ) : (\n <div className=\"space-y-1.5 mb-3\">\n {keys.map((k) => (\n <div\n key={k.id}\n className=\"group/key flex items-center justify-between px-2.5 py-1.5 bg-surface-sunken rounded text-xs\"\n >\n <div className=\"flex items-center gap-2\">\n <Key className=\"w-3 h-3 text-text-tertiary\" />\n <span className=\"text-text-primary font-mono\">{k.name}</span>\n {k.last_used_at && (\n <span className=\"text-[10px] text-text-tertiary\">\n used <TimeAgo date={k.last_used_at} />\n </span>\n )}\n </div>\n <button\n onClick={() => setConfirmRevoke(k)}\n className=\"opacity-0 group-hover/key:opacity-100 transition-opacity text-text-tertiary hover:text-status-error\"\n title=\"Revoke key\"\n >\n <Trash2 className=\"w-3 h-3\" />\n </button>\n </div>\n ))}\n </div>\n )}\n\n <div className=\"flex items-center gap-2\">\n <input\n type=\"text\"\n value={newKeyName}\n onChange={(e) => setNewKeyName(e.target.value)}\n placeholder=\"Key name...\"\n className=\"input text-xs flex-1 font-mono\"\n />\n <button\n onClick={handleGenerate}\n disabled={!newKeyName.trim() || createKey.isPending}\n className=\"btn-primary text-xs inline-flex items-center gap-1\"\n >\n <Plus className=\"w-3 h-3\" />\n {createKey.isPending ? '...' : 'Generate'}\n </button>\n </div>\n {createKey.error && (\n <p className=\"text-[10px] text-status-error mt-1\">{(createKey.error as Error).message}</p>\n )}\n\n <ConfirmDeleteModal\n open={!!confirmRevoke}\n onClose={() => setConfirmRevoke(null)}\n onConfirm={handleRevoke}\n title=\"Revoke API Key\"\n description={\n <>\n Revoke API key{' '}\n <span className=\"font-medium text-text-primary font-mono\">\n {confirmRevoke?.name}\n </span>\n ? This bot will no longer be able to authenticate with this key.\n </>\n }\n isPending={revokeKey.isPending}\n error={revokeKey.error as Error | null}\n />\n </div>\n );\n}\n\nfunction RolesSection({ bot }: { bot: BotRecord }) {\n const { data: allRolesData } = useRoles();\n const addRole = useAddBotRole();\n const removeRole = useRemoveBotRole();\n const [newRole, setNewRole] = useState('');\n const [newType, setNewType] = useState<LTRoleType>('member');\n\n const allRoles = allRolesData?.roles ?? [];\n const currentRoles = bot.roles ?? [];\n\n const available = useMemo(() => {\n const assigned = new Set(currentRoles.map((r) => r.role));\n return allRoles.filter((r) => !assigned.has(r));\n }, [allRoles, currentRoles]);\n\n const handleAdd = () => {\n if (!newRole.trim()) return;\n addRole.mutate(\n { botId: bot.id, role: newRole.trim(), type: newType },\n { onSuccess: () => { setNewRole(''); setNewType('member'); } },\n );\n };\n\n const handleRemove = (role: string) => {\n removeRole.mutate({ botId: bot.id, role });\n };\n\n return (\n <div>\n <p className=\"text-[10px] font-semibold uppercase tracking-widest text-text-tertiary mb-3\">\n Roles\n </p>\n\n {currentRoles.length === 0 ? (\n <p className=\"text-xs text-text-tertiary mb-3\">No roles assigned.</p>\n ) : (\n <div className=\"flex flex-wrap gap-2 mb-3\">\n {currentRoles.map((r) => (\n <span\n key={r.role}\n className=\"inline-flex items-center gap-1.5 px-2.5 py-1 text-xs bg-surface-sunken rounded-full text-text-secondary\"\n >\n <RolePill role={r.role} />\n <span className=\"text-[9px] text-text-tertiary\">{r.type}</span>\n <button\n onClick={() => handleRemove(r.role)}\n className=\"text-text-tertiary hover:text-status-error transition-colors ml-0.5\"\n title={`Remove ${r.role}`}\n >\n ×\n </button>\n </span>\n ))}\n </div>\n )}\n\n {available.length > 0 && (\n <div className=\"flex items-center gap-2\">\n <select\n value={newRole}\n onChange={(e) => setNewRole(e.target.value)}\n className=\"select text-xs font-mono flex-1\"\n >\n <option value=\"\">Select a role...</option>\n {available.map((r) => (\n <option key={r} value={r}>{r}</option>\n ))}\n </select>\n <select\n value={newType}\n onChange={(e) => setNewType(e.target.value as LTRoleType)}\n className=\"select text-xs w-24\"\n >\n <option value=\"member\">member</option>\n <option value=\"admin\">admin</option>\n <option value=\"superadmin\">superadmin</option>\n </select>\n <button\n onClick={handleAdd}\n disabled={!newRole || addRole.isPending}\n className=\"btn-primary text-xs\"\n >\n {addRole.isPending ? '...' : 'Add'}\n </button>\n </div>\n )}\n {addRole.error && (\n <p className=\"text-[10px] text-status-error mt-1\">{(addRole.error as Error).message}</p>\n )}\n </div>\n );\n}\n\nexport function BotDetailPanel({ bot }: { bot: BotRecord | null }) {\n if (!bot) {\n return (\n <div className=\"border-l border-surface-border pl-6 pt-4 min-h-[300px]\">\n <p className=\"text-xs text-text-tertiary\">\n Select a bot to manage its API keys and roles.\n </p>\n </div>\n );\n }\n\n return (\n <div className=\"border-l border-surface-border pl-6 pt-4 min-h-[300px] space-y-6\">\n <div>\n <p className=\"text-sm text-text-primary\">{bot.display_name || bot.external_id}</p>\n {bot.description && (\n <p className=\"text-xs text-text-tertiary mt-0.5\">{bot.description}</p>\n )}\n </div>\n\n <ApiKeysSection botId={bot.id} />\n <RolesSection bot={bot} />\n </div>\n );\n}\n","import { useState, useMemo } from 'react';\nimport { Pencil, Trash2 } from 'lucide-react';\nimport { useBots, useDeleteBot } from '../../../api/bots';\nimport { useFilterParams } from '../../../hooks/useFilterParams';\nimport { DataTable, type Column } from '../../../components/common/data/DataTable';\nimport { StickyPagination } from '../../../components/common/data/StickyPagination';\nimport { ConfirmDeleteModal } from '../../../components/common/modal/ConfirmDeleteModal';\nimport { RowAction, RowActionGroup } from '../../../components/common/layout/RowActions';\nimport { PageHeader } from '../../../components/common/layout/PageHeader';\nimport { RolePill } from '../../../components/common/display/RolePill';\nimport { TimestampCell } from '../../../components/common/display/TimestampCell';\nimport type { BotRecord } from '../../../api/types';\nimport { CreateBotModal } from './CreateBotModal';\nimport { EditBotModal } from './EditBotModal';\nimport { BotDetailPanel } from './BotDetailPanel';\n\nconst statusDot: Record<string, string> = {\n active: 'bg-status-success',\n inactive: 'bg-text-tertiary',\n suspended: 'bg-status-error',\n};\n\nexport function BotsPage({ embedded = false }: { embedded?: boolean }) {\n const { pagination } = useFilterParams({ filters: {} });\n const deleteBot = useDeleteBot();\n\n const [showCreate, setShowCreate] = useState(false);\n const [editingBot, setEditingBot] = useState<BotRecord | null>(null);\n const [selectedBot, setSelectedBot] = useState<BotRecord | null>(null);\n const [confirmDelete, setConfirmDelete] = useState<BotRecord | null>(null);\n\n const { data, isLoading } = useBots({\n limit: pagination.pageSize,\n offset: pagination.offset,\n });\n\n const total = data?.total ?? 0;\n const bots = data?.bots ?? [];\n\n const activeBot = useMemo(() => {\n if (!selectedBot) return null;\n return bots.find((b) => b.id === selectedBot.id) ?? selectedBot;\n }, [bots, selectedBot]);\n\n const columns: Column<BotRecord>[] = [\n {\n key: 'display_name',\n label: 'Bot',\n render: (row) => (\n <div className=\"flex items-center gap-2.5\">\n <span\n className={`w-2 h-2 rounded-full shrink-0 ${statusDot[row.status] ?? 'bg-status-pending'}`}\n title={row.status}\n />\n <div>\n <p className=\"text-sm text-text-primary\">\n {row.display_name || row.external_id}\n </p>\n {row.description && (\n <p className=\"text-xs text-text-tertiary\">{row.description}</p>\n )}\n </div>\n </div>\n ),\n },\n {\n key: 'roles',\n label: 'Roles',\n render: (row) => (\n <div className=\"flex gap-1 flex-wrap\">\n {(row.roles ?? []).map((r) => (\n <RolePill key={r.role} role={r.role} />\n ))}\n </div>\n ),\n },\n {\n key: 'created_at',\n label: 'Created',\n render: (row) => <TimestampCell date={row.created_at} />,\n className: 'w-44',\n },\n {\n key: 'actions',\n label: '',\n render: (row) => (\n <RowActionGroup>\n <RowAction\n icon={Pencil}\n title=\"Edit bot\"\n onClick={() => setEditingBot(row)}\n />\n <RowAction\n icon={Trash2}\n title=\"Delete bot\"\n onClick={() => setConfirmDelete(row)}\n colorClass=\"text-text-tertiary hover:text-status-error\"\n />\n </RowActionGroup>\n ),\n className: 'w-16 text-right',\n },\n ];\n\n const handleDelete = () => {\n if (!confirmDelete) return;\n deleteBot.mutate(confirmDelete.id, {\n onSuccess: () => {\n setConfirmDelete(null);\n if (selectedBot?.id === confirmDelete.id) setSelectedBot(null);\n },\n });\n };\n\n return (\n <div>\n {embedded ? (\n <div className=\"flex justify-end mb-4\">\n <button onClick={() => setShowCreate(true)} className=\"btn-primary text-xs\">\n Add Bot\n </button>\n </div>\n ) : (\n <PageHeader\n title=\"Service Accounts\"\n actions={\n <button onClick={() => setShowCreate(true)} className=\"btn-primary text-xs\">\n Add Bot\n </button>\n }\n />\n )}\n\n <div className=\"grid grid-cols-1 lg:grid-cols-[1fr_360px] gap-6\">\n <div className=\"overflow-x-clip\">\n <DataTable\n columns={columns}\n data={bots}\n keyFn={(row) => row.id}\n isLoading={isLoading}\n emptyMessage=\"No bots yet\"\n onRowClick={(row) => setSelectedBot(row)}\n activeRowKey={activeBot?.id ?? null}\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 <BotDetailPanel bot={activeBot} />\n </div>\n\n <CreateBotModal open={showCreate} onClose={() => setShowCreate(false)} />\n\n <EditBotModal\n open={!!editingBot}\n onClose={() => setEditingBot(null)}\n bot={editingBot}\n />\n\n <ConfirmDeleteModal\n open={!!confirmDelete}\n onClose={() => setConfirmDelete(null)}\n onConfirm={handleDelete}\n title=\"Delete Bot\"\n description={\n <>\n Delete{' '}\n <span className=\"font-medium text-text-primary\">\n {confirmDelete?.display_name || confirmDelete?.external_id}\n </span>\n ? This will also revoke all API keys. This action cannot be undone.\n </>\n }\n isPending={deleteBot.isPending}\n error={deleteBot.error as Error | null}\n />\n </div>\n );\n}\n","import { useState, useMemo } from 'react';\nimport { useRoles } from '../../../api/roles';\nimport { useAddUserRole, useRemoveUserRole } from '../../../api/users';\nimport type { LTUserRecord, LTRoleType } from '../../../api/types';\nimport { RolePill } from '../../../components/common/display/RolePill';\n\nexport function RolePanel({ user }: { user: LTUserRecord | null }) {\n const { data: allRolesData } = useRoles();\n const addRole = useAddUserRole();\n const removeRole = useRemoveUserRole();\n const [newRole, setNewRole] = useState('');\n const [newType, setNewType] = useState<LTRoleType>('member');\n\n const allRoles = allRolesData?.roles ?? [];\n const currentRoles = user?.roles ?? [];\n\n const available = useMemo(() => {\n const assigned = new Set(currentRoles.map((r) => r.role));\n return allRoles.filter((r) => !assigned.has(r));\n }, [allRoles, currentRoles]);\n\n const handleAdd = () => {\n if (!user || !newRole.trim()) return;\n addRole.mutate(\n { userId: user.id, role: newRole.trim(), type: newType },\n { onSuccess: () => { setNewRole(''); setNewType('member'); } },\n );\n };\n\n const handleRemove = (role: string) => {\n if (!user) return;\n removeRole.mutate({ userId: user.id, role });\n };\n\n return (\n <div className=\"border-l border-surface-border pl-6 pt-4 min-h-[300px]\">\n <p className=\"text-[10px] font-semibold uppercase tracking-widest text-text-tertiary mb-4\">\n Role Membership\n </p>\n\n {!user ? (\n <p className=\"text-xs text-text-tertiary\">\n Select a user to manage their roles.\n </p>\n ) : (\n <div className=\"space-y-4\">\n <div>\n <p className=\"text-sm text-text-primary\">{user.display_name || user.external_id}</p>\n <p className=\"text-[10px] text-text-tertiary mt-0.5\">Member of:</p>\n </div>\n\n {currentRoles.length === 0 ? (\n <p className=\"text-xs text-text-tertiary\">No roles assigned.</p>\n ) : (\n <div className=\"flex flex-wrap gap-2\">\n {currentRoles.map((r) => (\n <span\n key={r.role}\n className=\"inline-flex items-center gap-1.5 px-2.5 py-1 text-xs bg-surface-sunken rounded-full text-text-secondary\"\n >\n <RolePill role={r.role} />\n <span className=\"text-[9px] text-text-tertiary\">{r.type}</span>\n <button\n onClick={() => handleRemove(r.role)}\n className=\"text-text-tertiary hover:text-status-error transition-colors ml-0.5\"\n title={`Remove ${r.role}`}\n >\n ×\n </button>\n </span>\n ))}\n </div>\n )}\n\n {available.length > 0 && (\n <div className=\"pt-3 border-t border-surface-border\">\n <p className=\"text-[10px] font-semibold uppercase tracking-widest text-text-tertiary mb-2\">\n Add Role\n </p>\n <div className=\"flex items-center gap-2\">\n <select\n value={newRole}\n onChange={(e) => setNewRole(e.target.value)}\n className=\"select text-xs font-mono flex-1\"\n >\n <option value=\"\">Select a role...</option>\n {available.map((r) => (\n <option key={r} value={r}>{r}</option>\n ))}\n </select>\n <select\n value={newType}\n onChange={(e) => setNewType(e.target.value as LTRoleType)}\n className=\"select text-xs w-24\"\n >\n <option value=\"member\">member</option>\n <option value=\"admin\">admin</option>\n <option value=\"superadmin\">superadmin</option>\n </select>\n <button\n onClick={handleAdd}\n disabled={!newRole || addRole.isPending}\n className=\"btn-primary text-xs\"\n >\n {addRole.isPending ? '...' : 'Add'}\n </button>\n </div>\n {addRole.error && (\n <p className=\"text-[10px] text-status-error mt-1\">{(addRole.error as Error).message}</p>\n )}\n </div>\n )}\n </div>\n )}\n </div>\n );\n}\n","import { User, Bot } from 'lucide-react';\n\nexport type AccountTab = 'users' | 'service-accounts';\n\nexport function AccountTabToggle({ active, onChange }: { active: AccountTab; onChange: (t: AccountTab) => void }) {\n const btn = (tab: AccountTab, icon: React.ReactNode, label: string) => (\n <button\n onClick={() => onChange(tab)}\n className={`flex items-center gap-1.5 px-3 py-1.5 text-xs rounded-md transition-colors ${\n active === tab\n ? 'bg-accent/10 text-accent font-medium'\n : 'text-text-tertiary hover:text-text-secondary hover:bg-surface-hover'\n }`}\n >\n {icon}\n {label}\n </button>\n );\n\n return (\n <div className=\"flex gap-1 p-0.5 bg-surface-sunken rounded-lg w-fit\">\n {btn('users', <User className=\"w-3.5 h-3.5\" />, 'User Accounts')}\n {btn('service-accounts', <Bot className=\"w-3.5 h-3.5\" />, 'Service Accounts')}\n </div>\n );\n}\n","import { useState, useMemo } from 'react';\nimport { useSearchParams } from 'react-router-dom';\nimport { Pencil, Trash2 } from 'lucide-react';\nimport { useUsers, useDeleteUser } from '../../../api/users';\nimport { useFilterParams } from '../../../hooks/useFilterParams';\nimport { DataTable, type Column } from '../../../components/common/data/DataTable';\nimport { StickyPagination } from '../../../components/common/data/StickyPagination';\nimport { FilterBar, FilterSelect } from '../../../components/common/data/FilterBar';\nimport { TimestampCell } from '../../../components/common/display/TimestampCell';\nimport { ConfirmDeleteModal } from '../../../components/common/modal/ConfirmDeleteModal';\nimport { RowAction, RowActionGroup } from '../../../components/common/layout/RowActions';\nimport type { LTUserRecord } from '../../../api/types';\nimport { PageHeader } from '../../../components/common/layout/PageHeader';\nimport { RolePill } from '../../../components/common/display/RolePill';\nimport { CreateUserModal } from './CreateUserModal';\nimport { EditUserModal } from './EditUserModal';\nimport { BotsPage } from '../bots/BotsPage';\nimport { RolePanel } from './RolePanel';\nimport { AccountTabToggle, type AccountTab } from './AccountTabToggle';\n\nconst statusOptions = [\n { value: 'active', label: 'Active' },\n { value: 'inactive', label: 'Inactive' },\n { value: 'suspended', label: 'Suspended' },\n];\n\nconst statusDot: Record<string, string> = {\n active: 'bg-status-success',\n inactive: 'bg-text-tertiary',\n suspended: 'bg-status-error',\n};\n\nexport function UsersPage() {\n const [searchParams, setSearchParams] = useSearchParams();\n const tabParam = searchParams.get('tab');\n const activeTab: AccountTab = tabParam === 'service-accounts' ? 'service-accounts' : 'users';\n\n const handleTabChange = (tab: AccountTab) => {\n if (tab === 'users') {\n setSearchParams({});\n } else {\n setSearchParams({ tab });\n }\n };\n\n return (\n <div>\n <PageHeader\n title=\"Accounts\"\n actions={<AccountTabToggle active={activeTab} onChange={handleTabChange} />}\n />\n {activeTab === 'users' ? <UserAccountsPanel /> : <BotsPage embedded />}\n </div>\n );\n}\n\nfunction UserAccountsPanel() {\n const { filters, setFilter, pagination } = useFilterParams({\n filters: { status: '' },\n });\n const deleteUser = useDeleteUser();\n\n const [showCreate, setShowCreate] = useState(false);\n const [editingUser, setEditingUser] = useState<LTUserRecord | null>(null);\n const [selectedUser, setSelectedUser] = useState<LTUserRecord | null>(null);\n const [confirmDelete, setConfirmDelete] = useState<LTUserRecord | null>(null);\n\n const { data, isLoading } = useUsers({\n status: filters.status || undefined,\n limit: pagination.pageSize,\n offset: pagination.offset,\n });\n\n const total = data?.total ?? 0;\n const users = data?.users ?? [];\n\n const activeUser = useMemo(() => {\n if (!selectedUser) return null;\n return users.find((u) => u.id === selectedUser.id) ?? selectedUser;\n }, [users, selectedUser]);\n\n const columns: Column<LTUserRecord>[] = [\n {\n key: 'display_name',\n label: 'User',\n render: (row) => (\n <div className=\"flex items-center gap-2.5\">\n <span\n className={`w-2 h-2 rounded-full shrink-0 ${statusDot[row.status] ?? 'bg-status-pending'}`}\n title={row.status}\n />\n <div>\n <p className=\"text-sm text-text-primary\">\n {row.display_name || row.external_id}\n </p>\n {row.email && (\n <p className=\"text-xs text-text-tertiary\">{row.email}</p>\n )}\n </div>\n </div>\n ),\n },\n {\n key: 'roles',\n label: 'Roles',\n render: (row) => (\n <div className=\"flex gap-1 flex-wrap\">\n {(row.roles ?? []).map((r) => (\n <RolePill key={r.role} role={r.role} />\n ))}\n </div>\n ),\n },\n {\n key: 'created_at',\n label: 'Created',\n render: (row) => <TimestampCell date={row.created_at} />,\n className: 'w-44',\n },\n {\n key: 'actions',\n label: '',\n render: (row) => (\n <RowActionGroup>\n <RowAction\n icon={Pencil}\n title=\"Edit user\"\n onClick={() => setEditingUser(row)}\n />\n <RowAction\n icon={Trash2}\n title=\"Delete user\"\n onClick={() => setConfirmDelete(row)}\n colorClass=\"text-text-tertiary hover:text-status-error\"\n />\n </RowActionGroup>\n ),\n className: 'w-16 text-right',\n },\n ];\n\n const handleDelete = () => {\n if (!confirmDelete) return;\n deleteUser.mutate(confirmDelete.id, {\n onSuccess: () => setConfirmDelete(null),\n });\n };\n\n return (\n <div>\n <div className=\"flex justify-end mb-4\">\n <button onClick={() => setShowCreate(true)} className=\"btn-primary text-xs\">\n Add User\n </button>\n </div>\n\n <FilterBar>\n <FilterSelect\n label=\"Status\"\n value={filters.status}\n onChange={(v) => setFilter('status', v)}\n options={statusOptions}\n />\n </FilterBar>\n\n <div className=\"grid grid-cols-1 lg:grid-cols-[1fr_320px] gap-6\">\n {/* Left — users table */}\n <div className=\"overflow-x-clip\">\n <DataTable\n columns={columns}\n data={users}\n keyFn={(row) => row.id}\n isLoading={isLoading}\n emptyMessage=\"No users found\"\n onRowClick={(row) => setSelectedUser(row)}\n activeRowKey={activeUser?.id ?? null}\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 {/* Right — role management panel */}\n <RolePanel user={activeUser} />\n </div>\n\n <CreateUserModal open={showCreate} onClose={() => setShowCreate(false)} />\n\n <EditUserModal\n open={!!editingUser}\n onClose={() => setEditingUser(null)}\n user={editingUser}\n />\n\n <ConfirmDeleteModal\n open={!!confirmDelete}\n onClose={() => setConfirmDelete(null)}\n onConfirm={handleDelete}\n title=\"Delete User\"\n description={\n <>\n Delete{' '}\n <span className=\"font-medium text-text-primary\">\n {confirmDelete?.display_name || confirmDelete?.external_id}\n </span>\n ? This action cannot be undone.\n </>\n }\n isPending={deleteUser.isPending}\n error={deleteUser.error as Error | null}\n />\n </div>\n );\n}\n"],"names":["CreateUserModal","open","onClose","createUser","useCreateUser","form","setForm","useState","prevOpen","setPrevOpen","handleCreate","set","field","value","f","jsxDEV","Modal","e","EditUserModal","user","updateUser","useUpdateUser","prevUser","setPrevUser","handleSave","CreateBotModal","createBot","useCreateBot","EditBotModal","bot","updateBot","useUpdateBot","prevBot","setPrevBot","ApiKeysSection","botId","data","useBotApiKeys","createKey","useCreateBotApiKey","revokeKey","useRevokeBotApiKey","newKeyName","setNewKeyName","generatedKey","setGeneratedKey","copied","setCopied","confirmRevoke","setConfirmRevoke","keys","handleGenerate","result","handleCopy","handleRevoke","Check","Copy","k","Key","TimeAgo","Trash2","Plus","ConfirmDeleteModal","Fragment","RolesSection","allRolesData","useRoles","addRole","useAddBotRole","removeRole","useRemoveBotRole","newRole","setNewRole","newType","setNewType","allRoles","currentRoles","available","useMemo","assigned","r","handleAdd","handleRemove","role","RolePill","BotDetailPanel","statusDot","BotsPage","embedded","pagination","useFilterParams","deleteBot","useDeleteBot","showCreate","setShowCreate","editingBot","setEditingBot","selectedBot","setSelectedBot","confirmDelete","setConfirmDelete","isLoading","useBots","total","bots","activeBot","b","columns","row","TimestampCell","RowActionGroup","RowAction","Pencil","handleDelete","PageHeader","DataTable","StickyPagination","RolePanel","useAddUserRole","useRemoveUserRole","AccountTabToggle","active","onChange","btn","tab","icon","label","User","Bot","statusOptions","UsersPage","searchParams","setSearchParams","useSearchParams","activeTab","handleTabChange","UserAccountsPanel","filters","setFilter","deleteUser","useDeleteUser","editingUser","setEditingUser","selectedUser","setSelectedUser","useUsers","users","activeUser","u","FilterBar","FilterSelect","v"],"mappings":"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"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import{j as e}from"./index-DYyLF-Qb.js";import{a as d}from"./vendor-query-DLp59M9_.js";import{e as H,i as K,u as J,j as X,b as Z}from"./workflows-CfLc15Wr.js";import{D as ee}from"./DataTable-CM5ZcpPi.js";import{C as se}from"./ConfirmDeleteModal-CWFwJrSl.js";import{F as re,b as _}from"./FilterBar-CZTlrLQT.js";import{R as oe,a as I}from"./RowActions-lYaHGI-v.js";import{u as ae}from"./useFilterParams-BUyLHcx_.js";import{P as M}from"./PageHeader-NkOeBR05.js";import{R as te}from"./RolePill-C1dgC-fK.js";import{T as ie}from"./TaskQueuePill-BPj4ogVG.js";import{W as le}from"./WorkflowPill-DPKOcbf4.js";import{Z as ne,a6 as me,a7 as ce,U as O,X as U,C as $,x as B,d as T}from"./vendor-icons-BiIug1SK.js";import{c as Q,e as ue,f as de}from"./vendor-react-Co3Y8ikm.js";import{S as fe}from"./StepIndicator-CRM4ft28.js";import{u as pe}from"./roles-lv0shpjJ.js";import{B as he}from"./BotPicker-A6LtzyuO.js";import"./EmptyState-BBn78pmm.js";import"./Modal-kB_P7ZOr.js";import"./bots-Bi2_O1Ts.js";function be(s,o){const l=o.toLowerCase();return s.workflow_type.toLowerCase().includes(l)||(s.description??"").toLowerCase().includes(l)}function Je(){const s=Q(),{data:o,isLoading:l}=H(),u=K(),{filters:a,setFilter:n}=ae({filters:{search:"",queue:"",role:"",tier:""}}),[c,v]=d.useState(a.search),[p,y]=d.useState(null);d.useEffect(()=>{if(c===a.search)return;const r=setTimeout(()=>n("search",c),300);return()=>clearTimeout(r)},[c,n,a.search]);const i=o??[],f=d.useMemo(()=>[...new Set(i.map(r=>r.task_queue).filter(Boolean))].sort(),[i]),m=d.useMemo(()=>[...new Set(i.flatMap(r=>r.roles??[]))].sort(),[i]),t=d.useMemo(()=>{let r=i;return a.search&&(r=r.filter(h=>be(h,a.search))),a.queue&&(r=r.filter(h=>h.task_queue===a.queue)),a.role&&(r=r.filter(h=>(h.roles??[]).includes(a.role))),a.tier==="certified"&&(r=r.filter(h=>h.registered)),a.tier==="durable"&&(r=r.filter(h=>!h.registered)),r},[i,a]),C=[{key:"workflow_type",label:"Workflow",render:r=>e.jsxDEV("div",{className:"min-w-0",children:[e.jsxDEV(le,{type:r.workflow_type},void 0,!1,{fileName:"/app/dashboard/src/pages/workflows/registry/WorkflowConfigsPage.tsx",lineNumber:78,columnNumber:11},this),r.description&&e.jsxDEV("p",{className:"text-[10px] text-text-tertiary mt-0.5 truncate",children:r.description},void 0,!1,{fileName:"/app/dashboard/src/pages/workflows/registry/WorkflowConfigsPage.tsx",lineNumber:80,columnNumber:13},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/workflows/registry/WorkflowConfigsPage.tsx",lineNumber:77,columnNumber:9},this)},{key:"task_queue",label:"Queue",render:r=>r.task_queue?e.jsxDEV(ie,{queue:r.task_queue},void 0,!1,{fileName:"/app/dashboard/src/pages/workflows/registry/WorkflowConfigsPage.tsx",lineNumber:88,columnNumber:41},this):e.jsxDEV("span",{className:"text-xs text-text-tertiary",children:"—"},void 0,!1,{fileName:"/app/dashboard/src/pages/workflows/registry/WorkflowConfigsPage.tsx",lineNumber:88,columnNumber:84},this),className:"whitespace-nowrap"},{key:"registered",label:"Tier",render:r=>r.registered?e.jsxDEV("span",{className:"inline-flex items-center gap-1 px-1.5 py-0.5 rounded text-[10px] font-medium bg-accent/10 text-accent",children:[e.jsxDEV(ne,{className:"w-3 h-3"},void 0,!1,{fileName:"/app/dashboard/src/pages/workflows/registry/WorkflowConfigsPage.tsx",lineNumber:95,columnNumber:131},this),"Certified"]},void 0,!0,{fileName:"/app/dashboard/src/pages/workflows/registry/WorkflowConfigsPage.tsx",lineNumber:95,columnNumber:11},this):e.jsxDEV("span",{className:"inline-flex items-center px-1.5 py-0.5 rounded text-[10px] font-medium bg-surface-sunken text-text-tertiary",children:"Durable"},void 0,!1,{fileName:"/app/dashboard/src/pages/workflows/registry/WorkflowConfigsPage.tsx",lineNumber:96,columnNumber:11},this),className:"whitespace-nowrap"},{key:"roles",label:"Roles",render:r=>r.registered?e.jsxDEV("div",{className:"flex gap-1 flex-wrap",children:[(r.roles??[]).map(h=>e.jsxDEV(te,{role:h},h,!1,{fileName:"/app/dashboard/src/pages/workflows/registry/WorkflowConfigsPage.tsx",lineNumber:105,columnNumber:13},this)),(!r.roles||r.roles.length===0)&&e.jsxDEV("span",{className:"text-xs text-text-tertiary",children:"—"},void 0,!1,{fileName:"/app/dashboard/src/pages/workflows/registry/WorkflowConfigsPage.tsx",lineNumber:107,columnNumber:54},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/workflows/registry/WorkflowConfigsPage.tsx",lineNumber:103,columnNumber:9},this):e.jsxDEV("span",{className:"text-xs text-text-tertiary",children:"—"},void 0,!1,{fileName:"/app/dashboard/src/pages/workflows/registry/WorkflowConfigsPage.tsx",lineNumber:110,columnNumber:9},this)},{key:"actions",label:"",render:r=>e.jsxDEV(oe,{children:r.registered?e.jsxDEV(I,{icon:me,title:"De-certify workflow",onClick:()=>y(r.workflow_type),colorClass:"text-text-tertiary hover:text-status-warning"},void 0,!1,{fileName:"/app/dashboard/src/pages/workflows/registry/WorkflowConfigsPage.tsx",lineNumber:119,columnNumber:13},this):e.jsxDEV(I,{icon:ce,title:"Certify workflow",onClick:()=>s(`/workflows/registry/new?workflow_type=${encodeURIComponent(r.workflow_type)}&task_queue=${encodeURIComponent(r.task_queue??"")}`),colorClass:"text-text-tertiary hover:text-status-success"},void 0,!1,{fileName:"/app/dashboard/src/pages/workflows/registry/WorkflowConfigsPage.tsx",lineNumber:126,columnNumber:13},this)},void 0,!1,{fileName:"/app/dashboard/src/pages/workflows/registry/WorkflowConfigsPage.tsx",lineNumber:117,columnNumber:9},this),className:"w-16 text-right"}],E=()=>{p&&u.mutate(p,{onSuccess:()=>y(null)})},D=r=>{r.registered?s(`/workflows/registry/${encodeURIComponent(r.workflow_type)}`):s(`/workflows/registry/new?workflow_type=${encodeURIComponent(r.workflow_type)}&task_queue=${encodeURIComponent(r.task_queue??"")}`)};return e.jsxDEV("div",{children:[e.jsxDEV(M,{title:"Workflow Registry",actions:e.jsxDEV("button",{onClick:()=>s("/workflows/registry/new"),className:"btn-primary text-xs",children:"Register Workflow"},void 0,!1,{fileName:"/app/dashboard/src/pages/workflows/registry/WorkflowConfigsPage.tsx",lineNumber:159,columnNumber:11},this)},void 0,!1,{fileName:"/app/dashboard/src/pages/workflows/registry/WorkflowConfigsPage.tsx",lineNumber:156,columnNumber:7},this),e.jsxDEV(re,{children:[e.jsxDEV("input",{type:"text",placeholder:"Search workflow type...",value:c,onChange:r=>v(r.target.value),className:"input text-[11px] py-1 px-2 w-56"},void 0,!1,{fileName:"/app/dashboard/src/pages/workflows/registry/WorkflowConfigsPage.tsx",lineNumber:169,columnNumber:9},this),e.jsxDEV(_,{label:"Queue",value:a.queue,onChange:r=>n("queue",r),options:f.map(r=>({value:r,label:r}))},void 0,!1,{fileName:"/app/dashboard/src/pages/workflows/registry/WorkflowConfigsPage.tsx",lineNumber:176,columnNumber:9},this),e.jsxDEV(_,{label:"Tier",value:a.tier,onChange:r=>n("tier",r),options:[{value:"certified",label:"Certified"},{value:"durable",label:"Durable"}]},void 0,!1,{fileName:"/app/dashboard/src/pages/workflows/registry/WorkflowConfigsPage.tsx",lineNumber:182,columnNumber:9},this),e.jsxDEV(_,{label:"Role",value:a.role,onChange:r=>n("role",r),options:m.map(r=>({value:r,label:r}))},void 0,!1,{fileName:"/app/dashboard/src/pages/workflows/registry/WorkflowConfigsPage.tsx",lineNumber:191,columnNumber:9},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/workflows/registry/WorkflowConfigsPage.tsx",lineNumber:168,columnNumber:7},this),e.jsxDEV(ee,{columns:C,data:t,keyFn:r=>r.workflow_type,onRowClick:D,isLoading:l,emptyMessage:"No workflows found"},void 0,!1,{fileName:"/app/dashboard/src/pages/workflows/registry/WorkflowConfigsPage.tsx",lineNumber:199,columnNumber:7},this),e.jsxDEV(se,{open:!!p,onClose:()=>y(null),onConfirm:E,title:"De-certify Workflow",description:e.jsxDEV(e.Fragment,{children:["Remove certification from ",e.jsxDEV("span",{className:"font-mono font-medium text-text-primary",children:p},void 0,!1,{fileName:"/app/dashboard/src/pages/workflows/registry/WorkflowConfigsPage.tsx",lineNumber:214,columnNumber:50},this),"? This removes interceptor guarantees, escalation chains, and invocation role constraints. The workflow will continue running as a standard durable workflow."]},void 0,!0,{fileName:"/app/dashboard/src/pages/workflows/registry/WorkflowConfigsPage.tsx",lineNumber:214,columnNumber:22},this),isPending:u.isPending,error:u.error},void 0,!1,{fileName:"/app/dashboard/src/pages/workflows/registry/WorkflowConfigsPage.tsx",lineNumber:209,columnNumber:7},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/workflows/registry/WorkflowConfigsPage.tsx",lineNumber:155,columnNumber:5},this)}function j(s){return s.split(",").map(o=>o.trim()).filter(Boolean)}const z={workflow_type:"",description:"",task_queue:"",default_role:"reviewer",invocable:!1,roles:"",invocation_roles:"",consumes:"",envelope_schema:"",resolver_schema:"",cron_schedule:"",execute_as:""};function Ne(s){return{workflow_type:s.workflow_type,description:s.description??"",task_queue:s.task_queue??"",default_role:s.default_role,invocable:s.invocable,roles:(s.roles??[]).join(", "),invocation_roles:(s.invocation_roles??[]).join(", "),consumes:(s.consumes??[]).join(", "),envelope_schema:s.envelope_schema?JSON.stringify(s.envelope_schema,null,2):"",resolver_schema:s.resolver_schema?JSON.stringify(s.resolver_schema,null,2):"",cron_schedule:s.cron_schedule??"",execute_as:s.execute_as??""}}const L=["Identity","Escalation","Invocation & Schemas"];function V(s){if(!s.trim())return!0;try{return JSON.parse(s),!0}catch{return!1}}function F(s,o){return s===1?!!o.workflow_type.trim():s===3?V(o.envelope_schema)&&V(o.resolver_schema):!0}const k="block text-[10px] font-semibold uppercase tracking-widest text-text-tertiary mb-1",x="text-[10px] text-text-tertiary mt-2 leading-relaxed",A="input font-mono text-[11px] w-full leading-relaxed tabular-nums";function R({selected:s,onChange:o,single:l,placeholder:u}){const{data:a}=pe(),n=(a==null?void 0:a.roles)??[],[c,v]=d.useState(!1),p=d.useRef(null);d.useEffect(()=>{const m=t=>{p.current&&!p.current.contains(t.target)&&v(!1)};return document.addEventListener("mousedown",m),()=>document.removeEventListener("mousedown",m)},[]);const y=m=>{l?(o(s.includes(m)?[]:[m]),v(!1)):o(s.includes(m)?s.filter(t=>t!==m):[...s,m])},i=m=>{o(s.filter(t=>t!==m))},f=u??(l?"Select role...":"Add roles...");return e.jsxDEV("div",{ref:p,className:"relative",children:[e.jsxDEV("button",{type:"button",onClick:()=>v(!c),className:"flex flex-wrap items-center gap-1.5 w-full min-h-[34px] px-2 py-1.5 bg-surface-sunken border border-surface-border rounded-md text-left cursor-pointer hover:border-accent/40 transition-colors focus:ring-1 focus:ring-accent focus:outline-none",children:[s.length===0&&e.jsxDEV("span",{className:"text-xs text-text-tertiary",children:f},void 0,!1,{fileName:"/app/dashboard/src/components/common/form/RolePicker.tsx",lineNumber:55,columnNumber:11},this),s.map(m=>e.jsxDEV("span",{className:"inline-flex items-center gap-1 px-2 py-0.5 rounded-lg bg-accent/[0.08] text-text-secondary text-[11px]",children:[e.jsxDEV(O,{className:"w-2.5 h-2.5 shrink-0 text-accent/75"},void 0,!1,{fileName:"/app/dashboard/src/components/common/form/RolePicker.tsx",lineNumber:62,columnNumber:13},this),m,e.jsxDEV("span",{role:"button",onClick:t=>{t.stopPropagation(),i(m)},className:"ml-0.5 hover:text-status-error transition-colors",children:e.jsxDEV(U,{className:"w-2.5 h-2.5"},void 0,!1,{fileName:"/app/dashboard/src/components/common/form/RolePicker.tsx",lineNumber:69,columnNumber:15},this)},void 0,!1,{fileName:"/app/dashboard/src/components/common/form/RolePicker.tsx",lineNumber:64,columnNumber:13},this)]},m,!0,{fileName:"/app/dashboard/src/components/common/form/RolePicker.tsx",lineNumber:58,columnNumber:11},this)),e.jsxDEV($,{className:`w-3.5 h-3.5 ml-auto shrink-0 text-text-tertiary transition-transform ${c?"rotate-180":""}`},void 0,!1,{fileName:"/app/dashboard/src/components/common/form/RolePicker.tsx",lineNumber:73,columnNumber:9},this)]},void 0,!0,{fileName:"/app/dashboard/src/components/common/form/RolePicker.tsx",lineNumber:49,columnNumber:7},this),c&&e.jsxDEV("div",{className:"absolute z-20 mt-1 w-full bg-white border border-surface-border rounded-md shadow-lg max-h-48 overflow-y-auto",children:n.length===0?e.jsxDEV("p",{className:"px-3 py-2 text-xs text-text-tertiary",children:"No roles defined"},void 0,!1,{fileName:"/app/dashboard/src/components/common/form/RolePicker.tsx",lineNumber:80,columnNumber:13},this):n.map(m=>{const t=s.includes(m);return e.jsxDEV("button",{type:"button",onClick:()=>y(m),className:`flex items-center gap-2 w-full px-3 py-1.5 text-left text-xs transition-colors ${t?"bg-accent/[0.06] text-accent":"text-text-primary hover:bg-surface-sunken"}`,children:[e.jsxDEV(O,{className:"w-3 h-3 shrink-0 text-accent/60"},void 0,!1,{fileName:"/app/dashboard/src/components/common/form/RolePicker.tsx",lineNumber:95,columnNumber:19},this),e.jsxDEV("span",{className:"flex-1",children:m},void 0,!1,{fileName:"/app/dashboard/src/components/common/form/RolePicker.tsx",lineNumber:96,columnNumber:19},this),t&&e.jsxDEV(B,{className:"w-3 h-3 shrink-0"},void 0,!1,{fileName:"/app/dashboard/src/components/common/form/RolePicker.tsx",lineNumber:97,columnNumber:34},this)]},m,!0,{fileName:"/app/dashboard/src/components/common/form/RolePicker.tsx",lineNumber:85,columnNumber:17},this)})},void 0,!1,{fileName:"/app/dashboard/src/components/common/form/RolePicker.tsx",lineNumber:78,columnNumber:9},this)]},void 0,!0,{fileName:"/app/dashboard/src/components/common/form/RolePicker.tsx",lineNumber:47,columnNumber:5},this)}function ge({options:s,selected:o,onChange:l,placeholder:u}){const[a,n]=d.useState(!1),c=d.useRef(null);d.useEffect(()=>{const i=f=>{c.current&&!c.current.contains(f.target)&&n(!1)};return document.addEventListener("mousedown",i),()=>document.removeEventListener("mousedown",i)},[]);const v=i=>{l(o.includes(i)?o.filter(f=>f!==i):[...o,i])},p=i=>{l(o.filter(f=>f!==i))},y=u??"Add workflows...";return e.jsxDEV("div",{ref:c,className:"relative",children:[e.jsxDEV("button",{type:"button",onClick:()=>n(!a),className:"flex flex-wrap items-center gap-1.5 w-full min-h-[34px] px-2 py-1.5 bg-surface-sunken border border-surface-border rounded-md text-left cursor-pointer hover:border-accent/40 transition-colors focus:ring-1 focus:ring-accent focus:outline-none",children:[o.length===0&&e.jsxDEV("span",{className:"text-xs text-text-tertiary",children:y},void 0,!1,{fileName:"/app/dashboard/src/components/common/form/WorkflowPicker.tsx",lineNumber:45,columnNumber:11},this),o.map(i=>e.jsxDEV("span",{className:"inline-flex items-center gap-1 px-2 py-0.5 rounded-lg bg-accent/[0.08] text-text-secondary text-[11px] font-mono",children:[e.jsxDEV(T,{className:"w-2.5 h-2.5 shrink-0 text-accent/75"},void 0,!1,{fileName:"/app/dashboard/src/components/common/form/WorkflowPicker.tsx",lineNumber:52,columnNumber:13},this),i,e.jsxDEV("span",{role:"button",onClick:f=>{f.stopPropagation(),p(i)},className:"ml-0.5 hover:text-status-error transition-colors",children:e.jsxDEV(U,{className:"w-2.5 h-2.5"},void 0,!1,{fileName:"/app/dashboard/src/components/common/form/WorkflowPicker.tsx",lineNumber:59,columnNumber:15},this)},void 0,!1,{fileName:"/app/dashboard/src/components/common/form/WorkflowPicker.tsx",lineNumber:54,columnNumber:13},this)]},i,!0,{fileName:"/app/dashboard/src/components/common/form/WorkflowPicker.tsx",lineNumber:48,columnNumber:11},this)),e.jsxDEV($,{className:`w-3.5 h-3.5 ml-auto shrink-0 text-text-tertiary transition-transform ${a?"rotate-180":""}`},void 0,!1,{fileName:"/app/dashboard/src/components/common/form/WorkflowPicker.tsx",lineNumber:63,columnNumber:9},this)]},void 0,!0,{fileName:"/app/dashboard/src/components/common/form/WorkflowPicker.tsx",lineNumber:39,columnNumber:7},this),a&&e.jsxDEV("div",{className:"absolute z-20 mt-1 w-full bg-white border border-surface-border rounded-md shadow-lg max-h-48 overflow-y-auto",children:s.length===0?e.jsxDEV("p",{className:"px-3 py-2 text-xs text-text-tertiary",children:"No registered workflows"},void 0,!1,{fileName:"/app/dashboard/src/components/common/form/WorkflowPicker.tsx",lineNumber:69,columnNumber:13},this):s.map(i=>{const f=o.includes(i);return e.jsxDEV("button",{type:"button",onClick:()=>v(i),className:`flex items-center gap-2 w-full px-3 py-1.5 text-left text-xs font-mono transition-colors ${f?"bg-accent/[0.06] text-accent":"text-text-primary hover:bg-surface-sunken"}`,children:[e.jsxDEV(T,{className:"w-3 h-3 shrink-0 text-accent/60"},void 0,!1,{fileName:"/app/dashboard/src/components/common/form/WorkflowPicker.tsx",lineNumber:84,columnNumber:19},this),e.jsxDEV("span",{className:"flex-1",children:i},void 0,!1,{fileName:"/app/dashboard/src/components/common/form/WorkflowPicker.tsx",lineNumber:85,columnNumber:19},this),f&&e.jsxDEV(B,{className:"w-3 h-3 shrink-0"},void 0,!1,{fileName:"/app/dashboard/src/components/common/form/WorkflowPicker.tsx",lineNumber:86,columnNumber:34},this)]},i,!0,{fileName:"/app/dashboard/src/components/common/form/WorkflowPicker.tsx",lineNumber:74,columnNumber:17},this)})},void 0,!1,{fileName:"/app/dashboard/src/components/common/form/WorkflowPicker.tsx",lineNumber:67,columnNumber:9},this)]},void 0,!0,{fileName:"/app/dashboard/src/components/common/form/WorkflowPicker.tsx",lineNumber:38,columnNumber:5},this)}function W(s){return j(s)}function q(s){return s.join(", ")}function we({form:s,set:o,editing:l,durableTypes:u=[]}){const a=!l&&u.length>0;return e.jsxDEV("div",{className:"space-y-5",children:[e.jsxDEV("div",{children:[e.jsxDEV("label",{className:k,children:"Workflow Type"},void 0,!1,{fileName:"/app/dashboard/src/pages/workflows/registry/ConfigWizardSteps.tsx",lineNumber:37,columnNumber:9},this),a&&!s.workflow_type?e.jsxDEV("div",{className:"space-y-2",children:[e.jsxDEV("p",{className:"text-xs text-text-secondary",children:"Select a durable workflow to register as certified:"},void 0,!1,{fileName:"/app/dashboard/src/pages/workflows/registry/ConfigWizardSteps.tsx",lineNumber:40,columnNumber:13},this),e.jsxDEV("div",{className:"grid gap-1",children:u.map(n=>e.jsxDEV("button",{onClick:()=>o("workflow_type",n),className:"flex items-center gap-2 px-3 py-2 text-left text-xs font-mono rounded-md border border-surface-border hover:border-accent/50 hover:bg-accent/[0.04] transition-colors",children:n},n,!1,{fileName:"/app/dashboard/src/pages/workflows/registry/ConfigWizardSteps.tsx",lineNumber:45,columnNumber:17},this))},void 0,!1,{fileName:"/app/dashboard/src/pages/workflows/registry/ConfigWizardSteps.tsx",lineNumber:43,columnNumber:13},this),e.jsxDEV("div",{className:"flex items-center gap-2 pt-1",children:[e.jsxDEV("span",{className:"text-[10px] text-text-tertiary",children:"or"},void 0,!1,{fileName:"/app/dashboard/src/pages/workflows/registry/ConfigWizardSteps.tsx",lineNumber:55,columnNumber:15},this),e.jsxDEV("input",{type:"text",onChange:n=>o("workflow_type",n.target.value),placeholder:"Enter a workflow type manually",className:"input font-mono text-xs flex-1"},void 0,!1,{fileName:"/app/dashboard/src/pages/workflows/registry/ConfigWizardSteps.tsx",lineNumber:56,columnNumber:15},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/workflows/registry/ConfigWizardSteps.tsx",lineNumber:54,columnNumber:13},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/workflows/registry/ConfigWizardSteps.tsx",lineNumber:39,columnNumber:11},this):e.jsxDEV(e.Fragment,{children:[e.jsxDEV("input",{type:"text",value:s.workflow_type,onChange:n=>o("workflow_type",n.target.value),disabled:l,placeholder:"reviewContent",className:"input font-mono text-xs w-full"},void 0,!1,{fileName:"/app/dashboard/src/pages/workflows/registry/ConfigWizardSteps.tsx",lineNumber:66,columnNumber:13},this),!l&&s.workflow_type&&u.length>0&&e.jsxDEV("button",{onClick:()=>o("workflow_type",""),className:"text-[10px] text-accent hover:underline mt-1",children:"Choose from durable workflows"},void 0,!1,{fileName:"/app/dashboard/src/pages/workflows/registry/ConfigWizardSteps.tsx",lineNumber:75,columnNumber:15},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/workflows/registry/ConfigWizardSteps.tsx",lineNumber:65,columnNumber:11},this),e.jsxDEV("p",{className:x,children:"Registering a durable workflow makes it certified — the interceptor wraps every execution so failures escalate instead of throwing."},void 0,!1,{fileName:"/app/dashboard/src/pages/workflows/registry/ConfigWizardSteps.tsx",lineNumber:84,columnNumber:9},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/workflows/registry/ConfigWizardSteps.tsx",lineNumber:36,columnNumber:7},this),e.jsxDEV("div",{children:[e.jsxDEV("label",{className:k,children:"Description"},void 0,!1,{fileName:"/app/dashboard/src/pages/workflows/registry/ConfigWizardSteps.tsx",lineNumber:90,columnNumber:9},this),e.jsxDEV("input",{type:"text",value:s.description,onChange:n=>o("description",n.target.value),placeholder:"AI-powered content moderation with human escalation",className:"input text-xs w-full"},void 0,!1,{fileName:"/app/dashboard/src/pages/workflows/registry/ConfigWizardSteps.tsx",lineNumber:91,columnNumber:9},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/workflows/registry/ConfigWizardSteps.tsx",lineNumber:89,columnNumber:7},this),e.jsxDEV("div",{children:[e.jsxDEV("label",{className:k,children:"Task Queue"},void 0,!1,{fileName:"/app/dashboard/src/pages/workflows/registry/ConfigWizardSteps.tsx",lineNumber:101,columnNumber:9},this),e.jsxDEV("input",{type:"text",value:s.task_queue,onChange:n=>o("task_queue",n.target.value),placeholder:"lt-review",className:"input font-mono text-xs w-full"},void 0,!1,{fileName:"/app/dashboard/src/pages/workflows/registry/ConfigWizardSteps.tsx",lineNumber:102,columnNumber:9},this),e.jsxDEV("p",{className:x,children:"Durable task queue this workflow listens on"},void 0,!1,{fileName:"/app/dashboard/src/pages/workflows/registry/ConfigWizardSteps.tsx",lineNumber:109,columnNumber:9},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/workflows/registry/ConfigWizardSteps.tsx",lineNumber:100,columnNumber:7},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/workflows/registry/ConfigWizardSteps.tsx",lineNumber:35,columnNumber:5},this)}function xe({form:s,set:o}){const{data:l}=J(),u=(l??[]).map(a=>a.workflow_type).filter(a=>a!==s.workflow_type);return e.jsxDEV("div",{className:"space-y-5",children:[e.jsxDEV("p",{className:"text-xs text-text-secondary leading-relaxed",children:"Configure how escalations are routed and who can interact with this workflow."},void 0,!1,{fileName:"/app/dashboard/src/pages/workflows/registry/ConfigWizardSteps.tsx",lineNumber:127,columnNumber:7},this),e.jsxDEV("div",{children:[e.jsxDEV("label",{className:k,children:"Default Escalation Role"},void 0,!1,{fileName:"/app/dashboard/src/pages/workflows/registry/ConfigWizardSteps.tsx",lineNumber:132,columnNumber:9},this),e.jsxDEV(R,{selected:W(s.default_role),onChange:a=>o("default_role",a[0]??""),single:!0,placeholder:"Select escalation role..."},void 0,!1,{fileName:"/app/dashboard/src/pages/workflows/registry/ConfigWizardSteps.tsx",lineNumber:133,columnNumber:9},this),e.jsxDEV("p",{className:x,children:"When this workflow escalates, assign to users with this role"},void 0,!1,{fileName:"/app/dashboard/src/pages/workflows/registry/ConfigWizardSteps.tsx",lineNumber:139,columnNumber:9},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/workflows/registry/ConfigWizardSteps.tsx",lineNumber:131,columnNumber:7},this),e.jsxDEV("div",{children:[e.jsxDEV("label",{className:k,children:"Escalation Roles"},void 0,!1,{fileName:"/app/dashboard/src/pages/workflows/registry/ConfigWizardSteps.tsx",lineNumber:145,columnNumber:9},this),e.jsxDEV(R,{selected:W(s.roles),onChange:a=>o("roles",q(a)),placeholder:"Select who can resolve escalations..."},void 0,!1,{fileName:"/app/dashboard/src/pages/workflows/registry/ConfigWizardSteps.tsx",lineNumber:146,columnNumber:9},this),e.jsxDEV("p",{className:x,children:"Users with any of these roles can claim and resolve escalations from this workflow."},void 0,!1,{fileName:"/app/dashboard/src/pages/workflows/registry/ConfigWizardSteps.tsx",lineNumber:151,columnNumber:9},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/workflows/registry/ConfigWizardSteps.tsx",lineNumber:144,columnNumber:7},this),e.jsxDEV("div",{children:[e.jsxDEV("label",{className:k,children:"Consumes"},void 0,!1,{fileName:"/app/dashboard/src/pages/workflows/registry/ConfigWizardSteps.tsx",lineNumber:157,columnNumber:9},this),e.jsxDEV(ge,{options:u,selected:W(s.consumes),onChange:a=>o("consumes",q(a)),placeholder:"Select workflow dependencies..."},void 0,!1,{fileName:"/app/dashboard/src/pages/workflows/registry/ConfigWizardSteps.tsx",lineNumber:158,columnNumber:9},this),e.jsxDEV("p",{className:x,children:"Output from these upstream workflows will be injected into the input envelope for this workflow."},void 0,!1,{fileName:"/app/dashboard/src/pages/workflows/registry/ConfigWizardSteps.tsx",lineNumber:164,columnNumber:9},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/workflows/registry/ConfigWizardSteps.tsx",lineNumber:156,columnNumber:7},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/workflows/registry/ConfigWizardSteps.tsx",lineNumber:126,columnNumber:5},this)}function ke({form:s,set:o}){return e.jsxDEV("div",{className:"space-y-5",children:[e.jsxDEV("div",{className:"flex gap-6 pt-1",children:e.jsxDEV("label",{className:"flex items-center gap-2 cursor-pointer",children:[e.jsxDEV("input",{type:"checkbox",checked:s.invocable,onChange:l=>o("invocable",l.target.checked),className:"w-4 h-4 rounded border-border accent-accent"},void 0,!1,{fileName:"/app/dashboard/src/pages/workflows/registry/ConfigWizardSteps.tsx",lineNumber:180,columnNumber:11},this),e.jsxDEV("span",{className:"text-xs text-text-primary font-medium",children:"Invocable"},void 0,!1,{fileName:"/app/dashboard/src/pages/workflows/registry/ConfigWizardSteps.tsx",lineNumber:186,columnNumber:11},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/workflows/registry/ConfigWizardSteps.tsx",lineNumber:179,columnNumber:9},this)},void 0,!1,{fileName:"/app/dashboard/src/pages/workflows/registry/ConfigWizardSteps.tsx",lineNumber:178,columnNumber:7},this),e.jsxDEV("p",{className:x,children:"Allow this workflow to be started from the dashboard or API."},void 0,!1,{fileName:"/app/dashboard/src/pages/workflows/registry/ConfigWizardSteps.tsx",lineNumber:189,columnNumber:7},this),s.invocable&&e.jsxDEV(e.Fragment,{children:[e.jsxDEV("div",{children:[e.jsxDEV("label",{className:k,children:"Run As"},void 0,!1,{fileName:"/app/dashboard/src/pages/workflows/registry/ConfigWizardSteps.tsx",lineNumber:197,columnNumber:13},this),e.jsxDEV(he,{selected:s.execute_as,onChange:l=>o("execute_as",l)},void 0,!1,{fileName:"/app/dashboard/src/pages/workflows/registry/ConfigWizardSteps.tsx",lineNumber:198,columnNumber:13},this),e.jsxDEV("p",{className:x,children:"Choose a bot to execute this workflow under its identity and credentials. Default runs as the invoking user."},void 0,!1,{fileName:"/app/dashboard/src/pages/workflows/registry/ConfigWizardSteps.tsx",lineNumber:202,columnNumber:13},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/workflows/registry/ConfigWizardSteps.tsx",lineNumber:196,columnNumber:11},this),e.jsxDEV("div",{children:[e.jsxDEV("label",{className:k,children:"Invocation Roles"},void 0,!1,{fileName:"/app/dashboard/src/pages/workflows/registry/ConfigWizardSteps.tsx",lineNumber:210,columnNumber:13},this),e.jsxDEV(R,{selected:W(s.invocation_roles),onChange:l=>o("invocation_roles",q(l)),placeholder:"Select who can start this workflow..."},void 0,!1,{fileName:"/app/dashboard/src/pages/workflows/registry/ConfigWizardSteps.tsx",lineNumber:211,columnNumber:13},this),e.jsxDEV("p",{className:x,children:"Only users with these roles can start this workflow. Leave empty to allow all authenticated users."},void 0,!1,{fileName:"/app/dashboard/src/pages/workflows/registry/ConfigWizardSteps.tsx",lineNumber:216,columnNumber:13},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/workflows/registry/ConfigWizardSteps.tsx",lineNumber:209,columnNumber:11},this),e.jsxDEV("div",{children:[e.jsxDEV("label",{className:k,children:"Envelope Schema"},void 0,!1,{fileName:"/app/dashboard/src/pages/workflows/registry/ConfigWizardSteps.tsx",lineNumber:224,columnNumber:13},this),e.jsxDEV("textarea",{value:s.envelope_schema,onChange:l=>o("envelope_schema",l.target.value),placeholder:`{
|
|
2
|
+
"data": {
|
|
3
|
+
"contentId": "example-123",
|
|
4
|
+
"content": "Text to review"
|
|
5
|
+
},
|
|
6
|
+
"metadata": {
|
|
7
|
+
"source": "dashboard"
|
|
8
|
+
}
|
|
9
|
+
}`,className:A,rows:8,spellCheck:!1},void 0,!1,{fileName:"/app/dashboard/src/pages/workflows/registry/ConfigWizardSteps.tsx",lineNumber:225,columnNumber:13},this),e.jsxDEV("p",{className:x,children:["Pre-fills the JSON editor when invoking this workflow. Should include ",e.jsxDEV("span",{className:"font-mono",children:"data"},void 0,!1,{fileName:"/app/dashboard/src/pages/workflows/registry/ConfigWizardSteps.tsx",lineNumber:235,columnNumber:30},this)," (workflow input) and optional ",e.jsxDEV("span",{className:"font-mono",children:"metadata"},void 0,!1,{fileName:"/app/dashboard/src/pages/workflows/registry/ConfigWizardSteps.tsx",lineNumber:235,columnNumber:100},this)," (context)."]},void 0,!0,{fileName:"/app/dashboard/src/pages/workflows/registry/ConfigWizardSteps.tsx",lineNumber:233,columnNumber:13},this),s.envelope_schema.trim()&&!V(s.envelope_schema)&&e.jsxDEV("p",{className:"text-[10px] text-status-error mt-1",children:"Invalid JSON"},void 0,!1,{fileName:"/app/dashboard/src/pages/workflows/registry/ConfigWizardSteps.tsx",lineNumber:238,columnNumber:15},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/workflows/registry/ConfigWizardSteps.tsx",lineNumber:223,columnNumber:11},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/workflows/registry/ConfigWizardSteps.tsx",lineNumber:194,columnNumber:9},this),!s.invocable&&e.jsxDEV("div",{className:"py-4 px-4 bg-surface-sunken/50 rounded-md text-center",children:e.jsxDEV("p",{className:"text-xs text-text-tertiary",children:["Enable ",e.jsxDEV("span",{className:"font-medium text-text-secondary",children:"Invocable"},void 0,!1,{fileName:"/app/dashboard/src/pages/workflows/registry/ConfigWizardSteps.tsx",lineNumber:247,columnNumber:20},this)," above to configure who can start this workflow and set an input template."]},void 0,!0,{fileName:"/app/dashboard/src/pages/workflows/registry/ConfigWizardSteps.tsx",lineNumber:246,columnNumber:11},this)},void 0,!1,{fileName:"/app/dashboard/src/pages/workflows/registry/ConfigWizardSteps.tsx",lineNumber:245,columnNumber:9},this),e.jsxDEV("div",{children:[e.jsxDEV("label",{className:k,children:"Resolver Schema"},void 0,!1,{fileName:"/app/dashboard/src/pages/workflows/registry/ConfigWizardSteps.tsx",lineNumber:254,columnNumber:9},this),e.jsxDEV("textarea",{value:s.resolver_schema,onChange:l=>o("resolver_schema",l.target.value),placeholder:`{
|
|
10
|
+
"approved": true,
|
|
11
|
+
"analysis": {
|
|
12
|
+
"confidence": 0.95,
|
|
13
|
+
"flags": [],
|
|
14
|
+
"summary": "Content meets guidelines"
|
|
15
|
+
}
|
|
16
|
+
}`,className:A,rows:8,spellCheck:!1},void 0,!1,{fileName:"/app/dashboard/src/pages/workflows/registry/ConfigWizardSteps.tsx",lineNumber:255,columnNumber:9},this),e.jsxDEV("p",{className:x,children:"The shape of data a human or AI provides when resolving an escalation from this workflow. Pre-fills the JSON editor in the escalation resolution form."},void 0,!1,{fileName:"/app/dashboard/src/pages/workflows/registry/ConfigWizardSteps.tsx",lineNumber:263,columnNumber:9},this),s.resolver_schema.trim()&&!V(s.resolver_schema)&&e.jsxDEV("p",{className:"text-[10px] text-status-error mt-1",children:"Invalid JSON"},void 0,!1,{fileName:"/app/dashboard/src/pages/workflows/registry/ConfigWizardSteps.tsx",lineNumber:268,columnNumber:11},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/workflows/registry/ConfigWizardSteps.tsx",lineNumber:253,columnNumber:7},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/workflows/registry/ConfigWizardSteps.tsx",lineNumber:176,columnNumber:5},this)}function Me(){const{workflowType:s}=ue(),o=!s,l=Q(),{data:u,isLoading:a}=J(),n=X(),c=(u==null?void 0:u.find(b=>b.workflow_type===s))??null,v=new Set(["mcpQuery","mcpDeterministic","mcpQueryRouter","mcpTriage","mcpTriageRouter","mcpTriageDeterministic","insightQuery"]),{data:p}=Z({limit:500}),y=d.useMemo(()=>{const b=new Set((u??[]).map(N=>N.workflow_type));return[...new Set(((p==null?void 0:p.jobs)??[]).map(N=>N.entity))].filter(N=>!b.has(N)&&!v.has(N)).sort()},[u,p]),[i,f]=de(),m=d.useMemo(()=>{if(!o)return z;const b=i.get("workflow_type")??"",w=i.get("task_queue")??"";return!b&&!w?z:{...z,workflow_type:b,task_queue:w}},[o,i]),[t,C]=d.useState(m),[E,D]=d.useState(""),[r,h]=d.useState(!1),g=parseInt(i.get("step")||"1",10),S=d.useCallback(b=>{f(w=>{const N=new URLSearchParams(w);return N.set("step",String(b)),N},{replace:!1})},[f]);d.useEffect(()=>{if(!r){if(o){C(m),h(!0);return}c&&(C(Ne(c)),h(!0))}},[c,o,r,m]);const P=(b,w)=>C(N=>({...N,[b]:w})),Y=()=>{if(!t.workflow_type.trim())return;D("");let b=null,w=null;try{t.envelope_schema.trim()&&(b=JSON.parse(t.envelope_schema))}catch{D("Invalid JSON in Envelope Schema");return}try{t.resolver_schema.trim()&&(w=JSON.parse(t.resolver_schema))}catch{D("Invalid JSON in Resolver Schema");return}n.mutate({workflow_type:t.workflow_type.trim(),description:t.description.trim()||null,task_queue:t.task_queue.trim()||null,default_role:t.default_role.trim()||"reviewer",invocable:t.invocable,roles:j(t.roles),invocation_roles:j(t.invocation_roles),consumes:j(t.consumes),envelope_schema:b,resolver_schema:w,cron_schedule:t.cron_schedule.trim()||null,execute_as:t.execute_as.trim()||null},{onSuccess:()=>{l("/workflows/registry")}})};if(a)return e.jsxDEV("div",{className:"animate-pulse space-y-4",children:[e.jsxDEV("div",{className:"h-8 bg-surface-sunken rounded w-48"},void 0,!1,{fileName:"/app/dashboard/src/pages/workflows/registry/WorkflowConfigDetailPage.tsx",lineNumber:132,columnNumber:9},this),e.jsxDEV("div",{className:"h-60 bg-surface-sunken rounded"},void 0,!1,{fileName:"/app/dashboard/src/pages/workflows/registry/WorkflowConfigDetailPage.tsx",lineNumber:133,columnNumber:9},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/workflows/registry/WorkflowConfigDetailPage.tsx",lineNumber:131,columnNumber:7},this);if(!o&&!c)return e.jsxDEV("p",{className:"text-sm text-text-secondary",children:"Config not found."},void 0,!1,{fileName:"/app/dashboard/src/pages/workflows/registry/WorkflowConfigDetailPage.tsx",lineNumber:139,columnNumber:12},this);const G=g===L.length;return e.jsxDEV("div",{children:[e.jsxDEV(M,{title:o?"Register Workflow":(c==null?void 0:c.workflow_type)??""},void 0,!1,{fileName:"/app/dashboard/src/pages/workflows/registry/WorkflowConfigDetailPage.tsx",lineNumber:147,columnNumber:7},this),e.jsxDEV("div",{className:"max-w-3xl",children:[e.jsxDEV(fe,{steps:L,currentStep:g-1,onStepClick:b=>S(b+1)},void 0,!1,{fileName:"/app/dashboard/src/pages/workflows/registry/WorkflowConfigDetailPage.tsx",lineNumber:150,columnNumber:11},this),e.jsxDEV("div",{className:"min-h-[360px] py-2",children:[g===1&&e.jsxDEV(we,{form:t,set:P,editing:!!c,durableTypes:y},void 0,!1,{fileName:"/app/dashboard/src/pages/workflows/registry/WorkflowConfigDetailPage.tsx",lineNumber:153,columnNumber:28},this),g===2&&e.jsxDEV(xe,{form:t,set:P},void 0,!1,{fileName:"/app/dashboard/src/pages/workflows/registry/WorkflowConfigDetailPage.tsx",lineNumber:154,columnNumber:28},this),g===3&&e.jsxDEV(ke,{form:t,set:P},void 0,!1,{fileName:"/app/dashboard/src/pages/workflows/registry/WorkflowConfigDetailPage.tsx",lineNumber:155,columnNumber:28},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/workflows/registry/WorkflowConfigDetailPage.tsx",lineNumber:152,columnNumber:11},this),(E||n.error)&&e.jsxDEV("p",{className:"text-xs text-status-error mt-4",children:E||n.error.message},void 0,!1,{fileName:"/app/dashboard/src/pages/workflows/registry/WorkflowConfigDetailPage.tsx",lineNumber:159,columnNumber:13},this),e.jsxDEV("div",{className:"flex justify-between items-center pt-4 border-t border-surface-border mt-4",children:[e.jsxDEV("div",{children:g>1&&e.jsxDEV("button",{onClick:()=>S(g-1),className:"btn-secondary text-xs",children:"Back"},void 0,!1,{fileName:"/app/dashboard/src/pages/workflows/registry/WorkflowConfigDetailPage.tsx",lineNumber:168,columnNumber:17},this)},void 0,!1,{fileName:"/app/dashboard/src/pages/workflows/registry/WorkflowConfigDetailPage.tsx",lineNumber:166,columnNumber:13},this),e.jsxDEV("div",{className:"flex gap-3",children:[e.jsxDEV("button",{onClick:()=>l("/workflows/registry"),className:"btn-ghost text-xs",children:"Cancel"},void 0,!1,{fileName:"/app/dashboard/src/pages/workflows/registry/WorkflowConfigDetailPage.tsx",lineNumber:177,columnNumber:15},this),G?e.jsxDEV("button",{onClick:Y,disabled:!F(g,t)||n.isPending,className:"btn-primary text-xs",children:n.isPending?"Saving...":c?"Save":"Create"},void 0,!1,{fileName:"/app/dashboard/src/pages/workflows/registry/WorkflowConfigDetailPage.tsx",lineNumber:181,columnNumber:17},this):e.jsxDEV("button",{onClick:()=>S(g+1),disabled:!F(g,t),className:"btn-primary text-xs",children:"Next"},void 0,!1,{fileName:"/app/dashboard/src/pages/workflows/registry/WorkflowConfigDetailPage.tsx",lineNumber:189,columnNumber:17},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/workflows/registry/WorkflowConfigDetailPage.tsx",lineNumber:176,columnNumber:13},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/workflows/registry/WorkflowConfigDetailPage.tsx",lineNumber:165,columnNumber:11},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/workflows/registry/WorkflowConfigDetailPage.tsx",lineNumber:149,columnNumber:7},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/workflows/registry/WorkflowConfigDetailPage.tsx",lineNumber:146,columnNumber:5},this)}export{Me as WorkflowConfigDetailPage,Je as WorkflowConfigsPage};
|
|
17
|
+
//# sourceMappingURL=index-DOkHXmyf.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index-DOkHXmyf.js","sources":["../../src/pages/workflows/registry/WorkflowConfigsPage.tsx","../../src/lib/parse.ts","../../src/pages/workflows/registry/config-form-types.ts","../../src/components/common/form/RolePicker.tsx","../../src/components/common/form/WorkflowPicker.tsx","../../src/pages/workflows/registry/ConfigWizardSteps.tsx","../../src/pages/workflows/registry/WorkflowConfigDetailPage.tsx"],"sourcesContent":["import { useState, useEffect, useMemo } from 'react';\nimport { useNavigate } from 'react-router-dom';\nimport {\n useDiscoveredWorkflows,\n useDeleteWorkflowConfig,\n} from '../../../api/workflows';\nimport { ShieldCheck, ShieldPlus, ShieldOff } from 'lucide-react';\nimport { DataTable, type Column } from '../../../components/common/data/DataTable';\nimport { ConfirmDeleteModal } from '../../../components/common/modal/ConfirmDeleteModal';\nimport { FilterBar, FilterSelect } from '../../../components/common/data/FilterBar';\nimport { RowAction, RowActionGroup } from '../../../components/common/layout/RowActions';\nimport { useFilterParams } from '../../../hooks/useFilterParams';\nimport type { DiscoveredWorkflow } from '../../../api/types';\nimport { PageHeader } from '../../../components/common/layout/PageHeader';\nimport { RolePill } from '../../../components/common/display/RolePill';\nimport { TaskQueuePill } from '../../../components/common/display/TaskQueuePill';\nimport { WorkflowPill } from '../../../components/common/display/WorkflowPill';\n\n// ── Helpers ───────────────────────────────────────────────────────────────────\n\nfunction matchesSearch(wf: DiscoveredWorkflow, search: string): boolean {\n const q = search.toLowerCase();\n return (\n wf.workflow_type.toLowerCase().includes(q) ||\n (wf.description ?? '').toLowerCase().includes(q)\n );\n}\n\n// ── Page ──────────────────────────────────────────────────────────────────────\n\nexport function WorkflowConfigsPage() {\n const navigate = useNavigate();\n const { data, isLoading } = useDiscoveredWorkflows();\n const deleteConfig = useDeleteWorkflowConfig();\n const { filters, setFilter } = useFilterParams({\n filters: { search: '', queue: '', role: '', tier: '' },\n });\n\n const [searchInput, setSearchInput] = useState(filters.search);\n const [confirmDelete, setConfirmDelete] = useState<string | null>(null);\n\n // Debounce search input\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 allWorkflows = data ?? [];\n\n // Derive facet options from data\n const queues = useMemo(\n () => [...new Set(allWorkflows.map((w) => w.task_queue).filter(Boolean) as string[])].sort(),\n [allWorkflows],\n );\n const roles = useMemo(\n () => [...new Set(allWorkflows.flatMap((w) => w.roles ?? []))].sort(),\n [allWorkflows],\n );\n\n // Apply client-side filters\n const workflows = useMemo(() => {\n let result = allWorkflows;\n if (filters.search) result = result.filter((w) => matchesSearch(w, filters.search));\n if (filters.queue) result = result.filter((w) => w.task_queue === filters.queue);\n if (filters.role) result = result.filter((w) => (w.roles ?? []).includes(filters.role));\n if (filters.tier === 'certified') result = result.filter((w) => w.registered);\n if (filters.tier === 'durable') result = result.filter((w) => !w.registered);\n return result;\n }, [allWorkflows, filters]);\n\n const columns: Column<DiscoveredWorkflow>[] = [\n {\n key: 'workflow_type',\n label: 'Workflow',\n render: (row) => (\n <div className=\"min-w-0\">\n <WorkflowPill type={row.workflow_type} />\n {row.description && (\n <p className=\"text-[10px] text-text-tertiary mt-0.5 truncate\">{row.description}</p>\n )}\n </div>\n ),\n },\n {\n key: 'task_queue',\n label: 'Queue',\n render: (row) => row.task_queue ? <TaskQueuePill queue={row.task_queue} /> : <span className=\"text-xs text-text-tertiary\">—</span>,\n className: 'whitespace-nowrap',\n },\n {\n key: 'registered',\n label: 'Tier',\n render: (row) => row.registered\n ? <span className=\"inline-flex items-center gap-1 px-1.5 py-0.5 rounded text-[10px] font-medium bg-accent/10 text-accent\"><ShieldCheck className=\"w-3 h-3\" />Certified</span>\n : <span className=\"inline-flex items-center px-1.5 py-0.5 rounded text-[10px] font-medium bg-surface-sunken text-text-tertiary\">Durable</span>,\n className: 'whitespace-nowrap',\n },\n {\n key: 'roles',\n label: 'Roles',\n render: (row) => row.registered ? (\n <div className=\"flex gap-1 flex-wrap\">\n {(row.roles ?? []).map((r) => (\n <RolePill key={r} role={r} />\n ))}\n {(!row.roles || row.roles.length === 0) && <span className=\"text-xs text-text-tertiary\">—</span>}\n </div>\n ) : (\n <span className=\"text-xs text-text-tertiary\">—</span>\n ),\n },\n {\n key: 'actions',\n label: '',\n render: (row) => (\n <RowActionGroup>\n {row.registered ? (\n <RowAction\n icon={ShieldOff}\n title=\"De-certify workflow\"\n onClick={() => setConfirmDelete(row.workflow_type)}\n colorClass=\"text-text-tertiary hover:text-status-warning\"\n />\n ) : (\n <RowAction\n icon={ShieldPlus}\n title=\"Certify workflow\"\n onClick={() => navigate(`/workflows/registry/new?workflow_type=${encodeURIComponent(row.workflow_type)}&task_queue=${encodeURIComponent(row.task_queue ?? '')}`)}\n colorClass=\"text-text-tertiary hover:text-status-success\"\n />\n )}\n </RowActionGroup>\n ),\n className: 'w-16 text-right',\n },\n ];\n\n const handleDelete = () => {\n if (!confirmDelete) return;\n deleteConfig.mutate(confirmDelete, {\n onSuccess: () => setConfirmDelete(null),\n });\n };\n\n const handleRowClick = (row: DiscoveredWorkflow) => {\n if (row.registered) {\n navigate(`/workflows/registry/${encodeURIComponent(row.workflow_type)}`);\n } else {\n navigate(`/workflows/registry/new?workflow_type=${encodeURIComponent(row.workflow_type)}&task_queue=${encodeURIComponent(row.task_queue ?? '')}`);\n }\n };\n\n return (\n <div>\n <PageHeader\n title=\"Workflow Registry\"\n actions={\n <button\n onClick={() => navigate('/workflows/registry/new')}\n className=\"btn-primary text-xs\"\n >\n Register Workflow\n </button>\n }\n />\n\n <FilterBar>\n <input\n type=\"text\"\n placeholder=\"Search workflow type...\"\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=\"Queue\"\n value={filters.queue}\n onChange={(v) => setFilter('queue', v)}\n options={queues.map((q) => ({ value: q, label: q }))}\n />\n <FilterSelect\n label=\"Tier\"\n value={filters.tier}\n onChange={(v) => setFilter('tier', v)}\n options={[\n { value: 'certified', label: 'Certified' },\n { value: 'durable', label: 'Durable' },\n ]}\n />\n <FilterSelect\n label=\"Role\"\n value={filters.role}\n onChange={(v) => setFilter('role', v)}\n options={roles.map((r) => ({ value: r, label: r }))}\n />\n </FilterBar>\n\n <DataTable\n columns={columns}\n data={workflows}\n keyFn={(row) => row.workflow_type}\n onRowClick={handleRowClick}\n isLoading={isLoading}\n emptyMessage=\"No workflows found\"\n />\n\n {/* Delete confirmation modal */}\n <ConfirmDeleteModal\n open={!!confirmDelete}\n onClose={() => setConfirmDelete(null)}\n onConfirm={handleDelete}\n title=\"De-certify Workflow\"\n description={<>Remove certification from <span className=\"font-mono font-medium text-text-primary\">{confirmDelete}</span>? This removes interceptor guarantees, escalation chains, and invocation role constraints. The workflow will continue running as a standard durable workflow.</>}\n isPending={deleteConfig.isPending}\n error={deleteConfig.error as Error | null}\n />\n </div>\n );\n}\n","export function splitCsv(s: string): string[] {\n return s\n .split(',')\n .map((v) => v.trim())\n .filter(Boolean);\n}\n\nexport function safeParseJson<T = unknown>(\n json: string,\n): { ok: true; data: T } | { ok: false; error: string } {\n try {\n return { ok: true, data: JSON.parse(json) as T };\n } catch (e: unknown) {\n const message = e instanceof Error ? e.message : 'Invalid JSON';\n return { ok: false, error: message };\n }\n}\n","import type { LTWorkflowConfig } from '../../../api/types';\n\nexport interface ConfigFormState {\n workflow_type: string;\n description: string;\n task_queue: string;\n default_role: string;\n invocable: boolean;\n roles: string;\n invocation_roles: string;\n consumes: string;\n envelope_schema: string;\n resolver_schema: string;\n cron_schedule: string;\n execute_as: string;\n}\n\nexport const EMPTY_FORM: ConfigFormState = {\n workflow_type: '',\n description: '',\n task_queue: '',\n default_role: 'reviewer',\n invocable: false,\n roles: '',\n invocation_roles: '',\n consumes: '',\n envelope_schema: '',\n resolver_schema: '',\n cron_schedule: '',\n execute_as: '',\n};\n\nexport function configToForm(c: LTWorkflowConfig): ConfigFormState {\n return {\n workflow_type: c.workflow_type,\n description: c.description ?? '',\n task_queue: c.task_queue ?? '',\n default_role: c.default_role,\n invocable: c.invocable,\n roles: (c.roles ?? []).join(', '),\n invocation_roles: (c.invocation_roles ?? []).join(', '),\n consumes: (c.consumes ?? []).join(', '),\n envelope_schema: c.envelope_schema ? JSON.stringify(c.envelope_schema, null, 2) : '',\n resolver_schema: c.resolver_schema ? JSON.stringify(c.resolver_schema, null, 2) : '',\n cron_schedule: c.cron_schedule ?? '',\n execute_as: c.execute_as ?? '',\n };\n}\n\nexport const STEP_LABELS = ['Identity', 'Escalation', 'Invocation & Schemas'];\n\nexport function jsonValid(v: string): boolean {\n if (!v.trim()) return true;\n try { JSON.parse(v); return true; } catch { return false; }\n}\n\nexport function isStepValid(step: number, form: ConfigFormState): boolean {\n if (step === 1) return !!form.workflow_type.trim();\n if (step === 3) return jsonValid(form.envelope_schema) && jsonValid(form.resolver_schema);\n return true;\n}\n\nexport const labelCls = 'block text-[10px] font-semibold uppercase tracking-widest text-text-tertiary mb-1';\nexport const hintCls = 'text-[10px] text-text-tertiary mt-2 leading-relaxed';\nexport const jsonCls = 'input font-mono text-[11px] w-full leading-relaxed tabular-nums';\n\nexport const DEFAULT_ENVELOPE = '{\\n \"data\": {},\\n \"metadata\": {}\\n}';\n","import { useState, useRef, useEffect } from 'react';\nimport { User, X, ChevronDown, Check } from 'lucide-react';\nimport { useRoles } from '../../../api/roles';\n\ninterface RolePickerProps {\n selected: string[];\n onChange: (roles: string[]) => void;\n /** Only allow one selection */\n single?: boolean;\n placeholder?: string;\n}\n\nexport function RolePicker({ selected, onChange, single, placeholder }: RolePickerProps) {\n const { data } = useRoles();\n const allRoles = data?.roles ?? [];\n const [open, setOpen] = useState(false);\n const ref = useRef<HTMLDivElement>(null);\n\n useEffect(() => {\n const handler = (e: MouseEvent) => {\n if (ref.current && !ref.current.contains(e.target as Node)) setOpen(false);\n };\n document.addEventListener('mousedown', handler);\n return () => document.removeEventListener('mousedown', handler);\n }, []);\n\n const toggle = (role: string) => {\n if (single) {\n onChange(selected.includes(role) ? [] : [role]);\n setOpen(false);\n } else {\n onChange(\n selected.includes(role)\n ? selected.filter((r) => r !== role)\n : [...selected, role],\n );\n }\n };\n\n const remove = (role: string) => {\n onChange(selected.filter((r) => r !== role));\n };\n\n const placeholderText = placeholder ?? (single ? 'Select role...' : 'Add roles...');\n\n return (\n <div ref={ref} className=\"relative\">\n {/* Selected pills + trigger */}\n <button\n type=\"button\"\n onClick={() => setOpen(!open)}\n className=\"flex flex-wrap items-center gap-1.5 w-full min-h-[34px] px-2 py-1.5 bg-surface-sunken border border-surface-border rounded-md text-left cursor-pointer hover:border-accent/40 transition-colors focus:ring-1 focus:ring-accent focus:outline-none\"\n >\n {selected.length === 0 && (\n <span className=\"text-xs text-text-tertiary\">{placeholderText}</span>\n )}\n {selected.map((role) => (\n <span\n key={role}\n className=\"inline-flex items-center gap-1 px-2 py-0.5 rounded-lg bg-accent/[0.08] text-text-secondary text-[11px]\"\n >\n <User className=\"w-2.5 h-2.5 shrink-0 text-accent/75\" />\n {role}\n <span\n role=\"button\"\n onClick={(e) => { e.stopPropagation(); remove(role); }}\n className=\"ml-0.5 hover:text-status-error transition-colors\"\n >\n <X className=\"w-2.5 h-2.5\" />\n </span>\n </span>\n ))}\n <ChevronDown className={`w-3.5 h-3.5 ml-auto shrink-0 text-text-tertiary transition-transform ${open ? 'rotate-180' : ''}`} />\n </button>\n\n {/* Dropdown */}\n {open && (\n <div className=\"absolute z-20 mt-1 w-full bg-white border border-surface-border rounded-md shadow-lg max-h-48 overflow-y-auto\">\n {allRoles.length === 0 ? (\n <p className=\"px-3 py-2 text-xs text-text-tertiary\">No roles defined</p>\n ) : (\n allRoles.map((role) => {\n const isSelected = selected.includes(role);\n return (\n <button\n key={role}\n type=\"button\"\n onClick={() => toggle(role)}\n className={`flex items-center gap-2 w-full px-3 py-1.5 text-left text-xs transition-colors ${\n isSelected\n ? 'bg-accent/[0.06] text-accent'\n : 'text-text-primary hover:bg-surface-sunken'\n }`}\n >\n <User className=\"w-3 h-3 shrink-0 text-accent/60\" />\n <span className=\"flex-1\">{role}</span>\n {isSelected && <Check className=\"w-3 h-3 shrink-0\" />}\n </button>\n );\n })\n )}\n </div>\n )}\n </div>\n );\n}\n","import { useState, useRef, useEffect } from 'react';\nimport { Workflow, X, ChevronDown, Check } from 'lucide-react';\n\ninterface WorkflowPickerProps {\n options: string[];\n selected: string[];\n onChange: (workflows: string[]) => void;\n placeholder?: string;\n}\n\nexport function WorkflowPicker({ options, selected, onChange, placeholder }: WorkflowPickerProps) {\n const [open, setOpen] = useState(false);\n const ref = useRef<HTMLDivElement>(null);\n\n useEffect(() => {\n const handler = (e: MouseEvent) => {\n if (ref.current && !ref.current.contains(e.target as Node)) setOpen(false);\n };\n document.addEventListener('mousedown', handler);\n return () => document.removeEventListener('mousedown', handler);\n }, []);\n\n const toggle = (wfType: string) => {\n onChange(\n selected.includes(wfType)\n ? selected.filter((t) => t !== wfType)\n : [...selected, wfType],\n );\n };\n\n const remove = (wfType: string) => {\n onChange(selected.filter((t) => t !== wfType));\n };\n\n const placeholderText = placeholder ?? 'Add workflows...';\n\n return (\n <div ref={ref} className=\"relative\">\n <button\n type=\"button\"\n onClick={() => setOpen(!open)}\n className=\"flex flex-wrap items-center gap-1.5 w-full min-h-[34px] px-2 py-1.5 bg-surface-sunken border border-surface-border rounded-md text-left cursor-pointer hover:border-accent/40 transition-colors focus:ring-1 focus:ring-accent focus:outline-none\"\n >\n {selected.length === 0 && (\n <span className=\"text-xs text-text-tertiary\">{placeholderText}</span>\n )}\n {selected.map((wfType) => (\n <span\n key={wfType}\n className=\"inline-flex items-center gap-1 px-2 py-0.5 rounded-lg bg-accent/[0.08] text-text-secondary text-[11px] font-mono\"\n >\n <Workflow className=\"w-2.5 h-2.5 shrink-0 text-accent/75\" />\n {wfType}\n <span\n role=\"button\"\n onClick={(e) => { e.stopPropagation(); remove(wfType); }}\n className=\"ml-0.5 hover:text-status-error transition-colors\"\n >\n <X className=\"w-2.5 h-2.5\" />\n </span>\n </span>\n ))}\n <ChevronDown className={`w-3.5 h-3.5 ml-auto shrink-0 text-text-tertiary transition-transform ${open ? 'rotate-180' : ''}`} />\n </button>\n\n {open && (\n <div className=\"absolute z-20 mt-1 w-full bg-white border border-surface-border rounded-md shadow-lg max-h-48 overflow-y-auto\">\n {options.length === 0 ? (\n <p className=\"px-3 py-2 text-xs text-text-tertiary\">No registered workflows</p>\n ) : (\n options.map((wfType) => {\n const isSelected = selected.includes(wfType);\n return (\n <button\n key={wfType}\n type=\"button\"\n onClick={() => toggle(wfType)}\n className={`flex items-center gap-2 w-full px-3 py-1.5 text-left text-xs font-mono transition-colors ${\n isSelected\n ? 'bg-accent/[0.06] text-accent'\n : 'text-text-primary hover:bg-surface-sunken'\n }`}\n >\n <Workflow className=\"w-3 h-3 shrink-0 text-accent/60\" />\n <span className=\"flex-1\">{wfType}</span>\n {isSelected && <Check className=\"w-3 h-3 shrink-0\" />}\n </button>\n );\n })\n )}\n </div>\n )}\n </div>\n );\n}\n","import { labelCls, hintCls, jsonCls, jsonValid } from './config-form-types';\nimport type { ConfigFormState } from './config-form-types';\nimport { RolePicker } from '../../../components/common/form/RolePicker';\nimport { WorkflowPicker } from '../../../components/common/form/WorkflowPicker';\nimport { BotPicker } from '../../../components/common/form/BotPicker';\nimport { useWorkflowConfigs } from '../../../api/workflows';\nimport { splitCsv } from '../../../lib/parse';\n\ninterface StepProps {\n form: ConfigFormState;\n set: (field: keyof ConfigFormState, value: string | boolean) => void;\n}\n\ninterface BasicsStepProps extends StepProps {\n editing: boolean;\n durableTypes?: string[];\n}\n\n// ── Helpers ────────────────────────────────────────────────────────────────────\n\nfunction csvToArray(csv: string): string[] {\n return splitCsv(csv);\n}\n\nfunction arrayToCsv(arr: string[]): string {\n return arr.join(', ');\n}\n\n// ── Step 1: Identity ────────────────────────────────────────────────────────\n\nexport function BasicsStep({ form, set, editing, durableTypes = [] }: BasicsStepProps) {\n const showPickList = !editing && durableTypes.length > 0;\n\n return (\n <div className=\"space-y-5\">\n <div>\n <label className={labelCls}>Workflow Type</label>\n {showPickList && !form.workflow_type ? (\n <div className=\"space-y-2\">\n <p className=\"text-xs text-text-secondary\">\n Select a durable workflow to register as certified:\n </p>\n <div className=\"grid gap-1\">\n {durableTypes.map((type) => (\n <button\n key={type}\n onClick={() => set('workflow_type', type)}\n className=\"flex items-center gap-2 px-3 py-2 text-left text-xs font-mono rounded-md border border-surface-border hover:border-accent/50 hover:bg-accent/[0.04] transition-colors\"\n >\n {type}\n </button>\n ))}\n </div>\n <div className=\"flex items-center gap-2 pt-1\">\n <span className=\"text-[10px] text-text-tertiary\">or</span>\n <input\n type=\"text\"\n onChange={(e) => set('workflow_type', e.target.value)}\n placeholder=\"Enter a workflow type manually\"\n className=\"input font-mono text-xs flex-1\"\n />\n </div>\n </div>\n ) : (\n <>\n <input\n type=\"text\"\n value={form.workflow_type}\n onChange={(e) => set('workflow_type', e.target.value)}\n disabled={editing}\n placeholder=\"reviewContent\"\n className=\"input font-mono text-xs w-full\"\n />\n {!editing && form.workflow_type && durableTypes.length > 0 && (\n <button\n onClick={() => set('workflow_type', '')}\n className=\"text-[10px] text-accent hover:underline mt-1\"\n >\n Choose from durable workflows\n </button>\n )}\n </>\n )}\n <p className={hintCls}>\n Registering a durable workflow makes it certified — the interceptor wraps every execution so failures escalate instead of throwing.\n </p>\n </div>\n\n <div>\n <label className={labelCls}>Description</label>\n <input\n type=\"text\"\n value={form.description}\n onChange={(e) => set('description', e.target.value)}\n placeholder=\"AI-powered content moderation with human escalation\"\n className=\"input text-xs w-full\"\n />\n </div>\n\n <div>\n <label className={labelCls}>Task Queue</label>\n <input\n type=\"text\"\n value={form.task_queue}\n onChange={(e) => set('task_queue', e.target.value)}\n placeholder=\"lt-review\"\n className=\"input font-mono text-xs w-full\"\n />\n <p className={hintCls}>\n Durable task queue this workflow listens on\n </p>\n </div>\n </div>\n );\n}\n\n// ── Step 2: Escalation ──────────────────────────────────────────────────────\n\nexport function AccessStep({ form, set }: StepProps) {\n const { data: configs } = useWorkflowConfigs();\n const consumesOptions = (configs ?? [])\n .map((c) => c.workflow_type)\n .filter((t) => t !== form.workflow_type);\n\n return (\n <div className=\"space-y-5\">\n <p className=\"text-xs text-text-secondary leading-relaxed\">\n Configure how escalations are routed and who can interact with this workflow.\n </p>\n\n <div>\n <label className={labelCls}>Default Escalation Role</label>\n <RolePicker\n selected={csvToArray(form.default_role)}\n onChange={(roles) => set('default_role', roles[0] ?? '')}\n single\n placeholder=\"Select escalation role...\"\n />\n <p className={hintCls}>\n When this workflow escalates, assign to users with this role\n </p>\n </div>\n\n <div>\n <label className={labelCls}>Escalation Roles</label>\n <RolePicker\n selected={csvToArray(form.roles)}\n onChange={(roles) => set('roles', arrayToCsv(roles))}\n placeholder=\"Select who can resolve escalations...\"\n />\n <p className={hintCls}>\n Users with any of these roles can claim and resolve escalations from this workflow.\n </p>\n </div>\n\n <div>\n <label className={labelCls}>Consumes</label>\n <WorkflowPicker\n options={consumesOptions}\n selected={csvToArray(form.consumes)}\n onChange={(workflows) => set('consumes', arrayToCsv(workflows))}\n placeholder=\"Select workflow dependencies...\"\n />\n <p className={hintCls}>\n Output from these upstream workflows will be injected into the input envelope for this workflow.\n </p>\n </div>\n </div>\n );\n}\n\n// ── Step 3: Invocation & Schemas ────────────────────────────────────────────\n\nexport function SchemasStep({ form, set }: StepProps) {\n return (\n <div className=\"space-y-5\">\n {/* Invocable toggle */}\n <div className=\"flex gap-6 pt-1\">\n <label className=\"flex items-center gap-2 cursor-pointer\">\n <input\n type=\"checkbox\"\n checked={form.invocable}\n onChange={(e) => set('invocable', e.target.checked)}\n className=\"w-4 h-4 rounded border-border accent-accent\"\n />\n <span className=\"text-xs text-text-primary font-medium\">Invocable</span>\n </label>\n </div>\n <p className={hintCls}>\n Allow this workflow to be started from the dashboard or API.\n </p>\n\n {form.invocable && (\n <>\n {/* Run As */}\n <div>\n <label className={labelCls}>Run As</label>\n <BotPicker\n selected={form.execute_as}\n onChange={(botId) => set('execute_as', botId)}\n />\n <p className={hintCls}>\n Choose a bot to execute this workflow under its identity and credentials.\n Default runs as the invoking user.\n </p>\n </div>\n\n {/* Invocation roles */}\n <div>\n <label className={labelCls}>Invocation Roles</label>\n <RolePicker\n selected={csvToArray(form.invocation_roles)}\n onChange={(roles) => set('invocation_roles', arrayToCsv(roles))}\n placeholder=\"Select who can start this workflow...\"\n />\n <p className={hintCls}>\n Only users with these roles can start this workflow.\n Leave empty to allow all authenticated users.\n </p>\n </div>\n\n {/* Envelope schema */}\n <div>\n <label className={labelCls}>Envelope Schema</label>\n <textarea\n value={form.envelope_schema}\n onChange={(e) => set('envelope_schema', e.target.value)}\n placeholder={`{\\n \"data\": {\\n \"contentId\": \"example-123\",\\n \"content\": \"Text to review\"\\n },\\n \"metadata\": {\\n \"source\": \"dashboard\"\\n }\\n}`}\n className={jsonCls}\n rows={8}\n spellCheck={false}\n />\n <p className={hintCls}>\n Pre-fills the JSON editor when invoking this workflow.\n Should include <span className=\"font-mono\">data</span> (workflow input) and optional <span className=\"font-mono\">metadata</span> (context).\n </p>\n {form.envelope_schema.trim() && !jsonValid(form.envelope_schema) && (\n <p className=\"text-[10px] text-status-error mt-1\">Invalid JSON</p>\n )}\n </div>\n </>\n )}\n\n {!form.invocable && (\n <div className=\"py-4 px-4 bg-surface-sunken/50 rounded-md text-center\">\n <p className=\"text-xs text-text-tertiary\">\n Enable <span className=\"font-medium text-text-secondary\">Invocable</span> above to configure who can start this workflow and set an input template.\n </p>\n </div>\n )}\n\n {/* Resolver schema — always available */}\n <div>\n <label className={labelCls}>Resolver Schema</label>\n <textarea\n value={form.resolver_schema}\n onChange={(e) => set('resolver_schema', e.target.value)}\n placeholder={`{\\n \"approved\": true,\\n \"analysis\": {\\n \"confidence\": 0.95,\\n \"flags\": [],\\n \"summary\": \"Content meets guidelines\"\\n }\\n}`}\n className={jsonCls}\n rows={8}\n spellCheck={false}\n />\n <p className={hintCls}>\n The shape of data a human or AI provides when resolving an escalation from this workflow.\n Pre-fills the JSON editor in the escalation resolution form.\n </p>\n {form.resolver_schema.trim() && !jsonValid(form.resolver_schema) && (\n <p className=\"text-[10px] text-status-error mt-1\">Invalid JSON</p>\n )}\n </div>\n </div>\n );\n}\n","import { useState, useEffect, useCallback, useMemo } from 'react';\nimport { useParams, useNavigate, useSearchParams } from 'react-router-dom';\nimport { useWorkflowConfigs, useUpsertWorkflowConfig, useJobs } from '../../../api/workflows';\nimport { StepIndicator } from '../../../components/common/layout/StepIndicator';\nimport { PageHeader } from '../../../components/common/layout/PageHeader';\nimport { splitCsv } from '../../../lib/parse';\nimport { EMPTY_FORM, configToForm, STEP_LABELS, isStepValid } from './config-form-types';\nimport type { ConfigFormState } from './config-form-types';\nimport { BasicsStep, AccessStep, SchemasStep } from './ConfigWizardSteps';\n\nexport function WorkflowConfigDetailPage() {\n const { workflowType } = useParams<{ workflowType: string }>();\n const isNew = !workflowType;\n const navigate = useNavigate();\n const { data: configs, isLoading } = useWorkflowConfigs();\n const upsert = useUpsertWorkflowConfig();\n\n const editing = configs?.find((c) => c.workflow_type === workflowType) ?? null;\n\n // Fetch known workflow types from jobs to build the pick-list.\n // System workflows (triage, query, routing pipelines) are excluded —\n // they serve the discovery/compilation layer, not user-authored flows.\n const SYSTEM_WORKFLOWS = new Set([\n 'mcpQuery',\n 'mcpDeterministic',\n 'mcpQueryRouter',\n 'mcpTriage',\n 'mcpTriageRouter',\n 'mcpTriageDeterministic',\n 'insightQuery',\n ]);\n const { data: jobsData } = useJobs({ limit: 500 });\n const unregisteredTypes = useMemo(() => {\n const registeredSet = new Set((configs ?? []).map((c) => c.workflow_type));\n const allEntities = new Set((jobsData?.jobs ?? []).map((j) => j.entity));\n return [...allEntities]\n .filter((e) => !registeredSet.has(e) && !SYSTEM_WORKFLOWS.has(e))\n .sort();\n }, [configs, jobsData]);\n\n // Step via URL search param for browser history\n const [searchParams, setSearchParams] = useSearchParams();\n\n // Pre-fill from URL search params when creating new\n const prefillForm = useMemo((): ConfigFormState => {\n if (!isNew) return EMPTY_FORM;\n const prefillType = searchParams.get('workflow_type') ?? '';\n const prefillQueue = searchParams.get('task_queue') ?? '';\n if (!prefillType && !prefillQueue) return EMPTY_FORM;\n return { ...EMPTY_FORM, workflow_type: prefillType, task_queue: prefillQueue };\n }, [isNew, searchParams]);\n\n const [form, setForm] = useState<ConfigFormState>(prefillForm);\n const [schemaError, setSchemaError] = useState('');\n const [initialized, setInitialized] = useState(false);\n const step = parseInt(searchParams.get('step') || '1', 10);\n const setStep = useCallback((s: number) => {\n setSearchParams((prev) => {\n const next = new URLSearchParams(prev);\n next.set('step', String(s));\n return next;\n }, { replace: false });\n }, [setSearchParams]);\n\n\n useEffect(() => {\n if (initialized) return;\n if (isNew) {\n setForm(prefillForm);\n setInitialized(true);\n return;\n }\n if (editing) {\n setForm(configToForm(editing));\n setInitialized(true);\n }\n }, [editing, isNew, initialized, prefillForm]);\n\n const set = (field: keyof ConfigFormState, value: string | boolean) =>\n setForm((f) => ({ ...f, [field]: value }));\n\n // ── Save ────────────────────────────────────────────────────────────────\n\n const handleSave = () => {\n if (!form.workflow_type.trim()) return;\n setSchemaError('');\n\n let envelope_schema: Record<string, unknown> | null = null;\n let resolver_schema: Record<string, unknown> | null = null;\n\n try {\n if (form.envelope_schema.trim()) envelope_schema = JSON.parse(form.envelope_schema);\n } catch {\n setSchemaError('Invalid JSON in Envelope Schema');\n return;\n }\n try {\n if (form.resolver_schema.trim()) resolver_schema = JSON.parse(form.resolver_schema);\n } catch {\n setSchemaError('Invalid JSON in Resolver Schema');\n return;\n }\n\n upsert.mutate(\n {\n workflow_type: form.workflow_type.trim(),\n description: form.description.trim() || null,\n task_queue: form.task_queue.trim() || null,\n default_role: form.default_role.trim() || 'reviewer',\n invocable: form.invocable,\n roles: splitCsv(form.roles),\n invocation_roles: splitCsv(form.invocation_roles),\n consumes: splitCsv(form.consumes),\n envelope_schema,\n resolver_schema,\n cron_schedule: form.cron_schedule.trim() || null,\n execute_as: form.execute_as.trim() || null,\n },\n {\n onSuccess: () => {\n navigate('/workflows/registry');\n },\n },\n );\n };\n\n // ── Loading / Not found ──────────────────────────────────────────────────\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-60 bg-surface-sunken rounded\" />\n </div>\n );\n }\n\n if (!isNew && !editing) {\n return <p className=\"text-sm text-text-secondary\">Config not found.</p>;\n }\n\n // ── Render ──────────────────────────────────────────────────────────────\n\n const isLast = step === STEP_LABELS.length;\n return (\n <div>\n <PageHeader title={isNew ? 'Register Workflow' : editing?.workflow_type ?? ''} />\n\n <div className=\"max-w-3xl\">\n <StepIndicator steps={STEP_LABELS} currentStep={step - 1} onStepClick={(i) => setStep(i + 1)} />\n\n <div className=\"min-h-[360px] py-2\">\n {step === 1 && <BasicsStep form={form} set={set} editing={!!editing} durableTypes={unregisteredTypes} />}\n {step === 2 && <AccessStep form={form} set={set} />}\n {step === 3 && <SchemasStep form={form} set={set} />}\n </div>\n\n {(schemaError || upsert.error) && (\n <p className=\"text-xs text-status-error mt-4\">\n {schemaError || (upsert.error as Error).message}\n </p>\n )}\n\n {/* Navigation */}\n <div className=\"flex justify-between items-center pt-4 border-t border-surface-border mt-4\">\n <div>\n {step > 1 && (\n <button\n onClick={() => setStep(step - 1)}\n className=\"btn-secondary text-xs\"\n >\n Back\n </button>\n )}\n </div>\n <div className=\"flex gap-3\">\n <button onClick={() => navigate('/workflows/registry')} className=\"btn-ghost text-xs\">\n Cancel\n </button>\n {isLast ? (\n <button\n onClick={handleSave}\n disabled={!isStepValid(step, form) || upsert.isPending}\n className=\"btn-primary text-xs\"\n >\n {upsert.isPending ? 'Saving...' : editing ? 'Save' : 'Create'}\n </button>\n ) : (\n <button\n onClick={() => setStep(step + 1)}\n disabled={!isStepValid(step, form)}\n className=\"btn-primary text-xs\"\n >\n Next\n </button>\n )}\n </div>\n </div>\n\n </div>\n </div>\n );\n}\n"],"names":["matchesSearch","wf","search","q","WorkflowConfigsPage","navigate","useNavigate","data","isLoading","useDiscoveredWorkflows","deleteConfig","useDeleteWorkflowConfig","filters","setFilter","useFilterParams","searchInput","setSearchInput","useState","confirmDelete","setConfirmDelete","useEffect","timer","allWorkflows","queues","useMemo","w","roles","workflows","result","columns","row","jsxDEV","WorkflowPill","TaskQueuePill","ShieldCheck","r","RolePill","RowActionGroup","RowAction","ShieldOff","ShieldPlus","handleDelete","handleRowClick","PageHeader","FilterBar","e","FilterSelect","v","DataTable","ConfirmDeleteModal","Fragment","splitCsv","EMPTY_FORM","configToForm","c","STEP_LABELS","jsonValid","isStepValid","step","form","labelCls","hintCls","jsonCls","RolePicker","selected","onChange","single","placeholder","useRoles","allRoles","open","setOpen","ref","useRef","handler","toggle","role","remove","placeholderText","User","X","ChevronDown","isSelected","Check","WorkflowPicker","options","wfType","t","Workflow","csvToArray","csv","arrayToCsv","arr","BasicsStep","set","editing","durableTypes","showPickList","type","AccessStep","configs","useWorkflowConfigs","consumesOptions","SchemasStep","BotPicker","botId","WorkflowConfigDetailPage","workflowType","useParams","isNew","upsert","useUpsertWorkflowConfig","SYSTEM_WORKFLOWS","jobsData","useJobs","unregisteredTypes","registeredSet","j","searchParams","setSearchParams","useSearchParams","prefillForm","prefillType","prefillQueue","setForm","schemaError","setSchemaError","initialized","setInitialized","setStep","useCallback","s","prev","next","field","value","f","handleSave","envelope_schema","resolver_schema","isLast","StepIndicator","i"],"mappings":"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"}
|