@memberjunction/ng-dashboards 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/dist/AI/components/analytics/ai-analytics-resource.component.d.ts +38 -4
- package/dist/AI/components/analytics/ai-analytics-resource.component.d.ts.map +1 -1
- package/dist/AI/components/analytics/ai-analytics-resource.component.js +148 -20
- package/dist/AI/components/analytics/ai-analytics-resource.component.js.map +1 -1
- package/dist/AI/components/analytics/realtime/realtime-management-data.d.ts +216 -0
- package/dist/AI/components/analytics/realtime/realtime-management-data.d.ts.map +1 -0
- package/dist/AI/components/analytics/realtime/realtime-management-data.js +313 -0
- package/dist/AI/components/analytics/realtime/realtime-management-data.js.map +1 -0
- package/dist/AI/components/analytics/realtime/realtime-management.component.d.ts +103 -0
- package/dist/AI/components/analytics/realtime/realtime-management.component.d.ts.map +1 -0
- package/dist/AI/components/analytics/realtime/realtime-management.component.js +1060 -0
- package/dist/AI/components/analytics/realtime/realtime-management.component.js.map +1 -0
- package/dist/AI/components/analytics/realtime/realtime-overview.component.d.ts +87 -0
- package/dist/AI/components/analytics/realtime/realtime-overview.component.d.ts.map +1 -0
- package/dist/AI/components/analytics/realtime/realtime-overview.component.js +710 -0
- package/dist/AI/components/analytics/realtime/realtime-overview.component.js.map +1 -0
- package/dist/AI/components/analytics/realtime/realtime-session-data.d.ts +127 -0
- package/dist/AI/components/analytics/realtime/realtime-session-data.d.ts.map +1 -0
- package/dist/AI/components/analytics/realtime/realtime-session-data.js +233 -0
- package/dist/AI/components/analytics/realtime/realtime-session-data.js.map +1 -0
- package/dist/AI/components/analytics/realtime/realtime-sessions.component.d.ts +94 -0
- package/dist/AI/components/analytics/realtime/realtime-sessions.component.d.ts.map +1 -0
- package/dist/AI/components/analytics/realtime/realtime-sessions.component.js +728 -0
- package/dist/AI/components/analytics/realtime/realtime-sessions.component.js.map +1 -0
- package/dist/AI/components/autotagging/tabs/sources-tab.component.js +2 -2
- package/dist/AI/components/autotagging/tabs/sources-tab.component.js.map +1 -1
- package/dist/AI/components/duplicates/duplicate-detection-resource.component.d.ts.map +1 -1
- package/dist/AI/components/duplicates/duplicate-detection-resource.component.js +4 -1
- package/dist/AI/components/duplicates/duplicate-detection-resource.component.js.map +1 -1
- package/dist/AI/components/tags/tags-resource.component.js +2 -2
- package/dist/AI/components/tags/tags-resource.component.js.map +1 -1
- package/dist/AI/components/vectors/vector-management-resource.component.js +2 -2
- package/dist/AI/components/vectors/vector-management-resource.component.js.map +1 -1
- package/dist/AI/index.d.ts +5 -0
- package/dist/AI/index.d.ts.map +1 -1
- package/dist/AI/index.js +7 -0
- package/dist/AI/index.js.map +1 -1
- package/dist/KnowledgeHub/components/config/knowledge-config-resource.component.js +5 -5
- package/dist/KnowledgeHub/components/config/knowledge-config-resource.component.js.map +1 -1
- package/dist/MCP/mcp-dashboard.component.d.ts +16 -2
- package/dist/MCP/mcp-dashboard.component.d.ts.map +1 -1
- package/dist/MCP/mcp-dashboard.component.js +33 -4
- package/dist/MCP/mcp-dashboard.component.js.map +1 -1
- package/dist/ai-dashboards.module.d.ts +22 -19
- package/dist/ai-dashboards.module.d.ts.map +1 -1
- package/dist/ai-dashboards.module.js +18 -0
- package/dist/ai-dashboards.module.js.map +1 -1
- package/package.json +55 -55
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"realtime-management.component.js","sourceRoot":"","sources":["../../../../../src/AI/components/analytics/realtime/realtime-management.component.ts","../../../../../src/AI/components/analytics/realtime/realtime-management.component.html"],"names":[],"mappings":"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","sourcesContent":["/**\n * @fileoverview Realtime management section — the whole realtime + bridge\n * surface (§11b of the Realtime Bridges architecture) in one place.\n *\n * Hosts an internal sub-tab rail across seven surfaces:\n * 1. Live Sessions — active session bridges (Connecting/Connected) joined\n * with their session: agent, provider, turn mode,\n * participant count, started-at.\n * 2. Bridge Providers — the platform registry with a compact capability\n * summary derived from `SupportedFeaturesObject`.\n * 3. Agent Identities — which agents are reachable where (mailboxes, numbers).\n * 4. Channels — the `MJ: AI Agent Channels` registry + which providers\n * contribute them.\n * 5. Co-Agents — the `MJ: AI Agent Co Agents` pairing registry.\n * 6. Session History — closed/terminal session bridges with close reason.\n * 7. Metrics — client-side aggregates (by provider / status / agent;\n * bridges-over-time bucketed per day).\n *\n * Read-only for v1. Data loads once per `TimeRange` change via one batched\n * `RunViews` in {@link LoadRealtimeManagementDataset}; everything else is\n * in-memory aggregation. The selected sub-tab persists via `UserInfoEngine`\n * under `mj.realtimeDashboard.subTab`.\n */\n\nimport { Component, Input, OnInit, ChangeDetectorRef, inject } from '@angular/core';\nimport { CompositeKey } from '@memberjunction/core';\nimport { BaseAngularComponent } from '@memberjunction/ng-base-types';\nimport { SharedService } from '@memberjunction/ng-shared';\nimport { UserInfoEngine } from '@memberjunction/core-entities';\nimport {\n RealtimeManagementDataset, LoadRealtimeManagementDataset,\n BridgeProviderRollup, SessionBridgeRollup, BridgeAgentIdentityRecord,\n AgentChannelRecord, BridgeProviderChannelRecord, AgentCoAgentRecord,\n SessionBridgeDayBucket, MetricSlice,\n BucketSessionBridgesByDay, SummarizeBridgesByProvider,\n SummarizeBridgesByStatus, SummarizeBridgesByAgent,\n BuildCapabilityChips, CapabilityChip, BridgeTypeIcon, IdentityTypeIcon,\n TransportTypeIcon, FormatBridgeDuration, FormatBridgeStart\n} from './realtime-management-data';\n\n/** The seven management sub-tabs. */\ntype RealtimeSubTab =\n | 'live-sessions' | 'providers' | 'identities'\n | 'channels' | 'co-agents' | 'history' | 'metrics';\n\ninterface SubTabDef {\n Key: RealtimeSubTab;\n Label: string;\n Icon: string;\n}\n\n/** Persisted preferences shape (UserInfoEngine: `mj.realtimeDashboard.*`). */\ninterface RealtimeManagementPrefs {\n subTab?: RealtimeSubTab;\n}\n\nconst SUB_TAB_PREF_KEY = 'mj.realtimeDashboard.subTab';\n\n@Component({\n standalone: false,\n selector: 'app-realtime-management',\n templateUrl: './realtime-management.component.html',\n styleUrls: ['./realtime-management.component.css']\n})\nexport class RealtimeManagementComponent extends BaseAngularComponent implements OnInit {\n // ── Inputs ──\n\n private _timeRange = '7d';\n @Input()\n set TimeRange(value: string) {\n const prev = this._timeRange;\n this._timeRange = value;\n if (prev !== value && this.initialized) this.LoadData();\n }\n get TimeRange(): string { return this._timeRange; }\n\n // ── State ──\n\n private initialized = false;\n private cdr = inject(ChangeDetectorRef);\n private dataset: RealtimeManagementDataset | null = null;\n\n public IsLoading = false;\n public ActiveSubTab: RealtimeSubTab = 'live-sessions';\n\n public readonly SubTabs: SubTabDef[] = [\n { Key: 'live-sessions', Label: 'Live Sessions', Icon: 'fa-solid fa-tower-broadcast' },\n { Key: 'providers', Label: 'Bridge Providers', Icon: 'fa-solid fa-network-wired' },\n { Key: 'identities', Label: 'Agent Identities', Icon: 'fa-solid fa-id-badge' },\n { Key: 'channels', Label: 'Channels', Icon: 'fa-solid fa-satellite-dish' },\n { Key: 'co-agents', Label: 'Co-Agents', Icon: 'fa-solid fa-people-arrows' },\n { Key: 'history', Label: 'Session History', Icon: 'fa-solid fa-clock-rotate-left' },\n { Key: 'metrics', Label: 'Metrics', Icon: 'fa-solid fa-chart-column' }\n ];\n\n // ── View models (rebuilt on load) ──\n\n public LiveBridges: SessionBridgeRollup[] = [];\n public HistoryBridges: SessionBridgeRollup[] = [];\n public Providers: BridgeProviderRollup[] = [];\n public Identities: BridgeAgentIdentityRecord[] = [];\n public Channels: AgentChannelRecord[] = [];\n public ProviderChannels: BridgeProviderChannelRecord[] = [];\n public CoAgents: AgentCoAgentRecord[] = [];\n\n // Metrics\n public DayBuckets: SessionBridgeDayBucket[] = [];\n public ByProvider: MetricSlice[] = [];\n public ByStatus: MetricSlice[] = [];\n public ByAgent: MetricSlice[] = [];\n\n // ── Provider capability summary cache (chips + remainder) ──\n private capabilityChips = new Map<string, CapabilityChip[]>();\n\n // ── Lifecycle ──\n\n async ngOnInit(): Promise<void> {\n this.loadPrefs();\n this.initialized = true;\n await this.LoadData();\n }\n\n // ── Sub-tab navigation ──\n\n public SelectSubTab(key: RealtimeSubTab): void {\n if (key === this.ActiveSubTab) return;\n this.ActiveSubTab = key;\n this.savePrefs();\n this.cdr.detectChanges();\n }\n\n // ── Data loading ──\n\n /** Reloads the whole management surface for the current time range. */\n public async LoadData(): Promise<void> {\n this.IsLoading = true;\n this.cdr.detectChanges();\n try {\n this.dataset = await LoadRealtimeManagementDataset(this.ProviderToUse, this.TimeRange);\n this.applyDataset(this.dataset);\n } catch (e) {\n console.error('Realtime management load error:', e);\n } finally {\n this.IsLoading = false;\n this.cdr.detectChanges();\n }\n }\n\n private applyDataset(ds: RealtimeManagementDataset): void {\n this.LiveBridges = ds.LiveBridges;\n this.HistoryBridges = ds.HistoryBridges;\n this.Providers = ds.Providers;\n this.Identities = ds.Identities;\n this.Channels = ds.Channels;\n this.ProviderChannels = ds.ProviderChannels;\n this.CoAgents = ds.CoAgents;\n\n this.capabilityChips.clear();\n for (const p of ds.Providers) {\n this.capabilityChips.set(p.Record.ID, BuildCapabilityChips(p.Features));\n }\n\n this.DayBuckets = BucketSessionBridgesByDay(ds.AllBridges, ds.WindowStart, new Date());\n this.ByProvider = SummarizeBridgesByProvider(ds.AllBridges);\n this.ByStatus = SummarizeBridgesByStatus(ds.AllBridges);\n this.ByAgent = SummarizeBridgesByAgent(ds.AllBridges);\n }\n\n // ── Drill-in ──\n\n /** Opens the AIAgentSession record behind a bridge via the shared record-open path. */\n public OpenSession(sessionId: string): void {\n const key = new CompositeKey();\n key.LoadFromSingleKeyValuePair('ID', sessionId);\n SharedService.Instance.OpenEntityRecord('MJ: AI Agent Sessions', key);\n }\n\n /** Opens a bridge provider record. */\n public OpenProvider(providerId: string): void {\n const key = new CompositeKey();\n key.LoadFromSingleKeyValuePair('ID', providerId);\n SharedService.Instance.OpenEntityRecord('MJ: AI Bridge Providers', key);\n }\n\n // ── Capability summary accessors (template helpers) ──\n\n /** First N capability chips for a provider (kept compact in the grid). */\n public CapabilityChipsFor(providerId: string, limit = 4): CapabilityChip[] {\n return (this.capabilityChips.get(providerId) ?? []).slice(0, limit);\n }\n\n /** Count of capability chips beyond the displayed `limit` (for a \"+N\" pill). */\n public CapabilityOverflowFor(providerId: string, limit = 4): number {\n const total = this.capabilityChips.get(providerId)?.length ?? 0;\n return Math.max(0, total - limit);\n }\n\n // ── Channel surface helpers ──\n\n /** Providers contributing a given channel (for the Channels grid). */\n public ProvidersForChannel(channelId: string): BridgeProviderChannelRecord[] {\n const target = channelId.toLowerCase();\n return this.ProviderChannels.filter(pc => pc.ChannelID.toLowerCase() === target);\n }\n\n // ── Co-agent helpers ──\n\n /** Human-readable pairing target — a specific agent or a whole agent type. */\n public CoAgentTargetLabel(row: AgentCoAgentRecord): string {\n if (row.TargetAgent) return row.TargetAgent;\n if (row.TargetAgentType) return `Type: ${row.TargetAgentType}`;\n return '—';\n }\n\n // ── Metric rendering helpers ──\n\n /** Max count across day buckets (for bar height scaling); min 1 to avoid /0. */\n public get MaxDayCount(): number {\n return Math.max(1, ...this.DayBuckets.map(b => b.Count));\n }\n\n /** Bar height percentage for a day bucket. */\n public DayBarHeight(count: number): number {\n return Math.round((count / this.MaxDayCount) * 100);\n }\n\n /** Max slice count (for horizontal bar scaling); min 1. */\n public maxSlice(slices: MetricSlice[]): number {\n return Math.max(1, ...slices.map(s => s.Count));\n }\n\n /** Bar width percentage for a metric slice. */\n public SliceBarWidth(slices: MetricSlice[], count: number): number {\n return Math.round((count / this.maxSlice(slices)) * 100);\n }\n\n // ── Summary getters ──\n\n public get LiveCount(): number { return this.LiveBridges.length; }\n public get HistoryCount(): number { return this.HistoryBridges.length; }\n public get ActiveProviderCount(): number {\n return this.Providers.filter(p => p.Record.Status === 'Active').length;\n }\n public get ActiveIdentityCount(): number {\n return this.Identities.filter(i => i.IsActive).length;\n }\n public get ActiveCoAgentCount(): number {\n return this.CoAgents.filter(c => c.Status === 'Active').length;\n }\n\n // ── Pure presentation helpers (delegated to the data module) ──\n\n public BridgeTypeIcon = BridgeTypeIcon;\n public IdentityTypeIcon = IdentityTypeIcon;\n public TransportTypeIcon = TransportTypeIcon;\n public FormatBridgeDuration = FormatBridgeDuration;\n public FormatBridgeStart = FormatBridgeStart;\n\n /** CSS class for a bridge status pill. */\n public BridgeStatusClass(status: string): string {\n switch (status) {\n case 'Connected': return 'status-pill status-connected';\n case 'Connecting':\n case 'Pending':\n case 'Scheduled': return 'status-pill status-pending';\n case 'Disconnecting': return 'status-pill status-pending';\n case 'Failed': return 'status-pill status-failed';\n default: return 'status-pill status-closed';\n }\n }\n\n /** CSS class for a session-bridge close-reason pill. */\n public CloseReasonClass(reason: string | null): string {\n switch (reason) {\n case 'Error': return 'reason-pill reason-error';\n case 'Janitor': return 'reason-pill reason-janitor';\n case 'HostEnded': return 'reason-pill reason-hostended';\n case 'Shutdown': return 'reason-pill reason-shutdown';\n case 'Explicit': return 'reason-pill reason-explicit';\n default: return 'reason-pill reason-unknown';\n }\n }\n\n // ── Preferences ──\n\n private loadPrefs(): void {\n try {\n const raw = UserInfoEngine.Instance.GetSetting(SUB_TAB_PREF_KEY);\n if (raw) {\n const prefs = JSON.parse(raw) as RealtimeManagementPrefs;\n if (prefs.subTab && this.SubTabs.some(t => t.Key === prefs.subTab)) {\n this.ActiveSubTab = prefs.subTab;\n }\n }\n } catch {\n // Use defaults on parse failure.\n }\n }\n\n private savePrefs(): void {\n const prefs: RealtimeManagementPrefs = { subTab: this.ActiveSubTab };\n UserInfoEngine.Instance.SetSettingDebounced(SUB_TAB_PREF_KEY, JSON.stringify(prefs));\n }\n}\n\nexport function LoadRealtimeManagement() { /* tree-shaking prevention */ }\n","@if (IsLoading) {\n <div class=\"loading-container\">\n <mj-loading text=\"Loading realtime surface...\"></mj-loading>\n </div>\n} @else {\n <!-- Sub-tab rail + refresh -->\n <div class=\"subtab-bar\">\n <div class=\"subtabs\">\n @for (tab of SubTabs; track tab.Key) {\n <button class=\"subtab\" [class.subtab--active]=\"ActiveSubTab === tab.Key\"\n (click)=\"SelectSubTab(tab.Key)\">\n <i [class]=\"tab.Icon\"></i>\n <span>{{ tab.Label }}</span>\n </button>\n }\n </div>\n <button mjButton variant=\"secondary\" size=\"sm\" title=\"Refresh\" (click)=\"LoadData()\">\n <i class=\"fa-solid fa-rotate\"></i>\n </button>\n </div>\n\n @switch (ActiveSubTab) {\n\n <!-- ═══════════════════════════ LIVE SESSIONS ═══════════════════════════ -->\n @case ('live-sessions') {\n <div class=\"panel\">\n <div class=\"table-wrapper\">\n <table class=\"data-table\">\n <thead>\n <tr>\n <th>Agent</th>\n <th>Provider</th>\n <th>Direction</th>\n <th>Turn mode</th>\n <th class=\"th-numeric\">Participants</th>\n <th>Status</th>\n <th>Started</th>\n <th>Host instance</th>\n <th></th>\n </tr>\n </thead>\n <tbody>\n @if (LiveBridges.length === 0) {\n <tr><td colspan=\"9\" class=\"empty-row\">No live bridged sessions right now</td></tr>\n }\n @for (b of LiveBridges; track b.Record.ID) {\n <tr class=\"data-row\" (click)=\"OpenSession(b.Record.AgentSessionID)\">\n <td class=\"cell-strong\">{{ b.AgentName }}</td>\n <td>{{ b.Record.Provider }}</td>\n <td>\n <span class=\"dir-pill\">\n <i class=\"fa-solid\"\n [class.fa-arrow-right-from-bracket]=\"b.Record.Direction === 'Outbound'\"\n [class.fa-arrow-right-to-bracket]=\"b.Record.Direction === 'Inbound'\"></i>\n {{ b.Record.Direction }}\n </span>\n </td>\n <td>{{ b.Record.TurnMode }}</td>\n <td class=\"cell-numeric\">{{ b.ParticipantCount }}</td>\n <td>\n <span [class]=\"BridgeStatusClass(b.Record.Status)\">\n @if (b.Record.Status === 'Connected') { <span class=\"dot dot--live\"></span> }\n {{ b.Record.Status }}\n </span>\n </td>\n <td class=\"cell-time\">{{ FormatBridgeStart(b.StartedAt) }}</td>\n <td class=\"cell-host mono\" [title]=\"b.Record.HostInstanceID || ''\">{{ b.Record.HostInstanceID || '—' }}</td>\n <td class=\"cell-action\">\n <!-- TODO(v1+): replace with the observer-console deep link (§1 read-only monitor). -->\n <button mjButton variant=\"icon\" size=\"sm\" title=\"Open session record\"\n (click)=\"OpenSession(b.Record.AgentSessionID); $event.stopPropagation()\">\n <i class=\"fa-solid fa-arrow-up-right-from-square\"></i>\n </button>\n </td>\n </tr>\n }\n </tbody>\n </table>\n </div>\n </div>\n <div class=\"grid-footer\">\n <span class=\"grid-summary\">{{ LiveCount }} live bridge{{ LiveCount === 1 ? '' : 's' }}</span>\n </div>\n }\n\n <!-- ═══════════════════════════ BRIDGE PROVIDERS ═══════════════════════════ -->\n @case ('providers') {\n <div class=\"panel\">\n <div class=\"table-wrapper\">\n <table class=\"data-table\">\n <thead>\n <tr>\n <th>Provider</th>\n <th>Type</th>\n <th>Status</th>\n <th>Driver class</th>\n <th>Capabilities</th>\n <th class=\"th-numeric\">Channels</th>\n </tr>\n </thead>\n <tbody>\n @if (Providers.length === 0) {\n <tr><td colspan=\"6\" class=\"empty-row\">No bridge providers registered</td></tr>\n }\n @for (p of Providers; track p.Record.ID) {\n <tr class=\"data-row\" (click)=\"OpenProvider(p.Record.ID)\">\n <td>\n <div class=\"cell-strong\">\n <i [class]=\"BridgeTypeIcon(p.Record.BridgeType)\" class=\"type-icon\"></i>\n {{ p.Record.Name }}\n </div>\n @if (p.Record.Description) {\n <div class=\"cell-sub\">{{ p.Record.Description }}</div>\n }\n </td>\n <td>{{ p.Record.BridgeType }}</td>\n <td>\n <span class=\"status-pill\" [class.status-connected]=\"p.Record.Status === 'Active'\"\n [class.status-closed]=\"p.Record.Status !== 'Active'\">\n {{ p.Record.Status }}\n </span>\n </td>\n <td class=\"mono cell-host\" [title]=\"p.Record.DriverClass\">{{ p.Record.DriverClass }}</td>\n <td>\n <span class=\"cap-chips\">\n @for (chip of CapabilityChipsFor(p.Record.ID); track chip.Label) {\n <span class=\"cap-chip\" [title]=\"chip.Label\"><i [class]=\"chip.Icon\"></i></span>\n }\n @if (CapabilityOverflowFor(p.Record.ID) > 0) {\n <span class=\"cap-more\">+{{ CapabilityOverflowFor(p.Record.ID) }}</span>\n }\n @if (p.FeatureCount === 0) {\n <span class=\"cell-muted\">none declared</span>\n }\n </span>\n </td>\n <td class=\"cell-numeric\">{{ p.Channels.length }}</td>\n </tr>\n }\n </tbody>\n </table>\n </div>\n </div>\n <div class=\"grid-footer\">\n <span class=\"grid-summary\">{{ Providers.length }} providers · {{ ActiveProviderCount }} active</span>\n </div>\n }\n\n <!-- ═══════════════════════════ AGENT IDENTITIES ═══════════════════════════ -->\n @case ('identities') {\n <div class=\"panel\">\n <div class=\"table-wrapper\">\n <table class=\"data-table\">\n <thead>\n <tr>\n <th>Agent</th>\n <th>Provider</th>\n <th>Type</th>\n <th>Identity</th>\n <th>Display name</th>\n <th>Active</th>\n </tr>\n </thead>\n <tbody>\n @if (Identities.length === 0) {\n <tr><td colspan=\"6\" class=\"empty-row\">No agent identities provisioned</td></tr>\n }\n @for (id of Identities; track id.ID) {\n <tr class=\"data-row\">\n <td class=\"cell-strong\">{{ id.Agent || 'Unknown agent' }}</td>\n <td>{{ id.Provider }}</td>\n <td>\n <span class=\"type-chip\"><i [class]=\"IdentityTypeIcon(id.IdentityType)\"></i> {{ id.IdentityType }}</span>\n </td>\n <td class=\"mono\">{{ id.IdentityValue }}</td>\n <td class=\"cell-muted\">{{ id.DisplayName || '—' }}</td>\n <td>\n <span class=\"status-pill\" [class.status-connected]=\"id.IsActive\"\n [class.status-closed]=\"!id.IsActive\">\n {{ id.IsActive ? 'Active' : 'Inactive' }}\n </span>\n </td>\n </tr>\n }\n </tbody>\n </table>\n </div>\n </div>\n <div class=\"grid-footer\">\n <span class=\"grid-summary\">{{ Identities.length }} identities · {{ ActiveIdentityCount }} active</span>\n </div>\n }\n\n <!-- ═══════════════════════════ CHANNELS ═══════════════════════════ -->\n @case ('channels') {\n <div class=\"panel\">\n <div class=\"table-wrapper\">\n <table class=\"data-table\">\n <thead>\n <tr>\n <th>Channel</th>\n <th>Transport</th>\n <th>Active</th>\n <th>Contributed by</th>\n </tr>\n </thead>\n <tbody>\n @if (Channels.length === 0) {\n <tr><td colspan=\"4\" class=\"empty-row\">No channels registered</td></tr>\n }\n @for (ch of Channels; track ch.ID) {\n <tr class=\"data-row\">\n <td>\n <div class=\"cell-strong\">{{ ch.Name }}</div>\n @if (ch.Description) { <div class=\"cell-sub\">{{ ch.Description }}</div> }\n </td>\n <td>\n <span class=\"type-chip\"><i [class]=\"TransportTypeIcon(ch.TransportType)\"></i> {{ ch.TransportType }}</span>\n </td>\n <td>\n <span class=\"status-pill\" [class.status-connected]=\"ch.IsActive\"\n [class.status-closed]=\"!ch.IsActive\">\n {{ ch.IsActive ? 'Active' : 'Inactive' }}\n </span>\n </td>\n <td>\n <span class=\"provider-tags\">\n @for (pc of ProvidersForChannel(ch.ID); track pc.ID) {\n <span class=\"provider-tag\" [class.provider-tag--default]=\"pc.IsDefault\"\n [title]=\"pc.IsDefault ? 'Auto-attached by default' : 'Available on demand'\">\n {{ pc.Provider }}\n @if (pc.IsDefault) { <i class=\"fa-solid fa-star\"></i> }\n </span>\n } @empty {\n <span class=\"cell-muted\">no provider contributions</span>\n }\n </span>\n </td>\n </tr>\n }\n </tbody>\n </table>\n </div>\n </div>\n <div class=\"grid-footer\">\n <span class=\"grid-summary\">{{ Channels.length }} channels · {{ ProviderChannels.length }} provider contributions</span>\n </div>\n }\n\n <!-- ═══════════════════════════ CO-AGENTS ═══════════════════════════ -->\n @case ('co-agents') {\n <div class=\"panel\">\n <div class=\"table-wrapper\">\n <table class=\"data-table\">\n <thead>\n <tr>\n <th>Co-Agent</th>\n <th>Pairs with</th>\n <th>Relationship</th>\n <th>Default</th>\n <th class=\"th-numeric\">Seq</th>\n <th>Status</th>\n </tr>\n </thead>\n <tbody>\n @if (CoAgents.length === 0) {\n <tr><td colspan=\"6\" class=\"empty-row\">No co-agent pairings configured</td></tr>\n }\n @for (c of CoAgents; track c.ID) {\n <tr class=\"data-row\">\n <td class=\"cell-strong\">{{ c.CoAgent || 'Unknown' }}</td>\n <td>{{ CoAgentTargetLabel(c) }}</td>\n <td><span class=\"type-chip\">{{ c.Type }}</span></td>\n <td>\n @if (c.IsDefault) {\n <span class=\"default-pill\"><i class=\"fa-solid fa-star\"></i> default</span>\n } @else { <span class=\"cell-muted\">—</span> }\n </td>\n <td class=\"cell-numeric\">{{ c.Sequence }}</td>\n <td>\n <span class=\"status-pill\" [class.status-connected]=\"c.Status === 'Active'\"\n [class.status-closed]=\"c.Status !== 'Active'\">\n {{ c.Status }}\n </span>\n </td>\n </tr>\n }\n </tbody>\n </table>\n </div>\n </div>\n <div class=\"grid-footer\">\n <span class=\"grid-summary\">{{ CoAgents.length }} pairings · {{ ActiveCoAgentCount }} active</span>\n </div>\n }\n\n <!-- ═══════════════════════════ SESSION HISTORY ═══════════════════════════ -->\n @case ('history') {\n <div class=\"panel\">\n <div class=\"table-wrapper\">\n <table class=\"data-table\">\n <thead>\n <tr>\n <th>Agent</th>\n <th>Provider</th>\n <th>Join method</th>\n <th class=\"th-numeric\">Participants</th>\n <th class=\"th-numeric\">Duration</th>\n <th>Close reason</th>\n <th>Started</th>\n <th></th>\n </tr>\n </thead>\n <tbody>\n @if (HistoryBridges.length === 0) {\n <tr><td colspan=\"8\" class=\"empty-row\">No closed bridges in this window</td></tr>\n }\n @for (b of HistoryBridges; track b.Record.ID) {\n <tr class=\"data-row\" (click)=\"OpenSession(b.Record.AgentSessionID)\">\n <td class=\"cell-strong\">{{ b.AgentName }}</td>\n <td>{{ b.Record.Provider }}</td>\n <td>{{ b.Record.JoinMethod }}</td>\n <td class=\"cell-numeric\">{{ b.ParticipantCount }}</td>\n <td class=\"cell-numeric mono\">{{ FormatBridgeDuration(b.DurationMs) }}</td>\n <td>\n <span [class]=\"CloseReasonClass(b.Record.CloseReason)\">\n {{ b.Record.CloseReason || 'unknown' }}\n </span>\n </td>\n <td class=\"cell-time\">{{ FormatBridgeStart(b.StartedAt) }}</td>\n <td class=\"cell-action\">\n <!-- TODO(v1+): transcript / recording review launch (§7 review reuse). -->\n <button mjButton variant=\"icon\" size=\"sm\" title=\"Open session record\"\n (click)=\"OpenSession(b.Record.AgentSessionID); $event.stopPropagation()\">\n <i class=\"fa-solid fa-arrow-up-right-from-square\"></i>\n </button>\n </td>\n </tr>\n }\n </tbody>\n </table>\n </div>\n </div>\n <div class=\"grid-footer\">\n <span class=\"grid-summary\">{{ HistoryCount }} closed bridge{{ HistoryCount === 1 ? '' : 's' }} ({{ TimeRange }})</span>\n </div>\n }\n\n <!-- ═══════════════════════════ METRICS ═══════════════════════════ -->\n @case ('metrics') {\n <div class=\"metrics-grid\">\n <!-- Bridges over time (per-day bars) -->\n <div class=\"metric-card metric-card--wide\">\n <div class=\"metric-title\">Bridges over time</div>\n @if (DayBuckets.length === 0) {\n <div class=\"metric-empty\">No bridge activity in this window</div>\n } @else {\n <div class=\"bar-chart\">\n @for (bucket of DayBuckets; track bucket.Label) {\n <div class=\"bar-col\" [title]=\"bucket.Label + ': ' + bucket.Count\">\n <div class=\"bar-track\">\n <div class=\"bar-fill\" [style.height.%]=\"DayBarHeight(bucket.Count)\"></div>\n </div>\n <div class=\"bar-value\">{{ bucket.Count }}</div>\n </div>\n }\n </div>\n }\n </div>\n\n <!-- By provider -->\n <div class=\"metric-card\">\n <div class=\"metric-title\">By provider</div>\n @if (ByProvider.length === 0) {\n <div class=\"metric-empty\">No data</div>\n } @else {\n @for (slice of ByProvider; track slice.Label) {\n <div class=\"hbar-row\">\n <span class=\"hbar-label\" [title]=\"slice.Label\">{{ slice.Label }}</span>\n <div class=\"hbar-track\">\n <div class=\"hbar-fill\" [style.width.%]=\"SliceBarWidth(ByProvider, slice.Count)\"></div>\n </div>\n <span class=\"hbar-count\">{{ slice.Count }}</span>\n </div>\n }\n }\n </div>\n\n <!-- By status -->\n <div class=\"metric-card\">\n <div class=\"metric-title\">By status</div>\n @if (ByStatus.length === 0) {\n <div class=\"metric-empty\">No data</div>\n } @else {\n @for (slice of ByStatus; track slice.Label) {\n <div class=\"hbar-row\">\n <span class=\"hbar-label\" [title]=\"slice.Label\">{{ slice.Label }}</span>\n <div class=\"hbar-track\">\n <div class=\"hbar-fill\" [style.width.%]=\"SliceBarWidth(ByStatus, slice.Count)\"></div>\n </div>\n <span class=\"hbar-count\">{{ slice.Count }}</span>\n </div>\n }\n }\n </div>\n\n <!-- By agent -->\n <div class=\"metric-card\">\n <div class=\"metric-title\">By agent</div>\n @if (ByAgent.length === 0) {\n <div class=\"metric-empty\">No data</div>\n } @else {\n @for (slice of ByAgent; track slice.Label) {\n <div class=\"hbar-row\">\n <span class=\"hbar-label\" [title]=\"slice.Label\">{{ slice.Label }}</span>\n <div class=\"hbar-track\">\n <div class=\"hbar-fill\" [style.width.%]=\"SliceBarWidth(ByAgent, slice.Count)\"></div>\n </div>\n <span class=\"hbar-count\">{{ slice.Count }}</span>\n </div>\n }\n }\n </div>\n </div>\n }\n }\n}\n"]}
|
|
@@ -0,0 +1,87 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @fileoverview Realtime Voice — analytics overview section.
|
|
3
|
+
*
|
|
4
|
+
* Operational analytics for voice-agent sessions, built from
|
|
5
|
+
* `MJ: AI Agent Sessions`, their `MJ: AI Agent Session Channels` rows, and the
|
|
6
|
+
* delegated `MJ: AI Agent Runs` linked via `AgentSessionID`. Renders the KPI
|
|
7
|
+
* row (active sessions, sessions in window, avg duration, delegated runs,
|
|
8
|
+
* janitor closes, cost), a sessions-over-time bar chart, the channel-usage
|
|
9
|
+
* donut, the top delegated target agents, and a recent-sessions list with a
|
|
10
|
+
* "View all" jump to the full sessions grid.
|
|
11
|
+
*/
|
|
12
|
+
import { EventEmitter, OnInit } from '@angular/core';
|
|
13
|
+
import { BaseAngularComponent } from '@memberjunction/ng-base-types';
|
|
14
|
+
import { KPICardData } from '../../widgets/kpi-card.component';
|
|
15
|
+
import * as i0 from "@angular/core";
|
|
16
|
+
interface TimeBucket {
|
|
17
|
+
Label: string;
|
|
18
|
+
Count: number;
|
|
19
|
+
/** 0–100, relative to the busiest bucket. */
|
|
20
|
+
HeightPercent: number;
|
|
21
|
+
/** Flagged when the bucket is delegated-heavy (≥2 delegated runs/session avg). */
|
|
22
|
+
DelegatedHeavy: boolean;
|
|
23
|
+
}
|
|
24
|
+
interface ChannelShare {
|
|
25
|
+
Name: string;
|
|
26
|
+
Count: number;
|
|
27
|
+
Percent: number;
|
|
28
|
+
Color: string;
|
|
29
|
+
}
|
|
30
|
+
interface TargetAgentBar {
|
|
31
|
+
Name: string;
|
|
32
|
+
Count: number;
|
|
33
|
+
WidthPercent: number;
|
|
34
|
+
}
|
|
35
|
+
interface RecentSessionRow {
|
|
36
|
+
ID: string;
|
|
37
|
+
Target: string;
|
|
38
|
+
ViaAgent: string;
|
|
39
|
+
User: string;
|
|
40
|
+
Status: string;
|
|
41
|
+
StatusClass: string;
|
|
42
|
+
StatusLabel: string;
|
|
43
|
+
StatusTitle: string;
|
|
44
|
+
/** Pill icon (close cause for Closed rows); empty for Active, which renders the live dot. */
|
|
45
|
+
StatusIcon: string;
|
|
46
|
+
ChannelIcons: string[];
|
|
47
|
+
Runs: number;
|
|
48
|
+
Cost: string;
|
|
49
|
+
Duration: string;
|
|
50
|
+
}
|
|
51
|
+
export declare class AnalyticsRealtimeOverviewComponent extends BaseAngularComponent implements OnInit {
|
|
52
|
+
private _timeRange;
|
|
53
|
+
set TimeRange(value: string);
|
|
54
|
+
get TimeRange(): string;
|
|
55
|
+
/** Lets the shell jump to the full sessions grid (mirrors Executive Summary's pattern). */
|
|
56
|
+
SectionNavigate: EventEmitter<string>;
|
|
57
|
+
private initialized;
|
|
58
|
+
private cdr;
|
|
59
|
+
private dataset;
|
|
60
|
+
IsLoading: boolean;
|
|
61
|
+
KPICards: KPICardData[];
|
|
62
|
+
TimeBuckets: TimeBucket[];
|
|
63
|
+
ChannelShares: ChannelShare[];
|
|
64
|
+
DonutGradient: string;
|
|
65
|
+
TopTargetAgents: TargetAgentBar[];
|
|
66
|
+
RecentSessions: RecentSessionRow[];
|
|
67
|
+
ngOnInit(): void;
|
|
68
|
+
/** Reloads everything for the current time range. */
|
|
69
|
+
LoadData(): Promise<void>;
|
|
70
|
+
/** Opens the AIAgentSession record using the shared Explorer record-open path. */
|
|
71
|
+
OpenSession(sessionId: string): void;
|
|
72
|
+
private get windowSessions();
|
|
73
|
+
private buildKPICards;
|
|
74
|
+
private buildTimeBuckets;
|
|
75
|
+
private buildChannelShares;
|
|
76
|
+
private buildTopTargetAgents;
|
|
77
|
+
private buildRecentSessions;
|
|
78
|
+
/** Exposed for testability / template type narrowing. */
|
|
79
|
+
FormatTokens(value: number): string;
|
|
80
|
+
/** Window length in ms for the active range (exposed for tests). */
|
|
81
|
+
get WindowMs(): number;
|
|
82
|
+
static ɵfac: i0.ɵɵFactoryDeclaration<AnalyticsRealtimeOverviewComponent, never>;
|
|
83
|
+
static ɵcmp: i0.ɵɵComponentDeclaration<AnalyticsRealtimeOverviewComponent, "app-analytics-realtime-overview", never, { "TimeRange": { "alias": "TimeRange"; "required": false; }; }, { "SectionNavigate": "SectionNavigate"; }, never, never, false, never>;
|
|
84
|
+
}
|
|
85
|
+
export declare function LoadAnalyticsRealtimeOverview(): void;
|
|
86
|
+
export {};
|
|
87
|
+
//# sourceMappingURL=realtime-overview.component.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"realtime-overview.component.d.ts","sourceRoot":"","sources":["../../../../../src/AI/components/analytics/realtime/realtime-overview.component.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,OAAO,EACuB,YAAY,EACtC,MAAM,EACT,MAAM,eAAe,CAAC;AAEvB,OAAO,EAAE,oBAAoB,EAAE,MAAM,+BAA+B,CAAC;AAErE,OAAO,EAAE,WAAW,EAAE,MAAM,kCAAkC,CAAC;;AAU/D,UAAU,UAAU;IAChB,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;IACd,6CAA6C;IAC7C,aAAa,EAAE,MAAM,CAAC;IACtB,kFAAkF;IAClF,cAAc,EAAE,OAAO,CAAC;CAC3B;AAED,UAAU,YAAY;IAClB,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,EAAE,MAAM,CAAC;CACjB;AAED,UAAU,cAAc;IACpB,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;IACd,YAAY,EAAE,MAAM,CAAC;CACxB;AAED,UAAU,gBAAgB;IACtB,EAAE,EAAE,MAAM,CAAC;IACX,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,MAAM,CAAC;IACjB,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,MAAM,CAAC;IACf,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,EAAE,MAAM,CAAC;IACpB,6FAA6F;IAC7F,UAAU,EAAE,MAAM,CAAC;IACnB,YAAY,EAAE,MAAM,EAAE,CAAC;IACvB,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,MAAM,CAAC;CACpB;AAUD,qBAmea,kCAAmC,SAAQ,oBAAqB,YAAW,MAAM;IAC1F,OAAO,CAAC,UAAU,CAAQ;IAC1B,IACI,SAAS,CAAC,KAAK,EAAE,MAAM,EAI1B;IACD,IAAI,SAAS,IAAI,MAAM,CAA4B;IAEnD,2FAA2F;IACjF,eAAe,uBAA8B;IAEvD,OAAO,CAAC,WAAW,CAAS;IAC5B,OAAO,CAAC,GAAG,CAA6B;IACxC,OAAO,CAAC,OAAO,CAAwC;IAEhD,SAAS,UAAS;IAClB,QAAQ,EAAE,WAAW,EAAE,CAAM;IAC7B,WAAW,EAAE,UAAU,EAAE,CAAM;IAC/B,aAAa,EAAE,YAAY,EAAE,CAAM;IACnC,aAAa,SAAM;IACnB,eAAe,EAAE,cAAc,EAAE,CAAM;IACvC,cAAc,EAAE,gBAAgB,EAAE,CAAM;IAE/C,QAAQ,IAAI,IAAI;IAKhB,qDAAqD;IACxC,QAAQ,IAAI,OAAO,CAAC,IAAI,CAAC;IAkBtC,kFAAkF;IAC3E,WAAW,CAAC,SAAS,EAAE,MAAM,GAAG,IAAI;IAQ3C,OAAO,KAAK,cAAc,GAEzB;IAED,OAAO,CAAC,aAAa;IAwErB,OAAO,CAAC,gBAAgB;IAsCxB,OAAO,CAAC,kBAAkB;IA+B1B,OAAO,CAAC,oBAAoB;IAkB5B,OAAO,CAAC,mBAAmB;IAwB3B,yDAAyD;IAClD,YAAY,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM;IAI1C,oEAAoE;IACpE,IAAW,QAAQ,IAAI,MAAM,CAE5B;yCA7PQ,kCAAkC;2CAAlC,kCAAkC;CA8P9C;AAED,wBAAgB,6BAA6B,SAAoC"}
|