@hotmeshio/long-tail 0.11.0 → 0.11.1

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 (230) hide show
  1. package/build/routes/mcp-endpoint.js +4 -1
  2. package/build/services/escalation/aggregate-validate.js +6 -0
  3. package/build/services/escalation/facet-sql.js +10 -0
  4. package/build/services/mcp/external-server.js +34 -26
  5. package/build/system/index.js +17 -0
  6. package/build/system/mcp-servers/admin/index.js +2 -4
  7. package/build/system/seed/tool-manifests-admin.d.ts +0 -1137
  8. package/build/system/seed/tool-manifests-admin.js +0 -5
  9. package/build/tsconfig.tsbuildinfo +1 -1
  10. package/build/types/facets.d.ts +8 -0
  11. package/dashboard/dist/assets/{AdminDashboard-DJ3LJQ09.js → AdminDashboard-D4ebrcNR.js} +2 -2
  12. package/dashboard/dist/assets/{AdminDashboard-DJ3LJQ09.js.map → AdminDashboard-D4ebrcNR.js.map} +1 -1
  13. package/dashboard/dist/assets/{AgentConfigPage-BMMvaD0z.js → AgentConfigPage-DP4KUuCX.js} +2 -2
  14. package/dashboard/dist/assets/{AgentConfigPage-BMMvaD0z.js.map → AgentConfigPage-DP4KUuCX.js.map} +1 -1
  15. package/dashboard/dist/assets/{AgentDetailPage-C6wfsnRe.js → AgentDetailPage-ktYiR1kq.js} +2 -2
  16. package/dashboard/dist/assets/{AgentDetailPage-C6wfsnRe.js.map → AgentDetailPage-ktYiR1kq.js.map} +1 -1
  17. package/dashboard/dist/assets/{AgentsPage-Cwqka7nE.js → AgentsPage-B4iqm4-h.js} +2 -2
  18. package/dashboard/dist/assets/{AgentsPage-Cwqka7nE.js.map → AgentsPage-B4iqm4-h.js.map} +1 -1
  19. package/dashboard/dist/assets/AvailableEscalationsPage-tL3mM1RG.js +2 -0
  20. package/dashboard/dist/assets/AvailableEscalationsPage-tL3mM1RG.js.map +1 -0
  21. package/dashboard/dist/assets/{BotPicker-BBkJBXZB.js → BotPicker-CLrJuHnW.js} +2 -2
  22. package/dashboard/dist/assets/{BotPicker-BBkJBXZB.js.map → BotPicker-CLrJuHnW.js.map} +1 -1
  23. package/dashboard/dist/assets/CapabilitiesPage-DG5V0tMT.js +2 -0
  24. package/dashboard/dist/assets/CapabilitiesPage-DG5V0tMT.js.map +1 -0
  25. package/dashboard/dist/assets/{CollapsibleSection-B3FsrHwH.js → CollapsibleSection-CvLHvVfU.js} +2 -2
  26. package/dashboard/dist/assets/{CollapsibleSection-B3FsrHwH.js.map → CollapsibleSection-CvLHvVfU.js.map} +1 -1
  27. package/dashboard/dist/assets/{CountdownTimer-B3nCqJdC.js → CountdownTimer-Co57-iLY.js} +2 -2
  28. package/dashboard/dist/assets/{CountdownTimer-B3nCqJdC.js.map → CountdownTimer-Co57-iLY.js.map} +1 -1
  29. package/dashboard/dist/assets/{CredentialsPage-Bv875IHe.js → CredentialsPage-qCJZ3rdi.js} +2 -2
  30. package/dashboard/dist/assets/{CredentialsPage-Bv875IHe.js.map → CredentialsPage-qCJZ3rdi.js.map} +1 -1
  31. package/dashboard/dist/assets/{CronLabel-CSzjWuwj.js → CronLabel-C3iKifDN.js} +2 -2
  32. package/dashboard/dist/assets/{CronLabel-CSzjWuwj.js.map → CronLabel-C3iKifDN.js.map} +1 -1
  33. package/dashboard/dist/assets/{CustomDurationPicker-CCpqf3e4.js → CustomDurationPicker-C-Szl4rU.js} +2 -2
  34. package/dashboard/dist/assets/{CustomDurationPicker-CCpqf3e4.js.map → CustomDurationPicker-C-Szl4rU.js.map} +1 -1
  35. package/dashboard/dist/assets/{DropZone-CJkk-U3o.js → DropZone-BWD9aGOz.js} +2 -2
  36. package/dashboard/dist/assets/{DropZone-CJkk-U3o.js.map → DropZone-BWD9aGOz.js.map} +1 -1
  37. package/dashboard/dist/assets/{ElapsedCell-WV6pUaKo.js → ElapsedCell-CamZk5o1.js} +2 -2
  38. package/dashboard/dist/assets/{ElapsedCell-WV6pUaKo.js.map → ElapsedCell-CamZk5o1.js.map} +1 -1
  39. package/dashboard/dist/assets/EntityTimelinePanel-CABCW2dS.js +2 -0
  40. package/dashboard/dist/assets/EntityTimelinePanel-CABCW2dS.js.map +1 -0
  41. package/dashboard/dist/assets/{EscalationListSchemaPage-CTQCALw4.js → EscalationListSchemaPage-BddDSfjl.js} +2 -2
  42. package/dashboard/dist/assets/{EscalationListSchemaPage-CTQCALw4.js.map → EscalationListSchemaPage-BddDSfjl.js.map} +1 -1
  43. package/dashboard/dist/assets/{EscalationSchemaPage-D_UgP0pv.js → EscalationSchemaPage-BRyCtw9R.js} +2 -2
  44. package/dashboard/dist/assets/{EscalationSchemaPage-D_UgP0pv.js.map → EscalationSchemaPage-BRyCtw9R.js.map} +1 -1
  45. package/dashboard/dist/assets/{EscalationsOverview-DuIUyxr0.js → EscalationsOverview-DUWYxJyD.js} +2 -2
  46. package/dashboard/dist/assets/{EscalationsOverview-DuIUyxr0.js.map → EscalationsOverview-DUWYxJyD.js.map} +1 -1
  47. package/dashboard/dist/assets/{EventTable-BV6unphX.js → EventTable-CtVuCgq6.js} +2 -2
  48. package/dashboard/dist/assets/{EventTable-BV6unphX.js.map → EventTable-CtVuCgq6.js.map} +1 -1
  49. package/dashboard/dist/assets/{FilterBar-DYFgzXNB.js → FilterBar-BYsBgOiE.js} +2 -2
  50. package/dashboard/dist/assets/{FilterBar-DYFgzXNB.js.map → FilterBar-BYsBgOiE.js.map} +1 -1
  51. package/dashboard/dist/assets/{GraphInvokePage-BGHVUipJ.js → GraphInvokePage-CA4skPN2.js} +2 -2
  52. package/dashboard/dist/assets/{GraphInvokePage-BGHVUipJ.js.map → GraphInvokePage-CA4skPN2.js.map} +1 -1
  53. package/dashboard/dist/assets/{HomePage-B-S2cK3E.js → HomePage-DwG-AnjQ.js} +2 -2
  54. package/dashboard/dist/assets/{HomePage-B-S2cK3E.js.map → HomePage-DwG-AnjQ.js.map} +1 -1
  55. package/dashboard/dist/assets/{ListToolbar-Bl7F3A28.js → ListToolbar-D86IN_hQ.js} +2 -2
  56. package/dashboard/dist/assets/{ListToolbar-Bl7F3A28.js.map → ListToolbar-D86IN_hQ.js.map} +1 -1
  57. package/dashboard/dist/assets/{McpOverview-_T9IsCD_.js → McpOverview-CoEHGseD.js} +2 -2
  58. package/dashboard/dist/assets/{McpOverview-_T9IsCD_.js.map → McpOverview-CoEHGseD.js.map} +1 -1
  59. package/dashboard/dist/assets/{McpQueryDetailPage-DtsVqKPw.js → McpQueryDetailPage-C9hMgJe1.js} +2 -2
  60. package/dashboard/dist/assets/{McpQueryDetailPage-DtsVqKPw.js.map → McpQueryDetailPage-C9hMgJe1.js.map} +1 -1
  61. package/dashboard/dist/assets/{McpQueryPage-DX5u-1bx.js → McpQueryPage-B20Zn4QX.js} +2 -2
  62. package/dashboard/dist/assets/{McpQueryPage-DX5u-1bx.js.map → McpQueryPage-B20Zn4QX.js.map} +1 -1
  63. package/dashboard/dist/assets/{McpRunDetailPage-BhcqqtYS.js → McpRunDetailPage-DDKHf-3R.js} +2 -2
  64. package/dashboard/dist/assets/{McpRunDetailPage-BhcqqtYS.js.map → McpRunDetailPage-DDKHf-3R.js.map} +1 -1
  65. package/dashboard/dist/assets/{McpRunsPage-L-1y8wnX.js → McpRunsPage-Puyn3iJr.js} +2 -2
  66. package/dashboard/dist/assets/{McpRunsPage-L-1y8wnX.js.map → McpRunsPage-Puyn3iJr.js.map} +1 -1
  67. package/dashboard/dist/assets/{NamespacePill-in1SLd0W.js → NamespacePill-C09QuOEz.js} +2 -2
  68. package/dashboard/dist/assets/{NamespacePill-in1SLd0W.js.map → NamespacePill-C09QuOEz.js.map} +1 -1
  69. package/dashboard/dist/assets/OperationsPage-Bsrt4XTL.js +3 -0
  70. package/dashboard/dist/assets/OperationsPage-Bsrt4XTL.js.map +1 -0
  71. package/dashboard/dist/assets/{OperatorDashboard-CIbDzOlh.js → OperatorDashboard-CXBbFLAL.js} +2 -2
  72. package/dashboard/dist/assets/{OperatorDashboard-CIbDzOlh.js.map → OperatorDashboard-CXBbFLAL.js.map} +1 -1
  73. package/dashboard/dist/assets/{PageHeader-BJgWMZtw.js → PageHeader-B7YJxa4o.js} +2 -2
  74. package/dashboard/dist/assets/{PageHeader-BJgWMZtw.js.map → PageHeader-B7YJxa4o.js.map} +1 -1
  75. package/dashboard/dist/assets/{PageHeaderWithStats-Ccio4vyG.js → PageHeaderWithStats-gT-5ovJh.js} +2 -2
  76. package/dashboard/dist/assets/{PageHeaderWithStats-Ccio4vyG.js.map → PageHeaderWithStats-gT-5ovJh.js.map} +1 -1
  77. package/dashboard/dist/assets/{PersonaDetailPage-BOaf0TW1.js → PersonaDetailPage-BN5xNDDX.js} +2 -2
  78. package/dashboard/dist/assets/{PersonaDetailPage-BOaf0TW1.js.map → PersonaDetailPage-BN5xNDDX.js.map} +1 -1
  79. package/dashboard/dist/assets/PersonasPage-Bdtv6HPZ.js +2 -0
  80. package/dashboard/dist/assets/PersonasPage-Bdtv6HPZ.js.map +1 -0
  81. package/dashboard/dist/assets/{ProcessDetailPage-DN9NqfeP.js → ProcessDetailPage-BMg70ZAJ.js} +2 -2
  82. package/dashboard/dist/assets/{ProcessDetailPage-DN9NqfeP.js.map → ProcessDetailPage-BMg70ZAJ.js.map} +1 -1
  83. package/dashboard/dist/assets/{ProcessesListPage-CfQEWaD4.js → ProcessesListPage-_KvdxGhL.js} +2 -2
  84. package/dashboard/dist/assets/{ProcessesListPage-CfQEWaD4.js.map → ProcessesListPage-_KvdxGhL.js.map} +1 -1
  85. package/dashboard/dist/assets/{RoleDetailPage-BC5HL7ls.js → RoleDetailPage-BM5BXc7j.js} +2 -2
  86. package/dashboard/dist/assets/{RoleDetailPage-BC5HL7ls.js.map → RoleDetailPage-BM5BXc7j.js.map} +1 -1
  87. package/dashboard/dist/assets/{RolePill-BNAP-uK6.js → RolePill-CtYI1_k1.js} +2 -2
  88. package/dashboard/dist/assets/{RolePill-BNAP-uK6.js.map → RolePill-CtYI1_k1.js.map} +1 -1
  89. package/dashboard/dist/assets/RolesPage-Bv23VmUi.js +2 -0
  90. package/dashboard/dist/assets/RolesPage-Bv23VmUi.js.map +1 -0
  91. package/dashboard/dist/assets/{RunAsSelector-twbuX7fB.js → RunAsSelector-D-Sjr7uB.js} +2 -2
  92. package/dashboard/dist/assets/{RunAsSelector-twbuX7fB.js.map → RunAsSelector-D-Sjr7uB.js.map} +1 -1
  93. package/dashboard/dist/assets/{ScanCodesPage-CPNg6K--.js → ScanCodesPage-s3OEMJno.js} +2 -2
  94. package/dashboard/dist/assets/{ScanCodesPage-CPNg6K--.js.map → ScanCodesPage-s3OEMJno.js.map} +1 -1
  95. package/dashboard/dist/assets/ScanSchemeDetailPage-D8WQkZmw.js +2 -0
  96. package/dashboard/dist/assets/ScanSchemeDetailPage-D8WQkZmw.js.map +1 -0
  97. package/dashboard/dist/assets/ScanStationPage-CkRQaH5G.js +2 -0
  98. package/dashboard/dist/assets/ScanStationPage-CkRQaH5G.js.map +1 -0
  99. package/dashboard/dist/assets/{ScopeBadge-BG7KkZ8Q.js → ScopeBadge-B76rOtA0.js} +2 -2
  100. package/dashboard/dist/assets/{ScopeBadge-BG7KkZ8Q.js.map → ScopeBadge-B76rOtA0.js.map} +1 -1
  101. package/dashboard/dist/assets/{StickyPagination-DIeYMPPd.js → StickyPagination-BpTIMOL5.js} +2 -2
  102. package/dashboard/dist/assets/{StickyPagination-DIeYMPPd.js.map → StickyPagination-BpTIMOL5.js.map} +1 -1
  103. package/dashboard/dist/assets/{StreamMessageDetail-gU4CUeQI.js → StreamMessageDetail-ChoWrZzO.js} +2 -2
  104. package/dashboard/dist/assets/{StreamMessageDetail-gU4CUeQI.js.map → StreamMessageDetail-ChoWrZzO.js.map} +1 -1
  105. package/dashboard/dist/assets/{SwimlaneTimeline-Br-nBA4l.js → SwimlaneTimeline-nmIqEuEH.js} +2 -2
  106. package/dashboard/dist/assets/{SwimlaneTimeline-Br-nBA4l.js.map → SwimlaneTimeline-nmIqEuEH.js.map} +1 -1
  107. package/dashboard/dist/assets/{TagInput-CvM5n6ww.js → TagInput-BQAPOp17.js} +2 -2
  108. package/dashboard/dist/assets/{TagInput-CvM5n6ww.js.map → TagInput-BQAPOp17.js.map} +1 -1
  109. package/dashboard/dist/assets/{TaskDetailPage-_9cr_R0u.js → TaskDetailPage-KajZD2Cp.js} +2 -2
  110. package/dashboard/dist/assets/{TaskDetailPage-_9cr_R0u.js.map → TaskDetailPage-KajZD2Cp.js.map} +1 -1
  111. package/dashboard/dist/assets/{TaskQueuePill-D4JPHXOq.js → TaskQueuePill-C2NImrwl.js} +2 -2
  112. package/dashboard/dist/assets/{TaskQueuePill-D4JPHXOq.js.map → TaskQueuePill-C2NImrwl.js.map} +1 -1
  113. package/dashboard/dist/assets/{TasksListPage-DVENC9Jp.js → TasksListPage-CiqSfapP.js} +2 -2
  114. package/dashboard/dist/assets/{TasksListPage-DVENC9Jp.js.map → TasksListPage-CiqSfapP.js.map} +1 -1
  115. package/dashboard/dist/assets/{TimeAgo-C9yYnOui.js → TimeAgo-ClauexJj.js} +2 -2
  116. package/dashboard/dist/assets/{TimeAgo-C9yYnOui.js.map → TimeAgo-ClauexJj.js.map} +1 -1
  117. package/dashboard/dist/assets/{TimestampCell-DoB8cYgw.js → TimestampCell-CXmbCnAJ.js} +2 -2
  118. package/dashboard/dist/assets/{TimestampCell-DoB8cYgw.js.map → TimestampCell-CXmbCnAJ.js.map} +1 -1
  119. package/dashboard/dist/assets/{ToolPill-BUjbC-Tj.js → ToolPill-FOZm67TS.js} +2 -2
  120. package/dashboard/dist/assets/{ToolPill-BUjbC-Tj.js.map → ToolPill-FOZm67TS.js.map} +1 -1
  121. package/dashboard/dist/assets/{ToolTestPanel-CBtsIP8K.js → ToolTestPanel-DFUU0zGv.js} +2 -2
  122. package/dashboard/dist/assets/{ToolTestPanel-CBtsIP8K.js.map → ToolTestPanel-DFUU0zGv.js.map} +1 -1
  123. package/dashboard/dist/assets/{TopicDetailPage-mR4Jaz83.js → TopicDetailPage-DuN5BrsI.js} +2 -2
  124. package/dashboard/dist/assets/{TopicDetailPage-mR4Jaz83.js.map → TopicDetailPage-DuN5BrsI.js.map} +1 -1
  125. package/dashboard/dist/assets/{TopicsPage-CP7HFxIC.js → TopicsPage-DZ1NQdYG.js} +2 -2
  126. package/dashboard/dist/assets/{TopicsPage-CP7HFxIC.js.map → TopicsPage-DZ1NQdYG.js.map} +1 -1
  127. package/dashboard/dist/assets/{UserName-BnLF6yhz.js → UserName-BPHG_MQs.js} +2 -2
  128. package/dashboard/dist/assets/{UserName-BnLF6yhz.js.map → UserName-BPHG_MQs.js.map} +1 -1
  129. package/dashboard/dist/assets/{WorkflowExecutionPage-xL956RZi.js → WorkflowExecutionPage-D_Z-tIjR.js} +2 -2
  130. package/dashboard/dist/assets/{WorkflowExecutionPage-xL956RZi.js.map → WorkflowExecutionPage-D_Z-tIjR.js.map} +1 -1
  131. package/dashboard/dist/assets/{WorkflowPill-tXU0-eXu.js → WorkflowPill-C5TEWlfO.js} +2 -2
  132. package/dashboard/dist/assets/{WorkflowPill-tXU0-eXu.js.map → WorkflowPill-C5TEWlfO.js.map} +1 -1
  133. package/dashboard/dist/assets/{WorkflowsDashboard-B-u7zFKM.js → WorkflowsDashboard-VMBW1WuR.js} +2 -2
  134. package/dashboard/dist/assets/{WorkflowsDashboard-B-u7zFKM.js.map → WorkflowsDashboard-VMBW1WuR.js.map} +1 -1
  135. package/dashboard/dist/assets/{WorkflowsOverview-CqZVarK-.js → WorkflowsOverview-CUOXXcpg.js} +2 -2
  136. package/dashboard/dist/assets/{WorkflowsOverview-CqZVarK-.js.map → WorkflowsOverview-CUOXXcpg.js.map} +1 -1
  137. package/dashboard/dist/assets/{YamlWorkflowDetailPage-DiFLavW0.js → YamlWorkflowDetailPage-CsfzbboC.js} +2 -2
  138. package/dashboard/dist/assets/{YamlWorkflowDetailPage-DiFLavW0.js.map → YamlWorkflowDetailPage-CsfzbboC.js.map} +1 -1
  139. package/dashboard/dist/assets/{YamlWorkflowsPage-BuQM6uZA.js → YamlWorkflowsPage-BpgKLSGT.js} +2 -2
  140. package/dashboard/dist/assets/{YamlWorkflowsPage-BuQM6uZA.js.map → YamlWorkflowsPage-BpgKLSGT.js.map} +1 -1
  141. package/dashboard/dist/assets/{agents-DU9GPovp.js → agents-Cg2FVYQP.js} +2 -2
  142. package/dashboard/dist/assets/{agents-DU9GPovp.js.map → agents-Cg2FVYQP.js.map} +1 -1
  143. package/dashboard/dist/assets/{bots-Cy-Hmg7w.js → bots-vtVLRKGt.js} +2 -2
  144. package/dashboard/dist/assets/{bots-Cy-Hmg7w.js.map → bots-vtVLRKGt.js.map} +1 -1
  145. package/dashboard/dist/assets/{capabilities-sSJJqrp-.js → capabilities-DLsXhwlD.js} +2 -2
  146. package/dashboard/dist/assets/{capabilities-sSJJqrp-.js.map → capabilities-DLsXhwlD.js.map} +1 -1
  147. package/dashboard/dist/assets/{controlplane-TVCjDHQ-.js → controlplane-Js7dxpX4.js} +2 -2
  148. package/dashboard/dist/assets/{controlplane-TVCjDHQ-.js.map → controlplane-Js7dxpX4.js.map} +1 -1
  149. package/dashboard/dist/assets/{escalation-columns-BpkjKYGd.js → escalation-columns-h0NLAJss.js} +2 -2
  150. package/dashboard/dist/assets/{escalation-columns-BpkjKYGd.js.map → escalation-columns-h0NLAJss.js.map} +1 -1
  151. package/dashboard/dist/assets/{index-DOai950R.js → index-7c7FEe5S.js} +2 -2
  152. package/dashboard/dist/assets/{index-DOai950R.js.map → index-7c7FEe5S.js.map} +1 -1
  153. package/dashboard/dist/assets/{index-7BP6FaCZ.js → index-BTzhV9ST.js} +2 -2
  154. package/dashboard/dist/assets/{index-7BP6FaCZ.js.map → index-BTzhV9ST.js.map} +1 -1
  155. package/dashboard/dist/assets/{index-fgBDhnI6.js → index-Bcv5k8Dw.js} +2 -2
  156. package/dashboard/dist/assets/{index-fgBDhnI6.js.map → index-Bcv5k8Dw.js.map} +1 -1
  157. package/dashboard/dist/assets/{index-BE0phFw0.js → index-BjfoWzJL.js} +2 -2
  158. package/dashboard/dist/assets/{index-BE0phFw0.js.map → index-BjfoWzJL.js.map} +1 -1
  159. package/dashboard/dist/assets/{index-BYNN9N1T.js → index-BvVJ538E.js} +2 -2
  160. package/dashboard/dist/assets/{index-BYNN9N1T.js.map → index-BvVJ538E.js.map} +1 -1
  161. package/dashboard/dist/assets/{index-Cfv86_L9.js → index-CSpTj5DB.js} +2 -2
  162. package/dashboard/dist/assets/{index-Cfv86_L9.js.map → index-CSpTj5DB.js.map} +1 -1
  163. package/dashboard/dist/assets/{index-errgQT5x.js → index-CcjdA7jA.js} +23 -23
  164. package/dashboard/dist/assets/index-CcjdA7jA.js.map +1 -0
  165. package/dashboard/dist/assets/{index-CLPVqbVY.js → index-DQi6CjqF.js} +2 -2
  166. package/dashboard/dist/assets/{index-CLPVqbVY.js.map → index-DQi6CjqF.js.map} +1 -1
  167. package/dashboard/dist/assets/index-DglcqBHn.js +6 -0
  168. package/dashboard/dist/assets/index-DglcqBHn.js.map +1 -0
  169. package/dashboard/dist/assets/{index-Dy-MMYti.js → index-DlO3bCfu.js} +2 -2
  170. package/dashboard/dist/assets/{index-Dy-MMYti.js.map → index-DlO3bCfu.js.map} +1 -1
  171. package/dashboard/dist/assets/{index-CtwbQ_-m.js → index-FYQ9yPhO.js} +2 -2
  172. package/dashboard/dist/assets/{index-CtwbQ_-m.js.map → index-FYQ9yPhO.js.map} +1 -1
  173. package/dashboard/dist/assets/{index-DTtHNC-D.js → index-KcaVfpWn.js} +2 -2
  174. package/dashboard/dist/assets/{index-DTtHNC-D.js.map → index-KcaVfpWn.js.map} +1 -1
  175. package/dashboard/dist/assets/index-cFHoANSG.css +1 -0
  176. package/dashboard/dist/assets/{index-DsWnVyVN.js → index-vAkZ5dZe.js} +2 -2
  177. package/dashboard/dist/assets/{index-DsWnVyVN.js.map → index-vAkZ5dZe.js.map} +1 -1
  178. package/dashboard/dist/assets/{knowledge-arh4NfmL.js → knowledge-Bkvl3cIz.js} +2 -2
  179. package/dashboard/dist/assets/{knowledge-arh4NfmL.js.map → knowledge-Bkvl3cIz.js.map} +1 -1
  180. package/dashboard/dist/assets/{mcp-QGf5jHCo.js → mcp-DEtDLeIQ.js} +2 -2
  181. package/dashboard/dist/assets/{mcp-QGf5jHCo.js.map → mcp-DEtDLeIQ.js.map} +1 -1
  182. package/dashboard/dist/assets/{mcp-query-BEJN1nMZ.js → mcp-query-BCRgnt0K.js} +2 -2
  183. package/dashboard/dist/assets/{mcp-query-BEJN1nMZ.js.map → mcp-query-BCRgnt0K.js.map} +1 -1
  184. package/dashboard/dist/assets/{personas-DYtw1COf.js → personas-CABKq-0L.js} +2 -2
  185. package/dashboard/dist/assets/{personas-DYtw1COf.js.map → personas-CABKq-0L.js.map} +1 -1
  186. package/dashboard/dist/assets/{pipelines-Byi6PnbE.js → pipelines-fuN8dVNl.js} +2 -2
  187. package/dashboard/dist/assets/{pipelines-Byi6PnbE.js.map → pipelines-fuN8dVNl.js.map} +1 -1
  188. package/dashboard/dist/assets/{tasks-D0SQdENz.js → tasks-u3YPNJBo.js} +2 -2
  189. package/dashboard/dist/assets/{tasks-D0SQdENz.js.map → tasks-u3YPNJBo.js.map} +1 -1
  190. package/dashboard/dist/assets/{topics-DgDv5ZXP.js → topics-D37_RAIT.js} +2 -2
  191. package/dashboard/dist/assets/{topics-DgDv5ZXP.js.map → topics-D37_RAIT.js.map} +1 -1
  192. package/dashboard/dist/assets/{useEventHooks-DZaYzE7s.js → useEventHooks-BbXfrFbq.js} +2 -2
  193. package/dashboard/dist/assets/{useEventHooks-DZaYzE7s.js.map → useEventHooks-BbXfrFbq.js.map} +1 -1
  194. package/dashboard/dist/assets/{useNamespace-C1OqiNXN.js → useNamespace-DvuoFTda.js} +2 -2
  195. package/dashboard/dist/assets/{useNamespace-C1OqiNXN.js.map → useNamespace-DvuoFTda.js.map} +1 -1
  196. package/dashboard/dist/assets/{useYamlActivityEvents-CkmXDm-Z.js → useYamlActivityEvents-CL-Uf2cb.js} +2 -2
  197. package/dashboard/dist/assets/{useYamlActivityEvents-CkmXDm-Z.js.map → useYamlActivityEvents-CL-Uf2cb.js.map} +1 -1
  198. package/dashboard/dist/assets/{users-D4DCFPH1.js → users-CMxw_HzK.js} +2 -2
  199. package/dashboard/dist/assets/{users-D4DCFPH1.js.map → users-CMxw_HzK.js.map} +1 -1
  200. package/dashboard/dist/assets/{vendor-icons-BxuyFxH2.js → vendor-icons-Aw7bzBxa.js} +142 -137
  201. package/dashboard/dist/assets/vendor-icons-Aw7bzBxa.js.map +1 -0
  202. package/dashboard/dist/assets/{workflows-qyc0ku_5.js → workflows-Bez-o6fu.js} +2 -2
  203. package/dashboard/dist/assets/{workflows-qyc0ku_5.js.map → workflows-Bez-o6fu.js.map} +1 -1
  204. package/dashboard/dist/assets/{yaml-workflows-DWFww9Xn.js → yaml-workflows-NrXcLsNm.js} +2 -2
  205. package/dashboard/dist/assets/{yaml-workflows-DWFww9Xn.js.map → yaml-workflows-NrXcLsNm.js.map} +1 -1
  206. package/dashboard/dist/index.html +3 -3
  207. package/package.json +1 -1
  208. package/build/system/mcp-servers/admin/ortho.d.ts +0 -10
  209. package/build/system/mcp-servers/admin/ortho.js +0 -242
  210. package/dashboard/dist/assets/AvailableEscalationsPage-CVlG_AVC.js +0 -2
  211. package/dashboard/dist/assets/AvailableEscalationsPage-CVlG_AVC.js.map +0 -1
  212. package/dashboard/dist/assets/CapabilitiesPage-wxmE4917.js +0 -2
  213. package/dashboard/dist/assets/CapabilitiesPage-wxmE4917.js.map +0 -1
  214. package/dashboard/dist/assets/EntityTimelinePanel-DrL86Yrf.js +0 -2
  215. package/dashboard/dist/assets/EntityTimelinePanel-DrL86Yrf.js.map +0 -1
  216. package/dashboard/dist/assets/OperationsPage-i8KcDpKo.js +0 -3
  217. package/dashboard/dist/assets/OperationsPage-i8KcDpKo.js.map +0 -1
  218. package/dashboard/dist/assets/PersonasPage-DSdRb90f.js +0 -2
  219. package/dashboard/dist/assets/PersonasPage-DSdRb90f.js.map +0 -1
  220. package/dashboard/dist/assets/RolesPage-DCnW0VmD.js +0 -2
  221. package/dashboard/dist/assets/RolesPage-DCnW0VmD.js.map +0 -1
  222. package/dashboard/dist/assets/ScanSchemeDetailPage-DyLmCamO.js +0 -2
  223. package/dashboard/dist/assets/ScanSchemeDetailPage-DyLmCamO.js.map +0 -1
  224. package/dashboard/dist/assets/ScanStationPage-DoZccU5B.js +0 -2
  225. package/dashboard/dist/assets/ScanStationPage-DoZccU5B.js.map +0 -1
  226. package/dashboard/dist/assets/index-5TblaCXQ.css +0 -1
  227. package/dashboard/dist/assets/index-B7IaBPBg.js +0 -6
  228. package/dashboard/dist/assets/index-B7IaBPBg.js.map +0 -1
  229. package/dashboard/dist/assets/index-errgQT5x.js.map +0 -1
  230. package/dashboard/dist/assets/vendor-icons-BxuyFxH2.js.map +0 -1
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@hotmeshio/long-tail",
3
- "version": "0.11.0",
3
+ "version": "0.11.1",
4
4
  "description": "Long Tail Workflows — Durable AI workflows with human-in-the-loop escalation. Powered by PostgreSQL.",
5
5
  "main": "./build/index.js",
6
6
  "types": "./build/index.d.ts",
@@ -1,10 +0,0 @@
1
- /**
2
- * Ortho pipeline MCP tools — AI-operable interface for the 8-stage manufacturing workflow.
3
- *
4
- * ortho_submit — start a new order through the orthoPipeline workflow
5
- * ortho_pending — list open stage escalations waiting for completion
6
- * ortho_complete_stage — claim and resolve one stage escalation (advances the pipeline)
7
- * ortho_status — get the current status and results for an order workflow
8
- */
9
- import { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';
10
- export declare function registerOrthoTools(server: McpServer): void;
@@ -1,242 +0,0 @@
1
- "use strict";
2
- var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
- if (k2 === undefined) k2 = k;
4
- var desc = Object.getOwnPropertyDescriptor(m, k);
5
- if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
- desc = { enumerable: true, get: function() { return m[k]; } };
7
- }
8
- Object.defineProperty(o, k2, desc);
9
- }) : (function(o, m, k, k2) {
10
- if (k2 === undefined) k2 = k;
11
- o[k2] = m[k];
12
- }));
13
- var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
- Object.defineProperty(o, "default", { enumerable: true, value: v });
15
- }) : function(o, v) {
16
- o["default"] = v;
17
- });
18
- var __importStar = (this && this.__importStar) || (function () {
19
- var ownKeys = function(o) {
20
- ownKeys = Object.getOwnPropertyNames || function (o) {
21
- var ar = [];
22
- for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
- return ar;
24
- };
25
- return ownKeys(o);
26
- };
27
- return function (mod) {
28
- if (mod && mod.__esModule) return mod;
29
- var result = {};
30
- if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
- __setModuleDefault(result, mod);
32
- return result;
33
- };
34
- })();
35
- Object.defineProperty(exports, "__esModule", { value: true });
36
- exports.registerOrthoTools = registerOrthoTools;
37
- const zod_1 = require("zod");
38
- const workflow_invocation_1 = require("../../../services/workflow-invocation");
39
- const escalationApi = __importStar(require("../../../api/escalations"));
40
- const workflowApi = __importStar(require("../../../api/workflows"));
41
- const iam_1 = require("../../../services/iam");
42
- const types_1 = require("../../../examples/workflows/ortho-pipeline/types");
43
- let systemPrincipalId = null;
44
- async function systemAuth() {
45
- if (!systemPrincipalId)
46
- systemPrincipalId = await (0, iam_1.ensureSystemBot)();
47
- return { userId: systemPrincipalId, role: 'superadmin' };
48
- }
49
- // ── Schemas ──────────────────────────────────────────────────────────────────
50
- const orthoSubmitSchema = zod_1.z.object({
51
- order_id: zod_1.z.string().describe('Unique order identifier (e.g. "ORD-001")'),
52
- item_type: zod_1.z.string().describe('Item type (e.g. "insole-standard", "insole-diabetic")'),
53
- stages: zod_1.z.array(zod_1.z.string()).optional().describe('Override stage sequence (default: all 8 stages)'),
54
- metadata: zod_1.z.record(zod_1.z.unknown()).optional().describe('Additional order metadata passed through to each stage'),
55
- });
56
- const orthoPendingSchema = zod_1.z.object({
57
- stage: zod_1.z.string().optional().describe('Filter to a specific stage (e.g. "design"). Omit for all stages.'),
58
- limit: zod_1.z.number().int().optional().default(50).describe('Max results'),
59
- });
60
- const orthoCompleteStageSchema = zod_1.z.object({
61
- escalation_id: zod_1.z.string().describe('Escalation ID returned by ortho_pending'),
62
- notes: zod_1.z.string().describe('Completion notes — what was done, any decisions made'),
63
- outcome: zod_1.z.record(zod_1.z.unknown()).optional().describe('Structured outcome data specific to this stage'),
64
- });
65
- const orthoStatusSchema = zod_1.z.object({
66
- workflow_id: zod_1.z.string().describe('Workflow ID returned by ortho_submit'),
67
- });
68
- // ── Tool registration ────────────────────────────────────────────────────────
69
- function registerOrthoTools(server) {
70
- // Submit a new order through the ortho manufacturing pipeline
71
- server.registerTool('ortho_submit', {
72
- title: 'Submit Ortho Order',
73
- description: 'Start a new orthotic manufacturing order through the 8-stage pipeline ' +
74
- '(design → review → print → grind → glue → finish → qa → ship). ' +
75
- 'Returns a workflow_id used to track progress. Each stage creates a pending ' +
76
- 'escalation that must be completed via ortho_complete_stage before the next stage begins.',
77
- inputSchema: orthoSubmitSchema,
78
- }, async (args) => {
79
- const auth = await systemAuth();
80
- const result = await (0, workflow_invocation_1.invokeWorkflow)({
81
- workflowType: types_1.ORTHO_PIPELINE_WORKFLOW,
82
- data: {
83
- order_id: args.order_id,
84
- item_type: args.item_type,
85
- ...(args.stages ? { stages: args.stages } : {}),
86
- ...(args.metadata ? { metadata: args.metadata } : {}),
87
- },
88
- auth,
89
- });
90
- return {
91
- content: [{
92
- type: 'text',
93
- text: JSON.stringify({
94
- workflow_id: result.workflowId,
95
- order_id: args.order_id,
96
- item_type: args.item_type,
97
- stages: args.stages ?? [...types_1.ORTHO_STAGES],
98
- message: 'Pipeline started — first stage escalation will appear momentarily',
99
- }),
100
- }],
101
- };
102
- });
103
- // List pending stage escalations, optionally filtered by stage
104
- server.registerTool('ortho_pending', {
105
- title: 'List Pending Ortho Stages',
106
- description: 'List open ortho-pipeline escalations waiting to be completed. ' +
107
- 'Each entry represents one manufacturing stage blocked on human or AI review. ' +
108
- 'Filter by stage name to focus on one step. Use ortho_complete_stage to advance.',
109
- inputSchema: orthoPendingSchema,
110
- }, async (args) => {
111
- const auth = await systemAuth();
112
- const result = await escalationApi.listEscalations({
113
- status: 'pending',
114
- type: types_1.ORTHO_STAGE_TYPE,
115
- ...(args.stage ? { subtype: args.stage } : {}),
116
- limit: args.limit ?? 50,
117
- sort_by: 'created_at',
118
- order: 'asc',
119
- }, auth);
120
- if (result.status !== 200 || !result.data) {
121
- return {
122
- content: [{
123
- type: 'text',
124
- text: JSON.stringify({ error: result.error ?? 'Failed to list escalations' }),
125
- }],
126
- };
127
- }
128
- const escalations = (result.data.escalations ?? []).map((e) => ({
129
- id: e.id,
130
- stage: e.subtype,
131
- order_id: e.metadata?.order_id,
132
- item_type: e.metadata?.item_type,
133
- description: e.description,
134
- created_at: e.created_at,
135
- signal_key: e.signal_key,
136
- workflow_id: e.workflow_id,
137
- }));
138
- return {
139
- content: [{
140
- type: 'text',
141
- text: JSON.stringify({ count: escalations.length, escalations }),
142
- }],
143
- };
144
- });
145
- // Claim and resolve one stage escalation (advances to the next stage)
146
- server.registerTool('ortho_complete_stage', {
147
- title: 'Complete Ortho Stage',
148
- description: 'Complete a pending ortho pipeline stage. Claims the escalation as the system ' +
149
- 'operator and resolves it with your notes and outcome data. Resolving automatically ' +
150
- 'signals the workflow to advance to the next stage — a new escalation will appear ' +
151
- 'for the subsequent step within seconds.',
152
- inputSchema: orthoCompleteStageSchema,
153
- }, async (args) => {
154
- const auth = await systemAuth();
155
- // Contract guard: this tool advances pipeline stage gates only. The
156
- // general-purpose resolve_escalation tool covers every other type.
157
- const detail = await escalationApi.getEscalation({ id: args.escalation_id }, auth);
158
- if (detail.status !== 200 || detail.data?.type !== types_1.ORTHO_STAGE_TYPE) {
159
- return {
160
- content: [{
161
- type: 'text',
162
- text: JSON.stringify({
163
- error: `Escalation ${args.escalation_id} is ${detail.status !== 200 ? 'unknown' : `type "${detail.data?.type}"`} — ortho_complete_stage resolves ${types_1.ORTHO_STAGE_TYPE} gates. Use resolve_escalation for other types.`,
164
- }),
165
- }],
166
- };
167
- }
168
- // Claim first (idempotent if already claimed by us)
169
- const claimResult = await escalationApi.claimEscalation({ id: args.escalation_id, durationMinutes: 60 }, auth);
170
- if (claimResult.status !== 200) {
171
- return {
172
- content: [{
173
- type: 'text',
174
- text: JSON.stringify({ error: `Claim failed: ${claimResult.error}` }),
175
- }],
176
- };
177
- }
178
- // Resolve with stage output. completed_at is stamped here — the durable
179
- // workflow reads it from the signal payload (replay-deterministic).
180
- const resolveResult = await escalationApi.resolveEscalation({
181
- id: args.escalation_id,
182
- resolverPayload: {
183
- notes: args.notes,
184
- completed_at: new Date().toISOString(),
185
- ...(args.outcome ? { outcome: args.outcome } : {}),
186
- },
187
- }, auth);
188
- return {
189
- content: [{
190
- type: 'text',
191
- text: JSON.stringify({
192
- resolved: resolveResult.status === 200,
193
- escalation_id: args.escalation_id,
194
- status: resolveResult.status,
195
- error: resolveResult.status !== 200 ? resolveResult.error : undefined,
196
- message: resolveResult.status === 200
197
- ? 'Stage resolved — next stage escalation will appear shortly'
198
- : undefined,
199
- }),
200
- }],
201
- };
202
- });
203
- // Get the current status and accumulated results for a pipeline run
204
- server.registerTool('ortho_status', {
205
- title: 'Get Ortho Pipeline Status',
206
- description: 'Get the current status and completed stage results for an ortho pipeline workflow. ' +
207
- 'Returns "running" while stages are in progress, "complete" with the full stage ' +
208
- 'result history when all stages are done.',
209
- inputSchema: orthoStatusSchema,
210
- }, async (args) => {
211
- const statusResult = await workflowApi.getWorkflowStatus({ workflowId: args.workflow_id });
212
- if (statusResult.status === 404) {
213
- return {
214
- content: [{
215
- type: 'text',
216
- text: JSON.stringify({ error: 'Workflow not found', workflow_id: args.workflow_id }),
217
- }],
218
- };
219
- }
220
- // status=0 means complete in HotMesh
221
- const isComplete = statusResult.data?.status === 0;
222
- if (!isComplete) {
223
- return {
224
- content: [{
225
- type: 'text',
226
- text: JSON.stringify({ workflow_id: args.workflow_id, status: 'running' }),
227
- }],
228
- };
229
- }
230
- const resultData = await workflowApi.getWorkflowResult({ workflowId: args.workflow_id });
231
- return {
232
- content: [{
233
- type: 'text',
234
- text: JSON.stringify({
235
- workflow_id: args.workflow_id,
236
- status: 'complete',
237
- result: resultData.data?.result ?? null,
238
- }),
239
- }],
240
- };
241
- });
242
- }
@@ -1,2 +0,0 @@
1
- import{j as e,a as f}from"./vendor-query-RUZdMvN6.js";import{u as At,l as Tt,m as Je,n as Le,p as Ot,w as Et,o as Ft,q as _t,r as $t,s as Lt,t as Bt,v as Rt,x as zt,i as qt,y as Dt,z as It,A as Ut,B as Vt,E as Gt,G as Ht,H as Qt,I as Jt,K as Kt,L as Wt,M as Xt,O as Yt,Q as Zt}from"./index-errgQT5x.js";import{i as es}from"./task-queues-7-sHKPsN.js";import{f as ts}from"./useEventHooks-DZaYzE7s.js";import{X as se,ag as ss,ah as as,C as ns,b as rs,ai as is,aj as ls,t as os,s as cs,ak as ds,B as us,al as Be,am as xs,Q as ms,P as hs,g as ps,an as fs}from"./vendor-icons-BxuyFxH2.js";import{u as he,C as Ke,a as gs}from"./CustomDurationPicker-CCpqf3e4.js";import{m as bs,E as ys,a as js}from"./escalation-columns-BpkjKYGd.js";import{i as vs,E as Ns}from"./CountdownTimer-B3nCqJdC.js";import{u as Cs}from"./useFilterParams-crmlBw_l.js";import{u as We}from"./useDebouncedValue-C4P2jQuh.js";import{b as ks}from"./api-path-u2Jf9QXS.js";import{D as ws}from"./DataTable-Bir0Xs1p.js";import{S as Ss}from"./StickyPagination-DIeYMPPd.js";import{P as Ps}from"./constants-BHkpVaqx.js";import{M as pe}from"./Modal-BU7No9NH.js";import{u as Ms}from"./users-D4DCFPH1.js";import{R as As,a as Ts}from"./RowActions-eYrzgQSj.js";import{L as Os}from"./ListToolbar-Bl7F3A28.js";import{L as Re,u as Es,f as Fs,a as _s}from"./vendor-react-CdqEC2zv.js";import"./EntityTimelinePanel-DrL86Yrf.js";import"./FilterBar-DYFgzXNB.js";import"./PriorityBadge-BETdj4M-.js";import"./RolePill-BNAP-uK6.js";import"./WorkflowPill-tXU0-eXu.js";import"./StatusBadge-DkgllZHv.js";import"./EmptyState-lpUFYfun.js";const $s=["<","<=",">",">=","="],Ls=["priority","created_at","updated_at","status","role"],z="input text-xs py-1",ze="select text-xs py-1",ee="text-text-tertiary hover:text-text-primary transition-colors";function qe(t){return t==="true"?!0:t==="false"?!1:t.trim()!==""&&!Number.isNaN(Number(t))?Number(t):t}const Bs=t=>Object.entries(t??{}).map(([s,l])=>({key:s,value:String(l)})),Rs=t=>(t??[]).map(s=>{const[l,i]=Object.entries(s)[0]??["",""];return{key:l,value:String(i)}});function R({title:t,hint:s,children:l}){return e.jsxs("div",{className:"border-t border-surface-border/50 py-3 first:border-t-0 first:pt-1",children:[e.jsxs("div",{className:"mb-1.5 flex items-baseline justify-between",children:[e.jsx("span",{className:"text-2xs font-medium uppercase tracking-wide text-text-tertiary",children:t}),s&&e.jsx("span",{className:"text-2xs font-mono text-text-tertiary/70",children:s})]}),l]})}function te({value:t,onChange:s,placeholder:l}){return e.jsx("input",{list:"lt-facet-keys",className:`${z} w-40`,placeholder:l,value:t,onChange:i=>s(i.target.value)})}function zs({value:t,onChange:s,facetKeys:l=[],search:i="",onSearchChange:p}){const m=Bs(t.facets),h=Rs(t.block),d=t.range??[],x=t.exists??[],g=t.orderBy??[],C=r=>{const u={};for(const o of r)o.key&&(u[o.key]=qe(o.value));s({...t,facets:Object.keys(u).length?u:void 0})},S=r=>{const u=r.filter(o=>o.key).map(o=>({[o.key]:qe(o.value)}));s({...t,block:u.length?u:void 0})},M=r=>s({...t,range:r.length?r:void 0}),j=r=>s({...t,exists:r.length?r:void 0}),k=r=>s({...t,orderBy:r.length?r:void 0});return e.jsxs("div",{className:"text-xs",children:[e.jsx("datalist",{id:"lt-facet-keys",children:l.map(r=>e.jsx("option",{value:r},r))}),e.jsxs("datalist",{id:"lt-sort-fields",children:[Ls.map(r=>e.jsx("option",{value:r},r)),l.map(r=>e.jsx("option",{value:`metadata.${r}`},r))]}),p&&e.jsx(R,{title:"Match id",hint:"id · workflow · origin",children:e.jsx("input",{className:`${z} w-full`,placeholder:"Exact escalation, workflow, or origin id…",value:i,onChange:r=>p(r.target.value)})}),e.jsx(R,{title:"Has facet",hint:"metadata @>",children:[...m,{key:"",value:""}].map((r,u)=>e.jsxs("div",{className:"mb-1 flex items-center gap-1",children:[e.jsx(te,{value:r.key,placeholder:"key",onChange:o=>{const c=[...m];c[u]={...r,key:o},C(c)}}),e.jsx("span",{className:"text-text-tertiary",children:"="}),e.jsx("input",{className:`${z} w-40`,placeholder:"value",value:r.value,onChange:o=>{const c=[...m];c[u]={...r,value:o.target.value},C(c)}}),u<m.length&&e.jsx("button",{className:ee,onClick:()=>C(m.filter((o,c)=>c!==u)),children:"×"})]},u))}),e.jsx(R,{title:"Range",hint:"numeric",children:[...d,{facet:"",op:"<=",value:0}].map((r,u)=>e.jsxs("div",{className:"mb-1 flex items-center gap-1",children:[e.jsx(te,{value:r.facet,placeholder:"numeric facet",onChange:o=>{const c=[...d];c[u]={...r,facet:o},M(c.filter(a=>a.facet))}}),e.jsx("select",{className:ze,value:r.op,onChange:o=>{const c=[...d];c[u]={...r,op:o.target.value},M(c.filter(a=>a.facet))},children:$s.map(o=>e.jsx("option",{value:o,children:o},o))}),e.jsx("input",{type:"number",className:`${z} w-24`,value:r.value,onChange:o=>{const c=[...d];c[u]={...r,value:Number(o.target.value)},M(c.filter(a=>a.facet))}}),u<d.length&&e.jsx("button",{className:ee,onClick:()=>M(d.filter((o,c)=>c!==u)),children:"×"})]},u))}),e.jsx(R,{title:"Has key",hint:"metadata ? key",children:e.jsxs("div",{className:"flex flex-wrap items-center gap-1",children:[x.map(r=>e.jsxs("span",{className:"flex items-center gap-1 rounded bg-accent/15 px-1.5 py-0.5 text-accent",children:[r,e.jsx("button",{className:"text-accent/70 hover:text-accent",onClick:()=>j(x.filter(u=>u!==r)),children:"×"})]},r)),e.jsx(te,{value:"",placeholder:"+ key",onChange:r=>{r&&!x.includes(r)&&j([...x,r])}})]})}),e.jsx(R,{title:"Exclude",hint:"NOT @>",children:[...h,{key:"",value:""}].map((r,u)=>e.jsxs("div",{className:"mb-1 flex items-center gap-1",children:[e.jsx(te,{value:r.key,placeholder:"key",onChange:o=>{const c=[...h];c[u]={...r,key:o},S(c)}}),e.jsx("span",{className:"text-text-tertiary",children:"="}),e.jsx("input",{className:`${z} w-40`,placeholder:"value",value:r.value,onChange:o=>{const c=[...h];c[u]={...r,value:o.target.value},S(c)}}),u<h.length&&e.jsx("button",{className:ee,onClick:()=>S(h.filter((o,c)=>c!==u)),children:"×"})]},u))}),e.jsx(R,{title:"Sort by",children:[...g,{field:"",direction:"asc"}].map((r,u)=>e.jsxs("div",{className:"mb-1 flex items-center gap-1",children:[e.jsx("input",{list:"lt-sort-fields",className:`${z} w-44`,placeholder:"column or metadata.key",value:r.field,onChange:o=>{const c=[...g];c[u]={...r,field:o.target.value},k(c.filter(a=>a.field))}}),e.jsxs("select",{className:ze,value:r.direction??"asc",onChange:o=>{const c=[...g];c[u]={...r,direction:o.target.value},k(c.filter(a=>a.field))},children:[e.jsx("option",{value:"asc",children:"asc"}),e.jsx("option",{value:"desc",children:"desc"})]}),e.jsxs("label",{className:"flex items-center gap-1 text-text-tertiary",children:[e.jsx("input",{type:"checkbox",checked:!!r.numeric,onChange:o=>{const c=[...g];c[u]={...r,numeric:o.target.checked},k(c.filter(a=>a.field))}}),"num"]}),u<g.length&&e.jsx("button",{className:ee,onClick:()=>k(g.filter((o,c)=>c!==u)),children:"×"})]},u))})]})}function qs({value:t,onChange:s,facetKeys:l,search:i,onSearchChange:p,activeFacetCount:m,onClear:h,onClose:d}){return e.jsxs("div",{className:"h-full overflow-y-auto",children:[e.jsxs("div",{className:"sticky top-0 z-10 flex items-center justify-between px-4 py-3 bg-surface-raised border-b border-surface-border/50",children:[e.jsx("span",{className:"text-xs font-semibold text-text-primary",children:"Faceted query"}),e.jsxs("div",{className:"flex items-center gap-2",children:[m>0&&e.jsx("button",{onClick:h,className:"text-2xs text-text-tertiary hover:text-text-primary transition-colors",children:"Clear"}),e.jsx("button",{onClick:d,className:"p-1 rounded hover:bg-surface-hover text-text-tertiary hover:text-text-primary transition-colors",title:"Close",children:e.jsx(se,{className:"w-4 h-4"})})]})]}),e.jsxs("div",{className:"px-4 py-2",children:[e.jsxs("p",{className:"mb-2 text-2xs leading-snug text-text-tertiary",children:["Precise metadata facets plus exact correlation-id lookup — they compose in one SQL query. Facet keys are the ones that actually exist in your visible escalations. Set status to ",e.jsx("span",{className:"font-medium",children:"All"})," to find an order across every status; the whole query is shareable via the URL."]}),e.jsx(zs,{value:t,onChange:s,facetKeys:l,search:i,onSearchChange:p})]})]})}const De="created_at";function xe(t){return t.replace(/^metadata\./,"")}function Ds({orderBy:t,onChange:s}){const l=t==null?void 0:t[0],i=(l==null?void 0:l.field)??De,p=(l==null?void 0:l.direction)??"desc",m=i===De,h=d=>s([{...l??{},field:i,direction:d}]);return e.jsxs("div",{className:"flex items-center gap-1.5",children:[!m&&e.jsxs("span",{className:"inline-flex items-center gap-1 rounded-full border border-accent/25 bg-accent/8 px-2 py-0.5 text-2xs font-medium text-accent/90",children:[e.jsx("span",{className:"text-text-quaternary",children:"sort"}),e.jsx("span",{className:"font-mono max-w-[120px] truncate",title:i,children:xe(i)}),e.jsx("button",{onClick:()=>s(void 0),className:"ml-0.5 -mr-0.5 flex items-center text-text-quaternary hover:text-status-error transition-colors","aria-label":"Reset sort to created date",children:e.jsx(se,{className:"w-2.5 h-2.5"})})]}),e.jsxs("div",{className:"flex items-center rounded overflow-hidden border border-surface-border",role:"radiogroup","aria-label":"Sort direction",children:[e.jsx("button",{type:"button",role:"radio","aria-checked":p==="desc",onClick:()=>h("desc"),className:`px-1.5 py-1 transition-colors ${p==="desc"?"bg-accent text-text-inverse":"icon-link hover:bg-surface-hover"}`,title:m?"Newest first":`${xe(i)} descending`,children:e.jsx(ss,{className:"w-3.5 h-3.5"})}),e.jsx("button",{type:"button",role:"radio","aria-checked":p==="asc",onClick:()=>h("asc"),className:`px-1.5 py-1 border-l border-surface-border transition-colors ${p==="asc"?"bg-accent text-text-inverse":"icon-link hover:bg-surface-hover"}`,title:m?"Oldest first":`${xe(i)} ascending`,children:e.jsx(as,{className:"w-3.5 h-3.5"})})]})]})}const Is=t=>t.isPriorityPending||t.isClaimPending||t.isAssignPending||t.isTriagePending||t.isCancelPending,me="inline-flex items-center h-7 px-2.5 text-2xs font-medium text-text-secondary bg-surface border border-surface-border rounded-[4px] hover:border-accent/50 hover:text-text-primary transition-colors disabled:opacity-50 disabled:hover:border-surface-border",Ie=`${me} appearance-none cursor-pointer`,Us="inline-flex items-center h-7 px-2.5 text-2xs font-medium text-status-error bg-surface border border-status-error/30 rounded-[4px] hover:border-status-error hover:bg-status-error/5 transition-colors disabled:opacity-50";function Vs(t){var d;const s=Is(t),l=he(),{data:i}=At(),p=Tt(),m=p!==null?p:((d=i==null?void 0:i.ai)==null?void 0:d.enabled)===!0,h=t.selectedCount>0;return e.jsx("div",{className:`grid transition-all duration-200 ease-in-out ${h?"grid-rows-[1fr] opacity-100":"grid-rows-[0fr] opacity-0 pointer-events-none"}`,children:e.jsx("div",{className:"overflow-hidden",children:e.jsxs("div",{className:"flex flex-wrap items-center gap-2 py-2.5 pl-3 pr-2 mt-4 mb-3 bg-surface-sunken/60 border-l-2 border-l-accent",children:[e.jsxs("span",{className:"text-2xs font-semibold uppercase tracking-wider text-accent tabular-nums",children:[t.selectedCount," selected"]}),e.jsx("div",{className:"mx-1 h-4 w-px bg-surface-border"}),e.jsxs("select",{onChange:x=>{x.target.value&&(t.onSetPriority(parseInt(x.target.value)),x.target.value="")},disabled:s,className:Ie,defaultValue:"",children:[e.jsx("option",{value:"",disabled:!0,children:"Priority…"}),Ps.map(x=>e.jsx("option",{value:x.value,children:x.label},x.value))]}),e.jsxs("select",{onChange:x=>{x.target.value&&(t.onClaim(parseInt(x.target.value)),x.target.value="")},disabled:s,className:Ie,defaultValue:"",children:[e.jsx("option",{value:"",disabled:!0,children:"Claim for…"}),l.map(x=>e.jsx("option",{value:x.value,children:x.label},x.value))]}),e.jsx("button",{onClick:t.onAssign,disabled:s,className:me,children:t.isAssignPending?"Assigning…":"Assign to…"}),m&&e.jsx("button",{onClick:t.onTriage,disabled:s,className:me,children:t.isTriagePending?"Triaging…":"Triage"}),e.jsx("button",{onClick:t.onCancel,disabled:s,className:Us,children:t.isCancelPending?"Cancelling…":"Cancel"}),e.jsx("div",{className:"flex-1"}),s&&e.jsx("span",{className:"text-2xs text-text-tertiary animate-pulse",children:"Processing…"}),e.jsx("button",{onClick:t.onClearSelection,className:"px-1 text-2xs font-medium text-text-tertiary hover:text-text-primary transition-colors",children:"Clear"})]})})})}function Gs({open:t,onClose:s,selectedCount:l,selectedRoles:i,onSubmit:p,isPending:m}){const{isSuperAdmin:h}=Je(),d=he(),[x,g]=f.useState("user"),[C,S]=f.useState(null),[M,j]=f.useState(""),[k,r]=f.useState("30"),[u,o]=f.useState(0),c=f.useCallback(y=>o(y),[]),a=!h&&i.length===1?i[0]:void 0,N=We(M,250),{data:w,isLoading:P}=Ms({role:a,status:"active",search:N.trim()||void 0,limit:200}),A=(w==null?void 0:w.users)??[],T=()=>{g("user"),S(null),j(""),r("30"),o(0),s()},O=y=>{S(y),g("duration")},q=()=>{g("user")},D=()=>{if(!C)return;const y=k==="custom"?u:parseInt(k);!y||y<=0||p(C.id,y)};return e.jsx(pe,{open:t,onClose:T,title:"Assign Escalations",children:e.jsxs("div",{className:"space-y-4",children:[x==="user"&&e.jsxs(e.Fragment,{children:[e.jsxs("p",{className:"text-sm text-text-secondary",children:["Select a user to assign"," ",e.jsx("span",{className:"font-medium text-text-primary",children:l})," ","escalation(s) to:"]}),e.jsx("input",{type:"text",value:M,onChange:y=>j(y.target.value),placeholder:"Search by name or email...",className:"input text-xs w-full",autoFocus:!0}),e.jsxs("div",{className:"max-h-60 overflow-y-auto border border-surface-border rounded-lg divide-y divide-surface-border",children:[P&&e.jsx("p",{className:"text-xs text-text-tertiary p-3",children:"Loading users..."}),!P&&A.length===0&&e.jsx("p",{className:"text-xs text-text-tertiary p-3",children:"No users found"}),A.map(y=>e.jsxs("button",{onClick:()=>O(y),className:"w-full text-left px-3 py-2 hover:bg-surface-hover transition-colors",children:[e.jsx("p",{className:"text-xs font-medium text-text-primary",children:y.display_name||y.external_id}),y.email&&e.jsx("p",{className:"text-2xs text-text-tertiary",children:y.email})]},y.id))]}),e.jsx("div",{className:"flex justify-end pt-2",children:e.jsx("button",{onClick:T,className:"btn-secondary text-xs",children:"Cancel"})})]}),x==="duration"&&C&&e.jsxs(e.Fragment,{children:[e.jsxs("p",{className:"text-sm text-text-secondary",children:["Assign to"," ",e.jsx("span",{className:"font-medium text-text-primary",children:C.display_name||C.external_id})," ","for:"]}),e.jsxs("select",{value:k,onChange:y=>{r(y.target.value),o(0)},className:"select w-full text-sm",children:[d.map(y=>e.jsx("option",{value:y.value,children:y.label},y.value)),e.jsx("option",{value:"custom",children:"Other..."})]}),k==="custom"&&e.jsx(Ke,{onChange:c,autoFocus:!0}),e.jsxs("div",{className:"flex justify-end gap-3 pt-2",children:[e.jsx("button",{onClick:q,className:"btn-secondary text-xs",children:"Back"}),e.jsx("button",{onClick:D,disabled:m,className:"btn-primary text-xs",children:m?"Assigning...":"Assign"})]})]})]})})}function Hs({open:t,onClose:s,selectedCount:l,onSubmit:i,isPending:p}){const[m,h]=f.useState(""),d=()=>{i(m||void 0)};return e.jsx(pe,{open:t,onClose:s,title:"Submit for AI Triage",children:e.jsxs("div",{className:"space-y-4",children:[e.jsxs("p",{className:"text-sm text-text-secondary",children:["Submit ",e.jsx("span",{className:"font-medium text-text-primary",children:l})," escalation(s) for AI triage? The triage orchestrator will take over resolution."]}),e.jsxs("div",{children:[e.jsxs("label",{className:"text-xs font-medium text-text-secondary block mb-1",children:["Triage hint ",e.jsx("span",{className:"text-text-tertiary",children:"(optional)"})]}),e.jsx("input",{type:"text",value:m,onChange:x=>h(x.target.value),placeholder:"e.g., image_orientation",className:"input text-xs font-mono w-full"}),e.jsx("p",{className:"text-2xs text-text-tertiary mt-1",children:"Guides the triage workflow on what remediation to apply"})]}),e.jsxs("div",{className:"flex justify-end gap-3 pt-2",children:[e.jsx("button",{onClick:s,className:"btn-secondary text-xs",children:"Cancel"}),e.jsx("button",{onClick:d,disabled:p,className:"btn-primary text-xs",children:p?"Submitting...":"Submit for Triage"})]})]})})}function V(t,s,l){return i=>{t.mutate(i,{onSuccess:()=>{s(),l==null||l()}})}}function Qs(t){const s=()=>[...t.selectedIds];return{handleSetPriority:d=>{V(t.setPriority,t.clearSelection)({ids:s(),priority:d})},handleBulkClaim:d=>{V(t.bulkClaim,t.clearSelection)({ids:s(),durationMinutes:d})},handleBulkTriage:d=>{V(t.bulkTriage,t.clearSelection,t.closeTriageModal)({ids:s(),hint:d})},handleBulkAssign:(d,x)=>{V(t.bulkAssign,t.clearSelection,t.closeAssignModal)({ids:s(),targetUserId:d,durationMinutes:x})},handleBulkCancel:()=>{V(t.bulkCancel,t.clearSelection,t.closeCancelModal)({ids:s()})}}}function Js({claimTarget:t,onClose:s,claimDuration:l,onDurationChange:i,claimDurations:p,onCustomClaimChange:m,onClaim:h,isPending:d}){return e.jsx(pe,{open:!!t,onClose:s,title:"Claim Escalation",children:e.jsxs("div",{className:"space-y-4",children:[e.jsxs("p",{className:"text-sm text-text-secondary",children:["Claim ",e.jsx("span",{className:"font-medium text-text-primary",children:t==null?void 0:t.type})," for:"]}),e.jsxs("select",{value:l,onChange:x=>{i(x.target.value)},className:"select w-full text-sm",children:[p.map(x=>e.jsx("option",{value:x.value,children:x.label},x.value)),e.jsx("option",{value:"custom",children:"Other..."})]}),l==="custom"&&e.jsx(Ke,{onChange:m,autoFocus:!0}),e.jsxs("div",{className:"flex justify-end gap-3 pt-2",children:[e.jsx("button",{onClick:s,className:"btn-secondary text-xs",children:"Cancel"}),e.jsx("button",{onClick:h,className:"btn-primary text-xs",disabled:d,children:d?"Claiming...":"Claim"})]})]})})}const Xe={pending:"--lt-status-queued-graphic",claimed:"--lt-status-claimed-graphic",resolved:"--lt-status-success-graphic",cancelled:"--lt-text-quaternary",expired:"--lt-text-tertiary"},Ye="--lt-text-quaternary";function Ks(t){return Xe[t]??Ye}const G=Object.fromEntries(Object.entries(Xe).map(([t,s])=>[t,`rgb(var(${s}))`])),Ue=40,Ws=64,Xs=24,Ve=3;function Ze(t){return t<6e4?`${Math.round(t/1e3)}s`:t<36e5?`${Math.round(t/6e4)}m`:t<864e5?`${(t/36e5).toFixed(1)}h`:`${(t/864e5).toFixed(1)}d`}function Ge(t){const s=Date.now()-t;return s<6e4?"just now":s<36e5?`${Math.round(s/6e4)}m ago`:s<864e5?`${Math.round(s/36e5)}h ago`:`${Math.round(s/864e5)}d ago`}function He(t){return t.replace(/-/g," ").replace(/\b\w/g,s=>s.toUpperCase())}function Ys(t,s){return t?[...s.filter(i=>i in t),...Object.keys(t).filter(i=>!s.includes(i))].map(i=>[i,t[i]]):[]}function Zs({e:t}){const s=t.endMs-t.startMs;if(s<=0)return null;const l=G.pending,i=G.claimed,p=t.status==="cancelled"||t.status==="expired"?G.cancelled:G.resolved;let m=100,h=0,d=0;return t.claimedMs!==null?(m=Math.max(0,Math.min(100,(t.claimedMs-t.startMs)/s*100)),t.isOpen?h=100-m:(h=Math.max(0,Math.min(100-m,(t.endMs-t.claimedMs)/s*100)),d=Math.max(0,100-m-h))):t.isOpen||(d=100,m=0),e.jsxs("div",{className:"mt-2 h-0.5 rounded-full overflow-hidden flex bg-surface-sunken",children:[m>0&&e.jsx("div",{style:{width:`${m}%`,backgroundColor:l,opacity:.6}}),h>0&&e.jsx("div",{style:{width:`${h}%`,backgroundColor:i,opacity:.6}}),d>0&&e.jsx("div",{style:{width:`${d}%`,backgroundColor:p,opacity:.6}})]})}function ea({gapMs:t,heightPx:s}){return e.jsx("div",{className:"relative flex items-center justify-center",style:{height:s},children:t>=6e4&&e.jsx("span",{className:"text-2xs text-text-quaternary font-mono bg-surface px-2 relative z-10",children:Ze(t)})})}function Qe({e:t,highlightKeys:s,onRowClick:l}){const[i,p]=f.useState(!1),m=G[t.displayStatus]??`rgb(var(${Ye}))`,h=Ys(t.metadata,s),d=i?h:h.slice(0,Ve),x=h.length-Ve;return e.jsxs("div",{className:"cursor-pointer max-w-[460px] min-w-[260px] w-full bg-surface-raised rounded-lg shadow-sm border border-surface-border/60 px-3.5 pt-2.5 pb-2 hover:shadow-md hover:border-surface-border transition-all duration-150",style:{borderTopWidth:"3px",borderTopColor:m},onClick:()=>l==null?void 0:l(t),children:[e.jsxs("div",{className:"flex items-baseline gap-2 mb-1.5",children:[e.jsx("span",{className:"text-2xs font-bold uppercase tracking-widest text-text-quaternary shrink-0",children:He(t.role)}),e.jsxs("span",{className:"text-xs font-semibold text-text-primary truncate",title:t.type,children:[t.type,t.subtype&&t.subtype!==t.type&&t.subtype!==""&&e.jsxs("span",{className:"font-normal text-text-tertiary",children:[" · ",t.subtype]})]})]}),d.length>0&&e.jsxs("div",{className:"border-t border-surface-border/40 pt-1 space-y-px",children:[d.map(([g,C])=>{const S=String(C),M=s.includes(g);return e.jsxs("div",{className:"group/row flex items-center gap-1.5 -mx-1 px-1 py-[2px] rounded",children:[e.jsx("span",{className:`shrink-0 w-[60px] text-2xs font-mono uppercase tracking-wide truncate ${M?"text-accent":"text-text-quaternary"}`,title:g,children:g}),e.jsx("span",{className:`flex-1 min-w-0 text-2xs font-medium truncate ${M?"text-text-primary":"text-text-tertiary"}`,title:S,children:S}),e.jsxs("span",{className:"flex items-center gap-px shrink-0 opacity-0 group-hover/row:opacity-100 transition-opacity",children:[e.jsx(Re,{to:Le(g,C,t.role),className:"p-0.5 rounded text-text-quaternary hover:text-accent transition-colors",title:`Filter ${He(t.role)}: ${g} = ${S}`,onClick:j=>j.stopPropagation(),children:e.jsx(is,{className:"w-2.5 h-2.5"})}),e.jsx(Re,{to:Le(g,C),className:"p-0.5 rounded text-text-quaternary hover:text-accent transition-colors",title:`Search all: ${g} = ${S}`,onClick:j=>j.stopPropagation(),children:e.jsx(ls,{className:"w-2.5 h-2.5"})})]})]},g)}),x>0&&e.jsx("button",{className:"flex items-center gap-0.5 text-2xs text-text-quaternary hover:text-accent transition-colors mt-0.5 -mx-1 px-1 py-px",onClick:g=>{g.stopPropagation(),p(C=>!C)},children:i?e.jsxs(e.Fragment,{children:[e.jsx(os,{className:"w-2.5 h-2.5"})," less"]}):e.jsxs(e.Fragment,{children:[e.jsx(cs,{className:"w-2.5 h-2.5"})," ",x," more"]})})]}),e.jsx(Zs,{e:t})]})}function ta({escalations:t,highlightKeys:s=[],onRowClick:l,total:i,page:p,totalPages:m,onPageChange:h}){var o,c;const d=Date.now(),g=t.map(a=>{const N=new Date(a.created_at).getTime(),w=a.resolved_at?new Date(a.resolved_at).getTime():null,P=a.claimed_at?new Date(a.claimed_at).getTime():null,A=!w&&a.status!=="cancelled"&&a.status!=="expired",T=w??(A?d:N+3e4),O=a.status==="pending"&&vs(a)?"claimed":a.status;return{...a,startMs:N,claimedMs:P,endMs:T,isOpen:A,displayStatus:O}});if(g.length===0)return e.jsx("p",{className:"mt-12 text-center text-sm text-text-tertiary",children:"No escalations matched."});const C=g.length,M=Math.max(Math.abs((((o=g[C-1])==null?void 0:o.startMs)??0)-(((c=g[0])==null?void 0:c.startMs)??0)),1)/Math.max(C-1,1),j=Ws/Math.max(M,1),r=new Set(g.map(a=>new Date(a.startMs).toDateString())).size>1;function u(a){const N=new Date(a),w=N.toLocaleTimeString([],{hour:"2-digit",minute:"2-digit"});return r?N.toLocaleDateString([],{month:"short",day:"numeric"})+" "+w:w}return e.jsxs("div",{className:"mt-4 pb-24",children:[e.jsxs("div",{className:"relative",children:[e.jsx("div",{className:"absolute left-1/2 -translate-x-px inset-y-0 w-px bg-surface-border/80"}),g.map((a,N)=>{const w=g[N-1],P=w?Math.abs(a.startMs-w.startMs):null,A=P!==null?Math.max(Xs,Math.round(P*j)):0,T=N%2===0,O=Ks(a.displayStatus),q=`rgb(var(${O}))`,D=a.endMs-a.startMs,y=a.isOpen?Ge(a.startMs):`${Ge(a.startMs)} · ${Ze(D)}`;return e.jsxs("div",{children:[N>0&&e.jsx(ea,{gapMs:P,heightPx:A}),e.jsxs("div",{className:"flex items-center",children:[e.jsx("div",{className:"flex-1 flex justify-end items-center",children:T?e.jsxs("div",{className:"flex items-center",children:[e.jsx(Qe,{e:a,highlightKeys:s,onRowClick:l}),e.jsx("div",{className:"flex-shrink-0 h-px bg-surface-border/70",style:{width:Ue}})]}):e.jsx("span",{className:"text-2xs text-text-quaternary font-mono tabular-nums pr-3",children:y})}),e.jsx("div",{className:"relative z-10 flex-shrink-0 w-3.5 h-3.5 rounded-full border-2 border-surface cursor-pointer transition-all duration-150 hover:scale-[1.5]",style:{backgroundColor:q,boxShadow:`0 0 0 3px rgb(var(${O}) / 0.16), 0 1px 3px rgb(var(${O}) / 0.19)`},onClick:()=>l==null?void 0:l(a)}),e.jsx("div",{className:"flex-1 flex justify-start items-center",children:T?e.jsx("span",{className:"text-2xs text-text-quaternary font-mono tabular-nums pl-3",children:y}):e.jsxs("div",{className:"flex items-center",children:[e.jsx("div",{className:"flex-shrink-0 h-px bg-surface-border/70",style:{width:Ue}}),e.jsx(Qe,{e:a,highlightKeys:s,onRowClick:l})]})})]}),e.jsx("div",{className:"flex justify-center relative z-10 mt-0.5",children:e.jsx("span",{className:"text-2xs text-text-quaternary font-mono tabular-nums bg-surface px-1.5",children:u(a.startMs)})})]},a.id)})]}),m>1&&e.jsxs("div",{className:"sticky bottom-0 z-20 bg-surface/95 backdrop-blur-sm border-t border-surface-border -mx-page-x px-page-x pt-2 pb-4 flex items-center justify-between mt-10",children:[e.jsxs("span",{className:"text-2xs text-text-tertiary",children:["Page ",e.jsx("span",{className:"font-medium text-text-secondary",children:p})," ","of ",e.jsx("span",{className:"font-medium text-text-secondary",children:m})]}),e.jsxs("div",{className:"flex items-center gap-2",children:[e.jsx("button",{onClick:()=>h(p-1),disabled:p<=1,className:"p-1.5 rounded hover:bg-surface-hover disabled:opacity-30 text-text-tertiary hover:text-text-primary transition-colors disabled:cursor-not-allowed",children:e.jsx(ns,{className:"w-4 h-4"})}),e.jsx("button",{onClick:()=>h(p+1),disabled:p>=m,className:"p-1.5 rounded hover:bg-surface-hover disabled:opacity-30 text-text-tertiary hover:text-text-primary transition-colors disabled:cursor-not-allowed",children:e.jsx(rs,{className:"w-4 h-4"})})]})]})]})}function Aa(){var Ae,Te,Oe,Ee,Fe,_e,$e;const t=Es(),{filters:s,setFilter:l,pagination:i}=Cs({filters:{role:"",type:"",priority:"",status:"available",search:""}});ts({role:s.role||null,verbs:["created","claimed"]});const p=We(s.search,300),m=he(),[h,d]=f.useState(null),[x,g]=f.useState("30"),[C,S]=f.useState(0),M=f.useCallback(n=>S(n),[]),[j,k]=f.useState(new Set),[r,u]=f.useState(!1),[o,c]=Fs(),a=f.useMemo(()=>Ot(o),[o]),N=f.useCallback(n=>{c(b=>{const v=new URLSearchParams(b);return Et(v,n),v.delete("page"),v})},[c]),{data:w}=Ft(r),P=_t(a)+(s.search?1:0),A="facet-query",{setPanel:T,closePanel:O,open:q,ownerKey:D}=$t();f.useEffect(()=>{if(!r){O(A);return}T(e.jsx(qs,{value:a,onChange:N,facetKeys:(w==null?void 0:w.keys)??[],search:s.search??"",onSearchChange:n=>l("search",n),activeFacetCount:P,onClear:()=>{N({}),l("search","")},onClose:()=>u(!1)}),{width:420,key:A})},[r,a,N,w,s.search,l,P,T,O]);const y=q&&D===A,ae=f.useRef(!1);f.useEffect(()=>{if(y){ae.current=!0;return}ae.current&&(ae.current=!1,u(!1))},[y]);const[et,ne]=f.useState(!1),[tt,re]=f.useState(!1),[st,ie]=f.useState(!1),at=f.useCallback(n=>N({...a,orderBy:n}),[a,N]),H=_s(),{data:Q}=Lt(),fe=Bt(),nt=f.useCallback(()=>{var v;const n=window.prompt("Pin label:");if(!(n!=null&&n.trim()))return;const b=((v=Q==null?void 0:Q.preferences)==null?void 0:v.pinnedViews)??[];fe.mutate({pinnedViews:[...b,{id:Rt(),label:n.trim(),url:H.pathname+H.search,badge:!0}]})},[H.pathname,H.search,Q,fe]),{canBulk:rt}=zt(),ge=a.facets?Object.keys(a.facets):[],J=o.get("view"),be=f.useCallback(n=>{c(b=>{const v=new URLSearchParams(b);return n?v.set("view",n):v.delete("view"),v},{replace:!0})},[c]),_=J?J==="timeline":P>0,it=f.useCallback(n=>{const{[n]:b,...v}=a.facets??{};N({...a,facets:Object.keys(v).length>0?v:void 0})},[a,N]),ye=qt(),je=Dt(),ve=It(),le=Ut(),oe=Vt(),K=Gt(),{data:ce}=Ht(),{data:$}=Qt(),{data:de}=Jt(),{user:W,isSuperAdmin:lt,hasRoleType:ot}=Je(),Ne=lt||ot("admin"),Ce=f.useMemo(()=>new Set(((W==null?void 0:W.roles)??[]).map(n=>n.role)),[W]),ct=f.useMemo(()=>{const n=($==null?void 0:$.roles)??[];return(Ne?n:n.filter(v=>Ce.has(v.role)&&!es(v.role))).map(v=>({value:v.role,label:Kt(v)})).sort((v,Mt)=>v.label.localeCompare(Mt.label))},[$,Ne,Ce]);f.useEffect(()=>{k(new Set)},[s.role,s.type,s.priority,s.status,p,i.page,i.pageSize]);const I=s.status||"",U=I==="available",ue=I==="claimed",ke=ue?"pending":I==="resolved"?"resolved":I==="cancelled"?"cancelled":I==="expired"?"expired":void 0,we=100,Se={role:s.role||void 0,type:s.type||void 0,priority:s.priority?parseInt(s.priority):void 0,limit:_?we:i.pageSize,offset:i.offset,sort_by:"created_at",order:"desc",search:p||void 0,...a},dt=Wt({...Se,enabled:U}),ut=Xt({status:ke,claimed:ue||void 0,...Se,enabled:!U}),xt=U?dt:ut,{data:B,isLoading:mt,error:X,refetch:ht,isFetching:pt}=xt,ft=ks(`/escalations${U?"/available":""}`,{status:ke,claimed:ue||void 0,role:s.role||void 0,type:s.type||void 0,priority:s.priority||void 0,search:p||void 0,sort_by:"created_at",order:"desc",limit:i.pageSize,offset:i.offset,facets:a.facets&&Object.keys(a.facets).length?JSON.stringify(a.facets):void 0,block:(Ae=a.block)!=null&&Ae.length?JSON.stringify(a.block):void 0,range:(Te=a.range)!=null&&Te.length?JSON.stringify(a.range):void 0,exists:(Oe=a.exists)!=null&&Oe.length?JSON.stringify(a.exists):void 0,roles:(Ee=a.roles)!=null&&Ee.length?JSON.stringify(a.roles):void 0,orderBy:(Fe=a.orderBy)!=null&&Fe.length?JSON.stringify(a.orderBy):void 0,available:a.available!=null?String(a.available):void 0}),F=(B==null?void 0:B.escalations)??[],E=(B==null?void 0:B.total)??0,L=s.role||(((_e=a.roles)==null?void 0:_e.length)===1?a.roles[0]:null),Y=(($e=Yt(L??"",void 0,!!L).data)==null?void 0:$e.list_schema)??null,Pe=!!L&&!!Y&&!!Y["x-lt-layout"]&&Y["x-lt-layout"]!=="table",Z=Pe&&!_&&(J?J==="rich":!0),Me=f.useMemo(()=>{if(!a.jeopardy||!L)return null;const n=(($==null?void 0:$.roles)??[]).find(v=>v.role===L),b=(n==null?void 0:n.priority_threshold_minutes)??(n==null?void 0:n.sla_minutes)??null;return b!=null?Zt(b*6e4):null},[a.jeopardy,L,$]),gt=f.useMemo(()=>{const n=new Set;for(const b of F)j.has(b.id)&&n.add(b.role);return[...n]},[F,j]),bt=f.useCallback(()=>k(new Set),[]),yt=()=>{if(!h)return;const n=x==="custom"?C:parseInt(x);!n||n<=0||ye.mutate({id:h.id,durationMinutes:n},{onSuccess:()=>{d(null),t(`/escalations/detail/${h.id}`)}})},{handleSetPriority:jt,handleBulkClaim:vt,handleBulkTriage:Nt,handleBulkAssign:Ct,handleBulkCancel:kt}=Qs({selectedIds:j,clearSelection:bt,setPriority:je,bulkClaim:ve,bulkTriage:oe,bulkAssign:le,bulkCancel:K,closeTriageModal:()=>ne(!1),closeAssignModal:()=>re(!1),closeCancelModal:()=>ie(!1)}),wt=n=>{const b=new Set(j);b.has(n)?b.delete(n):b.add(n),k(b)},St=()=>{j.size===F.length?k(new Set):k(new Set(F.map(n=>n.id)))},Pt=[rt?{key:"select",label:e.jsx("input",{type:"checkbox",checked:F.length>0&&j.size===F.length,onChange:St,className:"rounded"}),render:n=>e.jsx("input",{type:"checkbox",checked:j.has(n.id),onChange:b=>{b.stopPropagation(),wt(n.id)},onClick:b=>b.stopPropagation(),className:"rounded"}),className:"w-10",priority:1}:{key:"spacer",label:"",render:()=>null,className:"w-10",priority:3},...bs({highlightKeys:ge}),{key:"actions",label:"",render:n=>e.jsx(As,{children:e.jsx(Ts,{icon:ds,title:"Claim escalation",onClick:()=>d(n),alwaysVisible:!0,colorClass:"text-accent/40 hover:text-accent",size:"sm"})}),className:"w-10 text-right"}];return e.jsxs("div",{children:[e.jsxs("div",{className:"flex items-center gap-2 mb-10 min-w-0",children:[e.jsx(ys,{role:s.role,options:ct,onChange:n=>l("role",n)}),e.jsx("button",{onClick:()=>{window.location.hash="#docs:dashboard.md:all-escalations"},className:"text-text-quaternary hover:text-accent transition-colors mt-1 shrink-0",title:"Open docs for this page",children:e.jsx(us,{className:"w-4 h-4",strokeWidth:1.5})})]}),e.jsx(js,{filters:s,setFilter:l,roles:(ce==null?void 0:ce.roles)??[],types:(de==null?void 0:de.types)??[],showStatus:!0,showSearch:!1,actions:e.jsxs(e.Fragment,{children:[_&&e.jsxs("span",{className:"text-2xs text-text-tertiary whitespace-nowrap",children:[E>100&&e.jsxs(e.Fragment,{children:[e.jsxs("span",{className:"font-medium text-text-secondary",children:[(i.page-1)*100+1,"–",Math.min(i.page*100,E)]})," of "]}),e.jsx("span",{className:"font-medium text-text-secondary",children:E})," ",E===1?"escalation":"escalations"]}),e.jsx(Ds,{orderBy:a.orderBy,onChange:at}),e.jsx("span",{className:"h-3.5 w-px bg-surface-border shrink-0"}),e.jsx(Os,{onRefresh:()=>ht(),isFetching:pt,apiPath:ft}),Pe&&!_&&e.jsx("button",{onClick:()=>be(Z?"table":"rich"),className:"ml-2 inline-flex h-7 w-7 items-center justify-center rounded icon-link hover:bg-surface-hover",title:Z?"Table view":"Rich view",children:Z?e.jsx(Be,{className:"w-4 h-4"}):e.jsx(xs,{className:"w-4 h-4"})}),P>0&&e.jsx("button",{onClick:()=>be(_?"table":"timeline"),className:"ml-2 inline-flex h-7 w-7 items-center justify-center rounded icon-link hover:bg-surface-hover",title:_?"Table view":"Timeline view",children:_?e.jsx(Be,{className:"w-4 h-4"}):e.jsx(ms,{className:"w-4 h-4"})}),e.jsx("button",{onClick:nt,className:"ml-2 inline-flex h-7 w-7 items-center justify-center rounded icon-link hover:bg-surface-hover",title:"Pin this view — save the current filters to your Pinned section","data-testid":"pin-current-view",children:e.jsx(hs,{className:"w-4 h-4"})}),e.jsxs("button",{onClick:()=>u(n=>!n),className:"relative ml-2 inline-flex h-7 w-7 items-center justify-center rounded icon-link hover:bg-surface-hover",title:"Faceted query",children:[e.jsx(ps,{className:"w-4 h-4"}),P>0&&e.jsx("span",{className:"absolute -right-1 -top-1 flex h-3.5 min-w-[14px] items-center justify-center rounded-full bg-accent px-0.5 text-2xs font-medium text-text-inverse",children:P})]})]})}),e.jsx(Vs,{selectedCount:j.size,onClearSelection:()=>k(new Set),onSetPriority:jt,onClaim:vt,onAssign:()=>re(!0),onTriage:()=>ne(!0),onCancel:()=>ie(!0),isPriorityPending:je.isPending,isClaimPending:ve.isPending,isAssignPending:le.isPending,isTriagePending:oe.isPending,isCancelPending:K.isPending}),(a.facets&&Object.keys(a.facets).length>0||a.jeopardy)&&e.jsxs("div",{className:"sticky top-14 z-30 bg-surface/98 backdrop-blur-sm border-b border-surface-border/30 -mx-page-x px-page-x py-2 flex items-center gap-1.5 flex-wrap",children:[a.jeopardy&&e.jsxs("span",{className:"inline-flex items-center gap-1 rounded-full bg-status-error px-2.5 py-0.5 text-2xs font-semibold text-text-inverse",children:[e.jsx(fs,{className:"w-2.5 h-2.5",strokeWidth:2.5}),"in jeopardy",Me&&e.jsxs("span",{className:"font-mono font-normal opacity-90",children:["> ",Me]}),e.jsx("button",{onClick:()=>N({...a,jeopardy:void 0}),className:"ml-0.5 -mr-0.5 flex items-center text-text-inverse/70 hover:text-text-inverse transition-colors","aria-label":"Clear jeopardy filter",children:e.jsx(se,{className:"w-2.5 h-2.5"})})]}),Object.entries(a.facets??{}).map(([n,b])=>e.jsxs("span",{className:"inline-flex items-center gap-1 rounded-full border border-accent/25 bg-accent/8 px-2.5 py-0.5 text-2xs font-medium text-accent/90",children:[e.jsx("span",{className:"font-mono text-text-tertiary",children:n}),e.jsx("span",{className:"text-text-quaternary",children:"="}),e.jsx("span",{className:"font-mono max-w-[160px] truncate",title:String(b),children:String(b)}),e.jsx("button",{onClick:()=>it(n),className:"ml-0.5 -mr-0.5 flex items-center text-text-quaternary hover:text-status-error transition-colors","aria-label":`Remove ${n} filter`,children:e.jsx(se,{className:"w-2.5 h-2.5"})})]},n)),Object.keys(a.facets??{}).length>1&&e.jsx("button",{onClick:()=>N({...a,facets:void 0}),className:"text-2xs text-text-quaternary hover:text-text-secondary transition-colors px-1",children:"clear all"})]}),X&&e.jsx("div",{className:"mb-4 px-4 py-3 rounded-md bg-status-error/10 border border-status-error/20 text-xs text-status-error",children:X.message==="Session expired"?"Your session has expired. Please log in again.":`Failed to load escalations: ${X.message}`}),_?e.jsx(ta,{escalations:F,highlightKeys:ge,onRowClick:n=>t(`/escalations/detail/${n.id}`,{state:{from:"/escalations/available"}}),total:E,page:i.page,totalPages:Math.ceil(E/we),onPageChange:i.setPage}):Z?e.jsx(Ns,{role:L,listSchema:Y,activeEscalations:F,onRowClick:n=>t(`/escalations/detail/${n.id}`,{state:{from:"/escalations/available"}}),onOpenGroup:n=>t(n),onAddFacet:(n,b)=>N({...a,facets:{...a.facets??{},[n]:typeof b=="object"&&b!==null?JSON.stringify(b):b}}),total:E,page:i.page,totalPages:i.totalPages(E),pageSize:i.pageSize,onPageChange:i.setPage,onPageSizeChange:i.setPageSize}):e.jsxs(e.Fragment,{children:[e.jsx(ws,{columns:Pt,data:F,layout:"fixed",keyFn:n=>n.id,onRowClick:n=>t(`/escalations/detail/${n.id}`,{state:{from:"/escalations/available"}}),isLoading:mt,emptyMessage:X?"Unable to load data":"No escalations"}),e.jsx(Ss,{page:i.page,totalPages:i.totalPages(E),onPageChange:i.setPage,total:E,pageSize:i.pageSize,onPageSizeChange:i.setPageSize})]}),e.jsx(Js,{claimTarget:h,onClose:()=>d(null),claimDuration:x,onDurationChange:n=>{g(n),S(0)},claimDurations:m,customClaimMinutes:C,onCustomClaimChange:M,onClaim:yt,isPending:ye.isPending}),e.jsx(Hs,{open:et,onClose:()=>ne(!1),selectedCount:j.size,onSubmit:Nt,isPending:oe.isPending}),e.jsx(Gs,{open:tt,onClose:()=>re(!1),selectedCount:j.size,selectedRoles:gt,onSubmit:Ct,isPending:le.isPending}),e.jsx(gs,{open:st,onClose:()=>ie(!1),onConfirm:kt,selectedCount:j.size,isPending:K.isPending,error:K.error})]})}export{Aa as AvailableEscalationsPage};
2
- //# sourceMappingURL=AvailableEscalationsPage-CVlG_AVC.js.map