@memberjunction/ng-dashboards 6.2.0-edge.6 → 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 +23 -16
- 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.js +6 -6
- 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.map +1 -1
- package/dist/AI/components/duplicates/duplicate-detection-resource.component.js +1 -0
- package/dist/AI/components/duplicates/duplicate-detection-resource.component.js.map +1 -1
- package/dist/AI/components/prompts/model-prompt-priority-matrix.component.js +2 -2
- package/dist/AI/components/tags/tags-resource.component.d.ts.map +1 -1
- package/dist/AI/components/tags/tags-resource.component.js +3 -2
- package/dist/AI/components/tags/tags-resource.component.js.map +1 -1
- package/dist/AI/components/vectors/vector-management-resource.component.d.ts.map +1 -1
- package/dist/AI/components/vectors/vector-management-resource.component.js +12 -6
- package/dist/AI/components/vectors/vector-management-resource.component.js.map +1 -1
- 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 +92 -130
- package/dist/ChiefOfStaff/chief-of-staff-agent-context.d.ts.map +1 -1
- package/dist/ChiefOfStaff/chief-of-staff-agent-context.js +189 -274
- package/dist/ChiefOfStaff/chief-of-staff-agent-context.js.map +1 -1
- 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 +4 -1
- package/dist/ChiefOfStaff/index.d.ts.map +1 -1
- package/dist/ChiefOfStaff/index.js +4 -1
- package/dist/ChiefOfStaff/index.js.map +1 -1
- package/dist/Communication/communication-monitor-resource.component.js +3 -3
- package/dist/Communication/communication-monitor-resource.component.js.map +1 -1
- package/dist/Communication/communication-runs-resource.component.js +3 -3
- 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/DataExplorer/data-explorer-dashboard.component.d.ts +21 -2
- package/dist/DataExplorer/data-explorer-dashboard.component.d.ts.map +1 -1
- package/dist/DataExplorer/data-explorer-dashboard.component.js +32 -5
- package/dist/DataExplorer/data-explorer-dashboard.component.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.map +1 -1
- package/dist/LoginStudio/login-studio-resource.component.js +1 -0
- package/dist/LoginStudio/login-studio-resource.component.js.map +1 -1
- package/dist/PredictiveStudio/components/ps-experiments.component.d.ts.map +1 -1
- package/dist/PredictiveStudio/components/ps-experiments.component.js +1 -0
- package/dist/PredictiveStudio/components/ps-experiments.component.js.map +1 -1
- package/dist/PredictiveStudio/components/ps-pipeline-wizard.component.js +2 -2
- package/dist/PredictiveStudio/components/ps-predictions-grid.component.d.ts.map +1 -1
- package/dist/PredictiveStudio/components/ps-predictions-grid.component.js +3 -0
- package/dist/PredictiveStudio/components/ps-predictions-grid.component.js.map +1 -1
- package/dist/PredictiveStudio/engine/predictive-studio.engine.d.ts.map +1 -1
- package/dist/PredictiveStudio/engine/predictive-studio.engine.js +1 -0
- package/dist/PredictiveStudio/engine/predictive-studio.engine.js.map +1 -1
- package/dist/PredictiveStudio/resources/ps-predictions-resource.component.d.ts.map +1 -1
- package/dist/PredictiveStudio/resources/ps-predictions-resource.component.js +1 -0
- package/dist/PredictiveStudio/resources/ps-predictions-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 -22
- package/dist/ai-dashboards.module.d.ts.map +1 -1
- package/dist/ai-dashboards.module.js +23 -7
- 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 +7 -1
- package/dist/public-api.d.ts.map +1 -1
- package/dist/public-api.js +9 -2
- 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/ChiefOfStaff/chief-of-staff-dashboard.component.d.ts +0 -195
- package/dist/ChiefOfStaff/chief-of-staff-dashboard.component.d.ts.map +0 -1
- package/dist/ChiefOfStaff/chief-of-staff-dashboard.component.js +0 -2910
- package/dist/ChiefOfStaff/chief-of-staff-dashboard.component.js.map +0 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"execution-monitoring.component.js","sourceRoot":"","sources":["../../../src/Actions/components/execution-monitoring.component.ts","../../../src/Actions/components/execution-monitoring.component.html"],"names":[],"mappings":"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","sourcesContent":["import { Component, OnInit, OnDestroy, ChangeDetectorRef } from '@angular/core';\nimport { CompositeKey, RunView, LogError } from '@memberjunction/core';\nimport { MJActionExecutionLogEntity, MJActionEntity, ResourceData } from '@memberjunction/core-entities';\nimport { RegisterClass , UUIDsEqual } from '@memberjunction/global';\nimport { BaseResourceComponent, NavigationService } from '@memberjunction/ng-shared';\nimport { FilterFieldConfig } from '@memberjunction/ng-ui-components';\nimport { Subject, BehaviorSubject, combineLatest } from 'rxjs';\nimport { debounceTime, takeUntil, distinctUntilChanged } from 'rxjs/operators';\nimport { ValidateEnumParam, BoundNameList } from '../../shared/agent-tool-validation';\nimport { FindByIdOrError, FindByIdOrNameOrError } from '../agent-tool-helpers';\n\n/** The two agent-tool modes for the execution monitor: the log list, or a single\n * selected execution. Drives the mode-scoped tool re-registration. */\ntype MonitorToolMode = 'list' | 'detail';\n\n/** A tool definition in the shape NavigationService.SetAgentClientTools accepts. */\ninterface MonitorAgentTool {\n Name: string;\n Description: string;\n ParameterSchema: Record<string, unknown>;\n Handler: (params: Record<string, unknown>) => Promise<unknown>;\n}\ninterface ExecutionMetrics {\n totalExecutions: number;\n successfulExecutions: number;\n failedExecutions: number;\n averageDuration: number;\n executionsToday: number;\n executionsThisWeek: number;\n currentlyRunning: number;\n}\n\ninterface ExecutionTrend {\n date: string;\n successful: number;\n failed: number;\n total: number;\n}\n\n/**\n * Execution Monitoring Resource - displays action execution logs and metrics\n */\n@RegisterClass(BaseResourceComponent, 'ActionsMonitorResource')\n@Component({\n standalone: false,\n selector: 'mj-execution-monitoring',\n templateUrl: './execution-monitoring.component.html',\n styleUrls: ['./execution-monitoring.component.css']\n})\nexport class ActionExecutionMonitoringComponent extends BaseResourceComponent implements OnInit, OnDestroy {\n public isLoading = true;\n public Executions: MJActionExecutionLogEntity[] = [];\n\n /** @deprecated Use {@link Executions}. */\n public get executions(): MJActionExecutionLogEntity[] {\n return this.Executions;\n }\n /** @deprecated Use {@link Executions}. */\n public set executions(value: MJActionExecutionLogEntity[]) {\n this.Executions = value;\n }\n public FilteredExecutions: MJActionExecutionLogEntity[] = [];\n\n /** @deprecated Use {@link FilteredExecutions}. */\n public get filteredExecutions(): MJActionExecutionLogEntity[] {\n return this.FilteredExecutions;\n }\n /** @deprecated Use {@link FilteredExecutions}. */\n public set filteredExecutions(value: MJActionExecutionLogEntity[]) {\n this.FilteredExecutions = value;\n }\n public Actions: Map<string, MJActionEntity> = new Map();\n\n /** @deprecated Use {@link Actions}. */\n public get actions(): Map<string, MJActionEntity> {\n return this.Actions;\n }\n /** @deprecated Use {@link Actions}. */\n public set actions(value: Map<string, MJActionEntity>) {\n this.Actions = value;\n }\n \n public Metrics: ExecutionMetrics = {\n totalExecutions: 0,\n successfulExecutions: 0,\n failedExecutions: 0,\n averageDuration: 0,\n executionsToday: 0,\n executionsThisWeek: 0,\n currentlyRunning: 0\n };\n\n /** @deprecated Use {@link Metrics}. */\n public get metrics(): ExecutionMetrics {\n return this.Metrics;\n }\n /** @deprecated Use {@link Metrics}. */\n public set metrics(value: ExecutionMetrics) {\n this.Metrics = value;\n }\n\n public ExecutionTrends: ExecutionTrend[] = [];\n\n /** @deprecated Use {@link ExecutionTrends}. */\n public get executionTrends(): ExecutionTrend[] {\n return this.ExecutionTrends;\n }\n /** @deprecated Use {@link ExecutionTrends}. */\n public set executionTrends(value: ExecutionTrend[]) {\n this.ExecutionTrends = value;\n }\n \n public SearchTerm$ = new BehaviorSubject<string>('');\n\n /** @deprecated Use {@link SearchTerm$}. */\n public get searchTerm$() {\n return this.SearchTerm$;\n }\n /** @deprecated Use {@link SearchTerm$}. */\n public set searchTerm$(value) {\n this.SearchTerm$ = value;\n }\n public SelectedResult$ = new BehaviorSubject<string>('all');\n\n /** @deprecated Use {@link SelectedResult$}. */\n public get selectedResult$() {\n return this.SelectedResult$;\n }\n /** @deprecated Use {@link SelectedResult$}. */\n public set selectedResult$(value) {\n this.SelectedResult$ = value;\n }\n public SelectedTimeRange$ = new BehaviorSubject<string>('7days');\n\n /** @deprecated Use {@link SelectedTimeRange$}. */\n public get selectedTimeRange$() {\n return this.SelectedTimeRange$;\n }\n /** @deprecated Use {@link SelectedTimeRange$}. */\n public set selectedTimeRange$(value) {\n this.SelectedTimeRange$ = value;\n }\n public SelectedAction$ = new BehaviorSubject<string>('all');\n\n /** @deprecated Use {@link SelectedAction$}. */\n public get selectedAction$() {\n return this.SelectedAction$;\n }\n /** @deprecated Use {@link SelectedAction$}. */\n public set selectedAction$(value) {\n this.SelectedAction$ = value;\n }\n\n public TimeRangeOptions = [\n { text: 'Last 24 Hours', value: '24hours' },\n { text: 'Last 7 Days', value: '7days' },\n { text: 'Last 30 Days', value: '30days' },\n { text: 'Last 90 Days', value: '90days' }\n ];\n\n /** @deprecated Use {@link TimeRangeOptions}. */\n public get timeRangeOptions() {\n return this.TimeRangeOptions;\n }\n /** @deprecated Use {@link TimeRangeOptions}. */\n public set timeRangeOptions(value) {\n this.TimeRangeOptions = value;\n }\n\n public ResultOptions = [\n { text: 'All Results', value: 'all' },\n { text: 'Success', value: 'Success' },\n { text: 'Failed', value: 'Failed' },\n { text: 'Error', value: 'Error' },\n { text: 'Running', value: 'Running' }\n ];\n\n /** @deprecated Use {@link ResultOptions}. */\n public get resultOptions() {\n return this.ResultOptions;\n }\n /** @deprecated Use {@link ResultOptions}. */\n public set resultOptions(value) {\n this.ResultOptions = value;\n }\n\n public ActionOptions: Array<{text: string; value: string}> = [\n { text: 'All Actions', value: 'all' }\n ];\n\n /** @deprecated Use {@link ActionOptions}. */\n public get actionOptions(): Array<{text: string; value: string}> {\n return this.ActionOptions;\n }\n /** @deprecated Use {@link ActionOptions}. */\n public set actionOptions(value: Array<{text: string; value: string}>) {\n this.ActionOptions = value;\n }\n\n /** Allowed result-filter values (mirrors `resultOptions`). */\n private readonly resultFilterValues = ['all', 'Success', 'Failed', 'Error', 'Running'] as const;\n /** Allowed time-range values (mirrors `timeRangeOptions`). */\n private readonly timeRangeValues = ['24hours', '7days', '30days', '90days'] as const;\n\n /** The currently selected execution (set when the agent/user opens one) — surfaced in context + drives the tool mode. */\n private selectedExecution: MJActionExecutionLogEntity | null = null;\n /**\n * Tracks which mode's tool set is currently registered so {@link syncAgentToolsForMode}\n * only calls into NavigationService on the list↔detail transition, not on every filter change.\n */\n private lastRegisteredToolMode: MonitorToolMode | null = null;\n\n protected override destroy$ = new Subject<void>();\n\n constructor(private cdr: ChangeDetectorRef) {\n super();\n }\n\n ngOnInit(): void {\n super.ngOnInit();\n this.setupFilters();\n this.syncAgentToolsForMode();\n this.loadData();\n }\n\n ngOnDestroy(): void {\n super.ngOnDestroy();\n this.destroy$.next();\n this.destroy$.complete();\n }\n\n private setupFilters(): void {\n combineLatest([\n this.SearchTerm$.pipe(debounceTime(300), distinctUntilChanged()),\n this.SelectedResult$.pipe(distinctUntilChanged()),\n this.SelectedTimeRange$.pipe(distinctUntilChanged()),\n this.SelectedAction$.pipe(distinctUntilChanged())\n ]).pipe(\n takeUntil(this.destroy$)\n ).subscribe(() => {\n this.applyFilters();\n this.syncAgentToolsForMode();\n this.publishAgentContext();\n });\n }\n\n // ================================================================\n // AI Agent context + client tools\n //\n // 🚨 SAFETY BOUNDARY: This is the Actions app. Executing an action has real\n // side effects. This monitor is VIEW-ONLY run history — it exposes only\n // search / filter / sort / navigate / select / refresh tools to the agent. No\n // action execution (RunAction / re-run) is wired anywhere. Every Handler is\n // tolerant (never throws; returns a structured failure on bad input).\n //\n // MODE-SCOPED TOOLS: the monitor has two contexts — the LOG LIST (no execution\n // selected) and a SELECTED EXECUTION (detail). Detail-only tools (open the\n // selected execution, jump to its action, clear the selection) are only\n // registered while an execution is selected, so the agent never sees a tool\n // that can't apply. COMMON tools (search/filter/refresh) are always present.\n // ================================================================\n\n /** Publish the current monitor state to the agent. Called on load and on every filter change.\n * Deep context: execution metrics, success rate, all filter state, the selected execution\n * (id + action NAME + result), and the bounded list of filtered action names in view. */\n private publishAgentContext(): void {\n this.navigationService.SetAgentContext(this, {\n // Execution metrics\n TotalExecutionCount: this.Metrics.totalExecutions,\n SuccessfulExecutionCount: this.Metrics.successfulExecutions,\n FailedExecutionCount: this.Metrics.failedExecutions,\n CurrentlyRunningCount: this.Metrics.currentlyRunning,\n ExecutionsTodayCount: this.Metrics.executionsToday,\n ExecutionsThisWeekCount: this.Metrics.executionsThisWeek,\n AverageDurationSeconds: this.Metrics.averageDuration,\n OverallSuccessRate: this.GetSuccessRate(),\n // What's in view after filtering\n FilteredExecutionCount: this.FilteredExecutions.length,\n VisibleActionNames: BoundNameList(this.distinctVisibleActionNames()),\n // Filter / search state\n CurrentSearchTerm: this.SearchTerm$.value,\n CurrentResultFilter: this.SelectedResult$.value,\n CurrentTimeRangeFilter: this.SelectedTimeRange$.value,\n CurrentActionFilter: this.SelectedAction$.value,\n // Mode + selection (id + action NAME + result)\n ToolMode: this.currentToolMode(),\n SelectedExecutionId: this.selectedExecution?.ID ?? null,\n SelectedExecutionActionName: this.selectedExecution ? this.GetActionName(this.selectedExecution.ActionID!) : null,\n SelectedExecutionResult: this.selectedExecution?.ResultCode ?? null,\n });\n }\n\n /** Distinct action names among the currently-filtered executions (for context). */\n private distinctVisibleActionNames(): string[] {\n const seen = new Set<string>();\n const names: string[] = [];\n for (const e of this.FilteredExecutions) {\n const name = this.Actions.get(e.ActionID!)?.Name;\n if (name && !seen.has(name)) {\n seen.add(name);\n names.push(name);\n }\n }\n return names;\n }\n\n /** The current tool mode: 'detail' when an execution is selected, else 'list'. */\n private currentToolMode(): MonitorToolMode {\n return this.selectedExecution ? 'detail' : 'list';\n }\n\n /**\n * Re-scope the agent's client tools to the CURRENT mode (list vs. selected-execution\n * detail). Guarded on {@link lastRegisteredToolMode} so it only calls NavigationService on\n * the mode flip — `publishAgentContext` fires on every filter change but the tool set only\n * changes when an execution is selected/deselected.\n */\n private syncAgentToolsForMode(): void {\n const mode = this.currentToolMode();\n if (mode === this.lastRegisteredToolMode) {\n return;\n }\n this.lastRegisteredToolMode = mode;\n this.navigationService.SetAgentClientTools(this, [\n ...this.buildCommonTools(),\n ...(mode === 'detail' ? this.buildDetailTools() : this.buildListTools()),\n ]);\n }\n\n /** COMMON tools — available in BOTH modes (search, filter, sort, refresh, select-by-id/name). */\n private buildCommonTools(): MonitorAgentTool[] {\n return [\n {\n Name: 'SearchExecutions',\n Description: 'Search the execution log by a free-text term (matches action name, result code, user).',\n ParameterSchema: { type: 'object', properties: { searchTerm: { type: 'string' } }, required: ['searchTerm'] },\n Handler: async (params) => {\n const term = typeof params['searchTerm'] === 'string' ? params['searchTerm'] : '';\n this.OnSearchChange(term);\n return { Success: true };\n },\n },\n {\n Name: 'FilterExecutionsByResult',\n Description: 'Filter executions by result. Allowed: all, Success, Failed, Error, Running.',\n ParameterSchema: { type: 'object', properties: { result: { type: 'string', enum: [...this.resultFilterValues] } }, required: ['result'] },\n Handler: async (params) => {\n const v = ValidateEnumParam(params['result'], this.resultFilterValues, 'result');\n if (!v.ok) return v.result;\n this.OnResultFilterChange(v.value);\n return { Success: true };\n },\n },\n {\n Name: 'FilterExecutionsByTimeRange',\n Description: 'Filter executions by time range. Allowed: 24hours, 7days, 30days, 90days.',\n ParameterSchema: { type: 'object', properties: { timeRange: { type: 'string', enum: [...this.timeRangeValues] } }, required: ['timeRange'] },\n Handler: async (params) => {\n const v = ValidateEnumParam(params['timeRange'], this.timeRangeValues, 'timeRange');\n if (!v.ok) return v.result;\n this.OnTimeRangeChange(v.value);\n return { Success: true };\n },\n },\n {\n Name: 'FilterExecutionsByAction',\n Description: 'Filter executions to a single action by its id OR name (case-insensitive), or \"all\" to clear the action filter.',\n ParameterSchema: { type: 'object', properties: { action: { type: 'string' } }, required: ['action'] },\n Handler: async (params) => {\n const raw = params['action'];\n if (typeof raw !== 'string' || raw.trim() === '') {\n return { Success: false, ErrorMessage: 'A non-empty action id or name is required (use \"all\" to clear).' };\n }\n if (raw.trim().toLowerCase() === 'all') {\n this.OnActionFilterChange('all');\n return { Success: true };\n }\n const found = FindByIdOrNameOrError(raw, Array.from(this.Actions.values()), 'action');\n if (!found.ok) return found.result;\n this.OnActionFilterChange(found.value.ID);\n return { Success: true, Data: { Id: found.value.ID, Name: found.value.Name } };\n },\n },\n {\n Name: 'ClearMonitorFilters',\n Description: 'Reset all execution-monitor filters (result, time range, action) to their defaults.',\n ParameterSchema: { type: 'object', properties: {} },\n Handler: async () => {\n this.ResetFilters();\n return { Success: true };\n },\n },\n {\n Name: 'RefreshMonitorData',\n Description: 'Reload the execution monitoring data (logs, metrics, trends).',\n ParameterSchema: { type: 'object', properties: {} },\n Handler: async () => {\n this.RefreshData();\n return { Success: true };\n },\n },\n ];\n }\n\n /** LIST-mode tools — only when NO execution is selected: select an execution (which flips to detail mode). */\n private buildListTools(): MonitorAgentTool[] {\n return [\n {\n Name: 'SelectExecution',\n Description: 'Select an execution-log entry by its id and open its detail record (view-only run history). Selecting it reveals the detail tools.',\n ParameterSchema: { type: 'object', properties: { executionId: { type: 'string' } }, required: ['executionId'] },\n Handler: async (params) => {\n const found = FindByIdOrError(params['executionId'], this.FilteredExecutions.length ? this.FilteredExecutions : this.Executions, 'execution');\n if (!found.ok) return found.result;\n this.selectExecution(found.value);\n return { Success: true, Data: { Id: found.value.ID, ActionName: this.GetActionName(found.value.ActionID!) } };\n },\n },\n ];\n }\n\n /** DETAIL-mode tools — only when an execution IS selected: open it, jump to its action, clear the selection. */\n private buildDetailTools(): MonitorAgentTool[] {\n return [\n {\n Name: 'OpenSelectedExecutionLog',\n Description: 'Open the detail record for the currently selected execution (view-only run history).',\n ParameterSchema: { type: 'object', properties: {} },\n Handler: async () => {\n if (!this.selectedExecution) return { Success: false, ErrorMessage: 'No execution is currently selected.' };\n this.OpenExecution(this.selectedExecution);\n return { Success: true };\n },\n },\n {\n Name: 'OpenSelectedExecutionAction',\n Description: 'Open the action record that the currently selected execution ran (related-record navigation — does NOT run the action).',\n ParameterSchema: { type: 'object', properties: {} },\n Handler: async () => {\n const actionId = this.selectedExecution?.ActionID;\n if (!actionId) return { Success: false, ErrorMessage: 'No execution is selected, or it has no associated action.' };\n this.OpenAction(actionId);\n return { Success: true, Data: { ActionName: this.GetActionName(actionId) } };\n },\n },\n {\n Name: 'ClearExecutionSelection',\n Description: 'Clear the current execution selection and return to the log-list tools.',\n ParameterSchema: { type: 'object', properties: {} },\n Handler: async () => {\n this.clearExecutionSelection();\n return { Success: true };\n },\n },\n ];\n }\n\n /** Select an execution (sets selection, re-scopes tools to detail mode, re-publishes context). */\n private selectExecution(execution: MJActionExecutionLogEntity): void {\n this.selectedExecution = execution;\n this.syncAgentToolsForMode();\n this.publishAgentContext();\n this.OpenExecution(execution);\n }\n\n /** Clear the execution selection (re-scopes tools back to list mode). */\n private clearExecutionSelection(): void {\n this.selectedExecution = null;\n this.syncAgentToolsForMode();\n this.publishAgentContext();\n }\n\n private async loadData(): Promise<void> {\n try {\n this.isLoading = true;\n \n const rv = RunView.FromMetadataProvider(this.ProviderToUse);\n const [executionsResult, actionsResult] = await rv.RunViews([\n {\n EntityName: 'MJ: Action Execution Logs', \n OrderBy: 'StartedAt DESC' \n },\n {\n EntityName: 'MJ: Actions', \n OrderBy: 'Name' \n }\n ]);\n \n if (!executionsResult.Success || !actionsResult.Success) {\n throw new Error('Failed to load data');\n }\n \n const executions = executionsResult.Results as MJActionExecutionLogEntity[];\n const actions = actionsResult.Results as MJActionEntity[];\n\n this.Executions = executions;\n this.populateActionsMap(actions);\n this.buildActionOptions(actions);\n this.calculateMetrics();\n this.generateExecutionTrends();\n this.applyFilters();\n this.publishAgentContext();\n\n } catch (error) {\n LogError('Failed to load execution monitoring data', undefined, error);\n } finally {\n this.isLoading = false;\n this.NotifyLoadComplete();\n this.cdr.detectChanges();\n }\n }\n\n private populateActionsMap(actions: MJActionEntity[]): void {\n this.Actions.clear();\n actions.forEach(action => {\n this.Actions.set(action.ID, action);\n });\n }\n\n private buildActionOptions(actions: MJActionEntity[]): void {\n this.ActionOptions = [\n { text: 'All Actions', value: 'all' },\n ...actions.map(action => ({\n text: action.Name,\n value: action.ID\n }))\n ];\n }\n\n private calculateMetrics(): void {\n const now = new Date();\n const today = new Date(now.getFullYear(), now.getMonth(), now.getDate());\n const weekAgo = new Date(today.getTime() - 7 * 24 * 60 * 60 * 1000);\n\n this.Metrics = {\n totalExecutions: this.Executions.length,\n successfulExecutions: this.Executions.filter(e => e.ResultCode === 'Success').length,\n failedExecutions: this.Executions.filter(e => \n e.ResultCode && ['Failed', 'Error'].includes(e.ResultCode)\n ).length,\n averageDuration: this.calculateAverageDuration(),\n executionsToday: this.Executions.filter(e => \n new Date(e.StartedAt!) >= today\n ).length,\n executionsThisWeek: this.Executions.filter(e => \n new Date(e.StartedAt!) >= weekAgo\n ).length,\n currentlyRunning: this.Executions.filter(e => \n e.ResultCode === 'Running' || !e.EndedAt\n ).length\n };\n }\n\n private calculateAverageDuration(): number {\n const completedExecutions = this.Executions.filter(e => \n e.StartedAt && e.EndedAt\n );\n \n if (completedExecutions.length === 0) return 0;\n\n const totalDuration = completedExecutions.reduce((sum, execution) => {\n const start = new Date(execution.StartedAt!).getTime();\n const end = new Date(execution.EndedAt!).getTime();\n return sum + (end - start);\n }, 0);\n\n return Math.round(totalDuration / completedExecutions.length / 1000); // Average in seconds\n }\n\n private generateExecutionTrends(): void {\n const trends = new Map<string, ExecutionTrend>();\n const last7Days = Array.from({ length: 7 }, (_, i) => {\n const date = new Date();\n date.setDate(date.getDate() - i);\n return date.toISOString().split('T')[0];\n }).reverse();\n\n // Initialize trends for last 7 days\n last7Days.forEach(date => {\n trends.set(date, {\n date,\n successful: 0,\n failed: 0,\n total: 0\n });\n });\n\n // Populate trends with execution data\n this.Executions.forEach(execution => {\n if (!execution.StartedAt) return;\n \n const date = new Date(execution.StartedAt).toISOString().split('T')[0];\n const trend = trends.get(date);\n \n if (trend) {\n trend.total++;\n if (execution.ResultCode === 'Success') {\n trend.successful++;\n } else if (execution.ResultCode && ['Failed', 'Error'].includes(execution.ResultCode)) {\n trend.failed++;\n }\n }\n });\n\n this.ExecutionTrends = Array.from(trends.values());\n }\n\n private applyFilters(): void {\n let filtered = [...this.Executions];\n\n // Apply time range filter\n const timeRange = this.SelectedTimeRange$.value;\n if (timeRange !== 'all') {\n const cutoffDate = this.getTimeRangeCutoff(timeRange);\n filtered = filtered.filter(e => \n e.StartedAt && new Date(e.StartedAt) >= cutoffDate\n );\n }\n\n // Apply result filter\n const result = this.SelectedResult$.value;\n if (result !== 'all') {\n if (result === 'Running') {\n filtered = filtered.filter(e => !e.EndedAt || e.ResultCode === 'Running');\n } else {\n filtered = filtered.filter(e => e.ResultCode === result);\n }\n }\n\n // Apply action filter\n const actionId = this.SelectedAction$.value;\n if (actionId !== 'all') {\n filtered = filtered.filter(e => UUIDsEqual(e.ActionID, actionId));\n }\n\n // Apply search filter\n const searchTerm = this.SearchTerm$.value.toLowerCase();\n if (searchTerm) {\n filtered = filtered.filter(e => {\n const action = this.Actions.get(e.ActionID!);\n return (\n action?.Name.toLowerCase().includes(searchTerm) ||\n e.ResultCode?.toLowerCase().includes(searchTerm) ||\n e.UserID?.toLowerCase().includes(searchTerm)\n );\n });\n }\n\n this.FilteredExecutions = filtered;\n }\n\n private getTimeRangeCutoff(timeRange: string): Date {\n const now = new Date();\n switch (timeRange) {\n case '24hours':\n return new Date(now.getTime() - 24 * 60 * 60 * 1000);\n case '7days':\n return new Date(now.getTime() - 7 * 24 * 60 * 60 * 1000);\n case '30days':\n return new Date(now.getTime() - 30 * 24 * 60 * 60 * 1000);\n case '90days':\n return new Date(now.getTime() - 90 * 24 * 60 * 60 * 1000);\n default:\n return new Date(0);\n }\n }\n\n public OnSearchChange(searchTerm: string): void {\n this.SearchTerm$.next(searchTerm);\n }\n\n /** @deprecated Use {@link OnSearchChange}. */\n public onSearchChange(searchTerm: string): void {\n return this.OnSearchChange(searchTerm);\n }\n\n public OnResultFilterChange(result: string): void {\n this.SelectedResult$.next(result);\n }\n\n /** @deprecated Use {@link OnResultFilterChange}. */\n public onResultFilterChange(result: string): void {\n return this.OnResultFilterChange(result);\n }\n\n public OnTimeRangeChange(timeRange: string): void {\n this.SelectedTimeRange$.next(timeRange);\n }\n\n /** @deprecated Use {@link OnTimeRangeChange}. */\n public onTimeRangeChange(timeRange: string): void {\n return this.OnTimeRangeChange(timeRange);\n }\n\n public OnActionFilterChange(actionId: string): void {\n this.SelectedAction$.next(actionId);\n }\n\n /** @deprecated Use {@link OnActionFilterChange}. */\n public onActionFilterChange(actionId: string): void {\n return this.OnActionFilterChange(actionId);\n }\n\n // ───── Filter-popover plumbing for the [actions] slot ─────\n\n public get FilterFields(): FilterFieldConfig[] {\n return [\n {\n key: 'timeRange',\n type: 'dropdown',\n label: 'Time range',\n icon: 'fa-solid fa-clock',\n options: this.TimeRangeOptions\n },\n {\n key: 'result',\n type: 'dropdown',\n label: 'Result',\n icon: 'fa-solid fa-circle-info',\n options: this.ResultOptions\n },\n {\n key: 'action',\n type: 'dropdown',\n label: 'Action',\n icon: 'fa-solid fa-bolt',\n filterable: true,\n options: this.ActionOptions\n }\n ];\n }\n public get FilterValues(): Record<string, unknown> {\n return {\n timeRange: this.SelectedTimeRange$.value,\n result: this.SelectedResult$.value,\n action: this.SelectedAction$.value\n };\n }\n public get ActiveFilterCount(): number {\n let n = 0;\n if (this.SelectedTimeRange$.value !== '7days') n++;\n if (this.SelectedResult$.value !== 'all') n++;\n if (this.SelectedAction$.value !== 'all') n++;\n return n;\n }\n public OnFilterValuesChange(v: Record<string, unknown>): void {\n const next = (v ?? {}) as { timeRange?: string; result?: string; action?: string };\n if ((next.timeRange ?? '7days') !== this.SelectedTimeRange$.value) {\n this.OnTimeRangeChange(next.timeRange ?? '7days');\n }\n if ((next.result ?? 'all') !== this.SelectedResult$.value) {\n this.OnResultFilterChange(next.result ?? 'all');\n }\n if ((next.action ?? 'all') !== this.SelectedAction$.value) {\n this.OnActionFilterChange(next.action ?? 'all');\n }\n }\n\n /** @deprecated Use {@link OnFilterValuesChange}. */\n public onFilterValuesChange(v: Record<string, unknown>): void {\n return this.OnFilterValuesChange(v);\n }\n public ResetFilters(): void {\n if (this.SelectedTimeRange$.value !== '7days') this.OnTimeRangeChange('7days');\n if (this.SelectedResult$.value !== 'all') this.OnResultFilterChange('all');\n if (this.SelectedAction$.value !== 'all') this.OnActionFilterChange('all');\n }\n\n /** @deprecated Use {@link ResetFilters}. */\n public resetFilters(): void {\n return this.ResetFilters();\n }\n\n public OpenExecution(execution: MJActionExecutionLogEntity): void {\n this.navigationService.OpenEntityRecord('MJ: Action Execution Logs', CompositeKey.FromID(execution.ID));\n }\n\n /** @deprecated Use {@link OpenExecution}. */\n public openExecution(execution: MJActionExecutionLogEntity): void {\n return this.OpenExecution(execution);\n }\n\n public OpenAction(actionId: string): void {\n this.navigationService.OpenEntityRecord('MJ: Actions', CompositeKey.FromID(actionId));\n }\n\n /** @deprecated Use {@link OpenAction}. */\n public openAction(actionId: string): void {\n return this.OpenAction(actionId);\n }\n\n public GetActionName(actionId: string): string {\n return this.Actions.get(actionId)?.Name || `Action ${actionId}`;\n }\n\n /** @deprecated Use {@link GetActionName}. */\n public getActionName(actionId: string): string {\n return this.GetActionName(actionId);\n }\n\n public GetResultColor(resultCode: string | null): 'success' | 'warning' | 'error' | 'info' {\n if (!resultCode) return 'info';\n switch (resultCode.toLowerCase()) {\n case 'success': return 'success';\n case 'failed':\n case 'error': return 'error';\n case 'running': return 'warning';\n default: return 'info';\n }\n }\n\n /** @deprecated Use {@link GetResultColor}. */\n public getResultColor(resultCode: string | null): 'success' | 'warning' | 'error' | 'info' {\n return this.GetResultColor(resultCode);\n }\n\n public GetResultIcon(resultCode: string | null): string {\n if (!resultCode) return 'fa-solid fa-question';\n switch (resultCode.toLowerCase()) {\n case 'success': return 'fa-solid fa-check-circle';\n case 'failed':\n case 'error': return 'fa-solid fa-exclamation-circle';\n case 'running': return 'fa-solid fa-spinner fa-spin';\n default: return 'fa-solid fa-info-circle';\n }\n }\n\n /** @deprecated Use {@link GetResultIcon}. */\n public getResultIcon(resultCode: string | null): string {\n return this.GetResultIcon(resultCode);\n }\n\n public GetDuration(execution: MJActionExecutionLogEntity): string {\n if (!execution.StartedAt || !execution.EndedAt) {\n return execution.EndedAt ? 'Unknown' : 'Running';\n }\n\n const start = new Date(execution.StartedAt).getTime();\n const end = new Date(execution.EndedAt).getTime();\n const duration = Math.round((end - start) / 1000);\n\n if (duration < 60) return `${duration}s`;\n if (duration < 3600) return `${Math.round(duration / 60)}m`;\n return `${Math.round(duration / 3600)}h`;\n }\n\n /** @deprecated Use {@link GetDuration}. */\n public getDuration(execution: MJActionExecutionLogEntity): string {\n return this.GetDuration(execution);\n }\n\n public GetSuccessRate(): number {\n if (this.Metrics.totalExecutions === 0) return 0;\n return Math.round((this.Metrics.successfulExecutions / this.Metrics.totalExecutions) * 100);\n }\n\n /** @deprecated Use {@link GetSuccessRate}. */\n public getSuccessRate(): number {\n return this.GetSuccessRate();\n }\n\n public RefreshData(): void {\n this.loadData();\n }\n\n /** @deprecated Use {@link RefreshData}. */\n public refreshData(): void {\n return this.RefreshData();\n }\n\n // Metric card click handlers\n public OnTotalExecutionsClick(): void {\n // Reset filters to show all executions\n this.SelectedResult$.next('all');\n this.SelectedTimeRange$.next('7days');\n this.SelectedAction$.next('all');\n }\n\n /** @deprecated Use {@link OnTotalExecutionsClick}. */\n public onTotalExecutionsClick(): void {\n return this.OnTotalExecutionsClick();\n }\n\n public OnSuccessRateClick(): void {\n this.SelectedResult$.next('Success');\n }\n\n /** @deprecated Use {@link OnSuccessRateClick}. */\n public onSuccessRateClick(): void {\n return this.OnSuccessRateClick();\n }\n\n public OnFailedExecutionsClick(): void {\n this.SelectedResult$.next('Failed');\n }\n\n /** @deprecated Use {@link OnFailedExecutionsClick}. */\n public onFailedExecutionsClick(): void {\n return this.OnFailedExecutionsClick();\n }\n\n public OnRunningExecutionsClick(): void {\n this.SelectedResult$.next('Running');\n }\n\n /** @deprecated Use {@link OnRunningExecutionsClick}. */\n public onRunningExecutionsClick(): void {\n return this.OnRunningExecutionsClick();\n }\n\n async GetResourceDisplayName(data: ResourceData): Promise<string> {\n return 'Execution Monitoring';\n }\n\n async GetResourceIconClass(data: ResourceData): Promise<string> {\n return 'fa-solid fa-chart-line';\n }\n}","<mj-page-layout>\n <mj-page-header\n Title=\"Execution Monitor\"\n Icon=\"fa-solid fa-chart-line\"\n Subtitle=\"Action execution history, latency, and error rates\">\n <!-- [meta] intentionally omitted — chrome slot discipline audit Task B.\n totalExecutions was a single inventory count duplicated by the\n body's metrics cards. -->\n <div actions>\n <mj-refresh-button (Clicked)=\"refreshData()\"></mj-refresh-button>\n </div>\n <div toolbar>\n <mj-page-search\n Placeholder=\"Search executions...\"\n [Value]=\"searchTerm$.value\"\n (ValueChange)=\"onSearchChange($event)\">\n </mj-page-search>\n <mj-filter-popover\n [ActiveCount]=\"ActiveFilterCount\"\n [ShowClearAll]=\"ActiveFilterCount > 0\"\n (ClearAllRequested)=\"resetFilters()\">\n <mj-filter-panel\n [Fields]=\"FilterFields\"\n [Values]=\"FilterValues\"\n (ValuesChange)=\"onFilterValuesChange($event)\"\n (Reset)=\"resetFilters()\">\n </mj-filter-panel>\n </mj-filter-popover>\n </div>\n </mj-page-header>\n\n <mj-page-body>\n <div class=\"execution-monitoring\" >\n\n <!-- Metrics Summary -->\n <div class=\"metrics-summary\">\n <div class=\"metric-card total clickable\" (click)=\"onTotalExecutionsClick()\">\n <div class=\"metric-icon\">\n <i class=\"fa-solid fa-play-circle\"></i>\n </div>\n <div class=\"metric-content\">\n <div class=\"metric-value\">{{ metrics.totalExecutions }}</div>\n <div class=\"metric-label\">Total Executions</div>\n </div>\n </div>\n\n <div class=\"metric-card success clickable\" (click)=\"onSuccessRateClick()\">\n <div class=\"metric-icon\">\n <i class=\"fa-solid fa-check-circle\"></i>\n </div>\n <div class=\"metric-content\">\n <div class=\"metric-value\">{{ getSuccessRate() }}%</div>\n <div class=\"metric-label\">Success Rate</div>\n <div class=\"metric-detail\">{{ metrics.successfulExecutions }}/{{ metrics.totalExecutions }}</div>\n </div>\n </div>\n\n <div class=\"metric-card error clickable\" (click)=\"onFailedExecutionsClick()\">\n <div class=\"metric-icon\">\n <i class=\"fa-solid fa-exclamation-circle\"></i>\n </div>\n <div class=\"metric-content\">\n <div class=\"metric-value\">{{ metrics.failedExecutions }}</div>\n <div class=\"metric-label\">Failed Executions</div>\n </div>\n </div>\n\n <div class=\"metric-card duration\">\n <div class=\"metric-icon\">\n <i class=\"fa-solid fa-clock\"></i>\n </div>\n <div class=\"metric-content\">\n <div class=\"metric-value\">{{ metrics.averageDuration }}s</div>\n <div class=\"metric-label\">Avg Duration</div>\n </div>\n </div>\n\n <div class=\"metric-card activity\">\n <div class=\"metric-icon\">\n <i class=\"fa-solid fa-calendar-day\"></i>\n </div>\n <div class=\"metric-content\">\n <div class=\"metric-value\">{{ metrics.executionsToday }}</div>\n <div class=\"metric-label\">Today</div>\n <div class=\"metric-detail\">{{ metrics.executionsThisWeek }} this week</div>\n </div>\n </div>\n\n <div class=\"metric-card running clickable\" (click)=\"onRunningExecutionsClick()\">\n <div class=\"metric-icon\">\n <i class=\"fa-solid fa-spinner fa-spin\"></i>\n </div>\n <div class=\"metric-content\">\n <div class=\"metric-value\">{{ metrics.currentlyRunning }}</div>\n <div class=\"metric-label\">Currently Running</div>\n </div>\n </div>\n </div>\n\n <!-- Execution Trends Chart -->\n <div class=\"trends-section\">\n <div class=\"section-header\">\n <h4><i class=\"fa-solid fa-chart-area\"></i> 7-Day Execution Trends</h4>\n </div>\n <div class=\"trends-chart\">\n @if (executionTrends.length > 0) {\n <div class=\"trend-bars\">\n @for (trend of executionTrends; track trend.date) {\n <div class=\"trend-bar\">\n <div class=\"bar-container\">\n <div class=\"bar-success\" [style.height.%]=\"trend.total > 0 ? (trend.successful / trend.total) * 100 : 0\"></div>\n <div class=\"bar-failed\" [style.height.%]=\"trend.total > 0 ? (trend.failed / trend.total) * 100 : 0\"></div>\n </div>\n <div class=\"bar-label\">{{ trend.date | date:'MMM d' }}</div>\n <div class=\"bar-total\">{{ trend.total }}</div>\n </div>\n }\n </div>\n <div class=\"chart-legend\">\n <div class=\"legend-item\">\n <div class=\"legend-color success\"></div>\n <span>Successful</span>\n </div>\n <div class=\"legend-item\">\n <div class=\"legend-color failed\"></div>\n <span>Failed</span>\n </div>\n </div>\n } @else {\n <mj-empty-state class=\"empty-chart\" Size=\"compact\"\n Icon=\"fa-solid fa-chart-area\"\n Title=\"No execution trends available\" />\n }\n </div>\n </div>\n\n <!-- Execution List -->\n <div class=\"executions-section\">\n <div class=\"section-header\">\n <h4><i class=\"fa-solid fa-list\"></i> Recent Executions</h4>\n <div class=\"results-count\">{{ filteredExecutions.length }} executions</div>\n </div>\n \n <div class=\"executions-list\">\n @if (filteredExecutions.length > 0) {\n @for (execution of filteredExecutions; track execution.ID) {\n <div class=\"execution-item\" (click)=\"openExecution(execution)\">\n <div class=\"execution-status\">\n <i [class]=\"getResultIcon(execution.ResultCode)\"></i>\n </div>\n \n <div class=\"execution-main\">\n <div class=\"execution-action\" (click)=\"openAction(execution.ActionID!); $event.stopPropagation()\">\n {{ getActionName(execution.ActionID!) }}\n </div>\n <div class=\"execution-details\">\n <span class=\"execution-time\">{{ execution.StartedAt | date:'MMM d, HH:mm:ss' }}</span>\n <span class=\"execution-user\">{{ execution.UserID }}</span>\n <span class=\"execution-duration\">{{ getDuration(execution) }}</span>\n </div>\n </div>\n \n <div class=\"execution-result\">\n <span class=\"status-chip\" [attr.data-color]=\"getResultColor(execution.ResultCode)\">\n {{ execution.ResultCode || 'Unknown' }}\n </span>\n </div>\n \n <div class=\"execution-actions\">\n <button mjButton\n variant=\"flat\"\n (click)=\"$event.stopPropagation()\">\n <i class=\"fa-solid fa-ellipsis-vertical\"></i>\n </button>\n </div>\n </div>\n }\n } @else {\n <mj-empty-state Variant=\"no-results\"\n Title=\"No executions found\"\n Message=\"Try adjusting your filters or search terms\" />\n }\n </div>\n </div>\n\n @if (isLoading) {\n <div class=\"loading-overlay\">\n <mj-loading [showText]=\"false\" size=\"medium\"></mj-loading>\n </div>\n }\n</div>\n </mj-page-body>\n</mj-page-layout>"]}
|
|
1
|
+
{"version":3,"file":"execution-monitoring.component.js","sourceRoot":"","sources":["../../../src/Actions/components/execution-monitoring.component.ts","../../../src/Actions/components/execution-monitoring.component.html"],"names":[],"mappings":"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","sourcesContent":["import { Component, OnInit, OnDestroy, ChangeDetectorRef } from '@angular/core';\nimport { CompositeKey, RunView, LogError } from '@memberjunction/core';\nimport { MJActionExecutionLogEntity, MJActionEntity, ResourceData } from '@memberjunction/core-entities';\nimport { RegisterClass , UUIDsEqual } from '@memberjunction/global';\nimport { BaseResourceComponent, NavigationService } from '@memberjunction/ng-shared';\nimport { FilterFieldConfig } from '@memberjunction/ng-ui-components';\nimport { Subject, BehaviorSubject, combineLatest } from 'rxjs';\nimport { debounceTime, takeUntil, distinctUntilChanged } from 'rxjs/operators';\nimport { ValidateEnumParam, BoundNameList } from '../../shared/agent-tool-validation';\nimport { FindByIdOrError, FindByIdOrNameOrError } from '../agent-tool-helpers';\nimport {\n ActionResultClass,\n ActionResultColor,\n ActionResultIcon,\n ActionSuccessRate,\n ClassifyActionResultCode,\n} from '../action-result-code';\n\n/** The two agent-tool modes for the execution monitor: the log list, or a single\n * selected execution. Drives the mode-scoped tool re-registration. */\ntype MonitorToolMode = 'list' | 'detail';\n\n/** A tool definition in the shape NavigationService.SetAgentClientTools accepts. */\ninterface MonitorAgentTool {\n Name: string;\n Description: string;\n ParameterSchema: Record<string, unknown>;\n Handler: (params: Record<string, unknown>) => Promise<unknown>;\n}\ninterface ExecutionMetrics {\n totalExecutions: number;\n successfulExecutions: number;\n failedExecutions: number;\n averageDuration: number;\n executionsToday: number;\n executionsThisWeek: number;\n currentlyRunning: number;\n}\n\ninterface ExecutionTrend {\n date: string;\n successful: number;\n failed: number;\n total: number;\n}\n\n/**\n * Execution Monitoring Resource - displays action execution logs and metrics\n */\n@RegisterClass(BaseResourceComponent, 'ActionsMonitorResource')\n@Component({\n standalone: false,\n selector: 'mj-execution-monitoring',\n templateUrl: './execution-monitoring.component.html',\n styleUrls: ['./execution-monitoring.component.css']\n})\nexport class ActionExecutionMonitoringComponent extends BaseResourceComponent implements OnInit, OnDestroy {\n public isLoading = true;\n public Executions: MJActionExecutionLogEntity[] = [];\n\n /** @deprecated Use {@link Executions}. */\n public get executions(): MJActionExecutionLogEntity[] {\n return this.Executions;\n }\n /** @deprecated Use {@link Executions}. */\n public set executions(value: MJActionExecutionLogEntity[]) {\n this.Executions = value;\n }\n public FilteredExecutions: MJActionExecutionLogEntity[] = [];\n\n /** @deprecated Use {@link FilteredExecutions}. */\n public get filteredExecutions(): MJActionExecutionLogEntity[] {\n return this.FilteredExecutions;\n }\n /** @deprecated Use {@link FilteredExecutions}. */\n public set filteredExecutions(value: MJActionExecutionLogEntity[]) {\n this.FilteredExecutions = value;\n }\n public Actions: Map<string, MJActionEntity> = new Map();\n\n /** @deprecated Use {@link Actions}. */\n public get actions(): Map<string, MJActionEntity> {\n return this.Actions;\n }\n /** @deprecated Use {@link Actions}. */\n public set actions(value: Map<string, MJActionEntity>) {\n this.Actions = value;\n }\n \n public Metrics: ExecutionMetrics = {\n totalExecutions: 0,\n successfulExecutions: 0,\n failedExecutions: 0,\n averageDuration: 0,\n executionsToday: 0,\n executionsThisWeek: 0,\n currentlyRunning: 0\n };\n\n /** @deprecated Use {@link Metrics}. */\n public get metrics(): ExecutionMetrics {\n return this.Metrics;\n }\n /** @deprecated Use {@link Metrics}. */\n public set metrics(value: ExecutionMetrics) {\n this.Metrics = value;\n }\n\n public ExecutionTrends: ExecutionTrend[] = [];\n\n /** @deprecated Use {@link ExecutionTrends}. */\n public get executionTrends(): ExecutionTrend[] {\n return this.ExecutionTrends;\n }\n /** @deprecated Use {@link ExecutionTrends}. */\n public set executionTrends(value: ExecutionTrend[]) {\n this.ExecutionTrends = value;\n }\n \n public SearchTerm$ = new BehaviorSubject<string>('');\n\n /** @deprecated Use {@link SearchTerm$}. */\n public get searchTerm$() {\n return this.SearchTerm$;\n }\n /** @deprecated Use {@link SearchTerm$}. */\n public set searchTerm$(value) {\n this.SearchTerm$ = value;\n }\n public SelectedResult$ = new BehaviorSubject<string>('all');\n\n /** @deprecated Use {@link SelectedResult$}. */\n public get selectedResult$() {\n return this.SelectedResult$;\n }\n /** @deprecated Use {@link SelectedResult$}. */\n public set selectedResult$(value) {\n this.SelectedResult$ = value;\n }\n public SelectedTimeRange$ = new BehaviorSubject<string>('7days');\n\n /** @deprecated Use {@link SelectedTimeRange$}. */\n public get selectedTimeRange$() {\n return this.SelectedTimeRange$;\n }\n /** @deprecated Use {@link SelectedTimeRange$}. */\n public set selectedTimeRange$(value) {\n this.SelectedTimeRange$ = value;\n }\n public SelectedAction$ = new BehaviorSubject<string>('all');\n\n /** @deprecated Use {@link SelectedAction$}. */\n public get selectedAction$() {\n return this.SelectedAction$;\n }\n /** @deprecated Use {@link SelectedAction$}. */\n public set selectedAction$(value) {\n this.SelectedAction$ = value;\n }\n\n public TimeRangeOptions = [\n { text: 'Last 24 Hours', value: '24hours' },\n { text: 'Last 7 Days', value: '7days' },\n { text: 'Last 30 Days', value: '30days' },\n { text: 'Last 90 Days', value: '90days' }\n ];\n\n /** @deprecated Use {@link TimeRangeOptions}. */\n public get timeRangeOptions() {\n return this.TimeRangeOptions;\n }\n /** @deprecated Use {@link TimeRangeOptions}. */\n public set timeRangeOptions(value) {\n this.TimeRangeOptions = value;\n }\n\n /**\n * The visible result filter. `Failed` and `Error` were two separate options that both\n * matched the stored code literally; they are one option now because they are one OUTCOME —\n * a run that ended without succeeding — and the codes for it (`RUNTIME_ERROR`, `TIMEOUT`,\n * `NOT_APPROVED`, legacy `Failed`…) never matched either label anyway. `Error` is still\n * ACCEPTED as an alias (see {@link RESULT_FILTER_CLASSES}) so an agent or a restored filter\n * asking for it keeps working.\n */\n private static readonly RESULT_OPTIONS: ReadonlyArray<{ text: string; value: string }> = [\n { text: 'All Results', value: 'all' },\n { text: 'Successful', value: 'Success' },\n { text: 'Failed or errored', value: 'Failed' },\n { text: 'Running', value: 'Running' }\n ];\n\n /**\n * A constant list, so it lives on the class rather than on each instance — which also makes\n * it readable without constructing the component, and therefore testable alongside\n * {@link RESULT_FILTER_CLASSES}. Those two must agree: every offered value has to select\n * something.\n */\n public get ResultOptions(): ReadonlyArray<{ text: string; value: string }> {\n return ActionExecutionMonitoringComponent.RESULT_OPTIONS;\n }\n\n /** @deprecated Use {@link ResultOptions}. */\n public get resultOptions(): ReadonlyArray<{ text: string; value: string }> {\n return this.ResultOptions;\n }\n\n /**\n * Which outcome class each accepted filter value selects. `Failed` and `Error` deliberately\n * map to the same class — see {@link ResultOptions}.\n */\n private static readonly RESULT_FILTER_CLASSES: Readonly<Record<string, ActionResultClass | undefined>> = {\n Success: 'success',\n Failed: 'failure',\n Error: 'failure',\n Running: 'running',\n };\n\n public ActionOptions: Array<{text: string; value: string}> = [\n { text: 'All Actions', value: 'all' }\n ];\n\n /** @deprecated Use {@link ActionOptions}. */\n public get actionOptions(): Array<{text: string; value: string}> {\n return this.ActionOptions;\n }\n /** @deprecated Use {@link ActionOptions}. */\n public set actionOptions(value: Array<{text: string; value: string}>) {\n this.ActionOptions = value;\n }\n\n /** Allowed result-filter values (mirrors `resultOptions`). */\n private readonly resultFilterValues = ['all', 'Success', 'Failed', 'Error', 'Running'] as const;\n /** Allowed time-range values (mirrors `timeRangeOptions`). */\n private readonly timeRangeValues = ['24hours', '7days', '30days', '90days'] as const;\n\n /** The currently selected execution (set when the agent/user opens one) — surfaced in context + drives the tool mode. */\n private selectedExecution: MJActionExecutionLogEntity | null = null;\n /**\n * Tracks which mode's tool set is currently registered so {@link syncAgentToolsForMode}\n * only calls into NavigationService on the list↔detail transition, not on every filter change.\n */\n private lastRegisteredToolMode: MonitorToolMode | null = null;\n\n protected override destroy$ = new Subject<void>();\n\n constructor(private cdr: ChangeDetectorRef) {\n super();\n }\n\n ngOnInit(): void {\n super.ngOnInit();\n this.setupFilters();\n this.syncAgentToolsForMode();\n this.loadData();\n }\n\n ngOnDestroy(): void {\n super.ngOnDestroy();\n this.destroy$.next();\n this.destroy$.complete();\n }\n\n private setupFilters(): void {\n combineLatest([\n this.SearchTerm$.pipe(debounceTime(300), distinctUntilChanged()),\n this.SelectedResult$.pipe(distinctUntilChanged()),\n this.SelectedTimeRange$.pipe(distinctUntilChanged()),\n this.SelectedAction$.pipe(distinctUntilChanged())\n ]).pipe(\n takeUntil(this.destroy$)\n ).subscribe(() => {\n this.applyFilters();\n this.syncAgentToolsForMode();\n this.publishAgentContext();\n });\n }\n\n // ================================================================\n // AI Agent context + client tools\n //\n // 🚨 SAFETY BOUNDARY: This is the Actions app. Executing an action has real\n // side effects. This monitor is VIEW-ONLY run history — it exposes only\n // search / filter / sort / navigate / select / refresh tools to the agent. No\n // action execution (RunAction / re-run) is wired anywhere. Every Handler is\n // tolerant (never throws; returns a structured failure on bad input).\n //\n // MODE-SCOPED TOOLS: the monitor has two contexts — the LOG LIST (no execution\n // selected) and a SELECTED EXECUTION (detail). Detail-only tools (open the\n // selected execution, jump to its action, clear the selection) are only\n // registered while an execution is selected, so the agent never sees a tool\n // that can't apply. COMMON tools (search/filter/refresh) are always present.\n // ================================================================\n\n /** Publish the current monitor state to the agent. Called on load and on every filter change.\n * Deep context: execution metrics, success rate, all filter state, the selected execution\n * (id + action NAME + result), and the bounded list of filtered action names in view. */\n private publishAgentContext(): void {\n this.navigationService.SetAgentContext(this, {\n // Execution metrics\n TotalExecutionCount: this.Metrics.totalExecutions,\n SuccessfulExecutionCount: this.Metrics.successfulExecutions,\n FailedExecutionCount: this.Metrics.failedExecutions,\n CurrentlyRunningCount: this.Metrics.currentlyRunning,\n ExecutionsTodayCount: this.Metrics.executionsToday,\n ExecutionsThisWeekCount: this.Metrics.executionsThisWeek,\n AverageDurationSeconds: this.Metrics.averageDuration,\n OverallSuccessRate: this.GetSuccessRate(),\n // What's in view after filtering\n FilteredExecutionCount: this.FilteredExecutions.length,\n VisibleActionNames: BoundNameList(this.distinctVisibleActionNames()),\n // Filter / search state\n CurrentSearchTerm: this.SearchTerm$.value,\n CurrentResultFilter: this.SelectedResult$.value,\n CurrentTimeRangeFilter: this.SelectedTimeRange$.value,\n CurrentActionFilter: this.SelectedAction$.value,\n // Mode + selection (id + action NAME + result)\n ToolMode: this.currentToolMode(),\n SelectedExecutionId: this.selectedExecution?.ID ?? null,\n SelectedExecutionActionName: this.selectedExecution ? this.GetActionName(this.selectedExecution.ActionID!) : null,\n SelectedExecutionResult: this.selectedExecution?.ResultCode ?? null,\n });\n }\n\n /** Distinct action names among the currently-filtered executions (for context). */\n private distinctVisibleActionNames(): string[] {\n const seen = new Set<string>();\n const names: string[] = [];\n for (const e of this.FilteredExecutions) {\n const name = this.Actions.get(e.ActionID!)?.Name;\n if (name && !seen.has(name)) {\n seen.add(name);\n names.push(name);\n }\n }\n return names;\n }\n\n /** The current tool mode: 'detail' when an execution is selected, else 'list'. */\n private currentToolMode(): MonitorToolMode {\n return this.selectedExecution ? 'detail' : 'list';\n }\n\n /**\n * Re-scope the agent's client tools to the CURRENT mode (list vs. selected-execution\n * detail). Guarded on {@link lastRegisteredToolMode} so it only calls NavigationService on\n * the mode flip — `publishAgentContext` fires on every filter change but the tool set only\n * changes when an execution is selected/deselected.\n */\n private syncAgentToolsForMode(): void {\n const mode = this.currentToolMode();\n if (mode === this.lastRegisteredToolMode) {\n return;\n }\n this.lastRegisteredToolMode = mode;\n this.navigationService.SetAgentClientTools(this, [\n ...this.buildCommonTools(),\n ...(mode === 'detail' ? this.buildDetailTools() : this.buildListTools()),\n ]);\n }\n\n /** COMMON tools — available in BOTH modes (search, filter, sort, refresh, select-by-id/name). */\n private buildCommonTools(): MonitorAgentTool[] {\n return [\n {\n Name: 'SearchExecutions',\n Description: 'Search the execution log by a free-text term (matches action name, result code, user).',\n ParameterSchema: { type: 'object', properties: { searchTerm: { type: 'string' } }, required: ['searchTerm'] },\n Handler: async (params) => {\n const term = typeof params['searchTerm'] === 'string' ? params['searchTerm'] : '';\n this.OnSearchChange(term);\n return { Success: true };\n },\n },\n {\n Name: 'FilterExecutionsByResult',\n Description: 'Filter executions by result outcome, not by literal result code. Allowed: all, Success, Failed, Error (an alias for Failed), Running.',\n ParameterSchema: { type: 'object', properties: { result: { type: 'string', enum: [...this.resultFilterValues] } }, required: ['result'] },\n Handler: async (params) => {\n const v = ValidateEnumParam(params['result'], this.resultFilterValues, 'result');\n if (!v.ok) return v.result;\n this.OnResultFilterChange(v.value);\n return { Success: true };\n },\n },\n {\n Name: 'FilterExecutionsByTimeRange',\n Description: 'Filter executions by time range. Allowed: 24hours, 7days, 30days, 90days.',\n ParameterSchema: { type: 'object', properties: { timeRange: { type: 'string', enum: [...this.timeRangeValues] } }, required: ['timeRange'] },\n Handler: async (params) => {\n const v = ValidateEnumParam(params['timeRange'], this.timeRangeValues, 'timeRange');\n if (!v.ok) return v.result;\n this.OnTimeRangeChange(v.value);\n return { Success: true };\n },\n },\n {\n Name: 'FilterExecutionsByAction',\n Description: 'Filter executions to a single action by its id OR name (case-insensitive), or \"all\" to clear the action filter.',\n ParameterSchema: { type: 'object', properties: { action: { type: 'string' } }, required: ['action'] },\n Handler: async (params) => {\n const raw = params['action'];\n if (typeof raw !== 'string' || raw.trim() === '') {\n return { Success: false, ErrorMessage: 'A non-empty action id or name is required (use \"all\" to clear).' };\n }\n if (raw.trim().toLowerCase() === 'all') {\n this.OnActionFilterChange('all');\n return { Success: true };\n }\n const found = FindByIdOrNameOrError(raw, Array.from(this.Actions.values()), 'action');\n if (!found.ok) return found.result;\n this.OnActionFilterChange(found.value.ID);\n return { Success: true, Data: { Id: found.value.ID, Name: found.value.Name } };\n },\n },\n {\n Name: 'ClearMonitorFilters',\n Description: 'Reset all execution-monitor filters (result, time range, action) to their defaults.',\n ParameterSchema: { type: 'object', properties: {} },\n Handler: async () => {\n this.ResetFilters();\n return { Success: true };\n },\n },\n {\n Name: 'RefreshMonitorData',\n Description: 'Reload the execution monitoring data (logs, metrics, trends).',\n ParameterSchema: { type: 'object', properties: {} },\n Handler: async () => {\n this.RefreshData();\n return { Success: true };\n },\n },\n ];\n }\n\n /** LIST-mode tools — only when NO execution is selected: select an execution (which flips to detail mode). */\n private buildListTools(): MonitorAgentTool[] {\n return [\n {\n Name: 'SelectExecution',\n Description: 'Select an execution-log entry by its id and open its detail record (view-only run history). Selecting it reveals the detail tools.',\n ParameterSchema: { type: 'object', properties: { executionId: { type: 'string' } }, required: ['executionId'] },\n Handler: async (params) => {\n const found = FindByIdOrError(params['executionId'], this.FilteredExecutions.length ? this.FilteredExecutions : this.Executions, 'execution');\n if (!found.ok) return found.result;\n this.selectExecution(found.value);\n return { Success: true, Data: { Id: found.value.ID, ActionName: this.GetActionName(found.value.ActionID!) } };\n },\n },\n ];\n }\n\n /** DETAIL-mode tools — only when an execution IS selected: open it, jump to its action, clear the selection. */\n private buildDetailTools(): MonitorAgentTool[] {\n return [\n {\n Name: 'OpenSelectedExecutionLog',\n Description: 'Open the detail record for the currently selected execution (view-only run history).',\n ParameterSchema: { type: 'object', properties: {} },\n Handler: async () => {\n if (!this.selectedExecution) return { Success: false, ErrorMessage: 'No execution is currently selected.' };\n this.OpenExecution(this.selectedExecution);\n return { Success: true };\n },\n },\n {\n Name: 'OpenSelectedExecutionAction',\n Description: 'Open the action record that the currently selected execution ran (related-record navigation — does NOT run the action).',\n ParameterSchema: { type: 'object', properties: {} },\n Handler: async () => {\n const actionId = this.selectedExecution?.ActionID;\n if (!actionId) return { Success: false, ErrorMessage: 'No execution is selected, or it has no associated action.' };\n this.OpenAction(actionId);\n return { Success: true, Data: { ActionName: this.GetActionName(actionId) } };\n },\n },\n {\n Name: 'ClearExecutionSelection',\n Description: 'Clear the current execution selection and return to the log-list tools.',\n ParameterSchema: { type: 'object', properties: {} },\n Handler: async () => {\n this.clearExecutionSelection();\n return { Success: true };\n },\n },\n ];\n }\n\n /** Select an execution (sets selection, re-scopes tools to detail mode, re-publishes context). */\n private selectExecution(execution: MJActionExecutionLogEntity): void {\n this.selectedExecution = execution;\n this.syncAgentToolsForMode();\n this.publishAgentContext();\n this.OpenExecution(execution);\n }\n\n /** Clear the execution selection (re-scopes tools back to list mode). */\n private clearExecutionSelection(): void {\n this.selectedExecution = null;\n this.syncAgentToolsForMode();\n this.publishAgentContext();\n }\n\n private async loadData(): Promise<void> {\n try {\n this.isLoading = true;\n \n const rv = RunView.FromMetadataProvider(this.ProviderToUse);\n const [executionsResult, actionsResult] = await rv.RunViews([\n {\n EntityName: 'MJ: Action Execution Logs', \n OrderBy: 'StartedAt DESC' \n },\n {\n EntityName: 'MJ: Actions', \n OrderBy: 'Name' \n }\n ]);\n \n if (!executionsResult.Success || !actionsResult.Success) {\n throw new Error('Failed to load data');\n }\n \n const executions = executionsResult.Results as MJActionExecutionLogEntity[];\n const actions = actionsResult.Results as MJActionEntity[];\n\n this.Executions = executions;\n this.populateActionsMap(actions);\n this.buildActionOptions(actions);\n this.calculateMetrics();\n this.generateExecutionTrends();\n this.applyFilters();\n this.publishAgentContext();\n\n } catch (error) {\n LogError('Failed to load execution monitoring data', undefined, error);\n } finally {\n this.isLoading = false;\n this.NotifyLoadComplete();\n this.cdr.detectChanges();\n }\n }\n\n private populateActionsMap(actions: MJActionEntity[]): void {\n this.Actions.clear();\n actions.forEach(action => {\n this.Actions.set(action.ID, action);\n });\n }\n\n private buildActionOptions(actions: MJActionEntity[]): void {\n this.ActionOptions = [\n { text: 'All Actions', value: 'all' },\n ...actions.map(action => ({\n text: action.Name,\n value: action.ID\n }))\n ];\n }\n\n private calculateMetrics(): void {\n const now = new Date();\n const today = new Date(now.getFullYear(), now.getMonth(), now.getDate());\n const weekAgo = new Date(today.getTime() - 7 * 24 * 60 * 60 * 1000);\n\n this.Metrics = {\n totalExecutions: this.Executions.length,\n // Classified, not string-compared. The writer emits UPPER_SNAKE (`SUCCESS`,\n // `RUNTIME_ERROR`, …) while these comparisons looked for Title Case, so a database of\n // successful runs reported 0 successes and 0 failures — beside rows that rendered\n // green, because the colour helpers lowercased and these did not.\n successfulExecutions: this.Executions.filter(e => ClassifyActionResultCode(e.ResultCode) === 'success').length,\n failedExecutions: this.Executions.filter(e => ClassifyActionResultCode(e.ResultCode) === 'failure').length,\n averageDuration: this.calculateAverageDuration(),\n executionsToday: this.Executions.filter(e => \n new Date(e.StartedAt!) >= today\n ).length,\n executionsThisWeek: this.Executions.filter(e => \n new Date(e.StartedAt!) >= weekAgo\n ).length,\n currentlyRunning: this.Executions.filter(e =>\n ClassifyActionResultCode(e.ResultCode) === 'running' || !e.EndedAt\n ).length\n };\n }\n\n private calculateAverageDuration(): number {\n const completedExecutions = this.Executions.filter(e => \n e.StartedAt && e.EndedAt\n );\n \n if (completedExecutions.length === 0) return 0;\n\n const totalDuration = completedExecutions.reduce((sum, execution) => {\n const start = new Date(execution.StartedAt!).getTime();\n const end = new Date(execution.EndedAt!).getTime();\n return sum + (end - start);\n }, 0);\n\n return Math.round(totalDuration / completedExecutions.length / 1000); // Average in seconds\n }\n\n private generateExecutionTrends(): void {\n const trends = new Map<string, ExecutionTrend>();\n const last7Days = Array.from({ length: 7 }, (_, i) => {\n const date = new Date();\n date.setDate(date.getDate() - i);\n return date.toISOString().split('T')[0];\n }).reverse();\n\n // Initialize trends for last 7 days\n last7Days.forEach(date => {\n trends.set(date, {\n date,\n successful: 0,\n failed: 0,\n total: 0\n });\n });\n\n // Populate trends with execution data\n this.Executions.forEach(execution => {\n if (!execution.StartedAt) return;\n \n const date = new Date(execution.StartedAt).toISOString().split('T')[0];\n const trend = trends.get(date);\n \n if (trend) {\n trend.total++;\n const klass = ClassifyActionResultCode(execution.ResultCode);\n if (klass === 'success') {\n trend.successful++;\n } else if (klass === 'failure') {\n trend.failed++;\n }\n }\n });\n\n this.ExecutionTrends = Array.from(trends.values());\n }\n\n private applyFilters(): void {\n let filtered = [...this.Executions];\n\n // Apply time range filter\n const timeRange = this.SelectedTimeRange$.value;\n if (timeRange !== 'all') {\n const cutoffDate = this.getTimeRangeCutoff(timeRange);\n filtered = filtered.filter(e => \n e.StartedAt && new Date(e.StartedAt) >= cutoffDate\n );\n }\n\n // Apply result filter\n const result = this.SelectedResult$.value;\n if (result !== 'all') {\n const wanted = ActionExecutionMonitoringComponent.RESULT_FILTER_CLASSES[result];\n if (wanted === 'running') {\n filtered = filtered.filter(e => !e.EndedAt || ClassifyActionResultCode(e.ResultCode) === 'running');\n } else if (wanted) {\n // Compared by CLASS, not by literal equality. The old `e.ResultCode === result`\n // matched the chip label against the stored code, so every chip returned an empty\n // list on a database written by the Runtime executor.\n filtered = filtered.filter(e => ClassifyActionResultCode(e.ResultCode) === wanted);\n }\n }\n\n // Apply action filter\n const actionId = this.SelectedAction$.value;\n if (actionId !== 'all') {\n filtered = filtered.filter(e => UUIDsEqual(e.ActionID, actionId));\n }\n\n // Apply search filter\n const searchTerm = this.SearchTerm$.value.toLowerCase();\n if (searchTerm) {\n filtered = filtered.filter(e => {\n const action = this.Actions.get(e.ActionID!);\n return (\n action?.Name.toLowerCase().includes(searchTerm) ||\n e.ResultCode?.toLowerCase().includes(searchTerm) ||\n e.UserID?.toLowerCase().includes(searchTerm)\n );\n });\n }\n\n this.FilteredExecutions = filtered;\n }\n\n private getTimeRangeCutoff(timeRange: string): Date {\n const now = new Date();\n switch (timeRange) {\n case '24hours':\n return new Date(now.getTime() - 24 * 60 * 60 * 1000);\n case '7days':\n return new Date(now.getTime() - 7 * 24 * 60 * 60 * 1000);\n case '30days':\n return new Date(now.getTime() - 30 * 24 * 60 * 60 * 1000);\n case '90days':\n return new Date(now.getTime() - 90 * 24 * 60 * 60 * 1000);\n default:\n return new Date(0);\n }\n }\n\n public OnSearchChange(searchTerm: string): void {\n this.SearchTerm$.next(searchTerm);\n }\n\n /** @deprecated Use {@link OnSearchChange}. */\n public onSearchChange(searchTerm: string): void {\n return this.OnSearchChange(searchTerm);\n }\n\n public OnResultFilterChange(result: string): void {\n this.SelectedResult$.next(result);\n }\n\n /** @deprecated Use {@link OnResultFilterChange}. */\n public onResultFilterChange(result: string): void {\n return this.OnResultFilterChange(result);\n }\n\n public OnTimeRangeChange(timeRange: string): void {\n this.SelectedTimeRange$.next(timeRange);\n }\n\n /** @deprecated Use {@link OnTimeRangeChange}. */\n public onTimeRangeChange(timeRange: string): void {\n return this.OnTimeRangeChange(timeRange);\n }\n\n public OnActionFilterChange(actionId: string): void {\n this.SelectedAction$.next(actionId);\n }\n\n /** @deprecated Use {@link OnActionFilterChange}. */\n public onActionFilterChange(actionId: string): void {\n return this.OnActionFilterChange(actionId);\n }\n\n // ───── Filter-popover plumbing for the [actions] slot ─────\n\n public get FilterFields(): FilterFieldConfig[] {\n return [\n {\n key: 'timeRange',\n type: 'dropdown',\n label: 'Time range',\n icon: 'fa-solid fa-clock',\n options: this.TimeRangeOptions\n },\n {\n key: 'result',\n type: 'dropdown',\n label: 'Result',\n icon: 'fa-solid fa-circle-info',\n // Copied because FilterFieldConfig.options is a mutable array and the source list is\n // a shared constant — the panel must not be able to reorder it for every instance.\n options: [...this.ResultOptions]\n },\n {\n key: 'action',\n type: 'dropdown',\n label: 'Action',\n icon: 'fa-solid fa-bolt',\n filterable: true,\n options: this.ActionOptions\n }\n ];\n }\n public get FilterValues(): Record<string, unknown> {\n return {\n timeRange: this.SelectedTimeRange$.value,\n result: this.SelectedResult$.value,\n action: this.SelectedAction$.value\n };\n }\n public get ActiveFilterCount(): number {\n let n = 0;\n if (this.SelectedTimeRange$.value !== '7days') n++;\n if (this.SelectedResult$.value !== 'all') n++;\n if (this.SelectedAction$.value !== 'all') n++;\n return n;\n }\n public OnFilterValuesChange(v: Record<string, unknown>): void {\n const next = (v ?? {}) as { timeRange?: string; result?: string; action?: string };\n if ((next.timeRange ?? '7days') !== this.SelectedTimeRange$.value) {\n this.OnTimeRangeChange(next.timeRange ?? '7days');\n }\n if ((next.result ?? 'all') !== this.SelectedResult$.value) {\n this.OnResultFilterChange(next.result ?? 'all');\n }\n if ((next.action ?? 'all') !== this.SelectedAction$.value) {\n this.OnActionFilterChange(next.action ?? 'all');\n }\n }\n\n /** @deprecated Use {@link OnFilterValuesChange}. */\n public onFilterValuesChange(v: Record<string, unknown>): void {\n return this.OnFilterValuesChange(v);\n }\n public ResetFilters(): void {\n if (this.SelectedTimeRange$.value !== '7days') this.OnTimeRangeChange('7days');\n if (this.SelectedResult$.value !== 'all') this.OnResultFilterChange('all');\n if (this.SelectedAction$.value !== 'all') this.OnActionFilterChange('all');\n }\n\n /** @deprecated Use {@link ResetFilters}. */\n public resetFilters(): void {\n return this.ResetFilters();\n }\n\n public OpenExecution(execution: MJActionExecutionLogEntity): void {\n this.navigationService.OpenEntityRecord('MJ: Action Execution Logs', CompositeKey.FromID(execution.ID));\n }\n\n /** @deprecated Use {@link OpenExecution}. */\n public openExecution(execution: MJActionExecutionLogEntity): void {\n return this.OpenExecution(execution);\n }\n\n public OpenAction(actionId: string): void {\n this.navigationService.OpenEntityRecord('MJ: Actions', CompositeKey.FromID(actionId));\n }\n\n /** @deprecated Use {@link OpenAction}. */\n public openAction(actionId: string): void {\n return this.OpenAction(actionId);\n }\n\n public GetActionName(actionId: string): string {\n return this.Actions.get(actionId)?.Name || `Action ${actionId}`;\n }\n\n /** @deprecated Use {@link GetActionName}. */\n public getActionName(actionId: string): string {\n return this.GetActionName(actionId);\n }\n\n public GetResultColor(resultCode: string | null): 'success' | 'warning' | 'error' | 'info' {\n return ActionResultColor(resultCode);\n }\n\n /** @deprecated Use {@link GetResultColor}. */\n public getResultColor(resultCode: string | null): 'success' | 'warning' | 'error' | 'info' {\n return this.GetResultColor(resultCode);\n }\n\n public GetResultIcon(resultCode: string | null): string {\n return ActionResultIcon(resultCode);\n }\n\n /** @deprecated Use {@link GetResultIcon}. */\n public getResultIcon(resultCode: string | null): string {\n return this.GetResultIcon(resultCode);\n }\n\n public GetDuration(execution: MJActionExecutionLogEntity): string {\n if (!execution.StartedAt || !execution.EndedAt) {\n return execution.EndedAt ? 'Unknown' : 'Running';\n }\n\n const start = new Date(execution.StartedAt).getTime();\n const end = new Date(execution.EndedAt).getTime();\n const duration = Math.round((end - start) / 1000);\n\n if (duration < 60) return `${duration}s`;\n if (duration < 3600) return `${Math.round(duration / 60)}m`;\n return `${Math.round(duration / 3600)}h`;\n }\n\n /** @deprecated Use {@link GetDuration}. */\n public getDuration(execution: MJActionExecutionLogEntity): string {\n return this.GetDuration(execution);\n }\n\n /**\n * Successes as a share of SETTLED runs — see {@link ActionSuccessRate}. Dividing by\n * `totalExecutions` put still-running and unrecognised-code rows in the denominator, which\n * drags the rate down for reasons that are not failures.\n */\n public GetSuccessRate(): number {\n return ActionSuccessRate(this.Executions.map(e => e.ResultCode));\n }\n\n /** @deprecated Use {@link GetSuccessRate}. */\n public getSuccessRate(): number {\n return this.GetSuccessRate();\n }\n\n public RefreshData(): void {\n this.loadData();\n }\n\n /** @deprecated Use {@link RefreshData}. */\n public refreshData(): void {\n return this.RefreshData();\n }\n\n // Metric card click handlers\n public OnTotalExecutionsClick(): void {\n // Reset filters to show all executions\n this.SelectedResult$.next('all');\n this.SelectedTimeRange$.next('7days');\n this.SelectedAction$.next('all');\n }\n\n /** @deprecated Use {@link OnTotalExecutionsClick}. */\n public onTotalExecutionsClick(): void {\n return this.OnTotalExecutionsClick();\n }\n\n public OnSuccessRateClick(): void {\n this.SelectedResult$.next('Success');\n }\n\n /** @deprecated Use {@link OnSuccessRateClick}. */\n public onSuccessRateClick(): void {\n return this.OnSuccessRateClick();\n }\n\n public OnFailedExecutionsClick(): void {\n this.SelectedResult$.next('Failed');\n }\n\n /** @deprecated Use {@link OnFailedExecutionsClick}. */\n public onFailedExecutionsClick(): void {\n return this.OnFailedExecutionsClick();\n }\n\n public OnRunningExecutionsClick(): void {\n this.SelectedResult$.next('Running');\n }\n\n /** @deprecated Use {@link OnRunningExecutionsClick}. */\n public onRunningExecutionsClick(): void {\n return this.OnRunningExecutionsClick();\n }\n\n async GetResourceDisplayName(data: ResourceData): Promise<string> {\n return 'Execution Monitoring';\n }\n\n async GetResourceIconClass(data: ResourceData): Promise<string> {\n return 'fa-solid fa-chart-line';\n }\n}","<mj-page-layout>\n <mj-page-header\n Title=\"Execution Monitor\"\n Icon=\"fa-solid fa-chart-line\"\n Subtitle=\"Action execution history, latency, and error rates\">\n <!-- [meta] intentionally omitted — chrome slot discipline audit Task B.\n totalExecutions was a single inventory count duplicated by the\n body's metrics cards. -->\n <div actions>\n <mj-refresh-button (Clicked)=\"refreshData()\"></mj-refresh-button>\n </div>\n <div toolbar>\n <mj-page-search\n Placeholder=\"Search executions...\"\n [Value]=\"searchTerm$.value\"\n (ValueChange)=\"onSearchChange($event)\">\n </mj-page-search>\n <mj-filter-popover\n [ActiveCount]=\"ActiveFilterCount\"\n [ShowClearAll]=\"ActiveFilterCount > 0\"\n (ClearAllRequested)=\"resetFilters()\">\n <mj-filter-panel\n [Fields]=\"FilterFields\"\n [Values]=\"FilterValues\"\n (ValuesChange)=\"onFilterValuesChange($event)\"\n (Reset)=\"resetFilters()\">\n </mj-filter-panel>\n </mj-filter-popover>\n </div>\n </mj-page-header>\n\n <mj-page-body>\n <div class=\"execution-monitoring\" >\n\n <!-- Metrics Summary -->\n <div class=\"metrics-summary\">\n <div class=\"metric-card total clickable\" (click)=\"onTotalExecutionsClick()\">\n <div class=\"metric-icon\">\n <i class=\"fa-solid fa-play-circle\"></i>\n </div>\n <div class=\"metric-content\">\n <div class=\"metric-value\">{{ metrics.totalExecutions }}</div>\n <div class=\"metric-label\">Total Executions</div>\n </div>\n </div>\n\n <div class=\"metric-card success clickable\" (click)=\"onSuccessRateClick()\">\n <div class=\"metric-icon\">\n <i class=\"fa-solid fa-check-circle\"></i>\n </div>\n <div class=\"metric-content\">\n <div class=\"metric-value\">{{ getSuccessRate() }}%</div>\n <div class=\"metric-label\">Success Rate</div>\n <div class=\"metric-detail\">{{ metrics.successfulExecutions }}/{{ metrics.totalExecutions }}</div>\n </div>\n </div>\n\n <div class=\"metric-card error clickable\" (click)=\"onFailedExecutionsClick()\">\n <div class=\"metric-icon\">\n <i class=\"fa-solid fa-exclamation-circle\"></i>\n </div>\n <div class=\"metric-content\">\n <div class=\"metric-value\">{{ metrics.failedExecutions }}</div>\n <div class=\"metric-label\">Failed Executions</div>\n </div>\n </div>\n\n <div class=\"metric-card duration\">\n <div class=\"metric-icon\">\n <i class=\"fa-solid fa-clock\"></i>\n </div>\n <div class=\"metric-content\">\n <div class=\"metric-value\">{{ metrics.averageDuration }}s</div>\n <div class=\"metric-label\">Avg Duration</div>\n </div>\n </div>\n\n <div class=\"metric-card activity\">\n <div class=\"metric-icon\">\n <i class=\"fa-solid fa-calendar-day\"></i>\n </div>\n <div class=\"metric-content\">\n <div class=\"metric-value\">{{ metrics.executionsToday }}</div>\n <div class=\"metric-label\">Today</div>\n <div class=\"metric-detail\">{{ metrics.executionsThisWeek }} this week</div>\n </div>\n </div>\n\n <div class=\"metric-card running clickable\" (click)=\"onRunningExecutionsClick()\">\n <div class=\"metric-icon\">\n <i class=\"fa-solid fa-spinner fa-spin\"></i>\n </div>\n <div class=\"metric-content\">\n <div class=\"metric-value\">{{ metrics.currentlyRunning }}</div>\n <div class=\"metric-label\">Currently Running</div>\n </div>\n </div>\n </div>\n\n <!-- Execution Trends Chart -->\n <div class=\"trends-section\">\n <div class=\"section-header\">\n <h4><i class=\"fa-solid fa-chart-area\"></i> 7-Day Execution Trends</h4>\n </div>\n <div class=\"trends-chart\">\n @if (executionTrends.length > 0) {\n <div class=\"trend-bars\">\n @for (trend of executionTrends; track trend.date) {\n <div class=\"trend-bar\">\n <div class=\"bar-container\">\n <div class=\"bar-success\" [style.height.%]=\"trend.total > 0 ? (trend.successful / trend.total) * 100 : 0\"></div>\n <div class=\"bar-failed\" [style.height.%]=\"trend.total > 0 ? (trend.failed / trend.total) * 100 : 0\"></div>\n </div>\n <div class=\"bar-label\">{{ trend.date | date:'MMM d' }}</div>\n <div class=\"bar-total\">{{ trend.total }}</div>\n </div>\n }\n </div>\n <div class=\"chart-legend\">\n <div class=\"legend-item\">\n <div class=\"legend-color success\"></div>\n <span>Successful</span>\n </div>\n <div class=\"legend-item\">\n <div class=\"legend-color failed\"></div>\n <span>Failed</span>\n </div>\n </div>\n } @else {\n <mj-empty-state class=\"empty-chart\" Size=\"compact\"\n Icon=\"fa-solid fa-chart-area\"\n Title=\"No execution trends available\" />\n }\n </div>\n </div>\n\n <!-- Execution List -->\n <div class=\"executions-section\">\n <div class=\"section-header\">\n <h4><i class=\"fa-solid fa-list\"></i> Recent Executions</h4>\n <div class=\"results-count\">{{ filteredExecutions.length }} executions</div>\n </div>\n \n <div class=\"executions-list\">\n @if (filteredExecutions.length > 0) {\n @for (execution of filteredExecutions; track execution.ID) {\n <div class=\"execution-item\" (click)=\"openExecution(execution)\">\n <div class=\"execution-status\">\n <i [class]=\"getResultIcon(execution.ResultCode)\"></i>\n </div>\n \n <div class=\"execution-main\">\n <div class=\"execution-action\" (click)=\"openAction(execution.ActionID!); $event.stopPropagation()\">\n {{ getActionName(execution.ActionID!) }}\n </div>\n <div class=\"execution-details\">\n <span class=\"execution-time\">{{ execution.StartedAt | date:'MMM d, HH:mm:ss' }}</span>\n <span class=\"execution-user\">{{ execution.UserID }}</span>\n <span class=\"execution-duration\">{{ getDuration(execution) }}</span>\n </div>\n </div>\n \n <div class=\"execution-result\">\n <span class=\"status-chip\" [attr.data-color]=\"getResultColor(execution.ResultCode)\">\n {{ execution.ResultCode || 'Unknown' }}\n </span>\n </div>\n \n <div class=\"execution-actions\">\n <button mjButton\n variant=\"flat\"\n (click)=\"$event.stopPropagation()\">\n <i class=\"fa-solid fa-ellipsis-vertical\"></i>\n </button>\n </div>\n </div>\n }\n } @else {\n <mj-empty-state Variant=\"no-results\"\n Title=\"No executions found\"\n Message=\"Try adjusting your filters or search terms\" />\n }\n </div>\n </div>\n\n @if (isLoading) {\n <div class=\"loading-overlay\">\n <mj-loading [showText]=\"false\" size=\"medium\"></mj-loading>\n </div>\n }\n</div>\n </mj-page-body>\n</mj-page-layout>"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"action-card.component.d.ts","sourceRoot":"","sources":["../../../../src/Actions/components/explorer/action-card.component.ts"],"names":[],"mappings":"AAAA,OAAO,EAIL,YAAY,EAEZ,iBAAiB,EAClB,MAAM,eAAe,CAAC;AACvB,OAAO,EAAE,sBAAsB,EAA8B,MAAM,+BAA+B,CAAC;AACnG,OAAO,EAAE,sBAAsB,EAAE,MAAM,8BAA8B,CAAC;AAEtE,OAAO,EAAE,oBAAoB,EAAE,MAAM,+BAA+B,CAAC;;
|
|
1
|
+
{"version":3,"file":"action-card.component.d.ts","sourceRoot":"","sources":["../../../../src/Actions/components/explorer/action-card.component.ts"],"names":[],"mappings":"AAAA,OAAO,EAIL,YAAY,EAEZ,iBAAiB,EAClB,MAAM,eAAe,CAAC;AACvB,OAAO,EAAE,sBAAsB,EAA8B,MAAM,+BAA+B,CAAC;AACnG,OAAO,EAAE,sBAAsB,EAAE,MAAM,8BAA8B,CAAC;AAEtE,OAAO,EAAE,oBAAoB,EAAE,MAAM,+BAA+B,CAAC;;AAGrE,MAAM,WAAW,oBAAoB;IACnC,eAAe,EAAE,MAAM,CAAC;IACxB,WAAW,EAAE,MAAM,CAAC;IACpB,YAAY,EAAE,IAAI,GAAG,IAAI,CAAC;IAC1B,SAAS,EAAE,OAAO,CAAC;IACnB,QAAQ,EAAE,OAAO,CAAC;CACnB;AAED,qBAOa,mBAAoB,SAAQ,oBAAoB;IAiB/C,OAAO,CAAC,GAAG;IAhBd,MAAM,EAAG,sBAAsB,CAAC;IAChC,UAAU,EAAE,GAAG,CAAC,MAAM,EAAE,sBAAsB,CAAC,CAAa;IAC3D,WAAW,uCAA8C;IACzD,SAAS,uCAA8C;IACvD,QAAQ,uCAA8C;IACtD,aAAa,uBAA8B;IAE9C,UAAU,UAAS;IACnB,cAAc,EAAE,oBAAoB,CAMzC;gBAEkB,GAAG,EAAE,iBAAiB;IAEnC,WAAW,IAAI,IAAI;IAI1B,2CAA2C;IACpC,WAAW,IAAI,IAAI;IAInB,WAAW,CAAC,KAAK,EAAE,UAAU,GAAG,IAAI;IAK3C,2CAA2C;IACpC,WAAW,CAAC,KAAK,EAAE,UAAU,GAAG,IAAI;IAIpC,UAAU,CAAC,KAAK,EAAE,UAAU,GAAG,IAAI;IAK1C,0CAA0C;IACnC,UAAU,CAAC,KAAK,EAAE,UAAU,GAAG,IAAI;IAInC,eAAe,CAAC,KAAK,EAAE,UAAU,GAAG,IAAI;IAO/C,+CAA+C;IACxC,eAAe,CAAC,KAAK,EAAE,UAAU,GAAG,IAAI;IAIxC,cAAc,CAAC,KAAK,EAAE,UAAU,GAAG,IAAI;IAS9C,8CAA8C;IACvC,cAAc,CAAC,KAAK,EAAE,UAAU,GAAG,IAAI;YAIhC,kBAAkB;IAuEzB,eAAe,IAAI,MAAM;IAKhC,+CAA+C;IACxC,eAAe,IAAI,MAAM;IAIzB,cAAc,IAAI,SAAS,GAAG,SAAS,GAAG,OAAO,GAAG,MAAM;IASjE,8CAA8C;IACvC,cAAc,IAAI,SAAS,GAAG,SAAS,GAAG,OAAO,GAAG,MAAM;IAI1D,aAAa,IAAI,MAAM;IAY9B,6CAA6C;IACtC,aAAa,IAAI,MAAM;IAIvB,YAAY,IAAI,MAAM;IAI7B,4CAA4C;IACrC,YAAY,IAAI,MAAM;IAItB,qBAAqB,IAAI,MAAM;IAStC,qDAAqD;IAC9C,qBAAqB,IAAI,MAAM;IAI/B,sBAAsB,IAAI,MAAM;IASvC,sDAAsD;IAC/C,sBAAsB,IAAI,MAAM;IAIhC,UAAU,CAAC,IAAI,EAAE,IAAI,GAAG,IAAI,GAAG,MAAM;yCA/NjC,mBAAmB;2CAAnB,mBAAmB;CA6O/B"}
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import { Component, Input, Output, EventEmitter, ChangeDetectionStrategy } from '@angular/core';
|
|
2
2
|
import { RunView } from '@memberjunction/core';
|
|
3
3
|
import { BaseAngularComponent } from '@memberjunction/ng-base-types';
|
|
4
|
+
import { IsActionResultSuccess } from '../../action-result-code';
|
|
4
5
|
import * as i0 from "@angular/core";
|
|
5
6
|
import * as i1 from "@memberjunction/ng-ui-components";
|
|
6
7
|
import * as i2 from "@memberjunction/ng-shared-generic";
|
|
@@ -245,9 +246,9 @@ export class ActionCardComponent extends BaseAngularComponent {
|
|
|
245
246
|
if (isSuccess !== undefined) {
|
|
246
247
|
return isSuccess;
|
|
247
248
|
}
|
|
248
|
-
//
|
|
249
|
-
|
|
250
|
-
return
|
|
249
|
+
// No `MJ: Action Result Codes` row declares this code — fall back to the shared
|
|
250
|
+
// classifier rather than a third private vocabulary.
|
|
251
|
+
return IsActionResultSuccess(e.ResultCode);
|
|
251
252
|
}).length;
|
|
252
253
|
this.ExecutionStats = {
|
|
253
254
|
totalExecutions: executions.length,
|
|
@@ -447,5 +448,5 @@ export class ActionCardComponent extends BaseAngularComponent {
|
|
|
447
448
|
}], CategoryClick: [{
|
|
448
449
|
type: Output
|
|
449
450
|
}] }); })();
|
|
450
|
-
(() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassDebugInfo(ActionCardComponent, { className: "ActionCardComponent", filePath: "src/Actions/components/explorer/action-card.component.ts", lineNumber:
|
|
451
|
+
(() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassDebugInfo(ActionCardComponent, { className: "ActionCardComponent", filePath: "src/Actions/components/explorer/action-card.component.ts", lineNumber: 30 }); })();
|
|
451
452
|
//# sourceMappingURL=action-card.component.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"action-card.component.js","sourceRoot":"","sources":["../../../../src/Actions/components/explorer/action-card.component.ts","../../../../src/Actions/components/explorer/action-card.component.html"],"names":[],"mappings":"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","sourcesContent":["import {\n Component,\n Input,\n Output,\n EventEmitter,\n ChangeDetectionStrategy,\n ChangeDetectorRef\n} from '@angular/core';\nimport { MJActionCategoryEntity, MJActionExecutionLogEntity } from '@memberjunction/core-entities';\nimport { MJActionEntityExtended } from '@memberjunction/actions-base';\nimport { RunView } from '@memberjunction/core';\nimport { BaseAngularComponent } from '@memberjunction/ng-base-types';\n\nexport interface ActionExecutionStats {\n totalExecutions: number; // case-violation-ok-legacy-back-compat: the type is named in an exported signature, so consumers build object literals against it; an interface has no runtime carrier for a stub\n successRate: number; // case-violation-ok-legacy-back-compat: the type is named in an exported signature, so consumers build object literals against it; an interface has no runtime carrier for a stub\n lastExecuted: Date | null; // case-violation-ok-legacy-back-compat: the type is named in an exported signature, so consumers build object literals against it; an interface has no runtime carrier for a stub\n isLoading: boolean; // case-violation-ok-legacy-back-compat: the type is named in an exported signature, so consumers build object literals against it; an interface has no runtime carrier for a stub\n isLoaded: boolean; // case-violation-ok-legacy-back-compat: the type is named in an exported signature, so consumers build object literals against it; an interface has no runtime carrier for a stub\n}\n\n@Component({\n standalone: false,\n selector: 'mj-action-card',\n templateUrl: './action-card.component.html',\n styleUrls: ['./action-card.component.css'],\n changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class ActionCardComponent extends BaseAngularComponent {\n @Input() Action!: MJActionEntityExtended;\n @Input() Categories: Map<string, MJActionCategoryEntity> = new Map();\n @Output() ActionClick = new EventEmitter<MJActionEntityExtended>();\n @Output() EditClick = new EventEmitter<MJActionEntityExtended>();\n @Output() RunClick = new EventEmitter<MJActionEntityExtended>();\n @Output() CategoryClick = new EventEmitter<string>();\n\n public IsExpanded = false;\n public ExecutionStats: ActionExecutionStats = {\n totalExecutions: 0,\n successRate: 0,\n lastExecuted: null,\n isLoading: false,\n isLoaded: false\n };\n\n constructor(private cdr: ChangeDetectorRef) { super(); }\n\n public OnCardClick(): void {\n this.ActionClick.emit(this.Action);\n }\n\n /** @deprecated Use {@link OnCardClick}. */\n public onCardClick(): void {\n return this.OnCardClick();\n }\n\n public OnEditClick(event: MouseEvent): void {\n event.stopPropagation();\n this.EditClick.emit(this.Action);\n }\n\n /** @deprecated Use {@link OnEditClick}. */\n public onEditClick(event: MouseEvent): void {\n return this.OnEditClick(event);\n }\n\n public OnRunClick(event: MouseEvent): void {\n event.stopPropagation();\n this.RunClick.emit(this.Action);\n }\n\n /** @deprecated Use {@link OnRunClick}. */\n public onRunClick(event: MouseEvent): void {\n return this.OnRunClick(event);\n }\n\n public OnCategoryClick(event: MouseEvent): void {\n event.stopPropagation();\n if (this.Action.CategoryID) {\n this.CategoryClick.emit(this.Action.CategoryID);\n }\n }\n\n /** @deprecated Use {@link OnCategoryClick}. */\n public onCategoryClick(event: MouseEvent): void {\n return this.OnCategoryClick(event);\n }\n\n public ToggleExpanded(event: MouseEvent): void {\n event.stopPropagation();\n this.IsExpanded = !this.IsExpanded;\n\n if (this.IsExpanded && !this.ExecutionStats.isLoaded && !this.ExecutionStats.isLoading) {\n this.loadExecutionStats();\n }\n }\n\n /** @deprecated Use {@link ToggleExpanded}. */\n public toggleExpanded(event: MouseEvent): void {\n return this.ToggleExpanded(event);\n }\n\n private async loadExecutionStats(): Promise<void> {\n this.ExecutionStats.isLoading = true;\n this.cdr.markForCheck();\n\n try {\n const rv = RunView.FromMetadataProvider(this.ProviderToUse);\n\n // Load both executions and result codes in parallel\n const [executionsResult, resultCodesResult] = await rv.RunViews([\n {\n EntityName: 'MJ: Action Execution Logs',\n ExtraFilter: `ActionID='${this.Action.ID}'`,\n OrderBy: 'StartedAt DESC',\n MaxRows: 100,\n ResultType: 'simple',\n Fields: ['ID', 'ResultCode', 'StartedAt']\n },\n {\n EntityName: 'MJ: Action Result Codes',\n ExtraFilter: `ActionID='${this.Action.ID}'`,\n ResultType: 'simple',\n Fields: ['ResultCode', 'IsSuccess']\n }\n ]);\n\n if (executionsResult.Success && executionsResult.Results) {\n const executions = executionsResult.Results as { ID: string; ResultCode: string; StartedAt: Date }[];\n\n // Build a map of result codes to IsSuccess\n const successMap = new Map<string, boolean>();\n if (resultCodesResult.Success && resultCodesResult.Results) {\n const resultCodes = resultCodesResult.Results as { ResultCode: string; IsSuccess: boolean }[];\n resultCodes.forEach(rc => {\n successMap.set(rc.ResultCode, rc.IsSuccess);\n });\n }\n\n // Count successful executions using result code lookup\n const successful = executions.filter(e => {\n if (!e.ResultCode) return false;\n // Look up the result code in the map\n const isSuccess = successMap.get(e.ResultCode);\n // If result code is defined in the map, use it; otherwise fall back to heuristic\n if (isSuccess !== undefined) {\n return isSuccess;\n }\n // Fallback heuristic for unknown result codes\n const code = e.ResultCode.toLowerCase();\n return code === 'success' || code === 'ok' || code === 'completed';\n }).length;\n\n this.ExecutionStats = {\n totalExecutions: executions.length,\n successRate: executions.length > 0 ? Math.round((successful / executions.length) * 100) : 0,\n lastExecuted: executions.length > 0 ? new Date(executions[0].StartedAt) : null,\n isLoading: false,\n isLoaded: true\n };\n } else {\n this.ExecutionStats.isLoading = false;\n this.ExecutionStats.isLoaded = true;\n }\n } catch (error) {\n console.error('Failed to load execution stats:', error);\n this.ExecutionStats.isLoading = false;\n this.ExecutionStats.isLoaded = true;\n }\n\n this.cdr.markForCheck();\n }\n\n public GetCategoryName(): string {\n if (!this.Action.CategoryID) return 'Uncategorized';\n return this.Categories.get(this.Action.CategoryID)?.Name || 'Unknown Category';\n }\n\n /** @deprecated Use {@link GetCategoryName}. */\n public getCategoryName(): string {\n return this.GetCategoryName();\n }\n\n public GetStatusColor(): 'success' | 'warning' | 'error' | 'info' {\n switch (this.Action.Status) {\n case 'Active': return 'success';\n case 'Pending': return 'warning';\n case 'Disabled': return 'error';\n default: return 'info';\n }\n }\n\n /** @deprecated Use {@link GetStatusColor}. */\n public getStatusColor(): 'success' | 'warning' | 'error' | 'info' {\n return this.GetStatusColor();\n }\n\n public GetActionIcon(): string {\n // Use custom icon if set, otherwise derive from type\n if (this.Action.IconClass) {\n return this.Action.IconClass;\n }\n switch (this.Action.Type) {\n case 'Generated': return 'fa-solid fa-robot';\n case 'Custom': return 'fa-solid fa-code';\n default: return 'fa-solid fa-bolt';\n }\n }\n\n /** @deprecated Use {@link GetActionIcon}. */\n public getActionIcon(): string {\n return this.GetActionIcon();\n }\n\n public GetTypeLabel(): string {\n return this.Action.Type === 'Generated' ? 'AI Generated' : 'Custom';\n }\n\n /** @deprecated Use {@link GetTypeLabel}. */\n public getTypeLabel(): string {\n return this.GetTypeLabel();\n }\n\n public GetApprovalStatusIcon(): string {\n switch (this.Action.CodeApprovalStatus) {\n case 'Approved': return 'fa-solid fa-check-circle';\n case 'Pending': return 'fa-solid fa-clock';\n case 'Rejected': return 'fa-solid fa-times-circle';\n default: return 'fa-solid fa-question-circle';\n }\n }\n\n /** @deprecated Use {@link GetApprovalStatusIcon}. */\n public getApprovalStatusIcon(): string {\n return this.GetApprovalStatusIcon();\n }\n\n public GetApprovalStatusColor(): string {\n switch (this.Action.CodeApprovalStatus) {\n case 'Approved': return 'success';\n case 'Pending': return 'warning';\n case 'Rejected': return 'error';\n default: return 'info';\n }\n }\n\n /** @deprecated Use {@link GetApprovalStatusColor}. */\n public getApprovalStatusColor(): string {\n return this.GetApprovalStatusColor();\n }\n\n public formatDate(date: Date | null): string {\n if (!date) return 'Never';\n const now = new Date();\n const diff = now.getTime() - date.getTime();\n const minutes = Math.floor(diff / 60000);\n const hours = Math.floor(diff / 3600000);\n const days = Math.floor(diff / 86400000);\n\n if (minutes < 1) return 'Just now';\n if (minutes < 60) return `${minutes}m ago`;\n if (hours < 24) return `${hours}h ago`;\n if (days < 7) return `${days}d ago`;\n return date.toLocaleDateString();\n }\n}\n","<div class=\"action-card\" [class.expanded]=\"IsExpanded\" (click)=\"onCardClick()\">\n <div class=\"card-main\">\n <!-- Icon -->\n <div class=\"action-icon\" [class.ai-generated]=\"Action.Type === 'Generated'\">\n <i [class]=\"getActionIcon()\"></i>\n </div>\n\n <!-- Content -->\n <div class=\"action-content\">\n <div class=\"action-header\">\n <h3 class=\"action-name\" [title]=\"Action.Name\">{{ Action.Name }}</h3>\n <div class=\"action-badges\">\n <span class=\"status-chip\" [attr.data-color]=\"getStatusColor()\">\n {{ Action.Status }}\n </span>\n @if (Action.Type === 'Generated') {\n <span class=\"status-chip\" data-color=\"info\">\n <i class=\"fa-solid fa-robot\"></i> AI\n </span>\n }\n </div>\n </div>\n\n <p class=\"action-description\" [title]=\"Action.Description || 'No description'\">\n {{ Action.Description || 'No description available' }}\n </p>\n\n <div class=\"action-meta\">\n <button class=\"meta-item category\" (click)=\"onCategoryClick($event)\" [title]=\"'View category: ' + getCategoryName()\">\n <i class=\"fa-solid fa-folder\"></i>\n <span>{{ getCategoryName() }}</span>\n </button>\n\n @if (Action.__mj_UpdatedAt) {\n <span class=\"meta-item\">\n <i class=\"fa-solid fa-clock\"></i>\n <span>{{ formatDate(Action.__mj_UpdatedAt) }}</span>\n </span>\n }\n\n @if (Action.Type === 'Generated' && Action.CodeApprovalStatus) {\n <span class=\"meta-item\" [attr.data-status]=\"Action.CodeApprovalStatus\">\n <i [class]=\"getApprovalStatusIcon()\"></i>\n <span>{{ Action.CodeApprovalStatus }}</span>\n </span>\n }\n </div>\n </div>\n\n <!-- Actions -->\n <div class=\"action-buttons\">\n <button mjButton\n variant=\"flat\"\n size=\"sm\"\n title=\"View Stats\"\n (click)=\"toggleExpanded($event)\">\n <i [class]=\"IsExpanded ? 'fa-solid fa-chevron-up' : 'fa-solid fa-chart-line'\"></i>\n </button>\n <button mjButton\n variant=\"primary\"\n size=\"sm\"\n title=\"Run Action\"\n [disabled]=\"Action.Status !== 'Active'\"\n (click)=\"onRunClick($event)\">\n <i class=\"fa-solid fa-play\"></i>\n </button>\n <button mjButton\n variant=\"flat\"\n size=\"sm\"\n title=\"Edit Action\"\n (click)=\"onEditClick($event)\">\n <i class=\"fa-solid fa-pen\"></i>\n </button>\n </div>\n </div>\n\n <!-- Expanded Stats Section -->\n @if (IsExpanded) {\n <div class=\"card-expanded\">\n @if (ExecutionStats.isLoading) {\n <div class=\"stats-loading\">\n <mj-loading [showText]=\"false\" size=\"small\"></mj-loading>\n <span>Loading execution stats...</span>\n </div>\n } @else {\n <div class=\"stats-grid\">\n <div class=\"stat-item\">\n <div class=\"stat-value\">{{ ExecutionStats.totalExecutions }}</div>\n <div class=\"stat-label\">Total Runs</div>\n </div>\n <div class=\"stat-item\">\n <div class=\"stat-value\" [class.success]=\"ExecutionStats.successRate >= 90\" [class.warning]=\"ExecutionStats.successRate >= 50 && ExecutionStats.successRate < 90\" [class.error]=\"ExecutionStats.successRate < 50\">\n {{ ExecutionStats.successRate }}%\n </div>\n <div class=\"stat-label\">Success Rate</div>\n </div>\n <div class=\"stat-item\">\n <div class=\"stat-value\">{{ formatDate(ExecutionStats.lastExecuted) }}</div>\n <div class=\"stat-label\">Last Run</div>\n </div>\n <div class=\"stat-item params\">\n <div class=\"stat-value\">{{ Action.Params.Items.length || 0 }}</div>\n <div class=\"stat-label\">Parameters</div>\n </div>\n </div>\n\n @if (Action.Params && Action.Params.Items.length > 0) {\n <div class=\"params-preview\">\n <div class=\"params-header\">\n <i class=\"fa-solid fa-sliders\"></i>\n Parameters\n </div>\n <div class=\"params-list\">\n @for (param of Action.Params.Items.slice(0, 4); track param.Name) {\n <span class=\"param-tag\" [class.required]=\"param.IsRequired\">\n {{ param.Name }}\n @if (param.IsRequired) {\n <span class=\"required-marker\">*</span>\n }\n </span>\n }\n @if (Action.Params.Items.length > 4) {\n <span class=\"param-more\">+{{ Action.Params.Items.length - 4 }} more</span>\n }\n </div>\n </div>\n }\n }\n </div>\n }\n</div>\n"]}
|
|
1
|
+
{"version":3,"file":"action-card.component.js","sourceRoot":"","sources":["../../../../src/Actions/components/explorer/action-card.component.ts","../../../../src/Actions/components/explorer/action-card.component.html"],"names":[],"mappings":"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","sourcesContent":["import {\n Component,\n Input,\n Output,\n EventEmitter,\n ChangeDetectionStrategy,\n ChangeDetectorRef\n} from '@angular/core';\nimport { MJActionCategoryEntity, MJActionExecutionLogEntity } from '@memberjunction/core-entities';\nimport { MJActionEntityExtended } from '@memberjunction/actions-base';\nimport { RunView } from '@memberjunction/core';\nimport { BaseAngularComponent } from '@memberjunction/ng-base-types';\nimport { IsActionResultSuccess } from '../../action-result-code';\n\nexport interface ActionExecutionStats {\n totalExecutions: number; // case-violation-ok-legacy-back-compat: the type is named in an exported signature, so consumers build object literals against it; an interface has no runtime carrier for a stub\n successRate: number; // case-violation-ok-legacy-back-compat: the type is named in an exported signature, so consumers build object literals against it; an interface has no runtime carrier for a stub\n lastExecuted: Date | null; // case-violation-ok-legacy-back-compat: the type is named in an exported signature, so consumers build object literals against it; an interface has no runtime carrier for a stub\n isLoading: boolean; // case-violation-ok-legacy-back-compat: the type is named in an exported signature, so consumers build object literals against it; an interface has no runtime carrier for a stub\n isLoaded: boolean; // case-violation-ok-legacy-back-compat: the type is named in an exported signature, so consumers build object literals against it; an interface has no runtime carrier for a stub\n}\n\n@Component({\n standalone: false,\n selector: 'mj-action-card',\n templateUrl: './action-card.component.html',\n styleUrls: ['./action-card.component.css'],\n changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class ActionCardComponent extends BaseAngularComponent {\n @Input() Action!: MJActionEntityExtended;\n @Input() Categories: Map<string, MJActionCategoryEntity> = new Map();\n @Output() ActionClick = new EventEmitter<MJActionEntityExtended>();\n @Output() EditClick = new EventEmitter<MJActionEntityExtended>();\n @Output() RunClick = new EventEmitter<MJActionEntityExtended>();\n @Output() CategoryClick = new EventEmitter<string>();\n\n public IsExpanded = false;\n public ExecutionStats: ActionExecutionStats = {\n totalExecutions: 0,\n successRate: 0,\n lastExecuted: null,\n isLoading: false,\n isLoaded: false\n };\n\n constructor(private cdr: ChangeDetectorRef) { super(); }\n\n public OnCardClick(): void {\n this.ActionClick.emit(this.Action);\n }\n\n /** @deprecated Use {@link OnCardClick}. */\n public onCardClick(): void {\n return this.OnCardClick();\n }\n\n public OnEditClick(event: MouseEvent): void {\n event.stopPropagation();\n this.EditClick.emit(this.Action);\n }\n\n /** @deprecated Use {@link OnEditClick}. */\n public onEditClick(event: MouseEvent): void {\n return this.OnEditClick(event);\n }\n\n public OnRunClick(event: MouseEvent): void {\n event.stopPropagation();\n this.RunClick.emit(this.Action);\n }\n\n /** @deprecated Use {@link OnRunClick}. */\n public onRunClick(event: MouseEvent): void {\n return this.OnRunClick(event);\n }\n\n public OnCategoryClick(event: MouseEvent): void {\n event.stopPropagation();\n if (this.Action.CategoryID) {\n this.CategoryClick.emit(this.Action.CategoryID);\n }\n }\n\n /** @deprecated Use {@link OnCategoryClick}. */\n public onCategoryClick(event: MouseEvent): void {\n return this.OnCategoryClick(event);\n }\n\n public ToggleExpanded(event: MouseEvent): void {\n event.stopPropagation();\n this.IsExpanded = !this.IsExpanded;\n\n if (this.IsExpanded && !this.ExecutionStats.isLoaded && !this.ExecutionStats.isLoading) {\n this.loadExecutionStats();\n }\n }\n\n /** @deprecated Use {@link ToggleExpanded}. */\n public toggleExpanded(event: MouseEvent): void {\n return this.ToggleExpanded(event);\n }\n\n private async loadExecutionStats(): Promise<void> {\n this.ExecutionStats.isLoading = true;\n this.cdr.markForCheck();\n\n try {\n const rv = RunView.FromMetadataProvider(this.ProviderToUse);\n\n // Load both executions and result codes in parallel\n const [executionsResult, resultCodesResult] = await rv.RunViews([\n {\n EntityName: 'MJ: Action Execution Logs',\n ExtraFilter: `ActionID='${this.Action.ID}'`,\n OrderBy: 'StartedAt DESC',\n MaxRows: 100,\n ResultType: 'simple',\n Fields: ['ID', 'ResultCode', 'StartedAt']\n },\n {\n EntityName: 'MJ: Action Result Codes',\n ExtraFilter: `ActionID='${this.Action.ID}'`,\n ResultType: 'simple',\n Fields: ['ResultCode', 'IsSuccess']\n }\n ]);\n\n if (executionsResult.Success && executionsResult.Results) {\n const executions = executionsResult.Results as { ID: string; ResultCode: string; StartedAt: Date }[];\n\n // Build a map of result codes to IsSuccess\n const successMap = new Map<string, boolean>();\n if (resultCodesResult.Success && resultCodesResult.Results) {\n const resultCodes = resultCodesResult.Results as { ResultCode: string; IsSuccess: boolean }[];\n resultCodes.forEach(rc => {\n successMap.set(rc.ResultCode, rc.IsSuccess);\n });\n }\n\n // Count successful executions using result code lookup\n const successful = executions.filter(e => {\n if (!e.ResultCode) return false;\n // Look up the result code in the map\n const isSuccess = successMap.get(e.ResultCode);\n // If result code is defined in the map, use it; otherwise fall back to heuristic\n if (isSuccess !== undefined) {\n return isSuccess;\n }\n // No `MJ: Action Result Codes` row declares this code — fall back to the shared\n // classifier rather than a third private vocabulary.\n return IsActionResultSuccess(e.ResultCode);\n }).length;\n\n this.ExecutionStats = {\n totalExecutions: executions.length,\n successRate: executions.length > 0 ? Math.round((successful / executions.length) * 100) : 0,\n lastExecuted: executions.length > 0 ? new Date(executions[0].StartedAt) : null,\n isLoading: false,\n isLoaded: true\n };\n } else {\n this.ExecutionStats.isLoading = false;\n this.ExecutionStats.isLoaded = true;\n }\n } catch (error) {\n console.error('Failed to load execution stats:', error);\n this.ExecutionStats.isLoading = false;\n this.ExecutionStats.isLoaded = true;\n }\n\n this.cdr.markForCheck();\n }\n\n public GetCategoryName(): string {\n if (!this.Action.CategoryID) return 'Uncategorized';\n return this.Categories.get(this.Action.CategoryID)?.Name || 'Unknown Category';\n }\n\n /** @deprecated Use {@link GetCategoryName}. */\n public getCategoryName(): string {\n return this.GetCategoryName();\n }\n\n public GetStatusColor(): 'success' | 'warning' | 'error' | 'info' {\n switch (this.Action.Status) {\n case 'Active': return 'success';\n case 'Pending': return 'warning';\n case 'Disabled': return 'error';\n default: return 'info';\n }\n }\n\n /** @deprecated Use {@link GetStatusColor}. */\n public getStatusColor(): 'success' | 'warning' | 'error' | 'info' {\n return this.GetStatusColor();\n }\n\n public GetActionIcon(): string {\n // Use custom icon if set, otherwise derive from type\n if (this.Action.IconClass) {\n return this.Action.IconClass;\n }\n switch (this.Action.Type) {\n case 'Generated': return 'fa-solid fa-robot';\n case 'Custom': return 'fa-solid fa-code';\n default: return 'fa-solid fa-bolt';\n }\n }\n\n /** @deprecated Use {@link GetActionIcon}. */\n public getActionIcon(): string {\n return this.GetActionIcon();\n }\n\n public GetTypeLabel(): string {\n return this.Action.Type === 'Generated' ? 'AI Generated' : 'Custom';\n }\n\n /** @deprecated Use {@link GetTypeLabel}. */\n public getTypeLabel(): string {\n return this.GetTypeLabel();\n }\n\n public GetApprovalStatusIcon(): string {\n switch (this.Action.CodeApprovalStatus) {\n case 'Approved': return 'fa-solid fa-check-circle';\n case 'Pending': return 'fa-solid fa-clock';\n case 'Rejected': return 'fa-solid fa-times-circle';\n default: return 'fa-solid fa-question-circle';\n }\n }\n\n /** @deprecated Use {@link GetApprovalStatusIcon}. */\n public getApprovalStatusIcon(): string {\n return this.GetApprovalStatusIcon();\n }\n\n public GetApprovalStatusColor(): string {\n switch (this.Action.CodeApprovalStatus) {\n case 'Approved': return 'success';\n case 'Pending': return 'warning';\n case 'Rejected': return 'error';\n default: return 'info';\n }\n }\n\n /** @deprecated Use {@link GetApprovalStatusColor}. */\n public getApprovalStatusColor(): string {\n return this.GetApprovalStatusColor();\n }\n\n public formatDate(date: Date | null): string {\n if (!date) return 'Never';\n const now = new Date();\n const diff = now.getTime() - date.getTime();\n const minutes = Math.floor(diff / 60000);\n const hours = Math.floor(diff / 3600000);\n const days = Math.floor(diff / 86400000);\n\n if (minutes < 1) return 'Just now';\n if (minutes < 60) return `${minutes}m ago`;\n if (hours < 24) return `${hours}h ago`;\n if (days < 7) return `${days}d ago`;\n return date.toLocaleDateString();\n }\n}\n","<div class=\"action-card\" [class.expanded]=\"IsExpanded\" (click)=\"onCardClick()\">\n <div class=\"card-main\">\n <!-- Icon -->\n <div class=\"action-icon\" [class.ai-generated]=\"Action.Type === 'Generated'\">\n <i [class]=\"getActionIcon()\"></i>\n </div>\n\n <!-- Content -->\n <div class=\"action-content\">\n <div class=\"action-header\">\n <h3 class=\"action-name\" [title]=\"Action.Name\">{{ Action.Name }}</h3>\n <div class=\"action-badges\">\n <span class=\"status-chip\" [attr.data-color]=\"getStatusColor()\">\n {{ Action.Status }}\n </span>\n @if (Action.Type === 'Generated') {\n <span class=\"status-chip\" data-color=\"info\">\n <i class=\"fa-solid fa-robot\"></i> AI\n </span>\n }\n </div>\n </div>\n\n <p class=\"action-description\" [title]=\"Action.Description || 'No description'\">\n {{ Action.Description || 'No description available' }}\n </p>\n\n <div class=\"action-meta\">\n <button class=\"meta-item category\" (click)=\"onCategoryClick($event)\" [title]=\"'View category: ' + getCategoryName()\">\n <i class=\"fa-solid fa-folder\"></i>\n <span>{{ getCategoryName() }}</span>\n </button>\n\n @if (Action.__mj_UpdatedAt) {\n <span class=\"meta-item\">\n <i class=\"fa-solid fa-clock\"></i>\n <span>{{ formatDate(Action.__mj_UpdatedAt) }}</span>\n </span>\n }\n\n @if (Action.Type === 'Generated' && Action.CodeApprovalStatus) {\n <span class=\"meta-item\" [attr.data-status]=\"Action.CodeApprovalStatus\">\n <i [class]=\"getApprovalStatusIcon()\"></i>\n <span>{{ Action.CodeApprovalStatus }}</span>\n </span>\n }\n </div>\n </div>\n\n <!-- Actions -->\n <div class=\"action-buttons\">\n <button mjButton\n variant=\"flat\"\n size=\"sm\"\n title=\"View Stats\"\n (click)=\"toggleExpanded($event)\">\n <i [class]=\"IsExpanded ? 'fa-solid fa-chevron-up' : 'fa-solid fa-chart-line'\"></i>\n </button>\n <button mjButton\n variant=\"primary\"\n size=\"sm\"\n title=\"Run Action\"\n [disabled]=\"Action.Status !== 'Active'\"\n (click)=\"onRunClick($event)\">\n <i class=\"fa-solid fa-play\"></i>\n </button>\n <button mjButton\n variant=\"flat\"\n size=\"sm\"\n title=\"Edit Action\"\n (click)=\"onEditClick($event)\">\n <i class=\"fa-solid fa-pen\"></i>\n </button>\n </div>\n </div>\n\n <!-- Expanded Stats Section -->\n @if (IsExpanded) {\n <div class=\"card-expanded\">\n @if (ExecutionStats.isLoading) {\n <div class=\"stats-loading\">\n <mj-loading [showText]=\"false\" size=\"small\"></mj-loading>\n <span>Loading execution stats...</span>\n </div>\n } @else {\n <div class=\"stats-grid\">\n <div class=\"stat-item\">\n <div class=\"stat-value\">{{ ExecutionStats.totalExecutions }}</div>\n <div class=\"stat-label\">Total Runs</div>\n </div>\n <div class=\"stat-item\">\n <div class=\"stat-value\" [class.success]=\"ExecutionStats.successRate >= 90\" [class.warning]=\"ExecutionStats.successRate >= 50 && ExecutionStats.successRate < 90\" [class.error]=\"ExecutionStats.successRate < 50\">\n {{ ExecutionStats.successRate }}%\n </div>\n <div class=\"stat-label\">Success Rate</div>\n </div>\n <div class=\"stat-item\">\n <div class=\"stat-value\">{{ formatDate(ExecutionStats.lastExecuted) }}</div>\n <div class=\"stat-label\">Last Run</div>\n </div>\n <div class=\"stat-item params\">\n <div class=\"stat-value\">{{ Action.Params.Items.length || 0 }}</div>\n <div class=\"stat-label\">Parameters</div>\n </div>\n </div>\n\n @if (Action.Params && Action.Params.Items.length > 0) {\n <div class=\"params-preview\">\n <div class=\"params-header\">\n <i class=\"fa-solid fa-sliders\"></i>\n Parameters\n </div>\n <div class=\"params-list\">\n @for (param of Action.Params.Items.slice(0, 4); track param.Name) {\n <span class=\"param-tag\" [class.required]=\"param.IsRequired\">\n {{ param.Name }}\n @if (param.IsRequired) {\n <span class=\"required-marker\">*</span>\n }\n </span>\n }\n @if (Action.Params.Items.length > 4) {\n <span class=\"param-more\">+{{ Action.Params.Items.length - 4 }} more</span>\n }\n </div>\n </div>\n }\n }\n </div>\n }\n</div>\n"]}
|