@hotmeshio/long-tail 0.5.11 → 0.6.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +1 -0
- package/build/api/diagnostics.d.ts +5 -0
- package/build/api/diagnostics.js +5 -1
- package/build/api/escalations/bulk.js +9 -1
- package/build/api/escalations/cancel.js +5 -7
- package/build/api/escalations/claim.js +18 -15
- package/build/api/escalations/create.d.ts +6 -0
- package/build/api/escalations/create.js +11 -8
- package/build/api/escalations/facets.d.ts +18 -0
- package/build/api/escalations/facets.js +115 -0
- package/build/api/escalations/helpers.d.ts +70 -1
- package/build/api/escalations/helpers.js +101 -7
- package/build/api/escalations/index.d.ts +3 -2
- package/build/api/escalations/index.js +7 -1
- package/build/api/escalations/list.d.ts +23 -2
- package/build/api/escalations/list.js +111 -10
- package/build/api/escalations/metadata.js +22 -27
- package/build/api/escalations/resolve.d.ts +19 -1
- package/build/api/escalations/resolve.js +111 -26
- package/build/api/escalations/single.js +8 -8
- package/build/api/settings.d.ts +1 -1
- package/build/api/settings.js +3 -1
- package/build/api/users.d.ts +6 -0
- package/build/api/users.js +29 -1
- package/build/api/workflows/invocation.d.ts +6 -0
- package/build/api/workflows/invocation.js +6 -2
- package/build/bin/ltc.js +40 -0
- package/build/lib/cli/commands/escalations.d.ts +36 -0
- package/build/lib/cli/commands/escalations.js +98 -0
- package/build/lib/db/schemas/001_schema.sql +10 -5
- package/build/lib/db/schemas/012_lt_tasks_workflow_id_unique.sql +20 -0
- package/build/lib/db/schemas/013_role_scope.sql +37 -0
- package/build/modules/features.d.ts +19 -0
- package/build/modules/features.js +16 -0
- package/build/modules/version.d.ts +10 -5
- package/build/modules/version.js +27 -11
- package/build/routes/diagnostics.js +15 -2
- package/build/routes/escalations/facets.d.ts +7 -0
- package/build/routes/escalations/facets.js +81 -0
- package/build/routes/escalations/index.js +3 -0
- package/build/routes/escalations/list.js +48 -0
- package/build/routes/escalations/resolve.js +22 -4
- package/build/routes/users.js +9 -5
- package/build/routes/workflows/invocation.js +12 -4
- package/build/sdk/index.d.ts +35 -2
- package/build/sdk/index.js +7 -0
- package/build/services/diagnostics/index.d.ts +40 -6
- package/build/services/diagnostics/index.js +54 -5
- package/build/services/escalation/crud.d.ts +56 -6
- package/build/services/escalation/crud.js +102 -31
- package/build/services/escalation/facet-sql.d.ts +18 -0
- package/build/services/escalation/facet-sql.js +118 -0
- package/build/services/escalation/facets.d.ts +45 -0
- package/build/services/escalation/facets.js +218 -0
- package/build/services/escalation/index.d.ts +1 -0
- package/build/services/escalation/index.js +8 -1
- package/build/services/escalation/queries.d.ts +47 -0
- package/build/services/escalation/queries.js +185 -2
- package/build/services/escalation/sql.d.ts +15 -2
- package/build/services/escalation/sql.js +80 -3
- package/build/services/interceptor/activities/escalation.d.ts +2 -0
- package/build/services/interceptor/activities/escalation.js +1 -1
- package/build/services/interceptor/lifecycle.js +4 -0
- package/build/services/mcp/server-tools.js +10 -4
- package/build/services/orchestrator/condition.js +6 -2
- package/build/services/role/index.js +2 -3
- package/build/services/role/sql.d.ts +8 -0
- package/build/services/role/sql.js +17 -1
- package/build/services/task/crud.js +22 -14
- package/build/services/task/process.js +3 -21
- package/build/services/task/resolve.d.ts +5 -3
- package/build/services/task/resolve.js +9 -6
- package/build/services/task/sql.d.ts +30 -2
- package/build/services/task/sql.js +72 -2
- package/build/services/user/crud.d.ts +1 -0
- package/build/services/user/crud.js +29 -11
- package/build/services/user/index.d.ts +2 -1
- package/build/services/user/index.js +12 -1
- package/build/services/user/rbac.d.ts +18 -0
- package/build/services/user/rbac.js +27 -0
- package/build/services/user/roles.d.ts +7 -2
- package/build/services/user/roles.js +21 -5
- package/build/services/user/scope.d.ts +22 -0
- package/build/services/user/scope.js +50 -0
- package/build/services/user/seed-admin.js +34 -17
- package/build/services/user/sql.d.ts +18 -7
- package/build/services/user/sql.js +38 -13
- package/build/services/user/sso-provision.js +41 -24
- package/build/services/user/types.d.ts +9 -5
- package/build/start/adapters.js +3 -0
- package/build/system/mcp-servers/admin/diagnostics.d.ts +5 -4
- package/build/system/mcp-servers/admin/diagnostics.js +12 -10
- package/build/system/mcp-servers/admin/escalations.d.ts +6 -0
- package/build/system/mcp-servers/admin/escalations.js +247 -54
- package/build/system/mcp-servers/admin/index.js +3 -3
- package/build/system/mcp-servers/admin/schemas.d.ts +417 -3
- package/build/system/mcp-servers/admin/schemas.js +101 -5
- package/build/system/mcp-servers/admin/users.js +28 -2
- package/build/system/mcp-servers/admin/workflows.js +23 -12
- package/build/system/seed/tool-manifests-admin.d.ts +1324 -562
- package/build/system/seed/tool-manifests-admin.js +10 -2
- package/build/tsconfig.tsbuildinfo +1 -1
- package/build/types/envelope.d.ts +7 -0
- package/build/types/facets.d.ts +60 -0
- package/build/types/facets.js +10 -0
- package/build/types/index.d.ts +2 -1
- package/build/types/startup.d.ts +9 -0
- package/build/types/user.d.ts +11 -0
- package/dashboard/dist/assets/AdminDashboard-2CZ8py9X.js +2 -0
- package/dashboard/dist/assets/{AdminDashboard-DZpduYdW.js.map → AdminDashboard-2CZ8py9X.js.map} +1 -1
- package/dashboard/dist/assets/{AgentConfigPage-SFnHMIP6.js → AgentConfigPage-D68sodgo.js} +7 -7
- package/dashboard/dist/assets/{AgentConfigPage-SFnHMIP6.js.map → AgentConfigPage-D68sodgo.js.map} +1 -1
- package/dashboard/dist/assets/AgentDetailPage-BmhuWbKi.js +4 -0
- package/dashboard/dist/assets/AgentDetailPage-BmhuWbKi.js.map +1 -0
- package/dashboard/dist/assets/AgentsPage-C4SKQVeU.js +2 -0
- package/dashboard/dist/assets/AgentsPage-C4SKQVeU.js.map +1 -0
- package/dashboard/dist/assets/AvailableEscalationsPage-9RBEYwkt.js +2 -0
- package/dashboard/dist/assets/AvailableEscalationsPage-9RBEYwkt.js.map +1 -0
- package/dashboard/dist/assets/{BotPicker-Dse2jW4b.js → BotPicker-D-FvXJOM.js} +2 -2
- package/dashboard/dist/assets/{BotPicker-Dse2jW4b.js.map → BotPicker-D-FvXJOM.js.map} +1 -1
- package/dashboard/dist/assets/CapabilitiesPage-ByDf6WJr.js +2 -0
- package/dashboard/dist/assets/{CapabilitiesPage-DTfKCzBQ.js.map → CapabilitiesPage-ByDf6WJr.js.map} +1 -1
- package/dashboard/dist/assets/{CollapsibleSection-8vf38J6K.js → CollapsibleSection-BjGNYEvh.js} +2 -2
- package/dashboard/dist/assets/{CollapsibleSection-8vf38J6K.js.map → CollapsibleSection-BjGNYEvh.js.map} +1 -1
- package/dashboard/dist/assets/CopyableId-blg-gZvT.js +2 -0
- package/dashboard/dist/assets/CopyableId-blg-gZvT.js.map +1 -0
- package/dashboard/dist/assets/{CredentialsPage-7C4M-hrH.js → CredentialsPage-DvCA-wQN.js} +2 -2
- package/dashboard/dist/assets/{CredentialsPage-7C4M-hrH.js.map → CredentialsPage-DvCA-wQN.js.map} +1 -1
- package/dashboard/dist/assets/{CronLabel-DrGWtaSY.js → CronLabel-DBMurd_c.js} +2 -2
- package/dashboard/dist/assets/{CronLabel-DrGWtaSY.js.map → CronLabel-DBMurd_c.js.map} +1 -1
- package/dashboard/dist/assets/{CustomDurationPicker-Vcmr4LiR.js → CustomDurationPicker-DHflFoEa.js} +2 -2
- package/dashboard/dist/assets/{CustomDurationPicker-Vcmr4LiR.js.map → CustomDurationPicker-DHflFoEa.js.map} +1 -1
- package/dashboard/dist/assets/{DropZone-Dwpgbueb.js → DropZone-CUtdp99Z.js} +2 -2
- package/dashboard/dist/assets/{DropZone-Dwpgbueb.js.map → DropZone-CUtdp99Z.js.map} +1 -1
- package/dashboard/dist/assets/{ElapsedCell-BNexhR5d.js → ElapsedCell-CSjcVOpo.js} +2 -2
- package/dashboard/dist/assets/{ElapsedCell-BNexhR5d.js.map → ElapsedCell-CSjcVOpo.js.map} +1 -1
- package/dashboard/dist/assets/{EscalationsOverview-BI3DEwYP.js → EscalationsOverview-BUqRNJbK.js} +2 -2
- package/dashboard/dist/assets/{EscalationsOverview-BI3DEwYP.js.map → EscalationsOverview-BUqRNJbK.js.map} +1 -1
- package/dashboard/dist/assets/{EventTable-CwvX_L9t.js → EventTable-Chz-6XPE.js} +2 -2
- package/dashboard/dist/assets/{EventTable-CwvX_L9t.js.map → EventTable-Chz-6XPE.js.map} +1 -1
- package/dashboard/dist/assets/{GraphInvokePage-C-3b8WK0.js → GraphInvokePage-BXdgciWg.js} +2 -2
- package/dashboard/dist/assets/{GraphInvokePage-C-3b8WK0.js.map → GraphInvokePage-BXdgciWg.js.map} +1 -1
- package/dashboard/dist/assets/{HomePage-BS_-jcHr.js → HomePage-CEMxnk0r.js} +2 -2
- package/dashboard/dist/assets/{HomePage-BS_-jcHr.js.map → HomePage-CEMxnk0r.js.map} +1 -1
- package/dashboard/dist/assets/{ListToolbar-BH9rwQVE.js → ListToolbar-_73JCdbB.js} +2 -2
- package/dashboard/dist/assets/{ListToolbar-BH9rwQVE.js.map → ListToolbar-_73JCdbB.js.map} +1 -1
- package/dashboard/dist/assets/{McpOverview-C9iOdE7E.js → McpOverview-DfdqxhSz.js} +2 -2
- package/dashboard/dist/assets/{McpOverview-C9iOdE7E.js.map → McpOverview-DfdqxhSz.js.map} +1 -1
- package/dashboard/dist/assets/{McpQueryDetailPage-DMN-yqvJ.js → McpQueryDetailPage-DPAljieY.js} +2 -2
- package/dashboard/dist/assets/{McpQueryDetailPage-DMN-yqvJ.js.map → McpQueryDetailPage-DPAljieY.js.map} +1 -1
- package/dashboard/dist/assets/McpQueryPage-D5cSziYS.js +2 -0
- package/dashboard/dist/assets/McpQueryPage-D5cSziYS.js.map +1 -0
- package/dashboard/dist/assets/{McpRunDetailPage-Wb47sRvo.js → McpRunDetailPage-DwNb9wZg.js} +2 -2
- package/dashboard/dist/assets/{McpRunDetailPage-Wb47sRvo.js.map → McpRunDetailPage-DwNb9wZg.js.map} +1 -1
- package/dashboard/dist/assets/McpRunsPage-O5H6yStl.js +2 -0
- package/dashboard/dist/assets/McpRunsPage-O5H6yStl.js.map +1 -0
- package/dashboard/dist/assets/{NamespacePill-DnJl4Lre.js → NamespacePill-uW-xOedj.js} +2 -2
- package/dashboard/dist/assets/{NamespacePill-DnJl4Lre.js.map → NamespacePill-uW-xOedj.js.map} +1 -1
- package/dashboard/dist/assets/OperatorDashboard-DYw9Ekv5.js +2 -0
- package/dashboard/dist/assets/OperatorDashboard-DYw9Ekv5.js.map +1 -0
- package/dashboard/dist/assets/PageHeader-DVOZjBfL.js +2 -0
- package/dashboard/dist/assets/PageHeader-DVOZjBfL.js.map +1 -0
- package/dashboard/dist/assets/{PageHeaderWithStats-BuKc9MKt.js → PageHeaderWithStats-DtTpDHOd.js} +2 -2
- package/dashboard/dist/assets/{PageHeaderWithStats-BuKc9MKt.js.map → PageHeaderWithStats-DtTpDHOd.js.map} +1 -1
- package/dashboard/dist/assets/PriorityBadge-B4ykBH7f.js +2 -0
- package/dashboard/dist/assets/PriorityBadge-B4ykBH7f.js.map +1 -0
- package/dashboard/dist/assets/{ProcessDetailPage-CvPx-h8y.js → ProcessDetailPage-B0Dokcx9.js} +2 -2
- package/dashboard/dist/assets/{ProcessDetailPage-CvPx-h8y.js.map → ProcessDetailPage-B0Dokcx9.js.map} +1 -1
- package/dashboard/dist/assets/ProcessesListPage-Cc87WIjL.js +2 -0
- package/dashboard/dist/assets/ProcessesListPage-Cc87WIjL.js.map +1 -0
- package/dashboard/dist/assets/RolePill-BaW-30TC.js +2 -0
- package/dashboard/dist/assets/RolePill-BaW-30TC.js.map +1 -0
- package/dashboard/dist/assets/{RolesPage-W5ZjOHpg.js → RolesPage-cp6PiF08.js} +2 -2
- package/dashboard/dist/assets/{RolesPage-W5ZjOHpg.js.map → RolesPage-cp6PiF08.js.map} +1 -1
- package/dashboard/dist/assets/RowActions-BA9L9djf.js +2 -0
- package/dashboard/dist/assets/RowActions-BA9L9djf.js.map +1 -0
- package/dashboard/dist/assets/{RunAsSelector-CvxGTNGT.js → RunAsSelector-2LWkjSnO.js} +2 -2
- package/dashboard/dist/assets/{RunAsSelector-CvxGTNGT.js.map → RunAsSelector-2LWkjSnO.js.map} +1 -1
- package/dashboard/dist/assets/{StickyPagination-BWhFSr2d.js → StickyPagination-BQEm--kI.js} +2 -2
- package/dashboard/dist/assets/{StickyPagination-BWhFSr2d.js.map → StickyPagination-BQEm--kI.js.map} +1 -1
- package/dashboard/dist/assets/StreamMessageDetail-BTtw3GjX.js +2 -0
- package/dashboard/dist/assets/{StreamMessageDetail-BF0tM0cd.js.map → StreamMessageDetail-BTtw3GjX.js.map} +1 -1
- package/dashboard/dist/assets/{SwimlaneTimeline-Bv-KHY9s.js → SwimlaneTimeline-DdXxP4fO.js} +2 -2
- package/dashboard/dist/assets/{SwimlaneTimeline-Bv-KHY9s.js.map → SwimlaneTimeline-DdXxP4fO.js.map} +1 -1
- package/dashboard/dist/assets/{TagInput-B00uqhjX.js → TagInput-x9XTuqMb.js} +2 -2
- package/dashboard/dist/assets/{TagInput-B00uqhjX.js.map → TagInput-x9XTuqMb.js.map} +1 -1
- package/dashboard/dist/assets/{TaskDetailPage-Bzb_fuLy.js → TaskDetailPage-B8veYG4X.js} +2 -2
- package/dashboard/dist/assets/{TaskDetailPage-Bzb_fuLy.js.map → TaskDetailPage-B8veYG4X.js.map} +1 -1
- package/dashboard/dist/assets/{TaskQueuePill-CUsofm0X.js → TaskQueuePill-DSEQZ-HT.js} +2 -2
- package/dashboard/dist/assets/{TaskQueuePill-CUsofm0X.js.map → TaskQueuePill-DSEQZ-HT.js.map} +1 -1
- package/dashboard/dist/assets/{TasksListPage-CBezWaZL.js → TasksListPage-CsN1gZj5.js} +2 -2
- package/dashboard/dist/assets/{TasksListPage-CBezWaZL.js.map → TasksListPage-CsN1gZj5.js.map} +1 -1
- package/dashboard/dist/assets/{TimeAgo-CKHfTzat.js → TimeAgo-n182EcLx.js} +2 -2
- package/dashboard/dist/assets/{TimeAgo-CKHfTzat.js.map → TimeAgo-n182EcLx.js.map} +1 -1
- package/dashboard/dist/assets/{TimestampCell-Dsje8GH-.js → TimestampCell-2dlcQAfX.js} +2 -2
- package/dashboard/dist/assets/{TimestampCell-Dsje8GH-.js.map → TimestampCell-2dlcQAfX.js.map} +1 -1
- package/dashboard/dist/assets/{ToolPill-DjvedZSn.js → ToolPill-B_e4eT77.js} +2 -2
- package/dashboard/dist/assets/{ToolPill-DjvedZSn.js.map → ToolPill-B_e4eT77.js.map} +1 -1
- package/dashboard/dist/assets/{ToolTestPanel-3OcG18e5.js → ToolTestPanel-Bhnncc6M.js} +2 -2
- package/dashboard/dist/assets/{ToolTestPanel-3OcG18e5.js.map → ToolTestPanel-Bhnncc6M.js.map} +1 -1
- package/dashboard/dist/assets/{TopicDetailPage-DCtv91hH.js → TopicDetailPage-29lsNsqI.js} +3 -3
- package/dashboard/dist/assets/{TopicDetailPage-DCtv91hH.js.map → TopicDetailPage-29lsNsqI.js.map} +1 -1
- package/dashboard/dist/assets/{TopicsPage-DVGSNc_E.js → TopicsPage-KJ7_LAvo.js} +2 -2
- package/dashboard/dist/assets/{TopicsPage-DVGSNc_E.js.map → TopicsPage-KJ7_LAvo.js.map} +1 -1
- package/dashboard/dist/assets/{UserName-xHAgkk8M.js → UserName-CMoFi9zb.js} +2 -2
- package/dashboard/dist/assets/{UserName-xHAgkk8M.js.map → UserName-CMoFi9zb.js.map} +1 -1
- package/dashboard/dist/assets/{WorkflowExecutionPage-CWNxsS8a.js → WorkflowExecutionPage-Cymfx-Bp.js} +2 -2
- package/dashboard/dist/assets/{WorkflowExecutionPage-CWNxsS8a.js.map → WorkflowExecutionPage-Cymfx-Bp.js.map} +1 -1
- package/dashboard/dist/assets/{WorkflowPill-F1oKUzmc.js → WorkflowPill-B66_AnaY.js} +2 -2
- package/dashboard/dist/assets/{WorkflowPill-F1oKUzmc.js.map → WorkflowPill-B66_AnaY.js.map} +1 -1
- package/dashboard/dist/assets/WorkflowsDashboard-CqLN8spd.js +2 -0
- package/dashboard/dist/assets/WorkflowsDashboard-CqLN8spd.js.map +1 -0
- package/dashboard/dist/assets/{WorkflowsOverview-e7jWSj_n.js → WorkflowsOverview-0Rc2WT6q.js} +2 -2
- package/dashboard/dist/assets/{WorkflowsOverview-e7jWSj_n.js.map → WorkflowsOverview-0Rc2WT6q.js.map} +1 -1
- package/dashboard/dist/assets/{YamlWorkflowDetailPage-CdAeam76.js → YamlWorkflowDetailPage-CARQ7_LN.js} +2 -2
- package/dashboard/dist/assets/{YamlWorkflowDetailPage-CdAeam76.js.map → YamlWorkflowDetailPage-CARQ7_LN.js.map} +1 -1
- package/dashboard/dist/assets/{YamlWorkflowsPage-S_gKs2Di.js → YamlWorkflowsPage-B-7sz1nf.js} +2 -2
- package/dashboard/dist/assets/{YamlWorkflowsPage-S_gKs2Di.js.map → YamlWorkflowsPage-B-7sz1nf.js.map} +1 -1
- package/dashboard/dist/assets/{agents-JE4aL07D.js → agents-zM43d5Yf.js} +2 -2
- package/dashboard/dist/assets/{agents-JE4aL07D.js.map → agents-zM43d5Yf.js.map} +1 -1
- package/dashboard/dist/assets/api-path-u2Jf9QXS.js +2 -0
- package/dashboard/dist/assets/api-path-u2Jf9QXS.js.map +1 -0
- package/dashboard/dist/assets/{bots-cAzKkDtQ.js → bots-D5BasOGz.js} +2 -2
- package/dashboard/dist/assets/{bots-cAzKkDtQ.js.map → bots-D5BasOGz.js.map} +1 -1
- package/dashboard/dist/assets/{capabilities-RBFXLAXF.js → capabilities-BT3PW9CZ.js} +2 -2
- package/dashboard/dist/assets/{capabilities-RBFXLAXF.js.map → capabilities-BT3PW9CZ.js.map} +1 -1
- package/dashboard/dist/assets/{controlplane-DGhv3rwI.js → controlplane-NpJr49rN.js} +2 -2
- package/dashboard/dist/assets/{controlplane-DGhv3rwI.js.map → controlplane-NpJr49rN.js.map} +1 -1
- package/dashboard/dist/assets/{escalation-ne7dIaPa.js → escalation-DrzQolPG.js} +2 -2
- package/dashboard/dist/assets/{escalation-ne7dIaPa.js.map → escalation-DrzQolPG.js.map} +1 -1
- package/dashboard/dist/assets/escalation-columns-QzwmtD60.js +2 -0
- package/dashboard/dist/assets/escalation-columns-QzwmtD60.js.map +1 -0
- package/dashboard/dist/assets/index-B5w4Gjyk.js +6 -0
- package/dashboard/dist/assets/index-B5w4Gjyk.js.map +1 -0
- package/dashboard/dist/assets/{index-CByjpYlU.js → index-BCT4kqGR.js} +2 -2
- package/dashboard/dist/assets/{index-CByjpYlU.js.map → index-BCT4kqGR.js.map} +1 -1
- package/dashboard/dist/assets/{index-CgyucK0e.js → index-C69XvBfg.js} +2 -2
- package/dashboard/dist/assets/{index-CgyucK0e.js.map → index-C69XvBfg.js.map} +1 -1
- package/dashboard/dist/assets/index-CHw4Fl0t.css +1 -0
- package/dashboard/dist/assets/index-C_NwHTMh.js +2 -0
- package/dashboard/dist/assets/index-C_NwHTMh.js.map +1 -0
- package/dashboard/dist/assets/{index-DgzgRTNg.js → index-Cq0trGqf.js} +2 -2
- package/dashboard/dist/assets/{index-DgzgRTNg.js.map → index-Cq0trGqf.js.map} +1 -1
- package/dashboard/dist/assets/{index-DPJW96d2.js → index-DE0r9SEX.js} +26 -26
- package/dashboard/dist/assets/index-DE0r9SEX.js.map +1 -0
- package/dashboard/dist/assets/{index-BTqhAT6p.js → index-DH_CiD0W.js} +2 -2
- package/dashboard/dist/assets/{index-BTqhAT6p.js.map → index-DH_CiD0W.js.map} +1 -1
- package/dashboard/dist/assets/{index-C2l4GcZ7.js → index-K23FdS-T.js} +3 -3
- package/dashboard/dist/assets/{index-C2l4GcZ7.js.map → index-K23FdS-T.js.map} +1 -1
- package/dashboard/dist/assets/index-f6K1UNrn.js +2 -0
- package/dashboard/dist/assets/index-f6K1UNrn.js.map +1 -0
- package/dashboard/dist/assets/{index-BbJuC9kg.js → index-qr1fndqM.js} +2 -2
- package/dashboard/dist/assets/{index-BbJuC9kg.js.map → index-qr1fndqM.js.map} +1 -1
- package/dashboard/dist/assets/index-vKTvJ_li.js +2 -0
- package/dashboard/dist/assets/index-vKTvJ_li.js.map +1 -0
- package/dashboard/dist/assets/{index-CQDn-bLr.js → index-y-3ODtEE.js} +2 -2
- package/dashboard/dist/assets/{index-CQDn-bLr.js.map → index-y-3ODtEE.js.map} +1 -1
- package/dashboard/dist/assets/{index-QxAYCJ1S.js → index-y56Ds-LB.js} +2 -2
- package/dashboard/dist/assets/{index-QxAYCJ1S.js.map → index-y56Ds-LB.js.map} +1 -1
- package/dashboard/dist/assets/{knowledge-DzRpsm3D.js → knowledge-DSSATOTX.js} +2 -2
- package/dashboard/dist/assets/{knowledge-DzRpsm3D.js.map → knowledge-DSSATOTX.js.map} +1 -1
- package/dashboard/dist/assets/{mcp-B1lc6nL4.js → mcp-CfJFVo5k.js} +2 -2
- package/dashboard/dist/assets/{mcp-B1lc6nL4.js.map → mcp-CfJFVo5k.js.map} +1 -1
- package/dashboard/dist/assets/{mcp-query-CXuweaN3.js → mcp-query-DKVx2Q-X.js} +2 -2
- package/dashboard/dist/assets/{mcp-query-CXuweaN3.js.map → mcp-query-DKVx2Q-X.js.map} +1 -1
- package/dashboard/dist/assets/{pipelines-D4VLWDvu.js → pipelines-BSWzE-6M.js} +2 -2
- package/dashboard/dist/assets/{pipelines-D4VLWDvu.js.map → pipelines-BSWzE-6M.js.map} +1 -1
- package/dashboard/dist/assets/{roles-CSpHRRu8.js → roles-t9HzhI5N.js} +2 -2
- package/dashboard/dist/assets/{roles-CSpHRRu8.js.map → roles-t9HzhI5N.js.map} +1 -1
- package/dashboard/dist/assets/{tasks-CWUsKhM4.js → tasks-B7rUihoH.js} +2 -2
- package/dashboard/dist/assets/{tasks-CWUsKhM4.js.map → tasks-B7rUihoH.js.map} +1 -1
- package/dashboard/dist/assets/{topics-BXwstrzB.js → topics-PC2fEiyD.js} +2 -2
- package/dashboard/dist/assets/{topics-BXwstrzB.js.map → topics-PC2fEiyD.js.map} +1 -1
- package/dashboard/dist/assets/useDebouncedValue-BA5S7V54.js +2 -0
- package/dashboard/dist/assets/useDebouncedValue-BA5S7V54.js.map +1 -0
- package/dashboard/dist/assets/{useEventHooks-CjygrbYy.js → useEventHooks-DK9mw1cI.js} +2 -2
- package/dashboard/dist/assets/{useEventHooks-CjygrbYy.js.map → useEventHooks-DK9mw1cI.js.map} +1 -1
- package/dashboard/dist/assets/{useNamespace-CsepDyR5.js → useNamespace-3IjtUtAw.js} +2 -2
- package/dashboard/dist/assets/{useNamespace-CsepDyR5.js.map → useNamespace-3IjtUtAw.js.map} +1 -1
- package/dashboard/dist/assets/{useYamlActivityEvents-gWIG6akB.js → useYamlActivityEvents-uxukp3gO.js} +2 -2
- package/dashboard/dist/assets/{useYamlActivityEvents-gWIG6akB.js.map → useYamlActivityEvents-uxukp3gO.js.map} +1 -1
- package/dashboard/dist/assets/users-CC4B5Fm5.js +2 -0
- package/dashboard/dist/assets/users-CC4B5Fm5.js.map +1 -0
- package/dashboard/dist/assets/{vendor-icons-Dj2F0Jrb.js → vendor-icons-Dy5Jpknf.js} +114 -109
- package/dashboard/dist/assets/vendor-icons-Dy5Jpknf.js.map +1 -0
- package/dashboard/dist/assets/{workflows-C7Cam2Ok.js → workflows-S7MF1nNk.js} +2 -2
- package/dashboard/dist/assets/{workflows-C7Cam2Ok.js.map → workflows-S7MF1nNk.js.map} +1 -1
- package/dashboard/dist/assets/{yaml-workflows-ChUOE22W.js → yaml-workflows-WfdaMHNn.js} +2 -2
- package/dashboard/dist/assets/{yaml-workflows-ChUOE22W.js.map → yaml-workflows-WfdaMHNn.js.map} +1 -1
- package/dashboard/dist/index.html +3 -3
- package/docs/api/http/escalations.md +131 -10
- package/docs/api/http/roles.md +44 -9
- package/docs/api/http/users.md +15 -6
- package/docs/api/mcp/admin.md +164 -14
- package/docs/api/mcp/human-queue.md +34 -2
- package/docs/api/sdk/escalations.md +155 -2
- package/docs/api/sdk/roles.md +11 -0
- package/docs/api/sdk/users.md +26 -1
- package/docs/auth.md +1 -1
- package/docs/dashboard.md +5 -4
- package/docs/data.md +9 -2
- package/docs/faceted-routing.md +221 -0
- package/docs/hitl-guide.md +50 -0
- package/docs/iam.md +31 -0
- package/docs/mcp.md +8 -0
- package/package.json +2 -2
- package/dashboard/dist/assets/AdminDashboard-DZpduYdW.js +0 -2
- package/dashboard/dist/assets/AgentDetailPage-C-2iSaDs.js +0 -4
- package/dashboard/dist/assets/AgentDetailPage-C-2iSaDs.js.map +0 -1
- package/dashboard/dist/assets/AgentsPage-C3FztFd_.js +0 -2
- package/dashboard/dist/assets/AgentsPage-C3FztFd_.js.map +0 -1
- package/dashboard/dist/assets/AvailableEscalationsPage-DIqdBCwe.js +0 -2
- package/dashboard/dist/assets/AvailableEscalationsPage-DIqdBCwe.js.map +0 -1
- package/dashboard/dist/assets/CapabilitiesPage-DTfKCzBQ.js +0 -2
- package/dashboard/dist/assets/CopyableId-DaT0ZRHg.js +0 -2
- package/dashboard/dist/assets/CopyableId-DaT0ZRHg.js.map +0 -1
- package/dashboard/dist/assets/McpQueryPage-Db1LUKVs.js +0 -2
- package/dashboard/dist/assets/McpQueryPage-Db1LUKVs.js.map +0 -1
- package/dashboard/dist/assets/McpRunsPage--tgT5uo7.js +0 -2
- package/dashboard/dist/assets/McpRunsPage--tgT5uo7.js.map +0 -1
- package/dashboard/dist/assets/OperatorDashboard-BWVUbJkZ.js +0 -2
- package/dashboard/dist/assets/OperatorDashboard-BWVUbJkZ.js.map +0 -1
- package/dashboard/dist/assets/PageHeader-Bnt2iQQa.js +0 -2
- package/dashboard/dist/assets/PageHeader-Bnt2iQQa.js.map +0 -1
- package/dashboard/dist/assets/PriorityBadge-DfQY9St9.js +0 -2
- package/dashboard/dist/assets/PriorityBadge-DfQY9St9.js.map +0 -1
- package/dashboard/dist/assets/ProcessesListPage-CWiRM_h3.js +0 -2
- package/dashboard/dist/assets/ProcessesListPage-CWiRM_h3.js.map +0 -1
- package/dashboard/dist/assets/RolePill-DQTT1s9v.js +0 -2
- package/dashboard/dist/assets/RolePill-DQTT1s9v.js.map +0 -1
- package/dashboard/dist/assets/RowActions-Dg-Fsm5O.js +0 -2
- package/dashboard/dist/assets/RowActions-Dg-Fsm5O.js.map +0 -1
- package/dashboard/dist/assets/StreamMessageDetail-BF0tM0cd.js +0 -2
- package/dashboard/dist/assets/WorkflowsDashboard-M13lIaw7.js +0 -2
- package/dashboard/dist/assets/WorkflowsDashboard-M13lIaw7.js.map +0 -1
- package/dashboard/dist/assets/escalation-columns-DqTkKbCv.js +0 -2
- package/dashboard/dist/assets/escalation-columns-DqTkKbCv.js.map +0 -1
- package/dashboard/dist/assets/index-CEpw_Fh8.js +0 -2
- package/dashboard/dist/assets/index-CEpw_Fh8.js.map +0 -1
- package/dashboard/dist/assets/index-ClvYSNZd.css +0 -1
- package/dashboard/dist/assets/index-CucXk58o.js +0 -6
- package/dashboard/dist/assets/index-CucXk58o.js.map +0 -1
- package/dashboard/dist/assets/index-DPJW96d2.js.map +0 -1
- package/dashboard/dist/assets/index-DeZhNCf5.js +0 -2
- package/dashboard/dist/assets/index-DeZhNCf5.js.map +0 -1
- package/dashboard/dist/assets/index-Do8Xp3pa.js +0 -2
- package/dashboard/dist/assets/index-Do8Xp3pa.js.map +0 -1
- package/dashboard/dist/assets/users-DvhHbR0R.js +0 -2
- package/dashboard/dist/assets/users-DvhHbR0R.js.map +0 -1
- package/dashboard/dist/assets/vendor-icons-Dj2F0Jrb.js.map +0 -1
|
@@ -2,15 +2,16 @@
|
|
|
2
2
|
* Diagnostics tools — mirrors routes/diagnostics.ts. Pure read-only.
|
|
3
3
|
*
|
|
4
4
|
* Three tools:
|
|
5
|
-
* diagnose_job —
|
|
5
|
+
* diagnose_job — per-job verdict (compact by default; opt into events/streams)
|
|
6
6
|
* find_stalled_jobs — fleet-level: running jobs with no recent status change
|
|
7
7
|
* find_orphaned_signals — fleet-level: suspended waiters with no escalation row
|
|
8
8
|
*
|
|
9
9
|
* Efficient usage: start fleet-wide (find_orphaned_signals for the genuinely
|
|
10
10
|
* broken case, find_stalled_jobs for candidates), then call diagnose_job on a
|
|
11
|
-
* specific id for root cause — do not fan diagnose_job across every job.
|
|
12
|
-
*
|
|
13
|
-
*
|
|
11
|
+
* specific id for root cause — do not fan diagnose_job across every job.
|
|
12
|
+
* diagnose_job returns the verdict only by default; add include: ['events'] or
|
|
13
|
+
* ['streams'] for the heavy arrays. For full raw message payloads, use the
|
|
14
|
+
* stream browser (list_stream_messages filtered by jid).
|
|
14
15
|
*/
|
|
15
16
|
import { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';
|
|
16
17
|
export declare function registerDiagnosticsTools(server: McpServer): void;
|
|
@@ -39,21 +39,23 @@ const schemas_1 = require("./schemas");
|
|
|
39
39
|
function registerDiagnosticsTools(server) {
|
|
40
40
|
server.registerTool('diagnose_job', {
|
|
41
41
|
title: 'Diagnose Job',
|
|
42
|
-
description: 'Read-only diagnosis for a single workflow job.
|
|
43
|
-
'
|
|
44
|
-
'
|
|
45
|
-
'
|
|
46
|
-
'
|
|
47
|
-
'cannot be unwound). ' +
|
|
42
|
+
description: 'Read-only diagnosis for a single workflow job. Compact by default — returns the ' +
|
|
43
|
+
'verdict only: status, idle_for_ms, workflow_type, stream_summary (counts), the ' +
|
|
44
|
+
'escalation row from hmsh_escalations, and structured findings[] with confidence, ' +
|
|
45
|
+
'evidence, and read-only guidance (where to look next — never recovery; HotMesh ' +
|
|
46
|
+
'state cannot be unwound). ' +
|
|
48
47
|
'A workflow sitting at a condition()/waitFor()/sleepFor() for a long time is ' +
|
|
49
48
|
'classified as a healthy wait, not a fault — only dead-letter, reservation-leak, ' +
|
|
50
49
|
'or a suspended-waiter-with-no-escalation indicate a real problem. ' +
|
|
51
|
-
'
|
|
52
|
-
'
|
|
53
|
-
'
|
|
50
|
+
'To opt into the heavy arrays pass include: ["events"] for the execution timeline ' +
|
|
51
|
+
'(capped by max_events, default 500) and/or include: ["streams"] for raw engine+worker ' +
|
|
52
|
+
'messages; large result/message payloads are summarized to {bytes,preview,truncated}. ' +
|
|
53
|
+
'For full untruncated payloads use list_stream_messages filtered by jid (returned in ' +
|
|
54
|
+
'raw_messages). Call find_orphaned_signals / find_stalled_jobs first to surface IDs, ' +
|
|
55
|
+
'then this per job.',
|
|
54
56
|
inputSchema: schemas_1.diagnoseJobSchema,
|
|
55
57
|
}, async (args) => {
|
|
56
|
-
const result = await api.diagnose({ workflowId: args.workflow_id, appId: args.app_id, maxEvents: args.max_events });
|
|
58
|
+
const result = await api.diagnose({ workflowId: args.workflow_id, appId: args.app_id, maxEvents: args.max_events, include: args.include, verbosity: args.verbosity });
|
|
57
59
|
if (result.error) {
|
|
58
60
|
return { content: [{ type: 'text', text: JSON.stringify({ error: result.error }) }], isError: true };
|
|
59
61
|
}
|
|
@@ -1,5 +1,11 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Escalation tools — mirrors routes/escalations/
|
|
3
|
+
*
|
|
4
|
+
* Every tool runs as the `lt-system` bot. The escalation RBAC helpers
|
|
5
|
+
* (getVisibleRoles / getUserRoles / hasGlobalEscalationAccess) query a uuid
|
|
6
|
+
* column, so the bot's external_id string ('lt-system') would blow up with
|
|
7
|
+
* `invalid input syntax for type uuid`. `systemAuth()` resolves the bot's real
|
|
8
|
+
* UUID once and caches it; that UUID (a superadmin) is passed as the principal.
|
|
3
9
|
*/
|
|
4
10
|
import { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';
|
|
5
11
|
export declare function registerEscalationTools(server: McpServer): void;
|
|
@@ -35,47 +35,120 @@ var __importStar = (this && this.__importStar) || (function () {
|
|
|
35
35
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
36
36
|
exports.registerEscalationTools = registerEscalationTools;
|
|
37
37
|
const escalationService = __importStar(require("../../../services/escalation"));
|
|
38
|
+
const escalationApi = __importStar(require("../../../api/escalations"));
|
|
38
39
|
const escalationMetaApi = __importStar(require("../../../api/escalations/metadata"));
|
|
39
40
|
const escalationBulkApi = __importStar(require("../../../api/escalations/bulk"));
|
|
41
|
+
const iam_1 = require("../../../services/iam");
|
|
40
42
|
const schemas_1 = require("./schemas");
|
|
43
|
+
let systemPrincipalId = null;
|
|
44
|
+
/**
|
|
45
|
+
* Resolve (and cache) the lt-system bot's real UUID. The escalation RBAC helpers
|
|
46
|
+
* query the uuid `user_id` column, so the external_id string 'lt-system' would
|
|
47
|
+
* raise `invalid input syntax for type uuid`. The bot is a superadmin, so it has
|
|
48
|
+
* global escalation access.
|
|
49
|
+
*/
|
|
50
|
+
async function systemAuth() {
|
|
51
|
+
if (!systemPrincipalId)
|
|
52
|
+
systemPrincipalId = await (0, iam_1.ensureSystemBot)();
|
|
53
|
+
return { userId: systemPrincipalId, role: 'superadmin' };
|
|
54
|
+
}
|
|
55
|
+
/** Project the full escalation record to the MCP-facing shape, including metadata. */
|
|
56
|
+
function projectEscalation(e) {
|
|
57
|
+
return {
|
|
58
|
+
id: e.id,
|
|
59
|
+
type: e.type,
|
|
60
|
+
subtype: e.subtype,
|
|
61
|
+
role: e.role,
|
|
62
|
+
priority: e.priority,
|
|
63
|
+
status: e.status,
|
|
64
|
+
description: e.description,
|
|
65
|
+
workflow_id: e.workflow_id,
|
|
66
|
+
workflow_type: e.workflow_type,
|
|
67
|
+
assigned_to: e.assigned_to,
|
|
68
|
+
assigned_until: e.assigned_until,
|
|
69
|
+
signal_key: e.signal_key,
|
|
70
|
+
metadata: e.metadata,
|
|
71
|
+
created_at: e.created_at,
|
|
72
|
+
updated_at: e.updated_at,
|
|
73
|
+
};
|
|
74
|
+
}
|
|
41
75
|
function registerEscalationTools(server) {
|
|
76
|
+
// ── Read-only ───────────────────────────────────────────────────────────────
|
|
42
77
|
// mirrors GET /api/escalations
|
|
43
78
|
server.registerTool('find_escalations', {
|
|
44
79
|
title: 'Find Escalations',
|
|
45
|
-
description: 'Search escalations with optional filters
|
|
46
|
-
'
|
|
80
|
+
description: 'Search escalations with optional filters (status, role, type, subtype, ' +
|
|
81
|
+
'assigned_to, priority), free-text `search`, and sorting. `search` matches ' +
|
|
82
|
+
'across description, type/subtype, role, workflow/origin id, and metadata values ' +
|
|
83
|
+
'(e.g. a correlation key like an order id) server-side over the full result set. ' +
|
|
84
|
+
'Also supports FACETED metadata query — `facets` (metadata @> containment), `block` ' +
|
|
85
|
+
'(exclusion), `range` (numeric), `exists` (key present), `roles`, `available`, and ' +
|
|
86
|
+
'`orderBy` (incl. metadata.<key>) — all role-scoped and run in SQL. ' +
|
|
87
|
+
'Returns full records including metadata, workflow linkage, assignment, and signal_key.',
|
|
47
88
|
inputSchema: schemas_1.findEscalationsSchema,
|
|
48
89
|
}, async (args) => {
|
|
49
|
-
const
|
|
90
|
+
const result = await escalationApi.listEscalations({
|
|
50
91
|
status: args.status,
|
|
51
92
|
role: args.role,
|
|
52
93
|
type: args.type,
|
|
94
|
+
subtype: args.subtype,
|
|
95
|
+
assigned_to: args.assigned_to,
|
|
96
|
+
search: args.search,
|
|
53
97
|
priority: args.priority,
|
|
54
98
|
limit: args.limit,
|
|
55
99
|
offset: args.offset,
|
|
56
|
-
|
|
100
|
+
sort_by: args.sort_by,
|
|
101
|
+
order: args.order,
|
|
102
|
+
// Faceted metadata query (composes with role-scope in SQL).
|
|
103
|
+
roles: args.roles,
|
|
104
|
+
facets: args.facets,
|
|
105
|
+
block: args.block,
|
|
106
|
+
range: args.range,
|
|
107
|
+
exists: args.exists,
|
|
108
|
+
available: args.available,
|
|
109
|
+
orderBy: args.orderBy,
|
|
110
|
+
}, await systemAuth());
|
|
111
|
+
if (result.error) {
|
|
112
|
+
return { content: [{ type: 'text', text: JSON.stringify({ error: result.error }) }], isError: true };
|
|
113
|
+
}
|
|
114
|
+
const { escalations, total } = result.data;
|
|
57
115
|
return {
|
|
58
116
|
content: [{
|
|
59
117
|
type: 'text',
|
|
60
118
|
text: JSON.stringify({
|
|
61
119
|
total,
|
|
62
120
|
count: escalations.length,
|
|
63
|
-
escalations: escalations.map(
|
|
64
|
-
id: e.id,
|
|
65
|
-
type: e.type,
|
|
66
|
-
subtype: e.subtype,
|
|
67
|
-
role: e.role,
|
|
68
|
-
priority: e.priority,
|
|
69
|
-
status: e.status,
|
|
70
|
-
description: e.description,
|
|
71
|
-
workflow_type: e.workflow_type,
|
|
72
|
-
assigned_to: e.assigned_to,
|
|
73
|
-
created_at: e.created_at,
|
|
74
|
-
})),
|
|
121
|
+
escalations: escalations.map(projectEscalation),
|
|
75
122
|
}),
|
|
76
123
|
}],
|
|
77
124
|
};
|
|
78
125
|
});
|
|
126
|
+
// mirrors GET /api/escalations/:id
|
|
127
|
+
server.registerTool('get_escalation', {
|
|
128
|
+
title: 'Get Escalation',
|
|
129
|
+
description: 'Get a single escalation by ID — the full record including metadata, envelope ' +
|
|
130
|
+
'linkage, resolver/escalation payloads, signal_key, and assignment state.',
|
|
131
|
+
inputSchema: schemas_1.getEscalationSchema,
|
|
132
|
+
}, async (args) => {
|
|
133
|
+
const result = await escalationApi.getEscalation({ id: args.id }, await systemAuth());
|
|
134
|
+
if (result.error) {
|
|
135
|
+
return { content: [{ type: 'text', text: JSON.stringify({ error: result.error }) }], isError: true };
|
|
136
|
+
}
|
|
137
|
+
return { content: [{ type: 'text', text: JSON.stringify(result.data) }] };
|
|
138
|
+
});
|
|
139
|
+
// mirrors GET /api/escalations/by-workflow/:workflowId
|
|
140
|
+
server.registerTool('get_escalations_by_workflow', {
|
|
141
|
+
title: 'Get Escalations by Workflow',
|
|
142
|
+
description: 'List all escalations linked to a specific workflow ID, newest first. Returns ' +
|
|
143
|
+
'full records including metadata.',
|
|
144
|
+
inputSchema: schemas_1.getEscalationsByWorkflowSchema,
|
|
145
|
+
}, async (args) => {
|
|
146
|
+
const result = await escalationApi.getEscalationsByWorkflowId({ workflowId: args.workflow_id });
|
|
147
|
+
if (result.error) {
|
|
148
|
+
return { content: [{ type: 'text', text: JSON.stringify({ error: result.error }) }], isError: true };
|
|
149
|
+
}
|
|
150
|
+
return { content: [{ type: 'text', text: JSON.stringify(result.data) }] };
|
|
151
|
+
});
|
|
79
152
|
// mirrors GET /api/escalations/stats
|
|
80
153
|
server.registerTool('get_escalation_stats', {
|
|
81
154
|
title: 'Get Escalation Stats',
|
|
@@ -85,12 +158,23 @@ function registerEscalationTools(server) {
|
|
|
85
158
|
}, async (args) => {
|
|
86
159
|
const stats = await escalationService.getEscalationStats(undefined, args.period);
|
|
87
160
|
return {
|
|
88
|
-
content: [{
|
|
89
|
-
type: 'text',
|
|
90
|
-
text: JSON.stringify(stats),
|
|
91
|
-
}],
|
|
161
|
+
content: [{ type: 'text', text: JSON.stringify(stats) }],
|
|
92
162
|
};
|
|
93
163
|
});
|
|
164
|
+
// mirrors GET /api/escalations/by-metadata
|
|
165
|
+
server.registerTool('find_by_metadata', {
|
|
166
|
+
title: 'Find by Metadata',
|
|
167
|
+
description: 'Find escalations by a metadata key-value pair (e.g. a correlation key written ' +
|
|
168
|
+
'into metadata when the escalation was raised).',
|
|
169
|
+
inputSchema: schemas_1.findByMetadataSchema,
|
|
170
|
+
}, async (args) => {
|
|
171
|
+
const result = await escalationMetaApi.findByMetadata(args, await systemAuth());
|
|
172
|
+
if (result.error) {
|
|
173
|
+
return { content: [{ type: 'text', text: JSON.stringify({ error: result.error }) }], isError: true };
|
|
174
|
+
}
|
|
175
|
+
return { content: [{ type: 'text', text: JSON.stringify(result.data) }] };
|
|
176
|
+
});
|
|
177
|
+
// ── Read-write ────────────────────────────────────────────────────────────────
|
|
94
178
|
// mirrors POST /api/escalations/:id/claim
|
|
95
179
|
server.registerTool('claim_escalation', {
|
|
96
180
|
title: 'Claim Escalation',
|
|
@@ -99,23 +183,133 @@ function registerEscalationTools(server) {
|
|
|
99
183
|
'the escalation returns to the queue.',
|
|
100
184
|
inputSchema: schemas_1.claimEscalationSchema,
|
|
101
185
|
}, async (args) => {
|
|
102
|
-
const
|
|
103
|
-
if (
|
|
104
|
-
return {
|
|
105
|
-
content: [{ type: 'text', text: JSON.stringify({ error: 'Escalation not found' }) }],
|
|
106
|
-
isError: true,
|
|
107
|
-
};
|
|
186
|
+
const result = await escalationApi.claimEscalation({ id: args.id, durationMinutes: args.duration_minutes }, await systemAuth());
|
|
187
|
+
if (result.error) {
|
|
188
|
+
return { content: [{ type: 'text', text: JSON.stringify({ error: result.error }) }], isError: true };
|
|
108
189
|
}
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
190
|
+
return { content: [{ type: 'text', text: JSON.stringify(result.data) }] };
|
|
191
|
+
});
|
|
192
|
+
// mirrors POST /api/escalations/:id/release
|
|
193
|
+
server.registerTool('release_escalation', {
|
|
194
|
+
title: 'Release Escalation',
|
|
195
|
+
description: 'Release a claimed escalation back to the available pool. Reverses a ' +
|
|
196
|
+
'claim_escalation so another holder can pick it up.',
|
|
197
|
+
inputSchema: schemas_1.releaseEscalationSchema,
|
|
198
|
+
}, async (args) => {
|
|
199
|
+
const result = await escalationApi.releaseEscalation({ id: args.id }, await systemAuth());
|
|
200
|
+
if (result.error) {
|
|
201
|
+
return { content: [{ type: 'text', text: JSON.stringify({ error: result.error }) }], isError: true };
|
|
115
202
|
}
|
|
116
|
-
return {
|
|
117
|
-
|
|
118
|
-
|
|
203
|
+
return { content: [{ type: 'text', text: JSON.stringify(result.data) }] };
|
|
204
|
+
});
|
|
205
|
+
// mirrors POST /api/escalations/:id/resolve
|
|
206
|
+
server.registerTool('resolve_escalation', {
|
|
207
|
+
title: 'Resolve Escalation',
|
|
208
|
+
description: 'Resolve a pending escalation with a human-provided payload. Routes by escalation ' +
|
|
209
|
+
'shape: efficient (signal_key) escalations resume the waiting workflow in place; ' +
|
|
210
|
+
'legacy paths signal via routing metadata or re-run the original workflow. ' +
|
|
211
|
+
'Password fields in the payload are replaced with ephemeral tokens.',
|
|
212
|
+
inputSchema: schemas_1.resolveEscalationSchema,
|
|
213
|
+
}, async (args) => {
|
|
214
|
+
const result = await escalationApi.resolveEscalation({ id: args.id, resolverPayload: args.resolverPayload }, await systemAuth());
|
|
215
|
+
if (result.error) {
|
|
216
|
+
return { content: [{ type: 'text', text: JSON.stringify({ error: result.error }) }], isError: true };
|
|
217
|
+
}
|
|
218
|
+
return { content: [{ type: 'text', text: JSON.stringify(result.data) }] };
|
|
219
|
+
});
|
|
220
|
+
// mirrors POST /api/escalations/resolve-by-signal-key
|
|
221
|
+
server.registerTool('resolve_by_signal_key', {
|
|
222
|
+
title: 'Resolve by Signal Key',
|
|
223
|
+
description: 'Resolve an efficient (atomic) escalation directly by its signal_key and resume the ' +
|
|
224
|
+
'waiting workflow in place. For callers that know the deterministic signal id and want ' +
|
|
225
|
+
'to skip the id lookup.',
|
|
226
|
+
inputSchema: schemas_1.resolveBySignalKeySchema,
|
|
227
|
+
}, async (args) => {
|
|
228
|
+
const result = await escalationApi.resolveBySignalKey({ signalKey: args.signalKey, resolverPayload: args.resolverPayload }, await systemAuth());
|
|
229
|
+
if (result.error) {
|
|
230
|
+
return { content: [{ type: 'text', text: JSON.stringify({ error: result.error }) }], isError: true };
|
|
231
|
+
}
|
|
232
|
+
return { content: [{ type: 'text', text: JSON.stringify(result.data) }] };
|
|
233
|
+
});
|
|
234
|
+
// mirrors POST /api/escalations/resolve-by-ids
|
|
235
|
+
server.registerTool('resolve_by_ids', {
|
|
236
|
+
title: 'Resolve by IDs',
|
|
237
|
+
description: 'Resolve a SET of escalations by id in one guarded statement. RBAC-scoped: ' +
|
|
238
|
+
'callers may only resolve rows whose role they hold. For bookkeeping rows woken ' +
|
|
239
|
+
'collectively (no per-row signal delivery).',
|
|
240
|
+
inputSchema: schemas_1.resolveByIdsSchema,
|
|
241
|
+
}, async (args) => {
|
|
242
|
+
const result = await escalationApi.resolveByIds({ ids: args.ids, resolverPayload: args.resolverPayload, metadata: args.metadata }, await systemAuth());
|
|
243
|
+
if (result.error) {
|
|
244
|
+
return { content: [{ type: 'text', text: JSON.stringify({ error: result.error }) }], isError: true };
|
|
245
|
+
}
|
|
246
|
+
return { content: [{ type: 'text', text: JSON.stringify(result.data) }] };
|
|
247
|
+
});
|
|
248
|
+
// mirrors POST /api/escalations/search-by-facets
|
|
249
|
+
server.registerTool('search_by_facets', {
|
|
250
|
+
title: 'Search by Facets',
|
|
251
|
+
description: 'Faceted search over a pond, scoped to the caller\'s role. Filter by status, ' +
|
|
252
|
+
'availability, and metadata facets; sort by columns; page with limit/offset.',
|
|
253
|
+
inputSchema: schemas_1.searchByFacetsSchema,
|
|
254
|
+
}, async (args) => {
|
|
255
|
+
const result = await escalationApi.searchByFacets(args, await systemAuth());
|
|
256
|
+
if (result.error) {
|
|
257
|
+
return { content: [{ type: 'text', text: JSON.stringify({ error: result.error }) }], isError: true };
|
|
258
|
+
}
|
|
259
|
+
return { content: [{ type: 'text', text: JSON.stringify(result.data) }] };
|
|
260
|
+
});
|
|
261
|
+
// mirrors POST /api/escalations/claim-groups
|
|
262
|
+
server.registerTool('claim_groups', {
|
|
263
|
+
title: 'Claim Groups',
|
|
264
|
+
description: 'Batch-claim complete origin groups (orders) in priority order over a pond, ' +
|
|
265
|
+
'assigned to the calling principal. RBAC-scoped to the pond role.',
|
|
266
|
+
inputSchema: schemas_1.claimGroupsSchema,
|
|
267
|
+
}, async (args) => {
|
|
268
|
+
const result = await escalationApi.claimGroups({ query: args.query, limit: args.limit, durationMinutes: args.durationMinutes, sizeFacet: args.sizeFacet }, await systemAuth());
|
|
269
|
+
if (result.error) {
|
|
270
|
+
return { content: [{ type: 'text', text: JSON.stringify({ error: result.error }) }], isError: true };
|
|
271
|
+
}
|
|
272
|
+
return { content: [{ type: 'text', text: JSON.stringify(result.data) }] };
|
|
273
|
+
});
|
|
274
|
+
// mirrors POST /api/escalations/claim-by-facets
|
|
275
|
+
server.registerTool('claim_by_facets', {
|
|
276
|
+
title: 'Claim by Facets',
|
|
277
|
+
description: 'Batch-claim individual rows matching a facet query (FOR UPDATE SKIP LOCKED), ' +
|
|
278
|
+
'assigned to the calling principal. With allOrNone, commits only the full set. ' +
|
|
279
|
+
'RBAC-scoped to the pond role.',
|
|
280
|
+
inputSchema: schemas_1.claimByFacetsSchema,
|
|
281
|
+
}, async (args) => {
|
|
282
|
+
const result = await escalationApi.claimByFacets({ query: args.query, limit: args.limit, durationMinutes: args.durationMinutes, allOrNone: args.allOrNone }, await systemAuth());
|
|
283
|
+
if (result.error) {
|
|
284
|
+
return { content: [{ type: 'text', text: JSON.stringify({ error: result.error }) }], isError: true };
|
|
285
|
+
}
|
|
286
|
+
return { content: [{ type: 'text', text: JSON.stringify(result.data) }] };
|
|
287
|
+
});
|
|
288
|
+
// mirrors PATCH /api/escalations/:id/escalate
|
|
289
|
+
server.registerTool('escalate_escalation', {
|
|
290
|
+
title: 'Escalate Escalation',
|
|
291
|
+
description: 'Route a pending escalation to a different role (per the escalation chain). The new ' +
|
|
292
|
+
'role becomes responsible for resolving it.',
|
|
293
|
+
inputSchema: schemas_1.escalateEscalationSchema,
|
|
294
|
+
}, async (args) => {
|
|
295
|
+
const result = await escalationApi.escalateToRole({ id: args.id, targetRole: args.targetRole }, await systemAuth());
|
|
296
|
+
if (result.error) {
|
|
297
|
+
return { content: [{ type: 'text', text: JSON.stringify({ error: result.error }) }], isError: true };
|
|
298
|
+
}
|
|
299
|
+
return { content: [{ type: 'text', text: JSON.stringify(result.data) }] };
|
|
300
|
+
});
|
|
301
|
+
// mirrors POST /api/escalations/:id/cancel
|
|
302
|
+
server.registerTool('cancel_escalation', {
|
|
303
|
+
title: 'Cancel Escalation',
|
|
304
|
+
description: 'Permanently cancel a pending escalation — used when the tied workflow has ' +
|
|
305
|
+
'terminated and can never receive the resolution signal. Preserved for audit.',
|
|
306
|
+
inputSchema: schemas_1.cancelEscalationSchema,
|
|
307
|
+
}, async (args) => {
|
|
308
|
+
const result = await escalationApi.cancelSingleEscalation({ id: args.id }, await systemAuth());
|
|
309
|
+
if (result.error) {
|
|
310
|
+
return { content: [{ type: 'text', text: JSON.stringify({ error: result.error }) }], isError: true };
|
|
311
|
+
}
|
|
312
|
+
return { content: [{ type: 'text', text: JSON.stringify(result.data) }] };
|
|
119
313
|
});
|
|
120
314
|
// mirrors POST /api/escalations/release-expired
|
|
121
315
|
server.registerTool('release_expired_claims', {
|
|
@@ -148,26 +342,13 @@ function registerEscalationTools(server) {
|
|
|
148
342
|
}],
|
|
149
343
|
};
|
|
150
344
|
});
|
|
151
|
-
// ── Metadata-based operations ───────────────────────────────────────────────
|
|
152
|
-
// mirrors GET /api/escalations/by-metadata
|
|
153
|
-
server.registerTool('find_by_metadata', {
|
|
154
|
-
title: 'Find by Metadata',
|
|
155
|
-
description: 'Find escalations by a metadata key-value pair.',
|
|
156
|
-
inputSchema: schemas_1.findByMetadataSchema,
|
|
157
|
-
}, async (args) => {
|
|
158
|
-
const result = await escalationMetaApi.findByMetadata(args, { userId: 'lt-system' });
|
|
159
|
-
if (result.error) {
|
|
160
|
-
return { content: [{ type: 'text', text: JSON.stringify({ error: result.error }) }], isError: true };
|
|
161
|
-
}
|
|
162
|
-
return { content: [{ type: 'text', text: JSON.stringify(result.data) }] };
|
|
163
|
-
});
|
|
164
345
|
// mirrors POST /api/escalations/claim-by-metadata
|
|
165
346
|
server.registerTool('claim_by_metadata', {
|
|
166
347
|
title: 'Claim by Metadata',
|
|
167
348
|
description: 'Find and claim an escalation by metadata key-value pair.',
|
|
168
349
|
inputSchema: schemas_1.claimByMetadataSchema,
|
|
169
350
|
}, async (args) => {
|
|
170
|
-
const result = await escalationMetaApi.claimByMetadata(args,
|
|
351
|
+
const result = await escalationMetaApi.claimByMetadata(args, await systemAuth());
|
|
171
352
|
if (result.error) {
|
|
172
353
|
return { content: [{ type: 'text', text: JSON.stringify({ error: result.error }) }], isError: true };
|
|
173
354
|
}
|
|
@@ -179,7 +360,7 @@ function registerEscalationTools(server) {
|
|
|
179
360
|
description: 'Find and resolve an escalation by metadata key-value pair.',
|
|
180
361
|
inputSchema: schemas_1.resolveByMetadataSchema,
|
|
181
362
|
}, async (args) => {
|
|
182
|
-
const result = await escalationMetaApi.resolveByMetadata(args,
|
|
363
|
+
const result = await escalationMetaApi.resolveByMetadata(args, await systemAuth());
|
|
183
364
|
if (result.error) {
|
|
184
365
|
return { content: [{ type: 'text', text: JSON.stringify({ error: result.error }) }], isError: true };
|
|
185
366
|
}
|
|
@@ -192,7 +373,7 @@ function registerEscalationTools(server) {
|
|
|
192
373
|
description: 'Claim multiple escalations in a single operation.',
|
|
193
374
|
inputSchema: schemas_1.bulkClaimSchema,
|
|
194
375
|
}, async (args) => {
|
|
195
|
-
const result = await escalationBulkApi.bulkClaim(args,
|
|
376
|
+
const result = await escalationBulkApi.bulkClaim(args, await systemAuth());
|
|
196
377
|
if (result.error) {
|
|
197
378
|
return { content: [{ type: 'text', text: JSON.stringify({ error: result.error }) }], isError: true };
|
|
198
379
|
}
|
|
@@ -204,7 +385,7 @@ function registerEscalationTools(server) {
|
|
|
204
385
|
description: 'Assign multiple escalations to a specific user.',
|
|
205
386
|
inputSchema: schemas_1.bulkAssignSchema,
|
|
206
387
|
}, async (args) => {
|
|
207
|
-
const result = await escalationBulkApi.bulkAssign(args,
|
|
388
|
+
const result = await escalationBulkApi.bulkAssign(args, await systemAuth());
|
|
208
389
|
if (result.error) {
|
|
209
390
|
return { content: [{ type: 'text', text: JSON.stringify({ error: result.error }) }], isError: true };
|
|
210
391
|
}
|
|
@@ -216,7 +397,19 @@ function registerEscalationTools(server) {
|
|
|
216
397
|
description: 'Escalate multiple escalations to a different role.',
|
|
217
398
|
inputSchema: schemas_1.bulkEscalateSchema,
|
|
218
399
|
}, async (args) => {
|
|
219
|
-
const result = await escalationBulkApi.bulkEscalate(args,
|
|
400
|
+
const result = await escalationBulkApi.bulkEscalate(args, await systemAuth());
|
|
401
|
+
if (result.error) {
|
|
402
|
+
return { content: [{ type: 'text', text: JSON.stringify({ error: result.error }) }], isError: true };
|
|
403
|
+
}
|
|
404
|
+
return { content: [{ type: 'text', text: JSON.stringify(result.data) }] };
|
|
405
|
+
});
|
|
406
|
+
// mirrors POST /api/escalations/bulk-cancel
|
|
407
|
+
server.registerTool('bulk_cancel', {
|
|
408
|
+
title: 'Bulk Cancel',
|
|
409
|
+
description: 'Cancel multiple pending escalations in a single operation.',
|
|
410
|
+
inputSchema: schemas_1.bulkCancelSchema,
|
|
411
|
+
}, async (args) => {
|
|
412
|
+
const result = await escalationApi.bulkCancel(args, await systemAuth());
|
|
220
413
|
if (result.error) {
|
|
221
414
|
return { content: [{ type: 'text', text: JSON.stringify({ error: result.error }) }], isError: true };
|
|
222
415
|
}
|
|
@@ -228,7 +421,7 @@ function registerEscalationTools(server) {
|
|
|
228
421
|
description: 'Update the priority of multiple escalations.',
|
|
229
422
|
inputSchema: schemas_1.updatePrioritySchema,
|
|
230
423
|
}, async (args) => {
|
|
231
|
-
const result = await escalationBulkApi.updatePriority(args,
|
|
424
|
+
const result = await escalationBulkApi.updatePriority(args, await systemAuth());
|
|
232
425
|
if (result.error) {
|
|
233
426
|
return { content: [{ type: 'text', text: JSON.stringify({ error: result.error }) }], isError: true };
|
|
234
427
|
}
|
|
@@ -55,7 +55,7 @@ const settings_1 = require("./settings");
|
|
|
55
55
|
const exports_1 = require("./exports");
|
|
56
56
|
const overview_1 = require("./overview");
|
|
57
57
|
const diagnostics_1 = require("./diagnostics");
|
|
58
|
-
const TOOL_COUNT =
|
|
58
|
+
const TOOL_COUNT = 83;
|
|
59
59
|
let server = null;
|
|
60
60
|
async function createAdminServer(options) {
|
|
61
61
|
if (server && !options?.fresh)
|
|
@@ -66,7 +66,7 @@ async function createAdminServer(options) {
|
|
|
66
66
|
server = instance;
|
|
67
67
|
}
|
|
68
68
|
(0, tasks_1.registerTaskTools)(instance); // 2 tools
|
|
69
|
-
(0, escalations_1.registerEscalationTools)(instance); //
|
|
69
|
+
(0, escalations_1.registerEscalationTools)(instance); // 20 tools (RO + RW single + metadata + bulk)
|
|
70
70
|
(0, workflow_config_1.registerWorkflowConfigTools)(instance); // 3 tools
|
|
71
71
|
(0, workflows_1.registerWorkflowTools)(instance); // 3 tools
|
|
72
72
|
(0, mcp_servers_1.registerMcpServerTools)(instance); // 4 tools
|
|
@@ -83,7 +83,7 @@ async function createAdminServer(options) {
|
|
|
83
83
|
(0, exports_1.registerExportTools)(instance); // 4 tools
|
|
84
84
|
(0, overview_1.registerOverviewTools)(instance); // 1 tool
|
|
85
85
|
(0, diagnostics_1.registerDiagnosticsTools)(instance); // 3 tools
|
|
86
|
-
// Total:
|
|
86
|
+
// Total: 83
|
|
87
87
|
logger_1.loggerRegistry.info(`[lt-mcp:admin] ${name} ready (${TOOL_COUNT} tools registered)`);
|
|
88
88
|
return instance;
|
|
89
89
|
}
|