@memberjunction/ng-dashboards 6.2.0-edge.5 → 6.2.0-edge.7
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 +35 -0
- package/dist/AI/components/analytics/agent-runs/agent-run-analysis.component.js +2 -2
- package/dist/AI/components/analytics/agent-runs/agent-run-analysis.component.js.map +1 -1
- package/dist/AI/components/analytics/realtime/realtime-management.component.d.ts.map +1 -1
- package/dist/AI/components/analytics/realtime/realtime-management.component.js +3 -1
- package/dist/AI/components/analytics/realtime/realtime-management.component.js.map +1 -1
- package/dist/AI/components/analytics/realtime/realtime-overview.component.d.ts +1 -1
- package/dist/AI/components/analytics/realtime/realtime-overview.component.js +3 -3
- package/dist/AI/components/analytics/realtime/realtime-overview.component.js.map +1 -1
- package/dist/AI/components/analytics/realtime/realtime-session-data.d.ts +6 -4
- package/dist/AI/components/analytics/realtime/realtime-session-data.d.ts.map +1 -1
- package/dist/AI/components/analytics/realtime/realtime-session-data.js +8 -2
- package/dist/AI/components/analytics/realtime/realtime-session-data.js.map +1 -1
- package/dist/AI/components/autotagging/autotagging-pipeline-resource.component.d.ts +1 -1
- package/dist/AI/components/autotagging/autotagging-pipeline-resource.component.d.ts.map +1 -1
- package/dist/AI/components/autotagging/autotagging-pipeline-resource.component.js +21 -13
- package/dist/AI/components/autotagging/autotagging-pipeline-resource.component.js.map +1 -1
- package/dist/AI/components/autotagging/components/classify-item-grid.component.js +1 -1
- package/dist/AI/components/autotagging/components/classify-item-grid.component.js.map +1 -1
- package/dist/AI/components/autotagging/components/classify-org-context-editor.component.d.ts.map +1 -1
- package/dist/AI/components/autotagging/components/classify-org-context-editor.component.js +1 -0
- package/dist/AI/components/autotagging/components/classify-org-context-editor.component.js.map +1 -1
- package/dist/AI/components/autotagging/dialogs/source-type-form.dialog.component.d.ts.map +1 -1
- package/dist/AI/components/autotagging/dialogs/source-type-form.dialog.component.js +1 -0
- package/dist/AI/components/autotagging/dialogs/source-type-form.dialog.component.js.map +1 -1
- package/dist/AI/components/autotagging/tabs/sources-tab.component.d.ts.map +1 -1
- package/dist/AI/components/autotagging/tabs/sources-tab.component.js +1 -0
- package/dist/AI/components/autotagging/tabs/sources-tab.component.js.map +1 -1
- package/dist/AI/components/duplicates/duplicate-detection-resource.component.d.ts +7 -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 +210 -57
- package/dist/AI/components/duplicates/duplicate-detection-resource.component.js.map +1 -1
- package/dist/AI/components/duplicates/duplicate-detection-run-scope.d.ts +12 -11
- package/dist/AI/components/duplicates/duplicate-detection-run-scope.d.ts.map +1 -1
- package/dist/AI/components/duplicates/duplicate-detection-run-scope.js +15 -15
- package/dist/AI/components/duplicates/duplicate-detection-run-scope.js.map +1 -1
- package/dist/AI/components/execution-monitoring.component.d.ts.map +1 -1
- package/dist/AI/components/execution-monitoring.component.js +28 -16
- package/dist/AI/components/execution-monitoring.component.js.map +1 -1
- package/dist/AI/components/prompts/model-prompt-priority-matrix.component.d.ts +1 -0
- package/dist/AI/components/prompts/model-prompt-priority-matrix.component.d.ts.map +1 -1
- package/dist/AI/components/prompts/model-prompt-priority-matrix.component.js +32 -8
- package/dist/AI/components/prompts/model-prompt-priority-matrix.component.js.map +1 -1
- package/dist/AI/components/tags/tags-resource.component.d.ts +1 -1
- package/dist/AI/components/tags/tags-resource.component.d.ts.map +1 -1
- package/dist/AI/components/tags/tags-resource.component.js +18 -9
- package/dist/AI/components/tags/tags-resource.component.js.map +1 -1
- package/dist/AI/components/vectors/sensitive-fields.d.ts +9 -4
- package/dist/AI/components/vectors/sensitive-fields.d.ts.map +1 -1
- package/dist/AI/components/vectors/sensitive-fields.js +39 -14
- package/dist/AI/components/vectors/sensitive-fields.js.map +1 -1
- package/dist/AI/components/vectors/vector-document-rules.d.ts +13 -0
- package/dist/AI/components/vectors/vector-document-rules.d.ts.map +1 -1
- package/dist/AI/components/vectors/vector-document-rules.js +14 -0
- package/dist/AI/components/vectors/vector-document-rules.js.map +1 -1
- package/dist/AI/components/vectors/vector-management-resource.component.d.ts +34 -14
- package/dist/AI/components/vectors/vector-management-resource.component.d.ts.map +1 -1
- package/dist/AI/components/vectors/vector-management-resource.component.js +134 -51
- package/dist/AI/components/vectors/vector-management-resource.component.js.map +1 -1
- package/dist/AI/components/vectors/vector-store-selection.d.ts +32 -0
- package/dist/AI/components/vectors/vector-store-selection.d.ts.map +1 -0
- package/dist/AI/components/vectors/vector-store-selection.js +57 -0
- package/dist/AI/components/vectors/vector-store-selection.js.map +1 -0
- package/dist/AI/services/ai-instrumentation.service.d.ts.map +1 -1
- package/dist/AI/services/ai-instrumentation.service.js +4 -2
- package/dist/AI/services/ai-instrumentation.service.js.map +1 -1
- package/dist/Actions/action-result-code.d.ts +80 -0
- package/dist/Actions/action-result-code.d.ts.map +1 -0
- package/dist/Actions/action-result-code.js +163 -0
- package/dist/Actions/action-result-code.js.map +1 -0
- package/dist/Actions/components/actions-overview.component.d.ts +8 -0
- package/dist/Actions/components/actions-overview.component.d.ts.map +1 -1
- package/dist/Actions/components/actions-overview.component.js +12 -9
- package/dist/Actions/components/actions-overview.component.js.map +1 -1
- package/dist/Actions/components/execution-monitoring.component.d.ts +29 -9
- package/dist/Actions/components/execution-monitoring.component.d.ts.map +1 -1
- package/dist/Actions/components/execution-monitoring.component.js +65 -42
- package/dist/Actions/components/execution-monitoring.component.js.map +1 -1
- package/dist/Actions/components/explorer/action-card.component.d.ts.map +1 -1
- package/dist/Actions/components/explorer/action-card.component.js +5 -4
- package/dist/Actions/components/explorer/action-card.component.js.map +1 -1
- package/dist/ChiefOfStaff/chief-of-staff-agent-context.d.ts +198 -0
- package/dist/ChiefOfStaff/chief-of-staff-agent-context.d.ts.map +1 -0
- package/dist/ChiefOfStaff/chief-of-staff-agent-context.js +289 -0
- package/dist/ChiefOfStaff/chief-of-staff-agent-context.js.map +1 -0
- package/dist/ChiefOfStaff/chief-of-staff-approvals.component.d.ts +29 -0
- package/dist/ChiefOfStaff/chief-of-staff-approvals.component.d.ts.map +1 -0
- package/dist/ChiefOfStaff/chief-of-staff-approvals.component.js +666 -0
- package/dist/ChiefOfStaff/chief-of-staff-approvals.component.js.map +1 -0
- package/dist/ChiefOfStaff/chief-of-staff-governance.component.d.ts +56 -0
- package/dist/ChiefOfStaff/chief-of-staff-governance.component.d.ts.map +1 -0
- package/dist/ChiefOfStaff/chief-of-staff-governance.component.js +515 -0
- package/dist/ChiefOfStaff/chief-of-staff-governance.component.js.map +1 -0
- package/dist/ChiefOfStaff/chief-of-staff-live-refresh.d.ts +14 -0
- package/dist/ChiefOfStaff/chief-of-staff-live-refresh.d.ts.map +1 -0
- package/dist/ChiefOfStaff/chief-of-staff-live-refresh.js +39 -0
- package/dist/ChiefOfStaff/chief-of-staff-live-refresh.js.map +1 -0
- package/dist/ChiefOfStaff/chief-of-staff-overview.component.d.ts +17 -0
- package/dist/ChiefOfStaff/chief-of-staff-overview.component.d.ts.map +1 -0
- package/dist/ChiefOfStaff/chief-of-staff-overview.component.js +485 -0
- package/dist/ChiefOfStaff/chief-of-staff-overview.component.js.map +1 -0
- package/dist/ChiefOfStaff/chief-of-staff-page-base.d.ts +139 -0
- package/dist/ChiefOfStaff/chief-of-staff-page-base.d.ts.map +1 -0
- package/dist/ChiefOfStaff/chief-of-staff-page-base.js +602 -0
- package/dist/ChiefOfStaff/chief-of-staff-page-base.js.map +1 -0
- package/dist/ChiefOfStaff/index.d.ts +6 -0
- package/dist/ChiefOfStaff/index.d.ts.map +1 -0
- package/dist/ChiefOfStaff/index.js +6 -0
- package/dist/ChiefOfStaff/index.js.map +1 -0
- package/dist/Communication/communication-logs-resource.component.d.ts.map +1 -1
- package/dist/Communication/communication-logs-resource.component.js +2 -1
- package/dist/Communication/communication-logs-resource.component.js.map +1 -1
- package/dist/Communication/communication-monitor-resource.component.d.ts.map +1 -1
- package/dist/Communication/communication-monitor-resource.component.js +26 -21
- package/dist/Communication/communication-monitor-resource.component.js.map +1 -1
- package/dist/Communication/communication-runs-resource.component.d.ts.map +1 -1
- package/dist/Communication/communication-runs-resource.component.js +14 -13
- package/dist/Communication/communication-runs-resource.component.js.map +1 -1
- package/dist/ComponentStudio/component-studio-dashboard.component.d.ts.map +1 -1
- package/dist/ComponentStudio/component-studio-dashboard.component.js +1 -0
- package/dist/ComponentStudio/component-studio-dashboard.component.js.map +1 -1
- package/dist/ComponentStudio/components/artifact-selection-dialog.component.d.ts.map +1 -1
- package/dist/ComponentStudio/components/artifact-selection-dialog.component.js +2 -1
- package/dist/ComponentStudio/components/artifact-selection-dialog.component.js.map +1 -1
- package/dist/ComponentStudio/services/component-version.service.d.ts.map +1 -1
- package/dist/ComponentStudio/services/component-version.service.js +3 -0
- package/dist/ComponentStudio/services/component-version.service.js.map +1 -1
- package/dist/DashboardEditor/dashboard-editor.component.d.ts +17 -2
- package/dist/DashboardEditor/dashboard-editor.component.d.ts.map +1 -1
- package/dist/DashboardEditor/dashboard-editor.component.js +94 -43
- package/dist/DashboardEditor/dashboard-editor.component.js.map +1 -1
- package/dist/DataExplorer/data-explorer-dashboard.component.d.ts +45 -2
- package/dist/DataExplorer/data-explorer-dashboard.component.d.ts.map +1 -1
- package/dist/DataExplorer/data-explorer-dashboard.component.js +178 -55
- package/dist/DataExplorer/data-explorer-dashboard.component.js.map +1 -1
- package/dist/DataExplorer/models/explorer-state.interface.d.ts +2 -0
- package/dist/DataExplorer/models/explorer-state.interface.d.ts.map +1 -1
- package/dist/DataExplorer/models/explorer-state.interface.js.map +1 -1
- package/dist/DevTools/graphql-console.component.js +2 -2
- package/dist/DevTools/lazy-module-status.component.js +2 -2
- package/dist/FormBuilder/form-builder-resource.component.d.ts.map +1 -1
- package/dist/FormBuilder/form-builder-resource.component.js +5 -0
- package/dist/FormBuilder/form-builder-resource.component.js.map +1 -1
- package/dist/Integration/components/connections/connections.component.js +2 -2
- package/dist/Integration/services/integration-data.service.d.ts +1 -1
- package/dist/Integration/services/integration-data.service.d.ts.map +1 -1
- package/dist/Integration/services/integration-data.service.js +4 -3
- package/dist/Integration/services/integration-data.service.js.map +1 -1
- package/dist/Lists/components/lists-browse-resource.component.js +1 -1
- package/dist/Lists/components/lists-browse-resource.component.js.map +1 -1
- package/dist/Lists/components/lists-my-lists-resource.component.js +1 -1
- package/dist/Lists/components/lists-my-lists-resource.component.js.map +1 -1
- package/dist/LoginStudio/login-studio-resource.component.d.ts +10 -2
- package/dist/LoginStudio/login-studio-resource.component.d.ts.map +1 -1
- package/dist/LoginStudio/login-studio-resource.component.js +111 -77
- package/dist/LoginStudio/login-studio-resource.component.js.map +1 -1
- package/dist/MCP/mcp-dashboard.component.d.ts +24 -4
- package/dist/MCP/mcp-dashboard.component.d.ts.map +1 -1
- package/dist/MCP/mcp-dashboard.component.js +118 -65
- package/dist/MCP/mcp-dashboard.component.js.map +1 -1
- package/dist/PredictiveStudio/business-predictions.view-models.d.ts +1 -1
- package/dist/PredictiveStudio/business-predictions.view-models.d.ts.map +1 -1
- package/dist/PredictiveStudio/business-predictions.view-models.js +3 -3
- package/dist/PredictiveStudio/business-predictions.view-models.js.map +1 -1
- package/dist/PredictiveStudio/components/ps-experiments.component.d.ts +6 -63
- package/dist/PredictiveStudio/components/ps-experiments.component.d.ts.map +1 -1
- package/dist/PredictiveStudio/components/ps-experiments.component.js +257 -521
- package/dist/PredictiveStudio/components/ps-experiments.component.js.map +1 -1
- package/dist/PredictiveStudio/components/ps-pipeline-wizard.component.d.ts +0 -18
- package/dist/PredictiveStudio/components/ps-pipeline-wizard.component.d.ts.map +1 -1
- package/dist/PredictiveStudio/components/ps-pipeline-wizard.component.js +124 -251
- package/dist/PredictiveStudio/components/ps-pipeline-wizard.component.js.map +1 -1
- package/dist/PredictiveStudio/components/ps-pipelines.component.d.ts +5 -9
- package/dist/PredictiveStudio/components/ps-pipelines.component.d.ts.map +1 -1
- package/dist/PredictiveStudio/components/ps-pipelines.component.js +98 -130
- package/dist/PredictiveStudio/components/ps-pipelines.component.js.map +1 -1
- package/dist/PredictiveStudio/components/ps-predictions-grid.component.d.ts +53 -4
- package/dist/PredictiveStudio/components/ps-predictions-grid.component.d.ts.map +1 -1
- package/dist/PredictiveStudio/components/ps-predictions-grid.component.js +338 -326
- package/dist/PredictiveStudio/components/ps-predictions-grid.component.js.map +1 -1
- package/dist/PredictiveStudio/components/ps-row-drivers.component.d.ts +19 -0
- package/dist/PredictiveStudio/components/ps-row-drivers.component.d.ts.map +1 -0
- package/dist/PredictiveStudio/components/ps-row-drivers.component.js +85 -0
- package/dist/PredictiveStudio/components/ps-row-drivers.component.js.map +1 -0
- package/dist/PredictiveStudio/engine/predictive-studio.engine.d.ts +19 -1
- package/dist/PredictiveStudio/engine/predictive-studio.engine.d.ts.map +1 -1
- package/dist/PredictiveStudio/engine/predictive-studio.engine.js +52 -2
- package/dist/PredictiveStudio/engine/predictive-studio.engine.js.map +1 -1
- package/dist/PredictiveStudio/predictive-studio-agent-context.d.ts +3 -1
- package/dist/PredictiveStudio/predictive-studio-agent-context.d.ts.map +1 -1
- package/dist/PredictiveStudio/predictive-studio-agent-context.js +3 -0
- package/dist/PredictiveStudio/predictive-studio-agent-context.js.map +1 -1
- package/dist/PredictiveStudio/predictive-studio-score-history.service.d.ts +27 -4
- package/dist/PredictiveStudio/predictive-studio-score-history.service.d.ts.map +1 -1
- package/dist/PredictiveStudio/predictive-studio-score-history.service.js +94 -61
- package/dist/PredictiveStudio/predictive-studio-score-history.service.js.map +1 -1
- package/dist/PredictiveStudio/resources/ps-predictions-resource.component.d.ts +29 -5
- package/dist/PredictiveStudio/resources/ps-predictions-resource.component.d.ts.map +1 -1
- package/dist/PredictiveStudio/resources/ps-predictions-resource.component.js +186 -103
- package/dist/PredictiveStudio/resources/ps-predictions-resource.component.js.map +1 -1
- package/dist/PredictiveStudio/resources/ps-studio-resource.component.js +1 -1
- package/dist/PredictiveStudio/resources/ps-studio-resource.component.js.map +1 -1
- package/dist/QueryBrowser/query-browser-resource.component.d.ts +26 -0
- package/dist/QueryBrowser/query-browser-resource.component.d.ts.map +1 -1
- package/dist/QueryBrowser/query-browser-resource.component.js +375 -252
- package/dist/QueryBrowser/query-browser-resource.component.js.map +1 -1
- package/dist/UserRoutines/user-routines-resource.component.d.ts +8 -1
- package/dist/UserRoutines/user-routines-resource.component.d.ts.map +1 -1
- package/dist/UserRoutines/user-routines-resource.component.js +22 -4
- package/dist/UserRoutines/user-routines-resource.component.js.map +1 -1
- package/dist/VersionHistory/components/diff-resource.component.d.ts.map +1 -1
- package/dist/VersionHistory/components/diff-resource.component.js +1 -0
- package/dist/VersionHistory/components/diff-resource.component.js.map +1 -1
- package/dist/VideoStudio/components/vs-archetype-editor.component.d.ts +162 -0
- package/dist/VideoStudio/components/vs-archetype-editor.component.d.ts.map +1 -0
- package/dist/VideoStudio/components/vs-archetype-editor.component.js +1105 -0
- package/dist/VideoStudio/components/vs-archetype-editor.component.js.map +1 -0
- package/dist/VideoStudio/components/vs-audio-options.component.d.ts +27 -0
- package/dist/VideoStudio/components/vs-audio-options.component.d.ts.map +1 -0
- package/dist/VideoStudio/components/vs-audio-options.component.js +119 -0
- package/dist/VideoStudio/components/vs-audio-options.component.js.map +1 -0
- package/dist/VideoStudio/components/vs-copilot-panel.component.d.ts +105 -0
- package/dist/VideoStudio/components/vs-copilot-panel.component.d.ts.map +1 -0
- package/dist/VideoStudio/components/vs-copilot-panel.component.js +560 -0
- package/dist/VideoStudio/components/vs-copilot-panel.component.js.map +1 -0
- package/dist/VideoStudio/components/vs-production-brief.component.d.ts +163 -0
- package/dist/VideoStudio/components/vs-production-brief.component.d.ts.map +1 -0
- package/dist/VideoStudio/components/vs-production-brief.component.js +1054 -0
- package/dist/VideoStudio/components/vs-production-brief.component.js.map +1 -0
- package/dist/VideoStudio/components/vs-setup-health-card.component.d.ts +43 -0
- package/dist/VideoStudio/components/vs-setup-health-card.component.d.ts.map +1 -0
- package/dist/VideoStudio/components/vs-setup-health-card.component.js +412 -0
- package/dist/VideoStudio/components/vs-setup-health-card.component.js.map +1 -0
- package/dist/VideoStudio/components/vs-studio-slide-in.component.d.ts +73 -0
- package/dist/VideoStudio/components/vs-studio-slide-in.component.d.ts.map +1 -0
- package/dist/VideoStudio/components/vs-studio-slide-in.component.js +271 -0
- package/dist/VideoStudio/components/vs-studio-slide-in.component.js.map +1 -0
- package/dist/VideoStudio/index.d.ts +12 -0
- package/dist/VideoStudio/index.d.ts.map +1 -0
- package/dist/VideoStudio/index.js +12 -0
- package/dist/VideoStudio/index.js.map +1 -0
- package/dist/VideoStudio/resources/video-studio-archetypes-resource.component.d.ts +118 -0
- package/dist/VideoStudio/resources/video-studio-archetypes-resource.component.d.ts.map +1 -0
- package/dist/VideoStudio/resources/video-studio-archetypes-resource.component.js +964 -0
- package/dist/VideoStudio/resources/video-studio-archetypes-resource.component.js.map +1 -0
- package/dist/VideoStudio/resources/video-studio-brand-kits-resource.component.d.ts +70 -0
- package/dist/VideoStudio/resources/video-studio-brand-kits-resource.component.d.ts.map +1 -0
- package/dist/VideoStudio/resources/video-studio-brand-kits-resource.component.js +600 -0
- package/dist/VideoStudio/resources/video-studio-brand-kits-resource.component.js.map +1 -0
- package/dist/VideoStudio/resources/video-studio-productions-resource.component.d.ts +182 -0
- package/dist/VideoStudio/resources/video-studio-productions-resource.component.d.ts.map +1 -0
- package/dist/VideoStudio/resources/video-studio-productions-resource.component.js +1481 -0
- package/dist/VideoStudio/resources/video-studio-productions-resource.component.js.map +1 -0
- package/dist/VideoStudio/services/vs-studio-slide-in-state.service.d.ts +102 -0
- package/dist/VideoStudio/services/vs-studio-slide-in-state.service.d.ts.map +1 -0
- package/dist/VideoStudio/services/vs-studio-slide-in-state.service.js +240 -0
- package/dist/VideoStudio/services/vs-studio-slide-in-state.service.js.map +1 -0
- package/dist/VideoStudio/video-studio-agent-context.d.ts +495 -0
- package/dist/VideoStudio/video-studio-agent-context.d.ts.map +1 -0
- package/dist/VideoStudio/video-studio-agent-context.js +992 -0
- package/dist/VideoStudio/video-studio-agent-context.js.map +1 -0
- package/dist/ai-dashboards.module.d.ts +25 -21
- package/dist/ai-dashboards.module.d.ts.map +1 -1
- package/dist/ai-dashboards.module.js +25 -3
- package/dist/ai-dashboards.module.js.map +1 -1
- package/dist/module.d.ts +13 -12
- package/dist/module.d.ts.map +1 -1
- package/dist/module.js +7 -0
- package/dist/module.js.map +1 -1
- package/dist/public-api.d.ts +8 -0
- package/dist/public-api.d.ts.map +1 -1
- package/dist/public-api.js +10 -0
- package/dist/public-api.js.map +1 -1
- package/dist/shared/action-scheduled-job.d.ts.map +1 -1
- package/dist/shared/action-scheduled-job.js +2 -0
- package/dist/shared/action-scheduled-job.js.map +1 -1
- package/dist/video-studio-dashboards.module.d.ts +40 -0
- package/dist/video-studio-dashboards.module.d.ts.map +1 -0
- package/dist/video-studio-dashboards.module.js +159 -0
- package/dist/video-studio-dashboards.module.js.map +1 -0
- package/package.json +77 -71
- package/dist/PredictiveStudio/at-risk.view-models.d.ts +0 -120
- package/dist/PredictiveStudio/at-risk.view-models.d.ts.map +0 -1
- package/dist/PredictiveStudio/at-risk.view-models.js +0 -261
- package/dist/PredictiveStudio/at-risk.view-models.js.map +0 -1
- package/dist/PredictiveStudio/components/ps-confirm-modal.component.d.ts +0 -109
- package/dist/PredictiveStudio/components/ps-confirm-modal.component.d.ts.map +0 -1
- package/dist/PredictiveStudio/components/ps-confirm-modal.component.js +0 -323
- package/dist/PredictiveStudio/components/ps-confirm-modal.component.js.map +0 -1
- package/dist/PredictiveStudio/components/ps-run-experiment-modal.component.d.ts +0 -137
- package/dist/PredictiveStudio/components/ps-run-experiment-modal.component.d.ts.map +0 -1
- package/dist/PredictiveStudio/components/ps-run-experiment-modal.component.js +0 -826
- package/dist/PredictiveStudio/components/ps-run-experiment-modal.component.js.map +0 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"realtime-session-data.d.ts","sourceRoot":"","sources":["../../../../../src/AI/components/analytics/realtime/realtime-session-data.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAEH,OAAO,EAAE,iBAAiB,EAAW,MAAM,sBAAsB,CAAC;
|
|
1
|
+
{"version":3,"file":"realtime-session-data.d.ts","sourceRoot":"","sources":["../../../../../src/AI/components/analytics/realtime/realtime-session-data.ts"],"names":[],"mappings":"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"}
|
|
@@ -137,7 +137,7 @@ function buildRollup(session, channelMap, runMap, agentNameMap) {
|
|
|
137
137
|
DurationMs: durationMs,
|
|
138
138
|
IsResumed: session.LastSessionID != null,
|
|
139
139
|
CloseReason: closeReason,
|
|
140
|
-
IsJanitorClosed: closeReason === 'Janitor'
|
|
140
|
+
IsJanitorClosed: closeReason === 'Janitor' || closeReason === 'Idle' || closeReason === 'TimeLimit'
|
|
141
141
|
};
|
|
142
142
|
}
|
|
143
143
|
function parseSessionConfig(raw) {
|
|
@@ -167,7 +167,13 @@ export function BuildSessionStatusDisplay(status, closeReason) {
|
|
|
167
167
|
case 'Explicit':
|
|
168
168
|
return { Label: 'Closed', Title: 'Closed explicitly (user hang-up / close mutation)', Icon: 'fa-solid fa-circle-stop' };
|
|
169
169
|
case 'Janitor':
|
|
170
|
-
|
|
170
|
+
// Rows closed before TimeLimit and Idle existed keep 'Janitor' for every expiry close, so the title names both meanings.
|
|
171
|
+
return { Label: 'Closed · janitor', Title: 'Closed by the lifecycle janitor: an orphan from an earlier boot, or (for sessions closed before the idle and time-limit reasons existed) an idle or time limit close', Icon: 'fa-solid fa-broom' };
|
|
172
|
+
case 'TimeLimit':
|
|
173
|
+
// The janitor's deadline sweep or the browser's own deadline alarm (a claim the server verified): not always the janitor.
|
|
174
|
+
return { Label: 'Closed · time limit', Title: 'Closed because the session reached its time limit', Icon: 'fa-solid fa-hourglass-end' };
|
|
175
|
+
case 'Idle':
|
|
176
|
+
return { Label: 'Closed · idle — no activity', Title: 'Closed by the janitor staleness sweep after no activity', Icon: 'fa-solid fa-moon' };
|
|
171
177
|
case 'Shutdown':
|
|
172
178
|
return { Label: 'Closed · shutdown', Title: 'Closed by the host’s graceful shutdown drain', Icon: 'fa-solid fa-power-off' };
|
|
173
179
|
case 'Error':
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"realtime-session-data.js","sourceRoot":"","sources":["../../../../../src/AI/components/analytics/realtime/realtime-session-data.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAEH,OAAO,EAAqB,OAAO,EAAE,MAAM,sBAAsB,CAAC;AAClE,OAAO,EAAE,aAAa,EAAE,MAAM,wBAAwB,CAAC;AACvD,OAAO,EAAE,YAAY,EAAE,MAAM,gCAAgC,CAAC;AAwG9D,kBAAkB;AAElB,MAAM,cAAc,GAAG;IACnB,IAAI,EAAE,SAAS,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,QAAQ,EAAE,gBAAgB;IACtE,eAAe,EAAE,gBAAgB,EAAE,QAAQ,EAAE,cAAc,EAAE,UAAU,EAAE,aAAa,EAAE,gBAAgB;CAC3G,CAAC;AAEF,MAAM,sBAAsB,GAAG,CAAC,IAAI,EAAE,gBAAgB,EAAE,SAAS,EAAE,QAAQ,EAAE,gBAAgB,CAAC,CAAC;AAE/F,MAAM,kBAAkB,GAAG,CAAC,IAAI,EAAE,gBAAgB,EAAE,SAAS,EAAE,OAAO,EAAE,WAAW,EAAE,iBAAiB,EAAE,WAAW,CAAC,CAAC;AAErH,gDAAgD;AAChD,MAAM,aAAa,GAA2B;IAC1C,KAAK,EAAE,UAAU;IACjB,IAAI,EAAE,WAAW;IACjB,KAAK,EAAE,aAAa;CACvB,CAAC;AAEF,MAAM,UAAU,aAAa,CAAC,KAAa;IACvC,OAAO,aAAa,CAAC,KAAK,CAAC,IAAI,aAAa,CAAC,IAAI,CAAC,CAAC;AACvD,CAAC;AAED,8BAA8B;AAE9B;;;GAGG;AACH,MAAM,CAAC,KAAK,UAAU,2BAA2B,CAC7C,QAA2B,EAC3B,SAAiB;IAEjB,MAAM,QAAQ,GAAG,aAAa,CAAC,SAAS,CAAC,CAAC;IAC1C,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;IACvB,MAAM,WAAW,GAAG,IAAI,IAAI,CAAC,GAAG,GAAG,QAAQ,CAAC,CAAC;IAC7C,MAAM,iBAAiB,GAAG,IAAI,IAAI,CAAC,GAAG,GAAG,QAAQ,GAAG,CAAC,CAAC,CAAC;IAEvD,MAAM,EAAE,GAAG,OAAO,CAAC,oBAAoB,CAAC,QAAQ,CAAC,CAAC;IAClD,MAAM,CAAC,aAAa,EAAE,aAAa,EAAE,SAAS,CAAC,GAAG,MAAM,EAAE,CAAC,QAAQ,CAAC;QAChE;YACI,UAAU,EAAE,uBAAuB;YACnC,WAAW,EAAE,sBAAsB,iBAAiB,CAAC,WAAW,EAAE,kCAAkC;YACpG,MAAM,EAAE,cAAc;YACtB,OAAO,EAAE,qBAAqB;YAC9B,UAAU,EAAE,QAAQ;SACvB;QACD;YACI,UAAU,EAAE,+BAA+B;YAC3C,WAAW,EAAE,sBAAsB,iBAAiB,CAAC,WAAW,EAAE,2BAA2B;YAC7F,MAAM,EAAE,sBAAsB;YAC9B,UAAU,EAAE,QAAQ;SACvB;QACD;YACI,UAAU,EAAE,mBAAmB;YAC/B,WAAW,EAAE,gDAAgD,iBAAiB,CAAC,WAAW,EAAE,GAAG;YAC/F,MAAM,EAAE,kBAAkB;YAC1B,OAAO,EAAE,gBAAgB;YACzB,UAAU,EAAE,QAAQ;SACvB;KACJ,CAAC,CAAC;IAEH,MAAM,QAAQ,GAAG,CAAC,aAAa,EAAE,OAAO,CAAC,CAAC,CAAC,aAAa,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAA4B,CAAC;IAClG,MAAM,QAAQ,GAAG,CAAC,aAAa,EAAE,OAAO,CAAC,CAAC,CAAC,aAAa,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAmC,CAAC;IACzG,MAAM,IAAI,GAAG,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAA+B,CAAC;IAEzF,MAAM,YAAY,GAAG,MAAM,iBAAiB,EAAE,CAAC;IAC/C,MAAM,UAAU,GAAG,gBAAgB,CAAC,QAAQ,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,cAAc,CAAC,CAAC;IACrE,MAAM,MAAM,GAAG,gBAAgB,CAAC,IAAI,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,cAAc,CAAC,CAAC;IAE7D,MAAM,UAAU,GAAG,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,WAAW,CAAC,CAAC,EAAE,UAAU,EAAE,MAAM,EAAE,YAAY,CAAC,CAAC,CAAC;IAEvF,MAAM,aAAa,GAAG,UAAU,CAAC,MAAM,CACnC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,SAAS,IAAI,WAAW,IAAI,CAAC,CAAC,MAAM,CAAC,MAAM,KAAK,QAAQ,CAClE,CAAC;IACF,MAAM,UAAU,GAAG,UAAU,CAAC,MAAM,CAChC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,SAAS,IAAI,iBAAiB,IAAI,CAAC,CAAC,SAAS,GAAG,WAAW,CACrE,CAAC,MAAM,CAAC;IAET,OAAO;QACH,QAAQ,EAAE,aAAa;QACvB,WAAW,EAAE,UAAU;QACvB,uBAAuB,EAAE,UAAU;QACnC,WAAW,EAAE,WAAW;QACxB,QAAQ,EAAE,QAAQ;KACrB,CAAC;AACN,CAAC;AAED,kFAAkF;AAClF,KAAK,UAAU,iBAAiB;IAC5B,MAAM,GAAG,GAAG,IAAI,GAAG,EAAkB,CAAC;IACtC,IAAI,CAAC;QACD,MAAM,YAAY,CAAC,QAAQ,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;QAC1C,KAAK,MAAM,KAAK,IAAI,YAAY,CAAC,QAAQ,CAAC,MAAM,IAAI,EAAE,EAAE,CAAC;YACrD,GAAG,CAAC,GAAG,CAAC,aAAa,CAAC,KAAK,CAAC,EAAE,CAAC,EAAE,KAAK,CAAC,IAAI,IAAI,EAAE,CAAC,CAAC;QACvD,CAAC;IACL,CAAC;IAAC,MAAM,CAAC;QACL,gEAAgE;IACpE,CAAC;IACD,OAAO,GAAG,CAAC;AACf,CAAC;AAED,SAAS,gBAAgB,CAAI,IAAS,EAAE,KAAgC;IACpE,MAAM,GAAG,GAAG,IAAI,GAAG,EAAe,CAAC;IACnC,KAAK,MAAM,GAAG,IAAI,IAAI,EAAE,CAAC;QACrB,MAAM,GAAG,GAAG,KAAK,CAAC,GAAG,CAAC,CAAC;QACvB,IAAI,CAAC,GAAG;YAAE,SAAS;QACnB,MAAM,GAAG,GAAG,aAAa,CAAC,GAAG,CAAC,CAAC;QAC/B,MAAM,IAAI,GAAG,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;QAC1B,IAAI,IAAI,EAAE,CAAC;YACP,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QACnB,CAAC;aAAM,CAAC;YACJ,GAAG,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;QACxB,CAAC;IACL,CAAC;IACD,OAAO,GAAG,CAAC;AACf,CAAC;AAED,SAAS,WAAW,CAChB,OAA8B,EAC9B,UAAuD,EACvD,MAA+C,EAC/C,YAAiC;IAEjC,MAAM,GAAG,GAAG,aAAa,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;IACtC,MAAM,MAAM,GAAG,kBAAkB,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;IAClD,MAAM,WAAW,GAAG,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC;IAC1C,MAAM,aAAa,GAAG,MAAM,CAAC,YAAY,CAAC,CAAC,CAAC,aAAa,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;IAEtF,MAAM,aAAa,GAAG,WAAW,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,aAAa,IAAI,aAAa,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,aAAa,CAAC,CAAC;IACvG,MAAM,WAAW,GAAG,WAAW,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,eAAe,IAAI,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;IAClF,MAAM,SAAS,GAAG,WAAW,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,SAAS,IAAI,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;IAE1E,MAAM,YAAY,GAAG,KAAK,CAAC,IAAI,CAC3B,IAAI,GAAG,CAAC,CAAC,UAAU,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAC3E,CAAC;IAEF,MAAM,SAAS,GAAG,IAAI,IAAI,CAAC,OAAO,CAAC,cAAc,CAAC,CAAC;IACnD,MAAM,KAAK,GAAG,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC,OAAO,CAAC,YAAY,CAAC,CAAC;IAC7F,MAAM,UAAU,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,KAAK,CAAC,OAAO,EAAE,GAAG,SAAS,CAAC,OAAO,EAAE,CAAC,CAAC;IAEtE,MAAM,WAAW,GAAG,OAAO,CAAC,MAAM,KAAK,QAAQ,CAAC,CAAC,CAAC,OAAO,CAAC,WAAW,IAAI,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC;IAErF,MAAM,aAAa,GAAG,MAAM,CAAC,aAAa,IAAI,IAAI,CAAC;IACnD,OAAO;QACH,MAAM,EAAE,OAAO;QACf,aAAa,EAAE,aAAa;QAC5B,eAAe,EAAE,aAAa,CAAC,CAAC,CAAC,YAAY,CAAC,GAAG,CAAC,aAAa,CAAC,aAAa,CAAC,CAAC,IAAI,IAAI,CAAC,CAAC,CAAC,IAAI;QAC9F,YAAY,EAAE,YAAY;QAC1B,iBAAiB,EAAE,aAAa,CAAC,MAAM;QACvC,WAAW,EAAE,WAAW;QACxB,SAAS,EAAE,SAAS;QACpB,SAAS,EAAE,SAAS;QACpB,UAAU,EAAE,UAAU;QACtB,SAAS,EAAE,OAAO,CAAC,aAAa,IAAI,IAAI;QACxC,WAAW,EAAE,WAAW;QACxB,eAAe,EAAE,WAAW,KAAK,SAAS;KAC7C,CAAC;AACN,CAAC;AAED,SAAS,kBAAkB,CAAC,GAAkB;IAC1C,IAAI,CAAC,GAAG;QAAE,OAAO,EAAE,CAAC;IACpB,IAAI,CAAC;QACD,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAA8B,CAAC;QAC5D,OAAO,MAAM,IAAI,OAAO,MAAM,KAAK,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC;IAC9D,CAAC;IAAC,MAAM,CAAC;QACL,OAAO,EAAE,CAAC;IACd,CAAC;AACL,CAAC;AAYD;;;;GAIG;AACH,MAAM,UAAU,yBAAyB,CACrC,MAAuC,EACvC,WAA8C;IAE9C,IAAI,MAAM,KAAK,QAAQ,EAAE,CAAC;QACtB,OAAO,EAAE,KAAK,EAAE,QAAQ,EAAE,KAAK,EAAE,qBAAqB,EAAE,IAAI,EAAE,EAAE,EAAE,CAAC;IACvE,CAAC;IACD,IAAI,MAAM,KAAK,MAAM,EAAE,CAAC;QACpB,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,mCAAmC,EAAE,IAAI,EAAE,mBAAmB,EAAE,CAAC;IACpG,CAAC;IACD,QAAQ,WAAW,EAAE,CAAC;QAClB,KAAK,UAAU;YACX,OAAO,EAAE,KAAK,EAAE,QAAQ,EAAE,KAAK,EAAE,mDAAmD,EAAE,IAAI,EAAE,yBAAyB,EAAE,CAAC;QAC5H,KAAK,SAAS;YACV,OAAO,EAAE,KAAK,EAAE,kBAAkB,EAAE,KAAK,EAAE,iFAAiF,EAAE,IAAI,EAAE,mBAAmB,EAAE,CAAC;QAC9J,KAAK,UAAU;YACX,OAAO,EAAE,KAAK,EAAE,mBAAmB,EAAE,KAAK,EAAE,8CAA8C,EAAE,IAAI,EAAE,uBAAuB,EAAE,CAAC;QAChI,KAAK,OAAO;YACR,OAAO,EAAE,KAAK,EAAE,gBAAgB,EAAE,KAAK,EAAE,mCAAmC,EAAE,IAAI,EAAE,kCAAkC,EAAE,CAAC;QAC7H;YACI,OAAO,EAAE,KAAK,EAAE,kBAAkB,EAAE,KAAK,EAAE,yDAAyD,EAAE,IAAI,EAAE,6BAA6B,EAAE,CAAC;IACpJ,CAAC;AACL,CAAC;AAED,4FAA4F;AAC5F,MAAM,UAAU,qBAAqB,CAAC,EAAU;IAC5C,IAAI,EAAE,IAAI,CAAC;QAAE,OAAO,MAAM,CAAC;IAC3B,MAAM,YAAY,GAAG,IAAI,CAAC,KAAK,CAAC,EAAE,GAAG,IAAI,CAAC,CAAC;IAC3C,MAAM,OAAO,GAAG,YAAY,GAAG,EAAE,CAAC;IAClC,MAAM,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,YAAY,GAAG,EAAE,CAAC,GAAG,EAAE,CAAC;IACnD,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,YAAY,GAAG,IAAI,CAAC,CAAC;IAC9C,MAAM,GAAG,GAAG,CAAC,CAAS,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;IACzD,OAAO,KAAK,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,KAAK,IAAI,GAAG,CAAC,OAAO,CAAC,IAAI,GAAG,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,OAAO,IAAI,GAAG,CAAC,OAAO,CAAC,EAAE,CAAC;AACjG,CAAC;AAED,yCAAyC;AACzC,MAAM,UAAU,gBAAgB,CAAC,KAAa;IAC1C,IAAI,KAAK,IAAI,SAAS;QAAE,OAAO,CAAC,KAAK,GAAG,SAAS,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC;IACpE,IAAI,KAAK,IAAI,KAAK;QAAE,OAAO,CAAC,KAAK,GAAG,KAAK,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC;IAC5D,OAAO,KAAK,CAAC,QAAQ,EAAE,CAAC;AAC5B,CAAC;AAED,MAAM,UAAU,iBAAiB,CAAC,KAAa,EAAE,QAAQ,GAAG,CAAC;IACzD,IAAI,KAAK,KAAK,CAAC;QAAE,OAAO,OAAO,CAAC;IAChC,IAAI,KAAK,GAAG,IAAI,IAAI,QAAQ,GAAG,CAAC;QAAE,QAAQ,GAAG,CAAC,CAAC;IAC/C,OAAO,GAAG,GAAG,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;AACzC,CAAC;AAED,8DAA8D;AAC9D,MAAM,UAAU,kBAAkB,CAAC,IAAU;IACzC,MAAM,GAAG,GAAG,IAAI,IAAI,EAAE,CAAC;IACvB,MAAM,YAAY,GAAG,IAAI,IAAI,CAAC,GAAG,CAAC,WAAW,EAAE,EAAE,GAAG,CAAC,QAAQ,EAAE,EAAE,GAAG,CAAC,OAAO,EAAE,CAAC,CAAC;IAChF,MAAM,gBAAgB,GAAG,IAAI,IAAI,CAAC,YAAY,CAAC,OAAO,EAAE,GAAG,UAAU,CAAC,CAAC;IACvE,IAAI,IAAI,IAAI,YAAY,EAAE,CAAC;QACvB,OAAO,IAAI,CAAC,kBAAkB,CAAC,EAAE,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE,MAAM,EAAE,SAAS,EAAE,CAAC,CAAC,WAAW,EAAE,CAAC;IAC7F,CAAC;IACD,IAAI,IAAI,IAAI,gBAAgB,EAAE,CAAC;QAC3B,OAAO,WAAW,CAAC;IACvB,CAAC;IACD,OAAO,IAAI,CAAC,kBAAkB,CAAC,EAAE,EAAE,EAAE,KAAK,EAAE,SAAS,EAAE,GAAG,EAAE,SAAS,EAAE,CAAC,CAAC;AAC7E,CAAC;AAED,sFAAsF;AACtF,MAAM,UAAU,gBAAgB,CAAC,WAAmB;IAChD,MAAM,IAAI,GAAG,WAAW,CAAC,WAAW,EAAE,CAAC;IACvC,IAAI,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,IAAI,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC;QAAE,OAAO,8BAA8B,CAAC;IAC5F,IAAI,IAAI,CAAC,QAAQ,CAAC,YAAY,CAAC,IAAI,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC;QAAE,OAAO,wBAAwB,CAAC;IAC3F,IAAI,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,IAAI,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC;QAAE,OAAO,qBAAqB,CAAC;IACjF,IAAI,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC;QAAE,OAAO,qBAAqB,CAAC;IAC3D,IAAI,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC;QAAE,OAAO,mBAAmB,CAAC;IACvD,OAAO,kBAAkB,CAAC;AAC9B,CAAC","sourcesContent":["/**\n * @fileoverview Shared data layer for the Realtime Voice analytics sections.\n *\n * Loads `MJ: AI Agent Sessions`, their `MJ: AI Agent Session Channels` rows,\n * and the delegated `MJ: AI Agent Runs` (linked via `AgentSessionID`) in a\n * single batched `RunViews` call, then aggregates everything client-side into\n * per-session rollups (target agent, channel set, delegated-run count, token /\n * cost totals, duration, close cause from the persisted `CloseReason` column).\n *\n * Used by both `AnalyticsRealtimeOverviewComponent` (KPIs + charts) and\n * `AnalyticsRealtimeSessionsComponent` (management grid) so the two sections\n * share one query shape and one aggregation pass.\n */\n\nimport { IMetadataProvider, RunView } from '@memberjunction/core';\nimport { NormalizeUUID } from '@memberjunction/global';\nimport { AIEngineBase } from '@memberjunction/ai-engine-base';\n\n// ── Raw row shapes (ResultType: 'simple', narrowed Fields) ──\n\n/**\n * Why a session was closed, as stamped server-side by `SessionManager.CloseSession`\n * (mirrors `AIAgentSessionEntity.CloseReason`). `null` means a legacy row closed\n * before the column existed — rendered as \"unknown\".\n */\nexport type RealtimeSessionCloseReason = 'Error' | 'Explicit' | 'Janitor' | 'Shutdown';\n\nexport interface RealtimeSessionRecord {\n ID: string;\n AgentID: string;\n Agent: string | null;\n UserID: string;\n User: string;\n Status: 'Active' | 'Idle' | 'Closed';\n ConversationID: string | null;\n LastSessionID: string | null;\n HostInstanceID: string | null;\n Config: string | null;\n LastActiveAt: string;\n ClosedAt: string | null;\n CloseReason: RealtimeSessionCloseReason | null;\n __mj_CreatedAt: string;\n}\n\nexport interface RealtimeSessionChannelRecord {\n ID: string;\n AgentSessionID: string;\n Channel: string;\n Status: string;\n __mj_CreatedAt: string;\n}\n\nexport interface RealtimeSessionRunRecord {\n ID: string;\n AgentSessionID: string | null;\n AgentID: string;\n Agent: string | null;\n TotalCost: number | null;\n TotalTokensUsed: number | null;\n StartedAt: string;\n}\n\n/** Shape of the run ids the realtime voice stack persists in `AIAgentSession.Config`. */\ninterface RealtimeSessionConfigJson {\n targetAgentID?: string;\n coAgentRunID?: string;\n promptRunID?: string;\n pendingFeedbackRunID?: string;\n}\n\n// ── Aggregated shapes ──\n\n/** One session with everything the admin pages render, pre-aggregated. */\nexport interface RealtimeSessionRollup {\n Record: RealtimeSessionRecord;\n /** Parsed from Config JSON; null when the session carries no target. */\n TargetAgentID: string | null;\n /** Resolved client-side against AIEngineBase's cached agents. */\n TargetAgentName: string | null;\n /** Distinct channel names attached to the session. */\n ChannelNames: string[];\n /** Delegated AIAgentRuns (linked runs excluding the co-agent observability run). */\n DelegatedRunCount: number;\n /** Token total across all linked agent runs (co-agent + delegated). */\n TotalTokens: number;\n /** Cost total across all linked agent runs (co-agent + delegated). */\n TotalCost: number;\n StartedAt: Date;\n /** __mj_CreatedAt → (ClosedAt ?? LastActiveAt). 0 when not derivable. */\n DurationMs: number;\n /** Session resumed from a prior one (LastSessionID set). */\n IsResumed: boolean;\n /**\n * Close cause persisted by the server (`AIAgentSession.CloseReason`).\n * `null` either means the session is still open, or it's a legacy row\n * closed before the column existed (\"unknown\" in the UI).\n */\n CloseReason: RealtimeSessionCloseReason | null;\n /**\n * `CloseReason === 'Janitor'` — the session was force-closed by the\n * lifecycle janitor (startup orphan recovery or staleness sweep) rather\n * than ended explicitly. Derived from the real column; the old\n * ClosedAt−LastActiveAt timing heuristic has been retired, so legacy\n * NULL-reason rows report `false` here and \"unknown\" in the UI.\n */\n IsJanitorClosed: boolean;\n}\n\n/** Result of one load pass — current-window rollups plus trend context. */\nexport interface RealtimeSessionsDataset {\n /** Sessions started in the current window (or still open), newest first. */\n Sessions: RealtimeSessionRollup[];\n /** Every loaded session rollup (covers 2× the window, for trend math). */\n AllSessions: RealtimeSessionRollup[];\n /** Count of sessions started in the prior (equal-length) window. */\n PriorWindowSessionCount: number;\n WindowStart: Date;\n WindowMs: number;\n}\n\n// ── Constants ──\n\nconst SESSION_FIELDS = [\n 'ID', 'AgentID', 'Agent', 'UserID', 'User', 'Status', 'ConversationID',\n 'LastSessionID', 'HostInstanceID', 'Config', 'LastActiveAt', 'ClosedAt', 'CloseReason', '__mj_CreatedAt'\n];\n\nconst SESSION_CHANNEL_FIELDS = ['ID', 'AgentSessionID', 'Channel', 'Status', '__mj_CreatedAt'];\n\nconst SESSION_RUN_FIELDS = ['ID', 'AgentSessionID', 'AgentID', 'Agent', 'TotalCost', 'TotalTokensUsed', 'StartedAt'];\n\n/** Supported time-range keys → milliseconds. */\nconst TIME_RANGE_MS: Record<string, number> = {\n '24h': 86_400_000,\n '7d': 604_800_000,\n '30d': 2_592_000_000\n};\n\nexport function TimeRangeToMs(range: string): number {\n return TIME_RANGE_MS[range] ?? TIME_RANGE_MS['7d'];\n}\n\n// ── Loading + aggregation ──\n\n/**\n * Loads sessions (2× window for trend), their channels, and linked agent runs\n * via one batched RunViews call, then folds them into per-session rollups.\n */\nexport async function LoadRealtimeSessionsDataset(\n provider: IMetadataProvider,\n timeRange: string\n): Promise<RealtimeSessionsDataset> {\n const windowMs = TimeRangeToMs(timeRange);\n const now = Date.now();\n const windowStart = new Date(now - windowMs);\n const doubleWindowStart = new Date(now - windowMs * 2);\n\n const rv = RunView.FromMetadataProvider(provider);\n const [sessionResult, channelResult, runResult] = await rv.RunViews([\n {\n EntityName: 'MJ: AI Agent Sessions',\n ExtraFilter: `__mj_CreatedAt >= '${doubleWindowStart.toISOString()}' OR Status IN ('Active','Idle')`,\n Fields: SESSION_FIELDS,\n OrderBy: '__mj_CreatedAt DESC',\n ResultType: 'simple'\n },\n {\n EntityName: 'MJ: AI Agent Session Channels',\n ExtraFilter: `__mj_CreatedAt >= '${doubleWindowStart.toISOString()}' OR Status = 'Connected'`,\n Fields: SESSION_CHANNEL_FIELDS,\n ResultType: 'simple'\n },\n {\n EntityName: 'MJ: AI Agent Runs',\n ExtraFilter: `AgentSessionID IS NOT NULL AND StartedAt >= '${doubleWindowStart.toISOString()}'`,\n Fields: SESSION_RUN_FIELDS,\n OrderBy: 'StartedAt DESC',\n ResultType: 'simple'\n }\n ]);\n\n const sessions = (sessionResult?.Success ? sessionResult.Results : []) as RealtimeSessionRecord[];\n const channels = (channelResult?.Success ? channelResult.Results : []) as RealtimeSessionChannelRecord[];\n const runs = (runResult?.Success ? runResult.Results : []) as RealtimeSessionRunRecord[];\n\n const agentNameMap = await buildAgentNameMap();\n const channelMap = groupBySessionId(channels, c => c.AgentSessionID);\n const runMap = groupBySessionId(runs, r => r.AgentSessionID);\n\n const allRollups = sessions.map(s => buildRollup(s, channelMap, runMap, agentNameMap));\n\n const currentWindow = allRollups.filter(\n r => r.StartedAt >= windowStart || r.Record.Status !== 'Closed'\n );\n const priorCount = allRollups.filter(\n r => r.StartedAt >= doubleWindowStart && r.StartedAt < windowStart\n ).length;\n\n return {\n Sessions: currentWindow,\n AllSessions: allRollups,\n PriorWindowSessionCount: priorCount,\n WindowStart: windowStart,\n WindowMs: windowMs\n };\n}\n\n/** Loads AIEngineBase (no-op when cached) and maps normalized agent ID → name. */\nasync function buildAgentNameMap(): Promise<Map<string, string>> {\n const map = new Map<string, string>();\n try {\n await AIEngineBase.Instance.Config(false);\n for (const agent of AIEngineBase.Instance.Agents ?? []) {\n map.set(NormalizeUUID(agent.ID), agent.Name ?? '');\n }\n } catch {\n // Tolerate engine load failures — target names degrade to null.\n }\n return map;\n}\n\nfunction groupBySessionId<T>(rows: T[], keyOf: (row: T) => string | null): Map<string, T[]> {\n const map = new Map<string, T[]>();\n for (const row of rows) {\n const raw = keyOf(row);\n if (!raw) continue;\n const key = NormalizeUUID(raw);\n const list = map.get(key);\n if (list) {\n list.push(row);\n } else {\n map.set(key, [row]);\n }\n }\n return map;\n}\n\nfunction buildRollup(\n session: RealtimeSessionRecord,\n channelMap: Map<string, RealtimeSessionChannelRecord[]>,\n runMap: Map<string, RealtimeSessionRunRecord[]>,\n agentNameMap: Map<string, string>\n): RealtimeSessionRollup {\n const key = NormalizeUUID(session.ID);\n const config = parseSessionConfig(session.Config);\n const sessionRuns = runMap.get(key) ?? [];\n const coAgentRunKey = config.coAgentRunID ? NormalizeUUID(config.coAgentRunID) : null;\n\n const delegatedRuns = sessionRuns.filter(r => !coAgentRunKey || NormalizeUUID(r.ID) !== coAgentRunKey);\n const totalTokens = sessionRuns.reduce((s, r) => s + (r.TotalTokensUsed ?? 0), 0);\n const totalCost = sessionRuns.reduce((s, r) => s + (r.TotalCost ?? 0), 0);\n\n const channelNames = Array.from(\n new Set((channelMap.get(key) ?? []).map(c => c.Channel).filter(Boolean))\n );\n\n const startedAt = new Date(session.__mj_CreatedAt);\n const endAt = session.ClosedAt ? new Date(session.ClosedAt) : new Date(session.LastActiveAt);\n const durationMs = Math.max(0, endAt.getTime() - startedAt.getTime());\n\n const closeReason = session.Status === 'Closed' ? session.CloseReason ?? null : null;\n\n const targetAgentID = config.targetAgentID ?? null;\n return {\n Record: session,\n TargetAgentID: targetAgentID,\n TargetAgentName: targetAgentID ? agentNameMap.get(NormalizeUUID(targetAgentID)) ?? null : null,\n ChannelNames: channelNames,\n DelegatedRunCount: delegatedRuns.length,\n TotalTokens: totalTokens,\n TotalCost: totalCost,\n StartedAt: startedAt,\n DurationMs: durationMs,\n IsResumed: session.LastSessionID != null,\n CloseReason: closeReason,\n IsJanitorClosed: closeReason === 'Janitor'\n };\n}\n\nfunction parseSessionConfig(raw: string | null): RealtimeSessionConfigJson {\n if (!raw) return {};\n try {\n const parsed = JSON.parse(raw) as RealtimeSessionConfigJson;\n return parsed && typeof parsed === 'object' ? parsed : {};\n } catch {\n return {};\n }\n}\n\n// ── Formatting helpers (shared by both sections) ──\n\n/** How a session's status pill should render — label, hover title, and Font Awesome icon. */\nexport interface SessionStatusDisplay {\n Label: string;\n Title: string;\n /** Icon class for the pill; empty for `Active` (the template renders the pulsing live dot instead). */\n Icon: string;\n}\n\n/**\n * Builds the status-pill presentation for a session from its `Status` and persisted\n * `CloseReason`. `Closed` sessions surface the real close cause; a `null` reason\n * (legacy rows written before the column existed) renders as \"unknown\".\n */\nexport function BuildSessionStatusDisplay(\n status: RealtimeSessionRecord['Status'],\n closeReason: RealtimeSessionCloseReason | null\n): SessionStatusDisplay {\n if (status === 'Active') {\n return { Label: 'Active', Title: 'Live duplex session', Icon: '' };\n }\n if (status === 'Idle') {\n return { Label: 'Idle', Title: 'Holding — past the idle threshold', Icon: 'fa-solid fa-pause' };\n }\n switch (closeReason) {\n case 'Explicit':\n return { Label: 'Closed', Title: 'Closed explicitly (user hang-up / close mutation)', Icon: 'fa-solid fa-circle-stop' };\n case 'Janitor':\n return { Label: 'Closed · janitor', Title: 'Force-closed by the lifecycle janitor (staleness sweep / orphan reconciliation)', Icon: 'fa-solid fa-broom' };\n case 'Shutdown':\n return { Label: 'Closed · shutdown', Title: 'Closed by the host’s graceful shutdown drain', Icon: 'fa-solid fa-power-off' };\n case 'Error':\n return { Label: 'Closed · error', Title: 'Closed by a failure-path teardown', Icon: 'fa-solid fa-triangle-exclamation' };\n default:\n return { Label: 'Closed · unknown', Title: 'Closed before close-cause tracking existed (legacy row)', Icon: 'fa-solid fa-circle-question' };\n }\n}\n\n/** Formats a duration as m:ss (or h:mm:ss past the hour) like the mockups' 4:51 / 11:18. */\nexport function FormatSessionDuration(ms: number): string {\n if (ms <= 0) return '0:00';\n const totalSeconds = Math.floor(ms / 1000);\n const seconds = totalSeconds % 60;\n const minutes = Math.floor(totalSeconds / 60) % 60;\n const hours = Math.floor(totalSeconds / 3600);\n const pad = (n: number) => n.toString().padStart(2, '0');\n return hours > 0 ? `${hours}:${pad(minutes)}:${pad(seconds)}` : `${minutes}:${pad(seconds)}`;\n}\n\n/** 4200 → \"4.2K\", 1_250_000 → \"1.3M\". */\nexport function FormatTokenCount(value: number): string {\n if (value >= 1_000_000) return (value / 1_000_000).toFixed(1) + 'M';\n if (value >= 1_000) return (value / 1_000).toFixed(1) + 'K';\n return value.toString();\n}\n\nexport function FormatSessionCost(value: number, decimals = 2): string {\n if (value === 0) return '$0.00';\n if (value < 0.01 && decimals < 4) decimals = 4;\n return '$' + value.toFixed(decimals);\n}\n\n/** Today → \"3:40 pm\", yesterday → \"Yesterday\", else \"M/d\". */\nexport function FormatSessionStart(date: Date): string {\n const now = new Date();\n const startOfToday = new Date(now.getFullYear(), now.getMonth(), now.getDate());\n const startOfYesterday = new Date(startOfToday.getTime() - 86_400_000);\n if (date >= startOfToday) {\n return date.toLocaleTimeString([], { hour: 'numeric', minute: '2-digit' }).toLowerCase();\n }\n if (date >= startOfYesterday) {\n return 'Yesterday';\n }\n return date.toLocaleDateString([], { month: 'numeric', day: 'numeric' });\n}\n\n/** Font Awesome icon for a channel name (keyword-mapped, with a generic fallback). */\nexport function ChannelIconClass(channelName: string): string {\n const name = channelName.toLowerCase();\n if (name.includes('voice') || name.includes('audio')) return 'fa-solid fa-microphone-lines';\n if (name.includes('whiteboard') || name.includes('board')) return 'fa-solid fa-chalkboard';\n if (name.includes('text') || name.includes('chat')) return 'fa-solid fa-comment';\n if (name.includes('control')) return 'fa-solid fa-sliders';\n if (name.includes('video')) return 'fa-solid fa-video';\n return 'fa-solid fa-plug';\n}\n"]}
|
|
1
|
+
{"version":3,"file":"realtime-session-data.js","sourceRoot":"","sources":["../../../../../src/AI/components/analytics/realtime/realtime-session-data.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * @fileoverview Shared data layer for the Realtime Voice analytics sections.\n *\n * Loads `MJ: AI Agent Sessions`, their `MJ: AI Agent Session Channels` rows,\n * and the delegated `MJ: AI Agent Runs` (linked via `AgentSessionID`) in a\n * single batched `RunViews` call, then aggregates everything client-side into\n * per-session rollups (target agent, channel set, delegated-run count, token /\n * cost totals, duration, close cause from the persisted `CloseReason` column).\n *\n * Used by both `AnalyticsRealtimeOverviewComponent` (KPIs + charts) and\n * `AnalyticsRealtimeSessionsComponent` (management grid) so the two sections\n * share one query shape and one aggregation pass.\n */\n\nimport { IMetadataProvider, RunView } from '@memberjunction/core';\nimport type { MJAIAgentSessionEntity } from '@memberjunction/core-entities';\nimport { NormalizeUUID } from '@memberjunction/global';\nimport { AIEngineBase } from '@memberjunction/ai-engine-base';\n\n// ── Raw row shapes (ResultType: 'simple', narrowed Fields) ──\n\n/**\n * Why a session was closed, as stamped server-side by `SessionManager.CloseSession`\n * (mirrors `AIAgentSessionEntity.CloseReason`). `null` means a legacy row closed\n * before the column existed — rendered as \"unknown\".\n */\nexport type RealtimeSessionCloseReason = NonNullable<MJAIAgentSessionEntity['CloseReason']>;\n\nexport interface RealtimeSessionRecord {\n ID: string;\n AgentID: string;\n Agent: string | null;\n UserID: string;\n User: string;\n Status: 'Active' | 'Idle' | 'Closed';\n ConversationID: string | null;\n LastSessionID: string | null;\n HostInstanceID: string | null;\n Config: string | null;\n LastActiveAt: string;\n ClosedAt: string | null;\n CloseReason: RealtimeSessionCloseReason | null;\n __mj_CreatedAt: string;\n}\n\nexport interface RealtimeSessionChannelRecord {\n ID: string;\n AgentSessionID: string;\n Channel: string;\n Status: string;\n __mj_CreatedAt: string;\n}\n\nexport interface RealtimeSessionRunRecord {\n ID: string;\n AgentSessionID: string | null;\n AgentID: string;\n Agent: string | null;\n TotalCost: number | null;\n TotalTokensUsed: number | null;\n StartedAt: string;\n}\n\n/** Shape of the run ids the realtime voice stack persists in `AIAgentSession.Config`. */\ninterface RealtimeSessionConfigJson {\n targetAgentID?: string;\n coAgentRunID?: string;\n promptRunID?: string;\n pendingFeedbackRunID?: string;\n}\n\n// ── Aggregated shapes ──\n\n/** One session with everything the admin pages render, pre-aggregated. */\nexport interface RealtimeSessionRollup {\n Record: RealtimeSessionRecord;\n /** Parsed from Config JSON; null when the session carries no target. */\n TargetAgentID: string | null;\n /** Resolved client-side against AIEngineBase's cached agents. */\n TargetAgentName: string | null;\n /** Distinct channel names attached to the session. */\n ChannelNames: string[];\n /** Delegated AIAgentRuns (linked runs excluding the co-agent observability run). */\n DelegatedRunCount: number;\n /** Token total across all linked agent runs (co-agent + delegated). */\n TotalTokens: number;\n /** Cost total across all linked agent runs (co-agent + delegated). */\n TotalCost: number;\n StartedAt: Date;\n /** __mj_CreatedAt → (ClosedAt ?? LastActiveAt). 0 when not derivable. */\n DurationMs: number;\n /** Session resumed from a prior one (LastSessionID set). */\n IsResumed: boolean;\n /**\n * Close cause persisted by the server (`AIAgentSession.CloseReason`).\n * `null` either means the session is still open, or it's a legacy row\n * closed before the column existed (\"unknown\" in the UI).\n */\n CloseReason: RealtimeSessionCloseReason | null;\n /**\n * The session was closed by the system rather than ended by a person: `Idle` (the janitor's staleness sweep),\n * `TimeLimit` (the janitor's deadline sweep, or the browser's deadline alarm once the server verified the claim) or\n * `Janitor` (crash orphan reconciled at startup, and every expiry close recorded before `Idle` and `TimeLimit`\n * existed). All three count toward the \"System closes\" KPI. Derived from the real column; the old\n * ClosedAt−LastActiveAt timing heuristic has been retired, so legacy\n * NULL-reason rows report `false` here and \"unknown\" in the UI.\n */\n IsJanitorClosed: boolean;\n}\n\n/** Result of one load pass — current-window rollups plus trend context. */\nexport interface RealtimeSessionsDataset {\n /** Sessions started in the current window (or still open), newest first. */\n Sessions: RealtimeSessionRollup[];\n /** Every loaded session rollup (covers 2× the window, for trend math). */\n AllSessions: RealtimeSessionRollup[];\n /** Count of sessions started in the prior (equal-length) window. */\n PriorWindowSessionCount: number;\n WindowStart: Date;\n WindowMs: number;\n}\n\n// ── Constants ──\n\nconst SESSION_FIELDS = [\n 'ID', 'AgentID', 'Agent', 'UserID', 'User', 'Status', 'ConversationID',\n 'LastSessionID', 'HostInstanceID', 'Config', 'LastActiveAt', 'ClosedAt', 'CloseReason', '__mj_CreatedAt'\n];\n\nconst SESSION_CHANNEL_FIELDS = ['ID', 'AgentSessionID', 'Channel', 'Status', '__mj_CreatedAt'];\n\nconst SESSION_RUN_FIELDS = ['ID', 'AgentSessionID', 'AgentID', 'Agent', 'TotalCost', 'TotalTokensUsed', 'StartedAt'];\n\n/** Supported time-range keys → milliseconds. */\nconst TIME_RANGE_MS: Record<string, number> = {\n '24h': 86_400_000,\n '7d': 604_800_000,\n '30d': 2_592_000_000\n};\n\nexport function TimeRangeToMs(range: string): number {\n return TIME_RANGE_MS[range] ?? TIME_RANGE_MS['7d'];\n}\n\n// ── Loading + aggregation ──\n\n/**\n * Loads sessions (2× window for trend), their channels, and linked agent runs\n * via one batched RunViews call, then folds them into per-session rollups.\n */\nexport async function LoadRealtimeSessionsDataset(\n provider: IMetadataProvider,\n timeRange: string\n): Promise<RealtimeSessionsDataset> {\n const windowMs = TimeRangeToMs(timeRange);\n const now = Date.now();\n const windowStart = new Date(now - windowMs);\n const doubleWindowStart = new Date(now - windowMs * 2);\n\n const rv = RunView.FromMetadataProvider(provider);\n const [sessionResult, channelResult, runResult] = await rv.RunViews([\n {\n EntityName: 'MJ: AI Agent Sessions',\n ExtraFilter: `__mj_CreatedAt >= '${doubleWindowStart.toISOString()}' OR Status IN ('Active','Idle')`,\n Fields: SESSION_FIELDS,\n OrderBy: '__mj_CreatedAt DESC',\n ResultType: 'simple'\n },\n {\n EntityName: 'MJ: AI Agent Session Channels',\n ExtraFilter: `__mj_CreatedAt >= '${doubleWindowStart.toISOString()}' OR Status = 'Connected'`,\n Fields: SESSION_CHANNEL_FIELDS,\n ResultType: 'simple'\n },\n {\n EntityName: 'MJ: AI Agent Runs',\n ExtraFilter: `AgentSessionID IS NOT NULL AND StartedAt >= '${doubleWindowStart.toISOString()}'`,\n Fields: SESSION_RUN_FIELDS,\n OrderBy: 'StartedAt DESC',\n ResultType: 'simple'\n }\n ]);\n\n const sessions = (sessionResult?.Success ? sessionResult.Results : []) as RealtimeSessionRecord[];\n const channels = (channelResult?.Success ? channelResult.Results : []) as RealtimeSessionChannelRecord[];\n const runs = (runResult?.Success ? runResult.Results : []) as RealtimeSessionRunRecord[];\n\n const agentNameMap = await buildAgentNameMap();\n const channelMap = groupBySessionId(channels, c => c.AgentSessionID);\n const runMap = groupBySessionId(runs, r => r.AgentSessionID);\n\n const allRollups = sessions.map(s => buildRollup(s, channelMap, runMap, agentNameMap));\n\n const currentWindow = allRollups.filter(\n r => r.StartedAt >= windowStart || r.Record.Status !== 'Closed'\n );\n const priorCount = allRollups.filter(\n r => r.StartedAt >= doubleWindowStart && r.StartedAt < windowStart\n ).length;\n\n return {\n Sessions: currentWindow,\n AllSessions: allRollups,\n PriorWindowSessionCount: priorCount,\n WindowStart: windowStart,\n WindowMs: windowMs\n };\n}\n\n/** Loads AIEngineBase (no-op when cached) and maps normalized agent ID → name. */\nasync function buildAgentNameMap(): Promise<Map<string, string>> {\n const map = new Map<string, string>();\n try {\n await AIEngineBase.Instance.Config(false);\n for (const agent of AIEngineBase.Instance.Agents ?? []) {\n map.set(NormalizeUUID(agent.ID), agent.Name ?? '');\n }\n } catch {\n // Tolerate engine load failures — target names degrade to null.\n }\n return map;\n}\n\nfunction groupBySessionId<T>(rows: T[], keyOf: (row: T) => string | null): Map<string, T[]> {\n const map = new Map<string, T[]>();\n for (const row of rows) {\n const raw = keyOf(row);\n if (!raw) continue;\n const key = NormalizeUUID(raw);\n const list = map.get(key);\n if (list) {\n list.push(row);\n } else {\n map.set(key, [row]);\n }\n }\n return map;\n}\n\nfunction buildRollup(\n session: RealtimeSessionRecord,\n channelMap: Map<string, RealtimeSessionChannelRecord[]>,\n runMap: Map<string, RealtimeSessionRunRecord[]>,\n agentNameMap: Map<string, string>\n): RealtimeSessionRollup {\n const key = NormalizeUUID(session.ID);\n const config = parseSessionConfig(session.Config);\n const sessionRuns = runMap.get(key) ?? [];\n const coAgentRunKey = config.coAgentRunID ? NormalizeUUID(config.coAgentRunID) : null;\n\n const delegatedRuns = sessionRuns.filter(r => !coAgentRunKey || NormalizeUUID(r.ID) !== coAgentRunKey);\n const totalTokens = sessionRuns.reduce((s, r) => s + (r.TotalTokensUsed ?? 0), 0);\n const totalCost = sessionRuns.reduce((s, r) => s + (r.TotalCost ?? 0), 0);\n\n const channelNames = Array.from(\n new Set((channelMap.get(key) ?? []).map(c => c.Channel).filter(Boolean))\n );\n\n const startedAt = new Date(session.__mj_CreatedAt);\n const endAt = session.ClosedAt ? new Date(session.ClosedAt) : new Date(session.LastActiveAt);\n const durationMs = Math.max(0, endAt.getTime() - startedAt.getTime());\n\n const closeReason = session.Status === 'Closed' ? session.CloseReason ?? null : null;\n\n const targetAgentID = config.targetAgentID ?? null;\n return {\n Record: session,\n TargetAgentID: targetAgentID,\n TargetAgentName: targetAgentID ? agentNameMap.get(NormalizeUUID(targetAgentID)) ?? null : null,\n ChannelNames: channelNames,\n DelegatedRunCount: delegatedRuns.length,\n TotalTokens: totalTokens,\n TotalCost: totalCost,\n StartedAt: startedAt,\n DurationMs: durationMs,\n IsResumed: session.LastSessionID != null,\n CloseReason: closeReason,\n IsJanitorClosed: closeReason === 'Janitor' || closeReason === 'Idle' || closeReason === 'TimeLimit'\n };\n}\n\nfunction parseSessionConfig(raw: string | null): RealtimeSessionConfigJson {\n if (!raw) return {};\n try {\n const parsed = JSON.parse(raw) as RealtimeSessionConfigJson;\n return parsed && typeof parsed === 'object' ? parsed : {};\n } catch {\n return {};\n }\n}\n\n// ── Formatting helpers (shared by both sections) ──\n\n/** How a session's status pill should render — label, hover title, and Font Awesome icon. */\nexport interface SessionStatusDisplay {\n Label: string;\n Title: string;\n /** Icon class for the pill; empty for `Active` (the template renders the pulsing live dot instead). */\n Icon: string;\n}\n\n/**\n * Builds the status-pill presentation for a session from its `Status` and persisted\n * `CloseReason`. `Closed` sessions surface the real close cause; a `null` reason\n * (legacy rows written before the column existed) renders as \"unknown\".\n */\nexport function BuildSessionStatusDisplay(\n status: RealtimeSessionRecord['Status'],\n closeReason: RealtimeSessionCloseReason | null\n): SessionStatusDisplay {\n if (status === 'Active') {\n return { Label: 'Active', Title: 'Live duplex session', Icon: '' };\n }\n if (status === 'Idle') {\n return { Label: 'Idle', Title: 'Holding — past the idle threshold', Icon: 'fa-solid fa-pause' };\n }\n switch (closeReason) {\n case 'Explicit':\n return { Label: 'Closed', Title: 'Closed explicitly (user hang-up / close mutation)', Icon: 'fa-solid fa-circle-stop' };\n case 'Janitor':\n // Rows closed before TimeLimit and Idle existed keep 'Janitor' for every expiry close, so the title names both meanings.\n return { Label: 'Closed · janitor', Title: 'Closed by the lifecycle janitor: an orphan from an earlier boot, or (for sessions closed before the idle and time-limit reasons existed) an idle or time limit close', Icon: 'fa-solid fa-broom' };\n case 'TimeLimit':\n // The janitor's deadline sweep or the browser's own deadline alarm (a claim the server verified): not always the janitor.\n return { Label: 'Closed · time limit', Title: 'Closed because the session reached its time limit', Icon: 'fa-solid fa-hourglass-end' };\n case 'Idle':\n return { Label: 'Closed · idle — no activity', Title: 'Closed by the janitor staleness sweep after no activity', Icon: 'fa-solid fa-moon' };\n case 'Shutdown':\n return { Label: 'Closed · shutdown', Title: 'Closed by the host’s graceful shutdown drain', Icon: 'fa-solid fa-power-off' };\n case 'Error':\n return { Label: 'Closed · error', Title: 'Closed by a failure-path teardown', Icon: 'fa-solid fa-triangle-exclamation' };\n default:\n return { Label: 'Closed · unknown', Title: 'Closed before close-cause tracking existed (legacy row)', Icon: 'fa-solid fa-circle-question' };\n }\n}\n\n/** Formats a duration as m:ss (or h:mm:ss past the hour) like the mockups' 4:51 / 11:18. */\nexport function FormatSessionDuration(ms: number): string {\n if (ms <= 0) return '0:00';\n const totalSeconds = Math.floor(ms / 1000);\n const seconds = totalSeconds % 60;\n const minutes = Math.floor(totalSeconds / 60) % 60;\n const hours = Math.floor(totalSeconds / 3600);\n const pad = (n: number) => n.toString().padStart(2, '0');\n return hours > 0 ? `${hours}:${pad(minutes)}:${pad(seconds)}` : `${minutes}:${pad(seconds)}`;\n}\n\n/** 4200 → \"4.2K\", 1_250_000 → \"1.3M\". */\nexport function FormatTokenCount(value: number): string {\n if (value >= 1_000_000) return (value / 1_000_000).toFixed(1) + 'M';\n if (value >= 1_000) return (value / 1_000).toFixed(1) + 'K';\n return value.toString();\n}\n\nexport function FormatSessionCost(value: number, decimals = 2): string {\n if (value === 0) return '$0.00';\n if (value < 0.01 && decimals < 4) decimals = 4;\n return '$' + value.toFixed(decimals);\n}\n\n/** Today → \"3:40 pm\", yesterday → \"Yesterday\", else \"M/d\". */\nexport function FormatSessionStart(date: Date): string {\n const now = new Date();\n const startOfToday = new Date(now.getFullYear(), now.getMonth(), now.getDate());\n const startOfYesterday = new Date(startOfToday.getTime() - 86_400_000);\n if (date >= startOfToday) {\n return date.toLocaleTimeString([], { hour: 'numeric', minute: '2-digit' }).toLowerCase();\n }\n if (date >= startOfYesterday) {\n return 'Yesterday';\n }\n return date.toLocaleDateString([], { month: 'numeric', day: 'numeric' });\n}\n\n/** Font Awesome icon for a channel name (keyword-mapped, with a generic fallback). */\nexport function ChannelIconClass(channelName: string): string {\n const name = channelName.toLowerCase();\n if (name.includes('voice') || name.includes('audio')) return 'fa-solid fa-microphone-lines';\n if (name.includes('whiteboard') || name.includes('board')) return 'fa-solid fa-chalkboard';\n if (name.includes('text') || name.includes('chat')) return 'fa-solid fa-comment';\n if (name.includes('control')) return 'fa-solid fa-sliders';\n if (name.includes('video')) return 'fa-solid fa-video';\n return 'fa-solid fa-plug';\n}\n"]}
|
|
@@ -440,7 +440,7 @@ export declare class AutotaggingPipelineResourceComponent extends BaseResourceCo
|
|
|
440
440
|
OpenRecordFromItem(item: ContentItemDetail): void;
|
|
441
441
|
/** Cache: EntityRecordDocument ID → RecordID */
|
|
442
442
|
private entityRecordDocCache;
|
|
443
|
-
/** Load ERD RecordIDs for entity-sourced content items */
|
|
443
|
+
/** Load ERD RecordIDs for entity-sourced content items referenced by loaded items */
|
|
444
444
|
private loadEntityRecordDocCache;
|
|
445
445
|
private getAllWeightedTagsForItem;
|
|
446
446
|
/**
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"autotagging-pipeline-resource.component.d.ts","sourceRoot":"","sources":["../../../../src/AI/components/autotagging/autotagging-pipeline-resource.component.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"autotagging-pipeline-resource.component.d.ts","sourceRoot":"","sources":["../../../../src/AI/components/autotagging/autotagging-pipeline-resource.component.ts"],"names":[],"mappings":"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"}
|
|
@@ -580,7 +580,8 @@ let AutotaggingPipelineResourceComponent = class AutotaggingPipelineResourceComp
|
|
|
580
580
|
]);
|
|
581
581
|
this.loadClassifyPreferences();
|
|
582
582
|
this.applyIncomingConfiguration();
|
|
583
|
-
await Promise.all([this.LoadPipelineData(), this.
|
|
583
|
+
await Promise.all([this.LoadPipelineData(), this.loadInboxPendingCount(), this.loadHealthPendingCount()]);
|
|
584
|
+
await this.loadEntityRecordDocCache();
|
|
584
585
|
this.tabDataLoaded.add('pipeline');
|
|
585
586
|
this.buildNavItems();
|
|
586
587
|
// If user preferences or incoming config set a non-pipeline initial tab,
|
|
@@ -887,9 +888,9 @@ let AutotaggingPipelineResourceComponent = class AutotaggingPipelineResourceComp
|
|
|
887
888
|
EntityName: 'MJ: Tag Suggestions',
|
|
888
889
|
ExtraFilter: `Status='Pending' AND Reason NOT IN ('MergeCandidate','LowUsage','WideNode')`,
|
|
889
890
|
Fields: ['ID'],
|
|
890
|
-
ResultType: '
|
|
891
|
+
ResultType: 'count_only',
|
|
891
892
|
});
|
|
892
|
-
this.InboxPendingCount = result.Success ? result.TotalRowCount : 0;
|
|
893
|
+
this.InboxPendingCount = result.Success ? result.TotalRowCount ?? 0 : 0;
|
|
893
894
|
}
|
|
894
895
|
/**
|
|
895
896
|
* Fired by the Inbox tab after a suggestion is approved/merged/rejected.
|
|
@@ -915,9 +916,9 @@ let AutotaggingPipelineResourceComponent = class AutotaggingPipelineResourceComp
|
|
|
915
916
|
EntityName: 'MJ: Tag Suggestions',
|
|
916
917
|
ExtraFilter: `Status='Pending' AND Reason IN ('MergeCandidate','LowUsage','WideNode')`,
|
|
917
918
|
Fields: ['ID'],
|
|
918
|
-
ResultType: '
|
|
919
|
+
ResultType: 'count_only',
|
|
919
920
|
});
|
|
920
|
-
this.HealthPendingCount = result.Success ? result.TotalRowCount : 0;
|
|
921
|
+
this.HealthPendingCount = result.Success ? result.TotalRowCount ?? 0 : 0;
|
|
921
922
|
}
|
|
922
923
|
/**
|
|
923
924
|
* Fired by the Health tab after a merge/deprecate/dismiss. Refreshes the
|
|
@@ -1009,8 +1010,8 @@ let AutotaggingPipelineResourceComponent = class AutotaggingPipelineResourceComp
|
|
|
1009
1010
|
const [sourcesResult, itemsResult, runsResult, tagsResult, sourceTypesResult, contentTypesResult] = await rv.RunViews([
|
|
1010
1011
|
{ EntityName: 'MJ: Content Sources', OrderBy: 'Name', ResultType: 'simple' },
|
|
1011
1012
|
{ EntityName: 'MJ: Content Items', OrderBy: '__mj_UpdatedAt DESC', MaxRows: this.contentItemsPageSize, StartRow: 0, ResultType: 'simple', Fields: ['ID', 'Name', 'Description', 'ContentSourceID', 'ContentSourceTypeID', 'ContentSource', 'ContentSourceType', 'ContentType', 'ContentFileType', 'URL', 'Text', 'Checksum', 'EntityRecordDocumentID', '__mj_CreatedAt', '__mj_UpdatedAt'] },
|
|
1012
|
-
{ EntityName: 'MJ: Content Process Runs', OrderBy: 'StartTime DESC', MaxRows: 100, ResultType: 'simple' },
|
|
1013
|
-
{ EntityName: 'MJ: Content Item Tags', ResultType: 'simple', Fields: ['ID', 'ItemID', 'Item', 'Tag', 'TagID', 'Weight', '__mj_CreatedAt'] },
|
|
1013
|
+
{ EntityName: 'MJ: Content Process Runs', OrderBy: 'StartTime DESC', MaxRows: 100, ResultType: 'simple', Fields: ['ID', 'SourceID', 'Source', 'Status', 'StartTime', 'EndTime', 'ProcessedItems', 'ErrorCount'] },
|
|
1014
|
+
{ EntityName: 'MJ: Content Item Tags', MaxRows: 2000, ResultType: 'simple', Fields: ['ID', 'ItemID', 'Item', 'Tag', 'TagID', 'Weight', '__mj_CreatedAt'] },
|
|
1014
1015
|
{ EntityName: 'MJ: Content Source Types', ResultType: 'simple' },
|
|
1015
1016
|
{ EntityName: 'MJ: Content Types', ResultType: 'simple' }
|
|
1016
1017
|
]);
|
|
@@ -1022,9 +1023,9 @@ let AutotaggingPipelineResourceComponent = class AutotaggingPipelineResourceComp
|
|
|
1022
1023
|
this.contentTypesRaw = contentTypesResult.Success ? contentTypesResult.Results : [];
|
|
1023
1024
|
// Use TotalRowCount for accurate KPI/badge counts (the Results arrays are
|
|
1024
1025
|
// capped by MaxRows for feed display, but TotalRowCount reflects the full DB count)
|
|
1025
|
-
this.totalContentItemCount = itemsResult.Success ? itemsResult.TotalRowCount : 0;
|
|
1026
|
-
this.totalContentTagCount = tagsResult.Success ? tagsResult.TotalRowCount : 0;
|
|
1027
|
-
this.totalRunHistoryCount = runsResult.Success ? runsResult.TotalRowCount : 0;
|
|
1026
|
+
this.totalContentItemCount = itemsResult.Success ? itemsResult.TotalRowCount ?? 0 : 0;
|
|
1027
|
+
this.totalContentTagCount = tagsResult.Success ? tagsResult.TotalRowCount ?? 0 : 0;
|
|
1028
|
+
this.totalRunHistoryCount = runsResult.Success ? runsResult.TotalRowCount ?? 0 : 0;
|
|
1028
1029
|
// Load Scheduled Job entities referenced by sources so cron descriptions are available
|
|
1029
1030
|
await this.loadScheduledJobsForSources();
|
|
1030
1031
|
this.buildNavItems();
|
|
@@ -1230,7 +1231,7 @@ let AutotaggingPipelineResourceComponent = class AutotaggingPipelineResourceComp
|
|
|
1230
1231
|
});
|
|
1231
1232
|
if (result.Success) {
|
|
1232
1233
|
this.contentRunsRaw = result.Results;
|
|
1233
|
-
this.totalRunHistoryCount = result.TotalRowCount;
|
|
1234
|
+
this.totalRunHistoryCount = result.TotalRowCount ?? 0;
|
|
1234
1235
|
}
|
|
1235
1236
|
}
|
|
1236
1237
|
}
|
|
@@ -1973,13 +1974,20 @@ let AutotaggingPipelineResourceComponent = class AutotaggingPipelineResourceComp
|
|
|
1973
1974
|
}
|
|
1974
1975
|
/** Cache: EntityRecordDocument ID → RecordID */
|
|
1975
1976
|
entityRecordDocCache = new Map();
|
|
1976
|
-
/** Load ERD RecordIDs for entity-sourced content items */
|
|
1977
|
+
/** Load ERD RecordIDs for entity-sourced content items referenced by loaded items */
|
|
1977
1978
|
async loadEntityRecordDocCache() {
|
|
1978
|
-
|
|
1979
|
+
const erdIds = Array.from(new Set(this.contentItemsRaw
|
|
1980
|
+
.map(item => item['EntityRecordDocumentID'])
|
|
1981
|
+
.filter((id) => !!id)
|
|
1982
|
+
.map(id => NormalizeUUID(id))
|
|
1983
|
+
.filter(id => !this.entityRecordDocCache.has(id))));
|
|
1984
|
+
if (erdIds.length === 0)
|
|
1979
1985
|
return;
|
|
1980
1986
|
const rv = RunView.FromMetadataProvider(this.ProviderToUse);
|
|
1987
|
+
const filter = erdIds.map(id => `'${id.replace(/'/g, "''")}'`).join(',');
|
|
1981
1988
|
const result = await rv.RunView({
|
|
1982
1989
|
EntityName: 'MJ: Entity Record Documents',
|
|
1990
|
+
ExtraFilter: `ID IN (${filter})`,
|
|
1983
1991
|
ResultType: 'simple',
|
|
1984
1992
|
Fields: ['ID', 'RecordID'],
|
|
1985
1993
|
});
|