@memberjunction/ng-conversations 5.40.1 → 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.
- package/README.md +57 -0
- package/dist/__tests__/channel-optional-surface.test.d.ts +2 -0
- package/dist/__tests__/channel-optional-surface.test.d.ts.map +1 -0
- package/dist/__tests__/channel-optional-surface.test.js +53 -0
- package/dist/__tests__/channel-optional-surface.test.js.map +1 -0
- package/dist/__tests__/chat-events.test.d.ts +14 -0
- package/dist/__tests__/chat-events.test.d.ts.map +1 -0
- package/dist/__tests__/chat-events.test.js +109 -0
- package/dist/__tests__/chat-events.test.js.map +1 -0
- package/dist/__tests__/conversation-naming.test.d.ts +2 -0
- package/dist/__tests__/conversation-naming.test.d.ts.map +1 -0
- package/dist/__tests__/conversation-naming.test.js +110 -0
- package/dist/__tests__/conversation-naming.test.js.map +1 -0
- package/dist/__tests__/delegation-result-parser.test.d.ts +2 -0
- package/dist/__tests__/delegation-result-parser.test.d.ts.map +1 -0
- package/dist/__tests__/delegation-result-parser.test.js +107 -0
- package/dist/__tests__/delegation-result-parser.test.js.map +1 -0
- package/dist/__tests__/event-wiring.test.d.ts +15 -0
- package/dist/__tests__/event-wiring.test.d.ts.map +1 -0
- package/dist/__tests__/event-wiring.test.js +100 -0
- package/dist/__tests__/event-wiring.test.js.map +1 -0
- package/dist/__tests__/narration-template.test.d.ts +2 -0
- package/dist/__tests__/narration-template.test.d.ts.map +1 -0
- package/dist/__tests__/narration-template.test.js +76 -0
- package/dist/__tests__/narration-template.test.js.map +1 -0
- package/dist/__tests__/realtime-agent-picker-models.test.d.ts +2 -0
- package/dist/__tests__/realtime-agent-picker-models.test.d.ts.map +1 -0
- package/dist/__tests__/realtime-agent-picker-models.test.js +49 -0
- package/dist/__tests__/realtime-agent-picker-models.test.js.map +1 -0
- package/dist/__tests__/realtime-audio-visuals.test.d.ts +2 -0
- package/dist/__tests__/realtime-audio-visuals.test.d.ts.map +1 -0
- package/dist/__tests__/realtime-audio-visuals.test.js +123 -0
- package/dist/__tests__/realtime-audio-visuals.test.js.map +1 -0
- package/dist/__tests__/realtime-delegation-card-cancel.test.d.ts +2 -0
- package/dist/__tests__/realtime-delegation-card-cancel.test.d.ts.map +1 -0
- package/dist/__tests__/realtime-delegation-card-cancel.test.js +48 -0
- package/dist/__tests__/realtime-delegation-card-cancel.test.js.map +1 -0
- package/dist/__tests__/realtime-disclosure.test.d.ts +2 -0
- package/dist/__tests__/realtime-disclosure.test.d.ts.map +1 -0
- package/dist/__tests__/realtime-disclosure.test.js +164 -0
- package/dist/__tests__/realtime-disclosure.test.js.map +1 -0
- package/dist/__tests__/realtime-pairing.test.d.ts +2 -0
- package/dist/__tests__/realtime-pairing.test.d.ts.map +1 -0
- package/dist/__tests__/realtime-pairing.test.js +207 -0
- package/dist/__tests__/realtime-pairing.test.js.map +1 -0
- package/dist/__tests__/realtime-review-lifecycle.test.d.ts +2 -0
- package/dist/__tests__/realtime-review-lifecycle.test.d.ts.map +1 -0
- package/dist/__tests__/realtime-review-lifecycle.test.js +154 -0
- package/dist/__tests__/realtime-review-lifecycle.test.js.map +1 -0
- package/dist/__tests__/realtime-session-cancel-usage.test.d.ts +2 -0
- package/dist/__tests__/realtime-session-cancel-usage.test.d.ts.map +1 -0
- package/dist/__tests__/realtime-session-cancel-usage.test.js +230 -0
- package/dist/__tests__/realtime-session-cancel-usage.test.js.map +1 -0
- package/dist/__tests__/realtime-session-channels.test.d.ts +2 -0
- package/dist/__tests__/realtime-session-channels.test.d.ts.map +1 -0
- package/dist/__tests__/realtime-session-channels.test.js +252 -0
- package/dist/__tests__/realtime-session-channels.test.js.map +1 -0
- package/dist/__tests__/realtime-session-client-tools.test.d.ts +2 -0
- package/dist/__tests__/realtime-session-client-tools.test.d.ts.map +1 -0
- package/dist/__tests__/realtime-session-client-tools.test.js +103 -0
- package/dist/__tests__/realtime-session-client-tools.test.js.map +1 -0
- package/dist/__tests__/realtime-session-minimized.test.d.ts +2 -0
- package/dist/__tests__/realtime-session-minimized.test.d.ts.map +1 -0
- package/dist/__tests__/realtime-session-minimized.test.js +32 -0
- package/dist/__tests__/realtime-session-minimized.test.js.map +1 -0
- package/dist/__tests__/realtime-session-mint.test.d.ts +2 -0
- package/dist/__tests__/realtime-session-mint.test.d.ts.map +1 -0
- package/dist/__tests__/realtime-session-mint.test.js +69 -0
- package/dist/__tests__/realtime-session-mint.test.js.map +1 -0
- package/dist/__tests__/realtime-session-policy.test.d.ts +2 -0
- package/dist/__tests__/realtime-session-policy.test.d.ts.map +1 -0
- package/dist/__tests__/realtime-session-policy.test.js +303 -0
- package/dist/__tests__/realtime-session-policy.test.js.map +1 -0
- package/dist/__tests__/realtime-session-review.service.test.d.ts +2 -0
- package/dist/__tests__/realtime-session-review.service.test.d.ts.map +1 -0
- package/dist/__tests__/realtime-session-review.service.test.js +743 -0
- package/dist/__tests__/realtime-session-review.service.test.js.map +1 -0
- package/dist/__tests__/realtime-session-state.test.d.ts +2 -0
- package/dist/__tests__/realtime-session-state.test.d.ts.map +1 -0
- package/dist/__tests__/realtime-session-state.test.js +83 -0
- package/dist/__tests__/realtime-session-state.test.js.map +1 -0
- package/dist/__tests__/realtime-session-timeline-card.test.d.ts +2 -0
- package/dist/__tests__/realtime-session-timeline-card.test.d.ts.map +1 -0
- package/dist/__tests__/realtime-session-timeline-card.test.js +106 -0
- package/dist/__tests__/realtime-session-timeline-card.test.js.map +1 -0
- package/dist/__tests__/realtime-session-timeline.test.d.ts +2 -0
- package/dist/__tests__/realtime-session-timeline.test.d.ts.map +1 -0
- package/dist/__tests__/realtime-session-timeline.test.js +142 -0
- package/dist/__tests__/realtime-session-timeline.test.js.map +1 -0
- package/dist/__tests__/realtime-sessions-adapter.test.d.ts +19 -0
- package/dist/__tests__/realtime-sessions-adapter.test.d.ts.map +1 -0
- package/dist/__tests__/realtime-sessions-adapter.test.js +188 -0
- package/dist/__tests__/realtime-sessions-adapter.test.js.map +1 -0
- package/dist/__tests__/realtime-surface-panel-prefs.test.d.ts +2 -0
- package/dist/__tests__/realtime-surface-panel-prefs.test.d.ts.map +1 -0
- package/dist/__tests__/realtime-surface-panel-prefs.test.js +100 -0
- package/dist/__tests__/realtime-surface-panel-prefs.test.js.map +1 -0
- package/dist/__tests__/realtime-surface-tabs-model.test.d.ts +2 -0
- package/dist/__tests__/realtime-surface-tabs-model.test.d.ts.map +1 -0
- package/dist/__tests__/realtime-surface-tabs-model.test.js +193 -0
- package/dist/__tests__/realtime-surface-tabs-model.test.js.map +1 -0
- package/dist/__tests__/remote-browser-audio-player.test.d.ts +2 -0
- package/dist/__tests__/remote-browser-audio-player.test.d.ts.map +1 -0
- package/dist/__tests__/remote-browser-audio-player.test.js +137 -0
- package/dist/__tests__/remote-browser-audio-player.test.js.map +1 -0
- package/dist/__tests__/remote-browser-channel.test.d.ts +2 -0
- package/dist/__tests__/remote-browser-channel.test.d.ts.map +1 -0
- package/dist/__tests__/remote-browser-channel.test.js +423 -0
- package/dist/__tests__/remote-browser-channel.test.js.map +1 -0
- package/dist/__tests__/slot-defaults.test.d.ts +24 -0
- package/dist/__tests__/slot-defaults.test.d.ts.map +1 -0
- package/dist/__tests__/slot-defaults.test.js +63 -0
- package/dist/__tests__/slot-defaults.test.js.map +1 -0
- package/dist/__tests__/user-authorization.test.d.ts +2 -0
- package/dist/__tests__/user-authorization.test.d.ts.map +1 -0
- package/dist/__tests__/user-authorization.test.js +97 -0
- package/dist/__tests__/user-authorization.test.js.map +1 -0
- package/dist/__tests__/voice-session-narration.test.d.ts +2 -0
- package/dist/__tests__/voice-session-narration.test.d.ts.map +1 -0
- package/dist/__tests__/voice-session-narration.test.js +609 -0
- package/dist/__tests__/voice-session-narration.test.js.map +1 -0
- package/dist/__tests__/whiteboard-artifact-viewer.test.d.ts +2 -0
- package/dist/__tests__/whiteboard-artifact-viewer.test.d.ts.map +1 -0
- package/dist/__tests__/whiteboard-artifact-viewer.test.js +101 -0
- package/dist/__tests__/whiteboard-artifact-viewer.test.js.map +1 -0
- package/dist/__tests__/whiteboard-channel.test.d.ts +2 -0
- package/dist/__tests__/whiteboard-channel.test.d.ts.map +1 -0
- package/dist/__tests__/whiteboard-channel.test.js +260 -0
- package/dist/__tests__/whiteboard-channel.test.js.map +1 -0
- package/dist/__tests__/whiteboard-restore-state.test.d.ts +2 -0
- package/dist/__tests__/whiteboard-restore-state.test.d.ts.map +1 -0
- package/dist/__tests__/whiteboard-restore-state.test.js +108 -0
- package/dist/__tests__/whiteboard-restore-state.test.js.map +1 -0
- package/dist/lib/components/conversation/conversation-chat-area.component.d.ts +205 -3
- package/dist/lib/components/conversation/conversation-chat-area.component.d.ts.map +1 -1
- package/dist/lib/components/conversation/conversation-chat-area.component.js +911 -342
- package/dist/lib/components/conversation/conversation-chat-area.component.js.map +1 -1
- package/dist/lib/components/mention/mention-dropdown.component.js +35 -17
- package/dist/lib/components/mention/mention-dropdown.component.js.map +1 -1
- package/dist/lib/components/mention/mention-editor.component.d.ts +4 -0
- package/dist/lib/components/mention/mention-editor.component.d.ts.map +1 -1
- package/dist/lib/components/mention/mention-editor.component.js +43 -19
- package/dist/lib/components/mention/mention-editor.component.js.map +1 -1
- package/dist/lib/components/message/message-input-box.component.d.ts +17 -1
- package/dist/lib/components/message/message-input-box.component.d.ts.map +1 -1
- package/dist/lib/components/message/message-input-box.component.js +73 -15
- package/dist/lib/components/message/message-input-box.component.js.map +1 -1
- package/dist/lib/components/message/message-input.component.d.ts +142 -6
- package/dist/lib/components/message/message-input.component.d.ts.map +1 -1
- package/dist/lib/components/message/message-input.component.js +328 -82
- package/dist/lib/components/message/message-input.component.js.map +1 -1
- package/dist/lib/components/message/message-item.component.d.ts +28 -3
- package/dist/lib/components/message/message-item.component.d.ts.map +1 -1
- package/dist/lib/components/message/message-item.component.js +180 -108
- package/dist/lib/components/message/message-item.component.js.map +1 -1
- package/dist/lib/components/message/message-list.component.d.ts +81 -2
- package/dist/lib/components/message/message-list.component.d.ts.map +1 -1
- package/dist/lib/components/message/message-list.component.js +252 -87
- package/dist/lib/components/message/message-list.component.js.map +1 -1
- package/dist/lib/components/realtime/channels/base-realtime-channel-client.d.ts +282 -0
- package/dist/lib/components/realtime/channels/base-realtime-channel-client.d.ts.map +1 -0
- package/dist/lib/components/realtime/channels/base-realtime-channel-client.js +158 -0
- package/dist/lib/components/realtime/channels/base-realtime-channel-client.js.map +1 -0
- package/dist/lib/components/realtime/channels/channel-onboarding-panel.component.d.ts +25 -0
- package/dist/lib/components/realtime/channels/channel-onboarding-panel.component.d.ts.map +1 -0
- package/dist/lib/components/realtime/channels/channel-onboarding-panel.component.js +140 -0
- package/dist/lib/components/realtime/channels/channel-onboarding-panel.component.js.map +1 -0
- package/dist/lib/components/realtime/channels/realtime-channel-pane.component.d.ts +35 -0
- package/dist/lib/components/realtime/channels/realtime-channel-pane.component.d.ts.map +1 -0
- package/dist/lib/components/realtime/channels/realtime-channel-pane.component.js +58 -0
- package/dist/lib/components/realtime/channels/realtime-channel-pane.component.js.map +1 -0
- package/dist/lib/components/realtime/realtime-activity-rail.component.d.ts +63 -0
- package/dist/lib/components/realtime/realtime-activity-rail.component.d.ts.map +1 -0
- package/dist/lib/components/realtime/realtime-activity-rail.component.js +260 -0
- package/dist/lib/components/realtime/realtime-activity-rail.component.js.map +1 -0
- package/dist/lib/components/realtime/realtime-agent-banner.component.d.ts +117 -0
- package/dist/lib/components/realtime/realtime-agent-banner.component.d.ts.map +1 -0
- package/dist/lib/components/realtime/realtime-agent-banner.component.js +504 -0
- package/dist/lib/components/realtime/realtime-agent-banner.component.js.map +1 -0
- package/dist/lib/components/realtime/realtime-agent-picker.component.d.ts +168 -0
- package/dist/lib/components/realtime/realtime-agent-picker.component.d.ts.map +1 -0
- package/dist/lib/components/realtime/realtime-agent-picker.component.js +556 -0
- package/dist/lib/components/realtime/realtime-agent-picker.component.js.map +1 -0
- package/dist/lib/components/realtime/realtime-audio-visuals.d.ts +97 -0
- package/dist/lib/components/realtime/realtime-audio-visuals.d.ts.map +1 -0
- package/dist/lib/components/realtime/realtime-audio-visuals.js +139 -0
- package/dist/lib/components/realtime/realtime-audio-visuals.js.map +1 -0
- package/dist/lib/components/realtime/realtime-channel-strip.component.d.ts +29 -0
- package/dist/lib/components/realtime/realtime-channel-strip.component.d.ts.map +1 -0
- package/dist/lib/components/realtime/realtime-channel-strip.component.js +69 -0
- package/dist/lib/components/realtime/realtime-channel-strip.component.js.map +1 -0
- package/dist/lib/components/realtime/realtime-composer.component.d.ts +65 -0
- package/dist/lib/components/realtime/realtime-composer.component.d.ts.map +1 -0
- package/dist/lib/components/realtime/realtime-composer.component.js +256 -0
- package/dist/lib/components/realtime/realtime-composer.component.js.map +1 -0
- package/dist/lib/components/realtime/realtime-delegation-card.component.d.ts +71 -0
- package/dist/lib/components/realtime/realtime-delegation-card.component.d.ts.map +1 -0
- package/dist/lib/components/realtime/realtime-delegation-card.component.js +324 -0
- package/dist/lib/components/realtime/realtime-delegation-card.component.js.map +1 -0
- package/dist/lib/components/realtime/realtime-disclosure.d.ts +135 -0
- package/dist/lib/components/realtime/realtime-disclosure.d.ts.map +1 -0
- package/dist/lib/components/realtime/realtime-disclosure.js +188 -0
- package/dist/lib/components/realtime/realtime-disclosure.js.map +1 -0
- package/dist/lib/components/realtime/realtime-session-overlay.component.d.ts +491 -0
- package/dist/lib/components/realtime/realtime-session-overlay.component.d.ts.map +1 -0
- package/dist/lib/components/realtime/realtime-session-overlay.component.js +1274 -0
- package/dist/lib/components/realtime/realtime-session-overlay.component.js.map +1 -0
- package/dist/lib/components/realtime/realtime-session-state.d.ts +191 -0
- package/dist/lib/components/realtime/realtime-session-state.d.ts.map +1 -0
- package/dist/lib/components/realtime/realtime-session-state.js +244 -0
- package/dist/lib/components/realtime/realtime-session-state.js.map +1 -0
- package/dist/lib/components/realtime/realtime-session-thread.component.d.ts +56 -0
- package/dist/lib/components/realtime/realtime-session-thread.component.d.ts.map +1 -0
- package/dist/lib/components/realtime/realtime-session-thread.component.js +246 -0
- package/dist/lib/components/realtime/realtime-session-thread.component.js.map +1 -0
- package/dist/lib/components/realtime/realtime-session-timeline-card.component.d.ts +51 -0
- package/dist/lib/components/realtime/realtime-session-timeline-card.component.d.ts.map +1 -0
- package/dist/lib/components/realtime/realtime-session-timeline-card.component.js +193 -0
- package/dist/lib/components/realtime/realtime-session-timeline-card.component.js.map +1 -0
- package/dist/lib/components/realtime/realtime-surface-panel-prefs.d.ts +77 -0
- package/dist/lib/components/realtime/realtime-surface-panel-prefs.d.ts.map +1 -0
- package/dist/lib/components/realtime/realtime-surface-panel-prefs.js +114 -0
- package/dist/lib/components/realtime/realtime-surface-panel-prefs.js.map +1 -0
- package/dist/lib/components/realtime/realtime-surface-tabs.component.d.ts +173 -0
- package/dist/lib/components/realtime/realtime-surface-tabs.component.d.ts.map +1 -0
- package/dist/lib/components/realtime/realtime-surface-tabs.component.js +496 -0
- package/dist/lib/components/realtime/realtime-surface-tabs.component.js.map +1 -0
- package/dist/lib/components/realtime/realtime-surface-tabs.model.d.ts +181 -0
- package/dist/lib/components/realtime/realtime-surface-tabs.model.d.ts.map +1 -0
- package/dist/lib/components/realtime/realtime-surface-tabs.model.js +223 -0
- package/dist/lib/components/realtime/realtime-surface-tabs.model.js.map +1 -0
- package/dist/lib/components/realtime/remote-browser/remote-browser-audio-player.d.ts +163 -0
- package/dist/lib/components/realtime/remote-browser/remote-browser-audio-player.d.ts.map +1 -0
- package/dist/lib/components/realtime/remote-browser/remote-browser-audio-player.js +309 -0
- package/dist/lib/components/realtime/remote-browser/remote-browser-audio-player.js.map +1 -0
- package/dist/lib/components/realtime/remote-browser/remote-browser-channel.d.ts +168 -0
- package/dist/lib/components/realtime/remote-browser/remote-browser-channel.d.ts.map +1 -0
- package/dist/lib/components/realtime/remote-browser/remote-browser-channel.js +524 -0
- package/dist/lib/components/realtime/remote-browser/remote-browser-channel.js.map +1 -0
- package/dist/lib/components/realtime/remote-browser/remote-browser-surface.component.d.ts +346 -0
- package/dist/lib/components/realtime/remote-browser/remote-browser-surface.component.d.ts.map +1 -0
- package/dist/lib/components/realtime/remote-browser/remote-browser-surface.component.js +851 -0
- package/dist/lib/components/realtime/remote-browser/remote-browser-surface.component.js.map +1 -0
- package/dist/lib/components/realtime/remote-browser/remote-browser-tools.d.ts +86 -0
- package/dist/lib/components/realtime/remote-browser/remote-browser-tools.d.ts.map +1 -0
- package/dist/lib/components/realtime/remote-browser/remote-browser-tools.js +210 -0
- package/dist/lib/components/realtime/remote-browser/remote-browser-tools.js.map +1 -0
- package/dist/lib/components/realtime/whiteboard/whiteboard-artifact-viewer.component.d.ts +48 -0
- package/dist/lib/components/realtime/whiteboard/whiteboard-artifact-viewer.component.d.ts.map +1 -0
- package/dist/lib/components/realtime/whiteboard/whiteboard-artifact-viewer.component.js +180 -0
- package/dist/lib/components/realtime/whiteboard/whiteboard-artifact-viewer.component.js.map +1 -0
- package/dist/lib/components/realtime/whiteboard/whiteboard-channel.d.ts +119 -0
- package/dist/lib/components/realtime/whiteboard/whiteboard-channel.d.ts.map +1 -0
- package/dist/lib/components/realtime/whiteboard/whiteboard-channel.js +274 -0
- package/dist/lib/components/realtime/whiteboard/whiteboard-channel.js.map +1 -0
- package/dist/lib/components/slots/mj-chat-agent-presence-default.component.d.ts +11 -0
- package/dist/lib/components/slots/mj-chat-agent-presence-default.component.d.ts.map +1 -0
- package/dist/lib/components/slots/mj-chat-agent-presence-default.component.js +98 -0
- package/dist/lib/components/slots/mj-chat-agent-presence-default.component.js.map +1 -0
- package/dist/lib/components/slots/mj-chat-demonstration-surface-default.component.d.ts +9 -0
- package/dist/lib/components/slots/mj-chat-demonstration-surface-default.component.d.ts.map +1 -0
- package/dist/lib/components/slots/mj-chat-demonstration-surface-default.component.js +35 -0
- package/dist/lib/components/slots/mj-chat-demonstration-surface-default.component.js.map +1 -0
- package/dist/lib/components/slots/mj-chat-empty-state-default.component.d.ts +28 -0
- package/dist/lib/components/slots/mj-chat-empty-state-default.component.d.ts.map +1 -0
- package/dist/lib/components/slots/mj-chat-empty-state-default.component.js +104 -0
- package/dist/lib/components/slots/mj-chat-empty-state-default.component.js.map +1 -0
- package/dist/lib/components/slots/mj-chat-header-default.component.d.ts +11 -0
- package/dist/lib/components/slots/mj-chat-header-default.component.d.ts.map +1 -0
- package/dist/lib/components/slots/mj-chat-header-default.component.js +103 -0
- package/dist/lib/components/slots/mj-chat-header-default.component.js.map +1 -0
- package/dist/lib/components/slots/mj-chat-message-bubble-default.component.d.ts +15 -0
- package/dist/lib/components/slots/mj-chat-message-bubble-default.component.d.ts.map +1 -0
- package/dist/lib/components/slots/mj-chat-message-bubble-default.component.js +73 -0
- package/dist/lib/components/slots/mj-chat-message-bubble-default.component.js.map +1 -0
- package/dist/lib/components/slots/mj-chat-message-extra-default.component.d.ts +9 -0
- package/dist/lib/components/slots/mj-chat-message-extra-default.component.d.ts.map +1 -0
- package/dist/lib/components/slots/mj-chat-message-extra-default.component.js +34 -0
- package/dist/lib/components/slots/mj-chat-message-extra-default.component.js.map +1 -0
- package/dist/lib/components/slots/slot-interfaces.d.ts +95 -0
- package/dist/lib/components/slots/slot-interfaces.d.ts.map +1 -0
- package/dist/lib/components/slots/slot-interfaces.js +18 -0
- package/dist/lib/components/slots/slot-interfaces.js.map +1 -0
- package/dist/lib/components/workspace/conversation-workspace.component.d.ts +11 -0
- package/dist/lib/components/workspace/conversation-workspace.component.d.ts.map +1 -1
- package/dist/lib/components/workspace/conversation-workspace.component.js +28 -4
- package/dist/lib/components/workspace/conversation-workspace.component.js.map +1 -1
- package/dist/lib/conversations.module.d.ts +12 -1
- package/dist/lib/conversations.module.d.ts.map +1 -1
- package/dist/lib/conversations.module.js +93 -5
- package/dist/lib/conversations.module.js.map +1 -1
- package/dist/lib/directives/chat-slot.directive.d.ts +44 -0
- package/dist/lib/directives/chat-slot.directive.d.ts.map +1 -0
- package/dist/lib/directives/chat-slot.directive.js +54 -0
- package/dist/lib/directives/chat-slot.directive.js.map +1 -0
- package/dist/lib/events/chat-events.d.ts +137 -0
- package/dist/lib/events/chat-events.d.ts.map +1 -0
- package/dist/lib/events/chat-events.js +189 -0
- package/dist/lib/events/chat-events.js.map +1 -0
- package/dist/lib/models/conversation-state.model.d.ts +2 -1
- package/dist/lib/models/conversation-state.model.d.ts.map +1 -1
- package/dist/lib/models/conversation-state.model.js.map +1 -1
- package/dist/lib/services/artifact-state.service.d.ts.map +1 -1
- package/dist/lib/services/artifact-state.service.js +23 -6
- package/dist/lib/services/artifact-state.service.js.map +1 -1
- package/dist/lib/services/conversation-agent.service.d.ts +60 -74
- package/dist/lib/services/conversation-agent.service.d.ts.map +1 -1
- package/dist/lib/services/conversation-agent.service.js +100 -313
- package/dist/lib/services/conversation-agent.service.js.map +1 -1
- package/dist/lib/services/conversation-bridge.service.d.ts +11 -70
- package/dist/lib/services/conversation-bridge.service.d.ts.map +1 -1
- package/dist/lib/services/conversation-bridge.service.js +51 -85
- package/dist/lib/services/conversation-bridge.service.js.map +1 -1
- package/dist/lib/services/conversation-naming.d.ts +63 -0
- package/dist/lib/services/conversation-naming.d.ts.map +1 -0
- package/dist/lib/services/conversation-naming.js +58 -0
- package/dist/lib/services/conversation-naming.js.map +1 -0
- package/dist/lib/services/conversation-streaming.service.d.ts +24 -154
- package/dist/lib/services/conversation-streaming.service.d.ts.map +1 -1
- package/dist/lib/services/conversation-streaming.service.js +39 -361
- package/dist/lib/services/conversation-streaming.service.js.map +1 -1
- package/dist/lib/services/conversations-runtime-bootstrap.service.d.ts +10 -0
- package/dist/lib/services/conversations-runtime-bootstrap.service.d.ts.map +1 -0
- package/dist/lib/services/conversations-runtime-bootstrap.service.js +104 -0
- package/dist/lib/services/conversations-runtime-bootstrap.service.js.map +1 -0
- package/dist/lib/services/delegation-result-parser.d.ts +45 -0
- package/dist/lib/services/delegation-result-parser.d.ts.map +1 -0
- package/dist/lib/services/delegation-result-parser.js +48 -0
- package/dist/lib/services/delegation-result-parser.js.map +1 -0
- package/dist/lib/services/mention-autocomplete.service.d.ts +19 -4
- package/dist/lib/services/mention-autocomplete.service.d.ts.map +1 -1
- package/dist/lib/services/mention-autocomplete.service.js +65 -4
- package/dist/lib/services/mention-autocomplete.service.js.map +1 -1
- package/dist/lib/services/mention-parser.service.d.ts +8 -53
- package/dist/lib/services/mention-parser.service.d.ts.map +1 -1
- package/dist/lib/services/mention-parser.service.js +32 -243
- package/dist/lib/services/mention-parser.service.js.map +1 -1
- package/dist/lib/services/narration-template.d.ts +42 -0
- package/dist/lib/services/narration-template.d.ts.map +1 -0
- package/dist/lib/services/narration-template.js +73 -0
- package/dist/lib/services/narration-template.js.map +1 -0
- package/dist/lib/services/realtime-pairing.d.ts +120 -0
- package/dist/lib/services/realtime-pairing.d.ts.map +1 -0
- package/dist/lib/services/realtime-pairing.js +150 -0
- package/dist/lib/services/realtime-pairing.js.map +1 -0
- package/dist/lib/services/realtime-session-review.service.d.ts +233 -0
- package/dist/lib/services/realtime-session-review.service.d.ts.map +1 -0
- package/dist/lib/services/realtime-session-review.service.js +417 -0
- package/dist/lib/services/realtime-session-review.service.js.map +1 -0
- package/dist/lib/services/realtime-session.service.d.ts +739 -0
- package/dist/lib/services/realtime-session.service.d.ts.map +1 -0
- package/dist/lib/services/realtime-session.service.js +1647 -0
- package/dist/lib/services/realtime-session.service.js.map +1 -0
- package/dist/lib/services/realtime-sessions-adapter.d.ts +54 -0
- package/dist/lib/services/realtime-sessions-adapter.d.ts.map +1 -0
- package/dist/lib/services/realtime-sessions-adapter.js +154 -0
- package/dist/lib/services/realtime-sessions-adapter.js.map +1 -0
- package/dist/lib/services/user-authorization.d.ts +67 -0
- package/dist/lib/services/user-authorization.d.ts.map +1 -0
- package/dist/lib/services/user-authorization.js +66 -0
- package/dist/lib/services/user-authorization.js.map +1 -0
- package/dist/lib/utils/realtime-session-timeline.d.ts +84 -0
- package/dist/lib/utils/realtime-session-timeline.d.ts.map +1 -0
- package/dist/lib/utils/realtime-session-timeline.js +94 -0
- package/dist/lib/utils/realtime-session-timeline.js.map +1 -0
- package/dist/public-api.d.ts +41 -0
- package/dist/public-api.d.ts.map +1 -1
- package/dist/public-api.js +50 -0
- package/dist/public-api.js.map +1 -1
- package/package.json +27 -24
- package/dist/__tests__/conversation-bridge.service.test.d.ts +0 -2
- package/dist/__tests__/conversation-bridge.service.test.d.ts.map +0 -1
- package/dist/__tests__/conversation-bridge.service.test.js +0 -98
- package/dist/__tests__/conversation-bridge.service.test.js.map +0 -1
- package/dist/__tests__/mention-parser.test.d.ts +0 -2
- package/dist/__tests__/mention-parser.test.d.ts.map +0 -1
- package/dist/__tests__/mention-parser.test.js +0 -154
- package/dist/__tests__/mention-parser.test.js.map +0 -1
|
@@ -0,0 +1,324 @@
|
|
|
1
|
+
import { Component, EventEmitter, Input, Output } from '@angular/core';
|
|
2
|
+
import { CommonModule } from '@angular/common';
|
|
3
|
+
import { FriendlyStepLabel } 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 RealtimeDelegationCardComponent_Conditional_0_Conditional_9_Template(rf, ctx) { if (rf & 1) {
|
|
8
|
+
const _r2 = i0.ɵɵgetCurrentView();
|
|
9
|
+
i0.ɵɵelementStart(0, "button", 15);
|
|
10
|
+
i0.ɵɵlistener("click", function RealtimeDelegationCardComponent_Conditional_0_Conditional_9_Template_button_click_0_listener($event) { i0.ɵɵrestoreView(_r2); const ctx_r2 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r2.OpenRun($event)); });
|
|
11
|
+
i0.ɵɵelement(1, "i", 16);
|
|
12
|
+
i0.ɵɵelementStart(2, "span");
|
|
13
|
+
i0.ɵɵtext(3, "Open run");
|
|
14
|
+
i0.ɵɵelementEnd()();
|
|
15
|
+
} }
|
|
16
|
+
function RealtimeDelegationCardComponent_Conditional_0_Conditional_14_Template(rf, ctx) { if (rf & 1) {
|
|
17
|
+
i0.ɵɵelementStart(0, "div", 11);
|
|
18
|
+
i0.ɵɵtext(1);
|
|
19
|
+
i0.ɵɵelementEnd();
|
|
20
|
+
} if (rf & 2) {
|
|
21
|
+
const ctx_r2 = i0.ɵɵnextContext(2);
|
|
22
|
+
i0.ɵɵadvance();
|
|
23
|
+
i0.ɵɵtextInterpolate(ctx_r2.Card.LatestMessage);
|
|
24
|
+
} }
|
|
25
|
+
function RealtimeDelegationCardComponent_Conditional_0_Conditional_16_Template(rf, ctx) { if (rf & 1) {
|
|
26
|
+
i0.ɵɵelement(0, "div", 17);
|
|
27
|
+
} if (rf & 2) {
|
|
28
|
+
const ctx_r2 = i0.ɵɵnextContext(2);
|
|
29
|
+
i0.ɵɵstyleProp("width", ctx_r2.Card.Percentage, "%");
|
|
30
|
+
} }
|
|
31
|
+
function RealtimeDelegationCardComponent_Conditional_0_Conditional_17_Template(rf, ctx) { if (rf & 1) {
|
|
32
|
+
i0.ɵɵelement(0, "div", 14);
|
|
33
|
+
} }
|
|
34
|
+
function RealtimeDelegationCardComponent_Conditional_0_Template(rf, ctx) { if (rf & 1) {
|
|
35
|
+
const _r1 = i0.ɵɵgetCurrentView();
|
|
36
|
+
i0.ɵɵelementStart(0, "div", 0)(1, "div", 2)(2, "div", 3);
|
|
37
|
+
i0.ɵɵtext(3);
|
|
38
|
+
i0.ɵɵelementEnd();
|
|
39
|
+
i0.ɵɵelementStart(4, "div", 4);
|
|
40
|
+
i0.ɵɵtext(5);
|
|
41
|
+
i0.ɵɵelementEnd();
|
|
42
|
+
i0.ɵɵelementStart(6, "span", 5);
|
|
43
|
+
i0.ɵɵelement(7, "i", 6);
|
|
44
|
+
i0.ɵɵtext(8, " Running ");
|
|
45
|
+
i0.ɵɵelementEnd();
|
|
46
|
+
i0.ɵɵconditionalCreate(9, RealtimeDelegationCardComponent_Conditional_0_Conditional_9_Template, 4, 0, "button", 7);
|
|
47
|
+
i0.ɵɵelementStart(10, "button", 8);
|
|
48
|
+
i0.ɵɵlistener("click", function RealtimeDelegationCardComponent_Conditional_0_Template_button_click_10_listener($event) { i0.ɵɵrestoreView(_r1); const ctx_r2 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r2.CancelWork($event)); });
|
|
49
|
+
i0.ɵɵelement(11, "i", 9);
|
|
50
|
+
i0.ɵɵelementEnd()();
|
|
51
|
+
i0.ɵɵelementStart(12, "div", 10);
|
|
52
|
+
i0.ɵɵtext(13);
|
|
53
|
+
i0.ɵɵelementEnd();
|
|
54
|
+
i0.ɵɵconditionalCreate(14, RealtimeDelegationCardComponent_Conditional_0_Conditional_14_Template, 2, 1, "div", 11);
|
|
55
|
+
i0.ɵɵelementStart(15, "div", 12);
|
|
56
|
+
i0.ɵɵconditionalCreate(16, RealtimeDelegationCardComponent_Conditional_0_Conditional_16_Template, 1, 2, "div", 13)(17, RealtimeDelegationCardComponent_Conditional_0_Conditional_17_Template, 1, 0, "div", 14);
|
|
57
|
+
i0.ɵɵelementEnd()();
|
|
58
|
+
} if (rf & 2) {
|
|
59
|
+
const ctx_r2 = i0.ɵɵnextContext();
|
|
60
|
+
i0.ɵɵadvance(3);
|
|
61
|
+
i0.ɵɵtextInterpolate(ctx_r2.Card.AgentName.charAt(0));
|
|
62
|
+
i0.ɵɵadvance(2);
|
|
63
|
+
i0.ɵɵtextInterpolate1("", ctx_r2.Card.AgentName, " is working\u2026");
|
|
64
|
+
i0.ɵɵadvance(4);
|
|
65
|
+
i0.ɵɵconditional(ctx_r2.ShowOpenRun ? 9 : -1);
|
|
66
|
+
i0.ɵɵadvance(4);
|
|
67
|
+
i0.ɵɵtextInterpolate(ctx_r2.StepLabel);
|
|
68
|
+
i0.ɵɵadvance();
|
|
69
|
+
i0.ɵɵconditional(ctx_r2.ShowDetailLine ? 14 : -1);
|
|
70
|
+
i0.ɵɵadvance();
|
|
71
|
+
i0.ɵɵclassProp("work-progress--indeterminate", ctx_r2.Card.Percentage == null);
|
|
72
|
+
i0.ɵɵadvance();
|
|
73
|
+
i0.ɵɵconditional(ctx_r2.Card.Percentage != null ? 16 : 17);
|
|
74
|
+
} }
|
|
75
|
+
function RealtimeDelegationCardComponent_Conditional_1_For_15_Template(rf, ctx) { if (rf & 1) {
|
|
76
|
+
const _r5 = i0.ɵɵgetCurrentView();
|
|
77
|
+
i0.ɵɵelementStart(0, "button", 29);
|
|
78
|
+
i0.ɵɵlistener("click", function RealtimeDelegationCardComponent_Conditional_1_For_15_Template_button_click_0_listener($event) { const artifact_r6 = i0.ɵɵrestoreView(_r5).$implicit; const ctx_r2 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r2.OpenArtifact($event, artifact_r6)); });
|
|
79
|
+
i0.ɵɵelement(1, "i", 30);
|
|
80
|
+
i0.ɵɵelementStart(2, "span");
|
|
81
|
+
i0.ɵɵtext(3, "View");
|
|
82
|
+
i0.ɵɵelementEnd();
|
|
83
|
+
i0.ɵɵelement(4, "i", 31);
|
|
84
|
+
i0.ɵɵelementEnd();
|
|
85
|
+
} if (rf & 2) {
|
|
86
|
+
const artifact_r6 = ctx.$implicit;
|
|
87
|
+
i0.ɵɵproperty("title", "View " + artifact_r6.Name);
|
|
88
|
+
} }
|
|
89
|
+
function RealtimeDelegationCardComponent_Conditional_1_Conditional_16_Template(rf, ctx) { if (rf & 1) {
|
|
90
|
+
const _r7 = i0.ɵɵgetCurrentView();
|
|
91
|
+
i0.ɵɵelementStart(0, "button", 15);
|
|
92
|
+
i0.ɵɵlistener("click", function RealtimeDelegationCardComponent_Conditional_1_Conditional_16_Template_button_click_0_listener($event) { i0.ɵɵrestoreView(_r7); const ctx_r2 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r2.OpenRun($event)); });
|
|
93
|
+
i0.ɵɵelement(1, "i", 16);
|
|
94
|
+
i0.ɵɵelementStart(2, "span");
|
|
95
|
+
i0.ɵɵtext(3, "Open run");
|
|
96
|
+
i0.ɵɵelementEnd()();
|
|
97
|
+
} }
|
|
98
|
+
function RealtimeDelegationCardComponent_Conditional_1_Conditional_17_For_4_Template(rf, ctx) { if (rf & 1) {
|
|
99
|
+
const _r8 = i0.ɵɵgetCurrentView();
|
|
100
|
+
i0.ɵɵelementStart(0, "button", 35);
|
|
101
|
+
i0.ɵɵlistener("click", function RealtimeDelegationCardComponent_Conditional_1_Conditional_17_For_4_Template_button_click_0_listener($event) { const artifact_r9 = i0.ɵɵrestoreView(_r8).$implicit; const ctx_r2 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r2.OpenArtifact($event, artifact_r9)); });
|
|
102
|
+
i0.ɵɵelement(1, "i", 30);
|
|
103
|
+
i0.ɵɵelementStart(2, "span");
|
|
104
|
+
i0.ɵɵtext(3);
|
|
105
|
+
i0.ɵɵelementEnd();
|
|
106
|
+
i0.ɵɵelement(4, "i", 31);
|
|
107
|
+
i0.ɵɵelementEnd();
|
|
108
|
+
} if (rf & 2) {
|
|
109
|
+
const artifact_r9 = ctx.$implicit;
|
|
110
|
+
i0.ɵɵproperty("title", "View " + artifact_r9.Name);
|
|
111
|
+
i0.ɵɵadvance(3);
|
|
112
|
+
i0.ɵɵtextInterpolate(artifact_r9.Name);
|
|
113
|
+
} }
|
|
114
|
+
function RealtimeDelegationCardComponent_Conditional_1_Conditional_17_Conditional_5_Conditional_3_Template(rf, ctx) { if (rf & 1) {
|
|
115
|
+
const _r10 = i0.ɵɵgetCurrentView();
|
|
116
|
+
i0.ɵɵelementStart(0, "button", 37);
|
|
117
|
+
i0.ɵɵlistener("click", function RealtimeDelegationCardComponent_Conditional_1_Conditional_17_Conditional_5_Conditional_3_Template_button_click_0_listener($event) { i0.ɵɵrestoreView(_r10); const ctx_r2 = i0.ɵɵnextContext(4); return i0.ɵɵresetView(ctx_r2.OpenRun($event)); });
|
|
118
|
+
i0.ɵɵelement(1, "i", 16);
|
|
119
|
+
i0.ɵɵelementStart(2, "span");
|
|
120
|
+
i0.ɵɵtext(3, "Open run");
|
|
121
|
+
i0.ɵɵelementEnd()();
|
|
122
|
+
} }
|
|
123
|
+
function RealtimeDelegationCardComponent_Conditional_1_Conditional_17_Conditional_5_Template(rf, ctx) { if (rf & 1) {
|
|
124
|
+
i0.ɵɵelementStart(0, "div", 34);
|
|
125
|
+
i0.ɵɵelement(1, "i", 25);
|
|
126
|
+
i0.ɵɵtext(2);
|
|
127
|
+
i0.ɵɵconditionalCreate(3, RealtimeDelegationCardComponent_Conditional_1_Conditional_17_Conditional_5_Conditional_3_Template, 4, 0, "button", 36);
|
|
128
|
+
i0.ɵɵelementEnd();
|
|
129
|
+
} if (rf & 2) {
|
|
130
|
+
const ctx_r2 = i0.ɵɵnextContext(3);
|
|
131
|
+
i0.ɵɵadvance();
|
|
132
|
+
i0.ɵɵproperty("title", ctx_r2.ProvenanceTitle);
|
|
133
|
+
i0.ɵɵadvance();
|
|
134
|
+
i0.ɵɵtextInterpolate2(" via ", ctx_r2.Card.AgentName, " \u00B7 run ", ctx_r2.Card.RunRef, " ");
|
|
135
|
+
i0.ɵɵadvance();
|
|
136
|
+
i0.ɵɵconditional(ctx_r2.ShowOpenRun ? 3 : -1);
|
|
137
|
+
} }
|
|
138
|
+
function RealtimeDelegationCardComponent_Conditional_1_Conditional_17_Template(rf, ctx) { if (rf & 1) {
|
|
139
|
+
i0.ɵɵelementStart(0, "div", 28)(1, "div", 32);
|
|
140
|
+
i0.ɵɵtext(2);
|
|
141
|
+
i0.ɵɵelementEnd();
|
|
142
|
+
i0.ɵɵrepeaterCreate(3, RealtimeDelegationCardComponent_Conditional_1_Conditional_17_For_4_Template, 5, 2, "button", 33, _forTrack0);
|
|
143
|
+
i0.ɵɵconditionalCreate(5, RealtimeDelegationCardComponent_Conditional_1_Conditional_17_Conditional_5_Template, 4, 4, "div", 34);
|
|
144
|
+
i0.ɵɵelementEnd();
|
|
145
|
+
} if (rf & 2) {
|
|
146
|
+
const ctx_r2 = i0.ɵɵnextContext(2);
|
|
147
|
+
i0.ɵɵadvance(2);
|
|
148
|
+
i0.ɵɵtextInterpolate(ctx_r2.ResultText);
|
|
149
|
+
i0.ɵɵadvance();
|
|
150
|
+
i0.ɵɵrepeater(ctx_r2.Artifacts);
|
|
151
|
+
i0.ɵɵadvance(2);
|
|
152
|
+
i0.ɵɵconditional(ctx_r2.Card.RunRef ? 5 : -1);
|
|
153
|
+
} }
|
|
154
|
+
function RealtimeDelegationCardComponent_Conditional_1_Template(rf, ctx) { if (rf & 1) {
|
|
155
|
+
const _r4 = i0.ɵɵgetCurrentView();
|
|
156
|
+
i0.ɵɵelementStart(0, "div", 1)(1, "div", 18)(2, "button", 19);
|
|
157
|
+
i0.ɵɵlistener("click", function RealtimeDelegationCardComponent_Conditional_1_Template_button_click_2_listener() { i0.ɵɵrestoreView(_r4); const ctx_r2 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r2.ToggleExpanded()); });
|
|
158
|
+
i0.ɵɵelement(3, "i", 20);
|
|
159
|
+
i0.ɵɵelementStart(4, "span", 21);
|
|
160
|
+
i0.ɵɵtext(5);
|
|
161
|
+
i0.ɵɵelementEnd();
|
|
162
|
+
i0.ɵɵelementStart(6, "span", 22);
|
|
163
|
+
i0.ɵɵtext(7, "\u00B7");
|
|
164
|
+
i0.ɵɵelementEnd();
|
|
165
|
+
i0.ɵɵelementStart(8, "span", 23);
|
|
166
|
+
i0.ɵɵtext(9);
|
|
167
|
+
i0.ɵɵelementEnd();
|
|
168
|
+
i0.ɵɵelementStart(10, "span", 24);
|
|
169
|
+
i0.ɵɵelement(11, "i", 25);
|
|
170
|
+
i0.ɵɵtext(12);
|
|
171
|
+
i0.ɵɵelementEnd();
|
|
172
|
+
i0.ɵɵelement(13, "i", 26);
|
|
173
|
+
i0.ɵɵelementEnd();
|
|
174
|
+
i0.ɵɵrepeaterCreate(14, RealtimeDelegationCardComponent_Conditional_1_For_15_Template, 5, 1, "button", 27, _forTrack0);
|
|
175
|
+
i0.ɵɵconditionalCreate(16, RealtimeDelegationCardComponent_Conditional_1_Conditional_16_Template, 4, 0, "button", 7);
|
|
176
|
+
i0.ɵɵelementEnd();
|
|
177
|
+
i0.ɵɵconditionalCreate(17, RealtimeDelegationCardComponent_Conditional_1_Conditional_17_Template, 6, 2, "div", 28);
|
|
178
|
+
i0.ɵɵelementEnd();
|
|
179
|
+
} if (rf & 2) {
|
|
180
|
+
const ctx_r2 = i0.ɵɵnextContext();
|
|
181
|
+
i0.ɵɵadvance(2);
|
|
182
|
+
i0.ɵɵclassProp("done-chip--failed", !ctx_r2.Card.Success);
|
|
183
|
+
i0.ɵɵproperty("title", ctx_r2.Expanded ? "Collapse result" : "Expand result");
|
|
184
|
+
i0.ɵɵattribute("aria-expanded", ctx_r2.Expanded);
|
|
185
|
+
i0.ɵɵadvance();
|
|
186
|
+
i0.ɵɵproperty("ngClass", ctx_r2.Card.Success ? "fa-check" : "fa-xmark");
|
|
187
|
+
i0.ɵɵadvance(2);
|
|
188
|
+
i0.ɵɵtextInterpolate(ctx_r2.Card.AgentName);
|
|
189
|
+
i0.ɵɵadvance(4);
|
|
190
|
+
i0.ɵɵtextInterpolate(ctx_r2.ResultPreview);
|
|
191
|
+
i0.ɵɵadvance(2);
|
|
192
|
+
i0.ɵɵproperty("title", ctx_r2.ProvenanceTitle);
|
|
193
|
+
i0.ɵɵadvance();
|
|
194
|
+
i0.ɵɵtextInterpolate1(" via ", ctx_r2.Card.AgentName, " ");
|
|
195
|
+
i0.ɵɵadvance();
|
|
196
|
+
i0.ɵɵproperty("ngClass", ctx_r2.Expanded ? "fa-chevron-up" : "fa-chevron-down");
|
|
197
|
+
i0.ɵɵadvance();
|
|
198
|
+
i0.ɵɵrepeater(ctx_r2.Artifacts);
|
|
199
|
+
i0.ɵɵadvance(2);
|
|
200
|
+
i0.ɵɵconditional(ctx_r2.ShowOpenRun ? 16 : -1);
|
|
201
|
+
i0.ɵɵadvance();
|
|
202
|
+
i0.ɵɵconditional(ctx_r2.Expanded ? 17 : -1);
|
|
203
|
+
} }
|
|
204
|
+
/**
|
|
205
|
+
* Renders a single delegation in the live session thread:
|
|
206
|
+
* - **Working**: a compact card — agent avatar, "<agent> is working…", the CURRENT
|
|
207
|
+
* friendly step label, the latest raw message indented + muted beneath it, and a
|
|
208
|
+
* thin progress bar (determinate when the server supplies a percentage,
|
|
209
|
+
* indeterminate shimmer otherwise).
|
|
210
|
+
* - **Done**: COLLAPSED to a single-line chip — `✓ <agent> · <one-line result preview>
|
|
211
|
+
* · via <agent>` — expandable inline (click / chevron) to the full result text.
|
|
212
|
+
* Failures render the `✗` variant.
|
|
213
|
+
*
|
|
214
|
+
* Provenance is a small `via <agent>` badge + a shield icon whose `title` tooltip
|
|
215
|
+
* carries the full provenance sentence (no repeated sentence under every card).
|
|
216
|
+
*
|
|
217
|
+
* DEVELOPER MODE (gear-gated by the overlay shell): when {@link DevMode} is on and the
|
|
218
|
+
* card knows its delegated run id, an "Open run" link is revealed that emits
|
|
219
|
+
* {@link OpenRunRequested} so the shell can navigate to the `MJ: AI Agent Runs` record.
|
|
220
|
+
*/
|
|
221
|
+
export class RealtimeDelegationCardComponent {
|
|
222
|
+
/** Maximum characters of the result shown in the collapsed done chip. */
|
|
223
|
+
static PreviewMaxChars = 120;
|
|
224
|
+
/** The delegation card view-model to render (immutable — replaced on every update). */
|
|
225
|
+
Card;
|
|
226
|
+
/** Whether developer affordances (the "Open run" link) are revealed. */
|
|
227
|
+
DevMode = false;
|
|
228
|
+
/** Emitted with the delegated run's ID when the dev "Open run" link is clicked. */
|
|
229
|
+
OpenRunRequested = new EventEmitter();
|
|
230
|
+
/** Emitted when a "View" artifact chip is clicked (the overlay focuses the artifact's tab). */
|
|
231
|
+
OpenArtifactRequested = new EventEmitter();
|
|
232
|
+
/**
|
|
233
|
+
* Emitted with the call's ID when the WORKING card's ✕ cancel affordance is clicked —
|
|
234
|
+
* EXPLICIT user intent to kill the in-flight delegated run (by deliberate host policy,
|
|
235
|
+
* barge-in alone never cancels delegations; only this button does). The overlay routes
|
|
236
|
+
* it to `RealtimeSessionService.CancelDelegation`, which flips this card to a failed
|
|
237
|
+
* "Cancelled by user" result.
|
|
238
|
+
*/
|
|
239
|
+
CancelRequested = new EventEmitter();
|
|
240
|
+
/** Whether the done chip is expanded inline to show the full result text. */
|
|
241
|
+
Expanded = false;
|
|
242
|
+
/** The artifacts this (done) delegation produced (empty array while running / when none). */
|
|
243
|
+
get Artifacts() {
|
|
244
|
+
return this.Card.Done && this.Card.Artifacts ? this.Card.Artifacts : [];
|
|
245
|
+
}
|
|
246
|
+
/** Emits the open-artifact request for one of this card's produced artifacts. */
|
|
247
|
+
OpenArtifact(event, artifact) {
|
|
248
|
+
event.stopPropagation();
|
|
249
|
+
this.OpenArtifactRequested.emit(artifact);
|
|
250
|
+
}
|
|
251
|
+
/** True when the dev "Open run" link should render (gear on + run id known). */
|
|
252
|
+
get ShowOpenRun() {
|
|
253
|
+
return this.DevMode && !!this.Card.RunID;
|
|
254
|
+
}
|
|
255
|
+
/** Emits the open-run request for this card's delegated run. */
|
|
256
|
+
OpenRun(event) {
|
|
257
|
+
event.stopPropagation();
|
|
258
|
+
if (this.Card.RunID) {
|
|
259
|
+
this.OpenRunRequested.emit(this.Card.RunID);
|
|
260
|
+
}
|
|
261
|
+
}
|
|
262
|
+
/** Emits the cancel request for this (still-working) delegation. */
|
|
263
|
+
CancelWork(event) {
|
|
264
|
+
event.stopPropagation();
|
|
265
|
+
if (!this.Card.Done) {
|
|
266
|
+
this.CancelRequested.emit(this.Card.CallID);
|
|
267
|
+
}
|
|
268
|
+
}
|
|
269
|
+
/** Friendly label for the current delegation step (raw message as fallback). */
|
|
270
|
+
get StepLabel() {
|
|
271
|
+
return FriendlyStepLabel(this.Card.LatestStep, this.Card.LatestMessage);
|
|
272
|
+
}
|
|
273
|
+
/**
|
|
274
|
+
* Whether to render the latest raw message as the indented detail line. Hidden when
|
|
275
|
+
* it would just repeat the step label (the unknown-step fallback maps label = message).
|
|
276
|
+
*/
|
|
277
|
+
get ShowDetailLine() {
|
|
278
|
+
return !!this.Card.LatestMessage && this.Card.LatestMessage !== this.StepLabel;
|
|
279
|
+
}
|
|
280
|
+
/** Full result text (falls back to the last progress message / a generic line). */
|
|
281
|
+
get ResultText() {
|
|
282
|
+
return this.Card.Result
|
|
283
|
+
|| this.Card.LatestMessage
|
|
284
|
+
|| `${this.Card.AgentName} completed the delegated work.`;
|
|
285
|
+
}
|
|
286
|
+
/** One-line, ~120-char preview of the result for the collapsed chip. */
|
|
287
|
+
get ResultPreview() {
|
|
288
|
+
const oneLine = this.ResultText.replace(/\s+/g, ' ').trim();
|
|
289
|
+
const max = RealtimeDelegationCardComponent.PreviewMaxChars;
|
|
290
|
+
return oneLine.length > max ? `${oneLine.slice(0, max).trimEnd()}…` : oneLine;
|
|
291
|
+
}
|
|
292
|
+
/** Tooltip text for the provenance shield icon. */
|
|
293
|
+
get ProvenanceTitle() {
|
|
294
|
+
const run = this.Card.RunRef ? ` (run ${this.Card.RunRef})` : '';
|
|
295
|
+
return `Result produced by ${this.Card.AgentName}'s own agent run${run} — not invented by the voice co-agent.`;
|
|
296
|
+
}
|
|
297
|
+
/** Toggles the done chip's inline expansion. */
|
|
298
|
+
ToggleExpanded() {
|
|
299
|
+
this.Expanded = !this.Expanded;
|
|
300
|
+
}
|
|
301
|
+
static ɵfac = function RealtimeDelegationCardComponent_Factory(__ngFactoryType__) { return new (__ngFactoryType__ || RealtimeDelegationCardComponent)(); };
|
|
302
|
+
static ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: RealtimeDelegationCardComponent, selectors: [["mj-realtime-delegation-card"]], inputs: { Card: "Card", DevMode: "DevMode" }, outputs: { OpenRunRequested: "OpenRunRequested", OpenArtifactRequested: "OpenArtifactRequested", CancelRequested: "CancelRequested" }, decls: 2, vars: 1, consts: [["role", "status", "aria-live", "polite", 1, "work-card"], [1, "done"], [1, "work-card__head"], ["aria-hidden", "true", 1, "avatar"], [1, "work-card__title"], [1, "pill", "pill--running"], ["aria-hidden", "true", 1, "fa-solid", "fa-spinner", "spin"], ["type", "button", "title", "Open the delegated agent run record", 1, "dev-link"], ["type", "button", "title", "Cancel this work", "aria-label", "Cancel this work", 1, "cancel-work", 3, "click"], ["aria-hidden", "true", 1, "fa-solid", "fa-xmark"], [1, "work-card__step"], [1, "work-card__detail"], [1, "work-progress"], [1, "work-progress__fill", 3, "width"], [1, "work-progress__fill", "work-progress__fill--slide"], ["type", "button", "title", "Open the delegated agent run record", 1, "dev-link", 3, "click"], ["aria-hidden", "true", 1, "fa-solid", "fa-arrow-up-right-from-square"], [1, "work-progress__fill"], [1, "done-row"], ["type", "button", 1, "done-chip", 3, "click", "title"], ["aria-hidden", "true", 1, "fa-solid", "done-chip__mark", 3, "ngClass"], [1, "done-chip__agent"], ["aria-hidden", "true", 1, "done-chip__sep"], [1, "done-chip__preview"], [1, "via-badge"], ["aria-hidden", "true", 1, "fa-solid", "fa-shield-halved", 3, "title"], ["aria-hidden", "true", 1, "fa-solid", "done-chip__chev", 3, "ngClass"], ["type", "button", 1, "artifact-link", 3, "title"], [1, "done-detail"], ["type", "button", 1, "artifact-link", 3, "click", "title"], ["aria-hidden", "true", 1, "fa-solid", "fa-file-lines"], ["aria-hidden", "true", 1, "fa-solid", "fa-arrow-right"], [1, "done-detail__body"], ["type", "button", 1, "artifact-link", "artifact-link--detail", 3, "title"], [1, "done-detail__meta"], ["type", "button", 1, "artifact-link", "artifact-link--detail", 3, "click", "title"], ["type", "button", "title", "Open the delegated agent run record", 1, "dev-link", "dev-link--inline"], ["type", "button", "title", "Open the delegated agent run record", 1, "dev-link", "dev-link--inline", 3, "click"]], template: function RealtimeDelegationCardComponent_Template(rf, ctx) { if (rf & 1) {
|
|
303
|
+
i0.ɵɵconditionalCreate(0, RealtimeDelegationCardComponent_Conditional_0_Template, 18, 8, "div", 0)(1, RealtimeDelegationCardComponent_Conditional_1_Template, 18, 12, "div", 1);
|
|
304
|
+
} if (rf & 2) {
|
|
305
|
+
i0.ɵɵconditional(!ctx.Card.Done ? 0 : 1);
|
|
306
|
+
} }, dependencies: [CommonModule, i1.NgClass], styles: ["[_nghost-%COMP%] {\n display: block;\n \n\n --sage: var(--mj-color-violet-400, #a78bfa);\n --sage-bg: color-mix(in srgb, var(--mj-color-violet-400, #a78bfa) 12%, transparent);\n --sage-border: color-mix(in srgb, var(--mj-color-violet-400, #a78bfa) 40%, transparent);\n}\n\n.avatar[_ngcontent-%COMP%] {\n width: 24px;\n height: 24px;\n border-radius: 50%;\n display: grid;\n place-items: center;\n font-weight: 600;\n font-size: 11px;\n flex-shrink: 0;\n background: var(--sage-bg);\n color: var(--mj-color-violet-300, var(--mj-text-primary));\n border: 1px solid var(--sage-border);\n}\n\n\n\n.work-card[_ngcontent-%COMP%] {\n border: 1px solid var(--sage-border);\n background: var(--sage-bg);\n border-radius: var(--mj-radius-lg, 12px);\n padding: 10px 14px;\n max-width: 560px;\n}\n.work-card__head[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 8px;\n margin-bottom: 8px;\n}\n.work-card__title[_ngcontent-%COMP%] {\n font-weight: 700;\n font-size: 13px;\n color: var(--mj-text-primary);\n flex: 1;\n min-width: 0;\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n}\n.work-card__step[_ngcontent-%COMP%] {\n font-size: 12.5px;\n font-weight: 600;\n color: var(--mj-text-primary);\n}\n.work-card__detail[_ngcontent-%COMP%] {\n font-size: 12px;\n color: var(--mj-text-muted);\n padding-left: 14px;\n margin-top: 3px;\n border-left: 2px solid var(--sage-border);\n}\n\n.pill[_ngcontent-%COMP%] {\n display: inline-flex;\n align-items: center;\n gap: 5px;\n padding: 2px 8px;\n border-radius: var(--mj-radius-full, 9999px);\n font-size: 10.5px;\n font-weight: 700;\n flex-shrink: 0;\n line-height: 1.5;\n}\n.pill--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.pill[_ngcontent-%COMP%] i[_ngcontent-%COMP%] { font-size: 9px; }\n.spin[_ngcontent-%COMP%] { animation: _ngcontent-%COMP%_rt-spin 1.1s linear infinite; }\n\n\n\n.work-progress[_ngcontent-%COMP%] {\n height: 3px;\n border-radius: var(--mj-radius-full, 9999px);\n background: color-mix(in srgb, var(--sage) 18%, transparent);\n overflow: hidden;\n margin-top: 9px;\n position: relative;\n}\n.work-progress__fill[_ngcontent-%COMP%] {\n height: 100%;\n border-radius: var(--mj-radius-full, 9999px);\n background: var(--sage);\n transition: width 240ms ease;\n}\n.work-progress__fill--slide[_ngcontent-%COMP%] {\n position: absolute;\n width: 35%;\n animation: _ngcontent-%COMP%_rt-slide 1.6s ease-in-out infinite;\n}\n\n\n\n.done[_ngcontent-%COMP%] {\n max-width: 560px;\n}\n.done-row[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 8px;\n}\n.done-row[_ngcontent-%COMP%] .done-chip[_ngcontent-%COMP%] {\n flex: 1;\n min-width: 0;\n}\n\n\n\n.dev-link[_ngcontent-%COMP%] {\n display: inline-flex;\n align-items: center;\n gap: 5px;\n padding: 3px 9px;\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: 10.5px;\n font-weight: 700;\n white-space: nowrap;\n flex-shrink: 0;\n cursor: pointer;\n transition: color 140ms ease, border-color 140ms ease, background 140ms ease;\n}\n.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.dev-link[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n font-size: 9px;\n}\n.dev-link--inline[_ngcontent-%COMP%] {\n margin-left: 8px;\n}\n\n\n\n.artifact-link[_ngcontent-%COMP%] {\n display: inline-flex;\n align-items: center;\n gap: 5px;\n padding: 3px 10px;\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: 10.5px;\n font-weight: 700;\n white-space: nowrap;\n flex-shrink: 0;\n cursor: pointer;\n transition: color 140ms ease, border-color 140ms ease, background 140ms ease;\n}\n.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.artifact-link[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n font-size: 9px;\n}\n.artifact-link--detail[_ngcontent-%COMP%] {\n margin-top: 8px;\n max-width: 100%;\n}\n.artifact-link--detail[_ngcontent-%COMP%] span[_ngcontent-%COMP%] {\n overflow: hidden;\n white-space: nowrap;\n text-overflow: ellipsis;\n}\n.done-chip[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 7px;\n width: 100%;\n text-align: left;\n font-family: inherit;\n font-size: 12.5px;\n padding: 6px 12px;\n border-radius: var(--mj-radius-full, 9999px);\n background: var(--mj-bg-surface);\n border: 1px solid var(--mj-border-default);\n color: var(--mj-text-secondary);\n cursor: pointer;\n transition: border-color 140ms ease, background 140ms ease;\n}\n.done-chip[_ngcontent-%COMP%]:hover {\n border-color: var(--sage-border);\n background: var(--mj-bg-surface-hover, var(--mj-bg-surface));\n}\n.done-chip__mark[_ngcontent-%COMP%] {\n font-size: 11px;\n color: var(--mj-status-success);\n flex-shrink: 0;\n}\n.done-chip--failed[_ngcontent-%COMP%] .done-chip__mark[_ngcontent-%COMP%] {\n color: var(--mj-status-error);\n}\n.done-chip--failed[_ngcontent-%COMP%] {\n border-color: var(--mj-status-error-border, var(--mj-border-default));\n}\n.done-chip__agent[_ngcontent-%COMP%] {\n font-weight: 700;\n color: var(--mj-text-primary);\n flex-shrink: 0;\n}\n.done-chip__sep[_ngcontent-%COMP%] {\n color: var(--mj-text-disabled);\n flex-shrink: 0;\n}\n.done-chip__preview[_ngcontent-%COMP%] {\n flex: 1;\n min-width: 0;\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n color: var(--mj-text-secondary);\n}\n.via-badge[_ngcontent-%COMP%] {\n display: inline-flex;\n align-items: center;\n gap: 4px;\n font-size: 10px;\n font-weight: 700;\n color: var(--mj-color-violet-300, var(--mj-text-muted));\n flex-shrink: 0;\n}\n.via-badge[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n font-size: 9px;\n cursor: help;\n}\n.done-chip__chev[_ngcontent-%COMP%] {\n font-size: 10px;\n color: var(--mj-text-muted);\n flex-shrink: 0;\n}\n\n\n\n.done-detail[_ngcontent-%COMP%] {\n margin-top: 6px;\n margin-left: 12px;\n padding: 10px 14px;\n border-left: 2px solid var(--sage);\n background: var(--mj-bg-surface);\n border-radius: 0 var(--mj-radius-lg, 12px) var(--mj-radius-lg, 12px) 0;\n border-top: 1px solid var(--mj-border-subtle, var(--mj-border-default));\n border-right: 1px solid var(--mj-border-subtle, var(--mj-border-default));\n border-bottom: 1px solid var(--mj-border-subtle, var(--mj-border-default));\n}\n.done-detail__body[_ngcontent-%COMP%] {\n font-size: 13px;\n line-height: 1.55;\n color: var(--mj-text-primary);\n white-space: pre-wrap;\n}\n.done-detail__meta[_ngcontent-%COMP%] {\n margin-top: 8px;\n font-size: 10.5px;\n font-weight: 700;\n color: var(--mj-text-muted);\n display: flex;\n align-items: center;\n gap: 5px;\n}\n.done-detail__meta[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n cursor: help;\n}\n\n@keyframes _ngcontent-%COMP%_rt-spin {\n to { transform: rotate(360deg); }\n}\n@keyframes _ngcontent-%COMP%_rt-slide {\n 0% { left: -35%; }\n 100% { left: 100%; }\n}\n\n\n\n.cancel-work[_ngcontent-%COMP%] {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n width: 22px;\n height: 22px;\n padding: 0;\n border-radius: var(--mj-radius-full, 9999px);\n border: 1px solid transparent;\n background: transparent;\n color: var(--mj-text-muted);\n cursor: pointer;\n flex-shrink: 0;\n}\n.cancel-work[_ngcontent-%COMP%]:hover {\n color: var(--mj-status-error);\n border-color: var(--mj-status-error-border, var(--mj-status-error));\n background: color-mix(in srgb, var(--mj-status-error) 8%, transparent);\n}\n.cancel-work[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n font-size: 11px;\n}"] });
|
|
307
|
+
}
|
|
308
|
+
(() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(RealtimeDelegationCardComponent, [{
|
|
309
|
+
type: Component,
|
|
310
|
+
args: [{ standalone: true, selector: 'mj-realtime-delegation-card', imports: [CommonModule], template: "@if (!Card.Done) {\n <!-- WORKING \u2014 compact live card -->\n <div class=\"work-card\" role=\"status\" aria-live=\"polite\">\n <div class=\"work-card__head\">\n <div class=\"avatar\" aria-hidden=\"true\">{{ Card.AgentName.charAt(0) }}</div>\n <div class=\"work-card__title\">{{ Card.AgentName }} is working\u2026</div>\n <span class=\"pill pill--running\">\n <i class=\"fa-solid fa-spinner spin\" aria-hidden=\"true\"></i> Running\n </span>\n @if (ShowOpenRun) {\n <button type=\"button\" class=\"dev-link\" (click)=\"OpenRun($event)\"\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 <button type=\"button\" class=\"cancel-work\" (click)=\"CancelWork($event)\"\n title=\"Cancel this work\" aria-label=\"Cancel this work\">\n <i class=\"fa-solid fa-xmark\" aria-hidden=\"true\"></i>\n </button>\n </div>\n <div class=\"work-card__step\">{{ StepLabel }}</div>\n @if (ShowDetailLine) {\n <div class=\"work-card__detail\">{{ Card.LatestMessage }}</div>\n }\n <div class=\"work-progress\" [class.work-progress--indeterminate]=\"Card.Percentage == null\">\n @if (Card.Percentage != null) {\n <div class=\"work-progress__fill\" [style.width.%]=\"Card.Percentage\"></div>\n } @else {\n <div class=\"work-progress__fill work-progress__fill--slide\"></div>\n }\n </div>\n </div>\n} @else {\n <!-- DONE / FAILED \u2014 collapsed single-line chip, expandable inline -->\n <div class=\"done\">\n <div class=\"done-row\">\n <button type=\"button\"\n class=\"done-chip\"\n [class.done-chip--failed]=\"!Card.Success\"\n (click)=\"ToggleExpanded()\"\n [attr.aria-expanded]=\"Expanded\"\n [title]=\"Expanded ? 'Collapse result' : 'Expand result'\">\n <i class=\"fa-solid done-chip__mark\" [ngClass]=\"Card.Success ? 'fa-check' : 'fa-xmark'\" aria-hidden=\"true\"></i>\n <span class=\"done-chip__agent\">{{ Card.AgentName }}</span>\n <span class=\"done-chip__sep\" aria-hidden=\"true\">\u00B7</span>\n <span class=\"done-chip__preview\">{{ ResultPreview }}</span>\n <span class=\"via-badge\">\n <i class=\"fa-solid fa-shield-halved\" [title]=\"ProvenanceTitle\" aria-hidden=\"true\"></i>\n via {{ Card.AgentName }}\n </span>\n <i class=\"fa-solid done-chip__chev\" [ngClass]=\"Expanded ? 'fa-chevron-up' : 'fa-chevron-down'\" aria-hidden=\"true\"></i>\n </button>\n @for (artifact of Artifacts; track artifact.ArtifactVersionID) {\n <button type=\"button\" class=\"artifact-link\" (click)=\"OpenArtifact($event, 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) {\n <button type=\"button\" class=\"dev-link\" (click)=\"OpenRun($event)\"\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 @if (Expanded) {\n <div class=\"done-detail\">\n <div class=\"done-detail__body\">{{ ResultText }}</div>\n @for (artifact of Artifacts; track artifact.ArtifactVersionID) {\n <button type=\"button\" class=\"artifact-link artifact-link--detail\" (click)=\"OpenArtifact($event, artifact)\"\n [title]=\"'View ' + artifact.Name\">\n <i class=\"fa-solid fa-file-lines\" aria-hidden=\"true\"></i>\n <span>{{ artifact.Name }}</span>\n <i class=\"fa-solid fa-arrow-right\" aria-hidden=\"true\"></i>\n </button>\n }\n @if (Card.RunRef) {\n <div class=\"done-detail__meta\">\n <i class=\"fa-solid fa-shield-halved\" [title]=\"ProvenanceTitle\" aria-hidden=\"true\"></i>\n via {{ Card.AgentName }} \u00B7 run {{ Card.RunRef }}\n @if (ShowOpenRun) {\n <button type=\"button\" class=\"dev-link dev-link--inline\" (click)=\"OpenRun($event)\"\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 }\n </div>\n }\n </div>\n}\n", styles: [":host {\n display: block;\n /* sage / delegated-agent accent (distinct from the co-agent brand blue) */\n --sage: var(--mj-color-violet-400, #a78bfa);\n --sage-bg: color-mix(in srgb, var(--mj-color-violet-400, #a78bfa) 12%, transparent);\n --sage-border: color-mix(in srgb, var(--mj-color-violet-400, #a78bfa) 40%, transparent);\n}\n\n.avatar {\n width: 24px;\n height: 24px;\n border-radius: 50%;\n display: grid;\n place-items: center;\n font-weight: 600;\n font-size: 11px;\n flex-shrink: 0;\n background: var(--sage-bg);\n color: var(--mj-color-violet-300, var(--mj-text-primary));\n border: 1px solid var(--sage-border);\n}\n\n/* ---------- Working card (compact) ---------- */\n.work-card {\n border: 1px solid var(--sage-border);\n background: var(--sage-bg);\n border-radius: var(--mj-radius-lg, 12px);\n padding: 10px 14px;\n max-width: 560px;\n}\n.work-card__head {\n display: flex;\n align-items: center;\n gap: 8px;\n margin-bottom: 8px;\n}\n.work-card__title {\n font-weight: 700;\n font-size: 13px;\n color: var(--mj-text-primary);\n flex: 1;\n min-width: 0;\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n}\n.work-card__step {\n font-size: 12.5px;\n font-weight: 600;\n color: var(--mj-text-primary);\n}\n.work-card__detail {\n font-size: 12px;\n color: var(--mj-text-muted);\n padding-left: 14px;\n margin-top: 3px;\n border-left: 2px solid var(--sage-border);\n}\n\n.pill {\n display: inline-flex;\n align-items: center;\n gap: 5px;\n padding: 2px 8px;\n border-radius: var(--mj-radius-full, 9999px);\n font-size: 10.5px;\n font-weight: 700;\n flex-shrink: 0;\n line-height: 1.5;\n}\n.pill--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.pill i { font-size: 9px; }\n.spin { animation: rt-spin 1.1s linear infinite; }\n\n/* Thin progress bar \u2014 determinate (server %) or indeterminate slide */\n.work-progress {\n height: 3px;\n border-radius: var(--mj-radius-full, 9999px);\n background: color-mix(in srgb, var(--sage) 18%, transparent);\n overflow: hidden;\n margin-top: 9px;\n position: relative;\n}\n.work-progress__fill {\n height: 100%;\n border-radius: var(--mj-radius-full, 9999px);\n background: var(--sage);\n transition: width 240ms ease;\n}\n.work-progress__fill--slide {\n position: absolute;\n width: 35%;\n animation: rt-slide 1.6s ease-in-out infinite;\n}\n\n/* ---------- Done chip (collapsed single line) ---------- */\n.done {\n max-width: 560px;\n}\n.done-row {\n display: flex;\n align-items: center;\n gap: 8px;\n}\n.done-row .done-chip {\n flex: 1;\n min-width: 0;\n}\n\n/* ---------- Developer link (gear-gated \"Open run\") ---------- */\n.dev-link {\n display: inline-flex;\n align-items: center;\n gap: 5px;\n padding: 3px 9px;\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: 10.5px;\n font-weight: 700;\n white-space: nowrap;\n flex-shrink: 0;\n cursor: pointer;\n transition: color 140ms ease, border-color 140ms ease, background 140ms ease;\n}\n.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.dev-link i {\n font-size: 9px;\n}\n.dev-link--inline {\n margin-left: 8px;\n}\n\n/* ---------- \"View \u2192\" artifact chip (focuses the artifact's surface tab) ---------- */\n.artifact-link {\n display: inline-flex;\n align-items: center;\n gap: 5px;\n padding: 3px 10px;\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: 10.5px;\n font-weight: 700;\n white-space: nowrap;\n flex-shrink: 0;\n cursor: pointer;\n transition: color 140ms ease, border-color 140ms ease, background 140ms ease;\n}\n.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.artifact-link i {\n font-size: 9px;\n}\n.artifact-link--detail {\n margin-top: 8px;\n max-width: 100%;\n}\n.artifact-link--detail span {\n overflow: hidden;\n white-space: nowrap;\n text-overflow: ellipsis;\n}\n.done-chip {\n display: flex;\n align-items: center;\n gap: 7px;\n width: 100%;\n text-align: left;\n font-family: inherit;\n font-size: 12.5px;\n padding: 6px 12px;\n border-radius: var(--mj-radius-full, 9999px);\n background: var(--mj-bg-surface);\n border: 1px solid var(--mj-border-default);\n color: var(--mj-text-secondary);\n cursor: pointer;\n transition: border-color 140ms ease, background 140ms ease;\n}\n.done-chip:hover {\n border-color: var(--sage-border);\n background: var(--mj-bg-surface-hover, var(--mj-bg-surface));\n}\n.done-chip__mark {\n font-size: 11px;\n color: var(--mj-status-success);\n flex-shrink: 0;\n}\n.done-chip--failed .done-chip__mark {\n color: var(--mj-status-error);\n}\n.done-chip--failed {\n border-color: var(--mj-status-error-border, var(--mj-border-default));\n}\n.done-chip__agent {\n font-weight: 700;\n color: var(--mj-text-primary);\n flex-shrink: 0;\n}\n.done-chip__sep {\n color: var(--mj-text-disabled);\n flex-shrink: 0;\n}\n.done-chip__preview {\n flex: 1;\n min-width: 0;\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n color: var(--mj-text-secondary);\n}\n.via-badge {\n display: inline-flex;\n align-items: center;\n gap: 4px;\n font-size: 10px;\n font-weight: 700;\n color: var(--mj-color-violet-300, var(--mj-text-muted));\n flex-shrink: 0;\n}\n.via-badge i {\n font-size: 9px;\n cursor: help;\n}\n.done-chip__chev {\n font-size: 10px;\n color: var(--mj-text-muted);\n flex-shrink: 0;\n}\n\n/* ---------- Expanded result detail ---------- */\n.done-detail {\n margin-top: 6px;\n margin-left: 12px;\n padding: 10px 14px;\n border-left: 2px solid var(--sage);\n background: var(--mj-bg-surface);\n border-radius: 0 var(--mj-radius-lg, 12px) var(--mj-radius-lg, 12px) 0;\n border-top: 1px solid var(--mj-border-subtle, var(--mj-border-default));\n border-right: 1px solid var(--mj-border-subtle, var(--mj-border-default));\n border-bottom: 1px solid var(--mj-border-subtle, var(--mj-border-default));\n}\n.done-detail__body {\n font-size: 13px;\n line-height: 1.55;\n color: var(--mj-text-primary);\n white-space: pre-wrap;\n}\n.done-detail__meta {\n margin-top: 8px;\n font-size: 10.5px;\n font-weight: 700;\n color: var(--mj-text-muted);\n display: flex;\n align-items: center;\n gap: 5px;\n}\n.done-detail__meta i {\n cursor: help;\n}\n\n@keyframes rt-spin {\n to { transform: rotate(360deg); }\n}\n@keyframes rt-slide {\n 0% { left: -35%; }\n 100% { left: 100%; }\n}\n\n/* ---------- \u2715 cancel affordance on the WORKING card (explicit user cancel) ---------- */\n.cancel-work {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n width: 22px;\n height: 22px;\n padding: 0;\n border-radius: var(--mj-radius-full, 9999px);\n border: 1px solid transparent;\n background: transparent;\n color: var(--mj-text-muted);\n cursor: pointer;\n flex-shrink: 0;\n}\n.cancel-work:hover {\n color: var(--mj-status-error);\n border-color: var(--mj-status-error-border, var(--mj-status-error));\n background: color-mix(in srgb, var(--mj-status-error) 8%, transparent);\n}\n.cancel-work i {\n font-size: 11px;\n}\n"] }]
|
|
311
|
+
}], null, { Card: [{
|
|
312
|
+
type: Input,
|
|
313
|
+
args: [{ required: true }]
|
|
314
|
+
}], DevMode: [{
|
|
315
|
+
type: Input
|
|
316
|
+
}], OpenRunRequested: [{
|
|
317
|
+
type: Output
|
|
318
|
+
}], OpenArtifactRequested: [{
|
|
319
|
+
type: Output
|
|
320
|
+
}], CancelRequested: [{
|
|
321
|
+
type: Output
|
|
322
|
+
}] }); })();
|
|
323
|
+
(() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassDebugInfo(RealtimeDelegationCardComponent, { className: "RealtimeDelegationCardComponent", filePath: "src/lib/components/realtime/realtime-delegation-card.component.ts", lineNumber: 30 }); })();
|
|
324
|
+
//# sourceMappingURL=realtime-delegation-card.component.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"realtime-delegation-card.component.js","sourceRoot":"","sources":["../../../../src/lib/components/realtime/realtime-delegation-card.component.ts","../../../../src/lib/components/realtime/realtime-delegation-card.component.html"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,YAAY,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,eAAe,CAAC;AACvE,OAAO,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAC/C,OAAO,EAA4B,iBAAiB,EAAE,MAAM,0BAA0B,CAAC;;;;;;ICQ/E,kCACoD;IADb,wNAAS,sBAAe,KAAC;IAE9D,wBAAyE;IACzE,4BAAM;IAAA,wBAAQ;IAChB,AADgB,iBAAO,EACd;;;IASX,+BAA+B;IAAA,YAAwB;IAAA,iBAAM;;;IAA9B,cAAwB;IAAxB,+CAAwB;;;IAIrD,0BAAyE;;;IAAxC,oDAAiC;;;IAElE,0BAAkE;;;;IAzBpE,AADF,AADF,8BAAwD,aACzB,aACY;IAAA,YAA8B;IAAA,iBAAM;IAC3E,8BAA8B;IAAA,YAAgC;IAAA,iBAAM;IACpE,+BAAiC;IAC/B,uBAA2D;IAAC,yBAC9D;IAAA,iBAAO;IACP,kHAAmB;IAOnB,kCAC+D;IADrB,0MAAS,yBAAkB,KAAC;IAEpE,wBAAoD;IAExD,AADE,iBAAS,EACL;IACN,gCAA6B;IAAA,aAAe;IAAA,iBAAM;IAClD,kHAAsB;IAGtB,gCAA0F;IAGtF,AAFF,kHAA+B,4FAEtB;IAIb,AADE,iBAAM,EACF;;;IA5BqC,eAA8B;IAA9B,qDAA8B;IACvC,eAAgC;IAAhC,qEAAgC;IAI9D,eAMC;IAND,6CAMC;IAM0B,eAAe;IAAf,sCAAe;IAC5C,cAEC;IAFD,iDAEC;IAC0B,cAA8D;IAA9D,8EAA8D;IACvF,cAIC;IAJD,0DAIC;;;;IAwBC,kCAC0C;IADE,+OAAS,wCAA8B,KAAC;IAElF,wBAAyD;IACzD,4BAAM;IAAA,oBAAI;IAAA,iBAAO;IACjB,wBAA0D;IAC5D,iBAAS;;;IAJD,kDAAiC;;;;IAOzC,kCACoD;IADb,yNAAS,sBAAe,KAAC;IAE9D,wBAAyE;IACzE,4BAAM;IAAA,wBAAQ;IAChB,AADgB,iBAAO,EACd;;;;IAOP,kCAC0C;IADwB,6PAAS,wCAA8B,KAAC;IAExG,wBAAyD;IACzD,4BAAM;IAAA,YAAmB;IAAA,iBAAO;IAChC,wBAA0D;IAC5D,iBAAS;;;IAJD,kDAAiC;IAEjC,eAAmB;IAAnB,sCAAmB;;;;IASvB,kCACoD;IADI,sPAAS,sBAAe,KAAC;IAE/E,wBAAyE;IACzE,4BAAM;IAAA,wBAAQ;IAChB,AADgB,iBAAO,EACd;;;IARb,+BAA+B;IAC7B,wBAAsF;IACtF,YACA;IAAA,gJAAmB;IAOrB,iBAAM;;;IATiC,cAAyB;IAAzB,8CAAyB;IAC9D,cACA;IADA,8FACA;IAAA,cAMC;IAND,6CAMC;;;IAnBL,AADF,+BAAyB,cACQ;IAAA,YAAgB;IAAA,iBAAM;IACrD,mIAOC;IACD,+HAAmB;IAarB,iBAAM;;;IAtB2B,eAAgB;IAAhB,uCAAgB;IAC/C,cAOC;IAPD,+BAOC;IACD,eAYC;IAZD,6CAYC;;;;IAvDH,AADF,AADF,8BAAkB,cACM,iBAM6C;IAFzD,mMAAS,uBAAgB,KAAC;IAGhC,wBAA8G;IAC9G,gCAA+B;IAAA,YAAoB;IAAA,iBAAO;IAC1D,gCAAgD;IAAA,sBAAC;IAAA,iBAAO;IACxD,gCAAiC;IAAA,YAAmB;IAAA,iBAAO;IAC3D,iCAAwB;IACtB,yBAAsF;IACtF,aACF;IAAA,iBAAO;IACP,yBAAsH;IACxH,iBAAS;IACT,sHAOC;IACD,oHAAmB;IAOrB,iBAAM;IACN,kHAAgB;IA0BlB,iBAAM;;;IAxDM,eAAyC;IAAzC,yDAAyC;IAGzC,6EAAwD;;IAC1B,cAAkD;IAAlD,uEAAkD;IACvD,eAAoB;IAApB,2CAAoB;IAElB,eAAmB;IAAnB,0CAAmB;IAEb,eAAyB;IAAzB,8CAAyB;IAC9D,cACF;IADE,0DACF;IACoC,cAA0D;IAA1D,+EAA0D;IAEhG,cAOC;IAPD,+BAOC;IACD,eAMC;IAND,8CAMC;IAEH,cAyBC;IAzBD,2CAyBC;;ADzFL;;;;;;;;;;;;;;;;GAgBG;AAQH,MAAM,OAAO,+BAA+B;IAC1C,yEAAyE;IACjE,MAAM,CAAU,eAAe,GAAG,GAAG,CAAC;IAE9C,uFAAuF;IAC5D,IAAI,CAA4B;IAE3D,wEAAwE;IAC/D,OAAO,GAAG,KAAK,CAAC;IAEzB,mFAAmF;IACzE,gBAAgB,GAAG,IAAI,YAAY,EAAU,CAAC;IAExD,+FAA+F;IACrF,qBAAqB,GAAG,IAAI,YAAY,EAA4B,CAAC;IAE/E;;;;;;OAMG;IACO,eAAe,GAAG,IAAI,YAAY,EAAU,CAAC;IAEvD,6EAA6E;IACtE,QAAQ,GAAG,KAAK,CAAC;IAExB,6FAA6F;IAC7F,IAAW,SAAS;QAClB,OAAO,IAAI,CAAC,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC;IAC1E,CAAC;IAED,iFAAiF;IAC1E,YAAY,CAAC,KAAiB,EAAE,QAAkC;QACvE,KAAK,CAAC,eAAe,EAAE,CAAC;QACxB,IAAI,CAAC,qBAAqB,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;IAC5C,CAAC;IAED,gFAAgF;IAChF,IAAW,WAAW;QACpB,OAAO,IAAI,CAAC,OAAO,IAAI,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC;IAC3C,CAAC;IAED,gEAAgE;IACzD,OAAO,CAAC,KAAiB;QAC9B,KAAK,CAAC,eAAe,EAAE,CAAC;QACxB,IAAI,IAAI,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC;YACpB,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QAC9C,CAAC;IACH,CAAC;IAED,oEAAoE;IAC7D,UAAU,CAAC,KAAiB;QACjC,KAAK,CAAC,eAAe,EAAE,CAAC;QACxB,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC;YACpB,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QAC9C,CAAC;IACH,CAAC;IAED,gFAAgF;IAChF,IAAW,SAAS;QAClB,OAAO,iBAAiB,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,IAAI,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;IAC1E,CAAC;IAED;;;OAGG;IACH,IAAW,cAAc;QACvB,OAAO,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,aAAa,IAAI,IAAI,CAAC,IAAI,CAAC,aAAa,KAAK,IAAI,CAAC,SAAS,CAAC;IACjF,CAAC;IAED,mFAAmF;IACnF,IAAW,UAAU;QACnB,OAAO,IAAI,CAAC,IAAI,CAAC,MAAM;eAClB,IAAI,CAAC,IAAI,CAAC,aAAa;eACvB,GAAG,IAAI,CAAC,IAAI,CAAC,SAAS,gCAAgC,CAAC;IAC9D,CAAC;IAED,wEAAwE;IACxE,IAAW,aAAa;QACtB,MAAM,OAAO,GAAG,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC;QAC5D,MAAM,GAAG,GAAG,+BAA+B,CAAC,eAAe,CAAC;QAC5D,OAAO,OAAO,CAAC,MAAM,GAAG,GAAG,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC,CAAC,OAAO,CAAC;IAChF,CAAC;IAED,mDAAmD;IACnD,IAAW,eAAe;QACxB,MAAM,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,SAAS,IAAI,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC;QACjE,OAAO,sBAAsB,IAAI,CAAC,IAAI,CAAC,SAAS,mBAAmB,GAAG,wCAAwC,CAAC;IACjH,CAAC;IAED,gDAAgD;IACzC,cAAc;QACnB,IAAI,CAAC,QAAQ,GAAG,CAAC,IAAI,CAAC,QAAQ,CAAC;IACjC,CAAC;yHAhGU,+BAA+B;6DAA/B,+BAA+B;YCI1C,AAjCF,kGAAkB,6EAiCT;;YAjCT,wCAgGC;4BDvEW,YAAY;;iFAIX,+BAA+B;cAP3C,SAAS;6BACI,IAAI,YACN,6BAA6B,WAC9B,CAAC,YAAY,CAAC;;kBAStB,KAAK;mBAAC,EAAE,QAAQ,EAAE,IAAI,EAAE;;kBAGxB,KAAK;;kBAGL,MAAM;;kBAGN,MAAM;;kBASN,MAAM;;kFAvBI,+BAA+B","sourcesContent":["import { Component, EventEmitter, Input, Output } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { RealtimeDelegationCardVM, FriendlyStepLabel } from './realtime-session-state';\nimport { ParsedDelegationArtifact } from '../../services/delegation-result-parser';\n\n/**\n * Renders a single delegation in the live session thread:\n * - **Working**: a compact card — agent avatar, \"<agent> is working…\", the CURRENT\n * friendly step label, the latest raw message indented + muted beneath it, and a\n * thin progress bar (determinate when the server supplies a percentage,\n * indeterminate shimmer otherwise).\n * - **Done**: COLLAPSED to a single-line chip — `✓ <agent> · <one-line result preview>\n * · via <agent>` — expandable inline (click / chevron) to the full result text.\n * Failures render the `✗` variant.\n *\n * Provenance is a small `via <agent>` badge + a shield icon whose `title` tooltip\n * carries the full provenance sentence (no repeated sentence under every card).\n *\n * DEVELOPER MODE (gear-gated by the overlay shell): when {@link DevMode} is on and the\n * card knows its delegated run id, an \"Open run\" link is revealed that emits\n * {@link OpenRunRequested} so the shell can navigate to the `MJ: AI Agent Runs` record.\n */\n@Component({\n standalone: true,\n selector: 'mj-realtime-delegation-card',\n imports: [CommonModule],\n templateUrl: './realtime-delegation-card.component.html',\n styleUrl: './realtime-delegation-card.component.css'\n})\nexport class RealtimeDelegationCardComponent {\n /** Maximum characters of the result shown in the collapsed done chip. */\n private static readonly PreviewMaxChars = 120;\n\n /** The delegation card view-model to render (immutable — replaced on every update). */\n @Input({ required: true }) Card!: RealtimeDelegationCardVM;\n\n /** Whether developer affordances (the \"Open run\" link) are revealed. */\n @Input() DevMode = false;\n\n /** Emitted with the delegated run's ID when the dev \"Open run\" link is clicked. */\n @Output() OpenRunRequested = new EventEmitter<string>();\n\n /** Emitted when a \"View\" artifact chip is clicked (the overlay focuses the artifact's tab). */\n @Output() OpenArtifactRequested = new EventEmitter<ParsedDelegationArtifact>();\n\n /**\n * Emitted with the call's ID when the WORKING card's ✕ cancel affordance is clicked —\n * EXPLICIT user intent to kill the in-flight delegated run (by deliberate host policy,\n * barge-in alone never cancels delegations; only this button does). The overlay routes\n * it to `RealtimeSessionService.CancelDelegation`, which flips this card to a failed\n * \"Cancelled by user\" result.\n */\n @Output() CancelRequested = new EventEmitter<string>();\n\n /** Whether the done chip is expanded inline to show the full result text. */\n public Expanded = false;\n\n /** The artifacts this (done) delegation produced (empty array while running / when none). */\n public get Artifacts(): ParsedDelegationArtifact[] {\n return this.Card.Done && this.Card.Artifacts ? this.Card.Artifacts : [];\n }\n\n /** Emits the open-artifact request for one of this card's produced artifacts. */\n public OpenArtifact(event: MouseEvent, artifact: ParsedDelegationArtifact): void {\n event.stopPropagation();\n this.OpenArtifactRequested.emit(artifact);\n }\n\n /** True when the dev \"Open run\" link should render (gear on + run id known). */\n public get ShowOpenRun(): boolean {\n return this.DevMode && !!this.Card.RunID;\n }\n\n /** Emits the open-run request for this card's delegated run. */\n public OpenRun(event: MouseEvent): void {\n event.stopPropagation();\n if (this.Card.RunID) {\n this.OpenRunRequested.emit(this.Card.RunID);\n }\n }\n\n /** Emits the cancel request for this (still-working) delegation. */\n public CancelWork(event: MouseEvent): void {\n event.stopPropagation();\n if (!this.Card.Done) {\n this.CancelRequested.emit(this.Card.CallID);\n }\n }\n\n /** Friendly label for the current delegation step (raw message as fallback). */\n public get StepLabel(): string {\n return FriendlyStepLabel(this.Card.LatestStep, this.Card.LatestMessage);\n }\n\n /**\n * Whether to render the latest raw message as the indented detail line. Hidden when\n * it would just repeat the step label (the unknown-step fallback maps label = message).\n */\n public get ShowDetailLine(): boolean {\n return !!this.Card.LatestMessage && this.Card.LatestMessage !== this.StepLabel;\n }\n\n /** Full result text (falls back to the last progress message / a generic line). */\n public get ResultText(): string {\n return this.Card.Result\n || this.Card.LatestMessage\n || `${this.Card.AgentName} completed the delegated work.`;\n }\n\n /** One-line, ~120-char preview of the result for the collapsed chip. */\n public get ResultPreview(): string {\n const oneLine = this.ResultText.replace(/\\s+/g, ' ').trim();\n const max = RealtimeDelegationCardComponent.PreviewMaxChars;\n return oneLine.length > max ? `${oneLine.slice(0, max).trimEnd()}…` : oneLine;\n }\n\n /** Tooltip text for the provenance shield icon. */\n public get ProvenanceTitle(): string {\n const run = this.Card.RunRef ? ` (run ${this.Card.RunRef})` : '';\n return `Result produced by ${this.Card.AgentName}'s own agent run${run} — not invented by the voice co-agent.`;\n }\n\n /** Toggles the done chip's inline expansion. */\n public ToggleExpanded(): void {\n this.Expanded = !this.Expanded;\n }\n}\n","@if (!Card.Done) {\n <!-- WORKING — compact live card -->\n <div class=\"work-card\" role=\"status\" aria-live=\"polite\">\n <div class=\"work-card__head\">\n <div class=\"avatar\" aria-hidden=\"true\">{{ Card.AgentName.charAt(0) }}</div>\n <div class=\"work-card__title\">{{ Card.AgentName }} is working…</div>\n <span class=\"pill pill--running\">\n <i class=\"fa-solid fa-spinner spin\" aria-hidden=\"true\"></i> Running\n </span>\n @if (ShowOpenRun) {\n <button type=\"button\" class=\"dev-link\" (click)=\"OpenRun($event)\"\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 <button type=\"button\" class=\"cancel-work\" (click)=\"CancelWork($event)\"\n title=\"Cancel this work\" aria-label=\"Cancel this work\">\n <i class=\"fa-solid fa-xmark\" aria-hidden=\"true\"></i>\n </button>\n </div>\n <div class=\"work-card__step\">{{ StepLabel }}</div>\n @if (ShowDetailLine) {\n <div class=\"work-card__detail\">{{ Card.LatestMessage }}</div>\n }\n <div class=\"work-progress\" [class.work-progress--indeterminate]=\"Card.Percentage == null\">\n @if (Card.Percentage != null) {\n <div class=\"work-progress__fill\" [style.width.%]=\"Card.Percentage\"></div>\n } @else {\n <div class=\"work-progress__fill work-progress__fill--slide\"></div>\n }\n </div>\n </div>\n} @else {\n <!-- DONE / FAILED — collapsed single-line chip, expandable inline -->\n <div class=\"done\">\n <div class=\"done-row\">\n <button type=\"button\"\n class=\"done-chip\"\n [class.done-chip--failed]=\"!Card.Success\"\n (click)=\"ToggleExpanded()\"\n [attr.aria-expanded]=\"Expanded\"\n [title]=\"Expanded ? 'Collapse result' : 'Expand result'\">\n <i class=\"fa-solid done-chip__mark\" [ngClass]=\"Card.Success ? 'fa-check' : 'fa-xmark'\" aria-hidden=\"true\"></i>\n <span class=\"done-chip__agent\">{{ Card.AgentName }}</span>\n <span class=\"done-chip__sep\" aria-hidden=\"true\">·</span>\n <span class=\"done-chip__preview\">{{ ResultPreview }}</span>\n <span class=\"via-badge\">\n <i class=\"fa-solid fa-shield-halved\" [title]=\"ProvenanceTitle\" aria-hidden=\"true\"></i>\n via {{ Card.AgentName }}\n </span>\n <i class=\"fa-solid done-chip__chev\" [ngClass]=\"Expanded ? 'fa-chevron-up' : 'fa-chevron-down'\" aria-hidden=\"true\"></i>\n </button>\n @for (artifact of Artifacts; track artifact.ArtifactVersionID) {\n <button type=\"button\" class=\"artifact-link\" (click)=\"OpenArtifact($event, 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) {\n <button type=\"button\" class=\"dev-link\" (click)=\"OpenRun($event)\"\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 @if (Expanded) {\n <div class=\"done-detail\">\n <div class=\"done-detail__body\">{{ ResultText }}</div>\n @for (artifact of Artifacts; track artifact.ArtifactVersionID) {\n <button type=\"button\" class=\"artifact-link artifact-link--detail\" (click)=\"OpenArtifact($event, artifact)\"\n [title]=\"'View ' + artifact.Name\">\n <i class=\"fa-solid fa-file-lines\" aria-hidden=\"true\"></i>\n <span>{{ artifact.Name }}</span>\n <i class=\"fa-solid fa-arrow-right\" aria-hidden=\"true\"></i>\n </button>\n }\n @if (Card.RunRef) {\n <div class=\"done-detail__meta\">\n <i class=\"fa-solid fa-shield-halved\" [title]=\"ProvenanceTitle\" aria-hidden=\"true\"></i>\n via {{ Card.AgentName }} · run {{ Card.RunRef }}\n @if (ShowOpenRun) {\n <button type=\"button\" class=\"dev-link dev-link--inline\" (click)=\"OpenRun($event)\"\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 }\n </div>\n }\n </div>\n}\n"]}
|
|
@@ -0,0 +1,135 @@
|
|
|
1
|
+
import { Subject } from 'rxjs';
|
|
2
|
+
/**
|
|
3
|
+
* @fileoverview PROGRESSIVE DISCLOSURE model for the realtime call overlay — the
|
|
4
|
+
* framework-free engine behind the "console that grows with you" UX
|
|
5
|
+
* (`plans/realtime/mockups/redesign-a-progressive.html`).
|
|
6
|
+
*
|
|
7
|
+
* The overlay starts as PURE AUDIO (a breathing orb, three controls, no text) and
|
|
8
|
+
* reveals surfaces along two axes:
|
|
9
|
+
*
|
|
10
|
+
* - **Content-driven (within a session, panel-only)** — the ONE auto-reveal is a
|
|
11
|
+
* channel's first agent activity (e.g. the first whiteboard write): the surface panel
|
|
12
|
+
* opens as a peek with that tab focused, while the left column stays exactly as it
|
|
13
|
+
* was (pure audio included). Everything else announces itself without grabbing:
|
|
14
|
+
* finished artifacts land as glowing unfocused tabs; delegations are narrated aloud.
|
|
15
|
+
* - **Capability-driven (across sessions, ratcheted)** — the thread text, composer,
|
|
16
|
+
* gear and other chrome unlock as the user demonstrates depth (or asks: the hero's
|
|
17
|
+
* "Show the conversation", the T-to-type hotkey, the Details peek). Milestones persist
|
|
18
|
+
* per-user via UserInfoEngine under {@link REALTIME_UX_PREF_KEY}; once a control is
|
|
19
|
+
* earned it never auto-hides. The gear's Simple / Standard / Pro density control is
|
|
20
|
+
* the manual escape hatch, writing the same setting.
|
|
21
|
+
*
|
|
22
|
+
* ### Levels
|
|
23
|
+
* | Level | Name | Adds |
|
|
24
|
+
* |-------|-------------|-----------------------------------------------------------|
|
|
25
|
+
* | 0 | Pure audio | hero orb · mute · Details peek · end — nothing to read |
|
|
26
|
+
* | 1 | Text | caption thread + captions control + type-to-text hint |
|
|
27
|
+
* | 2 | Engaged | surface panel · composer dock · channel strip · gear |
|
|
28
|
+
* | 3 | Channels | channel tab revealed (board in play) |
|
|
29
|
+
* | 4 | Power | dev affordances default-available (gear popover unlocks) |
|
|
30
|
+
*
|
|
31
|
+
* Kept free of Angular runtime imports (like `RealtimeSurfaceTabsModel`) so every rule
|
|
32
|
+
* is unit-testable in isolation; the overlay component owns persistence (UserInfoEngine)
|
|
33
|
+
* and subscribes {@link RealtimeDisclosureModel.Changed$} to re-render.
|
|
34
|
+
*/
|
|
35
|
+
/** The user's manual interface-density override (the gear's escape hatch). */
|
|
36
|
+
export type RealtimeUxDensity = 'auto' | 'simple' | 'standard' | 'pro';
|
|
37
|
+
/** Session events that RAISE the volatile disclosure level (never lower it). */
|
|
38
|
+
export type RealtimeDisclosureEvent = 'text' | 'engaged' | 'channel' | 'power';
|
|
39
|
+
/** The per-user persisted disclosure milestones (the cross-session ratchet). */
|
|
40
|
+
export interface RealtimeUxMilestones {
|
|
41
|
+
/** Highest disclosure level EARNED across sessions (0–4). Never decreases. */
|
|
42
|
+
Level: number;
|
|
43
|
+
/** Completed live calls — promotes the auto base to power level at {@link REALTIME_UX_PRO_CALLS}. */
|
|
44
|
+
Calls: number;
|
|
45
|
+
/** Manual density override; `'auto'` follows the earned ratchet. */
|
|
46
|
+
Density: RealtimeUxDensity;
|
|
47
|
+
}
|
|
48
|
+
/** UserInfoEngine settings key for the persisted milestones (versioned shape). */
|
|
49
|
+
export declare const REALTIME_UX_PREF_KEY = "mj.realtimeVoice.uxMilestones.v1";
|
|
50
|
+
/** The highest disclosure level. */
|
|
51
|
+
export declare const REALTIME_UX_MAX_LEVEL = 4;
|
|
52
|
+
/** Completed-call count at which the `auto` base promotes to the full power console. */
|
|
53
|
+
export declare const REALTIME_UX_PRO_CALLS = 3;
|
|
54
|
+
/** A brand-new user's milestones: nothing earned, auto density. */
|
|
55
|
+
export declare function DefaultUxMilestones(): RealtimeUxMilestones;
|
|
56
|
+
/** Clamps a candidate level into the valid 0–{@link REALTIME_UX_MAX_LEVEL} band. */
|
|
57
|
+
export declare function ClampUxLevel(level: number): number;
|
|
58
|
+
/**
|
|
59
|
+
* Parses a persisted milestones payload. TOLERANT: anything missing/malformed falls back
|
|
60
|
+
* to {@link DefaultUxMilestones} (field-wise) — a bad preference must never break the call UX.
|
|
61
|
+
*/
|
|
62
|
+
export declare function ParseUxMilestones(raw: string | null | undefined): RealtimeUxMilestones;
|
|
63
|
+
/** Serializes milestones for persistence (lower-cased keys, versionless — the key carries v1). */
|
|
64
|
+
export declare function SerializeUxMilestones(m: RealtimeUxMilestones): string;
|
|
65
|
+
/**
|
|
66
|
+
* The BASE disclosure level a fresh session starts at:
|
|
67
|
+
* - manual density overrides win outright (`simple` → 0, `standard` → 2, `pro` → 4);
|
|
68
|
+
* - `auto` follows the earned ratchet, promoted to the full console once the user has
|
|
69
|
+
* completed {@link REALTIME_UX_PRO_CALLS} calls.
|
|
70
|
+
*/
|
|
71
|
+
export declare function EffectiveBaseLevel(m: RealtimeUxMilestones): number;
|
|
72
|
+
/**
|
|
73
|
+
* The milestones to persist when a live call ends: the call count increments and the
|
|
74
|
+
* earned level ratchets up to whatever the session reached — never below 1 (a completed
|
|
75
|
+
* first call earns the text thread by default next time), never down.
|
|
76
|
+
*/
|
|
77
|
+
export declare function RatchetedMilestones(m: RealtimeUxMilestones, sessionLevel: number): RealtimeUxMilestones;
|
|
78
|
+
/**
|
|
79
|
+
* The volatile + persisted disclosure state for ONE overlay instance. The overlay loads
|
|
80
|
+
* it from UserInfoEngine at construction, calls {@link Raise} as session events land,
|
|
81
|
+
* derives every visibility gate from the getters, and persists {@link RatchetOnSessionEnd}'s
|
|
82
|
+
* result when the call ends.
|
|
83
|
+
*/
|
|
84
|
+
export declare class RealtimeDisclosureModel {
|
|
85
|
+
/** The persisted cross-session milestones (replaced immutably on change). */
|
|
86
|
+
Milestones: RealtimeUxMilestones;
|
|
87
|
+
/** The CURRENT session's volatile level — max(base, raised events). */
|
|
88
|
+
SessionLevel: number;
|
|
89
|
+
/** Emits after every change so the owning component can mark for check. */
|
|
90
|
+
readonly Changed$: Subject<void>;
|
|
91
|
+
/** Loads persisted milestones (tolerant) and resets the session level to the base. */
|
|
92
|
+
Load(raw: string | null | undefined): void;
|
|
93
|
+
/** Resets the volatile session level to the base — call at every fresh session start. */
|
|
94
|
+
BeginSession(): void;
|
|
95
|
+
/**
|
|
96
|
+
* RAISES the session level for an event (never lowers it).
|
|
97
|
+
* @returns `true` when the level actually changed.
|
|
98
|
+
*/
|
|
99
|
+
Raise(event: RealtimeDisclosureEvent): boolean;
|
|
100
|
+
/**
|
|
101
|
+
* EXPLICIT step back down to the pure-audio surface (level 0) for THIS session —
|
|
102
|
+
* the inverse door of the hero's "Show the conversation" / T-to-type reveals. Volatile
|
|
103
|
+
* only: the cross-session milestones ratchet is untouched (use the gear's `simple`
|
|
104
|
+
* density to make pure audio the durable default). Raising is one-way for CONTENT;
|
|
105
|
+
* the USER may always walk back down.
|
|
106
|
+
*/
|
|
107
|
+
ReturnToPureAudio(): void;
|
|
108
|
+
/**
|
|
109
|
+
* Applies the gear's manual density override. Takes effect immediately — `simple`
|
|
110
|
+
* returns even a mid-call console to the day-one surface (content tabs keep their
|
|
111
|
+
* content; only the chrome retracts). The caller persists the serialized milestones.
|
|
112
|
+
*/
|
|
113
|
+
SetDensity(density: RealtimeUxDensity): void;
|
|
114
|
+
/**
|
|
115
|
+
* Ratchets + replaces the milestones for a completed call and returns the serialized
|
|
116
|
+
* payload for persistence. The session level is left as-is (the overlay is about to
|
|
117
|
+
* close or re-begin).
|
|
118
|
+
*/
|
|
119
|
+
RatchetOnSessionEnd(): string;
|
|
120
|
+
/** Level 1+: the caption thread (and the captions control) are visible. */
|
|
121
|
+
get ShowThread(): boolean;
|
|
122
|
+
/**
|
|
123
|
+
* Level 2+ POWER-CHROME milestone (app-bar End pill, gear, channel strip). NOTE: the
|
|
124
|
+
* composer dock itself is NOT level-forced — it is the overlay's per-session, user-owned
|
|
125
|
+
* Open toggle (the strip's Type control / T opens it; the dock's hide control closes it).
|
|
126
|
+
*/
|
|
127
|
+
get ShowComposer(): boolean;
|
|
128
|
+
/** Level 2+: the surface panel exists (content arrival forces this via 'engaged'/'channel'). */
|
|
129
|
+
get ShowPanel(): boolean;
|
|
130
|
+
/** Level 2+: the channel strip + the app-bar gear (density escape hatch lives there). */
|
|
131
|
+
get ShowGear(): boolean;
|
|
132
|
+
/** Level 4: developer affordances are offered by default (gear popover still gates them). */
|
|
133
|
+
get PowerLevel(): boolean;
|
|
134
|
+
}
|
|
135
|
+
//# sourceMappingURL=realtime-disclosure.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"realtime-disclosure.d.ts","sourceRoot":"","sources":["../../../../src/lib/components/realtime/realtime-disclosure.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,MAAM,CAAC;AAE/B;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAgCG;AAEH,8EAA8E;AAC9E,MAAM,MAAM,iBAAiB,GAAG,MAAM,GAAG,QAAQ,GAAG,UAAU,GAAG,KAAK,CAAC;AAEvE,gFAAgF;AAChF,MAAM,MAAM,uBAAuB,GAAG,MAAM,GAAG,SAAS,GAAG,SAAS,GAAG,OAAO,CAAC;AAE/E,gFAAgF;AAChF,MAAM,WAAW,oBAAoB;IACnC,8EAA8E;IAC9E,KAAK,EAAE,MAAM,CAAC;IACd,qGAAqG;IACrG,KAAK,EAAE,MAAM,CAAC;IACd,oEAAoE;IACpE,OAAO,EAAE,iBAAiB,CAAC;CAC5B;AAED,kFAAkF;AAClF,eAAO,MAAM,oBAAoB,qCAAqC,CAAC;AAEvE,oCAAoC;AACpC,eAAO,MAAM,qBAAqB,IAAI,CAAC;AAEvC,wFAAwF;AACxF,eAAO,MAAM,qBAAqB,IAAI,CAAC;AAUvC,mEAAmE;AACnE,wBAAgB,mBAAmB,IAAI,oBAAoB,CAE1D;AAED,oFAAoF;AACpF,wBAAgB,YAAY,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAKlD;AAED;;;GAGG;AACH,wBAAgB,iBAAiB,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,GAAG,oBAAoB,CAuBtF;AAED,kGAAkG;AAClG,wBAAgB,qBAAqB,CAAC,CAAC,EAAE,oBAAoB,GAAG,MAAM,CAErE;AAED;;;;;GAKG;AACH,wBAAgB,kBAAkB,CAAC,CAAC,EAAE,oBAAoB,GAAG,MAAM,CAQlE;AAED;;;;GAIG;AACH,wBAAgB,mBAAmB,CAAC,CAAC,EAAE,oBAAoB,EAAE,YAAY,EAAE,MAAM,GAAG,oBAAoB,CAMvG;AAED;;;;;GAKG;AACH,qBAAa,uBAAuB;IAClC,6EAA6E;IACtE,UAAU,EAAE,oBAAoB,CAAyB;IAEhE,uEAAuE;IAChE,YAAY,SAAK;IAExB,2EAA2E;IAC3E,SAAgB,QAAQ,gBAAuB;IAE/C,sFAAsF;IAC/E,IAAI,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,GAAG,IAAI;IAMjD,yFAAyF;IAClF,YAAY,IAAI,IAAI;IAQ3B;;;OAGG;IACI,KAAK,CAAC,KAAK,EAAE,uBAAuB,GAAG,OAAO;IAUrD;;;;;;OAMG;IACI,iBAAiB,IAAI,IAAI;IAQhC;;;;OAIG;IACI,UAAU,CAAC,OAAO,EAAE,iBAAiB,GAAG,IAAI;IASnD;;;;OAIG;IACI,mBAAmB,IAAI,MAAM;IAOpC,2EAA2E;IAC3E,IAAW,UAAU,IAAI,OAAO,CAE/B;IAED;;;;OAIG;IACH,IAAW,YAAY,IAAI,OAAO,CAEjC;IAED,gGAAgG;IAChG,IAAW,SAAS,IAAI,OAAO,CAE9B;IAED,yFAAyF;IACzF,IAAW,QAAQ,IAAI,OAAO,CAE7B;IAED,6FAA6F;IAC7F,IAAW,UAAU,IAAI,OAAO,CAE/B;CACF"}
|