@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.
Files changed (350) hide show
  1. package/README.md +1 -0
  2. package/build/api/diagnostics.d.ts +5 -0
  3. package/build/api/diagnostics.js +5 -1
  4. package/build/api/escalations/bulk.js +9 -1
  5. package/build/api/escalations/cancel.js +5 -7
  6. package/build/api/escalations/claim.js +18 -15
  7. package/build/api/escalations/create.d.ts +6 -0
  8. package/build/api/escalations/create.js +11 -8
  9. package/build/api/escalations/facets.d.ts +18 -0
  10. package/build/api/escalations/facets.js +115 -0
  11. package/build/api/escalations/helpers.d.ts +70 -1
  12. package/build/api/escalations/helpers.js +101 -7
  13. package/build/api/escalations/index.d.ts +3 -2
  14. package/build/api/escalations/index.js +7 -1
  15. package/build/api/escalations/list.d.ts +23 -2
  16. package/build/api/escalations/list.js +111 -10
  17. package/build/api/escalations/metadata.js +22 -27
  18. package/build/api/escalations/resolve.d.ts +19 -1
  19. package/build/api/escalations/resolve.js +111 -26
  20. package/build/api/escalations/single.js +8 -8
  21. package/build/api/settings.d.ts +1 -1
  22. package/build/api/settings.js +3 -1
  23. package/build/api/users.d.ts +6 -0
  24. package/build/api/users.js +29 -1
  25. package/build/api/workflows/invocation.d.ts +6 -0
  26. package/build/api/workflows/invocation.js +6 -2
  27. package/build/bin/ltc.js +40 -0
  28. package/build/lib/cli/commands/escalations.d.ts +36 -0
  29. package/build/lib/cli/commands/escalations.js +98 -0
  30. package/build/lib/db/schemas/001_schema.sql +10 -5
  31. package/build/lib/db/schemas/012_lt_tasks_workflow_id_unique.sql +20 -0
  32. package/build/lib/db/schemas/013_role_scope.sql +37 -0
  33. package/build/modules/features.d.ts +19 -0
  34. package/build/modules/features.js +16 -0
  35. package/build/modules/version.d.ts +10 -5
  36. package/build/modules/version.js +27 -11
  37. package/build/routes/diagnostics.js +15 -2
  38. package/build/routes/escalations/facets.d.ts +7 -0
  39. package/build/routes/escalations/facets.js +81 -0
  40. package/build/routes/escalations/index.js +3 -0
  41. package/build/routes/escalations/list.js +48 -0
  42. package/build/routes/escalations/resolve.js +22 -4
  43. package/build/routes/users.js +9 -5
  44. package/build/routes/workflows/invocation.js +12 -4
  45. package/build/sdk/index.d.ts +35 -2
  46. package/build/sdk/index.js +7 -0
  47. package/build/services/diagnostics/index.d.ts +40 -6
  48. package/build/services/diagnostics/index.js +54 -5
  49. package/build/services/escalation/crud.d.ts +56 -6
  50. package/build/services/escalation/crud.js +102 -31
  51. package/build/services/escalation/facet-sql.d.ts +18 -0
  52. package/build/services/escalation/facet-sql.js +118 -0
  53. package/build/services/escalation/facets.d.ts +45 -0
  54. package/build/services/escalation/facets.js +218 -0
  55. package/build/services/escalation/index.d.ts +1 -0
  56. package/build/services/escalation/index.js +8 -1
  57. package/build/services/escalation/queries.d.ts +47 -0
  58. package/build/services/escalation/queries.js +185 -2
  59. package/build/services/escalation/sql.d.ts +15 -2
  60. package/build/services/escalation/sql.js +80 -3
  61. package/build/services/interceptor/activities/escalation.d.ts +2 -0
  62. package/build/services/interceptor/activities/escalation.js +1 -1
  63. package/build/services/interceptor/lifecycle.js +4 -0
  64. package/build/services/mcp/server-tools.js +10 -4
  65. package/build/services/orchestrator/condition.js +6 -2
  66. package/build/services/role/index.js +2 -3
  67. package/build/services/role/sql.d.ts +8 -0
  68. package/build/services/role/sql.js +17 -1
  69. package/build/services/task/crud.js +22 -14
  70. package/build/services/task/process.js +3 -21
  71. package/build/services/task/resolve.d.ts +5 -3
  72. package/build/services/task/resolve.js +9 -6
  73. package/build/services/task/sql.d.ts +30 -2
  74. package/build/services/task/sql.js +72 -2
  75. package/build/services/user/crud.d.ts +1 -0
  76. package/build/services/user/crud.js +29 -11
  77. package/build/services/user/index.d.ts +2 -1
  78. package/build/services/user/index.js +12 -1
  79. package/build/services/user/rbac.d.ts +18 -0
  80. package/build/services/user/rbac.js +27 -0
  81. package/build/services/user/roles.d.ts +7 -2
  82. package/build/services/user/roles.js +21 -5
  83. package/build/services/user/scope.d.ts +22 -0
  84. package/build/services/user/scope.js +50 -0
  85. package/build/services/user/seed-admin.js +34 -17
  86. package/build/services/user/sql.d.ts +18 -7
  87. package/build/services/user/sql.js +38 -13
  88. package/build/services/user/sso-provision.js +41 -24
  89. package/build/services/user/types.d.ts +9 -5
  90. package/build/start/adapters.js +3 -0
  91. package/build/system/mcp-servers/admin/diagnostics.d.ts +5 -4
  92. package/build/system/mcp-servers/admin/diagnostics.js +12 -10
  93. package/build/system/mcp-servers/admin/escalations.d.ts +6 -0
  94. package/build/system/mcp-servers/admin/escalations.js +247 -54
  95. package/build/system/mcp-servers/admin/index.js +3 -3
  96. package/build/system/mcp-servers/admin/schemas.d.ts +417 -3
  97. package/build/system/mcp-servers/admin/schemas.js +101 -5
  98. package/build/system/mcp-servers/admin/users.js +28 -2
  99. package/build/system/mcp-servers/admin/workflows.js +23 -12
  100. package/build/system/seed/tool-manifests-admin.d.ts +1324 -562
  101. package/build/system/seed/tool-manifests-admin.js +10 -2
  102. package/build/tsconfig.tsbuildinfo +1 -1
  103. package/build/types/envelope.d.ts +7 -0
  104. package/build/types/facets.d.ts +60 -0
  105. package/build/types/facets.js +10 -0
  106. package/build/types/index.d.ts +2 -1
  107. package/build/types/startup.d.ts +9 -0
  108. package/build/types/user.d.ts +11 -0
  109. package/dashboard/dist/assets/AdminDashboard-2CZ8py9X.js +2 -0
  110. package/dashboard/dist/assets/{AdminDashboard-DZpduYdW.js.map → AdminDashboard-2CZ8py9X.js.map} +1 -1
  111. package/dashboard/dist/assets/{AgentConfigPage-SFnHMIP6.js → AgentConfigPage-D68sodgo.js} +7 -7
  112. package/dashboard/dist/assets/{AgentConfigPage-SFnHMIP6.js.map → AgentConfigPage-D68sodgo.js.map} +1 -1
  113. package/dashboard/dist/assets/AgentDetailPage-BmhuWbKi.js +4 -0
  114. package/dashboard/dist/assets/AgentDetailPage-BmhuWbKi.js.map +1 -0
  115. package/dashboard/dist/assets/AgentsPage-C4SKQVeU.js +2 -0
  116. package/dashboard/dist/assets/AgentsPage-C4SKQVeU.js.map +1 -0
  117. package/dashboard/dist/assets/AvailableEscalationsPage-9RBEYwkt.js +2 -0
  118. package/dashboard/dist/assets/AvailableEscalationsPage-9RBEYwkt.js.map +1 -0
  119. package/dashboard/dist/assets/{BotPicker-Dse2jW4b.js → BotPicker-D-FvXJOM.js} +2 -2
  120. package/dashboard/dist/assets/{BotPicker-Dse2jW4b.js.map → BotPicker-D-FvXJOM.js.map} +1 -1
  121. package/dashboard/dist/assets/CapabilitiesPage-ByDf6WJr.js +2 -0
  122. package/dashboard/dist/assets/{CapabilitiesPage-DTfKCzBQ.js.map → CapabilitiesPage-ByDf6WJr.js.map} +1 -1
  123. package/dashboard/dist/assets/{CollapsibleSection-8vf38J6K.js → CollapsibleSection-BjGNYEvh.js} +2 -2
  124. package/dashboard/dist/assets/{CollapsibleSection-8vf38J6K.js.map → CollapsibleSection-BjGNYEvh.js.map} +1 -1
  125. package/dashboard/dist/assets/CopyableId-blg-gZvT.js +2 -0
  126. package/dashboard/dist/assets/CopyableId-blg-gZvT.js.map +1 -0
  127. package/dashboard/dist/assets/{CredentialsPage-7C4M-hrH.js → CredentialsPage-DvCA-wQN.js} +2 -2
  128. package/dashboard/dist/assets/{CredentialsPage-7C4M-hrH.js.map → CredentialsPage-DvCA-wQN.js.map} +1 -1
  129. package/dashboard/dist/assets/{CronLabel-DrGWtaSY.js → CronLabel-DBMurd_c.js} +2 -2
  130. package/dashboard/dist/assets/{CronLabel-DrGWtaSY.js.map → CronLabel-DBMurd_c.js.map} +1 -1
  131. package/dashboard/dist/assets/{CustomDurationPicker-Vcmr4LiR.js → CustomDurationPicker-DHflFoEa.js} +2 -2
  132. package/dashboard/dist/assets/{CustomDurationPicker-Vcmr4LiR.js.map → CustomDurationPicker-DHflFoEa.js.map} +1 -1
  133. package/dashboard/dist/assets/{DropZone-Dwpgbueb.js → DropZone-CUtdp99Z.js} +2 -2
  134. package/dashboard/dist/assets/{DropZone-Dwpgbueb.js.map → DropZone-CUtdp99Z.js.map} +1 -1
  135. package/dashboard/dist/assets/{ElapsedCell-BNexhR5d.js → ElapsedCell-CSjcVOpo.js} +2 -2
  136. package/dashboard/dist/assets/{ElapsedCell-BNexhR5d.js.map → ElapsedCell-CSjcVOpo.js.map} +1 -1
  137. package/dashboard/dist/assets/{EscalationsOverview-BI3DEwYP.js → EscalationsOverview-BUqRNJbK.js} +2 -2
  138. package/dashboard/dist/assets/{EscalationsOverview-BI3DEwYP.js.map → EscalationsOverview-BUqRNJbK.js.map} +1 -1
  139. package/dashboard/dist/assets/{EventTable-CwvX_L9t.js → EventTable-Chz-6XPE.js} +2 -2
  140. package/dashboard/dist/assets/{EventTable-CwvX_L9t.js.map → EventTable-Chz-6XPE.js.map} +1 -1
  141. package/dashboard/dist/assets/{GraphInvokePage-C-3b8WK0.js → GraphInvokePage-BXdgciWg.js} +2 -2
  142. package/dashboard/dist/assets/{GraphInvokePage-C-3b8WK0.js.map → GraphInvokePage-BXdgciWg.js.map} +1 -1
  143. package/dashboard/dist/assets/{HomePage-BS_-jcHr.js → HomePage-CEMxnk0r.js} +2 -2
  144. package/dashboard/dist/assets/{HomePage-BS_-jcHr.js.map → HomePage-CEMxnk0r.js.map} +1 -1
  145. package/dashboard/dist/assets/{ListToolbar-BH9rwQVE.js → ListToolbar-_73JCdbB.js} +2 -2
  146. package/dashboard/dist/assets/{ListToolbar-BH9rwQVE.js.map → ListToolbar-_73JCdbB.js.map} +1 -1
  147. package/dashboard/dist/assets/{McpOverview-C9iOdE7E.js → McpOverview-DfdqxhSz.js} +2 -2
  148. package/dashboard/dist/assets/{McpOverview-C9iOdE7E.js.map → McpOverview-DfdqxhSz.js.map} +1 -1
  149. package/dashboard/dist/assets/{McpQueryDetailPage-DMN-yqvJ.js → McpQueryDetailPage-DPAljieY.js} +2 -2
  150. package/dashboard/dist/assets/{McpQueryDetailPage-DMN-yqvJ.js.map → McpQueryDetailPage-DPAljieY.js.map} +1 -1
  151. package/dashboard/dist/assets/McpQueryPage-D5cSziYS.js +2 -0
  152. package/dashboard/dist/assets/McpQueryPage-D5cSziYS.js.map +1 -0
  153. package/dashboard/dist/assets/{McpRunDetailPage-Wb47sRvo.js → McpRunDetailPage-DwNb9wZg.js} +2 -2
  154. package/dashboard/dist/assets/{McpRunDetailPage-Wb47sRvo.js.map → McpRunDetailPage-DwNb9wZg.js.map} +1 -1
  155. package/dashboard/dist/assets/McpRunsPage-O5H6yStl.js +2 -0
  156. package/dashboard/dist/assets/McpRunsPage-O5H6yStl.js.map +1 -0
  157. package/dashboard/dist/assets/{NamespacePill-DnJl4Lre.js → NamespacePill-uW-xOedj.js} +2 -2
  158. package/dashboard/dist/assets/{NamespacePill-DnJl4Lre.js.map → NamespacePill-uW-xOedj.js.map} +1 -1
  159. package/dashboard/dist/assets/OperatorDashboard-DYw9Ekv5.js +2 -0
  160. package/dashboard/dist/assets/OperatorDashboard-DYw9Ekv5.js.map +1 -0
  161. package/dashboard/dist/assets/PageHeader-DVOZjBfL.js +2 -0
  162. package/dashboard/dist/assets/PageHeader-DVOZjBfL.js.map +1 -0
  163. package/dashboard/dist/assets/{PageHeaderWithStats-BuKc9MKt.js → PageHeaderWithStats-DtTpDHOd.js} +2 -2
  164. package/dashboard/dist/assets/{PageHeaderWithStats-BuKc9MKt.js.map → PageHeaderWithStats-DtTpDHOd.js.map} +1 -1
  165. package/dashboard/dist/assets/PriorityBadge-B4ykBH7f.js +2 -0
  166. package/dashboard/dist/assets/PriorityBadge-B4ykBH7f.js.map +1 -0
  167. package/dashboard/dist/assets/{ProcessDetailPage-CvPx-h8y.js → ProcessDetailPage-B0Dokcx9.js} +2 -2
  168. package/dashboard/dist/assets/{ProcessDetailPage-CvPx-h8y.js.map → ProcessDetailPage-B0Dokcx9.js.map} +1 -1
  169. package/dashboard/dist/assets/ProcessesListPage-Cc87WIjL.js +2 -0
  170. package/dashboard/dist/assets/ProcessesListPage-Cc87WIjL.js.map +1 -0
  171. package/dashboard/dist/assets/RolePill-BaW-30TC.js +2 -0
  172. package/dashboard/dist/assets/RolePill-BaW-30TC.js.map +1 -0
  173. package/dashboard/dist/assets/{RolesPage-W5ZjOHpg.js → RolesPage-cp6PiF08.js} +2 -2
  174. package/dashboard/dist/assets/{RolesPage-W5ZjOHpg.js.map → RolesPage-cp6PiF08.js.map} +1 -1
  175. package/dashboard/dist/assets/RowActions-BA9L9djf.js +2 -0
  176. package/dashboard/dist/assets/RowActions-BA9L9djf.js.map +1 -0
  177. package/dashboard/dist/assets/{RunAsSelector-CvxGTNGT.js → RunAsSelector-2LWkjSnO.js} +2 -2
  178. package/dashboard/dist/assets/{RunAsSelector-CvxGTNGT.js.map → RunAsSelector-2LWkjSnO.js.map} +1 -1
  179. package/dashboard/dist/assets/{StickyPagination-BWhFSr2d.js → StickyPagination-BQEm--kI.js} +2 -2
  180. package/dashboard/dist/assets/{StickyPagination-BWhFSr2d.js.map → StickyPagination-BQEm--kI.js.map} +1 -1
  181. package/dashboard/dist/assets/StreamMessageDetail-BTtw3GjX.js +2 -0
  182. package/dashboard/dist/assets/{StreamMessageDetail-BF0tM0cd.js.map → StreamMessageDetail-BTtw3GjX.js.map} +1 -1
  183. package/dashboard/dist/assets/{SwimlaneTimeline-Bv-KHY9s.js → SwimlaneTimeline-DdXxP4fO.js} +2 -2
  184. package/dashboard/dist/assets/{SwimlaneTimeline-Bv-KHY9s.js.map → SwimlaneTimeline-DdXxP4fO.js.map} +1 -1
  185. package/dashboard/dist/assets/{TagInput-B00uqhjX.js → TagInput-x9XTuqMb.js} +2 -2
  186. package/dashboard/dist/assets/{TagInput-B00uqhjX.js.map → TagInput-x9XTuqMb.js.map} +1 -1
  187. package/dashboard/dist/assets/{TaskDetailPage-Bzb_fuLy.js → TaskDetailPage-B8veYG4X.js} +2 -2
  188. package/dashboard/dist/assets/{TaskDetailPage-Bzb_fuLy.js.map → TaskDetailPage-B8veYG4X.js.map} +1 -1
  189. package/dashboard/dist/assets/{TaskQueuePill-CUsofm0X.js → TaskQueuePill-DSEQZ-HT.js} +2 -2
  190. package/dashboard/dist/assets/{TaskQueuePill-CUsofm0X.js.map → TaskQueuePill-DSEQZ-HT.js.map} +1 -1
  191. package/dashboard/dist/assets/{TasksListPage-CBezWaZL.js → TasksListPage-CsN1gZj5.js} +2 -2
  192. package/dashboard/dist/assets/{TasksListPage-CBezWaZL.js.map → TasksListPage-CsN1gZj5.js.map} +1 -1
  193. package/dashboard/dist/assets/{TimeAgo-CKHfTzat.js → TimeAgo-n182EcLx.js} +2 -2
  194. package/dashboard/dist/assets/{TimeAgo-CKHfTzat.js.map → TimeAgo-n182EcLx.js.map} +1 -1
  195. package/dashboard/dist/assets/{TimestampCell-Dsje8GH-.js → TimestampCell-2dlcQAfX.js} +2 -2
  196. package/dashboard/dist/assets/{TimestampCell-Dsje8GH-.js.map → TimestampCell-2dlcQAfX.js.map} +1 -1
  197. package/dashboard/dist/assets/{ToolPill-DjvedZSn.js → ToolPill-B_e4eT77.js} +2 -2
  198. package/dashboard/dist/assets/{ToolPill-DjvedZSn.js.map → ToolPill-B_e4eT77.js.map} +1 -1
  199. package/dashboard/dist/assets/{ToolTestPanel-3OcG18e5.js → ToolTestPanel-Bhnncc6M.js} +2 -2
  200. package/dashboard/dist/assets/{ToolTestPanel-3OcG18e5.js.map → ToolTestPanel-Bhnncc6M.js.map} +1 -1
  201. package/dashboard/dist/assets/{TopicDetailPage-DCtv91hH.js → TopicDetailPage-29lsNsqI.js} +3 -3
  202. package/dashboard/dist/assets/{TopicDetailPage-DCtv91hH.js.map → TopicDetailPage-29lsNsqI.js.map} +1 -1
  203. package/dashboard/dist/assets/{TopicsPage-DVGSNc_E.js → TopicsPage-KJ7_LAvo.js} +2 -2
  204. package/dashboard/dist/assets/{TopicsPage-DVGSNc_E.js.map → TopicsPage-KJ7_LAvo.js.map} +1 -1
  205. package/dashboard/dist/assets/{UserName-xHAgkk8M.js → UserName-CMoFi9zb.js} +2 -2
  206. package/dashboard/dist/assets/{UserName-xHAgkk8M.js.map → UserName-CMoFi9zb.js.map} +1 -1
  207. package/dashboard/dist/assets/{WorkflowExecutionPage-CWNxsS8a.js → WorkflowExecutionPage-Cymfx-Bp.js} +2 -2
  208. package/dashboard/dist/assets/{WorkflowExecutionPage-CWNxsS8a.js.map → WorkflowExecutionPage-Cymfx-Bp.js.map} +1 -1
  209. package/dashboard/dist/assets/{WorkflowPill-F1oKUzmc.js → WorkflowPill-B66_AnaY.js} +2 -2
  210. package/dashboard/dist/assets/{WorkflowPill-F1oKUzmc.js.map → WorkflowPill-B66_AnaY.js.map} +1 -1
  211. package/dashboard/dist/assets/WorkflowsDashboard-CqLN8spd.js +2 -0
  212. package/dashboard/dist/assets/WorkflowsDashboard-CqLN8spd.js.map +1 -0
  213. package/dashboard/dist/assets/{WorkflowsOverview-e7jWSj_n.js → WorkflowsOverview-0Rc2WT6q.js} +2 -2
  214. package/dashboard/dist/assets/{WorkflowsOverview-e7jWSj_n.js.map → WorkflowsOverview-0Rc2WT6q.js.map} +1 -1
  215. package/dashboard/dist/assets/{YamlWorkflowDetailPage-CdAeam76.js → YamlWorkflowDetailPage-CARQ7_LN.js} +2 -2
  216. package/dashboard/dist/assets/{YamlWorkflowDetailPage-CdAeam76.js.map → YamlWorkflowDetailPage-CARQ7_LN.js.map} +1 -1
  217. package/dashboard/dist/assets/{YamlWorkflowsPage-S_gKs2Di.js → YamlWorkflowsPage-B-7sz1nf.js} +2 -2
  218. package/dashboard/dist/assets/{YamlWorkflowsPage-S_gKs2Di.js.map → YamlWorkflowsPage-B-7sz1nf.js.map} +1 -1
  219. package/dashboard/dist/assets/{agents-JE4aL07D.js → agents-zM43d5Yf.js} +2 -2
  220. package/dashboard/dist/assets/{agents-JE4aL07D.js.map → agents-zM43d5Yf.js.map} +1 -1
  221. package/dashboard/dist/assets/api-path-u2Jf9QXS.js +2 -0
  222. package/dashboard/dist/assets/api-path-u2Jf9QXS.js.map +1 -0
  223. package/dashboard/dist/assets/{bots-cAzKkDtQ.js → bots-D5BasOGz.js} +2 -2
  224. package/dashboard/dist/assets/{bots-cAzKkDtQ.js.map → bots-D5BasOGz.js.map} +1 -1
  225. package/dashboard/dist/assets/{capabilities-RBFXLAXF.js → capabilities-BT3PW9CZ.js} +2 -2
  226. package/dashboard/dist/assets/{capabilities-RBFXLAXF.js.map → capabilities-BT3PW9CZ.js.map} +1 -1
  227. package/dashboard/dist/assets/{controlplane-DGhv3rwI.js → controlplane-NpJr49rN.js} +2 -2
  228. package/dashboard/dist/assets/{controlplane-DGhv3rwI.js.map → controlplane-NpJr49rN.js.map} +1 -1
  229. package/dashboard/dist/assets/{escalation-ne7dIaPa.js → escalation-DrzQolPG.js} +2 -2
  230. package/dashboard/dist/assets/{escalation-ne7dIaPa.js.map → escalation-DrzQolPG.js.map} +1 -1
  231. package/dashboard/dist/assets/escalation-columns-QzwmtD60.js +2 -0
  232. package/dashboard/dist/assets/escalation-columns-QzwmtD60.js.map +1 -0
  233. package/dashboard/dist/assets/index-B5w4Gjyk.js +6 -0
  234. package/dashboard/dist/assets/index-B5w4Gjyk.js.map +1 -0
  235. package/dashboard/dist/assets/{index-CByjpYlU.js → index-BCT4kqGR.js} +2 -2
  236. package/dashboard/dist/assets/{index-CByjpYlU.js.map → index-BCT4kqGR.js.map} +1 -1
  237. package/dashboard/dist/assets/{index-CgyucK0e.js → index-C69XvBfg.js} +2 -2
  238. package/dashboard/dist/assets/{index-CgyucK0e.js.map → index-C69XvBfg.js.map} +1 -1
  239. package/dashboard/dist/assets/index-CHw4Fl0t.css +1 -0
  240. package/dashboard/dist/assets/index-C_NwHTMh.js +2 -0
  241. package/dashboard/dist/assets/index-C_NwHTMh.js.map +1 -0
  242. package/dashboard/dist/assets/{index-DgzgRTNg.js → index-Cq0trGqf.js} +2 -2
  243. package/dashboard/dist/assets/{index-DgzgRTNg.js.map → index-Cq0trGqf.js.map} +1 -1
  244. package/dashboard/dist/assets/{index-DPJW96d2.js → index-DE0r9SEX.js} +26 -26
  245. package/dashboard/dist/assets/index-DE0r9SEX.js.map +1 -0
  246. package/dashboard/dist/assets/{index-BTqhAT6p.js → index-DH_CiD0W.js} +2 -2
  247. package/dashboard/dist/assets/{index-BTqhAT6p.js.map → index-DH_CiD0W.js.map} +1 -1
  248. package/dashboard/dist/assets/{index-C2l4GcZ7.js → index-K23FdS-T.js} +3 -3
  249. package/dashboard/dist/assets/{index-C2l4GcZ7.js.map → index-K23FdS-T.js.map} +1 -1
  250. package/dashboard/dist/assets/index-f6K1UNrn.js +2 -0
  251. package/dashboard/dist/assets/index-f6K1UNrn.js.map +1 -0
  252. package/dashboard/dist/assets/{index-BbJuC9kg.js → index-qr1fndqM.js} +2 -2
  253. package/dashboard/dist/assets/{index-BbJuC9kg.js.map → index-qr1fndqM.js.map} +1 -1
  254. package/dashboard/dist/assets/index-vKTvJ_li.js +2 -0
  255. package/dashboard/dist/assets/index-vKTvJ_li.js.map +1 -0
  256. package/dashboard/dist/assets/{index-CQDn-bLr.js → index-y-3ODtEE.js} +2 -2
  257. package/dashboard/dist/assets/{index-CQDn-bLr.js.map → index-y-3ODtEE.js.map} +1 -1
  258. package/dashboard/dist/assets/{index-QxAYCJ1S.js → index-y56Ds-LB.js} +2 -2
  259. package/dashboard/dist/assets/{index-QxAYCJ1S.js.map → index-y56Ds-LB.js.map} +1 -1
  260. package/dashboard/dist/assets/{knowledge-DzRpsm3D.js → knowledge-DSSATOTX.js} +2 -2
  261. package/dashboard/dist/assets/{knowledge-DzRpsm3D.js.map → knowledge-DSSATOTX.js.map} +1 -1
  262. package/dashboard/dist/assets/{mcp-B1lc6nL4.js → mcp-CfJFVo5k.js} +2 -2
  263. package/dashboard/dist/assets/{mcp-B1lc6nL4.js.map → mcp-CfJFVo5k.js.map} +1 -1
  264. package/dashboard/dist/assets/{mcp-query-CXuweaN3.js → mcp-query-DKVx2Q-X.js} +2 -2
  265. package/dashboard/dist/assets/{mcp-query-CXuweaN3.js.map → mcp-query-DKVx2Q-X.js.map} +1 -1
  266. package/dashboard/dist/assets/{pipelines-D4VLWDvu.js → pipelines-BSWzE-6M.js} +2 -2
  267. package/dashboard/dist/assets/{pipelines-D4VLWDvu.js.map → pipelines-BSWzE-6M.js.map} +1 -1
  268. package/dashboard/dist/assets/{roles-CSpHRRu8.js → roles-t9HzhI5N.js} +2 -2
  269. package/dashboard/dist/assets/{roles-CSpHRRu8.js.map → roles-t9HzhI5N.js.map} +1 -1
  270. package/dashboard/dist/assets/{tasks-CWUsKhM4.js → tasks-B7rUihoH.js} +2 -2
  271. package/dashboard/dist/assets/{tasks-CWUsKhM4.js.map → tasks-B7rUihoH.js.map} +1 -1
  272. package/dashboard/dist/assets/{topics-BXwstrzB.js → topics-PC2fEiyD.js} +2 -2
  273. package/dashboard/dist/assets/{topics-BXwstrzB.js.map → topics-PC2fEiyD.js.map} +1 -1
  274. package/dashboard/dist/assets/useDebouncedValue-BA5S7V54.js +2 -0
  275. package/dashboard/dist/assets/useDebouncedValue-BA5S7V54.js.map +1 -0
  276. package/dashboard/dist/assets/{useEventHooks-CjygrbYy.js → useEventHooks-DK9mw1cI.js} +2 -2
  277. package/dashboard/dist/assets/{useEventHooks-CjygrbYy.js.map → useEventHooks-DK9mw1cI.js.map} +1 -1
  278. package/dashboard/dist/assets/{useNamespace-CsepDyR5.js → useNamespace-3IjtUtAw.js} +2 -2
  279. package/dashboard/dist/assets/{useNamespace-CsepDyR5.js.map → useNamespace-3IjtUtAw.js.map} +1 -1
  280. package/dashboard/dist/assets/{useYamlActivityEvents-gWIG6akB.js → useYamlActivityEvents-uxukp3gO.js} +2 -2
  281. package/dashboard/dist/assets/{useYamlActivityEvents-gWIG6akB.js.map → useYamlActivityEvents-uxukp3gO.js.map} +1 -1
  282. package/dashboard/dist/assets/users-CC4B5Fm5.js +2 -0
  283. package/dashboard/dist/assets/users-CC4B5Fm5.js.map +1 -0
  284. package/dashboard/dist/assets/{vendor-icons-Dj2F0Jrb.js → vendor-icons-Dy5Jpknf.js} +114 -109
  285. package/dashboard/dist/assets/vendor-icons-Dy5Jpknf.js.map +1 -0
  286. package/dashboard/dist/assets/{workflows-C7Cam2Ok.js → workflows-S7MF1nNk.js} +2 -2
  287. package/dashboard/dist/assets/{workflows-C7Cam2Ok.js.map → workflows-S7MF1nNk.js.map} +1 -1
  288. package/dashboard/dist/assets/{yaml-workflows-ChUOE22W.js → yaml-workflows-WfdaMHNn.js} +2 -2
  289. package/dashboard/dist/assets/{yaml-workflows-ChUOE22W.js.map → yaml-workflows-WfdaMHNn.js.map} +1 -1
  290. package/dashboard/dist/index.html +3 -3
  291. package/docs/api/http/escalations.md +131 -10
  292. package/docs/api/http/roles.md +44 -9
  293. package/docs/api/http/users.md +15 -6
  294. package/docs/api/mcp/admin.md +164 -14
  295. package/docs/api/mcp/human-queue.md +34 -2
  296. package/docs/api/sdk/escalations.md +155 -2
  297. package/docs/api/sdk/roles.md +11 -0
  298. package/docs/api/sdk/users.md +26 -1
  299. package/docs/auth.md +1 -1
  300. package/docs/dashboard.md +5 -4
  301. package/docs/data.md +9 -2
  302. package/docs/faceted-routing.md +221 -0
  303. package/docs/hitl-guide.md +50 -0
  304. package/docs/iam.md +31 -0
  305. package/docs/mcp.md +8 -0
  306. package/package.json +2 -2
  307. package/dashboard/dist/assets/AdminDashboard-DZpduYdW.js +0 -2
  308. package/dashboard/dist/assets/AgentDetailPage-C-2iSaDs.js +0 -4
  309. package/dashboard/dist/assets/AgentDetailPage-C-2iSaDs.js.map +0 -1
  310. package/dashboard/dist/assets/AgentsPage-C3FztFd_.js +0 -2
  311. package/dashboard/dist/assets/AgentsPage-C3FztFd_.js.map +0 -1
  312. package/dashboard/dist/assets/AvailableEscalationsPage-DIqdBCwe.js +0 -2
  313. package/dashboard/dist/assets/AvailableEscalationsPage-DIqdBCwe.js.map +0 -1
  314. package/dashboard/dist/assets/CapabilitiesPage-DTfKCzBQ.js +0 -2
  315. package/dashboard/dist/assets/CopyableId-DaT0ZRHg.js +0 -2
  316. package/dashboard/dist/assets/CopyableId-DaT0ZRHg.js.map +0 -1
  317. package/dashboard/dist/assets/McpQueryPage-Db1LUKVs.js +0 -2
  318. package/dashboard/dist/assets/McpQueryPage-Db1LUKVs.js.map +0 -1
  319. package/dashboard/dist/assets/McpRunsPage--tgT5uo7.js +0 -2
  320. package/dashboard/dist/assets/McpRunsPage--tgT5uo7.js.map +0 -1
  321. package/dashboard/dist/assets/OperatorDashboard-BWVUbJkZ.js +0 -2
  322. package/dashboard/dist/assets/OperatorDashboard-BWVUbJkZ.js.map +0 -1
  323. package/dashboard/dist/assets/PageHeader-Bnt2iQQa.js +0 -2
  324. package/dashboard/dist/assets/PageHeader-Bnt2iQQa.js.map +0 -1
  325. package/dashboard/dist/assets/PriorityBadge-DfQY9St9.js +0 -2
  326. package/dashboard/dist/assets/PriorityBadge-DfQY9St9.js.map +0 -1
  327. package/dashboard/dist/assets/ProcessesListPage-CWiRM_h3.js +0 -2
  328. package/dashboard/dist/assets/ProcessesListPage-CWiRM_h3.js.map +0 -1
  329. package/dashboard/dist/assets/RolePill-DQTT1s9v.js +0 -2
  330. package/dashboard/dist/assets/RolePill-DQTT1s9v.js.map +0 -1
  331. package/dashboard/dist/assets/RowActions-Dg-Fsm5O.js +0 -2
  332. package/dashboard/dist/assets/RowActions-Dg-Fsm5O.js.map +0 -1
  333. package/dashboard/dist/assets/StreamMessageDetail-BF0tM0cd.js +0 -2
  334. package/dashboard/dist/assets/WorkflowsDashboard-M13lIaw7.js +0 -2
  335. package/dashboard/dist/assets/WorkflowsDashboard-M13lIaw7.js.map +0 -1
  336. package/dashboard/dist/assets/escalation-columns-DqTkKbCv.js +0 -2
  337. package/dashboard/dist/assets/escalation-columns-DqTkKbCv.js.map +0 -1
  338. package/dashboard/dist/assets/index-CEpw_Fh8.js +0 -2
  339. package/dashboard/dist/assets/index-CEpw_Fh8.js.map +0 -1
  340. package/dashboard/dist/assets/index-ClvYSNZd.css +0 -1
  341. package/dashboard/dist/assets/index-CucXk58o.js +0 -6
  342. package/dashboard/dist/assets/index-CucXk58o.js.map +0 -1
  343. package/dashboard/dist/assets/index-DPJW96d2.js.map +0 -1
  344. package/dashboard/dist/assets/index-DeZhNCf5.js +0 -2
  345. package/dashboard/dist/assets/index-DeZhNCf5.js.map +0 -1
  346. package/dashboard/dist/assets/index-Do8Xp3pa.js +0 -2
  347. package/dashboard/dist/assets/index-Do8Xp3pa.js.map +0 -1
  348. package/dashboard/dist/assets/users-DvhHbR0R.js +0 -2
  349. package/dashboard/dist/assets/users-DvhHbR0R.js.map +0 -1
  350. 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 — full per-job diagnosis: events + stream messages + findings
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. For
12
- * full raw message payloads, use the stream browser (list_stream_messages
13
- * filtered by jid), not diagnose_job, which returns a capped summary.
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. Combines the execution event ' +
43
- 'timeline (from exportWorkflowExecution) with the raw stream messages for that ' +
44
- 'job (engine + worker, including retry state and timing) and the escalation row ' +
45
- 'from hmsh_escalations. Returns structured findings[] with confidence, evidence, ' +
46
- 'and read-only guidance (where to look next — never recovery; HotMesh state ' +
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
- 'Events are capped (max_events, default 500); for full raw message payloads use ' +
52
- 'the stream browser (list_stream_messages filtered by jid). Call ' +
53
- 'find_orphaned_signals / find_stalled_jobs first to surface IDs, then this per job.',
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. Returns records with ' +
46
- 'type, role, priority, status, description, and assignment info.',
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 { escalations, total } = await escalationService.listEscalations({
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((e) => ({
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 escalation = await escalationService.getEscalation(args.id);
103
- if (!escalation) {
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
- const result = await escalationService.claimEscalation(args.id, 'lt-system', args.duration_minutes);
110
- if (!result) {
111
- return {
112
- content: [{ type: 'text', text: JSON.stringify({ error: 'Escalation not available for claim' }) }],
113
- isError: true,
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
- content: [{ type: 'text', text: JSON.stringify(result) }],
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, { userId: 'lt-system' });
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, { userId: 'lt-system' });
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, { userId: 'lt-system' });
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, { userId: 'lt-system' });
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, { userId: 'lt-system' });
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, { userId: 'lt-system' });
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 = 75;
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); // 12 tools (5 base + 7 metadata/bulk)
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: 75
86
+ // Total: 83
87
87
  logger_1.loggerRegistry.info(`[lt-mcp:admin] ${name} ready (${TOOL_COUNT} tools registered)`);
88
88
  return instance;
89
89
  }