@hotmeshio/long-tail 0.25.1 → 0.25.3

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 (273) hide show
  1. package/build/api/escalations/batch-flag.d.ts +19 -0
  2. package/build/api/escalations/batch-flag.js +138 -0
  3. package/build/api/escalations/index.d.ts +2 -0
  4. package/build/api/escalations/index.js +8 -1
  5. package/build/api/escalations/roster-action.d.ts +37 -0
  6. package/build/api/escalations/roster-action.js +179 -0
  7. package/build/api/scan-codes/choice-roles.d.ts +3 -0
  8. package/build/api/scan-codes/choice-roles.js +48 -0
  9. package/build/api/scan-codes/choice.js +8 -0
  10. package/build/api/scan-codes/fill-labels.d.ts +15 -0
  11. package/build/api/scan-codes/fill-labels.js +99 -0
  12. package/build/api/scan-codes/hold.js +1 -0
  13. package/build/api/scan-codes/present.js +7 -2
  14. package/build/api/scan-codes/verb-fill.js +22 -5
  15. package/build/routes/escalations/resolve.js +45 -0
  16. package/build/sdk/index.d.ts +11 -0
  17. package/build/sdk/index.js +3 -0
  18. package/build/services/escalation/batch-flag.d.ts +25 -0
  19. package/build/services/escalation/batch-flag.js +51 -0
  20. package/build/services/escalation/index.d.ts +1 -0
  21. package/build/services/escalation/index.js +1 -0
  22. package/build/services/escalation/roster.d.ts +3 -1
  23. package/build/services/escalation/roster.js +6 -1
  24. package/build/services/scan-code/validate-subject.js +16 -0
  25. package/build/services/scan-code/validate.js +7 -0
  26. package/build/shared/form-validation/index.d.ts +1 -0
  27. package/build/shared/form-validation/index.js +1 -0
  28. package/build/shared/form-validation/x-lt-actions.d.ts +80 -0
  29. package/build/shared/form-validation/x-lt-actions.js +133 -0
  30. package/build/shared/form-validation/x-lt-roster.d.ts +2 -0
  31. package/build/shared/form-validation/x-lt-roster.js +28 -3
  32. package/build/tsconfig.tsbuildinfo +1 -1
  33. package/build/types/escalation.d.ts +19 -0
  34. package/build/types/escalation.js +4 -0
  35. package/build/types/index.d.ts +1 -1
  36. package/build/types/scan-choice.d.ts +9 -0
  37. package/build/types/scan-code/response.d.ts +2 -0
  38. package/build/types/scan-code/rule.d.ts +17 -0
  39. package/dashboard/dist/assets/{AdminDashboard-C_0ShYrm.js → AdminDashboard-DlItqxFS.js} +2 -2
  40. package/dashboard/dist/assets/{AdminDashboard-C_0ShYrm.js.map → AdminDashboard-DlItqxFS.js.map} +1 -1
  41. package/dashboard/dist/assets/{AgentConfigPage-Cc9dI8lO.js → AgentConfigPage-BUmT4a7n.js} +2 -2
  42. package/dashboard/dist/assets/{AgentConfigPage-Cc9dI8lO.js.map → AgentConfigPage-BUmT4a7n.js.map} +1 -1
  43. package/dashboard/dist/assets/{AgentDetailPage-Sdmt5j-k.js → AgentDetailPage-Cww8rlBi.js} +3 -3
  44. package/dashboard/dist/assets/{AgentDetailPage-Sdmt5j-k.js.map → AgentDetailPage-Cww8rlBi.js.map} +1 -1
  45. package/dashboard/dist/assets/AgentsPage-C9UuUKhr.js +2 -0
  46. package/dashboard/dist/assets/{AgentsPage-BuzXc1mg.js.map → AgentsPage-C9UuUKhr.js.map} +1 -1
  47. package/dashboard/dist/assets/AvailableEscalationsPage-DrvfXz70.js +2 -0
  48. package/dashboard/dist/assets/{AvailableEscalationsPage-DU84iaBN.js.map → AvailableEscalationsPage-DrvfXz70.js.map} +1 -1
  49. package/dashboard/dist/assets/{BotPicker-Ci5PUrkl.js → BotPicker-CDq9XRMp.js} +2 -2
  50. package/dashboard/dist/assets/{BotPicker-Ci5PUrkl.js.map → BotPicker-CDq9XRMp.js.map} +1 -1
  51. package/dashboard/dist/assets/{BulkAssignModal-PLx7SLvF.js → BulkAssignModal-jsvqtrEA.js} +2 -2
  52. package/dashboard/dist/assets/{BulkAssignModal-PLx7SLvF.js.map → BulkAssignModal-jsvqtrEA.js.map} +1 -1
  53. package/dashboard/dist/assets/{CapabilitiesPage-DuSfgr6i.js → CapabilitiesPage-CSCrI6B1.js} +2 -2
  54. package/dashboard/dist/assets/{CapabilitiesPage-DuSfgr6i.js.map → CapabilitiesPage-CSCrI6B1.js.map} +1 -1
  55. package/dashboard/dist/assets/{CollapsibleSection-KOO37qs6.js → CollapsibleSection-uD9mn-CQ.js} +2 -2
  56. package/dashboard/dist/assets/{CollapsibleSection-KOO37qs6.js.map → CollapsibleSection-uD9mn-CQ.js.map} +1 -1
  57. package/dashboard/dist/assets/{ConfirmDeleteModal-CI1eE-Nr.js → ConfirmDeleteModal-BRmx2hA4.js} +2 -2
  58. package/dashboard/dist/assets/{ConfirmDeleteModal-CI1eE-Nr.js.map → ConfirmDeleteModal-BRmx2hA4.js.map} +1 -1
  59. package/dashboard/dist/assets/{ConnectedAppsPage-DZgbCC0G.js → ConnectedAppsPage-DlMzE5a-.js} +2 -2
  60. package/dashboard/dist/assets/{ConnectedAppsPage-DZgbCC0G.js.map → ConnectedAppsPage-DlMzE5a-.js.map} +1 -1
  61. package/dashboard/dist/assets/{CountdownTimer-C-Ngk8oq.js → CountdownTimer-sRuM4eM5.js} +2 -2
  62. package/dashboard/dist/assets/{CountdownTimer-C-Ngk8oq.js.map → CountdownTimer-sRuM4eM5.js.map} +1 -1
  63. package/dashboard/dist/assets/{CredentialsPage-BR7s6eVu.js → CredentialsPage-bLYydwqa.js} +2 -2
  64. package/dashboard/dist/assets/{CredentialsPage-BR7s6eVu.js.map → CredentialsPage-bLYydwqa.js.map} +1 -1
  65. package/dashboard/dist/assets/{CronLabel-BQ7Y1Nfd.js → CronLabel-D_ATDL2N.js} +2 -2
  66. package/dashboard/dist/assets/{CronLabel-BQ7Y1Nfd.js.map → CronLabel-D_ATDL2N.js.map} +1 -1
  67. package/dashboard/dist/assets/{DropZone-DCZpORx-.js → DropZone-u1JGfR9G.js} +2 -2
  68. package/dashboard/dist/assets/{DropZone-DCZpORx-.js.map → DropZone-u1JGfR9G.js.map} +1 -1
  69. package/dashboard/dist/assets/{ElapsedCell-BT49mUIc.js → ElapsedCell-groSMfqB.js} +2 -2
  70. package/dashboard/dist/assets/{ElapsedCell-BT49mUIc.js.map → ElapsedCell-groSMfqB.js.map} +1 -1
  71. package/dashboard/dist/assets/{EntityTimelinePanel-BtARWy3R.js → EntityTimelinePanel-D-F3_A9m.js} +2 -2
  72. package/dashboard/dist/assets/{EntityTimelinePanel-BtARWy3R.js.map → EntityTimelinePanel-D-F3_A9m.js.map} +1 -1
  73. package/dashboard/dist/assets/{EscalationListSchemaPage-EEBsNpTe.js → EscalationListSchemaPage-Bad6Jrmr.js} +2 -2
  74. package/dashboard/dist/assets/{EscalationListSchemaPage-EEBsNpTe.js.map → EscalationListSchemaPage-Bad6Jrmr.js.map} +1 -1
  75. package/dashboard/dist/assets/{EscalationSchemaPage-BHSC46Ow.js → EscalationSchemaPage-BKi_npI9.js} +3 -3
  76. package/dashboard/dist/assets/{EscalationSchemaPage-BHSC46Ow.js.map → EscalationSchemaPage-BKi_npI9.js.map} +1 -1
  77. package/dashboard/dist/assets/EscalationTimeline-DQUUm3b1.js +2 -0
  78. package/dashboard/dist/assets/{EscalationTimeline-BWTUBxUf.js.map → EscalationTimeline-DQUUm3b1.js.map} +1 -1
  79. package/dashboard/dist/assets/{EscalationTitleSelect-DOsfY4u8.js → EscalationTitleSelect-3mhXh77a.js} +2 -2
  80. package/dashboard/dist/assets/{EscalationTitleSelect-DOsfY4u8.js.map → EscalationTitleSelect-3mhXh77a.js.map} +1 -1
  81. package/dashboard/dist/assets/{EscalationsOverview-Bl8g53x-.js → EscalationsOverview-Qaov-uML.js} +2 -2
  82. package/dashboard/dist/assets/{EscalationsOverview-Bl8g53x-.js.map → EscalationsOverview-Qaov-uML.js.map} +1 -1
  83. package/dashboard/dist/assets/{EventTable-Bjx17W_i.js → EventTable-V4RF_n58.js} +2 -2
  84. package/dashboard/dist/assets/{EventTable-Bjx17W_i.js.map → EventTable-V4RF_n58.js.map} +1 -1
  85. package/dashboard/dist/assets/{FilterBar-Dnse0soD.js → FilterBar-BygWrnB1.js} +2 -2
  86. package/dashboard/dist/assets/{FilterBar-Dnse0soD.js.map → FilterBar-BygWrnB1.js.map} +1 -1
  87. package/dashboard/dist/assets/{GraphInvokePage-HQEvbHTd.js → GraphInvokePage-Djslhf96.js} +2 -2
  88. package/dashboard/dist/assets/{GraphInvokePage-HQEvbHTd.js.map → GraphInvokePage-Djslhf96.js.map} +1 -1
  89. package/dashboard/dist/assets/{HomePage-DizTklVg.js → HomePage-EjcNxlKx.js} +2 -2
  90. package/dashboard/dist/assets/{HomePage-DizTklVg.js.map → HomePage-EjcNxlKx.js.map} +1 -1
  91. package/dashboard/dist/assets/{ListToolbar-B0qe2QZ5.js → ListToolbar-RrEAePOX.js} +2 -2
  92. package/dashboard/dist/assets/{ListToolbar-B0qe2QZ5.js.map → ListToolbar-RrEAePOX.js.map} +1 -1
  93. package/dashboard/dist/assets/{McpOverview-DmH-qtX9.js → McpOverview-8gqiL3Vj.js} +2 -2
  94. package/dashboard/dist/assets/{McpOverview-DmH-qtX9.js.map → McpOverview-8gqiL3Vj.js.map} +1 -1
  95. package/dashboard/dist/assets/{McpQueryDetailPage-B-qtmwLd.js → McpQueryDetailPage-COyn6Ak5.js} +2 -2
  96. package/dashboard/dist/assets/{McpQueryDetailPage-B-qtmwLd.js.map → McpQueryDetailPage-COyn6Ak5.js.map} +1 -1
  97. package/dashboard/dist/assets/{McpQueryPage-DX1T-Ugq.js → McpQueryPage-Dj6Qj72w.js} +2 -2
  98. package/dashboard/dist/assets/{McpQueryPage-DX1T-Ugq.js.map → McpQueryPage-Dj6Qj72w.js.map} +1 -1
  99. package/dashboard/dist/assets/{McpRunDetailPage-DNdl10nB.js → McpRunDetailPage-80fQn9iX.js} +2 -2
  100. package/dashboard/dist/assets/{McpRunDetailPage-DNdl10nB.js.map → McpRunDetailPage-80fQn9iX.js.map} +1 -1
  101. package/dashboard/dist/assets/{McpRunsPage-DVXVB4AJ.js → McpRunsPage-DaSsI-EM.js} +2 -2
  102. package/dashboard/dist/assets/{McpRunsPage-DVXVB4AJ.js.map → McpRunsPage-DaSsI-EM.js.map} +1 -1
  103. package/dashboard/dist/assets/{NamespacePill-CSZT2fA4.js → NamespacePill-C5epAgq6.js} +2 -2
  104. package/dashboard/dist/assets/{NamespacePill-CSZT2fA4.js.map → NamespacePill-C5epAgq6.js.map} +1 -1
  105. package/dashboard/dist/assets/{OperationsPage-BxgWQq8v.js → OperationsPage-BSu1o2gB.js} +2 -2
  106. package/dashboard/dist/assets/{OperationsPage-BxgWQq8v.js.map → OperationsPage-BSu1o2gB.js.map} +1 -1
  107. package/dashboard/dist/assets/OperatorDashboard-HFI4WGIV.js +2 -0
  108. package/dashboard/dist/assets/{OperatorDashboard-Cw86vOPg.js.map → OperatorDashboard-HFI4WGIV.js.map} +1 -1
  109. package/dashboard/dist/assets/{PageHeader-C4z1ExF7.js → PageHeader-BSWIspNB.js} +2 -2
  110. package/dashboard/dist/assets/{PageHeader-C4z1ExF7.js.map → PageHeader-BSWIspNB.js.map} +1 -1
  111. package/dashboard/dist/assets/{PageHeaderWithStats-B_f_Sz_Q.js → PageHeaderWithStats-DDjopQ-k.js} +2 -2
  112. package/dashboard/dist/assets/{PageHeaderWithStats-B_f_Sz_Q.js.map → PageHeaderWithStats-DDjopQ-k.js.map} +1 -1
  113. package/dashboard/dist/assets/{PersonaDetailPage-BTIJ4A6p.js → PersonaDetailPage-D0qlBuGi.js} +2 -2
  114. package/dashboard/dist/assets/{PersonaDetailPage-BTIJ4A6p.js.map → PersonaDetailPage-D0qlBuGi.js.map} +1 -1
  115. package/dashboard/dist/assets/{PersonasPage-D11PokPb.js → PersonasPage-BJClu-5H.js} +2 -2
  116. package/dashboard/dist/assets/{PersonasPage-D11PokPb.js.map → PersonasPage-BJClu-5H.js.map} +1 -1
  117. package/dashboard/dist/assets/PortalPage-CucNZn_w.js +2 -0
  118. package/dashboard/dist/assets/{PortalPage-1rXm0cNK.js.map → PortalPage-CucNZn_w.js.map} +1 -1
  119. package/dashboard/dist/assets/{ProcessDetailPage-Cp5-969g.js → ProcessDetailPage-B9wMw0RV.js} +2 -2
  120. package/dashboard/dist/assets/{ProcessDetailPage-Cp5-969g.js.map → ProcessDetailPage-B9wMw0RV.js.map} +1 -1
  121. package/dashboard/dist/assets/{ProcessesListPage-assXQe-x.js → ProcessesListPage-B6k4RpmR.js} +2 -2
  122. package/dashboard/dist/assets/{ProcessesListPage-assXQe-x.js.map → ProcessesListPage-B6k4RpmR.js.map} +1 -1
  123. package/dashboard/dist/assets/ResolverForm-ZVufJ4G-.js +8 -0
  124. package/dashboard/dist/assets/ResolverForm-ZVufJ4G-.js.map +1 -0
  125. package/dashboard/dist/assets/{RoleDetailPage-c_Qij0Tf.js → RoleDetailPage-CTbq0mz4.js} +2 -2
  126. package/dashboard/dist/assets/{RoleDetailPage-c_Qij0Tf.js.map → RoleDetailPage-CTbq0mz4.js.map} +1 -1
  127. package/dashboard/dist/assets/{RolePill-Bw_n7EpR.js → RolePill-CoETDpjF.js} +2 -2
  128. package/dashboard/dist/assets/{RolePill-Bw_n7EpR.js.map → RolePill-CoETDpjF.js.map} +1 -1
  129. package/dashboard/dist/assets/{RolesPage-D4oaYgTg.js → RolesPage-DBKxeam4.js} +2 -2
  130. package/dashboard/dist/assets/{RolesPage-D4oaYgTg.js.map → RolesPage-DBKxeam4.js.map} +1 -1
  131. package/dashboard/dist/assets/RosterWidget-BkLAwEYB.js +2 -0
  132. package/dashboard/dist/assets/RosterWidget-BkLAwEYB.js.map +1 -0
  133. package/dashboard/dist/assets/{RunAsSelector-Fptil_sB.js → RunAsSelector-D2DC4iDf.js} +2 -2
  134. package/dashboard/dist/assets/{RunAsSelector-Fptil_sB.js.map → RunAsSelector-D2DC4iDf.js.map} +1 -1
  135. package/dashboard/dist/assets/{ScanCodesPage-BeZA_YJW.js → ScanCodesPage-BlKleaT0.js} +2 -2
  136. package/dashboard/dist/assets/{ScanCodesPage-BeZA_YJW.js.map → ScanCodesPage-BlKleaT0.js.map} +1 -1
  137. package/dashboard/dist/assets/{ScanSchemeDetailPage-Bxi15xNr.js → ScanSchemeDetailPage-CTW6gofi.js} +2 -2
  138. package/dashboard/dist/assets/{ScanSchemeDetailPage-Bxi15xNr.js.map → ScanSchemeDetailPage-CTW6gofi.js.map} +1 -1
  139. package/dashboard/dist/assets/ScanStationPage-DPRjSPyT.js +2 -0
  140. package/dashboard/dist/assets/ScanStationPage-DPRjSPyT.js.map +1 -0
  141. package/dashboard/dist/assets/{ScopeBadge-CKgfwTy3.js → ScopeBadge-CGsTtqFr.js} +2 -2
  142. package/dashboard/dist/assets/{ScopeBadge-CKgfwTy3.js.map → ScopeBadge-CGsTtqFr.js.map} +1 -1
  143. package/dashboard/dist/assets/{StickyPagination-C2drZk7w.js → StickyPagination-CkmX3-Gu.js} +2 -2
  144. package/dashboard/dist/assets/{StickyPagination-C2drZk7w.js.map → StickyPagination-CkmX3-Gu.js.map} +1 -1
  145. package/dashboard/dist/assets/{StreamMessageDetail-x-l5653y.js → StreamMessageDetail-Xm_n510s.js} +2 -2
  146. package/dashboard/dist/assets/{StreamMessageDetail-x-l5653y.js.map → StreamMessageDetail-Xm_n510s.js.map} +1 -1
  147. package/dashboard/dist/assets/{SwimlaneTimeline-Ds_CqLXL.js → SwimlaneTimeline-De48aJan.js} +2 -2
  148. package/dashboard/dist/assets/{SwimlaneTimeline-Ds_CqLXL.js.map → SwimlaneTimeline-De48aJan.js.map} +1 -1
  149. package/dashboard/dist/assets/{TagInput-B6fMAqxd.js → TagInput-S7UuVT_M.js} +2 -2
  150. package/dashboard/dist/assets/{TagInput-B6fMAqxd.js.map → TagInput-S7UuVT_M.js.map} +1 -1
  151. package/dashboard/dist/assets/{TaskDetailPage-BJGKEnIo.js → TaskDetailPage-HycMx3O9.js} +2 -2
  152. package/dashboard/dist/assets/{TaskDetailPage-BJGKEnIo.js.map → TaskDetailPage-HycMx3O9.js.map} +1 -1
  153. package/dashboard/dist/assets/{TaskQueuePill-BnDp_DE6.js → TaskQueuePill-BlHNpYiZ.js} +2 -2
  154. package/dashboard/dist/assets/{TaskQueuePill-BnDp_DE6.js.map → TaskQueuePill-BlHNpYiZ.js.map} +1 -1
  155. package/dashboard/dist/assets/{TasksListPage-DyLaZvTT.js → TasksListPage-OIcFFp1C.js} +2 -2
  156. package/dashboard/dist/assets/{TasksListPage-DyLaZvTT.js.map → TasksListPage-OIcFFp1C.js.map} +1 -1
  157. package/dashboard/dist/assets/{TimeAgo-B_Ta97uy.js → TimeAgo-OTC_55oZ.js} +2 -2
  158. package/dashboard/dist/assets/{TimeAgo-B_Ta97uy.js.map → TimeAgo-OTC_55oZ.js.map} +1 -1
  159. package/dashboard/dist/assets/{TimestampCell-CiTYBQw-.js → TimestampCell-CAwIj_AI.js} +2 -2
  160. package/dashboard/dist/assets/{TimestampCell-CiTYBQw-.js.map → TimestampCell-CAwIj_AI.js.map} +1 -1
  161. package/dashboard/dist/assets/{ToolPill-BRZWo4l8.js → ToolPill-D40uLM_v.js} +2 -2
  162. package/dashboard/dist/assets/{ToolPill-BRZWo4l8.js.map → ToolPill-D40uLM_v.js.map} +1 -1
  163. package/dashboard/dist/assets/{ToolTestPanel-Dw8Zu6xr.js → ToolTestPanel-8Vf6pfw4.js} +2 -2
  164. package/dashboard/dist/assets/{ToolTestPanel-Dw8Zu6xr.js.map → ToolTestPanel-8Vf6pfw4.js.map} +1 -1
  165. package/dashboard/dist/assets/{TopicDetailPage-DPMAWKTN.js → TopicDetailPage-iZW8rK9L.js} +2 -2
  166. package/dashboard/dist/assets/{TopicDetailPage-DPMAWKTN.js.map → TopicDetailPage-iZW8rK9L.js.map} +1 -1
  167. package/dashboard/dist/assets/{TopicsPage-0Z2lAE0d.js → TopicsPage-CqiEcj-W.js} +2 -2
  168. package/dashboard/dist/assets/{TopicsPage-0Z2lAE0d.js.map → TopicsPage-CqiEcj-W.js.map} +1 -1
  169. package/dashboard/dist/assets/{UserName-DrAbCpdY.js → UserName-DQFjuoib.js} +2 -2
  170. package/dashboard/dist/assets/{UserName-DrAbCpdY.js.map → UserName-DQFjuoib.js.map} +1 -1
  171. package/dashboard/dist/assets/{WorkflowExecutionPage-DQITqX-6.js → WorkflowExecutionPage-Di08wCbs.js} +2 -2
  172. package/dashboard/dist/assets/{WorkflowExecutionPage-DQITqX-6.js.map → WorkflowExecutionPage-Di08wCbs.js.map} +1 -1
  173. package/dashboard/dist/assets/{WorkflowPill-Cly9Ln_3.js → WorkflowPill-DJLcK_CM.js} +2 -2
  174. package/dashboard/dist/assets/{WorkflowPill-Cly9Ln_3.js.map → WorkflowPill-DJLcK_CM.js.map} +1 -1
  175. package/dashboard/dist/assets/{WorkflowsDashboard-CMJPiR6G.js → WorkflowsDashboard-Bb8HlrTJ.js} +2 -2
  176. package/dashboard/dist/assets/{WorkflowsDashboard-CMJPiR6G.js.map → WorkflowsDashboard-Bb8HlrTJ.js.map} +1 -1
  177. package/dashboard/dist/assets/{WorkflowsOverview-DwVMLe1y.js → WorkflowsOverview-Dta1kurk.js} +2 -2
  178. package/dashboard/dist/assets/{WorkflowsOverview-DwVMLe1y.js.map → WorkflowsOverview-Dta1kurk.js.map} +1 -1
  179. package/dashboard/dist/assets/{YamlWorkflowDetailPage-Do6s_wmW.js → YamlWorkflowDetailPage-CfAajg68.js} +2 -2
  180. package/dashboard/dist/assets/{YamlWorkflowDetailPage-Do6s_wmW.js.map → YamlWorkflowDetailPage-CfAajg68.js.map} +1 -1
  181. package/dashboard/dist/assets/{YamlWorkflowsPage-8Sr6rZMZ.js → YamlWorkflowsPage-CQFUzT4t.js} +2 -2
  182. package/dashboard/dist/assets/{YamlWorkflowsPage-8Sr6rZMZ.js.map → YamlWorkflowsPage-CQFUzT4t.js.map} +1 -1
  183. package/dashboard/dist/assets/{agents-Maom-dbf.js → agents-PuftRTB2.js} +2 -2
  184. package/dashboard/dist/assets/{agents-Maom-dbf.js.map → agents-PuftRTB2.js.map} +1 -1
  185. package/dashboard/dist/assets/{bots-BESWftTA.js → bots-BmEiPAWY.js} +2 -2
  186. package/dashboard/dist/assets/{bots-BESWftTA.js.map → bots-BmEiPAWY.js.map} +1 -1
  187. package/dashboard/dist/assets/{capabilities-BnvJAmFQ.js → capabilities-CRii4Soa.js} +2 -2
  188. package/dashboard/dist/assets/{capabilities-BnvJAmFQ.js.map → capabilities-CRii4Soa.js.map} +1 -1
  189. package/dashboard/dist/assets/{controlplane-Cu7TD1RX.js → controlplane-DO_czaYo.js} +2 -2
  190. package/dashboard/dist/assets/{controlplane-Cu7TD1RX.js.map → controlplane-DO_czaYo.js.map} +1 -1
  191. package/dashboard/dist/assets/escalation-columns-CzCquCPh.js +2 -0
  192. package/dashboard/dist/assets/{escalation-columns-BPSH8qMx.js.map → escalation-columns-CzCquCPh.js.map} +1 -1
  193. package/dashboard/dist/assets/escalation-items-Cy0ZgJqV.js +2 -0
  194. package/dashboard/dist/assets/escalation-items-Cy0ZgJqV.js.map +1 -0
  195. package/dashboard/dist/assets/{index-BkVarz6E.js → index-2SM2_onB.js} +2 -2
  196. package/dashboard/dist/assets/{index-BkVarz6E.js.map → index-2SM2_onB.js.map} +1 -1
  197. package/dashboard/dist/assets/{index-BG7OpNg7.js → index-4YaDUcKd.js} +2 -2
  198. package/dashboard/dist/assets/{index-BG7OpNg7.js.map → index-4YaDUcKd.js.map} +1 -1
  199. package/dashboard/dist/assets/{index-D5JQweUm.js → index-CL_1VpGb.js} +2 -2
  200. package/dashboard/dist/assets/{index-D5JQweUm.js.map → index-CL_1VpGb.js.map} +1 -1
  201. package/dashboard/dist/assets/{index-BpWutGxS.js → index-CZ7A3AcD.js} +2 -2
  202. package/dashboard/dist/assets/{index-BpWutGxS.js.map → index-CZ7A3AcD.js.map} +1 -1
  203. package/dashboard/dist/assets/index-CfP2nKRc.js +3 -0
  204. package/dashboard/dist/assets/{index-kGSUZCOb.js.map → index-CfP2nKRc.js.map} +1 -1
  205. package/dashboard/dist/assets/{index-B4SNhwgt.js → index-Cga5IW3D.js} +2 -2
  206. package/dashboard/dist/assets/{index-B4SNhwgt.js.map → index-Cga5IW3D.js.map} +1 -1
  207. package/dashboard/dist/assets/{index-WA8py2Yc.js → index-Cx8xb-oU.js} +2 -2
  208. package/dashboard/dist/assets/{index-WA8py2Yc.js.map → index-Cx8xb-oU.js.map} +1 -1
  209. package/dashboard/dist/assets/index-DhSCCpqM.js +2 -0
  210. package/dashboard/dist/assets/{index-AJNPDsTI.js.map → index-DhSCCpqM.js.map} +1 -1
  211. package/dashboard/dist/assets/{index-BLlg1aVG.js → index-DiaRlFYI.js} +2 -2
  212. package/dashboard/dist/assets/{index-BLlg1aVG.js.map → index-DiaRlFYI.js.map} +1 -1
  213. package/dashboard/dist/assets/{index-BLbZsMRG.js → index-Dz6R8-Dw.js} +14 -14
  214. package/dashboard/dist/assets/index-Dz6R8-Dw.js.map +1 -0
  215. package/dashboard/dist/assets/{index-BvI2_dSt.js → index-Rwqrflm-.js} +2 -2
  216. package/dashboard/dist/assets/{index-BvI2_dSt.js.map → index-Rwqrflm-.js.map} +1 -1
  217. package/dashboard/dist/assets/{index-_yHsJJTS.js → index-XntldBd0.js} +2 -2
  218. package/dashboard/dist/assets/{index-_yHsJJTS.js.map → index-XntldBd0.js.map} +1 -1
  219. package/dashboard/dist/assets/index-jL2K6us4.js +13 -0
  220. package/dashboard/dist/assets/{index-qY2KDGkM.js.map → index-jL2K6us4.js.map} +1 -1
  221. package/dashboard/dist/assets/{knowledge-DCFRNG8R.js → knowledge-CeUqGPuo.js} +2 -2
  222. package/dashboard/dist/assets/{knowledge-DCFRNG8R.js.map → knowledge-CeUqGPuo.js.map} +1 -1
  223. package/dashboard/dist/assets/{mcp-CZhOocmN.js → mcp-Cx96NTeD.js} +2 -2
  224. package/dashboard/dist/assets/{mcp-CZhOocmN.js.map → mcp-Cx96NTeD.js.map} +1 -1
  225. package/dashboard/dist/assets/{mcp-query-Wt8z6yAL.js → mcp-query-XAzWl0gm.js} +2 -2
  226. package/dashboard/dist/assets/{mcp-query-Wt8z6yAL.js.map → mcp-query-XAzWl0gm.js.map} +1 -1
  227. package/dashboard/dist/assets/{personas-D2_foqJm.js → personas--4kjwyOw.js} +2 -2
  228. package/dashboard/dist/assets/{personas-D2_foqJm.js.map → personas--4kjwyOw.js.map} +1 -1
  229. package/dashboard/dist/assets/{pipelines-Bb159fNz.js → pipelines-PgkwvG7f.js} +2 -2
  230. package/dashboard/dist/assets/{pipelines-Bb159fNz.js.map → pipelines-PgkwvG7f.js.map} +1 -1
  231. package/dashboard/dist/assets/{tasks-xAU6C6tb.js → tasks-CcYxdBa3.js} +2 -2
  232. package/dashboard/dist/assets/{tasks-xAU6C6tb.js.map → tasks-CcYxdBa3.js.map} +1 -1
  233. package/dashboard/dist/assets/{topics-DFdqb2Te.js → topics-_lik7cNY.js} +2 -2
  234. package/dashboard/dist/assets/{topics-DFdqb2Te.js.map → topics-_lik7cNY.js.map} +1 -1
  235. package/dashboard/dist/assets/{useDebouncedValue-CbHmpS4w.js → useDebouncedValue-Bm_AoxVx.js} +2 -2
  236. package/dashboard/dist/assets/{useDebouncedValue-CbHmpS4w.js.map → useDebouncedValue-Bm_AoxVx.js.map} +1 -1
  237. package/dashboard/dist/assets/{useNamespace-B_00X1yb.js → useNamespace-DgXXKdx5.js} +2 -2
  238. package/dashboard/dist/assets/{useNamespace-B_00X1yb.js.map → useNamespace-DgXXKdx5.js.map} +1 -1
  239. package/dashboard/dist/assets/{useYamlActivityEvents-B4F-s9g0.js → useYamlActivityEvents-Dj2qtGSd.js} +2 -2
  240. package/dashboard/dist/assets/{useYamlActivityEvents-B4F-s9g0.js.map → useYamlActivityEvents-Dj2qtGSd.js.map} +1 -1
  241. package/dashboard/dist/assets/validate-FlXCBBT6.js +2 -0
  242. package/dashboard/dist/assets/validate-FlXCBBT6.js.map +1 -0
  243. package/dashboard/dist/assets/{vendor-icons-C_DQEeBy.js → vendor-icons-DUYcKTjP.js} +2 -2
  244. package/dashboard/dist/assets/{vendor-icons-C_DQEeBy.js.map → vendor-icons-DUYcKTjP.js.map} +1 -1
  245. package/dashboard/dist/assets/{yaml-workflows-DyjbPFVp.js → yaml-workflows-B0_JxRYQ.js} +2 -2
  246. package/dashboard/dist/assets/{yaml-workflows-DyjbPFVp.js.map → yaml-workflows-B0_JxRYQ.js.map} +1 -1
  247. package/dashboard/dist/index.html +2 -2
  248. package/docs/accumulator.md +1 -1
  249. package/docs/api/http/escalations.md +33 -0
  250. package/docs/api/sdk/escalations.md +26 -1
  251. package/docs/hitl/escalation.md +9 -0
  252. package/docs/hitl/x-lt-embed.md +2 -0
  253. package/docs/hitl/x-lt-roster.md +31 -7
  254. package/docs/scan-codes.md +50 -3
  255. package/package.json +2 -2
  256. package/dashboard/dist/assets/AgentsPage-BuzXc1mg.js +0 -2
  257. package/dashboard/dist/assets/AvailableEscalationsPage-DU84iaBN.js +0 -2
  258. package/dashboard/dist/assets/EscalationTimeline-BWTUBxUf.js +0 -2
  259. package/dashboard/dist/assets/FormattedValue-DeVrRJy4.js +0 -2
  260. package/dashboard/dist/assets/FormattedValue-DeVrRJy4.js.map +0 -1
  261. package/dashboard/dist/assets/OperatorDashboard-Cw86vOPg.js +0 -2
  262. package/dashboard/dist/assets/PortalPage-1rXm0cNK.js +0 -2
  263. package/dashboard/dist/assets/ResolverForm-CMzNjmGG.js +0 -8
  264. package/dashboard/dist/assets/ResolverForm-CMzNjmGG.js.map +0 -1
  265. package/dashboard/dist/assets/ScanStationPage-t5Bz957t.js +0 -2
  266. package/dashboard/dist/assets/ScanStationPage-t5Bz957t.js.map +0 -1
  267. package/dashboard/dist/assets/escalation-columns-BPSH8qMx.js +0 -2
  268. package/dashboard/dist/assets/escalation-items-uDQTphVW.js +0 -2
  269. package/dashboard/dist/assets/escalation-items-uDQTphVW.js.map +0 -1
  270. package/dashboard/dist/assets/index-AJNPDsTI.js +0 -2
  271. package/dashboard/dist/assets/index-BLbZsMRG.js.map +0 -1
  272. package/dashboard/dist/assets/index-kGSUZCOb.js +0 -3
  273. package/dashboard/dist/assets/index-qY2KDGkM.js +0 -13
@@ -1 +1 @@
1
- {"version":3,"file":"index-BLlg1aVG.js","sources":["../../src/pages/admin/streams/StreamMessagesPage.tsx"],"sourcesContent":["import { useState, useMemo, useEffect } from 'react';\nimport { X, MessageSquare } from 'lucide-react';\nimport { SlidePanel, SlidePanelViews } from '../../../components/common/layout/SlidePanel';\nimport { useStreamMessages, type StreamMessage } from '../../../api/stream-messages';\nimport { useFilterParams } from '../../../hooks/useFilterParams';\nimport { useNamespace } from '../../../hooks/useNamespace';\nimport { buildApiPath } from '../../../lib/api-path';\nimport { DataTable, type Column } from '../../../components/common/data/DataTable';\nimport { StickyPagination } from '../../../components/common/data/StickyPagination';\nimport { FilterBar, FilterSelect, FilterInput } from '../../../components/common/data/FilterBar';\nimport { DateValue } from '../../../components/common/display/DateValue';\nimport { PageHeader } from '../../../components/common/layout/PageHeader';\nimport { ListToolbar } from '../../../components/common/data/ListToolbar';\nimport { StreamMessageDetail } from './StreamMessageDetail';\nimport { STATUS_DOT, STATUS_LABEL, STATUS_OPTIONS, SOURCE_OPTIONS, SOURCE_BADGE } from './constants';\n\nfunction truncateMiddle(str: string, max: number): string {\n if (str.length <= max) return str;\n const half = Math.floor((max - 1) / 2);\n return `${str.slice(0, half)}…${str.slice(-half)}`;\n}\n\nexport function StreamMessagesPage() {\n const { namespace, available } = useNamespace('namespace');\n\n const { filters, setFilter, pagination, sort, setSort } = useFilterParams({\n filters: { namespace: '', source: 'worker', status: '', stream_name: '', msg_type: '', topic: '', workflow_name: '', jid: '', aid: '' },\n });\n\n const [selected, setSelected] = useState<StreamMessage | null>(null);\n\n const namespaceOptions = useMemo(\n () => available.map((id) => ({ value: id, label: id })),\n [available],\n );\n\n const { data, isLoading, refetch, isFetching } = useStreamMessages({\n namespace: filters.namespace || namespace,\n source: (filters.source as 'engine' | 'worker') || 'worker',\n limit: pagination.pageSize,\n offset: pagination.offset,\n sort_by: sort.sort_by || 'created_at',\n order: sort.order || 'desc',\n status: (filters.status as any) || undefined,\n stream_name: filters.stream_name || undefined,\n msg_type: filters.msg_type || undefined,\n topic: filters.topic || undefined,\n workflow_name: filters.workflow_name || undefined,\n jid: filters.jid || undefined,\n aid: filters.aid || undefined,\n });\n\n const messages = data?.messages ?? [];\n const total = data?.total ?? 0;\n\n const activeMessage = useMemo(() => {\n if (!selected) return null;\n return messages.find((m) => m.id === selected.id && m.source === selected.source) ?? selected;\n }, [messages, selected]);\n\n const panelOpen = !!activeMessage;\n\n // Hold the last message through the panel's closing animation so the detail\n // content stays rendered while the panel slides shut.\n const [lastMessage, setLastMessage] = useState<StreamMessage | null>(null);\n useEffect(() => {\n if (activeMessage) setLastMessage(activeMessage);\n }, [activeMessage]);\n const displayMessage = activeMessage ?? lastMessage;\n\n // Status and type live as the dot and the detail panel — the row itself\n // stays one flexible stream column plus fixed narrow facts, so the table\n // shrinks with the container (same shape as the executions list).\n const columns: Column<StreamMessage>[] = [\n {\n key: 'stream_name',\n label: 'Stream',\n sortable: true,\n render: (row) => (\n <div className=\"flex items-center gap-2 min-w-0\">\n <span\n className={`w-2.5 h-2.5 shrink-0 rounded-full dot-ring ${STATUS_DOT[row.status]}`}\n title={STATUS_LABEL[row.status]}\n />\n <span className=\"font-mono text-xs text-text-secondary truncate\" title={row.stream_name}>\n {row.stream_name}\n </span>\n </div>\n ),\n },\n {\n key: 'source',\n label: 'Source',\n render: (row) => <span className={SOURCE_BADGE}>{row.source}</span>,\n className: 'w-24',\n },\n {\n key: 'created_at',\n label: 'Created',\n sortable: true,\n render: (row) => <DateValue date={row.created_at} format=\"relative\" className=\"text-xs text-text-secondary whitespace-nowrap\" />,\n className: 'w-32',\n },\n {\n key: 'reserved_at',\n label: 'Reserved',\n render: (row) => row.reserved_at\n ? <DateValue date={row.reserved_at} format=\"relative\" className=\"text-xs text-text-secondary whitespace-nowrap\" />\n : <span className=\"text-xs text-text-tertiary\">—</span>,\n className: 'w-32',\n },\n {\n key: 'expired_at',\n label: 'Processed',\n render: (row) => row.expired_at\n ? <DateValue date={row.expired_at} format=\"relative\" className=\"text-xs text-text-secondary whitespace-nowrap\" />\n : <span className=\"text-xs text-text-tertiary\">—</span>,\n className: 'w-32',\n },\n {\n key: 'priority',\n label: 'Pri',\n sortable: true,\n render: (row) => <span className=\"text-xs text-text-secondary\">{row.priority}</span>,\n className: 'w-14 text-right',\n },\n {\n key: 'retry_attempt',\n label: 'Retries',\n render: (row) => (\n <span className=\"text-xs text-text-secondary whitespace-nowrap\">\n {row.retry_attempt}/{row.max_retry_attempts}\n </span>\n ),\n className: 'w-20',\n },\n ];\n\n return (\n // Master-list flow beside a full-height panel: the left column is a plain\n // page-scrolling list (FilterBar and table headers stick against the main\n // scroll, exactly like the executions list). The panel column spans the\n // page height; its sticky viewport stays pinned with its own scroll.\n // Negative margins let the panel span the full middle row; the left\n // column re-adds those gutters for its own content.\n <div className=\"flex items-stretch min-w-0 -mt-10 -mr-10 -mb-16\">\n <div className=\"flex-1 min-w-0 pt-10 pr-10\">\n <PageHeader title=\"Messages\" docsHash=\"#docs:dashboard.md:messages\" />\n\n <FilterBar actions={\n <ListToolbar\n onRefresh={() => refetch()}\n isFetching={isFetching}\n apiPath={buildApiPath('/controlplane/stream-messages', {\n namespace: filters.namespace || namespace,\n source: filters.source || 'worker',\n limit: pagination.pageSize,\n offset: pagination.offset,\n sort_by: sort.sort_by || 'created_at',\n order: sort.order || 'desc',\n status: filters.status || undefined,\n stream_name: filters.stream_name || undefined,\n msg_type: filters.msg_type || undefined,\n topic: filters.topic || undefined,\n workflow_name: filters.workflow_name || undefined,\n jid: filters.jid || undefined,\n aid: filters.aid || undefined,\n })}\n />\n }>\n <FilterSelect\n label=\"Namespace\"\n value={filters.namespace}\n onChange={(v) => setFilter('namespace', v)}\n options={namespaceOptions}\n required\n />\n <FilterSelect\n label=\"Source\"\n value={filters.source}\n onChange={(v) => setFilter('source', v)}\n options={SOURCE_OPTIONS}\n required\n />\n <FilterSelect\n label=\"Status\"\n value={filters.status}\n onChange={(v) => setFilter('status', v)}\n options={STATUS_OPTIONS}\n />\n <FilterInput\n label=\"Stream\"\n value={filters.stream_name}\n onChange={(v) => setFilter('stream_name', v)}\n placeholder=\"Filter by stream name…\"\n />\n <FilterInput\n label=\"Job ID\"\n value={filters.jid}\n onChange={(v) => setFilter('jid', v)}\n placeholder=\"Filter by jid…\"\n />\n {/* Active dimension filter pills — inline in the sticky bar */}\n {[\n { key: 'topic', label: 'Topic', value: filters.topic },\n { key: 'workflow_name', label: 'Workflow', value: filters.workflow_name },\n { key: 'aid', label: 'Activity', value: filters.aid },\n { key: 'msg_type', label: 'Type', value: filters.msg_type },\n ].filter((f) => f.value).map((f) => (\n <button\n key={f.key}\n onClick={() => setFilter(f.key as any, '')}\n className=\"inline-flex items-center gap-1 px-2 py-0.5 text-2xs font-mono rounded-full bg-accent/15 text-accent hover:bg-accent/25 transition-colors\"\n title={`Clear ${f.label} filter: ${f.value}`}\n >\n {f.label}: {truncateMiddle(f.value, 12)}\n <X className=\"w-2.5 h-2.5\" />\n </button>\n ))}\n </FilterBar>\n\n <DataTable\n columns={columns}\n data={messages}\n keyFn={(row) => `${row.source}:${row.id}`}\n isLoading={isLoading}\n emptyMessage=\"No stream messages found\"\n onRowClick={(row) => setSelected(row)}\n activeRowKey={activeMessage ? `${activeMessage.source}:${activeMessage.id}` : null}\n sort={sort}\n onSort={setSort}\n layout=\"fixed\"\n />\n\n {/* Direct child of the tall column so sticky works; its -mx-10 fills\n the column's pr-10, ending flush at the panel's edge. */}\n <StickyPagination\n page={pagination.page}\n totalPages={pagination.totalPages(total)}\n onPageChange={pagination.setPage}\n total={total}\n pageSize={pagination.pageSize}\n onPageSizeChange={pagination.setPageSize}\n />\n </div>\n\n {/* Detail panel — spans the page height; the sticky viewport keeps the\n chrome pinned to the visible area with its own scroll. */}\n <SlidePanel open={panelOpen} width={416} className=\"self-stretch\">\n <div className=\"h-full pl-4\">\n <SlidePanelViews\n views={[{\n id: 'detail',\n icon: MessageSquare,\n label: 'Message Detail',\n content: displayMessage ? (\n <StreamMessageDetail\n message={displayMessage}\n filters={{\n onFilterStatus: (v) => setFilter('status', v),\n onFilterStreamName: (v) => setFilter('stream_name', v),\n onFilterMsgType: (v) => setFilter('msg_type', v),\n onFilterTopic: (v) => setFilter('topic', v),\n onFilterWorkflow: (v) => setFilter('workflow_name', v),\n onFilterJid: (v) => setFilter('jid', v),\n onFilterAid: (v) => setFilter('aid', v),\n }}\n />\n ) : null,\n }]}\n activeId=\"detail\"\n onViewChange={() => {}}\n onClose={() => setSelected(null)}\n stickyClassName=\"sticky top-0 z-10 h-[calc(100vh-5.25rem)] pt-9\"\n />\n </div>\n </SlidePanel>\n </div>\n );\n}\n"],"names":["truncateMiddle","str","max","half","StreamMessagesPage","namespace","available","useNamespace","filters","setFilter","pagination","sort","setSort","useFilterParams","selected","setSelected","useState","namespaceOptions","useMemo","id","data","isLoading","refetch","isFetching","useStreamMessages","messages","total","activeMessage","m","panelOpen","lastMessage","setLastMessage","useEffect","displayMessage","columns","row","jsxs","jsx","STATUS_DOT","STATUS_LABEL","SOURCE_BADGE","DateValue","PageHeader","FilterBar","ListToolbar","buildApiPath","FilterSelect","v","SOURCE_OPTIONS","STATUS_OPTIONS","FilterInput","f","X","DataTable","StickyPagination","SlidePanel","SlidePanelViews","MessageSquare","StreamMessageDetail"],"mappings":"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"}
1
+ {"version":3,"file":"index-DiaRlFYI.js","sources":["../../src/pages/admin/streams/StreamMessagesPage.tsx"],"sourcesContent":["import { useState, useMemo, useEffect } from 'react';\nimport { X, MessageSquare } from 'lucide-react';\nimport { SlidePanel, SlidePanelViews } from '../../../components/common/layout/SlidePanel';\nimport { useStreamMessages, type StreamMessage } from '../../../api/stream-messages';\nimport { useFilterParams } from '../../../hooks/useFilterParams';\nimport { useNamespace } from '../../../hooks/useNamespace';\nimport { buildApiPath } from '../../../lib/api-path';\nimport { DataTable, type Column } from '../../../components/common/data/DataTable';\nimport { StickyPagination } from '../../../components/common/data/StickyPagination';\nimport { FilterBar, FilterSelect, FilterInput } from '../../../components/common/data/FilterBar';\nimport { DateValue } from '../../../components/common/display/DateValue';\nimport { PageHeader } from '../../../components/common/layout/PageHeader';\nimport { ListToolbar } from '../../../components/common/data/ListToolbar';\nimport { StreamMessageDetail } from './StreamMessageDetail';\nimport { STATUS_DOT, STATUS_LABEL, STATUS_OPTIONS, SOURCE_OPTIONS, SOURCE_BADGE } from './constants';\n\nfunction truncateMiddle(str: string, max: number): string {\n if (str.length <= max) return str;\n const half = Math.floor((max - 1) / 2);\n return `${str.slice(0, half)}…${str.slice(-half)}`;\n}\n\nexport function StreamMessagesPage() {\n const { namespace, available } = useNamespace('namespace');\n\n const { filters, setFilter, pagination, sort, setSort } = useFilterParams({\n filters: { namespace: '', source: 'worker', status: '', stream_name: '', msg_type: '', topic: '', workflow_name: '', jid: '', aid: '' },\n });\n\n const [selected, setSelected] = useState<StreamMessage | null>(null);\n\n const namespaceOptions = useMemo(\n () => available.map((id) => ({ value: id, label: id })),\n [available],\n );\n\n const { data, isLoading, refetch, isFetching } = useStreamMessages({\n namespace: filters.namespace || namespace,\n source: (filters.source as 'engine' | 'worker') || 'worker',\n limit: pagination.pageSize,\n offset: pagination.offset,\n sort_by: sort.sort_by || 'created_at',\n order: sort.order || 'desc',\n status: (filters.status as any) || undefined,\n stream_name: filters.stream_name || undefined,\n msg_type: filters.msg_type || undefined,\n topic: filters.topic || undefined,\n workflow_name: filters.workflow_name || undefined,\n jid: filters.jid || undefined,\n aid: filters.aid || undefined,\n });\n\n const messages = data?.messages ?? [];\n const total = data?.total ?? 0;\n\n const activeMessage = useMemo(() => {\n if (!selected) return null;\n return messages.find((m) => m.id === selected.id && m.source === selected.source) ?? selected;\n }, [messages, selected]);\n\n const panelOpen = !!activeMessage;\n\n // Hold the last message through the panel's closing animation so the detail\n // content stays rendered while the panel slides shut.\n const [lastMessage, setLastMessage] = useState<StreamMessage | null>(null);\n useEffect(() => {\n if (activeMessage) setLastMessage(activeMessage);\n }, [activeMessage]);\n const displayMessage = activeMessage ?? lastMessage;\n\n // Status and type live as the dot and the detail panel — the row itself\n // stays one flexible stream column plus fixed narrow facts, so the table\n // shrinks with the container (same shape as the executions list).\n const columns: Column<StreamMessage>[] = [\n {\n key: 'stream_name',\n label: 'Stream',\n sortable: true,\n render: (row) => (\n <div className=\"flex items-center gap-2 min-w-0\">\n <span\n className={`w-2.5 h-2.5 shrink-0 rounded-full dot-ring ${STATUS_DOT[row.status]}`}\n title={STATUS_LABEL[row.status]}\n />\n <span className=\"font-mono text-xs text-text-secondary truncate\" title={row.stream_name}>\n {row.stream_name}\n </span>\n </div>\n ),\n },\n {\n key: 'source',\n label: 'Source',\n render: (row) => <span className={SOURCE_BADGE}>{row.source}</span>,\n className: 'w-24',\n },\n {\n key: 'created_at',\n label: 'Created',\n sortable: true,\n render: (row) => <DateValue date={row.created_at} format=\"relative\" className=\"text-xs text-text-secondary whitespace-nowrap\" />,\n className: 'w-32',\n },\n {\n key: 'reserved_at',\n label: 'Reserved',\n render: (row) => row.reserved_at\n ? <DateValue date={row.reserved_at} format=\"relative\" className=\"text-xs text-text-secondary whitespace-nowrap\" />\n : <span className=\"text-xs text-text-tertiary\">—</span>,\n className: 'w-32',\n },\n {\n key: 'expired_at',\n label: 'Processed',\n render: (row) => row.expired_at\n ? <DateValue date={row.expired_at} format=\"relative\" className=\"text-xs text-text-secondary whitespace-nowrap\" />\n : <span className=\"text-xs text-text-tertiary\">—</span>,\n className: 'w-32',\n },\n {\n key: 'priority',\n label: 'Pri',\n sortable: true,\n render: (row) => <span className=\"text-xs text-text-secondary\">{row.priority}</span>,\n className: 'w-14 text-right',\n },\n {\n key: 'retry_attempt',\n label: 'Retries',\n render: (row) => (\n <span className=\"text-xs text-text-secondary whitespace-nowrap\">\n {row.retry_attempt}/{row.max_retry_attempts}\n </span>\n ),\n className: 'w-20',\n },\n ];\n\n return (\n // Master-list flow beside a full-height panel: the left column is a plain\n // page-scrolling list (FilterBar and table headers stick against the main\n // scroll, exactly like the executions list). The panel column spans the\n // page height; its sticky viewport stays pinned with its own scroll.\n // Negative margins let the panel span the full middle row; the left\n // column re-adds those gutters for its own content.\n <div className=\"flex items-stretch min-w-0 -mt-10 -mr-10 -mb-16\">\n <div className=\"flex-1 min-w-0 pt-10 pr-10\">\n <PageHeader title=\"Messages\" docsHash=\"#docs:dashboard.md:messages\" />\n\n <FilterBar actions={\n <ListToolbar\n onRefresh={() => refetch()}\n isFetching={isFetching}\n apiPath={buildApiPath('/controlplane/stream-messages', {\n namespace: filters.namespace || namespace,\n source: filters.source || 'worker',\n limit: pagination.pageSize,\n offset: pagination.offset,\n sort_by: sort.sort_by || 'created_at',\n order: sort.order || 'desc',\n status: filters.status || undefined,\n stream_name: filters.stream_name || undefined,\n msg_type: filters.msg_type || undefined,\n topic: filters.topic || undefined,\n workflow_name: filters.workflow_name || undefined,\n jid: filters.jid || undefined,\n aid: filters.aid || undefined,\n })}\n />\n }>\n <FilterSelect\n label=\"Namespace\"\n value={filters.namespace}\n onChange={(v) => setFilter('namespace', v)}\n options={namespaceOptions}\n required\n />\n <FilterSelect\n label=\"Source\"\n value={filters.source}\n onChange={(v) => setFilter('source', v)}\n options={SOURCE_OPTIONS}\n required\n />\n <FilterSelect\n label=\"Status\"\n value={filters.status}\n onChange={(v) => setFilter('status', v)}\n options={STATUS_OPTIONS}\n />\n <FilterInput\n label=\"Stream\"\n value={filters.stream_name}\n onChange={(v) => setFilter('stream_name', v)}\n placeholder=\"Filter by stream name…\"\n />\n <FilterInput\n label=\"Job ID\"\n value={filters.jid}\n onChange={(v) => setFilter('jid', v)}\n placeholder=\"Filter by jid…\"\n />\n {/* Active dimension filter pills — inline in the sticky bar */}\n {[\n { key: 'topic', label: 'Topic', value: filters.topic },\n { key: 'workflow_name', label: 'Workflow', value: filters.workflow_name },\n { key: 'aid', label: 'Activity', value: filters.aid },\n { key: 'msg_type', label: 'Type', value: filters.msg_type },\n ].filter((f) => f.value).map((f) => (\n <button\n key={f.key}\n onClick={() => setFilter(f.key as any, '')}\n className=\"inline-flex items-center gap-1 px-2 py-0.5 text-2xs font-mono rounded-full bg-accent/15 text-accent hover:bg-accent/25 transition-colors\"\n title={`Clear ${f.label} filter: ${f.value}`}\n >\n {f.label}: {truncateMiddle(f.value, 12)}\n <X className=\"w-2.5 h-2.5\" />\n </button>\n ))}\n </FilterBar>\n\n <DataTable\n columns={columns}\n data={messages}\n keyFn={(row) => `${row.source}:${row.id}`}\n isLoading={isLoading}\n emptyMessage=\"No stream messages found\"\n onRowClick={(row) => setSelected(row)}\n activeRowKey={activeMessage ? `${activeMessage.source}:${activeMessage.id}` : null}\n sort={sort}\n onSort={setSort}\n layout=\"fixed\"\n />\n\n {/* Direct child of the tall column so sticky works; its -mx-10 fills\n the column's pr-10, ending flush at the panel's edge. */}\n <StickyPagination\n page={pagination.page}\n totalPages={pagination.totalPages(total)}\n onPageChange={pagination.setPage}\n total={total}\n pageSize={pagination.pageSize}\n onPageSizeChange={pagination.setPageSize}\n />\n </div>\n\n {/* Detail panel — spans the page height; the sticky viewport keeps the\n chrome pinned to the visible area with its own scroll. */}\n <SlidePanel open={panelOpen} width={416} className=\"self-stretch\">\n <div className=\"h-full pl-4\">\n <SlidePanelViews\n views={[{\n id: 'detail',\n icon: MessageSquare,\n label: 'Message Detail',\n content: displayMessage ? (\n <StreamMessageDetail\n message={displayMessage}\n filters={{\n onFilterStatus: (v) => setFilter('status', v),\n onFilterStreamName: (v) => setFilter('stream_name', v),\n onFilterMsgType: (v) => setFilter('msg_type', v),\n onFilterTopic: (v) => setFilter('topic', v),\n onFilterWorkflow: (v) => setFilter('workflow_name', v),\n onFilterJid: (v) => setFilter('jid', v),\n onFilterAid: (v) => setFilter('aid', v),\n }}\n />\n ) : null,\n }]}\n activeId=\"detail\"\n onViewChange={() => {}}\n onClose={() => setSelected(null)}\n stickyClassName=\"sticky top-0 z-10 h-[calc(100vh-5.25rem)] pt-9\"\n />\n </div>\n </SlidePanel>\n </div>\n );\n}\n"],"names":["truncateMiddle","str","max","half","StreamMessagesPage","namespace","available","useNamespace","filters","setFilter","pagination","sort","setSort","useFilterParams","selected","setSelected","useState","namespaceOptions","useMemo","id","data","isLoading","refetch","isFetching","useStreamMessages","messages","total","activeMessage","m","panelOpen","lastMessage","setLastMessage","useEffect","displayMessage","columns","row","jsxs","jsx","STATUS_DOT","STATUS_LABEL","SOURCE_BADGE","DateValue","PageHeader","FilterBar","ListToolbar","buildApiPath","FilterSelect","v","SOURCE_OPTIONS","STATUS_OPTIONS","FilterInput","f","X","DataTable","StickyPagination","SlidePanel","SlidePanelViews","MessageSquare","StreamMessageDetail"],"mappings":"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"}