@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
|
@@ -0,0 +1,80 @@
|
|
|
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.getVisibleRoles = getVisibleRoles;
|
|
37
|
+
exports.validateIds = validateIds;
|
|
38
|
+
exports.checkBulkPermission = checkBulkPermission;
|
|
39
|
+
exports.publishBulkClaimEvents = publishBulkClaimEvents;
|
|
40
|
+
const escalationService = __importStar(require("../../services/escalation"));
|
|
41
|
+
const userService = __importStar(require("../../services/user"));
|
|
42
|
+
const publish_1 = require("../../lib/events/publish");
|
|
43
|
+
// ── Private helpers ────────────────────────────────────────────────────────
|
|
44
|
+
async function getVisibleRoles(userId) {
|
|
45
|
+
const isSuperAdminUser = await userService.isSuperAdmin(userId);
|
|
46
|
+
if (isSuperAdminUser)
|
|
47
|
+
return undefined;
|
|
48
|
+
const userRoles = await userService.getUserRoles(userId);
|
|
49
|
+
return userRoles.map((r) => r.role);
|
|
50
|
+
}
|
|
51
|
+
function validateIds(ids) {
|
|
52
|
+
return Array.isArray(ids) && ids.length > 0;
|
|
53
|
+
}
|
|
54
|
+
async function checkBulkPermission(userId, ids) {
|
|
55
|
+
const isSuperAdminUser = await userService.isSuperAdmin(userId);
|
|
56
|
+
if (isSuperAdminUser)
|
|
57
|
+
return { allowed: true };
|
|
58
|
+
const roles = await escalationService.getEscalationRoles(ids);
|
|
59
|
+
for (const role of roles) {
|
|
60
|
+
const canManage = await userService.isGroupAdmin(userId, role);
|
|
61
|
+
if (!canManage) {
|
|
62
|
+
return { allowed: false, status: 403, error: `Insufficient permissions for role "${role}"` };
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
return { allowed: true };
|
|
66
|
+
}
|
|
67
|
+
function publishBulkClaimEvents(ids, assignedTo) {
|
|
68
|
+
for (const id of ids) {
|
|
69
|
+
(0, publish_1.publishEscalationEvent)({
|
|
70
|
+
type: 'escalation.claimed',
|
|
71
|
+
source: 'api',
|
|
72
|
+
workflowId: '',
|
|
73
|
+
workflowName: '',
|
|
74
|
+
taskQueue: '',
|
|
75
|
+
escalationId: id,
|
|
76
|
+
status: 'claimed',
|
|
77
|
+
data: { assigned_to: assignedTo, bulk: true },
|
|
78
|
+
});
|
|
79
|
+
}
|
|
80
|
+
}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
export { createEscalation } from './create';
|
|
2
|
+
export { listEscalations, listAvailableEscalations, listDistinctTypes, getEscalationStats } from './list';
|
|
3
|
+
export { getEscalation, getEscalationsByWorkflowId, escalateToRole } from './single';
|
|
4
|
+
export { claimEscalation, releaseEscalation } from './claim';
|
|
5
|
+
export { releaseExpiredClaims, updatePriority, bulkClaim, bulkAssign, bulkEscalate, bulkTriage } from './bulk';
|
|
6
|
+
export { resolveEscalation } from './resolve';
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.resolveEscalation = exports.bulkTriage = exports.bulkEscalate = exports.bulkAssign = exports.bulkClaim = exports.updatePriority = exports.releaseExpiredClaims = exports.releaseEscalation = exports.claimEscalation = exports.escalateToRole = exports.getEscalationsByWorkflowId = exports.getEscalation = exports.getEscalationStats = exports.listDistinctTypes = exports.listAvailableEscalations = exports.listEscalations = exports.createEscalation = void 0;
|
|
4
|
+
var create_1 = require("./create");
|
|
5
|
+
Object.defineProperty(exports, "createEscalation", { enumerable: true, get: function () { return create_1.createEscalation; } });
|
|
6
|
+
var list_1 = require("./list");
|
|
7
|
+
Object.defineProperty(exports, "listEscalations", { enumerable: true, get: function () { return list_1.listEscalations; } });
|
|
8
|
+
Object.defineProperty(exports, "listAvailableEscalations", { enumerable: true, get: function () { return list_1.listAvailableEscalations; } });
|
|
9
|
+
Object.defineProperty(exports, "listDistinctTypes", { enumerable: true, get: function () { return list_1.listDistinctTypes; } });
|
|
10
|
+
Object.defineProperty(exports, "getEscalationStats", { enumerable: true, get: function () { return list_1.getEscalationStats; } });
|
|
11
|
+
var single_1 = require("./single");
|
|
12
|
+
Object.defineProperty(exports, "getEscalation", { enumerable: true, get: function () { return single_1.getEscalation; } });
|
|
13
|
+
Object.defineProperty(exports, "getEscalationsByWorkflowId", { enumerable: true, get: function () { return single_1.getEscalationsByWorkflowId; } });
|
|
14
|
+
Object.defineProperty(exports, "escalateToRole", { enumerable: true, get: function () { return single_1.escalateToRole; } });
|
|
15
|
+
var claim_1 = require("./claim");
|
|
16
|
+
Object.defineProperty(exports, "claimEscalation", { enumerable: true, get: function () { return claim_1.claimEscalation; } });
|
|
17
|
+
Object.defineProperty(exports, "releaseEscalation", { enumerable: true, get: function () { return claim_1.releaseEscalation; } });
|
|
18
|
+
var bulk_1 = require("./bulk");
|
|
19
|
+
Object.defineProperty(exports, "releaseExpiredClaims", { enumerable: true, get: function () { return bulk_1.releaseExpiredClaims; } });
|
|
20
|
+
Object.defineProperty(exports, "updatePriority", { enumerable: true, get: function () { return bulk_1.updatePriority; } });
|
|
21
|
+
Object.defineProperty(exports, "bulkClaim", { enumerable: true, get: function () { return bulk_1.bulkClaim; } });
|
|
22
|
+
Object.defineProperty(exports, "bulkAssign", { enumerable: true, get: function () { return bulk_1.bulkAssign; } });
|
|
23
|
+
Object.defineProperty(exports, "bulkEscalate", { enumerable: true, get: function () { return bulk_1.bulkEscalate; } });
|
|
24
|
+
Object.defineProperty(exports, "bulkTriage", { enumerable: true, get: function () { return bulk_1.bulkTriage; } });
|
|
25
|
+
var resolve_1 = require("./resolve");
|
|
26
|
+
Object.defineProperty(exports, "resolveEscalation", { enumerable: true, get: function () { return resolve_1.resolveEscalation; } });
|
|
@@ -0,0 +1,75 @@
|
|
|
1
|
+
import type { LTApiResult, LTApiAuth } from '../../types/sdk';
|
|
2
|
+
/**
|
|
3
|
+
* List escalations with optional filters.
|
|
4
|
+
*
|
|
5
|
+
* Results are scoped to the authenticated user's roles unless the user
|
|
6
|
+
* is a superadmin (who sees all roles).
|
|
7
|
+
*
|
|
8
|
+
* @param input.status — filter by `pending`, `resolved`, or `cancelled`
|
|
9
|
+
* @param input.role — filter by assigned role
|
|
10
|
+
* @param input.type — filter by workflow type
|
|
11
|
+
* @param input.subtype — filter by subtype
|
|
12
|
+
* @param input.assigned_to — filter by assigned user ID
|
|
13
|
+
* @param input.priority — filter by priority (1–4)
|
|
14
|
+
* @param input.limit — max results (default: 50)
|
|
15
|
+
* @param input.offset — pagination offset
|
|
16
|
+
* @param input.sort_by — column to sort by (e.g. `created_at`, `priority`)
|
|
17
|
+
* @param input.order — `asc` or `desc`
|
|
18
|
+
* @param auth — authenticated user context (required for role scoping)
|
|
19
|
+
* @returns `{ status: 200, data: { escalations, total } }`
|
|
20
|
+
*/
|
|
21
|
+
export declare function listEscalations(input: {
|
|
22
|
+
status?: string;
|
|
23
|
+
role?: string;
|
|
24
|
+
type?: string;
|
|
25
|
+
subtype?: string;
|
|
26
|
+
assigned_to?: string;
|
|
27
|
+
priority?: number;
|
|
28
|
+
limit?: number;
|
|
29
|
+
offset?: number;
|
|
30
|
+
sort_by?: string;
|
|
31
|
+
order?: string;
|
|
32
|
+
}, auth: LTApiAuth): Promise<LTApiResult>;
|
|
33
|
+
/**
|
|
34
|
+
* List escalations available for claim (pending and not actively claimed).
|
|
35
|
+
*
|
|
36
|
+
* Similar to `listEscalations` but excludes escalations with active claims.
|
|
37
|
+
* Scoped to the authenticated user's roles.
|
|
38
|
+
*
|
|
39
|
+
* @param input.role — filter by role
|
|
40
|
+
* @param input.type — filter by workflow type
|
|
41
|
+
* @param input.subtype — filter by subtype
|
|
42
|
+
* @param input.priority — filter by priority (1–4)
|
|
43
|
+
* @param input.limit — max results (default: 50)
|
|
44
|
+
* @param input.offset — pagination offset
|
|
45
|
+
* @param input.sort_by — column to sort by
|
|
46
|
+
* @param input.order — `asc` or `desc`
|
|
47
|
+
* @param auth — authenticated user context
|
|
48
|
+
* @returns `{ status: 200, data: { escalations, total } }`
|
|
49
|
+
*/
|
|
50
|
+
export declare function listAvailableEscalations(input: {
|
|
51
|
+
role?: string;
|
|
52
|
+
type?: string;
|
|
53
|
+
subtype?: string;
|
|
54
|
+
priority?: number;
|
|
55
|
+
limit?: number;
|
|
56
|
+
offset?: number;
|
|
57
|
+
sort_by?: string;
|
|
58
|
+
order?: string;
|
|
59
|
+
}, auth: LTApiAuth): Promise<LTApiResult>;
|
|
60
|
+
/**
|
|
61
|
+
* List all distinct escalation type values.
|
|
62
|
+
*
|
|
63
|
+
* @returns `{ status: 200, data: { types: string[] } }`
|
|
64
|
+
*/
|
|
65
|
+
export declare function listDistinctTypes(): Promise<LTApiResult>;
|
|
66
|
+
/**
|
|
67
|
+
* Get aggregate escalation statistics scoped to the user's roles.
|
|
68
|
+
*
|
|
69
|
+
* @param input.period — time window (`1h`, `24h`, `7d`, `30d`)
|
|
70
|
+
* @param auth — authenticated user context
|
|
71
|
+
* @returns `{ status: 200, data: { pending, claimed, created, resolved, by_role, by_type } }`
|
|
72
|
+
*/
|
|
73
|
+
export declare function getEscalationStats(input: {
|
|
74
|
+
period?: string;
|
|
75
|
+
}, auth: LTApiAuth): Promise<LTApiResult>;
|
|
@@ -0,0 +1,170 @@
|
|
|
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.listEscalations = listEscalations;
|
|
37
|
+
exports.listAvailableEscalations = listAvailableEscalations;
|
|
38
|
+
exports.listDistinctTypes = listDistinctTypes;
|
|
39
|
+
exports.getEscalationStats = getEscalationStats;
|
|
40
|
+
const escalationService = __importStar(require("../../services/escalation"));
|
|
41
|
+
const helpers_1 = require("./helpers");
|
|
42
|
+
// ── List routes ────────────────────────────────────────────────────────────
|
|
43
|
+
/**
|
|
44
|
+
* List escalations with optional filters.
|
|
45
|
+
*
|
|
46
|
+
* Results are scoped to the authenticated user's roles unless the user
|
|
47
|
+
* is a superadmin (who sees all roles).
|
|
48
|
+
*
|
|
49
|
+
* @param input.status — filter by `pending`, `resolved`, or `cancelled`
|
|
50
|
+
* @param input.role — filter by assigned role
|
|
51
|
+
* @param input.type — filter by workflow type
|
|
52
|
+
* @param input.subtype — filter by subtype
|
|
53
|
+
* @param input.assigned_to — filter by assigned user ID
|
|
54
|
+
* @param input.priority — filter by priority (1–4)
|
|
55
|
+
* @param input.limit — max results (default: 50)
|
|
56
|
+
* @param input.offset — pagination offset
|
|
57
|
+
* @param input.sort_by — column to sort by (e.g. `created_at`, `priority`)
|
|
58
|
+
* @param input.order — `asc` or `desc`
|
|
59
|
+
* @param auth — authenticated user context (required for role scoping)
|
|
60
|
+
* @returns `{ status: 200, data: { escalations, total } }`
|
|
61
|
+
*/
|
|
62
|
+
async function listEscalations(input, auth) {
|
|
63
|
+
try {
|
|
64
|
+
const visibleRoles = await (0, helpers_1.getVisibleRoles)(auth.userId);
|
|
65
|
+
if (visibleRoles && visibleRoles.length === 0) {
|
|
66
|
+
return { status: 200, data: { escalations: [], total: 0 } };
|
|
67
|
+
}
|
|
68
|
+
const result = await escalationService.listEscalations({
|
|
69
|
+
status: input.status,
|
|
70
|
+
role: input.role,
|
|
71
|
+
type: input.type,
|
|
72
|
+
subtype: input.subtype,
|
|
73
|
+
assigned_to: input.assigned_to,
|
|
74
|
+
priority: input.priority,
|
|
75
|
+
limit: input.limit,
|
|
76
|
+
offset: input.offset,
|
|
77
|
+
sort_by: input.sort_by,
|
|
78
|
+
order: input.order,
|
|
79
|
+
visibleRoles,
|
|
80
|
+
});
|
|
81
|
+
return { status: 200, data: result };
|
|
82
|
+
}
|
|
83
|
+
catch (err) {
|
|
84
|
+
return { status: 500, error: err.message };
|
|
85
|
+
}
|
|
86
|
+
}
|
|
87
|
+
/**
|
|
88
|
+
* List escalations available for claim (pending and not actively claimed).
|
|
89
|
+
*
|
|
90
|
+
* Similar to `listEscalations` but excludes escalations with active claims.
|
|
91
|
+
* Scoped to the authenticated user's roles.
|
|
92
|
+
*
|
|
93
|
+
* @param input.role — filter by role
|
|
94
|
+
* @param input.type — filter by workflow type
|
|
95
|
+
* @param input.subtype — filter by subtype
|
|
96
|
+
* @param input.priority — filter by priority (1–4)
|
|
97
|
+
* @param input.limit — max results (default: 50)
|
|
98
|
+
* @param input.offset — pagination offset
|
|
99
|
+
* @param input.sort_by — column to sort by
|
|
100
|
+
* @param input.order — `asc` or `desc`
|
|
101
|
+
* @param auth — authenticated user context
|
|
102
|
+
* @returns `{ status: 200, data: { escalations, total } }`
|
|
103
|
+
*/
|
|
104
|
+
async function listAvailableEscalations(input, auth) {
|
|
105
|
+
try {
|
|
106
|
+
const visibleRoles = await (0, helpers_1.getVisibleRoles)(auth.userId);
|
|
107
|
+
if (visibleRoles && visibleRoles.length === 0) {
|
|
108
|
+
return { status: 200, data: { escalations: [], total: 0 } };
|
|
109
|
+
}
|
|
110
|
+
const result = await escalationService.listAvailableEscalations({
|
|
111
|
+
role: input.role,
|
|
112
|
+
type: input.type,
|
|
113
|
+
subtype: input.subtype,
|
|
114
|
+
priority: input.priority,
|
|
115
|
+
limit: input.limit,
|
|
116
|
+
offset: input.offset,
|
|
117
|
+
sort_by: input.sort_by,
|
|
118
|
+
order: input.order,
|
|
119
|
+
visibleRoles,
|
|
120
|
+
});
|
|
121
|
+
return { status: 200, data: result };
|
|
122
|
+
}
|
|
123
|
+
catch (err) {
|
|
124
|
+
return { status: 500, error: err.message };
|
|
125
|
+
}
|
|
126
|
+
}
|
|
127
|
+
/**
|
|
128
|
+
* List all distinct escalation type values.
|
|
129
|
+
*
|
|
130
|
+
* @returns `{ status: 200, data: { types: string[] } }`
|
|
131
|
+
*/
|
|
132
|
+
async function listDistinctTypes() {
|
|
133
|
+
try {
|
|
134
|
+
const types = await escalationService.listDistinctTypes();
|
|
135
|
+
return { status: 200, data: { types } };
|
|
136
|
+
}
|
|
137
|
+
catch (err) {
|
|
138
|
+
return { status: 500, error: err.message };
|
|
139
|
+
}
|
|
140
|
+
}
|
|
141
|
+
/**
|
|
142
|
+
* Get aggregate escalation statistics scoped to the user's roles.
|
|
143
|
+
*
|
|
144
|
+
* @param input.period — time window (`1h`, `24h`, `7d`, `30d`)
|
|
145
|
+
* @param auth — authenticated user context
|
|
146
|
+
* @returns `{ status: 200, data: { pending, claimed, created, resolved, by_role, by_type } }`
|
|
147
|
+
*/
|
|
148
|
+
async function getEscalationStats(input, auth) {
|
|
149
|
+
try {
|
|
150
|
+
const visibleRoles = await (0, helpers_1.getVisibleRoles)(auth.userId);
|
|
151
|
+
if (visibleRoles && visibleRoles.length === 0) {
|
|
152
|
+
return {
|
|
153
|
+
status: 200,
|
|
154
|
+
data: {
|
|
155
|
+
pending: 0,
|
|
156
|
+
claimed: 0,
|
|
157
|
+
created: 0,
|
|
158
|
+
resolved: 0,
|
|
159
|
+
by_role: [],
|
|
160
|
+
by_type: [],
|
|
161
|
+
},
|
|
162
|
+
};
|
|
163
|
+
}
|
|
164
|
+
const stats = await escalationService.getEscalationStats(visibleRoles, input.period);
|
|
165
|
+
return { status: 200, data: stats };
|
|
166
|
+
}
|
|
167
|
+
catch (err) {
|
|
168
|
+
return { status: 500, error: err.message };
|
|
169
|
+
}
|
|
170
|
+
}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import type { LTApiResult, LTApiAuth } from '../../types/sdk';
|
|
2
|
+
/**
|
|
3
|
+
* Resolve a pending escalation with a human-provided payload.
|
|
4
|
+
*
|
|
5
|
+
* Handles multiple resolution paths:
|
|
6
|
+
* 1. **Condition signal** — lightweight `conditionLT` signal via metadata.signal_id
|
|
7
|
+
* 2. **Signal-routed** — full signal_routing via YAML engine or Durable handle
|
|
8
|
+
* 3. **Strategy triage** — escalation strategy redirects to a triage workflow
|
|
9
|
+
* 4. **Notification-only** — no workflow_type; acknowledge and close
|
|
10
|
+
* 5. **Re-run** — restart the original workflow with resolver data injected
|
|
11
|
+
*
|
|
12
|
+
* Password fields in the resolver payload are replaced with ephemeral
|
|
13
|
+
* tokens (15-minute TTL) so plaintext never enters the signal store.
|
|
14
|
+
*/
|
|
15
|
+
export declare function resolveEscalation(input: {
|
|
16
|
+
id: string;
|
|
17
|
+
resolverPayload: Record<string, any>;
|
|
18
|
+
}, _auth: LTApiAuth): Promise<LTApiResult>;
|
|
@@ -0,0 +1,243 @@
|
|
|
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.resolveEscalation = resolveEscalation;
|
|
37
|
+
const escalationService = __importStar(require("../../services/escalation"));
|
|
38
|
+
const taskService = __importStar(require("../../services/task"));
|
|
39
|
+
const publish_1 = require("../../lib/events/publish");
|
|
40
|
+
const escalation_strategy_1 = require("../../services/escalation-strategy");
|
|
41
|
+
const ephemeral_1 = require("../../services/iam/ephemeral");
|
|
42
|
+
const deployer_1 = require("../../services/yaml-workflow/deployer");
|
|
43
|
+
const workers_1 = require("../../workers");
|
|
44
|
+
const defaults_1 = require("../../modules/defaults");
|
|
45
|
+
// ── Orchestrator ─────────────────────────────────────────────────────────
|
|
46
|
+
/**
|
|
47
|
+
* Resolve a pending escalation with a human-provided payload.
|
|
48
|
+
*
|
|
49
|
+
* Handles multiple resolution paths:
|
|
50
|
+
* 1. **Condition signal** — lightweight `conditionLT` signal via metadata.signal_id
|
|
51
|
+
* 2. **Signal-routed** — full signal_routing via YAML engine or Durable handle
|
|
52
|
+
* 3. **Strategy triage** — escalation strategy redirects to a triage workflow
|
|
53
|
+
* 4. **Notification-only** — no workflow_type; acknowledge and close
|
|
54
|
+
* 5. **Re-run** — restart the original workflow with resolver data injected
|
|
55
|
+
*
|
|
56
|
+
* Password fields in the resolver payload are replaced with ephemeral
|
|
57
|
+
* tokens (15-minute TTL) so plaintext never enters the signal store.
|
|
58
|
+
*/
|
|
59
|
+
async function resolveEscalation(input, _auth) {
|
|
60
|
+
try {
|
|
61
|
+
const { id, resolverPayload } = input;
|
|
62
|
+
if (!resolverPayload) {
|
|
63
|
+
return { status: 400, error: 'resolverPayload is required' };
|
|
64
|
+
}
|
|
65
|
+
const escalation = await escalationService.getEscalation(id);
|
|
66
|
+
if (!escalation)
|
|
67
|
+
return { status: 404, error: 'Escalation not found' };
|
|
68
|
+
if (escalation.status !== 'pending')
|
|
69
|
+
return { status: 409, error: 'Escalation not available for resolution' };
|
|
70
|
+
// Path A: conditionLT signal
|
|
71
|
+
const metadataSignalId = escalation.metadata?.signal_id;
|
|
72
|
+
if (metadataSignalId && escalation.workflow_id && escalation.task_queue && escalation.workflow_type) {
|
|
73
|
+
return resolveViaConditionSignal(escalation, resolverPayload);
|
|
74
|
+
}
|
|
75
|
+
// Path B: waitFor signal routing
|
|
76
|
+
const signalRouting = escalation.metadata?.signal_routing;
|
|
77
|
+
if (signalRouting?.signalId) {
|
|
78
|
+
return resolveViaSignalRouting(escalation, resolverPayload);
|
|
79
|
+
}
|
|
80
|
+
// Path C: escalation strategy may redirect to triage
|
|
81
|
+
const envelope = await reconstructEnvelope(escalation);
|
|
82
|
+
const strategy = escalation_strategy_1.escalationStrategyRegistry.current;
|
|
83
|
+
if (strategy) {
|
|
84
|
+
const directive = await strategy.onResolution({ escalation, resolverPayload, envelope });
|
|
85
|
+
if (directive.action === 'triage') {
|
|
86
|
+
return resolveViaTriage(escalation, resolverPayload, directive.triageEnvelope);
|
|
87
|
+
}
|
|
88
|
+
}
|
|
89
|
+
// Path D: notification-only — no workflow to restart
|
|
90
|
+
if (!escalation.workflow_type || !escalation.task_queue) {
|
|
91
|
+
await escalationService.resolveEscalation(escalation.id, resolverPayload);
|
|
92
|
+
return { status: 200, data: { acknowledged: true, escalationId: escalation.id } };
|
|
93
|
+
}
|
|
94
|
+
// Path E: standard re-run
|
|
95
|
+
return resolveViaRerun(escalation, envelope, resolverPayload);
|
|
96
|
+
}
|
|
97
|
+
catch (err) {
|
|
98
|
+
return { status: 500, error: err.message };
|
|
99
|
+
}
|
|
100
|
+
}
|
|
101
|
+
// ── Resolution paths ─────────────────────────────────────────────────────
|
|
102
|
+
/** Path A: lightweight conditionLT signal — inject $escalation_id and signal the running workflow. */
|
|
103
|
+
async function resolveViaConditionSignal(escalation, resolverPayload) {
|
|
104
|
+
const signalId = escalation.metadata.signal_id;
|
|
105
|
+
const client = (0, workers_1.createClient)();
|
|
106
|
+
const handle = await client.workflow.getHandle(escalation.task_queue, escalation.workflow_type, escalation.workflow_id);
|
|
107
|
+
await handle.signal(signalId, { ...resolverPayload, $escalation_id: escalation.id });
|
|
108
|
+
publishResolvedEvent(escalation);
|
|
109
|
+
return signaledResult(escalation, escalation.workflow_id);
|
|
110
|
+
}
|
|
111
|
+
/** Path B: waitFor signal escalation — signal via YAML engine or Durable handle. */
|
|
112
|
+
async function resolveViaSignalRouting(escalation, resolverPayload) {
|
|
113
|
+
const signalRouting = escalation.metadata.signal_routing;
|
|
114
|
+
const signalPayload = await redactPasswords(resolverPayload, escalation.metadata?.form_schema);
|
|
115
|
+
if (signalRouting.engine === 'yaml' && signalRouting.hookTopic && signalRouting.appId) {
|
|
116
|
+
const engine = await (0, deployer_1.getEngine)(signalRouting.appId);
|
|
117
|
+
await engine.signal(signalRouting.hookTopic, {
|
|
118
|
+
...signalPayload,
|
|
119
|
+
escalationId: escalation.id,
|
|
120
|
+
job_id: signalRouting.jobId,
|
|
121
|
+
});
|
|
122
|
+
}
|
|
123
|
+
else if (signalRouting.workflowId) {
|
|
124
|
+
const client = (0, workers_1.createClient)();
|
|
125
|
+
const handle = await client.workflow.getHandle(signalRouting.taskQueue, signalRouting.workflowType, signalRouting.workflowId);
|
|
126
|
+
await handle.signal(signalRouting.signalId, signalPayload);
|
|
127
|
+
}
|
|
128
|
+
// YAML workflows resolve transactionally inside the workflow; only resolve here for Durable
|
|
129
|
+
if (signalRouting.engine !== 'yaml') {
|
|
130
|
+
await escalationService.resolveEscalation(escalation.id, resolverPayload);
|
|
131
|
+
}
|
|
132
|
+
publishResolvedEvent(escalation, {
|
|
133
|
+
workflowId: escalation.workflow_id || signalRouting.workflowId,
|
|
134
|
+
workflowName: escalation.workflow_type || signalRouting.workflowType,
|
|
135
|
+
taskQueue: escalation.task_queue || signalRouting.taskQueue || signalRouting.appId,
|
|
136
|
+
status: signalRouting.engine === 'yaml' ? 'signaled' : 'resolved',
|
|
137
|
+
});
|
|
138
|
+
return signaledResult(escalation, signalRouting.workflowId || signalRouting.appId);
|
|
139
|
+
}
|
|
140
|
+
/** Path C: escalation strategy directed triage — start a triage workflow. */
|
|
141
|
+
async function resolveViaTriage(escalation, resolverPayload, triageEnvelope) {
|
|
142
|
+
const triageWorkflowId = `triage-${escalation.id}-${Date.now()}`;
|
|
143
|
+
const client = (0, workers_1.createClient)();
|
|
144
|
+
await taskService.createTask({
|
|
145
|
+
workflow_id: triageWorkflowId,
|
|
146
|
+
workflow_type: 'mcpTriageRouter',
|
|
147
|
+
lt_type: 'mcpTriage',
|
|
148
|
+
task_queue: 'long-tail-system',
|
|
149
|
+
signal_id: `lt-triage-${triageWorkflowId}`,
|
|
150
|
+
parent_workflow_id: triageWorkflowId,
|
|
151
|
+
origin_id: escalation.origin_id || triageWorkflowId,
|
|
152
|
+
parent_id: escalation.parent_id ?? undefined,
|
|
153
|
+
envelope: JSON.stringify(triageEnvelope),
|
|
154
|
+
});
|
|
155
|
+
await client.workflow.start({
|
|
156
|
+
workflowName: 'mcpTriageRouter',
|
|
157
|
+
args: [triageEnvelope],
|
|
158
|
+
taskQueue: 'long-tail-system',
|
|
159
|
+
workflowId: triageWorkflowId,
|
|
160
|
+
expire: defaults_1.JOB_EXPIRE_SECS,
|
|
161
|
+
entity: 'mcpTriageRouter',
|
|
162
|
+
});
|
|
163
|
+
await escalationService.resolveEscalation(escalation.id, {
|
|
164
|
+
...resolverPayload,
|
|
165
|
+
_lt: { ...resolverPayload._lt, triaged: true, triageWorkflowId },
|
|
166
|
+
});
|
|
167
|
+
publishResolvedEvent(escalation);
|
|
168
|
+
return {
|
|
169
|
+
status: 200,
|
|
170
|
+
data: { started: true, escalationId: escalation.id, workflowId: triageWorkflowId, triage: true },
|
|
171
|
+
};
|
|
172
|
+
}
|
|
173
|
+
/** Path E: standard re-run — inject resolver data and restart the original workflow. */
|
|
174
|
+
async function resolveViaRerun(escalation, envelope, resolverPayload) {
|
|
175
|
+
envelope.resolver = resolverPayload;
|
|
176
|
+
envelope.lt = { ...envelope.lt, escalationId: escalation.id };
|
|
177
|
+
const newWorkflowId = `rerun-${escalation.id}-${Date.now()}`;
|
|
178
|
+
const client = (0, workers_1.createClient)();
|
|
179
|
+
await client.workflow.start({
|
|
180
|
+
workflowName: escalation.workflow_type,
|
|
181
|
+
args: [envelope],
|
|
182
|
+
taskQueue: escalation.task_queue,
|
|
183
|
+
workflowId: newWorkflowId,
|
|
184
|
+
expire: 180,
|
|
185
|
+
});
|
|
186
|
+
publishResolvedEvent(escalation);
|
|
187
|
+
return {
|
|
188
|
+
status: 200,
|
|
189
|
+
data: { started: true, escalationId: escalation.id, workflowId: newWorkflowId },
|
|
190
|
+
};
|
|
191
|
+
}
|
|
192
|
+
// ── Shared helpers ───────────────────────────────────────────────────────
|
|
193
|
+
function publishResolvedEvent(escalation, overrides) {
|
|
194
|
+
(0, publish_1.publishEscalationEvent)({
|
|
195
|
+
type: 'escalation.resolved',
|
|
196
|
+
source: 'api',
|
|
197
|
+
workflowId: overrides?.workflowId || escalation.workflow_id || '',
|
|
198
|
+
workflowName: overrides?.workflowName || escalation.workflow_type || '',
|
|
199
|
+
taskQueue: overrides?.taskQueue || escalation.task_queue || '',
|
|
200
|
+
taskId: escalation.task_id,
|
|
201
|
+
escalationId: escalation.id,
|
|
202
|
+
originId: escalation.origin_id ?? undefined,
|
|
203
|
+
status: overrides?.status || 'resolved',
|
|
204
|
+
});
|
|
205
|
+
}
|
|
206
|
+
function signaledResult(escalation, workflowId) {
|
|
207
|
+
return {
|
|
208
|
+
status: 200,
|
|
209
|
+
data: { signaled: true, escalationId: escalation.id, workflowId },
|
|
210
|
+
};
|
|
211
|
+
}
|
|
212
|
+
/** Replace password fields with ephemeral tokens so plaintext never enters the signal store. */
|
|
213
|
+
async function redactPasswords(payload, formSchema) {
|
|
214
|
+
if (!formSchema?.properties)
|
|
215
|
+
return payload;
|
|
216
|
+
const redacted = { ...payload };
|
|
217
|
+
for (const [key, def] of Object.entries(formSchema.properties)) {
|
|
218
|
+
if (def?.format === 'password' && typeof redacted[key] === 'string') {
|
|
219
|
+
const uuid = await (0, ephemeral_1.storeEphemeral)(redacted[key], { ttlSeconds: 900, label: key });
|
|
220
|
+
redacted[key] = (0, ephemeral_1.formatEphemeralToken)(uuid, key);
|
|
221
|
+
}
|
|
222
|
+
}
|
|
223
|
+
return redacted;
|
|
224
|
+
}
|
|
225
|
+
/** Reconstruct the original envelope from the escalation record or its task. */
|
|
226
|
+
async function reconstructEnvelope(escalation) {
|
|
227
|
+
if (escalation.envelope) {
|
|
228
|
+
try {
|
|
229
|
+
return JSON.parse(escalation.envelope);
|
|
230
|
+
}
|
|
231
|
+
catch { /* use empty */ }
|
|
232
|
+
}
|
|
233
|
+
else if (escalation.task_id) {
|
|
234
|
+
const task = await taskService.getTask(escalation.task_id);
|
|
235
|
+
if (task?.envelope) {
|
|
236
|
+
try {
|
|
237
|
+
return JSON.parse(task.envelope);
|
|
238
|
+
}
|
|
239
|
+
catch { /* use empty */ }
|
|
240
|
+
}
|
|
241
|
+
}
|
|
242
|
+
return {};
|
|
243
|
+
}
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
import type { LTApiResult, LTApiAuth } from '../../types/sdk';
|
|
2
|
+
/**
|
|
3
|
+
* Get a single escalation by ID.
|
|
4
|
+
*
|
|
5
|
+
* Non-superadmin users must hold the escalation's assigned role.
|
|
6
|
+
*
|
|
7
|
+
* @param input.id — escalation UUID
|
|
8
|
+
* @param auth — authenticated user context
|
|
9
|
+
* @returns `{ status: 200, data: <escalation record> }` or 403/404
|
|
10
|
+
*/
|
|
11
|
+
export declare function getEscalation(input: {
|
|
12
|
+
id: string;
|
|
13
|
+
}, auth: LTApiAuth): Promise<LTApiResult>;
|
|
14
|
+
/**
|
|
15
|
+
* List all escalations for a given workflow ID.
|
|
16
|
+
*
|
|
17
|
+
* @param input.workflowId — HotMesh workflow ID
|
|
18
|
+
* @returns `{ status: 200, data: { escalations } }`
|
|
19
|
+
*/
|
|
20
|
+
export declare function getEscalationsByWorkflowId(input: {
|
|
21
|
+
workflowId: string;
|
|
22
|
+
}): Promise<LTApiResult>;
|
|
23
|
+
/**
|
|
24
|
+
* Route a pending escalation to a different role.
|
|
25
|
+
*
|
|
26
|
+
* The user must be authorized to escalate from the current role to the
|
|
27
|
+
* target role (checked via escalation chain configuration).
|
|
28
|
+
*
|
|
29
|
+
* @param input.id — escalation UUID
|
|
30
|
+
* @param input.targetRole — destination role
|
|
31
|
+
* @param auth — authenticated user context
|
|
32
|
+
* @returns `{ status: 200, data: <updated escalation> }` or 403/404/409
|
|
33
|
+
*/
|
|
34
|
+
export declare function escalateToRole(input: {
|
|
35
|
+
id: string;
|
|
36
|
+
targetRole: string;
|
|
37
|
+
}, auth: LTApiAuth): Promise<LTApiResult>;
|