@hotmeshio/long-tail 0.1.14 → 0.1.15
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 +15 -0
- package/build/api/escalations/bulk.d.ts +78 -0
- package/build/api/escalations/bulk.js +279 -0
- package/build/api/escalations/claim.d.ts +30 -0
- package/build/api/escalations/claim.js +121 -0
- package/build/api/escalations/create.d.ts +29 -0
- package/build/api/escalations/create.js +101 -0
- package/build/api/escalations/helpers.d.ts +10 -0
- package/build/api/escalations/helpers.js +80 -0
- package/build/api/escalations/index.d.ts +6 -0
- package/build/api/escalations/index.js +26 -0
- package/build/api/escalations/list.d.ts +75 -0
- package/build/api/escalations/list.js +170 -0
- package/build/api/escalations/resolve.d.ts +18 -0
- package/build/api/escalations/resolve.js +243 -0
- package/build/api/escalations/single.d.ts +37 -0
- package/build/api/escalations/single.js +123 -0
- package/build/api/files.d.ts +3 -0
- package/build/api/files.js +18 -1
- package/build/api/knowledge.d.ts +36 -0
- package/build/api/knowledge.js +112 -0
- package/build/api/mcp/index.d.ts +2 -0
- package/build/api/mcp/index.js +16 -0
- package/build/api/{mcp.d.ts → mcp/servers.d.ts} +1 -33
- package/build/api/{mcp.js → mcp/servers.js} +4 -65
- package/build/api/mcp/tools.d.ts +33 -0
- package/build/api/mcp/tools.js +64 -0
- package/build/api/settings.js +9 -1
- package/build/api/workflows/config.d.ts +64 -0
- package/build/api/workflows/config.js +142 -0
- package/build/api/workflows/discovery.d.ts +29 -0
- package/build/api/workflows/discovery.js +153 -0
- package/build/api/workflows/index.d.ts +3 -0
- package/build/api/workflows/index.js +18 -0
- package/build/api/workflows/invocation.d.ts +67 -0
- package/build/api/workflows/invocation.js +188 -0
- package/build/api/yaml-workflows/cron.d.ts +39 -0
- package/build/api/yaml-workflows/cron.js +127 -0
- package/build/api/{yaml-workflows.d.ts → yaml-workflows/crud.d.ts} +22 -146
- package/build/api/{yaml-workflows.js → yaml-workflows/crud.js} +77 -378
- package/build/api/yaml-workflows/deploy.d.ts +71 -0
- package/build/api/yaml-workflows/deploy.js +223 -0
- package/build/api/yaml-workflows/helpers.d.ts +2 -0
- package/build/api/yaml-workflows/helpers.js +8 -0
- package/build/api/yaml-workflows/index.d.ts +4 -0
- package/build/api/yaml-workflows/index.js +27 -0
- package/build/api/yaml-workflows/versions.d.ts +43 -0
- package/build/api/yaml-workflows/versions.js +124 -0
- package/build/bin/ltc.d.ts +2 -0
- package/build/bin/ltc.js +220 -0
- package/build/examples/seed-data.d.ts +55 -0
- package/build/examples/seed-data.js +161 -0
- package/build/examples/seed.js +7 -164
- package/build/lib/cli/auth.d.ts +23 -0
- package/build/lib/cli/auth.js +167 -0
- package/build/lib/cli/client.d.ts +6 -0
- package/build/lib/cli/client.js +31 -0
- package/build/lib/cli/commands/escalations.d.ts +19 -0
- package/build/lib/cli/commands/escalations.js +69 -0
- package/build/lib/cli/commands/knowledge.d.ts +18 -0
- package/build/lib/cli/commands/knowledge.js +87 -0
- package/build/lib/cli/commands/mcp.d.ts +8 -0
- package/build/lib/cli/commands/mcp.js +33 -0
- package/build/lib/cli/commands/pipelines.d.ts +16 -0
- package/build/lib/cli/commands/pipelines.js +67 -0
- package/build/lib/cli/commands/status.d.ts +1 -0
- package/build/lib/cli/commands/status.js +28 -0
- package/build/lib/cli/commands/users.d.ts +7 -0
- package/build/lib/cli/commands/users.js +25 -0
- package/build/lib/cli/commands/workflows.d.ts +16 -0
- package/build/lib/cli/commands/workflows.js +104 -0
- package/build/lib/cli/compile.d.ts +2 -0
- package/build/lib/cli/compile.js +165 -0
- package/build/lib/cli/format.d.ts +23 -0
- package/build/lib/cli/format.js +94 -0
- package/build/lib/cli/init.d.ts +1 -0
- package/build/lib/cli/init.js +61 -0
- package/build/lib/cli/output.d.ts +27 -0
- package/build/lib/cli/output.js +126 -0
- package/build/lib/cli/scanner.d.ts +10 -0
- package/build/lib/cli/scanner.js +164 -0
- package/build/lib/cli/types.d.ts +16 -0
- package/build/lib/cli/types.js +2 -0
- package/build/lib/logger/index.d.ts +0 -9
- package/build/lib/logger/index.js +9 -4
- package/build/lib/storage/index.js +2 -2
- package/build/routes/file-browser.js +14 -0
- package/build/routes/index.js +2 -0
- package/build/routes/knowledge.d.ts +2 -0
- package/build/routes/knowledge.js +141 -0
- package/build/routes/yaml-workflows/crud.js +9 -0
- package/build/sdk/index.d.ts +17 -0
- package/build/sdk/index.js +19 -0
- package/build/services/mcp/client/connection-dispatch.d.ts +18 -0
- package/build/services/mcp/client/connection-dispatch.js +78 -0
- package/build/services/mcp/client/connection-lifecycle.d.ts +48 -0
- package/build/services/mcp/client/connection-lifecycle.js +296 -0
- package/build/services/mcp/client/connection-test.d.ts +10 -0
- package/build/services/mcp/client/connection-test.js +49 -0
- package/build/services/mcp/client/connection.d.ts +3 -68
- package/build/services/mcp/client/connection.js +15 -393
- package/build/services/mcp/server-lifecycle.d.ts +27 -0
- package/build/services/mcp/server-lifecycle.js +49 -0
- package/build/services/mcp/server-tools.d.ts +13 -0
- package/build/services/mcp/server-tools.js +287 -0
- package/build/services/mcp/server.d.ts +2 -26
- package/build/services/mcp/server.js +7 -315
- package/build/services/yaml-workflow/builder-regenerate.d.ts +25 -0
- package/build/services/yaml-workflow/builder-regenerate.js +111 -0
- package/build/services/yaml-workflow/db-versions.d.ts +17 -0
- package/build/services/yaml-workflow/db-versions.js +76 -0
- package/build/services/yaml-workflow/db.d.ts +3 -13
- package/build/services/yaml-workflow/db.js +15 -71
- package/build/services/yaml-workflow/deployer-helpers.js +48 -17
- package/build/services/yaml-workflow/durable-compiler/index.d.ts +22 -0
- package/build/services/yaml-workflow/durable-compiler/index.js +168 -0
- package/build/services/yaml-workflow/durable-compiler/parser.d.ts +12 -0
- package/build/services/yaml-workflow/durable-compiler/parser.js +110 -0
- package/build/services/yaml-workflow/durable-compiler/prompts.d.ts +18 -0
- package/build/services/yaml-workflow/durable-compiler/prompts.js +570 -0
- package/build/services/yaml-workflow/durable-compiler/types.d.ts +51 -0
- package/build/services/yaml-workflow/durable-compiler/types.js +5 -0
- package/build/services/yaml-workflow/pipeline/build/dag-assembly.d.ts +17 -0
- package/build/services/yaml-workflow/pipeline/build/dag-assembly.js +192 -0
- package/build/services/yaml-workflow/pipeline/build/dag.d.ts +4 -13
- package/build/services/yaml-workflow/pipeline/build/dag.js +9 -185
- package/build/services/yaml-workflow/pipeline/prompt-templates.d.ts +10 -0
- package/build/services/yaml-workflow/pipeline/prompt-templates.js +270 -0
- package/build/services/yaml-workflow/pipeline/prompts.d.ts +3 -6
- package/build/services/yaml-workflow/pipeline/prompts.js +8 -263
- package/build/start/workers.js +6 -5
- package/build/system/activities/file-storage.d.ts +4 -0
- package/build/system/activities/file-storage.js +7 -1
- package/build/system/activities/knowledge.d.ts +23 -0
- package/build/system/activities/knowledge.js +50 -10
- package/build/system/activities/sql.d.ts +3 -0
- package/build/system/activities/sql.js +25 -1
- package/build/system/mcp-servers/file-storage.js +3 -1
- package/build/system/mcp-servers/human-queue-schemas.d.ts +91 -0
- package/build/system/mcp-servers/human-queue-schemas.js +42 -0
- package/build/system/mcp-servers/human-queue.d.ts +2 -6
- package/build/system/mcp-servers/human-queue.js +9 -51
- package/build/system/mcp-servers/knowledge.js +43 -9
- package/build/system/mcp-servers/workflow-compiler.js +54 -0
- package/build/system/workflows/mcp-triage/activities-proxy.d.ts +21 -0
- package/build/system/workflows/mcp-triage/activities-proxy.js +70 -0
- package/build/system/workflows/mcp-triage/index.js +17 -75
- package/build/system/workflows/mcp-workflow-planner/activities/persist.d.ts +1 -0
- package/build/system/workflows/mcp-workflow-planner/activities/persist.js +1 -0
- package/build/system/workflows/mcp-workflow-planner/index.js +2 -0
- package/build/tsconfig.tsbuildinfo +1 -1
- package/dashboard/dist/assets/{AdminDashboard-Cngijp4Q.js → AdminDashboard-NLryl1_B.js} +2 -2
- package/dashboard/dist/assets/{AdminDashboard-Cngijp4Q.js.map → AdminDashboard-NLryl1_B.js.map} +1 -1
- package/dashboard/dist/assets/AvailableEscalationsPage-6vexlrk3.js +2 -0
- package/dashboard/dist/assets/AvailableEscalationsPage-6vexlrk3.js.map +1 -0
- package/dashboard/dist/assets/{BotPicker-B8Uvw9Si.js → BotPicker-DWhn0tr1.js} +2 -2
- package/dashboard/dist/assets/{BotPicker-B8Uvw9Si.js.map → BotPicker-DWhn0tr1.js.map} +1 -1
- package/dashboard/dist/assets/{CollapsibleSection-DiFPuWOY.js → CollapsibleSection-CgYgQiOc.js} +2 -2
- package/dashboard/dist/assets/{CollapsibleSection-DiFPuWOY.js.map → CollapsibleSection-CgYgQiOc.js.map} +1 -1
- package/dashboard/dist/assets/{ConfirmDeleteModal-CpXG9uyu.js → ConfirmDeleteModal-DCKAPXD3.js} +2 -2
- package/dashboard/dist/assets/{ConfirmDeleteModal-CpXG9uyu.js.map → ConfirmDeleteModal-DCKAPXD3.js.map} +1 -1
- package/dashboard/dist/assets/{CopyableId-DKsTR9lK.js → CopyableId-DXkaAOYk.js} +2 -2
- package/dashboard/dist/assets/{CopyableId-DKsTR9lK.js.map → CopyableId-DXkaAOYk.js.map} +1 -1
- package/dashboard/dist/assets/{CredentialsPage-DlS7Kf40.js → CredentialsPage-B361BOfU.js} +2 -2
- package/dashboard/dist/assets/{CredentialsPage-DlS7Kf40.js.map → CredentialsPage-B361BOfU.js.map} +1 -1
- package/dashboard/dist/assets/{CustomDurationPicker-B-9eW3pm.js → CustomDurationPicker-D2G1ldiF.js} +2 -2
- package/dashboard/dist/assets/{CustomDurationPicker-B-9eW3pm.js.map → CustomDurationPicker-D2G1ldiF.js.map} +1 -1
- package/dashboard/dist/assets/{DataTable-DkOokbtL.js → DataTable-DXSUbA26.js} +2 -2
- package/dashboard/dist/assets/{DataTable-DkOokbtL.js.map → DataTable-DXSUbA26.js.map} +1 -1
- package/dashboard/dist/assets/{ElapsedCell-DVtHqM-5.js → ElapsedCell-CQGqkXP_.js} +2 -2
- package/dashboard/dist/assets/{ElapsedCell-DVtHqM-5.js.map → ElapsedCell-CQGqkXP_.js.map} +1 -1
- package/dashboard/dist/assets/{EmptyState-C7KIMIbE.js → EmptyState-Dep92Wkg.js} +2 -2
- package/dashboard/dist/assets/{EmptyState-C7KIMIbE.js.map → EmptyState-Dep92Wkg.js.map} +1 -1
- package/dashboard/dist/assets/{EscalationsOverview-BMKBlkPx.js → EscalationsOverview-DVEFVjs7.js} +2 -2
- package/dashboard/dist/assets/{EscalationsOverview-BMKBlkPx.js.map → EscalationsOverview-DVEFVjs7.js.map} +1 -1
- package/dashboard/dist/assets/{EventTable-BYZ5OVdQ.js → EventTable-BMJAPkMi.js} +2 -2
- package/dashboard/dist/assets/{EventTable-BYZ5OVdQ.js.map → EventTable-BMJAPkMi.js.map} +1 -1
- package/dashboard/dist/assets/{FilterBar-C5r3n6YO.js → FilterBar-DbVbCzH2.js} +2 -2
- package/dashboard/dist/assets/{FilterBar-C5r3n6YO.js.map → FilterBar-DbVbCzH2.js.map} +1 -1
- package/dashboard/dist/assets/{ListToolbar-BGUajIsW.js → ListToolbar-0XNuXj0M.js} +2 -2
- package/dashboard/dist/assets/{ListToolbar-BGUajIsW.js.map → ListToolbar-0XNuXj0M.js.map} +1 -1
- package/dashboard/dist/assets/{McpOverview-B_kJYHea.js → McpOverview-CeYnCzBN.js} +2 -2
- package/dashboard/dist/assets/{McpOverview-B_kJYHea.js.map → McpOverview-CeYnCzBN.js.map} +1 -1
- package/dashboard/dist/assets/McpQueryDetailPage-t3qW3QNa.js +5 -0
- package/dashboard/dist/assets/McpQueryDetailPage-t3qW3QNa.js.map +1 -0
- package/dashboard/dist/assets/{McpQueryPage-BgAq_bQg.js → McpQueryPage-CfUcdzaj.js} +2 -2
- package/dashboard/dist/assets/{McpQueryPage-BgAq_bQg.js.map → McpQueryPage-CfUcdzaj.js.map} +1 -1
- package/dashboard/dist/assets/{McpRunDetailPage-B8c0OszR.js → McpRunDetailPage-CZtodW_Z.js} +2 -2
- package/dashboard/dist/assets/{McpRunDetailPage-B8c0OszR.js.map → McpRunDetailPage-CZtodW_Z.js.map} +1 -1
- package/dashboard/dist/assets/{McpRunsPage-BY8C6k78.js → McpRunsPage-Dzgq7HGt.js} +2 -2
- package/dashboard/dist/assets/{McpRunsPage-BY8C6k78.js.map → McpRunsPage-Dzgq7HGt.js.map} +1 -1
- package/dashboard/dist/assets/{Modal-E1yRnCeW.js → Modal-yyhUeKoA.js} +2 -2
- package/dashboard/dist/assets/{Modal-E1yRnCeW.js.map → Modal-yyhUeKoA.js.map} +1 -1
- package/dashboard/dist/assets/{OperatorDashboard-C8MSTzey.js → OperatorDashboard-Ceh7OQtZ.js} +2 -2
- package/dashboard/dist/assets/{OperatorDashboard-C8MSTzey.js.map → OperatorDashboard-Ceh7OQtZ.js.map} +1 -1
- package/dashboard/dist/assets/{PageHeader-Cm5HBQF_.js → PageHeader-CZ9a8cpr.js} +2 -2
- package/dashboard/dist/assets/{PageHeader-Cm5HBQF_.js.map → PageHeader-CZ9a8cpr.js.map} +1 -1
- package/dashboard/dist/assets/{PageHeaderWithStats-CNmWJFSN.js → PageHeaderWithStats-BJuNs5NM.js} +2 -2
- package/dashboard/dist/assets/{PageHeaderWithStats-CNmWJFSN.js.map → PageHeaderWithStats-BJuNs5NM.js.map} +1 -1
- package/dashboard/dist/assets/{PriorityBadge-HSI4RVhs.js → PriorityBadge-BrPikMFy.js} +2 -2
- package/dashboard/dist/assets/{PriorityBadge-HSI4RVhs.js.map → PriorityBadge-BrPikMFy.js.map} +1 -1
- package/dashboard/dist/assets/{ProcessDetailPage-Dln8622H.js → ProcessDetailPage-2miaYd8G.js} +2 -2
- package/dashboard/dist/assets/{ProcessDetailPage-Dln8622H.js.map → ProcessDetailPage-2miaYd8G.js.map} +1 -1
- package/dashboard/dist/assets/{ProcessesListPage-bIsd9N_h.js → ProcessesListPage-DqpRDqjk.js} +2 -2
- package/dashboard/dist/assets/{ProcessesListPage-bIsd9N_h.js.map → ProcessesListPage-DqpRDqjk.js.map} +1 -1
- package/dashboard/dist/assets/{RolePill-BVUp2bF0.js → RolePill-DxbJMfJu.js} +2 -2
- package/dashboard/dist/assets/{RolePill-BVUp2bF0.js.map → RolePill-DxbJMfJu.js.map} +1 -1
- package/dashboard/dist/assets/RolesPage-CYHRo21-.js +2 -0
- package/dashboard/dist/assets/{RolesPage-kH-Njt25.js.map → RolesPage-CYHRo21-.js.map} +1 -1
- package/dashboard/dist/assets/{RowActions-DbUJPfaW.js → RowActions-DurFwIwe.js} +2 -2
- package/dashboard/dist/assets/{RowActions-DbUJPfaW.js.map → RowActions-DurFwIwe.js.map} +1 -1
- package/dashboard/dist/assets/RunAsSelector-CNKraP6u.js +2 -0
- package/dashboard/dist/assets/RunAsSelector-CNKraP6u.js.map +1 -0
- package/dashboard/dist/assets/{StatCard-Bs3JbyAz.js → StatCard-CKplpK3w.js} +2 -2
- package/dashboard/dist/assets/{StatCard-Bs3JbyAz.js.map → StatCard-CKplpK3w.js.map} +1 -1
- package/dashboard/dist/assets/{StatusBadge-CakDdsCw.js → StatusBadge-Dm0V1dNN.js} +2 -2
- package/dashboard/dist/assets/{StatusBadge-CakDdsCw.js.map → StatusBadge-Dm0V1dNN.js.map} +1 -1
- package/dashboard/dist/assets/{StepIndicator-Cd_SG_yA.js → StepIndicator-Dicx0WTZ.js} +2 -2
- package/dashboard/dist/assets/{StepIndicator-Cd_SG_yA.js.map → StepIndicator-Dicx0WTZ.js.map} +1 -1
- package/dashboard/dist/assets/{StickyPagination-Bz0C18nC.js → StickyPagination-B2jYvU3-.js} +2 -2
- package/dashboard/dist/assets/{StickyPagination-Bz0C18nC.js.map → StickyPagination-B2jYvU3-.js.map} +1 -1
- package/dashboard/dist/assets/SwimlaneTimeline-ClwumkT1.js +2 -0
- package/dashboard/dist/assets/SwimlaneTimeline-ClwumkT1.js.map +1 -0
- package/dashboard/dist/assets/{TagInput-ClFhXG-U.js → TagInput-CypDZ6Kl.js} +2 -2
- package/dashboard/dist/assets/{TagInput-ClFhXG-U.js.map → TagInput-CypDZ6Kl.js.map} +1 -1
- package/dashboard/dist/assets/{TaskDetailPage-SuMBdARt.js → TaskDetailPage-DooDNJGT.js} +2 -2
- package/dashboard/dist/assets/{TaskDetailPage-SuMBdARt.js.map → TaskDetailPage-DooDNJGT.js.map} +1 -1
- package/dashboard/dist/assets/{TaskQueuePill-lJR1JW_W.js → TaskQueuePill-C1hZ-j31.js} +2 -2
- package/dashboard/dist/assets/{TaskQueuePill-lJR1JW_W.js.map → TaskQueuePill-C1hZ-j31.js.map} +1 -1
- package/dashboard/dist/assets/{TasksListPage-Dkq1Vtbt.js → TasksListPage-D7CdkAeg.js} +2 -2
- package/dashboard/dist/assets/{TasksListPage-Dkq1Vtbt.js.map → TasksListPage-D7CdkAeg.js.map} +1 -1
- package/dashboard/dist/assets/{TimeAgo-DgfDZ1pl.js → TimeAgo-B5LXB2aj.js} +2 -2
- package/dashboard/dist/assets/{TimeAgo-DgfDZ1pl.js.map → TimeAgo-B5LXB2aj.js.map} +1 -1
- package/dashboard/dist/assets/{TimestampCell-MpHZ1hMD.js → TimestampCell-Crb9b0Gw.js} +2 -2
- package/dashboard/dist/assets/{TimestampCell-MpHZ1hMD.js.map → TimestampCell-Crb9b0Gw.js.map} +1 -1
- package/dashboard/dist/assets/{UserName-DqsosA4B.js → UserName-OPg-nkRa.js} +2 -2
- package/dashboard/dist/assets/{UserName-DqsosA4B.js.map → UserName-OPg-nkRa.js.map} +1 -1
- package/dashboard/dist/assets/{WorkflowExecutionPage-CVlg38C3.js → WorkflowExecutionPage-CcLVrs9b.js} +2 -2
- package/dashboard/dist/assets/{WorkflowExecutionPage-CVlg38C3.js.map → WorkflowExecutionPage-CcLVrs9b.js.map} +1 -1
- package/dashboard/dist/assets/{WorkflowPill-CRpZhjGR.js → WorkflowPill-CCV4MMj7.js} +2 -2
- package/dashboard/dist/assets/{WorkflowPill-CRpZhjGR.js.map → WorkflowPill-CCV4MMj7.js.map} +1 -1
- package/dashboard/dist/assets/{WorkflowsDashboard-Ugzbs8mV.js → WorkflowsDashboard-DB1SncBi.js} +2 -2
- package/dashboard/dist/assets/{WorkflowsDashboard-Ugzbs8mV.js.map → WorkflowsDashboard-DB1SncBi.js.map} +1 -1
- package/dashboard/dist/assets/{WorkflowsOverview-CIp_lTNl.js → WorkflowsOverview-DvShiYJV.js} +2 -2
- package/dashboard/dist/assets/{WorkflowsOverview-CIp_lTNl.js.map → WorkflowsOverview-DvShiYJV.js.map} +1 -1
- package/dashboard/dist/assets/YamlWorkflowsPage-DCBoMeGI.js +2 -0
- package/dashboard/dist/assets/YamlWorkflowsPage-DCBoMeGI.js.map +1 -0
- package/dashboard/dist/assets/{bots-DPfUpVqI.js → bots-Dqos20NE.js} +2 -2
- package/dashboard/dist/assets/{bots-DPfUpVqI.js.map → bots-Dqos20NE.js.map} +1 -1
- package/dashboard/dist/assets/{escalation-RrCDbMC3.js → escalation-A0CsbvNV.js} +2 -2
- package/dashboard/dist/assets/{escalation-RrCDbMC3.js.map → escalation-A0CsbvNV.js.map} +1 -1
- package/dashboard/dist/assets/{escalation-columns-CDGa9wsD.js → escalation-columns-BpBJN6k4.js} +2 -2
- package/dashboard/dist/assets/{escalation-columns-CDGa9wsD.js.map → escalation-columns-BpBJN6k4.js.map} +1 -1
- package/dashboard/dist/assets/{helpers-ZSKqdkdS.js → helpers-CmznCuAx.js} +2 -2
- package/dashboard/dist/assets/{helpers-ZSKqdkdS.js.map → helpers-CmznCuAx.js.map} +1 -1
- package/dashboard/dist/assets/index-BIeYV5QK.js +2 -0
- package/dashboard/dist/assets/index-BIeYV5QK.js.map +1 -0
- package/dashboard/dist/assets/index-BYwD3kHN.js +5 -0
- package/dashboard/dist/assets/index-BYwD3kHN.js.map +1 -0
- package/dashboard/dist/assets/index-C5TUqJu0.css +1 -0
- package/dashboard/dist/assets/{index-DX6zxr6t.js → index-C8-UaN4N.js} +2 -2
- package/dashboard/dist/assets/{index-DX6zxr6t.js.map → index-C8-UaN4N.js.map} +1 -1
- package/dashboard/dist/assets/index-CAj5LT9H.js +15 -0
- package/dashboard/dist/assets/index-CAj5LT9H.js.map +1 -0
- package/dashboard/dist/assets/index-CjxHCVxl.js +2 -0
- package/dashboard/dist/assets/{index-C90ZPzXk.js.map → index-CjxHCVxl.js.map} +1 -1
- package/dashboard/dist/assets/index-Cr0Rqsj7.js +2 -0
- package/dashboard/dist/assets/index-Cr0Rqsj7.js.map +1 -0
- package/dashboard/dist/assets/index-DZHNte4o.js +2 -0
- package/dashboard/dist/assets/{index-K40Qw1tk.js.map → index-DZHNte4o.js.map} +1 -1
- package/dashboard/dist/assets/{index-DNytWfSZ.js → index-VnYkWW8r.js} +2 -2
- package/dashboard/dist/assets/{index-DNytWfSZ.js.map → index-VnYkWW8r.js.map} +1 -1
- package/dashboard/dist/assets/{index-BbI2dzhJ.js → index-XGOmZ117.js} +2 -2
- package/dashboard/dist/assets/{index-BbI2dzhJ.js.map → index-XGOmZ117.js.map} +1 -1
- package/dashboard/dist/assets/index-ZjOUzWhc.js +2 -0
- package/dashboard/dist/assets/index-ZjOUzWhc.js.map +1 -0
- package/dashboard/dist/assets/{index-Cmgrk7PQ.js → index-puKKZ5l8.js} +71 -71
- package/dashboard/dist/assets/index-puKKZ5l8.js.map +1 -0
- package/dashboard/dist/assets/{index-BmVCyB6C.js → index-t5frSddy.js} +2 -2
- package/dashboard/dist/assets/{index-BmVCyB6C.js.map → index-t5frSddy.js.map} +1 -1
- package/dashboard/dist/assets/{mcp-CNE44TSp.js → mcp-DrWymhSu.js} +2 -2
- package/dashboard/dist/assets/{mcp-CNE44TSp.js.map → mcp-DrWymhSu.js.map} +1 -1
- package/dashboard/dist/assets/{mcp-query-RQX0uN-5.js → mcp-query-BhUxVEMS.js} +2 -2
- package/dashboard/dist/assets/{mcp-query-RQX0uN-5.js.map → mcp-query-BhUxVEMS.js.map} +1 -1
- package/dashboard/dist/assets/{mcp-runs-0w40bdz-.js → mcp-runs-DUfz4mLd.js} +2 -2
- package/dashboard/dist/assets/{mcp-runs-0w40bdz-.js.map → mcp-runs-DUfz4mLd.js.map} +1 -1
- package/dashboard/dist/assets/{namespaces-BbmdXuPp.js → namespaces-Cm6AY5sh.js} +2 -2
- package/dashboard/dist/assets/{namespaces-BbmdXuPp.js.map → namespaces-Cm6AY5sh.js.map} +1 -1
- package/dashboard/dist/assets/{roles-DoHYlhWH.js → roles-2v1Kc7BJ.js} +2 -2
- package/dashboard/dist/assets/{roles-DoHYlhWH.js.map → roles-2v1Kc7BJ.js.map} +1 -1
- package/dashboard/dist/assets/{settings-BAiJiCHS.js → settings-DTQNp6tH.js} +2 -2
- package/dashboard/dist/assets/{settings-BAiJiCHS.js.map → settings-DTQNp6tH.js.map} +1 -1
- package/dashboard/dist/assets/{tasks-CvroqHtm.js → tasks-CS1rgG1s.js} +2 -2
- package/dashboard/dist/assets/{tasks-CvroqHtm.js.map → tasks-CS1rgG1s.js.map} +1 -1
- package/dashboard/dist/assets/useEventHooks-BjXX8x3a.js +2 -0
- package/dashboard/dist/assets/{useEventHooks-BHMbzR_y.js.map → useEventHooks-BjXX8x3a.js.map} +1 -1
- package/dashboard/dist/assets/useYamlActivityEvents-BeR-nVWQ.js +2 -0
- package/dashboard/dist/assets/{useYamlActivityEvents-D56KV14X.js.map → useYamlActivityEvents-BeR-nVWQ.js.map} +1 -1
- package/dashboard/dist/assets/{users-CxIMy_xw.js → users-DYsdQ7Md.js} +2 -2
- package/dashboard/dist/assets/{users-CxIMy_xw.js.map → users-DYsdQ7Md.js.map} +1 -1
- package/dashboard/dist/assets/{vendor-icons-AFGxSeQS.js → vendor-icons-CWl44VA6.js} +77 -77
- package/dashboard/dist/assets/vendor-icons-CWl44VA6.js.map +1 -0
- package/dashboard/dist/assets/{workflows-yR9yais7.js → workflows-2QAXh3UD.js} +2 -2
- package/dashboard/dist/assets/{workflows-yR9yais7.js.map → workflows-2QAXh3UD.js.map} +1 -1
- package/dashboard/dist/assets/{yaml-workflows-QVF2MZ0l.js → yaml-workflows-sx8-UEE3.js} +2 -2
- package/dashboard/dist/assets/{yaml-workflows-QVF2MZ0l.js.map → yaml-workflows-sx8-UEE3.js.map} +1 -1
- package/dashboard/dist/index.html +3 -3
- package/docs/api/http/file-browser.md +101 -0
- package/docs/api/http/knowledge.md +203 -0
- package/docs/api/http/settings.md +6 -4
- package/docs/api/sdk/files.md +68 -0
- package/docs/api/sdk/knowledge.md +126 -0
- package/docs/api/sdk/settings.md +3 -2
- package/docs/cli.md +171 -0
- package/docs/compilation.md +16 -0
- package/docs/compiler.md +311 -0
- package/docs/events.md +19 -0
- package/docs/workflows.md +19 -0
- package/package.json +13 -2
- package/build/api/escalations.d.ts +0 -271
- package/build/api/escalations.js +0 -932
- package/build/api/workflows.d.ts +0 -158
- package/build/api/workflows.js +0 -414
- package/dashboard/dist/assets/AvailableEscalationsPage-CpBfGV1h.js +0 -2
- package/dashboard/dist/assets/AvailableEscalationsPage-CpBfGV1h.js.map +0 -1
- package/dashboard/dist/assets/McpQueryDetailPage-Czsmovqw.js +0 -5
- package/dashboard/dist/assets/McpQueryDetailPage-Czsmovqw.js.map +0 -1
- package/dashboard/dist/assets/RolesPage-kH-Njt25.js +0 -2
- package/dashboard/dist/assets/SwimlaneTimeline-Cfe-xQRX.js +0 -2
- package/dashboard/dist/assets/SwimlaneTimeline-Cfe-xQRX.js.map +0 -1
- package/dashboard/dist/assets/YamlWorkflowsPage-BICF0fRO.js +0 -2
- package/dashboard/dist/assets/YamlWorkflowsPage-BICF0fRO.js.map +0 -1
- package/dashboard/dist/assets/helpers-rMEcLwKs.js +0 -2
- package/dashboard/dist/assets/helpers-rMEcLwKs.js.map +0 -1
- package/dashboard/dist/assets/index-ABcJHHlN.js +0 -5
- package/dashboard/dist/assets/index-ABcJHHlN.js.map +0 -1
- package/dashboard/dist/assets/index-B91h_jZ0.js +0 -15
- package/dashboard/dist/assets/index-B91h_jZ0.js.map +0 -1
- package/dashboard/dist/assets/index-C1E5GTs9.js +0 -2
- package/dashboard/dist/assets/index-C1E5GTs9.js.map +0 -1
- package/dashboard/dist/assets/index-C90ZPzXk.js +0 -2
- package/dashboard/dist/assets/index-Cmgrk7PQ.js.map +0 -1
- package/dashboard/dist/assets/index-DeX-ezqf.css +0 -1
- package/dashboard/dist/assets/index-K40Qw1tk.js +0 -2
- package/dashboard/dist/assets/index-lCyNr5Xk.js +0 -2
- package/dashboard/dist/assets/index-lCyNr5Xk.js.map +0 -1
- package/dashboard/dist/assets/useEventHooks-BHMbzR_y.js +0 -2
- package/dashboard/dist/assets/useYamlActivityEvents-D56KV14X.js +0 -2
- package/dashboard/dist/assets/vendor-icons-AFGxSeQS.js.map +0 -1
package/build/api/workflows.d.ts
DELETED
|
@@ -1,158 +0,0 @@
|
|
|
1
|
-
import type { LTApiResult, LTApiAuth } from '../types/sdk';
|
|
2
|
-
/**
|
|
3
|
-
* Start a workflow — proxy for `Durable.Client.workflow.start()`.
|
|
4
|
-
*
|
|
5
|
-
* Resolves the task queue, enforces auth/role constraints, builds the
|
|
6
|
-
* LTEnvelope with IAM context, and delegates to the Durable client.
|
|
7
|
-
* Any WorkflowOptions field (workflowId, expire, entity, namespace,
|
|
8
|
-
* search, signalIn, pending, etc.) can be passed via `options` and
|
|
9
|
-
* flows through to the Durable client unchanged.
|
|
10
|
-
*
|
|
11
|
-
* @see https://docs.hotmesh.io/types/types_durable.WorkflowOptions.html
|
|
12
|
-
*/
|
|
13
|
-
export declare function invokeWorkflow(input: {
|
|
14
|
-
type: string;
|
|
15
|
-
data?: Record<string, any>;
|
|
16
|
-
metadata?: Record<string, any>;
|
|
17
|
-
execute_as?: string;
|
|
18
|
-
/** Passthrough to Durable WorkflowOptions. */
|
|
19
|
-
options?: Record<string, any>;
|
|
20
|
-
}, auth: LTApiAuth): Promise<LTApiResult>;
|
|
21
|
-
/**
|
|
22
|
-
* Get the execution status of a workflow.
|
|
23
|
-
*
|
|
24
|
-
* Returns the HotMesh status code (0 = completed, 1 = running).
|
|
25
|
-
* Resolves the workflow handle via task record or worker registry.
|
|
26
|
-
*
|
|
27
|
-
* @param input.workflowId — HotMesh workflow ID
|
|
28
|
-
* @returns `{ status: 200, data: { workflowId, status } }` or 404
|
|
29
|
-
*/
|
|
30
|
-
export declare function getWorkflowStatus(input: {
|
|
31
|
-
workflowId: string;
|
|
32
|
-
}): Promise<LTApiResult>;
|
|
33
|
-
/**
|
|
34
|
-
* Get the result of a completed workflow.
|
|
35
|
-
*
|
|
36
|
-
* Returns 202 if the workflow is still running, 200 with the result
|
|
37
|
-
* payload when complete. Never blocks — always returns immediately.
|
|
38
|
-
*
|
|
39
|
-
* @param input.workflowId — HotMesh workflow ID
|
|
40
|
-
* @returns `{ status: 200, data: { workflowId, result } }` or 202 if running
|
|
41
|
-
*/
|
|
42
|
-
export declare function getWorkflowResult(input: {
|
|
43
|
-
workflowId: string;
|
|
44
|
-
}): Promise<LTApiResult>;
|
|
45
|
-
/**
|
|
46
|
-
* Terminate a running workflow.
|
|
47
|
-
*
|
|
48
|
-
* Interrupts the workflow execution immediately via HotMesh.
|
|
49
|
-
*
|
|
50
|
-
* @param input.workflowId — HotMesh workflow ID
|
|
51
|
-
* @returns `{ status: 200, data: { terminated: true, workflowId } }` or 404
|
|
52
|
-
*/
|
|
53
|
-
export declare function terminateWorkflow(input: {
|
|
54
|
-
workflowId: string;
|
|
55
|
-
}): Promise<LTApiResult>;
|
|
56
|
-
/**
|
|
57
|
-
* Export the full state of a workflow.
|
|
58
|
-
*
|
|
59
|
-
* Returns the serialized workflow state including all activity
|
|
60
|
-
* results, signals, and metadata.
|
|
61
|
-
*
|
|
62
|
-
* @param input.workflowId — HotMesh workflow ID
|
|
63
|
-
* @returns `{ status: 200, data: <exported state> }` or 404
|
|
64
|
-
*/
|
|
65
|
-
export declare function exportWorkflow(input: {
|
|
66
|
-
workflowId: string;
|
|
67
|
-
}): Promise<LTApiResult>;
|
|
68
|
-
/**
|
|
69
|
-
* List active workflow workers with their registration status.
|
|
70
|
-
*
|
|
71
|
-
* @param input.include_system — include system workflows (default: false)
|
|
72
|
-
* @returns `{ status: 200, data: { workers: [{ name, task_queue, registered, system }] } }`
|
|
73
|
-
*/
|
|
74
|
-
export declare function listWorkers(input: {
|
|
75
|
-
include_system?: boolean;
|
|
76
|
-
}): Promise<LTApiResult>;
|
|
77
|
-
/**
|
|
78
|
-
* Discover all known workflow types from workers, history, and config.
|
|
79
|
-
*
|
|
80
|
-
* Merges three sources: active in-memory workers, historical entities
|
|
81
|
-
* from the durable jobs table, and registered workflow configs. Returns
|
|
82
|
-
* a unified list with status flags for each type.
|
|
83
|
-
*
|
|
84
|
-
* @param input.include_system — include system workflows (default: false)
|
|
85
|
-
* @returns `{ status: 200, data: { workflows: [{ workflow_type, task_queue, registered, active, invocable, ... }] } }`
|
|
86
|
-
*/
|
|
87
|
-
export declare function listDiscoveredWorkflows(input: {
|
|
88
|
-
include_system?: boolean;
|
|
89
|
-
}): Promise<LTApiResult>;
|
|
90
|
-
/**
|
|
91
|
-
* List all cron-scheduled workflows and their active state.
|
|
92
|
-
*
|
|
93
|
-
* @returns `{ status: 200, data: { schedules: [{ workflow_type, cron_schedule, active, ... }] } }`
|
|
94
|
-
*/
|
|
95
|
-
export declare function getCronStatus(): Promise<LTApiResult>;
|
|
96
|
-
/**
|
|
97
|
-
* List all registered workflow configurations.
|
|
98
|
-
*
|
|
99
|
-
* @returns `{ status: 200, data: { workflows: LTWorkflowConfig[] } }`
|
|
100
|
-
*/
|
|
101
|
-
export declare function listWorkflowConfigs(): Promise<LTApiResult>;
|
|
102
|
-
/**
|
|
103
|
-
* Get a single workflow configuration by type.
|
|
104
|
-
*
|
|
105
|
-
* @param input.type — workflow type name (e.g. `"reviewContent"`)
|
|
106
|
-
* @returns `{ status: 200, data: <config> }` or 404
|
|
107
|
-
*/
|
|
108
|
-
export declare function getWorkflowConfig(input: {
|
|
109
|
-
type: string;
|
|
110
|
-
}): Promise<LTApiResult>;
|
|
111
|
-
/**
|
|
112
|
-
* Create or replace a workflow configuration.
|
|
113
|
-
*
|
|
114
|
-
* Invalidates the config cache and restarts the cron schedule if one
|
|
115
|
-
* is defined. Idempotent — safe to call repeatedly with the same input.
|
|
116
|
-
*
|
|
117
|
-
* @param input.type — workflow type name
|
|
118
|
-
* @param input.invocable — whether the workflow can be started via the API
|
|
119
|
-
* @param input.task_queue — HotMesh task queue
|
|
120
|
-
* @param input.default_role — default escalation role
|
|
121
|
-
* @param input.description — human-readable description
|
|
122
|
-
* @param input.execute_as — service account for proxy invocation
|
|
123
|
-
* @param input.roles — roles that can resolve escalations
|
|
124
|
-
* @param input.invocation_roles — roles that can invoke this workflow
|
|
125
|
-
* @param input.consumes — workflow types whose data this workflow consumes
|
|
126
|
-
* @param input.tool_tags — MCP tool tags for discovery
|
|
127
|
-
* @param input.envelope_schema — JSON Schema for envelope.data validation
|
|
128
|
-
* @param input.resolver_schema — JSON Schema for resolver payload validation
|
|
129
|
-
* @param input.cron_schedule — cron expression for scheduled execution
|
|
130
|
-
* @returns `{ status: 200, data: <saved config> }`
|
|
131
|
-
*/
|
|
132
|
-
export declare function upsertWorkflowConfig(input: {
|
|
133
|
-
type: string;
|
|
134
|
-
invocable?: boolean;
|
|
135
|
-
task_queue?: string | null;
|
|
136
|
-
default_role?: string;
|
|
137
|
-
description?: string | null;
|
|
138
|
-
execute_as?: string | null;
|
|
139
|
-
roles?: string[];
|
|
140
|
-
invocation_roles?: string[];
|
|
141
|
-
consumes?: string[];
|
|
142
|
-
tool_tags?: string[];
|
|
143
|
-
envelope_schema?: any;
|
|
144
|
-
resolver_schema?: any;
|
|
145
|
-
cron_schedule?: string | null;
|
|
146
|
-
}): Promise<LTApiResult>;
|
|
147
|
-
/**
|
|
148
|
-
* Delete a workflow configuration.
|
|
149
|
-
*
|
|
150
|
-
* Removes the config record and invalidates the cache. Active workers
|
|
151
|
-
* continue running — this only removes the config/interceptor binding.
|
|
152
|
-
*
|
|
153
|
-
* @param input.type — workflow type name
|
|
154
|
-
* @returns `{ status: 200, data: { deleted: true, workflow_type } }` or 404
|
|
155
|
-
*/
|
|
156
|
-
export declare function deleteWorkflowConfig(input: {
|
|
157
|
-
type: string;
|
|
158
|
-
}): Promise<LTApiResult>;
|
package/build/api/workflows.js
DELETED
|
@@ -1,414 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
-
if (k2 === undefined) k2 = k;
|
|
4
|
-
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
-
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
-
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
-
}
|
|
8
|
-
Object.defineProperty(o, k2, desc);
|
|
9
|
-
}) : (function(o, m, k, k2) {
|
|
10
|
-
if (k2 === undefined) k2 = k;
|
|
11
|
-
o[k2] = m[k];
|
|
12
|
-
}));
|
|
13
|
-
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
-
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
-
}) : function(o, v) {
|
|
16
|
-
o["default"] = v;
|
|
17
|
-
});
|
|
18
|
-
var __importStar = (this && this.__importStar) || (function () {
|
|
19
|
-
var ownKeys = function(o) {
|
|
20
|
-
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
21
|
-
var ar = [];
|
|
22
|
-
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
23
|
-
return ar;
|
|
24
|
-
};
|
|
25
|
-
return ownKeys(o);
|
|
26
|
-
};
|
|
27
|
-
return function (mod) {
|
|
28
|
-
if (mod && mod.__esModule) return mod;
|
|
29
|
-
var result = {};
|
|
30
|
-
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
31
|
-
__setModuleDefault(result, mod);
|
|
32
|
-
return result;
|
|
33
|
-
};
|
|
34
|
-
})();
|
|
35
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
36
|
-
exports.invokeWorkflow = invokeWorkflow;
|
|
37
|
-
exports.getWorkflowStatus = getWorkflowStatus;
|
|
38
|
-
exports.getWorkflowResult = getWorkflowResult;
|
|
39
|
-
exports.terminateWorkflow = terminateWorkflow;
|
|
40
|
-
exports.exportWorkflow = exportWorkflow;
|
|
41
|
-
exports.listWorkers = listWorkers;
|
|
42
|
-
exports.listDiscoveredWorkflows = listDiscoveredWorkflows;
|
|
43
|
-
exports.getCronStatus = getCronStatus;
|
|
44
|
-
exports.listWorkflowConfigs = listWorkflowConfigs;
|
|
45
|
-
exports.getWorkflowConfig = getWorkflowConfig;
|
|
46
|
-
exports.upsertWorkflowConfig = upsertWorkflowConfig;
|
|
47
|
-
exports.deleteWorkflowConfig = deleteWorkflowConfig;
|
|
48
|
-
const workers_1 = require("../workers");
|
|
49
|
-
const exportService = __importStar(require("../services/export"));
|
|
50
|
-
const configService = __importStar(require("../services/config"));
|
|
51
|
-
const cron_1 = require("../services/cron");
|
|
52
|
-
const db_1 = require("../lib/db");
|
|
53
|
-
const registry_1 = require("../services/workers/registry");
|
|
54
|
-
const sql_1 = require("../services/mcp-runs/sql");
|
|
55
|
-
const task_1 = require("../services/task");
|
|
56
|
-
const workflow_invocation_1 = require("../services/workflow-invocation");
|
|
57
|
-
const ltconfig_1 = require("../modules/ltconfig");
|
|
58
|
-
function isResolveError(err) {
|
|
59
|
-
return err?.message?.includes('Cannot resolve workflow');
|
|
60
|
-
}
|
|
61
|
-
// ── Invocation ──────────────────────────────────────────────────────────────
|
|
62
|
-
/**
|
|
63
|
-
* Start a workflow — proxy for `Durable.Client.workflow.start()`.
|
|
64
|
-
*
|
|
65
|
-
* Resolves the task queue, enforces auth/role constraints, builds the
|
|
66
|
-
* LTEnvelope with IAM context, and delegates to the Durable client.
|
|
67
|
-
* Any WorkflowOptions field (workflowId, expire, entity, namespace,
|
|
68
|
-
* search, signalIn, pending, etc.) can be passed via `options` and
|
|
69
|
-
* flows through to the Durable client unchanged.
|
|
70
|
-
*
|
|
71
|
-
* @see https://docs.hotmesh.io/types/types_durable.WorkflowOptions.html
|
|
72
|
-
*/
|
|
73
|
-
async function invokeWorkflow(input, auth) {
|
|
74
|
-
try {
|
|
75
|
-
await (0, workflow_invocation_1.checkInvocationRoles)(input.type, auth.userId, auth.role);
|
|
76
|
-
const result = await (0, workflow_invocation_1.invokeWorkflow)({
|
|
77
|
-
workflowType: input.type,
|
|
78
|
-
data: input.data || {},
|
|
79
|
-
metadata: input.metadata,
|
|
80
|
-
executeAs: input.execute_as,
|
|
81
|
-
options: input.options,
|
|
82
|
-
auth: {
|
|
83
|
-
userId: auth.userId,
|
|
84
|
-
role: auth.role,
|
|
85
|
-
scopes: auth.scopes,
|
|
86
|
-
},
|
|
87
|
-
});
|
|
88
|
-
return {
|
|
89
|
-
status: 202,
|
|
90
|
-
data: { workflowId: result.workflowId, message: 'Workflow started' },
|
|
91
|
-
};
|
|
92
|
-
}
|
|
93
|
-
catch (err) {
|
|
94
|
-
const status = err instanceof workflow_invocation_1.InvocationError ? err.statusCode : 500;
|
|
95
|
-
return { status, error: err.message };
|
|
96
|
-
}
|
|
97
|
-
}
|
|
98
|
-
/**
|
|
99
|
-
* Get the execution status of a workflow.
|
|
100
|
-
*
|
|
101
|
-
* Returns the HotMesh status code (0 = completed, 1 = running).
|
|
102
|
-
* Resolves the workflow handle via task record or worker registry.
|
|
103
|
-
*
|
|
104
|
-
* @param input.workflowId — HotMesh workflow ID
|
|
105
|
-
* @returns `{ status: 200, data: { workflowId, status } }` or 404
|
|
106
|
-
*/
|
|
107
|
-
async function getWorkflowStatus(input) {
|
|
108
|
-
try {
|
|
109
|
-
const resolved = await (0, task_1.resolveWorkflowHandle)(input.workflowId);
|
|
110
|
-
const client = (0, workers_1.createClient)();
|
|
111
|
-
const handle = await client.workflow.getHandle(resolved.taskQueue, resolved.workflowName, input.workflowId);
|
|
112
|
-
const status = await handle.status();
|
|
113
|
-
return {
|
|
114
|
-
status: 200,
|
|
115
|
-
data: { workflowId: input.workflowId, status },
|
|
116
|
-
};
|
|
117
|
-
}
|
|
118
|
-
catch (err) {
|
|
119
|
-
if (isResolveError(err))
|
|
120
|
-
return { status: 404, error: err.message };
|
|
121
|
-
return { status: 500, error: err.message };
|
|
122
|
-
}
|
|
123
|
-
}
|
|
124
|
-
/**
|
|
125
|
-
* Get the result of a completed workflow.
|
|
126
|
-
*
|
|
127
|
-
* Returns 202 if the workflow is still running, 200 with the result
|
|
128
|
-
* payload when complete. Never blocks — always returns immediately.
|
|
129
|
-
*
|
|
130
|
-
* @param input.workflowId — HotMesh workflow ID
|
|
131
|
-
* @returns `{ status: 200, data: { workflowId, result } }` or 202 if running
|
|
132
|
-
*/
|
|
133
|
-
async function getWorkflowResult(input) {
|
|
134
|
-
try {
|
|
135
|
-
const resolved = await (0, task_1.resolveWorkflowHandle)(input.workflowId);
|
|
136
|
-
const client = (0, workers_1.createClient)();
|
|
137
|
-
const handle = await client.workflow.getHandle(resolved.taskQueue, resolved.workflowName, input.workflowId);
|
|
138
|
-
const status = await handle.status();
|
|
139
|
-
if (status !== 0) {
|
|
140
|
-
return {
|
|
141
|
-
status: 202,
|
|
142
|
-
data: { workflowId: input.workflowId, status: 'running' },
|
|
143
|
-
};
|
|
144
|
-
}
|
|
145
|
-
const result = await handle.result();
|
|
146
|
-
return {
|
|
147
|
-
status: 200,
|
|
148
|
-
data: { workflowId: input.workflowId, result },
|
|
149
|
-
};
|
|
150
|
-
}
|
|
151
|
-
catch (err) {
|
|
152
|
-
if (isResolveError(err))
|
|
153
|
-
return { status: 404, error: err.message };
|
|
154
|
-
return { status: 500, error: err.message };
|
|
155
|
-
}
|
|
156
|
-
}
|
|
157
|
-
/**
|
|
158
|
-
* Terminate a running workflow.
|
|
159
|
-
*
|
|
160
|
-
* Interrupts the workflow execution immediately via HotMesh.
|
|
161
|
-
*
|
|
162
|
-
* @param input.workflowId — HotMesh workflow ID
|
|
163
|
-
* @returns `{ status: 200, data: { terminated: true, workflowId } }` or 404
|
|
164
|
-
*/
|
|
165
|
-
async function terminateWorkflow(input) {
|
|
166
|
-
try {
|
|
167
|
-
const resolved = await (0, task_1.resolveWorkflowHandle)(input.workflowId);
|
|
168
|
-
const client = (0, workers_1.createClient)();
|
|
169
|
-
const handle = await client.workflow.getHandle(resolved.taskQueue, resolved.workflowName, input.workflowId);
|
|
170
|
-
await handle.terminate();
|
|
171
|
-
return {
|
|
172
|
-
status: 200,
|
|
173
|
-
data: { terminated: true, workflowId: input.workflowId },
|
|
174
|
-
};
|
|
175
|
-
}
|
|
176
|
-
catch (err) {
|
|
177
|
-
if (isResolveError(err))
|
|
178
|
-
return { status: 404, error: err.message };
|
|
179
|
-
return { status: 500, error: err.message };
|
|
180
|
-
}
|
|
181
|
-
}
|
|
182
|
-
/**
|
|
183
|
-
* Export the full state of a workflow.
|
|
184
|
-
*
|
|
185
|
-
* Returns the serialized workflow state including all activity
|
|
186
|
-
* results, signals, and metadata.
|
|
187
|
-
*
|
|
188
|
-
* @param input.workflowId — HotMesh workflow ID
|
|
189
|
-
* @returns `{ status: 200, data: <exported state> }` or 404
|
|
190
|
-
*/
|
|
191
|
-
async function exportWorkflow(input) {
|
|
192
|
-
try {
|
|
193
|
-
const resolved = await (0, task_1.resolveWorkflowHandle)(input.workflowId);
|
|
194
|
-
const exported = await exportService.exportWorkflow(input.workflowId, resolved.taskQueue, resolved.workflowName);
|
|
195
|
-
return { status: 200, data: exported };
|
|
196
|
-
}
|
|
197
|
-
catch (err) {
|
|
198
|
-
if (isResolveError(err))
|
|
199
|
-
return { status: 404, error: err.message };
|
|
200
|
-
return { status: 500, error: err.message };
|
|
201
|
-
}
|
|
202
|
-
}
|
|
203
|
-
// ── Discovery ───────────────────────────────────────────────────────────────
|
|
204
|
-
/**
|
|
205
|
-
* List active workflow workers with their registration status.
|
|
206
|
-
*
|
|
207
|
-
* @param input.include_system — include system workflows (default: false)
|
|
208
|
-
* @returns `{ status: 200, data: { workers: [{ name, task_queue, registered, system }] } }`
|
|
209
|
-
*/
|
|
210
|
-
async function listWorkers(input) {
|
|
211
|
-
try {
|
|
212
|
-
const activeWorkers = (0, registry_1.getRegisteredWorkers)();
|
|
213
|
-
const configs = await configService.listWorkflowConfigs();
|
|
214
|
-
const registeredTypes = new Set(configs.map((c) => c.workflow_type));
|
|
215
|
-
const workers = [...activeWorkers.entries()]
|
|
216
|
-
.filter(([name]) => input.include_system || !registry_1.SYSTEM_WORKFLOWS.has(name))
|
|
217
|
-
.sort(([a], [b]) => a.localeCompare(b))
|
|
218
|
-
.map(([name, { taskQueue }]) => ({
|
|
219
|
-
name,
|
|
220
|
-
task_queue: taskQueue,
|
|
221
|
-
registered: registeredTypes.has(name),
|
|
222
|
-
system: registry_1.SYSTEM_WORKFLOWS.has(name),
|
|
223
|
-
}));
|
|
224
|
-
return { status: 200, data: { workers } };
|
|
225
|
-
}
|
|
226
|
-
catch (err) {
|
|
227
|
-
return { status: 500, error: err.message };
|
|
228
|
-
}
|
|
229
|
-
}
|
|
230
|
-
/**
|
|
231
|
-
* Discover all known workflow types from workers, history, and config.
|
|
232
|
-
*
|
|
233
|
-
* Merges three sources: active in-memory workers, historical entities
|
|
234
|
-
* from the durable jobs table, and registered workflow configs. Returns
|
|
235
|
-
* a unified list with status flags for each type.
|
|
236
|
-
*
|
|
237
|
-
* @param input.include_system — include system workflows (default: false)
|
|
238
|
-
* @returns `{ status: 200, data: { workflows: [{ workflow_type, task_queue, registered, active, invocable, ... }] } }`
|
|
239
|
-
*/
|
|
240
|
-
async function listDiscoveredWorkflows(input) {
|
|
241
|
-
try {
|
|
242
|
-
// 1. Active workers from in-memory registry
|
|
243
|
-
const activeWorkers = (0, registry_1.getRegisteredWorkers)();
|
|
244
|
-
// 2. Historical entities from durable.jobs
|
|
245
|
-
const pool = (0, db_1.getPool)();
|
|
246
|
-
const { rows: entityRows } = await pool.query(sql_1.DISTINCT_ENTITIES_DURABLE);
|
|
247
|
-
const historicalEntities = new Set(entityRows.map((r) => r.entity));
|
|
248
|
-
// 3. Registered configs
|
|
249
|
-
const configs = await configService.listWorkflowConfigs();
|
|
250
|
-
const configMap = new Map(configs.map((c) => [c.workflow_type, c]));
|
|
251
|
-
// Build unified set of all workflow types
|
|
252
|
-
const allTypes = new Set();
|
|
253
|
-
for (const [name] of activeWorkers)
|
|
254
|
-
allTypes.add(name);
|
|
255
|
-
for (const entity of historicalEntities)
|
|
256
|
-
allTypes.add(entity);
|
|
257
|
-
for (const c of configs)
|
|
258
|
-
allTypes.add(c.workflow_type);
|
|
259
|
-
const workflows = [...allTypes]
|
|
260
|
-
.filter((t) => input.include_system || !registry_1.SYSTEM_WORKFLOWS.has(t))
|
|
261
|
-
.sort()
|
|
262
|
-
.map((workflowType) => {
|
|
263
|
-
const config = configMap.get(workflowType);
|
|
264
|
-
const worker = activeWorkers.get(workflowType);
|
|
265
|
-
const hasCertification = !!(config &&
|
|
266
|
-
((config.roles?.length ?? 0) > 0 ||
|
|
267
|
-
(config.consumes?.length ?? 0) > 0));
|
|
268
|
-
const tier = !config ? 'durable' : hasCertification ? 'certified' : 'configured';
|
|
269
|
-
return {
|
|
270
|
-
workflow_type: workflowType,
|
|
271
|
-
task_queue: config?.task_queue ?? worker?.taskQueue ?? null,
|
|
272
|
-
tier,
|
|
273
|
-
registered: !!config,
|
|
274
|
-
active: !!worker,
|
|
275
|
-
invocable: config?.invocable ?? !!worker,
|
|
276
|
-
system: registry_1.SYSTEM_WORKFLOWS.has(workflowType),
|
|
277
|
-
description: config?.description ?? null,
|
|
278
|
-
roles: config?.roles ?? [],
|
|
279
|
-
invocation_roles: config?.invocation_roles ?? [],
|
|
280
|
-
execute_as: config?.execute_as ?? null,
|
|
281
|
-
};
|
|
282
|
-
});
|
|
283
|
-
return { status: 200, data: { workflows } };
|
|
284
|
-
}
|
|
285
|
-
catch (err) {
|
|
286
|
-
return { status: 500, error: err.message };
|
|
287
|
-
}
|
|
288
|
-
}
|
|
289
|
-
/**
|
|
290
|
-
* List all cron-scheduled workflows and their active state.
|
|
291
|
-
*
|
|
292
|
-
* @returns `{ status: 200, data: { schedules: [{ workflow_type, cron_schedule, active, ... }] } }`
|
|
293
|
-
*/
|
|
294
|
-
async function getCronStatus() {
|
|
295
|
-
try {
|
|
296
|
-
const configs = await configService.listWorkflowConfigs();
|
|
297
|
-
const cronConfigs = configs.filter((c) => c.cron_schedule);
|
|
298
|
-
const activeTypes = cron_1.cronRegistry.activeWorkflowTypes;
|
|
299
|
-
const schedules = cronConfigs.map((c) => ({
|
|
300
|
-
workflow_type: c.workflow_type,
|
|
301
|
-
cron_schedule: c.cron_schedule,
|
|
302
|
-
description: c.description,
|
|
303
|
-
task_queue: c.task_queue,
|
|
304
|
-
invocable: c.invocable,
|
|
305
|
-
active: activeTypes.includes(c.workflow_type),
|
|
306
|
-
envelope_schema: c.envelope_schema,
|
|
307
|
-
}));
|
|
308
|
-
return { status: 200, data: { schedules } };
|
|
309
|
-
}
|
|
310
|
-
catch (err) {
|
|
311
|
-
return { status: 500, error: err.message };
|
|
312
|
-
}
|
|
313
|
-
}
|
|
314
|
-
// ── Configuration ───────────────────────────────────────────────────────────
|
|
315
|
-
/**
|
|
316
|
-
* List all registered workflow configurations.
|
|
317
|
-
*
|
|
318
|
-
* @returns `{ status: 200, data: { workflows: LTWorkflowConfig[] } }`
|
|
319
|
-
*/
|
|
320
|
-
async function listWorkflowConfigs() {
|
|
321
|
-
try {
|
|
322
|
-
const configs = await configService.listWorkflowConfigs();
|
|
323
|
-
return { status: 200, data: { workflows: configs } };
|
|
324
|
-
}
|
|
325
|
-
catch (err) {
|
|
326
|
-
return { status: 500, error: err.message };
|
|
327
|
-
}
|
|
328
|
-
}
|
|
329
|
-
/**
|
|
330
|
-
* Get a single workflow configuration by type.
|
|
331
|
-
*
|
|
332
|
-
* @param input.type — workflow type name (e.g. `"reviewContent"`)
|
|
333
|
-
* @returns `{ status: 200, data: <config> }` or 404
|
|
334
|
-
*/
|
|
335
|
-
async function getWorkflowConfig(input) {
|
|
336
|
-
try {
|
|
337
|
-
const config = await configService.getWorkflowConfig(input.type);
|
|
338
|
-
if (!config) {
|
|
339
|
-
return { status: 404, error: 'Workflow config not found' };
|
|
340
|
-
}
|
|
341
|
-
return { status: 200, data: config };
|
|
342
|
-
}
|
|
343
|
-
catch (err) {
|
|
344
|
-
return { status: 500, error: err.message };
|
|
345
|
-
}
|
|
346
|
-
}
|
|
347
|
-
/**
|
|
348
|
-
* Create or replace a workflow configuration.
|
|
349
|
-
*
|
|
350
|
-
* Invalidates the config cache and restarts the cron schedule if one
|
|
351
|
-
* is defined. Idempotent — safe to call repeatedly with the same input.
|
|
352
|
-
*
|
|
353
|
-
* @param input.type — workflow type name
|
|
354
|
-
* @param input.invocable — whether the workflow can be started via the API
|
|
355
|
-
* @param input.task_queue — HotMesh task queue
|
|
356
|
-
* @param input.default_role — default escalation role
|
|
357
|
-
* @param input.description — human-readable description
|
|
358
|
-
* @param input.execute_as — service account for proxy invocation
|
|
359
|
-
* @param input.roles — roles that can resolve escalations
|
|
360
|
-
* @param input.invocation_roles — roles that can invoke this workflow
|
|
361
|
-
* @param input.consumes — workflow types whose data this workflow consumes
|
|
362
|
-
* @param input.tool_tags — MCP tool tags for discovery
|
|
363
|
-
* @param input.envelope_schema — JSON Schema for envelope.data validation
|
|
364
|
-
* @param input.resolver_schema — JSON Schema for resolver payload validation
|
|
365
|
-
* @param input.cron_schedule — cron expression for scheduled execution
|
|
366
|
-
* @returns `{ status: 200, data: <saved config> }`
|
|
367
|
-
*/
|
|
368
|
-
async function upsertWorkflowConfig(input) {
|
|
369
|
-
try {
|
|
370
|
-
const config = await configService.upsertWorkflowConfig({
|
|
371
|
-
workflow_type: input.type,
|
|
372
|
-
invocable: input.invocable ?? false,
|
|
373
|
-
task_queue: input.task_queue ?? null,
|
|
374
|
-
default_role: input.default_role ?? 'reviewer',
|
|
375
|
-
description: input.description ?? null,
|
|
376
|
-
execute_as: input.execute_as ?? null,
|
|
377
|
-
roles: input.roles ?? [],
|
|
378
|
-
invocation_roles: input.invocation_roles ?? [],
|
|
379
|
-
consumes: input.consumes ?? [],
|
|
380
|
-
tool_tags: input.tool_tags ?? [],
|
|
381
|
-
envelope_schema: input.envelope_schema ?? null,
|
|
382
|
-
resolver_schema: input.resolver_schema ?? null,
|
|
383
|
-
cron_schedule: input.cron_schedule ?? null,
|
|
384
|
-
});
|
|
385
|
-
ltconfig_1.ltConfig.invalidate();
|
|
386
|
-
await cron_1.cronRegistry.restartCron(config);
|
|
387
|
-
return { status: 200, data: config };
|
|
388
|
-
}
|
|
389
|
-
catch (err) {
|
|
390
|
-
return { status: 500, error: err.message };
|
|
391
|
-
}
|
|
392
|
-
}
|
|
393
|
-
/**
|
|
394
|
-
* Delete a workflow configuration.
|
|
395
|
-
*
|
|
396
|
-
* Removes the config record and invalidates the cache. Active workers
|
|
397
|
-
* continue running — this only removes the config/interceptor binding.
|
|
398
|
-
*
|
|
399
|
-
* @param input.type — workflow type name
|
|
400
|
-
* @returns `{ status: 200, data: { deleted: true, workflow_type } }` or 404
|
|
401
|
-
*/
|
|
402
|
-
async function deleteWorkflowConfig(input) {
|
|
403
|
-
try {
|
|
404
|
-
const deleted = await configService.deleteWorkflowConfig(input.type);
|
|
405
|
-
if (!deleted) {
|
|
406
|
-
return { status: 404, error: 'Workflow config not found' };
|
|
407
|
-
}
|
|
408
|
-
ltconfig_1.ltConfig.invalidate();
|
|
409
|
-
return { status: 200, data: { deleted: true, workflow_type: input.type } };
|
|
410
|
-
}
|
|
411
|
-
catch (err) {
|
|
412
|
-
return { status: 500, error: err.message };
|
|
413
|
-
}
|
|
414
|
-
}
|
|
@@ -1,2 +0,0 @@
|
|
|
1
|
-
import{j as e,i as q,e as re,k as me,l as ce,m as de,n as ue,o as pe,p as be,q as he}from"./index-Cmgrk7PQ.js";import{a as n}from"./vendor-query-DLp59M9_.js";import{e as Ne}from"./useEventHooks-BHMbzR_y.js";import{u as xe}from"./roles-DoHYlhWH.js";import{u as ge}from"./useFilterParams-CGRYFw_A.js";import{D as fe}from"./DataTable-DkOokbtL.js";import{S as ve}from"./StickyPagination-Bz0C18nC.js";import{M as $}from"./Modal-E1yRnCeW.js";import{P as Ee}from"./PageHeader-Cm5HBQF_.js";import{P as ke}from"./constants-BHkpVaqx.js";import{u as O,C as Y}from"./CustomDurationPicker-B-9eW3pm.js";import{u as Ae}from"./users-CxIMy_xw.js";import{E as Be,a as ye}from"./escalation-columns-CDGa9wsD.js";import{R as De,a as je}from"./RowActions-DbUJPfaW.js";import{L as Ce}from"./ListToolbar-BGUajIsW.js";import{Y as Ve}from"./vendor-icons-AFGxSeQS.js";import{c as Pe}from"./vendor-react-Co3Y8ikm.js";import"./EmptyState-C7KIMIbE.js";import"./settings-BAiJiCHS.js";import"./FilterBar-C5r3n6YO.js";import"./PriorityBadge-HSI4RVhs.js";import"./RolePill-BVUp2bF0.js";import"./WorkflowPill-CRpZhjGR.js";import"./TimestampCell-MpHZ1hMD.js";import"./escalation-RrCDbMC3.js";const Se=s=>s.isPriorityPending||s.isClaimPending||s.isAssignPending||s.isEscalatePending||s.isTriagePending;function Me(s){const t=Se(s),c=O();return e.jsxDEV("div",{className:"flex flex-wrap items-center gap-3 px-4 py-3 bg-accent/5 border border-accent/20 rounded-lg mb-4",children:[e.jsxDEV("span",{className:"text-xs font-medium text-accent",children:[s.selectedCount," selected"]},void 0,!0,{fileName:"/app/dashboard/src/components/common/modal/BulkActionBar.tsx",lineNumber:29,columnNumber:7},this),e.jsxDEV("div",{className:"w-px h-5 bg-surface-border"},void 0,!1,{fileName:"/app/dashboard/src/components/common/modal/BulkActionBar.tsx",lineNumber:33,columnNumber:7},this),e.jsxDEV("select",{onChange:a=>{a.target.value&&(s.onSetPriority(parseInt(a.target.value)),a.target.value="")},disabled:t,className:"select text-xs py-1.5",defaultValue:"",children:[e.jsxDEV("option",{value:"",disabled:!0,children:"Priority..."},void 0,!1,{fileName:"/app/dashboard/src/components/common/modal/BulkActionBar.tsx",lineNumber:46,columnNumber:9},this),ke.map(a=>e.jsxDEV("option",{value:a.value,children:a.label},a.value,!1,{fileName:"/app/dashboard/src/components/common/modal/BulkActionBar.tsx",lineNumber:48,columnNumber:11},this))]},void 0,!0,{fileName:"/app/dashboard/src/components/common/modal/BulkActionBar.tsx",lineNumber:36,columnNumber:7},this),e.jsxDEV("select",{onChange:a=>{a.target.value&&(s.onClaim(parseInt(a.target.value)),a.target.value="")},disabled:t,className:"select text-xs py-1.5",defaultValue:"",children:[e.jsxDEV("option",{value:"",disabled:!0,children:"Claim for..."},void 0,!1,{fileName:"/app/dashboard/src/components/common/modal/BulkActionBar.tsx",lineNumber:63,columnNumber:9},this),c.map(a=>e.jsxDEV("option",{value:a.value,children:a.label},a.value,!1,{fileName:"/app/dashboard/src/components/common/modal/BulkActionBar.tsx",lineNumber:65,columnNumber:11},this))]},void 0,!0,{fileName:"/app/dashboard/src/components/common/modal/BulkActionBar.tsx",lineNumber:53,columnNumber:7},this),e.jsxDEV("button",{onClick:s.onAssign,disabled:t,className:"btn-secondary text-xs py-1.5",children:s.isAssignPending?"Assigning...":"Assign to..."},void 0,!1,{fileName:"/app/dashboard/src/components/common/modal/BulkActionBar.tsx",lineNumber:70,columnNumber:7},this),s.availableRoles.length>0&&e.jsxDEV("select",{onChange:a=>{a.target.value&&(s.onEscalate(a.target.value),a.target.value="")},disabled:t,className:"select text-xs py-1.5",defaultValue:"",children:[e.jsxDEV("option",{value:"",disabled:!0,children:"Escalate to..."},void 0,!1,{fileName:"/app/dashboard/src/components/common/modal/BulkActionBar.tsx",lineNumber:90,columnNumber:11},this),s.availableRoles.map(a=>e.jsxDEV("option",{value:a,children:a},a,!1,{fileName:"/app/dashboard/src/components/common/modal/BulkActionBar.tsx",lineNumber:92,columnNumber:13},this))]},void 0,!0,{fileName:"/app/dashboard/src/components/common/modal/BulkActionBar.tsx",lineNumber:80,columnNumber:9},this),e.jsxDEV("button",{onClick:s.onTriage,disabled:t,className:"btn-secondary text-xs py-1.5",children:s.isTriagePending?"Triaging...":"Triage"},void 0,!1,{fileName:"/app/dashboard/src/components/common/modal/BulkActionBar.tsx",lineNumber:98,columnNumber:7},this),e.jsxDEV("div",{className:"flex-1"},void 0,!1,{fileName:"/app/dashboard/src/components/common/modal/BulkActionBar.tsx",lineNumber:106,columnNumber:7},this),e.jsxDEV("button",{onClick:s.onClearSelection,className:"text-xs text-text-tertiary hover:text-text-primary transition-colors",children:"Clear"},void 0,!1,{fileName:"/app/dashboard/src/components/common/modal/BulkActionBar.tsx",lineNumber:109,columnNumber:7},this),t&&e.jsxDEV("span",{className:"text-xs text-text-tertiary animate-pulse",children:"Processing..."},void 0,!1,{fileName:"/app/dashboard/src/components/common/modal/BulkActionBar.tsx",lineNumber:117,columnNumber:9},this)]},void 0,!0,{fileName:"/app/dashboard/src/components/common/modal/BulkActionBar.tsx",lineNumber:28,columnNumber:5},this)}function Te({open:s,onClose:t,selectedCount:c,selectedRoles:a,onSubmit:E,isPending:i}){const{isSuperAdmin:N}=q(),r=O(),[g,d]=n.useState("user"),[p,k]=n.useState(null),[B,w]=n.useState(""),[A,_]=n.useState("30"),[m,b]=n.useState(0),L=n.useCallback(l=>b(l),[]),P=!N&&a.length===1?a[0]:void 0,{data:f,isLoading:y}=Ae({role:P,status:"active",limit:200}),D=n.useMemo(()=>{const l=(f==null?void 0:f.users)??[];if(!B.trim())return l;const x=B.toLowerCase();return l.filter(j=>{var h,C;return((h=j.display_name)==null?void 0:h.toLowerCase().includes(x))||((C=j.email)==null?void 0:C.toLowerCase().includes(x))})},[f==null?void 0:f.users,B]),S=()=>{d("user"),k(null),w(""),_("30"),b(0),t()},I=l=>{k(l),d("duration")},M=()=>{d("user")},z=()=>{if(!p)return;const l=A==="custom"?m:parseInt(A);!l||l<=0||E(p.id,l)};return e.jsxDEV($,{open:s,onClose:S,title:"Assign Escalations",children:e.jsxDEV("div",{className:"space-y-4",children:[g==="user"&&e.jsxDEV(e.Fragment,{children:[e.jsxDEV("p",{className:"text-sm text-text-secondary",children:["Select a user to assign"," ",e.jsxDEV("span",{className:"font-medium text-text-primary",children:c},void 0,!1,{fileName:"/app/dashboard/src/components/common/modal/BulkAssignModal.tsx",lineNumber:89,columnNumber:15},this)," ","escalation(s) to:"]},void 0,!0,{fileName:"/app/dashboard/src/components/common/modal/BulkAssignModal.tsx",lineNumber:87,columnNumber:13},this),e.jsxDEV("input",{type:"text",value:B,onChange:l=>w(l.target.value),placeholder:"Search by name or email...",className:"input text-xs w-full",autoFocus:!0},void 0,!1,{fileName:"/app/dashboard/src/components/common/modal/BulkAssignModal.tsx",lineNumber:95,columnNumber:13},this),e.jsxDEV("div",{className:"max-h-60 overflow-y-auto border border-surface-border rounded-lg divide-y divide-surface-border",children:[y&&e.jsxDEV("p",{className:"text-xs text-text-tertiary p-3",children:"Loading users..."},void 0,!1,{fileName:"/app/dashboard/src/components/common/modal/BulkAssignModal.tsx",lineNumber:106,columnNumber:17},this),!y&&D.length===0&&e.jsxDEV("p",{className:"text-xs text-text-tertiary p-3",children:"No users found"},void 0,!1,{fileName:"/app/dashboard/src/components/common/modal/BulkAssignModal.tsx",lineNumber:111,columnNumber:17},this),D.map(l=>e.jsxDEV("button",{onClick:()=>I(l),className:"w-full text-left px-3 py-2 hover:bg-surface-hover transition-colors",children:[e.jsxDEV("p",{className:"text-xs font-medium text-text-primary",children:l.display_name||l.external_id},void 0,!1,{fileName:"/app/dashboard/src/components/common/modal/BulkAssignModal.tsx",lineNumber:121,columnNumber:19},this),l.email&&e.jsxDEV("p",{className:"text-[10px] text-text-tertiary",children:l.email},void 0,!1,{fileName:"/app/dashboard/src/components/common/modal/BulkAssignModal.tsx",lineNumber:125,columnNumber:21},this)]},l.id,!0,{fileName:"/app/dashboard/src/components/common/modal/BulkAssignModal.tsx",lineNumber:116,columnNumber:17},this))]},void 0,!0,{fileName:"/app/dashboard/src/components/common/modal/BulkAssignModal.tsx",lineNumber:104,columnNumber:13},this),e.jsxDEV("div",{className:"flex justify-end pt-2",children:e.jsxDEV("button",{onClick:S,className:"btn-secondary text-xs",children:"Cancel"},void 0,!1,{fileName:"/app/dashboard/src/components/common/modal/BulkAssignModal.tsx",lineNumber:134,columnNumber:15},this)},void 0,!1,{fileName:"/app/dashboard/src/components/common/modal/BulkAssignModal.tsx",lineNumber:133,columnNumber:13},this)]},void 0,!0,{fileName:"/app/dashboard/src/components/common/modal/BulkAssignModal.tsx",lineNumber:86,columnNumber:11},this),g==="duration"&&p&&e.jsxDEV(e.Fragment,{children:[e.jsxDEV("p",{className:"text-sm text-text-secondary",children:["Assign to"," ",e.jsxDEV("span",{className:"font-medium text-text-primary",children:p.display_name||p.external_id},void 0,!1,{fileName:"/app/dashboard/src/components/common/modal/BulkAssignModal.tsx",lineNumber:145,columnNumber:15},this)," ","for:"]},void 0,!0,{fileName:"/app/dashboard/src/components/common/modal/BulkAssignModal.tsx",lineNumber:143,columnNumber:13},this),e.jsxDEV("select",{value:A,onChange:l=>{_(l.target.value),b(0)},className:"select w-full text-sm",children:[r.map(l=>e.jsxDEV("option",{value:l.value,children:l.label},l.value,!1,{fileName:"/app/dashboard/src/components/common/modal/BulkAssignModal.tsx",lineNumber:157,columnNumber:17},this)),e.jsxDEV("option",{value:"custom",children:"Other..."},void 0,!1,{fileName:"/app/dashboard/src/components/common/modal/BulkAssignModal.tsx",lineNumber:161,columnNumber:15},this)]},void 0,!0,{fileName:"/app/dashboard/src/components/common/modal/BulkAssignModal.tsx",lineNumber:151,columnNumber:13},this),A==="custom"&&e.jsxDEV(Y,{onChange:L,autoFocus:!0},void 0,!1,{fileName:"/app/dashboard/src/components/common/modal/BulkAssignModal.tsx",lineNumber:164,columnNumber:15},this),e.jsxDEV("div",{className:"flex justify-end gap-3 pt-2",children:[e.jsxDEV("button",{onClick:M,className:"btn-secondary text-xs",children:"Back"},void 0,!1,{fileName:"/app/dashboard/src/components/common/modal/BulkAssignModal.tsx",lineNumber:168,columnNumber:15},this),e.jsxDEV("button",{onClick:z,disabled:i,className:"btn-primary text-xs",children:i?"Assigning...":"Assign"},void 0,!1,{fileName:"/app/dashboard/src/components/common/modal/BulkAssignModal.tsx",lineNumber:171,columnNumber:15},this)]},void 0,!0,{fileName:"/app/dashboard/src/components/common/modal/BulkAssignModal.tsx",lineNumber:167,columnNumber:13},this)]},void 0,!0,{fileName:"/app/dashboard/src/components/common/modal/BulkAssignModal.tsx",lineNumber:142,columnNumber:11},this)]},void 0,!0,{fileName:"/app/dashboard/src/components/common/modal/BulkAssignModal.tsx",lineNumber:84,columnNumber:7},this)},void 0,!1,{fileName:"/app/dashboard/src/components/common/modal/BulkAssignModal.tsx",lineNumber:83,columnNumber:5},this)}function we({open:s,onClose:t,selectedCount:c,onSubmit:a,isPending:E}){const[i,N]=n.useState(""),r=()=>{a(i||void 0)};return e.jsxDEV($,{open:s,onClose:t,title:"Submit for AI Triage",children:e.jsxDEV("div",{className:"space-y-4",children:[e.jsxDEV("p",{className:"text-sm text-text-secondary",children:["Submit ",e.jsxDEV("span",{className:"font-medium text-text-primary",children:c},void 0,!1,{fileName:"/app/dashboard/src/components/common/modal/BulkTriageModal.tsx",lineNumber:29,columnNumber:18},this)," escalation(s) for AI triage? The triage orchestrator will take over resolution."]},void 0,!0,{fileName:"/app/dashboard/src/components/common/modal/BulkTriageModal.tsx",lineNumber:28,columnNumber:9},this),e.jsxDEV("div",{children:[e.jsxDEV("label",{className:"text-xs font-medium text-text-secondary block mb-1",children:["Triage hint ",e.jsxDEV("span",{className:"text-text-tertiary",children:"(optional)"},void 0,!1,{fileName:"/app/dashboard/src/components/common/modal/BulkTriageModal.tsx",lineNumber:35,columnNumber:25},this)]},void 0,!0,{fileName:"/app/dashboard/src/components/common/modal/BulkTriageModal.tsx",lineNumber:34,columnNumber:11},this),e.jsxDEV("input",{type:"text",value:i,onChange:g=>N(g.target.value),placeholder:"e.g., image_orientation",className:"input text-xs font-mono w-full"},void 0,!1,{fileName:"/app/dashboard/src/components/common/modal/BulkTriageModal.tsx",lineNumber:37,columnNumber:11},this),e.jsxDEV("p",{className:"text-[10px] text-text-tertiary mt-1",children:"Guides the triage workflow on what remediation to apply"},void 0,!1,{fileName:"/app/dashboard/src/components/common/modal/BulkTriageModal.tsx",lineNumber:44,columnNumber:11},this)]},void 0,!0,{fileName:"/app/dashboard/src/components/common/modal/BulkTriageModal.tsx",lineNumber:33,columnNumber:9},this),e.jsxDEV("div",{className:"flex justify-end gap-3 pt-2",children:[e.jsxDEV("button",{onClick:t,className:"btn-secondary text-xs",children:"Cancel"},void 0,!1,{fileName:"/app/dashboard/src/components/common/modal/BulkTriageModal.tsx",lineNumber:50,columnNumber:11},this),e.jsxDEV("button",{onClick:r,disabled:E,className:"btn-primary text-xs",children:E?"Submitting...":"Submit for Triage"},void 0,!1,{fileName:"/app/dashboard/src/components/common/modal/BulkTriageModal.tsx",lineNumber:53,columnNumber:11},this)]},void 0,!0,{fileName:"/app/dashboard/src/components/common/modal/BulkTriageModal.tsx",lineNumber:49,columnNumber:9},this)]},void 0,!0,{fileName:"/app/dashboard/src/components/common/modal/BulkTriageModal.tsx",lineNumber:27,columnNumber:7},this)},void 0,!1,{fileName:"/app/dashboard/src/components/common/modal/BulkTriageModal.tsx",lineNumber:26,columnNumber:5},this)}function T(s,t,c){return a=>{s.mutate(a,{onSuccess:()=>{t(),c==null||c()}})}}function _e(s){const t=()=>[...s.selectedIds];return{handleSetPriority:r=>{T(s.setPriority,s.clearSelection)({ids:t(),priority:r})},handleBulkClaim:r=>{T(s.bulkClaim,s.clearSelection)({ids:t(),durationMinutes:r})},handleBulkEscalate:r=>{T(s.bulkEscalate,s.clearSelection)({ids:t(),targetRole:r})},handleBulkTriage:r=>{T(s.bulkTriage,s.clearSelection,s.closeTriageModal)({ids:t(),hint:r})},handleBulkAssign:(r,g)=>{T(s.bulkAssign,s.clearSelection,s.closeAssignModal)({ids:t(),targetUserId:r,durationMinutes:g})}}}function na(){Ne();const s=Pe(),{user:t,isSuperAdmin:c}=q(),{filters:a,setFilter:E,pagination:i,sort:N,setSort:r}=ge({filters:{role:"",type:"",priority:"",status:"available"}}),g=O(),[d,p]=n.useState(null),[k,B]=n.useState("30"),[w,A]=n.useState(0),_=n.useCallback(o=>A(o),[]),[m,b]=n.useState(new Set),[L,P]=n.useState(!1),[f,y]=n.useState(!1),D=re(),S=me(),I=ce(),M=de(),z=ue(),l=pe(),{data:x}=xe(),{data:j}=be();n.useEffect(()=>{b(new Set)},[a.role,a.type,a.priority,a.status,i.page,i.pageSize]);const h=a.status||"",C=h==="available"||h==="claimed"?"pending":h==="resolved"?"resolved":void 0,{data:V,isLoading:G,error:F,refetch:J,isFetching:K}=he({status:C,role:a.role||void 0,type:a.type||void 0,priority:a.priority?parseInt(a.priority):void 0,limit:i.pageSize,offset:i.offset,sort_by:N.sort_by||void 0,order:N.sort_by?N.order:void 0}),U=new Date,R=(V==null?void 0:V.escalations)??[],v=h==="available"?R.filter(o=>!o.assigned_to||!o.assigned_until||new Date(o.assigned_until)<=U):h==="claimed"?R.filter(o=>o.assigned_to&&o.assigned_until&&new Date(o.assigned_until)>U):R,H=h==="available"||h==="claimed"?v.length:(V==null?void 0:V.total)??0,Q=c||(t==null?void 0:t.roles.some(o=>o.type==="admin")),W=n.useMemo(()=>{const o=new Set;for(const u of v)m.has(u.id)&&o.add(u.role);return[...o]},[v,m]),X=n.useCallback(()=>b(new Set),[]),Z=()=>{if(!d)return;const o=k==="custom"?w:parseInt(k);!o||o<=0||D.mutate({id:d.id,durationMinutes:o},{onSuccess:()=>{p(null),s(`/escalations/detail/${d.id}`)}})},{handleSetPriority:ee,handleBulkClaim:ae,handleBulkEscalate:se,handleBulkTriage:oe,handleBulkAssign:le}=_e({selectedIds:m,clearSelection:X,setPriority:S,bulkClaim:I,bulkEscalate:z,bulkTriage:l,bulkAssign:M,closeTriageModal:()=>P(!1),closeAssignModal:()=>y(!1)}),te=o=>{const u=new Set(m);u.has(o)?u.delete(o):u.add(o),b(u)},ie=()=>{m.size===v.length?b(new Set):b(new Set(v.map(o=>o.id)))},ne=[Q?{key:"select",label:e.jsxDEV("input",{type:"checkbox",checked:v.length>0&&m.size===v.length,onChange:ie,className:"rounded"},void 0,!1,{fileName:"/app/dashboard/src/pages/operator/AvailableEscalationsPage.tsx",lineNumber:156,columnNumber:9},this),render:o=>e.jsxDEV("input",{type:"checkbox",checked:m.has(o.id),onChange:u=>{u.stopPropagation(),te(o.id)},onClick:u=>u.stopPropagation(),className:"rounded"},void 0,!1,{fileName:"/app/dashboard/src/pages/operator/AvailableEscalationsPage.tsx",lineNumber:164,columnNumber:9},this),className:"w-10"}:{key:"spacer",label:"",render:()=>null,className:"w-10"},...Be,{key:"actions",label:"",render:o=>e.jsxDEV(De,{children:e.jsxDEV(je,{icon:Ve,title:"Claim escalation",onClick:()=>p(o)},void 0,!1,{fileName:"/app/dashboard/src/pages/operator/AvailableEscalationsPage.tsx",lineNumber:188,columnNumber:11},this)},void 0,!1,{fileName:"/app/dashboard/src/pages/operator/AvailableEscalationsPage.tsx",lineNumber:187,columnNumber:9},this),className:"w-16 text-right"}];return e.jsxDEV("div",{children:[e.jsxDEV(Ee,{title:"All Escalations"},void 0,!1,{fileName:"/app/dashboard/src/pages/operator/AvailableEscalationsPage.tsx",lineNumber:201,columnNumber:7},this),e.jsxDEV(ye,{filters:a,setFilter:E,roles:(x==null?void 0:x.roles)??[],types:(j==null?void 0:j.types)??[],showStatus:!0,actions:e.jsxDEV(Ce,{onRefresh:()=>J(),isFetching:K,apiPath:`/escalations?limit=${i.pageSize}&offset=${i.offset}${C?`&status=${C}`:""}${a.role?`&role=${a.role}`:""}${a.type?`&type=${a.type}`:""}${a.priority?`&priority=${a.priority}`:""}`},void 0,!1,{fileName:"/app/dashboard/src/pages/operator/AvailableEscalationsPage.tsx",lineNumber:210,columnNumber:11},this)},void 0,!1,{fileName:"/app/dashboard/src/pages/operator/AvailableEscalationsPage.tsx",lineNumber:203,columnNumber:7},this),m.size>0&&e.jsxDEV(Me,{selectedCount:m.size,onClearSelection:()=>b(new Set),onSetPriority:ee,onClaim:ae,onAssign:()=>y(!0),onEscalate:se,onTriage:()=>P(!0),isPriorityPending:S.isPending,isClaimPending:I.isPending,isAssignPending:M.isPending,isEscalatePending:z.isPending,isTriagePending:l.isPending,availableRoles:(x==null?void 0:x.roles)??[]},void 0,!1,{fileName:"/app/dashboard/src/pages/operator/AvailableEscalationsPage.tsx",lineNumber:219,columnNumber:9},this),F&&e.jsxDEV("div",{className:"mb-4 px-4 py-3 rounded-md bg-status-error/10 border border-status-error/20 text-xs text-status-error",children:F.message==="Session expired"?"Your session has expired. Please log in again.":`Failed to load escalations: ${F.message}`},void 0,!1,{fileName:"/app/dashboard/src/pages/operator/AvailableEscalationsPage.tsx",lineNumber:237,columnNumber:9},this),e.jsxDEV(fe,{columns:ne,data:v,keyFn:o=>o.id,onRowClick:o=>s(`/escalations/detail/${o.id}`,{state:{from:"/escalations/available"}}),isLoading:G,emptyMessage:F?"Unable to load data":"No available escalations",sort:N,onSort:r},void 0,!1,{fileName:"/app/dashboard/src/pages/operator/AvailableEscalationsPage.tsx",lineNumber:244,columnNumber:7},this),e.jsxDEV(ve,{page:i.page,totalPages:i.totalPages(H),onPageChange:i.setPage,total:H,pageSize:i.pageSize,onPageSizeChange:i.setPageSize},void 0,!1,{fileName:"/app/dashboard/src/pages/operator/AvailableEscalationsPage.tsx",lineNumber:255,columnNumber:7},this),e.jsxDEV($,{open:!!d,onClose:()=>p(null),title:"Claim Escalation",children:e.jsxDEV("div",{className:"space-y-4",children:[e.jsxDEV("p",{className:"text-sm text-text-secondary",children:["Claim ",e.jsxDEV("span",{className:"font-medium text-text-primary",children:d==null?void 0:d.type},void 0,!1,{fileName:"/app/dashboard/src/pages/operator/AvailableEscalationsPage.tsx",lineNumber:271,columnNumber:19},this)," for:"]},void 0,!0,{fileName:"/app/dashboard/src/pages/operator/AvailableEscalationsPage.tsx",lineNumber:270,columnNumber:11},this),e.jsxDEV("select",{value:k,onChange:o=>{B(o.target.value),A(0)},className:"select w-full text-sm",children:[g.map(o=>e.jsxDEV("option",{value:o.value,children:o.label},o.value,!1,{fileName:"/app/dashboard/src/pages/operator/AvailableEscalationsPage.tsx",lineNumber:279,columnNumber:15},this)),e.jsxDEV("option",{value:"custom",children:"Other..."},void 0,!1,{fileName:"/app/dashboard/src/pages/operator/AvailableEscalationsPage.tsx",lineNumber:281,columnNumber:13},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/operator/AvailableEscalationsPage.tsx",lineNumber:273,columnNumber:11},this),k==="custom"&&e.jsxDEV(Y,{onChange:_,autoFocus:!0},void 0,!1,{fileName:"/app/dashboard/src/pages/operator/AvailableEscalationsPage.tsx",lineNumber:284,columnNumber:13},this),e.jsxDEV("div",{className:"flex justify-end gap-3 pt-2",children:[e.jsxDEV("button",{onClick:()=>p(null),className:"btn-secondary text-xs",children:"Cancel"},void 0,!1,{fileName:"/app/dashboard/src/pages/operator/AvailableEscalationsPage.tsx",lineNumber:287,columnNumber:13},this),e.jsxDEV("button",{onClick:Z,className:"btn-primary text-xs",disabled:D.isPending,children:D.isPending?"Claiming...":"Claim"},void 0,!1,{fileName:"/app/dashboard/src/pages/operator/AvailableEscalationsPage.tsx",lineNumber:290,columnNumber:13},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/operator/AvailableEscalationsPage.tsx",lineNumber:286,columnNumber:11},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/operator/AvailableEscalationsPage.tsx",lineNumber:269,columnNumber:9},this)},void 0,!1,{fileName:"/app/dashboard/src/pages/operator/AvailableEscalationsPage.tsx",lineNumber:264,columnNumber:7},this),e.jsxDEV(we,{open:L,onClose:()=>P(!1),selectedCount:m.size,onSubmit:oe,isPending:l.isPending},void 0,!1,{fileName:"/app/dashboard/src/pages/operator/AvailableEscalationsPage.tsx",lineNumber:301,columnNumber:7},this),e.jsxDEV(Te,{open:f,onClose:()=>y(!1),selectedCount:m.size,selectedRoles:W,onSubmit:le,isPending:M.isPending},void 0,!1,{fileName:"/app/dashboard/src/pages/operator/AvailableEscalationsPage.tsx",lineNumber:309,columnNumber:7},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/operator/AvailableEscalationsPage.tsx",lineNumber:200,columnNumber:5},this)}export{na as AvailableEscalationsPage};
|
|
2
|
-
//# sourceMappingURL=AvailableEscalationsPage-CpBfGV1h.js.map
|