@memberjunction/ng-conversations 6.2.0-edge.0 → 6.2.0-edge.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (343) hide show
  1. package/README.md +35 -2
  2. package/dist/lib/components/active-tasks/active-tasks-panel.component.d.ts +19 -3
  3. package/dist/lib/components/active-tasks/active-tasks-panel.component.d.ts.map +1 -1
  4. package/dist/lib/components/active-tasks/active-tasks-panel.component.js +39 -7
  5. package/dist/lib/components/active-tasks/active-tasks-panel.component.js.map +1 -1
  6. package/dist/lib/components/agent/active-agent-indicator.component.d.ts +74 -6
  7. package/dist/lib/components/agent/active-agent-indicator.component.d.ts.map +1 -1
  8. package/dist/lib/components/agent/active-agent-indicator.component.js +111 -21
  9. package/dist/lib/components/agent/active-agent-indicator.component.js.map +1 -1
  10. package/dist/lib/components/agent/agent-process-panel.component.d.ts +31 -5
  11. package/dist/lib/components/agent/agent-process-panel.component.d.ts.map +1 -1
  12. package/dist/lib/components/agent/agent-process-panel.component.js +71 -15
  13. package/dist/lib/components/agent/agent-process-panel.component.js.map +1 -1
  14. package/dist/lib/components/artifact/artifact-share-modal.component.d.ts +65 -9
  15. package/dist/lib/components/artifact/artifact-share-modal.component.d.ts.map +1 -1
  16. package/dist/lib/components/artifact/artifact-share-modal.component.js +169 -57
  17. package/dist/lib/components/artifact/artifact-share-modal.component.js.map +1 -1
  18. package/dist/lib/components/attachment/image-viewer.component.d.ts +77 -11
  19. package/dist/lib/components/attachment/image-viewer.component.d.ts.map +1 -1
  20. package/dist/lib/components/attachment/image-viewer.component.js +181 -47
  21. package/dist/lib/components/attachment/image-viewer.component.js.map +1 -1
  22. package/dist/lib/components/collection/artifact-collection-picker-modal.component.d.ts +129 -19
  23. package/dist/lib/components/collection/artifact-collection-picker-modal.component.d.ts.map +1 -1
  24. package/dist/lib/components/collection/artifact-collection-picker-modal.component.js +350 -116
  25. package/dist/lib/components/collection/artifact-collection-picker-modal.component.js.map +1 -1
  26. package/dist/lib/components/collection/artifact-create-modal.component.d.ts +60 -8
  27. package/dist/lib/components/collection/artifact-create-modal.component.d.ts.map +1 -1
  28. package/dist/lib/components/collection/artifact-create-modal.component.js +130 -46
  29. package/dist/lib/components/collection/artifact-create-modal.component.js.map +1 -1
  30. package/dist/lib/components/collection/collection-artifact-card.component.d.ts +63 -3
  31. package/dist/lib/components/collection/collection-artifact-card.component.d.ts.map +1 -1
  32. package/dist/lib/components/collection/collection-artifact-card.component.js +113 -19
  33. package/dist/lib/components/collection/collection-artifact-card.component.js.map +1 -1
  34. package/dist/lib/components/collection/collection-form-modal.component.d.ts +54 -8
  35. package/dist/lib/components/collection/collection-form-modal.component.d.ts.map +1 -1
  36. package/dist/lib/components/collection/collection-form-modal.component.js +130 -46
  37. package/dist/lib/components/collection/collection-form-modal.component.js.map +1 -1
  38. package/dist/lib/components/collection/collection-share-modal.component.d.ts +70 -10
  39. package/dist/lib/components/collection/collection-share-modal.component.d.ts.map +1 -1
  40. package/dist/lib/components/collection/collection-share-modal.component.js +175 -53
  41. package/dist/lib/components/collection/collection-share-modal.component.js.map +1 -1
  42. package/dist/lib/components/collection/collection-tree.component.d.ts +89 -9
  43. package/dist/lib/components/collection/collection-tree.component.d.ts.map +1 -1
  44. package/dist/lib/components/collection/collection-tree.component.js +220 -70
  45. package/dist/lib/components/collection/collection-tree.component.js.map +1 -1
  46. package/dist/lib/components/collection/collection-view.component.d.ts +89 -11
  47. package/dist/lib/components/collection/collection-view.component.d.ts.map +1 -1
  48. package/dist/lib/components/collection/collection-view.component.js +154 -40
  49. package/dist/lib/components/collection/collection-view.component.js.map +1 -1
  50. package/dist/lib/components/collection/collections-full-view.component.d.ts +390 -38
  51. package/dist/lib/components/collection/collections-full-view.component.d.ts.map +1 -1
  52. package/dist/lib/components/collection/collections-full-view.component.js +951 -367
  53. package/dist/lib/components/collection/collections-full-view.component.js.map +1 -1
  54. package/dist/lib/components/composer/ai-composer.component.d.ts +213 -18
  55. package/dist/lib/components/composer/ai-composer.component.d.ts.map +1 -1
  56. package/dist/lib/components/composer/ai-composer.component.js +388 -44
  57. package/dist/lib/components/composer/ai-composer.component.js.map +1 -1
  58. package/dist/lib/components/conversation/conversation-agent-picker.component.d.ts +12 -1
  59. package/dist/lib/components/conversation/conversation-agent-picker.component.d.ts.map +1 -1
  60. package/dist/lib/components/conversation/conversation-agent-picker.component.js +26 -4
  61. package/dist/lib/components/conversation/conversation-agent-picker.component.js.map +1 -1
  62. package/dist/lib/components/conversation/conversation-chat-area.component.d.ts +1090 -123
  63. package/dist/lib/components/conversation/conversation-chat-area.component.d.ts.map +1 -1
  64. package/dist/lib/components/conversation/conversation-chat-area.component.js +2399 -706
  65. package/dist/lib/components/conversation/conversation-chat-area.component.js.map +1 -1
  66. package/dist/lib/components/conversation/conversation-empty-state.component.d.ts +139 -19
  67. package/dist/lib/components/conversation/conversation-empty-state.component.d.ts.map +1 -1
  68. package/dist/lib/components/conversation/conversation-empty-state.component.js +296 -59
  69. package/dist/lib/components/conversation/conversation-empty-state.component.js.map +1 -1
  70. package/dist/lib/components/conversation/conversation-list.component.d.ts +579 -78
  71. package/dist/lib/components/conversation/conversation-list.component.d.ts.map +1 -1
  72. package/dist/lib/components/conversation/conversation-list.component.js +2322 -823
  73. package/dist/lib/components/conversation/conversation-list.component.js.map +1 -1
  74. package/dist/lib/components/conversation/pinned-messages-panel.component.d.ts +40 -4
  75. package/dist/lib/components/conversation/pinned-messages-panel.component.d.ts.map +1 -1
  76. package/dist/lib/components/conversation/pinned-messages-panel.component.js +72 -14
  77. package/dist/lib/components/conversation/pinned-messages-panel.component.js.map +1 -1
  78. package/dist/lib/components/dialogs/input-dialog.component.d.ts +57 -11
  79. package/dist/lib/components/dialogs/input-dialog.component.d.ts.map +1 -1
  80. package/dist/lib/components/dialogs/input-dialog.component.js +128 -16
  81. package/dist/lib/components/dialogs/input-dialog.component.js.map +1 -1
  82. package/dist/lib/components/dialogs/rating-dialog.component.d.ts +68 -10
  83. package/dist/lib/components/dialogs/rating-dialog.component.d.ts.map +1 -1
  84. package/dist/lib/components/dialogs/rating-dialog.component.js +151 -27
  85. package/dist/lib/components/dialogs/rating-dialog.component.js.map +1 -1
  86. package/dist/lib/components/export/export-modal.component.d.ts +84 -10
  87. package/dist/lib/components/export/export-modal.component.d.ts.map +1 -1
  88. package/dist/lib/components/export/export-modal.component.js +173 -49
  89. package/dist/lib/components/export/export-modal.component.js.map +1 -1
  90. package/dist/lib/components/global-tasks/global-tasks-panel.component.d.ts +29 -3
  91. package/dist/lib/components/global-tasks/global-tasks-panel.component.d.ts.map +1 -1
  92. package/dist/lib/components/global-tasks/global-tasks-panel.component.js +58 -12
  93. package/dist/lib/components/global-tasks/global-tasks-panel.component.js.map +1 -1
  94. package/dist/lib/components/library/library-full-view.component.d.ts +57 -8
  95. package/dist/lib/components/library/library-full-view.component.d.ts.map +1 -1
  96. package/dist/lib/components/library/library-full-view.component.js +119 -35
  97. package/dist/lib/components/library/library-full-view.component.js.map +1 -1
  98. package/dist/lib/components/members/members-modal.component.d.ts +76 -10
  99. package/dist/lib/components/members/members-modal.component.d.ts.map +1 -1
  100. package/dist/lib/components/members/members-modal.component.js +164 -50
  101. package/dist/lib/components/members/members-modal.component.js.map +1 -1
  102. package/dist/lib/components/message/actionable-commands.component.d.ts +37 -5
  103. package/dist/lib/components/message/actionable-commands.component.d.ts.map +1 -1
  104. package/dist/lib/components/message/actionable-commands.component.js +82 -16
  105. package/dist/lib/components/message/actionable-commands.component.js.map +1 -1
  106. package/dist/lib/components/message/conversation-message-rating.component.d.ts +46 -10
  107. package/dist/lib/components/message/conversation-message-rating.component.d.ts.map +1 -1
  108. package/dist/lib/components/message/conversation-message-rating.component.js +120 -36
  109. package/dist/lib/components/message/conversation-message-rating.component.js.map +1 -1
  110. package/dist/lib/components/message/message-input.component.d.ts +549 -74
  111. package/dist/lib/components/message/message-input.component.d.ts.map +1 -1
  112. package/dist/lib/components/message/message-input.component.js +1250 -421
  113. package/dist/lib/components/message/message-input.component.js.map +1 -1
  114. package/dist/lib/components/message/message-item.component.d.ts +411 -29
  115. package/dist/lib/components/message/message-item.component.d.ts.map +1 -1
  116. package/dist/lib/components/message/message-item.component.js +896 -222
  117. package/dist/lib/components/message/message-item.component.js.map +1 -1
  118. package/dist/lib/components/message/message-list.component.d.ts +288 -29
  119. package/dist/lib/components/message/message-list.component.d.ts.map +1 -1
  120. package/dist/lib/components/message/message-list.component.js +561 -123
  121. package/dist/lib/components/message/message-list.component.js.map +1 -1
  122. package/dist/lib/components/navigation/conversation-navigation.component.d.ts +64 -5
  123. package/dist/lib/components/navigation/conversation-navigation.component.d.ts.map +1 -1
  124. package/dist/lib/components/navigation/conversation-navigation.component.js +101 -11
  125. package/dist/lib/components/navigation/conversation-navigation.component.js.map +1 -1
  126. package/dist/lib/components/notification/activity-indicator.component.d.ts +6 -2
  127. package/dist/lib/components/notification/activity-indicator.component.d.ts.map +1 -1
  128. package/dist/lib/components/notification/activity-indicator.component.js +13 -3
  129. package/dist/lib/components/notification/activity-indicator.component.js.map +1 -1
  130. package/dist/lib/components/notification/notification-badge.component.d.ts +15 -3
  131. package/dist/lib/components/notification/notification-badge.component.d.ts.map +1 -1
  132. package/dist/lib/components/notification/notification-badge.component.js +36 -8
  133. package/dist/lib/components/notification/notification-badge.component.js.map +1 -1
  134. package/dist/lib/components/overlay/chat-overlay.component.d.ts +1 -1
  135. package/dist/lib/components/overlay/chat-overlay.component.js +4 -4
  136. package/dist/lib/components/overlay/chat-overlay.component.js.map +1 -1
  137. package/dist/lib/components/project/project-form-modal.component.d.ts +93 -11
  138. package/dist/lib/components/project/project-form-modal.component.d.ts.map +1 -1
  139. package/dist/lib/components/project/project-form-modal.component.js +348 -87
  140. package/dist/lib/components/project/project-form-modal.component.js.map +1 -1
  141. package/dist/lib/components/project/project-selector.component.d.ts +78 -8
  142. package/dist/lib/components/project/project-selector.component.d.ts.map +1 -1
  143. package/dist/lib/components/project/project-selector.component.js +177 -46
  144. package/dist/lib/components/project/project-selector.component.js.map +1 -1
  145. package/dist/lib/components/realtime/realtime-activity-rail.component.d.ts +1 -1
  146. package/dist/lib/components/realtime/realtime-activity-rail.component.js +2 -2
  147. package/dist/lib/components/realtime/realtime-activity-rail.component.js.map +1 -1
  148. package/dist/lib/components/realtime/realtime-delegation-card.component.d.ts +1 -1
  149. package/dist/lib/components/realtime/realtime-delegation-card.component.js +2 -2
  150. package/dist/lib/components/realtime/realtime-delegation-card.component.js.map +1 -1
  151. package/dist/lib/components/realtime/realtime-session-overlay.component.d.ts +2 -2
  152. package/dist/lib/components/realtime/realtime-session-overlay.component.js +18 -18
  153. package/dist/lib/components/realtime/realtime-session-overlay.component.js.map +1 -1
  154. package/dist/lib/components/realtime/realtime-session-timeline-card.component.d.ts +47 -23
  155. package/dist/lib/components/realtime/realtime-session-timeline-card.component.d.ts.map +1 -1
  156. package/dist/lib/components/realtime/realtime-session-timeline-card.component.js +136 -92
  157. package/dist/lib/components/realtime/realtime-session-timeline-card.component.js.map +1 -1
  158. package/dist/lib/components/realtime/realtime-surface-tabs.component.d.ts +2 -2
  159. package/dist/lib/components/realtime/realtime-surface-tabs.component.js +4 -4
  160. package/dist/lib/components/realtime/realtime-surface-tabs.component.js.map +1 -1
  161. package/dist/lib/components/realtime/realtime-surface-tabs.model.d.ts +1 -1
  162. package/dist/lib/components/realtime/realtime-surface-tabs.model.js +3 -3
  163. package/dist/lib/components/realtime/realtime-surface-tabs.model.js.map +1 -1
  164. package/dist/lib/components/realtime/realtime-ui-config.d.ts +13 -11
  165. package/dist/lib/components/realtime/realtime-ui-config.d.ts.map +1 -1
  166. package/dist/lib/components/realtime/realtime-ui-config.js +29 -25
  167. package/dist/lib/components/realtime/realtime-ui-config.js.map +1 -1
  168. package/dist/lib/components/realtime/whiteboard/whiteboard-channel.d.ts +3 -1
  169. package/dist/lib/components/realtime/whiteboard/whiteboard-channel.d.ts.map +1 -1
  170. package/dist/lib/components/realtime/whiteboard/whiteboard-channel.js +6 -2
  171. package/dist/lib/components/realtime/whiteboard/whiteboard-channel.js.map +1 -1
  172. package/dist/lib/components/search/search-panel.component.d.ts +133 -22
  173. package/dist/lib/components/search/search-panel.component.d.ts.map +1 -1
  174. package/dist/lib/components/search/search-panel.component.js +312 -83
  175. package/dist/lib/components/search/search-panel.component.js.map +1 -1
  176. package/dist/lib/components/share/share-modal.component.d.ts +69 -9
  177. package/dist/lib/components/share/share-modal.component.d.ts.map +1 -1
  178. package/dist/lib/components/share/share-modal.component.js +139 -31
  179. package/dist/lib/components/share/share-modal.component.js.map +1 -1
  180. package/dist/lib/components/shared/user-picker.component.d.ts +48 -8
  181. package/dist/lib/components/shared/user-picker.component.d.ts.map +1 -1
  182. package/dist/lib/components/shared/user-picker.component.js +110 -30
  183. package/dist/lib/components/shared/user-picker.component.js.map +1 -1
  184. package/dist/lib/components/sidebar/conversation-sidebar.component.d.ts +114 -11
  185. package/dist/lib/components/sidebar/conversation-sidebar.component.d.ts.map +1 -1
  186. package/dist/lib/components/sidebar/conversation-sidebar.component.js +199 -21
  187. package/dist/lib/components/sidebar/conversation-sidebar.component.js.map +1 -1
  188. package/dist/lib/components/sidebar/routines-section.component.d.ts +20 -1
  189. package/dist/lib/components/sidebar/routines-section.component.d.ts.map +1 -1
  190. package/dist/lib/components/sidebar/routines-section.component.js +25 -5
  191. package/dist/lib/components/sidebar/routines-section.component.js.map +1 -1
  192. package/dist/lib/components/slots/slot-interfaces.d.ts +19 -0
  193. package/dist/lib/components/slots/slot-interfaces.d.ts.map +1 -1
  194. package/dist/lib/components/slots/slot-interfaces.js.map +1 -1
  195. package/dist/lib/components/task/tasks-full-view.component.d.ts +95 -13
  196. package/dist/lib/components/task/tasks-full-view.component.d.ts.map +1 -1
  197. package/dist/lib/components/task/tasks-full-view.component.js +223 -75
  198. package/dist/lib/components/task/tasks-full-view.component.js.map +1 -1
  199. package/dist/lib/components/tasks/task-widget.component.d.ts +46 -6
  200. package/dist/lib/components/tasks/task-widget.component.d.ts.map +1 -1
  201. package/dist/lib/components/tasks/task-widget.component.js +100 -16
  202. package/dist/lib/components/tasks/task-widget.component.js.map +1 -1
  203. package/dist/lib/components/tasks/tasks-dropdown.component.d.ts +64 -7
  204. package/dist/lib/components/tasks/tasks-dropdown.component.d.ts.map +1 -1
  205. package/dist/lib/components/tasks/tasks-dropdown.component.js +127 -27
  206. package/dist/lib/components/tasks/tasks-dropdown.component.js.map +1 -1
  207. package/dist/lib/components/thread/thread-panel.component.d.ts +66 -8
  208. package/dist/lib/components/thread/thread-panel.component.d.ts.map +1 -1
  209. package/dist/lib/components/thread/thread-panel.component.js +146 -36
  210. package/dist/lib/components/thread/thread-panel.component.js.map +1 -1
  211. package/dist/lib/components/toast/toast.component.d.ts +11 -1
  212. package/dist/lib/components/toast/toast.component.d.ts.map +1 -1
  213. package/dist/lib/components/toast/toast.component.js +25 -5
  214. package/dist/lib/components/toast/toast.component.js.map +1 -1
  215. package/dist/lib/components/workspace/conversation-workspace.component.d.ts +385 -42
  216. package/dist/lib/components/workspace/conversation-workspace.component.d.ts.map +1 -1
  217. package/dist/lib/components/workspace/conversation-workspace.component.js +887 -291
  218. package/dist/lib/components/workspace/conversation-workspace.component.js.map +1 -1
  219. package/dist/lib/composer-plugins/base-conversation-mention.provider.d.ts +8 -0
  220. package/dist/lib/composer-plugins/base-conversation-mention.provider.d.ts.map +1 -1
  221. package/dist/lib/composer-plugins/base-conversation-mention.provider.js +8 -1
  222. package/dist/lib/composer-plugins/base-conversation-mention.provider.js.map +1 -1
  223. package/dist/lib/directives/chat-slot.directive.d.ts +5 -1
  224. package/dist/lib/directives/chat-slot.directive.d.ts.map +1 -1
  225. package/dist/lib/directives/chat-slot.directive.js.map +1 -1
  226. package/dist/lib/directives/search-shortcut.directive.d.ts +9 -1
  227. package/dist/lib/directives/search-shortcut.directive.d.ts.map +1 -1
  228. package/dist/lib/directives/search-shortcut.directive.js +14 -4
  229. package/dist/lib/directives/search-shortcut.directive.js.map +1 -1
  230. package/dist/lib/events/chat-events.d.ts +34 -7
  231. package/dist/lib/events/chat-events.d.ts.map +1 -1
  232. package/dist/lib/events/chat-events.js +37 -7
  233. package/dist/lib/events/chat-events.js.map +1 -1
  234. package/dist/lib/models/agent-turn.model.d.ts +103 -0
  235. package/dist/lib/models/agent-turn.model.d.ts.map +1 -0
  236. package/dist/lib/models/agent-turn.model.js +12 -0
  237. package/dist/lib/models/agent-turn.model.js.map +1 -0
  238. package/dist/lib/models/collection-view.model.js.map +1 -1
  239. package/dist/lib/models/conversation-state.model.d.ts +8 -0
  240. package/dist/lib/models/conversation-state.model.d.ts.map +1 -1
  241. package/dist/lib/models/conversation-state.model.js.map +1 -1
  242. package/dist/lib/models/lazy-artifact-info.d.ts +44 -12
  243. package/dist/lib/models/lazy-artifact-info.d.ts.map +1 -1
  244. package/dist/lib/models/lazy-artifact-info.js +98 -34
  245. package/dist/lib/models/lazy-artifact-info.js.map +1 -1
  246. package/dist/lib/services/active-tasks.service.d.ts +30 -4
  247. package/dist/lib/services/active-tasks.service.d.ts.map +1 -1
  248. package/dist/lib/services/active-tasks.service.js +71 -19
  249. package/dist/lib/services/active-tasks.service.js.map +1 -1
  250. package/dist/lib/services/agent-state.service.d.ts +17 -1
  251. package/dist/lib/services/agent-state.service.d.ts.map +1 -1
  252. package/dist/lib/services/agent-state.service.js +48 -16
  253. package/dist/lib/services/agent-state.service.js.map +1 -1
  254. package/dist/lib/services/artifact-permission.service.d.ts +39 -0
  255. package/dist/lib/services/artifact-permission.service.d.ts.map +1 -1
  256. package/dist/lib/services/artifact-permission.service.js +152 -17
  257. package/dist/lib/services/artifact-permission.service.js.map +1 -1
  258. package/dist/lib/services/artifact-state.service.d.ts +58 -5
  259. package/dist/lib/services/artifact-state.service.d.ts.map +1 -1
  260. package/dist/lib/services/artifact-state.service.js +135 -35
  261. package/dist/lib/services/artifact-state.service.js.map +1 -1
  262. package/dist/lib/services/collection-permission.service.d.ts +28 -0
  263. package/dist/lib/services/collection-permission.service.d.ts.map +1 -1
  264. package/dist/lib/services/collection-permission.service.js +88 -32
  265. package/dist/lib/services/collection-permission.service.js.map +1 -1
  266. package/dist/lib/services/collection-state.service.d.ts +11 -1
  267. package/dist/lib/services/collection-state.service.d.ts.map +1 -1
  268. package/dist/lib/services/collection-state.service.js +25 -5
  269. package/dist/lib/services/collection-state.service.js.map +1 -1
  270. package/dist/lib/services/conversation-agent.service.d.ts +26 -4
  271. package/dist/lib/services/conversation-agent.service.d.ts.map +1 -1
  272. package/dist/lib/services/conversation-agent.service.js +57 -18
  273. package/dist/lib/services/conversation-agent.service.js.map +1 -1
  274. package/dist/lib/services/conversation-attachment.service.d.ts +17 -0
  275. package/dist/lib/services/conversation-attachment.service.d.ts.map +1 -1
  276. package/dist/lib/services/conversation-attachment.service.js +38 -10
  277. package/dist/lib/services/conversation-attachment.service.js.map +1 -1
  278. package/dist/lib/services/conversation-streaming.service.d.ts +22 -0
  279. package/dist/lib/services/conversation-streaming.service.d.ts.map +1 -1
  280. package/dist/lib/services/conversation-streaming.service.js +50 -10
  281. package/dist/lib/services/conversation-streaming.service.js.map +1 -1
  282. package/dist/lib/services/data-cache.service.d.ts +31 -0
  283. package/dist/lib/services/data-cache.service.d.ts.map +1 -1
  284. package/dist/lib/services/data-cache.service.js +71 -15
  285. package/dist/lib/services/data-cache.service.js.map +1 -1
  286. package/dist/lib/services/dialog.service.d.ts +13 -0
  287. package/dist/lib/services/dialog.service.d.ts.map +1 -1
  288. package/dist/lib/services/dialog.service.js +25 -5
  289. package/dist/lib/services/dialog.service.js.map +1 -1
  290. package/dist/lib/services/export.service.d.ts +2 -0
  291. package/dist/lib/services/export.service.d.ts.map +1 -1
  292. package/dist/lib/services/export.service.js +5 -1
  293. package/dist/lib/services/export.service.js.map +1 -1
  294. package/dist/lib/services/mention-parser.service.d.ts +10 -0
  295. package/dist/lib/services/mention-parser.service.d.ts.map +1 -1
  296. package/dist/lib/services/mention-parser.service.js +25 -5
  297. package/dist/lib/services/mention-parser.service.js.map +1 -1
  298. package/dist/lib/services/notification.service.d.ts +54 -6
  299. package/dist/lib/services/notification.service.d.ts.map +1 -1
  300. package/dist/lib/services/notification.service.js +123 -27
  301. package/dist/lib/services/notification.service.js.map +1 -1
  302. package/dist/lib/services/realtime-audio-recorder.d.ts +4 -4
  303. package/dist/lib/services/realtime-audio-recorder.js +12 -12
  304. package/dist/lib/services/realtime-audio-recorder.js.map +1 -1
  305. package/dist/lib/services/realtime-pcm-wav.d.ts +4 -0
  306. package/dist/lib/services/realtime-pcm-wav.d.ts.map +1 -1
  307. package/dist/lib/services/realtime-pcm-wav.js +10 -2
  308. package/dist/lib/services/realtime-pcm-wav.js.map +1 -1
  309. package/dist/lib/services/search.service.d.ts +42 -9
  310. package/dist/lib/services/search.service.d.ts.map +1 -1
  311. package/dist/lib/services/search.service.js +103 -23
  312. package/dist/lib/services/search.service.js.map +1 -1
  313. package/dist/lib/services/toast.service.d.ts +19 -1
  314. package/dist/lib/services/toast.service.d.ts.map +1 -1
  315. package/dist/lib/services/toast.service.js +45 -9
  316. package/dist/lib/services/toast.service.js.map +1 -1
  317. package/dist/lib/services/ui-command-handler.service.d.ts +16 -2
  318. package/dist/lib/services/ui-command-handler.service.d.ts.map +1 -1
  319. package/dist/lib/services/ui-command-handler.service.js +36 -8
  320. package/dist/lib/services/ui-command-handler.service.js.map +1 -1
  321. package/dist/lib/utils/agent-artifact-summary.d.ts +2 -2
  322. package/dist/lib/utils/agent-artifact-summary.js +3 -3
  323. package/dist/lib/utils/agent-artifact-summary.js.map +1 -1
  324. package/dist/lib/utils/agent-turn-routing.d.ts +69 -0
  325. package/dist/lib/utils/agent-turn-routing.d.ts.map +1 -0
  326. package/dist/lib/utils/agent-turn-routing.js +96 -0
  327. package/dist/lib/utils/agent-turn-routing.js.map +1 -0
  328. package/dist/lib/utils/artifact-panel-action.d.ts +15 -4
  329. package/dist/lib/utils/artifact-panel-action.d.ts.map +1 -1
  330. package/dist/lib/utils/artifact-panel-action.js +10 -2
  331. package/dist/lib/utils/artifact-panel-action.js.map +1 -1
  332. package/dist/lib/utils/distinct-artifacts.d.ts +2 -0
  333. package/dist/lib/utils/distinct-artifacts.d.ts.map +1 -1
  334. package/dist/lib/utils/distinct-artifacts.js +5 -1
  335. package/dist/lib/utils/distinct-artifacts.js.map +1 -1
  336. package/dist/lib/utils/plan-mode-preference.d.ts +2 -2
  337. package/dist/lib/utils/plan-mode-preference.js +6 -6
  338. package/dist/lib/utils/plan-mode-preference.js.map +1 -1
  339. package/dist/public-api.d.ts +3 -0
  340. package/dist/public-api.d.ts.map +1 -1
  341. package/dist/public-api.js +3 -0
  342. package/dist/public-api.js.map +1 -1
  343. package/package.json +32 -32
package/README.md CHANGED
@@ -10,8 +10,8 @@ The widget exposes three layers of extension:
10
10
 
11
11
  | Surface | What it lets you do |
12
12
  |---|---|
13
- | **7 named slots** (`mjChatSlot` directive) | Replace the `header`, `emptyState`, `agentPresence`, `messageRenderer`, `messageExtra`, or `demonstrationSurface` regions with your own templates — or ADD to the default header with `headerActions` (renders inside the default header's action strip, after the stock buttons; suppressed when a full `header` replacement is projected). Three consumption modes: project an ad-hoc template, wrap the exported default for containment, or subclass the default. |
14
- | **Before/After cancelable events** | `(beforeAgentTurn)`, `(beforeToolInvoked)`, `(beforeResponseFormSubmitted)` let you observe AND veto (`event.Cancel = true`) before the action runs. Plus informational `(sessionStarted)` / `(sessionChannelStateChanged)` / `(sessionEnded)` for realtime lifecycle. |
13
+ | **8 named slots** (`mjChatSlot` directive) | Replace the `header`, `emptyState`, `agentPresence`, `messageRenderer`, `messageExtra`, or `demonstrationSurface` regions with your own templates — or ADD to the default header with `headerActions` (renders inside the default header's action strip, after the stock buttons; suppressed when a full `header` replacement is projected), or above the composer with `composerExtra`. Three consumption modes: project an ad-hoc template, wrap the exported default for containment, or subclass the default. |
14
+ | **Before/After cancelable events** | `(beforeAgentTurn)`, `(beforeToolInvoked)`, `(beforeResponseFormSubmitted)` let you observe AND veto (`event.Cancel = true`) before the action runs. `(beforeAgentTurn)` fires once per agent turn, before any reply row exists, and can also send the turn to another agent (`event.RedirectAgentId`). Plus informational `(sessionStarted)` / `(sessionChannelStateChanged)` / `(sessionEnded)` for realtime lifecycle. |
15
15
  | **`--mj-chat-*` design tokens** | Override bubble colors, composer chrome, character accents, and voice-state hues via standard CSS custom-property overrides. Defaults adapt to dark mode through semantic `--mj-*` tokens. |
16
16
 
17
17
  Slot interfaces + cloneable default components + the `ChatSlotDirective` are exported — see the public API.
@@ -205,6 +205,39 @@ Two gating rules are worth knowing:
205
205
  - **`includeTheme` gates only the token AUTO-SNAPSHOT.** An explicitly supplied `brandTokens` map, plus `logoUrl` / `title` / `trademark`, apply whenever `branding` is present. In the modal, "Include branding" is the single user-facing switch for all of it, and it sits with the general options because it affects every format — not just HTML.
206
206
 
207
207
  `trademark` and `title` are **not** markdown-escaped; a value containing `_`, `]`, `)`, or a newline can break the surrounding markdown. Supply plain text (the HTML and JSON paths are escaped).
208
+ #### Chats with several people
209
+
210
+ A host that puts several people in one conversation (a team room, a shared chat) sets when agents answer through these inputs, without forking the chat area. Each defaults to today's behavior:
211
+
212
+ | Input | Default | Effect when set |
213
+ |---|---|---|
214
+ | `AgentReplyMode` | `'Always'` | `'MentionOnly'` starts an agent turn only for a message that tags an agent. Any other message is posted with no turn: no reply row, no placeholder, no turn events |
215
+ | `AllowedAgentIDs` | `null` (every agent) | The agents that may answer. Narrows the `@` list, every route (a tagged agent, continuity, the pinned and host default agents, the conversation manager), the manager's delegation, including each agent step of a workflow it plans, and the pin and voice pickers. An empty list allows none |
216
+ | `MentionPeople` | `null` (the current user only) | The people the `@` list offers, such as the chat's members (`MentionPerson` from `@memberjunction/conversations-runtime`). Each composer keeps its own list |
217
+ | `AgentHistoryFrom` | `null` (the whole conversation) | The first moment of the conversation an agent turn may read. The server loads the agent's history from there, uses no summary of earlier messages, and holds the same floor in the run's other reads of the conversation. Sent only when set, so leaving it null keeps working against an older MJAPI |
218
+ | `AgentTurnHandler` | `null` (MJ's own path) | An async hook that runs each turn on the host's server. The chat area calls it once per turn, after `BeforeAgentTurn` and before any reply row exists, and shows the rows it reports |
219
+ | `AutoNameConversation` | `true` | `false` stops MJ naming a new conversation from its first message or first voice utterance |
220
+
221
+ Routing picks one agent per turn, in this order: a tagged agent, then (under `'Always'` only) the last agent that answered other than the conversation manager, the conversation's pinned agent, the host's `DefaultAgentId`, and the conversation manager. An agent `AllowedAgentIDs` leaves out is skipped. `BeforeAgentTurn` then fires once, carrying the resolved `AgentId`, `AgentName`, `Route` and `UserMessageId`: a listener can cancel the turn, which then writes nothing more, or set `RedirectAgentId` to another allowed agent.
222
+
223
+ The `composerExtra` slot renders host UI directly above the composer, wherever the chat area shows one (the new-conversation composer and the empty state's included). Its context is `IMJChatComposerExtraContext`: the conversation as `$implicit`, plus `ConversationId` and `IsProcessing`.
224
+
225
+ ```html
226
+ <mj-conversation-chat-area
227
+ [conversationId]="conversationId"
228
+ AgentReplyMode="MentionOnly"
229
+ [AllowedAgentIDs]="spaceAgentIds"
230
+ [MentionPeople]="members"
231
+ [AgentHistoryFrom]="historyFloor"
232
+ [AgentTurnHandler]="runTurnOnServer"
233
+ [AutoNameConversation]="false"
234
+ (BeforeAgentTurn)="onBeforeAgentTurn($event)">
235
+ <ng-template mjChatSlot="composerExtra" let-busy="IsProcessing">
236
+ <div class="audience-line">Everyone in this chat sees your message</div>
237
+ </ng-template>
238
+ </mj-conversation-chat-area>
239
+ ```
240
+
208
241
  #### Assistant identity
209
242
 
210
243
  White-label hosts can brand the AI side of the message feed through the component contract (no CSS on `.message-sender` / `.avatar-circle` internals). Both default to `null` — the engine-resolved agent identity, today's behavior:
@@ -7,11 +7,27 @@ import * as i0 from "@angular/core";
7
7
  */
8
8
  export declare class ActiveTasksPanelComponent {
9
9
  private activeTasksService;
10
- tasks$: Observable<ActiveTask[]>;
11
- taskCount$: Observable<number>;
12
- isExpanded: boolean;
10
+ Tasks$: Observable<ActiveTask[]>;
11
+ /** @deprecated Use {@link Tasks$}. */
12
+ get tasks$(): Observable<ActiveTask[]>;
13
+ /** @deprecated Use {@link Tasks$}. */
14
+ set tasks$(value: Observable<ActiveTask[]>);
15
+ TaskCount$: Observable<number>;
16
+ /** @deprecated Use {@link TaskCount$}. */
17
+ get taskCount$(): Observable<number>;
18
+ /** @deprecated Use {@link TaskCount$}. */
19
+ set taskCount$(value: Observable<number>);
20
+ IsExpanded: boolean;
21
+ /** @deprecated Use {@link IsExpanded}. */
22
+ get isExpanded(): boolean;
23
+ /** @deprecated Use {@link IsExpanded}. */
24
+ set isExpanded(value: boolean);
13
25
  constructor(activeTasksService: ActiveTasksService);
26
+ GetElapsedTime(task: ActiveTask): string;
27
+ /** @deprecated Use {@link GetElapsedTime}. */
14
28
  getElapsedTime(task: ActiveTask): string;
29
+ GetTrimmedStatus(status: string): string;
30
+ /** @deprecated Use {@link GetTrimmedStatus}. */
15
31
  getTrimmedStatus(status: string): string;
16
32
  static ɵfac: i0.ɵɵFactoryDeclaration<ActiveTasksPanelComponent, never>;
17
33
  static ɵcmp: i0.ɵɵComponentDeclaration<ActiveTasksPanelComponent, "mj-active-tasks-panel", never, {}, {}, never, never, false, never>;
@@ -1 +1 @@
1
- {"version":3,"file":"active-tasks-panel.component.d.ts","sourceRoot":"","sources":["../../../../src/lib/components/active-tasks/active-tasks-panel.component.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,UAAU,EAAE,MAAM,MAAM,CAAC;AAClC,OAAO,EAAE,kBAAkB,EAAE,UAAU,EAAE,MAAM,qCAAqC,CAAC;;AAErF;;;GAGG;AACH,qBAmGa,yBAAyB;IAKxB,OAAO,CAAC,kBAAkB;IAJtC,MAAM,EAAE,UAAU,CAAC,UAAU,EAAE,CAAC,CAAC;IACjC,UAAU,EAAE,UAAU,CAAC,MAAM,CAAC,CAAC;IAC/B,UAAU,UAAQ;gBAEE,kBAAkB,EAAE,kBAAkB;IAK1D,cAAc,CAAC,IAAI,EAAE,UAAU,GAAG,MAAM;IAaxC,gBAAgB,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM;yCAvB7B,yBAAyB;2CAAzB,yBAAyB;CA8BrC"}
1
+ {"version":3,"file":"active-tasks-panel.component.d.ts","sourceRoot":"","sources":["../../../../src/lib/components/active-tasks/active-tasks-panel.component.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,UAAU,EAAE,MAAM,MAAM,CAAC;AAClC,OAAO,EAAE,kBAAkB,EAAE,UAAU,EAAE,MAAM,qCAAqC,CAAC;;AAErF;;;GAGG;AACH,qBAmGa,yBAAyB;IAgCxB,OAAO,CAAC,kBAAkB;IA/BtC,MAAM,EAAE,UAAU,CAAC,UAAU,EAAE,CAAC,CAAC;IAEjC,sCAAsC;IACtC,IAAI,MAAM,IAAI,UAAU,CAAC,UAAU,EAAE,CAAC,CAErC;IACD,sCAAsC;IACtC,IAAI,MAAM,CAAC,KAAK,EAAE,UAAU,CAAC,UAAU,EAAE,CAAC,EAEzC;IACD,UAAU,EAAE,UAAU,CAAC,MAAM,CAAC,CAAC;IAE/B,0CAA0C;IAC1C,IAAI,UAAU,IAAI,UAAU,CAAC,MAAM,CAAC,CAEnC;IACD,0CAA0C;IAC1C,IAAI,UAAU,CAAC,KAAK,EAAE,UAAU,CAAC,MAAM,CAAC,EAEvC;IACD,UAAU,UAAQ;IAElB,0CAA0C;IAC1C,IAAI,UAAU,YAEb;IACD,0CAA0C;IAC1C,IAAI,UAAU,CAAC,KAAK,SAAA,EAEnB;gBAEmB,kBAAkB,EAAE,kBAAkB;IAK1D,cAAc,CAAC,IAAI,EAAE,UAAU,GAAG,MAAM;IAaxC,8CAA8C;IAC9C,cAAc,CAAC,IAAI,EAAE,UAAU,GAAG,MAAM;IAIxC,gBAAgB,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM;IAQxC,gDAAgD;IAChD,gBAAgB,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM;yCAhE7B,yBAAyB;2CAAzB,yBAAyB;CAmErC"}
@@ -64,15 +64,39 @@ function ActiveTasksPanelComponent_Conditional_0_Template(rf, ctx) { if (rf & 1)
64
64
  */
65
65
  export class ActiveTasksPanelComponent {
66
66
  activeTasksService;
67
- tasks$;
68
- taskCount$;
69
- isExpanded = true;
67
+ Tasks$;
68
+ /** @deprecated Use {@link Tasks$}. */
69
+ get tasks$() {
70
+ return this.Tasks$;
71
+ }
72
+ /** @deprecated Use {@link Tasks$}. */
73
+ set tasks$(value) {
74
+ this.Tasks$ = value;
75
+ }
76
+ TaskCount$;
77
+ /** @deprecated Use {@link TaskCount$}. */
78
+ get taskCount$() {
79
+ return this.TaskCount$;
80
+ }
81
+ /** @deprecated Use {@link TaskCount$}. */
82
+ set taskCount$(value) {
83
+ this.TaskCount$ = value;
84
+ }
85
+ IsExpanded = true;
86
+ /** @deprecated Use {@link IsExpanded}. */
87
+ get isExpanded() {
88
+ return this.IsExpanded;
89
+ }
90
+ /** @deprecated Use {@link IsExpanded}. */
91
+ set isExpanded(value) {
92
+ this.IsExpanded = value;
93
+ }
70
94
  constructor(activeTasksService) {
71
95
  this.activeTasksService = activeTasksService;
72
- this.tasks$ = this.activeTasksService.tasks$;
73
- this.taskCount$ = this.activeTasksService.taskCount$;
96
+ this.Tasks$ = this.activeTasksService.tasks$;
97
+ this.TaskCount$ = this.activeTasksService.taskCount$;
74
98
  }
75
- getElapsedTime(task) {
99
+ GetElapsedTime(task) {
76
100
  const elapsed = Date.now() - task.startTime;
77
101
  const seconds = Math.floor(elapsed / 1000);
78
102
  if (seconds < 60) {
@@ -82,13 +106,21 @@ export class ActiveTasksPanelComponent {
82
106
  const remainingSeconds = seconds % 60;
83
107
  return `${minutes}:${remainingSeconds.toString().padStart(2, '0')}`;
84
108
  }
85
- getTrimmedStatus(status) {
109
+ /** @deprecated Use {@link GetElapsedTime}. */
110
+ getElapsedTime(task) {
111
+ return this.GetElapsedTime(task);
112
+ }
113
+ GetTrimmedStatus(status) {
86
114
  const maxLength = 50;
87
115
  if (status.length <= maxLength) {
88
116
  return status;
89
117
  }
90
118
  return status.substring(0, maxLength) + '...';
91
119
  }
120
+ /** @deprecated Use {@link GetTrimmedStatus}. */
121
+ getTrimmedStatus(status) {
122
+ return this.GetTrimmedStatus(status);
123
+ }
92
124
  static ɵfac = function ActiveTasksPanelComponent_Factory(__ngFactoryType__) { return new (__ngFactoryType__ || ActiveTasksPanelComponent)(i0.ɵɵdirectiveInject(i1.ActiveTasksService)); };
93
125
  static ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: ActiveTasksPanelComponent, selectors: [["mj-active-tasks-panel"]], standalone: false, decls: 2, vars: 3, consts: [[1, "active-tasks-panel"], ["Size", "sm", 3, "ExpandedChange", "FlushBody", "Expanded"], ["mjAccordionTitle", ""], ["mjAccordionBody", ""], [1, "fas", "fa-tasks", "active-tasks-title-icon"], [1, "panel-content"], [1, "task-item"], [1, "task-header"], [1, "fas", "fa-circle-notch", "fa-spin"], [1, "task-agent"], [1, "task-elapsed"], [1, "task-status"]], template: function ActiveTasksPanelComponent_Template(rf, ctx) { if (rf & 1) {
94
126
  i0.ɵɵconditionalCreate(0, ActiveTasksPanelComponent_Conditional_0_Template, 4, 2, "div", 0);
@@ -1 +1 @@
1
- {"version":3,"file":"active-tasks-panel.component.js","sourceRoot":"","sources":["../../../../src/lib/components/active-tasks/active-tasks-panel.component.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,eAAe,CAAC;;;;;;IAoB9B,uBAAoD;IACpD,4BAAM;IAAA,YAAuC;;IAAA,iBAAO;;;IAA9C,eAAuC;IAAvC,qFAAuC;;;IAMvC,AADF,8BAAuB,aACI;IACvB,uBAA2C;IAC3C,+BAAyB;IAAA,YAAoB;IAAA,iBAAO;IACpD,gCAA2B;IAAA,YAA0B;IACvD,AADuD,iBAAO,EACxD;IACN,+BAAyB;IAAA,YAAmC;IAC9D,AAD8D,iBAAM,EAC9D;;;;IAJuB,eAAoB;IAApB,uCAAoB;IAClB,eAA0B;IAA1B,oDAA0B;IAE9B,eAAmC;IAAnC,6DAAmC;;;IARlE,8BAA2B;IACzB,0IASC;;IACH,iBAAM;;;IAVJ,cASC;IATD,kDASC;;;;IAhBP,AALF,8BAAgC,4BAK6C;IAA1B,oUAAyB;IAKxE,AAJA,wGAA8B,2FAID;IAejC,AADE,iBAAqB,EACjB;;;IApB0B,cAAkB;IAAlB,gCAAkB;IAAC,kDAAyB;;AAdlF;;;GAGG;AAoGH,MAAM,OAAO,yBAAyB;IAKhB;IAJpB,MAAM,CAA2B;IACjC,UAAU,CAAqB;IAC/B,UAAU,GAAG,IAAI,CAAC;IAElB,YAAoB,kBAAsC;QAAtC,uBAAkB,GAAlB,kBAAkB,CAAoB;QACxD,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,kBAAkB,CAAC,MAAM,CAAC;QAC7C,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,kBAAkB,CAAC,UAAU,CAAC;IACvD,CAAC;IAED,cAAc,CAAC,IAAgB;QAC7B,MAAM,OAAO,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,SAAS,CAAC;QAC5C,MAAM,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,GAAG,IAAI,CAAC,CAAC;QAE3C,IAAI,OAAO,GAAG,EAAE,EAAE,CAAC;YACjB,OAAO,GAAG,OAAO,GAAG,CAAC;QACvB,CAAC;QAED,MAAM,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,GAAG,EAAE,CAAC,CAAC;QACzC,MAAM,gBAAgB,GAAG,OAAO,GAAG,EAAE,CAAC;QACtC,OAAO,GAAG,OAAO,IAAI,gBAAgB,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,EAAE,CAAC;IACtE,CAAC;IAED,gBAAgB,CAAC,MAAc;QAC7B,MAAM,SAAS,GAAG,EAAE,CAAC;QACrB,IAAI,MAAM,CAAC,MAAM,IAAI,SAAS,EAAE,CAAC;YAC/B,OAAO,MAAM,CAAC;QAChB,CAAC;QACD,OAAO,MAAM,CAAC,SAAS,CAAC,CAAC,EAAE,SAAS,CAAC,GAAG,KAAK,CAAC;IAChD,CAAC;mHA7BU,yBAAyB;6DAAzB,yBAAyB;YA/FlC,2FAAiC;;;YAAjC,mEA2BC;;;iFAoEQ,yBAAyB;cAnGrC,SAAS;6BACI,KAAK,YACP,uBAAuB,YACvB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;KA6BP;;kFAmEQ,yBAAyB","sourcesContent":["import { Component } from '@angular/core';\nimport { Observable } from 'rxjs';\nimport { ActiveTasksService, ActiveTask } from '../../services/active-tasks.service';\n\n/**\n * Panel component that displays currently running agent tasks.\n * Shows as a floating panel in bottom-right corner when tasks are active.\n */\n@Component({\n standalone: false,\n selector: 'mj-active-tasks-panel',\n template: `\n @if ((taskCount$ | async)! > 0) {\n <div class=\"active-tasks-panel\">\n <!-- Migrated from a bespoke header/chevron + @if(isExpanded) disclosure to\n mj-accordion-panel. The floating fixed-position wrapper is preserved; only\n the header→task-list disclosure became the accordion (content disclosure,\n not a whole-panel collapse). -->\n <mj-accordion-panel Size=\"sm\" [FlushBody]=\"true\" [(Expanded)]=\"isExpanded\">\n <ng-template mjAccordionTitle>\n <i class=\"fas fa-tasks active-tasks-title-icon\"></i>\n <span>Active Tasks ({{ taskCount$ | async }})</span>\n </ng-template>\n <ng-template mjAccordionBody>\n <div class=\"panel-content\">\n @for (task of (tasks$ | async); track task) {\n <div class=\"task-item\">\n <div class=\"task-header\">\n <i class=\"fas fa-circle-notch fa-spin\"></i>\n <span class=\"task-agent\">{{ task.agentName }}</span>\n <span class=\"task-elapsed\">{{ getElapsedTime(task) }}</span>\n </div>\n <div class=\"task-status\">{{ getTrimmedStatus(task.status) }}</div>\n </div>\n }\n </div>\n </ng-template>\n </mj-accordion-panel>\n </div>\n }\n `,\n styles: [`\n .active-tasks-panel {\n position: fixed;\n bottom: 20px;\n right: 20px;\n width: 320px;\n background: var(--mj-bg-surface);\n border: 1px solid var(--mj-border-default);\n border-radius: 8px;\n box-shadow: 0 4px 12px rgba(0,0,0,0.15);\n z-index: 1000;\n }\n\n /* Removed bespoke .panel-header chrome (header bar, hover, chevron, flex span) —\n the disclosure header is now owned by mj-accordion-panel. Only the title icon's\n brand color is preserved below. */\n .active-tasks-title-icon {\n color: var(--mj-brand-primary);\n }\n\n .panel-content {\n max-height: 300px;\n overflow-y: auto;\n }\n\n .task-item {\n padding: 12px 16px;\n border-bottom: 1px solid var(--mj-border-default);\n }\n\n .task-item:last-child {\n border-bottom: none;\n }\n\n .task-header {\n display: flex;\n align-items: center;\n gap: 8px;\n margin-bottom: 4px;\n }\n\n .task-header i {\n color: var(--mj-brand-primary);\n font-size: 14px;\n }\n\n .task-agent {\n flex: 1;\n font-weight: 600;\n color: var(--mj-text-primary);\n font-size: 14px;\n }\n\n .task-elapsed {\n font-size: 12px;\n color: var(--mj-text-muted);\n font-weight: 500;\n }\n\n .task-status {\n font-size: 13px;\n color: var(--mj-text-muted);\n padding-left: 22px;\n }\n `]\n})\nexport class ActiveTasksPanelComponent {\n tasks$: Observable<ActiveTask[]>;\n taskCount$: Observable<number>;\n isExpanded = true;\n\n constructor(private activeTasksService: ActiveTasksService) {\n this.tasks$ = this.activeTasksService.tasks$;\n this.taskCount$ = this.activeTasksService.taskCount$;\n }\n\n getElapsedTime(task: ActiveTask): string {\n const elapsed = Date.now() - task.startTime;\n const seconds = Math.floor(elapsed / 1000);\n\n if (seconds < 60) {\n return `${seconds}s`;\n }\n\n const minutes = Math.floor(seconds / 60);\n const remainingSeconds = seconds % 60;\n return `${minutes}:${remainingSeconds.toString().padStart(2, '0')}`;\n }\n\n getTrimmedStatus(status: string): string {\n const maxLength = 50;\n if (status.length <= maxLength) {\n return status;\n }\n return status.substring(0, maxLength) + '...';\n }\n}\n"]}
1
+ {"version":3,"file":"active-tasks-panel.component.js","sourceRoot":"","sources":["../../../../src/lib/components/active-tasks/active-tasks-panel.component.ts"],"names":[],"mappings":"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","sourcesContent":["import { Component } from '@angular/core';\nimport { Observable } from 'rxjs';\nimport { ActiveTasksService, ActiveTask } from '../../services/active-tasks.service';\n\n/**\n * Panel component that displays currently running agent tasks.\n * Shows as a floating panel in bottom-right corner when tasks are active.\n */\n@Component({\n standalone: false,\n selector: 'mj-active-tasks-panel',\n template: `\n @if ((taskCount$ | async)! > 0) {\n <div class=\"active-tasks-panel\">\n <!-- Migrated from a bespoke header/chevron + @if(isExpanded) disclosure to\n mj-accordion-panel. The floating fixed-position wrapper is preserved; only\n the header→task-list disclosure became the accordion (content disclosure,\n not a whole-panel collapse). -->\n <mj-accordion-panel Size=\"sm\" [FlushBody]=\"true\" [(Expanded)]=\"isExpanded\">\n <ng-template mjAccordionTitle>\n <i class=\"fas fa-tasks active-tasks-title-icon\"></i>\n <span>Active Tasks ({{ taskCount$ | async }})</span>\n </ng-template>\n <ng-template mjAccordionBody>\n <div class=\"panel-content\">\n @for (task of (tasks$ | async); track task) {\n <div class=\"task-item\">\n <div class=\"task-header\">\n <i class=\"fas fa-circle-notch fa-spin\"></i>\n <span class=\"task-agent\">{{ task.agentName }}</span>\n <span class=\"task-elapsed\">{{ getElapsedTime(task) }}</span>\n </div>\n <div class=\"task-status\">{{ getTrimmedStatus(task.status) }}</div>\n </div>\n }\n </div>\n </ng-template>\n </mj-accordion-panel>\n </div>\n }\n `,\n styles: [`\n .active-tasks-panel {\n position: fixed;\n bottom: 20px;\n right: 20px;\n width: 320px;\n background: var(--mj-bg-surface);\n border: 1px solid var(--mj-border-default);\n border-radius: 8px;\n box-shadow: 0 4px 12px rgba(0,0,0,0.15);\n z-index: 1000;\n }\n\n /* Removed bespoke .panel-header chrome (header bar, hover, chevron, flex span) —\n the disclosure header is now owned by mj-accordion-panel. Only the title icon's\n brand color is preserved below. */\n .active-tasks-title-icon {\n color: var(--mj-brand-primary);\n }\n\n .panel-content {\n max-height: 300px;\n overflow-y: auto;\n }\n\n .task-item {\n padding: 12px 16px;\n border-bottom: 1px solid var(--mj-border-default);\n }\n\n .task-item:last-child {\n border-bottom: none;\n }\n\n .task-header {\n display: flex;\n align-items: center;\n gap: 8px;\n margin-bottom: 4px;\n }\n\n .task-header i {\n color: var(--mj-brand-primary);\n font-size: 14px;\n }\n\n .task-agent {\n flex: 1;\n font-weight: 600;\n color: var(--mj-text-primary);\n font-size: 14px;\n }\n\n .task-elapsed {\n font-size: 12px;\n color: var(--mj-text-muted);\n font-weight: 500;\n }\n\n .task-status {\n font-size: 13px;\n color: var(--mj-text-muted);\n padding-left: 22px;\n }\n `]\n})\nexport class ActiveTasksPanelComponent {\n Tasks$: Observable<ActiveTask[]>;\n\n /** @deprecated Use {@link Tasks$}. */\n get tasks$(): Observable<ActiveTask[]> {\n return this.Tasks$;\n }\n /** @deprecated Use {@link Tasks$}. */\n set tasks$(value: Observable<ActiveTask[]>) {\n this.Tasks$ = value;\n }\n TaskCount$: Observable<number>;\n\n /** @deprecated Use {@link TaskCount$}. */\n get taskCount$(): Observable<number> {\n return this.TaskCount$;\n }\n /** @deprecated Use {@link TaskCount$}. */\n set taskCount$(value: Observable<number>) {\n this.TaskCount$ = value;\n }\n IsExpanded = true;\n\n /** @deprecated Use {@link IsExpanded}. */\n get isExpanded() {\n return this.IsExpanded;\n }\n /** @deprecated Use {@link IsExpanded}. */\n set isExpanded(value) {\n this.IsExpanded = value;\n }\n\n constructor(private activeTasksService: ActiveTasksService) {\n this.Tasks$ = this.activeTasksService.tasks$;\n this.TaskCount$ = this.activeTasksService.taskCount$;\n }\n\n GetElapsedTime(task: ActiveTask): string {\n const elapsed = Date.now() - task.startTime;\n const seconds = Math.floor(elapsed / 1000);\n\n if (seconds < 60) {\n return `${seconds}s`;\n }\n\n const minutes = Math.floor(seconds / 60);\n const remainingSeconds = seconds % 60;\n return `${minutes}:${remainingSeconds.toString().padStart(2, '0')}`;\n }\n\n /** @deprecated Use {@link GetElapsedTime}. */\n getElapsedTime(task: ActiveTask): string {\n return this.GetElapsedTime(task);\n }\n\n GetTrimmedStatus(status: string): string {\n const maxLength = 50;\n if (status.length <= maxLength) {\n return status;\n }\n return status.substring(0, maxLength) + '...';\n }\n\n /** @deprecated Use {@link GetTrimmedStatus}. */\n getTrimmedStatus(status: string): string {\n return this.GetTrimmedStatus(status);\n }\n}\n"]}
@@ -9,40 +9,108 @@ import * as i0 from "@angular/core";
9
9
  */
10
10
  export declare class ActiveAgentIndicatorComponent implements OnInit, OnDestroy {
11
11
  private agentStateService;
12
- conversationId?: string;
13
- currentUser: UserInfo;
14
- maxVisibleAgents: number;
12
+ ConversationId?: string;
13
+ /** @deprecated Use {@link ConversationId}. */
14
+ set conversationId(value: string | undefined);
15
+ /** @deprecated Use {@link ConversationId}. */
16
+ get conversationId(): string | undefined;
17
+ CurrentUser: UserInfo;
18
+ /** @deprecated Use {@link CurrentUser}. */
19
+ set currentUser(value: UserInfo);
20
+ /** @deprecated Use {@link CurrentUser}. */
21
+ get currentUser(): UserInfo;
22
+ MaxVisibleAgents: number;
23
+ /** @deprecated Use {@link MaxVisibleAgents}. */
24
+ set maxVisibleAgents(value: number);
25
+ /** @deprecated Use {@link MaxVisibleAgents}. */
26
+ get maxVisibleAgents(): number;
27
+ TogglePanel: EventEmitter<void>;
28
+ /**
29
+ * @deprecated Use {@link TogglePanel}.
30
+ *
31
+ * The same emitter under the old binding name, so a template still binding
32
+ * (togglePanel) keeps working. Must stay AFTER TogglePanel: class fields
33
+ * initialise in order, and the other way round this captures undefined.
34
+ */
15
35
  togglePanel: EventEmitter<void>;
36
+ AgentSelected: EventEmitter<MJAIAgentRunEntity>;
37
+ /**
38
+ * @deprecated Use {@link AgentSelected}.
39
+ *
40
+ * The same emitter under the old binding name, so a template still binding
41
+ * (agentSelected) keeps working. Must stay AFTER AgentSelected: class fields
42
+ * initialise in order, and the other way round this captures undefined.
43
+ */
16
44
  agentSelected: EventEmitter<MJAIAgentRunEntity>;
17
- activeAgents: Array<{
45
+ ActiveAgents: Array<{
18
46
  run: MJAIAgentRunEntity;
19
47
  status: AgentStatus;
20
48
  confidence: number | null;
21
49
  }>;
22
- isExpanded: boolean;
50
+ /** @deprecated Use {@link ActiveAgents}. */
51
+ get activeAgents(): Array<{
52
+ run: MJAIAgentRunEntity;
53
+ status: AgentStatus;
54
+ confidence: number | null;
55
+ }>;
56
+ /** @deprecated Use {@link ActiveAgents}. */
57
+ set activeAgents(value: Array<{
58
+ run: MJAIAgentRunEntity;
59
+ status: AgentStatus;
60
+ confidence: number | null;
61
+ }>);
62
+ IsExpanded: boolean;
63
+ /** @deprecated Use {@link IsExpanded}. */
64
+ get isExpanded(): boolean;
65
+ /** @deprecated Use {@link IsExpanded}. */
66
+ set isExpanded(value: boolean);
23
67
  private subscription?;
24
68
  constructor(agentStateService: AgentStateService);
25
69
  ngOnInit(): void;
26
70
  ngOnDestroy(): void;
71
+ get DisplayAgents(): Array<{
72
+ run: MJAIAgentRunEntity;
73
+ status: AgentStatus;
74
+ confidence: number | null;
75
+ }>;
76
+ /** @deprecated Use {@link DisplayAgents}. */
27
77
  get displayAgents(): Array<{
28
78
  run: MJAIAgentRunEntity;
29
79
  status: AgentStatus;
30
80
  confidence: number | null;
31
81
  }>;
82
+ GetAgentTooltip(agent: {
83
+ run: MJAIAgentRunEntity;
84
+ status: AgentStatus;
85
+ confidence: number | null;
86
+ }): string;
87
+ /** @deprecated Use {@link GetAgentTooltip}. */
32
88
  getAgentTooltip(agent: {
33
89
  run: MJAIAgentRunEntity;
34
90
  status: AgentStatus;
35
91
  confidence: number | null;
36
92
  }): string;
93
+ GetStatusText(status: AgentStatus): string;
94
+ /** @deprecated Use {@link GetStatusText}. */
37
95
  getStatusText(status: AgentStatus): string;
96
+ ToggleExpanded(): void;
97
+ /** @deprecated Use {@link ToggleExpanded}. */
38
98
  toggleExpanded(): void;
99
+ OnAgentClick(agent: {
100
+ run: MJAIAgentRunEntity;
101
+ status: AgentStatus;
102
+ confidence: number | null;
103
+ }): void;
104
+ /** @deprecated Use {@link OnAgentClick}. */
39
105
  onAgentClick(agent: {
40
106
  run: MJAIAgentRunEntity;
41
107
  status: AgentStatus;
42
108
  confidence: number | null;
43
109
  }): void;
110
+ OnTogglePanel(): void;
111
+ /** @deprecated Use {@link OnTogglePanel}. */
44
112
  onTogglePanel(): void;
45
113
  static ɵfac: i0.ɵɵFactoryDeclaration<ActiveAgentIndicatorComponent, never>;
46
- static ɵcmp: i0.ɵɵComponentDeclaration<ActiveAgentIndicatorComponent, "mj-active-agent-indicator", never, { "conversationId": { "alias": "conversationId"; "required": false; }; "currentUser": { "alias": "currentUser"; "required": false; }; "maxVisibleAgents": { "alias": "maxVisibleAgents"; "required": false; }; }, { "togglePanel": "togglePanel"; "agentSelected": "agentSelected"; }, never, never, false, never>;
114
+ static ɵcmp: i0.ɵɵComponentDeclaration<ActiveAgentIndicatorComponent, "mj-active-agent-indicator", never, { "ConversationId": { "alias": "ConversationId"; "required": false; }; "conversationId": { "alias": "conversationId"; "required": false; }; "CurrentUser": { "alias": "CurrentUser"; "required": false; }; "currentUser": { "alias": "currentUser"; "required": false; }; "MaxVisibleAgents": { "alias": "MaxVisibleAgents"; "required": false; }; "maxVisibleAgents": { "alias": "maxVisibleAgents"; "required": false; }; }, { "TogglePanel": "TogglePanel"; "togglePanel": "togglePanel"; "AgentSelected": "AgentSelected"; "agentSelected": "agentSelected"; }, never, never, false, never>;
47
115
  }
48
116
  //# sourceMappingURL=active-agent-indicator.component.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"active-agent-indicator.component.d.ts","sourceRoot":"","sources":["../../../../src/lib/components/agent/active-agent-indicator.component.ts"],"names":[],"mappings":"AAAA,OAAO,EAA4B,YAAY,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,eAAe,CAAC;AAC1F,OAAO,EAAE,QAAQ,EAAE,MAAM,sBAAsB,CAAC;AAChD,OAAO,EAAE,kBAAkB,EAAE,MAAM,+BAA+B,CAAC;AACnE,OAAO,EAAE,iBAAiB,EAAE,WAAW,EAAE,MAAM,oCAAoC,CAAC;;AAGpF;;;GAGG;AACH,qBA+Oa,6BAA8B,YAAW,MAAM,EAAE,SAAS;IAazD,OAAO,CAAC,iBAAiB;IAZ5B,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,WAAW,EAAG,QAAQ,CAAC;IACvB,gBAAgB,EAAE,MAAM,CAAK;IAE5B,WAAW,qBAA4B;IACvC,aAAa,mCAA0C;IAE1D,YAAY,EAAE,KAAK,CAAC;QAAE,GAAG,EAAE,kBAAkB,CAAC;QAAC,MAAM,EAAE,WAAW,CAAC;QAAC,UAAU,EAAE,MAAM,GAAG,IAAI,CAAA;KAAE,CAAC,CAAM;IACtG,UAAU,EAAE,OAAO,CAAS;IAEnC,OAAO,CAAC,YAAY,CAAC,CAAe;gBAEhB,iBAAiB,EAAE,iBAAiB;IAExD,QAAQ,IAAI,IAAI;IAShB,WAAW,IAAI,IAAI;IAInB,IAAI,aAAa,IAAI,KAAK,CAAC;QAAE,GAAG,EAAE,kBAAkB,CAAC;QAAC,MAAM,EAAE,WAAW,CAAC;QAAC,UAAU,EAAE,MAAM,GAAG,IAAI,CAAA;KAAE,CAAC,CAKtG;IAED,eAAe,CAAC,KAAK,EAAE;QAAE,GAAG,EAAE,kBAAkB,CAAC;QAAC,MAAM,EAAE,WAAW,CAAC;QAAC,UAAU,EAAE,MAAM,GAAG,IAAI,CAAA;KAAE,GAAG,MAAM;IAQ3G,aAAa,CAAC,MAAM,EAAE,WAAW,GAAG,MAAM;IAW1C,cAAc,IAAI,IAAI;IAItB,YAAY,CAAC,KAAK,EAAE;QAAE,GAAG,EAAE,kBAAkB,CAAC;QAAC,MAAM,EAAE,WAAW,CAAC;QAAC,UAAU,EAAE,MAAM,GAAG,IAAI,CAAA;KAAE,GAAG,IAAI;IAItG,aAAa,IAAI,IAAI;yCA9DV,6BAA6B;2CAA7B,6BAA6B;CAiEzC"}
1
+ {"version":3,"file":"active-agent-indicator.component.d.ts","sourceRoot":"","sources":["../../../../src/lib/components/agent/active-agent-indicator.component.ts"],"names":[],"mappings":"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"}
@@ -81,13 +81,69 @@ function ActiveAgentIndicatorComponent_Conditional_0_Template(rf, ctx) { if (rf
81
81
  */
82
82
  export class ActiveAgentIndicatorComponent {
83
83
  agentStateService;
84
- conversationId;
85
- currentUser;
86
- maxVisibleAgents = 3;
87
- togglePanel = new EventEmitter();
88
- agentSelected = new EventEmitter();
89
- activeAgents = [];
90
- isExpanded = false;
84
+ ConversationId;
85
+ /** @deprecated Use {@link ConversationId}. */
86
+ set conversationId(value) {
87
+ this.ConversationId = value;
88
+ }
89
+ /** @deprecated Use {@link ConversationId}. */
90
+ get conversationId() {
91
+ return this.ConversationId;
92
+ }
93
+ CurrentUser;
94
+ /** @deprecated Use {@link CurrentUser}. */
95
+ set currentUser(value) {
96
+ this.CurrentUser = value;
97
+ }
98
+ /** @deprecated Use {@link CurrentUser}. */
99
+ get currentUser() {
100
+ return this.CurrentUser;
101
+ }
102
+ MaxVisibleAgents = 3;
103
+ /** @deprecated Use {@link MaxVisibleAgents}. */
104
+ set maxVisibleAgents(value) {
105
+ this.MaxVisibleAgents = value;
106
+ }
107
+ /** @deprecated Use {@link MaxVisibleAgents}. */
108
+ get maxVisibleAgents() {
109
+ return this.MaxVisibleAgents;
110
+ }
111
+ TogglePanel = new EventEmitter();
112
+ /**
113
+ * @deprecated Use {@link TogglePanel}.
114
+ *
115
+ * The same emitter under the old binding name, so a template still binding
116
+ * (togglePanel) keeps working. Must stay AFTER TogglePanel: class fields
117
+ * initialise in order, and the other way round this captures undefined.
118
+ */
119
+ togglePanel = this.TogglePanel;
120
+ AgentSelected = new EventEmitter();
121
+ /**
122
+ * @deprecated Use {@link AgentSelected}.
123
+ *
124
+ * The same emitter under the old binding name, so a template still binding
125
+ * (agentSelected) keeps working. Must stay AFTER AgentSelected: class fields
126
+ * initialise in order, and the other way round this captures undefined.
127
+ */
128
+ agentSelected = this.AgentSelected;
129
+ ActiveAgents = [];
130
+ /** @deprecated Use {@link ActiveAgents}. */
131
+ get activeAgents() {
132
+ return this.ActiveAgents;
133
+ }
134
+ /** @deprecated Use {@link ActiveAgents}. */
135
+ set activeAgents(value) {
136
+ this.ActiveAgents = value;
137
+ }
138
+ IsExpanded = false;
139
+ /** @deprecated Use {@link IsExpanded}. */
140
+ get isExpanded() {
141
+ return this.IsExpanded;
142
+ }
143
+ /** @deprecated Use {@link IsExpanded}. */
144
+ set isExpanded(value) {
145
+ this.IsExpanded = value;
146
+ }
91
147
  subscription;
92
148
  constructor(agentStateService) {
93
149
  this.agentStateService = agentStateService;
@@ -95,28 +151,36 @@ export class ActiveAgentIndicatorComponent {
95
151
  ngOnInit() {
96
152
  // Subscribe to active agents for this conversation
97
153
  this.subscription = this.agentStateService
98
- .getActiveAgents(this.conversationId)
154
+ .getActiveAgents(this.ConversationId)
99
155
  .subscribe(agents => {
100
- this.activeAgents = agents;
156
+ this.ActiveAgents = agents;
101
157
  });
102
158
  }
103
159
  ngOnDestroy() {
104
160
  this.subscription?.unsubscribe();
105
161
  }
106
- get displayAgents() {
107
- if (this.isExpanded) {
108
- return this.activeAgents;
162
+ get DisplayAgents() {
163
+ if (this.IsExpanded) {
164
+ return this.ActiveAgents;
109
165
  }
110
- return this.activeAgents.slice(0, this.maxVisibleAgents);
166
+ return this.ActiveAgents.slice(0, this.MaxVisibleAgents);
111
167
  }
112
- getAgentTooltip(agent) {
113
- const statusText = this.getStatusText(agent.status);
168
+ /** @deprecated Use {@link DisplayAgents}. */
169
+ get displayAgents() {
170
+ return this.DisplayAgents;
171
+ }
172
+ GetAgentTooltip(agent) {
173
+ const statusText = this.GetStatusText(agent.status);
114
174
  const confidenceText = agent.confidence != null
115
175
  ? ` (Confidence: ${(agent.confidence * 100).toFixed(0)}%)`
116
176
  : '';
117
177
  return `${agent.run.Agent || 'Agent'} - ${statusText}${confidenceText}`;
118
178
  }
119
- getStatusText(status) {
179
+ /** @deprecated Use {@link GetAgentTooltip}. */
180
+ getAgentTooltip(agent) {
181
+ return this.GetAgentTooltip(agent);
182
+ }
183
+ GetStatusText(status) {
120
184
  switch (status) {
121
185
  case 'acknowledging': return 'Acknowledging request';
122
186
  case 'working': return 'Working on task';
@@ -126,17 +190,33 @@ export class ActiveAgentIndicatorComponent {
126
190
  default: return 'Active';
127
191
  }
128
192
  }
193
+ /** @deprecated Use {@link GetStatusText}. */
194
+ getStatusText(status) {
195
+ return this.GetStatusText(status);
196
+ }
197
+ ToggleExpanded() {
198
+ this.IsExpanded = !this.IsExpanded;
199
+ }
200
+ /** @deprecated Use {@link ToggleExpanded}. */
129
201
  toggleExpanded() {
130
- this.isExpanded = !this.isExpanded;
202
+ return this.ToggleExpanded();
203
+ }
204
+ OnAgentClick(agent) {
205
+ this.AgentSelected.emit(agent.run);
131
206
  }
207
+ /** @deprecated Use {@link OnAgentClick}. */
132
208
  onAgentClick(agent) {
133
- this.agentSelected.emit(agent.run);
209
+ return this.OnAgentClick(agent);
134
210
  }
211
+ OnTogglePanel() {
212
+ this.TogglePanel.emit();
213
+ }
214
+ /** @deprecated Use {@link OnTogglePanel}. */
135
215
  onTogglePanel() {
136
- this.togglePanel.emit();
216
+ return this.OnTogglePanel();
137
217
  }
138
218
  static ɵfac = function ActiveAgentIndicatorComponent_Factory(__ngFactoryType__) { return new (__ngFactoryType__ || ActiveAgentIndicatorComponent)(i0.ɵɵdirectiveInject(i1.AgentStateService)); };
139
- static ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: ActiveAgentIndicatorComponent, selectors: [["mj-active-agent-indicator"]], inputs: { conversationId: "conversationId", currentUser: "currentUser", maxVisibleAgents: "maxVisibleAgents" }, outputs: { togglePanel: "togglePanel", agentSelected: "agentSelected" }, standalone: false, decls: 1, vars: 1, consts: [[1, "active-agents-container"], [1, "active-agents-label"], [1, "agents-wrapper"], [1, "agent-avatar", 3, "status-acknowledging", "status-working", "status-completing", "status-completed", "status-error", "title"], [1, "more-agents", 3, "title"], ["title", "Open agent process panel", 1, "panel-toggle", 3, "click"], [1, "fas", "fa-chart-line"], [1, "agent-count"], [1, "agent-avatar", 3, "click", "title"], [1, "avatar-content"], [1, "fas", "fa-robot"], [1, "status-indicator"], [1, "confidence-badge", 3, "title"], [1, "pulse-ring"], [1, "more-agents", 3, "click", "title"]], template: function ActiveAgentIndicatorComponent_Template(rf, ctx) { if (rf & 1) {
219
+ static ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: ActiveAgentIndicatorComponent, selectors: [["mj-active-agent-indicator"]], inputs: { ConversationId: "ConversationId", conversationId: "conversationId", CurrentUser: "CurrentUser", currentUser: "currentUser", MaxVisibleAgents: "MaxVisibleAgents", maxVisibleAgents: "maxVisibleAgents" }, outputs: { TogglePanel: "TogglePanel", togglePanel: "togglePanel", AgentSelected: "AgentSelected", agentSelected: "agentSelected" }, standalone: false, decls: 1, vars: 1, consts: [[1, "active-agents-container"], [1, "active-agents-label"], [1, "agents-wrapper"], [1, "agent-avatar", 3, "status-acknowledging", "status-working", "status-completing", "status-completed", "status-error", "title"], [1, "more-agents", 3, "title"], ["title", "Open agent process panel", 1, "panel-toggle", 3, "click"], [1, "fas", "fa-chart-line"], [1, "agent-count"], [1, "agent-avatar", 3, "click", "title"], [1, "avatar-content"], [1, "fas", "fa-robot"], [1, "status-indicator"], [1, "confidence-badge", 3, "title"], [1, "pulse-ring"], [1, "more-agents", 3, "click", "title"]], template: function ActiveAgentIndicatorComponent_Template(rf, ctx) { if (rf & 1) {
140
220
  i0.ɵɵconditionalCreate(0, ActiveAgentIndicatorComponent_Conditional_0_Template, 11, 4, "div", 0);
141
221
  } if (rf & 2) {
142
222
  i0.ɵɵconditional(ctx.activeAgents.length > 0 ? 0 : -1);
@@ -186,14 +266,24 @@ export class ActiveAgentIndicatorComponent {
186
266
  </div>
187
267
  }
188
268
  `, styles: ["\n .active-agents-container {\n display: flex;\n align-items: center;\n gap: 8px;\n padding: 6px 12px;\n background-color: #F4F4F4;\n border-radius: 20px;\n font-size: 12px;\n color: #6B7280;\n height: 32px;\n }\n\n .active-agents-label {\n font-weight: 500;\n color: #6B7280;\n }\n\n .agents-wrapper {\n display: flex;\n align-items: center;\n gap: 6px;\n max-width: 200px;\n overflow: hidden;\n transition: max-width 300ms ease;\n }\n\n .agents-wrapper.expanded {\n max-width: 600px;\n }\n\n .agent-avatar {\n position: relative;\n width: 24px;\n height: 24px;\n border-radius: 50%;\n display: flex;\n align-items: center;\n justify-content: center;\n cursor: pointer;\n transition: all 200ms ease;\n flex-shrink: 0;\n font-size: 10px;\n font-weight: 600;\n }\n\n .agent-avatar:hover {\n transform: scale(1.1);\n }\n\n .avatar-content {\n width: 100%;\n height: 100%;\n border-radius: 50%;\n display: flex;\n align-items: center;\n justify-content: center;\n font-size: 14px;\n color: white;\n position: relative;\n z-index: 1;\n }\n\n /* Status-based colors */\n .status-acknowledging .avatar-content {\n background: linear-gradient(135deg, #3B82F6, #2563EB);\n }\n\n .status-working .avatar-content {\n background: linear-gradient(135deg, #F59E0B, #D97706);\n }\n\n .status-completing .avatar-content {\n background: linear-gradient(135deg, #10B981, #059669);\n }\n\n .status-completed .avatar-content {\n background: linear-gradient(135deg, #6B7280, #4B5563);\n opacity: 0.6;\n }\n\n .status-error .avatar-content {\n background: linear-gradient(135deg, #EF4444, #DC2626);\n }\n\n /* Animated status indicator */\n .status-indicator {\n position: absolute;\n top: -2px;\n right: -2px;\n width: 10px;\n height: 10px;\n z-index: 2;\n }\n\n .pulse-ring {\n width: 100%;\n height: 100%;\n border-radius: 50%;\n background: currentColor;\n animation: pulse 2s cubic-bezier(0.4, 0, 0.6, 1) infinite;\n }\n\n .status-acknowledging .pulse-ring {\n background: #3B82F6;\n }\n\n .status-working .pulse-ring {\n background: #F59E0B;\n animation: pulse 1.5s cubic-bezier(0.4, 0, 0.6, 1) infinite;\n }\n\n .status-completing .pulse-ring {\n background: #10B981;\n animation: pulse 1s cubic-bezier(0.4, 0, 0.6, 1) infinite;\n }\n\n @keyframes pulse {\n 0%, 100% {\n opacity: 1;\n transform: scale(1);\n }\n 50% {\n opacity: 0.5;\n transform: scale(1.5);\n }\n }\n\n /* Confidence badge */\n .confidence-badge {\n position: absolute;\n bottom: -4px;\n right: -4px;\n background: white;\n border: 1px solid #E5E7EB;\n border-radius: 4px;\n padding: 1px 3px;\n font-size: 9px;\n font-weight: 600;\n color: #374151;\n z-index: 3;\n line-height: 1;\n }\n\n .more-agents {\n width: 32px;\n height: 32px;\n border-radius: 50%;\n background: #E5E7EB;\n border: none;\n color: #6B7280;\n font-size: 11px;\n font-weight: 600;\n cursor: pointer;\n transition: all 200ms ease;\n flex-shrink: 0;\n }\n\n .more-agents:hover {\n background: #D1D5DB;\n transform: scale(1.05);\n }\n\n .panel-toggle {\n display: flex;\n align-items: center;\n gap: 4px;\n padding: 6px 10px;\n background: #3B82F6;\n border: none;\n border-radius: 6px;\n color: white;\n font-size: 12px;\n cursor: pointer;\n transition: all 200ms ease;\n position: relative;\n }\n\n .panel-toggle:hover {\n background: #2563EB;\n transform: translateY(-1px);\n box-shadow: 0 2px 4px rgba(59, 130, 246, 0.3);\n }\n\n .agent-count {\n background: rgba(255, 255, 255, 0.2);\n padding: 2px 6px;\n border-radius: 10px;\n font-weight: 600;\n min-width: 20px;\n text-align: center;\n }\n "] }]
189
- }], () => [{ type: i1.AgentStateService }], { conversationId: [{
269
+ }], () => [{ type: i1.AgentStateService }], { ConversationId: [{
270
+ type: Input
271
+ }], conversationId: [{
272
+ type: Input
273
+ }], CurrentUser: [{
190
274
  type: Input
191
275
  }], currentUser: [{
192
276
  type: Input
277
+ }], MaxVisibleAgents: [{
278
+ type: Input
193
279
  }], maxVisibleAgents: [{
194
280
  type: Input
281
+ }], TogglePanel: [{
282
+ type: Output
195
283
  }], togglePanel: [{
196
284
  type: Output
285
+ }], AgentSelected: [{
286
+ type: Output
197
287
  }], agentSelected: [{
198
288
  type: Output
199
289
  }] }); })();
@@ -1 +1 @@
1
- {"version":3,"file":"active-agent-indicator.component.js","sourceRoot":"","sources":["../../../../src/lib/components/agent/active-agent-indicator.component.ts"],"names":[],"mappings":"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","sourcesContent":["import { Component, Input, Output, EventEmitter, OnInit, OnDestroy } from '@angular/core';\nimport { UserInfo } from '@memberjunction/core';\nimport { MJAIAgentRunEntity } from '@memberjunction/core-entities';\nimport { AgentStateService, AgentStatus } from '../../services/agent-state.service';\nimport { Subscription } from 'rxjs';\n\n/**\n * Displays active agent indicators in the chat header with status animations\n * Shows multiple agents with avatars, status colors, and click-to-expand functionality\n */\n@Component({\n standalone: false,\n selector: 'mj-active-agent-indicator',\n template: `\n @if (activeAgents.length > 0) {\n <div class=\"active-agents-container\">\n <span class=\"active-agents-label\">Active:</span>\n <div class=\"agents-wrapper\" [class.expanded]=\"isExpanded\">\n @for (agent of displayAgents; track agent.run.ID) {\n <div class=\"agent-avatar\"\n [class.status-acknowledging]=\"agent.status === 'acknowledging'\"\n [class.status-working]=\"agent.status === 'working'\"\n [class.status-completing]=\"agent.status === 'completing'\"\n [class.status-completed]=\"agent.status === 'completed'\"\n [class.status-error]=\"agent.status === 'error'\"\n [title]=\"getAgentTooltip(agent)\"\n (click)=\"onAgentClick(agent)\">\n <div class=\"avatar-content\">\n <i class=\"fas fa-robot\"></i>\n </div>\n @if (agent.status !== 'completed') {\n <div class=\"status-indicator\">\n <div class=\"pulse-ring\"></div>\n </div>\n }\n @if (agent.confidence != null) {\n <div class=\"confidence-badge\" [title]=\"'Confidence: ' + (agent.confidence * 100).toFixed(0) + '%'\">\n {{ (agent.confidence * 100).toFixed(0) }}%\n </div>\n }\n </div>\n }\n @if (activeAgents.length > maxVisibleAgents && !isExpanded) {\n <button class=\"more-agents\" (click)=\"toggleExpanded()\" [title]=\"'Show all ' + activeAgents.length + ' agents'\">\n +{{ activeAgents.length - maxVisibleAgents }}\n </button>\n }\n </div>\n <button class=\"panel-toggle\" (click)=\"onTogglePanel()\" title=\"Open agent process panel\">\n <i class=\"fas fa-chart-line\"></i>\n <span class=\"agent-count\">{{ activeAgents.length }}</span>\n </button>\n </div>\n }\n `,\n styles: [`\n .active-agents-container {\n display: flex;\n align-items: center;\n gap: 8px;\n padding: 6px 12px;\n background-color: #F4F4F4;\n border-radius: 20px;\n font-size: 12px;\n color: #6B7280;\n height: 32px;\n }\n\n .active-agents-label {\n font-weight: 500;\n color: #6B7280;\n }\n\n .agents-wrapper {\n display: flex;\n align-items: center;\n gap: 6px;\n max-width: 200px;\n overflow: hidden;\n transition: max-width 300ms ease;\n }\n\n .agents-wrapper.expanded {\n max-width: 600px;\n }\n\n .agent-avatar {\n position: relative;\n width: 24px;\n height: 24px;\n border-radius: 50%;\n display: flex;\n align-items: center;\n justify-content: center;\n cursor: pointer;\n transition: all 200ms ease;\n flex-shrink: 0;\n font-size: 10px;\n font-weight: 600;\n }\n\n .agent-avatar:hover {\n transform: scale(1.1);\n }\n\n .avatar-content {\n width: 100%;\n height: 100%;\n border-radius: 50%;\n display: flex;\n align-items: center;\n justify-content: center;\n font-size: 14px;\n color: white;\n position: relative;\n z-index: 1;\n }\n\n /* Status-based colors */\n .status-acknowledging .avatar-content {\n background: linear-gradient(135deg, #3B82F6, #2563EB);\n }\n\n .status-working .avatar-content {\n background: linear-gradient(135deg, #F59E0B, #D97706);\n }\n\n .status-completing .avatar-content {\n background: linear-gradient(135deg, #10B981, #059669);\n }\n\n .status-completed .avatar-content {\n background: linear-gradient(135deg, #6B7280, #4B5563);\n opacity: 0.6;\n }\n\n .status-error .avatar-content {\n background: linear-gradient(135deg, #EF4444, #DC2626);\n }\n\n /* Animated status indicator */\n .status-indicator {\n position: absolute;\n top: -2px;\n right: -2px;\n width: 10px;\n height: 10px;\n z-index: 2;\n }\n\n .pulse-ring {\n width: 100%;\n height: 100%;\n border-radius: 50%;\n background: currentColor;\n animation: pulse 2s cubic-bezier(0.4, 0, 0.6, 1) infinite;\n }\n\n .status-acknowledging .pulse-ring {\n background: #3B82F6;\n }\n\n .status-working .pulse-ring {\n background: #F59E0B;\n animation: pulse 1.5s cubic-bezier(0.4, 0, 0.6, 1) infinite;\n }\n\n .status-completing .pulse-ring {\n background: #10B981;\n animation: pulse 1s cubic-bezier(0.4, 0, 0.6, 1) infinite;\n }\n\n @keyframes pulse {\n 0%, 100% {\n opacity: 1;\n transform: scale(1);\n }\n 50% {\n opacity: 0.5;\n transform: scale(1.5);\n }\n }\n\n /* Confidence badge */\n .confidence-badge {\n position: absolute;\n bottom: -4px;\n right: -4px;\n background: white;\n border: 1px solid #E5E7EB;\n border-radius: 4px;\n padding: 1px 3px;\n font-size: 9px;\n font-weight: 600;\n color: #374151;\n z-index: 3;\n line-height: 1;\n }\n\n .more-agents {\n width: 32px;\n height: 32px;\n border-radius: 50%;\n background: #E5E7EB;\n border: none;\n color: #6B7280;\n font-size: 11px;\n font-weight: 600;\n cursor: pointer;\n transition: all 200ms ease;\n flex-shrink: 0;\n }\n\n .more-agents:hover {\n background: #D1D5DB;\n transform: scale(1.05);\n }\n\n .panel-toggle {\n display: flex;\n align-items: center;\n gap: 4px;\n padding: 6px 10px;\n background: #3B82F6;\n border: none;\n border-radius: 6px;\n color: white;\n font-size: 12px;\n cursor: pointer;\n transition: all 200ms ease;\n position: relative;\n }\n\n .panel-toggle:hover {\n background: #2563EB;\n transform: translateY(-1px);\n box-shadow: 0 2px 4px rgba(59, 130, 246, 0.3);\n }\n\n .agent-count {\n background: rgba(255, 255, 255, 0.2);\n padding: 2px 6px;\n border-radius: 10px;\n font-weight: 600;\n min-width: 20px;\n text-align: center;\n }\n `]\n})\nexport class ActiveAgentIndicatorComponent implements OnInit, OnDestroy {\n @Input() conversationId?: string;\n @Input() currentUser!: UserInfo;\n @Input() maxVisibleAgents: number = 3;\n\n @Output() togglePanel = new EventEmitter<void>();\n @Output() agentSelected = new EventEmitter<MJAIAgentRunEntity>();\n\n public activeAgents: Array<{ run: MJAIAgentRunEntity; status: AgentStatus; confidence: number | null }> = [];\n public isExpanded: boolean = false;\n\n private subscription?: Subscription;\n\n constructor(private agentStateService: AgentStateService) {}\n\n ngOnInit(): void {\n // Subscribe to active agents for this conversation\n this.subscription = this.agentStateService\n .getActiveAgents(this.conversationId)\n .subscribe(agents => {\n this.activeAgents = agents;\n });\n }\n\n ngOnDestroy(): void {\n this.subscription?.unsubscribe();\n }\n\n get displayAgents(): Array<{ run: MJAIAgentRunEntity; status: AgentStatus; confidence: number | null }> {\n if (this.isExpanded) {\n return this.activeAgents;\n }\n return this.activeAgents.slice(0, this.maxVisibleAgents);\n }\n\n getAgentTooltip(agent: { run: MJAIAgentRunEntity; status: AgentStatus; confidence: number | null }): string {\n const statusText = this.getStatusText(agent.status);\n const confidenceText = agent.confidence != null\n ? ` (Confidence: ${(agent.confidence * 100).toFixed(0)}%)`\n : '';\n return `${agent.run.Agent || 'Agent'} - ${statusText}${confidenceText}`;\n }\n\n getStatusText(status: AgentStatus): string {\n switch (status) {\n case 'acknowledging': return 'Acknowledging request';\n case 'working': return 'Working on task';\n case 'completing': return 'Completing';\n case 'completed': return 'Completed';\n case 'error': return 'Error occurred';\n default: return 'Active';\n }\n }\n\n toggleExpanded(): void {\n this.isExpanded = !this.isExpanded;\n }\n\n onAgentClick(agent: { run: MJAIAgentRunEntity; status: AgentStatus; confidence: number | null }): void {\n this.agentSelected.emit(agent.run);\n }\n\n onTogglePanel(): void {\n this.togglePanel.emit();\n }\n}\n"]}
1
+ {"version":3,"file":"active-agent-indicator.component.js","sourceRoot":"","sources":["../../../../src/lib/components/agent/active-agent-indicator.component.ts"],"names":[],"mappings":"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","sourcesContent":["import { Component, Input, Output, EventEmitter, OnInit, OnDestroy } from '@angular/core';\nimport { UserInfo } from '@memberjunction/core';\nimport { MJAIAgentRunEntity } from '@memberjunction/core-entities';\nimport { AgentStateService, AgentStatus } from '../../services/agent-state.service';\nimport { Subscription } from 'rxjs';\n\n/**\n * Displays active agent indicators in the chat header with status animations\n * Shows multiple agents with avatars, status colors, and click-to-expand functionality\n */\n@Component({\n standalone: false,\n selector: 'mj-active-agent-indicator',\n template: `\n @if (activeAgents.length > 0) {\n <div class=\"active-agents-container\">\n <span class=\"active-agents-label\">Active:</span>\n <div class=\"agents-wrapper\" [class.expanded]=\"isExpanded\">\n @for (agent of displayAgents; track agent.run.ID) {\n <div class=\"agent-avatar\"\n [class.status-acknowledging]=\"agent.status === 'acknowledging'\"\n [class.status-working]=\"agent.status === 'working'\"\n [class.status-completing]=\"agent.status === 'completing'\"\n [class.status-completed]=\"agent.status === 'completed'\"\n [class.status-error]=\"agent.status === 'error'\"\n [title]=\"getAgentTooltip(agent)\"\n (click)=\"onAgentClick(agent)\">\n <div class=\"avatar-content\">\n <i class=\"fas fa-robot\"></i>\n </div>\n @if (agent.status !== 'completed') {\n <div class=\"status-indicator\">\n <div class=\"pulse-ring\"></div>\n </div>\n }\n @if (agent.confidence != null) {\n <div class=\"confidence-badge\" [title]=\"'Confidence: ' + (agent.confidence * 100).toFixed(0) + '%'\">\n {{ (agent.confidence * 100).toFixed(0) }}%\n </div>\n }\n </div>\n }\n @if (activeAgents.length > maxVisibleAgents && !isExpanded) {\n <button class=\"more-agents\" (click)=\"toggleExpanded()\" [title]=\"'Show all ' + activeAgents.length + ' agents'\">\n +{{ activeAgents.length - maxVisibleAgents }}\n </button>\n }\n </div>\n <button class=\"panel-toggle\" (click)=\"onTogglePanel()\" title=\"Open agent process panel\">\n <i class=\"fas fa-chart-line\"></i>\n <span class=\"agent-count\">{{ activeAgents.length }}</span>\n </button>\n </div>\n }\n `,\n styles: [`\n .active-agents-container {\n display: flex;\n align-items: center;\n gap: 8px;\n padding: 6px 12px;\n background-color: #F4F4F4;\n border-radius: 20px;\n font-size: 12px;\n color: #6B7280;\n height: 32px;\n }\n\n .active-agents-label {\n font-weight: 500;\n color: #6B7280;\n }\n\n .agents-wrapper {\n display: flex;\n align-items: center;\n gap: 6px;\n max-width: 200px;\n overflow: hidden;\n transition: max-width 300ms ease;\n }\n\n .agents-wrapper.expanded {\n max-width: 600px;\n }\n\n .agent-avatar {\n position: relative;\n width: 24px;\n height: 24px;\n border-radius: 50%;\n display: flex;\n align-items: center;\n justify-content: center;\n cursor: pointer;\n transition: all 200ms ease;\n flex-shrink: 0;\n font-size: 10px;\n font-weight: 600;\n }\n\n .agent-avatar:hover {\n transform: scale(1.1);\n }\n\n .avatar-content {\n width: 100%;\n height: 100%;\n border-radius: 50%;\n display: flex;\n align-items: center;\n justify-content: center;\n font-size: 14px;\n color: white;\n position: relative;\n z-index: 1;\n }\n\n /* Status-based colors */\n .status-acknowledging .avatar-content {\n background: linear-gradient(135deg, #3B82F6, #2563EB);\n }\n\n .status-working .avatar-content {\n background: linear-gradient(135deg, #F59E0B, #D97706);\n }\n\n .status-completing .avatar-content {\n background: linear-gradient(135deg, #10B981, #059669);\n }\n\n .status-completed .avatar-content {\n background: linear-gradient(135deg, #6B7280, #4B5563);\n opacity: 0.6;\n }\n\n .status-error .avatar-content {\n background: linear-gradient(135deg, #EF4444, #DC2626);\n }\n\n /* Animated status indicator */\n .status-indicator {\n position: absolute;\n top: -2px;\n right: -2px;\n width: 10px;\n height: 10px;\n z-index: 2;\n }\n\n .pulse-ring {\n width: 100%;\n height: 100%;\n border-radius: 50%;\n background: currentColor;\n animation: pulse 2s cubic-bezier(0.4, 0, 0.6, 1) infinite;\n }\n\n .status-acknowledging .pulse-ring {\n background: #3B82F6;\n }\n\n .status-working .pulse-ring {\n background: #F59E0B;\n animation: pulse 1.5s cubic-bezier(0.4, 0, 0.6, 1) infinite;\n }\n\n .status-completing .pulse-ring {\n background: #10B981;\n animation: pulse 1s cubic-bezier(0.4, 0, 0.6, 1) infinite;\n }\n\n @keyframes pulse {\n 0%, 100% {\n opacity: 1;\n transform: scale(1);\n }\n 50% {\n opacity: 0.5;\n transform: scale(1.5);\n }\n }\n\n /* Confidence badge */\n .confidence-badge {\n position: absolute;\n bottom: -4px;\n right: -4px;\n background: white;\n border: 1px solid #E5E7EB;\n border-radius: 4px;\n padding: 1px 3px;\n font-size: 9px;\n font-weight: 600;\n color: #374151;\n z-index: 3;\n line-height: 1;\n }\n\n .more-agents {\n width: 32px;\n height: 32px;\n border-radius: 50%;\n background: #E5E7EB;\n border: none;\n color: #6B7280;\n font-size: 11px;\n font-weight: 600;\n cursor: pointer;\n transition: all 200ms ease;\n flex-shrink: 0;\n }\n\n .more-agents:hover {\n background: #D1D5DB;\n transform: scale(1.05);\n }\n\n .panel-toggle {\n display: flex;\n align-items: center;\n gap: 4px;\n padding: 6px 10px;\n background: #3B82F6;\n border: none;\n border-radius: 6px;\n color: white;\n font-size: 12px;\n cursor: pointer;\n transition: all 200ms ease;\n position: relative;\n }\n\n .panel-toggle:hover {\n background: #2563EB;\n transform: translateY(-1px);\n box-shadow: 0 2px 4px rgba(59, 130, 246, 0.3);\n }\n\n .agent-count {\n background: rgba(255, 255, 255, 0.2);\n padding: 2px 6px;\n border-radius: 10px;\n font-weight: 600;\n min-width: 20px;\n text-align: center;\n }\n `]\n})\nexport class ActiveAgentIndicatorComponent implements OnInit, OnDestroy {\n @Input() ConversationId?: string;\n\n /** @deprecated Use {@link ConversationId}. */\n @Input() set conversationId(value: string | undefined) {\n this.ConversationId = value;\n }\n /** @deprecated Use {@link ConversationId}. */\n get conversationId(): string | undefined {\n return this.ConversationId;\n }\n @Input() CurrentUser!: UserInfo;\n\n /** @deprecated Use {@link CurrentUser}. */\n @Input() set currentUser(value: UserInfo) {\n this.CurrentUser = value;\n }\n /** @deprecated Use {@link CurrentUser}. */\n get currentUser(): UserInfo {\n return this.CurrentUser;\n }\n @Input() MaxVisibleAgents: number = 3;\n\n /** @deprecated Use {@link MaxVisibleAgents}. */\n @Input() set maxVisibleAgents(value: number) {\n this.MaxVisibleAgents = value;\n }\n /** @deprecated Use {@link MaxVisibleAgents}. */\n get maxVisibleAgents(): number {\n return this.MaxVisibleAgents;\n }\n\n @Output() TogglePanel = new EventEmitter<void>();\n\n /**\n * @deprecated Use {@link TogglePanel}.\n *\n * The same emitter under the old binding name, so a template still binding\n * (togglePanel) keeps working. Must stay AFTER TogglePanel: class fields\n * initialise in order, and the other way round this captures undefined.\n */\n @Output() togglePanel = this.TogglePanel;\n @Output() AgentSelected = new EventEmitter<MJAIAgentRunEntity>();\n\n /**\n * @deprecated Use {@link AgentSelected}.\n *\n * The same emitter under the old binding name, so a template still binding\n * (agentSelected) keeps working. Must stay AFTER AgentSelected: class fields\n * initialise in order, and the other way round this captures undefined.\n */\n @Output() agentSelected = this.AgentSelected;\n\n public ActiveAgents: Array<{ run: MJAIAgentRunEntity; status: AgentStatus; confidence: number | null }> = [];\n\n /** @deprecated Use {@link ActiveAgents}. */\n public get activeAgents(): Array<{ run: MJAIAgentRunEntity; status: AgentStatus; confidence: number | null }> {\n return this.ActiveAgents;\n }\n /** @deprecated Use {@link ActiveAgents}. */\n public set activeAgents(value: Array<{ run: MJAIAgentRunEntity; status: AgentStatus; confidence: number | null }>) {\n this.ActiveAgents = value;\n }\n public IsExpanded: boolean = false;\n\n /** @deprecated Use {@link IsExpanded}. */\n public get isExpanded(): boolean {\n return this.IsExpanded;\n }\n /** @deprecated Use {@link IsExpanded}. */\n public set isExpanded(value: boolean) {\n this.IsExpanded = value;\n }\n\n private subscription?: Subscription;\n\n constructor(private agentStateService: AgentStateService) {}\n\n ngOnInit(): void {\n // Subscribe to active agents for this conversation\n this.subscription = this.agentStateService\n .getActiveAgents(this.ConversationId)\n .subscribe(agents => {\n this.ActiveAgents = agents;\n });\n }\n\n ngOnDestroy(): void {\n this.subscription?.unsubscribe();\n }\n\n get DisplayAgents(): Array<{ run: MJAIAgentRunEntity; status: AgentStatus; confidence: number | null }> {\n if (this.IsExpanded) {\n return this.ActiveAgents;\n }\n return this.ActiveAgents.slice(0, this.MaxVisibleAgents);\n }\n\n /** @deprecated Use {@link DisplayAgents}. */\n get displayAgents(): Array<{ run: MJAIAgentRunEntity; status: AgentStatus; confidence: number | null }> {\n return this.DisplayAgents;\n }\n\n GetAgentTooltip(agent: { run: MJAIAgentRunEntity; status: AgentStatus; confidence: number | null }): string {\n const statusText = this.GetStatusText(agent.status);\n const confidenceText = agent.confidence != null\n ? ` (Confidence: ${(agent.confidence * 100).toFixed(0)}%)`\n : '';\n return `${agent.run.Agent || 'Agent'} - ${statusText}${confidenceText}`;\n }\n\n /** @deprecated Use {@link GetAgentTooltip}. */\n getAgentTooltip(agent: { run: MJAIAgentRunEntity; status: AgentStatus; confidence: number | null }): string {\n return this.GetAgentTooltip(agent);\n }\n\n GetStatusText(status: AgentStatus): string {\n switch (status) {\n case 'acknowledging': return 'Acknowledging request';\n case 'working': return 'Working on task';\n case 'completing': return 'Completing';\n case 'completed': return 'Completed';\n case 'error': return 'Error occurred';\n default: return 'Active';\n }\n }\n\n /** @deprecated Use {@link GetStatusText}. */\n getStatusText(status: AgentStatus): string {\n return this.GetStatusText(status);\n }\n\n ToggleExpanded(): void {\n this.IsExpanded = !this.IsExpanded;\n }\n\n /** @deprecated Use {@link ToggleExpanded}. */\n toggleExpanded(): void {\n return this.ToggleExpanded();\n }\n\n OnAgentClick(agent: { run: MJAIAgentRunEntity; status: AgentStatus; confidence: number | null }): void {\n this.AgentSelected.emit(agent.run);\n }\n\n /** @deprecated Use {@link OnAgentClick}. */\n onAgentClick(agent: { run: MJAIAgentRunEntity; status: AgentStatus; confidence: number | null }): void {\n return this.OnAgentClick(agent);\n }\n\n OnTogglePanel(): void {\n this.TogglePanel.emit();\n }\n\n /** @deprecated Use {@link OnTogglePanel}. */\n onTogglePanel(): void {\n return this.OnTogglePanel();\n }\n}\n"]}