@memberjunction/ng-conversations 5.40.2 → 5.41.0

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 (378) hide show
  1. package/README.md +57 -0
  2. package/dist/__tests__/channel-optional-surface.test.d.ts +2 -0
  3. package/dist/__tests__/channel-optional-surface.test.d.ts.map +1 -0
  4. package/dist/__tests__/channel-optional-surface.test.js +53 -0
  5. package/dist/__tests__/channel-optional-surface.test.js.map +1 -0
  6. package/dist/__tests__/chat-events.test.d.ts +14 -0
  7. package/dist/__tests__/chat-events.test.d.ts.map +1 -0
  8. package/dist/__tests__/chat-events.test.js +109 -0
  9. package/dist/__tests__/chat-events.test.js.map +1 -0
  10. package/dist/__tests__/conversation-naming.test.d.ts +2 -0
  11. package/dist/__tests__/conversation-naming.test.d.ts.map +1 -0
  12. package/dist/__tests__/conversation-naming.test.js +110 -0
  13. package/dist/__tests__/conversation-naming.test.js.map +1 -0
  14. package/dist/__tests__/delegation-result-parser.test.d.ts +2 -0
  15. package/dist/__tests__/delegation-result-parser.test.d.ts.map +1 -0
  16. package/dist/__tests__/delegation-result-parser.test.js +107 -0
  17. package/dist/__tests__/delegation-result-parser.test.js.map +1 -0
  18. package/dist/__tests__/event-wiring.test.d.ts +15 -0
  19. package/dist/__tests__/event-wiring.test.d.ts.map +1 -0
  20. package/dist/__tests__/event-wiring.test.js +100 -0
  21. package/dist/__tests__/event-wiring.test.js.map +1 -0
  22. package/dist/__tests__/narration-template.test.d.ts +2 -0
  23. package/dist/__tests__/narration-template.test.d.ts.map +1 -0
  24. package/dist/__tests__/narration-template.test.js +76 -0
  25. package/dist/__tests__/narration-template.test.js.map +1 -0
  26. package/dist/__tests__/realtime-agent-picker-models.test.d.ts +2 -0
  27. package/dist/__tests__/realtime-agent-picker-models.test.d.ts.map +1 -0
  28. package/dist/__tests__/realtime-agent-picker-models.test.js +49 -0
  29. package/dist/__tests__/realtime-agent-picker-models.test.js.map +1 -0
  30. package/dist/__tests__/realtime-audio-visuals.test.d.ts +2 -0
  31. package/dist/__tests__/realtime-audio-visuals.test.d.ts.map +1 -0
  32. package/dist/__tests__/realtime-audio-visuals.test.js +123 -0
  33. package/dist/__tests__/realtime-audio-visuals.test.js.map +1 -0
  34. package/dist/__tests__/realtime-delegation-card-cancel.test.d.ts +2 -0
  35. package/dist/__tests__/realtime-delegation-card-cancel.test.d.ts.map +1 -0
  36. package/dist/__tests__/realtime-delegation-card-cancel.test.js +48 -0
  37. package/dist/__tests__/realtime-delegation-card-cancel.test.js.map +1 -0
  38. package/dist/__tests__/realtime-disclosure.test.d.ts +2 -0
  39. package/dist/__tests__/realtime-disclosure.test.d.ts.map +1 -0
  40. package/dist/__tests__/realtime-disclosure.test.js +164 -0
  41. package/dist/__tests__/realtime-disclosure.test.js.map +1 -0
  42. package/dist/__tests__/realtime-pairing.test.d.ts +2 -0
  43. package/dist/__tests__/realtime-pairing.test.d.ts.map +1 -0
  44. package/dist/__tests__/realtime-pairing.test.js +207 -0
  45. package/dist/__tests__/realtime-pairing.test.js.map +1 -0
  46. package/dist/__tests__/realtime-review-lifecycle.test.d.ts +2 -0
  47. package/dist/__tests__/realtime-review-lifecycle.test.d.ts.map +1 -0
  48. package/dist/__tests__/realtime-review-lifecycle.test.js +154 -0
  49. package/dist/__tests__/realtime-review-lifecycle.test.js.map +1 -0
  50. package/dist/__tests__/realtime-session-cancel-usage.test.d.ts +2 -0
  51. package/dist/__tests__/realtime-session-cancel-usage.test.d.ts.map +1 -0
  52. package/dist/__tests__/realtime-session-cancel-usage.test.js +230 -0
  53. package/dist/__tests__/realtime-session-cancel-usage.test.js.map +1 -0
  54. package/dist/__tests__/realtime-session-channels.test.d.ts +2 -0
  55. package/dist/__tests__/realtime-session-channels.test.d.ts.map +1 -0
  56. package/dist/__tests__/realtime-session-channels.test.js +252 -0
  57. package/dist/__tests__/realtime-session-channels.test.js.map +1 -0
  58. package/dist/__tests__/realtime-session-client-tools.test.d.ts +2 -0
  59. package/dist/__tests__/realtime-session-client-tools.test.d.ts.map +1 -0
  60. package/dist/__tests__/realtime-session-client-tools.test.js +103 -0
  61. package/dist/__tests__/realtime-session-client-tools.test.js.map +1 -0
  62. package/dist/__tests__/realtime-session-minimized.test.d.ts +2 -0
  63. package/dist/__tests__/realtime-session-minimized.test.d.ts.map +1 -0
  64. package/dist/__tests__/realtime-session-minimized.test.js +32 -0
  65. package/dist/__tests__/realtime-session-minimized.test.js.map +1 -0
  66. package/dist/__tests__/realtime-session-mint.test.d.ts +2 -0
  67. package/dist/__tests__/realtime-session-mint.test.d.ts.map +1 -0
  68. package/dist/__tests__/realtime-session-mint.test.js +69 -0
  69. package/dist/__tests__/realtime-session-mint.test.js.map +1 -0
  70. package/dist/__tests__/realtime-session-policy.test.d.ts +2 -0
  71. package/dist/__tests__/realtime-session-policy.test.d.ts.map +1 -0
  72. package/dist/__tests__/realtime-session-policy.test.js +303 -0
  73. package/dist/__tests__/realtime-session-policy.test.js.map +1 -0
  74. package/dist/__tests__/realtime-session-review.service.test.d.ts +2 -0
  75. package/dist/__tests__/realtime-session-review.service.test.d.ts.map +1 -0
  76. package/dist/__tests__/realtime-session-review.service.test.js +743 -0
  77. package/dist/__tests__/realtime-session-review.service.test.js.map +1 -0
  78. package/dist/__tests__/realtime-session-state.test.d.ts +2 -0
  79. package/dist/__tests__/realtime-session-state.test.d.ts.map +1 -0
  80. package/dist/__tests__/realtime-session-state.test.js +83 -0
  81. package/dist/__tests__/realtime-session-state.test.js.map +1 -0
  82. package/dist/__tests__/realtime-session-timeline-card.test.d.ts +2 -0
  83. package/dist/__tests__/realtime-session-timeline-card.test.d.ts.map +1 -0
  84. package/dist/__tests__/realtime-session-timeline-card.test.js +106 -0
  85. package/dist/__tests__/realtime-session-timeline-card.test.js.map +1 -0
  86. package/dist/__tests__/realtime-session-timeline.test.d.ts +2 -0
  87. package/dist/__tests__/realtime-session-timeline.test.d.ts.map +1 -0
  88. package/dist/__tests__/realtime-session-timeline.test.js +142 -0
  89. package/dist/__tests__/realtime-session-timeline.test.js.map +1 -0
  90. package/dist/__tests__/realtime-sessions-adapter.test.d.ts +19 -0
  91. package/dist/__tests__/realtime-sessions-adapter.test.d.ts.map +1 -0
  92. package/dist/__tests__/realtime-sessions-adapter.test.js +188 -0
  93. package/dist/__tests__/realtime-sessions-adapter.test.js.map +1 -0
  94. package/dist/__tests__/realtime-surface-panel-prefs.test.d.ts +2 -0
  95. package/dist/__tests__/realtime-surface-panel-prefs.test.d.ts.map +1 -0
  96. package/dist/__tests__/realtime-surface-panel-prefs.test.js +100 -0
  97. package/dist/__tests__/realtime-surface-panel-prefs.test.js.map +1 -0
  98. package/dist/__tests__/realtime-surface-tabs-model.test.d.ts +2 -0
  99. package/dist/__tests__/realtime-surface-tabs-model.test.d.ts.map +1 -0
  100. package/dist/__tests__/realtime-surface-tabs-model.test.js +193 -0
  101. package/dist/__tests__/realtime-surface-tabs-model.test.js.map +1 -0
  102. package/dist/__tests__/remote-browser-audio-player.test.d.ts +2 -0
  103. package/dist/__tests__/remote-browser-audio-player.test.d.ts.map +1 -0
  104. package/dist/__tests__/remote-browser-audio-player.test.js +137 -0
  105. package/dist/__tests__/remote-browser-audio-player.test.js.map +1 -0
  106. package/dist/__tests__/remote-browser-channel.test.d.ts +2 -0
  107. package/dist/__tests__/remote-browser-channel.test.d.ts.map +1 -0
  108. package/dist/__tests__/remote-browser-channel.test.js +423 -0
  109. package/dist/__tests__/remote-browser-channel.test.js.map +1 -0
  110. package/dist/__tests__/slot-defaults.test.d.ts +24 -0
  111. package/dist/__tests__/slot-defaults.test.d.ts.map +1 -0
  112. package/dist/__tests__/slot-defaults.test.js +63 -0
  113. package/dist/__tests__/slot-defaults.test.js.map +1 -0
  114. package/dist/__tests__/user-authorization.test.d.ts +2 -0
  115. package/dist/__tests__/user-authorization.test.d.ts.map +1 -0
  116. package/dist/__tests__/user-authorization.test.js +97 -0
  117. package/dist/__tests__/user-authorization.test.js.map +1 -0
  118. package/dist/__tests__/voice-session-narration.test.d.ts +2 -0
  119. package/dist/__tests__/voice-session-narration.test.d.ts.map +1 -0
  120. package/dist/__tests__/voice-session-narration.test.js +609 -0
  121. package/dist/__tests__/voice-session-narration.test.js.map +1 -0
  122. package/dist/__tests__/whiteboard-artifact-viewer.test.d.ts +2 -0
  123. package/dist/__tests__/whiteboard-artifact-viewer.test.d.ts.map +1 -0
  124. package/dist/__tests__/whiteboard-artifact-viewer.test.js +101 -0
  125. package/dist/__tests__/whiteboard-artifact-viewer.test.js.map +1 -0
  126. package/dist/__tests__/whiteboard-channel.test.d.ts +2 -0
  127. package/dist/__tests__/whiteboard-channel.test.d.ts.map +1 -0
  128. package/dist/__tests__/whiteboard-channel.test.js +260 -0
  129. package/dist/__tests__/whiteboard-channel.test.js.map +1 -0
  130. package/dist/__tests__/whiteboard-restore-state.test.d.ts +2 -0
  131. package/dist/__tests__/whiteboard-restore-state.test.d.ts.map +1 -0
  132. package/dist/__tests__/whiteboard-restore-state.test.js +108 -0
  133. package/dist/__tests__/whiteboard-restore-state.test.js.map +1 -0
  134. package/dist/lib/components/conversation/conversation-chat-area.component.d.ts +205 -3
  135. package/dist/lib/components/conversation/conversation-chat-area.component.d.ts.map +1 -1
  136. package/dist/lib/components/conversation/conversation-chat-area.component.js +911 -342
  137. package/dist/lib/components/conversation/conversation-chat-area.component.js.map +1 -1
  138. package/dist/lib/components/mention/mention-dropdown.component.js +35 -17
  139. package/dist/lib/components/mention/mention-dropdown.component.js.map +1 -1
  140. package/dist/lib/components/mention/mention-editor.component.d.ts +4 -0
  141. package/dist/lib/components/mention/mention-editor.component.d.ts.map +1 -1
  142. package/dist/lib/components/mention/mention-editor.component.js +43 -19
  143. package/dist/lib/components/mention/mention-editor.component.js.map +1 -1
  144. package/dist/lib/components/message/message-input-box.component.d.ts +17 -1
  145. package/dist/lib/components/message/message-input-box.component.d.ts.map +1 -1
  146. package/dist/lib/components/message/message-input-box.component.js +73 -15
  147. package/dist/lib/components/message/message-input-box.component.js.map +1 -1
  148. package/dist/lib/components/message/message-input.component.d.ts +142 -6
  149. package/dist/lib/components/message/message-input.component.d.ts.map +1 -1
  150. package/dist/lib/components/message/message-input.component.js +328 -82
  151. package/dist/lib/components/message/message-input.component.js.map +1 -1
  152. package/dist/lib/components/message/message-item.component.d.ts +28 -3
  153. package/dist/lib/components/message/message-item.component.d.ts.map +1 -1
  154. package/dist/lib/components/message/message-item.component.js +180 -108
  155. package/dist/lib/components/message/message-item.component.js.map +1 -1
  156. package/dist/lib/components/message/message-list.component.d.ts +81 -2
  157. package/dist/lib/components/message/message-list.component.d.ts.map +1 -1
  158. package/dist/lib/components/message/message-list.component.js +252 -87
  159. package/dist/lib/components/message/message-list.component.js.map +1 -1
  160. package/dist/lib/components/realtime/channels/base-realtime-channel-client.d.ts +282 -0
  161. package/dist/lib/components/realtime/channels/base-realtime-channel-client.d.ts.map +1 -0
  162. package/dist/lib/components/realtime/channels/base-realtime-channel-client.js +158 -0
  163. package/dist/lib/components/realtime/channels/base-realtime-channel-client.js.map +1 -0
  164. package/dist/lib/components/realtime/channels/channel-onboarding-panel.component.d.ts +25 -0
  165. package/dist/lib/components/realtime/channels/channel-onboarding-panel.component.d.ts.map +1 -0
  166. package/dist/lib/components/realtime/channels/channel-onboarding-panel.component.js +140 -0
  167. package/dist/lib/components/realtime/channels/channel-onboarding-panel.component.js.map +1 -0
  168. package/dist/lib/components/realtime/channels/realtime-channel-pane.component.d.ts +35 -0
  169. package/dist/lib/components/realtime/channels/realtime-channel-pane.component.d.ts.map +1 -0
  170. package/dist/lib/components/realtime/channels/realtime-channel-pane.component.js +58 -0
  171. package/dist/lib/components/realtime/channels/realtime-channel-pane.component.js.map +1 -0
  172. package/dist/lib/components/realtime/realtime-activity-rail.component.d.ts +63 -0
  173. package/dist/lib/components/realtime/realtime-activity-rail.component.d.ts.map +1 -0
  174. package/dist/lib/components/realtime/realtime-activity-rail.component.js +260 -0
  175. package/dist/lib/components/realtime/realtime-activity-rail.component.js.map +1 -0
  176. package/dist/lib/components/realtime/realtime-agent-banner.component.d.ts +117 -0
  177. package/dist/lib/components/realtime/realtime-agent-banner.component.d.ts.map +1 -0
  178. package/dist/lib/components/realtime/realtime-agent-banner.component.js +504 -0
  179. package/dist/lib/components/realtime/realtime-agent-banner.component.js.map +1 -0
  180. package/dist/lib/components/realtime/realtime-agent-picker.component.d.ts +168 -0
  181. package/dist/lib/components/realtime/realtime-agent-picker.component.d.ts.map +1 -0
  182. package/dist/lib/components/realtime/realtime-agent-picker.component.js +556 -0
  183. package/dist/lib/components/realtime/realtime-agent-picker.component.js.map +1 -0
  184. package/dist/lib/components/realtime/realtime-audio-visuals.d.ts +97 -0
  185. package/dist/lib/components/realtime/realtime-audio-visuals.d.ts.map +1 -0
  186. package/dist/lib/components/realtime/realtime-audio-visuals.js +139 -0
  187. package/dist/lib/components/realtime/realtime-audio-visuals.js.map +1 -0
  188. package/dist/lib/components/realtime/realtime-channel-strip.component.d.ts +29 -0
  189. package/dist/lib/components/realtime/realtime-channel-strip.component.d.ts.map +1 -0
  190. package/dist/lib/components/realtime/realtime-channel-strip.component.js +69 -0
  191. package/dist/lib/components/realtime/realtime-channel-strip.component.js.map +1 -0
  192. package/dist/lib/components/realtime/realtime-composer.component.d.ts +65 -0
  193. package/dist/lib/components/realtime/realtime-composer.component.d.ts.map +1 -0
  194. package/dist/lib/components/realtime/realtime-composer.component.js +256 -0
  195. package/dist/lib/components/realtime/realtime-composer.component.js.map +1 -0
  196. package/dist/lib/components/realtime/realtime-delegation-card.component.d.ts +71 -0
  197. package/dist/lib/components/realtime/realtime-delegation-card.component.d.ts.map +1 -0
  198. package/dist/lib/components/realtime/realtime-delegation-card.component.js +324 -0
  199. package/dist/lib/components/realtime/realtime-delegation-card.component.js.map +1 -0
  200. package/dist/lib/components/realtime/realtime-disclosure.d.ts +135 -0
  201. package/dist/lib/components/realtime/realtime-disclosure.d.ts.map +1 -0
  202. package/dist/lib/components/realtime/realtime-disclosure.js +188 -0
  203. package/dist/lib/components/realtime/realtime-disclosure.js.map +1 -0
  204. package/dist/lib/components/realtime/realtime-session-overlay.component.d.ts +491 -0
  205. package/dist/lib/components/realtime/realtime-session-overlay.component.d.ts.map +1 -0
  206. package/dist/lib/components/realtime/realtime-session-overlay.component.js +1274 -0
  207. package/dist/lib/components/realtime/realtime-session-overlay.component.js.map +1 -0
  208. package/dist/lib/components/realtime/realtime-session-state.d.ts +191 -0
  209. package/dist/lib/components/realtime/realtime-session-state.d.ts.map +1 -0
  210. package/dist/lib/components/realtime/realtime-session-state.js +244 -0
  211. package/dist/lib/components/realtime/realtime-session-state.js.map +1 -0
  212. package/dist/lib/components/realtime/realtime-session-thread.component.d.ts +56 -0
  213. package/dist/lib/components/realtime/realtime-session-thread.component.d.ts.map +1 -0
  214. package/dist/lib/components/realtime/realtime-session-thread.component.js +246 -0
  215. package/dist/lib/components/realtime/realtime-session-thread.component.js.map +1 -0
  216. package/dist/lib/components/realtime/realtime-session-timeline-card.component.d.ts +51 -0
  217. package/dist/lib/components/realtime/realtime-session-timeline-card.component.d.ts.map +1 -0
  218. package/dist/lib/components/realtime/realtime-session-timeline-card.component.js +193 -0
  219. package/dist/lib/components/realtime/realtime-session-timeline-card.component.js.map +1 -0
  220. package/dist/lib/components/realtime/realtime-surface-panel-prefs.d.ts +77 -0
  221. package/dist/lib/components/realtime/realtime-surface-panel-prefs.d.ts.map +1 -0
  222. package/dist/lib/components/realtime/realtime-surface-panel-prefs.js +114 -0
  223. package/dist/lib/components/realtime/realtime-surface-panel-prefs.js.map +1 -0
  224. package/dist/lib/components/realtime/realtime-surface-tabs.component.d.ts +173 -0
  225. package/dist/lib/components/realtime/realtime-surface-tabs.component.d.ts.map +1 -0
  226. package/dist/lib/components/realtime/realtime-surface-tabs.component.js +496 -0
  227. package/dist/lib/components/realtime/realtime-surface-tabs.component.js.map +1 -0
  228. package/dist/lib/components/realtime/realtime-surface-tabs.model.d.ts +181 -0
  229. package/dist/lib/components/realtime/realtime-surface-tabs.model.d.ts.map +1 -0
  230. package/dist/lib/components/realtime/realtime-surface-tabs.model.js +223 -0
  231. package/dist/lib/components/realtime/realtime-surface-tabs.model.js.map +1 -0
  232. package/dist/lib/components/realtime/remote-browser/remote-browser-audio-player.d.ts +163 -0
  233. package/dist/lib/components/realtime/remote-browser/remote-browser-audio-player.d.ts.map +1 -0
  234. package/dist/lib/components/realtime/remote-browser/remote-browser-audio-player.js +309 -0
  235. package/dist/lib/components/realtime/remote-browser/remote-browser-audio-player.js.map +1 -0
  236. package/dist/lib/components/realtime/remote-browser/remote-browser-channel.d.ts +168 -0
  237. package/dist/lib/components/realtime/remote-browser/remote-browser-channel.d.ts.map +1 -0
  238. package/dist/lib/components/realtime/remote-browser/remote-browser-channel.js +524 -0
  239. package/dist/lib/components/realtime/remote-browser/remote-browser-channel.js.map +1 -0
  240. package/dist/lib/components/realtime/remote-browser/remote-browser-surface.component.d.ts +346 -0
  241. package/dist/lib/components/realtime/remote-browser/remote-browser-surface.component.d.ts.map +1 -0
  242. package/dist/lib/components/realtime/remote-browser/remote-browser-surface.component.js +851 -0
  243. package/dist/lib/components/realtime/remote-browser/remote-browser-surface.component.js.map +1 -0
  244. package/dist/lib/components/realtime/remote-browser/remote-browser-tools.d.ts +86 -0
  245. package/dist/lib/components/realtime/remote-browser/remote-browser-tools.d.ts.map +1 -0
  246. package/dist/lib/components/realtime/remote-browser/remote-browser-tools.js +210 -0
  247. package/dist/lib/components/realtime/remote-browser/remote-browser-tools.js.map +1 -0
  248. package/dist/lib/components/realtime/whiteboard/whiteboard-artifact-viewer.component.d.ts +48 -0
  249. package/dist/lib/components/realtime/whiteboard/whiteboard-artifact-viewer.component.d.ts.map +1 -0
  250. package/dist/lib/components/realtime/whiteboard/whiteboard-artifact-viewer.component.js +180 -0
  251. package/dist/lib/components/realtime/whiteboard/whiteboard-artifact-viewer.component.js.map +1 -0
  252. package/dist/lib/components/realtime/whiteboard/whiteboard-channel.d.ts +119 -0
  253. package/dist/lib/components/realtime/whiteboard/whiteboard-channel.d.ts.map +1 -0
  254. package/dist/lib/components/realtime/whiteboard/whiteboard-channel.js +274 -0
  255. package/dist/lib/components/realtime/whiteboard/whiteboard-channel.js.map +1 -0
  256. package/dist/lib/components/slots/mj-chat-agent-presence-default.component.d.ts +11 -0
  257. package/dist/lib/components/slots/mj-chat-agent-presence-default.component.d.ts.map +1 -0
  258. package/dist/lib/components/slots/mj-chat-agent-presence-default.component.js +98 -0
  259. package/dist/lib/components/slots/mj-chat-agent-presence-default.component.js.map +1 -0
  260. package/dist/lib/components/slots/mj-chat-demonstration-surface-default.component.d.ts +9 -0
  261. package/dist/lib/components/slots/mj-chat-demonstration-surface-default.component.d.ts.map +1 -0
  262. package/dist/lib/components/slots/mj-chat-demonstration-surface-default.component.js +35 -0
  263. package/dist/lib/components/slots/mj-chat-demonstration-surface-default.component.js.map +1 -0
  264. package/dist/lib/components/slots/mj-chat-empty-state-default.component.d.ts +28 -0
  265. package/dist/lib/components/slots/mj-chat-empty-state-default.component.d.ts.map +1 -0
  266. package/dist/lib/components/slots/mj-chat-empty-state-default.component.js +104 -0
  267. package/dist/lib/components/slots/mj-chat-empty-state-default.component.js.map +1 -0
  268. package/dist/lib/components/slots/mj-chat-header-default.component.d.ts +11 -0
  269. package/dist/lib/components/slots/mj-chat-header-default.component.d.ts.map +1 -0
  270. package/dist/lib/components/slots/mj-chat-header-default.component.js +103 -0
  271. package/dist/lib/components/slots/mj-chat-header-default.component.js.map +1 -0
  272. package/dist/lib/components/slots/mj-chat-message-bubble-default.component.d.ts +15 -0
  273. package/dist/lib/components/slots/mj-chat-message-bubble-default.component.d.ts.map +1 -0
  274. package/dist/lib/components/slots/mj-chat-message-bubble-default.component.js +73 -0
  275. package/dist/lib/components/slots/mj-chat-message-bubble-default.component.js.map +1 -0
  276. package/dist/lib/components/slots/mj-chat-message-extra-default.component.d.ts +9 -0
  277. package/dist/lib/components/slots/mj-chat-message-extra-default.component.d.ts.map +1 -0
  278. package/dist/lib/components/slots/mj-chat-message-extra-default.component.js +34 -0
  279. package/dist/lib/components/slots/mj-chat-message-extra-default.component.js.map +1 -0
  280. package/dist/lib/components/slots/slot-interfaces.d.ts +95 -0
  281. package/dist/lib/components/slots/slot-interfaces.d.ts.map +1 -0
  282. package/dist/lib/components/slots/slot-interfaces.js +18 -0
  283. package/dist/lib/components/slots/slot-interfaces.js.map +1 -0
  284. package/dist/lib/components/workspace/conversation-workspace.component.d.ts +11 -0
  285. package/dist/lib/components/workspace/conversation-workspace.component.d.ts.map +1 -1
  286. package/dist/lib/components/workspace/conversation-workspace.component.js +28 -4
  287. package/dist/lib/components/workspace/conversation-workspace.component.js.map +1 -1
  288. package/dist/lib/conversations.module.d.ts +12 -1
  289. package/dist/lib/conversations.module.d.ts.map +1 -1
  290. package/dist/lib/conversations.module.js +93 -5
  291. package/dist/lib/conversations.module.js.map +1 -1
  292. package/dist/lib/directives/chat-slot.directive.d.ts +44 -0
  293. package/dist/lib/directives/chat-slot.directive.d.ts.map +1 -0
  294. package/dist/lib/directives/chat-slot.directive.js +54 -0
  295. package/dist/lib/directives/chat-slot.directive.js.map +1 -0
  296. package/dist/lib/events/chat-events.d.ts +137 -0
  297. package/dist/lib/events/chat-events.d.ts.map +1 -0
  298. package/dist/lib/events/chat-events.js +189 -0
  299. package/dist/lib/events/chat-events.js.map +1 -0
  300. package/dist/lib/models/conversation-state.model.d.ts +2 -1
  301. package/dist/lib/models/conversation-state.model.d.ts.map +1 -1
  302. package/dist/lib/models/conversation-state.model.js.map +1 -1
  303. package/dist/lib/services/artifact-state.service.d.ts.map +1 -1
  304. package/dist/lib/services/artifact-state.service.js +23 -6
  305. package/dist/lib/services/artifact-state.service.js.map +1 -1
  306. package/dist/lib/services/conversation-agent.service.d.ts +60 -74
  307. package/dist/lib/services/conversation-agent.service.d.ts.map +1 -1
  308. package/dist/lib/services/conversation-agent.service.js +100 -313
  309. package/dist/lib/services/conversation-agent.service.js.map +1 -1
  310. package/dist/lib/services/conversation-bridge.service.d.ts +11 -70
  311. package/dist/lib/services/conversation-bridge.service.d.ts.map +1 -1
  312. package/dist/lib/services/conversation-bridge.service.js +51 -85
  313. package/dist/lib/services/conversation-bridge.service.js.map +1 -1
  314. package/dist/lib/services/conversation-naming.d.ts +63 -0
  315. package/dist/lib/services/conversation-naming.d.ts.map +1 -0
  316. package/dist/lib/services/conversation-naming.js +58 -0
  317. package/dist/lib/services/conversation-naming.js.map +1 -0
  318. package/dist/lib/services/conversation-streaming.service.d.ts +24 -154
  319. package/dist/lib/services/conversation-streaming.service.d.ts.map +1 -1
  320. package/dist/lib/services/conversation-streaming.service.js +39 -361
  321. package/dist/lib/services/conversation-streaming.service.js.map +1 -1
  322. package/dist/lib/services/conversations-runtime-bootstrap.service.d.ts +10 -0
  323. package/dist/lib/services/conversations-runtime-bootstrap.service.d.ts.map +1 -0
  324. package/dist/lib/services/conversations-runtime-bootstrap.service.js +104 -0
  325. package/dist/lib/services/conversations-runtime-bootstrap.service.js.map +1 -0
  326. package/dist/lib/services/delegation-result-parser.d.ts +45 -0
  327. package/dist/lib/services/delegation-result-parser.d.ts.map +1 -0
  328. package/dist/lib/services/delegation-result-parser.js +48 -0
  329. package/dist/lib/services/delegation-result-parser.js.map +1 -0
  330. package/dist/lib/services/mention-autocomplete.service.d.ts +19 -4
  331. package/dist/lib/services/mention-autocomplete.service.d.ts.map +1 -1
  332. package/dist/lib/services/mention-autocomplete.service.js +65 -4
  333. package/dist/lib/services/mention-autocomplete.service.js.map +1 -1
  334. package/dist/lib/services/mention-parser.service.d.ts +8 -53
  335. package/dist/lib/services/mention-parser.service.d.ts.map +1 -1
  336. package/dist/lib/services/mention-parser.service.js +32 -243
  337. package/dist/lib/services/mention-parser.service.js.map +1 -1
  338. package/dist/lib/services/narration-template.d.ts +42 -0
  339. package/dist/lib/services/narration-template.d.ts.map +1 -0
  340. package/dist/lib/services/narration-template.js +73 -0
  341. package/dist/lib/services/narration-template.js.map +1 -0
  342. package/dist/lib/services/realtime-pairing.d.ts +120 -0
  343. package/dist/lib/services/realtime-pairing.d.ts.map +1 -0
  344. package/dist/lib/services/realtime-pairing.js +150 -0
  345. package/dist/lib/services/realtime-pairing.js.map +1 -0
  346. package/dist/lib/services/realtime-session-review.service.d.ts +233 -0
  347. package/dist/lib/services/realtime-session-review.service.d.ts.map +1 -0
  348. package/dist/lib/services/realtime-session-review.service.js +417 -0
  349. package/dist/lib/services/realtime-session-review.service.js.map +1 -0
  350. package/dist/lib/services/realtime-session.service.d.ts +739 -0
  351. package/dist/lib/services/realtime-session.service.d.ts.map +1 -0
  352. package/dist/lib/services/realtime-session.service.js +1647 -0
  353. package/dist/lib/services/realtime-session.service.js.map +1 -0
  354. package/dist/lib/services/realtime-sessions-adapter.d.ts +54 -0
  355. package/dist/lib/services/realtime-sessions-adapter.d.ts.map +1 -0
  356. package/dist/lib/services/realtime-sessions-adapter.js +154 -0
  357. package/dist/lib/services/realtime-sessions-adapter.js.map +1 -0
  358. package/dist/lib/services/user-authorization.d.ts +67 -0
  359. package/dist/lib/services/user-authorization.d.ts.map +1 -0
  360. package/dist/lib/services/user-authorization.js +66 -0
  361. package/dist/lib/services/user-authorization.js.map +1 -0
  362. package/dist/lib/utils/realtime-session-timeline.d.ts +84 -0
  363. package/dist/lib/utils/realtime-session-timeline.d.ts.map +1 -0
  364. package/dist/lib/utils/realtime-session-timeline.js +94 -0
  365. package/dist/lib/utils/realtime-session-timeline.js.map +1 -0
  366. package/dist/public-api.d.ts +41 -0
  367. package/dist/public-api.d.ts.map +1 -1
  368. package/dist/public-api.js +50 -0
  369. package/dist/public-api.js.map +1 -1
  370. package/package.json +27 -24
  371. package/dist/__tests__/conversation-bridge.service.test.d.ts +0 -2
  372. package/dist/__tests__/conversation-bridge.service.test.d.ts.map +0 -1
  373. package/dist/__tests__/conversation-bridge.service.test.js +0 -98
  374. package/dist/__tests__/conversation-bridge.service.test.js.map +0 -1
  375. package/dist/__tests__/mention-parser.test.d.ts +0 -2
  376. package/dist/__tests__/mention-parser.test.d.ts.map +0 -1
  377. package/dist/__tests__/mention-parser.test.js +0 -154
  378. package/dist/__tests__/mention-parser.test.js.map +0 -1
@@ -0,0 +1,260 @@
1
+ import { Component, EventEmitter, Input, Output, ChangeDetectorRef, inject } from '@angular/core';
2
+ import { CommonModule } from '@angular/common';
3
+ import { FriendlyStepLabel, FormatElapsed } from './realtime-session-state';
4
+ import * as i0 from "@angular/core";
5
+ import * as i1 from "@angular/common";
6
+ const _forTrack0 = ($index, $item) => $item.ArtifactVersionID;
7
+ function RealtimeActivityRailComponent_Conditional_1_Conditional_3_Template(rf, ctx) { if (rf & 1) {
8
+ i0.ɵɵelementStart(0, "span", 5);
9
+ i0.ɵɵelement(1, "i", 6);
10
+ i0.ɵɵtext(2, " Session activity ");
11
+ i0.ɵɵelementEnd();
12
+ } }
13
+ function RealtimeActivityRailComponent_Conditional_1_Template(rf, ctx) { if (rf & 1) {
14
+ const _r1 = i0.ɵɵgetCurrentView();
15
+ i0.ɵɵelementStart(0, "div", 1)(1, "button", 3);
16
+ i0.ɵɵlistener("click", function RealtimeActivityRailComponent_Conditional_1_Template_button_click_1_listener() { i0.ɵɵrestoreView(_r1); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.Toggle()); });
17
+ i0.ɵɵelement(2, "i", 4);
18
+ i0.ɵɵelementEnd();
19
+ i0.ɵɵconditionalCreate(3, RealtimeActivityRailComponent_Conditional_1_Conditional_3_Template, 3, 0, "span", 5);
20
+ i0.ɵɵelementEnd();
21
+ } if (rf & 2) {
22
+ const ctx_r1 = i0.ɵɵnextContext();
23
+ i0.ɵɵadvance();
24
+ i0.ɵɵproperty("title", ctx_r1.Collapsed ? "Show session activity" : "Hide session activity");
25
+ i0.ɵɵattribute("aria-expanded", !ctx_r1.Collapsed);
26
+ i0.ɵɵadvance();
27
+ i0.ɵɵproperty("ngClass", ctx_r1.Collapsed ? "fa-chevron-left" : "fa-chevron-right");
28
+ i0.ɵɵadvance();
29
+ i0.ɵɵconditional(!ctx_r1.Collapsed ? 3 : -1);
30
+ } }
31
+ function RealtimeActivityRailComponent_Conditional_2_For_2_Conditional_4_Template(rf, ctx) { if (rf & 1) {
32
+ i0.ɵɵelementStart(0, "span", 12);
33
+ i0.ɵɵelement(1, "i", 18);
34
+ i0.ɵɵtext(2, " Running ");
35
+ i0.ɵɵelementEnd();
36
+ } }
37
+ function RealtimeActivityRailComponent_Conditional_2_For_2_Conditional_5_Template(rf, ctx) { if (rf & 1) {
38
+ i0.ɵɵelementStart(0, "span", 13);
39
+ i0.ɵɵelement(1, "i", 19);
40
+ i0.ɵɵtext(2, " Done ");
41
+ i0.ɵɵelementEnd();
42
+ } }
43
+ function RealtimeActivityRailComponent_Conditional_2_For_2_Conditional_6_Template(rf, ctx) { if (rf & 1) {
44
+ i0.ɵɵelementStart(0, "span", 14);
45
+ i0.ɵɵelement(1, "i", 20);
46
+ i0.ɵɵtext(2, " Failed ");
47
+ i0.ɵɵelementEnd();
48
+ } }
49
+ function RealtimeActivityRailComponent_Conditional_2_For_2_Conditional_9_Conditional_0_Template(rf, ctx) { if (rf & 1) {
50
+ i0.ɵɵelementStart(0, "div", 21);
51
+ i0.ɵɵelement(1, "i", 23);
52
+ i0.ɵɵtext(2);
53
+ i0.ɵɵelementEnd();
54
+ } if (rf & 2) {
55
+ i0.ɵɵadvance(2);
56
+ i0.ɵɵtextInterpolate1(" ", ctx, " ");
57
+ } }
58
+ function RealtimeActivityRailComponent_Conditional_2_For_2_Conditional_9_Conditional_1_Template(rf, ctx) { if (rf & 1) {
59
+ i0.ɵɵelementStart(0, "div", 22);
60
+ i0.ɵɵtext(1);
61
+ i0.ɵɵelementEnd();
62
+ } if (rf & 2) {
63
+ const card_r3 = i0.ɵɵnextContext(2).$implicit;
64
+ const ctx_r1 = i0.ɵɵnextContext(2);
65
+ i0.ɵɵadvance();
66
+ i0.ɵɵtextInterpolate(ctx_r1.Preview(card_r3));
67
+ } }
68
+ function RealtimeActivityRailComponent_Conditional_2_For_2_Conditional_9_Template(rf, ctx) { if (rf & 1) {
69
+ i0.ɵɵconditionalCreate(0, RealtimeActivityRailComponent_Conditional_2_For_2_Conditional_9_Conditional_0_Template, 3, 1, "div", 21);
70
+ i0.ɵɵconditionalCreate(1, RealtimeActivityRailComponent_Conditional_2_For_2_Conditional_9_Conditional_1_Template, 2, 1, "div", 22);
71
+ } if (rf & 2) {
72
+ let tmp_12_0;
73
+ const card_r3 = i0.ɵɵnextContext().$implicit;
74
+ const ctx_r1 = i0.ɵɵnextContext(2);
75
+ i0.ɵɵconditional((tmp_12_0 = ctx_r1.Elapsed(card_r3)) ? 0 : -1, tmp_12_0);
76
+ i0.ɵɵadvance();
77
+ i0.ɵɵconditional(ctx_r1.Preview(card_r3) ? 1 : -1);
78
+ } }
79
+ function RealtimeActivityRailComponent_Conditional_2_For_2_For_11_Template(rf, ctx) { if (rf & 1) {
80
+ const _r4 = i0.ɵɵgetCurrentView();
81
+ i0.ɵɵelementStart(0, "button", 24);
82
+ i0.ɵɵlistener("click", function RealtimeActivityRailComponent_Conditional_2_For_2_For_11_Template_button_click_0_listener() { const artifact_r5 = i0.ɵɵrestoreView(_r4).$implicit; const ctx_r1 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r1.OpenArtifact(artifact_r5)); });
83
+ i0.ɵɵelement(1, "i", 25);
84
+ i0.ɵɵelementStart(2, "span");
85
+ i0.ɵɵtext(3, "View");
86
+ i0.ɵɵelementEnd();
87
+ i0.ɵɵelement(4, "i", 26);
88
+ i0.ɵɵelementEnd();
89
+ } if (rf & 2) {
90
+ const artifact_r5 = ctx.$implicit;
91
+ i0.ɵɵproperty("title", "View " + artifact_r5.Name);
92
+ } }
93
+ function RealtimeActivityRailComponent_Conditional_2_For_2_Conditional_12_Template(rf, ctx) { if (rf & 1) {
94
+ const _r6 = i0.ɵɵgetCurrentView();
95
+ i0.ɵɵelementStart(0, "button", 27);
96
+ i0.ɵɵlistener("click", function RealtimeActivityRailComponent_Conditional_2_For_2_Conditional_12_Template_button_click_0_listener() { i0.ɵɵrestoreView(_r6); const card_r3 = i0.ɵɵnextContext().$implicit; const ctx_r1 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r1.OpenRun(card_r3)); });
97
+ i0.ɵɵelement(1, "i", 28);
98
+ i0.ɵɵelementStart(2, "span");
99
+ i0.ɵɵtext(3, "Open run");
100
+ i0.ɵɵelementEnd()();
101
+ } }
102
+ function RealtimeActivityRailComponent_Conditional_2_For_2_Template(rf, ctx) { if (rf & 1) {
103
+ i0.ɵɵelementStart(0, "div", 9)(1, "div", 10)(2, "span", 11);
104
+ i0.ɵɵtext(3);
105
+ i0.ɵɵelementEnd();
106
+ i0.ɵɵconditionalCreate(4, RealtimeActivityRailComponent_Conditional_2_For_2_Conditional_4_Template, 3, 0, "span", 12)(5, RealtimeActivityRailComponent_Conditional_2_For_2_Conditional_5_Template, 3, 0, "span", 13)(6, RealtimeActivityRailComponent_Conditional_2_For_2_Conditional_6_Template, 3, 0, "span", 14);
107
+ i0.ɵɵelementEnd();
108
+ i0.ɵɵelementStart(7, "div", 15);
109
+ i0.ɵɵtext(8);
110
+ i0.ɵɵelementEnd();
111
+ i0.ɵɵconditionalCreate(9, RealtimeActivityRailComponent_Conditional_2_For_2_Conditional_9_Template, 2, 2);
112
+ i0.ɵɵrepeaterCreate(10, RealtimeActivityRailComponent_Conditional_2_For_2_For_11_Template, 5, 1, "button", 16, _forTrack0);
113
+ i0.ɵɵconditionalCreate(12, RealtimeActivityRailComponent_Conditional_2_For_2_Conditional_12_Template, 4, 0, "button", 17);
114
+ i0.ɵɵelementEnd();
115
+ } if (rf & 2) {
116
+ const card_r3 = ctx.$implicit;
117
+ const ctx_r1 = i0.ɵɵnextContext(2);
118
+ i0.ɵɵclassProp("act-card--running", !card_r3.Done)("act-card--done", card_r3.Done && card_r3.Success)("act-card--failed", card_r3.Done && !card_r3.Success);
119
+ i0.ɵɵadvance(3);
120
+ i0.ɵɵtextInterpolate(card_r3.AgentName);
121
+ i0.ɵɵadvance();
122
+ i0.ɵɵconditional(!card_r3.Done ? 4 : card_r3.Success ? 5 : 6);
123
+ i0.ɵɵadvance(4);
124
+ i0.ɵɵtextInterpolate(ctx_r1.StepLabel(card_r3));
125
+ i0.ɵɵadvance();
126
+ i0.ɵɵconditional(card_r3.Done ? 9 : -1);
127
+ i0.ɵɵadvance();
128
+ i0.ɵɵrepeater(ctx_r1.CardArtifacts(card_r3));
129
+ i0.ɵɵadvance(2);
130
+ i0.ɵɵconditional(ctx_r1.ShowOpenRun(card_r3) ? 12 : -1);
131
+ } }
132
+ function RealtimeActivityRailComponent_Conditional_2_ForEmpty_3_Template(rf, ctx) { if (rf & 1) {
133
+ i0.ɵɵelementStart(0, "div", 8);
134
+ i0.ɵɵtext(1, "Tool and agent calls will appear here as they run.");
135
+ i0.ɵɵelementEnd();
136
+ } }
137
+ function RealtimeActivityRailComponent_Conditional_2_Template(rf, ctx) { if (rf & 1) {
138
+ i0.ɵɵelementStart(0, "div", 2);
139
+ i0.ɵɵrepeaterCreate(1, RealtimeActivityRailComponent_Conditional_2_For_2_Template, 13, 11, "div", 7, i0.ɵɵcomponentInstance().TrackCard, true, RealtimeActivityRailComponent_Conditional_2_ForEmpty_3_Template, 2, 0, "div", 8);
140
+ i0.ɵɵelementEnd();
141
+ } if (rf & 2) {
142
+ const ctx_r1 = i0.ɵɵnextContext();
143
+ i0.ɵɵadvance();
144
+ i0.ɵɵrepeater(ctx_r1.State.Cards);
145
+ } }
146
+ /**
147
+ * The "Session activity" RIGHT RAIL of the call overlay: a compact, newest-first list
148
+ * of EVERY tool/agent call of the session — so parallel/multiple delegations live here
149
+ * and the conversation thread stays clean.
150
+ *
151
+ * Each entry shows agent name, status (Running w/ spinner | Done | Failed), the latest
152
+ * friendly step label, elapsed time for finished work, and a one-line result preview
153
+ * for done items. Active items are emphasized; finished items are dimmed.
154
+ *
155
+ * Collapsible via the chevron in its header (collapses to a slim toggle strip).
156
+ * Presentational over the same {@link RealtimeSessionState} the thread renders —
157
+ * no subscriptions of its own beyond the state's change notifications.
158
+ */
159
+ export class RealtimeActivityRailComponent {
160
+ /** Maximum characters of the result preview in a done card. */
161
+ static PreviewMaxChars = 90;
162
+ /** Shared live-session state, owned by the overlay shell. */
163
+ State;
164
+ /** Whether developer affordances ("Open run" links) are revealed (gear-gated). */
165
+ DevMode = false;
166
+ /**
167
+ * EMBEDDED mode: the rail renders as the content of the surface panel's Activity tab —
168
+ * its own header/collapse chrome is hidden (the panel's tab strip owns collapse) and it
169
+ * stretches to the pane's full width. Default `false` keeps the original standalone
170
+ * right-rail presentation for any other consumer.
171
+ */
172
+ Embedded = false;
173
+ /** Emitted with the delegated run's ID when an entry's dev "Open run" link is clicked. */
174
+ OpenRunRequested = new EventEmitter();
175
+ /** Emitted when an entry's "View" artifact chip is clicked (focuses the artifact's tab). */
176
+ OpenArtifactRequested = new EventEmitter();
177
+ /** Whether the rail is collapsed to its slim toggle strip. */
178
+ Collapsed = false;
179
+ changedSub;
180
+ cdr = inject(ChangeDetectorRef);
181
+ ngOnInit() {
182
+ this.changedSub = this.State.Changed$.subscribe(() => this.cdr.markForCheck());
183
+ }
184
+ ngOnDestroy() {
185
+ this.changedSub?.unsubscribe();
186
+ }
187
+ /** Toggle the rail between expanded and slim-collapsed. */
188
+ Toggle() {
189
+ this.Collapsed = !this.Collapsed;
190
+ }
191
+ /** track fn for the @for over cards. */
192
+ TrackCard(index, card) {
193
+ return card.CallID;
194
+ }
195
+ /** Friendly label of the card's latest step. */
196
+ StepLabel(card) {
197
+ return FriendlyStepLabel(card.LatestStep, card.LatestMessage);
198
+ }
199
+ /** Elapsed duration for finished work ("8s", "1m 04s"); null while running (kept cheap). */
200
+ Elapsed(card) {
201
+ if (card.FinishedAt == null) {
202
+ return null;
203
+ }
204
+ return FormatElapsed(card.FinishedAt - card.StartedAt);
205
+ }
206
+ /** True when the dev "Open run" link should render for this card (gear on + run id known). */
207
+ ShowOpenRun(card) {
208
+ return this.DevMode && !!card.RunID;
209
+ }
210
+ /** Emits the open-run request for the card's delegated run. */
211
+ OpenRun(card) {
212
+ if (card.RunID) {
213
+ this.OpenRunRequested.emit(card.RunID);
214
+ }
215
+ }
216
+ /** The artifacts a done card carries (empty array when none — keeps the template simple). */
217
+ CardArtifacts(card) {
218
+ return card.Done && card.Artifacts ? card.Artifacts : [];
219
+ }
220
+ /** Emits the open-artifact request for a card's produced artifact. */
221
+ OpenArtifact(artifact) {
222
+ this.OpenArtifactRequested.emit(artifact);
223
+ }
224
+ /** One-line result preview for done items. */
225
+ Preview(card) {
226
+ const text = (card.Result || card.LatestMessage || '').replace(/\s+/g, ' ').trim();
227
+ const max = RealtimeActivityRailComponent.PreviewMaxChars;
228
+ return text.length > max ? `${text.slice(0, max).trimEnd()}…` : text;
229
+ }
230
+ static ɵfac = function RealtimeActivityRailComponent_Factory(__ngFactoryType__) { return new (__ngFactoryType__ || RealtimeActivityRailComponent)(); };
231
+ static ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: RealtimeActivityRailComponent, selectors: [["mj-realtime-activity-rail"]], inputs: { State: "State", DevMode: "DevMode", Embedded: "Embedded" }, outputs: { OpenRunRequested: "OpenRunRequested", OpenArtifactRequested: "OpenArtifactRequested" }, decls: 3, vars: 6, consts: [["aria-label", "Session activity", 1, "rail"], [1, "rail__head"], [1, "rail__list"], ["type", "button", 1, "rail__toggle", 3, "click", "title"], ["aria-hidden", "true", 1, "fa-solid", 3, "ngClass"], [1, "rail__title"], ["aria-hidden", "true", 1, "fa-solid", "fa-list-check"], [1, "act-card", 3, "act-card--running", "act-card--done", "act-card--failed"], [1, "rail__empty"], [1, "act-card"], [1, "act-card__top"], [1, "act-card__name"], [1, "act-status", "act-status--running"], [1, "act-status", "act-status--done"], [1, "act-status", "act-status--failed"], [1, "act-card__step"], ["type", "button", 1, "act-card__artifact-link", 3, "title"], ["type", "button", "title", "Open the delegated agent run record", 1, "act-card__dev-link"], ["aria-hidden", "true", 1, "fa-solid", "fa-spinner", "spin"], ["aria-hidden", "true", 1, "fa-solid", "fa-check"], ["aria-hidden", "true", 1, "fa-solid", "fa-xmark"], [1, "act-card__meta"], [1, "act-card__preview"], ["aria-hidden", "true", 1, "fa-regular", "fa-clock"], ["type", "button", 1, "act-card__artifact-link", 3, "click", "title"], ["aria-hidden", "true", 1, "fa-solid", "fa-file-lines"], ["aria-hidden", "true", 1, "fa-solid", "fa-arrow-right"], ["type", "button", "title", "Open the delegated agent run record", 1, "act-card__dev-link", 3, "click"], ["aria-hidden", "true", 1, "fa-solid", "fa-arrow-up-right-from-square"]], template: function RealtimeActivityRailComponent_Template(rf, ctx) { if (rf & 1) {
232
+ i0.ɵɵelementStart(0, "aside", 0);
233
+ i0.ɵɵconditionalCreate(1, RealtimeActivityRailComponent_Conditional_1_Template, 4, 4, "div", 1);
234
+ i0.ɵɵconditionalCreate(2, RealtimeActivityRailComponent_Conditional_2_Template, 4, 1, "div", 2);
235
+ i0.ɵɵelementEnd();
236
+ } if (rf & 2) {
237
+ i0.ɵɵclassProp("rail--collapsed", ctx.Collapsed && !ctx.Embedded)("rail--embedded", ctx.Embedded);
238
+ i0.ɵɵadvance();
239
+ i0.ɵɵconditional(!ctx.Embedded ? 1 : -1);
240
+ i0.ɵɵadvance();
241
+ i0.ɵɵconditional(!ctx.Collapsed || ctx.Embedded ? 2 : -1);
242
+ } }, dependencies: [CommonModule, i1.NgClass], styles: ["[_nghost-%COMP%] {\n display: block;\n height: 100%;\n --sage: var(--mj-color-violet-400, #a78bfa);\n --sage-bg: color-mix(in srgb, var(--mj-color-violet-400, #a78bfa) 10%, transparent);\n --sage-border: color-mix(in srgb, var(--mj-color-violet-400, #a78bfa) 38%, transparent);\n}\n\n.rail[_ngcontent-%COMP%] {\n width: 308px;\n height: 100%;\n display: flex;\n flex-direction: column;\n border-left: 1px solid var(--mj-border-default);\n background: var(--mj-bg-surface-card);\n transition: width 180ms ease;\n}\n.rail--collapsed[_ngcontent-%COMP%] {\n width: 40px;\n}\n\n\n\n\n.rail--embedded[_ngcontent-%COMP%] {\n width: 100%;\n border-left: 0;\n}\n\n.rail__head[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 8px;\n padding: 10px 12px;\n border-bottom: 1px solid var(--mj-border-default);\n flex-shrink: 0;\n}\n.rail--collapsed[_ngcontent-%COMP%] .rail__head[_ngcontent-%COMP%] {\n justify-content: center;\n padding: 10px 6px;\n border-bottom-color: transparent;\n}\n.rail__toggle[_ngcontent-%COMP%] {\n width: 24px;\n height: 24px;\n display: grid;\n place-items: center;\n background: transparent;\n border: 1px solid var(--mj-border-default);\n border-radius: 6px;\n color: var(--mj-text-muted);\n cursor: pointer;\n flex-shrink: 0;\n font-size: 10px;\n transition: color 140ms ease, border-color 140ms ease;\n}\n.rail__toggle[_ngcontent-%COMP%]:hover {\n color: var(--mj-text-primary);\n border-color: var(--mj-border-strong);\n}\n.rail__title[_ngcontent-%COMP%] {\n font-size: 12px;\n font-weight: 700;\n color: var(--mj-text-secondary);\n display: inline-flex;\n align-items: center;\n gap: 7px;\n white-space: nowrap;\n}\n.rail__title[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n font-size: 11px;\n color: var(--mj-text-muted);\n}\n\n.rail__list[_ngcontent-%COMP%] {\n flex: 1;\n overflow-y: auto;\n padding: 10px;\n display: flex;\n flex-direction: column;\n gap: 8px;\n scrollbar-width: thin;\n scrollbar-color: var(--mj-border-strong) transparent;\n}\n.rail__list[_ngcontent-%COMP%]::-webkit-scrollbar {\n width: 6px;\n}\n.rail__list[_ngcontent-%COMP%]::-webkit-scrollbar-thumb {\n background: var(--mj-border-strong);\n border-radius: 3px;\n}\n\n.rail__empty[_ngcontent-%COMP%] {\n font-size: 11.5px;\n color: var(--mj-text-disabled);\n text-align: center;\n padding: 18px 8px;\n}\n\n\n\n.act-card[_ngcontent-%COMP%] {\n border: 1px solid var(--mj-border-default);\n border-radius: var(--mj-radius-lg, 10px);\n padding: 8px 10px;\n background: var(--mj-bg-surface);\n}\n.act-card--running[_ngcontent-%COMP%] {\n border-color: var(--sage-border);\n background: var(--sage-bg);\n box-shadow: 0 0 0 1px var(--sage-border);\n}\n.act-card--done[_ngcontent-%COMP%], \n.act-card--failed[_ngcontent-%COMP%] {\n opacity: 0.72;\n}\n.act-card--done[_ngcontent-%COMP%]:hover, \n.act-card--failed[_ngcontent-%COMP%]:hover {\n opacity: 1;\n}\n\n.act-card__top[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n justify-content: space-between;\n gap: 8px;\n}\n.act-card__name[_ngcontent-%COMP%] {\n font-size: 12px;\n font-weight: 700;\n color: var(--mj-text-primary);\n min-width: 0;\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n}\n\n.act-status[_ngcontent-%COMP%] {\n display: inline-flex;\n align-items: center;\n gap: 4px;\n font-size: 10px;\n font-weight: 700;\n padding: 1px 7px;\n border-radius: var(--mj-radius-full, 9999px);\n flex-shrink: 0;\n line-height: 1.6;\n}\n.act-status[_ngcontent-%COMP%] i[_ngcontent-%COMP%] { font-size: 8.5px; }\n.act-status--running[_ngcontent-%COMP%] {\n background: color-mix(in srgb, var(--sage) 18%, transparent);\n color: var(--mj-color-violet-300, var(--mj-text-secondary));\n border: 1px solid var(--sage-border);\n}\n.act-status--done[_ngcontent-%COMP%] {\n background: var(--mj-status-success-bg, transparent);\n color: var(--mj-status-success);\n border: 1px solid color-mix(in srgb, var(--mj-status-success) 35%, transparent);\n}\n.act-status--failed[_ngcontent-%COMP%] {\n background: var(--mj-status-error-bg, transparent);\n color: var(--mj-status-error);\n border: 1px solid color-mix(in srgb, var(--mj-status-error) 35%, transparent);\n}\n.spin[_ngcontent-%COMP%] {\n animation: _ngcontent-%COMP%_rail-spin 1.1s linear infinite;\n}\n\n.act-card__step[_ngcontent-%COMP%] {\n font-size: 11.5px;\n color: var(--mj-text-secondary);\n margin-top: 4px;\n overflow: hidden;\n white-space: nowrap;\n text-overflow: ellipsis;\n}\n.act-card--running[_ngcontent-%COMP%] .act-card__step[_ngcontent-%COMP%] {\n color: var(--mj-text-primary);\n font-weight: 600;\n}\n.act-card__meta[_ngcontent-%COMP%] {\n font-size: 10px;\n color: var(--mj-text-muted);\n margin-top: 4px;\n display: inline-flex;\n align-items: center;\n gap: 4px;\n}\n.act-card__preview[_ngcontent-%COMP%] {\n font-size: 11px;\n color: var(--mj-text-muted);\n margin-top: 3px;\n line-height: 1.45;\n display: -webkit-box;\n -webkit-line-clamp: 2;\n -webkit-box-orient: vertical;\n overflow: hidden;\n}\n\n\n\n.act-card__artifact-link[_ngcontent-%COMP%] {\n display: inline-flex;\n align-items: center;\n gap: 5px;\n margin-top: 6px;\n margin-right: 6px;\n padding: 2px 9px;\n border-radius: var(--mj-radius-full, 9999px);\n border: 1px solid var(--sage-border);\n background: var(--sage-bg);\n color: var(--mj-color-violet-300, var(--mj-text-secondary));\n font-family: inherit;\n font-size: 10px;\n font-weight: 700;\n cursor: pointer;\n transition: color 140ms ease, border-color 140ms ease, background 140ms ease;\n}\n.act-card__artifact-link[_ngcontent-%COMP%]:hover {\n color: var(--mj-text-primary);\n border-color: var(--sage);\n background: color-mix(in srgb, var(--sage) 18%, transparent);\n}\n.act-card__artifact-link[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n font-size: 9px;\n}\n\n\n\n.act-card__dev-link[_ngcontent-%COMP%] {\n display: inline-flex;\n align-items: center;\n gap: 4px;\n margin-top: 6px;\n padding: 2px 8px;\n border-radius: var(--mj-radius-full, 9999px);\n border: 1px dashed var(--mj-border-strong);\n background: transparent;\n color: var(--mj-text-muted);\n font-family: inherit;\n font-size: 10px;\n font-weight: 700;\n cursor: pointer;\n transition: color 140ms ease, border-color 140ms ease, background 140ms ease;\n}\n.act-card__dev-link[_ngcontent-%COMP%]:hover {\n color: var(--mj-text-link, var(--mj-brand-primary));\n border-color: var(--mj-brand-primary);\n background: color-mix(in srgb, var(--mj-brand-primary) 8%, transparent);\n}\n.act-card__dev-link[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n font-size: 8px;\n}\n\n@keyframes _ngcontent-%COMP%_rail-spin {\n to { transform: rotate(360deg); }\n}\n\n\n\n\n@media (max-width: 860px) {\n .rail[_ngcontent-%COMP%]:not(.rail--embedded) {\n display: none;\n }\n}"] });
243
+ }
244
+ (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(RealtimeActivityRailComponent, [{
245
+ type: Component,
246
+ args: [{ standalone: true, selector: 'mj-realtime-activity-rail', imports: [CommonModule], template: "<aside class=\"rail\" [class.rail--collapsed]=\"Collapsed && !Embedded\" [class.rail--embedded]=\"Embedded\" aria-label=\"Session activity\">\n @if (!Embedded) {\n <div class=\"rail__head\">\n <button type=\"button\"\n class=\"rail__toggle\"\n (click)=\"Toggle()\"\n [title]=\"Collapsed ? 'Show session activity' : 'Hide session activity'\"\n [attr.aria-expanded]=\"!Collapsed\">\n <i class=\"fa-solid\" [ngClass]=\"Collapsed ? 'fa-chevron-left' : 'fa-chevron-right'\" aria-hidden=\"true\"></i>\n </button>\n @if (!Collapsed) {\n <span class=\"rail__title\">\n <i class=\"fa-solid fa-list-check\" aria-hidden=\"true\"></i>\n Session activity\n </span>\n }\n </div>\n }\n\n @if (!Collapsed || Embedded) {\n <div class=\"rail__list\">\n @for (card of State.Cards; track TrackCard($index, card)) {\n <div class=\"act-card\"\n [class.act-card--running]=\"!card.Done\"\n [class.act-card--done]=\"card.Done && card.Success\"\n [class.act-card--failed]=\"card.Done && !card.Success\">\n <div class=\"act-card__top\">\n <span class=\"act-card__name\">{{ card.AgentName }}</span>\n @if (!card.Done) {\n <span class=\"act-status act-status--running\">\n <i class=\"fa-solid fa-spinner spin\" aria-hidden=\"true\"></i> Running\n </span>\n } @else if (card.Success) {\n <span class=\"act-status act-status--done\">\n <i class=\"fa-solid fa-check\" aria-hidden=\"true\"></i> Done\n </span>\n } @else {\n <span class=\"act-status act-status--failed\">\n <i class=\"fa-solid fa-xmark\" aria-hidden=\"true\"></i> Failed\n </span>\n }\n </div>\n <div class=\"act-card__step\">{{ StepLabel(card) }}</div>\n @if (card.Done) {\n @if (Elapsed(card); as elapsed) {\n <div class=\"act-card__meta\">\n <i class=\"fa-regular fa-clock\" aria-hidden=\"true\"></i> {{ elapsed }}\n </div>\n }\n @if (Preview(card)) {\n <div class=\"act-card__preview\">{{ Preview(card) }}</div>\n }\n }\n @for (artifact of CardArtifacts(card); track artifact.ArtifactVersionID) {\n <button type=\"button\" class=\"act-card__artifact-link\" (click)=\"OpenArtifact(artifact)\"\n [title]=\"'View ' + artifact.Name\">\n <i class=\"fa-solid fa-file-lines\" aria-hidden=\"true\"></i>\n <span>View</span>\n <i class=\"fa-solid fa-arrow-right\" aria-hidden=\"true\"></i>\n </button>\n }\n @if (ShowOpenRun(card)) {\n <button type=\"button\" class=\"act-card__dev-link\" (click)=\"OpenRun(card)\"\n title=\"Open the delegated agent run record\">\n <i class=\"fa-solid fa-arrow-up-right-from-square\" aria-hidden=\"true\"></i>\n <span>Open run</span>\n </button>\n }\n </div>\n } @empty {\n <div class=\"rail__empty\">Tool and agent calls will appear here as they run.</div>\n }\n </div>\n }\n</aside>\n", styles: [":host {\n display: block;\n height: 100%;\n --sage: var(--mj-color-violet-400, #a78bfa);\n --sage-bg: color-mix(in srgb, var(--mj-color-violet-400, #a78bfa) 10%, transparent);\n --sage-border: color-mix(in srgb, var(--mj-color-violet-400, #a78bfa) 38%, transparent);\n}\n\n.rail {\n width: 308px;\n height: 100%;\n display: flex;\n flex-direction: column;\n border-left: 1px solid var(--mj-border-default);\n background: var(--mj-bg-surface-card);\n transition: width 180ms ease;\n}\n.rail--collapsed {\n width: 40px;\n}\n\n/* EMBEDDED in the surface panel's Activity tab: the panel owns chrome + collapse,\n so the rail stretches to the pane and drops its own border. */\n.rail--embedded {\n width: 100%;\n border-left: 0;\n}\n\n.rail__head {\n display: flex;\n align-items: center;\n gap: 8px;\n padding: 10px 12px;\n border-bottom: 1px solid var(--mj-border-default);\n flex-shrink: 0;\n}\n.rail--collapsed .rail__head {\n justify-content: center;\n padding: 10px 6px;\n border-bottom-color: transparent;\n}\n.rail__toggle {\n width: 24px;\n height: 24px;\n display: grid;\n place-items: center;\n background: transparent;\n border: 1px solid var(--mj-border-default);\n border-radius: 6px;\n color: var(--mj-text-muted);\n cursor: pointer;\n flex-shrink: 0;\n font-size: 10px;\n transition: color 140ms ease, border-color 140ms ease;\n}\n.rail__toggle:hover {\n color: var(--mj-text-primary);\n border-color: var(--mj-border-strong);\n}\n.rail__title {\n font-size: 12px;\n font-weight: 700;\n color: var(--mj-text-secondary);\n display: inline-flex;\n align-items: center;\n gap: 7px;\n white-space: nowrap;\n}\n.rail__title i {\n font-size: 11px;\n color: var(--mj-text-muted);\n}\n\n.rail__list {\n flex: 1;\n overflow-y: auto;\n padding: 10px;\n display: flex;\n flex-direction: column;\n gap: 8px;\n scrollbar-width: thin;\n scrollbar-color: var(--mj-border-strong) transparent;\n}\n.rail__list::-webkit-scrollbar {\n width: 6px;\n}\n.rail__list::-webkit-scrollbar-thumb {\n background: var(--mj-border-strong);\n border-radius: 3px;\n}\n\n.rail__empty {\n font-size: 11.5px;\n color: var(--mj-text-disabled);\n text-align: center;\n padding: 18px 8px;\n}\n\n/* ---------- Activity cards ---------- */\n.act-card {\n border: 1px solid var(--mj-border-default);\n border-radius: var(--mj-radius-lg, 10px);\n padding: 8px 10px;\n background: var(--mj-bg-surface);\n}\n.act-card--running {\n border-color: var(--sage-border);\n background: var(--sage-bg);\n box-shadow: 0 0 0 1px var(--sage-border);\n}\n.act-card--done,\n.act-card--failed {\n opacity: 0.72;\n}\n.act-card--done:hover,\n.act-card--failed:hover {\n opacity: 1;\n}\n\n.act-card__top {\n display: flex;\n align-items: center;\n justify-content: space-between;\n gap: 8px;\n}\n.act-card__name {\n font-size: 12px;\n font-weight: 700;\n color: var(--mj-text-primary);\n min-width: 0;\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n}\n\n.act-status {\n display: inline-flex;\n align-items: center;\n gap: 4px;\n font-size: 10px;\n font-weight: 700;\n padding: 1px 7px;\n border-radius: var(--mj-radius-full, 9999px);\n flex-shrink: 0;\n line-height: 1.6;\n}\n.act-status i { font-size: 8.5px; }\n.act-status--running {\n background: color-mix(in srgb, var(--sage) 18%, transparent);\n color: var(--mj-color-violet-300, var(--mj-text-secondary));\n border: 1px solid var(--sage-border);\n}\n.act-status--done {\n background: var(--mj-status-success-bg, transparent);\n color: var(--mj-status-success);\n border: 1px solid color-mix(in srgb, var(--mj-status-success) 35%, transparent);\n}\n.act-status--failed {\n background: var(--mj-status-error-bg, transparent);\n color: var(--mj-status-error);\n border: 1px solid color-mix(in srgb, var(--mj-status-error) 35%, transparent);\n}\n.spin {\n animation: rail-spin 1.1s linear infinite;\n}\n\n.act-card__step {\n font-size: 11.5px;\n color: var(--mj-text-secondary);\n margin-top: 4px;\n overflow: hidden;\n white-space: nowrap;\n text-overflow: ellipsis;\n}\n.act-card--running .act-card__step {\n color: var(--mj-text-primary);\n font-weight: 600;\n}\n.act-card__meta {\n font-size: 10px;\n color: var(--mj-text-muted);\n margin-top: 4px;\n display: inline-flex;\n align-items: center;\n gap: 4px;\n}\n.act-card__preview {\n font-size: 11px;\n color: var(--mj-text-muted);\n margin-top: 3px;\n line-height: 1.45;\n display: -webkit-box;\n -webkit-line-clamp: 2;\n -webkit-box-orient: vertical;\n overflow: hidden;\n}\n\n/* \"View \u2192\" chip for an artifact a delegated run produced (focuses its surface tab) */\n.act-card__artifact-link {\n display: inline-flex;\n align-items: center;\n gap: 5px;\n margin-top: 6px;\n margin-right: 6px;\n padding: 2px 9px;\n border-radius: var(--mj-radius-full, 9999px);\n border: 1px solid var(--sage-border);\n background: var(--sage-bg);\n color: var(--mj-color-violet-300, var(--mj-text-secondary));\n font-family: inherit;\n font-size: 10px;\n font-weight: 700;\n cursor: pointer;\n transition: color 140ms ease, border-color 140ms ease, background 140ms ease;\n}\n.act-card__artifact-link:hover {\n color: var(--mj-text-primary);\n border-color: var(--sage);\n background: color-mix(in srgb, var(--sage) 18%, transparent);\n}\n.act-card__artifact-link i {\n font-size: 9px;\n}\n\n/* Gear-gated developer link to the delegated run record */\n.act-card__dev-link {\n display: inline-flex;\n align-items: center;\n gap: 4px;\n margin-top: 6px;\n padding: 2px 8px;\n border-radius: var(--mj-radius-full, 9999px);\n border: 1px dashed var(--mj-border-strong);\n background: transparent;\n color: var(--mj-text-muted);\n font-family: inherit;\n font-size: 10px;\n font-weight: 700;\n cursor: pointer;\n transition: color 140ms ease, border-color 140ms ease, background 140ms ease;\n}\n.act-card__dev-link:hover {\n color: var(--mj-text-link, var(--mj-brand-primary));\n border-color: var(--mj-brand-primary);\n background: color-mix(in srgb, var(--mj-brand-primary) 8%, transparent);\n}\n.act-card__dev-link i {\n font-size: 8px;\n}\n\n@keyframes rail-spin {\n to { transform: rotate(360deg); }\n}\n\n/* On narrow widths the STANDALONE rail stacks out of the way (overlay falls back to a\n single column). The embedded rail is governed by the surface panel's own breakpoint. */\n@media (max-width: 860px) {\n .rail:not(.rail--embedded) {\n display: none;\n }\n}\n"] }]
247
+ }], null, { State: [{
248
+ type: Input,
249
+ args: [{ required: true }]
250
+ }], DevMode: [{
251
+ type: Input
252
+ }], Embedded: [{
253
+ type: Input
254
+ }], OpenRunRequested: [{
255
+ type: Output
256
+ }], OpenArtifactRequested: [{
257
+ type: Output
258
+ }] }); })();
259
+ (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassDebugInfo(RealtimeActivityRailComponent, { className: "RealtimeActivityRailComponent", filePath: "src/lib/components/realtime/realtime-activity-rail.component.ts", lineNumber: 29 }); })();
260
+ //# sourceMappingURL=realtime-activity-rail.component.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"realtime-activity-rail.component.js","sourceRoot":"","sources":["../../../../src/lib/components/realtime/realtime-activity-rail.component.ts","../../../../src/lib/components/realtime/realtime-activity-rail.component.html"],"names":[],"mappings":"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","sourcesContent":["import { Component, EventEmitter, Input, Output, OnInit, OnDestroy, ChangeDetectorRef, inject } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { Subscription } from 'rxjs';\nimport {\n RealtimeSessionState, RealtimeDelegationCardVM, FriendlyStepLabel, FormatElapsed\n} from './realtime-session-state';\nimport { ParsedDelegationArtifact } from '../../services/delegation-result-parser';\n\n/**\n * The \"Session activity\" RIGHT RAIL of the call overlay: a compact, newest-first list\n * of EVERY tool/agent call of the session — so parallel/multiple delegations live here\n * and the conversation thread stays clean.\n *\n * Each entry shows agent name, status (Running w/ spinner | Done | Failed), the latest\n * friendly step label, elapsed time for finished work, and a one-line result preview\n * for done items. Active items are emphasized; finished items are dimmed.\n *\n * Collapsible via the chevron in its header (collapses to a slim toggle strip).\n * Presentational over the same {@link RealtimeSessionState} the thread renders —\n * no subscriptions of its own beyond the state's change notifications.\n */\n@Component({\n standalone: true,\n selector: 'mj-realtime-activity-rail',\n imports: [CommonModule],\n templateUrl: './realtime-activity-rail.component.html',\n styleUrl: './realtime-activity-rail.component.css'\n})\nexport class RealtimeActivityRailComponent implements OnInit, OnDestroy {\n /** Maximum characters of the result preview in a done card. */\n private static readonly PreviewMaxChars = 90;\n\n /** Shared live-session state, owned by the overlay shell. */\n @Input({ required: true }) State!: RealtimeSessionState;\n\n /** Whether developer affordances (\"Open run\" links) are revealed (gear-gated). */\n @Input() DevMode = false;\n\n /**\n * EMBEDDED mode: the rail renders as the content of the surface panel's Activity tab —\n * its own header/collapse chrome is hidden (the panel's tab strip owns collapse) and it\n * stretches to the pane's full width. Default `false` keeps the original standalone\n * right-rail presentation for any other consumer.\n */\n @Input() Embedded = false;\n\n /** Emitted with the delegated run's ID when an entry's dev \"Open run\" link is clicked. */\n @Output() OpenRunRequested = new EventEmitter<string>();\n\n /** Emitted when an entry's \"View\" artifact chip is clicked (focuses the artifact's tab). */\n @Output() OpenArtifactRequested = new EventEmitter<ParsedDelegationArtifact>();\n\n /** Whether the rail is collapsed to its slim toggle strip. */\n public Collapsed = false;\n\n private changedSub?: Subscription;\n private cdr = inject(ChangeDetectorRef);\n\n ngOnInit(): void {\n this.changedSub = this.State.Changed$.subscribe(() => this.cdr.markForCheck());\n }\n\n ngOnDestroy(): void {\n this.changedSub?.unsubscribe();\n }\n\n /** Toggle the rail between expanded and slim-collapsed. */\n public Toggle(): void {\n this.Collapsed = !this.Collapsed;\n }\n\n /** track fn for the @for over cards. */\n public TrackCard(index: number, card: RealtimeDelegationCardVM): string {\n return card.CallID;\n }\n\n /** Friendly label of the card's latest step. */\n public StepLabel(card: RealtimeDelegationCardVM): string {\n return FriendlyStepLabel(card.LatestStep, card.LatestMessage);\n }\n\n /** Elapsed duration for finished work (\"8s\", \"1m 04s\"); null while running (kept cheap). */\n public Elapsed(card: RealtimeDelegationCardVM): string | null {\n if (card.FinishedAt == null) {\n return null;\n }\n return FormatElapsed(card.FinishedAt - card.StartedAt);\n }\n\n /** True when the dev \"Open run\" link should render for this card (gear on + run id known). */\n public ShowOpenRun(card: RealtimeDelegationCardVM): boolean {\n return this.DevMode && !!card.RunID;\n }\n\n /** Emits the open-run request for the card's delegated run. */\n public OpenRun(card: RealtimeDelegationCardVM): void {\n if (card.RunID) {\n this.OpenRunRequested.emit(card.RunID);\n }\n }\n\n /** The artifacts a done card carries (empty array when none — keeps the template simple). */\n public CardArtifacts(card: RealtimeDelegationCardVM): ParsedDelegationArtifact[] {\n return card.Done && card.Artifacts ? card.Artifacts : [];\n }\n\n /** Emits the open-artifact request for a card's produced artifact. */\n public OpenArtifact(artifact: ParsedDelegationArtifact): void {\n this.OpenArtifactRequested.emit(artifact);\n }\n\n /** One-line result preview for done items. */\n public Preview(card: RealtimeDelegationCardVM): string {\n const text = (card.Result || card.LatestMessage || '').replace(/\\s+/g, ' ').trim();\n const max = RealtimeActivityRailComponent.PreviewMaxChars;\n return text.length > max ? `${text.slice(0, max).trimEnd()}…` : text;\n }\n}\n","<aside class=\"rail\" [class.rail--collapsed]=\"Collapsed && !Embedded\" [class.rail--embedded]=\"Embedded\" aria-label=\"Session activity\">\n @if (!Embedded) {\n <div class=\"rail__head\">\n <button type=\"button\"\n class=\"rail__toggle\"\n (click)=\"Toggle()\"\n [title]=\"Collapsed ? 'Show session activity' : 'Hide session activity'\"\n [attr.aria-expanded]=\"!Collapsed\">\n <i class=\"fa-solid\" [ngClass]=\"Collapsed ? 'fa-chevron-left' : 'fa-chevron-right'\" aria-hidden=\"true\"></i>\n </button>\n @if (!Collapsed) {\n <span class=\"rail__title\">\n <i class=\"fa-solid fa-list-check\" aria-hidden=\"true\"></i>\n Session activity\n </span>\n }\n </div>\n }\n\n @if (!Collapsed || Embedded) {\n <div class=\"rail__list\">\n @for (card of State.Cards; track TrackCard($index, card)) {\n <div class=\"act-card\"\n [class.act-card--running]=\"!card.Done\"\n [class.act-card--done]=\"card.Done && card.Success\"\n [class.act-card--failed]=\"card.Done && !card.Success\">\n <div class=\"act-card__top\">\n <span class=\"act-card__name\">{{ card.AgentName }}</span>\n @if (!card.Done) {\n <span class=\"act-status act-status--running\">\n <i class=\"fa-solid fa-spinner spin\" aria-hidden=\"true\"></i> Running\n </span>\n } @else if (card.Success) {\n <span class=\"act-status act-status--done\">\n <i class=\"fa-solid fa-check\" aria-hidden=\"true\"></i> Done\n </span>\n } @else {\n <span class=\"act-status act-status--failed\">\n <i class=\"fa-solid fa-xmark\" aria-hidden=\"true\"></i> Failed\n </span>\n }\n </div>\n <div class=\"act-card__step\">{{ StepLabel(card) }}</div>\n @if (card.Done) {\n @if (Elapsed(card); as elapsed) {\n <div class=\"act-card__meta\">\n <i class=\"fa-regular fa-clock\" aria-hidden=\"true\"></i> {{ elapsed }}\n </div>\n }\n @if (Preview(card)) {\n <div class=\"act-card__preview\">{{ Preview(card) }}</div>\n }\n }\n @for (artifact of CardArtifacts(card); track artifact.ArtifactVersionID) {\n <button type=\"button\" class=\"act-card__artifact-link\" (click)=\"OpenArtifact(artifact)\"\n [title]=\"'View ' + artifact.Name\">\n <i class=\"fa-solid fa-file-lines\" aria-hidden=\"true\"></i>\n <span>View</span>\n <i class=\"fa-solid fa-arrow-right\" aria-hidden=\"true\"></i>\n </button>\n }\n @if (ShowOpenRun(card)) {\n <button type=\"button\" class=\"act-card__dev-link\" (click)=\"OpenRun(card)\"\n title=\"Open the delegated agent run record\">\n <i class=\"fa-solid fa-arrow-up-right-from-square\" aria-hidden=\"true\"></i>\n <span>Open run</span>\n </button>\n }\n </div>\n } @empty {\n <div class=\"rail__empty\">Tool and agent calls will appear here as they run.</div>\n }\n </div>\n }\n</aside>\n"]}
@@ -0,0 +1,117 @@
1
+ import { EventEmitter } from '@angular/core';
2
+ import { VoiceConnectionState } from '../../services/realtime-session.service';
3
+ import { RealtimeUxDensity } from './realtime-disclosure';
4
+ import * as i0 from "@angular/core";
5
+ /**
6
+ * The call overlay's UNIFIED APP-BAR (per Redesign A — `plans/realtime/mockups/redesign-a.html`):
7
+ * ONE header that owns identity, state, and every session action.
8
+ *
9
+ * - LEFT: the glowing agent orb (motion = turn-state), agent name + "Co-Agent" badge,
10
+ * "speaking as" subline (+ subtle realtime-model suffix), and the state pill that swaps
11
+ * between a waveform (speaking/listening) and a spinner (connecting/thinking).
12
+ * - RIGHT (live): the disclosure-gated action cluster — Captions toggle (level 1+), the
13
+ * gear (level 2+, opens a popover hosting the Simple/Standard/Pro/Auto INTERFACE DENSITY
14
+ * control — the progressive-disclosure escape hatch — plus the developer-links toggle),
15
+ * Minimize (hide the call view, call stays live), and the End-call pill (level 2+; below
16
+ * that the phone-call strip's big End control owns ending).
17
+ * - RIGHT (review): "Start live session" (resume, affirmative leads) + Close — the
18
+ * review session's exit lives up here in the header bar, not floating in the body.
19
+ *
20
+ * Which controls render is decided by the OVERLAY (it owns the disclosure model) and
21
+ * passed down as booleans — this component stays purely presentational.
22
+ */
23
+ export declare class RealtimeAgentBannerComponent {
24
+ /** Current connection / turn state — drives the orb animation + state label. */
25
+ State: VoiceConnectionState;
26
+ /** Display name of the agent the voice session fronts (e.g. "Sage"). */
27
+ AgentName: string;
28
+ /**
29
+ * Display name of the realtime model the live session runs on (e.g. "GPT Realtime 2").
30
+ * Rendered as a subtle suffix in the identity line; hidden when null/empty.
31
+ */
32
+ ModelName: string | null;
33
+ /** Whether developer affordances (the "Open session" link) are revealed (gear-gated). */
34
+ DevMode: boolean;
35
+ /** ID of the server-side agent session record (`MJ: AI Agent Sessions`), when known. */
36
+ SessionID: string | null;
37
+ /**
38
+ * SESSION REVIEW presentation: the banner shows the past session's identity
39
+ * (review badge, started→closed range, close-reason chip) instead of live turn-state,
40
+ * and the action cluster swaps to Start-live + Close.
41
+ */
42
+ ReviewMode: boolean;
43
+ /** When reviewing: when the past session started (`__mj_CreatedAt`). */
44
+ ReviewStartedAt: Date | null;
45
+ /** When reviewing: when the past session closed (null while it is still open). */
46
+ ReviewClosedAt: Date | null;
47
+ /** When reviewing: why the past session closed (`Explicit` | `Janitor` | `Shutdown` | `Error`), when known. */
48
+ ReviewCloseReason: string | null;
49
+ /** Whether captions are currently shown (active state on the captions control). */
50
+ CaptionsOn: boolean;
51
+ /** Whether the captions control renders (disclosure level 1+). */
52
+ ShowCaptionsControl: boolean;
53
+ /** Whether the gear (density escape hatch + dev toggle) renders (disclosure level 2+). */
54
+ ShowGear: boolean;
55
+ /** Whether the End-call pill renders here (level 2+; the strip's big End owns it below). */
56
+ ShowEnd: boolean;
57
+ /** Whether the Minimize control renders (live sessions only). */
58
+ ShowMinimize: boolean;
59
+ /** Whether the "Return to pure audio" control renders (live + disclosure level above 0). */
60
+ ShowPureAudio: boolean;
61
+ /** The user's current interface-density override (selected state in the gear popover). */
62
+ Density: RealtimeUxDensity;
63
+ /** Emitted with the session record's ID when the dev "Open session" link is clicked. */
64
+ OpenSessionRequested: EventEmitter<string>;
65
+ /** Emitted when the user toggles captions; the overlay flips its caption state. */
66
+ CaptionsToggled: EventEmitter<boolean>;
67
+ /** Emitted when the user toggles developer links from the gear popover. */
68
+ DevModeToggled: EventEmitter<boolean>;
69
+ /** Emitted when the user picks an interface density in the gear popover. */
70
+ DensityChanged: EventEmitter<RealtimeUxDensity>;
71
+ /** Emitted when the user minimizes the call view (the call stays live). */
72
+ MinimizeRequested: EventEmitter<void>;
73
+ /** Emitted when the user asks to return to the pure-audio surface (level 0, this session). */
74
+ PureAudioRequested: EventEmitter<void>;
75
+ /** Emitted when the user ends the call from the app-bar's End pill. */
76
+ EndRequested: EventEmitter<void>;
77
+ /** Review only: the user asked to RESUME the reviewed session as a new live call. */
78
+ StartLiveRequested: EventEmitter<void>;
79
+ /** Review only: the user asked to close the review and return to the conversation. */
80
+ CloseRequested: EventEmitter<void>;
81
+ /** Whether the gear popover is open (closed by any outside click). */
82
+ GearOpen: boolean;
83
+ /** The density choices the gear popover offers, in display order. */
84
+ readonly Densities: ReadonlyArray<{
85
+ Key: RealtimeUxDensity;
86
+ Label: string;
87
+ }>;
88
+ /** True when the dev "Open session" link should render (gear on + session id known). */
89
+ get ShowOpenSession(): boolean;
90
+ /** Emits the open-session request for the live agent session record. */
91
+ OpenSession(): void;
92
+ /** Toggles the captions control and notifies the overlay. */
93
+ ToggleCaptions(): void;
94
+ /** Opens/closes the gear popover (stops propagation so the outside-click close skips it). */
95
+ ToggleGear(event: MouseEvent): void;
96
+ /** Any outside click closes the gear popover. */
97
+ OnDocumentClick(): void;
98
+ /** Gear popover: pick an interface density (the overlay applies + persists it). */
99
+ SelectDensity(density: RealtimeUxDensity): void;
100
+ /** Gear popover: toggle developer links. */
101
+ ToggleDev(): void;
102
+ /** The review banner's "started → closed" time-range label (empty when the start is unknown). */
103
+ get ReviewRangeLabel(): string;
104
+ /** Human label for the close-reason chip (empty hides the chip). */
105
+ get ReviewCloseReasonLabel(): string;
106
+ /** Compact date+time stamp; same-day end stamps drop the redundant date part. */
107
+ private formatStamp;
108
+ /** Maps the realtime state to the orb's `data-state` (the orb only models active turn-states). */
109
+ OrbState(state: VoiceConnectionState): 'speaking' | 'listening' | 'thinking';
110
+ /** Human-readable state label, agent-aware where it reads better. */
111
+ StateLabel(state: VoiceConnectionState): string;
112
+ /** True while the state pill should show a spinner instead of the waveform. */
113
+ IsBusy(state: VoiceConnectionState): boolean;
114
+ static ɵfac: i0.ɵɵFactoryDeclaration<RealtimeAgentBannerComponent, never>;
115
+ static ɵcmp: i0.ɵɵComponentDeclaration<RealtimeAgentBannerComponent, "mj-realtime-agent-banner", never, { "State": { "alias": "State"; "required": true; }; "AgentName": { "alias": "AgentName"; "required": false; }; "ModelName": { "alias": "ModelName"; "required": false; }; "DevMode": { "alias": "DevMode"; "required": false; }; "SessionID": { "alias": "SessionID"; "required": false; }; "ReviewMode": { "alias": "ReviewMode"; "required": false; }; "ReviewStartedAt": { "alias": "ReviewStartedAt"; "required": false; }; "ReviewClosedAt": { "alias": "ReviewClosedAt"; "required": false; }; "ReviewCloseReason": { "alias": "ReviewCloseReason"; "required": false; }; "CaptionsOn": { "alias": "CaptionsOn"; "required": false; }; "ShowCaptionsControl": { "alias": "ShowCaptionsControl"; "required": false; }; "ShowGear": { "alias": "ShowGear"; "required": false; }; "ShowEnd": { "alias": "ShowEnd"; "required": false; }; "ShowMinimize": { "alias": "ShowMinimize"; "required": false; }; "ShowPureAudio": { "alias": "ShowPureAudio"; "required": false; }; "Density": { "alias": "Density"; "required": false; }; }, { "OpenSessionRequested": "OpenSessionRequested"; "CaptionsToggled": "CaptionsToggled"; "DevModeToggled": "DevModeToggled"; "DensityChanged": "DensityChanged"; "MinimizeRequested": "MinimizeRequested"; "PureAudioRequested": "PureAudioRequested"; "EndRequested": "EndRequested"; "StartLiveRequested": "StartLiveRequested"; "CloseRequested": "CloseRequested"; }, never, never, true, never>;
116
+ }
117
+ //# sourceMappingURL=realtime-agent-banner.component.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"realtime-agent-banner.component.d.ts","sourceRoot":"","sources":["../../../../src/lib/components/realtime/realtime-agent-banner.component.ts"],"names":[],"mappings":"AAAA,OAAO,EAAa,YAAY,EAA+B,MAAM,eAAe,CAAC;AAErF,OAAO,EAAE,oBAAoB,EAAE,MAAM,yCAAyC,CAAC;AAC/E,OAAO,EAAE,iBAAiB,EAAE,MAAM,uBAAuB,CAAC;;AAE1D;;;;;;;;;;;;;;;;;GAiBG;AACH,qBAOa,4BAA4B;IACvC,gFAAgF;IACrD,KAAK,EAAG,oBAAoB,CAAC;IAExD,wEAAwE;IAC/D,SAAS,SAAe;IAEjC;;;OAGG;IACM,SAAS,EAAE,MAAM,GAAG,IAAI,CAAQ;IAEzC,yFAAyF;IAChF,OAAO,UAAS;IAEzB,wFAAwF;IAC/E,SAAS,EAAE,MAAM,GAAG,IAAI,CAAQ;IAEzC;;;;OAIG;IACM,UAAU,UAAS;IAE5B,wEAAwE;IAC/D,eAAe,EAAE,IAAI,GAAG,IAAI,CAAQ;IAE7C,kFAAkF;IACzE,cAAc,EAAE,IAAI,GAAG,IAAI,CAAQ;IAE5C,+GAA+G;IACtG,iBAAiB,EAAE,MAAM,GAAG,IAAI,CAAQ;IAIjD,mFAAmF;IAC1E,UAAU,UAAQ;IAE3B,kEAAkE;IACzD,mBAAmB,UAAS;IAErC,0FAA0F;IACjF,QAAQ,UAAS;IAE1B,4FAA4F;IACnF,OAAO,UAAS;IAEzB,iEAAiE;IACxD,YAAY,UAAS;IAE9B,4FAA4F;IACnF,aAAa,UAAS;IAE/B,0FAA0F;IACjF,OAAO,EAAE,iBAAiB,CAAU;IAE7C,wFAAwF;IAC9E,oBAAoB,uBAA8B;IAE5D,mFAAmF;IACzE,eAAe,wBAA+B;IAExD,2EAA2E;IACjE,cAAc,wBAA+B;IAEvD,4EAA4E;IAClE,cAAc,kCAAyC;IAEjE,2EAA2E;IACjE,iBAAiB,qBAA4B;IAEvD,8FAA8F;IACpF,kBAAkB,qBAA4B;IAExD,uEAAuE;IAC7D,YAAY,qBAA4B;IAElD,qFAAqF;IAC3E,kBAAkB,qBAA4B;IAExD,sFAAsF;IAC5E,cAAc,qBAA4B;IAEpD,sEAAsE;IAC/D,QAAQ,UAAS;IAExB,qEAAqE;IACrE,SAAgB,SAAS,EAAE,aAAa,CAAC;QAAE,GAAG,EAAE,iBAAiB,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,CAAC,CAKjF;IAEF,wFAAwF;IACxF,IAAW,eAAe,IAAI,OAAO,CAEpC;IAED,wEAAwE;IACjE,WAAW,IAAI,IAAI;IAM1B,6DAA6D;IACtD,cAAc,IAAI,IAAI;IAK7B,6FAA6F;IACtF,UAAU,CAAC,KAAK,EAAE,UAAU,GAAG,IAAI;IAK1C,iDAAiD;IAE1C,eAAe,IAAI,IAAI;IAM9B,mFAAmF;IAC5E,aAAa,CAAC,OAAO,EAAE,iBAAiB,GAAG,IAAI;IAItD,4CAA4C;IACrC,SAAS,IAAI,IAAI;IAKxB,iGAAiG;IACjG,IAAW,gBAAgB,IAAI,MAAM,CASpC;IAED,oEAAoE;IACpE,IAAW,sBAAsB,IAAI,MAAM,CAQ1C;IAED,iFAAiF;IACjF,OAAO,CAAC,WAAW;IAQnB,kGAAkG;IAC3F,QAAQ,CAAC,KAAK,EAAE,oBAAoB,GAAG,UAAU,GAAG,WAAW,GAAG,UAAU;IAQnF,qEAAqE;IAC9D,UAAU,CAAC,KAAK,EAAE,oBAAoB,GAAG,MAAM;IAYtD,+EAA+E;IACxE,MAAM,CAAC,KAAK,EAAE,oBAAoB,GAAG,OAAO;yCAlMxC,4BAA4B;2CAA5B,4BAA4B;CAqMxC"}