@memberjunction/ng-conversations 5.43.0 → 5.44.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 (351) hide show
  1. package/dist/lib/components/active-tasks/active-tasks-panel.component.d.ts +0 -1
  2. package/dist/lib/components/active-tasks/active-tasks-panel.component.d.ts.map +1 -1
  3. package/dist/lib/components/active-tasks/active-tasks-panel.component.js +56 -52
  4. package/dist/lib/components/active-tasks/active-tasks-panel.component.js.map +1 -1
  5. package/dist/lib/components/artifact/artifact-share-modal.component.js +37 -41
  6. package/dist/lib/components/artifact/artifact-share-modal.component.js.map +1 -1
  7. package/dist/lib/components/collection/collection-form-modal.component.d.ts.map +1 -1
  8. package/dist/lib/components/collection/collection-form-modal.component.js +10 -14
  9. package/dist/lib/components/collection/collection-form-modal.component.js.map +1 -1
  10. package/dist/lib/components/collection/collection-share-modal.component.js +41 -45
  11. package/dist/lib/components/collection/collection-share-modal.component.js.map +1 -1
  12. package/dist/lib/components/collection/collection-view.component.d.ts.map +1 -1
  13. package/dist/lib/components/collection/collection-view.component.js +22 -36
  14. package/dist/lib/components/collection/collection-view.component.js.map +1 -1
  15. package/dist/lib/components/collection/collections-full-view.component.d.ts +4 -0
  16. package/dist/lib/components/collection/collections-full-view.component.d.ts.map +1 -1
  17. package/dist/lib/components/collection/collections-full-view.component.js +134 -166
  18. package/dist/lib/components/collection/collections-full-view.component.js.map +1 -1
  19. package/dist/lib/components/conversation/conversation-chat-area.component.d.ts +73 -8
  20. package/dist/lib/components/conversation/conversation-chat-area.component.d.ts.map +1 -1
  21. package/dist/lib/components/conversation/conversation-chat-area.component.js +487 -123
  22. package/dist/lib/components/conversation/conversation-chat-area.component.js.map +1 -1
  23. package/dist/lib/components/conversation/pinned-messages-panel.component.js +6 -9
  24. package/dist/lib/components/conversation/pinned-messages-panel.component.js.map +1 -1
  25. package/dist/lib/components/library/library-full-view.component.d.ts.map +1 -1
  26. package/dist/lib/components/library/library-full-view.component.js +20 -24
  27. package/dist/lib/components/library/library-full-view.component.js.map +1 -1
  28. package/dist/lib/components/members/members-modal.component.d.ts.map +1 -1
  29. package/dist/lib/components/members/members-modal.component.js +10 -11
  30. package/dist/lib/components/members/members-modal.component.js.map +1 -1
  31. package/dist/lib/components/mention/mention-dropdown.component.js +49 -28
  32. package/dist/lib/components/mention/mention-dropdown.component.js.map +1 -1
  33. package/dist/lib/components/mention/mention-editor.component.d.ts.map +1 -1
  34. package/dist/lib/components/mention/mention-editor.component.js +24 -10
  35. package/dist/lib/components/mention/mention-editor.component.js.map +1 -1
  36. package/dist/lib/components/message/message-input-box.component.d.ts +11 -16
  37. package/dist/lib/components/message/message-input-box.component.d.ts.map +1 -1
  38. package/dist/lib/components/message/message-input-box.component.js +52 -46
  39. package/dist/lib/components/message/message-input-box.component.js.map +1 -1
  40. package/dist/lib/components/message/message-input.component.d.ts +83 -18
  41. package/dist/lib/components/message/message-input.component.d.ts.map +1 -1
  42. package/dist/lib/components/message/message-input.component.js +238 -151
  43. package/dist/lib/components/message/message-input.component.js.map +1 -1
  44. package/dist/lib/components/message/message-item.component.d.ts +10 -1
  45. package/dist/lib/components/message/message-item.component.d.ts.map +1 -1
  46. package/dist/lib/components/message/message-item.component.js +67 -15
  47. package/dist/lib/components/message/message-item.component.js.map +1 -1
  48. package/dist/lib/components/message/message-list.component.js +6 -9
  49. package/dist/lib/components/message/message-list.component.js.map +1 -1
  50. package/dist/lib/components/overlay/chat-overlay.component.d.ts +3 -0
  51. package/dist/lib/components/overlay/chat-overlay.component.d.ts.map +1 -1
  52. package/dist/lib/components/overlay/chat-overlay.component.js +9 -4
  53. package/dist/lib/components/overlay/chat-overlay.component.js.map +1 -1
  54. package/dist/lib/components/realtime/channels/base-realtime-channel-client.d.ts +45 -0
  55. package/dist/lib/components/realtime/channels/base-realtime-channel-client.d.ts.map +1 -1
  56. package/dist/lib/components/realtime/channels/base-realtime-channel-client.js +10 -0
  57. package/dist/lib/components/realtime/channels/base-realtime-channel-client.js.map +1 -1
  58. package/dist/lib/components/realtime/channels/client-context-channel.d.ts +46 -0
  59. package/dist/lib/components/realtime/channels/client-context-channel.d.ts.map +1 -0
  60. package/dist/lib/components/realtime/channels/client-context-channel.js +174 -0
  61. package/dist/lib/components/realtime/channels/client-context-channel.js.map +1 -0
  62. package/dist/lib/components/realtime/evidence-playback/realtime-evidence-playback.component.d.ts +123 -0
  63. package/dist/lib/components/realtime/evidence-playback/realtime-evidence-playback.component.d.ts.map +1 -0
  64. package/dist/lib/components/realtime/evidence-playback/realtime-evidence-playback.component.js +397 -0
  65. package/dist/lib/components/realtime/evidence-playback/realtime-evidence-playback.component.js.map +1 -0
  66. package/dist/lib/components/realtime/media/media-channel-state.d.ts +103 -0
  67. package/dist/lib/components/realtime/media/media-channel-state.d.ts.map +1 -0
  68. package/dist/lib/components/realtime/media/media-channel-state.js +143 -0
  69. package/dist/lib/components/realtime/media/media-channel-state.js.map +1 -0
  70. package/dist/lib/components/realtime/media/media-channel-tools.d.ts +24 -0
  71. package/dist/lib/components/realtime/media/media-channel-tools.d.ts.map +1 -0
  72. package/dist/lib/components/realtime/media/media-channel-tools.js +107 -0
  73. package/dist/lib/components/realtime/media/media-channel-tools.js.map +1 -0
  74. package/dist/lib/components/realtime/media/media-channel.d.ts +89 -0
  75. package/dist/lib/components/realtime/media/media-channel.d.ts.map +1 -0
  76. package/dist/lib/components/realtime/media/media-channel.js +253 -0
  77. package/dist/lib/components/realtime/media/media-channel.js.map +1 -0
  78. package/dist/lib/components/realtime/media/realtime-media-surface.component.d.ts +141 -0
  79. package/dist/lib/components/realtime/media/realtime-media-surface.component.d.ts.map +1 -0
  80. package/dist/lib/components/realtime/media/realtime-media-surface.component.js +574 -0
  81. package/dist/lib/components/realtime/media/realtime-media-surface.component.js.map +1 -0
  82. package/dist/lib/components/realtime/realtime-activity-rail.component.d.ts +59 -14
  83. package/dist/lib/components/realtime/realtime-activity-rail.component.d.ts.map +1 -1
  84. package/dist/lib/components/realtime/realtime-activity-rail.component.js +277 -74
  85. package/dist/lib/components/realtime/realtime-activity-rail.component.js.map +1 -1
  86. package/dist/lib/components/realtime/realtime-agent-banner.component.d.ts +28 -27
  87. package/dist/lib/components/realtime/realtime-agent-banner.component.d.ts.map +1 -1
  88. package/dist/lib/components/realtime/realtime-agent-banner.component.js +144 -143
  89. package/dist/lib/components/realtime/realtime-agent-banner.component.js.map +1 -1
  90. package/dist/lib/components/realtime/realtime-agent-picker.component.d.ts +12 -0
  91. package/dist/lib/components/realtime/realtime-agent-picker.component.d.ts.map +1 -1
  92. package/dist/lib/components/realtime/realtime-agent-picker.component.js +105 -43
  93. package/dist/lib/components/realtime/realtime-agent-picker.component.js.map +1 -1
  94. package/dist/lib/components/realtime/realtime-audio-visuals.d.ts +2 -2
  95. package/dist/lib/components/realtime/realtime-audio-visuals.d.ts.map +1 -1
  96. package/dist/lib/components/realtime/realtime-audio-visuals.js.map +1 -1
  97. package/dist/lib/components/realtime/realtime-composer.component.d.ts +41 -7
  98. package/dist/lib/components/realtime/realtime-composer.component.d.ts.map +1 -1
  99. package/dist/lib/components/realtime/realtime-composer.component.js +216 -102
  100. package/dist/lib/components/realtime/realtime-composer.component.js.map +1 -1
  101. package/dist/lib/components/realtime/realtime-delegation-card.component.d.ts +0 -2
  102. package/dist/lib/components/realtime/realtime-delegation-card.component.d.ts.map +1 -1
  103. package/dist/lib/components/realtime/realtime-delegation-card.component.js +67 -71
  104. package/dist/lib/components/realtime/realtime-delegation-card.component.js.map +1 -1
  105. package/dist/lib/components/realtime/realtime-session-overlay.component.d.ts +364 -44
  106. package/dist/lib/components/realtime/realtime-session-overlay.component.d.ts.map +1 -1
  107. package/dist/lib/components/realtime/realtime-session-overlay.component.js +839 -153
  108. package/dist/lib/components/realtime/realtime-session-overlay.component.js.map +1 -1
  109. package/dist/lib/components/realtime/realtime-session-state.d.ts +5 -5
  110. package/dist/lib/components/realtime/realtime-session-state.d.ts.map +1 -1
  111. package/dist/lib/components/realtime/realtime-session-state.js.map +1 -1
  112. package/dist/lib/components/realtime/realtime-surface-tab-style.d.ts +70 -0
  113. package/dist/lib/components/realtime/realtime-surface-tab-style.d.ts.map +1 -0
  114. package/dist/lib/components/realtime/realtime-surface-tab-style.js +115 -0
  115. package/dist/lib/components/realtime/realtime-surface-tab-style.js.map +1 -0
  116. package/dist/lib/components/realtime/realtime-surface-tabs.component.d.ts +55 -57
  117. package/dist/lib/components/realtime/realtime-surface-tabs.component.d.ts.map +1 -1
  118. package/dist/lib/components/realtime/realtime-surface-tabs.component.js +165 -143
  119. package/dist/lib/components/realtime/realtime-surface-tabs.component.js.map +1 -1
  120. package/dist/lib/components/realtime/realtime-surface-tabs.model.d.ts +80 -71
  121. package/dist/lib/components/realtime/realtime-surface-tabs.model.d.ts.map +1 -1
  122. package/dist/lib/components/realtime/realtime-surface-tabs.model.js +83 -113
  123. package/dist/lib/components/realtime/realtime-surface-tabs.model.js.map +1 -1
  124. package/dist/lib/components/realtime/realtime-ui-config.d.ts +270 -0
  125. package/dist/lib/components/realtime/realtime-ui-config.d.ts.map +1 -0
  126. package/dist/lib/components/realtime/realtime-ui-config.js +212 -0
  127. package/dist/lib/components/realtime/realtime-ui-config.js.map +1 -0
  128. package/dist/lib/components/search/search-panel.component.d.ts +2 -0
  129. package/dist/lib/components/search/search-panel.component.d.ts.map +1 -1
  130. package/dist/lib/components/search/search-panel.component.js +92 -101
  131. package/dist/lib/components/search/search-panel.component.js.map +1 -1
  132. package/dist/lib/components/share/share-modal.component.d.ts.map +1 -1
  133. package/dist/lib/components/share/share-modal.component.js +10 -11
  134. package/dist/lib/components/share/share-modal.component.js.map +1 -1
  135. package/dist/lib/components/shared/user-picker.component.d.ts.map +1 -1
  136. package/dist/lib/components/shared/user-picker.component.js +12 -15
  137. package/dist/lib/components/shared/user-picker.component.js.map +1 -1
  138. package/dist/lib/components/workspace/conversation-workspace.component.d.ts +5 -0
  139. package/dist/lib/components/workspace/conversation-workspace.component.d.ts.map +1 -1
  140. package/dist/lib/components/workspace/conversation-workspace.component.js +18 -7
  141. package/dist/lib/components/workspace/conversation-workspace.component.js.map +1 -1
  142. package/dist/lib/conversations.module.d.ts +29 -26
  143. package/dist/lib/conversations.module.d.ts.map +1 -1
  144. package/dist/lib/conversations.module.js +37 -6
  145. package/dist/lib/conversations.module.js.map +1 -1
  146. package/dist/lib/models/conversation-state.model.d.ts +6 -3
  147. package/dist/lib/models/conversation-state.model.d.ts.map +1 -1
  148. package/dist/lib/models/conversation-state.model.js.map +1 -1
  149. package/dist/lib/services/conversation-agent.service.d.ts +2 -2
  150. package/dist/lib/services/conversation-agent.service.d.ts.map +1 -1
  151. package/dist/lib/services/conversation-agent.service.js +6 -2
  152. package/dist/lib/services/conversation-agent.service.js.map +1 -1
  153. package/dist/lib/services/mention-autocomplete.service.d.ts +17 -1
  154. package/dist/lib/services/mention-autocomplete.service.d.ts.map +1 -1
  155. package/dist/lib/services/mention-autocomplete.service.js +58 -2
  156. package/dist/lib/services/mention-autocomplete.service.js.map +1 -1
  157. package/dist/lib/services/realtime-audio-recorder.d.ts +143 -0
  158. package/dist/lib/services/realtime-audio-recorder.d.ts.map +1 -0
  159. package/dist/lib/services/realtime-audio-recorder.js +379 -0
  160. package/dist/lib/services/realtime-audio-recorder.js.map +1 -0
  161. package/dist/lib/services/realtime-pcm-wav.d.ts +75 -0
  162. package/dist/lib/services/realtime-pcm-wav.d.ts.map +1 -0
  163. package/dist/lib/services/realtime-pcm-wav.js +205 -0
  164. package/dist/lib/services/realtime-pcm-wav.js.map +1 -0
  165. package/dist/lib/services/realtime-session-review.service.d.ts +28 -1
  166. package/dist/lib/services/realtime-session-review.service.d.ts.map +1 -1
  167. package/dist/lib/services/realtime-session-review.service.js +12 -3
  168. package/dist/lib/services/realtime-session-review.service.js.map +1 -1
  169. package/dist/lib/services/realtime-session.service.d.ts +210 -20
  170. package/dist/lib/services/realtime-session.service.d.ts.map +1 -1
  171. package/dist/lib/services/realtime-session.service.js +452 -21
  172. package/dist/lib/services/realtime-session.service.js.map +1 -1
  173. package/dist/lib/services/realtime-sessions-adapter.js +1 -1
  174. package/dist/lib/services/realtime-sessions-adapter.js.map +1 -1
  175. package/dist/lib/services/ui-command-handler.service.d.ts +7 -2
  176. package/dist/lib/services/ui-command-handler.service.d.ts.map +1 -1
  177. package/dist/lib/services/ui-command-handler.service.js +6 -2
  178. package/dist/lib/services/ui-command-handler.service.js.map +1 -1
  179. package/dist/lib/utils/plan-mode-preference.d.ts +62 -0
  180. package/dist/lib/utils/plan-mode-preference.d.ts.map +1 -0
  181. package/dist/lib/utils/plan-mode-preference.js +130 -0
  182. package/dist/lib/utils/plan-mode-preference.js.map +1 -0
  183. package/dist/public-api.d.ts +6 -0
  184. package/dist/public-api.d.ts.map +1 -1
  185. package/dist/public-api.js +8 -0
  186. package/dist/public-api.js.map +1 -1
  187. package/package.json +28 -26
  188. package/dist/__tests__/attachment-badge.test.d.ts +0 -2
  189. package/dist/__tests__/attachment-badge.test.d.ts.map +0 -1
  190. package/dist/__tests__/attachment-badge.test.js +0 -66
  191. package/dist/__tests__/attachment-badge.test.js.map +0 -1
  192. package/dist/__tests__/channel-optional-surface.test.d.ts +0 -2
  193. package/dist/__tests__/channel-optional-surface.test.d.ts.map +0 -1
  194. package/dist/__tests__/channel-optional-surface.test.js +0 -53
  195. package/dist/__tests__/channel-optional-surface.test.js.map +0 -1
  196. package/dist/__tests__/chat-events.test.d.ts +0 -14
  197. package/dist/__tests__/chat-events.test.d.ts.map +0 -1
  198. package/dist/__tests__/chat-events.test.js +0 -109
  199. package/dist/__tests__/chat-events.test.js.map +0 -1
  200. package/dist/__tests__/collections-full-view.test.d.ts +0 -2
  201. package/dist/__tests__/collections-full-view.test.d.ts.map +0 -1
  202. package/dist/__tests__/collections-full-view.test.js +0 -225
  203. package/dist/__tests__/collections-full-view.test.js.map +0 -1
  204. package/dist/__tests__/conversation-cache.test.d.ts +0 -2
  205. package/dist/__tests__/conversation-cache.test.d.ts.map +0 -1
  206. package/dist/__tests__/conversation-cache.test.js +0 -233
  207. package/dist/__tests__/conversation-cache.test.js.map +0 -1
  208. package/dist/__tests__/conversation-naming.test.d.ts +0 -2
  209. package/dist/__tests__/conversation-naming.test.d.ts.map +0 -1
  210. package/dist/__tests__/conversation-naming.test.js +0 -110
  211. package/dist/__tests__/conversation-naming.test.js.map +0 -1
  212. package/dist/__tests__/delegation-result-parser.test.d.ts +0 -2
  213. package/dist/__tests__/delegation-result-parser.test.d.ts.map +0 -1
  214. package/dist/__tests__/delegation-result-parser.test.js +0 -107
  215. package/dist/__tests__/delegation-result-parser.test.js.map +0 -1
  216. package/dist/__tests__/distinct-artifacts.test.d.ts +0 -2
  217. package/dist/__tests__/distinct-artifacts.test.d.ts.map +0 -1
  218. package/dist/__tests__/distinct-artifacts.test.js +0 -56
  219. package/dist/__tests__/distinct-artifacts.test.js.map +0 -1
  220. package/dist/__tests__/event-wiring.test.d.ts +0 -15
  221. package/dist/__tests__/event-wiring.test.d.ts.map +0 -1
  222. package/dist/__tests__/event-wiring.test.js +0 -100
  223. package/dist/__tests__/event-wiring.test.js.map +0 -1
  224. package/dist/__tests__/index.test.d.ts +0 -2
  225. package/dist/__tests__/index.test.d.ts.map +0 -1
  226. package/dist/__tests__/index.test.js +0 -7
  227. package/dist/__tests__/index.test.js.map +0 -1
  228. package/dist/__tests__/narration-template.test.d.ts +0 -2
  229. package/dist/__tests__/narration-template.test.d.ts.map +0 -1
  230. package/dist/__tests__/narration-template.test.js +0 -76
  231. package/dist/__tests__/narration-template.test.js.map +0 -1
  232. package/dist/__tests__/notification-model.test.d.ts +0 -2
  233. package/dist/__tests__/notification-model.test.d.ts.map +0 -1
  234. package/dist/__tests__/notification-model.test.js +0 -68
  235. package/dist/__tests__/notification-model.test.js.map +0 -1
  236. package/dist/__tests__/realtime-agent-picker-models.test.d.ts +0 -2
  237. package/dist/__tests__/realtime-agent-picker-models.test.d.ts.map +0 -1
  238. package/dist/__tests__/realtime-agent-picker-models.test.js +0 -49
  239. package/dist/__tests__/realtime-agent-picker-models.test.js.map +0 -1
  240. package/dist/__tests__/realtime-audio-visuals.test.d.ts +0 -2
  241. package/dist/__tests__/realtime-audio-visuals.test.d.ts.map +0 -1
  242. package/dist/__tests__/realtime-audio-visuals.test.js +0 -123
  243. package/dist/__tests__/realtime-audio-visuals.test.js.map +0 -1
  244. package/dist/__tests__/realtime-delegation-card-cancel.test.d.ts +0 -2
  245. package/dist/__tests__/realtime-delegation-card-cancel.test.d.ts.map +0 -1
  246. package/dist/__tests__/realtime-delegation-card-cancel.test.js +0 -48
  247. package/dist/__tests__/realtime-delegation-card-cancel.test.js.map +0 -1
  248. package/dist/__tests__/realtime-disclosure.test.d.ts +0 -2
  249. package/dist/__tests__/realtime-disclosure.test.d.ts.map +0 -1
  250. package/dist/__tests__/realtime-disclosure.test.js +0 -164
  251. package/dist/__tests__/realtime-disclosure.test.js.map +0 -1
  252. package/dist/__tests__/realtime-pairing.test.d.ts +0 -2
  253. package/dist/__tests__/realtime-pairing.test.d.ts.map +0 -1
  254. package/dist/__tests__/realtime-pairing.test.js +0 -207
  255. package/dist/__tests__/realtime-pairing.test.js.map +0 -1
  256. package/dist/__tests__/realtime-review-lifecycle.test.d.ts +0 -2
  257. package/dist/__tests__/realtime-review-lifecycle.test.d.ts.map +0 -1
  258. package/dist/__tests__/realtime-review-lifecycle.test.js +0 -154
  259. package/dist/__tests__/realtime-review-lifecycle.test.js.map +0 -1
  260. package/dist/__tests__/realtime-session-cancel-usage.test.d.ts +0 -2
  261. package/dist/__tests__/realtime-session-cancel-usage.test.d.ts.map +0 -1
  262. package/dist/__tests__/realtime-session-cancel-usage.test.js +0 -230
  263. package/dist/__tests__/realtime-session-cancel-usage.test.js.map +0 -1
  264. package/dist/__tests__/realtime-session-channels.test.d.ts +0 -2
  265. package/dist/__tests__/realtime-session-channels.test.d.ts.map +0 -1
  266. package/dist/__tests__/realtime-session-channels.test.js +0 -252
  267. package/dist/__tests__/realtime-session-channels.test.js.map +0 -1
  268. package/dist/__tests__/realtime-session-client-tools.test.d.ts +0 -2
  269. package/dist/__tests__/realtime-session-client-tools.test.d.ts.map +0 -1
  270. package/dist/__tests__/realtime-session-client-tools.test.js +0 -103
  271. package/dist/__tests__/realtime-session-client-tools.test.js.map +0 -1
  272. package/dist/__tests__/realtime-session-minimized.test.d.ts +0 -2
  273. package/dist/__tests__/realtime-session-minimized.test.d.ts.map +0 -1
  274. package/dist/__tests__/realtime-session-minimized.test.js +0 -32
  275. package/dist/__tests__/realtime-session-minimized.test.js.map +0 -1
  276. package/dist/__tests__/realtime-session-mint.test.d.ts +0 -2
  277. package/dist/__tests__/realtime-session-mint.test.d.ts.map +0 -1
  278. package/dist/__tests__/realtime-session-mint.test.js +0 -69
  279. package/dist/__tests__/realtime-session-mint.test.js.map +0 -1
  280. package/dist/__tests__/realtime-session-policy.test.d.ts +0 -2
  281. package/dist/__tests__/realtime-session-policy.test.d.ts.map +0 -1
  282. package/dist/__tests__/realtime-session-policy.test.js +0 -303
  283. package/dist/__tests__/realtime-session-policy.test.js.map +0 -1
  284. package/dist/__tests__/realtime-session-review.service.test.d.ts +0 -2
  285. package/dist/__tests__/realtime-session-review.service.test.d.ts.map +0 -1
  286. package/dist/__tests__/realtime-session-review.service.test.js +0 -743
  287. package/dist/__tests__/realtime-session-review.service.test.js.map +0 -1
  288. package/dist/__tests__/realtime-session-state.test.d.ts +0 -2
  289. package/dist/__tests__/realtime-session-state.test.d.ts.map +0 -1
  290. package/dist/__tests__/realtime-session-state.test.js +0 -83
  291. package/dist/__tests__/realtime-session-state.test.js.map +0 -1
  292. package/dist/__tests__/realtime-session-timeline-card.test.d.ts +0 -2
  293. package/dist/__tests__/realtime-session-timeline-card.test.d.ts.map +0 -1
  294. package/dist/__tests__/realtime-session-timeline-card.test.js +0 -106
  295. package/dist/__tests__/realtime-session-timeline-card.test.js.map +0 -1
  296. package/dist/__tests__/realtime-session-timeline.test.d.ts +0 -2
  297. package/dist/__tests__/realtime-session-timeline.test.d.ts.map +0 -1
  298. package/dist/__tests__/realtime-session-timeline.test.js +0 -142
  299. package/dist/__tests__/realtime-session-timeline.test.js.map +0 -1
  300. package/dist/__tests__/realtime-sessions-adapter.test.d.ts +0 -19
  301. package/dist/__tests__/realtime-sessions-adapter.test.d.ts.map +0 -1
  302. package/dist/__tests__/realtime-sessions-adapter.test.js +0 -188
  303. package/dist/__tests__/realtime-sessions-adapter.test.js.map +0 -1
  304. package/dist/__tests__/realtime-surface-panel-prefs.test.d.ts +0 -2
  305. package/dist/__tests__/realtime-surface-panel-prefs.test.d.ts.map +0 -1
  306. package/dist/__tests__/realtime-surface-panel-prefs.test.js +0 -100
  307. package/dist/__tests__/realtime-surface-panel-prefs.test.js.map +0 -1
  308. package/dist/__tests__/realtime-surface-tabs-model.test.d.ts +0 -2
  309. package/dist/__tests__/realtime-surface-tabs-model.test.d.ts.map +0 -1
  310. package/dist/__tests__/realtime-surface-tabs-model.test.js +0 -193
  311. package/dist/__tests__/realtime-surface-tabs-model.test.js.map +0 -1
  312. package/dist/__tests__/remote-browser-audio-player.test.d.ts +0 -2
  313. package/dist/__tests__/remote-browser-audio-player.test.d.ts.map +0 -1
  314. package/dist/__tests__/remote-browser-audio-player.test.js +0 -137
  315. package/dist/__tests__/remote-browser-audio-player.test.js.map +0 -1
  316. package/dist/__tests__/remote-browser-channel.test.d.ts +0 -2
  317. package/dist/__tests__/remote-browser-channel.test.d.ts.map +0 -1
  318. package/dist/__tests__/remote-browser-channel.test.js +0 -585
  319. package/dist/__tests__/remote-browser-channel.test.js.map +0 -1
  320. package/dist/__tests__/search-service.test.d.ts +0 -2
  321. package/dist/__tests__/search-service.test.d.ts.map +0 -1
  322. package/dist/__tests__/search-service.test.js +0 -114
  323. package/dist/__tests__/search-service.test.js.map +0 -1
  324. package/dist/__tests__/slot-defaults.test.d.ts +0 -24
  325. package/dist/__tests__/slot-defaults.test.d.ts.map +0 -1
  326. package/dist/__tests__/slot-defaults.test.js +0 -63
  327. package/dist/__tests__/slot-defaults.test.js.map +0 -1
  328. package/dist/__tests__/toast-service.test.d.ts +0 -2
  329. package/dist/__tests__/toast-service.test.d.ts.map +0 -1
  330. package/dist/__tests__/toast-service.test.js +0 -143
  331. package/dist/__tests__/toast-service.test.js.map +0 -1
  332. package/dist/__tests__/user-authorization.test.d.ts +0 -2
  333. package/dist/__tests__/user-authorization.test.d.ts.map +0 -1
  334. package/dist/__tests__/user-authorization.test.js +0 -97
  335. package/dist/__tests__/user-authorization.test.js.map +0 -1
  336. package/dist/__tests__/voice-session-narration.test.d.ts +0 -2
  337. package/dist/__tests__/voice-session-narration.test.d.ts.map +0 -1
  338. package/dist/__tests__/voice-session-narration.test.js +0 -609
  339. package/dist/__tests__/voice-session-narration.test.js.map +0 -1
  340. package/dist/__tests__/whiteboard-artifact-viewer.test.d.ts +0 -2
  341. package/dist/__tests__/whiteboard-artifact-viewer.test.d.ts.map +0 -1
  342. package/dist/__tests__/whiteboard-artifact-viewer.test.js +0 -101
  343. package/dist/__tests__/whiteboard-artifact-viewer.test.js.map +0 -1
  344. package/dist/__tests__/whiteboard-channel.test.d.ts +0 -2
  345. package/dist/__tests__/whiteboard-channel.test.d.ts.map +0 -1
  346. package/dist/__tests__/whiteboard-channel.test.js +0 -260
  347. package/dist/__tests__/whiteboard-channel.test.js.map +0 -1
  348. package/dist/__tests__/whiteboard-restore-state.test.d.ts +0 -2
  349. package/dist/__tests__/whiteboard-restore-state.test.d.ts.map +0 -1
  350. package/dist/__tests__/whiteboard-restore-state.test.js +0 -108
  351. package/dist/__tests__/whiteboard-restore-state.test.js.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"file":"realtime-session-state.d.ts","sourceRoot":"","sources":["../../../../src/lib/components/realtime/realtime-session-state.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"realtime-session-state.d.ts","sourceRoot":"","sources":["../../../../src/lib/components/realtime/realtime-session-state.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"realtime-session-state.js","sourceRoot":"","sources":["../../../../src/lib/components/realtime/realtime-session-state.ts"],"names":[],"mappings":"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","sourcesContent":["import { Observable, Subject, Subscription } from 'rxjs';\nimport {\n VoiceCaption, VoiceDelegationProgress, VoiceDelegationResult, VoiceDelegationNarration\n} from '../../services/realtime-session.service';\nimport { ParsedDelegationArtifact } from '../../services/delegation-result-parser';\n\n/**\n * The four reactive session streams {@link RealtimeSessionState} merges — structurally\n * satisfied by `RealtimeSessionService`. Narrowed to an interface so the state (and its unit\n * tests) depend only on the streams, not on the full service / GraphQL import chain.\n */\nexport interface RealtimeSessionStreams {\n /** Growing user/assistant caption list. */\n Captions$: Observable<VoiceCaption[]>;\n /** Progress updates from delegated agent runs. */\n DelegationProgress$: Observable<VoiceDelegationProgress>;\n /** Terminal delegation results. */\n DelegationResult$: Observable<VoiceDelegationResult>;\n /** Ephemeral spoken progress narrations. */\n DelegationNarration$: Observable<VoiceDelegationNarration>;\n}\n\n/**\n * The view-model for one delegated tool/agent call in the live session. Built by\n * {@link RealtimeSessionState} from the `DelegationProgress$` / `DelegationResult$`\n * streams (correlated by `CallID`) and rendered both inline in the session thread\n * and as a compact card in the activity rail.\n *\n * Card objects are treated as IMMUTABLE — every progress/result event REPLACES the\n * card object (and the arrays containing it) so Angular bindings always see fresh\n * references and in-place updates reliably re-render.\n */\nexport interface RealtimeDelegationCardVM {\n /** The `invoke-target-agent` call this card represents. */\n CallID: string;\n /** Display name of the delegated agent (e.g. \"Sage\"). */\n AgentName: string;\n /** Latest human-readable progress message from the stream. */\n LatestMessage: string;\n /** The delegation phase (`prompt_execution` | `action_execution` | …). */\n LatestStep: string;\n /** Optional completion percentage (0–100) when the server supplies it. */\n Percentage?: number;\n /** `true` once the delegation reached a terminal result. */\n Done: boolean;\n /** Whether the delegated work succeeded (meaningful once {@link Done} is true). */\n Success: boolean;\n /** Short run identifier (e.g. \"#a3f1\") if known; shown in expanded provenance detail. */\n RunRef?: string;\n /**\n * ID of the delegated agent run (`MJ: AI Agent Runs`) once the result reports it.\n * Powers the gear-gated \"Open run\" developer link on the card / rail entry.\n */\n RunID?: string;\n /** The real result text once the delegation completes. */\n Result?: string | null;\n /**\n * Artifacts the delegated run produced (set with the terminal result). Powers the\n * \"View\" affordance on done cards / rail entries and the surface panel's artifact tabs.\n */\n Artifacts?: ParsedDelegationArtifact[];\n /** Epoch ms when the first progress event for this call arrived. */\n StartedAt: number;\n /** Epoch ms when the terminal result arrived. */\n FinishedAt?: number;\n}\n\n/** A caption turn (user or assistant) in the unified thread. */\nexport interface RealtimeThreadCaptionItem {\n Kind: 'caption';\n Role: 'User' | 'Assistant';\n Text: string;\n}\n\n/** A delegation card in the unified thread (working → done chip). */\nexport interface RealtimeThreadDelegationItem {\n Kind: 'delegation';\n Card: RealtimeDelegationCardVM;\n}\n\n/**\n * A SESSION-BOUNDARY divider in the unified thread — a subtle, token-styled rule marking\n * where one session leg ends and another begins. Two producers:\n * - review→live continuation ({@link RealtimeSessionState.StartLiveContinuation}):\n * \"Resumed live session · <time>\" before the new live items;\n * - multi-leg session review (`BuildReviewThreadItems` over a `lastSessionId` chain):\n * \"Session leg · started <time>\" between legs, carrying the PREVIOUS leg's CloseReason\n * as a small chip so the reader sees why that leg ended.\n */\nexport interface RealtimeThreadDividerItem {\n Kind: 'divider';\n /** The divider's label (e.g. \"Resumed live session\", \"Session leg\"). */\n Label: string;\n /** Timestamp rendered after the label (\"· <time>\"), or null when unknown. */\n At: Date | null;\n /** Font Awesome icon class rendered before the label (e.g. `fa-solid fa-phone`). */\n Icon: string;\n /** Why the PRECEDING leg closed (review chains only) — rendered as a small chip. */\n CloseReason?: string | null;\n}\n\n/** One entry in the chronological thread: a caption bubble, a delegation card, or a leg divider. */\nexport type RealtimeThreadItem = RealtimeThreadCaptionItem | RealtimeThreadDelegationItem | RealtimeThreadDividerItem;\n\n/**\n * Maps a raw delegation step id to a human-friendly phrase. Unknown steps fall back to\n * the raw progress message (per product direction) so the UI never shows snake_case ids.\n */\nexport function FriendlyStepLabel(step: string, message: string): string {\n switch (step) {\n case 'prompt_execution': return 'Thinking it through';\n case 'action_execution': return 'Running actions';\n case 'subagent_execution': return 'Working with another agent';\n case 'decision_processing': return 'Deciding next steps';\n default: return message || 'Working';\n }\n}\n\n/** Formats an elapsed duration in ms as a compact human string (\"8s\", \"1m 04s\"). */\nexport function FormatElapsed(ms: number): string {\n const totalSec = Math.max(0, Math.round(ms / 1000));\n if (totalSec < 60) {\n return `${totalSec}s`;\n }\n const m = Math.floor(totalSec / 60);\n const s = totalSec % 60;\n return `${m}m ${s.toString().padStart(2, '0')}s`;\n}\n\n/**\n * SINGLE SOURCE of merged live-session state, owned by the overlay shell\n * (`RealtimeSessionOverlayComponent`) and passed via `@Input()` to BOTH the session\n * thread and the activity rail — so the per-CallID card bookkeeping and subscription\n * logic exists exactly once.\n *\n * Merges FOUR reactive streams from {@link RealtimeSessionService}:\n * - `Captions$` — growing user/assistant caption list → appended to {@link Items}.\n * - `DelegationProgress$` — first event per `CallID` inserts a working card at the thread\n * tail; later events REPLACE the card immutably (new object +\n * new arrays) so change detection always fires.\n * - `DelegationResult$` — flips the card to Done/Failed with the real result text.\n * - `DelegationNarration$` — the EPHEMERAL spoken progress note (latest only, never\n * accumulated), cleared when no delegation is running anymore.\n *\n * Consumers subscribe to {@link Changed$} and `markForCheck()`; all exposed collections\n * are replaced (never mutated) on change.\n */\nexport class RealtimeSessionState {\n /** Display name used for new delegation cards (set by the overlay's AgentName input). */\n public AgentName = 'Sage';\n\n /** The merged, chronological thread (captions + delegation cards), oldest first. */\n public Items: RealtimeThreadItem[] = [];\n\n /** All delegation cards of the session, NEWEST first — the activity rail's list. */\n public Cards: RealtimeDelegationCardVM[] = [];\n\n /** Latest ephemeral narration text, or null when none should be shown. */\n public Narration: string | null = null;\n\n /** CallID of the most recently started, still-running delegation (anchors the live note). */\n public ActiveCallId: string | null = null;\n\n /** Emits after every state change so views can mark themselves for check. */\n public readonly Changed$ = new Subject<void>();\n\n /** Number of captions already merged into {@link Items} (append-only bookkeeping). */\n private placedCaptionCount = 0;\n /** Live card lookup by CallID (insertion order = start order). */\n private cardsByCallId = new Map<string, RealtimeDelegationCardVM>();\n private subs: Subscription[] = [];\n\n /** True while at least one delegation is still running. */\n public get HasRunningDelegation(): boolean {\n return this.ActiveCallId !== null;\n }\n\n /** Subscribes to the session streams. Call once from the owning overlay shell. */\n public Attach(voice: RealtimeSessionStreams): void {\n if (this.subs.length > 0) {\n return; // already attached\n }\n this.subs.push(\n voice.Captions$.subscribe(c => this.onCaptions(c)),\n voice.DelegationProgress$.subscribe(p => this.onProgress(p)),\n voice.DelegationResult$.subscribe(r => this.onResult(r)),\n voice.DelegationNarration$.subscribe(n => this.onNarration(n))\n );\n }\n\n /** Unsubscribes from all session streams. Call from the owning shell's ngOnDestroy. */\n public Detach(): void {\n for (const s of this.subs) {\n s.unsubscribe();\n }\n this.subs = [];\n }\n\n /**\n * SESSION REVIEW population path: replaces ALL merged state with a pre-built\n * HISTORICAL thread (caption turns + done delegation cards, oldest first — see\n * `BuildReviewThreadItems`). Resets the live-stream bookkeeping first, so a later\n * live session starts from a clean merge baseline; delegation cards are indexed by\n * CallID so the rail's {@link Cards} list and {@link ActiveCallId} derive normally.\n */\n public LoadHistoricalItems(items: RealtimeThreadItem[]): void {\n this.reset();\n this.Items = [...items];\n for (const item of items) {\n if (item.Kind === 'delegation') {\n this.cardsByCallId.set(item.Card.CallID, item.Card);\n }\n }\n this.rebuildCards();\n this.recomputeActive();\n this.Changed$.next();\n }\n\n /** Clears all merged state and notifies subscribers (e.g. leaving session review). */\n public Clear(): void {\n this.reset();\n this.Changed$.next();\n }\n\n /**\n * REVIEW→LIVE continuation path: KEEPS the historical thread (and its delegation cards\n * in the rail) and appends a \"Resumed live session\" {@link RealtimeThreadDividerItem},\n * then resets only the LIVE-merge bookkeeping so the new session's captions and cards\n * append cleanly AFTER the divider:\n * - `placedCaptionCount` → 0 (the fresh session's caption stream starts empty, so the\n * start-of-session `[]` emission is a no-op rather than a reset);\n * - the ephemeral narration is dropped (nothing is running yet);\n * - historical cards stay indexed by CallID — new live CallIDs are unique, so live\n * cards insert alongside them and `ActiveCallId` recomputes normally.\n */\n public StartLiveContinuation(at: Date = new Date()): void {\n const divider: RealtimeThreadDividerItem = {\n Kind: 'divider',\n Label: 'Resumed live session',\n At: at,\n Icon: 'fa-solid fa-phone'\n };\n this.Items = [...this.Items, divider];\n this.Narration = null;\n this.placedCaptionCount = 0;\n this.recomputeActive();\n this.Changed$.next();\n }\n\n /** Appends any newly-arrived captions, keeping order relative to delegation cards. */\n private onCaptions(captions: VoiceCaption[]): void {\n if (captions.length <= this.placedCaptionCount) {\n // Captions are cleared on a fresh session — reset all merge state.\n if (captions.length < this.placedCaptionCount) {\n this.reset();\n this.Changed$.next();\n }\n return;\n }\n const appended: RealtimeThreadItem[] = [];\n for (let i = this.placedCaptionCount; i < captions.length; i++) {\n appended.push({ Kind: 'caption', Role: captions[i].Role, Text: captions[i].Text });\n }\n this.placedCaptionCount = captions.length;\n this.Items = [...this.Items, ...appended];\n this.Changed$.next();\n }\n\n /** Inserts a new working card, or immutably replaces the existing one for this CallID. */\n private onProgress(progress: VoiceDelegationProgress): void {\n const existing = this.cardsByCallId.get(progress.CallID);\n if (existing) {\n this.replaceCard({\n ...existing,\n LatestStep: progress.Step,\n LatestMessage: progress.Message,\n Percentage: progress.Percentage\n });\n } else {\n this.insertCard(progress);\n }\n this.Changed$.next();\n }\n\n /** Creates a working card for a first-seen CallID and appends it to the thread tail. */\n private insertCard(progress: VoiceDelegationProgress): void {\n const card: RealtimeDelegationCardVM = {\n CallID: progress.CallID,\n AgentName: this.AgentName,\n LatestStep: progress.Step,\n LatestMessage: progress.Message,\n Percentage: progress.Percentage,\n Done: false,\n Success: false,\n RunRef: this.shortRunRef(progress.CallID),\n StartedAt: Date.now()\n };\n this.cardsByCallId.set(progress.CallID, card);\n this.Items = [...this.Items, { Kind: 'delegation', Card: card }];\n this.rebuildCards();\n this.recomputeActive();\n }\n\n /** Flips the card for a finished delegation to Done/Failed with its real result. */\n private onResult(result: VoiceDelegationResult): void {\n const existing = this.cardsByCallId.get(result.CallID);\n if (!existing) {\n return; // non-delegation tool result (no card was ever created) — ignore\n }\n this.replaceCard({\n ...existing,\n Done: true,\n Success: result.Success,\n Result: result.Output,\n RunID: result.RunID ?? existing.RunID,\n Artifacts: result.Artifacts ?? existing.Artifacts,\n FinishedAt: Date.now()\n });\n if (!this.HasRunningDelegation) {\n // All delegations finished — the live narration note fades away.\n this.Narration = null;\n }\n this.Changed$.next();\n }\n\n /** Latest narration REPLACES the previous one (never accumulated). */\n private onNarration(narration: VoiceDelegationNarration): void {\n this.Narration = narration.Text;\n this.Changed$.next();\n }\n\n /**\n * Immutable replacement of a card: new card object, new thread-item wrapper, new\n * Items array, rebuilt Cards array — so every binding sees a fresh reference.\n */\n private replaceCard(card: RealtimeDelegationCardVM): void {\n this.cardsByCallId.set(card.CallID, card);\n const idx = this.Items.findIndex(i => i.Kind === 'delegation' && i.Card.CallID === card.CallID);\n if (idx >= 0) {\n const next = [...this.Items];\n next[idx] = { Kind: 'delegation', Card: card };\n this.Items = next;\n }\n this.rebuildCards();\n this.recomputeActive();\n }\n\n /** Rebuilds the rail's newest-first card list from the (start-ordered) map. */\n private rebuildCards(): void {\n this.Cards = Array.from(this.cardsByCallId.values()).reverse();\n }\n\n /** Recomputes which still-running delegation anchors the live narration note. */\n private recomputeActive(): void {\n const running = this.Cards.find(c => !c.Done);\n this.ActiveCallId = running ? running.CallID : null;\n }\n\n /** Derives a short, stable run reference (e.g. \"#a3f1\") from the call id. */\n private shortRunRef(callId: string): string {\n const compact = callId.replace(/[^a-z0-9]/gi, '');\n return compact.length >= 4 ? `#${compact.slice(-4).toLowerCase()}` : `#${compact.toLowerCase()}`;\n }\n\n /** Clears all merged state (fresh session). */\n private reset(): void {\n this.Items = [];\n this.Cards = [];\n this.Narration = null;\n this.ActiveCallId = null;\n this.placedCaptionCount = 0;\n this.cardsByCallId.clear();\n }\n}\n"]}
1
+ {"version":3,"file":"realtime-session-state.js","sourceRoot":"","sources":["../../../../src/lib/components/realtime/realtime-session-state.ts"],"names":[],"mappings":"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","sourcesContent":["import { Observable, Subject, Subscription } from 'rxjs';\nimport {\n RealtimeCaption, RealtimeDelegationProgress, RealtimeDelegationResult, RealtimeDelegationNarration\n} from '../../services/realtime-session.service';\nimport { ParsedDelegationArtifact } from '../../services/delegation-result-parser';\n\n/**\n * The four reactive session streams {@link RealtimeSessionState} merges — structurally\n * satisfied by `RealtimeSessionService`. Narrowed to an interface so the state (and its unit\n * tests) depend only on the streams, not on the full service / GraphQL import chain.\n */\nexport interface RealtimeSessionStreams {\n /** Growing user/assistant caption list. */\n Captions$: Observable<RealtimeCaption[]>;\n /** Progress updates from delegated agent runs. */\n DelegationProgress$: Observable<RealtimeDelegationProgress>;\n /** Terminal delegation results. */\n DelegationResult$: Observable<RealtimeDelegationResult>;\n /** Ephemeral spoken progress narrations. */\n DelegationNarration$: Observable<RealtimeDelegationNarration>;\n}\n\n/**\n * The view-model for one delegated tool/agent call in the live session. Built by\n * {@link RealtimeSessionState} from the `DelegationProgress$` / `DelegationResult$`\n * streams (correlated by `CallID`) and rendered both inline in the session thread\n * and as a compact card in the activity rail.\n *\n * Card objects are treated as IMMUTABLE — every progress/result event REPLACES the\n * card object (and the arrays containing it) so Angular bindings always see fresh\n * references and in-place updates reliably re-render.\n */\nexport interface RealtimeDelegationCardVM {\n /** The `invoke-target-agent` call this card represents. */\n CallID: string;\n /** Display name of the delegated agent (e.g. \"Sage\"). */\n AgentName: string;\n /** Latest human-readable progress message from the stream. */\n LatestMessage: string;\n /** The delegation phase (`prompt_execution` | `action_execution` | …). */\n LatestStep: string;\n /** Optional completion percentage (0–100) when the server supplies it. */\n Percentage?: number;\n /** `true` once the delegation reached a terminal result. */\n Done: boolean;\n /** Whether the delegated work succeeded (meaningful once {@link Done} is true). */\n Success: boolean;\n /** Short run identifier (e.g. \"#a3f1\") if known; shown in expanded provenance detail. */\n RunRef?: string;\n /**\n * ID of the delegated agent run (`MJ: AI Agent Runs`) once the result reports it.\n * Powers the gear-gated \"Open run\" developer link on the card / rail entry.\n */\n RunID?: string;\n /** The real result text once the delegation completes. */\n Result?: string | null;\n /**\n * Artifacts the delegated run produced (set with the terminal result). Powers the\n * \"View\" affordance on done cards / rail entries and the surface panel's artifact tabs.\n */\n Artifacts?: ParsedDelegationArtifact[];\n /** Epoch ms when the first progress event for this call arrived. */\n StartedAt: number;\n /** Epoch ms when the terminal result arrived. */\n FinishedAt?: number;\n}\n\n/** A caption turn (user or assistant) in the unified thread. */\nexport interface RealtimeThreadCaptionItem {\n Kind: 'caption';\n Role: 'User' | 'Assistant';\n Text: string;\n}\n\n/** A delegation card in the unified thread (working → done chip). */\nexport interface RealtimeThreadDelegationItem {\n Kind: 'delegation';\n Card: RealtimeDelegationCardVM;\n}\n\n/**\n * A SESSION-BOUNDARY divider in the unified thread — a subtle, token-styled rule marking\n * where one session leg ends and another begins. Two producers:\n * - review→live continuation ({@link RealtimeSessionState.StartLiveContinuation}):\n * \"Resumed live session · <time>\" before the new live items;\n * - multi-leg session review (`BuildReviewThreadItems` over a `lastSessionId` chain):\n * \"Session leg · started <time>\" between legs, carrying the PREVIOUS leg's CloseReason\n * as a small chip so the reader sees why that leg ended.\n */\nexport interface RealtimeThreadDividerItem {\n Kind: 'divider';\n /** The divider's label (e.g. \"Resumed live session\", \"Session leg\"). */\n Label: string;\n /** Timestamp rendered after the label (\"· <time>\"), or null when unknown. */\n At: Date | null;\n /** Font Awesome icon class rendered before the label (e.g. `fa-solid fa-phone`). */\n Icon: string;\n /** Why the PRECEDING leg closed (review chains only) — rendered as a small chip. */\n CloseReason?: string | null;\n}\n\n/** One entry in the chronological thread: a caption bubble, a delegation card, or a leg divider. */\nexport type RealtimeThreadItem = RealtimeThreadCaptionItem | RealtimeThreadDelegationItem | RealtimeThreadDividerItem;\n\n/**\n * Maps a raw delegation step id to a human-friendly phrase. Unknown steps fall back to\n * the raw progress message (per product direction) so the UI never shows snake_case ids.\n */\nexport function FriendlyStepLabel(step: string, message: string): string {\n switch (step) {\n case 'prompt_execution': return 'Thinking it through';\n case 'action_execution': return 'Running actions';\n case 'subagent_execution': return 'Working with another agent';\n case 'decision_processing': return 'Deciding next steps';\n default: return message || 'Working';\n }\n}\n\n/** Formats an elapsed duration in ms as a compact human string (\"8s\", \"1m 04s\"). */\nexport function FormatElapsed(ms: number): string {\n const totalSec = Math.max(0, Math.round(ms / 1000));\n if (totalSec < 60) {\n return `${totalSec}s`;\n }\n const m = Math.floor(totalSec / 60);\n const s = totalSec % 60;\n return `${m}m ${s.toString().padStart(2, '0')}s`;\n}\n\n/**\n * SINGLE SOURCE of merged live-session state, owned by the overlay shell\n * (`RealtimeSessionOverlayComponent`) and passed via `@Input()` to BOTH the session\n * thread and the activity rail — so the per-CallID card bookkeeping and subscription\n * logic exists exactly once.\n *\n * Merges FOUR reactive streams from {@link RealtimeSessionService}:\n * - `Captions$` — growing user/assistant caption list → appended to {@link Items}.\n * - `DelegationProgress$` — first event per `CallID` inserts a working card at the thread\n * tail; later events REPLACE the card immutably (new object +\n * new arrays) so change detection always fires.\n * - `DelegationResult$` — flips the card to Done/Failed with the real result text.\n * - `DelegationNarration$` — the EPHEMERAL spoken progress note (latest only, never\n * accumulated), cleared when no delegation is running anymore.\n *\n * Consumers subscribe to {@link Changed$} and `markForCheck()`; all exposed collections\n * are replaced (never mutated) on change.\n */\nexport class RealtimeSessionState {\n /** Display name used for new delegation cards (set by the overlay's AgentName input). */\n public AgentName = 'Sage';\n\n /** The merged, chronological thread (captions + delegation cards), oldest first. */\n public Items: RealtimeThreadItem[] = [];\n\n /** All delegation cards of the session, NEWEST first — the activity rail's list. */\n public Cards: RealtimeDelegationCardVM[] = [];\n\n /** Latest ephemeral narration text, or null when none should be shown. */\n public Narration: string | null = null;\n\n /** CallID of the most recently started, still-running delegation (anchors the live note). */\n public ActiveCallId: string | null = null;\n\n /** Emits after every state change so views can mark themselves for check. */\n public readonly Changed$ = new Subject<void>();\n\n /** Number of captions already merged into {@link Items} (append-only bookkeeping). */\n private placedCaptionCount = 0;\n /** Live card lookup by CallID (insertion order = start order). */\n private cardsByCallId = new Map<string, RealtimeDelegationCardVM>();\n private subs: Subscription[] = [];\n\n /** True while at least one delegation is still running. */\n public get HasRunningDelegation(): boolean {\n return this.ActiveCallId !== null;\n }\n\n /** Subscribes to the session streams. Call once from the owning overlay shell. */\n public Attach(voice: RealtimeSessionStreams): void {\n if (this.subs.length > 0) {\n return; // already attached\n }\n this.subs.push(\n voice.Captions$.subscribe(c => this.onCaptions(c)),\n voice.DelegationProgress$.subscribe(p => this.onProgress(p)),\n voice.DelegationResult$.subscribe(r => this.onResult(r)),\n voice.DelegationNarration$.subscribe(n => this.onNarration(n))\n );\n }\n\n /** Unsubscribes from all session streams. Call from the owning shell's ngOnDestroy. */\n public Detach(): void {\n for (const s of this.subs) {\n s.unsubscribe();\n }\n this.subs = [];\n }\n\n /**\n * SESSION REVIEW population path: replaces ALL merged state with a pre-built\n * HISTORICAL thread (caption turns + done delegation cards, oldest first — see\n * `BuildReviewThreadItems`). Resets the live-stream bookkeeping first, so a later\n * live session starts from a clean merge baseline; delegation cards are indexed by\n * CallID so the rail's {@link Cards} list and {@link ActiveCallId} derive normally.\n */\n public LoadHistoricalItems(items: RealtimeThreadItem[]): void {\n this.reset();\n this.Items = [...items];\n for (const item of items) {\n if (item.Kind === 'delegation') {\n this.cardsByCallId.set(item.Card.CallID, item.Card);\n }\n }\n this.rebuildCards();\n this.recomputeActive();\n this.Changed$.next();\n }\n\n /** Clears all merged state and notifies subscribers (e.g. leaving session review). */\n public Clear(): void {\n this.reset();\n this.Changed$.next();\n }\n\n /**\n * REVIEW→LIVE continuation path: KEEPS the historical thread (and its delegation cards\n * in the rail) and appends a \"Resumed live session\" {@link RealtimeThreadDividerItem},\n * then resets only the LIVE-merge bookkeeping so the new session's captions and cards\n * append cleanly AFTER the divider:\n * - `placedCaptionCount` → 0 (the fresh session's caption stream starts empty, so the\n * start-of-session `[]` emission is a no-op rather than a reset);\n * - the ephemeral narration is dropped (nothing is running yet);\n * - historical cards stay indexed by CallID — new live CallIDs are unique, so live\n * cards insert alongside them and `ActiveCallId` recomputes normally.\n */\n public StartLiveContinuation(at: Date = new Date()): void {\n const divider: RealtimeThreadDividerItem = {\n Kind: 'divider',\n Label: 'Resumed live session',\n At: at,\n Icon: 'fa-solid fa-phone'\n };\n this.Items = [...this.Items, divider];\n this.Narration = null;\n this.placedCaptionCount = 0;\n this.recomputeActive();\n this.Changed$.next();\n }\n\n /** Appends any newly-arrived captions, keeping order relative to delegation cards. */\n private onCaptions(captions: RealtimeCaption[]): void {\n if (captions.length <= this.placedCaptionCount) {\n // Captions are cleared on a fresh session — reset all merge state.\n if (captions.length < this.placedCaptionCount) {\n this.reset();\n this.Changed$.next();\n }\n return;\n }\n const appended: RealtimeThreadItem[] = [];\n for (let i = this.placedCaptionCount; i < captions.length; i++) {\n appended.push({ Kind: 'caption', Role: captions[i].Role, Text: captions[i].Text });\n }\n this.placedCaptionCount = captions.length;\n this.Items = [...this.Items, ...appended];\n this.Changed$.next();\n }\n\n /** Inserts a new working card, or immutably replaces the existing one for this CallID. */\n private onProgress(progress: RealtimeDelegationProgress): void {\n const existing = this.cardsByCallId.get(progress.CallID);\n if (existing) {\n this.replaceCard({\n ...existing,\n LatestStep: progress.Step,\n LatestMessage: progress.Message,\n Percentage: progress.Percentage\n });\n } else {\n this.insertCard(progress);\n }\n this.Changed$.next();\n }\n\n /** Creates a working card for a first-seen CallID and appends it to the thread tail. */\n private insertCard(progress: RealtimeDelegationProgress): void {\n const card: RealtimeDelegationCardVM = {\n CallID: progress.CallID,\n AgentName: this.AgentName,\n LatestStep: progress.Step,\n LatestMessage: progress.Message,\n Percentage: progress.Percentage,\n Done: false,\n Success: false,\n RunRef: this.shortRunRef(progress.CallID),\n StartedAt: Date.now()\n };\n this.cardsByCallId.set(progress.CallID, card);\n this.Items = [...this.Items, { Kind: 'delegation', Card: card }];\n this.rebuildCards();\n this.recomputeActive();\n }\n\n /** Flips the card for a finished delegation to Done/Failed with its real result. */\n private onResult(result: RealtimeDelegationResult): void {\n const existing = this.cardsByCallId.get(result.CallID);\n if (!existing) {\n return; // non-delegation tool result (no card was ever created) — ignore\n }\n this.replaceCard({\n ...existing,\n Done: true,\n Success: result.Success,\n Result: result.Output,\n RunID: result.RunID ?? existing.RunID,\n Artifacts: result.Artifacts ?? existing.Artifacts,\n FinishedAt: Date.now()\n });\n if (!this.HasRunningDelegation) {\n // All delegations finished — the live narration note fades away.\n this.Narration = null;\n }\n this.Changed$.next();\n }\n\n /** Latest narration REPLACES the previous one (never accumulated). */\n private onNarration(narration: RealtimeDelegationNarration): void {\n this.Narration = narration.Text;\n this.Changed$.next();\n }\n\n /**\n * Immutable replacement of a card: new card object, new thread-item wrapper, new\n * Items array, rebuilt Cards array — so every binding sees a fresh reference.\n */\n private replaceCard(card: RealtimeDelegationCardVM): void {\n this.cardsByCallId.set(card.CallID, card);\n const idx = this.Items.findIndex(i => i.Kind === 'delegation' && i.Card.CallID === card.CallID);\n if (idx >= 0) {\n const next = [...this.Items];\n next[idx] = { Kind: 'delegation', Card: card };\n this.Items = next;\n }\n this.rebuildCards();\n this.recomputeActive();\n }\n\n /** Rebuilds the rail's newest-first card list from the (start-ordered) map. */\n private rebuildCards(): void {\n this.Cards = Array.from(this.cardsByCallId.values()).reverse();\n }\n\n /** Recomputes which still-running delegation anchors the live narration note. */\n private recomputeActive(): void {\n const running = this.Cards.find(c => !c.Done);\n this.ActiveCallId = running ? running.CallID : null;\n }\n\n /** Derives a short, stable run reference (e.g. \"#a3f1\") from the call id. */\n private shortRunRef(callId: string): string {\n const compact = callId.replace(/[^a-z0-9]/gi, '');\n return compact.length >= 4 ? `#${compact.slice(-4).toLowerCase()}` : `#${compact.toLowerCase()}`;\n }\n\n /** Clears all merged state (fresh session). */\n private reset(): void {\n this.Items = [];\n this.Cards = [];\n this.Narration = null;\n this.ActiveCallId = null;\n this.placedCaptionCount = 0;\n this.cardsByCallId.clear();\n }\n}\n"]}
@@ -0,0 +1,70 @@
1
+ /**
2
+ * Framework-free helpers for the call overlay's SURFACE-PANEL tab strip styling + gating
3
+ * and the Activity tab's artifact split-pane width preference.
4
+ *
5
+ * Kept free of Angular imports so the per-channel color hash, the whiteboard predicate,
6
+ * the channel-used gate, the show-activity gate, and the split-width parse/clamp rules
7
+ * are unit-testable in isolation (plain-node vitest).
8
+ */
9
+ /**
10
+ * Whether a channel name denotes the live WHITEBOARD channel (case-insensitive, trimmed).
11
+ *
12
+ * The whiteboard is the ONE channel whose surface tab appears immediately at session start
13
+ * — a user can be the first to draw on it, whereas every other channel only earns its tab
14
+ * once the agent actually USES it. Detection is by name (the registry `Name` / plugin
15
+ * `ChannelName`) rather than a flag so a deployment can't accidentally opt a non-board
16
+ * channel into the immediate-tab behavior.
17
+ */
18
+ export declare function IsWhiteboardChannel(channelName: string | null | undefined): boolean;
19
+ /**
20
+ * Whether a channel should get its surface tab registered UP FRONT (at the
21
+ * registry-resolved emission) rather than waiting for first use.
22
+ *
23
+ * True only for the whiteboard (see {@link IsWhiteboardChannel}) OR a channel the agent has
24
+ * already used this session (`hasBeenUsed`). Every other channel stays tab-less until its
25
+ * first activity registers it — keeping the strip decluttered to the surfaces actually in play.
26
+ */
27
+ export declare function ShouldRegisterChannelTabUpFront(channelName: string, hasBeenUsed: boolean): boolean;
28
+ /**
29
+ * Whether the Activity tab should be shown yet. Gated on ≥1 underlying agent run having
30
+ * occurred this session (`agentRunCount`) — the Activity surface is for async delegation,
31
+ * so it stays hidden until there's at least one delegated run to show. Review mode always
32
+ * shows it (a past session's activity is always relevant), regardless of the live count.
33
+ */
34
+ export declare function ShouldShowActivityTab(agentRunCount: number, isReviewing: boolean): boolean;
35
+ /**
36
+ * A stable, deterministic accent color for a channel tab derived from its `ChannelName`,
37
+ * as an `hsl()` string. Categorical channel colors are explicitly allowed to use `hsl()`
38
+ * per the design-token rules. A channel may override this by supplying its own `TabColor`.
39
+ *
40
+ * The hue is an FNV-1a-style hash of the (lowercased, trimmed) name spread across the wheel;
41
+ * saturation/lightness are fixed so every channel reads as a confident, legible accent that
42
+ * works on both light and dark surfaces. Deterministic: the same name always yields the same
43
+ * hue, so a channel keeps its color across sessions and re-registrations.
44
+ */
45
+ export declare function ChannelTabColor(channelName: string): string;
46
+ /** The deterministic hue (0–359) a channel name hashes to — split out for testability. */
47
+ export declare function ChannelTabHue(channelName: string): number;
48
+ /** `MJ: User Settings` key for the Activity-tab artifact split width (versioned shape). */
49
+ export declare const ACTIVITY_SPLIT_PREF_KEY = "mj.realtime.activitySplit.v1";
50
+ /** Default right-pane (artifact viewer) width as a percentage of the Activity pane. */
51
+ export declare const ACTIVITY_SPLIT_DEFAULT_PERCENT = 45;
52
+ /** Narrowest the artifact (right) pane may be dragged, as a percentage. */
53
+ export declare const ACTIVITY_SPLIT_MIN_PERCENT = 25;
54
+ /** Widest the artifact (right) pane may be dragged, as a percentage. */
55
+ export declare const ACTIVITY_SPLIT_MAX_PERCENT = 75;
56
+ /**
57
+ * Clamps a candidate right-pane width percentage into
58
+ * `[{@link ACTIVITY_SPLIT_MIN_PERCENT}, {@link ACTIVITY_SPLIT_MAX_PERCENT}]`. Non-finite
59
+ * inputs resolve to the default so a garbage value can never break the layout.
60
+ */
61
+ export declare function ClampActivitySplitPercent(percent: number): number;
62
+ /**
63
+ * Parses the raw persisted Activity-split preference into a clamped right-pane percentage,
64
+ * or `null` when there is no usable preference (missing / blank / malformed JSON, non-object
65
+ * payload, non-finite/non-positive width). Never throws — callers fall back to the default.
66
+ */
67
+ export declare function ParseActivitySplitPercent(raw: string | null | undefined): number | null;
68
+ /** Serializes the right-pane width percentage for persistence (`{ "percent": number }`). */
69
+ export declare function SerializeActivitySplitPercent(percent: number): string;
70
+ //# sourceMappingURL=realtime-surface-tab-style.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"realtime-surface-tab-style.d.ts","sourceRoot":"","sources":["../../../../src/lib/components/realtime/realtime-surface-tab-style.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH;;;;;;;;GAQG;AACH,wBAAgB,mBAAmB,CAAC,WAAW,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,GAAG,OAAO,CAEnF;AAED;;;;;;;GAOG;AACH,wBAAgB,+BAA+B,CAAC,WAAW,EAAE,MAAM,EAAE,WAAW,EAAE,OAAO,GAAG,OAAO,CAElG;AAED;;;;;GAKG;AACH,wBAAgB,qBAAqB,CAAC,aAAa,EAAE,MAAM,EAAE,WAAW,EAAE,OAAO,GAAG,OAAO,CAE1F;AAED;;;;;;;;;GASG;AACH,wBAAgB,eAAe,CAAC,WAAW,EAAE,MAAM,GAAG,MAAM,CAG3D;AAED,0FAA0F;AAC1F,wBAAgB,aAAa,CAAC,WAAW,EAAE,MAAM,GAAG,MAAM,CAUzD;AAID,2FAA2F;AAC3F,eAAO,MAAM,uBAAuB,iCAAiC,CAAC;AAEtE,uFAAuF;AACvF,eAAO,MAAM,8BAA8B,KAAK,CAAC;AAEjD,2EAA2E;AAC3E,eAAO,MAAM,0BAA0B,KAAK,CAAC;AAE7C,wEAAwE;AACxE,eAAO,MAAM,0BAA0B,KAAK,CAAC;AAE7C;;;;GAIG;AACH,wBAAgB,yBAAyB,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAKjE;AAED;;;;GAIG;AACH,wBAAgB,yBAAyB,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,GAAG,MAAM,GAAG,IAAI,CAiBvF;AAED,4FAA4F;AAC5F,wBAAgB,6BAA6B,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAErE"}
@@ -0,0 +1,115 @@
1
+ /**
2
+ * Framework-free helpers for the call overlay's SURFACE-PANEL tab strip styling + gating
3
+ * and the Activity tab's artifact split-pane width preference.
4
+ *
5
+ * Kept free of Angular imports so the per-channel color hash, the whiteboard predicate,
6
+ * the channel-used gate, the show-activity gate, and the split-width parse/clamp rules
7
+ * are unit-testable in isolation (plain-node vitest).
8
+ */
9
+ /**
10
+ * Whether a channel name denotes the live WHITEBOARD channel (case-insensitive, trimmed).
11
+ *
12
+ * The whiteboard is the ONE channel whose surface tab appears immediately at session start
13
+ * — a user can be the first to draw on it, whereas every other channel only earns its tab
14
+ * once the agent actually USES it. Detection is by name (the registry `Name` / plugin
15
+ * `ChannelName`) rather than a flag so a deployment can't accidentally opt a non-board
16
+ * channel into the immediate-tab behavior.
17
+ */
18
+ export function IsWhiteboardChannel(channelName) {
19
+ return (channelName ?? '').trim().toLowerCase() === 'whiteboard';
20
+ }
21
+ /**
22
+ * Whether a channel should get its surface tab registered UP FRONT (at the
23
+ * registry-resolved emission) rather than waiting for first use.
24
+ *
25
+ * True only for the whiteboard (see {@link IsWhiteboardChannel}) OR a channel the agent has
26
+ * already used this session (`hasBeenUsed`). Every other channel stays tab-less until its
27
+ * first activity registers it — keeping the strip decluttered to the surfaces actually in play.
28
+ */
29
+ export function ShouldRegisterChannelTabUpFront(channelName, hasBeenUsed) {
30
+ return IsWhiteboardChannel(channelName) || hasBeenUsed;
31
+ }
32
+ /**
33
+ * Whether the Activity tab should be shown yet. Gated on ≥1 underlying agent run having
34
+ * occurred this session (`agentRunCount`) — the Activity surface is for async delegation,
35
+ * so it stays hidden until there's at least one delegated run to show. Review mode always
36
+ * shows it (a past session's activity is always relevant), regardless of the live count.
37
+ */
38
+ export function ShouldShowActivityTab(agentRunCount, isReviewing) {
39
+ return isReviewing || agentRunCount > 0;
40
+ }
41
+ /**
42
+ * A stable, deterministic accent color for a channel tab derived from its `ChannelName`,
43
+ * as an `hsl()` string. Categorical channel colors are explicitly allowed to use `hsl()`
44
+ * per the design-token rules. A channel may override this by supplying its own `TabColor`.
45
+ *
46
+ * The hue is an FNV-1a-style hash of the (lowercased, trimmed) name spread across the wheel;
47
+ * saturation/lightness are fixed so every channel reads as a confident, legible accent that
48
+ * works on both light and dark surfaces. Deterministic: the same name always yields the same
49
+ * hue, so a channel keeps its color across sessions and re-registrations.
50
+ */
51
+ export function ChannelTabColor(channelName) {
52
+ const hue = ChannelTabHue(channelName);
53
+ return `hsl(${hue}, 62%, 52%)`;
54
+ }
55
+ /** The deterministic hue (0–359) a channel name hashes to — split out for testability. */
56
+ export function ChannelTabHue(channelName) {
57
+ const key = (channelName ?? '').trim().toLowerCase();
58
+ let hash = 0x811c9dc5; // FNV offset basis
59
+ for (let i = 0; i < key.length; i++) {
60
+ hash ^= key.charCodeAt(i);
61
+ // FNV prime multiply, kept in 32-bit range via Math.imul.
62
+ hash = Math.imul(hash, 0x01000193);
63
+ }
64
+ // >>> 0 normalizes to an unsigned 32-bit int before the modulo.
65
+ return (hash >>> 0) % 360;
66
+ }
67
+ // ── Activity tab artifact split-pane width preference ──────────────────────────
68
+ /** `MJ: User Settings` key for the Activity-tab artifact split width (versioned shape). */
69
+ export const ACTIVITY_SPLIT_PREF_KEY = 'mj.realtime.activitySplit.v1';
70
+ /** Default right-pane (artifact viewer) width as a percentage of the Activity pane. */
71
+ export const ACTIVITY_SPLIT_DEFAULT_PERCENT = 45;
72
+ /** Narrowest the artifact (right) pane may be dragged, as a percentage. */
73
+ export const ACTIVITY_SPLIT_MIN_PERCENT = 25;
74
+ /** Widest the artifact (right) pane may be dragged, as a percentage. */
75
+ export const ACTIVITY_SPLIT_MAX_PERCENT = 75;
76
+ /**
77
+ * Clamps a candidate right-pane width percentage into
78
+ * `[{@link ACTIVITY_SPLIT_MIN_PERCENT}, {@link ACTIVITY_SPLIT_MAX_PERCENT}]`. Non-finite
79
+ * inputs resolve to the default so a garbage value can never break the layout.
80
+ */
81
+ export function ClampActivitySplitPercent(percent) {
82
+ if (!Number.isFinite(percent)) {
83
+ return ACTIVITY_SPLIT_DEFAULT_PERCENT;
84
+ }
85
+ return Math.min(Math.max(percent, ACTIVITY_SPLIT_MIN_PERCENT), ACTIVITY_SPLIT_MAX_PERCENT);
86
+ }
87
+ /**
88
+ * Parses the raw persisted Activity-split preference into a clamped right-pane percentage,
89
+ * or `null` when there is no usable preference (missing / blank / malformed JSON, non-object
90
+ * payload, non-finite/non-positive width). Never throws — callers fall back to the default.
91
+ */
92
+ export function ParseActivitySplitPercent(raw) {
93
+ if (!raw) {
94
+ return null;
95
+ }
96
+ try {
97
+ const parsed = JSON.parse(raw);
98
+ if (parsed === null || typeof parsed !== 'object') {
99
+ return null;
100
+ }
101
+ const percent = parsed.percent;
102
+ if (typeof percent !== 'number' || !Number.isFinite(percent) || percent <= 0) {
103
+ return null;
104
+ }
105
+ return ClampActivitySplitPercent(percent);
106
+ }
107
+ catch {
108
+ return null;
109
+ }
110
+ }
111
+ /** Serializes the right-pane width percentage for persistence (`{ "percent": number }`). */
112
+ export function SerializeActivitySplitPercent(percent) {
113
+ return JSON.stringify({ percent: ClampActivitySplitPercent(percent) });
114
+ }
115
+ //# sourceMappingURL=realtime-surface-tab-style.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"realtime-surface-tab-style.js","sourceRoot":"","sources":["../../../../src/lib/components/realtime/realtime-surface-tab-style.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * Framework-free helpers for the call overlay's SURFACE-PANEL tab strip styling + gating\n * and the Activity tab's artifact split-pane width preference.\n *\n * Kept free of Angular imports so the per-channel color hash, the whiteboard predicate,\n * the channel-used gate, the show-activity gate, and the split-width parse/clamp rules\n * are unit-testable in isolation (plain-node vitest).\n */\n\n/**\n * Whether a channel name denotes the live WHITEBOARD channel (case-insensitive, trimmed).\n *\n * The whiteboard is the ONE channel whose surface tab appears immediately at session start\n * — a user can be the first to draw on it, whereas every other channel only earns its tab\n * once the agent actually USES it. Detection is by name (the registry `Name` / plugin\n * `ChannelName`) rather than a flag so a deployment can't accidentally opt a non-board\n * channel into the immediate-tab behavior.\n */\nexport function IsWhiteboardChannel(channelName: string | null | undefined): boolean {\n return (channelName ?? '').trim().toLowerCase() === 'whiteboard';\n}\n\n/**\n * Whether a channel should get its surface tab registered UP FRONT (at the\n * registry-resolved emission) rather than waiting for first use.\n *\n * True only for the whiteboard (see {@link IsWhiteboardChannel}) OR a channel the agent has\n * already used this session (`hasBeenUsed`). Every other channel stays tab-less until its\n * first activity registers it — keeping the strip decluttered to the surfaces actually in play.\n */\nexport function ShouldRegisterChannelTabUpFront(channelName: string, hasBeenUsed: boolean): boolean {\n return IsWhiteboardChannel(channelName) || hasBeenUsed;\n}\n\n/**\n * Whether the Activity tab should be shown yet. Gated on ≥1 underlying agent run having\n * occurred this session (`agentRunCount`) — the Activity surface is for async delegation,\n * so it stays hidden until there's at least one delegated run to show. Review mode always\n * shows it (a past session's activity is always relevant), regardless of the live count.\n */\nexport function ShouldShowActivityTab(agentRunCount: number, isReviewing: boolean): boolean {\n return isReviewing || agentRunCount > 0;\n}\n\n/**\n * A stable, deterministic accent color for a channel tab derived from its `ChannelName`,\n * as an `hsl()` string. Categorical channel colors are explicitly allowed to use `hsl()`\n * per the design-token rules. A channel may override this by supplying its own `TabColor`.\n *\n * The hue is an FNV-1a-style hash of the (lowercased, trimmed) name spread across the wheel;\n * saturation/lightness are fixed so every channel reads as a confident, legible accent that\n * works on both light and dark surfaces. Deterministic: the same name always yields the same\n * hue, so a channel keeps its color across sessions and re-registrations.\n */\nexport function ChannelTabColor(channelName: string): string {\n const hue = ChannelTabHue(channelName);\n return `hsl(${hue}, 62%, 52%)`;\n}\n\n/** The deterministic hue (0–359) a channel name hashes to — split out for testability. */\nexport function ChannelTabHue(channelName: string): number {\n const key = (channelName ?? '').trim().toLowerCase();\n let hash = 0x811c9dc5; // FNV offset basis\n for (let i = 0; i < key.length; i++) {\n hash ^= key.charCodeAt(i);\n // FNV prime multiply, kept in 32-bit range via Math.imul.\n hash = Math.imul(hash, 0x01000193);\n }\n // >>> 0 normalizes to an unsigned 32-bit int before the modulo.\n return (hash >>> 0) % 360;\n}\n\n// ── Activity tab artifact split-pane width preference ──────────────────────────\n\n/** `MJ: User Settings` key for the Activity-tab artifact split width (versioned shape). */\nexport const ACTIVITY_SPLIT_PREF_KEY = 'mj.realtime.activitySplit.v1';\n\n/** Default right-pane (artifact viewer) width as a percentage of the Activity pane. */\nexport const ACTIVITY_SPLIT_DEFAULT_PERCENT = 45;\n\n/** Narrowest the artifact (right) pane may be dragged, as a percentage. */\nexport const ACTIVITY_SPLIT_MIN_PERCENT = 25;\n\n/** Widest the artifact (right) pane may be dragged, as a percentage. */\nexport const ACTIVITY_SPLIT_MAX_PERCENT = 75;\n\n/**\n * Clamps a candidate right-pane width percentage into\n * `[{@link ACTIVITY_SPLIT_MIN_PERCENT}, {@link ACTIVITY_SPLIT_MAX_PERCENT}]`. Non-finite\n * inputs resolve to the default so a garbage value can never break the layout.\n */\nexport function ClampActivitySplitPercent(percent: number): number {\n if (!Number.isFinite(percent)) {\n return ACTIVITY_SPLIT_DEFAULT_PERCENT;\n }\n return Math.min(Math.max(percent, ACTIVITY_SPLIT_MIN_PERCENT), ACTIVITY_SPLIT_MAX_PERCENT);\n}\n\n/**\n * Parses the raw persisted Activity-split preference into a clamped right-pane percentage,\n * or `null` when there is no usable preference (missing / blank / malformed JSON, non-object\n * payload, non-finite/non-positive width). Never throws — callers fall back to the default.\n */\nexport function ParseActivitySplitPercent(raw: string | null | undefined): number | null {\n if (!raw) {\n return null;\n }\n try {\n const parsed: unknown = JSON.parse(raw);\n if (parsed === null || typeof parsed !== 'object') {\n return null;\n }\n const percent = (parsed as { percent?: unknown }).percent;\n if (typeof percent !== 'number' || !Number.isFinite(percent) || percent <= 0) {\n return null;\n }\n return ClampActivitySplitPercent(percent);\n } catch {\n return null;\n }\n}\n\n/** Serializes the right-pane width percentage for persistence (`{ \"percent\": number }`). */\nexport function SerializeActivitySplitPercent(percent: number): string {\n return JSON.stringify({ percent: ClampActivitySplitPercent(percent) });\n}\n"]}
@@ -6,36 +6,32 @@ import { RealtimeSurfaceTabsModel, RealtimeSurfaceTab, RealtimeChannelTabRegistr
6
6
  import { ParsedDelegationArtifact } from '../../services/delegation-result-parser';
7
7
  import * as i0 from "@angular/core";
8
8
  /**
9
- * The call overlay's TABBED SURFACE PANEL (the right panel) — per the approved
10
- * `plans/realtime/mockups/whiteboard.html` mockup:
9
+ * The call overlay's TABBED SURFACE PANEL (the right panel) — decluttered redesign:
11
10
  *
12
- * - **Activity** — always the first tab; hosts the existing
13
- * {@link RealtimeActivityRailComponent} unchanged (in `Embedded` mode, since this panel
14
- * owns the chrome + collapse).
15
- * - **One tab per artifact** produced by delegated runs: when a delegation result carries
16
- * artifacts, a tab is auto-opened, FOCUSED, and briefly flashed violet. The pane reuses
17
- * the standard `mj-artifact-viewer-panel` (read-only embed: no header/tabs/actions),
18
- * loading by ArtifactID the latest version, i.e. the one the run just produced.
19
- * - **Channel tabs** rendered ONLY once a channel registers via
20
- * {@link RegisterChannelTab}. The overlay shell registers one per registry-resolved
21
- * {@link BaseRealtimeChannelClient} plugin; the pane creates the plugin's surface
22
- * component dynamically (via `mj-realtime-channel-pane`). Until a registration supplies
23
- * a plugin (or legacy template), the pane shows the "coming online…" placeholder;
24
- * re-registering the same key swaps the real surface in.
11
+ * - **Channel tabs** (LEFT cluster) one per channel that has come into play. The whiteboard
12
+ * tabs immediately at session start; every other channel tabs only once the agent first
13
+ * USES it. Each carries a distinct accent color + its plugin icon. The pane creates the
14
+ * plugin's surface component dynamically (via `mj-realtime-channel-pane`); a placeholder
15
+ * shows the "coming online…" state until a plugin/template is supplied.
16
+ * - **Activity** (RIGHT-aligned, pinned LAST) — gated: appears only once ≥1 agent run has
17
+ * occurred (or in review mode). Hosts {@link RealtimeActivityRailComponent}, which now also
18
+ * renders inline artifact previews and a split-pane artifact viewer. Styled distinctly from
19
+ * channel tabs (activity-pulse icon + its own accent) and separated from the channel cluster
20
+ * by a flex spacer.
25
21
  *
26
- * Panes are kept ALIVE while hidden (CSS `display:none`, mirroring the mockup's
27
- * `.s-pane.active`) so switching tabs never reloads an artifact or resets the rail.
28
- * The whole panel collapses to a slim strip via the chevron at the tab strip's end —
29
- * the collapse-to-strip behavior that used to live on the rail, lifted to the panel.
22
+ * Artifacts NO LONGER get their own tab they live inside the Activity tab (cleaner than a
23
+ * row of per-artifact tabs).
30
24
  *
31
- * SIZING IS EXTERNAL: the overlay shell hosts this panel in a fixed-width flex item
32
- * and owns the width (user drag via the resize handle + persisted preference +
33
- * default tiers). This panel just fills it and REPORTS the layout signals the shell sizes from:
34
- * {@link CollapsedChange} (slim-strip toggle) and {@link WideChanged} (a content tab
35
- * is focused the default width tier widens).
25
+ * Panes are kept ALIVE while hidden (CSS `display:none`) so switching tabs never reloads a
26
+ * channel surface or resets the rail. The whole panel collapses to a slim strip via the chevron.
27
+ *
28
+ * SIZING IS EXTERNAL: the overlay shell hosts this panel in a fixed-width flex item and owns
29
+ * the width. This panel just fills it and REPORTS the layout signals the shell sizes from:
30
+ * {@link CollapsedChange} (slim-strip toggle) and {@link WideChanged} (a channel tab is focused
31
+ * → the default width tier widens).
36
32
  */
37
33
  export declare class RealtimeSurfaceTabsComponent implements OnInit, OnDestroy {
38
- /** How long a just-arrived tab keeps its violet flash highlight. */
34
+ /** How long a just-revealed channel tab keeps its flash highlight. */
39
35
  private static readonly FlashDurationMs;
40
36
  /** Shared live-session state, owned by the overlay shell (feeds the Activity rail). */
41
37
  State: RealtimeSessionState;
@@ -51,6 +47,19 @@ export declare class RealtimeSurfaceTabsComponent implements OnInit, OnDestroy {
51
47
  CurrentUser: UserInfo | null;
52
48
  /** The active environment id, threaded to the artifact viewer panel. */
53
49
  EnvironmentID: string;
50
+ /**
51
+ * Extra (review-carryover) artifacts to surface in the Activity tab, NOT tied to a live
52
+ * activity card. Forwarded to the rail's "Session artifacts" group. Empty for a live session.
53
+ */
54
+ ExtraArtifacts: ParsedDelegationArtifact[];
55
+ /**
56
+ * Whether the gated Activity tab should be shown — driven by the overlay shell once ≥1
57
+ * agent run has occurred (or in review mode). A getter/setter so a late "first run" flips
58
+ * the tab into the strip reactively.
59
+ */
60
+ private _showActivityTab;
61
+ set ShowActivityTab(value: boolean);
62
+ get ShowActivityTab(): boolean;
54
63
  /** Re-emitted from the Activity rail's dev "Open run" links. */
55
64
  OpenRunRequested: EventEmitter<string>;
56
65
  /**
@@ -59,7 +68,7 @@ export declare class RealtimeSurfaceTabsComponent implements OnInit, OnDestroy {
59
68
  */
60
69
  CollapsedChange: EventEmitter<boolean>;
61
70
  /**
62
- * Emitted when {@link IsWide} flips (a content tab gained / lost focus) — the
71
+ * Emitted when {@link IsWide} flips (a channel tab gained / lost focus) — the
63
72
  * overlay shell widens the panel's DEFAULT split-area size while wide (only when
64
73
  * the user has never dragged an explicit width).
65
74
  */
@@ -68,8 +77,8 @@ export declare class RealtimeSurfaceTabsComponent implements OnInit, OnDestroy {
68
77
  readonly Model: RealtimeSurfaceTabsModel;
69
78
  /** Whether the panel is collapsed to its slim strip. */
70
79
  Collapsed: boolean;
71
- /** Artifact version ids already turned into tabs (guards the State rescan). */
72
- private tabbedVersionIds;
80
+ /** The embedded Activity rail (owns the inline artifact previews + the split-pane viewer). */
81
+ private activityRail?;
73
82
  private flashTimer;
74
83
  private subs;
75
84
  private lastWide;
@@ -84,7 +93,7 @@ export declare class RealtimeSurfaceTabsComponent implements OnInit, OnDestroy {
84
93
  OnboardingContent: ChannelOnboardingDetails | null;
85
94
  /** The currently focused tab. */
86
95
  get ActiveTab(): RealtimeSurfaceTab;
87
- /** Wide presentation when a content tab (artifact / channel) is focused. */
96
+ /** Wide presentation when a channel tab is focused (the Activity tab keeps the normal tier). */
88
97
  get IsWide(): boolean;
89
98
  ngOnInit(): void;
90
99
  ngOnDestroy(): void;
@@ -92,46 +101,43 @@ export declare class RealtimeSurfaceTabsComponent implements OnInit, OnDestroy {
92
101
  ToggleCollapsed(): void;
93
102
  /** Collapse-state transitions funnel through here so the shell always hears about them. */
94
103
  private setCollapsed;
95
- /** Emits {@link WideChanged} when the wide tier flips (content tab focus / collapse). */
104
+ /** Emits {@link WideChanged} when the wide tier flips (channel tab focus / collapse). */
96
105
  private syncWide;
97
106
  /** track fn for the @for over tabs. */
98
107
  TrackTab(index: number, tab: RealtimeSurfaceTab): string;
99
108
  /**
100
- * Focuses (opening if needed) the tab for an artifact the "View →" affordance target
101
- * on done delegation cards and rail entries. Expands the panel if it was collapsed.
109
+ * Focuses the Activity tab and opens the given artifact in the rail's split-pane viewer
110
+ * the "View →" affordance target on done delegation cards / thread entries. Expands the
111
+ * panel if it was collapsed. Replaces the old "open a tab per artifact" behavior.
102
112
  */
103
113
  FocusArtifact(artifact: ParsedDelegationArtifact): void;
104
114
  /**
105
- * Registers (or updates) an interactive-channel tab — one per registry-resolved channel
106
- * plugin, forwarded from `RealtimeSessionOverlayComponent.RegisterChannelTab`.
115
+ * Registers (or updates) an interactive-channel tab — one per used channel plugin,
116
+ * forwarded from `RealtimeSessionOverlayComponent.RegisterChannelTab`.
107
117
  */
108
118
  RegisterChannelTab(registration: RealtimeChannelTabRegistration): void;
109
119
  /**
110
120
  * AUTO-REVEALS a channel surface the moment the agent first acts on it: expands the
111
- * panel if collapsed, focuses the channel's tab and flashes it violet — so the user
112
- * discovers the whiteboard (or any channel) exists the instant it comes alive,
113
- * instead of having to find the tab themselves. No-op for unknown keys.
121
+ * panel if collapsed, focuses the channel's tab and flashes it — so the user discovers
122
+ * the whiteboard (or any channel) exists the instant it comes alive. No-op for unknown keys.
114
123
  */
115
124
  RevealChannel(key: string): void;
116
125
  /**
117
- * Removes a tab from the panel (Activity is irremovable; focus falls back to Activity
118
- * see {@link RealtimeSurfaceTabsModel.RemoveTab}). Used by the overlay shell on a
119
- * review→live continuation whose live channel set resolved WITHOUT the channel a stale
120
- * review tab represents (e.g. no Whiteboard channel → drop the read-only review board tab).
126
+ * Removes a tab from the panel (Activity is irremovable; focus falls back per the model's
127
+ * rules). Used by the overlay shell on a review→live continuation whose live channel set
128
+ * resolved WITHOUT the channel a stale review tab represents (e.g. no Whiteboard channel
129
+ * drop the read-only review board tab).
121
130
  *
122
131
  * @returns `true` when a tab was removed.
123
132
  */
124
133
  RemoveTab(key: string): boolean;
125
134
  /**
126
- * Registers an artifact tab WITHOUT stealing focus (default) the SESSION REVIEW /
127
- * resume-carryover path, where a reviewed session's (and its prior legs') history
128
- * artifacts are surfaced as tabs the user can visit, as opposed to the live
129
- * auto-open-on-arrival behavior. Idempotent per artifact version; the registered tab
130
- * survives the review→live transition (tabs are never cleared on resume).
135
+ * Registers the reviewed chain's history artifacts so they surface inside the Activity tab.
136
+ * In the redesign there are no per-artifact tabs the rail picks artifacts up from the
137
+ * session state's cards, so this only needs to ensure the Activity tab is shown (review
138
+ * mode always shows it) and, when `focus` is set, open the artifact in the split viewer.
131
139
  */
132
140
  RegisterArtifactTab(artifact: ParsedDelegationArtifact, focus?: boolean): void;
133
- /** On session-state changes: open tabs for newly-arrived artifacts, then re-render. */
134
- private onStateChanged;
135
141
  /** On model changes: schedule the flash clear, report a wide-tier flip, re-render. */
136
142
  private onModelChanged;
137
143
  /**
@@ -152,14 +158,6 @@ export declare class RealtimeSurfaceTabsComponent implements OnInit, OnDestroy {
152
158
  private markOnboardingSeen;
153
159
  /** Reads + parses the per-user seen-map setting (tolerant: malformed / unset → empty map). */
154
160
  private readOnboardingSeen;
155
- /**
156
- * Scans the session's delegation cards for artifacts that don't have a tab yet and
157
- * adds one per artifact — UNFOCUSED, with the brief violet flash plus the persistent
158
- * unseen glow. Per product direction a finished artifact never steals the screen
159
- * (only the agent's first channel activity auto-reveals); the glowing tab is the
160
- * invitation, the user opens it when they want it.
161
- */
162
- private syncArtifactTabs;
163
161
  /**
164
162
  * Focuses the FIRST tab in the strip — channels lead, so a Details peek lands on the
165
163
  * marquee surface (e.g. the Whiteboard) when one exists, else on Activity.
@@ -168,6 +166,6 @@ export declare class RealtimeSurfaceTabsComponent implements OnInit, OnDestroy {
168
166
  /** Clears the model's flash highlight after a beat (one timer; latest flash wins). */
169
167
  private scheduleFlashClear;
170
168
  static ɵfac: i0.ɵɵFactoryDeclaration<RealtimeSurfaceTabsComponent, never>;
171
- static ɵcmp: i0.ɵɵComponentDeclaration<RealtimeSurfaceTabsComponent, "mj-realtime-surface-tabs", never, { "State": { "alias": "State"; "required": true; }; "DevMode": { "alias": "DevMode"; "required": false; }; "Fill": { "alias": "Fill"; "required": false; }; "CurrentUser": { "alias": "CurrentUser"; "required": false; }; "EnvironmentID": { "alias": "EnvironmentID"; "required": false; }; }, { "OpenRunRequested": "OpenRunRequested"; "CollapsedChange": "CollapsedChange"; "WideChanged": "WideChanged"; }, never, never, true, never>;
169
+ static ɵcmp: i0.ɵɵComponentDeclaration<RealtimeSurfaceTabsComponent, "mj-realtime-surface-tabs", never, { "State": { "alias": "State"; "required": true; }; "DevMode": { "alias": "DevMode"; "required": false; }; "Fill": { "alias": "Fill"; "required": false; }; "CurrentUser": { "alias": "CurrentUser"; "required": false; }; "EnvironmentID": { "alias": "EnvironmentID"; "required": false; }; "ExtraArtifacts": { "alias": "ExtraArtifacts"; "required": false; }; "ShowActivityTab": { "alias": "ShowActivityTab"; "required": false; }; }, { "OpenRunRequested": "OpenRunRequested"; "CollapsedChange": "CollapsedChange"; "WideChanged": "WideChanged"; }, never, never, true, never>;
172
170
  }
173
171
  //# sourceMappingURL=realtime-surface-tabs.component.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"realtime-surface-tabs.component.d.ts","sourceRoot":"","sources":["../../../../src/lib/components/realtime/realtime-surface-tabs.component.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"realtime-surface-tabs.component.d.ts","sourceRoot":"","sources":["../../../../src/lib/components/realtime/realtime-surface-tabs.component.ts"],"names":[],"mappings":"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"}