@hotmeshio/long-tail 0.11.0 → 0.12.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 (280) hide show
  1. package/build/api/domain.d.ts +14 -0
  2. package/build/api/domain.js +76 -0
  3. package/build/api/escalations/cancel.js +16 -1
  4. package/build/api/escalations/helpers.js +5 -0
  5. package/build/lib/db/schemas/030_domain_dictionary.sql +18 -0
  6. package/build/lib/events/escalation-wire.d.ts +9 -0
  7. package/build/lib/events/escalation-wire.js +69 -0
  8. package/build/lib/events/system-events.js +13 -5
  9. package/build/lib/json-path/pick.d.ts +14 -0
  10. package/build/lib/json-path/pick.js +51 -0
  11. package/build/routes/domain.d.ts +2 -0
  12. package/build/routes/domain.js +62 -0
  13. package/build/routes/index.js +2 -0
  14. package/build/routes/mcp-endpoint.js +4 -1
  15. package/build/services/domain/index.d.ts +4 -0
  16. package/build/services/domain/index.js +14 -0
  17. package/build/services/domain/read.d.ts +21 -0
  18. package/build/services/domain/read.js +78 -0
  19. package/build/services/domain/seed.d.ts +11 -0
  20. package/build/services/domain/seed.js +65 -0
  21. package/build/services/domain/sql.d.ts +10 -0
  22. package/build/services/domain/sql.js +29 -0
  23. package/build/services/domain/validate.d.ts +29 -0
  24. package/build/services/domain/validate.js +50 -0
  25. package/build/services/domain/write.d.ts +23 -0
  26. package/build/services/domain/write.js +43 -0
  27. package/build/services/escalation/aggregate-validate.js +6 -0
  28. package/build/services/escalation/crud.js +16 -12
  29. package/build/services/escalation/facet-sql.js +10 -0
  30. package/build/services/mcp/db-server/schemas.d.ts +1 -1
  31. package/build/services/mcp/external-server.js +65 -27
  32. package/build/services/role/index.d.ts +2 -0
  33. package/build/services/role/index.js +7 -0
  34. package/build/services/role/sql.d.ts +1 -0
  35. package/build/services/role/sql.js +3 -1
  36. package/build/services/role/types.d.ts +17 -1
  37. package/build/services/role/types.js +16 -0
  38. package/build/start/workers.js +6 -0
  39. package/build/system/index.js +17 -0
  40. package/build/system/mcp-servers/admin/domain-context.d.ts +14 -0
  41. package/build/system/mcp-servers/admin/domain-context.js +220 -0
  42. package/build/system/mcp-servers/admin/exports.js +7 -4
  43. package/build/system/mcp-servers/admin/index.js +5 -5
  44. package/build/system/mcp-servers/admin/pipelines.js +9 -3
  45. package/build/system/mcp-servers/admin/schemas.d.ts +61 -32
  46. package/build/system/mcp-servers/admin/schemas.js +23 -5
  47. package/build/system/mcp-servers/admin/workflows.js +26 -0
  48. package/build/system/mcp-servers/db-query/schemas.d.ts +1 -1
  49. package/build/system/mcp-servers/human-queue-schemas.d.ts +1 -1
  50. package/build/system/seed/tool-manifests-admin.d.ts +115 -969
  51. package/build/system/seed/tool-manifests-admin.js +8 -10
  52. package/build/tsconfig.tsbuildinfo +1 -1
  53. package/build/types/domain-manifest.d.ts +77 -0
  54. package/build/types/domain-manifest.js +16 -0
  55. package/build/types/facets.d.ts +8 -0
  56. package/build/types/index.d.ts +2 -1
  57. package/build/types/index.js +2 -1
  58. package/build/types/startup.d.ts +10 -0
  59. package/dashboard/dist/assets/{AdminDashboard-DJ3LJQ09.js → AdminDashboard-CahUELrr.js} +2 -2
  60. package/dashboard/dist/assets/{AdminDashboard-DJ3LJQ09.js.map → AdminDashboard-CahUELrr.js.map} +1 -1
  61. package/dashboard/dist/assets/{AgentConfigPage-BMMvaD0z.js → AgentConfigPage-CkMv-cTV.js} +2 -2
  62. package/dashboard/dist/assets/{AgentConfigPage-BMMvaD0z.js.map → AgentConfigPage-CkMv-cTV.js.map} +1 -1
  63. package/dashboard/dist/assets/{AgentDetailPage-C6wfsnRe.js → AgentDetailPage-ZGea3Z4A.js} +2 -2
  64. package/dashboard/dist/assets/{AgentDetailPage-C6wfsnRe.js.map → AgentDetailPage-ZGea3Z4A.js.map} +1 -1
  65. package/dashboard/dist/assets/{AgentsPage-Cwqka7nE.js → AgentsPage-BMWSUJGi.js} +2 -2
  66. package/dashboard/dist/assets/{AgentsPage-Cwqka7nE.js.map → AgentsPage-BMWSUJGi.js.map} +1 -1
  67. package/dashboard/dist/assets/AvailableEscalationsPage-BjsbfsWW.js +2 -0
  68. package/dashboard/dist/assets/AvailableEscalationsPage-BjsbfsWW.js.map +1 -0
  69. package/dashboard/dist/assets/{BotPicker-BBkJBXZB.js → BotPicker-DN8tq7pz.js} +2 -2
  70. package/dashboard/dist/assets/{BotPicker-BBkJBXZB.js.map → BotPicker-DN8tq7pz.js.map} +1 -1
  71. package/dashboard/dist/assets/CapabilitiesPage-EAO3Ae0S.js +2 -0
  72. package/dashboard/dist/assets/CapabilitiesPage-EAO3Ae0S.js.map +1 -0
  73. package/dashboard/dist/assets/{CollapsibleSection-B3FsrHwH.js → CollapsibleSection-J-RejbjG.js} +2 -2
  74. package/dashboard/dist/assets/{CollapsibleSection-B3FsrHwH.js.map → CollapsibleSection-J-RejbjG.js.map} +1 -1
  75. package/dashboard/dist/assets/{CountdownTimer-B3nCqJdC.js → CountdownTimer-Dw8N9tmQ.js} +2 -2
  76. package/dashboard/dist/assets/{CountdownTimer-B3nCqJdC.js.map → CountdownTimer-Dw8N9tmQ.js.map} +1 -1
  77. package/dashboard/dist/assets/{CredentialsPage-Bv875IHe.js → CredentialsPage-CTurxwRn.js} +2 -2
  78. package/dashboard/dist/assets/{CredentialsPage-Bv875IHe.js.map → CredentialsPage-CTurxwRn.js.map} +1 -1
  79. package/dashboard/dist/assets/{CronLabel-CSzjWuwj.js → CronLabel-DZ5TmIQG.js} +2 -2
  80. package/dashboard/dist/assets/{CronLabel-CSzjWuwj.js.map → CronLabel-DZ5TmIQG.js.map} +1 -1
  81. package/dashboard/dist/assets/{CustomDurationPicker-CCpqf3e4.js → CustomDurationPicker-BES_FTrm.js} +2 -2
  82. package/dashboard/dist/assets/{CustomDurationPicker-CCpqf3e4.js.map → CustomDurationPicker-BES_FTrm.js.map} +1 -1
  83. package/dashboard/dist/assets/{DropZone-CJkk-U3o.js → DropZone-BWD9aGOz.js} +2 -2
  84. package/dashboard/dist/assets/{DropZone-CJkk-U3o.js.map → DropZone-BWD9aGOz.js.map} +1 -1
  85. package/dashboard/dist/assets/{ElapsedCell-WV6pUaKo.js → ElapsedCell-CIGRporU.js} +2 -2
  86. package/dashboard/dist/assets/{ElapsedCell-WV6pUaKo.js.map → ElapsedCell-CIGRporU.js.map} +1 -1
  87. package/dashboard/dist/assets/EntityTimelinePanel-CKIFsDOB.js +2 -0
  88. package/dashboard/dist/assets/EntityTimelinePanel-CKIFsDOB.js.map +1 -0
  89. package/dashboard/dist/assets/{EscalationListSchemaPage-CTQCALw4.js → EscalationListSchemaPage-DOrv-quD.js} +2 -2
  90. package/dashboard/dist/assets/{EscalationListSchemaPage-CTQCALw4.js.map → EscalationListSchemaPage-DOrv-quD.js.map} +1 -1
  91. package/dashboard/dist/assets/{EscalationSchemaPage-D_UgP0pv.js → EscalationSchemaPage-DAOVAxAM.js} +2 -2
  92. package/dashboard/dist/assets/{EscalationSchemaPage-D_UgP0pv.js.map → EscalationSchemaPage-DAOVAxAM.js.map} +1 -1
  93. package/dashboard/dist/assets/{EscalationsOverview-DuIUyxr0.js → EscalationsOverview-B27sDn5O.js} +2 -2
  94. package/dashboard/dist/assets/{EscalationsOverview-DuIUyxr0.js.map → EscalationsOverview-B27sDn5O.js.map} +1 -1
  95. package/dashboard/dist/assets/{EventTable-BV6unphX.js → EventTable-Co1d40Qq.js} +2 -2
  96. package/dashboard/dist/assets/{EventTable-BV6unphX.js.map → EventTable-Co1d40Qq.js.map} +1 -1
  97. package/dashboard/dist/assets/{FilterBar-DYFgzXNB.js → FilterBar-2ZfU21EA.js} +2 -2
  98. package/dashboard/dist/assets/{FilterBar-DYFgzXNB.js.map → FilterBar-2ZfU21EA.js.map} +1 -1
  99. package/dashboard/dist/assets/{GraphInvokePage-BGHVUipJ.js → GraphInvokePage-pdvc9VSv.js} +2 -2
  100. package/dashboard/dist/assets/{GraphInvokePage-BGHVUipJ.js.map → GraphInvokePage-pdvc9VSv.js.map} +1 -1
  101. package/dashboard/dist/assets/{HomePage-B-S2cK3E.js → HomePage-CLlDsBnw.js} +2 -2
  102. package/dashboard/dist/assets/{HomePage-B-S2cK3E.js.map → HomePage-CLlDsBnw.js.map} +1 -1
  103. package/dashboard/dist/assets/{ListToolbar-Bl7F3A28.js → ListToolbar-DMremj2e.js} +2 -2
  104. package/dashboard/dist/assets/{ListToolbar-Bl7F3A28.js.map → ListToolbar-DMremj2e.js.map} +1 -1
  105. package/dashboard/dist/assets/{McpOverview-_T9IsCD_.js → McpOverview-BhztmhoL.js} +2 -2
  106. package/dashboard/dist/assets/{McpOverview-_T9IsCD_.js.map → McpOverview-BhztmhoL.js.map} +1 -1
  107. package/dashboard/dist/assets/{McpQueryDetailPage-DtsVqKPw.js → McpQueryDetailPage-BseZfrhc.js} +2 -2
  108. package/dashboard/dist/assets/{McpQueryDetailPage-DtsVqKPw.js.map → McpQueryDetailPage-BseZfrhc.js.map} +1 -1
  109. package/dashboard/dist/assets/{McpQueryPage-DX5u-1bx.js → McpQueryPage-DMzkble7.js} +2 -2
  110. package/dashboard/dist/assets/{McpQueryPage-DX5u-1bx.js.map → McpQueryPage-DMzkble7.js.map} +1 -1
  111. package/dashboard/dist/assets/{McpRunDetailPage-BhcqqtYS.js → McpRunDetailPage-DqaBQAnn.js} +2 -2
  112. package/dashboard/dist/assets/{McpRunDetailPage-BhcqqtYS.js.map → McpRunDetailPage-DqaBQAnn.js.map} +1 -1
  113. package/dashboard/dist/assets/{McpRunsPage-L-1y8wnX.js → McpRunsPage-Du8GnHFv.js} +2 -2
  114. package/dashboard/dist/assets/{McpRunsPage-L-1y8wnX.js.map → McpRunsPage-Du8GnHFv.js.map} +1 -1
  115. package/dashboard/dist/assets/{NamespacePill-in1SLd0W.js → NamespacePill-C09QuOEz.js} +2 -2
  116. package/dashboard/dist/assets/{NamespacePill-in1SLd0W.js.map → NamespacePill-C09QuOEz.js.map} +1 -1
  117. package/dashboard/dist/assets/OperationsPage-CL2feqwS.js +3 -0
  118. package/dashboard/dist/assets/OperationsPage-CL2feqwS.js.map +1 -0
  119. package/dashboard/dist/assets/{OperatorDashboard-CIbDzOlh.js → OperatorDashboard-BHiGQZN_.js} +2 -2
  120. package/dashboard/dist/assets/{OperatorDashboard-CIbDzOlh.js.map → OperatorDashboard-BHiGQZN_.js.map} +1 -1
  121. package/dashboard/dist/assets/{PageHeader-BJgWMZtw.js → PageHeader-B7YJxa4o.js} +2 -2
  122. package/dashboard/dist/assets/{PageHeader-BJgWMZtw.js.map → PageHeader-B7YJxa4o.js.map} +1 -1
  123. package/dashboard/dist/assets/{PageHeaderWithStats-Ccio4vyG.js → PageHeaderWithStats-gT-5ovJh.js} +2 -2
  124. package/dashboard/dist/assets/{PageHeaderWithStats-Ccio4vyG.js.map → PageHeaderWithStats-gT-5ovJh.js.map} +1 -1
  125. package/dashboard/dist/assets/{PersonaDetailPage-BOaf0TW1.js → PersonaDetailPage-D6GGZgUS.js} +2 -2
  126. package/dashboard/dist/assets/{PersonaDetailPage-BOaf0TW1.js.map → PersonaDetailPage-D6GGZgUS.js.map} +1 -1
  127. package/dashboard/dist/assets/PersonasPage-BQYCdmAs.js +2 -0
  128. package/dashboard/dist/assets/PersonasPage-BQYCdmAs.js.map +1 -0
  129. package/dashboard/dist/assets/{ProcessDetailPage-DN9NqfeP.js → ProcessDetailPage-P45jOLim.js} +2 -2
  130. package/dashboard/dist/assets/{ProcessDetailPage-DN9NqfeP.js.map → ProcessDetailPage-P45jOLim.js.map} +1 -1
  131. package/dashboard/dist/assets/{ProcessesListPage-CfQEWaD4.js → ProcessesListPage-CgdzgCY6.js} +2 -2
  132. package/dashboard/dist/assets/{ProcessesListPage-CfQEWaD4.js.map → ProcessesListPage-CgdzgCY6.js.map} +1 -1
  133. package/dashboard/dist/assets/{RoleDetailPage-BC5HL7ls.js → RoleDetailPage-Dme2pa9z.js} +2 -2
  134. package/dashboard/dist/assets/{RoleDetailPage-BC5HL7ls.js.map → RoleDetailPage-Dme2pa9z.js.map} +1 -1
  135. package/dashboard/dist/assets/{RolePill-BNAP-uK6.js → RolePill-CtYI1_k1.js} +2 -2
  136. package/dashboard/dist/assets/{RolePill-BNAP-uK6.js.map → RolePill-CtYI1_k1.js.map} +1 -1
  137. package/dashboard/dist/assets/RolesPage-Ci7_PbPt.js +2 -0
  138. package/dashboard/dist/assets/RolesPage-Ci7_PbPt.js.map +1 -0
  139. package/dashboard/dist/assets/{RunAsSelector-twbuX7fB.js → RunAsSelector-CB0pV097.js} +2 -2
  140. package/dashboard/dist/assets/{RunAsSelector-twbuX7fB.js.map → RunAsSelector-CB0pV097.js.map} +1 -1
  141. package/dashboard/dist/assets/{ScanCodesPage-CPNg6K--.js → ScanCodesPage-DpbPhAj1.js} +2 -2
  142. package/dashboard/dist/assets/{ScanCodesPage-CPNg6K--.js.map → ScanCodesPage-DpbPhAj1.js.map} +1 -1
  143. package/dashboard/dist/assets/ScanSchemeDetailPage-CGnMGlt0.js +2 -0
  144. package/dashboard/dist/assets/ScanSchemeDetailPage-CGnMGlt0.js.map +1 -0
  145. package/dashboard/dist/assets/ScanStationPage-BTeV7TGy.js +2 -0
  146. package/dashboard/dist/assets/ScanStationPage-BTeV7TGy.js.map +1 -0
  147. package/dashboard/dist/assets/{ScopeBadge-BG7KkZ8Q.js → ScopeBadge-B76rOtA0.js} +2 -2
  148. package/dashboard/dist/assets/{ScopeBadge-BG7KkZ8Q.js.map → ScopeBadge-B76rOtA0.js.map} +1 -1
  149. package/dashboard/dist/assets/{StickyPagination-DIeYMPPd.js → StickyPagination-DH-0JEyx.js} +2 -2
  150. package/dashboard/dist/assets/{StickyPagination-DIeYMPPd.js.map → StickyPagination-DH-0JEyx.js.map} +1 -1
  151. package/dashboard/dist/assets/{StreamMessageDetail-gU4CUeQI.js → StreamMessageDetail-u-pDrHfS.js} +2 -2
  152. package/dashboard/dist/assets/{StreamMessageDetail-gU4CUeQI.js.map → StreamMessageDetail-u-pDrHfS.js.map} +1 -1
  153. package/dashboard/dist/assets/{SwimlaneTimeline-Br-nBA4l.js → SwimlaneTimeline-vN1N8BGy.js} +2 -2
  154. package/dashboard/dist/assets/{SwimlaneTimeline-Br-nBA4l.js.map → SwimlaneTimeline-vN1N8BGy.js.map} +1 -1
  155. package/dashboard/dist/assets/{TagInput-CvM5n6ww.js → TagInput-BQAPOp17.js} +2 -2
  156. package/dashboard/dist/assets/{TagInput-CvM5n6ww.js.map → TagInput-BQAPOp17.js.map} +1 -1
  157. package/dashboard/dist/assets/{TaskDetailPage-_9cr_R0u.js → TaskDetailPage-CAQm6avs.js} +2 -2
  158. package/dashboard/dist/assets/{TaskDetailPage-_9cr_R0u.js.map → TaskDetailPage-CAQm6avs.js.map} +1 -1
  159. package/dashboard/dist/assets/{TaskQueuePill-D4JPHXOq.js → TaskQueuePill-C2NImrwl.js} +2 -2
  160. package/dashboard/dist/assets/{TaskQueuePill-D4JPHXOq.js.map → TaskQueuePill-C2NImrwl.js.map} +1 -1
  161. package/dashboard/dist/assets/{TasksListPage-DVENC9Jp.js → TasksListPage-C1bT3DT9.js} +2 -2
  162. package/dashboard/dist/assets/{TasksListPage-DVENC9Jp.js.map → TasksListPage-C1bT3DT9.js.map} +1 -1
  163. package/dashboard/dist/assets/{TimeAgo-C9yYnOui.js → TimeAgo-qZxkJ8Am.js} +2 -2
  164. package/dashboard/dist/assets/{TimeAgo-C9yYnOui.js.map → TimeAgo-qZxkJ8Am.js.map} +1 -1
  165. package/dashboard/dist/assets/{TimestampCell-DoB8cYgw.js → TimestampCell-CC3dz6FG.js} +2 -2
  166. package/dashboard/dist/assets/{TimestampCell-DoB8cYgw.js.map → TimestampCell-CC3dz6FG.js.map} +1 -1
  167. package/dashboard/dist/assets/{ToolPill-BUjbC-Tj.js → ToolPill-FOZm67TS.js} +2 -2
  168. package/dashboard/dist/assets/{ToolPill-BUjbC-Tj.js.map → ToolPill-FOZm67TS.js.map} +1 -1
  169. package/dashboard/dist/assets/{ToolTestPanel-CBtsIP8K.js → ToolTestPanel-C3sSQUvw.js} +2 -2
  170. package/dashboard/dist/assets/{ToolTestPanel-CBtsIP8K.js.map → ToolTestPanel-C3sSQUvw.js.map} +1 -1
  171. package/dashboard/dist/assets/{TopicDetailPage-mR4Jaz83.js → TopicDetailPage-ClI0I8Mu.js} +2 -2
  172. package/dashboard/dist/assets/{TopicDetailPage-mR4Jaz83.js.map → TopicDetailPage-ClI0I8Mu.js.map} +1 -1
  173. package/dashboard/dist/assets/{TopicsPage-CP7HFxIC.js → TopicsPage-CNf2VZud.js} +2 -2
  174. package/dashboard/dist/assets/{TopicsPage-CP7HFxIC.js.map → TopicsPage-CNf2VZud.js.map} +1 -1
  175. package/dashboard/dist/assets/{UserName-BnLF6yhz.js → UserName-BdMHmyL3.js} +2 -2
  176. package/dashboard/dist/assets/{UserName-BnLF6yhz.js.map → UserName-BdMHmyL3.js.map} +1 -1
  177. package/dashboard/dist/assets/{WorkflowExecutionPage-xL956RZi.js → WorkflowExecutionPage-Ba4mYFoW.js} +2 -2
  178. package/dashboard/dist/assets/{WorkflowExecutionPage-xL956RZi.js.map → WorkflowExecutionPage-Ba4mYFoW.js.map} +1 -1
  179. package/dashboard/dist/assets/{WorkflowPill-tXU0-eXu.js → WorkflowPill-C5TEWlfO.js} +2 -2
  180. package/dashboard/dist/assets/{WorkflowPill-tXU0-eXu.js.map → WorkflowPill-C5TEWlfO.js.map} +1 -1
  181. package/dashboard/dist/assets/{WorkflowsDashboard-B-u7zFKM.js → WorkflowsDashboard-ImEm16tX.js} +2 -2
  182. package/dashboard/dist/assets/{WorkflowsDashboard-B-u7zFKM.js.map → WorkflowsDashboard-ImEm16tX.js.map} +1 -1
  183. package/dashboard/dist/assets/{WorkflowsOverview-CqZVarK-.js → WorkflowsOverview-BpWyV_tj.js} +2 -2
  184. package/dashboard/dist/assets/{WorkflowsOverview-CqZVarK-.js.map → WorkflowsOverview-BpWyV_tj.js.map} +1 -1
  185. package/dashboard/dist/assets/{YamlWorkflowDetailPage-DiFLavW0.js → YamlWorkflowDetailPage-BFBlw1YY.js} +2 -2
  186. package/dashboard/dist/assets/{YamlWorkflowDetailPage-DiFLavW0.js.map → YamlWorkflowDetailPage-BFBlw1YY.js.map} +1 -1
  187. package/dashboard/dist/assets/{YamlWorkflowsPage-BuQM6uZA.js → YamlWorkflowsPage-C9gxapRg.js} +2 -2
  188. package/dashboard/dist/assets/{YamlWorkflowsPage-BuQM6uZA.js.map → YamlWorkflowsPage-C9gxapRg.js.map} +1 -1
  189. package/dashboard/dist/assets/{agents-DU9GPovp.js → agents-BJQtJTiz.js} +2 -2
  190. package/dashboard/dist/assets/{agents-DU9GPovp.js.map → agents-BJQtJTiz.js.map} +1 -1
  191. package/dashboard/dist/assets/{bots-Cy-Hmg7w.js → bots-DDlU1gMy.js} +2 -2
  192. package/dashboard/dist/assets/{bots-Cy-Hmg7w.js.map → bots-DDlU1gMy.js.map} +1 -1
  193. package/dashboard/dist/assets/{capabilities-sSJJqrp-.js → capabilities-qYrUpdid.js} +2 -2
  194. package/dashboard/dist/assets/{capabilities-sSJJqrp-.js.map → capabilities-qYrUpdid.js.map} +1 -1
  195. package/dashboard/dist/assets/{controlplane-TVCjDHQ-.js → controlplane-DnJ1VDTs.js} +2 -2
  196. package/dashboard/dist/assets/{controlplane-TVCjDHQ-.js.map → controlplane-DnJ1VDTs.js.map} +1 -1
  197. package/dashboard/dist/assets/{escalation-columns-BpkjKYGd.js → escalation-columns-BCnVWr_n.js} +2 -2
  198. package/dashboard/dist/assets/{escalation-columns-BpkjKYGd.js.map → escalation-columns-BCnVWr_n.js.map} +1 -1
  199. package/dashboard/dist/assets/{index-Dy-MMYti.js → index-04QQsxMp.js} +2 -2
  200. package/dashboard/dist/assets/{index-Dy-MMYti.js.map → index-04QQsxMp.js.map} +1 -1
  201. package/dashboard/dist/assets/{index-fgBDhnI6.js → index-B5q8ksfv.js} +2 -2
  202. package/dashboard/dist/assets/{index-fgBDhnI6.js.map → index-B5q8ksfv.js.map} +1 -1
  203. package/dashboard/dist/assets/{index-CtwbQ_-m.js → index-BAqQSgxn.js} +2 -2
  204. package/dashboard/dist/assets/{index-CtwbQ_-m.js.map → index-BAqQSgxn.js.map} +1 -1
  205. package/dashboard/dist/assets/{index-DOai950R.js → index-BHbO4F8Z.js} +2 -2
  206. package/dashboard/dist/assets/{index-DOai950R.js.map → index-BHbO4F8Z.js.map} +1 -1
  207. package/dashboard/dist/assets/{index-DTtHNC-D.js → index-BUpB9ezn.js} +2 -2
  208. package/dashboard/dist/assets/{index-DTtHNC-D.js.map → index-BUpB9ezn.js.map} +1 -1
  209. package/dashboard/dist/assets/{index-errgQT5x.js → index-C991QfUN.js} +23 -23
  210. package/dashboard/dist/assets/index-C991QfUN.js.map +1 -0
  211. package/dashboard/dist/assets/{index-7BP6FaCZ.js → index-CFlmubaP.js} +2 -2
  212. package/dashboard/dist/assets/{index-7BP6FaCZ.js.map → index-CFlmubaP.js.map} +1 -1
  213. package/dashboard/dist/assets/{index-BYNN9N1T.js → index-CroJTX8g.js} +2 -2
  214. package/dashboard/dist/assets/{index-BYNN9N1T.js.map → index-CroJTX8g.js.map} +1 -1
  215. package/dashboard/dist/assets/{index-BE0phFw0.js → index-CtAPxA03.js} +2 -2
  216. package/dashboard/dist/assets/{index-BE0phFw0.js.map → index-CtAPxA03.js.map} +1 -1
  217. package/dashboard/dist/assets/{index-CLPVqbVY.js → index-D-5F3Bw-.js} +2 -2
  218. package/dashboard/dist/assets/{index-CLPVqbVY.js.map → index-D-5F3Bw-.js.map} +1 -1
  219. package/dashboard/dist/assets/index-DhRdWzz0.js +6 -0
  220. package/dashboard/dist/assets/index-DhRdWzz0.js.map +1 -0
  221. package/dashboard/dist/assets/{index-DsWnVyVN.js → index-KotwPxGB.js} +2 -2
  222. package/dashboard/dist/assets/{index-DsWnVyVN.js.map → index-KotwPxGB.js.map} +1 -1
  223. package/dashboard/dist/assets/{index-Cfv86_L9.js → index-LiLVAQzB.js} +2 -2
  224. package/dashboard/dist/assets/{index-Cfv86_L9.js.map → index-LiLVAQzB.js.map} +1 -1
  225. package/dashboard/dist/assets/index-cFHoANSG.css +1 -0
  226. package/dashboard/dist/assets/{knowledge-arh4NfmL.js → knowledge-CnMeg8Rw.js} +2 -2
  227. package/dashboard/dist/assets/{knowledge-arh4NfmL.js.map → knowledge-CnMeg8Rw.js.map} +1 -1
  228. package/dashboard/dist/assets/{mcp-QGf5jHCo.js → mcp-CHPSFv7m.js} +2 -2
  229. package/dashboard/dist/assets/{mcp-QGf5jHCo.js.map → mcp-CHPSFv7m.js.map} +1 -1
  230. package/dashboard/dist/assets/{mcp-query-BEJN1nMZ.js → mcp-query-C19EGwdN.js} +2 -2
  231. package/dashboard/dist/assets/{mcp-query-BEJN1nMZ.js.map → mcp-query-C19EGwdN.js.map} +1 -1
  232. package/dashboard/dist/assets/{personas-DYtw1COf.js → personas-Br1Vo2S3.js} +2 -2
  233. package/dashboard/dist/assets/{personas-DYtw1COf.js.map → personas-Br1Vo2S3.js.map} +1 -1
  234. package/dashboard/dist/assets/{pipelines-Byi6PnbE.js → pipelines-QMrFoJZX.js} +2 -2
  235. package/dashboard/dist/assets/{pipelines-Byi6PnbE.js.map → pipelines-QMrFoJZX.js.map} +1 -1
  236. package/dashboard/dist/assets/{tasks-D0SQdENz.js → tasks-Doy_7cGX.js} +2 -2
  237. package/dashboard/dist/assets/{tasks-D0SQdENz.js.map → tasks-Doy_7cGX.js.map} +1 -1
  238. package/dashboard/dist/assets/{topics-DgDv5ZXP.js → topics-BcJS4G09.js} +2 -2
  239. package/dashboard/dist/assets/{topics-DgDv5ZXP.js.map → topics-BcJS4G09.js.map} +1 -1
  240. package/dashboard/dist/assets/{useEventHooks-DZaYzE7s.js → useEventHooks-ldE5o0ok.js} +2 -2
  241. package/dashboard/dist/assets/{useEventHooks-DZaYzE7s.js.map → useEventHooks-ldE5o0ok.js.map} +1 -1
  242. package/dashboard/dist/assets/{useNamespace-C1OqiNXN.js → useNamespace-CCu8fZc6.js} +2 -2
  243. package/dashboard/dist/assets/{useNamespace-C1OqiNXN.js.map → useNamespace-CCu8fZc6.js.map} +1 -1
  244. package/dashboard/dist/assets/{useYamlActivityEvents-CkmXDm-Z.js → useYamlActivityEvents-DDrXwFXX.js} +2 -2
  245. package/dashboard/dist/assets/{useYamlActivityEvents-CkmXDm-Z.js.map → useYamlActivityEvents-DDrXwFXX.js.map} +1 -1
  246. package/dashboard/dist/assets/{users-D4DCFPH1.js → users-BvKhSq1i.js} +2 -2
  247. package/dashboard/dist/assets/{users-D4DCFPH1.js.map → users-BvKhSq1i.js.map} +1 -1
  248. package/dashboard/dist/assets/{vendor-icons-BxuyFxH2.js → vendor-icons-Aw7bzBxa.js} +142 -137
  249. package/dashboard/dist/assets/vendor-icons-Aw7bzBxa.js.map +1 -0
  250. package/dashboard/dist/assets/{workflows-qyc0ku_5.js → workflows-D09ysQF1.js} +2 -2
  251. package/dashboard/dist/assets/{workflows-qyc0ku_5.js.map → workflows-D09ysQF1.js.map} +1 -1
  252. package/dashboard/dist/assets/{yaml-workflows-DWFww9Xn.js → yaml-workflows-BFHrxEl4.js} +2 -2
  253. package/dashboard/dist/assets/{yaml-workflows-DWFww9Xn.js.map → yaml-workflows-BFHrxEl4.js.map} +1 -1
  254. package/dashboard/dist/index.html +3 -3
  255. package/docs/domain-dictionary.md +115 -0
  256. package/docs/events.md +8 -0
  257. package/package.json +1 -1
  258. package/build/system/mcp-servers/admin/ortho.d.ts +0 -10
  259. package/build/system/mcp-servers/admin/ortho.js +0 -242
  260. package/dashboard/dist/assets/AvailableEscalationsPage-CVlG_AVC.js +0 -2
  261. package/dashboard/dist/assets/AvailableEscalationsPage-CVlG_AVC.js.map +0 -1
  262. package/dashboard/dist/assets/CapabilitiesPage-wxmE4917.js +0 -2
  263. package/dashboard/dist/assets/CapabilitiesPage-wxmE4917.js.map +0 -1
  264. package/dashboard/dist/assets/EntityTimelinePanel-DrL86Yrf.js +0 -2
  265. package/dashboard/dist/assets/EntityTimelinePanel-DrL86Yrf.js.map +0 -1
  266. package/dashboard/dist/assets/OperationsPage-i8KcDpKo.js +0 -3
  267. package/dashboard/dist/assets/OperationsPage-i8KcDpKo.js.map +0 -1
  268. package/dashboard/dist/assets/PersonasPage-DSdRb90f.js +0 -2
  269. package/dashboard/dist/assets/PersonasPage-DSdRb90f.js.map +0 -1
  270. package/dashboard/dist/assets/RolesPage-DCnW0VmD.js +0 -2
  271. package/dashboard/dist/assets/RolesPage-DCnW0VmD.js.map +0 -1
  272. package/dashboard/dist/assets/ScanSchemeDetailPage-DyLmCamO.js +0 -2
  273. package/dashboard/dist/assets/ScanSchemeDetailPage-DyLmCamO.js.map +0 -1
  274. package/dashboard/dist/assets/ScanStationPage-DoZccU5B.js +0 -2
  275. package/dashboard/dist/assets/ScanStationPage-DoZccU5B.js.map +0 -1
  276. package/dashboard/dist/assets/index-5TblaCXQ.css +0 -1
  277. package/dashboard/dist/assets/index-B7IaBPBg.js +0 -6
  278. package/dashboard/dist/assets/index-B7IaBPBg.js.map +0 -1
  279. package/dashboard/dist/assets/index-errgQT5x.js.map +0 -1
  280. package/dashboard/dist/assets/vendor-icons-BxuyFxH2.js.map +0 -1
@@ -0,0 +1,115 @@
1
+ # The Domain Dictionary
2
+
3
+ Every deployment runs its own ontology on top of long-tail's primitives: the
4
+ operation speaks in printers, orders, batches, and resets, while the platform
5
+ speaks in roles, queues, workflows, escalations, and metadata facets. The domain
6
+ dictionary is where that translation is declared. An agent (or a teammate) that
7
+ knows the dictionary hears "printer PRN-001" and immediately knows the query —
8
+ the roles whose rows carry it, the facet that identifies it, `created_at desc`.
9
+
10
+ The dictionary lives in the database (`lt_domain`, one row per deployment). It
11
+ declares the **semantic overlay** — jargon terms, guidance, runbooks. Structure
12
+ is **derived** from the live registries when the dictionary is read: an entity's
13
+ id facet comes from its role's `entity_facet`, a role entry carries the live
14
+ row's title and verb semantics, a workflow entry carries the live config. The
15
+ merged view is always current.
16
+
17
+ ## The shape
18
+
19
+ ```json
20
+ {
21
+ "name": "acme print-farm",
22
+ "version": "1",
23
+ "overview": "One page: what this deployment runs.",
24
+ "terms": [
25
+ {
26
+ "term": "printer",
27
+ "aliases": ["machine"],
28
+ "kind": "entity",
29
+ "maps_to": { "roles": ["printer-fleet"] },
30
+ "guidance": "A machine on the floor, keyed by serialNumber. Find one with facets={serialNumber: value}."
31
+ },
32
+ {
33
+ "term": "reset",
34
+ "kind": "action",
35
+ "maps_to": { "verb": "cancel", "role": "print-operator" },
36
+ "guidance": "Cancel the demand row — the dispatcher re-mints the attempt."
37
+ },
38
+ {
39
+ "term": "the pipe",
40
+ "kind": "workflow",
41
+ "maps_to": { "workflow": "orderPipeline" },
42
+ "id_convention": "pipe-<orderId>",
43
+ "kill_road": "Terminate the pipe root with terminate_workflow; never cancel the demand row.",
44
+ "guidance": "One run per order."
45
+ },
46
+ {
47
+ "term": "claims expire = recovery",
48
+ "kind": "rule",
49
+ "guidance": "A lapsed claim returns the row to the queue. Expiry is recovery, not an error."
50
+ }
51
+ ],
52
+ "runbooks": [
53
+ { "name": "kill a test order", "steps": ["find the pipe root by id convention", "terminate_workflow on it"] }
54
+ ]
55
+ }
56
+ ```
57
+
58
+ Term kinds: `entity` (a tracked noun; `idFacet` derives from the role's
59
+ `entity_facet`, declare it only to override), `role` (jargon for a queue),
60
+ `workflow` (carries `kill_road` and `id_convention`), `facet` (a metadata key's
61
+ meaning; `values` lists a closed domain), `action` (a domain verb mapped to a
62
+ platform verb), `rule` (a standing law, stated imperatively).
63
+
64
+ ## Role verb semantics live on the role
65
+
66
+ What cancel or expiry MEANS for a row class is a property of the role itself.
67
+ Declare it under the reserved `lt_roles.properties` keys — editable with the
68
+ same `PATCH /api/roles/:role` that manages every other role dial:
69
+
70
+ ```json
71
+ { "on_cancel": "reset — the dispatcher re-mints the attempt",
72
+ "on_timeout": "the gate re-parks and keeps listening",
73
+ "worked_by": "machines" }
74
+ ```
75
+
76
+ `cancel_escalation` returns the role's `on_cancel` alongside the receipt, and
77
+ `get_domain_context` merges all three into role entries.
78
+
79
+ ## Registration and editing
80
+
81
+ Seed at boot by pointing the start config at a JSON file:
82
+
83
+ ```typescript
84
+ mcp: { domainDictionaryPath: 'src/longtail/domain.json' }
85
+ ```
86
+
87
+ Seeding is insert-if-absent: the DB row is runtime truth, and a name/version
88
+ mismatch between file and DB logs a drift warning. Edit live with
89
+ `PUT /api/domain` (admin) — the body is `{ doc, expected_version? }`;
90
+ `expected_version` arms optimistic concurrency (409 on conflict). Writes
91
+ validate references against the live registries: unknown roles and workflows
92
+ reject with 422 naming them; unknown facet keys warn (facets are discovered
93
+ from data and may simply have no rows yet). The boot seed applies the same
94
+ checks as warnings, so host seed ordering never blocks a boot.
95
+
96
+ ## The derived floor
97
+
98
+ `get_domain_context` works on every deployment, dictionary or none. The live
99
+ registries already self-describe the structure — roles carry titles,
100
+ descriptions, `entity_facet`, and verb semantics; workflow configs carry
101
+ descriptions and invocability; facet keys are discovered from data. With no
102
+ dictionary registered the tool serves that derived view (entities are named by
103
+ their facet key, e.g. `serialNumber`, and roles sharing a facet form the
104
+ entity's system). A registered dictionary adds what only humans know: the
105
+ jargon nouns and aliases, guidance, kill roads, and runbooks.
106
+
107
+ ## How agents consume it
108
+
109
+ - **MCP `instructions`** carry the overview plus a compact names-only index —
110
+ a session-sized breadcrumb pointing at the tool.
111
+ - **`get_domain_context`** (read-safe) returns the merged view: no args → the
112
+ index; `{ topic, name }` → specific entries, where `name` matches the term or
113
+ any alias case-insensitively and topic `term` searches every kind. Entries
114
+ referencing a since-removed role or workflow are annotated as dangling.
115
+ - **`GET /api/domain`** serves the raw document to dashboards and scripts.
package/docs/events.md CHANGED
@@ -81,6 +81,14 @@ System families declare the fields they populate. Which fields exist is a functi
81
81
 
82
82
  Escalation subjects carry the **role** (the queue) as the organizing token. Subscribe to one queue (`system.escalation.{role}.>`), one verb across queues (`system.escalation.*.*.created`), or one item across role hops (`system.escalation.*.{id}.>`). The role token is sanitized to subject-safe characters (`[A-Za-z0-9_-]`); a `reassigned` event publishes under **both** the departing and arriving role so either queue's subscribers observe the move.
83
83
 
84
+ #### Escalation `data` — one wire shape
85
+
86
+ A lifecycle event is a **notification**, not a transport. Its `data` is the **wire-safe projection** of the escalation row — routing/classification scalars plus the metadata **facets** — and never the heavy or sensitive JSON columns. Both publisher families (the service-mediated `crud.ts` path and the engine-mediated SDK hook) build `data` through one definition, `lib/events/escalation-wire.ts`, so the shape is identical regardless of who transitioned the row.
87
+
88
+ - **Kept:** the scalar columns (an allowlist) and every metadata facet (`orderId`, `serialNumber`, entity keys, `schema_version`, …) — the surface agent triggers filter/map on and the entity/faceted views route by. Verbs add their provenance alongside (`reason`, `released_by`, `resolved_by`, `from_role`/`to_role`).
89
+ - **Dropped:** `envelope`, `escalation_payload`, `resolver_payload`, and `metadata.form_schema`. A subscriber needing these fetches the row by id through the authenticated read API — the pub channel is not authenticated.
90
+ - **Bulk exception:** `publishBulk*` operate on many rows they don't hold in full; they publish the delta plus `bulk: true` (fetching each row to project would cost one query per row) and let subscribers fetch by id.
91
+
84
92
  Consumers (adapters, the agent trigger registry, input_mapping) type against the broad **`LTEvent`** — the base plus every extension as **optional** — since they can't assume any extension is present. Producers (`lib/events/publish.ts`) construct the precise `LT*Event` family types, all assignable to `LTEvent`.
85
93
 
86
94
  ### Who mints it
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@hotmeshio/long-tail",
3
- "version": "0.11.0",
3
+ "version": "0.12.0",
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