@memberjunction/ng-conversations 6.1.4 → 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 (424) hide show
  1. package/README.md +36 -3
  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 +2407 -731
  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/channels/channel-onboarding-panel.component.d.ts +1 -1
  146. package/dist/lib/components/realtime/channels/channel-onboarding-panel.component.d.ts.map +1 -1
  147. package/dist/lib/components/realtime/channels/channel-onboarding-panel.component.js.map +1 -1
  148. package/dist/lib/components/realtime/channels/client-context-channel.d.ts +1 -1
  149. package/dist/lib/components/realtime/channels/client-context-channel.d.ts.map +1 -1
  150. package/dist/lib/components/realtime/channels/client-context-channel.js +1 -1
  151. package/dist/lib/components/realtime/channels/client-context-channel.js.map +1 -1
  152. package/dist/lib/components/realtime/channels/realtime-channel-pane.component.d.ts +1 -1
  153. package/dist/lib/components/realtime/channels/realtime-channel-pane.component.d.ts.map +1 -1
  154. package/dist/lib/components/realtime/channels/realtime-channel-pane.component.js +3 -0
  155. package/dist/lib/components/realtime/channels/realtime-channel-pane.component.js.map +1 -1
  156. package/dist/lib/components/realtime/media/media-channel.d.ts +2 -1
  157. package/dist/lib/components/realtime/media/media-channel.d.ts.map +1 -1
  158. package/dist/lib/components/realtime/media/media-channel.js +1 -1
  159. package/dist/lib/components/realtime/media/media-channel.js.map +1 -1
  160. package/dist/lib/components/realtime/realtime-activity-rail.component.d.ts +2 -2
  161. package/dist/lib/components/realtime/realtime-activity-rail.component.d.ts.map +1 -1
  162. package/dist/lib/components/realtime/realtime-activity-rail.component.js +2 -2
  163. package/dist/lib/components/realtime/realtime-activity-rail.component.js.map +1 -1
  164. package/dist/lib/components/realtime/realtime-agent-banner.component.d.ts +1 -1
  165. package/dist/lib/components/realtime/realtime-agent-banner.component.d.ts.map +1 -1
  166. package/dist/lib/components/realtime/realtime-agent-banner.component.js.map +1 -1
  167. package/dist/lib/components/realtime/realtime-composer.component.d.ts +3 -1
  168. package/dist/lib/components/realtime/realtime-composer.component.d.ts.map +1 -1
  169. package/dist/lib/components/realtime/realtime-composer.component.js +26 -8
  170. package/dist/lib/components/realtime/realtime-composer.component.js.map +1 -1
  171. package/dist/lib/components/realtime/realtime-delegation-card.component.d.ts +2 -2
  172. package/dist/lib/components/realtime/realtime-delegation-card.component.d.ts.map +1 -1
  173. package/dist/lib/components/realtime/realtime-delegation-card.component.js +2 -2
  174. package/dist/lib/components/realtime/realtime-delegation-card.component.js.map +1 -1
  175. package/dist/lib/components/realtime/realtime-session-overlay.component.d.ts +4 -4
  176. package/dist/lib/components/realtime/realtime-session-overlay.component.d.ts.map +1 -1
  177. package/dist/lib/components/realtime/realtime-session-overlay.component.js +19 -19
  178. package/dist/lib/components/realtime/realtime-session-overlay.component.js.map +1 -1
  179. package/dist/lib/components/realtime/realtime-session-state.d.ts +2 -3
  180. package/dist/lib/components/realtime/realtime-session-state.d.ts.map +1 -1
  181. package/dist/lib/components/realtime/realtime-session-state.js +3 -2
  182. package/dist/lib/components/realtime/realtime-session-state.js.map +1 -1
  183. package/dist/lib/components/realtime/realtime-session-thread.component.d.ts +17 -1
  184. package/dist/lib/components/realtime/realtime-session-thread.component.d.ts.map +1 -1
  185. package/dist/lib/components/realtime/realtime-session-thread.component.js +122 -45
  186. package/dist/lib/components/realtime/realtime-session-thread.component.js.map +1 -1
  187. package/dist/lib/components/realtime/realtime-session-timeline-card.component.d.ts +47 -31
  188. package/dist/lib/components/realtime/realtime-session-timeline-card.component.d.ts.map +1 -1
  189. package/dist/lib/components/realtime/realtime-session-timeline-card.component.js +138 -124
  190. package/dist/lib/components/realtime/realtime-session-timeline-card.component.js.map +1 -1
  191. package/dist/lib/components/realtime/realtime-surface-tabs.component.d.ts +4 -4
  192. package/dist/lib/components/realtime/realtime-surface-tabs.component.d.ts.map +1 -1
  193. package/dist/lib/components/realtime/realtime-surface-tabs.component.js +4 -4
  194. package/dist/lib/components/realtime/realtime-surface-tabs.component.js.map +1 -1
  195. package/dist/lib/components/realtime/realtime-surface-tabs.model.d.ts +2 -2
  196. package/dist/lib/components/realtime/realtime-surface-tabs.model.d.ts.map +1 -1
  197. package/dist/lib/components/realtime/realtime-surface-tabs.model.js +3 -3
  198. package/dist/lib/components/realtime/realtime-surface-tabs.model.js.map +1 -1
  199. package/dist/lib/components/realtime/realtime-ui-config.d.ts +13 -11
  200. package/dist/lib/components/realtime/realtime-ui-config.d.ts.map +1 -1
  201. package/dist/lib/components/realtime/realtime-ui-config.js +29 -25
  202. package/dist/lib/components/realtime/realtime-ui-config.js.map +1 -1
  203. package/dist/lib/components/realtime/remote-browser/remote-browser-channel.d.ts +1 -1
  204. package/dist/lib/components/realtime/remote-browser/remote-browser-channel.d.ts.map +1 -1
  205. package/dist/lib/components/realtime/remote-browser/remote-browser-channel.js +1 -1
  206. package/dist/lib/components/realtime/remote-browser/remote-browser-channel.js.map +1 -1
  207. package/dist/lib/components/realtime/whiteboard/whiteboard-channel.d.ts +4 -2
  208. package/dist/lib/components/realtime/whiteboard/whiteboard-channel.d.ts.map +1 -1
  209. package/dist/lib/components/realtime/whiteboard/whiteboard-channel.js +7 -3
  210. package/dist/lib/components/realtime/whiteboard/whiteboard-channel.js.map +1 -1
  211. package/dist/lib/components/search/search-panel.component.d.ts +133 -22
  212. package/dist/lib/components/search/search-panel.component.d.ts.map +1 -1
  213. package/dist/lib/components/search/search-panel.component.js +312 -83
  214. package/dist/lib/components/search/search-panel.component.js.map +1 -1
  215. package/dist/lib/components/share/share-modal.component.d.ts +69 -9
  216. package/dist/lib/components/share/share-modal.component.d.ts.map +1 -1
  217. package/dist/lib/components/share/share-modal.component.js +139 -31
  218. package/dist/lib/components/share/share-modal.component.js.map +1 -1
  219. package/dist/lib/components/shared/user-picker.component.d.ts +48 -8
  220. package/dist/lib/components/shared/user-picker.component.d.ts.map +1 -1
  221. package/dist/lib/components/shared/user-picker.component.js +110 -30
  222. package/dist/lib/components/shared/user-picker.component.js.map +1 -1
  223. package/dist/lib/components/sidebar/conversation-sidebar.component.d.ts +114 -11
  224. package/dist/lib/components/sidebar/conversation-sidebar.component.d.ts.map +1 -1
  225. package/dist/lib/components/sidebar/conversation-sidebar.component.js +199 -21
  226. package/dist/lib/components/sidebar/conversation-sidebar.component.js.map +1 -1
  227. package/dist/lib/components/sidebar/routines-section.component.d.ts +20 -1
  228. package/dist/lib/components/sidebar/routines-section.component.d.ts.map +1 -1
  229. package/dist/lib/components/sidebar/routines-section.component.js +25 -5
  230. package/dist/lib/components/sidebar/routines-section.component.js.map +1 -1
  231. package/dist/lib/components/slots/slot-interfaces.d.ts +19 -0
  232. package/dist/lib/components/slots/slot-interfaces.d.ts.map +1 -1
  233. package/dist/lib/components/slots/slot-interfaces.js.map +1 -1
  234. package/dist/lib/components/task/tasks-full-view.component.d.ts +95 -13
  235. package/dist/lib/components/task/tasks-full-view.component.d.ts.map +1 -1
  236. package/dist/lib/components/task/tasks-full-view.component.js +223 -75
  237. package/dist/lib/components/task/tasks-full-view.component.js.map +1 -1
  238. package/dist/lib/components/tasks/task-widget.component.d.ts +46 -6
  239. package/dist/lib/components/tasks/task-widget.component.d.ts.map +1 -1
  240. package/dist/lib/components/tasks/task-widget.component.js +100 -16
  241. package/dist/lib/components/tasks/task-widget.component.js.map +1 -1
  242. package/dist/lib/components/tasks/tasks-dropdown.component.d.ts +64 -7
  243. package/dist/lib/components/tasks/tasks-dropdown.component.d.ts.map +1 -1
  244. package/dist/lib/components/tasks/tasks-dropdown.component.js +127 -27
  245. package/dist/lib/components/tasks/tasks-dropdown.component.js.map +1 -1
  246. package/dist/lib/components/thread/thread-panel.component.d.ts +66 -8
  247. package/dist/lib/components/thread/thread-panel.component.d.ts.map +1 -1
  248. package/dist/lib/components/thread/thread-panel.component.js +146 -36
  249. package/dist/lib/components/thread/thread-panel.component.js.map +1 -1
  250. package/dist/lib/components/toast/toast.component.d.ts +11 -1
  251. package/dist/lib/components/toast/toast.component.d.ts.map +1 -1
  252. package/dist/lib/components/toast/toast.component.js +25 -5
  253. package/dist/lib/components/toast/toast.component.js.map +1 -1
  254. package/dist/lib/components/workspace/conversation-workspace.component.d.ts +385 -42
  255. package/dist/lib/components/workspace/conversation-workspace.component.d.ts.map +1 -1
  256. package/dist/lib/components/workspace/conversation-workspace.component.js +887 -291
  257. package/dist/lib/components/workspace/conversation-workspace.component.js.map +1 -1
  258. package/dist/lib/composer-plugins/base-conversation-mention.provider.d.ts +8 -0
  259. package/dist/lib/composer-plugins/base-conversation-mention.provider.d.ts.map +1 -1
  260. package/dist/lib/composer-plugins/base-conversation-mention.provider.js +8 -1
  261. package/dist/lib/composer-plugins/base-conversation-mention.provider.js.map +1 -1
  262. package/dist/lib/conversations.module.d.ts.map +1 -1
  263. package/dist/lib/conversations.module.js.map +1 -1
  264. package/dist/lib/directives/chat-slot.directive.d.ts +5 -1
  265. package/dist/lib/directives/chat-slot.directive.d.ts.map +1 -1
  266. package/dist/lib/directives/chat-slot.directive.js.map +1 -1
  267. package/dist/lib/directives/search-shortcut.directive.d.ts +9 -1
  268. package/dist/lib/directives/search-shortcut.directive.d.ts.map +1 -1
  269. package/dist/lib/directives/search-shortcut.directive.js +14 -4
  270. package/dist/lib/directives/search-shortcut.directive.js.map +1 -1
  271. package/dist/lib/events/chat-events.d.ts +34 -7
  272. package/dist/lib/events/chat-events.d.ts.map +1 -1
  273. package/dist/lib/events/chat-events.js +37 -7
  274. package/dist/lib/events/chat-events.js.map +1 -1
  275. package/dist/lib/models/agent-turn.model.d.ts +103 -0
  276. package/dist/lib/models/agent-turn.model.d.ts.map +1 -0
  277. package/dist/lib/models/agent-turn.model.js +12 -0
  278. package/dist/lib/models/agent-turn.model.js.map +1 -0
  279. package/dist/lib/models/collection-view.model.js.map +1 -1
  280. package/dist/lib/models/conversation-state.model.d.ts +8 -0
  281. package/dist/lib/models/conversation-state.model.d.ts.map +1 -1
  282. package/dist/lib/models/conversation-state.model.js.map +1 -1
  283. package/dist/lib/models/lazy-artifact-info.d.ts +44 -12
  284. package/dist/lib/models/lazy-artifact-info.d.ts.map +1 -1
  285. package/dist/lib/models/lazy-artifact-info.js +98 -34
  286. package/dist/lib/models/lazy-artifact-info.js.map +1 -1
  287. package/dist/lib/services/active-tasks.service.d.ts +30 -4
  288. package/dist/lib/services/active-tasks.service.d.ts.map +1 -1
  289. package/dist/lib/services/active-tasks.service.js +71 -19
  290. package/dist/lib/services/active-tasks.service.js.map +1 -1
  291. package/dist/lib/services/agent-state.service.d.ts +17 -1
  292. package/dist/lib/services/agent-state.service.d.ts.map +1 -1
  293. package/dist/lib/services/agent-state.service.js +48 -16
  294. package/dist/lib/services/agent-state.service.js.map +1 -1
  295. package/dist/lib/services/artifact-permission.service.d.ts +39 -0
  296. package/dist/lib/services/artifact-permission.service.d.ts.map +1 -1
  297. package/dist/lib/services/artifact-permission.service.js +152 -17
  298. package/dist/lib/services/artifact-permission.service.js.map +1 -1
  299. package/dist/lib/services/artifact-state.service.d.ts +58 -5
  300. package/dist/lib/services/artifact-state.service.d.ts.map +1 -1
  301. package/dist/lib/services/artifact-state.service.js +135 -35
  302. package/dist/lib/services/artifact-state.service.js.map +1 -1
  303. package/dist/lib/services/browser-realtime-media-host.d.ts +24 -0
  304. package/dist/lib/services/browser-realtime-media-host.d.ts.map +1 -0
  305. package/dist/lib/services/browser-realtime-media-host.js +95 -0
  306. package/dist/lib/services/browser-realtime-media-host.js.map +1 -0
  307. package/dist/lib/services/collection-permission.service.d.ts +28 -0
  308. package/dist/lib/services/collection-permission.service.d.ts.map +1 -1
  309. package/dist/lib/services/collection-permission.service.js +88 -32
  310. package/dist/lib/services/collection-permission.service.js.map +1 -1
  311. package/dist/lib/services/collection-state.service.d.ts +11 -1
  312. package/dist/lib/services/collection-state.service.d.ts.map +1 -1
  313. package/dist/lib/services/collection-state.service.js +25 -5
  314. package/dist/lib/services/collection-state.service.js.map +1 -1
  315. package/dist/lib/services/conversation-agent.service.d.ts +26 -4
  316. package/dist/lib/services/conversation-agent.service.d.ts.map +1 -1
  317. package/dist/lib/services/conversation-agent.service.js +57 -18
  318. package/dist/lib/services/conversation-agent.service.js.map +1 -1
  319. package/dist/lib/services/conversation-attachment.service.d.ts +41 -2
  320. package/dist/lib/services/conversation-attachment.service.d.ts.map +1 -1
  321. package/dist/lib/services/conversation-attachment.service.js +80 -13
  322. package/dist/lib/services/conversation-attachment.service.js.map +1 -1
  323. package/dist/lib/services/conversation-streaming.service.d.ts +22 -0
  324. package/dist/lib/services/conversation-streaming.service.d.ts.map +1 -1
  325. package/dist/lib/services/conversation-streaming.service.js +50 -10
  326. package/dist/lib/services/conversation-streaming.service.js.map +1 -1
  327. package/dist/lib/services/data-cache.service.d.ts +31 -0
  328. package/dist/lib/services/data-cache.service.d.ts.map +1 -1
  329. package/dist/lib/services/data-cache.service.js +71 -15
  330. package/dist/lib/services/data-cache.service.js.map +1 -1
  331. package/dist/lib/services/dialog.service.d.ts +13 -0
  332. package/dist/lib/services/dialog.service.d.ts.map +1 -1
  333. package/dist/lib/services/dialog.service.js +25 -5
  334. package/dist/lib/services/dialog.service.js.map +1 -1
  335. package/dist/lib/services/export.service.d.ts +2 -0
  336. package/dist/lib/services/export.service.d.ts.map +1 -1
  337. package/dist/lib/services/export.service.js +5 -1
  338. package/dist/lib/services/export.service.js.map +1 -1
  339. package/dist/lib/services/graphql-attachment-blob-store.d.ts +44 -0
  340. package/dist/lib/services/graphql-attachment-blob-store.d.ts.map +1 -0
  341. package/dist/lib/services/graphql-attachment-blob-store.js +113 -0
  342. package/dist/lib/services/graphql-attachment-blob-store.js.map +1 -0
  343. package/dist/lib/services/mention-autocomplete.service.d.ts +17 -141
  344. package/dist/lib/services/mention-autocomplete.service.d.ts.map +1 -1
  345. package/dist/lib/services/mention-autocomplete.service.js +15 -460
  346. package/dist/lib/services/mention-autocomplete.service.js.map +1 -1
  347. package/dist/lib/services/mention-parser.service.d.ts +10 -0
  348. package/dist/lib/services/mention-parser.service.d.ts.map +1 -1
  349. package/dist/lib/services/mention-parser.service.js +25 -5
  350. package/dist/lib/services/mention-parser.service.js.map +1 -1
  351. package/dist/lib/services/notification.service.d.ts +54 -6
  352. package/dist/lib/services/notification.service.d.ts.map +1 -1
  353. package/dist/lib/services/notification.service.js +123 -27
  354. package/dist/lib/services/notification.service.js.map +1 -1
  355. package/dist/lib/services/realtime-audio-recorder.d.ts +4 -4
  356. package/dist/lib/services/realtime-audio-recorder.js +12 -12
  357. package/dist/lib/services/realtime-audio-recorder.js.map +1 -1
  358. package/dist/lib/services/realtime-pcm-wav.d.ts +4 -0
  359. package/dist/lib/services/realtime-pcm-wav.d.ts.map +1 -1
  360. package/dist/lib/services/realtime-pcm-wav.js +10 -2
  361. package/dist/lib/services/realtime-pcm-wav.js.map +1 -1
  362. package/dist/lib/services/realtime-session-review.service.d.ts +1 -1
  363. package/dist/lib/services/realtime-session-review.service.d.ts.map +1 -1
  364. package/dist/lib/services/realtime-session-review.service.js +1 -1
  365. package/dist/lib/services/realtime-session-review.service.js.map +1 -1
  366. package/dist/lib/services/realtime-session.service.d.ts +16 -1150
  367. package/dist/lib/services/realtime-session.service.d.ts.map +1 -1
  368. package/dist/lib/services/realtime-session.service.js +28 -2430
  369. package/dist/lib/services/realtime-session.service.js.map +1 -1
  370. package/dist/lib/services/search.service.d.ts +42 -9
  371. package/dist/lib/services/search.service.d.ts.map +1 -1
  372. package/dist/lib/services/search.service.js +103 -23
  373. package/dist/lib/services/search.service.js.map +1 -1
  374. package/dist/lib/services/toast.service.d.ts +19 -1
  375. package/dist/lib/services/toast.service.d.ts.map +1 -1
  376. package/dist/lib/services/toast.service.js +45 -9
  377. package/dist/lib/services/toast.service.js.map +1 -1
  378. package/dist/lib/services/ui-command-handler.service.d.ts +16 -2
  379. package/dist/lib/services/ui-command-handler.service.d.ts.map +1 -1
  380. package/dist/lib/services/ui-command-handler.service.js +36 -8
  381. package/dist/lib/services/ui-command-handler.service.js.map +1 -1
  382. package/dist/lib/utils/agent-artifact-summary.d.ts +2 -2
  383. package/dist/lib/utils/agent-artifact-summary.js +3 -3
  384. package/dist/lib/utils/agent-artifact-summary.js.map +1 -1
  385. package/dist/lib/utils/agent-turn-routing.d.ts +69 -0
  386. package/dist/lib/utils/agent-turn-routing.d.ts.map +1 -0
  387. package/dist/lib/utils/agent-turn-routing.js +96 -0
  388. package/dist/lib/utils/agent-turn-routing.js.map +1 -0
  389. package/dist/lib/utils/artifact-panel-action.d.ts +15 -4
  390. package/dist/lib/utils/artifact-panel-action.d.ts.map +1 -1
  391. package/dist/lib/utils/artifact-panel-action.js +10 -2
  392. package/dist/lib/utils/artifact-panel-action.js.map +1 -1
  393. package/dist/lib/utils/distinct-artifacts.d.ts +2 -0
  394. package/dist/lib/utils/distinct-artifacts.d.ts.map +1 -1
  395. package/dist/lib/utils/distinct-artifacts.js +5 -1
  396. package/dist/lib/utils/distinct-artifacts.js.map +1 -1
  397. package/dist/lib/utils/plan-mode-preference.d.ts +2 -2
  398. package/dist/lib/utils/plan-mode-preference.js +6 -6
  399. package/dist/lib/utils/plan-mode-preference.js.map +1 -1
  400. package/dist/lib/utils/realtime-session-timeline.d.ts +8 -79
  401. package/dist/lib/utils/realtime-session-timeline.d.ts.map +1 -1
  402. package/dist/lib/utils/realtime-session-timeline.js +8 -89
  403. package/dist/lib/utils/realtime-session-timeline.js.map +1 -1
  404. package/dist/public-api.d.ts +5 -2
  405. package/dist/public-api.d.ts.map +1 -1
  406. package/dist/public-api.js +9 -2
  407. package/dist/public-api.js.map +1 -1
  408. package/package.json +33 -32
  409. package/dist/lib/components/realtime/channels/base-realtime-channel-client.d.ts +0 -384
  410. package/dist/lib/components/realtime/channels/base-realtime-channel-client.d.ts.map +0 -1
  411. package/dist/lib/components/realtime/channels/base-realtime-channel-client.js +0 -231
  412. package/dist/lib/components/realtime/channels/base-realtime-channel-client.js.map +0 -1
  413. package/dist/lib/services/delegation-result-parser.d.ts +0 -50
  414. package/dist/lib/services/delegation-result-parser.d.ts.map +0 -1
  415. package/dist/lib/services/delegation-result-parser.js +0 -60
  416. package/dist/lib/services/delegation-result-parser.js.map +0 -1
  417. package/dist/lib/services/narration-template.d.ts +0 -42
  418. package/dist/lib/services/narration-template.d.ts.map +0 -1
  419. package/dist/lib/services/narration-template.js +0 -73
  420. package/dist/lib/services/narration-template.js.map +0 -1
  421. package/dist/lib/services/skill-picker-narrowing.d.ts +0 -13
  422. package/dist/lib/services/skill-picker-narrowing.d.ts.map +0 -1
  423. package/dist/lib/services/skill-picker-narrowing.js +0 -13
  424. package/dist/lib/services/skill-picker-narrowing.js.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"file":"conversation-workspace.component.js","sourceRoot":"","sources":["../../../../src/lib/components/workspace/conversation-workspace.component.ts","../../../../src/lib/components/workspace/conversation-workspace.component.html"],"names":[],"mappings":"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","sourcesContent":["/**\n * ============================================================================\n * DEPRECATED - DO NOT USE\n * ============================================================================\n *\n * This workspace component was used when conversations, collections, and tasks\n * were all combined into a single tabbed interface.\n *\n * The new architecture uses SEPARATE resource components for each feature:\n * - ChatConversationsResource for conversations\n * - CollectionsResource for collections\n * - TasksResource for tasks\n *\n * These resource components are located in @memberjunction/ng-explorer-core\n * and integrate with MJExplorer's tab/navigation system.\n *\n * This file is kept for backwards compatibility only. Any new features or\n * bug fixes should be made to the individual resource components instead.\n * ============================================================================\n */\n\nimport {\n Component,\n Input,\n Output,\n EventEmitter,\n OnInit,\n OnDestroy,\n DoCheck,\n ChangeDetectorRef,\n HostListener\n} from '@angular/core';\nimport { UUIDsEqual } from '@memberjunction/global';\nimport { MJConversationEntity, MJArtifactEntity, MJTaskEntity, ArtifactMetadataEngine, MJUserSettingEntity, UserInfoEngine, ConversationEngine } from '@memberjunction/core-entities';\nimport { UserInfo, CompositeKey, KeyValuePair, Metadata } from '@memberjunction/core';\nimport { BaseAngularComponent } from '@memberjunction/ng-base-types';\nimport { ArtifactStateService } from '../../services/artifact-state.service';\nimport { CollectionStateService } from '../../services/collection-state.service';\nimport { ArtifactPermissionService } from '../../services/artifact-permission.service';\nimport { PendingAttachment } from '@memberjunction/ng-composer';\nimport { MentionAutocompleteService } from '../../services/mention-autocomplete.service';\nimport { ConversationStreamingService } from '../../services/conversation-streaming.service';\nimport { UICommandHandlerService } from '../../services/ui-command-handler.service';\nimport { MJNotificationService } from '@memberjunction/ng-notifications';\nimport { NavigationTab, WorkspaceLayout } from '../../models/conversation-state.model';\nimport { SearchResult } from '../../services/search.service';\nimport { Subject, takeUntil } from 'rxjs';\nimport { AIEngineBase } from '@memberjunction/ai-engine-base';\nimport { ActionableCommand, AutomaticCommand } from '@memberjunction/ai-core-plus';\nimport { NavigationRequest } from '@memberjunction/ng-artifacts';\n\n/**\n * Top-level workspace component for conversations\n * Provides 3-column Slack-style layout: Navigation | Sidebar | Chat Area | Artifact Panel\n * Supports context-based navigation (library or task views)\n *\n * @deprecated Use ChatConversationsResource from @memberjunction/ng-explorer-core instead.\n * This component is maintained for backwards compatibility but the resource-wrapper pattern\n * is the preferred approach for MJExplorer integration.\n */\n@Component({\n standalone: false,\n selector: 'mj-conversation-workspace',\n templateUrl: './conversation-workspace.component.html',\n styleUrls: ['./conversation-workspace.component.css']\n})\nexport class ConversationWorkspaceComponent extends BaseAngularComponent implements OnInit, OnDestroy, DoCheck {\n @Input() environmentId!: string;\n @Input() initialConversationId?: string;\n @Input() layout: WorkspaceLayout = 'full';\n @Input() currentUser!: UserInfo;\n @Input() activeContext?: 'library' | 'task';\n @Input() contextItemId?: string;\n /**\n * Show the Routines section at the very bottom of the left sidebar. Default true;\n * hosts that don't want routines (or embed a reduced chat surface) set false.\n * The section additionally hides itself when the current user lacks Read\n * permission on 'MJ: User Routines'.\n */\n @Input() ShowRoutines: boolean = true;\n\n // Navigation properties for external control (deep linking from URL)\n @Input() set activeTabInput(value: 'conversations' | 'collections' | 'tasks' | undefined) {\n if (value && value !== this.activeTab) {\n this.activeTab = value;\n }\n }\n\n @Input() set activeConversationInput(value: string | undefined) {\n if (value && value !== this.selectedConversationId) {\n console.log('🔗 Deep link to conversation:', value);\n this.activeTab = 'conversations';\n this.setActiveConversation(value);\n }\n }\n\n @Input() set activeCollectionInput(value: string | undefined) {\n if (value && value !== this.collectionState.activeCollectionId) {\n console.log('🔗 Deep link to collection:', value);\n this.activeTab = 'collections';\n this.collectionState.setActiveCollection(value);\n }\n }\n\n @Input() set activeVersionIdInput(value: string | undefined) {\n if (value && value !== this.activeVersionId) {\n console.log('🔗 Deep link to version:', value);\n this.activeTab = 'collections';\n // Store the version ID immediately to prevent ngDoCheck from clearing it\n this.activeVersionId = value;\n // Open artifact by version ID\n this.artifactState.openArtifactByVersionId(value);\n }\n }\n\n @Input() set activeTaskInput(value: string | undefined) {\n if (value && value !== this._activeTaskId) {\n this._activeTaskId = value;\n }\n }\n\n private _activeTaskId?: string;\n get activeTaskId(): string | undefined {\n return this._activeTaskId;\n }\n\n @Output() conversationChanged = new EventEmitter<MJConversationEntity>();\n @Output() artifactOpened = new EventEmitter<MJArtifactEntity>();\n @Output() navigationChanged = new EventEmitter<{\n tab: 'conversations' | 'collections' | 'tasks';\n conversationId?: string;\n collectionId?: string;\n versionId?: string;\n taskId?: string;\n }>();\n @Output() newConversationStarted = new EventEmitter<void>();\n @Output() actionableCommandExecuted = new EventEmitter<ActionableCommand>();\n @Output() automaticCommandExecuted = new EventEmitter<AutomaticCommand>();\n @Output() navigationRequested = new EventEmitter<NavigationRequest>();\n\n public activeTab: NavigationTab = 'conversations';\n public isSidebarVisible: boolean = true;\n public isArtifactPanelOpen: boolean = false;\n public isSearchPanelOpen: boolean = false;\n public isWorkspaceReady: boolean = false;\n public renamedConversationId: string | null = null;\n public activeArtifactId: string | null = null;\n public activeVersionNumber: number | null = null;\n public activeVersionId: string | null = null;\n public isMobileView: boolean = false;\n public isSidebarPinned: boolean = false; // Default unpinned until settings load (prevents flicker)\n\n // Artifact permissions\n public canShareActiveArtifact: boolean = false;\n public canEditActiveArtifact: boolean = false;\n\n // Share modal state\n public isArtifactShareModalOpen: boolean = false;\n public artifactToShare: MJArtifactEntity | null = null;\n\n // Resize state - Sidebar\n public sidebarWidth: number = 260; // Default width\n public isSidebarCollapsed: boolean = true; // Default collapsed until settings load (prevents flicker)\n public sidebarTransitionsEnabled: boolean = false; // Disabled during initial load to prevent jarring animation\n public isSidebarSettingsLoaded: boolean = false; // Tracks whether settings have been loaded (prevents render before state is known)\n private isSidebarResizing: boolean = false;\n private sidebarResizeStartX: number = 0;\n private sidebarResizeStartWidth: number = 0;\n\n // Resize state - Artifact Panel\n public artifactPanelWidth: number = 40; // Default 40% width\n public isArtifactPanelMaximized: boolean = false;\n private artifactPanelWidthBeforeMaximize: number = 40; // Store width before maximizing\n private isArtifactPanelResizing: boolean = false;\n private artifactPanelResizeStartX: number = 0;\n private artifactPanelResizeStartWidth: number = 0;\n\n private previousConversationId: string | null = null;\n private previousTaskId: string | undefined = undefined;\n private previousVersionId: string | null = null; // Used to track version changes in ngDoCheck\n private previousIsNewConversation: boolean = false; // Track new conversation state changes\n private destroy$ = new Subject<void>();\n\n // Stored bound references so addEventListener and removeEventListener get the same function object.\n private readonly boundOnResizeMove = this.onResizeMove.bind(this);\n private readonly boundOnResizeEnd = this.onResizeEnd.bind(this);\n private readonly boundOnResizeTouchMove = this.onResizeTouchMove.bind(this);\n private readonly boundOnResizeTouchEnd = this.onResizeTouchEnd.bind(this);\n\n // User Settings key for server-side persistence\n private readonly USER_SETTING_SIDEBAR_KEY = 'Conversations.SidebarState';\n private saveSettingsTimeout: ReturnType<typeof setTimeout> | null = null;\n private isLoadingSettings: boolean = false;\n\n // Task filter for conversation-specific filtering\n public tasksFilter: string = '1=1';\n\n // LOCAL CONVERSATION STATE - enables multiple workspace instances\n // Each workspace manages its own selection state independently\n public selectedConversationId: string | null = null;\n public selectedConversation: MJConversationEntity | null = null;\n public selectedThreadId: string | null = null;\n public isNewUnsavedConversation: boolean = false;\n public pendingMessageToSend: string | null = null;\n public pendingAttachmentsToSend: PendingAttachment[] | null = null;\n /** The conversation pendingMessageToSend is destined for — bound to the chat-area so the\n * auto-send reaches only that conversation's input, even if the user swaps conversations\n * during the async send window (prevents the message bleeding into the swapped-to conversation). */\n public pendingMessageConversationId: string | null = null;\n public pendingArtifactId: string | null = null;\n public pendingArtifactConversationId: string | null = null;\n public pendingArtifactVersionNumber: number | null = null;\n\n private engine = ConversationEngine.Instance;\n // Shared AI mention/suggestion engine (BaseSingleton — same instance the composer plugins use)\n private mentionAutocompleteService = MentionAutocompleteService.Instance;\n\n constructor(\n public artifactState: ArtifactStateService,\n public collectionState: CollectionStateService,\n private artifactPermissionService: ArtifactPermissionService,\n private notificationService: MJNotificationService,\n private streamingService: ConversationStreamingService,\n private uiCommandHandler: UICommandHandlerService,\n private cdr: ChangeDetectorRef\n ) {\n super();\n }\n\n // =========================================================================\n // LOCAL CONVERSATION STATE MANAGEMENT\n // These methods manage the workspace's local selection state\n // =========================================================================\n\n /**\n * Sets the active conversation for this workspace instance\n * @param id The conversation ID to activate (or null to clear)\n */\n setActiveConversation(id: string | null): void {\n console.log('🎯 Setting active conversation:', id);\n this.selectedConversationId = id;\n this.selectedConversation = id ? (this.engine.GetConversation(id) ?? null) : null;\n // Clear unsaved state when switching to an existing conversation\n if (id) {\n this.isNewUnsavedConversation = false;\n }\n }\n\n /**\n * Initiates a new unsaved conversation (doesn't create DB record yet)\n * This shows the welcome screen and delays DB creation until first message\n */\n startNewConversation(): void {\n console.log('✨ Starting new unsaved conversation');\n this.selectedConversationId = null;\n this.selectedConversation = null;\n this.isNewUnsavedConversation = true;\n this.pendingMessageToSend = null;\n this.pendingAttachmentsToSend = null;\n this.pendingMessageConversationId = null;\n\n // Auto-collapse if mobile OR if sidebar is not pinned\n if (this.isMobileView || !this.isSidebarPinned) {\n this.collapseSidebar();\n }\n }\n\n /**\n * Clears the new unsaved conversation state\n * Called when the conversation is actually created or cancelled\n */\n clearNewConversationState(): void {\n this.isNewUnsavedConversation = false;\n }\n\n /**\n * Opens a thread panel for a specific message\n * @param messageId The parent message ID\n */\n openThread(messageId: string): void {\n this.selectedThreadId = messageId;\n }\n\n /**\n * Closes the currently open thread panel\n */\n closeThread(): void {\n this.selectedThreadId = null;\n }\n\n /**\n * Handler for conversation selection from sidebar/list\n */\n onConversationSelected(conversationId: string): void {\n this.setActiveConversation(conversationId);\n\n // Auto-collapse if mobile OR if sidebar is not pinned\n if (this.isMobileView || !this.isSidebarPinned) {\n this.collapseSidebar();\n }\n }\n\n /**\n * Handler for new conversation creation from chat area\n * Now includes pending message and attachments to ensure atomic state update\n */\n /**\n * A realtime session created (and just finished with) a brand-new conversation. The\n * row was created SERVER-side, so it isn't in the engine cache yet — reload the list\n * to fold it in, then select it ONLY when the conversation list is visible (owner\n * spec: the user may have the sidebar hidden; don't yank their context if so —\n * the refreshed cache makes it appear whenever the list is reopened).\n */\n async onRealtimeConversationReady(event: { conversationId: string; select: boolean }): Promise<void> {\n try {\n await ConversationEngine.Instance.LoadConversations(this.environmentId, this.currentUser, true);\n if (event.select && this.isSidebarVisible) {\n const conversation = ConversationEngine.Instance.Conversations.find(\n c => UUIDsEqual(c.ID, event.conversationId)\n );\n if (conversation) {\n this.selectedConversationId = conversation.ID;\n this.selectedConversation = conversation;\n this.isNewUnsavedConversation = false;\n }\n }\n } catch (error) {\n console.error('onRealtimeConversationReady ERROR:', error);\n }\n }\n\n onConversationCreated(event: {\n conversation: MJConversationEntity;\n pendingMessage?: string;\n pendingAttachments?: PendingAttachment[];\n }): void {\n try {\n // Set ALL state atomically before Angular change detection runs\n // This ensures the new message-input component receives the pending data\n this.pendingMessageToSend = event.pendingMessage || null;\n this.pendingAttachmentsToSend = event.pendingAttachments || null;\n // Pin the pending message to THIS conversation so a fast conversation-swap can't\n // redirect its auto-send into a different conversation.\n this.pendingMessageConversationId = event.conversation.ID;\n this.selectedConversationId = event.conversation.ID;\n this.selectedConversation = event.conversation;\n this.isNewUnsavedConversation = false;\n // The conversation is already added to ConversationEngine by the chat area\n } catch (error) {\n console.error('onConversationCreated ERROR:', error);\n }\n }\n\n /**\n * Handler for pending message requested from chat area (empty state)\n * @deprecated Use onConversationCreated with pendingMessage instead\n */\n onPendingMessageRequested(event: {text: string; attachments: PendingAttachment[]}): void {\n this.pendingMessageToSend = event.text;\n this.pendingAttachmentsToSend = event.attachments;\n this.pendingMessageConversationId = this.selectedConversationId;\n }\n\n /**\n * Handler for thread opened from chat area\n */\n onThreadOpened(threadId: string): void {\n this.selectedThreadId = threadId;\n }\n\n /**\n * Handler for thread closed from chat area\n */\n onThreadClosed(): void {\n this.selectedThreadId = null;\n }\n\n async ngOnInit() {\n // Bind provider-aware services to this component's provider so multi-server\n // browser apps don't silently fall back to the global Metadata.Provider.\n // ArtifactStateService cascades to ArtifactPermissionService and CollectionPermissionService.\n this.artifactState.Provider = this.ProviderToUse;\n this.artifactPermissionService.Provider = this.ProviderToUse;\n\n // Initialize global streaming service FIRST\n // This establishes the single PubSub connection for all conversations\n this.streamingService.initialize();\n console.log('✅ Global streaming service initialized');\n\n // Subscribe to command events from UI Command Handler service\n // These will be bubbled up to the host application\n this.uiCommandHandler.actionableCommandRequested\n .pipe(takeUntil(this.destroy$))\n .subscribe(request => {\n this.onActionableCommand(request.command);\n });\n\n this.uiCommandHandler.automaticCommandRequested\n .pipe(takeUntil(this.destroy$))\n .subscribe(command => {\n this.onAutomaticCommand(command);\n });\n\n // Check initial mobile state FIRST\n this.checkMobileView();\n\n // Load sidebar state - but on mobile, always default to collapsed\n if (this.isMobileView) {\n this.isSidebarCollapsed = true;\n this.isSidebarVisible = false;\n this.isSidebarSettingsLoaded = true; // Mobile doesn't need to load settings\n // Enable transitions after a brief delay to ensure initial state is applied\n setTimeout(() => {\n this.sidebarTransitionsEnabled = true;\n }, 50);\n } else {\n // Load from User Settings (async) - await before continuing to prevent flicker\n await this.loadSidebarState();\n this.cdr.detectChanges();\n // Enable transitions after state is loaded and applied\n setTimeout(() => {\n this.sidebarTransitionsEnabled = true;\n }, 50);\n }\n\n // Setup resize listeners\n window.addEventListener('mousemove', this.boundOnResizeMove);\n window.addEventListener('mouseup', this.boundOnResizeEnd);\n\n // Setup touch listeners for mobile\n window.addEventListener('touchmove', this.boundOnResizeTouchMove);\n window.addEventListener('touchend', this.boundOnResizeTouchEnd);\n\n // CRITICAL: Initialize engines FIRST before rendering any UI\n // The isWorkspaceReady flag blocks all child components from rendering\n // until engines are fully loaded and ready\n try {\n // Load both engines in parallel - ArtifactMetadataEngine is lightweight (just artifact types)\n // Using Promise.all ensures optimal performance with no additional delay\n await Promise.all([\n AIEngineBase.Instance.Config(false),\n ArtifactMetadataEngine.Instance.Config(false)\n ]);\n\n console.log('✅ AI Engine initialized with', AIEngineBase.Instance.Agents?.length || 0, 'agents');\n console.log('✅ Artifact Metadata Engine initialized with',\n ArtifactMetadataEngine.Instance.ArtifactTypes?.length || 0, 'artifact types');\n\n // Initialize mention autocomplete service immediately after AI engine\n // This ensures the cache is built from the fully-loaded agent list\n await this.mentionAutocompleteService.initialize(this.currentUser);\n console.log('✅ Mention autocomplete initialized');\n\n // Mark workspace as ready - this allows UI to render\n this.isWorkspaceReady = true;\n this.cdr.detectChanges();\n } catch (error) {\n console.error('❌ Failed to initialize engines:', error);\n // Still mark as ready so UI isn't blocked forever\n this.isWorkspaceReady = true;\n this.cdr.detectChanges();\n }\n\n // Subscribe to artifact panel state\n this.artifactState.isPanelOpen$\n .pipe(takeUntil(this.destroy$))\n .subscribe(isOpen => {\n this.isArtifactPanelOpen = isOpen;\n });\n\n // Subscribe to active artifact ID\n this.artifactState.activeArtifactId$\n .pipe(takeUntil(this.destroy$))\n .subscribe(async id => {\n this.activeArtifactId = id;\n // Load permissions when artifact changes\n if (id) {\n await this.loadArtifactPermissions(id);\n } else {\n this.canShareActiveArtifact = false;\n this.canEditActiveArtifact = false;\n }\n });\n\n // Subscribe to active version number\n this.artifactState.activeVersionNumber$\n .pipe(takeUntil(this.destroy$))\n .subscribe(versionNumber => {\n this.activeVersionNumber = versionNumber;\n });\n\n // Set initial conversation if provided\n if (this.initialConversationId) {\n this.setActiveConversation(this.initialConversationId);\n }\n\n // Handle context-based navigation\n if (this.activeContext === 'library') {\n this.activeTab = 'collections';\n }\n // Task context will be handled by chat header dropdown, not navigation tabs\n\n // Build task filter for conversations domain\n this.buildTasksFilter();\n }\n\n /**\n * Builds the SQL filter for tasks in conversations the user has access to\n */\n private buildTasksFilter(): void {\n // Filter tasks by conversations the user owns or is a participant in, or tasks owned\n // by the user\n const md = this.ProviderToUse;\n const cd = md.EntityByName('MJ: Conversation Details');\n const c = md.EntityByName('MJ: Conversations');\n if (!cd || !c) {\n console.warn('⚠️ Missing metadata for Conversations or Conversation Details');\n this.tasksFilter = `ParentID IS NULL AND UserID = '${this.currentUser.ID}'`; // Fallback to user-owned tasks only\n return;\n }\n\n this.tasksFilter = `ParentID IS NULL AND (UserID = '${this.currentUser.ID}' OR ConversationDetailID IN (\n SELECT ID FROM [${cd.SchemaName}].[${cd.BaseView}] \n WHERE \n UserID ='${this.currentUser.ID}' OR \n ConversationID IN (\n SELECT ID FROM [${c.SchemaName}].[${c.BaseView}] WHERE UserID='${this.currentUser.ID}'\n )\n ))`;\n console.log('📝 Conversations domain tasks filter built:', this.tasksFilter);\n }\n\n ngDoCheck() {\n // Detect new unsaved conversation state changes\n const currentIsNewConversation = this.isNewUnsavedConversation;\n if (currentIsNewConversation !== this.previousIsNewConversation) {\n this.previousIsNewConversation = currentIsNewConversation;\n if (currentIsNewConversation) {\n // Emit event to clear URL conversation parameter\n Promise.resolve().then(() => {\n this.newConversationStarted.emit();\n });\n }\n }\n\n // Detect conversation changes and emit event\n const currentId = this.selectedConversationId;\n if (currentId !== this.previousConversationId) {\n this.previousConversationId = currentId;\n const conversation = this.selectedConversation;\n if (conversation) {\n this.conversationChanged.emit(conversation);\n\n // Also emit navigationChanged for URL updates (only if on conversations tab)\n if (this.activeTab === 'conversations' && currentId) {\n // Defer emission until after change detection completes\n Promise.resolve().then(() => {\n this.navigationChanged.emit({\n tab: 'conversations',\n conversationId: currentId\n });\n });\n }\n }\n }\n\n // Detect task selection changes (when on tasks tab)\n if (this.activeTab === 'tasks') {\n const currentTaskId = this.activeTaskId;\n if (currentTaskId !== this.previousTaskId) {\n this.previousTaskId = currentTaskId;\n if (currentTaskId) {\n // Defer emission until after change detection completes\n Promise.resolve().then(() => {\n this.navigationChanged.emit({\n tab: 'tasks',\n taskId: currentTaskId\n });\n });\n }\n }\n }\n\n // Version changes are handled by onCollectionNavigated and deep link inputs\n // We don't need ngDoCheck to track them as it causes double navigation events\n }\n\n ngOnDestroy() {\n this.destroy$.next();\n this.destroy$.complete();\n\n // Clear any pending save timeout\n if (this.saveSettingsTimeout) {\n clearTimeout(this.saveSettingsTimeout);\n }\n\n // Remove resize listeners\n window.removeEventListener('mousemove', this.boundOnResizeMove);\n window.removeEventListener('mouseup', this.boundOnResizeEnd);\n window.removeEventListener('touchmove', this.boundOnResizeTouchMove);\n window.removeEventListener('touchend', this.boundOnResizeTouchEnd);\n }\n\n @HostListener('window:resize')\n onWindowResize(): void {\n this.checkMobileView();\n }\n\n /**\n * Handle clicks outside the sidebar to auto-collapse when unpinned\n */\n @HostListener('document:click', ['$event'])\n onDocumentClick(event: MouseEvent): void {\n // Only handle when sidebar is expanded but unpinned\n if (this.isSidebarCollapsed || this.isSidebarPinned) {\n return;\n }\n\n // Check if click is outside the sidebar\n const target = event.target as HTMLElement;\n const sidebarElement = target.closest('.workspace-sidebar');\n const expandHandle = target.closest('.sidebar-expand-handle');\n\n // If click is outside sidebar and expand handle, collapse it\n if (!sidebarElement && !expandHandle) {\n this.collapseSidebar();\n }\n }\n\n private checkMobileView(): void {\n const wasMobile = this.isMobileView;\n this.isMobileView = window.innerWidth < 768;\n\n if (this.isMobileView && !wasMobile) {\n // Switched to mobile - hide sidebar and default to collapsed\n this.isSidebarVisible = false;\n this.isSidebarCollapsed = true;\n } else if (!this.isMobileView && wasMobile) {\n // Switched to desktop - show sidebar, restore state from User Settings\n this.isSidebarVisible = true;\n this.loadSidebarState().then(() => {\n this.cdr.detectChanges();\n });\n }\n }\n\n /**\n * Collapse sidebar\n */\n collapseSidebar(): void {\n this.isSidebarCollapsed = true;\n if (this.isMobileView) {\n this.isSidebarVisible = false;\n }\n }\n\n /**\n * Expand sidebar (unpinned - will auto-collapse on selection)\n */\n expandSidebar(): void {\n this.isSidebarCollapsed = false;\n this.isSidebarPinned = false;\n }\n\n /**\n * Pin sidebar - keep it open after selection\n */\n pinSidebar(): void {\n this.isSidebarPinned = true;\n this.saveSidebarState();\n }\n\n /**\n * Unpin sidebar - will auto-collapse on next selection\n */\n unpinSidebar(): void {\n this.isSidebarPinned = false;\n this.collapseSidebar();\n this.saveSidebarState();\n }\n\n /**\n * Save sidebar state to User Settings (server)\n * Uses debouncing to avoid excessive database writes\n */\n private saveSidebarState(): void {\n // Debounce the server save to avoid excessive writes\n if (this.saveSettingsTimeout) {\n clearTimeout(this.saveSettingsTimeout);\n }\n this.saveSettingsTimeout = setTimeout(() => {\n this.saveSidebarStateToServer();\n }, 1000); // 1 second debounce\n }\n\n /**\n * Save sidebar state to User Settings entity on server using UserInfoEngine for cached lookup\n * Includes collapsed, pinned, sidebarWidth, and artifactPanelWidth\n */\n private async saveSidebarStateToServer(): Promise<void> {\n try {\n const userId = this.currentUser?.ID;\n if (!userId) {\n return;\n }\n\n const stateToSave = {\n collapsed: this.isSidebarCollapsed,\n pinned: this.isSidebarPinned,\n sidebarWidth: this.sidebarWidth,\n artifactPanelWidth: this.artifactPanelWidth\n };\n\n const engine = UserInfoEngine.Instance;\n const md = this.ProviderToUse;\n\n // Find existing setting from cached user settings\n let setting = engine.UserSettings.find(s => s.Setting === this.USER_SETTING_SIDEBAR_KEY);\n\n if (!setting) {\n // Create new setting\n setting = await md.GetEntityObject<MJUserSettingEntity>('MJ: User Settings');\n setting.UserID = userId;\n setting.Setting = this.USER_SETTING_SIDEBAR_KEY;\n }\n\n setting.Value = JSON.stringify(stateToSave);\n await setting.Save();\n } catch (error) {\n console.warn('Failed to save sidebar state to User Settings:', error);\n }\n }\n\n /**\n * Load sidebar state from User Settings (server) using UserInfoEngine\n * Includes collapsed, pinned, sidebarWidth, and artifactPanelWidth\n * For new users with no saved state, defaults to collapsed with new conversation\n */\n private async loadSidebarState(): Promise<void> {\n this.isLoadingSettings = true;\n\n try {\n const userId = this.currentUser?.ID;\n if (userId) {\n // Try loading from cached User Settings\n const engine = UserInfoEngine.Instance;\n const setting = engine.UserSettings.find(s => s.Setting === this.USER_SETTING_SIDEBAR_KEY);\n\n if (setting?.Value) {\n const state = JSON.parse(setting.Value);\n this.isSidebarCollapsed = state.collapsed ?? true;\n this.isSidebarPinned = state.pinned ?? false;\n\n // Load width values if present (with validation)\n if (typeof state.sidebarWidth === 'number' && state.sidebarWidth >= 200 && state.sidebarWidth <= 500) {\n this.sidebarWidth = state.sidebarWidth;\n }\n if (typeof state.artifactPanelWidth === 'number' && state.artifactPanelWidth >= 20 && state.artifactPanelWidth <= 70) {\n this.artifactPanelWidth = state.artifactPanelWidth;\n }\n\n this.isLoadingSettings = false;\n return;\n }\n }\n\n // No saved state found - NEW USER DEFAULT:\n // Start with sidebar collapsed and show new conversation screen\n this.isSidebarCollapsed = true;\n this.isSidebarPinned = false;\n this.isNewUnsavedConversation = true;\n } catch (error) {\n console.warn('Failed to load sidebar state:', error);\n // Default to collapsed for new users on error\n this.isSidebarCollapsed = true;\n this.isSidebarPinned = false;\n } finally {\n this.isLoadingSettings = false;\n this.isSidebarSettingsLoaded = true;\n }\n }\n\n onTabChanged(tab: NavigationTab): void {\n const wasOnDifferentTab = this.activeTab !== tab;\n this.activeTab = tab;\n\n // Emit navigation change event with current state\n const navEvent: any = {\n tab: tab as 'conversations' | 'collections' | 'tasks'\n };\n\n if (tab === 'conversations') {\n navEvent.conversationId = this.selectedConversationId || undefined;\n } else if (tab === 'collections') {\n // If switching TO collections tab from another tab, clear to root level\n if (wasOnDifferentTab) {\n this.collectionState.setActiveCollection(null);\n this.activeVersionId = null;\n // Don't include collectionId or versionId - go to root\n } else {\n // Already on collections tab, preserve current state\n if (this.collectionState.activeCollectionId) {\n navEvent.collectionId = this.collectionState.activeCollectionId;\n }\n if (this.activeVersionId && this.collectionState.activeCollectionId) {\n navEvent.versionId = this.activeVersionId;\n }\n }\n } else if (tab === 'tasks') {\n navEvent.taskId = this.activeTaskId || undefined;\n }\n\n this.navigationChanged.emit(navEvent);\n\n // Auto-close artifact panel when switching away from collections\n if (tab === 'conversations' || tab === 'tasks') {\n this.artifactState.closeArtifact();\n }\n }\n\n toggleSidebar(): void {\n this.isSidebarVisible = !this.isSidebarVisible;\n }\n\n closeSidebar(): void {\n if (this.isMobileView && this.isSidebarVisible) {\n this.isSidebarVisible = false;\n }\n }\n\n closeArtifactPanel(): void {\n this.artifactState.closeArtifact();\n }\n\n openSearch(): void {\n this.isSearchPanelOpen = true;\n }\n\n closeSearch(): void {\n this.isSearchPanelOpen = false;\n }\n\n async onRefreshAgentCache(): Promise<void> {\n try {\n await AIEngineBase.Instance.Config(true);\n\n // Refresh the mention autocomplete service to pick up new agents\n await this.mentionAutocompleteService.refresh(this.currentUser);\n\n const agentCount = AIEngineBase.Instance.Agents?.length || 0;\n this.notificationService.CreateSimpleNotification(`Agent cache refreshed (${agentCount} agents)`, 'success', 3000);\n this.cdr.detectChanges();\n } catch (error) {\n this.notificationService.CreateSimpleNotification('Failed to refresh agent cache', 'error', 3000);\n console.error('Failed to refresh AI Engine:', error);\n }\n }\n\n handleSearchResult(result: SearchResult): void {\n console.log('🔍 Navigating to search result:', result);\n\n switch (result.type) {\n case 'conversation':\n // Switch to conversations tab and select conversation\n this.activeTab = 'conversations';\n this.setActiveConversation(result.id);\n this.navigationChanged.emit({\n tab: 'conversations',\n conversationId: result.id\n });\n break;\n\n case 'message':\n // Switch to conversations tab, open conversation, and scroll to message (future enhancement)\n this.activeTab = 'conversations';\n if (result.conversationId) {\n this.setActiveConversation(result.conversationId);\n this.navigationChanged.emit({\n tab: 'conversations',\n conversationId: result.conversationId\n // TODO: Add messageId for scroll-to support in future\n });\n }\n break;\n\n case 'artifact':\n // Switch to collections tab and open artifact\n this.activeTab = 'collections';\n this.artifactState.openArtifact(result.id);\n\n // If artifact is in a collection, navigate to that collection\n const collectionId = result.collectionId || undefined;\n\n // Search results don't have version ID, so just navigate to collection\n // The artifact will open with latest version\n this.navigationChanged.emit({\n tab: 'collections',\n collectionId\n });\n break;\n\n case 'collection':\n // Switch to collections tab and navigate to collection\n this.activeTab = 'collections';\n this.collectionState.setActiveCollection(result.id);\n\n this.navigationChanged.emit({\n tab: 'collections',\n collectionId: result.id\n });\n break;\n\n case 'task':\n // Switch to tasks tab and select task\n this.activeTab = 'tasks';\n this._activeTaskId = result.id;\n this.navigationChanged.emit({\n tab: 'tasks',\n taskId: result.id\n });\n break;\n }\n\n // Close search panel after navigation\n this.closeSearch();\n }\n\n /**\n * Sidebar resize methods\n */\n onSidebarResizeStart(event: MouseEvent): void {\n this.isSidebarResizing = true;\n this.sidebarResizeStartX = event.clientX;\n this.sidebarResizeStartWidth = this.sidebarWidth;\n event.preventDefault();\n document.body.style.cursor = 'col-resize';\n document.body.style.userSelect = 'none';\n }\n\n /**\n * Artifact panel resize methods\n */\n onArtifactPanelResizeStart(event: MouseEvent): void {\n this.isArtifactPanelResizing = true;\n this.artifactPanelResizeStartX = event.clientX;\n this.artifactPanelResizeStartWidth = this.artifactPanelWidth;\n event.preventDefault();\n document.body.style.cursor = 'col-resize';\n document.body.style.userSelect = 'none';\n }\n\n private onResizeMove(event: MouseEvent): void {\n if (this.isSidebarResizing) {\n const deltaX = event.clientX - this.sidebarResizeStartX;\n let newWidth = this.sidebarResizeStartWidth + deltaX;\n\n // Constrain between 200px and 500px\n newWidth = Math.max(200, Math.min(500, newWidth));\n this.sidebarWidth = newWidth;\n } else if (this.isArtifactPanelResizing) {\n const container = document.querySelector('.workspace-content') as HTMLElement;\n if (!container) return;\n\n const containerWidth = container.offsetWidth;\n const deltaX = event.clientX - this.artifactPanelResizeStartX;\n const deltaPercent = (deltaX / containerWidth) * -100; // Negative because we're pulling from the right\n let newWidth = this.artifactPanelResizeStartWidth + deltaPercent;\n\n // Constrain between 20% and 70%\n newWidth = Math.max(20, Math.min(70, newWidth));\n this.artifactPanelWidth = newWidth;\n }\n }\n\n private onResizeEnd(event: MouseEvent): void {\n if (this.isSidebarResizing) {\n this.isSidebarResizing = false;\n document.body.style.cursor = '';\n document.body.style.userSelect = '';\n this.saveSidebarState(); // Save width to User Settings\n } else if (this.isArtifactPanelResizing) {\n this.isArtifactPanelResizing = false;\n document.body.style.cursor = '';\n document.body.style.userSelect = '';\n this.saveSidebarState(); // Save width to User Settings\n }\n }\n\n /**\n * Touch event handlers for mobile resize support\n */\n onSidebarResizeTouchStart(event: TouchEvent): void {\n this.isSidebarResizing = true;\n const touch = event.touches[0];\n this.sidebarResizeStartX = touch.clientX;\n this.sidebarResizeStartWidth = this.sidebarWidth;\n event.preventDefault();\n }\n\n onArtifactPanelResizeTouchStart(event: TouchEvent): void {\n this.isArtifactPanelResizing = true;\n const touch = event.touches[0];\n this.artifactPanelResizeStartX = touch.clientX;\n this.artifactPanelResizeStartWidth = this.artifactPanelWidth;\n event.preventDefault();\n }\n\n private onResizeTouchMove(event: TouchEvent): void {\n if (this.isSidebarResizing) {\n const touch = event.touches[0];\n const deltaX = touch.clientX - this.sidebarResizeStartX;\n let newWidth = this.sidebarResizeStartWidth + deltaX;\n\n newWidth = Math.max(200, Math.min(500, newWidth));\n this.sidebarWidth = newWidth;\n } else if (this.isArtifactPanelResizing) {\n const container = document.querySelector('.workspace-content') as HTMLElement;\n if (!container) return;\n\n const touch = event.touches[0];\n const containerWidth = container.offsetWidth;\n const deltaX = touch.clientX - this.artifactPanelResizeStartX;\n const deltaPercent = (deltaX / containerWidth) * -100;\n let newWidth = this.artifactPanelResizeStartWidth + deltaPercent;\n\n newWidth = Math.max(20, Math.min(70, newWidth));\n this.artifactPanelWidth = newWidth;\n }\n }\n\n private onResizeTouchEnd(event: TouchEvent): void {\n if (this.isSidebarResizing) {\n this.isSidebarResizing = false;\n this.saveSidebarState(); // Save width to User Settings\n } else if (this.isArtifactPanelResizing) {\n this.isArtifactPanelResizing = false;\n this.saveSidebarState(); // Save width to User Settings\n }\n }\n\n /**\n * Toggle maximize/restore state for artifact panel\n */\n /**\n * Apply-to-my-form handler. This deprecated workspace component is no\n * longer the live chat surface — the real handler lives on\n * ConversationChatAreaComponent. This stub exists only so the template\n * binding compiles. New consumers should use the resource components in\n * @memberjunction/ng-explorer-core instead of this workspace.\n */\n onApplyFormRequested(_event: { spec: unknown; entityName: string }): void {\n console.warn('Workspace.onApplyFormRequested: workspace is deprecated; use the per-feature resource components instead.');\n }\n\n toggleMaximizeArtifactPanel(): void {\n if (this.isArtifactPanelMaximized) {\n // Restore to previous width\n this.artifactPanelWidth = this.artifactPanelWidthBeforeMaximize;\n this.isArtifactPanelMaximized = false;\n } else {\n // Maximize - store current width and set to 100%\n this.artifactPanelWidthBeforeMaximize = this.artifactPanelWidth;\n this.artifactPanelWidth = 100;\n this.isArtifactPanelMaximized = true;\n }\n }\n\n onConversationRenamed(event: {conversationId: string; name: string; description: string}): void {\n console.log('✨ Workspace received rename event:', event);\n // Trigger animation in sidebar by setting the ID\n this.renamedConversationId = event.conversationId;\n\n // Clear after animation completes (1500ms)\n setTimeout(() => {\n this.renamedConversationId = null;\n }, 1500);\n }\n\n onOpenEntityRecord(event: {entityName: string; compositeKey: CompositeKey}): void {\n const pairs = event.compositeKey.KeyValuePairs || [];\n const keys: Record<string, string | number> = {};\n for (const p of pairs) {\n if (p.FieldName) keys[p.FieldName] = p.Value;\n }\n const command: ActionableCommand = {\n type: 'open:resource',\n label: `Open ${event.entityName}`,\n resourceType: 'Record',\n entityName: event.entityName,\n resourceId: event.compositeKey.GetValueByFieldName('ID') ?? pairs[0]?.Value,\n keys,\n mode: 'view'\n };\n this.actionableCommandExecuted.emit(command);\n }\n\n onNavigationRequest(event: NavigationRequest): void {\n this.navigationRequested.emit(event);\n }\n\n onOpenEntityRecordFromTasks(event: {entityName: string; recordId: string}): void {\n // Convert to actionable command and emit\n const command: ActionableCommand = {\n type: 'open:resource',\n label: `Open ${event.entityName}`,\n resourceType: 'Record',\n entityName: event.entityName,\n resourceId: event.recordId,\n mode: 'view'\n };\n this.actionableCommandExecuted.emit(command);\n }\n\n onTaskClicked(task: MJTaskEntity): void {\n // Switch to Tasks tab and set active task ID\n this.activeTab = 'tasks';\n this._activeTaskId = task.ID;\n\n // Emit navigation change\n this.navigationChanged.emit({\n tab: 'tasks',\n taskId: task.ID\n });\n }\n\n /**\n * Handle collection navigation events\n */\n onCollectionNavigated(event: { collectionId: string | null; versionId?: string | null }): void {\n console.log('📁 Collection navigated:', event);\n\n // Store the version ID for URL sync\n // CRITICAL: Only update activeVersionId if versionId was explicitly provided in the event\n // If versionId is undefined (not provided), keep the current activeVersionId\n if (event.versionId !== undefined) {\n this.activeVersionId = event.versionId;\n }\n // Otherwise: versionId not provided in event, preserve current activeVersionId\n\n // IMPORTANT: Don't emit navigationChanged here when doing programmatic navigation (deep linking)\n // The artifact state is managed separately\n // Only emit if the event explicitly includes a versionId, or if we're intentionally closing the artifact\n if (event.versionId !== undefined) {\n // Event explicitly specifies artifact state (user clicked artifact or intentionally closed it)\n this.navigationChanged.emit({\n tab: 'collections',\n collectionId: event.collectionId || undefined,\n versionId: event.versionId || undefined\n });\n } else if (!this.activeVersionId) {\n // No artifact currently open, safe to emit collection-only navigation\n this.navigationChanged.emit({\n tab: 'collections',\n collectionId: event.collectionId || undefined\n });\n }\n // Otherwise: artifact is open but event doesn't specify versionId\n // Don't emit - preserve current URL state with artifact\n }\n\n /**\n * Handle navigation from artifact links\n */\n onArtifactLinkNavigation(event: {type: 'conversation' | 'collection'; id: string; artifactId?: string; versionNumber?: number; versionId?: string}): void {\n console.log('🔗 Navigating from artifact link:', event);\n\n if (event.type === 'conversation') {\n this.activeTab = 'conversations';\n\n // Close collection artifact viewer if it's open\n this.artifactState.closeArtifact();\n\n // Store pending artifact info so chat area can show it and scroll to message\n if (event.artifactId) {\n this.pendingArtifactId = event.artifactId;\n this.pendingArtifactConversationId = event.id;\n this.pendingArtifactVersionNumber = event.versionNumber || null;\n console.log('📦 Pending artifact set:', event.artifactId, 'v' + event.versionNumber);\n }\n\n this.setActiveConversation(event.id);\n\n this.navigationChanged.emit({\n tab: 'conversations',\n conversationId: event.id\n });\n } else if (event.type === 'collection') {\n this.activeTab = 'collections';\n this.collectionState.setActiveCollection(event.id);\n\n // Open the artifact automatically when navigating to the collection\n if (event.artifactId) {\n this.artifactState.openArtifact(event.artifactId, event.versionNumber);\n }\n\n // Store version ID for URL sync (same as viewArtifact does)\n if (event.versionId) {\n this.activeVersionId = event.versionId;\n }\n\n // Emit navigation with version ID so URL includes it\n this.navigationChanged.emit({\n tab: 'collections',\n collectionId: event.id,\n versionId: event.versionId\n });\n }\n }\n\n /**\n * Load permissions for the given artifact\n */\n private async loadArtifactPermissions(artifactId: string): Promise<void> {\n // Guard against null/undefined\n if (!artifactId) {\n this.canShareActiveArtifact = false;\n this.canEditActiveArtifact = false;\n return;\n }\n\n try {\n const permissions = await this.artifactPermissionService.getUserPermissions(artifactId, this.currentUser);\n this.canShareActiveArtifact = permissions.canShare;\n this.canEditActiveArtifact = permissions.canEdit;\n } catch (error) {\n console.error('Failed to load artifact permissions:', error);\n this.canShareActiveArtifact = false;\n this.canEditActiveArtifact = false;\n }\n }\n\n /**\n * Handle share request from artifact viewer\n */\n async onArtifactShareRequested(artifactId: string): Promise<void> {\n // Load the artifact entity to pass to the modal\n const md = this.ProviderToUse;\n const artifact = await md.GetEntityObject<MJArtifactEntity>('MJ: Artifacts');\n await artifact.Load(artifactId);\n\n if (artifact) {\n this.artifactToShare = artifact;\n this.isArtifactShareModalOpen = true;\n }\n }\n\n /**\n * Handle close of artifact share modal\n */\n onArtifactShareModalClose(): void {\n this.isArtifactShareModalOpen = false;\n this.artifactToShare = null;\n }\n\n /**\n * Handle successful share - refresh permissions\n */\n async onArtifactShared(): Promise<void> {\n this.isArtifactShareModalOpen = false;\n this.artifactToShare = null;\n\n // Refresh permissions for the active artifact\n if (this.activeArtifactId) {\n await this.loadArtifactPermissions(this.activeArtifactId);\n }\n }\n\n /**\n * Handle actionable command execution from child components\n * Bubbles up to host application for handling\n */\n onActionableCommand(command: ActionableCommand): void {\n if (command.type === 'open:resource' && command.resourceType === 'Record') {\n // chat-area converts Record commands to openEntityRecord; onOpenEntityRecord\n // re-emits them as actionableCommandExecuted. Skip the raw command to avoid a double open.\n return;\n }\n console.log('📤 Bubbling up actionable command:', command);\n this.actionableCommandExecuted.emit(command);\n }\n\n /**\n * Handle automatic command execution from child components\n * Bubbles up to host application for handling\n */\n onAutomaticCommand(command: AutomaticCommand): void {\n console.log('📤 Bubbling up automatic command:', command);\n this.automaticCommandExecuted.emit(command);\n }\n}","<div class=\"conversation-workspace\" [attr.data-layout]=\"layout\" mjSearchShortcut (searchTriggered)=\"openSearch()\">\n <!-- Top Navigation Bar -->\n <div class=\"workspace-navigation\">\n <mj-conversation-navigation\n [activeTab]=\"activeTab\"\n [environmentId]=\"environmentId\"\n [currentUser]=\"currentUser\"\n [conversationId]=\"selectedConversationId\"\n (tabChanged)=\"onTabChanged($event)\"\n (sidebarToggled)=\"toggleSidebar()\"\n (searchTriggered)=\"openSearch()\"\n (refreshTriggered)=\"onRefreshAgentCache()\">\n </mj-conversation-navigation>\n </div>\n\n <!-- Loading spinner while initializing agents -->\n @if (!isWorkspaceReady) {\n <div class=\"workspace-loading\">\n <mj-loading text=\"Loading agents...\" size=\"large\"></mj-loading>\n </div>\n }\n\n <!-- Main workspace content - only renders when agents are ready -->\n @if (isWorkspaceReady) {\n <div class=\"workspace-content\">\n <!-- Mobile sidebar backdrop -->\n @if (isMobileView && isSidebarVisible && activeTab !== 'collections' && activeTab !== 'tasks') {\n <div class=\"mobile-sidebar-backdrop visible\" (click)=\"closeSidebar()\"></div>\n }\n\n <!-- Left Sidebar (hidden when Collections or Tasks view is active) -->\n @if (activeTab !== 'collections' && activeTab !== 'tasks' && isSidebarSettingsLoaded) {\n <div class=\"workspace-sidebar\"\n [class.open]=\"isSidebarVisible\"\n [class.collapsed]=\"isSidebarCollapsed\"\n [class.no-transition]=\"!sidebarTransitionsEnabled\"\n [style.width.px]=\"isSidebarCollapsed ? 0 : sidebarWidth\">\n <mj-conversation-sidebar\n [activeTab]=\"activeTab\"\n [environmentId]=\"environmentId\"\n [currentUser]=\"currentUser\"\n [selectedConversationId]=\"selectedConversationId\"\n [renamedConversationId]=\"renamedConversationId\"\n [isSidebarPinned]=\"isSidebarPinned\"\n [isMobileView]=\"isMobileView\"\n [ShowRoutines]=\"ShowRoutines\"\n [Provider]=\"Provider\"\n (conversationSelected)=\"onConversationSelected($event)\"\n (newConversationRequested)=\"startNewConversation()\"\n (openEntityRecord)=\"onOpenEntityRecord($event)\"\n (pinSidebarRequested)=\"pinSidebar()\"\n (unpinSidebarRequested)=\"unpinSidebar()\">\n </mj-conversation-sidebar>\n </div>\n }\n\n <!-- Floating toggle button (only visible when sidebar is collapsed and settings loaded) -->\n @if (activeTab !== 'collections' && activeTab !== 'tasks' && isSidebarCollapsed && isSidebarSettingsLoaded) {\n <button class=\"sidebar-floating-toggle\"\n (click)=\"expandSidebar()\"\n title=\"Show conversations\">\n <i class=\"fas fa-table-columns\"></i>\n </button>\n }\n\n <!-- Resize handle for sidebar (only when expanded and settings loaded) -->\n @if (isSidebarVisible && !isSidebarCollapsed && activeTab !== 'collections' && activeTab !== 'tasks' && isSidebarSettingsLoaded) {\n <div class=\"sidebar-resize-handle\"\n (mousedown)=\"onSidebarResizeStart($event)\"></div>\n }\n\n <!-- Collections Full-Panel View -->\n @if (activeTab === 'collections') {\n <div class=\"workspace-main\">\n <mj-collections-full-view\n [environmentId]=\"environmentId\"\n [currentUser]=\"currentUser\"\n (collectionNavigated)=\"onCollectionNavigated($event)\">\n </mj-collections-full-view>\n </div>\n }\n\n <!-- Tasks Full-Panel View -->\n @if (activeTab === 'tasks') {\n <div class=\"workspace-main\">\n <mj-tasks-full-view\n [environmentId]=\"environmentId\"\n [currentUser]=\"currentUser\"\n [baseFilter]=\"tasksFilter\"\n [activeTaskId]=\"activeTaskId\"\n (openEntityRecord)=\"onOpenEntityRecordFromTasks($event)\">\n </mj-tasks-full-view>\n </div>\n }\n\n <!-- Main Chat Area (only shown when not in Collections or Tasks view) -->\n @if (activeTab !== 'collections' && activeTab !== 'tasks') {\n <div class=\"workspace-main\">\n <mj-conversation-chat-area\n [environmentId]=\"environmentId\"\n [currentUser]=\"currentUser\"\n [conversationId]=\"selectedConversationId\"\n [conversation]=\"selectedConversation\"\n [threadId]=\"selectedThreadId\"\n [isNewConversation]=\"isNewUnsavedConversation\"\n [pendingMessage]=\"pendingMessageToSend\"\n [pendingAttachments]=\"pendingAttachmentsToSend\"\n [pendingMessageConversationId]=\"pendingMessageConversationId\"\n [pendingArtifactId]=\"pendingArtifactId\"\n [pendingArtifactConversationId]=\"pendingArtifactConversationId\"\n [pendingArtifactVersionNumber]=\"pendingArtifactVersionNumber\"\n (conversationRenamed)=\"onConversationRenamed($event)\"\n (openEntityRecord)=\"onOpenEntityRecord($event)\"\n (navigationRequest)=\"onNavigationRequest($event)\"\n (taskClicked)=\"onTaskClicked($event)\"\n (artifactLinkClicked)=\"onArtifactLinkNavigation($event)\"\n (conversationCreated)=\"onConversationCreated($event)\"\n (realtimeConversationReady)=\"onRealtimeConversationReady($event)\"\n (threadOpened)=\"onThreadOpened($event)\"\n (threadClosed)=\"onThreadClosed()\"\n (pendingArtifactConsumed)=\"pendingArtifactId = null; pendingArtifactConversationId = null; pendingArtifactVersionNumber = null\"\n (pendingMessageConsumed)=\"pendingMessageToSend = null; pendingAttachmentsToSend = null; pendingMessageConversationId = null\"\n (pendingMessageRequested)=\"onPendingMessageRequested($event)\">\n </mj-conversation-chat-area>\n </div>\n }\n\n <!-- Right Artifact Panel -->\n @if (isArtifactPanelOpen && activeArtifactId) {\n @if (!isArtifactPanelMaximized) {\n <div class=\"artifact-panel-resize-handle\" (mousedown)=\"onArtifactPanelResizeStart($event)\"></div>\n }\n <div class=\"workspace-artifact-panel\"\n [style.width.%]=\"artifactPanelWidth\"\n [class.maximized]=\"isArtifactPanelMaximized\">\n <mj-artifact-viewer-panel\n [artifactId]=\"activeArtifactId\"\n [currentUser]=\"currentUser\"\n [environmentId]=\"environmentId\"\n [versionNumber]=\"activeVersionNumber ?? undefined\"\n [showSaveToCollection]=\"activeTab !== 'collections'\"\n [viewContext]=\"activeTab === 'collections' ? 'collection' : 'conversation'\"\n [contextCollectionId]=\"collectionState.activeCollectionId ?? undefined\"\n [canShare]=\"canShareActiveArtifact\"\n [canEdit]=\"canEditActiveArtifact\"\n [isMaximized]=\"isArtifactPanelMaximized\"\n (closed)=\"closeArtifactPanel()\"\n (navigateToLink)=\"onArtifactLinkNavigation($event)\"\n (shareRequested)=\"onArtifactShareRequested($event)\"\n (maximizeToggled)=\"toggleMaximizeArtifactPanel()\"\n (applyFormRequested)=\"onApplyFormRequested($event)\">\n </mj-artifact-viewer-panel>\n </div>\n }\n </div>\n }\n\n <!-- Global Search Panel -->\n <mj-search-panel\n [isOpen]=\"isSearchPanelOpen\"\n [environmentId]=\"environmentId\"\n [currentUser]=\"currentUser\"\n (close)=\"closeSearch()\"\n (resultSelected)=\"handleSearchResult($event)\">\n </mj-search-panel>\n\n <!-- Toast Notifications -->\n <mj-toast></mj-toast>\n\n <!-- Artifact Share Modal -->\n <mj-artifact-share-modal\n [isOpen]=\"isArtifactShareModalOpen\"\n [artifact]=\"artifactToShare\"\n [currentUser]=\"currentUser\"\n (saved)=\"onArtifactShared()\"\n (cancelled)=\"onArtifactShareModalClose()\">\n </mj-artifact-share-modal>\n</div>"]}
1
+ {"version":3,"file":"conversation-workspace.component.js","sourceRoot":"","sources":["../../../../src/lib/components/workspace/conversation-workspace.component.ts","../../../../src/lib/components/workspace/conversation-workspace.component.html"],"names":[],"mappings":"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","sourcesContent":["/**\n * ============================================================================\n * DEPRECATED - DO NOT USE\n * ============================================================================\n *\n * This workspace component was used when conversations, collections, and tasks\n * were all combined into a single tabbed interface.\n *\n * The new architecture uses SEPARATE resource components for each feature:\n * - ChatConversationsResource for conversations\n * - CollectionsResource for collections\n * - TasksResource for tasks\n *\n * These resource components are located in @memberjunction/ng-explorer-core\n * and integrate with MJExplorer's tab/navigation system.\n *\n * This file is kept for backwards compatibility only. Any new features or\n * bug fixes should be made to the individual resource components instead.\n * ============================================================================\n */\n\nimport {\n Component,\n Input,\n Output,\n EventEmitter,\n OnInit,\n OnDestroy,\n DoCheck,\n ChangeDetectorRef,\n HostListener\n} from '@angular/core';\nimport { UUIDsEqual } from '@memberjunction/global';\nimport { MJConversationEntity, MJArtifactEntity, MJTaskEntity, ArtifactMetadataEngine, MJUserSettingEntity, UserInfoEngine, ConversationEngine } from '@memberjunction/core-entities';\nimport { UserInfo, CompositeKey, KeyValuePair, Metadata } from '@memberjunction/core';\nimport { BaseAngularComponent } from '@memberjunction/ng-base-types';\nimport { ArtifactStateService } from '../../services/artifact-state.service';\nimport { CollectionStateService } from '../../services/collection-state.service';\nimport { ArtifactPermissionService } from '../../services/artifact-permission.service';\nimport { PendingAttachment } from '@memberjunction/ng-composer';\nimport { MentionAutocompleteService } from '../../services/mention-autocomplete.service';\nimport { ConversationStreamingService } from '../../services/conversation-streaming.service';\nimport { UICommandHandlerService } from '../../services/ui-command-handler.service';\nimport { MJNotificationService } from '@memberjunction/ng-notifications';\nimport { NavigationTab, WorkspaceLayout } from '../../models/conversation-state.model';\nimport { SearchResult } from '../../services/search.service';\nimport { Subject, takeUntil } from 'rxjs';\nimport { AIEngineBase } from '@memberjunction/ai-engine-base';\nimport { ActionableCommand, AutomaticCommand } from '@memberjunction/ai-core-plus';\nimport { NavigationRequest } from '@memberjunction/ng-artifacts';\n\n/**\n * Top-level workspace component for conversations\n * Provides 3-column Slack-style layout: Navigation | Sidebar | Chat Area | Artifact Panel\n * Supports context-based navigation (library or task views)\n *\n * @deprecated Use ChatConversationsResource from @memberjunction/ng-explorer-core instead.\n * This component is maintained for backwards compatibility but the resource-wrapper pattern\n * is the preferred approach for MJExplorer integration.\n */\n@Component({\n standalone: false,\n selector: 'mj-conversation-workspace',\n templateUrl: './conversation-workspace.component.html',\n styleUrls: ['./conversation-workspace.component.css']\n})\nexport class ConversationWorkspaceComponent extends BaseAngularComponent implements OnInit, OnDestroy, DoCheck {\n @Input() EnvironmentId!: string;\n\n /** @deprecated Use {@link EnvironmentId}. */\n @Input() set environmentId(value: string) {\n this.EnvironmentId = value;\n }\n /** @deprecated Use {@link EnvironmentId}. */\n get environmentId(): string {\n return this.EnvironmentId;\n }\n @Input() InitialConversationId?: string;\n\n /** @deprecated Use {@link InitialConversationId}. */\n @Input() set initialConversationId(value: string | undefined) {\n this.InitialConversationId = value;\n }\n /** @deprecated Use {@link InitialConversationId}. */\n get initialConversationId(): string | undefined {\n return this.InitialConversationId;\n }\n @Input() Layout: WorkspaceLayout = 'full';\n\n /** @deprecated Use {@link Layout}. */\n @Input() set layout(value: WorkspaceLayout) {\n this.Layout = value;\n }\n /** @deprecated Use {@link Layout}. */\n get layout(): WorkspaceLayout {\n return this.Layout;\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() ActiveContext?: 'library' | 'task';\n\n /** @deprecated Use {@link ActiveContext}. */\n @Input() set activeContext(value: 'library' | 'task' | undefined) {\n this.ActiveContext = value;\n }\n /** @deprecated Use {@link ActiveContext}. */\n get activeContext(): 'library' | 'task' | undefined {\n return this.ActiveContext;\n }\n @Input() ContextItemId?: string;\n\n /** @deprecated Use {@link ContextItemId}. */\n @Input() set contextItemId(value: string | undefined) {\n this.ContextItemId = value;\n }\n /** @deprecated Use {@link ContextItemId}. */\n get contextItemId(): string | undefined {\n return this.ContextItemId;\n }\n /**\n * Show the Routines section at the very bottom of the left sidebar. Default true;\n * hosts that don't want routines (or embed a reduced chat surface) set false.\n * The section additionally hides itself when the current user lacks Read\n * permission on 'MJ: User Routines'.\n */\n @Input() ShowRoutines: boolean = true;\n\n // Navigation properties for external control (deep linking from URL)\n @Input() set ActiveTabInput(value: 'conversations' | 'collections' | 'tasks' | undefined) {\n if (value && value !== this.ActiveTab) {\n this.ActiveTab = value;\n }\n }\n\n /** @deprecated Use {@link ActiveTabInput}. */\n @Input() set activeTabInput(value: 'conversations' | 'collections' | 'tasks' | undefined) {\n this.ActiveTabInput = value;\n }\n\n @Input() set ActiveConversationInput(value: string | undefined) {\n if (value && value !== this.SelectedConversationId) {\n console.log('🔗 Deep link to conversation:', value);\n this.ActiveTab = 'conversations';\n this.SetActiveConversation(value);\n }\n }\n\n /** @deprecated Use {@link ActiveConversationInput}. */\n @Input() set activeConversationInput(value: string | undefined) {\n this.ActiveConversationInput = value;\n }\n\n @Input() set ActiveCollectionInput(value: string | undefined) {\n if (value && value !== this.CollectionState.activeCollectionId) {\n console.log('🔗 Deep link to collection:', value);\n this.ActiveTab = 'collections';\n this.CollectionState.setActiveCollection(value);\n }\n }\n\n /** @deprecated Use {@link ActiveCollectionInput}. */\n @Input() set activeCollectionInput(value: string | undefined) {\n this.ActiveCollectionInput = value;\n }\n\n @Input() set ActiveVersionIdInput(value: string | undefined) {\n if (value && value !== this.ActiveVersionId) {\n console.log('🔗 Deep link to version:', value);\n this.ActiveTab = 'collections';\n // Store the version ID immediately to prevent ngDoCheck from clearing it\n this.ActiveVersionId = value;\n // Open artifact by version ID\n this.ArtifactState.openArtifactByVersionId(value);\n }\n }\n\n /** @deprecated Use {@link ActiveVersionIdInput}. */\n @Input() set activeVersionIdInput(value: string | undefined) {\n this.ActiveVersionIdInput = value;\n }\n\n @Input() set ActiveTaskInput(value: string | undefined) {\n if (value && value !== this._activeTaskId) {\n this._activeTaskId = value;\n }\n }\n\n /** @deprecated Use {@link ActiveTaskInput}. */\n @Input() set activeTaskInput(value: string | undefined) {\n this.ActiveTaskInput = value;\n }\n\n private _activeTaskId?: string;\n get ActiveTaskId(): string | undefined {\n return this._activeTaskId;\n }\n\n /** @deprecated Use {@link ActiveTaskId}. */\n get activeTaskId(): string | undefined {\n return this.ActiveTaskId;\n }\n\n @Output() ConversationChanged = new EventEmitter<MJConversationEntity>();\n\n /**\n * @deprecated Use {@link ConversationChanged}.\n *\n * The same emitter under the old binding name, so a template still binding\n * (conversationChanged) keeps working. Must stay AFTER ConversationChanged: class fields\n * initialise in order, and the other way round this captures undefined.\n */\n @Output() conversationChanged = this.ConversationChanged;\n @Output() ArtifactOpened = new EventEmitter<MJArtifactEntity>();\n\n /**\n * @deprecated Use {@link ArtifactOpened}.\n *\n * The same emitter under the old binding name, so a template still binding\n * (artifactOpened) keeps working. Must stay AFTER ArtifactOpened: class fields\n * initialise in order, and the other way round this captures undefined.\n */\n @Output() artifactOpened = this.ArtifactOpened;\n @Output() NavigationChanged = new EventEmitter<{\n tab: 'conversations' | 'collections' | 'tasks';\n conversationId?: string;\n collectionId?: string;\n versionId?: string;\n taskId?: string;\n }>();\n\n /**\n * @deprecated Use {@link NavigationChanged}.\n *\n * The same emitter under the old binding name, so a template still binding\n * (navigationChanged) keeps working. Must stay AFTER NavigationChanged: class fields\n * initialise in order, and the other way round this captures undefined.\n */\n @Output() navigationChanged = this.NavigationChanged;\n @Output() NewConversationStarted = new EventEmitter<void>();\n\n /**\n * @deprecated Use {@link NewConversationStarted}.\n *\n * The same emitter under the old binding name, so a template still binding\n * (newConversationStarted) keeps working. Must stay AFTER NewConversationStarted: class fields\n * initialise in order, and the other way round this captures undefined.\n */\n @Output() newConversationStarted = this.NewConversationStarted;\n @Output() ActionableCommandExecuted = new EventEmitter<ActionableCommand>();\n\n /**\n * @deprecated Use {@link ActionableCommandExecuted}.\n *\n * The same emitter under the old binding name, so a template still binding\n * (actionableCommandExecuted) keeps working. Must stay AFTER ActionableCommandExecuted: class fields\n * initialise in order, and the other way round this captures undefined.\n */\n @Output() actionableCommandExecuted = this.ActionableCommandExecuted;\n @Output() AutomaticCommandExecuted = new EventEmitter<AutomaticCommand>();\n\n /**\n * @deprecated Use {@link AutomaticCommandExecuted}.\n *\n * The same emitter under the old binding name, so a template still binding\n * (automaticCommandExecuted) keeps working. Must stay AFTER AutomaticCommandExecuted: class fields\n * initialise in order, and the other way round this captures undefined.\n */\n @Output() automaticCommandExecuted = this.AutomaticCommandExecuted;\n @Output() NavigationRequested = new EventEmitter<NavigationRequest>();\n\n /**\n * @deprecated Use {@link NavigationRequested}.\n *\n * The same emitter under the old binding name, so a template still binding\n * (navigationRequested) keeps working. Must stay AFTER NavigationRequested: class fields\n * initialise in order, and the other way round this captures undefined.\n */\n @Output() navigationRequested = this.NavigationRequested;\n\n public ActiveTab: NavigationTab = 'conversations';\n\n /** @deprecated Use {@link ActiveTab}. */\n public get activeTab(): NavigationTab {\n return this.ActiveTab;\n }\n /** @deprecated Use {@link ActiveTab}. */\n public set activeTab(value: NavigationTab) {\n this.ActiveTab = value;\n }\n public IsSidebarVisible: boolean = true;\n\n /** @deprecated Use {@link IsSidebarVisible}. */\n public get isSidebarVisible(): boolean {\n return this.IsSidebarVisible;\n }\n /** @deprecated Use {@link IsSidebarVisible}. */\n public set isSidebarVisible(value: boolean) {\n this.IsSidebarVisible = value;\n }\n public IsArtifactPanelOpen: boolean = false;\n\n /** @deprecated Use {@link IsArtifactPanelOpen}. */\n public get isArtifactPanelOpen(): boolean {\n return this.IsArtifactPanelOpen;\n }\n /** @deprecated Use {@link IsArtifactPanelOpen}. */\n public set isArtifactPanelOpen(value: boolean) {\n this.IsArtifactPanelOpen = value;\n }\n public IsSearchPanelOpen: boolean = false;\n\n /** @deprecated Use {@link IsSearchPanelOpen}. */\n public get isSearchPanelOpen(): boolean {\n return this.IsSearchPanelOpen;\n }\n /** @deprecated Use {@link IsSearchPanelOpen}. */\n public set isSearchPanelOpen(value: boolean) {\n this.IsSearchPanelOpen = value;\n }\n public IsWorkspaceReady: boolean = false;\n\n /** @deprecated Use {@link IsWorkspaceReady}. */\n public get isWorkspaceReady(): boolean {\n return this.IsWorkspaceReady;\n }\n /** @deprecated Use {@link IsWorkspaceReady}. */\n public set isWorkspaceReady(value: boolean) {\n this.IsWorkspaceReady = value;\n }\n public RenamedConversationId: string | null = null;\n\n /** @deprecated Use {@link RenamedConversationId}. */\n public get renamedConversationId(): string | null {\n return this.RenamedConversationId;\n }\n /** @deprecated Use {@link RenamedConversationId}. */\n public set renamedConversationId(value: string | null) {\n this.RenamedConversationId = value;\n }\n public ActiveArtifactId: string | null = null;\n\n /** @deprecated Use {@link ActiveArtifactId}. */\n public get activeArtifactId(): string | null {\n return this.ActiveArtifactId;\n }\n /** @deprecated Use {@link ActiveArtifactId}. */\n public set activeArtifactId(value: string | null) {\n this.ActiveArtifactId = value;\n }\n public ActiveVersionNumber: number | null = null;\n\n /** @deprecated Use {@link ActiveVersionNumber}. */\n public get activeVersionNumber(): number | null {\n return this.ActiveVersionNumber;\n }\n /** @deprecated Use {@link ActiveVersionNumber}. */\n public set activeVersionNumber(value: number | null) {\n this.ActiveVersionNumber = value;\n }\n public ActiveVersionId: string | null = null;\n\n /** @deprecated Use {@link ActiveVersionId}. */\n public get activeVersionId(): string | null {\n return this.ActiveVersionId;\n }\n /** @deprecated Use {@link ActiveVersionId}. */\n public set activeVersionId(value: string | null) {\n this.ActiveVersionId = value;\n }\n public IsMobileView: boolean = false;\n\n /** @deprecated Use {@link IsMobileView}. */\n public get isMobileView(): boolean {\n return this.IsMobileView;\n }\n /** @deprecated Use {@link IsMobileView}. */\n public set isMobileView(value: boolean) {\n this.IsMobileView = value;\n }\n public IsSidebarPinned: boolean = false;\n\n /** @deprecated Use {@link IsSidebarPinned}. */\n public get isSidebarPinned(): boolean {\n return this.IsSidebarPinned;\n }\n /** @deprecated Use {@link IsSidebarPinned}. */\n public set isSidebarPinned(value: boolean) {\n this.IsSidebarPinned = value;\n } // Default unpinned until settings load (prevents flicker)\n\n // Artifact permissions\n public CanShareActiveArtifact: boolean = false;\n\n /** @deprecated Use {@link CanShareActiveArtifact}. */\n public get canShareActiveArtifact(): boolean {\n return this.CanShareActiveArtifact;\n }\n /** @deprecated Use {@link CanShareActiveArtifact}. */\n public set canShareActiveArtifact(value: boolean) {\n this.CanShareActiveArtifact = value;\n }\n public CanEditActiveArtifact: boolean = false;\n\n /** @deprecated Use {@link CanEditActiveArtifact}. */\n public get canEditActiveArtifact(): boolean {\n return this.CanEditActiveArtifact;\n }\n /** @deprecated Use {@link CanEditActiveArtifact}. */\n public set canEditActiveArtifact(value: boolean) {\n this.CanEditActiveArtifact = value;\n }\n\n // Share modal state\n public IsArtifactShareModalOpen: boolean = false;\n\n /** @deprecated Use {@link IsArtifactShareModalOpen}. */\n public get isArtifactShareModalOpen(): boolean {\n return this.IsArtifactShareModalOpen;\n }\n /** @deprecated Use {@link IsArtifactShareModalOpen}. */\n public set isArtifactShareModalOpen(value: boolean) {\n this.IsArtifactShareModalOpen = value;\n }\n public ArtifactToShare: MJArtifactEntity | null = null;\n\n /** @deprecated Use {@link ArtifactToShare}. */\n public get artifactToShare(): MJArtifactEntity | null {\n return this.ArtifactToShare;\n }\n /** @deprecated Use {@link ArtifactToShare}. */\n public set artifactToShare(value: MJArtifactEntity | null) {\n this.ArtifactToShare = value;\n }\n\n // Resize state - Sidebar\n public SidebarWidth: number = 260;\n\n /** @deprecated Use {@link SidebarWidth}. */\n public get sidebarWidth(): number {\n return this.SidebarWidth;\n }\n /** @deprecated Use {@link SidebarWidth}. */\n public set sidebarWidth(value: number) {\n this.SidebarWidth = value;\n } // Default width\n public IsSidebarCollapsed: boolean = true;\n\n /** @deprecated Use {@link IsSidebarCollapsed}. */\n public get isSidebarCollapsed(): boolean {\n return this.IsSidebarCollapsed;\n }\n /** @deprecated Use {@link IsSidebarCollapsed}. */\n public set isSidebarCollapsed(value: boolean) {\n this.IsSidebarCollapsed = value;\n } // Default collapsed until settings load (prevents flicker)\n public SidebarTransitionsEnabled: boolean = false;\n\n /** @deprecated Use {@link SidebarTransitionsEnabled}. */\n public get sidebarTransitionsEnabled(): boolean {\n return this.SidebarTransitionsEnabled;\n }\n /** @deprecated Use {@link SidebarTransitionsEnabled}. */\n public set sidebarTransitionsEnabled(value: boolean) {\n this.SidebarTransitionsEnabled = value;\n } // Disabled during initial load to prevent jarring animation\n public IsSidebarSettingsLoaded: boolean = false;\n\n /** @deprecated Use {@link IsSidebarSettingsLoaded}. */\n public get isSidebarSettingsLoaded(): boolean {\n return this.IsSidebarSettingsLoaded;\n }\n /** @deprecated Use {@link IsSidebarSettingsLoaded}. */\n public set isSidebarSettingsLoaded(value: boolean) {\n this.IsSidebarSettingsLoaded = value;\n } // Tracks whether settings have been loaded (prevents render before state is known)\n private isSidebarResizing: boolean = false;\n private sidebarResizeStartX: number = 0;\n private sidebarResizeStartWidth: number = 0;\n\n // Resize state - Artifact Panel\n public ArtifactPanelWidth: number = 40;\n\n /** @deprecated Use {@link ArtifactPanelWidth}. */\n public get artifactPanelWidth(): number {\n return this.ArtifactPanelWidth;\n }\n /** @deprecated Use {@link ArtifactPanelWidth}. */\n public set artifactPanelWidth(value: number) {\n this.ArtifactPanelWidth = value;\n } // Default 40% width\n public IsArtifactPanelMaximized: boolean = false;\n\n /** @deprecated Use {@link IsArtifactPanelMaximized}. */\n public get isArtifactPanelMaximized(): boolean {\n return this.IsArtifactPanelMaximized;\n }\n /** @deprecated Use {@link IsArtifactPanelMaximized}. */\n public set isArtifactPanelMaximized(value: boolean) {\n this.IsArtifactPanelMaximized = value;\n }\n private artifactPanelWidthBeforeMaximize: number = 40; // Store width before maximizing\n private isArtifactPanelResizing: boolean = false;\n private artifactPanelResizeStartX: number = 0;\n private artifactPanelResizeStartWidth: number = 0;\n\n private previousConversationId: string | null = null;\n private previousTaskId: string | undefined = undefined;\n private previousVersionId: string | null = null; // Used to track version changes in ngDoCheck\n private previousIsNewConversation: boolean = false; // Track new conversation state changes\n private destroy$ = new Subject<void>();\n\n // Stored bound references so addEventListener and removeEventListener get the same function object.\n private readonly boundOnResizeMove = this.onResizeMove.bind(this);\n private readonly boundOnResizeEnd = this.onResizeEnd.bind(this);\n private readonly boundOnResizeTouchMove = this.onResizeTouchMove.bind(this);\n private readonly boundOnResizeTouchEnd = this.onResizeTouchEnd.bind(this);\n\n // User Settings key for server-side persistence\n private readonly USER_SETTING_SIDEBAR_KEY = 'Conversations.SidebarState';\n private saveSettingsTimeout: ReturnType<typeof setTimeout> | null = null;\n private isLoadingSettings: boolean = false;\n\n // Task filter for conversation-specific filtering\n public TasksFilter: string = '1=1';\n\n /** @deprecated Use {@link TasksFilter}. */\n public get tasksFilter(): string {\n return this.TasksFilter;\n }\n /** @deprecated Use {@link TasksFilter}. */\n public set tasksFilter(value: string) {\n this.TasksFilter = value;\n }\n\n // LOCAL CONVERSATION STATE - enables multiple workspace instances\n // Each workspace manages its own selection state independently\n public SelectedConversationId: string | null = null;\n\n /** @deprecated Use {@link SelectedConversationId}. */\n public get selectedConversationId(): string | null {\n return this.SelectedConversationId;\n }\n /** @deprecated Use {@link SelectedConversationId}. */\n public set selectedConversationId(value: string | null) {\n this.SelectedConversationId = value;\n }\n public SelectedConversation: MJConversationEntity | null = null;\n\n /** @deprecated Use {@link SelectedConversation}. */\n public get selectedConversation(): MJConversationEntity | null {\n return this.SelectedConversation;\n }\n /** @deprecated Use {@link SelectedConversation}. */\n public set selectedConversation(value: MJConversationEntity | null) {\n this.SelectedConversation = value;\n }\n public SelectedThreadId: string | null = null;\n\n /** @deprecated Use {@link SelectedThreadId}. */\n public get selectedThreadId(): string | null {\n return this.SelectedThreadId;\n }\n /** @deprecated Use {@link SelectedThreadId}. */\n public set selectedThreadId(value: string | null) {\n this.SelectedThreadId = value;\n }\n public IsNewUnsavedConversation: boolean = false;\n\n /** @deprecated Use {@link IsNewUnsavedConversation}. */\n public get isNewUnsavedConversation(): boolean {\n return this.IsNewUnsavedConversation;\n }\n /** @deprecated Use {@link IsNewUnsavedConversation}. */\n public set isNewUnsavedConversation(value: boolean) {\n this.IsNewUnsavedConversation = value;\n }\n public PendingMessageToSend: string | null = null;\n\n /** @deprecated Use {@link PendingMessageToSend}. */\n public get pendingMessageToSend(): string | null {\n return this.PendingMessageToSend;\n }\n /** @deprecated Use {@link PendingMessageToSend}. */\n public set pendingMessageToSend(value: string | null) {\n this.PendingMessageToSend = value;\n }\n public PendingAttachmentsToSend: PendingAttachment[] | null = null;\n\n /** @deprecated Use {@link PendingAttachmentsToSend}. */\n public get pendingAttachmentsToSend(): PendingAttachment[] | null {\n return this.PendingAttachmentsToSend;\n }\n /** @deprecated Use {@link PendingAttachmentsToSend}. */\n public set pendingAttachmentsToSend(value: PendingAttachment[] | null) {\n this.PendingAttachmentsToSend = value;\n }\n /** The conversation pendingMessageToSend is destined for — bound to the chat-area so the\n * auto-send reaches only that conversation's input, even if the user swaps conversations\n * during the async send window (prevents the message bleeding into the swapped-to conversation). */\n public PendingMessageConversationId: string | null = null;\n\n /** @deprecated Use {@link PendingMessageConversationId}. */\n public get pendingMessageConversationId(): string | null {\n return this.PendingMessageConversationId;\n }\n /** @deprecated Use {@link PendingMessageConversationId}. */\n public set pendingMessageConversationId(value: string | null) {\n this.PendingMessageConversationId = value;\n }\n public PendingArtifactId: string | null = null;\n\n /** @deprecated Use {@link PendingArtifactId}. */\n public get pendingArtifactId(): string | null {\n return this.PendingArtifactId;\n }\n /** @deprecated Use {@link PendingArtifactId}. */\n public set pendingArtifactId(value: string | null) {\n this.PendingArtifactId = value;\n }\n public PendingArtifactConversationId: string | null = null;\n\n /** @deprecated Use {@link PendingArtifactConversationId}. */\n public get pendingArtifactConversationId(): string | null {\n return this.PendingArtifactConversationId;\n }\n /** @deprecated Use {@link PendingArtifactConversationId}. */\n public set pendingArtifactConversationId(value: string | null) {\n this.PendingArtifactConversationId = value;\n }\n public PendingArtifactVersionNumber: number | null = null;\n\n /** @deprecated Use {@link PendingArtifactVersionNumber}. */\n public get pendingArtifactVersionNumber(): number | null {\n return this.PendingArtifactVersionNumber;\n }\n /** @deprecated Use {@link PendingArtifactVersionNumber}. */\n public set pendingArtifactVersionNumber(value: number | null) {\n this.PendingArtifactVersionNumber = value;\n }\n\n private engine = ConversationEngine.Instance;\n // Shared AI mention/suggestion engine (BaseSingleton — same instance the composer plugins use)\n private mentionAutocompleteService = MentionAutocompleteService.Instance;\n\n constructor(\n public ArtifactState: ArtifactStateService,\n public CollectionState: CollectionStateService,\n private artifactPermissionService: ArtifactPermissionService,\n private notificationService: MJNotificationService,\n private streamingService: ConversationStreamingService,\n private uiCommandHandler: UICommandHandlerService,\n private cdr: ChangeDetectorRef\n ) {\n super();\n }\n\n /** @deprecated Use {@link ArtifactState}. */\n public get artifactState(): ArtifactStateService {\n return this.ArtifactState;\n }\n /** @deprecated Use {@link ArtifactState}. */\n public set artifactState(value: ArtifactStateService) {\n this.ArtifactState = value;\n }\n\n /** @deprecated Use {@link CollectionState}. */\n public get collectionState(): CollectionStateService {\n return this.CollectionState;\n }\n /** @deprecated Use {@link CollectionState}. */\n public set collectionState(value: CollectionStateService) {\n this.CollectionState = value;\n }\n\n // =========================================================================\n // LOCAL CONVERSATION STATE MANAGEMENT\n // These methods manage the workspace's local selection state\n // =========================================================================\n\n /**\n * Sets the active conversation for this workspace instance\n * @param id The conversation ID to activate (or null to clear)\n */\n SetActiveConversation(id: string | null): void {\n console.log('🎯 Setting active conversation:', id);\n this.SelectedConversationId = id;\n this.SelectedConversation = id ? (this.engine.GetConversation(id) ?? null) : null;\n // Clear unsaved state when switching to an existing conversation\n if (id) {\n this.IsNewUnsavedConversation = false;\n }\n }\n\n /** @deprecated Use {@link SetActiveConversation}. */\n setActiveConversation(id: string | null): void {\n return this.SetActiveConversation(id);\n }\n\n /**\n * Initiates a new unsaved conversation (doesn't create DB record yet)\n * This shows the welcome screen and delays DB creation until first message\n */\n StartNewConversation(): void {\n console.log('✨ Starting new unsaved conversation');\n this.SelectedConversationId = null;\n this.SelectedConversation = null;\n this.IsNewUnsavedConversation = true;\n this.PendingMessageToSend = null;\n this.PendingAttachmentsToSend = null;\n this.PendingMessageConversationId = null;\n\n // Auto-collapse if mobile OR if sidebar is not pinned\n if (this.IsMobileView || !this.IsSidebarPinned) {\n this.CollapseSidebar();\n }\n }\n\n /** @deprecated Use {@link StartNewConversation}. */\n startNewConversation(): void {\n return this.StartNewConversation();\n }\n\n /**\n * Clears the new unsaved conversation state\n * Called when the conversation is actually created or cancelled\n */\n ClearNewConversationState(): void {\n this.IsNewUnsavedConversation = false;\n }\n\n /** @deprecated Use {@link ClearNewConversationState}. */\n clearNewConversationState(): void {\n return this.ClearNewConversationState();\n }\n\n /**\n * Opens a thread panel for a specific message\n * @param messageId The parent message ID\n */\n OpenThread(messageId: string): void {\n this.SelectedThreadId = messageId;\n }\n\n /** @deprecated Use {@link OpenThread}. */\n openThread(messageId: string): void {\n return this.OpenThread(messageId);\n }\n\n /**\n * Closes the currently open thread panel\n */\n CloseThread(): void {\n this.SelectedThreadId = null;\n }\n\n /** @deprecated Use {@link CloseThread}. */\n closeThread(): void {\n return this.CloseThread();\n }\n\n /**\n * Handler for conversation selection from sidebar/list\n */\n OnConversationSelected(conversationId: string): void {\n this.SetActiveConversation(conversationId);\n\n // Auto-collapse if mobile OR if sidebar is not pinned\n if (this.IsMobileView || !this.IsSidebarPinned) {\n this.CollapseSidebar();\n }\n }\n\n /** @deprecated Use {@link OnConversationSelected}. */\n onConversationSelected(conversationId: string): void {\n return this.OnConversationSelected(conversationId);\n }\n\n /**\n * Handler for new conversation creation from chat area\n * Now includes pending message and attachments to ensure atomic state update\n */\n /**\n * A realtime session created (and just finished with) a brand-new conversation. The\n * row was created SERVER-side, so it isn't in the engine cache yet — reload the list\n * to fold it in, then select it ONLY when the conversation list is visible (owner\n * spec: the user may have the sidebar hidden; don't yank their context if so —\n * the refreshed cache makes it appear whenever the list is reopened).\n */\n async OnRealtimeConversationReady(event: { conversationId: string; select: boolean }): Promise<void> {\n try {\n await ConversationEngine.Instance.LoadConversations(this.EnvironmentId, this.CurrentUser, true);\n if (event.select && this.IsSidebarVisible) {\n const conversation = ConversationEngine.Instance.Conversations.find(\n c => UUIDsEqual(c.ID, event.conversationId)\n );\n if (conversation) {\n this.SelectedConversationId = conversation.ID;\n this.SelectedConversation = conversation;\n this.IsNewUnsavedConversation = false;\n }\n }\n } catch (error) {\n console.error('onRealtimeConversationReady ERROR:', error);\n }\n }\n\n /** @deprecated Use {@link OnRealtimeConversationReady}. */\n async onRealtimeConversationReady(event: { conversationId: string; select: boolean }): Promise<void> {\n return this.OnRealtimeConversationReady(event);\n }\n\n OnConversationCreated(event: {\n conversation: MJConversationEntity;\n pendingMessage?: string;\n pendingAttachments?: PendingAttachment[];\n }): void {\n try {\n // Set ALL state atomically before Angular change detection runs\n // This ensures the new message-input component receives the pending data\n this.PendingMessageToSend = event.pendingMessage || null;\n this.PendingAttachmentsToSend = event.pendingAttachments || null;\n // Pin the pending message to THIS conversation so a fast conversation-swap can't\n // redirect its auto-send into a different conversation.\n this.PendingMessageConversationId = event.conversation.ID;\n this.SelectedConversationId = event.conversation.ID;\n this.SelectedConversation = event.conversation;\n this.IsNewUnsavedConversation = false;\n // The conversation is already added to ConversationEngine by the chat area\n } catch (error) {\n console.error('onConversationCreated ERROR:', error);\n }\n }\n\n /** @deprecated Use {@link OnConversationCreated}. */\n onConversationCreated(event: {\n conversation: MJConversationEntity;\n pendingMessage?: string;\n pendingAttachments?: PendingAttachment[];\n }): void {\n return this.OnConversationCreated(event);\n }\n\n /**\n * Handler for pending message requested from chat area (empty state)\n * @deprecated Use onConversationCreated with pendingMessage instead\n */\n onPendingMessageRequested(event: {text: string; attachments: PendingAttachment[]}): void {\n this.PendingMessageToSend = event.text;\n this.PendingAttachmentsToSend = event.attachments;\n this.PendingMessageConversationId = this.SelectedConversationId;\n }\n\n /**\n * Handler for thread opened from chat area\n */\n OnThreadOpened(threadId: string): void {\n this.SelectedThreadId = threadId;\n }\n\n /** @deprecated Use {@link OnThreadOpened}. */\n onThreadOpened(threadId: string): void {\n return this.OnThreadOpened(threadId);\n }\n\n /**\n * Handler for thread closed from chat area\n */\n OnThreadClosed(): void {\n this.SelectedThreadId = null;\n }\n\n /** @deprecated Use {@link OnThreadClosed}. */\n onThreadClosed(): void {\n return this.OnThreadClosed();\n }\n\n async ngOnInit() {\n // Bind provider-aware services to this component's provider so multi-server\n // browser apps don't silently fall back to the global Metadata.Provider.\n // ArtifactStateService cascades to ArtifactPermissionService and CollectionPermissionService.\n this.ArtifactState.Provider = this.ProviderToUse;\n this.artifactPermissionService.Provider = this.ProviderToUse;\n\n // Initialize global streaming service FIRST\n // This establishes the single PubSub connection for all conversations\n this.streamingService.initialize();\n console.log('✅ Global streaming service initialized');\n\n // Subscribe to command events from UI Command Handler service\n // These will be bubbled up to the host application\n this.uiCommandHandler.actionableCommandRequested\n .pipe(takeUntil(this.destroy$))\n .subscribe(request => {\n this.OnActionableCommand(request.command);\n });\n\n this.uiCommandHandler.automaticCommandRequested\n .pipe(takeUntil(this.destroy$))\n .subscribe(command => {\n this.OnAutomaticCommand(command);\n });\n\n // Check initial mobile state FIRST\n this.checkMobileView();\n\n // Load sidebar state - but on mobile, always default to collapsed\n if (this.IsMobileView) {\n this.IsSidebarCollapsed = true;\n this.IsSidebarVisible = false;\n this.IsSidebarSettingsLoaded = true; // Mobile doesn't need to load settings\n // Enable transitions after a brief delay to ensure initial state is applied\n setTimeout(() => {\n this.SidebarTransitionsEnabled = true;\n }, 50);\n } else {\n // Load from User Settings (async) - await before continuing to prevent flicker\n await this.loadSidebarState();\n this.cdr.detectChanges();\n // Enable transitions after state is loaded and applied\n setTimeout(() => {\n this.SidebarTransitionsEnabled = true;\n }, 50);\n }\n\n // Setup resize listeners\n window.addEventListener('mousemove', this.boundOnResizeMove);\n window.addEventListener('mouseup', this.boundOnResizeEnd);\n\n // Setup touch listeners for mobile\n window.addEventListener('touchmove', this.boundOnResizeTouchMove);\n window.addEventListener('touchend', this.boundOnResizeTouchEnd);\n\n // CRITICAL: Initialize engines FIRST before rendering any UI\n // The isWorkspaceReady flag blocks all child components from rendering\n // until engines are fully loaded and ready\n try {\n // Load both engines in parallel - ArtifactMetadataEngine is lightweight (just artifact types)\n // Using Promise.all ensures optimal performance with no additional delay\n await Promise.all([\n AIEngineBase.Instance.Config(false),\n ArtifactMetadataEngine.Instance.Config(false)\n ]);\n\n console.log('✅ AI Engine initialized with', AIEngineBase.Instance.Agents?.length || 0, 'agents');\n console.log('✅ Artifact Metadata Engine initialized with',\n ArtifactMetadataEngine.Instance.ArtifactTypes?.length || 0, 'artifact types');\n\n // Initialize mention autocomplete service immediately after AI engine\n // This ensures the cache is built from the fully-loaded agent list\n await this.mentionAutocompleteService.initialize(this.CurrentUser);\n console.log('✅ Mention autocomplete initialized');\n\n // Mark workspace as ready - this allows UI to render\n this.IsWorkspaceReady = true;\n this.cdr.detectChanges();\n } catch (error) {\n console.error('❌ Failed to initialize engines:', error);\n // Still mark as ready so UI isn't blocked forever\n this.IsWorkspaceReady = true;\n this.cdr.detectChanges();\n }\n\n // Subscribe to artifact panel state\n this.ArtifactState.isPanelOpen$\n .pipe(takeUntil(this.destroy$))\n .subscribe(isOpen => {\n this.IsArtifactPanelOpen = isOpen;\n });\n\n // Subscribe to active artifact ID\n this.ArtifactState.activeArtifactId$\n .pipe(takeUntil(this.destroy$))\n .subscribe(async id => {\n this.ActiveArtifactId = id;\n // Load permissions when artifact changes\n if (id) {\n await this.loadArtifactPermissions(id);\n } else {\n this.CanShareActiveArtifact = false;\n this.CanEditActiveArtifact = false;\n }\n });\n\n // Subscribe to active version number\n this.ArtifactState.activeVersionNumber$\n .pipe(takeUntil(this.destroy$))\n .subscribe(versionNumber => {\n this.ActiveVersionNumber = versionNumber;\n });\n\n // Set initial conversation if provided\n if (this.InitialConversationId) {\n this.SetActiveConversation(this.InitialConversationId);\n }\n\n // Handle context-based navigation\n if (this.ActiveContext === 'library') {\n this.ActiveTab = 'collections';\n }\n // Task context will be handled by chat header dropdown, not navigation tabs\n\n // Build task filter for conversations domain\n this.buildTasksFilter();\n }\n\n /**\n * Builds the SQL filter for tasks in conversations the user has access to\n */\n private buildTasksFilter(): void {\n // Filter tasks by conversations the user owns or is a participant in, or tasks owned\n // by the user\n const md = this.ProviderToUse;\n const cd = md.EntityByName('MJ: Conversation Details');\n const c = md.EntityByName('MJ: Conversations');\n if (!cd || !c) {\n console.warn('⚠️ Missing metadata for Conversations or Conversation Details');\n this.TasksFilter = `ParentID IS NULL AND UserID = '${this.CurrentUser.ID}'`; // Fallback to user-owned tasks only\n return;\n }\n\n this.TasksFilter = `ParentID IS NULL AND (UserID = '${this.CurrentUser.ID}' OR ConversationDetailID IN (\n SELECT ID FROM [${cd.SchemaName}].[${cd.BaseView}] \n WHERE \n UserID ='${this.CurrentUser.ID}' OR \n ConversationID IN (\n SELECT ID FROM [${c.SchemaName}].[${c.BaseView}] WHERE UserID='${this.CurrentUser.ID}'\n )\n ))`;\n console.log('📝 Conversations domain tasks filter built:', this.TasksFilter);\n }\n\n ngDoCheck() {\n // Detect new unsaved conversation state changes\n const currentIsNewConversation = this.IsNewUnsavedConversation;\n if (currentIsNewConversation !== this.previousIsNewConversation) {\n this.previousIsNewConversation = currentIsNewConversation;\n if (currentIsNewConversation) {\n // Emit event to clear URL conversation parameter\n Promise.resolve().then(() => {\n this.NewConversationStarted.emit();\n });\n }\n }\n\n // Detect conversation changes and emit event\n const currentId = this.SelectedConversationId;\n if (currentId !== this.previousConversationId) {\n this.previousConversationId = currentId;\n const conversation = this.SelectedConversation;\n if (conversation) {\n this.ConversationChanged.emit(conversation);\n\n // Also emit navigationChanged for URL updates (only if on conversations tab)\n if (this.ActiveTab === 'conversations' && currentId) {\n // Defer emission until after change detection completes\n Promise.resolve().then(() => {\n this.NavigationChanged.emit({\n tab: 'conversations',\n conversationId: currentId\n });\n });\n }\n }\n }\n\n // Detect task selection changes (when on tasks tab)\n if (this.ActiveTab === 'tasks') {\n const currentTaskId = this.ActiveTaskId;\n if (currentTaskId !== this.previousTaskId) {\n this.previousTaskId = currentTaskId;\n if (currentTaskId) {\n // Defer emission until after change detection completes\n Promise.resolve().then(() => {\n this.NavigationChanged.emit({\n tab: 'tasks',\n taskId: currentTaskId\n });\n });\n }\n }\n }\n\n // Version changes are handled by onCollectionNavigated and deep link inputs\n // We don't need ngDoCheck to track them as it causes double navigation events\n }\n\n ngOnDestroy() {\n this.destroy$.next();\n this.destroy$.complete();\n\n // Clear any pending save timeout\n if (this.saveSettingsTimeout) {\n clearTimeout(this.saveSettingsTimeout);\n }\n\n // Remove resize listeners\n window.removeEventListener('mousemove', this.boundOnResizeMove);\n window.removeEventListener('mouseup', this.boundOnResizeEnd);\n window.removeEventListener('touchmove', this.boundOnResizeTouchMove);\n window.removeEventListener('touchend', this.boundOnResizeTouchEnd);\n }\n\n @HostListener('window:resize')\n onWindowResize(): void {\n this.checkMobileView();\n }\n\n /**\n * Handle clicks outside the sidebar to auto-collapse when unpinned\n */\n @HostListener('document:click', ['$event'])\n onDocumentClick(event: MouseEvent): void {\n // Only handle when sidebar is expanded but unpinned\n if (this.IsSidebarCollapsed || this.IsSidebarPinned) {\n return;\n }\n\n // Check if click is outside the sidebar\n const target = event.target as HTMLElement;\n const sidebarElement = target.closest('.workspace-sidebar');\n const expandHandle = target.closest('.sidebar-expand-handle');\n\n // If click is outside sidebar and expand handle, collapse it\n if (!sidebarElement && !expandHandle) {\n this.CollapseSidebar();\n }\n }\n\n private checkMobileView(): void {\n const wasMobile = this.IsMobileView;\n this.IsMobileView = window.innerWidth < 768;\n\n if (this.IsMobileView && !wasMobile) {\n // Switched to mobile - hide sidebar and default to collapsed\n this.IsSidebarVisible = false;\n this.IsSidebarCollapsed = true;\n } else if (!this.IsMobileView && wasMobile) {\n // Switched to desktop - show sidebar, restore state from User Settings\n this.IsSidebarVisible = true;\n this.loadSidebarState().then(() => {\n this.cdr.detectChanges();\n });\n }\n }\n\n /**\n * Collapse sidebar\n */\n CollapseSidebar(): void {\n this.IsSidebarCollapsed = true;\n if (this.IsMobileView) {\n this.IsSidebarVisible = false;\n }\n }\n\n /** @deprecated Use {@link CollapseSidebar}. */\n collapseSidebar(): void {\n return this.CollapseSidebar();\n }\n\n /**\n * Expand sidebar (unpinned - will auto-collapse on selection)\n */\n ExpandSidebar(): void {\n this.IsSidebarCollapsed = false;\n this.IsSidebarPinned = false;\n }\n\n /** @deprecated Use {@link ExpandSidebar}. */\n expandSidebar(): void {\n return this.ExpandSidebar();\n }\n\n /**\n * Pin sidebar - keep it open after selection\n */\n PinSidebar(): void {\n this.IsSidebarPinned = true;\n this.saveSidebarState();\n }\n\n /** @deprecated Use {@link PinSidebar}. */\n pinSidebar(): void {\n return this.PinSidebar();\n }\n\n /**\n * Unpin sidebar - will auto-collapse on next selection\n */\n UnpinSidebar(): void {\n this.IsSidebarPinned = false;\n this.CollapseSidebar();\n this.saveSidebarState();\n }\n\n /** @deprecated Use {@link UnpinSidebar}. */\n unpinSidebar(): void {\n return this.UnpinSidebar();\n }\n\n /**\n * Save sidebar state to User Settings (server)\n * Uses debouncing to avoid excessive database writes\n */\n private saveSidebarState(): void {\n // Debounce the server save to avoid excessive writes\n if (this.saveSettingsTimeout) {\n clearTimeout(this.saveSettingsTimeout);\n }\n this.saveSettingsTimeout = setTimeout(() => {\n this.saveSidebarStateToServer();\n }, 1000); // 1 second debounce\n }\n\n /**\n * Save sidebar state to User Settings entity on server using UserInfoEngine for cached lookup\n * Includes collapsed, pinned, sidebarWidth, and artifactPanelWidth\n */\n private async saveSidebarStateToServer(): Promise<void> {\n try {\n const userId = this.CurrentUser?.ID;\n if (!userId) {\n return;\n }\n\n const stateToSave = {\n collapsed: this.IsSidebarCollapsed,\n pinned: this.IsSidebarPinned,\n sidebarWidth: this.SidebarWidth,\n artifactPanelWidth: this.ArtifactPanelWidth\n };\n\n const engine = UserInfoEngine.Instance;\n const md = this.ProviderToUse;\n\n // Find existing setting from cached user settings\n let setting = engine.UserSettings.find(s => s.Setting === this.USER_SETTING_SIDEBAR_KEY);\n\n if (!setting) {\n // Create new setting\n setting = await md.GetEntityObject<MJUserSettingEntity>('MJ: User Settings');\n setting.UserID = userId;\n setting.Setting = this.USER_SETTING_SIDEBAR_KEY;\n }\n\n setting.Value = JSON.stringify(stateToSave);\n await setting.Save();\n } catch (error) {\n console.warn('Failed to save sidebar state to User Settings:', error);\n }\n }\n\n /**\n * Load sidebar state from User Settings (server) using UserInfoEngine\n * Includes collapsed, pinned, sidebarWidth, and artifactPanelWidth\n * For new users with no saved state, defaults to collapsed with new conversation\n */\n private async loadSidebarState(): Promise<void> {\n this.isLoadingSettings = true;\n\n try {\n const userId = this.CurrentUser?.ID;\n if (userId) {\n // Try loading from cached User Settings\n const engine = UserInfoEngine.Instance;\n const setting = engine.UserSettings.find(s => s.Setting === this.USER_SETTING_SIDEBAR_KEY);\n\n if (setting?.Value) {\n const state = JSON.parse(setting.Value);\n this.IsSidebarCollapsed = state.collapsed ?? true;\n this.IsSidebarPinned = state.pinned ?? false;\n\n // Load width values if present (with validation)\n if (typeof state.sidebarWidth === 'number' && state.sidebarWidth >= 200 && state.sidebarWidth <= 500) {\n this.SidebarWidth = state.sidebarWidth;\n }\n if (typeof state.artifactPanelWidth === 'number' && state.artifactPanelWidth >= 20 && state.artifactPanelWidth <= 70) {\n this.ArtifactPanelWidth = state.artifactPanelWidth;\n }\n\n this.isLoadingSettings = false;\n return;\n }\n }\n\n // No saved state found - NEW USER DEFAULT:\n // Start with sidebar collapsed and show new conversation screen\n this.IsSidebarCollapsed = true;\n this.IsSidebarPinned = false;\n this.IsNewUnsavedConversation = true;\n } catch (error) {\n console.warn('Failed to load sidebar state:', error);\n // Default to collapsed for new users on error\n this.IsSidebarCollapsed = true;\n this.IsSidebarPinned = false;\n } finally {\n this.isLoadingSettings = false;\n this.IsSidebarSettingsLoaded = true;\n }\n }\n\n OnTabChanged(tab: NavigationTab): void {\n const wasOnDifferentTab = this.ActiveTab !== tab;\n this.ActiveTab = tab;\n\n // Emit navigation change event with current state\n const navEvent: any = {\n tab: tab as 'conversations' | 'collections' | 'tasks'\n };\n\n if (tab === 'conversations') {\n navEvent.conversationId = this.SelectedConversationId || undefined;\n } else if (tab === 'collections') {\n // If switching TO collections tab from another tab, clear to root level\n if (wasOnDifferentTab) {\n this.CollectionState.setActiveCollection(null);\n this.ActiveVersionId = null;\n // Don't include collectionId or versionId - go to root\n } else {\n // Already on collections tab, preserve current state\n if (this.CollectionState.activeCollectionId) {\n navEvent.collectionId = this.CollectionState.activeCollectionId;\n }\n if (this.ActiveVersionId && this.CollectionState.activeCollectionId) {\n navEvent.versionId = this.ActiveVersionId;\n }\n }\n } else if (tab === 'tasks') {\n navEvent.taskId = this.ActiveTaskId || undefined;\n }\n\n this.NavigationChanged.emit(navEvent);\n\n // Auto-close artifact panel when switching away from collections\n if (tab === 'conversations' || tab === 'tasks') {\n this.ArtifactState.closeArtifact();\n }\n }\n\n /** @deprecated Use {@link OnTabChanged}. */\n onTabChanged(tab: NavigationTab): void {\n return this.OnTabChanged(tab);\n }\n\n ToggleSidebar(): void {\n this.IsSidebarVisible = !this.IsSidebarVisible;\n }\n\n /** @deprecated Use {@link ToggleSidebar}. */\n toggleSidebar(): void {\n return this.ToggleSidebar();\n }\n\n CloseSidebar(): void {\n if (this.IsMobileView && this.IsSidebarVisible) {\n this.IsSidebarVisible = false;\n }\n }\n\n /** @deprecated Use {@link CloseSidebar}. */\n closeSidebar(): void {\n return this.CloseSidebar();\n }\n\n CloseArtifactPanel(): void {\n this.ArtifactState.closeArtifact();\n }\n\n /** @deprecated Use {@link CloseArtifactPanel}. */\n closeArtifactPanel(): void {\n return this.CloseArtifactPanel();\n }\n\n OpenSearch(): void {\n this.IsSearchPanelOpen = true;\n }\n\n /** @deprecated Use {@link OpenSearch}. */\n openSearch(): void {\n return this.OpenSearch();\n }\n\n CloseSearch(): void {\n this.IsSearchPanelOpen = false;\n }\n\n /** @deprecated Use {@link CloseSearch}. */\n closeSearch(): void {\n return this.CloseSearch();\n }\n\n async OnRefreshAgentCache(): Promise<void> {\n try {\n await AIEngineBase.Instance.Config(true);\n\n // Refresh the mention autocomplete service to pick up new agents\n await this.mentionAutocompleteService.refresh(this.CurrentUser);\n\n const agentCount = AIEngineBase.Instance.Agents?.length || 0;\n this.notificationService.CreateSimpleNotification(`Agent cache refreshed (${agentCount} agents)`, 'success', 3000);\n this.cdr.detectChanges();\n } catch (error) {\n this.notificationService.CreateSimpleNotification('Failed to refresh agent cache', 'error', 3000);\n console.error('Failed to refresh AI Engine:', error);\n }\n }\n\n /** @deprecated Use {@link OnRefreshAgentCache}. */\n async onRefreshAgentCache(): Promise<void> {\n return this.OnRefreshAgentCache();\n }\n\n HandleSearchResult(result: SearchResult): void {\n console.log('🔍 Navigating to search result:', result);\n\n switch (result.type) {\n case 'conversation':\n // Switch to conversations tab and select conversation\n this.ActiveTab = 'conversations';\n this.SetActiveConversation(result.id);\n this.NavigationChanged.emit({\n tab: 'conversations',\n conversationId: result.id\n });\n break;\n\n case 'message':\n // Switch to conversations tab, open conversation, and scroll to message (future enhancement)\n this.ActiveTab = 'conversations';\n if (result.conversationId) {\n this.SetActiveConversation(result.conversationId);\n this.NavigationChanged.emit({\n tab: 'conversations',\n conversationId: result.conversationId\n // TODO: Add messageId for scroll-to support in future\n });\n }\n break;\n\n case 'artifact':\n // Switch to collections tab and open artifact\n this.ActiveTab = 'collections';\n this.ArtifactState.openArtifact(result.id);\n\n // If artifact is in a collection, navigate to that collection\n const collectionId = result.collectionId || undefined;\n\n // Search results don't have version ID, so just navigate to collection\n // The artifact will open with latest version\n this.NavigationChanged.emit({\n tab: 'collections',\n collectionId\n });\n break;\n\n case 'collection':\n // Switch to collections tab and navigate to collection\n this.ActiveTab = 'collections';\n this.CollectionState.setActiveCollection(result.id);\n\n this.NavigationChanged.emit({\n tab: 'collections',\n collectionId: result.id\n });\n break;\n\n case 'task':\n // Switch to tasks tab and select task\n this.ActiveTab = 'tasks';\n this._activeTaskId = result.id;\n this.NavigationChanged.emit({\n tab: 'tasks',\n taskId: result.id\n });\n break;\n }\n\n // Close search panel after navigation\n this.CloseSearch();\n }\n\n /** @deprecated Use {@link HandleSearchResult}. */\n handleSearchResult(result: SearchResult): void {\n return this.HandleSearchResult(result);\n }\n\n /**\n * Sidebar resize methods\n */\n OnSidebarResizeStart(event: MouseEvent): void {\n this.isSidebarResizing = true;\n this.sidebarResizeStartX = event.clientX;\n this.sidebarResizeStartWidth = this.SidebarWidth;\n event.preventDefault();\n document.body.style.cursor = 'col-resize';\n document.body.style.userSelect = 'none';\n }\n\n /** @deprecated Use {@link OnSidebarResizeStart}. */\n onSidebarResizeStart(event: MouseEvent): void {\n return this.OnSidebarResizeStart(event);\n }\n\n /**\n * Artifact panel resize methods\n */\n OnArtifactPanelResizeStart(event: MouseEvent): void {\n this.isArtifactPanelResizing = true;\n this.artifactPanelResizeStartX = event.clientX;\n this.artifactPanelResizeStartWidth = this.ArtifactPanelWidth;\n event.preventDefault();\n document.body.style.cursor = 'col-resize';\n document.body.style.userSelect = 'none';\n }\n\n /** @deprecated Use {@link OnArtifactPanelResizeStart}. */\n onArtifactPanelResizeStart(event: MouseEvent): void {\n return this.OnArtifactPanelResizeStart(event);\n }\n\n private onResizeMove(event: MouseEvent): void {\n if (this.isSidebarResizing) {\n const deltaX = event.clientX - this.sidebarResizeStartX;\n let newWidth = this.sidebarResizeStartWidth + deltaX;\n\n // Constrain between 200px and 500px\n newWidth = Math.max(200, Math.min(500, newWidth));\n this.SidebarWidth = newWidth;\n } else if (this.isArtifactPanelResizing) {\n const container = document.querySelector('.workspace-content') as HTMLElement;\n if (!container) return;\n\n const containerWidth = container.offsetWidth;\n const deltaX = event.clientX - this.artifactPanelResizeStartX;\n const deltaPercent = (deltaX / containerWidth) * -100; // Negative because we're pulling from the right\n let newWidth = this.artifactPanelResizeStartWidth + deltaPercent;\n\n // Constrain between 20% and 70%\n newWidth = Math.max(20, Math.min(70, newWidth));\n this.ArtifactPanelWidth = newWidth;\n }\n }\n\n private onResizeEnd(event: MouseEvent): void {\n if (this.isSidebarResizing) {\n this.isSidebarResizing = false;\n document.body.style.cursor = '';\n document.body.style.userSelect = '';\n this.saveSidebarState(); // Save width to User Settings\n } else if (this.isArtifactPanelResizing) {\n this.isArtifactPanelResizing = false;\n document.body.style.cursor = '';\n document.body.style.userSelect = '';\n this.saveSidebarState(); // Save width to User Settings\n }\n }\n\n /**\n * Touch event handlers for mobile resize support\n */\n OnSidebarResizeTouchStart(event: TouchEvent): void {\n this.isSidebarResizing = true;\n const touch = event.touches[0];\n this.sidebarResizeStartX = touch.clientX;\n this.sidebarResizeStartWidth = this.SidebarWidth;\n event.preventDefault();\n }\n\n /** @deprecated Use {@link OnSidebarResizeTouchStart}. */\n onSidebarResizeTouchStart(event: TouchEvent): void {\n return this.OnSidebarResizeTouchStart(event);\n }\n\n OnArtifactPanelResizeTouchStart(event: TouchEvent): void {\n this.isArtifactPanelResizing = true;\n const touch = event.touches[0];\n this.artifactPanelResizeStartX = touch.clientX;\n this.artifactPanelResizeStartWidth = this.ArtifactPanelWidth;\n event.preventDefault();\n }\n\n /** @deprecated Use {@link OnArtifactPanelResizeTouchStart}. */\n onArtifactPanelResizeTouchStart(event: TouchEvent): void {\n return this.OnArtifactPanelResizeTouchStart(event);\n }\n\n private onResizeTouchMove(event: TouchEvent): void {\n if (this.isSidebarResizing) {\n const touch = event.touches[0];\n const deltaX = touch.clientX - this.sidebarResizeStartX;\n let newWidth = this.sidebarResizeStartWidth + deltaX;\n\n newWidth = Math.max(200, Math.min(500, newWidth));\n this.SidebarWidth = newWidth;\n } else if (this.isArtifactPanelResizing) {\n const container = document.querySelector('.workspace-content') as HTMLElement;\n if (!container) return;\n\n const touch = event.touches[0];\n const containerWidth = container.offsetWidth;\n const deltaX = touch.clientX - this.artifactPanelResizeStartX;\n const deltaPercent = (deltaX / containerWidth) * -100;\n let newWidth = this.artifactPanelResizeStartWidth + deltaPercent;\n\n newWidth = Math.max(20, Math.min(70, newWidth));\n this.ArtifactPanelWidth = newWidth;\n }\n }\n\n private onResizeTouchEnd(event: TouchEvent): void {\n if (this.isSidebarResizing) {\n this.isSidebarResizing = false;\n this.saveSidebarState(); // Save width to User Settings\n } else if (this.isArtifactPanelResizing) {\n this.isArtifactPanelResizing = false;\n this.saveSidebarState(); // Save width to User Settings\n }\n }\n\n /**\n * Toggle maximize/restore state for artifact panel\n */\n /**\n * Apply-to-my-form handler. This deprecated workspace component is no\n * longer the live chat surface — the real handler lives on\n * ConversationChatAreaComponent. This stub exists only so the template\n * binding compiles. New consumers should use the resource components in\n * @memberjunction/ng-explorer-core instead of this workspace.\n */\n OnApplyFormRequested(_event: { spec: unknown; entityName: string }): void {\n console.warn('Workspace.onApplyFormRequested: workspace is deprecated; use the per-feature resource components instead.');\n }\n\n /** @deprecated Use {@link OnApplyFormRequested}. */\n onApplyFormRequested(_event: { spec: unknown; entityName: string }): void {\n return this.OnApplyFormRequested(_event);\n }\n\n ToggleMaximizeArtifactPanel(): void {\n if (this.IsArtifactPanelMaximized) {\n // Restore to previous width\n this.ArtifactPanelWidth = this.artifactPanelWidthBeforeMaximize;\n this.IsArtifactPanelMaximized = false;\n } else {\n // Maximize - store current width and set to 100%\n this.artifactPanelWidthBeforeMaximize = this.ArtifactPanelWidth;\n this.ArtifactPanelWidth = 100;\n this.IsArtifactPanelMaximized = true;\n }\n }\n\n /** @deprecated Use {@link ToggleMaximizeArtifactPanel}. */\n toggleMaximizeArtifactPanel(): void {\n return this.ToggleMaximizeArtifactPanel();\n }\n\n OnConversationRenamed(event: {conversationId: string; name: string; description: string}): void {\n console.log('✨ Workspace received rename event:', event);\n // Trigger animation in sidebar by setting the ID\n this.RenamedConversationId = event.conversationId;\n\n // Clear after animation completes (1500ms)\n setTimeout(() => {\n this.RenamedConversationId = null;\n }, 1500);\n }\n\n /** @deprecated Use {@link OnConversationRenamed}. */\n onConversationRenamed(event: {conversationId: string; name: string; description: string}): void {\n return this.OnConversationRenamed(event);\n }\n\n OnOpenEntityRecord(event: {entityName: string; compositeKey: CompositeKey}): void {\n const pairs = event.compositeKey.KeyValuePairs || [];\n const keys: Record<string, string | number> = {};\n for (const p of pairs) {\n if (p.FieldName) keys[p.FieldName] = p.Value;\n }\n const command: ActionableCommand = {\n type: 'open:resource',\n label: `Open ${event.entityName}`,\n resourceType: 'Record',\n entityName: event.entityName,\n resourceId: event.compositeKey.GetValueByFieldName('ID') ?? pairs[0]?.Value,\n keys,\n mode: 'view'\n };\n this.ActionableCommandExecuted.emit(command);\n }\n\n /** @deprecated Use {@link OnOpenEntityRecord}. */\n onOpenEntityRecord(event: {entityName: string; compositeKey: CompositeKey}): void {\n return this.OnOpenEntityRecord(event);\n }\n\n OnNavigationRequest(event: NavigationRequest): void {\n this.NavigationRequested.emit(event);\n }\n\n /** @deprecated Use {@link OnNavigationRequest}. */\n onNavigationRequest(event: NavigationRequest): void {\n return this.OnNavigationRequest(event);\n }\n\n OnOpenEntityRecordFromTasks(event: {entityName: string; recordId: string}): void {\n // Convert to actionable command and emit\n const command: ActionableCommand = {\n type: 'open:resource',\n label: `Open ${event.entityName}`,\n resourceType: 'Record',\n entityName: event.entityName,\n resourceId: event.recordId,\n mode: 'view'\n };\n this.ActionableCommandExecuted.emit(command);\n }\n\n /** @deprecated Use {@link OnOpenEntityRecordFromTasks}. */\n onOpenEntityRecordFromTasks(event: {entityName: string; recordId: string}): void {\n return this.OnOpenEntityRecordFromTasks(event);\n }\n\n OnTaskClicked(task: MJTaskEntity): void {\n // Switch to Tasks tab and set active task ID\n this.ActiveTab = 'tasks';\n this._activeTaskId = task.ID;\n\n // Emit navigation change\n this.NavigationChanged.emit({\n tab: 'tasks',\n taskId: task.ID\n });\n }\n\n /** @deprecated Use {@link OnTaskClicked}. */\n onTaskClicked(task: MJTaskEntity): void {\n return this.OnTaskClicked(task);\n }\n\n /**\n * Handle collection navigation events\n */\n OnCollectionNavigated(event: { collectionId: string | null; versionId?: string | null }): void {\n console.log('📁 Collection navigated:', event);\n\n // Store the version ID for URL sync\n // CRITICAL: Only update activeVersionId if versionId was explicitly provided in the event\n // If versionId is undefined (not provided), keep the current activeVersionId\n if (event.versionId !== undefined) {\n this.ActiveVersionId = event.versionId;\n }\n // Otherwise: versionId not provided in event, preserve current activeVersionId\n\n // IMPORTANT: Don't emit navigationChanged here when doing programmatic navigation (deep linking)\n // The artifact state is managed separately\n // Only emit if the event explicitly includes a versionId, or if we're intentionally closing the artifact\n if (event.versionId !== undefined) {\n // Event explicitly specifies artifact state (user clicked artifact or intentionally closed it)\n this.NavigationChanged.emit({\n tab: 'collections',\n collectionId: event.collectionId || undefined,\n versionId: event.versionId || undefined\n });\n } else if (!this.ActiveVersionId) {\n // No artifact currently open, safe to emit collection-only navigation\n this.NavigationChanged.emit({\n tab: 'collections',\n collectionId: event.collectionId || undefined\n });\n }\n // Otherwise: artifact is open but event doesn't specify versionId\n // Don't emit - preserve current URL state with artifact\n }\n\n /** @deprecated Use {@link OnCollectionNavigated}. */\n onCollectionNavigated(event: { collectionId: string | null; versionId?: string | null }): void {\n return this.OnCollectionNavigated(event);\n }\n\n /**\n * Handle navigation from artifact links\n */\n OnArtifactLinkNavigation(event: {type: 'conversation' | 'collection'; id: string; artifactId?: string; versionNumber?: number; versionId?: string}): void {\n console.log('🔗 Navigating from artifact link:', event);\n\n if (event.type === 'conversation') {\n this.ActiveTab = 'conversations';\n\n // Close collection artifact viewer if it's open\n this.ArtifactState.closeArtifact();\n\n // Store pending artifact info so chat area can show it and scroll to message\n if (event.artifactId) {\n this.PendingArtifactId = event.artifactId;\n this.PendingArtifactConversationId = event.id;\n this.PendingArtifactVersionNumber = event.versionNumber || null;\n console.log('📦 Pending artifact set:', event.artifactId, 'v' + event.versionNumber);\n }\n\n this.SetActiveConversation(event.id);\n\n this.NavigationChanged.emit({\n tab: 'conversations',\n conversationId: event.id\n });\n } else if (event.type === 'collection') {\n this.ActiveTab = 'collections';\n this.CollectionState.setActiveCollection(event.id);\n\n // Open the artifact automatically when navigating to the collection\n if (event.artifactId) {\n this.ArtifactState.openArtifact(event.artifactId, event.versionNumber);\n }\n\n // Store version ID for URL sync (same as viewArtifact does)\n if (event.versionId) {\n this.ActiveVersionId = event.versionId;\n }\n\n // Emit navigation with version ID so URL includes it\n this.NavigationChanged.emit({\n tab: 'collections',\n collectionId: event.id,\n versionId: event.versionId\n });\n }\n }\n\n /** @deprecated Use {@link OnArtifactLinkNavigation}. */\n onArtifactLinkNavigation(event: {type: 'conversation' | 'collection'; id: string; artifactId?: string; versionNumber?: number; versionId?: string}): void {\n return this.OnArtifactLinkNavigation(event);\n }\n\n /**\n * Load permissions for the given artifact\n */\n private async loadArtifactPermissions(artifactId: string): Promise<void> {\n // Guard against null/undefined\n if (!artifactId) {\n this.CanShareActiveArtifact = false;\n this.CanEditActiveArtifact = false;\n return;\n }\n\n try {\n const permissions = await this.artifactPermissionService.getUserPermissions(artifactId, this.CurrentUser);\n this.CanShareActiveArtifact = permissions.canShare;\n this.CanEditActiveArtifact = permissions.canEdit;\n } catch (error) {\n console.error('Failed to load artifact permissions:', error);\n this.CanShareActiveArtifact = false;\n this.CanEditActiveArtifact = false;\n }\n }\n\n /**\n * Handle share request from artifact viewer\n */\n async OnArtifactShareRequested(artifactId: string): Promise<void> {\n // Load the artifact entity to pass to the modal\n const md = this.ProviderToUse;\n const artifact = await md.GetEntityObject<MJArtifactEntity>('MJ: Artifacts');\n await artifact.Load(artifactId);\n\n if (artifact) {\n this.ArtifactToShare = artifact;\n this.IsArtifactShareModalOpen = true;\n }\n }\n\n /** @deprecated Use {@link OnArtifactShareRequested}. */\n async onArtifactShareRequested(artifactId: string): Promise<void> {\n return this.OnArtifactShareRequested(artifactId);\n }\n\n /**\n * Handle close of artifact share modal\n */\n OnArtifactShareModalClose(): void {\n this.IsArtifactShareModalOpen = false;\n this.ArtifactToShare = null;\n }\n\n /** @deprecated Use {@link OnArtifactShareModalClose}. */\n onArtifactShareModalClose(): void {\n return this.OnArtifactShareModalClose();\n }\n\n /**\n * Handle successful share - refresh permissions\n */\n async OnArtifactShared(): Promise<void> {\n this.IsArtifactShareModalOpen = false;\n this.ArtifactToShare = null;\n\n // Refresh permissions for the active artifact\n if (this.ActiveArtifactId) {\n await this.loadArtifactPermissions(this.ActiveArtifactId);\n }\n }\n\n /** @deprecated Use {@link OnArtifactShared}. */\n async onArtifactShared(): Promise<void> {\n return this.OnArtifactShared();\n }\n\n /**\n * Handle actionable command execution from child components\n * Bubbles up to host application for handling\n */\n OnActionableCommand(command: ActionableCommand): void {\n if (command.type === 'open:resource' && command.resourceType === 'Record') {\n // chat-area converts Record commands to openEntityRecord; onOpenEntityRecord\n // re-emits them as actionableCommandExecuted. Skip the raw command to avoid a double open.\n return;\n }\n console.log('📤 Bubbling up actionable command:', command);\n this.ActionableCommandExecuted.emit(command);\n }\n\n /** @deprecated Use {@link OnActionableCommand}. */\n onActionableCommand(command: ActionableCommand): void {\n return this.OnActionableCommand(command);\n }\n\n /**\n * Handle automatic command execution from child components\n * Bubbles up to host application for handling\n */\n OnAutomaticCommand(command: AutomaticCommand): void {\n console.log('📤 Bubbling up automatic command:', command);\n this.AutomaticCommandExecuted.emit(command);\n }\n\n /** @deprecated Use {@link OnAutomaticCommand}. */\n onAutomaticCommand(command: AutomaticCommand): void {\n return this.OnAutomaticCommand(command);\n }\n}","<div class=\"conversation-workspace\" [attr.data-layout]=\"layout\" mjSearchShortcut (searchTriggered)=\"openSearch()\">\n <!-- Top Navigation Bar -->\n <div class=\"workspace-navigation\">\n <mj-conversation-navigation\n [activeTab]=\"activeTab\"\n [environmentId]=\"environmentId\"\n [currentUser]=\"currentUser\"\n [conversationId]=\"selectedConversationId\"\n (tabChanged)=\"onTabChanged($event)\"\n (sidebarToggled)=\"toggleSidebar()\"\n (searchTriggered)=\"openSearch()\"\n (refreshTriggered)=\"onRefreshAgentCache()\">\n </mj-conversation-navigation>\n </div>\n\n <!-- Loading spinner while initializing agents -->\n @if (!isWorkspaceReady) {\n <div class=\"workspace-loading\">\n <mj-loading text=\"Loading agents...\" size=\"large\"></mj-loading>\n </div>\n }\n\n <!-- Main workspace content - only renders when agents are ready -->\n @if (isWorkspaceReady) {\n <div class=\"workspace-content\">\n <!-- Mobile sidebar backdrop -->\n @if (isMobileView && isSidebarVisible && activeTab !== 'collections' && activeTab !== 'tasks') {\n <div class=\"mobile-sidebar-backdrop visible\" (click)=\"closeSidebar()\"></div>\n }\n\n <!-- Left Sidebar (hidden when Collections or Tasks view is active) -->\n @if (activeTab !== 'collections' && activeTab !== 'tasks' && isSidebarSettingsLoaded) {\n <div class=\"workspace-sidebar\"\n [class.open]=\"isSidebarVisible\"\n [class.collapsed]=\"isSidebarCollapsed\"\n [class.no-transition]=\"!sidebarTransitionsEnabled\"\n [style.width.px]=\"isSidebarCollapsed ? 0 : sidebarWidth\">\n <mj-conversation-sidebar\n [activeTab]=\"activeTab\"\n [environmentId]=\"environmentId\"\n [currentUser]=\"currentUser\"\n [selectedConversationId]=\"selectedConversationId\"\n [renamedConversationId]=\"renamedConversationId\"\n [isSidebarPinned]=\"isSidebarPinned\"\n [isMobileView]=\"isMobileView\"\n [ShowRoutines]=\"ShowRoutines\"\n [Provider]=\"Provider\"\n (conversationSelected)=\"onConversationSelected($event)\"\n (newConversationRequested)=\"startNewConversation()\"\n (openEntityRecord)=\"onOpenEntityRecord($event)\"\n (pinSidebarRequested)=\"pinSidebar()\"\n (unpinSidebarRequested)=\"unpinSidebar()\">\n </mj-conversation-sidebar>\n </div>\n }\n\n <!-- Floating toggle button (only visible when sidebar is collapsed and settings loaded) -->\n @if (activeTab !== 'collections' && activeTab !== 'tasks' && isSidebarCollapsed && isSidebarSettingsLoaded) {\n <button class=\"sidebar-floating-toggle\"\n (click)=\"expandSidebar()\"\n title=\"Show conversations\">\n <i class=\"fas fa-table-columns\"></i>\n </button>\n }\n\n <!-- Resize handle for sidebar (only when expanded and settings loaded) -->\n @if (isSidebarVisible && !isSidebarCollapsed && activeTab !== 'collections' && activeTab !== 'tasks' && isSidebarSettingsLoaded) {\n <div class=\"sidebar-resize-handle\"\n (mousedown)=\"onSidebarResizeStart($event)\"></div>\n }\n\n <!-- Collections Full-Panel View -->\n @if (activeTab === 'collections') {\n <div class=\"workspace-main\">\n <mj-collections-full-view\n [environmentId]=\"environmentId\"\n [currentUser]=\"currentUser\"\n (collectionNavigated)=\"onCollectionNavigated($event)\">\n </mj-collections-full-view>\n </div>\n }\n\n <!-- Tasks Full-Panel View -->\n @if (activeTab === 'tasks') {\n <div class=\"workspace-main\">\n <mj-tasks-full-view\n [environmentId]=\"environmentId\"\n [currentUser]=\"currentUser\"\n [baseFilter]=\"tasksFilter\"\n [activeTaskId]=\"activeTaskId\"\n (openEntityRecord)=\"onOpenEntityRecordFromTasks($event)\">\n </mj-tasks-full-view>\n </div>\n }\n\n <!-- Main Chat Area (only shown when not in Collections or Tasks view) -->\n @if (activeTab !== 'collections' && activeTab !== 'tasks') {\n <div class=\"workspace-main\">\n <mj-conversation-chat-area\n [environmentId]=\"environmentId\"\n [currentUser]=\"currentUser\"\n [conversationId]=\"selectedConversationId\"\n [conversation]=\"selectedConversation\"\n [threadId]=\"selectedThreadId\"\n [isNewConversation]=\"isNewUnsavedConversation\"\n [pendingMessage]=\"pendingMessageToSend\"\n [pendingAttachments]=\"pendingAttachmentsToSend\"\n [pendingMessageConversationId]=\"pendingMessageConversationId\"\n [pendingArtifactId]=\"pendingArtifactId\"\n [pendingArtifactConversationId]=\"pendingArtifactConversationId\"\n [pendingArtifactVersionNumber]=\"pendingArtifactVersionNumber\"\n (conversationRenamed)=\"onConversationRenamed($event)\"\n (openEntityRecord)=\"onOpenEntityRecord($event)\"\n (navigationRequest)=\"onNavigationRequest($event)\"\n (taskClicked)=\"onTaskClicked($event)\"\n (artifactLinkClicked)=\"onArtifactLinkNavigation($event)\"\n (conversationCreated)=\"onConversationCreated($event)\"\n (realtimeConversationReady)=\"onRealtimeConversationReady($event)\"\n (threadOpened)=\"onThreadOpened($event)\"\n (threadClosed)=\"onThreadClosed()\"\n (pendingArtifactConsumed)=\"pendingArtifactId = null; pendingArtifactConversationId = null; pendingArtifactVersionNumber = null\"\n (pendingMessageConsumed)=\"pendingMessageToSend = null; pendingAttachmentsToSend = null; pendingMessageConversationId = null\"\n (pendingMessageRequested)=\"onPendingMessageRequested($event)\">\n </mj-conversation-chat-area>\n </div>\n }\n\n <!-- Right Artifact Panel -->\n @if (isArtifactPanelOpen && activeArtifactId) {\n @if (!isArtifactPanelMaximized) {\n <div class=\"artifact-panel-resize-handle\" (mousedown)=\"onArtifactPanelResizeStart($event)\"></div>\n }\n <div class=\"workspace-artifact-panel\"\n [style.width.%]=\"artifactPanelWidth\"\n [class.maximized]=\"isArtifactPanelMaximized\">\n <mj-artifact-viewer-panel\n [artifactId]=\"activeArtifactId\"\n [currentUser]=\"currentUser\"\n [environmentId]=\"environmentId\"\n [versionNumber]=\"activeVersionNumber ?? undefined\"\n [showSaveToCollection]=\"activeTab !== 'collections'\"\n [viewContext]=\"activeTab === 'collections' ? 'collection' : 'conversation'\"\n [contextCollectionId]=\"collectionState.activeCollectionId ?? undefined\"\n [canShare]=\"canShareActiveArtifact\"\n [canEdit]=\"canEditActiveArtifact\"\n [isMaximized]=\"isArtifactPanelMaximized\"\n (closed)=\"closeArtifactPanel()\"\n (navigateToLink)=\"onArtifactLinkNavigation($event)\"\n (shareRequested)=\"onArtifactShareRequested($event)\"\n (maximizeToggled)=\"toggleMaximizeArtifactPanel()\"\n (applyFormRequested)=\"onApplyFormRequested($event)\">\n </mj-artifact-viewer-panel>\n </div>\n }\n </div>\n }\n\n <!-- Global Search Panel -->\n <mj-search-panel\n [isOpen]=\"isSearchPanelOpen\"\n [environmentId]=\"environmentId\"\n [currentUser]=\"currentUser\"\n (close)=\"closeSearch()\"\n (resultSelected)=\"handleSearchResult($event)\">\n </mj-search-panel>\n\n <!-- Toast Notifications -->\n <mj-toast></mj-toast>\n\n <!-- Artifact Share Modal -->\n <mj-artifact-share-modal\n [isOpen]=\"isArtifactShareModalOpen\"\n [artifact]=\"artifactToShare\"\n [currentUser]=\"currentUser\"\n (saved)=\"onArtifactShared()\"\n (cancelled)=\"onArtifactShareModalClose()\">\n </mj-artifact-share-modal>\n</div>"]}
@@ -1,4 +1,5 @@
1
1
  import { UserInfo } from '@memberjunction/core';
2
+ import type { MentionSuggestionScope } from '@memberjunction/conversations-runtime';
2
3
  import { ComposerSuggestionRequest, ComposerTriggerProvider, MentionSuggestion } from '@memberjunction/ng-composer';
3
4
  /**
4
5
  * Shared base for the conversations composer plugins (agent-mentions / record-mentions /
@@ -16,6 +17,13 @@ export declare abstract class BaseConversationMentionProvider extends ComposerTr
16
17
  * what that agent accepts. `null` (the default) means "unknown": no narrowing.
17
18
  */
18
19
  TargetAgentId: string | null;
20
+ /**
21
+ * Narrows the '@' list for the composer that owns this provider instance: the agents it may
22
+ * offer and the people it offers. Each `mj-ai-composer` holds its own providers, so two
23
+ * composers on one page keep separate scopes even though they share the suggestion engine.
24
+ * `null` (the default) keeps the engine's full list.
25
+ */
26
+ Scope: MentionSuggestionScope | null;
19
27
  /**
20
28
  * Warm the shared suggestion engine so the first keystroke after a trigger is fast.
21
29
  * Safe to call repeatedly/concurrently — the engine has a promise-locked initialize.
@@ -1 +1 @@
1
- {"version":3,"file":"base-conversation-mention.provider.d.ts","sourceRoot":"","sources":["../../../src/lib/composer-plugins/base-conversation-mention.provider.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,sBAAsB,CAAC;AAChD,OAAO,EAAE,yBAAyB,EAAE,uBAAuB,EAAE,iBAAiB,EAAE,MAAM,6BAA6B,CAAC;AAGpH;;;;;;;;GAQG;AACH,8BAAsB,+BAAgC,SAAQ,uBAAuB;IACnF;;;;OAIG;IACI,aAAa,EAAE,MAAM,GAAG,IAAI,CAAQ;IAE3C;;;OAGG;IACmB,UAAU,CAAC,WAAW,EAAE,QAAQ,GAAG,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC;IAMvD,cAAc,CAAC,OAAO,EAAE,yBAAyB,GAAG,OAAO,CAAC,iBAAiB,EAAE,CAAC;CASvG"}
1
+ {"version":3,"file":"base-conversation-mention.provider.d.ts","sourceRoot":"","sources":["../../../src/lib/composer-plugins/base-conversation-mention.provider.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,sBAAsB,CAAC;AAChD,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,uCAAuC,CAAC;AACpF,OAAO,EAAE,yBAAyB,EAAE,uBAAuB,EAAE,iBAAiB,EAAE,MAAM,6BAA6B,CAAC;AAGpH;;;;;;;;GAQG;AACH,8BAAsB,+BAAgC,SAAQ,uBAAuB;IACnF;;;;OAIG;IACI,aAAa,EAAE,MAAM,GAAG,IAAI,CAAQ;IAE3C;;;;;OAKG;IACI,KAAK,EAAE,sBAAsB,GAAG,IAAI,CAAQ;IAEnD;;;OAGG;IACmB,UAAU,CAAC,WAAW,EAAE,QAAQ,GAAG,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC;IAMvD,cAAc,CAAC,OAAO,EAAE,yBAAyB,GAAG,OAAO,CAAC,iBAAiB,EAAE,CAAC;CASvG"}
@@ -16,6 +16,13 @@ export class BaseConversationMentionProvider extends ComposerTriggerProvider {
16
16
  * what that agent accepts. `null` (the default) means "unknown": no narrowing.
17
17
  */
18
18
  TargetAgentId = null;
19
+ /**
20
+ * Narrows the '@' list for the composer that owns this provider instance: the agents it may
21
+ * offer and the people it offers. Each `mj-ai-composer` holds its own providers, so two
22
+ * composers on one page keep separate scopes even though they share the suggestion engine.
23
+ * `null` (the default) keeps the engine's full list.
24
+ */
25
+ Scope = null;
19
26
  /**
20
27
  * Warm the shared suggestion engine so the first keystroke after a trigger is fast.
21
28
  * Safe to call repeatedly/concurrently — the engine has a promise-locked initialize.
@@ -32,7 +39,7 @@ export class BaseConversationMentionProvider extends ComposerTriggerProvider {
32
39
  const engine = MentionAutocompleteService.Instance;
33
40
  // No-op when already initialized; covers hosts that never called Initialize()
34
41
  await engine.initialize(request.ContextUser, request.Provider ?? undefined);
35
- return engine.getSuggestions(request.Query, true, this.TriggerChar, this.TargetAgentId).slice(0, request.MaxResults);
42
+ return engine.GetSuggestions(request.Query, true, this.TriggerChar, this.TargetAgentId, this.Scope).slice(0, request.MaxResults);
36
43
  }
37
44
  }
38
45
  //# sourceMappingURL=base-conversation-mention.provider.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"base-conversation-mention.provider.js","sourceRoot":"","sources":["../../../src/lib/composer-plugins/base-conversation-mention.provider.ts"],"names":[],"mappings":"AACA,OAAO,EAA6B,uBAAuB,EAAqB,MAAM,6BAA6B,CAAC;AACpH,OAAO,EAAE,0BAA0B,EAAE,MAAM,0CAA0C,CAAC;AAEtF;;;;;;;;GAQG;AACH,MAAM,OAAgB,+BAAgC,SAAQ,uBAAuB;IACnF;;;;OAIG;IACI,aAAa,GAAkB,IAAI,CAAC;IAE3C;;;OAGG;IACa,KAAK,CAAC,UAAU,CAAC,WAA4B;QAC3D,IAAI,WAAW,EAAE,CAAC;YAChB,MAAM,0BAA0B,CAAC,QAAQ,CAAC,UAAU,CAAC,WAAW,CAAC,CAAC;QACpE,CAAC;IACH,CAAC;IAEe,KAAK,CAAC,cAAc,CAAC,OAAkC;QACrE,IAAI,CAAC,OAAO,CAAC,WAAW,EAAE,CAAC;YACzB,OAAO,EAAE,CAAC;QACZ,CAAC;QACD,MAAM,MAAM,GAAG,0BAA0B,CAAC,QAAQ,CAAC;QACnD,8EAA8E;QAC9E,MAAM,MAAM,CAAC,UAAU,CAAC,OAAO,CAAC,WAAW,EAAE,OAAO,CAAC,QAAQ,IAAI,SAAS,CAAC,CAAC;QAC5E,OAAO,MAAM,CAAC,cAAc,CAAC,OAAO,CAAC,KAAK,EAAE,IAAI,EAAE,IAAI,CAAC,WAAW,EAAE,IAAI,CAAC,aAAa,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,OAAO,CAAC,UAAU,CAAC,CAAC;IACvH,CAAC;CACF","sourcesContent":["import { UserInfo } from '@memberjunction/core';\nimport { ComposerSuggestionRequest, ComposerTriggerProvider, MentionSuggestion } from '@memberjunction/ng-composer';\nimport { MentionAutocompleteService } from '../services/mention-autocomplete.service';\n\n/**\n * Shared base for the conversations composer plugins (agent-mentions / record-mentions /\n * skill-commands). Each concrete provider owns one trigger char; all of them delegate to\n * the shared {@link MentionAutocompleteService} engine, which loads its permission-filtered\n * caches once per session and ranks suggestions per trigger.\n *\n * Fail-closed: with no context user the AI-backed suggestion sets can't be permission\n * filtered, so the providers return [] rather than leaking anything.\n */\nexport abstract class BaseConversationMentionProvider extends ComposerTriggerProvider {\n /**\n * The agent the composed message will be sent to, when the host knows it (the conversation's\n * resolved agent). Providers that offer agent-dependent suggestions — skill commands — narrow to\n * what that agent accepts. `null` (the default) means \"unknown\": no narrowing.\n */\n public TargetAgentId: string | null = null;\n\n /**\n * Warm the shared suggestion engine so the first keystroke after a trigger is fast.\n * Safe to call repeatedly/concurrently — the engine has a promise-locked initialize.\n */\n public override async Initialize(contextUser: UserInfo | null): Promise<void> {\n if (contextUser) {\n await MentionAutocompleteService.Instance.initialize(contextUser);\n }\n }\n\n public override async GetSuggestions(request: ComposerSuggestionRequest): Promise<MentionSuggestion[]> {\n if (!request.ContextUser) {\n return [];\n }\n const engine = MentionAutocompleteService.Instance;\n // No-op when already initialized; covers hosts that never called Initialize()\n await engine.initialize(request.ContextUser, request.Provider ?? undefined);\n return engine.getSuggestions(request.Query, true, this.TriggerChar, this.TargetAgentId).slice(0, request.MaxResults);\n }\n}\n"]}
1
+ {"version":3,"file":"base-conversation-mention.provider.js","sourceRoot":"","sources":["../../../src/lib/composer-plugins/base-conversation-mention.provider.ts"],"names":[],"mappings":"AAEA,OAAO,EAA6B,uBAAuB,EAAqB,MAAM,6BAA6B,CAAC;AACpH,OAAO,EAAE,0BAA0B,EAAE,MAAM,0CAA0C,CAAC;AAEtF;;;;;;;;GAQG;AACH,MAAM,OAAgB,+BAAgC,SAAQ,uBAAuB;IACnF;;;;OAIG;IACI,aAAa,GAAkB,IAAI,CAAC;IAE3C;;;;;OAKG;IACI,KAAK,GAAkC,IAAI,CAAC;IAEnD;;;OAGG;IACa,KAAK,CAAC,UAAU,CAAC,WAA4B;QAC3D,IAAI,WAAW,EAAE,CAAC;YAChB,MAAM,0BAA0B,CAAC,QAAQ,CAAC,UAAU,CAAC,WAAW,CAAC,CAAC;QACpE,CAAC;IACH,CAAC;IAEe,KAAK,CAAC,cAAc,CAAC,OAAkC;QACrE,IAAI,CAAC,OAAO,CAAC,WAAW,EAAE,CAAC;YACzB,OAAO,EAAE,CAAC;QACZ,CAAC;QACD,MAAM,MAAM,GAAG,0BAA0B,CAAC,QAAQ,CAAC;QACnD,8EAA8E;QAC9E,MAAM,MAAM,CAAC,UAAU,CAAC,OAAO,CAAC,WAAW,EAAE,OAAO,CAAC,QAAQ,IAAI,SAAS,CAAC,CAAC;QAC5E,OAAO,MAAM,CAAC,cAAc,CAAC,OAAO,CAAC,KAAK,EAAE,IAAI,EAAE,IAAI,CAAC,WAAW,EAAE,IAAI,CAAC,aAAa,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,OAAO,CAAC,UAAU,CAAC,CAAC;IACnI,CAAC;CACF","sourcesContent":["import { UserInfo } from '@memberjunction/core';\nimport type { MentionSuggestionScope } from '@memberjunction/conversations-runtime';\nimport { ComposerSuggestionRequest, ComposerTriggerProvider, MentionSuggestion } from '@memberjunction/ng-composer';\nimport { MentionAutocompleteService } from '../services/mention-autocomplete.service';\n\n/**\n * Shared base for the conversations composer plugins (agent-mentions / record-mentions /\n * skill-commands). Each concrete provider owns one trigger char; all of them delegate to\n * the shared {@link MentionAutocompleteService} engine, which loads its permission-filtered\n * caches once per session and ranks suggestions per trigger.\n *\n * Fail-closed: with no context user the AI-backed suggestion sets can't be permission\n * filtered, so the providers return [] rather than leaking anything.\n */\nexport abstract class BaseConversationMentionProvider extends ComposerTriggerProvider {\n /**\n * The agent the composed message will be sent to, when the host knows it (the conversation's\n * resolved agent). Providers that offer agent-dependent suggestions — skill commands — narrow to\n * what that agent accepts. `null` (the default) means \"unknown\": no narrowing.\n */\n public TargetAgentId: string | null = null;\n\n /**\n * Narrows the '@' list for the composer that owns this provider instance: the agents it may\n * offer and the people it offers. Each `mj-ai-composer` holds its own providers, so two\n * composers on one page keep separate scopes even though they share the suggestion engine.\n * `null` (the default) keeps the engine's full list.\n */\n public Scope: MentionSuggestionScope | null = null;\n\n /**\n * Warm the shared suggestion engine so the first keystroke after a trigger is fast.\n * Safe to call repeatedly/concurrently — the engine has a promise-locked initialize.\n */\n public override async Initialize(contextUser: UserInfo | null): Promise<void> {\n if (contextUser) {\n await MentionAutocompleteService.Instance.initialize(contextUser);\n }\n }\n\n public override async GetSuggestions(request: ComposerSuggestionRequest): Promise<MentionSuggestion[]> {\n if (!request.ContextUser) {\n return [];\n }\n const engine = MentionAutocompleteService.Instance;\n // No-op when already initialized; covers hosts that never called Initialize()\n await engine.initialize(request.ContextUser, request.Provider ?? undefined);\n return engine.GetSuggestions(request.Query, true, this.TriggerChar, this.TargetAgentId, this.Scope).slice(0, request.MaxResults);\n }\n}\n"]}