@memberjunction/ng-conversations 6.2.0-edge.2 → 6.2.0-edge.4

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 (279) hide show
  1. package/README.md +4 -7
  2. package/dist/lib/components/collection/collection-view.component.d.ts.map +1 -1
  3. package/dist/lib/components/collection/collection-view.component.js +1 -0
  4. package/dist/lib/components/collection/collection-view.component.js.map +1 -1
  5. package/dist/lib/components/composer/ai-composer.component.d.ts +14 -2
  6. package/dist/lib/components/composer/ai-composer.component.d.ts.map +1 -1
  7. package/dist/lib/components/composer/ai-composer.component.js +35 -4
  8. package/dist/lib/components/composer/ai-composer.component.js.map +1 -1
  9. package/dist/lib/components/conversation/conversation-chat-area.component.d.ts +632 -55
  10. package/dist/lib/components/conversation/conversation-chat-area.component.d.ts.map +1 -1
  11. package/dist/lib/components/conversation/conversation-chat-area.component.js +2748 -624
  12. package/dist/lib/components/conversation/conversation-chat-area.component.js.map +1 -1
  13. package/dist/lib/components/conversation/forks-popover.component.d.ts +37 -0
  14. package/dist/lib/components/conversation/forks-popover.component.d.ts.map +1 -0
  15. package/dist/lib/components/conversation/forks-popover.component.js +164 -0
  16. package/dist/lib/components/conversation/forks-popover.component.js.map +1 -0
  17. package/dist/lib/components/export/export-modal.component.d.ts +7 -2
  18. package/dist/lib/components/export/export-modal.component.d.ts.map +1 -1
  19. package/dist/lib/components/export/export-modal.component.js +16 -3
  20. package/dist/lib/components/export/export-modal.component.js.map +1 -1
  21. package/dist/lib/components/message/conversation-message-rating.component.d.ts.map +1 -1
  22. package/dist/lib/components/message/conversation-message-rating.component.js +11 -9
  23. package/dist/lib/components/message/conversation-message-rating.component.js.map +1 -1
  24. package/dist/lib/components/message/message-input.component.d.ts +121 -11
  25. package/dist/lib/components/message/message-input.component.d.ts.map +1 -1
  26. package/dist/lib/components/message/message-input.component.js +307 -106
  27. package/dist/lib/components/message/message-input.component.js.map +1 -1
  28. package/dist/lib/components/message/message-item.component.d.ts +178 -5
  29. package/dist/lib/components/message/message-item.component.d.ts.map +1 -1
  30. package/dist/lib/components/message/message-item.component.js +919 -306
  31. package/dist/lib/components/message/message-item.component.js.map +1 -1
  32. package/dist/lib/components/message/message-list.component.d.ts +92 -21
  33. package/dist/lib/components/message/message-list.component.d.ts.map +1 -1
  34. package/dist/lib/components/message/message-list.component.js +337 -52
  35. package/dist/lib/components/message/message-list.component.js.map +1 -1
  36. package/dist/lib/components/realtime/avatar/realtime-avatar-channel.d.ts +34 -0
  37. package/dist/lib/components/realtime/avatar/realtime-avatar-channel.d.ts.map +1 -0
  38. package/dist/lib/components/realtime/avatar/realtime-avatar-channel.js +75 -0
  39. package/dist/lib/components/realtime/avatar/realtime-avatar-channel.js.map +1 -0
  40. package/dist/lib/components/realtime/avatar/realtime-avatar-surface.component.d.ts +80 -0
  41. package/dist/lib/components/realtime/avatar/realtime-avatar-surface.component.d.ts.map +1 -0
  42. package/dist/lib/components/realtime/avatar/realtime-avatar-surface.component.js +202 -0
  43. package/dist/lib/components/realtime/avatar/realtime-avatar-surface.component.js.map +1 -0
  44. package/dist/lib/components/realtime/capture/realtime-camera-check-card.component.d.ts +45 -0
  45. package/dist/lib/components/realtime/capture/realtime-camera-check-card.component.d.ts.map +1 -0
  46. package/dist/lib/components/realtime/capture/realtime-camera-check-card.component.js +123 -0
  47. package/dist/lib/components/realtime/capture/realtime-camera-check-card.component.js.map +1 -0
  48. package/dist/lib/components/realtime/capture/realtime-capture-channel.d.ts +90 -0
  49. package/dist/lib/components/realtime/capture/realtime-capture-channel.d.ts.map +1 -0
  50. package/dist/lib/components/realtime/capture/realtime-capture-channel.js +223 -0
  51. package/dist/lib/components/realtime/capture/realtime-capture-channel.js.map +1 -0
  52. package/dist/lib/components/realtime/capture/realtime-capture-model.d.ts +98 -0
  53. package/dist/lib/components/realtime/capture/realtime-capture-model.d.ts.map +1 -0
  54. package/dist/lib/components/realtime/capture/realtime-capture-model.js +161 -0
  55. package/dist/lib/components/realtime/capture/realtime-capture-model.js.map +1 -0
  56. package/dist/lib/components/realtime/capture/realtime-capture-surface.component.d.ts +48 -0
  57. package/dist/lib/components/realtime/capture/realtime-capture-surface.component.d.ts.map +1 -0
  58. package/dist/lib/components/realtime/capture/realtime-capture-surface.component.js +205 -0
  59. package/dist/lib/components/realtime/capture/realtime-capture-surface.component.js.map +1 -0
  60. package/dist/lib/components/realtime/channels/client-context-channel.d.ts +19 -2
  61. package/dist/lib/components/realtime/channels/client-context-channel.d.ts.map +1 -1
  62. package/dist/lib/components/realtime/channels/client-context-channel.js +83 -9
  63. package/dist/lib/components/realtime/channels/client-context-channel.js.map +1 -1
  64. package/dist/lib/components/realtime/channels/realtime-channel-pane.component.d.ts +30 -9
  65. package/dist/lib/components/realtime/channels/realtime-channel-pane.component.d.ts.map +1 -1
  66. package/dist/lib/components/realtime/channels/realtime-channel-pane.component.js +78 -14
  67. package/dist/lib/components/realtime/channels/realtime-channel-pane.component.js.map +1 -1
  68. package/dist/lib/components/realtime/identity-verification/identity-verification-channel.d.ts +71 -0
  69. package/dist/lib/components/realtime/identity-verification/identity-verification-channel.d.ts.map +1 -0
  70. package/dist/lib/components/realtime/identity-verification/identity-verification-channel.js +259 -0
  71. package/dist/lib/components/realtime/identity-verification/identity-verification-channel.js.map +1 -0
  72. package/dist/lib/components/realtime/identity-verification/identity-verification-model.d.ts +129 -0
  73. package/dist/lib/components/realtime/identity-verification/identity-verification-model.d.ts.map +1 -0
  74. package/dist/lib/components/realtime/identity-verification/identity-verification-model.js +373 -0
  75. package/dist/lib/components/realtime/identity-verification/identity-verification-model.js.map +1 -0
  76. package/dist/lib/components/realtime/identity-verification/identity-verification-surface.component.d.ts +77 -0
  77. package/dist/lib/components/realtime/identity-verification/identity-verification-surface.component.d.ts.map +1 -0
  78. package/dist/lib/components/realtime/identity-verification/identity-verification-surface.component.js +420 -0
  79. package/dist/lib/components/realtime/identity-verification/identity-verification-surface.component.js.map +1 -0
  80. package/dist/lib/components/realtime/interactive-component/component-contract.d.ts +83 -0
  81. package/dist/lib/components/realtime/interactive-component/component-contract.d.ts.map +1 -0
  82. package/dist/lib/components/realtime/interactive-component/component-contract.js +292 -0
  83. package/dist/lib/components/realtime/interactive-component/component-contract.js.map +1 -0
  84. package/dist/lib/components/realtime/interactive-component/component-data-state.d.ts +39 -0
  85. package/dist/lib/components/realtime/interactive-component/component-data-state.d.ts.map +1 -0
  86. package/dist/lib/components/realtime/interactive-component/component-data-state.js +152 -0
  87. package/dist/lib/components/realtime/interactive-component/component-data-state.js.map +1 -0
  88. package/dist/lib/components/realtime/interactive-component/component-instance-engine.d.ts +109 -0
  89. package/dist/lib/components/realtime/interactive-component/component-instance-engine.d.ts.map +1 -0
  90. package/dist/lib/components/realtime/interactive-component/component-instance-engine.js +146 -0
  91. package/dist/lib/components/realtime/interactive-component/component-instance-engine.js.map +1 -0
  92. package/dist/lib/components/realtime/interactive-component/component-spec-content.d.ts +19 -0
  93. package/dist/lib/components/realtime/interactive-component/component-spec-content.d.ts.map +1 -0
  94. package/dist/lib/components/realtime/interactive-component/component-spec-content.js +39 -0
  95. package/dist/lib/components/realtime/interactive-component/component-spec-content.js.map +1 -0
  96. package/dist/lib/components/realtime/interactive-component/interactive-component-channel.d.ts +183 -0
  97. package/dist/lib/components/realtime/interactive-component/interactive-component-channel.d.ts.map +1 -0
  98. package/dist/lib/components/realtime/interactive-component/interactive-component-channel.js +761 -0
  99. package/dist/lib/components/realtime/interactive-component/interactive-component-channel.js.map +1 -0
  100. package/dist/lib/components/realtime/interactive-component/interactive-component-config.d.ts +25 -0
  101. package/dist/lib/components/realtime/interactive-component/interactive-component-config.d.ts.map +1 -0
  102. package/dist/lib/components/realtime/interactive-component/interactive-component-config.js +57 -0
  103. package/dist/lib/components/realtime/interactive-component/interactive-component-config.js.map +1 -0
  104. package/dist/lib/components/realtime/interactive-component/interactive-component-host.component.d.ts +40 -0
  105. package/dist/lib/components/realtime/interactive-component/interactive-component-host.component.d.ts.map +1 -0
  106. package/dist/lib/components/realtime/interactive-component/interactive-component-host.component.js +97 -0
  107. package/dist/lib/components/realtime/interactive-component/interactive-component-host.component.js.map +1 -0
  108. package/dist/lib/components/realtime/interactive-component/interactive-component-types.d.ts +144 -0
  109. package/dist/lib/components/realtime/interactive-component/interactive-component-types.d.ts.map +1 -0
  110. package/dist/lib/components/realtime/interactive-component/interactive-component-types.js +57 -0
  111. package/dist/lib/components/realtime/interactive-component/interactive-component-types.js.map +1 -0
  112. package/dist/lib/components/realtime/interactive-component/react-component-handle.d.ts +36 -0
  113. package/dist/lib/components/realtime/interactive-component/react-component-handle.d.ts.map +1 -0
  114. package/dist/lib/components/realtime/interactive-component/react-component-handle.js +55 -0
  115. package/dist/lib/components/realtime/interactive-component/react-component-handle.js.map +1 -0
  116. package/dist/lib/components/realtime/interactive-component/realtime-interactive-component-surface.component.d.ts +55 -0
  117. package/dist/lib/components/realtime/interactive-component/realtime-interactive-component-surface.component.d.ts.map +1 -0
  118. package/dist/lib/components/realtime/interactive-component/realtime-interactive-component-surface.component.js +210 -0
  119. package/dist/lib/components/realtime/interactive-component/realtime-interactive-component-surface.component.js.map +1 -0
  120. package/dist/lib/components/realtime/interactive-component/run-view-component-artifact-source.d.ts +32 -0
  121. package/dist/lib/components/realtime/interactive-component/run-view-component-artifact-source.d.ts.map +1 -0
  122. package/dist/lib/components/realtime/interactive-component/run-view-component-artifact-source.js +90 -0
  123. package/dist/lib/components/realtime/interactive-component/run-view-component-artifact-source.js.map +1 -0
  124. package/dist/lib/components/realtime/media/media-channel.d.ts +7 -0
  125. package/dist/lib/components/realtime/media/media-channel.d.ts.map +1 -1
  126. package/dist/lib/components/realtime/media/media-channel.js +28 -1
  127. package/dist/lib/components/realtime/media/media-channel.js.map +1 -1
  128. package/dist/lib/components/realtime/realtime-agent-banner.component.d.ts +8 -1
  129. package/dist/lib/components/realtime/realtime-agent-banner.component.d.ts.map +1 -1
  130. package/dist/lib/components/realtime/realtime-agent-banner.component.js +89 -71
  131. package/dist/lib/components/realtime/realtime-agent-banner.component.js.map +1 -1
  132. package/dist/lib/components/realtime/realtime-agent-orb.component.d.ts +21 -0
  133. package/dist/lib/components/realtime/realtime-agent-orb.component.d.ts.map +1 -0
  134. package/dist/lib/components/realtime/realtime-agent-orb.component.js +49 -0
  135. package/dist/lib/components/realtime/realtime-agent-orb.component.js.map +1 -0
  136. package/dist/lib/components/realtime/realtime-agent-picker.component.d.ts +44 -11
  137. package/dist/lib/components/realtime/realtime-agent-picker.component.d.ts.map +1 -1
  138. package/dist/lib/components/realtime/realtime-agent-picker.component.js +162 -50
  139. package/dist/lib/components/realtime/realtime-agent-picker.component.js.map +1 -1
  140. package/dist/lib/components/realtime/realtime-audio-visuals.d.ts +8 -2
  141. package/dist/lib/components/realtime/realtime-audio-visuals.d.ts.map +1 -1
  142. package/dist/lib/components/realtime/realtime-audio-visuals.js +14 -18
  143. package/dist/lib/components/realtime/realtime-audio-visuals.js.map +1 -1
  144. package/dist/lib/components/realtime/realtime-composer.component.d.ts +42 -2
  145. package/dist/lib/components/realtime/realtime-composer.component.d.ts.map +1 -1
  146. package/dist/lib/components/realtime/realtime-composer.component.js +137 -102
  147. package/dist/lib/components/realtime/realtime-composer.component.js.map +1 -1
  148. package/dist/lib/components/realtime/realtime-perception-chip.component.d.ts +71 -0
  149. package/dist/lib/components/realtime/realtime-perception-chip.component.d.ts.map +1 -0
  150. package/dist/lib/components/realtime/realtime-perception-chip.component.js +221 -0
  151. package/dist/lib/components/realtime/realtime-perception-chip.component.js.map +1 -0
  152. package/dist/lib/components/realtime/realtime-session-overlay.component.d.ts +264 -22
  153. package/dist/lib/components/realtime/realtime-session-overlay.component.d.ts.map +1 -1
  154. package/dist/lib/components/realtime/realtime-session-overlay.component.js +851 -135
  155. package/dist/lib/components/realtime/realtime-session-overlay.component.js.map +1 -1
  156. package/dist/lib/components/realtime/realtime-surface-placement-prefs.d.ts +14 -0
  157. package/dist/lib/components/realtime/realtime-surface-placement-prefs.d.ts.map +1 -0
  158. package/dist/lib/components/realtime/realtime-surface-placement-prefs.js +14 -0
  159. package/dist/lib/components/realtime/realtime-surface-placement-prefs.js.map +1 -0
  160. package/dist/lib/components/realtime/realtime-surface-stage.model.d.ts +74 -0
  161. package/dist/lib/components/realtime/realtime-surface-stage.model.d.ts.map +1 -0
  162. package/dist/lib/components/realtime/realtime-surface-stage.model.js +171 -0
  163. package/dist/lib/components/realtime/realtime-surface-stage.model.js.map +1 -0
  164. package/dist/lib/components/realtime/realtime-surface-tabs.component.d.ts +71 -13
  165. package/dist/lib/components/realtime/realtime-surface-tabs.component.d.ts.map +1 -1
  166. package/dist/lib/components/realtime/realtime-surface-tabs.component.js +232 -73
  167. package/dist/lib/components/realtime/realtime-surface-tabs.component.js.map +1 -1
  168. package/dist/lib/components/realtime/realtime-surface-tabs.model.d.ts +5 -0
  169. package/dist/lib/components/realtime/realtime-surface-tabs.model.d.ts.map +1 -1
  170. package/dist/lib/components/realtime/realtime-surface-tabs.model.js +8 -0
  171. package/dist/lib/components/realtime/realtime-surface-tabs.model.js.map +1 -1
  172. package/dist/lib/components/realtime/realtime-ui-config.d.ts +12 -2
  173. package/dist/lib/components/realtime/realtime-ui-config.d.ts.map +1 -1
  174. package/dist/lib/components/realtime/realtime-ui-config.js +5 -1
  175. package/dist/lib/components/realtime/realtime-ui-config.js.map +1 -1
  176. package/dist/lib/components/realtime/remote-browser/remote-browser-channel.d.ts +10 -1
  177. package/dist/lib/components/realtime/remote-browser/remote-browser-channel.d.ts.map +1 -1
  178. package/dist/lib/components/realtime/remote-browser/remote-browser-channel.js +42 -2
  179. package/dist/lib/components/realtime/remote-browser/remote-browser-channel.js.map +1 -1
  180. package/dist/lib/components/realtime/remote-browser/remote-browser-surface.component.d.ts +20 -3
  181. package/dist/lib/components/realtime/remote-browser/remote-browser-surface.component.d.ts.map +1 -1
  182. package/dist/lib/components/realtime/remote-browser/remote-browser-surface.component.js +44 -10
  183. package/dist/lib/components/realtime/remote-browser/remote-browser-surface.component.js.map +1 -1
  184. package/dist/lib/components/realtime/whiteboard/whiteboard-channel.d.ts +28 -44
  185. package/dist/lib/components/realtime/whiteboard/whiteboard-channel.d.ts.map +1 -1
  186. package/dist/lib/components/realtime/whiteboard/whiteboard-channel.js +76 -162
  187. package/dist/lib/components/realtime/whiteboard/whiteboard-channel.js.map +1 -1
  188. package/dist/lib/components/search/search-panel.component.d.ts +2 -0
  189. package/dist/lib/components/search/search-panel.component.d.ts.map +1 -1
  190. package/dist/lib/components/search/search-panel.component.js +25 -12
  191. package/dist/lib/components/search/search-panel.component.js.map +1 -1
  192. package/dist/lib/components/workspace/conversation-workspace.component.d.ts +22 -31
  193. package/dist/lib/components/workspace/conversation-workspace.component.d.ts.map +1 -1
  194. package/dist/lib/components/workspace/conversation-workspace.component.js +50 -63
  195. package/dist/lib/components/workspace/conversation-workspace.component.js.map +1 -1
  196. package/dist/lib/conversations.module.d.ts +30 -29
  197. package/dist/lib/conversations.module.d.ts.map +1 -1
  198. package/dist/lib/conversations.module.js +27 -5
  199. package/dist/lib/conversations.module.js.map +1 -1
  200. package/dist/lib/events/chat-events.d.ts +25 -0
  201. package/dist/lib/events/chat-events.d.ts.map +1 -1
  202. package/dist/lib/events/chat-events.js +36 -0
  203. package/dist/lib/events/chat-events.js.map +1 -1
  204. package/dist/lib/models/agent-turn.model.d.ts +5 -0
  205. package/dist/lib/models/agent-turn.model.d.ts.map +1 -1
  206. package/dist/lib/models/agent-turn.model.js.map +1 -1
  207. package/dist/lib/services/agent-state.service.d.ts +34 -8
  208. package/dist/lib/services/agent-state.service.d.ts.map +1 -1
  209. package/dist/lib/services/agent-state.service.js +82 -29
  210. package/dist/lib/services/agent-state.service.js.map +1 -1
  211. package/dist/lib/services/artifact-state.service.d.ts +0 -9
  212. package/dist/lib/services/artifact-state.service.d.ts.map +1 -1
  213. package/dist/lib/services/artifact-state.service.js +1 -32
  214. package/dist/lib/services/artifact-state.service.js.map +1 -1
  215. package/dist/lib/services/browser-realtime-media-host.d.ts +12 -0
  216. package/dist/lib/services/browser-realtime-media-host.d.ts.map +1 -1
  217. package/dist/lib/services/browser-realtime-media-host.js +19 -0
  218. package/dist/lib/services/browser-realtime-media-host.js.map +1 -1
  219. package/dist/lib/services/browser-recording-unload-guard.d.ts +30 -0
  220. package/dist/lib/services/browser-recording-unload-guard.d.ts.map +1 -0
  221. package/dist/lib/services/browser-recording-unload-guard.js +43 -0
  222. package/dist/lib/services/browser-recording-unload-guard.js.map +1 -0
  223. package/dist/lib/services/conversation-agent.service.d.ts +35 -11
  224. package/dist/lib/services/conversation-agent.service.d.ts.map +1 -1
  225. package/dist/lib/services/conversation-agent.service.js +65 -20
  226. package/dist/lib/services/conversation-agent.service.js.map +1 -1
  227. package/dist/lib/services/conversation-detail-window.store.d.ts +22 -4
  228. package/dist/lib/services/conversation-detail-window.store.d.ts.map +1 -1
  229. package/dist/lib/services/conversation-detail-window.store.js +50 -9
  230. package/dist/lib/services/conversation-detail-window.store.js.map +1 -1
  231. package/dist/lib/services/conversation-naming.d.ts +72 -22
  232. package/dist/lib/services/conversation-naming.d.ts.map +1 -1
  233. package/dist/lib/services/conversation-naming.js +84 -10
  234. package/dist/lib/services/conversation-naming.js.map +1 -1
  235. package/dist/lib/services/data-cache.service.d.ts +13 -5
  236. package/dist/lib/services/data-cache.service.d.ts.map +1 -1
  237. package/dist/lib/services/data-cache.service.js +39 -19
  238. package/dist/lib/services/data-cache.service.js.map +1 -1
  239. package/dist/lib/services/export.service.d.ts +26 -9
  240. package/dist/lib/services/export.service.d.ts.map +1 -1
  241. package/dist/lib/services/export.service.js +61 -18
  242. package/dist/lib/services/export.service.js.map +1 -1
  243. package/dist/lib/services/realtime-audio-recorder.d.ts +33 -5
  244. package/dist/lib/services/realtime-audio-recorder.d.ts.map +1 -1
  245. package/dist/lib/services/realtime-audio-recorder.js +71 -11
  246. package/dist/lib/services/realtime-audio-recorder.js.map +1 -1
  247. package/dist/lib/services/realtime-pairing.d.ts +10 -5
  248. package/dist/lib/services/realtime-pairing.d.ts.map +1 -1
  249. package/dist/lib/services/realtime-pairing.js +15 -6
  250. package/dist/lib/services/realtime-pairing.js.map +1 -1
  251. package/dist/lib/services/realtime-session.service.d.ts +3 -2
  252. package/dist/lib/services/realtime-session.service.d.ts.map +1 -1
  253. package/dist/lib/services/realtime-session.service.js +7 -2
  254. package/dist/lib/services/realtime-session.service.js.map +1 -1
  255. package/dist/lib/services/search.service.d.ts +7 -2
  256. package/dist/lib/services/search.service.d.ts.map +1 -1
  257. package/dist/lib/services/search.service.js +13 -4
  258. package/dist/lib/services/search.service.js.map +1 -1
  259. package/dist/lib/util/frame-zone.d.ts +10 -0
  260. package/dist/lib/util/frame-zone.d.ts.map +1 -0
  261. package/dist/lib/util/frame-zone.js +10 -0
  262. package/dist/lib/util/frame-zone.js.map +1 -0
  263. package/dist/lib/utils/conversation-branching.d.ts +4 -0
  264. package/dist/lib/utils/conversation-branching.d.ts.map +1 -0
  265. package/dist/lib/utils/conversation-branching.js +5 -0
  266. package/dist/lib/utils/conversation-branching.js.map +1 -0
  267. package/dist/lib/utils/conversation-forks.d.ts +315 -0
  268. package/dist/lib/utils/conversation-forks.d.ts.map +1 -0
  269. package/dist/lib/utils/conversation-forks.js +456 -0
  270. package/dist/lib/utils/conversation-forks.js.map +1 -0
  271. package/dist/public-api.d.ts +23 -1
  272. package/dist/public-api.d.ts.map +1 -1
  273. package/dist/public-api.js +30 -1
  274. package/dist/public-api.js.map +1 -1
  275. package/package.json +37 -32
  276. package/dist/lib/components/thread/thread-panel.component.d.ts +0 -126
  277. package/dist/lib/components/thread/thread-panel.component.d.ts.map +0 -1
  278. package/dist/lib/components/thread/thread-panel.component.js +0 -440
  279. package/dist/lib/components/thread/thread-panel.component.js.map +0 -1
@@ -1,14 +1,14 @@
1
1
  import { EventEmitter, OnInit, OnDestroy, ChangeDetectorRef, TemplateRef, AfterViewChecked } from '@angular/core';
2
2
  import { BaseAngularComponent } from '@memberjunction/ng-base-types';
3
3
  import { UserInfo, CompositeKey, DataSnapshot } from '@memberjunction/core';
4
- import { MJConversationEntity, MJConversationDetailEntity, MJAIAgentRunEntity, MJArtifactEntity, MJTaskEntity, RatingJSON } from '@memberjunction/core-entities';
4
+ import { MJConversationEntity, MJConversationDetailEntity, MJAIAgentRunEntity, MJArtifactEntity, MJTaskEntity, RatingJSON, type ConversationScope, type ForkKind, type ForkSummary } from '@memberjunction/core-entities';
5
5
  import { MJAIAgentRunEntityExtended } from "@memberjunction/ai-core-plus";
6
6
  import { UICommandHandlerService } from '../../services/ui-command-handler.service';
7
7
  import { AgentStateService } from '../../services/agent-state.service';
8
8
  import { ConversationLivenessDomService } from '../../services/conversation-liveness-dom.service';
9
9
  import { ConversationAgentService } from '../../services/conversation-agent.service';
10
10
  import { ActiveTasksService } from '../../services/active-tasks.service';
11
- import { PendingAttachment } from '@memberjunction/ng-composer';
11
+ import { PendingAttachment, SendSlotMode } from '@memberjunction/ng-composer';
12
12
  import { ArtifactPermissionService } from '../../services/artifact-permission.service';
13
13
  import { ConversationAttachmentService } from '../../services/conversation-attachment.service';
14
14
  import { MJResourcePermissionShareAdapter, ResourceShareContext } from '@memberjunction/ng-resource-permissions';
@@ -29,9 +29,10 @@ import type { ExportBranding } from '../../services/export.service';
29
29
  import { RealtimeNavigateRequest, RealtimeStartLiveRequest } from '../realtime/realtime-session-overlay.component';
30
30
  import { RealtimeSessionTimelineMeta } from '../../utils/realtime-session-timeline';
31
31
  import { type DateJumpPeriod } from '../../utils/date-jump';
32
+ import { type ConversationOpenView, type ForkBreadcrumb, type ForkHeaderPath, type ForkChipOpenRequest, type ForkViewLayout, type LatestTurn, type MessageForkChip } from '../../utils/conversation-forks';
32
33
  import { type MJChatSlotName } from '../../directives/chat-slot.directive';
33
34
  import type { MJChatAgentPresenceState } from '../slots/slot-interfaces';
34
- import { BeforeAgentTurnEventArgs, AfterAgentTurnEventArgs, BeforeToolInvokedEventArgs, AfterToolInvokedEventArgs, BeforeResponseFormSubmittedEventArgs, AfterResponseFormSubmittedEventArgs, SessionStartedEventArgs, SessionChannelStateChangedEventArgs, SessionEndedEventArgs } from '../../events/chat-events';
35
+ import { BeforeAgentTurnEventArgs, AfterAgentTurnEventArgs, BeforeToolInvokedEventArgs, AfterToolInvokedEventArgs, BeforeResponseFormSubmittedEventArgs, AfterResponseFormSubmittedEventArgs, BeforeStopClickedEventArgs, AfterStopClickedEventArgs, SessionStartedEventArgs, SessionChannelStateChangedEventArgs, SessionEndedEventArgs } from '../../events/chat-events';
35
36
  import * as i0 from "@angular/core";
36
37
  /**
37
38
  * Configuration for the persona/character rendering in the `agentPresence` slot.
@@ -97,11 +98,6 @@ export declare class ConversationChatAreaComponent extends BaseAngularComponent
97
98
  set conversation(value: MJConversationEntity | null);
98
99
  /** @deprecated Use {@link Conversation}. */
99
100
  get conversation(): MJConversationEntity | null;
100
- ThreadId: string | null;
101
- /** @deprecated Use {@link ThreadId}. */
102
- set threadId(value: string | null);
103
- /** @deprecated Use {@link ThreadId}. */
104
- get threadId(): string | null;
105
101
  /**
106
102
  * When true, render the normal message-list + message-input layout even
107
103
  * before a conversation exists, instead of the centered empty-state
@@ -700,6 +696,12 @@ export declare class ConversationChatAreaComponent extends BaseAngularComponent
700
696
  */
701
697
  afterToolInvoked: EventEmitter<AfterToolInvokedEventArgs>;
702
698
  /** Cancelable — fired BEFORE a response form's submitted values are sent. */
699
+ /**
700
+ * Whether people may stop an in-progress agent run from its reply. Default true. A host can
701
+ * turn it off for a surface (a view-only review, a space whose runs are managed elsewhere)
702
+ * without making the conversation read-only.
703
+ */
704
+ AllowStopRun: boolean;
703
705
  BeforeResponseFormSubmitted: EventEmitter<BeforeResponseFormSubmittedEventArgs>;
704
706
  /**
705
707
  * @deprecated Use {@link BeforeResponseFormSubmitted}.
@@ -719,6 +721,16 @@ export declare class ConversationChatAreaComponent extends BaseAngularComponent
719
721
  * initialise in order, and the other way round this captures undefined.
720
722
  */
721
723
  afterResponseFormSubmitted: EventEmitter<AfterResponseFormSubmittedEventArgs>;
724
+ /**
725
+ * Fired BEFORE an in-progress agent run is stopped from its reply. Cancelable: set
726
+ * `event.Cancel = true` to keep the run going; `AfterStopClicked` then does not fire.
727
+ */
728
+ BeforeStopClicked: EventEmitter<BeforeStopClickedEventArgs>;
729
+ /**
730
+ * Fired AFTER a stop was attempted, with whether the run's row was marked Cancelled.
731
+ * Not fired when `BeforeStopClicked` was canceled.
732
+ */
733
+ AfterStopClicked: EventEmitter<AfterStopClickedEventArgs>;
722
734
  /** Informational. */
723
735
  SessionStarted: EventEmitter<SessionStartedEventArgs>;
724
736
  /**
@@ -852,24 +864,6 @@ export declare class ConversationChatAreaComponent extends BaseAngularComponent
852
864
  pendingMessage?: string;
853
865
  pendingAttachments?: PendingAttachment[];
854
866
  }>;
855
- ThreadOpened: EventEmitter<string>;
856
- /**
857
- * @deprecated Use {@link ThreadOpened}.
858
- *
859
- * The same emitter under the old binding name, so a template still binding
860
- * (threadOpened) keeps working. Must stay AFTER ThreadOpened: class fields
861
- * initialise in order, and the other way round this captures undefined.
862
- */
863
- threadOpened: EventEmitter<string>;
864
- ThreadClosed: EventEmitter<void>;
865
- /**
866
- * @deprecated Use {@link ThreadClosed}.
867
- *
868
- * The same emitter under the old binding name, so a template still binding
869
- * (threadClosed) keeps working. Must stay AFTER ThreadClosed: class fields
870
- * initialise in order, and the other way round this captures undefined.
871
- */
872
- threadClosed: EventEmitter<void>;
873
867
  PendingArtifactConsumed: EventEmitter<void>;
874
868
  /**
875
869
  * @deprecated Use {@link PendingArtifactConsumed}.
@@ -903,7 +897,13 @@ export declare class ConversationChatAreaComponent extends BaseAngularComponent
903
897
  text: string;
904
898
  attachments: PendingAttachment[];
905
899
  }>;
906
- private scrollContainer;
900
+ private scrollContainer?;
901
+ /** The transcript scroller; watched so the scroll-to-bottom arrow follows content that grows or shrinks without a scroll. */
902
+ private set scrollContainerRef(value);
903
+ /** Re-checks the scroll state when the transcript or its content changes size; null when nothing is watched. */
904
+ private scrollResizeObserver;
905
+ /** Watches `container` and its content for size changes (a new view, removed rows), which fire no scroll event. */
906
+ private watchScrollContent;
907
907
  private messageInputComponents;
908
908
  /**
909
909
  * Prefill the composer with draft text (NOT sent — unlike pendingMessage) and focus
@@ -1011,12 +1011,29 @@ export declare class ConversationChatAreaComponent extends BaseAngularComponent
1011
1011
  * last progress updates must not fire and drag the reader back down.
1012
1012
  */
1013
1013
  private bottomFollowSuppressedUntil;
1014
+ /**
1015
+ * ReadReplyFromTop while a reply streams: the scroll position the turn's top was last pinned
1016
+ * to, `'declined'` once the reader has moved away (they are then left alone and completion
1017
+ * decides as it always has), null before the turn's first delta. Reset where the turn opens.
1018
+ */
1019
+ private streamAnchor;
1020
+ /**
1021
+ * The turn's first message as rendered, and the clearance above it, resolved once per turn for
1022
+ * the stream pin: both are stable across frames and finding them is a timeline walk plus a
1023
+ * computed style, which is not work for a 60fps path. Re-resolved only if the node leaves the DOM.
1024
+ */
1025
+ private streamPin;
1026
+ private readonly ngZone;
1014
1027
  private turnStartRetryHandle;
1015
1028
  /** Gap kept between the pane's top edge and the turn's first message. */
1016
1029
  private static readonly TURN_TOP_GAP_PX;
1017
1030
  private lastLoadedConversationId;
1018
1031
  private currentlyLoadingConversationId;
1019
1032
  private conversationLoadToken;
1033
+ /** The conversation whose load has ended; null while a load runs and before the first one. */
1034
+ private readyConversationId;
1035
+ /** Emits each time a conversation load ends. */
1036
+ private readonly conversationLoadEnded$;
1020
1037
  /** The reconcile passes in progress, shared by every caller that arrives while they run. */
1021
1038
  private reconcileInFlight;
1022
1039
  /** Reason for one more reconcile pass, requested while a pass was running. */
@@ -1243,7 +1260,50 @@ export declare class ConversationChatAreaComponent extends BaseAngularComponent
1243
1260
  * In-progress message IDs for streaming reconnection
1244
1261
  * Passed to message-input component to reconnect PubSub updates
1245
1262
  */
1246
- InProgressMessageIds: string[];
1263
+ get InProgressMessageIds(): string[];
1264
+ set InProgressMessageIds(value: string[]);
1265
+ private _inProgressMessageIds;
1266
+ /** Replies the person asked to stop that have not left In-Progress yet. */
1267
+ StoppingDetailIds: Set<string>;
1268
+ private _stopFallbackTimers;
1269
+ private _sendSlotTicker;
1270
+ /** The elapsed time of the in-flight reply, ticked once a second while one is in flight. */
1271
+ SendSlotElapsed: string | null;
1272
+ /** How many agent replies are in flight in the open view. */
1273
+ get InFlightCount(): number;
1274
+ /** What the composer's send slot is: Stop while replies are in flight and the viewer may stop them. */
1275
+ get SendSlotMode(): SendSlotMode;
1276
+ /** The count the slot shows: the in-flight replies, or none when the slot is Send. */
1277
+ get StopCount(): number;
1278
+ /** The slot's tooltip and accessible name: "Stop {agent}", or "Stop all N runs". */
1279
+ get StopLabel(): string;
1280
+ /** The composer's status line: who is working, or what is being stopped. Null when the slot is Send. */
1281
+ get StatusText(): string | null;
1282
+ /** The elapsed time after the status line, for a single run that is working. */
1283
+ get StatusElapsed(): string | null;
1284
+ /**
1285
+ * The composer's stop control. Every in-flight reply is stopped through the same path as the
1286
+ * per-reply pill: `BeforeStopClicked` first (a listener that cancels keeps that run going),
1287
+ * then {@link OnStopMessage}, which fires `AfterStopClicked` with the outcome. Each reply asked
1288
+ * to stop reads as stopping until it leaves In-Progress, or until the retry window passes,
1289
+ * when the slot offers Stop again and a toast says the stop did not take.
1290
+ */
1291
+ OnComposerStopClicked(): Promise<void>;
1292
+ /** The agent name of an in-flight reply: its run's agent, else the reply's, else the assistant name. */
1293
+ private agentNameFor;
1294
+ private inFlightAgentName;
1295
+ private isAnyStopping;
1296
+ private markStopping;
1297
+ private clearStopFallbackTimer;
1298
+ /**
1299
+ * Follows a change in the in-flight replies: a reply that left In-Progress is no longer
1300
+ * stopping, and the one-second elapsed ticker runs only while something is in flight.
1301
+ */
1302
+ private syncSendSlot;
1303
+ private updateSendSlotElapsed;
1304
+ private stopSendSlotTicker;
1305
+ /** `m:ss` (or `h:mm:ss`), the same shape as the reply's time pill. */
1306
+ static FormatElapsed(ms: number): string;
1247
1307
  /** @deprecated Use {@link InProgressMessageIds}. */
1248
1308
  get inProgressMessageIds(): string[];
1249
1309
  /** @deprecated Use {@link InProgressMessageIds}. */
@@ -1309,18 +1369,18 @@ export declare class ConversationChatAreaComponent extends BaseAngularComponent
1309
1369
  /** @deprecated Use {@link PinnedMessageCount}. */
1310
1370
  get pinnedMessageCount(): number;
1311
1371
  /**
1312
- * Opens/closes the pins panel, hydrating its rows on first open.
1372
+ * Opens/closes the pins panel, hydrating its rows on first open. Opening it closes the forks list.
1313
1373
  *
1314
1374
  * Lazy on purpose: the panel is closed by default, so loading pin entities during
1315
1375
  * conversation open costs every user for a panel most never open.
1316
1376
  */
1317
1377
  TogglePinsPanel(): Promise<void>;
1318
1378
  /**
1319
- * All currently pinned messages in the active conversation, newest pin first.
1379
+ * The pinned messages on the open view's path, newest pin first.
1320
1380
  *
1321
1381
  * Read from the window store's separate pin set, NOT filtered out of `messages` — a pin
1322
- * older than the loaded window would otherwise vanish from the panel. Loaded by its own
1323
- * `IsPinned=1` query in {@link loadMessages}, already ordered `Sequence DESC`.
1382
+ * older than the loaded window would otherwise vanish from the panel. Loaded by
1383
+ * {@link hydratePinnedMessages} when the pins panel first opens, already ordered `Sequence DESC`.
1324
1384
  *
1325
1385
  * This and the three getters around it are TEMPLATE-BOUND, so they run on every change
1326
1386
  * detection cycle. They read the store's cheap single-value accessors rather than
@@ -1456,6 +1516,103 @@ export declare class ConversationChatAreaComponent extends BaseAngularComponent
1456
1516
  private conversationManagerAgent;
1457
1517
  private engine;
1458
1518
  private windowStore;
1519
+ /**
1520
+ * This chat area's fork rows of the active conversation, loaded with the transcript. The scope of the
1521
+ * open view is built from them; no other chat area reads or changes them.
1522
+ */
1523
+ private branches;
1524
+ /** The conversation whose fork rows {@link branches} holds; null when none are loaded. */
1525
+ private branchRowsConversationId;
1526
+ /** The conversation and branch of the last Main fallback that {@link openViewScope} logged. */
1527
+ private scopeFallbackLogged;
1528
+ /** What this chat area shows of the active conversation: Main or one fork. Per instance, in memory only. */
1529
+ private openView;
1530
+ /**
1531
+ * The view the loaded rows belong to: the open view once its window is applied. While a view change
1532
+ * reloads, the rows on screen keep the layout of this view.
1533
+ */
1534
+ private windowView;
1535
+ /** True while a view change ends a voice session and reloads; other view changes are ignored meanwhile. */
1536
+ private viewChangeInFlight;
1537
+ /** True while a fork is being created and opened; other start actions are ignored meanwhile. */
1538
+ private forkStartInFlight;
1539
+ /** True while an in-place rerun hides a turn's answer and starts the agent again; other reruns are ignored meanwhile. */
1540
+ private inPlaceRerunInFlight;
1541
+ /** The in-place turn built for a window, with the inputs it was built from. */
1542
+ private inPlaceTurnCache;
1543
+ /** The draft whose fork a first send is creating, with that creation; a send in the same draft awaits it. */
1544
+ private draftForkStart;
1545
+ /** The fork a draft's first send created; the first user message sent into it names it ({@link nameForkFromFirstSend}). */
1546
+ private forkNamedByFirstSend;
1547
+ /** True while the header title (the conversation name in Main, the fork name in a fork) is edited. */
1548
+ IsRenamingTitle: boolean;
1549
+ /** The text of the title name field. */
1550
+ TitleRenameText: string;
1551
+ /** The title name field; focused when renaming starts. */
1552
+ private titleNameInput?;
1553
+ /** The rename button of the header title; focus goes back to it when the name field closes from the keyboard. */
1554
+ private titleRenameButton?;
1555
+ /** The breadcrumb built for a view, with the inputs it was built from. */
1556
+ private breadcrumbCache;
1557
+ /** Increments on every view reload; a reload whose token is no longer current stops. */
1558
+ private viewReloadToken;
1559
+ /**
1560
+ * The pins recorded before a view reload reset the store, with the conversation load they belong
1561
+ * to. A reload that replaces a running one in the same conversation load reuses them.
1562
+ */
1563
+ private pinsDuringViewReload;
1564
+ /** The fork summaries of the active conversation: chips, the fork header and the forks list read them. */
1565
+ ForkSummaries: ForkSummary[];
1566
+ /** True while the forks list is open. */
1567
+ ShowForksPopover: boolean;
1568
+ /** The id of this chat area's forks popover; the header Forks button points at it. */
1569
+ readonly ForksPopoverID: string;
1570
+ /** The header Forks button; focus goes back to it when the forks list closes. */
1571
+ private forksButton?;
1572
+ private forkSummaryRefreshTimer;
1573
+ /** Numbers each fork summary read, so an older read cannot overwrite a newer one. */
1574
+ private forkSummaryReadSequence;
1575
+ /** The number of the newest fork summary read whose result is shown. */
1576
+ private forkSummaryShownSequence;
1577
+ /**
1578
+ * The chip map built from {@link ForkSummaries} for a window view, with the summaries, the view, the
1579
+ * fork's first own row and the avatar map (and its version) it was built from.
1580
+ */
1581
+ private forkChipCache;
1582
+ /** Increments each time {@link UserAvatarMap} is filled, so the chip map is built again with the new avatars. */
1583
+ private userAvatarMapVersion;
1584
+ /** The loaded rows split for the window view, and the rows shown from that split. */
1585
+ private displayCache;
1586
+ /** The layout and composer hint of the rows shown, with the inputs they were built from. */
1587
+ private layoutCache;
1588
+ /** The open view; Main when none was set. */
1589
+ get OpenView(): ConversationOpenView;
1590
+ /** The branch whose path the open view reads; null is Main. */
1591
+ get OpenViewBranchId(): string | null;
1592
+ /** The branch a composer of `conversationId` writes to: the open view's for the active conversation, else Main. */
1593
+ TargetBranchIdFor(conversationId: string | null | undefined): string | null;
1594
+ /**
1595
+ * The scope of what this chat area shows of a conversation: the open view's path for the active
1596
+ * conversation, Main for any other. Built from this chat area's own fork rows. While the rows of
1597
+ * the open fork are not loaded yet, returns Main and logs once per conversation and branch.
1598
+ */
1599
+ private openViewScope;
1600
+ /** The open view's scope, passed to the artifact viewer; null with no conversation. */
1601
+ get ArtifactViewerScope(): ConversationScope | null;
1602
+ /** The open view's scope, passed to the export modal; null with no conversation. */
1603
+ get ExportScope(): ConversationScope | null;
1604
+ /**
1605
+ * Answers the active composer's "which branch does this new message go to": the open fork, or null
1606
+ * for Main. In a draft fork, creates the fork first and opens it; undefined (the send stops) when
1607
+ * that fails. Bound to the composer's ResolveTargetBranch input, so it is one stable function.
1608
+ */
1609
+ readonly ResolveComposerBranch: () => Promise<string | null | undefined>;
1610
+ private resolveComposerBranch;
1611
+ /**
1612
+ * Keeps the fork rows loaded for a conversation as this chat area's rows, so
1613
+ * {@link openViewScope} can build the scope of the open fork.
1614
+ */
1615
+ private setBranchRows;
1459
1616
  /**
1460
1617
  * Voice session service — exposed to the template so the realtime "call mode"
1461
1618
  * overlay can be hosted here (it fills this conversation panel in place while
@@ -1490,10 +1647,15 @@ export declare class ConversationChatAreaComponent extends BaseAngularComponent
1490
1647
  private mentionAutocompleteService;
1491
1648
  constructor(agentStateService: AgentStateService, livenessDom: ConversationLivenessDomService, conversationAgentService: ConversationAgentService, activeTasks: ActiveTasksService, cdr: ChangeDetectorRef, artifactPermissionService: ArtifactPermissionService, attachmentService: ConversationAttachmentService, streamingService: ConversationStreamingService, confirmDialog: ConversationsDialogService, bridge: ConversationBridgeService, analyzeArtifactService: AnalyzeArtifactService, uiCommandHandler: UICommandHandlerService, interactiveFormApplyService: InteractiveFormApplyService, agentClientService: AgentClientService);
1492
1649
  /**
1493
- * Apply a form-role artifact's spec as an EntityFormOverride for the
1494
- * current user. The service handles the Create-vs-Modify decision (based
1495
- * on whether an Active override already exists), confirms via dialog,
1496
- * and surfaces success/failure via notification.
1650
+ * Apply a form-role artifact's spec for the current user — an EntityFormOverride for a
1651
+ * whole form, a form contribution for a panel. The service picks the path, handles the
1652
+ * Create-vs-Modify decision, confirms via dialog, and notifies.
1653
+ *
1654
+ * The agent context names the record form the user has open (`AdditionalContext.Form`,
1655
+ * published by the record tab). The service reads that form's full composition from the
1656
+ * `FormCompositionRegistry`, to check a panel's placement against the live form and detect
1657
+ * an installed contribution holding the same key. With no open form it asks the server for
1658
+ * the composition instead.
1497
1659
  */
1498
1660
  OnApplyFormRequested(event: {
1499
1661
  spec: unknown;
@@ -1544,6 +1706,24 @@ export declare class ConversationChatAreaComponent extends BaseAngularComponent
1544
1706
  */
1545
1707
  private getActiveMessageInputComponent;
1546
1708
  private loadMessages;
1709
+ /**
1710
+ * Reads the store's loaded window into the transcript: messages, user avatars, attachment
1711
+ * support and in-progress message IDs.
1712
+ */
1713
+ private applyWindowSnapshot;
1714
+ /**
1715
+ * The conversation's fork rows. An empty list when they cannot be read, so the transcript
1716
+ * still loads.
1717
+ */
1718
+ private loadBranchesOrEmpty;
1719
+ /** The conversation's fork rows; null when they cannot be read. */
1720
+ private loadBranchesOrNull;
1721
+ /**
1722
+ * Loads the fork rows and keeps them, starts the fork summary read, then counts the pins
1723
+ * in the scope of the open view's path. Keeps and counts nothing when a newer conversation
1724
+ * load started.
1725
+ */
1726
+ private loadBranchesAndPinCount;
1547
1727
  /**
1548
1728
  * Reads only the PIN COUNT on conversation open.
1549
1729
  *
@@ -1566,6 +1746,11 @@ export declare class ConversationChatAreaComponent extends BaseAngularComponent
1566
1746
  * from the panel with no error at all.
1567
1747
  */
1568
1748
  private hydratePinnedMessages;
1749
+ /**
1750
+ * Reads the pin count in the scope of the open view's path and, when the pins panel's rows
1751
+ * are loaded, reads those rows again too. A read that throws is logged and changes nothing.
1752
+ */
1753
+ private reloadPinsForScope;
1569
1754
  /**
1570
1755
  * Reshapes one detail's artifacts into the UI's `LazyArtifactInfo` lists, splitting the
1571
1756
  * system-only ones out. Shared by the full rebuild and the incremental prepend so the two
@@ -1625,6 +1810,18 @@ export declare class ConversationChatAreaComponent extends BaseAngularComponent
1625
1810
  * Restoring them here causes duplicate "Agent Processing..." entries.
1626
1811
  */
1627
1812
  private restoreActiveTasks;
1813
+ /**
1814
+ * A streamed delta landed on an in-progress message (MessageInputComponent.MessageStreamed).
1815
+ * Unlike {@link OnMessageSent} this does not replace the `messages` array: that rebuilt the
1816
+ * whole timeline, re-measured the mounted range and armed a scroll-to-bottom timer on every
1817
+ * delta, which is what made a streaming reply flash and jump. The bubble is refreshed in place
1818
+ * and the viewport is kept steady. With `ReadReplyFromTop` the turn lands at its top once, on
1819
+ * the first delta, and the reply grows beneath it; otherwise the bottom is pinned in the same
1820
+ * frame as the DOM update, so the growth and the scroll paint together.
1821
+ */
1822
+ OnMessageStreamed(message: MJConversationDetailEntity): void;
1823
+ /** Drops a landing still queued or retrying, so it cannot resolve after a newer one. */
1824
+ private cancelPendingLanding;
1628
1825
  OnMessageSent(message: MJConversationDetailEntity): Promise<void>;
1629
1826
  /** @deprecated Use {@link OnMessageSent}. */
1630
1827
  onMessageSent(message: MJConversationDetailEntity): Promise<void>;
@@ -1716,6 +1913,342 @@ export declare class ConversationChatAreaComponent extends BaseAngularComponent
1716
1913
  * Called when agent completion is detected to discover newly delegated agent messages.
1717
1914
  */
1718
1915
  private reloadMessagesForActiveConversation;
1916
+ /**
1917
+ * Shows `next` for the active conversation. Ends a voice session open for the conversation first (a
1918
+ * session keeps the path it started on), then reloads the window, fork rows, artifact viewer, agent
1919
+ * polling, peripherals and pins on the view's path (a draft reads its parent's path up to its
1920
+ * anchor). A view equal to the open one changes nothing. Ignored while another view change runs.
1921
+ * @returns true when `next` is shown; false when ignored, when there is no conversation, or when the reload failed.
1922
+ */
1923
+ private changeOpenView;
1924
+ /** Opens a fork of the active conversation in the full view. */
1925
+ OpenFork(branchId: string): Promise<boolean>;
1926
+ /** Shows Main of the active conversation. */
1927
+ BackToMain(): Promise<boolean>;
1928
+ /**
1929
+ * The fork the back button opens; null is Main. A fork's parent fork, or a draft's ParentBranchID
1930
+ * (the view it started from).
1931
+ */
1932
+ get BackForkId(): string | null;
1933
+ /** The label and aria-label of the back button: "Back to <parent fork>", or "Back to Main". */
1934
+ get BackLabel(): string;
1935
+ /** Goes up one level: opens the parent fork of the open fork or draft, else Main. */
1936
+ GoBack(): Promise<boolean>;
1937
+ /**
1938
+ * The breadcrumb of the header in a fork: the conversation, each ancestor fork, then the open fork ("New fork"
1939
+ * in a draft). Empty in Main. The same array until the view, the fork rows, the summaries or the
1940
+ * conversation name change.
1941
+ */
1942
+ get ForkBreadcrumbs(): ForkBreadcrumb[];
1943
+ /** The header path of the open fork or draft: the breadcrumb with the crumbs that collapse into an ellipsis. */
1944
+ get HeaderPath(): ForkHeaderPath;
1945
+ private headerPathCache;
1946
+ /** The path's ellipsis was chosen: opens the forks list, which shows the whole chain. */
1947
+ ShowWholePath(): void;
1948
+ /**
1949
+ * Escape in the header or the transcript of a fork view: closes the forks list when it is open, else goes
1950
+ * up one level ({@link GoBack}). Ignored when an inner control handled the key (the rename field, a
1951
+ * message editor, an open menu), in a text field, and in Main.
1952
+ */
1953
+ OnViewEscape(event: Event): void;
1954
+ /** A crumb was chosen: opens its fork, or Main for the conversation crumb. The last crumb opens nothing. */
1955
+ OpenCrumb(crumb: ForkBreadcrumb): Promise<boolean>;
1956
+ /** The fork rows this chat area knows: its loaded rows, then the rows of the fork summaries. */
1957
+ private knownForkRows;
1958
+ /** A fork's row among the loaded rows or the summaries; null when neither has it. */
1959
+ private knownForkRow;
1960
+ /** The display name of a fork: its summary's, else the default from its row, else "Fork". */
1961
+ private forkLabelOf;
1962
+ /** True when the open fork may be renamed: a saved fork (not a draft) of a conversation the person may write to. */
1963
+ get CanRenameFork(): boolean;
1964
+ /** True when the conversation may be renamed from the header: Main is open and the person may write to it. */
1965
+ get CanRenameConversation(): boolean;
1966
+ /** True when the header title may be renamed: the conversation in Main, the fork in a fork. */
1967
+ get CanRenameTitle(): boolean;
1968
+ /** The header title: the conversation name in Main, the open fork's display name in a fork or draft. */
1969
+ get HeaderTitle(): string;
1970
+ /** The label of the title rename button and name field. */
1971
+ get TitleRenameLabel(): string;
1972
+ /** Turns the header title into a text field holding its current name, and focuses it. */
1973
+ StartTitleRename(): void;
1974
+ /** Closes the title name field without saving (Escape) and puts focus back on the rename button. */
1975
+ CancelTitleRename(): void;
1976
+ /** Puts focus on the title rename button once the name field is gone, when the button is on the page. */
1977
+ private focusTitleRenameButton;
1978
+ /**
1979
+ * Saves the title name field (Enter, or leaving the field) to the conversation in Main or to the open
1980
+ * fork. With `restoreFocus` (Enter), focus goes back to the rename button.
1981
+ * @returns true when saved or unchanged; false when nothing was being renamed or the save failed.
1982
+ */
1983
+ SaveTitleRename(restoreFocus?: boolean): Promise<boolean>;
1984
+ /**
1985
+ * Saves the title field as the conversation's Name through the engine, then tells the host. A blank or
1986
+ * unchanged name saves nothing. Shows "Could not rename the conversation" when the save fails.
1987
+ */
1988
+ private saveConversationName;
1989
+ /**
1990
+ * Saves the title field as the fork's Name through the branch entity, then refreshes the fork summaries.
1991
+ * A blank name clears the Name so the default label shows; an unchanged name saves nothing. Shows
1992
+ * "Could not rename the fork" when the save fails.
1993
+ */
1994
+ private saveForkName;
1995
+ /**
1996
+ * Names a new Fork or Edit fork from its first message, in the background: runs the Name Conversation
1997
+ * prompt and saves the name only when the fork still has none, then refreshes the fork summaries. Off
1998
+ * when {@link AutoNameConversation} is false. Failures are logged; no notice.
1999
+ */
2000
+ private nameForkInBackground;
2001
+ /** Names the fork a draft's first send created from the first user message sent into it; once per fork. */
2002
+ private nameForkFromFirstSend;
2003
+ /**
2004
+ * Opens a new fork that replaces `message` (Fork from here): the full fork view with no own rows,
2005
+ * starting at the row before the message on its path (the same fork point as an edit). Nothing is
2006
+ * created until the first send. Ends a voice session of the conversation first, then puts the
2007
+ * message's text in the composer unless the composer holds unsent text.
2008
+ * @returns false for a message of another conversation, when the row before it cannot be found (after
2009
+ * a notice), or when the view change is ignored.
2010
+ */
2011
+ OpenDraftFork(message: MJConversationDetailEntity): Promise<boolean>;
2012
+ /** The loaded row at a fork point (its branch and Sequence); null when there is none or it is not loaded. */
2013
+ private loadedRowAt;
2014
+ /**
2015
+ * Puts `text` in the active composer, unless the composer holds unsent text or there is no text. When the
2016
+ * composer has not rendered yet after the view change, tries again shortly, while `stillOpen` holds.
2017
+ */
2018
+ private prefillComposer;
2019
+ /**
2020
+ * A chip was clicked: opens its fork. An original chip opens its view (a fork, or Main) positioned at
2021
+ * the replaced message, as a search hit does ({@link OpenMessage}).
2022
+ */
2023
+ OnForkOpenRequested(event: ForkChipOpenRequest): void;
2024
+ /** Opens or closes the forks list. Opening it closes the pinned messages panel. */
2025
+ ToggleForksPopover(): void;
2026
+ /** Closes the forks list and puts focus back on the header Forks button when it is on the page. */
2027
+ CloseForksPopover(): void;
2028
+ /** A row of the forks list was chosen: close the list and open that fork. */
2029
+ OnForkSelectedFromList(branchId: string): void;
2030
+ /**
2031
+ * Ends the voice session open for `conversationId`, if any, and waits for it. Shows a notice when it
2032
+ * ended. When ending fails, logs the error and returns, so the view change still goes on.
2033
+ */
2034
+ private endRealtimeSessionForViewChange;
2035
+ /**
2036
+ * Creates a fork, refreshes the fork summaries and opens the fork. Shows `failureText` when the
2037
+ * fork cannot be created, and `openFailureText` when it was created but could not be opened.
2038
+ * @returns the new fork's id when it is open; null otherwise.
2039
+ */
2040
+ private createForkAndOpen;
2041
+ /**
2042
+ * Creates the fork of a draft on its first send and opens it. A send in the same draft while that
2043
+ * runs gets the same fork. Returns the new fork's id, or undefined (with a notice) when it could
2044
+ * not be created or opened, or while another start action runs; undefined stops the send.
2045
+ */
2046
+ private materializeDraftFork;
2047
+ /**
2048
+ * Creates and opens the fork of a draft (Kind Fork, SourceDetailID the replaced message), with
2049
+ * {@link forkStartInFlight} set. Clears the draft's running creation when done; that runs after an
2050
+ * await, so after {@link materializeDraftFork} has recorded it.
2051
+ */
2052
+ private createDraftForkAndOpen;
2053
+ /** The fork row of a saved `MJ: Conversation Branches` entity. */
2054
+ private forkRowOf;
2055
+ /** Adds a fork row to the conversation's rows, so the scope of the fork resolves at once. */
2056
+ private addForkRow;
2057
+ /**
2058
+ * Fork from here: opens a new fork that replaces the message (the draft view, {@link OpenDraftFork}).
2059
+ * Nothing is created until the first send, which creates the fork through {@link ResolveComposerBranch};
2060
+ * with no name, the fork is named from that first message. Only for a user message the current person
2061
+ * wrote. Ignored while another start action runs and when the person may not fork ({@link CanFork}).
2062
+ */
2063
+ OnForkRequested(message: MJConversationDetailEntity): Promise<void>;
2064
+ /**
2065
+ * Saves an edit as a fork: creates an Edit fork at the row before the edited message,
2066
+ * opens it, then sends the edited text into it. The original message stays where it was. Ignored
2067
+ * while another start action runs and when the person may not fork ({@link CanFork}); makes no fork
2068
+ * while the composer cannot send.
2069
+ */
2070
+ OnEditResendRequested(event: {
2071
+ Message: MJConversationDetailEntity;
2072
+ NewText: string;
2073
+ }): Promise<void>;
2074
+ /**
2075
+ * Regenerates an answer as a fork: creates a Regenerate fork at the user message the
2076
+ * answer replied to, opens it, then runs the agent for that message again inside it. The first answer
2077
+ * stays where it was. Ignored while another start action runs; makes no fork while the composer cannot
2078
+ * send or when the user message is not in the loaded window. When the person may not fork
2079
+ * ({@link CanFork}), reruns the latest answer's turn in place instead ({@link InPlaceTurn}).
2080
+ */
2081
+ OnRegenerateRequested(aiMessage: MJConversationDetailEntity): Promise<void>;
2082
+ /**
2083
+ * The latest turn that in-place Edit and Regenerate may change: the window view's last own user message
2084
+ * and its answer. Null while the person may fork, in a draft, and when a fork depends on the turn's
2085
+ * answer rows. The same object until the rows, the window view, the fork rows or CanFork change.
2086
+ */
2087
+ get InPlaceTurn(): LatestTurn | null;
2088
+ /** The latest turn of the rows, or null when there is none or a fork depends on its answer rows. */
2089
+ private unblockedLatestTurn;
2090
+ /** "Save and resend": the message item saved the new text of the latest user message; reruns its turn in place. */
2091
+ OnResendInPlaceRequested(userMessage: MJConversationDetailEntity): Promise<void>;
2092
+ /**
2093
+ * Runs the turn of `userMessage` again in place: reads the fork rows fresh and refuses when a fork
2094
+ * depends on the turn's answer rows, hides those rows ({@link hideReplacedRows}), then reruns the agent
2095
+ * for the user message on its own branch. Shows a notice for each failure.
2096
+ */
2097
+ private rerunTurnInPlace;
2098
+ /**
2099
+ * Marks each row replaced, one save at a time (parallel saves race on the server's transaction
2100
+ * counter): `ReplacedAt` set and `HiddenToUser` true; the rows are kept for audit. Takes the saved rows
2101
+ * off the screen. Stops at the first failed save, puts back that row's values and returns false.
2102
+ */
2103
+ private hideReplacedRows;
2104
+ /**
2105
+ * The active composer when it can resend a message or rerun an agent now. Otherwise shows why
2106
+ * and returns null: no composer is mounted, it is read-only, or it is still sending (an agent
2107
+ * reply is running).
2108
+ */
2109
+ private composerReadyForResend;
2110
+ /**
2111
+ * Where an edit of `message`, or a fork that replaces it, starts; undefined after a notice: `Could not
2112
+ * locate the message before this one` when the row before it is unknown, `failureText` when reading
2113
+ * that row failed.
2114
+ */
2115
+ private editForkPointOrNotify;
2116
+ /**
2117
+ * Where an edit of `message`, or a fork that replaces it, starts: the row before it on the open path.
2118
+ * Loads one older row when the window does not hold it. Undefined when it cannot be determined.
2119
+ */
2120
+ private resolveEditForkPoint;
2121
+ /** The nearest earlier User row in the loaded window; null when the window holds none. */
2122
+ private findUserMessageBefore;
2123
+ /**
2124
+ * Loads the fork summaries of a conversation load. Keeps the earlier ones when the read fails, and
2125
+ * drops a result when a newer read's result is already shown.
2126
+ */
2127
+ private loadForkSummaries;
2128
+ /**
2129
+ * Reads the active conversation's fork rows again, keeps them, then reloads the fork
2130
+ * summaries. Keeps the earlier rows and the summaries when the rows cannot be read.
2131
+ */
2132
+ RefreshForkSummaries(): Promise<void>;
2133
+ /**
2134
+ * The chips of each message, from the fork summaries; the same map until the summaries, the window
2135
+ * view, the fork's first own row or the avatar map change. In a fork's full view, that fork's own
2136
+ * chip is left out (it would open the view already open), and its first own row shows the fork's
2137
+ * alternatives: the original view of the message it replaced and the other forks placed there.
2138
+ */
2139
+ get ForkChipMap(): ReadonlyMap<string, readonly MessageForkChip[]>;
2140
+ /** The first own row of a fork view when the loaded window reaches it (see {@link FirstOwnRowID}); null in Main and in a draft. */
2141
+ private firstOwnRowIdOf;
2142
+ /** Records that {@link UserAvatarMap} was filled, so the chip map is built again. */
2143
+ private markUserAvatarMapChanged;
2144
+ /** A person's entry in {@link UserAvatarMap}; ids compared without regard to case. */
2145
+ private knownUserAvatar;
2146
+ /** The avatar of a fork participant: a person's image or icon when known, an agent's logo or icon. */
2147
+ private forkChipAvatar;
2148
+ /** The view the loaded rows belong to; Main when none was set. */
2149
+ get WindowView(): ConversationOpenView;
2150
+ /**
2151
+ * The rows the message list shows for the window view; the same array until the rows or the view
2152
+ * change. Main shows every loaded row; a fork shows every inherited row, then its own rows; a draft
2153
+ * shows the rows up to its anchor.
2154
+ */
2155
+ get DisplayMessages(): MJConversationDetailEntity[];
2156
+ /** The loaded rows split for the window view, and the rows shown; rebuilt only when one of their inputs changes. */
2157
+ private displayState;
2158
+ /**
2159
+ * Puts `message` in place of the row with its id in the displayed rows and their split, keeping those
2160
+ * arrays. They are copies of `messages`, so an entity replaced in place there is replaced here too.
2161
+ */
2162
+ private replaceDisplayedRow;
2163
+ /** Puts `message` in place of the row with its id in `rows`; leaves `messages` itself alone. */
2164
+ private replaceRowIn;
2165
+ /** True when older rows remain above the loaded window of the open view's path, in every view. */
2166
+ get ListHasMoreAbove(): boolean;
2167
+ /** The summary of the open fork; null in Main, in a draft, or before the summaries load. */
2168
+ get OpenForkSummary(): ForkSummary | null;
2169
+ /** The summary of the fork a view shows; null for Main, a draft, or before the summaries load. */
2170
+ private forkSummaryOf;
2171
+ /** The title of the open fork: its display name, "New fork" for a draft. */
2172
+ get OpenViewTitle(): string;
2173
+ /** The kind of the open fork (a draft is a Fork). */
2174
+ get OpenViewKind(): ForkKind;
2175
+ /** The kind icon of the open fork. */
2176
+ get OpenViewIcon(): string;
2177
+ /** How the message list draws the rows shown; null in Main. */
2178
+ get ForkLayout(): ForkViewLayout | null;
2179
+ /** The composer placeholder of a conversation's composer: "Message this fork" in a fork or draft of the active conversation. */
2180
+ ComposerPlaceholderFor(conversationId: string | null | undefined): string;
2181
+ /**
2182
+ * The agent of the last shown message when it is a reply the user stopped (null when its name
2183
+ * is unknown); undefined when the last message is anything else. Any message sent now resumes
2184
+ * that run, so the placeholder says so.
2185
+ */
2186
+ private stoppedLastReplyAgent;
2187
+ /** The hint under the composer while a fork or draft window is shown; null in Main. */
2188
+ get ComposerHint(): string | null;
2189
+ /** The layout of the rows shown and the composer hint; rebuilt only when the rows, the window view or the summaries change. */
2190
+ private layoutState;
2191
+ /** The composer hint of a fork or draft view; reads the anchor row only when the summary has no anchor time. */
2192
+ private composerHintFor;
2193
+ /**
2194
+ * The fork marker text of a fork or draft view. The "from" part names the author of the replaced
2195
+ * message (the fork's SourceDetailID) when the fork has one, else the anchor's author.
2196
+ */
2197
+ private forkMarkerText;
2198
+ /**
2199
+ * The author a fork's marker names: with a source message, the summary's source author, else that row's
2200
+ * author when it is loaded; with none, the summary's anchor author, else the loaded anchor row's.
2201
+ */
2202
+ private forkFromAuthorOf;
2203
+ /** The fork row of a fork view among this chat area's fork rows; null for another view or when it is not loaded. */
2204
+ private forkRowOfView;
2205
+ /** The time of a view's anchor row; null when it is not loaded. */
2206
+ private anchorTimeOf;
2207
+ /** The author of a view's anchor row; null when it is not loaded. */
2208
+ private anchorAuthorOf;
2209
+ /** The author of a loaded row; null when the row is not loaded. */
2210
+ private loadedAuthorOf;
2211
+ /** The author of a row: the agent of an agent row, else the person. */
2212
+ private rowAuthorOf;
2213
+ /**
2214
+ * The anchor of a view among the loaded rows: a draft's anchor row when it is loaded, else the view's
2215
+ * last inherited row.
2216
+ */
2217
+ private anchorRowOf;
2218
+ /** A short date and time for fork text, in the person's locale. */
2219
+ private formatForkTime;
2220
+ /** Refreshes the fork summaries once, shortly after a burst of fork rows. */
2221
+ private scheduleForkSummaryRefresh;
2222
+ /**
2223
+ * Refreshes the fork summaries soon when `row` is a fork row, then tells whether the row belongs
2224
+ * on screen in the open view. A row written in another view (a turn started in Main while a fork
2225
+ * is open) does not.
2226
+ */
2227
+ private acceptRowForOpenView;
2228
+ /**
2229
+ * Has the open artifact viewer load again in the open view's scope; it reads its `Scope` input
2230
+ * only when it loads. Asks for the selected version (0 asks for the newest); a version that
2231
+ * is not in the scope shows the newest one with a notice. Does nothing while the pane is closed.
2232
+ */
2233
+ private refreshArtifactViewerForScope;
2234
+ /**
2235
+ * Loads the window of the open view into the store: the newest page of the view's path; older pages
2236
+ * load as the person scrolls up. A draft's path is its parent's, and its first page ends at its
2237
+ * anchor; a draft with no anchor inherits nothing, so its window is empty.
2238
+ */
2239
+ private loadWindowForOpenView;
2240
+ /**
2241
+ * Reloads the window of the open view's path (see {@link loadWindowForOpenView}), then the fork
2242
+ * rows, the open artifact viewer, the agent runs, artifacts and ratings, and the pins in the scope
2243
+ * of the open view's path. The earlier fork rows stay when the rows cannot be read. The pin count
2244
+ * and the loaded pins keep their earlier values until that read lands. Restarts the agent-run poll
2245
+ * in the new scope. Stops when a newer view reload or conversation load starts; the newer load
2246
+ * reads the window, fork rows and pins again.
2247
+ *
2248
+ * @returns true when the window and peripherals loaded on the open view's path; false when there
2249
+ * is no conversation, a newer load replaced this one, the window read failed, or the reload failed.
2250
+ */
2251
+ private reloadWindowForView;
1719
2252
  /** Detail ids whose completion this instance has already applied. A live callback and the replay window can both deliver one finish. */
1720
2253
  private handledCompletionIds?;
1721
2254
  /**
@@ -1911,6 +2444,14 @@ export declare class ConversationChatAreaComponent extends BaseAngularComponent
1911
2444
  get isReadOnlyView(): boolean;
1912
2445
  /** Read-only for any reason: the host said so, or the conversation is shared with View access. */
1913
2446
  get EffectiveReadOnly(): boolean;
2447
+ /**
2448
+ * True when this person may start forks in the open conversation: holds `Conversations: Fork`, has not
2449
+ * switched forking off in My Profile, and may write. When false, no fork action is offered and Edit and
2450
+ * Regenerate change the latest turn in place.
2451
+ */
2452
+ get CanFork(): boolean;
2453
+ /** The person's stored forking setting; undefined when there is none or the settings cannot be read. */
2454
+ private forkingSettingValue;
1914
2455
  /**
1915
2456
  * `true` when the current user is allowed to create new shares on this
1916
2457
  * conversation: the owner, or a user with an Owner-level grant. Uses the same
@@ -1919,18 +2460,6 @@ export declare class ConversationChatAreaComponent extends BaseAngularComponent
1919
2460
  get CanShareConversation(): boolean;
1920
2461
  /** @deprecated Use {@link CanShareConversation}. */
1921
2462
  get canShareConversation(): boolean;
1922
- OnReplyInThread(message: MJConversationDetailEntity): void;
1923
- /** @deprecated Use {@link OnReplyInThread}. */
1924
- onReplyInThread(message: MJConversationDetailEntity): void;
1925
- OnViewThread(message: MJConversationDetailEntity): void;
1926
- /** @deprecated Use {@link OnViewThread}. */
1927
- onViewThread(message: MJConversationDetailEntity): void;
1928
- OnLocalThreadClosed(): void;
1929
- /** @deprecated Use {@link OnLocalThreadClosed}. */
1930
- onLocalThreadClosed(): void;
1931
- OnThreadReplyAdded(reply: MJConversationDetailEntity): void;
1932
- /** @deprecated Use {@link OnThreadReplyAdded}. */
1933
- onThreadReplyAdded(reply: MJConversationDetailEntity): void;
1934
2463
  OnToggleAgentPanel(): void;
1935
2464
  /** @deprecated Use {@link OnToggleAgentPanel}. */
1936
2465
  onToggleAgentPanel(): void;
@@ -1951,15 +2480,38 @@ export declare class ConversationChatAreaComponent extends BaseAngularComponent
1951
2480
  /** @deprecated Use {@link OnJumpToMessage}. */
1952
2481
  onJumpToMessage(messageId: string): Promise<void>;
1953
2482
  /**
1954
- * Pages older history until `messageId` falls inside the loaded window.
2483
+ * Opens a message, such as a search hit, in the active conversation: waits for the
2484
+ * conversation's load to end, opens the hit's fork (a Main hit opens Main) when it is not the
2485
+ * open view, pages older history until the window holds `sequence`, then scrolls to the row and
2486
+ * highlights it for 2 s.
2487
+ *
2488
+ * @param conversationId The conversation of the message. The caller activates it first.
2489
+ * @param branchId The message's fork; null is Main. Compared without case.
2490
+ * @param sequence The message's sequence in its conversation.
2491
+ * @returns true when the row was found and scrolled to; false when the conversation is not the
2492
+ * active one, the view change was ignored or failed, or the row is not on the view's path.
2493
+ */
2494
+ OpenMessage(conversationId: string, branchId: string | null, sequence: number): Promise<boolean>;
2495
+ /**
2496
+ * Waits until the load of `conversationId` has ended. False when another conversation
2497
+ * becomes active first or the component is destroyed.
2498
+ */
2499
+ private waitForConversationLoad;
2500
+ /** Pages older history until the pinned message `messageId` falls inside the loaded window. */
2501
+ private loadUntilMessageIsWindowed;
2502
+ /**
2503
+ * Pages older history until the loaded window reaches back to `sequence`.
1955
2504
  *
1956
- * Deterministic rather than heuristic: a pin carries its own `Sequence`, so the stop
2505
+ * Deterministic rather than heuristic: the target's `Sequence` is known, so the stop
1957
2506
  * condition is simply "the window now reaches at least that far back" — no equivalent of
1958
2507
  * the date jump's `NeedsOlder` probing is needed. Bounded by the same page cap, for the same
1959
2508
  * reason: an unbounded walk back is the thing windowing exists to avoid.
1960
2509
  */
1961
- private loadUntilMessageIsWindowed;
1962
- /** Flashes the beacon on a message once its scroll has settled. */
2510
+ private loadUntilSequenceIsWindowed;
2511
+ /**
2512
+ * Adds `cssClass` to a message for `durationMs` once its scroll has settled. Defaults to the
2513
+ * pin beacon.
2514
+ */
1963
2515
  private beaconMessage;
1964
2516
  /**
1965
2517
  * Unpins a message from the pins panel — saves to DB and patches the cache.
@@ -1983,9 +2535,17 @@ export declare class ConversationChatAreaComponent extends BaseAngularComponent
1983
2535
  OnDeleteMessage(message: MJConversationDetailEntity): Promise<void>;
1984
2536
  /** @deprecated Use {@link OnDeleteMessage}. */
1985
2537
  onDeleteMessage(message: MJConversationDetailEntity): Promise<void>;
2538
+ /** @deprecated Use {@link OnRegenerateRequested}. */
1986
2539
  OnRetryMessage(message: MJConversationDetailEntity): void;
1987
- /** @deprecated Use {@link OnRetryMessage}. */
2540
+ /** @deprecated Use {@link OnRegenerateRequested}. */
1988
2541
  onRetryMessage(message: MJConversationDetailEntity): void;
2542
+ /**
2543
+ * Stop the agent run behind an in-progress AI reply. Uses the run already mapped to the
2544
+ * reply when there is one; otherwise looks it up by the reply's detail id, since the run row
2545
+ * appears a moment after the placeholder. The run's own completion event then flows through
2546
+ * the normal path and the message leaves In-Progress on its own.
2547
+ */
2548
+ OnStopMessage(message: MJConversationDetailEntity): Promise<void>;
1989
2549
  /**
1990
2550
  * Handle attachment click - opens the image viewer for images
1991
2551
  */
@@ -2213,12 +2773,19 @@ export declare class ConversationChatAreaComponent extends BaseAngularComponent
2213
2773
  * that need to programmatically dismiss a review.
2214
2774
  */
2215
2775
  ClearRealtimeSessionReview(): void;
2776
+ /**
2777
+ * True when the session review may offer "Start live session": not while a draft fork is open,
2778
+ * the same rule as the composer's voice control (a session started there would run on the
2779
+ * draft's parent path).
2780
+ */
2781
+ get CanStartVoiceFromReview(): boolean;
2216
2782
  /**
2217
2783
  * Review mode's "Start live session": RESUMES the reviewed session as a new live call
2218
2784
  * through the SAME start path the composer's mic uses, chaining `lastSessionId` so the
2219
2785
  * server restores saved channel states (e.g. the whiteboard) via `PriorChannelStatesJson`.
2220
2786
  * The start flips `Active$` synchronously, so clearing the review immediately after
2221
- * never unhosts the overlay mid-transition.
2787
+ * never unhosts the overlay mid-transition. Starts nothing, and keeps the review, while
2788
+ * {@link CanStartVoiceFromReview} is false.
2222
2789
  */
2223
2790
  OnReviewStartLive(request: RealtimeStartLiveRequest): Promise<void>;
2224
2791
  /** @deprecated Use {@link OnReviewStartLive}. */
@@ -2420,6 +2987,16 @@ export declare class ConversationChatAreaComponent extends BaseAngularComponent
2420
2987
  */
2421
2988
  private followTranscript;
2422
2989
  private isSettled;
2990
+ /**
2991
+ * Where the viewport goes on a streamed delta, in the same frame as the DOM change so growth and
2992
+ * scroll paint together. Without ReadReplyFromTop, or for a turn this component never saw open
2993
+ * (a reload mid-stream), a reader at the bottom is followed there. With it, the turn's top is
2994
+ * pinned as high as the content allows on every frame: the question rises to the top as the
2995
+ * reply grows beneath it, and once the reader scrolls away the pin is released for the turn.
2996
+ */
2997
+ private followStream;
2998
+ /** The stream pin's target and clearance for this turn, resolved once and kept while the node is in the DOM. */
2999
+ private resolveStreamPin;
2423
3000
  /**
2424
3001
  * readReplyFromTop: once the reply has rendered, scrolls the turn so its first message
2425
3002
  * sits at the top of the pane — but only if the turn is taller than the pane. A turn that
@@ -2549,6 +3126,6 @@ export declare class ConversationChatAreaComponent extends BaseAngularComponent
2549
3126
  conversationId: string;
2550
3127
  }): void;
2551
3128
  static ɵfac: i0.ɵɵFactoryDeclaration<ConversationChatAreaComponent, never>;
2552
- static ɵcmp: i0.ɵɵComponentDeclaration<ConversationChatAreaComponent, "mj-conversation-chat-area", never, { "EnvironmentId": { "alias": "EnvironmentId"; "required": false; }; "environmentId": { "alias": "environmentId"; "required": false; }; "CurrentUser": { "alias": "CurrentUser"; "required": false; }; "currentUser": { "alias": "currentUser"; "required": false; }; "ConversationId": { "alias": "ConversationId"; "required": false; }; "conversationId": { "alias": "conversationId"; "required": false; }; "Conversation": { "alias": "Conversation"; "required": false; }; "conversation": { "alias": "conversation"; "required": false; }; "ThreadId": { "alias": "ThreadId"; "required": false; }; "threadId": { "alias": "threadId"; "required": false; }; "SuppressNewConversationEmptyState": { "alias": "SuppressNewConversationEmptyState"; "required": false; }; "suppressNewConversationEmptyState": { "alias": "suppressNewConversationEmptyState"; "required": false; }; "AllowMentions": { "alias": "AllowMentions"; "required": false; }; "allowMentions": { "alias": "allowMentions"; "required": false; }; "AllowAgentMentions": { "alias": "AllowAgentMentions"; "required": false; }; "allowAgentMentions": { "alias": "allowAgentMentions"; "required": false; }; "AllowEntityMentions": { "alias": "AllowEntityMentions"; "required": false; }; "allowEntityMentions": { "alias": "allowEntityMentions"; "required": false; }; "AllowSkillCommands": { "alias": "AllowSkillCommands"; "required": false; }; "allowSkillCommands": { "alias": "allowSkillCommands"; "required": false; }; "AllowAttachments": { "alias": "AllowAttachments"; "required": false; }; "allowAttachments": { "alias": "allowAttachments"; "required": false; }; "AllowPlanMode": { "alias": "AllowPlanMode"; "required": false; }; "allowPlanMode": { "alias": "allowPlanMode"; "required": false; }; "AllowRealtime": { "alias": "AllowRealtime"; "required": false; }; "allowRealtime": { "alias": "allowRealtime"; "required": false; }; "ShowEmptyFill": { "alias": "ShowEmptyFill"; "required": false; }; "showEmptyFill": { "alias": "showEmptyFill"; "required": false; }; "ShowLoadingState": { "alias": "ShowLoadingState"; "required": false; }; "showLoadingState": { "alias": "showLoadingState"; "required": false; }; "ReadReplyFromTop": { "alias": "ReadReplyFromTop"; "required": false; }; "readReplyFromTop": { "alias": "readReplyFromTop"; "required": false; }; "ShowAgentRunDetails": { "alias": "ShowAgentRunDetails"; "required": false; }; "showAgentRunDetails": { "alias": "showAgentRunDetails"; "required": false; }; "ShowReactions": { "alias": "ShowReactions"; "required": false; }; "showReactions": { "alias": "showReactions"; "required": false; }; "ShowMessageRating": { "alias": "ShowMessageRating"; "required": false; }; "showMessageRating": { "alias": "showMessageRating"; "required": false; }; "AllowPinning": { "alias": "AllowPinning"; "required": false; }; "allowPinning": { "alias": "allowPinning"; "required": false; }; "AllowMessageEdit": { "alias": "AllowMessageEdit"; "required": false; }; "allowMessageEdit": { "alias": "allowMessageEdit"; "required": false; }; "AllowMessageDelete": { "alias": "AllowMessageDelete"; "required": false; }; "allowMessageDelete": { "alias": "allowMessageDelete"; "required": false; }; "ReadOnly": { "alias": "ReadOnly"; "required": false; }; "ReadOnlyMessage": { "alias": "ReadOnlyMessage"; "required": false; }; "ShowSuggestedPrompts": { "alias": "ShowSuggestedPrompts"; "required": false; }; "showSuggestedPrompts": { "alias": "showSuggestedPrompts"; "required": false; }; "ShowDateNavigation": { "alias": "ShowDateNavigation"; "required": false; }; "showDateNavigation": { "alias": "showDateNavigation"; "required": false; }; "AssistantDisplayName": { "alias": "AssistantDisplayName"; "required": false; }; "assistantDisplayName": { "alias": "assistantDisplayName"; "required": false; }; "AssistantAvatarUrl": { "alias": "AssistantAvatarUrl"; "required": false; }; "assistantAvatarUrl": { "alias": "assistantAvatarUrl"; "required": false; }; "IsNewConversation": { "alias": "IsNewConversation"; "required": false; }; "isNewConversation": { "alias": "isNewConversation"; "required": false; }; "PendingMessage": { "alias": "PendingMessage"; "required": false; }; "pendingMessage": { "alias": "pendingMessage"; "required": false; }; "PendingMessageConversationId": { "alias": "PendingMessageConversationId"; "required": false; }; "pendingMessageConversationId": { "alias": "pendingMessageConversationId"; "required": false; }; "PendingAttachments": { "alias": "PendingAttachments"; "required": false; }; "pendingAttachments": { "alias": "pendingAttachments"; "required": false; }; "PendingArtifactId": { "alias": "PendingArtifactId"; "required": false; }; "pendingArtifactId": { "alias": "pendingArtifactId"; "required": false; }; "PendingArtifactVersionNumber": { "alias": "PendingArtifactVersionNumber"; "required": false; }; "pendingArtifactVersionNumber": { "alias": "pendingArtifactVersionNumber"; "required": false; }; "PendingArtifactConversationId": { "alias": "PendingArtifactConversationId"; "required": false; }; "pendingArtifactConversationId": { "alias": "pendingArtifactConversationId"; "required": false; }; "OverlayMode": { "alias": "OverlayMode"; "required": false; }; "overlayMode": { "alias": "overlayMode"; "required": false; }; "ShowExportButton": { "alias": "ShowExportButton"; "required": false; }; "showExportButton": { "alias": "showExportButton"; "required": false; }; "ExportButtonLabel": { "alias": "ExportButtonLabel"; "required": false; }; "exportButtonLabel": { "alias": "exportButtonLabel"; "required": false; }; "ExportButtonIcon": { "alias": "ExportButtonIcon"; "required": false; }; "exportButtonIcon": { "alias": "exportButtonIcon"; "required": false; }; "ExportBranding": { "alias": "ExportBranding"; "required": false; }; "exportBranding": { "alias": "exportBranding"; "required": false; }; "ShowShareButton": { "alias": "ShowShareButton"; "required": false; }; "showShareButton": { "alias": "showShareButton"; "required": false; }; "ShowArtifactIndicator": { "alias": "ShowArtifactIndicator"; "required": false; }; "showArtifactIndicator": { "alias": "showArtifactIndicator"; "required": false; }; "AppContext": { "alias": "AppContext"; "required": false; }; "appContext": { "alias": "appContext"; "required": false; }; "DefaultAgentId": { "alias": "DefaultAgentId"; "required": false; }; "defaultAgentId": { "alias": "defaultAgentId"; "required": false; }; "AgentReplyMode": { "alias": "AgentReplyMode"; "required": false; }; "AllowedAgentIDs": { "alias": "AllowedAgentIDs"; "required": false; }; "MentionPeople": { "alias": "MentionPeople"; "required": false; }; "AgentHistoryFrom": { "alias": "AgentHistoryFrom"; "required": false; }; "AgentTurnHandler": { "alias": "AgentTurnHandler"; "required": false; }; "AutoNameConversation": { "alias": "AutoNameConversation"; "required": false; }; "EnableDecisionRouting": { "alias": "EnableDecisionRouting"; "required": false; }; "ApplicationScope": { "alias": "ApplicationScope"; "required": false; }; "applicationScope": { "alias": "applicationScope"; "required": false; }; "ApplicationId": { "alias": "ApplicationId"; "required": false; }; "applicationId": { "alias": "applicationId"; "required": false; }; "LinkedEntityId": { "alias": "LinkedEntityId"; "required": false; }; "linkedEntityId": { "alias": "linkedEntityId"; "required": false; }; "LinkedRecordId": { "alias": "LinkedRecordId"; "required": false; }; "linkedRecordId": { "alias": "linkedRecordId"; "required": false; }; "ShowAgentPicker": { "alias": "ShowAgentPicker"; "required": false; }; "showAgentPicker": { "alias": "showAgentPicker"; "required": false; }; "ShowAgentModePicker": { "alias": "ShowAgentModePicker"; "required": false; }; "showAgentModePicker": { "alias": "showAgentModePicker"; "required": false; }; "EmptyStateGreeting": { "alias": "EmptyStateGreeting"; "required": false; }; "emptyStateGreeting": { "alias": "emptyStateGreeting"; "required": false; }; "ShowSidebarToggle": { "alias": "ShowSidebarToggle"; "required": false; }; "showSidebarToggle": { "alias": "showSidebarToggle"; "required": false; }; "ShowAgentCharacter": { "alias": "ShowAgentCharacter"; "required": false; }; "showAgentCharacter": { "alias": "showAgentCharacter"; "required": false; }; "AgentCharacterConfig": { "alias": "AgentCharacterConfig"; "required": false; }; "agentCharacterConfig": { "alias": "agentCharacterConfig"; "required": false; }; "EmptyStateConfig": { "alias": "EmptyStateConfig"; "required": false; }; "emptyStateConfig": { "alias": "emptyStateConfig"; "required": false; }; "ShowDemonstrationSurface": { "alias": "ShowDemonstrationSurface"; "required": false; }; "showDemonstrationSurface": { "alias": "showDemonstrationSurface"; "required": false; }; "DemonstrationSurfaceContent": { "alias": "DemonstrationSurfaceContent"; "required": false; }; "demonstrationSurfaceContent": { "alias": "demonstrationSurfaceContent"; "required": false; }; "ComposerDraft": { "alias": "ComposerDraft"; "required": false; }; "composerDraft": { "alias": "composerDraft"; "required": false; }; "ComposerAgentMention": { "alias": "ComposerAgentMention"; "required": false; }; "composerAgentMention": { "alias": "composerAgentMention"; "required": false; }; }, { "BeforeAgentTurn": "BeforeAgentTurn"; "beforeAgentTurn": "beforeAgentTurn"; "AfterAgentTurn": "AfterAgentTurn"; "afterAgentTurn": "afterAgentTurn"; "BeforeToolInvoked": "BeforeToolInvoked"; "beforeToolInvoked": "beforeToolInvoked"; "AfterToolInvoked": "AfterToolInvoked"; "afterToolInvoked": "afterToolInvoked"; "BeforeResponseFormSubmitted": "BeforeResponseFormSubmitted"; "beforeResponseFormSubmitted": "beforeResponseFormSubmitted"; "AfterResponseFormSubmitted": "AfterResponseFormSubmitted"; "afterResponseFormSubmitted": "afterResponseFormSubmitted"; "SessionStarted": "SessionStarted"; "sessionStarted": "sessionStarted"; "SessionChannelStateChanged": "SessionChannelStateChanged"; "sessionChannelStateChanged": "sessionChannelStateChanged"; "SessionEnded": "SessionEnded"; "sessionEnded": "sessionEnded"; "ConversationRenamed": "ConversationRenamed"; "conversationRenamed": "conversationRenamed"; "OpenEntityRecord": "OpenEntityRecord"; "openEntityRecord": "openEntityRecord"; "RealtimeConversationReady": "RealtimeConversationReady"; "realtimeConversationReady": "realtimeConversationReady"; "navigationRequest": "navigationRequest"; "TaskClicked": "TaskClicked"; "taskClicked": "taskClicked"; "ArtifactLinkClicked": "ArtifactLinkClicked"; "artifactLinkClicked": "artifactLinkClicked"; "SidebarToggleClicked": "SidebarToggleClicked"; "sidebarToggleClicked": "sidebarToggleClicked"; "ConversationCreated": "ConversationCreated"; "conversationCreated": "conversationCreated"; "ThreadOpened": "ThreadOpened"; "threadOpened": "threadOpened"; "ThreadClosed": "ThreadClosed"; "threadClosed": "threadClosed"; "PendingArtifactConsumed": "PendingArtifactConsumed"; "pendingArtifactConsumed": "pendingArtifactConsumed"; "PendingMessageConsumed": "PendingMessageConsumed"; "pendingMessageConsumed": "pendingMessageConsumed"; "PendingMessageRequested": "PendingMessageRequested"; "pendingMessageRequested": "pendingMessageRequested"; "ComposerDraftConsumed": "ComposerDraftConsumed"; "composerDraftConsumed": "composerDraftConsumed"; "ComposerAgentMentionConsumed": "ComposerAgentMentionConsumed"; "composerAgentMentionConsumed": "composerAgentMentionConsumed"; }, ["chatSlotChildren"], never, false, never>;
3129
+ static ɵcmp: i0.ɵɵComponentDeclaration<ConversationChatAreaComponent, "mj-conversation-chat-area", never, { "EnvironmentId": { "alias": "EnvironmentId"; "required": false; }; "environmentId": { "alias": "environmentId"; "required": false; }; "CurrentUser": { "alias": "CurrentUser"; "required": false; }; "currentUser": { "alias": "currentUser"; "required": false; }; "ConversationId": { "alias": "ConversationId"; "required": false; }; "conversationId": { "alias": "conversationId"; "required": false; }; "Conversation": { "alias": "Conversation"; "required": false; }; "conversation": { "alias": "conversation"; "required": false; }; "SuppressNewConversationEmptyState": { "alias": "SuppressNewConversationEmptyState"; "required": false; }; "suppressNewConversationEmptyState": { "alias": "suppressNewConversationEmptyState"; "required": false; }; "AllowMentions": { "alias": "AllowMentions"; "required": false; }; "allowMentions": { "alias": "allowMentions"; "required": false; }; "AllowAgentMentions": { "alias": "AllowAgentMentions"; "required": false; }; "allowAgentMentions": { "alias": "allowAgentMentions"; "required": false; }; "AllowEntityMentions": { "alias": "AllowEntityMentions"; "required": false; }; "allowEntityMentions": { "alias": "allowEntityMentions"; "required": false; }; "AllowSkillCommands": { "alias": "AllowSkillCommands"; "required": false; }; "allowSkillCommands": { "alias": "allowSkillCommands"; "required": false; }; "AllowAttachments": { "alias": "AllowAttachments"; "required": false; }; "allowAttachments": { "alias": "allowAttachments"; "required": false; }; "AllowPlanMode": { "alias": "AllowPlanMode"; "required": false; }; "allowPlanMode": { "alias": "allowPlanMode"; "required": false; }; "AllowRealtime": { "alias": "AllowRealtime"; "required": false; }; "allowRealtime": { "alias": "allowRealtime"; "required": false; }; "ShowEmptyFill": { "alias": "ShowEmptyFill"; "required": false; }; "showEmptyFill": { "alias": "showEmptyFill"; "required": false; }; "ShowLoadingState": { "alias": "ShowLoadingState"; "required": false; }; "showLoadingState": { "alias": "showLoadingState"; "required": false; }; "ReadReplyFromTop": { "alias": "ReadReplyFromTop"; "required": false; }; "readReplyFromTop": { "alias": "readReplyFromTop"; "required": false; }; "ShowAgentRunDetails": { "alias": "ShowAgentRunDetails"; "required": false; }; "showAgentRunDetails": { "alias": "showAgentRunDetails"; "required": false; }; "ShowReactions": { "alias": "ShowReactions"; "required": false; }; "showReactions": { "alias": "showReactions"; "required": false; }; "ShowMessageRating": { "alias": "ShowMessageRating"; "required": false; }; "showMessageRating": { "alias": "showMessageRating"; "required": false; }; "AllowPinning": { "alias": "AllowPinning"; "required": false; }; "allowPinning": { "alias": "allowPinning"; "required": false; }; "AllowMessageEdit": { "alias": "AllowMessageEdit"; "required": false; }; "allowMessageEdit": { "alias": "allowMessageEdit"; "required": false; }; "AllowMessageDelete": { "alias": "AllowMessageDelete"; "required": false; }; "allowMessageDelete": { "alias": "allowMessageDelete"; "required": false; }; "ReadOnly": { "alias": "ReadOnly"; "required": false; }; "ReadOnlyMessage": { "alias": "ReadOnlyMessage"; "required": false; }; "ShowSuggestedPrompts": { "alias": "ShowSuggestedPrompts"; "required": false; }; "showSuggestedPrompts": { "alias": "showSuggestedPrompts"; "required": false; }; "ShowDateNavigation": { "alias": "ShowDateNavigation"; "required": false; }; "showDateNavigation": { "alias": "showDateNavigation"; "required": false; }; "AssistantDisplayName": { "alias": "AssistantDisplayName"; "required": false; }; "assistantDisplayName": { "alias": "assistantDisplayName"; "required": false; }; "AssistantAvatarUrl": { "alias": "AssistantAvatarUrl"; "required": false; }; "assistantAvatarUrl": { "alias": "assistantAvatarUrl"; "required": false; }; "IsNewConversation": { "alias": "IsNewConversation"; "required": false; }; "isNewConversation": { "alias": "isNewConversation"; "required": false; }; "PendingMessage": { "alias": "PendingMessage"; "required": false; }; "pendingMessage": { "alias": "pendingMessage"; "required": false; }; "PendingMessageConversationId": { "alias": "PendingMessageConversationId"; "required": false; }; "pendingMessageConversationId": { "alias": "pendingMessageConversationId"; "required": false; }; "PendingAttachments": { "alias": "PendingAttachments"; "required": false; }; "pendingAttachments": { "alias": "pendingAttachments"; "required": false; }; "PendingArtifactId": { "alias": "PendingArtifactId"; "required": false; }; "pendingArtifactId": { "alias": "pendingArtifactId"; "required": false; }; "PendingArtifactVersionNumber": { "alias": "PendingArtifactVersionNumber"; "required": false; }; "pendingArtifactVersionNumber": { "alias": "pendingArtifactVersionNumber"; "required": false; }; "PendingArtifactConversationId": { "alias": "PendingArtifactConversationId"; "required": false; }; "pendingArtifactConversationId": { "alias": "pendingArtifactConversationId"; "required": false; }; "OverlayMode": { "alias": "OverlayMode"; "required": false; }; "overlayMode": { "alias": "overlayMode"; "required": false; }; "ShowExportButton": { "alias": "ShowExportButton"; "required": false; }; "showExportButton": { "alias": "showExportButton"; "required": false; }; "ExportButtonLabel": { "alias": "ExportButtonLabel"; "required": false; }; "exportButtonLabel": { "alias": "exportButtonLabel"; "required": false; }; "ExportButtonIcon": { "alias": "ExportButtonIcon"; "required": false; }; "exportButtonIcon": { "alias": "exportButtonIcon"; "required": false; }; "ExportBranding": { "alias": "ExportBranding"; "required": false; }; "exportBranding": { "alias": "exportBranding"; "required": false; }; "ShowShareButton": { "alias": "ShowShareButton"; "required": false; }; "showShareButton": { "alias": "showShareButton"; "required": false; }; "ShowArtifactIndicator": { "alias": "ShowArtifactIndicator"; "required": false; }; "showArtifactIndicator": { "alias": "showArtifactIndicator"; "required": false; }; "AppContext": { "alias": "AppContext"; "required": false; }; "appContext": { "alias": "appContext"; "required": false; }; "DefaultAgentId": { "alias": "DefaultAgentId"; "required": false; }; "defaultAgentId": { "alias": "defaultAgentId"; "required": false; }; "AgentReplyMode": { "alias": "AgentReplyMode"; "required": false; }; "AllowedAgentIDs": { "alias": "AllowedAgentIDs"; "required": false; }; "MentionPeople": { "alias": "MentionPeople"; "required": false; }; "AgentHistoryFrom": { "alias": "AgentHistoryFrom"; "required": false; }; "AgentTurnHandler": { "alias": "AgentTurnHandler"; "required": false; }; "AutoNameConversation": { "alias": "AutoNameConversation"; "required": false; }; "EnableDecisionRouting": { "alias": "EnableDecisionRouting"; "required": false; }; "ApplicationScope": { "alias": "ApplicationScope"; "required": false; }; "applicationScope": { "alias": "applicationScope"; "required": false; }; "ApplicationId": { "alias": "ApplicationId"; "required": false; }; "applicationId": { "alias": "applicationId"; "required": false; }; "LinkedEntityId": { "alias": "LinkedEntityId"; "required": false; }; "linkedEntityId": { "alias": "linkedEntityId"; "required": false; }; "LinkedRecordId": { "alias": "LinkedRecordId"; "required": false; }; "linkedRecordId": { "alias": "linkedRecordId"; "required": false; }; "ShowAgentPicker": { "alias": "ShowAgentPicker"; "required": false; }; "showAgentPicker": { "alias": "showAgentPicker"; "required": false; }; "ShowAgentModePicker": { "alias": "ShowAgentModePicker"; "required": false; }; "showAgentModePicker": { "alias": "showAgentModePicker"; "required": false; }; "EmptyStateGreeting": { "alias": "EmptyStateGreeting"; "required": false; }; "emptyStateGreeting": { "alias": "emptyStateGreeting"; "required": false; }; "ShowSidebarToggle": { "alias": "ShowSidebarToggle"; "required": false; }; "showSidebarToggle": { "alias": "showSidebarToggle"; "required": false; }; "ShowAgentCharacter": { "alias": "ShowAgentCharacter"; "required": false; }; "showAgentCharacter": { "alias": "showAgentCharacter"; "required": false; }; "AgentCharacterConfig": { "alias": "AgentCharacterConfig"; "required": false; }; "agentCharacterConfig": { "alias": "agentCharacterConfig"; "required": false; }; "EmptyStateConfig": { "alias": "EmptyStateConfig"; "required": false; }; "emptyStateConfig": { "alias": "emptyStateConfig"; "required": false; }; "ShowDemonstrationSurface": { "alias": "ShowDemonstrationSurface"; "required": false; }; "showDemonstrationSurface": { "alias": "showDemonstrationSurface"; "required": false; }; "DemonstrationSurfaceContent": { "alias": "DemonstrationSurfaceContent"; "required": false; }; "demonstrationSurfaceContent": { "alias": "demonstrationSurfaceContent"; "required": false; }; "AllowStopRun": { "alias": "AllowStopRun"; "required": false; }; "ComposerDraft": { "alias": "ComposerDraft"; "required": false; }; "composerDraft": { "alias": "composerDraft"; "required": false; }; "ComposerAgentMention": { "alias": "ComposerAgentMention"; "required": false; }; "composerAgentMention": { "alias": "composerAgentMention"; "required": false; }; }, { "BeforeAgentTurn": "BeforeAgentTurn"; "beforeAgentTurn": "beforeAgentTurn"; "AfterAgentTurn": "AfterAgentTurn"; "afterAgentTurn": "afterAgentTurn"; "BeforeToolInvoked": "BeforeToolInvoked"; "beforeToolInvoked": "beforeToolInvoked"; "AfterToolInvoked": "AfterToolInvoked"; "afterToolInvoked": "afterToolInvoked"; "BeforeResponseFormSubmitted": "BeforeResponseFormSubmitted"; "beforeResponseFormSubmitted": "beforeResponseFormSubmitted"; "AfterResponseFormSubmitted": "AfterResponseFormSubmitted"; "afterResponseFormSubmitted": "afterResponseFormSubmitted"; "BeforeStopClicked": "BeforeStopClicked"; "AfterStopClicked": "AfterStopClicked"; "SessionStarted": "SessionStarted"; "sessionStarted": "sessionStarted"; "SessionChannelStateChanged": "SessionChannelStateChanged"; "sessionChannelStateChanged": "sessionChannelStateChanged"; "SessionEnded": "SessionEnded"; "sessionEnded": "sessionEnded"; "ConversationRenamed": "ConversationRenamed"; "conversationRenamed": "conversationRenamed"; "OpenEntityRecord": "OpenEntityRecord"; "openEntityRecord": "openEntityRecord"; "RealtimeConversationReady": "RealtimeConversationReady"; "realtimeConversationReady": "realtimeConversationReady"; "navigationRequest": "navigationRequest"; "TaskClicked": "TaskClicked"; "taskClicked": "taskClicked"; "ArtifactLinkClicked": "ArtifactLinkClicked"; "artifactLinkClicked": "artifactLinkClicked"; "SidebarToggleClicked": "SidebarToggleClicked"; "sidebarToggleClicked": "sidebarToggleClicked"; "ConversationCreated": "ConversationCreated"; "conversationCreated": "conversationCreated"; "PendingArtifactConsumed": "PendingArtifactConsumed"; "pendingArtifactConsumed": "pendingArtifactConsumed"; "PendingMessageConsumed": "PendingMessageConsumed"; "pendingMessageConsumed": "pendingMessageConsumed"; "PendingMessageRequested": "PendingMessageRequested"; "pendingMessageRequested": "pendingMessageRequested"; "ComposerDraftConsumed": "ComposerDraftConsumed"; "composerDraftConsumed": "composerDraftConsumed"; "ComposerAgentMentionConsumed": "ComposerAgentMentionConsumed"; "composerAgentMentionConsumed": "composerAgentMentionConsumed"; }, ["chatSlotChildren"], never, false, never>;
2553
3130
  }
2554
3131
  //# sourceMappingURL=conversation-chat-area.component.d.ts.map