@hotmeshio/long-tail 0.10.7 → 0.10.9

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 (224) hide show
  1. package/build/api/escalations/bulk.js +7 -1
  2. package/build/api/escalations/helpers.d.ts +10 -1
  3. package/build/api/escalations/helpers.js +52 -12
  4. package/build/lib/events/matching.d.ts +10 -0
  5. package/build/lib/events/matching.js +14 -0
  6. package/build/lib/events/publish.d.ts +8 -2
  7. package/build/lib/events/publish.js +9 -2
  8. package/build/lib/events/socketio.d.ts +8 -2
  9. package/build/lib/events/socketio.js +36 -3
  10. package/build/lib/events/system-events.js +9 -1
  11. package/build/services/escalation/crud.js +40 -2
  12. package/build/services/orchestrator/condition.d.ts +1 -1
  13. package/build/services/orchestrator/condition.js +1 -1
  14. package/build/services/topics/system-topics.d.ts +0 -4
  15. package/build/services/topics/system-topics.js +57 -14
  16. package/build/types/events.d.ts +11 -3
  17. package/build/types/index.d.ts +1 -1
  18. package/dashboard/dist/assets/{AdminDashboard-CYlm0_J0.js → AdminDashboard-DWSYdAeW.js} +2 -2
  19. package/dashboard/dist/assets/{AdminDashboard-CYlm0_J0.js.map → AdminDashboard-DWSYdAeW.js.map} +1 -1
  20. package/dashboard/dist/assets/{AgentConfigPage-BttOMcj_.js → AgentConfigPage-Dm6gL76m.js} +2 -2
  21. package/dashboard/dist/assets/{AgentConfigPage-BttOMcj_.js.map → AgentConfigPage-Dm6gL76m.js.map} +1 -1
  22. package/dashboard/dist/assets/{AgentDetailPage-D9JdkWV8.js → AgentDetailPage-D-Xbyrb6.js} +3 -3
  23. package/dashboard/dist/assets/AgentDetailPage-D-Xbyrb6.js.map +1 -0
  24. package/dashboard/dist/assets/{AgentsPage-AqGtEOL1.js → AgentsPage-DKaDRk-Y.js} +2 -2
  25. package/dashboard/dist/assets/{AgentsPage-AqGtEOL1.js.map → AgentsPage-DKaDRk-Y.js.map} +1 -1
  26. package/dashboard/dist/assets/{AvailableEscalationsPage-rKbrcY8Y.js → AvailableEscalationsPage-B-aHvGKD.js} +2 -2
  27. package/dashboard/dist/assets/AvailableEscalationsPage-B-aHvGKD.js.map +1 -0
  28. package/dashboard/dist/assets/{BotPicker-Bj4MB_so.js → BotPicker-DRv_orzI.js} +2 -2
  29. package/dashboard/dist/assets/{BotPicker-Bj4MB_so.js.map → BotPicker-DRv_orzI.js.map} +1 -1
  30. package/dashboard/dist/assets/{CapabilitiesPage-DzLP5-ad.js → CapabilitiesPage-DqRVzMol.js} +2 -2
  31. package/dashboard/dist/assets/{CapabilitiesPage-DzLP5-ad.js.map → CapabilitiesPage-DqRVzMol.js.map} +1 -1
  32. package/dashboard/dist/assets/{CollapsibleSection-CReMhtzK.js → CollapsibleSection-D0psvw8i.js} +2 -2
  33. package/dashboard/dist/assets/{CollapsibleSection-CReMhtzK.js.map → CollapsibleSection-D0psvw8i.js.map} +1 -1
  34. package/dashboard/dist/assets/CountdownTimer-BhF3oqS8.js +2 -0
  35. package/dashboard/dist/assets/CountdownTimer-BhF3oqS8.js.map +1 -0
  36. package/dashboard/dist/assets/{CredentialsPage-D_2T6vSb.js → CredentialsPage-Axdci1z-.js} +2 -2
  37. package/dashboard/dist/assets/{CredentialsPage-D_2T6vSb.js.map → CredentialsPage-Axdci1z-.js.map} +1 -1
  38. package/dashboard/dist/assets/{CronLabel-DBmKrLvL.js → CronLabel-BjZ_wZA8.js} +2 -2
  39. package/dashboard/dist/assets/{CronLabel-DBmKrLvL.js.map → CronLabel-BjZ_wZA8.js.map} +1 -1
  40. package/dashboard/dist/assets/CustomDurationPicker-CkUCMUfk.js +2 -0
  41. package/dashboard/dist/assets/CustomDurationPicker-CkUCMUfk.js.map +1 -0
  42. package/dashboard/dist/assets/{DropZone-BrnAkQxF.js → DropZone-_tmC3jEe.js} +2 -2
  43. package/dashboard/dist/assets/{DropZone-BrnAkQxF.js.map → DropZone-_tmC3jEe.js.map} +1 -1
  44. package/dashboard/dist/assets/{ElapsedCell-C0LbM8o2.js → ElapsedCell-BE_CN5sP.js} +2 -2
  45. package/dashboard/dist/assets/{ElapsedCell-C0LbM8o2.js.map → ElapsedCell-BE_CN5sP.js.map} +1 -1
  46. package/dashboard/dist/assets/{EscalationListSchemaPage-CkEJnFKd.js → EscalationListSchemaPage-CgcVIiYR.js} +3 -3
  47. package/dashboard/dist/assets/{EscalationListSchemaPage-CkEJnFKd.js.map → EscalationListSchemaPage-CgcVIiYR.js.map} +1 -1
  48. package/dashboard/dist/assets/{EscalationSchemaPage-CnlwGAIE.js → EscalationSchemaPage-BaAn1Hcr.js} +3 -3
  49. package/dashboard/dist/assets/{EscalationSchemaPage-CnlwGAIE.js.map → EscalationSchemaPage-BaAn1Hcr.js.map} +1 -1
  50. package/dashboard/dist/assets/{EscalationsOverview-DFM-f7do.js → EscalationsOverview-Dbq7tKzr.js} +2 -2
  51. package/dashboard/dist/assets/{EscalationsOverview-DFM-f7do.js.map → EscalationsOverview-Dbq7tKzr.js.map} +1 -1
  52. package/dashboard/dist/assets/{EventTable-Q3iICRf_.js → EventTable-0RUK9jqt.js} +2 -2
  53. package/dashboard/dist/assets/{EventTable-Q3iICRf_.js.map → EventTable-0RUK9jqt.js.map} +1 -1
  54. package/dashboard/dist/assets/{FilterBar-B0taDH7I.js → FilterBar-B_dy2Jhj.js} +2 -2
  55. package/dashboard/dist/assets/{FilterBar-B0taDH7I.js.map → FilterBar-B_dy2Jhj.js.map} +1 -1
  56. package/dashboard/dist/assets/{GraphInvokePage-B_P3pJeA.js → GraphInvokePage-CvLYp1nL.js} +2 -2
  57. package/dashboard/dist/assets/{GraphInvokePage-B_P3pJeA.js.map → GraphInvokePage-CvLYp1nL.js.map} +1 -1
  58. package/dashboard/dist/assets/HomePage-B6s1ZeyA.js +2 -0
  59. package/dashboard/dist/assets/HomePage-B6s1ZeyA.js.map +1 -0
  60. package/dashboard/dist/assets/{ListToolbar-ueCQtu5C.js → ListToolbar-DVhlAKZ3.js} +2 -2
  61. package/dashboard/dist/assets/{ListToolbar-ueCQtu5C.js.map → ListToolbar-DVhlAKZ3.js.map} +1 -1
  62. package/dashboard/dist/assets/{McpOverview-DMaRUXnA.js → McpOverview-Ca8cpc8g.js} +2 -2
  63. package/dashboard/dist/assets/{McpOverview-DMaRUXnA.js.map → McpOverview-Ca8cpc8g.js.map} +1 -1
  64. package/dashboard/dist/assets/{McpQueryDetailPage-D6YSD94n.js → McpQueryDetailPage-D0r2lyZg.js} +2 -2
  65. package/dashboard/dist/assets/{McpQueryDetailPage-D6YSD94n.js.map → McpQueryDetailPage-D0r2lyZg.js.map} +1 -1
  66. package/dashboard/dist/assets/{McpQueryPage-CNGNB59o.js → McpQueryPage-DPP6BB3d.js} +2 -2
  67. package/dashboard/dist/assets/{McpQueryPage-CNGNB59o.js.map → McpQueryPage-DPP6BB3d.js.map} +1 -1
  68. package/dashboard/dist/assets/{McpRunDetailPage-CJ9hDTNs.js → McpRunDetailPage-C76mfUtG.js} +2 -2
  69. package/dashboard/dist/assets/{McpRunDetailPage-CJ9hDTNs.js.map → McpRunDetailPage-C76mfUtG.js.map} +1 -1
  70. package/dashboard/dist/assets/{McpRunsPage-_UaoIwzX.js → McpRunsPage-B43BqEyw.js} +2 -2
  71. package/dashboard/dist/assets/{McpRunsPage-_UaoIwzX.js.map → McpRunsPage-B43BqEyw.js.map} +1 -1
  72. package/dashboard/dist/assets/{NamespacePill-DQGzN0Ph.js → NamespacePill-B5gHotsd.js} +2 -2
  73. package/dashboard/dist/assets/{NamespacePill-DQGzN0Ph.js.map → NamespacePill-B5gHotsd.js.map} +1 -1
  74. package/dashboard/dist/assets/OperationsPage-DbHzQCuE.js +2 -0
  75. package/dashboard/dist/assets/OperationsPage-DbHzQCuE.js.map +1 -0
  76. package/dashboard/dist/assets/OperatorDashboard-B70nS_Ah.js +2 -0
  77. package/dashboard/dist/assets/OperatorDashboard-B70nS_Ah.js.map +1 -0
  78. package/dashboard/dist/assets/{PageHeader-DlcE3U5L.js → PageHeader-DrbNMGxm.js} +2 -2
  79. package/dashboard/dist/assets/{PageHeader-DlcE3U5L.js.map → PageHeader-DrbNMGxm.js.map} +1 -1
  80. package/dashboard/dist/assets/{PageHeaderWithStats-BMhnR3-9.js → PageHeaderWithStats-SbQkaQLG.js} +2 -2
  81. package/dashboard/dist/assets/{PageHeaderWithStats-BMhnR3-9.js.map → PageHeaderWithStats-SbQkaQLG.js.map} +1 -1
  82. package/dashboard/dist/assets/{ProcessDetailPage-CxJ5BSDk.js → ProcessDetailPage-eLLUCWFf.js} +2 -2
  83. package/dashboard/dist/assets/{ProcessDetailPage-CxJ5BSDk.js.map → ProcessDetailPage-eLLUCWFf.js.map} +1 -1
  84. package/dashboard/dist/assets/{ProcessesListPage-GQMOo5Wo.js → ProcessesListPage-Di0n8TR4.js} +2 -2
  85. package/dashboard/dist/assets/{ProcessesListPage-GQMOo5Wo.js.map → ProcessesListPage-Di0n8TR4.js.map} +1 -1
  86. package/dashboard/dist/assets/{RoleDetailPage-Bh5qdI0w.js → RoleDetailPage-Dhn9zU5l.js} +3 -3
  87. package/dashboard/dist/assets/{RoleDetailPage-Bh5qdI0w.js.map → RoleDetailPage-Dhn9zU5l.js.map} +1 -1
  88. package/dashboard/dist/assets/{RolePill-dzo14hB_.js → RolePill-Cz-AAWqA.js} +2 -2
  89. package/dashboard/dist/assets/{RolePill-dzo14hB_.js.map → RolePill-Cz-AAWqA.js.map} +1 -1
  90. package/dashboard/dist/assets/{RolesPage-BIg3_Em6.js → RolesPage-BnAwjUiG.js} +2 -2
  91. package/dashboard/dist/assets/{RolesPage-BIg3_Em6.js.map → RolesPage-BnAwjUiG.js.map} +1 -1
  92. package/dashboard/dist/assets/{RunAsSelector-DQp_keSD.js → RunAsSelector-DFv0VNVZ.js} +2 -2
  93. package/dashboard/dist/assets/{RunAsSelector-DQp_keSD.js.map → RunAsSelector-DFv0VNVZ.js.map} +1 -1
  94. package/dashboard/dist/assets/{StickyPagination-qLaLa33X.js → StickyPagination-D5zxe_l9.js} +2 -2
  95. package/dashboard/dist/assets/{StickyPagination-qLaLa33X.js.map → StickyPagination-D5zxe_l9.js.map} +1 -1
  96. package/dashboard/dist/assets/{StreamMessageDetail-Bi37x95H.js → StreamMessageDetail-BmBfNSEr.js} +2 -2
  97. package/dashboard/dist/assets/{StreamMessageDetail-Bi37x95H.js.map → StreamMessageDetail-BmBfNSEr.js.map} +1 -1
  98. package/dashboard/dist/assets/{SwimlaneTimeline-BdNhoiW8.js → SwimlaneTimeline-CA0TKDIi.js} +2 -2
  99. package/dashboard/dist/assets/{SwimlaneTimeline-BdNhoiW8.js.map → SwimlaneTimeline-CA0TKDIi.js.map} +1 -1
  100. package/dashboard/dist/assets/{TagInput-cyhTZTwe.js → TagInput-Bf9dZSG6.js} +2 -2
  101. package/dashboard/dist/assets/{TagInput-cyhTZTwe.js.map → TagInput-Bf9dZSG6.js.map} +1 -1
  102. package/dashboard/dist/assets/{TaskDetailPage-ngdXRgQp.js → TaskDetailPage-C15nADUW.js} +2 -2
  103. package/dashboard/dist/assets/{TaskDetailPage-ngdXRgQp.js.map → TaskDetailPage-C15nADUW.js.map} +1 -1
  104. package/dashboard/dist/assets/{TaskQueuePill-_zIpG4bG.js → TaskQueuePill-DfiBYQy2.js} +2 -2
  105. package/dashboard/dist/assets/{TaskQueuePill-_zIpG4bG.js.map → TaskQueuePill-DfiBYQy2.js.map} +1 -1
  106. package/dashboard/dist/assets/{TasksListPage-BIE7nrdE.js → TasksListPage-DQdAayqc.js} +2 -2
  107. package/dashboard/dist/assets/{TasksListPage-BIE7nrdE.js.map → TasksListPage-DQdAayqc.js.map} +1 -1
  108. package/dashboard/dist/assets/{TimeAgo-C6FZSNZp.js → TimeAgo-CvslqTB7.js} +2 -2
  109. package/dashboard/dist/assets/{TimeAgo-C6FZSNZp.js.map → TimeAgo-CvslqTB7.js.map} +1 -1
  110. package/dashboard/dist/assets/{TimestampCell-DI5zPUgV.js → TimestampCell-BZCQQONl.js} +2 -2
  111. package/dashboard/dist/assets/{TimestampCell-DI5zPUgV.js.map → TimestampCell-BZCQQONl.js.map} +1 -1
  112. package/dashboard/dist/assets/{ToolPill-CKHYG6eV.js → ToolPill-gA4sXukc.js} +2 -2
  113. package/dashboard/dist/assets/{ToolPill-CKHYG6eV.js.map → ToolPill-gA4sXukc.js.map} +1 -1
  114. package/dashboard/dist/assets/{ToolTestPanel-Dli94RPI.js → ToolTestPanel-BgLVc6R5.js} +2 -2
  115. package/dashboard/dist/assets/{ToolTestPanel-Dli94RPI.js.map → ToolTestPanel-BgLVc6R5.js.map} +1 -1
  116. package/dashboard/dist/assets/{TopicDetailPage-vPtXb7gD.js → TopicDetailPage-9A0aPb4t.js} +2 -2
  117. package/dashboard/dist/assets/{TopicDetailPage-vPtXb7gD.js.map → TopicDetailPage-9A0aPb4t.js.map} +1 -1
  118. package/dashboard/dist/assets/{TopicsPage-BwiEX0pU.js → TopicsPage-o0EZxKbR.js} +2 -2
  119. package/dashboard/dist/assets/{TopicsPage-BwiEX0pU.js.map → TopicsPage-o0EZxKbR.js.map} +1 -1
  120. package/dashboard/dist/assets/{UserName-YozoXJA1.js → UserName-DKMLxBJ5.js} +2 -2
  121. package/dashboard/dist/assets/{UserName-YozoXJA1.js.map → UserName-DKMLxBJ5.js.map} +1 -1
  122. package/dashboard/dist/assets/{WorkflowExecutionPage-Bce8g08l.js → WorkflowExecutionPage-C-snB_dD.js} +2 -2
  123. package/dashboard/dist/assets/{WorkflowExecutionPage-Bce8g08l.js.map → WorkflowExecutionPage-C-snB_dD.js.map} +1 -1
  124. package/dashboard/dist/assets/{WorkflowPill-DlSVXnnj.js → WorkflowPill-Djt2AtZk.js} +2 -2
  125. package/dashboard/dist/assets/{WorkflowPill-DlSVXnnj.js.map → WorkflowPill-Djt2AtZk.js.map} +1 -1
  126. package/dashboard/dist/assets/{WorkflowsDashboard-DpVAH35I.js → WorkflowsDashboard-BRQmgsLR.js} +2 -2
  127. package/dashboard/dist/assets/{WorkflowsDashboard-DpVAH35I.js.map → WorkflowsDashboard-BRQmgsLR.js.map} +1 -1
  128. package/dashboard/dist/assets/{WorkflowsOverview-Bp2pxXJO.js → WorkflowsOverview-DmMdIRHQ.js} +2 -2
  129. package/dashboard/dist/assets/{WorkflowsOverview-Bp2pxXJO.js.map → WorkflowsOverview-DmMdIRHQ.js.map} +1 -1
  130. package/dashboard/dist/assets/{YamlWorkflowDetailPage-CL_kD0mX.js → YamlWorkflowDetailPage-Bj7QkCry.js} +2 -2
  131. package/dashboard/dist/assets/{YamlWorkflowDetailPage-CL_kD0mX.js.map → YamlWorkflowDetailPage-Bj7QkCry.js.map} +1 -1
  132. package/dashboard/dist/assets/{YamlWorkflowsPage-Dtt3x3_T.js → YamlWorkflowsPage-BIi77mE0.js} +2 -2
  133. package/dashboard/dist/assets/{YamlWorkflowsPage-Dtt3x3_T.js.map → YamlWorkflowsPage-BIi77mE0.js.map} +1 -1
  134. package/dashboard/dist/assets/{agents-xhtLVBwq.js → agents-EBIsjLCr.js} +2 -2
  135. package/dashboard/dist/assets/{agents-xhtLVBwq.js.map → agents-EBIsjLCr.js.map} +1 -1
  136. package/dashboard/dist/assets/{bots-DZ1MQUms.js → bots-BXzxybS6.js} +2 -2
  137. package/dashboard/dist/assets/{bots-DZ1MQUms.js.map → bots-BXzxybS6.js.map} +1 -1
  138. package/dashboard/dist/assets/{capabilities-B8j2h7Jn.js → capabilities-CnprG6q_.js} +2 -2
  139. package/dashboard/dist/assets/{capabilities-B8j2h7Jn.js.map → capabilities-CnprG6q_.js.map} +1 -1
  140. package/dashboard/dist/assets/{controlplane-DKijNA6h.js → controlplane-DiC0xtNq.js} +2 -2
  141. package/dashboard/dist/assets/{controlplane-DKijNA6h.js.map → controlplane-DiC0xtNq.js.map} +1 -1
  142. package/dashboard/dist/assets/{escalation-columns-DjoZ4dDb.js → escalation-columns-D0aYpJkF.js} +2 -2
  143. package/dashboard/dist/assets/{escalation-columns-DjoZ4dDb.js.map → escalation-columns-D0aYpJkF.js.map} +1 -1
  144. package/dashboard/dist/assets/index-B2iZG_HP.css +1 -0
  145. package/dashboard/dist/assets/{index-BCIJE--_.js → index-B6ldRx_s.js} +2 -2
  146. package/dashboard/dist/assets/{index-BCIJE--_.js.map → index-B6ldRx_s.js.map} +1 -1
  147. package/dashboard/dist/assets/{index-DrPWIFSv.js → index-BHAjQoOy.js} +2 -2
  148. package/dashboard/dist/assets/{index-DrPWIFSv.js.map → index-BHAjQoOy.js.map} +1 -1
  149. package/dashboard/dist/assets/{index-DcDEJ6b_.js → index-BzRXMicE.js} +2 -2
  150. package/dashboard/dist/assets/{index-DcDEJ6b_.js.map → index-BzRXMicE.js.map} +1 -1
  151. package/dashboard/dist/assets/{index-CMv6YMJY.js → index-C7KY8GTF.js} +2 -2
  152. package/dashboard/dist/assets/{index-CMv6YMJY.js.map → index-C7KY8GTF.js.map} +1 -1
  153. package/dashboard/dist/assets/index-CSTwyrwu.js +63 -0
  154. package/dashboard/dist/assets/index-CSTwyrwu.js.map +1 -0
  155. package/dashboard/dist/assets/{index-DYCCUmSM.js → index-CcMIca5t.js} +2 -2
  156. package/dashboard/dist/assets/{index-DYCCUmSM.js.map → index-CcMIca5t.js.map} +1 -1
  157. package/dashboard/dist/assets/{index-BqeQGQ4K.js → index-CjBdB8Ht.js} +2 -2
  158. package/dashboard/dist/assets/{index-BqeQGQ4K.js.map → index-CjBdB8Ht.js.map} +1 -1
  159. package/dashboard/dist/assets/{index-B0ktIiOY.js → index-D-7mT0ew.js} +2 -2
  160. package/dashboard/dist/assets/{index-B0ktIiOY.js.map → index-D-7mT0ew.js.map} +1 -1
  161. package/dashboard/dist/assets/{index-Cp1jJHm1.js → index-DDA7FvqT.js} +2 -2
  162. package/dashboard/dist/assets/{index-Cp1jJHm1.js.map → index-DDA7FvqT.js.map} +1 -1
  163. package/dashboard/dist/assets/index-DVmC_UfQ.js +5 -0
  164. package/dashboard/dist/assets/index-DVmC_UfQ.js.map +1 -0
  165. package/dashboard/dist/assets/{index-ChHD9p_I.js → index-Dht0ihGT.js} +2 -2
  166. package/dashboard/dist/assets/{index-ChHD9p_I.js.map → index-Dht0ihGT.js.map} +1 -1
  167. package/dashboard/dist/assets/{index-DWDEa8jS.js → index-gBnGEubX.js} +2 -2
  168. package/dashboard/dist/assets/{index-DWDEa8jS.js.map → index-gBnGEubX.js.map} +1 -1
  169. package/dashboard/dist/assets/{index-0SzWFShg.js → index-ovFEZ9SV.js} +2 -2
  170. package/dashboard/dist/assets/{index-0SzWFShg.js.map → index-ovFEZ9SV.js.map} +1 -1
  171. package/dashboard/dist/assets/{knowledge-Dl3cOfFR.js → knowledge-W5QSKkYQ.js} +2 -2
  172. package/dashboard/dist/assets/{knowledge-Dl3cOfFR.js.map → knowledge-W5QSKkYQ.js.map} +1 -1
  173. package/dashboard/dist/assets/{mcp-BwjeqkHn.js → mcp-n877HyOj.js} +2 -2
  174. package/dashboard/dist/assets/{mcp-BwjeqkHn.js.map → mcp-n877HyOj.js.map} +1 -1
  175. package/dashboard/dist/assets/{mcp-query-C1Rlt4az.js → mcp-query-C9kV4sUm.js} +2 -2
  176. package/dashboard/dist/assets/{mcp-query-C1Rlt4az.js.map → mcp-query-C9kV4sUm.js.map} +1 -1
  177. package/dashboard/dist/assets/{pipelines-BGIUgIH_.js → pipelines-CBR68T8R.js} +2 -2
  178. package/dashboard/dist/assets/{pipelines-BGIUgIH_.js.map → pipelines-CBR68T8R.js.map} +1 -1
  179. package/dashboard/dist/assets/{tasks-CnC1xEaD.js → tasks-DHpWqKMk.js} +2 -2
  180. package/dashboard/dist/assets/{tasks-CnC1xEaD.js.map → tasks-DHpWqKMk.js.map} +1 -1
  181. package/dashboard/dist/assets/{topics-C6EcHi07.js → topics-CaLtyqSh.js} +2 -2
  182. package/dashboard/dist/assets/{topics-C6EcHi07.js.map → topics-CaLtyqSh.js.map} +1 -1
  183. package/dashboard/dist/assets/useEventHooks-B8p56JlB.js +2 -0
  184. package/dashboard/dist/assets/useEventHooks-B8p56JlB.js.map +1 -0
  185. package/dashboard/dist/assets/{useNamespace-Ci_oA5Tq.js → useNamespace-ej71FCvu.js} +2 -2
  186. package/dashboard/dist/assets/{useNamespace-Ci_oA5Tq.js.map → useNamespace-ej71FCvu.js.map} +1 -1
  187. package/dashboard/dist/assets/{useYamlActivityEvents-u8RUiMma.js → useYamlActivityEvents-DgpiFXib.js} +2 -2
  188. package/dashboard/dist/assets/{useYamlActivityEvents-u8RUiMma.js.map → useYamlActivityEvents-DgpiFXib.js.map} +1 -1
  189. package/dashboard/dist/assets/{users-DtiYvg8z.js → users-CHnjI_Ca.js} +2 -2
  190. package/dashboard/dist/assets/{users-DtiYvg8z.js.map → users-CHnjI_Ca.js.map} +1 -1
  191. package/dashboard/dist/assets/{vendor-icons-BE_WrH2z.js → vendor-icons-Bg6eJX4Z.js} +136 -141
  192. package/dashboard/dist/assets/vendor-icons-Bg6eJX4Z.js.map +1 -0
  193. package/dashboard/dist/assets/{workflows-BysPDsh9.js → workflows-DtnXUL0U.js} +2 -2
  194. package/dashboard/dist/assets/{workflows-BysPDsh9.js.map → workflows-DtnXUL0U.js.map} +1 -1
  195. package/dashboard/dist/assets/{yaml-workflows-31qtxg5W.js → yaml-workflows-DDclYAID.js} +2 -2
  196. package/dashboard/dist/assets/{yaml-workflows-31qtxg5W.js.map → yaml-workflows-DDclYAID.js.map} +1 -1
  197. package/dashboard/dist/index.html +3 -3
  198. package/docs/api/http/escalations.md +2 -2
  199. package/docs/api/sdk/escalations.md +2 -2
  200. package/docs/events.md +4 -2
  201. package/docs/hitl/escalation.md +2 -2
  202. package/docs/hitl/x-lt-embed.md +41 -12
  203. package/docs/hitl/x-lt-list-schema.md +26 -3
  204. package/package.json +1 -1
  205. package/dashboard/dist/assets/AgentDetailPage-D9JdkWV8.js.map +0 -1
  206. package/dashboard/dist/assets/AvailableEscalationsPage-rKbrcY8Y.js.map +0 -1
  207. package/dashboard/dist/assets/CountdownTimer-Z8N8ccJ1.js +0 -2
  208. package/dashboard/dist/assets/CountdownTimer-Z8N8ccJ1.js.map +0 -1
  209. package/dashboard/dist/assets/CustomDurationPicker-BTmpAQOL.js +0 -2
  210. package/dashboard/dist/assets/CustomDurationPicker-BTmpAQOL.js.map +0 -1
  211. package/dashboard/dist/assets/HomePage-lu88PzQH.js +0 -2
  212. package/dashboard/dist/assets/HomePage-lu88PzQH.js.map +0 -1
  213. package/dashboard/dist/assets/OperationsPage-CTfwuWXR.js +0 -2
  214. package/dashboard/dist/assets/OperationsPage-CTfwuWXR.js.map +0 -1
  215. package/dashboard/dist/assets/OperatorDashboard-DMPJmgP_.js +0 -2
  216. package/dashboard/dist/assets/OperatorDashboard-DMPJmgP_.js.map +0 -1
  217. package/dashboard/dist/assets/index-C6UuVkz7.js +0 -63
  218. package/dashboard/dist/assets/index-C6UuVkz7.js.map +0 -1
  219. package/dashboard/dist/assets/index-Dh5Y3hq7.js +0 -5
  220. package/dashboard/dist/assets/index-Dh5Y3hq7.js.map +0 -1
  221. package/dashboard/dist/assets/index-WSGppNeK.css +0 -1
  222. package/dashboard/dist/assets/useEventHooks-Cyq4DiQA.js +0 -2
  223. package/dashboard/dist/assets/useEventHooks-Cyq4DiQA.js.map +0 -1
  224. package/dashboard/dist/assets/vendor-icons-BE_WrH2z.js.map +0 -1
@@ -362,7 +362,7 @@ Reach for native `condition(signalId, config)` when you want the leanest path; r
362
362
 
363
363
  ### Atomic form (recommended)
364
364
 
365
- Pass an escalation config as the second argument. The escalation row is written inside the workflow's Leg1 checkpoint — one commit, crash-safe: no separate `ltCreateEscalation` activity, no enrich step. `signal_key` is set to `signalId`, so the dashboard resolve endpoint (resolve-by-id → Path 0) and `POST /escalations/resolve-by-signal-key` resume *this* job in place, and `system.escalation.{id}.created` fires automatically.
365
+ Pass an escalation config as the second argument. The escalation row is written inside the workflow's Leg1 checkpoint — one commit, crash-safe: no separate `ltCreateEscalation` activity, no enrich step. `signal_key` is set to `signalId`, so the dashboard resolve endpoint (resolve-by-id → Path 0) and `POST /escalations/resolve-by-signal-key` resume *this* job in place, and `system.escalation.{role}.{id}.created` fires automatically.
366
366
 
367
367
  `conditionLT` returns `T | false | null`:
368
368
  - `T` — the resolver's payload (normal resolution)
@@ -393,7 +393,7 @@ export async function stationWorker(envelope: LTEnvelope) {
393
393
  if (decision === false) {
394
394
  // SLA passed: the workflow resumed on the timer and the engine transitioned
395
395
  // the row pending → expired atomically. A late resolve returns
396
- // already-expired, and system.escalation.{id}.expired fired for dashboards.
396
+ // already-expired, and system.escalation.{role}.{id}.expired fired for dashboards.
397
397
  return { type: 'return' as const, data: { autoRejected: 'sla' } };
398
398
  }
399
399
  if (decision === null) {
package/docs/events.md CHANGED
@@ -71,13 +71,15 @@ System families declare the fields they populate. Which fields exist is a functi
71
71
  |---|---|---|
72
72
  | workflow | `system.workflow.{id}.{started\|completed\|failed}` | `workflowId`, `workflowName`, `taskQueue`, `status` |
73
73
  | task | `system.task.{taskId}.{created\|started\|completed\|escalated\|failed}` | + `taskId` |
74
- | escalation | `system.escalation.{id}.{created\|resolved\|claimed\|released}` | `escalationId` (+ workflow context), `status` |
74
+ | escalation | `system.escalation.{role}.{id}.{created\|resolved\|claimed\|released\|cancelled\|reassigned\|expired}` | `escalationId`, `role` (+ workflow context), `status` |
75
75
  | activity | `system.activity.{wfId}.{activity}.{started\|completed\|failed}` | `activityName` (+ workflow context) |
76
76
  | milestone | `system.milestone.{wfId}` | `milestones` (+ workflow context) |
77
77
  | agent | `system.agent.{name}.{started\|completed\|failed\|…}` | `workflowId`=agentId, `workflowName`=agentName |
78
78
  | knowledge / file | `system.knowledge.{domain}.*` / `system.file.*` | none — payload only |
79
79
 
80
- `status` is a **per-family vocabulary**, not one global enum: workflow `started|in_progress|running|completed|failed`; task `created|in_progress|completed|needs_intervention|failed`; escalation `pending|claimed|released|resolved|cancelled`.
80
+ `status` is a **per-family vocabulary**, not one global enum: workflow `started|in_progress|running|completed|failed`; task `created|in_progress|completed|needs_intervention|failed`; escalation `pending|claimed|released|resolved|cancelled|expired`.
81
+
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.
81
83
 
82
84
  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`.
83
85
 
@@ -2,7 +2,7 @@
2
2
 
3
3
  ## `conditionLT` — Atomic Pattern
4
4
 
5
- Pass an escalation config to `conditionLT`. The escalation row, its metadata, and the resume timer all commit inside the workflow's Leg1 checkpoint — one write, crash-safe. The `signal_key` on the row is the resume key: the dashboard resolve endpoint and `POST /api/escalations/resolve-by-signal-key` both resume this job in place, and the `system.escalation.{id}.created` event fires automatically.
5
+ Pass an escalation config to `conditionLT`. The escalation row, its metadata, and the resume timer all commit inside the workflow's Leg1 checkpoint — one write, crash-safe. The `signal_key` on the row is the resume key: the dashboard resolve endpoint and `POST /api/escalations/resolve-by-signal-key` both resume this job in place, and the `system.escalation.{role}.{id}.created` event fires automatically.
6
6
 
7
7
  ```typescript
8
8
  import { conditionLT } from '@hotmeshio/long-tail';
@@ -63,7 +63,7 @@ import type { EscalationResolution } from '@hotmeshio/long-tail';
63
63
  const decision = await conditionLT<{
64
64
  approved: boolean;
65
65
  $resolution?: EscalationResolution;
66
- }>(signalId, { role: 'print-operator', metadata: { orderId } });
66
+ }>(signalId, { role: 'order-reviewer', metadata: { orderId } });
67
67
 
68
68
  if (decision && decision.$resolution) {
69
69
  const { escalationId, resolvedBy, resolvedByEmail } = decision.$resolution;
@@ -143,13 +143,32 @@ A structured query object. String values inside `facets` support `{{domain.path}
143
143
  | Field | Type | Description |
144
144
  |-------|------|-------------|
145
145
  | `role` | `string` | Role queue to query |
146
- | `status` | `string` | `"pending"`, `"resolved"`, `"cancelled"`, `"expired"` |
146
+ | `status` | `string` | `"pending"` (default), `"resolved"`, `"cancelled"`, `"expired"` |
147
147
  | `facets` | `Record<string, string>` | Metadata containment filter; string values support `{{domain.path}}` tokens |
148
- | `available` | `boolean` | `true` — unclaimed/expired only |
148
+ | `assigned` | `"me"` \| `"any"` | Ownership scope see below |
149
149
  | `limit` | `number` | Max rows to show (default: 5) |
150
+ | `available` | `boolean` | Legacy availability flag; superseded by `assigned` |
150
151
 
151
152
  The widget is disabled (shows no list and makes no API call) when neither `role` nor any facet value is set — both are required to avoid broad unbounded queries.
152
153
 
154
+ ### Ownership scope (`assigned`)
155
+
156
+ Ownership is one more dimension of the same faceted query language — "claimed" is the implied status the API manages (pending, held, claim window live), not a separate list:
157
+
158
+ - `"me"` — rows claimed by the **viewing user**. The batch case: an earlier step assigned a set of order items to whoever claimed the batch; the follow-up form shows that person their own items with working inline actions.
159
+ - `"any"` — all matching rows regardless of claim state.
160
+ - omitted — available rows only (unclaimed, or claim window lapsed).
161
+
162
+ The scope resolves through ONE shared mapping consumed by the escalation-list widget, its `x-lt-actions`, and `x-lt-submit-guard` — a guard and an embed declaring the same query always agree on count and rows. Inline actions on claimed-to-me rows fire the standard resolve endpoint as the claim holder; RBAC and `enforce_schema` apply unchanged.
163
+
164
+ ```json
165
+ "x-lt-query": {
166
+ "role": "order-items",
167
+ "facets": { "orderId": "{{metadata.orderId}}" },
168
+ "assigned": "me"
169
+ }
170
+ ```
171
+
153
172
  ### `x-lt-columns` (optional)
154
173
 
155
174
  An array of `{ label, value, format? }` — the same shape as `x-lt-columns` in list schemas. The `value` strings use `{{domain.path}}` tokens resolved against each **displayed** escalation's own context (its row, metadata, envelope, payload, resolver).
@@ -167,13 +186,13 @@ Inline row actions: each row gains a button that fires a canned resolve against
167
186
  ```json
168
187
  "x-lt-actions": [
169
188
  {
170
- "label": "Bagged ✓",
189
+ "label": "Picked ✓",
171
190
  "resolverPayload": {
172
191
  "approved": true,
173
- "checks": { "bagged": true, "labeled": true },
192
+ "checks": { "picked": true, "scanned": true },
174
193
  "orderId": "{{metadata.orderId}}"
175
194
  },
176
- "confirm": "Bag {{metadata.orderId}} {{metadata.side}}?"
195
+ "confirm": "Mark {{metadata.sku}} picked for {{metadata.orderId}}?"
177
196
  }
178
197
  ]
179
198
  ```
@@ -186,7 +205,7 @@ Inline row actions: each row gains a button that fires a canned resolve against
186
205
 
187
206
  On success the row updates in place through the standard query invalidation — no navigation. A rejected resolve (validation failure, lost claim) shows the server's message inline in the row; the detail link stays available, so the full form remains the path for rejects and anything the canned payload can't express.
188
207
 
189
- Declare one action for the happy path and leave the exception path to the form. A "walk" of N sibling items collapses from N navigations to N clicks on one page.
208
+ Declare one action for the happy path and leave the exception path to the form. A batch of N sibling items collapses from N navigations to N clicks on one page.
190
209
 
191
210
  ### Empty and loading states
192
211
 
@@ -203,12 +222,12 @@ A top-level form_schema token (a peer of `x-lt-help`) that keeps the resolve but
203
222
  {
204
223
  "x-lt-submit-guard": {
205
224
  "query": {
206
- "role": "print-harvest",
207
- "status": "pending",
208
- "facets": { "walkId": "{{metadata.walkId}}" }
225
+ "role": "order-items",
226
+ "facets": { "orderId": "{{metadata.orderId}}" },
227
+ "assigned": "me"
209
228
  },
210
229
  "mustBeEmpty": true,
211
- "message": "{{count}} plates still pending — bag them before closing the walk."
230
+ "message": "{{count}} item(s) still pending — pick them before closing the order."
212
231
  },
213
232
  "type": "object",
214
233
  "properties": { ... }
@@ -217,10 +236,12 @@ A top-level form_schema token (a peer of `x-lt-help`) that keeps the resolve but
217
236
 
218
237
  | Field | Type | Description |
219
238
  |-------|------|-------------|
220
- | `query` | `object` | Same shape as `x-lt-query`; facet string values interpolate against the host escalation's context |
239
+ | `query` | `object` | Same shape as `x-lt-query` — including the `assigned` ownership scope; facet string values interpolate against the host escalation's context |
221
240
  | `mustBeEmpty` | `boolean` | The gate condition (default `true`) |
222
241
  | `message` | `string` | Shown beside the disabled submit; `{{count}}` carries the live row count, `{{domain.path}}` tokens also interpolate |
223
242
 
243
+ The guard and an escalation-list embed declaring the same query resolve through one shared mapping — the count and the visible rows always agree, whatever the scope.
244
+
224
245
  Pair it with an `escalation-list` embed on the same query so the operator sees exactly which rows are holding the gate.
225
246
 
226
247
  The guard is a UI layer: it makes the form honest, it does not enforce. A resolve arriving through the raw API bypasses it by design — the consuming workflow's own verification (reject and re-park with the remainder) is the durable backstop. Triage is never gated: when the guarded work itself is the problem, "Send to Triage" stays available.
@@ -270,4 +291,12 @@ The link widget generates a client-side URL; the queue it points to applies its
270
291
 
271
292
  ## Example workflow
272
293
 
273
- The `examples/workflows/related-escalations/` workflow demonstrates all three widgets in a realistic two-stage review scenario. See `forms.ts` in that directory for the complete form schema.
294
+ The `examples/workflows/related-escalations/` workflow demonstrates all three widgets in a realistic two-stage review scenario, followed by a claimed walk. See `forms.ts` and `forms-walk.ts` in that directory for the complete form schemas.
295
+
296
+ The claimed walk (stage 3, after the manager approves) is the ownership-scope reference:
297
+
298
+ 1. Three plate rows park in `rel-plate`, each faceted with the walk's `originId`.
299
+ 2. A walk-claim row parks in `rel-walker`. Resolving it IS the "start walk" button — the resolver's identity arrives on the workflow via `$resolution`, and one atomic query-form bulk assign claims every plate for that person.
300
+ 3. The closeout row parks in `rel-closer`. Its form declares the walk query ONCE — `{ role: "rel-plate", facets: { originId: "{{metadata.originId}}" }, assigned: "me" }` — consumed by the embedded list, its `Bagged ✓` inline actions, and the submit guard. The walker bags each plate in place; the count beside the locked submit falls with each click; the last plate unlocks the submit.
301
+
302
+ The whole journey is two form submits and N inline clicks, with zero navigation.
@@ -1,6 +1,6 @@
1
1
  # List Schema (`x-lt-list-schema`)
2
2
 
3
- The form schema formats one escalation on the detail page. A role can also own a `list_schema` that formats its whole list page — the list-page analog of the resolve form. It is opt-in and applies only when the list is scoped to exactly one role (`/escalations/available?role=<role>`). Absent, the list renders the standard engineer table; present, a rich role-authored view renders with a "Table view" toggle one click away.
3
+ The form schema formats one escalation on the detail page. A role can also own a `list_schema` that formats its whole list page — the list-page analog of the resolve form. It is opt-in and applies only when the list is scoped to exactly one role (`/escalations/available?role=<role>`, and the personal inbox at `/escalations/queue?role=<role>`). Absent, the list renders the standard engineer table; present, a rich role-authored view renders with a "Table view" toggle one click away.
4
4
 
5
5
  The list schema is versioned independently of the form schema — a list edit never bumps the form version. Edit it at `/admin/roles/:role/list-schema`. The list always renders the latest version.
6
6
 
@@ -16,14 +16,31 @@ Every string is a markdown/text template run through the same `{{domain.path}}`
16
16
  | `x-lt-help` | schema | Optional markdown header, interpolated with the active row |
17
17
  | `x-lt-active` | schema | The live item card: `{ title, subtitle?, body?, fields?: [{ label, value }] }` |
18
18
  | `x-lt-history` | schema | History column: `{ row: { title, subtitle?, meta? }, limit?, status? }` |
19
- | `x-lt-columns` | schema | Column definitions for `facet-table` layout: `[{ label, value, format? }]` |
19
+ | `x-lt-columns` | schema | Column definitions for `facet-table` layout: `[{ label, value, format?, priority? }]` |
20
20
  | `x-lt-group-by` | schema | `facet-board`: the `"domain.path"` whose value identifies each entity |
21
21
  | `x-lt-card` | schema | `facet-board`: the per-entity card — `{ title, state?, fields?: [{ label, value, format? }] }` |
22
+ | `x-lt-row-action` | schema | The per-row action button: `{ action?, label?, durationMinutes? }` — see below |
22
23
 
23
24
  `format: "age"` on a `facet-table` column or `facet-board` field renders a timestamp as a compact age (`12m`, `3h`, `2d`) with the absolute time as its tooltip, repainted each minute — aging interim states are scannable at a glance.
24
25
 
25
26
  The **active** item is the first non-terminal escalation. The **history** column is lazy-loaded — a "Load full history" link fetches resolved items on demand (`status` defaults to `"resolved"`, `limit` to 25). Unknown or absent `x-lt-layout` is a safe no-op that falls back to the table.
26
27
 
28
+ ### Row action (`x-lt-row-action`)
29
+
30
+ Every layout carries a persistent action button — the active card's CTA, a trailing button on each `facet-table` row, a footer button on each `facet-board` card. The template sets what it does:
31
+
32
+ ```jsonc
33
+ "x-lt-row-action": {
34
+ "action": "claim", // "claim" | "view" — default "claim"
35
+ "label": "Service", // button text; defaults "Claim" / "View"
36
+ "durationMinutes": 60 // claim hold time; default 30
37
+ }
38
+ ```
39
+
40
+ `claim` is one click: the row is claimed for the template's duration and the detail page opens already claimed — the fast path for working a queue. The button appears only on claimable rows (pending, no live claim window), and a rejected claim (someone else won the race) surfaces its message inline. `view` opens the detail page — for read-only templates where claiming from the list is wrong. Row and card clicks continue to navigate; the button is the deliberate gesture.
41
+
42
+ On My Escalations (`/escalations/queue`) every row is already held by the viewer, so a `claim` template renders as a View action there: the button opens the detail page with the default "View" label. Authored `view` actions keep their label.
43
+
27
44
  ---
28
45
 
29
46
  ## Layouts
@@ -76,7 +93,13 @@ Use when the queue contains many concurrent rows and the role's context is best
76
93
  }
77
94
  ```
78
95
 
79
- A status dot precedes the first column automatically. ISO datetime values render as a readable relative date with a full-timestamp tooltip. Missing token values render as an em dash. Clicking any row navigates to the detail page. `x-lt-help` and `x-lt-active` are ignored in this layout.
96
+ A status dot precedes the first column automatically. ISO datetime values render as a readable relative date with a full-timestamp tooltip. Missing token values render as an em dash. Clicking any row navigates to the detail page. The table stands alone — `x-lt-help` and `x-lt-active` are ignored in this layout; totals live in the pagination bar.
97
+
98
+ The table renders through the same engine as the platform's built-in tables: padded cells, a sticky header, and a card fold at narrow widths — **a table never scrolls horizontally, it folds**. Below the fold threshold each row becomes a console card: `priority: 1` columns form the card's title line, `priority: 2` columns fold into label/value pairs, and `priority: 3` columns are dropped. Undeclared, the first column is the identity and the rest fold — declare priorities when the author knows which columns matter at a glance.
99
+
100
+ The seeded `print` role (ortho pipeline) is the reference example for this layout, including fold priorities.
101
+
102
+ A column whose `value` is a pure metadata binding (`{{metadata.key}}`) carries the platform's filter/search pair on each cell — the same affordance the engineer table's metadata cells offer. The filter icon opens this role's queue narrowed to that value; the search icon spans every role; ⇧ click merges the value into the live filter set.
80
103
 
81
104
  ### `"facet-board"` — entity board
82
105
 
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@hotmeshio/long-tail",
3
- "version": "0.10.7",
3
+ "version": "0.10.9",
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 +0,0 @@
1
- {"version":3,"file":"AgentDetailPage-D9JdkWV8.js","sources":["../../src/pages/agents/AgentDetailPage.tsx"],"sourcesContent":["import { useState, useCallback } from 'react';\nimport { useParams, useNavigate } from 'react-router-dom';\nimport {\n Bot, Play, Pause, Trash2, ArrowRight, ArrowUpRight, Pencil, BookOpen,\n Radio, Clock, Brain, Compass,\n} from 'lucide-react';\nimport { useAgent, useUpdateAgent, useDeleteAgent } from '../../api/agents';\nimport { useSettings } from '../../api/settings';\nimport { getAiOverride } from '../../lib/view-as';\nimport { useAgentSubscriptions } from '../../api/agent-subscriptions';\nimport { useAgentEvents } from '../../hooks/useEventHooks';\nimport { useEventSubscription } from '../../hooks/useEventContext';\nimport { NATS_SUBJECT_PREFIX } from '../../lib/nats/config';\nimport { EventTopicPill } from '../../components/common/display/EventTopicPill';\nimport { CronLabel } from '../../components/common/display/CronLabel';\nimport { WorkflowPill } from '../../components/common/display/WorkflowPill';\n\n// ── Helpers ─────────────────────────────────────────────────────────────────\n\nfunction formatTime(iso: string): string {\n return new Date(iso).toLocaleTimeString('en-US', { hour12: false, hour: '2-digit', minute: '2-digit', second: '2-digit' });\n}\n\nfunction SectionHeader({ icon: Icon, color, children, actions }: { icon: React.ElementType; color: string; children: React.ReactNode; actions?: React.ReactNode }) {\n return (\n <div className=\"flex items-center justify-between mb-3 pb-2 border-b border-surface-border\">\n <div className=\"flex items-center gap-2\">\n <Icon className={`w-4 h-4 ${color}`} strokeWidth={1.5} />\n <h2 className=\"section-h2\">{children}</h2>\n </div>\n {actions}\n </div>\n );\n}\n\nfunction EmptyHint({ text }: { text: string }) {\n return <p className=\"text-2xs text-text-quaternary py-2\">{text}</p>;\n}\n\n/** Per-section deeplink — jumps straight to that section instead of Edit → navigate. */\nfunction SectionViewLink({ to, label }: { to: string; label: string }) {\n const navigate = useNavigate();\n return (\n <button\n onClick={() => navigate(to)}\n className=\"text-text-quaternary hover:text-accent transition-colors\"\n title={`View ${label}`}\n aria-label={`View ${label}`}\n >\n <ArrowUpRight className=\"w-3.5 h-3.5\" strokeWidth={1.5} />\n </button>\n );\n}\n\n// ── Live feed ───────────────────────────────────────────────────────────────\n\ninterface FeedEvent { id: number; type: string; timestamp: string; label: string; }\nlet feedCounter = 0;\n\nfunction useAgentFeed(agentName?: string) {\n const [events, setEvents] = useState<FeedEvent[]>([]);\n const [pulse, setPulse] = useState(false);\n const handler = useCallback((event: any) => {\n if (event.type?.startsWith('mesh.')) return;\n const label = event.activityName || event.data?.domain || event.workflowId?.slice(0, 16) || '';\n setEvents((prev) => [{ id: ++feedCounter, type: event.type, timestamp: event.timestamp, label }, ...prev].slice(0, 10));\n setPulse(true);\n setTimeout(() => setPulse(false), 2000);\n }, []);\n useEventSubscription(\n agentName ? `${NATS_SUBJECT_PREFIX}.system.agent.${agentName}.>` : '',\n handler,\n );\n return { events, pulse };\n}\n\n// ── Page ─────────────────────────────────────────────────────────────────────\n\nexport function AgentDetailPage() {\n const { id } = useParams<{ id: string }>();\n const navigate = useNavigate();\n const { data: settings } = useSettings();\n const aiOverride = getAiOverride();\n const aiEnabled = aiOverride !== null ? aiOverride : !!settings?.ai?.enabled;\n const label = aiEnabled ? 'Agent' : 'Automation';\n const { data: agent, isLoading } = useAgent(id ?? null);\n const { data: subsData } = useAgentSubscriptions(id ?? null);\n const updateMutation = useUpdateAgent();\n const deleteMutation = useDeleteAgent();\n const { events: liveEvents, pulse } = useAgentFeed(id);\n useAgentEvents();\n\n if (isLoading) {\n return <div className=\"animate-pulse space-y-4\"><div className=\"h-8 bg-surface-sunken rounded w-48\" /><div className=\"h-40 bg-surface-sunken rounded\" /></div>;\n }\n\n if (!agent) {\n return (\n <div className=\"flex flex-col items-center justify-center py-20 text-center\">\n <Bot className=\"w-12 h-12 text-text-quaternary mb-4\" strokeWidth={1} />\n <h2 className=\"heading-3 mb-2\">{label} not found</h2>\n <button onClick={() => navigate('/agents')} className=\"text-sm text-accent hover:text-accent-hover transition-colors\">Back to {label.toLowerCase()}s</button>\n </div>\n );\n }\n\n const statusDot = agent.status === 'active' ? 'bg-status-success' : agent.status === 'paused' ? 'bg-status-warning' : agent.status === 'error' ? 'bg-status-error' : 'bg-surface-border';\n const subs = subsData?.subscriptions ?? [];\n const statusLabel = agent.status === 'active' ? 'Active' : agent.status === 'paused' ? 'Paused' : agent.status === 'error' ? 'Error' : 'Inactive';\n const schedules = (agent.behaviors as any)?.schedules as any[] | undefined;\n const legacyCron = agent.behaviors?.cron;\n const schedCount = schedules?.length || (legacyCron ? 1 : 0);\n\n const handlePause = () => {\n const msg = [\n `Pause \"${agent.id}\"?`,\n '',\n 'This will:',\n subs.length > 0 ? `• Stop ${subs.length} event subscription${subs.length !== 1 ? 's' : ''}` : null,\n schedCount > 0 ? `• Stop ${schedCount} schedule${schedCount !== 1 ? 's' : ''}` : null,\n '',\n 'Knowledge and workflow history are preserved. You can reactivate anytime.',\n ].filter(Boolean).join('\\n');\n if (confirm(msg)) updateMutation.mutate({ id: agent.id, status: 'paused' as any });\n };\n\n const handleDelete = () => {\n const msg = [\n `Delete \"${agent.id}\"?`,\n '',\n 'This permanently removes:',\n '• The agent configuration',\n subs.length > 0 ? `• ${subs.length} event subscription${subs.length !== 1 ? 's' : ''}` : null,\n schedCount > 0 ? `• ${schedCount} schedule${schedCount !== 1 ? 's' : ''}` : null,\n '',\n 'Knowledge entries and workflow history are preserved.',\n ].filter(Boolean).join('\\n');\n if (confirm(msg)) deleteMutation.mutate(agent.id, { onSuccess: () => navigate('/agents') });\n };\n\n return (\n <div>\n {/* ── Hero ──────────────────────────────────────────────────────────── */}\n <div className=\"flex items-start justify-between mb-3\">\n <div className=\"flex items-center gap-2\">\n <h1 className=\"heading-1\">{label}: {agent.id}</h1>\n <button onClick={() => { window.location.hash = '#docs:agents.md'; }} className=\"text-text-quaternary hover:text-accent transition-colors mt-1\" title=\"Docs\">\n <BookOpen className=\"w-4 h-4\" strokeWidth={1.5} />\n </button>\n </div>\n <div className=\"flex items-center gap-3\">\n <div className=\"flex items-center gap-1.5 mr-2\">\n <span className={`w-2 h-2 rounded-full dot-ring ${statusDot}`} />\n <span className=\"text-xs text-text-secondary capitalize\">{statusLabel}</span>\n </div>\n <button onClick={() => navigate(`/agents/${agent.id}/edit`)} className=\"flex items-center gap-1.5 px-4 py-1.5 text-xs rounded-md bg-accent text-text-inverse hover:bg-accent-hover transition-colors\">\n <Pencil className=\"w-3 h-3\" /> Edit\n </button>\n {agent.status !== 'active' && (\n <button onClick={() => updateMutation.mutate({ id: agent.id, status: 'active' as any })} className=\"flex items-center gap-1.5 px-3 py-1.5 text-xs rounded-md text-status-success hover:bg-status-success/10 transition-colors\">\n <Play className=\"w-3 h-3\" /> Activate\n </button>\n )}\n {agent.status === 'active' && (\n <button onClick={handlePause} className=\"flex items-center gap-1.5 px-3 py-1.5 text-xs rounded-md text-text-tertiary hover:text-text-primary hover:bg-surface-hover transition-colors\">\n <Pause className=\"w-3 h-3\" /> Pause\n </button>\n )}\n <button onClick={handleDelete} className=\"flex items-center gap-1.5 px-3 py-1.5 text-xs rounded-md text-status-error/60 hover:text-status-error hover:bg-status-error/10 transition-colors\">\n <Trash2 className=\"w-3 h-3\" /> Delete\n </button>\n </div>\n </div>\n\n {/* Description callout */}\n {agent.description && (\n <div className=\"border-l-2 border-accent/30 pl-4 py-1 mb-10\">\n <p className=\"text-sm text-text-secondary italic leading-relaxed\">{agent.description}</p>\n </div>\n )}\n\n {/* Motivation */}\n {(agent.goals || agent.rules) && (\n <div className=\"mb-10\">\n <SectionHeader\n icon={Compass}\n color=\"text-accent\"\n actions={<SectionViewLink to={`/agents/${agent.id}/edit?step=2`} label=\"Motivation\" />}\n >Motivation</SectionHeader>\n <div className=\"grid grid-cols-2 gap-x-14 bg-surface-sunken/20 rounded-lg px-5 py-4\">\n {agent.goals && (\n <div>\n <p className=\"text-2xs text-text-quaternary uppercase tracking-widest mb-1.5\">Goals</p>\n <p className=\"text-sm text-text-primary leading-relaxed\">{agent.goals}</p>\n </div>\n )}\n {agent.rules && (\n <div>\n <p className=\"text-2xs text-text-quaternary uppercase tracking-widest mb-1.5\">Rules</p>\n <p className=\"text-sm text-text-primary leading-relaxed\">{agent.rules}</p>\n </div>\n )}\n </div>\n </div>\n )}\n\n {/* ── 3-column grid ─────────────────────────────────────────────────── */}\n <div className=\"grid grid-cols-1 @wall:grid-cols-3 gap-x-14 gap-y-10\">\n\n {/* Col 1: Subscriptions */}\n <div>\n <SectionHeader\n icon={Radio}\n color=\"text-accent\"\n actions={<SectionViewLink to={`/agents/${agent.id}/edit?step=4`} label=\"Subscriptions\" />}\n >\n Subscriptions ({subs.length})\n </SectionHeader>\n {subs.length === 0 ? (\n <EmptyHint text=\"No event subscriptions\" />\n ) : (\n <div className=\"divide-y divide-surface-border/30\">\n {subs.map((sub: any) => (\n <div key={sub.id} className=\"flex items-center py-2\">\n <div className=\"flex-1 min-w-0\"><EventTopicPill topic={sub.topic} /></div>\n <div className=\"flex items-center gap-1.5 shrink-0\">\n <span className=\"text-text-quaternary text-2xs\">→</span>\n <WorkflowPill\n type={sub.reaction_type === 'capability' ? sub.tool_name : sub.workflow_type || sub.reaction_type}\n variant={sub.reaction_type === 'pipeline' ? 'pipeline' : sub.reaction_type === 'capability' ? 'capability' : 'durable'}\n />\n </div>\n </div>\n ))}\n </div>\n )}\n </div>\n\n {/* Col 2: Schedules */}\n <div>\n <SectionHeader\n icon={Clock}\n color=\"text-accent\"\n actions={<SectionViewLink to={`/agents/${agent.id}/edit?step=5`} label=\"Schedules\" />}\n >Schedules ({schedCount})</SectionHeader>\n {schedules?.length ? (\n <div className=\"divide-y divide-surface-border/30\">\n {schedules.map((s: any, i: number) => (\n <div key={i} className=\"flex items-center py-2\">\n <div className=\"flex-1 min-w-0\"><CronLabel cron={s.cron} /></div>\n <div className=\"flex items-center gap-1.5 shrink-0\"><span className=\"text-text-quaternary text-2xs\">→</span><WorkflowPill type={s.workflow_type || 'workflow'} /></div>\n </div>\n ))}\n </div>\n ) : legacyCron ? (\n <div className=\"flex items-center py-1\">\n <div className=\"flex-1 min-w-0\"><CronLabel cron={legacyCron} /></div>\n {agent.workflow_type && <div className=\"flex items-center gap-1.5 shrink-0\"><span className=\"text-text-quaternary text-2xs\">→</span><WorkflowPill type={agent.workflow_type} /></div>}\n </div>\n ) : (\n <EmptyHint text=\"No schedules configured\" />\n )}\n </div>\n\n {/* Col 3: Knowledge + Activity */}\n <div className=\"space-y-10\">\n <div>\n <SectionHeader\n icon={Brain}\n color=\"text-accent\"\n actions={\n <SectionViewLink\n to={agent.knowledge_domain ? `/knowledge?domain=${agent.knowledge_domain}` : `/agents/${agent.id}/edit?step=3`}\n label=\"Knowledge\"\n />\n }\n >Knowledge</SectionHeader>\n {agent.knowledge_domain ? (\n <button onClick={() => navigate(`/knowledge?domain=${agent.knowledge_domain}`)} className=\"group text-left flex items-center gap-3\">\n <span className=\"text-sm font-mono text-text-primary group-hover:text-accent transition-colors\">{agent.knowledge_domain}</span>\n <span className=\"text-2xs text-text-quaternary\">{agent.stats?.knowledge_count?.toLocaleString() ?? 0} entries</span>\n <ArrowRight className=\"w-3 h-3 text-accent opacity-0 group-hover:opacity-100 transition-opacity\" />\n </button>\n ) : (\n <EmptyHint text=\"No knowledge domain\" />\n )}\n </div>\n\n <div>\n <SectionHeader icon={Radio} color=\"text-accent\"\n actions={\n <div className=\"flex items-center gap-1.5\">\n <span className={`w-1.5 h-1.5 rounded-full dot-ring transition-colors duration-500 ${pulse ? 'bg-status-success' : 'bg-surface-border'}`} />\n <span className=\"text-2xs text-text-quaternary\">live</span>\n </div>\n }\n >\n Activity\n </SectionHeader>\n {liveEvents.length === 0 ? (\n <EmptyHint text=\"Events appear here as the agent runs\" />\n ) : (\n <div className=\"space-y-1.5\">\n {liveEvents.map((ev) => (\n <div key={ev.id}>\n <div className=\"flex items-center justify-between mb-0.5\">\n <span className=\"text-2xs text-text-primary font-mono truncate flex-1\">{ev.label || '—'}</span>\n <span className=\"text-2xs text-text-quaternary shrink-0 ml-2\">{formatTime(ev.timestamp)}</span>\n </div>\n <EventTopicPill topic={ev.type} />\n </div>\n ))}\n </div>\n )}\n </div>\n </div>\n </div>\n </div>\n );\n}\n"],"names":["formatTime","iso","SectionHeader","Icon","color","children","actions","jsxs","jsx","EmptyHint","text","SectionViewLink","to","label","navigate","useNavigate","ArrowUpRight","feedCounter","useAgentFeed","agentName","events","setEvents","useState","pulse","setPulse","handler","useCallback","event","_a","_b","_c","prev","useEventSubscription","NATS_SUBJECT_PREFIX","AgentDetailPage","id","useParams","settings","useSettings","aiOverride","getAiOverride","agent","isLoading","useAgent","subsData","useAgentSubscriptions","updateMutation","useUpdateAgent","deleteMutation","useDeleteAgent","liveEvents","useAgentEvents","Bot","statusDot","subs","statusLabel","schedules","legacyCron","schedCount","handlePause","msg","handleDelete","BookOpen","Pencil","Play","Pause","Trash2","Compass","Radio","sub","EventTopicPill","WorkflowPill","Clock","s","i","CronLabel","Brain","_e","_d","ArrowRight","ev"],"mappings":"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"}