@memberjunction/ng-dashboards 6.2.0-edge.6 → 6.2.0-edge.8

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (233) hide show
  1. package/README.md +23 -16
  2. package/dist/AI/components/analytics/agent-runs/agent-run-analysis.component.js +2 -2
  3. package/dist/AI/components/analytics/agent-runs/agent-run-analysis.component.js.map +1 -1
  4. package/dist/AI/components/analytics/realtime/realtime-management.component.d.ts.map +1 -1
  5. package/dist/AI/components/analytics/realtime/realtime-management.component.js +3 -1
  6. package/dist/AI/components/analytics/realtime/realtime-management.component.js.map +1 -1
  7. package/dist/AI/components/analytics/realtime/realtime-overview.component.d.ts +1 -1
  8. package/dist/AI/components/analytics/realtime/realtime-overview.component.js +3 -3
  9. package/dist/AI/components/analytics/realtime/realtime-overview.component.js.map +1 -1
  10. package/dist/AI/components/analytics/realtime/realtime-session-data.d.ts +6 -4
  11. package/dist/AI/components/analytics/realtime/realtime-session-data.d.ts.map +1 -1
  12. package/dist/AI/components/analytics/realtime/realtime-session-data.js +8 -2
  13. package/dist/AI/components/analytics/realtime/realtime-session-data.js.map +1 -1
  14. package/dist/AI/components/autotagging/autotagging-pipeline-resource.component.d.ts.map +1 -1
  15. package/dist/AI/components/autotagging/autotagging-pipeline-resource.component.js +31 -10
  16. package/dist/AI/components/autotagging/autotagging-pipeline-resource.component.js.map +1 -1
  17. package/dist/AI/components/autotagging/components/classify-item-grid.component.js +1 -1
  18. package/dist/AI/components/autotagging/components/classify-item-grid.component.js.map +1 -1
  19. package/dist/AI/components/autotagging/components/classify-org-context-editor.component.d.ts.map +1 -1
  20. package/dist/AI/components/autotagging/components/classify-org-context-editor.component.js +1 -0
  21. package/dist/AI/components/autotagging/components/classify-org-context-editor.component.js.map +1 -1
  22. package/dist/AI/components/autotagging/dialogs/source-type-form.dialog.component.d.ts.map +1 -1
  23. package/dist/AI/components/autotagging/dialogs/source-type-form.dialog.component.js +1 -0
  24. package/dist/AI/components/autotagging/dialogs/source-type-form.dialog.component.js.map +1 -1
  25. package/dist/AI/components/autotagging/tabs/sources-tab.component.d.ts.map +1 -1
  26. package/dist/AI/components/autotagging/tabs/sources-tab.component.js +1 -0
  27. package/dist/AI/components/autotagging/tabs/sources-tab.component.js.map +1 -1
  28. package/dist/AI/components/duplicates/duplicate-detection-resource.component.d.ts.map +1 -1
  29. package/dist/AI/components/duplicates/duplicate-detection-resource.component.js +1 -0
  30. package/dist/AI/components/duplicates/duplicate-detection-resource.component.js.map +1 -1
  31. package/dist/AI/components/prompts/model-prompt-priority-matrix.component.js +2 -2
  32. package/dist/AI/components/tags/tags-resource.component.d.ts.map +1 -1
  33. package/dist/AI/components/tags/tags-resource.component.js +14 -24
  34. package/dist/AI/components/tags/tags-resource.component.js.map +1 -1
  35. package/dist/AI/components/vectors/vector-management-resource.component.d.ts.map +1 -1
  36. package/dist/AI/components/vectors/vector-management-resource.component.js +14 -7
  37. package/dist/AI/components/vectors/vector-management-resource.component.js.map +1 -1
  38. package/dist/AI/services/ai-instrumentation.service.d.ts.map +1 -1
  39. package/dist/AI/services/ai-instrumentation.service.js +4 -2
  40. package/dist/AI/services/ai-instrumentation.service.js.map +1 -1
  41. package/dist/Actions/action-result-code.d.ts +80 -0
  42. package/dist/Actions/action-result-code.d.ts.map +1 -0
  43. package/dist/Actions/action-result-code.js +163 -0
  44. package/dist/Actions/action-result-code.js.map +1 -0
  45. package/dist/Actions/components/actions-overview.component.d.ts +8 -0
  46. package/dist/Actions/components/actions-overview.component.d.ts.map +1 -1
  47. package/dist/Actions/components/actions-overview.component.js +12 -9
  48. package/dist/Actions/components/actions-overview.component.js.map +1 -1
  49. package/dist/Actions/components/execution-monitoring.component.d.ts +29 -9
  50. package/dist/Actions/components/execution-monitoring.component.d.ts.map +1 -1
  51. package/dist/Actions/components/execution-monitoring.component.js +65 -42
  52. package/dist/Actions/components/execution-monitoring.component.js.map +1 -1
  53. package/dist/Actions/components/explorer/action-card.component.d.ts.map +1 -1
  54. package/dist/Actions/components/explorer/action-card.component.js +5 -4
  55. package/dist/Actions/components/explorer/action-card.component.js.map +1 -1
  56. package/dist/ChiefOfStaff/chief-of-staff-agent-context.d.ts +92 -130
  57. package/dist/ChiefOfStaff/chief-of-staff-agent-context.d.ts.map +1 -1
  58. package/dist/ChiefOfStaff/chief-of-staff-agent-context.js +189 -274
  59. package/dist/ChiefOfStaff/chief-of-staff-agent-context.js.map +1 -1
  60. package/dist/ChiefOfStaff/chief-of-staff-approvals.component.d.ts +29 -0
  61. package/dist/ChiefOfStaff/chief-of-staff-approvals.component.d.ts.map +1 -0
  62. package/dist/ChiefOfStaff/chief-of-staff-approvals.component.js +666 -0
  63. package/dist/ChiefOfStaff/chief-of-staff-approvals.component.js.map +1 -0
  64. package/dist/ChiefOfStaff/chief-of-staff-governance.component.d.ts +56 -0
  65. package/dist/ChiefOfStaff/chief-of-staff-governance.component.d.ts.map +1 -0
  66. package/dist/ChiefOfStaff/chief-of-staff-governance.component.js +515 -0
  67. package/dist/ChiefOfStaff/chief-of-staff-governance.component.js.map +1 -0
  68. package/dist/ChiefOfStaff/chief-of-staff-live-refresh.d.ts +14 -0
  69. package/dist/ChiefOfStaff/chief-of-staff-live-refresh.d.ts.map +1 -0
  70. package/dist/ChiefOfStaff/chief-of-staff-live-refresh.js +39 -0
  71. package/dist/ChiefOfStaff/chief-of-staff-live-refresh.js.map +1 -0
  72. package/dist/ChiefOfStaff/chief-of-staff-overview.component.d.ts +17 -0
  73. package/dist/ChiefOfStaff/chief-of-staff-overview.component.d.ts.map +1 -0
  74. package/dist/ChiefOfStaff/chief-of-staff-overview.component.js +485 -0
  75. package/dist/ChiefOfStaff/chief-of-staff-overview.component.js.map +1 -0
  76. package/dist/ChiefOfStaff/chief-of-staff-page-base.d.ts +139 -0
  77. package/dist/ChiefOfStaff/chief-of-staff-page-base.d.ts.map +1 -0
  78. package/dist/ChiefOfStaff/chief-of-staff-page-base.js +602 -0
  79. package/dist/ChiefOfStaff/chief-of-staff-page-base.js.map +1 -0
  80. package/dist/ChiefOfStaff/index.d.ts +4 -1
  81. package/dist/ChiefOfStaff/index.d.ts.map +1 -1
  82. package/dist/ChiefOfStaff/index.js +4 -1
  83. package/dist/ChiefOfStaff/index.js.map +1 -1
  84. package/dist/Communication/communication-monitor-resource.component.js +3 -3
  85. package/dist/Communication/communication-monitor-resource.component.js.map +1 -1
  86. package/dist/Communication/communication-runs-resource.component.js +3 -3
  87. package/dist/Communication/communication-runs-resource.component.js.map +1 -1
  88. package/dist/ComponentStudio/component-studio-dashboard.component.d.ts.map +1 -1
  89. package/dist/ComponentStudio/component-studio-dashboard.component.js +1 -0
  90. package/dist/ComponentStudio/component-studio-dashboard.component.js.map +1 -1
  91. package/dist/ComponentStudio/components/artifact-selection-dialog.component.d.ts.map +1 -1
  92. package/dist/ComponentStudio/components/artifact-selection-dialog.component.js +2 -1
  93. package/dist/ComponentStudio/components/artifact-selection-dialog.component.js.map +1 -1
  94. package/dist/ComponentStudio/services/component-version.service.d.ts.map +1 -1
  95. package/dist/ComponentStudio/services/component-version.service.js +3 -0
  96. package/dist/ComponentStudio/services/component-version.service.js.map +1 -1
  97. package/dist/DataExplorer/data-explorer-dashboard.component.d.ts +21 -2
  98. package/dist/DataExplorer/data-explorer-dashboard.component.d.ts.map +1 -1
  99. package/dist/DataExplorer/data-explorer-dashboard.component.js +32 -5
  100. package/dist/DataExplorer/data-explorer-dashboard.component.js.map +1 -1
  101. package/dist/DevTools/graphql-console.component.js +2 -2
  102. package/dist/DevTools/lazy-module-status.component.js +2 -2
  103. package/dist/FormBuilder/form-builder-resource.component.d.ts.map +1 -1
  104. package/dist/FormBuilder/form-builder-resource.component.js +5 -0
  105. package/dist/FormBuilder/form-builder-resource.component.js.map +1 -1
  106. package/dist/Integration/components/connections/connections.component.js +2 -2
  107. package/dist/Integration/services/integration-data.service.d.ts +1 -1
  108. package/dist/Integration/services/integration-data.service.d.ts.map +1 -1
  109. package/dist/Integration/services/integration-data.service.js +4 -3
  110. package/dist/Integration/services/integration-data.service.js.map +1 -1
  111. package/dist/KnowledgeHub/components/clusters/cluster-visualization-resource.component.d.ts.map +1 -1
  112. package/dist/KnowledgeHub/components/clusters/cluster-visualization-resource.component.js +11 -3
  113. package/dist/KnowledgeHub/components/clusters/cluster-visualization-resource.component.js.map +1 -1
  114. package/dist/KnowledgeHub/components/config/knowledge-config-resource.component.js +16 -16
  115. package/dist/KnowledgeHub/components/config/knowledge-config-resource.component.js.map +1 -1
  116. package/dist/KnowledgeHub/components/visualize/semantic-graph/semantic-graph-explorer.component.d.ts +113 -0
  117. package/dist/KnowledgeHub/components/visualize/semantic-graph/semantic-graph-explorer.component.d.ts.map +1 -0
  118. package/dist/KnowledgeHub/components/visualize/semantic-graph/semantic-graph-explorer.component.js +1184 -0
  119. package/dist/KnowledgeHub/components/visualize/semantic-graph/semantic-graph-explorer.component.js.map +1 -0
  120. package/dist/KnowledgeHub/components/visualize/visualize-agent-context.d.ts +1 -1
  121. package/dist/KnowledgeHub/components/visualize/visualize-agent-context.d.ts.map +1 -1
  122. package/dist/KnowledgeHub/components/visualize/visualize-agent-context.js +1 -1
  123. package/dist/KnowledgeHub/components/visualize/visualize-agent-context.js.map +1 -1
  124. package/dist/KnowledgeHub/components/visualize/visualize-resource.component.d.ts +1 -1
  125. package/dist/KnowledgeHub/components/visualize/visualize-resource.component.d.ts.map +1 -1
  126. package/dist/KnowledgeHub/components/visualize/visualize-resource.component.js +21 -10
  127. package/dist/KnowledgeHub/components/visualize/visualize-resource.component.js.map +1 -1
  128. package/dist/Lists/components/lists-browse-resource.component.js +1 -1
  129. package/dist/Lists/components/lists-browse-resource.component.js.map +1 -1
  130. package/dist/Lists/components/lists-my-lists-resource.component.js +1 -1
  131. package/dist/Lists/components/lists-my-lists-resource.component.js.map +1 -1
  132. package/dist/LoginStudio/login-studio-resource.component.d.ts.map +1 -1
  133. package/dist/LoginStudio/login-studio-resource.component.js +1 -0
  134. package/dist/LoginStudio/login-studio-resource.component.js.map +1 -1
  135. package/dist/PredictiveStudio/components/ps-experiments.component.d.ts.map +1 -1
  136. package/dist/PredictiveStudio/components/ps-experiments.component.js +1 -0
  137. package/dist/PredictiveStudio/components/ps-experiments.component.js.map +1 -1
  138. package/dist/PredictiveStudio/components/ps-pipeline-wizard.component.js +2 -2
  139. package/dist/PredictiveStudio/components/ps-predictions-grid.component.d.ts.map +1 -1
  140. package/dist/PredictiveStudio/components/ps-predictions-grid.component.js +3 -0
  141. package/dist/PredictiveStudio/components/ps-predictions-grid.component.js.map +1 -1
  142. package/dist/PredictiveStudio/engine/predictive-studio.engine.d.ts.map +1 -1
  143. package/dist/PredictiveStudio/engine/predictive-studio.engine.js +1 -0
  144. package/dist/PredictiveStudio/engine/predictive-studio.engine.js.map +1 -1
  145. package/dist/PredictiveStudio/resources/ps-predictions-resource.component.d.ts.map +1 -1
  146. package/dist/PredictiveStudio/resources/ps-predictions-resource.component.js +1 -0
  147. package/dist/PredictiveStudio/resources/ps-predictions-resource.component.js.map +1 -1
  148. package/dist/QueryBrowser/query-browser-resource.component.d.ts +26 -0
  149. package/dist/QueryBrowser/query-browser-resource.component.d.ts.map +1 -1
  150. package/dist/QueryBrowser/query-browser-resource.component.js +375 -252
  151. package/dist/QueryBrowser/query-browser-resource.component.js.map +1 -1
  152. package/dist/SystemDiagnostics/system-diagnostics.component.d.ts.map +1 -1
  153. package/dist/SystemDiagnostics/system-diagnostics.component.js +4 -2
  154. package/dist/SystemDiagnostics/system-diagnostics.component.js.map +1 -1
  155. package/dist/UserRoutines/user-routines-resource.component.d.ts +8 -1
  156. package/dist/UserRoutines/user-routines-resource.component.d.ts.map +1 -1
  157. package/dist/UserRoutines/user-routines-resource.component.js +22 -4
  158. package/dist/UserRoutines/user-routines-resource.component.js.map +1 -1
  159. package/dist/VersionHistory/components/diff-resource.component.d.ts.map +1 -1
  160. package/dist/VersionHistory/components/diff-resource.component.js +1 -0
  161. package/dist/VersionHistory/components/diff-resource.component.js.map +1 -1
  162. package/dist/VideoStudio/components/vs-archetype-editor.component.d.ts +162 -0
  163. package/dist/VideoStudio/components/vs-archetype-editor.component.d.ts.map +1 -0
  164. package/dist/VideoStudio/components/vs-archetype-editor.component.js +1105 -0
  165. package/dist/VideoStudio/components/vs-archetype-editor.component.js.map +1 -0
  166. package/dist/VideoStudio/components/vs-audio-options.component.d.ts +27 -0
  167. package/dist/VideoStudio/components/vs-audio-options.component.d.ts.map +1 -0
  168. package/dist/VideoStudio/components/vs-audio-options.component.js +119 -0
  169. package/dist/VideoStudio/components/vs-audio-options.component.js.map +1 -0
  170. package/dist/VideoStudio/components/vs-copilot-panel.component.d.ts +105 -0
  171. package/dist/VideoStudio/components/vs-copilot-panel.component.d.ts.map +1 -0
  172. package/dist/VideoStudio/components/vs-copilot-panel.component.js +560 -0
  173. package/dist/VideoStudio/components/vs-copilot-panel.component.js.map +1 -0
  174. package/dist/VideoStudio/components/vs-production-brief.component.d.ts +163 -0
  175. package/dist/VideoStudio/components/vs-production-brief.component.d.ts.map +1 -0
  176. package/dist/VideoStudio/components/vs-production-brief.component.js +1054 -0
  177. package/dist/VideoStudio/components/vs-production-brief.component.js.map +1 -0
  178. package/dist/VideoStudio/components/vs-setup-health-card.component.d.ts +43 -0
  179. package/dist/VideoStudio/components/vs-setup-health-card.component.d.ts.map +1 -0
  180. package/dist/VideoStudio/components/vs-setup-health-card.component.js +412 -0
  181. package/dist/VideoStudio/components/vs-setup-health-card.component.js.map +1 -0
  182. package/dist/VideoStudio/components/vs-studio-slide-in.component.d.ts +73 -0
  183. package/dist/VideoStudio/components/vs-studio-slide-in.component.d.ts.map +1 -0
  184. package/dist/VideoStudio/components/vs-studio-slide-in.component.js +271 -0
  185. package/dist/VideoStudio/components/vs-studio-slide-in.component.js.map +1 -0
  186. package/dist/VideoStudio/index.d.ts +12 -0
  187. package/dist/VideoStudio/index.d.ts.map +1 -0
  188. package/dist/VideoStudio/index.js +12 -0
  189. package/dist/VideoStudio/index.js.map +1 -0
  190. package/dist/VideoStudio/resources/video-studio-archetypes-resource.component.d.ts +118 -0
  191. package/dist/VideoStudio/resources/video-studio-archetypes-resource.component.d.ts.map +1 -0
  192. package/dist/VideoStudio/resources/video-studio-archetypes-resource.component.js +964 -0
  193. package/dist/VideoStudio/resources/video-studio-archetypes-resource.component.js.map +1 -0
  194. package/dist/VideoStudio/resources/video-studio-brand-kits-resource.component.d.ts +70 -0
  195. package/dist/VideoStudio/resources/video-studio-brand-kits-resource.component.d.ts.map +1 -0
  196. package/dist/VideoStudio/resources/video-studio-brand-kits-resource.component.js +600 -0
  197. package/dist/VideoStudio/resources/video-studio-brand-kits-resource.component.js.map +1 -0
  198. package/dist/VideoStudio/resources/video-studio-productions-resource.component.d.ts +182 -0
  199. package/dist/VideoStudio/resources/video-studio-productions-resource.component.d.ts.map +1 -0
  200. package/dist/VideoStudio/resources/video-studio-productions-resource.component.js +1481 -0
  201. package/dist/VideoStudio/resources/video-studio-productions-resource.component.js.map +1 -0
  202. package/dist/VideoStudio/services/vs-studio-slide-in-state.service.d.ts +102 -0
  203. package/dist/VideoStudio/services/vs-studio-slide-in-state.service.d.ts.map +1 -0
  204. package/dist/VideoStudio/services/vs-studio-slide-in-state.service.js +240 -0
  205. package/dist/VideoStudio/services/vs-studio-slide-in-state.service.js.map +1 -0
  206. package/dist/VideoStudio/video-studio-agent-context.d.ts +495 -0
  207. package/dist/VideoStudio/video-studio-agent-context.d.ts.map +1 -0
  208. package/dist/VideoStudio/video-studio-agent-context.js +992 -0
  209. package/dist/VideoStudio/video-studio-agent-context.js.map +1 -0
  210. package/dist/ai-dashboards.module.d.ts +46 -41
  211. package/dist/ai-dashboards.module.d.ts.map +1 -1
  212. package/dist/ai-dashboards.module.js +33 -7
  213. package/dist/ai-dashboards.module.js.map +1 -1
  214. package/dist/module.d.ts +13 -12
  215. package/dist/module.d.ts.map +1 -1
  216. package/dist/module.js +7 -0
  217. package/dist/module.js.map +1 -1
  218. package/dist/public-api.d.ts +8 -1
  219. package/dist/public-api.d.ts.map +1 -1
  220. package/dist/public-api.js +10 -2
  221. package/dist/public-api.js.map +1 -1
  222. package/dist/shared/action-scheduled-job.d.ts.map +1 -1
  223. package/dist/shared/action-scheduled-job.js +2 -0
  224. package/dist/shared/action-scheduled-job.js.map +1 -1
  225. package/dist/video-studio-dashboards.module.d.ts +40 -0
  226. package/dist/video-studio-dashboards.module.d.ts.map +1 -0
  227. package/dist/video-studio-dashboards.module.js +159 -0
  228. package/dist/video-studio-dashboards.module.js.map +1 -0
  229. package/package.json +78 -71
  230. package/dist/ChiefOfStaff/chief-of-staff-dashboard.component.d.ts +0 -195
  231. package/dist/ChiefOfStaff/chief-of-staff-dashboard.component.d.ts.map +0 -1
  232. package/dist/ChiefOfStaff/chief-of-staff-dashboard.component.js +0 -2910
  233. package/dist/ChiefOfStaff/chief-of-staff-dashboard.component.js.map +0 -1
@@ -12,6 +12,7 @@ import { Subject, BehaviorSubject, combineLatest } from 'rxjs';
12
12
  import { debounceTime, takeUntil, distinctUntilChanged } from 'rxjs/operators';
13
13
  import { ValidateEnumParam, BoundNameList } from '../../shared/agent-tool-validation';
14
14
  import { FindByIdOrError, FindByIdOrNameOrError } from '../agent-tool-helpers';
15
+ import { ActionSuccessRate, IsActionResultSuccess } from '../action-result-code';
15
16
  import * as i0 from "@angular/core";
16
17
  import * as i1 from "@angular/forms";
17
18
  import * as i2 from "@memberjunction/ng-ui-components";
@@ -544,15 +545,18 @@ let ActionsOverviewComponent = class ActionsOverviewComponent extends BaseResour
544
545
  customActions: actions.filter(a => a.Type === 'Custom').length
545
546
  };
546
547
  }
548
+ /**
549
+ * Successes as a share of SETTLED runs, through the shared classifier.
550
+ *
551
+ * This was the *believable* number on the Actions surfaces — it at least lowercased — but it
552
+ * was still its own private vocabulary (`success|ok|completed|200`), and it divided by every
553
+ * row including still-running ones. Both halves now come from `action-result-code.ts`, so
554
+ * this rate and the Execution Monitor's can no longer disagree.
555
+ */
547
556
  calculateSuccessRate(executions) {
548
557
  if (!executions || executions.length === 0)
549
558
  return 0;
550
- // Check for success based on result code - Actions may use different success codes
551
- const successful = executions.filter(e => {
552
- const code = e.ResultCode?.toLowerCase();
553
- return code === 'success' || code === 'ok' || code === 'completed' || code === '200';
554
- }).length;
555
- return Math.round((successful / executions.length) * 100);
559
+ return ActionSuccessRate(executions.map(e => e.ResultCode));
556
560
  }
557
561
  calculateCategoryStats(actions, categories, executions) {
558
562
  // Group once: scanning every action and every execution per category grew with all three lists.
@@ -740,8 +744,7 @@ let ActionsOverviewComponent = class ActionsOverviewComponent extends BaseResour
740
744
  return this.OpenExecution(execution);
741
745
  }
742
746
  IsExecutionSuccess(execution) {
743
- const code = execution.ResultCode?.toLowerCase();
744
- return code === 'success' || code === 'ok' || code === 'completed' || code === '200';
747
+ return IsActionResultSuccess(execution.ResultCode);
745
748
  }
746
749
  /** @deprecated Use {@link IsExecutionSuccess}. */
747
750
  isExecutionSuccess(execution) {
@@ -1000,5 +1003,5 @@ export { ActionsOverviewComponent };
1000
1003
  type: Component,
1001
1004
  args: [{ standalone: false, selector: 'mj-actions-overview', template: "<mj-page-layout>\n <mj-page-header\n Title=\"Actions Overview\"\n Icon=\"fa-solid fa-bolt\"\n Subtitle=\"Health and activity for all configured actions\">\n <!-- [meta] intentionally omitted \u2014 chrome slot discipline audit Task B.\n totalActions was a single inventory count; the body's KPI cards\n surface this and other metrics in their proper place. -->\n <!-- No [actions] \u2014 this page has no primary CTA; the control bar lives in [toolbar] per \u00A73. -->\n <div toolbar>\n <mj-page-search\n Placeholder=\"Search actions...\"\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=\"actions-overview\" >\n\n <!-- Metrics Cards -->\n <div class=\"metrics-grid\">\n <div class=\"metric-card primary clickable\" (click)=\"onTotalActionsClick()\">\n <div class=\"metric-icon\">\n <i class=\"fa-solid fa-cogs\"></i>\n </div>\n <div class=\"metric-content\">\n <div class=\"metric-value\">{{ metrics.totalActions }}</div>\n <div class=\"metric-label\">Total Actions</div>\n <div class=\"metric-breakdown\">\n <span class=\"active\">{{ metrics.activeActions }} Active</span>\n <span class=\"pending\">{{ metrics.pendingActions }} Pending</span>\n <span class=\"disabled\">{{ metrics.disabledActions }} Disabled</span>\n </div>\n </div>\n </div>\n\n <div class=\"metric-card success clickable\" (click)=\"onExecutionsClick()\">\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 class=\"metric-breakdown\">\n <span class=\"recent\">{{ metrics.recentExecutions }} in last 24h</span>\n <span class=\"success-rate\">{{ metrics.successRate }}% success rate</span>\n </div>\n </div>\n </div>\n\n <div class=\"metric-card info clickable\" (click)=\"onCategoriesClick()\">\n <div class=\"metric-icon\">\n <i class=\"fa-solid fa-sitemap\"></i>\n </div>\n <div class=\"metric-content\">\n <div class=\"metric-value\">{{ metrics.totalCategories }}</div>\n <div class=\"metric-label\">Categories</div>\n <div class=\"metric-breakdown\">\n <span>Organized structure</span>\n </div>\n </div>\n </div>\n\n <div class=\"metric-card warning clickable\" (click)=\"onAIGeneratedClick()\">\n <div class=\"metric-icon\">\n <i class=\"fa-solid fa-robot\"></i>\n </div>\n <div class=\"metric-content\">\n <div class=\"metric-value\">{{ metrics.aiGeneratedActions }}</div>\n <div class=\"metric-label\">AI Generated</div>\n <div class=\"metric-breakdown\">\n <span class=\"custom\">{{ metrics.customActions }} Custom</span>\n </div>\n </div>\n </div>\n \n <div class=\"metric-card gallery clickable\" (click)=\"onActionGalleryClick()\">\n <div class=\"metric-icon\">\n <i class=\"fa-solid fa-th\"></i>\n </div>\n <div class=\"metric-content\">\n <div class=\"metric-value\">\n <i class=\"fa-solid fa-sparkles\"></i>\n </div>\n <div class=\"metric-label\">Action Gallery</div>\n <div class=\"metric-breakdown\">\n <span>Visual action browser</span>\n </div>\n </div>\n </div>\n </div>\n\n <!-- Content Grid -->\n <div class=\"content-grid\">\n <!-- Category Statistics -->\n <div class=\"panel category-stats\">\n <div class=\"panel-header\">\n <h3><i class=\"fa-solid fa-chart-bar\"></i> Category Performance</h3>\n </div>\n <div class=\"panel-content\">\n @if (categoryStats.length > 0) {\n <div class=\"category-list\">\n @for (category of categoryStats; track category.categoryId) {\n <div class=\"category-item\" (click)=\"openCategory(category.categoryId)\">\n <div class=\"category-info\">\n <div class=\"category-name\">{{ category.categoryName }}</div>\n <div class=\"category-metrics\">\n <span class=\"metric\">{{ category.actionCount }} actions</span>\n <span class=\"metric\">{{ category.executionCount }} executions</span>\n <span class=\"metric success-rate\">{{ category.successRate }}% success</span>\n </div>\n </div>\n <div class=\"category-chart\">\n <div class=\"progress-bar\">\n <div class=\"progress-fill\" [style.width.%]=\"category.successRate\"></div>\n </div>\n </div>\n </div>\n }\n </div>\n } @else {\n <mj-empty-state Size=\"compact\" Icon=\"fa-solid fa-chart-bar\"\n Title=\"No category statistics available\" />\n }\n </div>\n </div>\n\n <!-- Recent Actions -->\n <div class=\"panel recent-actions\">\n <div class=\"panel-header\">\n <h3><i class=\"fa-solid fa-clock\"></i> Recent Actions</h3>\n </div>\n <div class=\"panel-content\">\n @if (recentActions.length > 0) {\n <div class=\"actions-list\">\n @for (action of recentActions; track action.ID) {\n <div class=\"action-item\" (click)=\"openAction(action)\">\n <div class=\"action-icon\">\n <i [class]=\"getActionIcon(action)\"></i>\n </div>\n <div class=\"action-info\">\n <div class=\"action-name\">{{ action.Name }}</div>\n <div class=\"action-description\">{{ action.Description || 'No description' }}</div>\n </div>\n <div class=\"action-status\">\n <span class=\"status-chip\" [attr.data-color]=\"getStatusColor(action.Status)\">\n {{ action.Status }}\n </span>\n </div>\n </div>\n }\n </div>\n } @else {\n <mj-empty-state Size=\"compact\" Icon=\"fa-solid fa-cogs\"\n Title=\"No recent actions found\" />\n }\n </div>\n </div>\n\n <!-- Recent Executions -->\n <div class=\"panel recent-executions\">\n <div class=\"panel-header\">\n <h3><i class=\"fa-solid fa-history\"></i> Recent Executions</h3>\n </div>\n <div class=\"panel-content\">\n @if (recentExecutions.length > 0) {\n <div class=\"executions-list\">\n @for (execution of recentExecutions; track execution.ID) {\n <mj-accordion-panel Size=\"sm\" [FlushBody]=\"true\" [Expanded]=\"execution.isExpanded ?? false\" (ExpandedChange)=\"execution.isExpanded = $event\">\n <ng-template mjAccordionTitle>\n <div class=\"execution-time\">\n {{ execution.StartedAt | date:'MMM d, HH:mm' }}\n </div>\n <div class=\"execution-info\">\n <div class=\"execution-action\">{{ execution.Action || 'Action ID: ' + execution.ActionID }}</div>\n <div class=\"execution-user\">{{ execution.User || 'User ID: ' + execution.UserID }}</div>\n </div>\n <div class=\"execution-result\">\n <span class=\"status-chip\" [attr.data-color]=\"isExecutionSuccess(execution) ? 'success' : 'error'\">\n {{ execution.ResultCode || 'Unknown' }}\n </span>\n </div>\n </ng-template>\n <ng-template mjAccordionBody>\n <div class=\"execution-details\">\n <div class=\"params-section\">\n <h5><i class=\"fa-solid fa-sliders\"></i> Parameters</h5>\n <mj-code-editor\n [ngModel]=\"formatJsonParams(execution.Params)\"\n [readonly]=\"true\"\n [language]=\"'json'\"\n [lineWrapping]=\"true\"\n style=\"height: 150px; width: 100%;\">\n </mj-code-editor>\n </div>\n <div class=\"execution-actions\">\n <button mjButton\n variant=\"primary\"\n size=\"sm\"\n (click)=\"openExecution(execution)\">\n <i class=\"fa-solid fa-external-link\"></i> Open Details\n </button>\n </div>\n </div>\n </ng-template>\n </mj-accordion-panel>\n }\n </div>\n } @else {\n <mj-empty-state Size=\"compact\" Icon=\"fa-solid fa-history\"\n Title=\"No recent executions found\" />\n }\n </div>\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>", styles: [".actions-overview {\n display: flex;\n flex-direction: column;\n gap: 1.5rem;\n position: relative; /* Required for scoped loading overlay */\n}\n.actions-overview .metrics-grid {\n display: grid;\n grid-template-columns: repeat(auto-fit, minmax(280px, 1fr));\n gap: 1.5rem;\n}\n.actions-overview .metrics-grid .metric-card {\n display: flex;\n align-items: center;\n gap: 1rem;\n padding: 1.5rem;\n border-radius: var(--mj-radius-lg);\n background: var(--mj-bg-surface-card);\n border: 1px solid var(--mj-border-default);\n box-shadow: var(--mj-shadow-sm);\n transition: all var(--mj-transition-base);\n}\n.actions-overview .metrics-grid .metric-card.clickable {\n cursor: pointer;\n}\n.actions-overview .metrics-grid .metric-card.clickable:hover {\n transform: translateY(-2px);\n box-shadow: var(--mj-shadow-md);\n}\n.actions-overview .metrics-grid .metric-card .metric-icon {\n display: flex;\n align-items: center;\n justify-content: center;\n width: 3rem;\n height: 3rem;\n border-radius: var(--mj-radius-md);\n font-size: var(--mj-text-xl);\n}\n.actions-overview .metrics-grid .metric-card .metric-icon i {\n color: var(--mj-text-inverse);\n}\n.actions-overview .metrics-grid .metric-card .metric-content {\n flex: 1;\n}\n.actions-overview .metrics-grid .metric-card .metric-content .metric-value {\n font-size: 1.75rem;\n font-weight: var(--mj-font-bold);\n line-height: var(--mj-leading-none);\n margin-bottom: 0.25rem;\n color: var(--mj-text-primary);\n}\n.actions-overview .metrics-grid .metric-card .metric-content .metric-label {\n font-size: var(--mj-text-sm);\n font-weight: var(--mj-font-semibold);\n color: var(--mj-text-muted);\n margin-bottom: 0.5rem;\n}\n.actions-overview .metrics-grid .metric-card .metric-content .metric-breakdown {\n display: flex;\n flex-direction: column;\n gap: 0.125rem;\n font-size: var(--mj-text-xs);\n}\n.actions-overview .metrics-grid .metric-card .metric-content .metric-breakdown span {\n color: var(--mj-text-muted);\n}\n.actions-overview .metrics-grid .metric-card .metric-content .metric-breakdown span.active {\n color: var(--mj-status-success);\n}\n.actions-overview .metrics-grid .metric-card .metric-content .metric-breakdown span.pending {\n color: var(--mj-status-warning);\n}\n.actions-overview .metrics-grid .metric-card .metric-content .metric-breakdown span.disabled {\n color: var(--mj-status-error);\n}\n.actions-overview .metrics-grid .metric-card .metric-content .metric-breakdown span.recent {\n color: var(--mj-status-info);\n}\n.actions-overview .metrics-grid .metric-card .metric-content .metric-breakdown span.success-rate {\n color: var(--mj-status-success);\n}\n.actions-overview .metrics-grid .metric-card .metric-content .metric-breakdown span.custom {\n color: var(--mj-brand-primary);\n}\n.actions-overview .metrics-grid .metric-card.primary .metric-icon {\n background: var(--mj-brand-primary);\n}\n.actions-overview .metrics-grid .metric-card.success .metric-icon {\n background: var(--mj-status-success);\n}\n.actions-overview .metrics-grid .metric-card.info .metric-icon {\n background: var(--mj-status-info);\n}\n.actions-overview .metrics-grid .metric-card.warning .metric-icon {\n background: var(--mj-status-warning);\n}\n.actions-overview .metrics-grid .metric-card.gallery .metric-icon {\n background: var(--mj-brand-primary);\n}\n.actions-overview .content-grid {\n display: grid;\n grid-template-columns: 1fr 1fr;\n grid-template-rows: auto auto;\n gap: 1.5rem;\n flex: 1;\n}\n.actions-overview .content-grid .panel {\n background: var(--mj-bg-surface-card);\n border: 1px solid var(--mj-border-default);\n border-radius: var(--mj-radius-lg);\n overflow: hidden;\n box-shadow: var(--mj-shadow-sm);\n}\n.actions-overview .content-grid .panel .panel-header {\n padding: 1rem 1.5rem;\n background: var(--mj-bg-surface-elevated);\n border-bottom: 1px solid var(--mj-border-default);\n}\n.actions-overview .content-grid .panel .panel-header h3 {\n margin: 0;\n font-size: var(--mj-text-base);\n font-weight: var(--mj-font-semibold);\n color: var(--mj-text-primary);\n display: flex;\n align-items: center;\n gap: 0.5rem;\n}\n.actions-overview .content-grid .panel .panel-header h3 i {\n color: var(--mj-brand-primary);\n}\n.actions-overview .content-grid .panel .panel-content {\n padding: 1.5rem;\n height: calc(100% - 60px);\n overflow-y: auto;\n}\n.actions-overview .content-grid .category-stats .category-list {\n display: flex;\n flex-direction: column;\n gap: 0.75rem;\n}\n.actions-overview .content-grid .category-stats .category-list .category-item {\n display: flex;\n align-items: center;\n gap: 1rem;\n padding: 1rem;\n background: var(--mj-bg-surface);\n border: 1px solid var(--mj-border-default);\n border-radius: var(--mj-radius-md);\n cursor: pointer;\n transition: all var(--mj-transition-base);\n}\n.actions-overview .content-grid .category-stats .category-list .category-item:hover {\n background: var(--mj-bg-surface-hover);\n border-color: var(--mj-brand-primary);\n}\n.actions-overview .content-grid .category-stats .category-list .category-item .category-info {\n flex: 1;\n}\n.actions-overview .content-grid .category-stats .category-list .category-item .category-info .category-name {\n font-weight: var(--mj-font-semibold);\n margin-bottom: 0.25rem;\n color: var(--mj-text-primary);\n}\n.actions-overview .content-grid .category-stats .category-list .category-item .category-info .category-metrics {\n display: flex;\n gap: 1rem;\n font-size: var(--mj-text-xs);\n color: var(--mj-text-muted);\n}\n.actions-overview .content-grid .category-stats .category-list .category-item .category-info .category-metrics .metric.success-rate {\n color: var(--mj-status-success);\n font-weight: var(--mj-font-semibold);\n}\n.actions-overview .content-grid .category-stats .category-list .category-item .category-chart {\n width: 60px;\n}\n.actions-overview .content-grid .category-stats .category-list .category-item .category-chart .progress-bar {\n height: 6px;\n background: var(--mj-border-default);\n border-radius: var(--mj-radius-full);\n overflow: hidden;\n}\n.actions-overview .content-grid .category-stats .category-list .category-item .category-chart .progress-bar .progress-fill {\n height: 100%;\n background: var(--mj-status-success);\n transition: width var(--mj-transition-slow);\n}\n.actions-overview .content-grid .recent-actions .actions-list {\n display: flex;\n flex-direction: column;\n gap: 0.75rem;\n}\n.actions-overview .content-grid .recent-actions .actions-list .action-item {\n display: flex;\n align-items: center;\n gap: 1rem;\n padding: 1rem;\n background: var(--mj-bg-surface);\n border: 1px solid var(--mj-border-default);\n border-radius: var(--mj-radius-md);\n cursor: pointer;\n transition: all var(--mj-transition-base);\n}\n.actions-overview .content-grid .recent-actions .actions-list .action-item:hover {\n background: var(--mj-bg-surface-hover);\n border-color: var(--mj-brand-primary);\n}\n.actions-overview .content-grid .recent-actions .actions-list .action-item .action-icon {\n display: flex;\n align-items: center;\n justify-content: center;\n width: 2.5rem;\n height: 2.5rem;\n border-radius: var(--mj-radius-sm);\n background: color-mix(in srgb, var(--mj-brand-primary) 10%, var(--mj-bg-surface));\n}\n.actions-overview .content-grid .recent-actions .actions-list .action-item .action-icon i {\n color: var(--mj-brand-primary);\n font-size: var(--mj-text-base);\n}\n.actions-overview .content-grid .recent-actions .actions-list .action-item .action-info {\n flex: 1;\n}\n.actions-overview .content-grid .recent-actions .actions-list .action-item .action-info .action-name {\n font-weight: var(--mj-font-semibold);\n margin-bottom: 0.25rem;\n color: var(--mj-text-primary);\n}\n.actions-overview .content-grid .recent-actions .actions-list .action-item .action-info .action-description {\n font-size: var(--mj-text-xs);\n color: var(--mj-text-muted);\n line-height: var(--mj-leading-snug);\n}\n.actions-overview .content-grid .recent-actions .actions-list .action-item .action-status {\n flex-shrink: 0;\n}\n.actions-overview .content-grid .recent-executions {\n grid-column: 1/-1;\n}\n.actions-overview .content-grid .recent-executions .executions-list {\n display: flex;\n flex-direction: column;\n gap: 0.75rem;\n}\n.actions-overview .content-grid .recent-executions .executions-list .execution-time {\n font-size: var(--mj-text-xs);\n color: var(--mj-text-muted);\n font-weight: var(--mj-font-semibold);\n min-width: 80px;\n}\n.actions-overview .content-grid .recent-executions .executions-list .execution-info {\n flex: 1;\n}\n.actions-overview .content-grid .recent-executions .executions-list .execution-info .execution-action {\n font-weight: var(--mj-font-semibold);\n margin-bottom: 0.25rem;\n font-size: var(--mj-text-sm);\n color: var(--mj-text-primary);\n}\n.actions-overview .content-grid .recent-executions .executions-list .execution-info .execution-user {\n font-size: var(--mj-text-xs);\n color: var(--mj-text-muted);\n}\n.actions-overview .content-grid .recent-executions .executions-list .execution-result {\n flex-shrink: 0;\n}\n.actions-overview .content-grid .recent-executions .executions-list .execution-details {\n padding: 1rem;\n background: var(--mj-bg-surface-card);\n}\n.actions-overview .content-grid .recent-executions .executions-list .execution-details .params-section {\n margin-bottom: 1rem;\n}\n.actions-overview .content-grid .recent-executions .executions-list .execution-details .params-section h5 {\n margin: 0 0 0.5rem 0;\n font-size: var(--mj-text-sm);\n color: var(--mj-text-muted);\n display: flex;\n align-items: center;\n gap: 0.5rem;\n}\n.actions-overview .content-grid .recent-executions .executions-list .execution-details .params-section h5 i {\n font-size: var(--mj-text-xs);\n}\n.actions-overview .content-grid .recent-executions .executions-list .execution-details .execution-actions {\n display: flex;\n justify-content: flex-end;\n}\n.actions-overview .loading-overlay {\n position: absolute;\n top: 0;\n left: 0;\n right: 0;\n bottom: 0;\n background: color-mix(in srgb, var(--mj-bg-surface) 80%, transparent);\n display: flex;\n align-items: center;\n justify-content: center;\n z-index: 1000;\n}\n\n@media (max-width: 1200px) {\n .actions-overview .content-grid {\n grid-template-columns: 1fr;\n }\n .actions-overview .content-grid .recent-executions {\n grid-column: 1;\n }\n}\n@media (max-width: 768px) {\n .actions-overview {\n padding: 1rem;\n gap: 1rem;\n }\n .actions-overview .metrics-grid {\n grid-template-columns: 1fr;\n gap: 1rem;\n }\n .actions-overview .overview-header .filters-row {\n flex-direction: column;\n align-items: stretch;\n }\n .actions-overview .overview-header .filters-row .search-container,\n .actions-overview .overview-header .filters-row .filter-container {\n min-width: unset;\n }\n}\n"] }]
1002
1005
  }], () => [{ type: i0.ChangeDetectorRef }], null); })();
1003
- (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassDebugInfo(ActionsOverviewComponent, { className: "ActionsOverviewComponent", filePath: "src/Actions/components/actions-overview.component.ts", lineNumber: 46 }); })();
1006
+ (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassDebugInfo(ActionsOverviewComponent, { className: "ActionsOverviewComponent", filePath: "src/Actions/components/actions-overview.component.ts", lineNumber: 47 }); })();
1004
1007
  //# sourceMappingURL=actions-overview.component.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"actions-overview.component.js","sourceRoot":"","sources":["../../../src/Actions/components/actions-overview.component.ts","../../../src/Actions/components/actions-overview.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 { MJActionEntity, MJActionCategoryEntity, MJActionExecutionLogEntity, ResourceData } from '@memberjunction/core-entities';\nimport { GroupByUUID, IndexByUUID, RegisterClass } 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';\ninterface ActionMetrics {\n totalActions: number;\n activeActions: number;\n pendingActions: number;\n disabledActions: number;\n totalExecutions: number;\n recentExecutions: number;\n successRate: number;\n totalCategories: number;\n aiGeneratedActions: number;\n customActions: number;\n}\n\ninterface CategoryStats {\n categoryId: string;\n categoryName: string;\n actionCount: number;\n executionCount: number;\n successRate: number;\n}\n\ninterface ExecutionWithExpanded extends MJActionExecutionLogEntity {\n isExpanded?: boolean;\n}\n\n/**\n * Actions Overview Resource - displays action management dashboard\n */\n@RegisterClass(BaseResourceComponent, 'ActionsOverviewResource')\n@Component({\n standalone: false,\n selector: 'mj-actions-overview',\n templateUrl: './actions-overview.component.html',\n styleUrls: ['./actions-overview.component.css']\n})\nexport class ActionsOverviewComponent extends BaseResourceComponent implements OnInit, OnDestroy {\n public isLoading: boolean = true;\n public Metrics: ActionMetrics = {\n totalActions: 0,\n activeActions: 0,\n pendingActions: 0,\n disabledActions: 0,\n totalExecutions: 0,\n recentExecutions: 0,\n successRate: 0,\n totalCategories: 0,\n aiGeneratedActions: 0,\n customActions: 0\n };\n\n /** @deprecated Use {@link Metrics}. */\n public get metrics(): ActionMetrics {\n return this.Metrics;\n }\n /** @deprecated Use {@link Metrics}. */\n public set metrics(value: ActionMetrics) {\n this.Metrics = value;\n }\n\n public CategoryStats: CategoryStats[] = [];\n\n /** @deprecated Use {@link CategoryStats}. */\n public get categoryStats(): CategoryStats[] {\n return this.CategoryStats;\n }\n /** @deprecated Use {@link CategoryStats}. */\n public set categoryStats(value: CategoryStats[]) {\n this.CategoryStats = value;\n }\n public RecentActions: MJActionEntity[] = [];\n\n /** @deprecated Use {@link RecentActions}. */\n public get recentActions(): MJActionEntity[] {\n return this.RecentActions;\n }\n /** @deprecated Use {@link RecentActions}. */\n public set recentActions(value: MJActionEntity[]) {\n this.RecentActions = value;\n }\n public RecentExecutions: ExecutionWithExpanded[] = [];\n\n /** @deprecated Use {@link RecentExecutions}. */\n public get recentExecutions(): ExecutionWithExpanded[] {\n return this.RecentExecutions;\n }\n /** @deprecated Use {@link RecentExecutions}. */\n public set recentExecutions(value: ExecutionWithExpanded[]) {\n this.RecentExecutions = value;\n }\n public TopCategories: MJActionCategoryEntity[] = [];\n\n /** @deprecated Use {@link TopCategories}. */\n public get topCategories(): MJActionCategoryEntity[] {\n return this.TopCategories;\n }\n /** @deprecated Use {@link TopCategories}. */\n public set topCategories(value: MJActionCategoryEntity[]) {\n this.TopCategories = value;\n }\n\n /** Full (un-sliced) collections retained so agent tools can resolve any id, not just the visible top-10. */\n private allActions: MJActionEntity[] = [];\n private allExecutions: MJActionExecutionLogEntity[] = [];\n private allCategories: MJActionCategoryEntity[] = [];\n\n /** Last action the agent (or user) selected/opened — surfaced in context as id + name. */\n private selectedAction: MJActionEntity | null = null;\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 SelectedStatus$ = new BehaviorSubject<string>('all');\n\n /** @deprecated Use {@link SelectedStatus$}. */\n public get selectedStatus$() {\n return this.SelectedStatus$;\n }\n /** @deprecated Use {@link SelectedStatus$}. */\n public set selectedStatus$(value) {\n this.SelectedStatus$ = value;\n }\n public SelectedType$ = new BehaviorSubject<string>('all');\n\n /** @deprecated Use {@link SelectedType$}. */\n public get selectedType$() {\n return this.SelectedType$;\n }\n /** @deprecated Use {@link SelectedType$}. */\n public set selectedType$(value) {\n this.SelectedType$ = value;\n }\n\n /** Allowed status filter values (mirrors the Filter popover dropdown). */\n private readonly statusFilterValues = ['all', 'Active', 'Pending', 'Disabled'] as const;\n /** Allowed type filter values (mirrors the Filter popover dropdown). */\n private readonly typeFilterValues = ['all', 'Generated', 'Custom'] as const;\n /** Allowed sort fields for the visible-actions list. */\n private readonly sortFieldValues = ['name', 'status', 'type', 'updated'] as const;\n /** Allowed sort directions. */\n private readonly sortDirectionValues = ['asc', 'desc'] as const;\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.registerAgentTools();\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.SelectedStatus$.pipe(distinctUntilChanged()),\n this.SelectedType$.pipe(distinctUntilChanged())\n ]).pipe(\n takeUntil(this.destroy$)\n ).subscribe(() => {\n this.loadFilteredData();\n this.publishAgentContext();\n });\n }\n\n // ================================================================\n // AI Agent context + client tools\n //\n // 🚨 SAFETY BOUNDARY: The Actions app executes actions with real side\n // effects (data mutation, emails, integrations). Action EXECUTION is\n // intentionally NOT exposed to the agent here — no RunAction, no execute\n // path. The agent may only FIND / FILTER / NAVIGATE actions and view run\n // history. Every Handler is tolerant (never throws; returns a structured\n // failure on bad input).\n // ================================================================\n\n /** Publish the current overview state to the agent. Called on load and on every filter change.\n * Deep context: counts by status/type, success rate, all filter state, the visible\n * (bounded) action + category names, and the currently selected action (id + name). */\n private publishAgentContext(): void {\n this.navigationService.SetAgentContext(this, {\n // Action counts by status\n TotalActionCount: this.Metrics.totalActions,\n ActiveActionCount: this.Metrics.activeActions,\n PendingActionCount: this.Metrics.pendingActions,\n DisabledActionCount: this.Metrics.disabledActions,\n // Action counts by type\n AIGeneratedActionCount: this.Metrics.aiGeneratedActions,\n CustomActionCount: this.Metrics.customActions,\n // Execution metrics\n TotalExecutionCount: this.Metrics.totalExecutions,\n RecentExecutionCount: this.Metrics.recentExecutions,\n SuccessRate: this.Metrics.successRate,\n // Category metrics\n TotalCategoryCount: this.Metrics.totalCategories,\n // Filter / search state\n CurrentSearchTerm: this.SearchTerm$.value,\n CurrentStatusFilter: this.SelectedStatus$.value,\n CurrentTypeFilter: this.SelectedType$.value,\n // What the user is looking at — bounded name lists so the agent can pick by name\n VisibleActionCount: this.RecentActions.length,\n VisibleActionNames: BoundNameList(this.RecentActions.map(a => a.Name)),\n TopCategoryNames: BoundNameList(this.TopCategories.map(c => c.Name)),\n // Current selection (id + NAME)\n SelectedActionId: this.selectedAction?.ID ?? null,\n SelectedActionName: this.selectedAction?.Name ?? null,\n });\n }\n\n /** Register the read-only / navigational client tools the agent can invoke on this surface. */\n private registerAgentTools(): void {\n this.navigationService.SetAgentClientTools(this, [\n {\n Name: 'SearchActions',\n Description: 'Search the actions list by a free-text term (matches name and description).',\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: 'FilterActionsByStatus',\n Description: 'Filter actions by status. Allowed: all, Active, Pending, Disabled.',\n ParameterSchema: { type: 'object', properties: { status: { type: 'string', enum: [...this.statusFilterValues] } }, required: ['status'] },\n Handler: async (params) => {\n const v = ValidateEnumParam(params['status'], this.statusFilterValues, 'status');\n if (!v.ok) return v.result;\n this.OnStatusFilterChange(v.value);\n return { Success: true };\n },\n },\n {\n Name: 'FilterActionsByType',\n Description: 'Filter actions by type. Allowed: all, Generated (AI-generated), Custom.',\n ParameterSchema: { type: 'object', properties: { type: { type: 'string', enum: [...this.typeFilterValues] } }, required: ['type'] },\n Handler: async (params) => {\n const v = ValidateEnumParam(params['type'], this.typeFilterValues, 'type');\n if (!v.ok) return v.result;\n this.OnTypeFilterChange(v.value);\n return { Success: true };\n },\n },\n {\n Name: 'ClearAllFilters',\n Description: 'Reset the status and type filters back to \"all\".',\n ParameterSchema: { type: 'object', properties: {} },\n Handler: async () => {\n this.ResetFilters();\n return { Success: true };\n },\n },\n {\n Name: 'SortVisibleActions',\n Description: 'Sort the visible recent-actions list. field: name, status, type, updated. direction: asc, desc (default asc).',\n ParameterSchema: {\n type: 'object',\n properties: {\n field: { type: 'string', enum: [...this.sortFieldValues] },\n direction: { type: 'string', enum: [...this.sortDirectionValues] },\n },\n required: ['field'],\n },\n Handler: async (params) => {\n const f = ValidateEnumParam(params['field'], this.sortFieldValues, 'field');\n if (!f.ok) return f.result;\n let direction: 'asc' | 'desc' = 'asc';\n if (params['direction'] !== undefined) {\n const d = ValidateEnumParam(params['direction'], this.sortDirectionValues, 'direction');\n if (!d.ok) return d.result;\n direction = d.value;\n }\n this.sortVisibleActions(f.value, direction);\n return { Success: true };\n },\n },\n {\n Name: 'OpenActionDetail',\n Description: 'Open the detail record for an action by its id OR its name (navigation only — does NOT run the action). Name matching is case-insensitive (exact then contains).',\n ParameterSchema: { type: 'object', properties: { action: { type: 'string' } }, required: ['action'] },\n Handler: async (params) => {\n const found = FindByIdOrNameOrError(params['action'], this.allActions, 'action');\n if (!found.ok) return found.result;\n this.OpenAction(found.value);\n return { Success: true, Data: { Id: found.value.ID, Name: found.value.Name } };\n },\n },\n {\n Name: 'OpenCategoryDetail',\n Description: 'Open the detail record for an action category by its id OR its name (navigation only). Name matching is case-insensitive (exact then contains).',\n ParameterSchema: { type: 'object', properties: { category: { type: 'string' } }, required: ['category'] },\n Handler: async (params) => {\n const found = FindByIdOrNameOrError(params['category'], this.allCategories, 'category');\n if (!found.ok) return found.result;\n this.OpenCategory(found.value.ID);\n return { Success: true, Data: { Id: found.value.ID, Name: found.value.Name } };\n },\n },\n {\n Name: 'OpenExecutionDetail',\n Description: 'Open the detail record for an action execution log by its id (view-only run history).',\n ParameterSchema: { type: 'object', properties: { executionId: { type: 'string' } }, required: ['executionId'] },\n Handler: async (params) => {\n const found = FindByIdOrError(params['executionId'], this.allExecutions, 'execution');\n if (!found.ok) return found.result;\n this.OpenExecution(found.value);\n return { Success: true };\n },\n },\n {\n Name: 'RefreshOverviewData',\n Description: 'Reload the actions overview data (metrics, categories, recent items).',\n ParameterSchema: { type: 'object', properties: {} },\n Handler: async () => {\n await this.loadData();\n return { Success: true };\n },\n },\n ]);\n }\n\n private async loadData(): Promise<void> {\n try {\n this.isLoading = true;\n this.cdr.detectChanges();\n\n // Load all data in a single batch using RunViews\n const rv = RunView.FromMetadataProvider(this.ProviderToUse);\n \n const [actionsResult, categoriesResult, executionsResult] = await rv.RunViews([\n {\n EntityName: 'MJ: Actions', \n OrderBy: '__mj_UpdatedAt DESC' \n },\n {\n EntityName: 'MJ: Action Categories', \n OrderBy: 'Name' \n },\n {\n EntityName: 'MJ: Action Execution Logs', \n OrderBy: 'StartedAt DESC', \n }\n ]);\n \n if (!actionsResult.Success || !categoriesResult.Success || !executionsResult.Success) {\n const errors = [];\n if (!actionsResult.Success) errors.push('Actions: ' + actionsResult.ErrorMessage);\n if (!categoriesResult.Success) errors.push('Categories: ' + categoriesResult.ErrorMessage);\n if (!executionsResult.Success) errors.push('Executions: ' + executionsResult.ErrorMessage);\n throw new Error('Failed to load data: ' + errors.join(', '));\n }\n \n const actions = (actionsResult.Results || []) as MJActionEntity[];\n const categories = (categoriesResult.Results || []) as MJActionCategoryEntity[];\n const executions = (executionsResult.Results || []) as MJActionExecutionLogEntity[];\n\n this.allActions = actions;\n this.allExecutions = executions;\n this.allCategories = categories;\n this.calculateMetrics(actions, categories, executions);\n this.calculateCategoryStats(actions, categories, executions);\n this.RecentActions = actions.slice(0, 10);\n this.RecentExecutions = executions.slice(0, 10).map(e => ({ ...e, isExpanded: false } as ExecutionWithExpanded));\n this.TopCategories = categories.slice(0, 5);\n this.publishAgentContext();\n } catch (error) {\n console.error('Error loading actions overview data:', error);\n LogError('Failed to load actions overview data', undefined, error);\n } finally {\n this.isLoading = false;\n this.cdr.detectChanges();\n this.NotifyLoadComplete();\n }\n }\n\n private calculateMetrics(\n actions: MJActionEntity[], \n categories: MJActionCategoryEntity[], \n executions: MJActionExecutionLogEntity[]\n ): void {\n this.Metrics = {\n totalActions: actions.length,\n activeActions: actions.filter(a => a.Status === 'Active').length,\n pendingActions: actions.filter(a => a.Status === 'Pending').length,\n disabledActions: actions.filter(a => a.Status === 'Disabled').length,\n totalExecutions: executions.length,\n recentExecutions: executions.filter(e => {\n const dayAgo = new Date();\n dayAgo.setDate(dayAgo.getDate() - 1);\n return e.StartedAt && new Date(e.StartedAt) > dayAgo;\n }).length,\n successRate: this.calculateSuccessRate(executions),\n totalCategories: categories.length,\n aiGeneratedActions: actions.filter(a => a.Type === 'Generated').length,\n customActions: actions.filter(a => a.Type === 'Custom').length\n };\n }\n\n private calculateSuccessRate(executions: MJActionExecutionLogEntity[]): number {\n if (!executions || executions.length === 0) return 0;\n // Check for success based on result code - Actions may use different success codes\n const successful = executions.filter(e => {\n const code = e.ResultCode?.toLowerCase();\n return code === 'success' || code === 'ok' || code === 'completed' || code === '200';\n }).length;\n return Math.round((successful / executions.length) * 100);\n }\n\n private calculateCategoryStats(\n actions: MJActionEntity[], \n categories: MJActionCategoryEntity[], \n executions: MJActionExecutionLogEntity[]\n ): void {\n // Group once: scanning every action and every execution per category grew with all three lists.\n const actionsByCategory = GroupByUUID(actions, a => a.CategoryID);\n const actionsByID = IndexByUUID(actions);\n const executionsByCategory = GroupByUUID(executions, e => actionsByID.Get(e.ActionID)?.CategoryID);\n this.CategoryStats = categories.map(category => {\n const categoryActions = actionsByCategory.Get(category.ID) ?? [];\n const categoryExecutions = executionsByCategory.Get(category.ID) ?? [];\n \n return {\n categoryId: category.ID,\n categoryName: category.Name,\n actionCount: categoryActions.length,\n executionCount: categoryExecutions.length,\n successRate: this.calculateSuccessRate(categoryExecutions)\n };\n });\n }\n\n private async loadFilteredData(): Promise<void> {\n // Implement filtered data loading based on current filter values\n const searchTerm = this.SearchTerm$.value;\n const status = this.SelectedStatus$.value;\n const type = this.SelectedType$.value;\n\n let extraFilter = '';\n const filters: string[] = [];\n\n if (status !== 'all') {\n filters.push(`Status = '${status}'`);\n }\n\n if (type !== 'all') {\n filters.push(`Type = '${type}'`);\n }\n\n if (filters.length > 0) {\n extraFilter = filters.join(' AND ');\n }\n\n try {\n const rv = RunView.FromMetadataProvider(this.ProviderToUse);\n const result = await rv.RunView({\n EntityName: 'MJ: Actions',\n ExtraFilter: extraFilter,\n OrderBy: '__mj_UpdatedAt DESC',\n UserSearchString: searchTerm,\n IgnoreMaxRows: false,\n MaxRows: 1000\n });\n \n this.RecentActions = ((result.Results || []) as MJActionEntity[]).slice(0, 10);\n } catch (error) {\n LogError('Failed to load filtered actions', undefined, error);\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 OnStatusFilterChange(status: string): void {\n this.SelectedStatus$.next(status);\n }\n\n /** @deprecated Use {@link OnStatusFilterChange}. */\n public onStatusFilterChange(status: string): void {\n return this.OnStatusFilterChange(status);\n }\n\n public OnTypeFilterChange(type: string): void {\n this.SelectedType$.next(type);\n }\n\n /** @deprecated Use {@link OnTypeFilterChange}. */\n public onTypeFilterChange(type: string): void {\n return this.OnTypeFilterChange(type);\n }\n\n // ───── Filter-popover plumbing for the [actions] slot ─────\n\n public get FilterFields(): FilterFieldConfig[] {\n return [\n {\n key: 'status',\n type: 'dropdown',\n label: 'Status',\n icon: 'fa-solid fa-circle-info',\n placeholder: 'All Statuses',\n options: [\n { text: 'All Statuses', value: 'all' },\n { text: 'Active', value: 'Active' },\n { text: 'Pending', value: 'Pending' },\n { text: 'Disabled', value: 'Disabled' }\n ]\n },\n {\n key: 'type',\n type: 'dropdown',\n label: 'Type',\n icon: 'fa-solid fa-shapes',\n placeholder: 'All Types',\n options: [\n { text: 'All Types', value: 'all' },\n { text: 'AI Generated', value: 'Generated' },\n { text: 'Custom', value: 'Custom' }\n ]\n }\n ];\n }\n public get FilterValues(): Record<string, unknown> {\n return { status: this.SelectedStatus$.value, type: this.SelectedType$.value };\n }\n public get ActiveFilterCount(): number {\n let n = 0;\n if (this.SelectedStatus$.value !== 'all') n++;\n if (this.SelectedType$.value !== 'all') n++;\n return n;\n }\n public OnFilterValuesChange(v: Record<string, unknown>): void {\n const next = (v ?? {}) as { status?: string; type?: string };\n if ((next.status ?? 'all') !== this.SelectedStatus$.value) {\n this.OnStatusFilterChange(next.status ?? 'all');\n }\n if ((next.type ?? 'all') !== this.SelectedType$.value) {\n this.OnTypeFilterChange(next.type ?? '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.SelectedStatus$.value !== 'all') this.OnStatusFilterChange('all');\n if (this.SelectedType$.value !== 'all') this.OnTypeFilterChange('all');\n }\n\n /** @deprecated Use {@link ResetFilters}. */\n public resetFilters(): void {\n return this.ResetFilters();\n }\n\n public OpenAction(action: MJActionEntity): void {\n this.selectedAction = action;\n this.publishAgentContext();\n this.navigationService.OpenEntityRecord('MJ: Actions', CompositeKey.FromID(action.ID));\n }\n\n /** @deprecated Use {@link OpenAction}. */\n public openAction(action: MJActionEntity): void {\n return this.OpenAction(action);\n }\n\n /** Sort the visible recent-actions list in place (agent tool — view-only). */\n private sortVisibleActions(field: 'name' | 'status' | 'type' | 'updated', direction: 'asc' | 'desc'): void {\n const dir = direction === 'asc' ? 1 : -1;\n const sorted = [...this.RecentActions].sort((a, b) => {\n let cmp = 0;\n switch (field) {\n case 'name': cmp = (a.Name || '').localeCompare(b.Name || ''); break;\n case 'status': cmp = (a.Status || '').localeCompare(b.Status || ''); break;\n case 'type': cmp = (a.Type || '').localeCompare(b.Type || ''); break;\n case 'updated': {\n const da = a.__mj_UpdatedAt ? new Date(a.__mj_UpdatedAt).getTime() : 0;\n const db = b.__mj_UpdatedAt ? new Date(b.__mj_UpdatedAt).getTime() : 0;\n cmp = da - db;\n break;\n }\n }\n return cmp * dir;\n });\n this.RecentActions = sorted;\n this.publishAgentContext();\n this.cdr.detectChanges();\n }\n\n public OpenCategory(categoryId: string): void {\n this.navigationService.OpenEntityRecord('MJ: Action Categories', CompositeKey.FromID(categoryId));\n }\n\n /** @deprecated Use {@link OpenCategory}. */\n public openCategory(categoryId: string): void {\n return this.OpenCategory(categoryId);\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 IsExecutionSuccess(execution: MJActionExecutionLogEntity): boolean {\n const code = execution.ResultCode?.toLowerCase();\n return code === 'success' || code === 'ok' || code === 'completed' || code === '200';\n }\n\n /** @deprecated Use {@link IsExecutionSuccess}. */\n public isExecutionSuccess(execution: MJActionExecutionLogEntity): boolean {\n return this.IsExecutionSuccess(execution);\n }\n\n public GetStatusColor(status: string): 'success' | 'warning' | 'error' | 'info' {\n switch (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(status: string): 'success' | 'warning' | 'error' | 'info' {\n return this.GetStatusColor(status);\n }\n\n public GetTypeIcon(type: string): string {\n switch (type) {\n case 'Generated': return 'fa-solid fa-robot';\n case 'Custom': return 'fa-solid fa-code';\n default: return 'fa-solid fa-cog';\n }\n }\n\n /** @deprecated Use {@link GetTypeIcon}. */\n public getTypeIcon(type: string): string {\n return this.GetTypeIcon(type);\n }\n\n // Metric card click handlers - these now filter the current view\n public OnTotalActionsClick(): void {\n // Reset filters to show all actions\n this.SelectedStatus$.next('all');\n this.SelectedType$.next('all');\n }\n\n /** @deprecated Use {@link OnTotalActionsClick}. */\n public onTotalActionsClick(): void {\n return this.OnTotalActionsClick();\n }\n\n public OnExecutionsClick(): void {\n // This would navigate to execution monitoring resource\n }\n\n /** @deprecated Use {@link OnExecutionsClick}. */\n public onExecutionsClick(): void {\n return this.OnExecutionsClick();\n }\n\n public OnCategoriesClick(): void {\n // This would navigate to categories view\n }\n\n /** @deprecated Use {@link OnCategoriesClick}. */\n public onCategoriesClick(): void {\n return this.OnCategoriesClick();\n }\n\n public OnAIGeneratedClick(): void {\n // Filter to show AI generated actions in the current view\n this.SelectedType$.next('Generated');\n }\n\n /** @deprecated Use {@link OnAIGeneratedClick}. */\n public onAIGeneratedClick(): void {\n return this.OnAIGeneratedClick();\n }\n\n public OnActionGalleryClick(): void {\n // This would navigate to action gallery view\n }\n\n /** @deprecated Use {@link OnActionGalleryClick}. */\n public onActionGalleryClick(): void {\n return this.OnActionGalleryClick();\n }\n\n public FormatJsonParams(params: string | null): string {\n if (!params) return '{}';\n try {\n // Try to parse and reformat\n const parsed = JSON.parse(params);\n return JSON.stringify(parsed, null, 2);\n } catch {\n // If parse fails, return as is\n return params;\n }\n }\n\n /** @deprecated Use {@link FormatJsonParams}. */\n public formatJsonParams(params: string | null): string {\n return this.FormatJsonParams(params);\n }\n\n /**\n * Gets the icon class for an action\n * Falls back to type-based icon if no IconClass is set\n */\n public GetActionIcon(action: MJActionEntity): string {\n return action?.IconClass || this.GetTypeIcon(action.Type);\n }\n\n /** @deprecated Use {@link GetActionIcon}. */\n public getActionIcon(action: MJActionEntity): string {\n return this.GetActionIcon(action);\n }\n\n async GetResourceDisplayName(data: ResourceData): Promise<string> {\n return 'Actions Overview';\n }\n\n async GetResourceIconClass(data: ResourceData): Promise<string> {\n return 'fa-solid fa-bolt';\n }\n}","<mj-page-layout>\n <mj-page-header\n Title=\"Actions Overview\"\n Icon=\"fa-solid fa-bolt\"\n Subtitle=\"Health and activity for all configured actions\">\n <!-- [meta] intentionally omitted — chrome slot discipline audit Task B.\n totalActions was a single inventory count; the body's KPI cards\n surface this and other metrics in their proper place. -->\n <!-- No [actions] — this page has no primary CTA; the control bar lives in [toolbar] per §3. -->\n <div toolbar>\n <mj-page-search\n Placeholder=\"Search actions...\"\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=\"actions-overview\" >\n\n <!-- Metrics Cards -->\n <div class=\"metrics-grid\">\n <div class=\"metric-card primary clickable\" (click)=\"onTotalActionsClick()\">\n <div class=\"metric-icon\">\n <i class=\"fa-solid fa-cogs\"></i>\n </div>\n <div class=\"metric-content\">\n <div class=\"metric-value\">{{ metrics.totalActions }}</div>\n <div class=\"metric-label\">Total Actions</div>\n <div class=\"metric-breakdown\">\n <span class=\"active\">{{ metrics.activeActions }} Active</span>\n <span class=\"pending\">{{ metrics.pendingActions }} Pending</span>\n <span class=\"disabled\">{{ metrics.disabledActions }} Disabled</span>\n </div>\n </div>\n </div>\n\n <div class=\"metric-card success clickable\" (click)=\"onExecutionsClick()\">\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 class=\"metric-breakdown\">\n <span class=\"recent\">{{ metrics.recentExecutions }} in last 24h</span>\n <span class=\"success-rate\">{{ metrics.successRate }}% success rate</span>\n </div>\n </div>\n </div>\n\n <div class=\"metric-card info clickable\" (click)=\"onCategoriesClick()\">\n <div class=\"metric-icon\">\n <i class=\"fa-solid fa-sitemap\"></i>\n </div>\n <div class=\"metric-content\">\n <div class=\"metric-value\">{{ metrics.totalCategories }}</div>\n <div class=\"metric-label\">Categories</div>\n <div class=\"metric-breakdown\">\n <span>Organized structure</span>\n </div>\n </div>\n </div>\n\n <div class=\"metric-card warning clickable\" (click)=\"onAIGeneratedClick()\">\n <div class=\"metric-icon\">\n <i class=\"fa-solid fa-robot\"></i>\n </div>\n <div class=\"metric-content\">\n <div class=\"metric-value\">{{ metrics.aiGeneratedActions }}</div>\n <div class=\"metric-label\">AI Generated</div>\n <div class=\"metric-breakdown\">\n <span class=\"custom\">{{ metrics.customActions }} Custom</span>\n </div>\n </div>\n </div>\n \n <div class=\"metric-card gallery clickable\" (click)=\"onActionGalleryClick()\">\n <div class=\"metric-icon\">\n <i class=\"fa-solid fa-th\"></i>\n </div>\n <div class=\"metric-content\">\n <div class=\"metric-value\">\n <i class=\"fa-solid fa-sparkles\"></i>\n </div>\n <div class=\"metric-label\">Action Gallery</div>\n <div class=\"metric-breakdown\">\n <span>Visual action browser</span>\n </div>\n </div>\n </div>\n </div>\n\n <!-- Content Grid -->\n <div class=\"content-grid\">\n <!-- Category Statistics -->\n <div class=\"panel category-stats\">\n <div class=\"panel-header\">\n <h3><i class=\"fa-solid fa-chart-bar\"></i> Category Performance</h3>\n </div>\n <div class=\"panel-content\">\n @if (categoryStats.length > 0) {\n <div class=\"category-list\">\n @for (category of categoryStats; track category.categoryId) {\n <div class=\"category-item\" (click)=\"openCategory(category.categoryId)\">\n <div class=\"category-info\">\n <div class=\"category-name\">{{ category.categoryName }}</div>\n <div class=\"category-metrics\">\n <span class=\"metric\">{{ category.actionCount }} actions</span>\n <span class=\"metric\">{{ category.executionCount }} executions</span>\n <span class=\"metric success-rate\">{{ category.successRate }}% success</span>\n </div>\n </div>\n <div class=\"category-chart\">\n <div class=\"progress-bar\">\n <div class=\"progress-fill\" [style.width.%]=\"category.successRate\"></div>\n </div>\n </div>\n </div>\n }\n </div>\n } @else {\n <mj-empty-state Size=\"compact\" Icon=\"fa-solid fa-chart-bar\"\n Title=\"No category statistics available\" />\n }\n </div>\n </div>\n\n <!-- Recent Actions -->\n <div class=\"panel recent-actions\">\n <div class=\"panel-header\">\n <h3><i class=\"fa-solid fa-clock\"></i> Recent Actions</h3>\n </div>\n <div class=\"panel-content\">\n @if (recentActions.length > 0) {\n <div class=\"actions-list\">\n @for (action of recentActions; track action.ID) {\n <div class=\"action-item\" (click)=\"openAction(action)\">\n <div class=\"action-icon\">\n <i [class]=\"getActionIcon(action)\"></i>\n </div>\n <div class=\"action-info\">\n <div class=\"action-name\">{{ action.Name }}</div>\n <div class=\"action-description\">{{ action.Description || 'No description' }}</div>\n </div>\n <div class=\"action-status\">\n <span class=\"status-chip\" [attr.data-color]=\"getStatusColor(action.Status)\">\n {{ action.Status }}\n </span>\n </div>\n </div>\n }\n </div>\n } @else {\n <mj-empty-state Size=\"compact\" Icon=\"fa-solid fa-cogs\"\n Title=\"No recent actions found\" />\n }\n </div>\n </div>\n\n <!-- Recent Executions -->\n <div class=\"panel recent-executions\">\n <div class=\"panel-header\">\n <h3><i class=\"fa-solid fa-history\"></i> Recent Executions</h3>\n </div>\n <div class=\"panel-content\">\n @if (recentExecutions.length > 0) {\n <div class=\"executions-list\">\n @for (execution of recentExecutions; track execution.ID) {\n <mj-accordion-panel Size=\"sm\" [FlushBody]=\"true\" [Expanded]=\"execution.isExpanded ?? false\" (ExpandedChange)=\"execution.isExpanded = $event\">\n <ng-template mjAccordionTitle>\n <div class=\"execution-time\">\n {{ execution.StartedAt | date:'MMM d, HH:mm' }}\n </div>\n <div class=\"execution-info\">\n <div class=\"execution-action\">{{ execution.Action || 'Action ID: ' + execution.ActionID }}</div>\n <div class=\"execution-user\">{{ execution.User || 'User ID: ' + execution.UserID }}</div>\n </div>\n <div class=\"execution-result\">\n <span class=\"status-chip\" [attr.data-color]=\"isExecutionSuccess(execution) ? 'success' : 'error'\">\n {{ execution.ResultCode || 'Unknown' }}\n </span>\n </div>\n </ng-template>\n <ng-template mjAccordionBody>\n <div class=\"execution-details\">\n <div class=\"params-section\">\n <h5><i class=\"fa-solid fa-sliders\"></i> Parameters</h5>\n <mj-code-editor\n [ngModel]=\"formatJsonParams(execution.Params)\"\n [readonly]=\"true\"\n [language]=\"'json'\"\n [lineWrapping]=\"true\"\n style=\"height: 150px; width: 100%;\">\n </mj-code-editor>\n </div>\n <div class=\"execution-actions\">\n <button mjButton\n variant=\"primary\"\n size=\"sm\"\n (click)=\"openExecution(execution)\">\n <i class=\"fa-solid fa-external-link\"></i> Open Details\n </button>\n </div>\n </div>\n </ng-template>\n </mj-accordion-panel>\n }\n </div>\n } @else {\n <mj-empty-state Size=\"compact\" Icon=\"fa-solid fa-history\"\n Title=\"No recent executions found\" />\n }\n </div>\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":"actions-overview.component.js","sourceRoot":"","sources":["../../../src/Actions/components/actions-overview.component.ts","../../../src/Actions/components/actions-overview.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 { MJActionEntity, MJActionCategoryEntity, MJActionExecutionLogEntity, ResourceData } from '@memberjunction/core-entities';\nimport { GroupByUUID, IndexByUUID, RegisterClass } 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 { ActionSuccessRate, IsActionResultSuccess } from '../action-result-code';\ninterface ActionMetrics {\n totalActions: number;\n activeActions: number;\n pendingActions: number;\n disabledActions: number;\n totalExecutions: number;\n recentExecutions: number;\n successRate: number;\n totalCategories: number;\n aiGeneratedActions: number;\n customActions: number;\n}\n\ninterface CategoryStats {\n categoryId: string;\n categoryName: string;\n actionCount: number;\n executionCount: number;\n successRate: number;\n}\n\ninterface ExecutionWithExpanded extends MJActionExecutionLogEntity {\n isExpanded?: boolean;\n}\n\n/**\n * Actions Overview Resource - displays action management dashboard\n */\n@RegisterClass(BaseResourceComponent, 'ActionsOverviewResource')\n@Component({\n standalone: false,\n selector: 'mj-actions-overview',\n templateUrl: './actions-overview.component.html',\n styleUrls: ['./actions-overview.component.css']\n})\nexport class ActionsOverviewComponent extends BaseResourceComponent implements OnInit, OnDestroy {\n public isLoading: boolean = true;\n public Metrics: ActionMetrics = {\n totalActions: 0,\n activeActions: 0,\n pendingActions: 0,\n disabledActions: 0,\n totalExecutions: 0,\n recentExecutions: 0,\n successRate: 0,\n totalCategories: 0,\n aiGeneratedActions: 0,\n customActions: 0\n };\n\n /** @deprecated Use {@link Metrics}. */\n public get metrics(): ActionMetrics {\n return this.Metrics;\n }\n /** @deprecated Use {@link Metrics}. */\n public set metrics(value: ActionMetrics) {\n this.Metrics = value;\n }\n\n public CategoryStats: CategoryStats[] = [];\n\n /** @deprecated Use {@link CategoryStats}. */\n public get categoryStats(): CategoryStats[] {\n return this.CategoryStats;\n }\n /** @deprecated Use {@link CategoryStats}. */\n public set categoryStats(value: CategoryStats[]) {\n this.CategoryStats = value;\n }\n public RecentActions: MJActionEntity[] = [];\n\n /** @deprecated Use {@link RecentActions}. */\n public get recentActions(): MJActionEntity[] {\n return this.RecentActions;\n }\n /** @deprecated Use {@link RecentActions}. */\n public set recentActions(value: MJActionEntity[]) {\n this.RecentActions = value;\n }\n public RecentExecutions: ExecutionWithExpanded[] = [];\n\n /** @deprecated Use {@link RecentExecutions}. */\n public get recentExecutions(): ExecutionWithExpanded[] {\n return this.RecentExecutions;\n }\n /** @deprecated Use {@link RecentExecutions}. */\n public set recentExecutions(value: ExecutionWithExpanded[]) {\n this.RecentExecutions = value;\n }\n public TopCategories: MJActionCategoryEntity[] = [];\n\n /** @deprecated Use {@link TopCategories}. */\n public get topCategories(): MJActionCategoryEntity[] {\n return this.TopCategories;\n }\n /** @deprecated Use {@link TopCategories}. */\n public set topCategories(value: MJActionCategoryEntity[]) {\n this.TopCategories = value;\n }\n\n /** Full (un-sliced) collections retained so agent tools can resolve any id, not just the visible top-10. */\n private allActions: MJActionEntity[] = [];\n private allExecutions: MJActionExecutionLogEntity[] = [];\n private allCategories: MJActionCategoryEntity[] = [];\n\n /** Last action the agent (or user) selected/opened — surfaced in context as id + name. */\n private selectedAction: MJActionEntity | null = null;\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 SelectedStatus$ = new BehaviorSubject<string>('all');\n\n /** @deprecated Use {@link SelectedStatus$}. */\n public get selectedStatus$() {\n return this.SelectedStatus$;\n }\n /** @deprecated Use {@link SelectedStatus$}. */\n public set selectedStatus$(value) {\n this.SelectedStatus$ = value;\n }\n public SelectedType$ = new BehaviorSubject<string>('all');\n\n /** @deprecated Use {@link SelectedType$}. */\n public get selectedType$() {\n return this.SelectedType$;\n }\n /** @deprecated Use {@link SelectedType$}. */\n public set selectedType$(value) {\n this.SelectedType$ = value;\n }\n\n /** Allowed status filter values (mirrors the Filter popover dropdown). */\n private readonly statusFilterValues = ['all', 'Active', 'Pending', 'Disabled'] as const;\n /** Allowed type filter values (mirrors the Filter popover dropdown). */\n private readonly typeFilterValues = ['all', 'Generated', 'Custom'] as const;\n /** Allowed sort fields for the visible-actions list. */\n private readonly sortFieldValues = ['name', 'status', 'type', 'updated'] as const;\n /** Allowed sort directions. */\n private readonly sortDirectionValues = ['asc', 'desc'] as const;\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.registerAgentTools();\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.SelectedStatus$.pipe(distinctUntilChanged()),\n this.SelectedType$.pipe(distinctUntilChanged())\n ]).pipe(\n takeUntil(this.destroy$)\n ).subscribe(() => {\n this.loadFilteredData();\n this.publishAgentContext();\n });\n }\n\n // ================================================================\n // AI Agent context + client tools\n //\n // 🚨 SAFETY BOUNDARY: The Actions app executes actions with real side\n // effects (data mutation, emails, integrations). Action EXECUTION is\n // intentionally NOT exposed to the agent here — no RunAction, no execute\n // path. The agent may only FIND / FILTER / NAVIGATE actions and view run\n // history. Every Handler is tolerant (never throws; returns a structured\n // failure on bad input).\n // ================================================================\n\n /** Publish the current overview state to the agent. Called on load and on every filter change.\n * Deep context: counts by status/type, success rate, all filter state, the visible\n * (bounded) action + category names, and the currently selected action (id + name). */\n private publishAgentContext(): void {\n this.navigationService.SetAgentContext(this, {\n // Action counts by status\n TotalActionCount: this.Metrics.totalActions,\n ActiveActionCount: this.Metrics.activeActions,\n PendingActionCount: this.Metrics.pendingActions,\n DisabledActionCount: this.Metrics.disabledActions,\n // Action counts by type\n AIGeneratedActionCount: this.Metrics.aiGeneratedActions,\n CustomActionCount: this.Metrics.customActions,\n // Execution metrics\n TotalExecutionCount: this.Metrics.totalExecutions,\n RecentExecutionCount: this.Metrics.recentExecutions,\n SuccessRate: this.Metrics.successRate,\n // Category metrics\n TotalCategoryCount: this.Metrics.totalCategories,\n // Filter / search state\n CurrentSearchTerm: this.SearchTerm$.value,\n CurrentStatusFilter: this.SelectedStatus$.value,\n CurrentTypeFilter: this.SelectedType$.value,\n // What the user is looking at — bounded name lists so the agent can pick by name\n VisibleActionCount: this.RecentActions.length,\n VisibleActionNames: BoundNameList(this.RecentActions.map(a => a.Name)),\n TopCategoryNames: BoundNameList(this.TopCategories.map(c => c.Name)),\n // Current selection (id + NAME)\n SelectedActionId: this.selectedAction?.ID ?? null,\n SelectedActionName: this.selectedAction?.Name ?? null,\n });\n }\n\n /** Register the read-only / navigational client tools the agent can invoke on this surface. */\n private registerAgentTools(): void {\n this.navigationService.SetAgentClientTools(this, [\n {\n Name: 'SearchActions',\n Description: 'Search the actions list by a free-text term (matches name and description).',\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: 'FilterActionsByStatus',\n Description: 'Filter actions by status. Allowed: all, Active, Pending, Disabled.',\n ParameterSchema: { type: 'object', properties: { status: { type: 'string', enum: [...this.statusFilterValues] } }, required: ['status'] },\n Handler: async (params) => {\n const v = ValidateEnumParam(params['status'], this.statusFilterValues, 'status');\n if (!v.ok) return v.result;\n this.OnStatusFilterChange(v.value);\n return { Success: true };\n },\n },\n {\n Name: 'FilterActionsByType',\n Description: 'Filter actions by type. Allowed: all, Generated (AI-generated), Custom.',\n ParameterSchema: { type: 'object', properties: { type: { type: 'string', enum: [...this.typeFilterValues] } }, required: ['type'] },\n Handler: async (params) => {\n const v = ValidateEnumParam(params['type'], this.typeFilterValues, 'type');\n if (!v.ok) return v.result;\n this.OnTypeFilterChange(v.value);\n return { Success: true };\n },\n },\n {\n Name: 'ClearAllFilters',\n Description: 'Reset the status and type filters back to \"all\".',\n ParameterSchema: { type: 'object', properties: {} },\n Handler: async () => {\n this.ResetFilters();\n return { Success: true };\n },\n },\n {\n Name: 'SortVisibleActions',\n Description: 'Sort the visible recent-actions list. field: name, status, type, updated. direction: asc, desc (default asc).',\n ParameterSchema: {\n type: 'object',\n properties: {\n field: { type: 'string', enum: [...this.sortFieldValues] },\n direction: { type: 'string', enum: [...this.sortDirectionValues] },\n },\n required: ['field'],\n },\n Handler: async (params) => {\n const f = ValidateEnumParam(params['field'], this.sortFieldValues, 'field');\n if (!f.ok) return f.result;\n let direction: 'asc' | 'desc' = 'asc';\n if (params['direction'] !== undefined) {\n const d = ValidateEnumParam(params['direction'], this.sortDirectionValues, 'direction');\n if (!d.ok) return d.result;\n direction = d.value;\n }\n this.sortVisibleActions(f.value, direction);\n return { Success: true };\n },\n },\n {\n Name: 'OpenActionDetail',\n Description: 'Open the detail record for an action by its id OR its name (navigation only — does NOT run the action). Name matching is case-insensitive (exact then contains).',\n ParameterSchema: { type: 'object', properties: { action: { type: 'string' } }, required: ['action'] },\n Handler: async (params) => {\n const found = FindByIdOrNameOrError(params['action'], this.allActions, 'action');\n if (!found.ok) return found.result;\n this.OpenAction(found.value);\n return { Success: true, Data: { Id: found.value.ID, Name: found.value.Name } };\n },\n },\n {\n Name: 'OpenCategoryDetail',\n Description: 'Open the detail record for an action category by its id OR its name (navigation only). Name matching is case-insensitive (exact then contains).',\n ParameterSchema: { type: 'object', properties: { category: { type: 'string' } }, required: ['category'] },\n Handler: async (params) => {\n const found = FindByIdOrNameOrError(params['category'], this.allCategories, 'category');\n if (!found.ok) return found.result;\n this.OpenCategory(found.value.ID);\n return { Success: true, Data: { Id: found.value.ID, Name: found.value.Name } };\n },\n },\n {\n Name: 'OpenExecutionDetail',\n Description: 'Open the detail record for an action execution log by its id (view-only run history).',\n ParameterSchema: { type: 'object', properties: { executionId: { type: 'string' } }, required: ['executionId'] },\n Handler: async (params) => {\n const found = FindByIdOrError(params['executionId'], this.allExecutions, 'execution');\n if (!found.ok) return found.result;\n this.OpenExecution(found.value);\n return { Success: true };\n },\n },\n {\n Name: 'RefreshOverviewData',\n Description: 'Reload the actions overview data (metrics, categories, recent items).',\n ParameterSchema: { type: 'object', properties: {} },\n Handler: async () => {\n await this.loadData();\n return { Success: true };\n },\n },\n ]);\n }\n\n private async loadData(): Promise<void> {\n try {\n this.isLoading = true;\n this.cdr.detectChanges();\n\n // Load all data in a single batch using RunViews\n const rv = RunView.FromMetadataProvider(this.ProviderToUse);\n \n const [actionsResult, categoriesResult, executionsResult] = await rv.RunViews([\n {\n EntityName: 'MJ: Actions', \n OrderBy: '__mj_UpdatedAt DESC' \n },\n {\n EntityName: 'MJ: Action Categories', \n OrderBy: 'Name' \n },\n {\n EntityName: 'MJ: Action Execution Logs', \n OrderBy: 'StartedAt DESC', \n }\n ]);\n \n if (!actionsResult.Success || !categoriesResult.Success || !executionsResult.Success) {\n const errors = [];\n if (!actionsResult.Success) errors.push('Actions: ' + actionsResult.ErrorMessage);\n if (!categoriesResult.Success) errors.push('Categories: ' + categoriesResult.ErrorMessage);\n if (!executionsResult.Success) errors.push('Executions: ' + executionsResult.ErrorMessage);\n throw new Error('Failed to load data: ' + errors.join(', '));\n }\n \n const actions = (actionsResult.Results || []) as MJActionEntity[];\n const categories = (categoriesResult.Results || []) as MJActionCategoryEntity[];\n const executions = (executionsResult.Results || []) as MJActionExecutionLogEntity[];\n\n this.allActions = actions;\n this.allExecutions = executions;\n this.allCategories = categories;\n this.calculateMetrics(actions, categories, executions);\n this.calculateCategoryStats(actions, categories, executions);\n this.RecentActions = actions.slice(0, 10);\n this.RecentExecutions = executions.slice(0, 10).map(e => ({ ...e, isExpanded: false } as ExecutionWithExpanded));\n this.TopCategories = categories.slice(0, 5);\n this.publishAgentContext();\n } catch (error) {\n console.error('Error loading actions overview data:', error);\n LogError('Failed to load actions overview data', undefined, error);\n } finally {\n this.isLoading = false;\n this.cdr.detectChanges();\n this.NotifyLoadComplete();\n }\n }\n\n private calculateMetrics(\n actions: MJActionEntity[], \n categories: MJActionCategoryEntity[], \n executions: MJActionExecutionLogEntity[]\n ): void {\n this.Metrics = {\n totalActions: actions.length,\n activeActions: actions.filter(a => a.Status === 'Active').length,\n pendingActions: actions.filter(a => a.Status === 'Pending').length,\n disabledActions: actions.filter(a => a.Status === 'Disabled').length,\n totalExecutions: executions.length,\n recentExecutions: executions.filter(e => {\n const dayAgo = new Date();\n dayAgo.setDate(dayAgo.getDate() - 1);\n return e.StartedAt && new Date(e.StartedAt) > dayAgo;\n }).length,\n successRate: this.calculateSuccessRate(executions),\n totalCategories: categories.length,\n aiGeneratedActions: actions.filter(a => a.Type === 'Generated').length,\n customActions: actions.filter(a => a.Type === 'Custom').length\n };\n }\n\n /**\n * Successes as a share of SETTLED runs, through the shared classifier.\n *\n * This was the *believable* number on the Actions surfaces — it at least lowercased — but it\n * was still its own private vocabulary (`success|ok|completed|200`), and it divided by every\n * row including still-running ones. Both halves now come from `action-result-code.ts`, so\n * this rate and the Execution Monitor's can no longer disagree.\n */\n private calculateSuccessRate(executions: MJActionExecutionLogEntity[]): number {\n if (!executions || executions.length === 0) return 0;\n return ActionSuccessRate(executions.map(e => e.ResultCode));\n }\n\n private calculateCategoryStats(\n actions: MJActionEntity[], \n categories: MJActionCategoryEntity[], \n executions: MJActionExecutionLogEntity[]\n ): void {\n // Group once: scanning every action and every execution per category grew with all three lists.\n const actionsByCategory = GroupByUUID(actions, a => a.CategoryID);\n const actionsByID = IndexByUUID(actions);\n const executionsByCategory = GroupByUUID(executions, e => actionsByID.Get(e.ActionID)?.CategoryID);\n this.CategoryStats = categories.map(category => {\n const categoryActions = actionsByCategory.Get(category.ID) ?? [];\n const categoryExecutions = executionsByCategory.Get(category.ID) ?? [];\n \n return {\n categoryId: category.ID,\n categoryName: category.Name,\n actionCount: categoryActions.length,\n executionCount: categoryExecutions.length,\n successRate: this.calculateSuccessRate(categoryExecutions)\n };\n });\n }\n\n private async loadFilteredData(): Promise<void> {\n // Implement filtered data loading based on current filter values\n const searchTerm = this.SearchTerm$.value;\n const status = this.SelectedStatus$.value;\n const type = this.SelectedType$.value;\n\n let extraFilter = '';\n const filters: string[] = [];\n\n if (status !== 'all') {\n filters.push(`Status = '${status}'`);\n }\n\n if (type !== 'all') {\n filters.push(`Type = '${type}'`);\n }\n\n if (filters.length > 0) {\n extraFilter = filters.join(' AND ');\n }\n\n try {\n const rv = RunView.FromMetadataProvider(this.ProviderToUse);\n const result = await rv.RunView({\n EntityName: 'MJ: Actions',\n ExtraFilter: extraFilter,\n OrderBy: '__mj_UpdatedAt DESC',\n UserSearchString: searchTerm,\n IgnoreMaxRows: false,\n MaxRows: 1000\n });\n \n this.RecentActions = ((result.Results || []) as MJActionEntity[]).slice(0, 10);\n } catch (error) {\n LogError('Failed to load filtered actions', undefined, error);\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 OnStatusFilterChange(status: string): void {\n this.SelectedStatus$.next(status);\n }\n\n /** @deprecated Use {@link OnStatusFilterChange}. */\n public onStatusFilterChange(status: string): void {\n return this.OnStatusFilterChange(status);\n }\n\n public OnTypeFilterChange(type: string): void {\n this.SelectedType$.next(type);\n }\n\n /** @deprecated Use {@link OnTypeFilterChange}. */\n public onTypeFilterChange(type: string): void {\n return this.OnTypeFilterChange(type);\n }\n\n // ───── Filter-popover plumbing for the [actions] slot ─────\n\n public get FilterFields(): FilterFieldConfig[] {\n return [\n {\n key: 'status',\n type: 'dropdown',\n label: 'Status',\n icon: 'fa-solid fa-circle-info',\n placeholder: 'All Statuses',\n options: [\n { text: 'All Statuses', value: 'all' },\n { text: 'Active', value: 'Active' },\n { text: 'Pending', value: 'Pending' },\n { text: 'Disabled', value: 'Disabled' }\n ]\n },\n {\n key: 'type',\n type: 'dropdown',\n label: 'Type',\n icon: 'fa-solid fa-shapes',\n placeholder: 'All Types',\n options: [\n { text: 'All Types', value: 'all' },\n { text: 'AI Generated', value: 'Generated' },\n { text: 'Custom', value: 'Custom' }\n ]\n }\n ];\n }\n public get FilterValues(): Record<string, unknown> {\n return { status: this.SelectedStatus$.value, type: this.SelectedType$.value };\n }\n public get ActiveFilterCount(): number {\n let n = 0;\n if (this.SelectedStatus$.value !== 'all') n++;\n if (this.SelectedType$.value !== 'all') n++;\n return n;\n }\n public OnFilterValuesChange(v: Record<string, unknown>): void {\n const next = (v ?? {}) as { status?: string; type?: string };\n if ((next.status ?? 'all') !== this.SelectedStatus$.value) {\n this.OnStatusFilterChange(next.status ?? 'all');\n }\n if ((next.type ?? 'all') !== this.SelectedType$.value) {\n this.OnTypeFilterChange(next.type ?? '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.SelectedStatus$.value !== 'all') this.OnStatusFilterChange('all');\n if (this.SelectedType$.value !== 'all') this.OnTypeFilterChange('all');\n }\n\n /** @deprecated Use {@link ResetFilters}. */\n public resetFilters(): void {\n return this.ResetFilters();\n }\n\n public OpenAction(action: MJActionEntity): void {\n this.selectedAction = action;\n this.publishAgentContext();\n this.navigationService.OpenEntityRecord('MJ: Actions', CompositeKey.FromID(action.ID));\n }\n\n /** @deprecated Use {@link OpenAction}. */\n public openAction(action: MJActionEntity): void {\n return this.OpenAction(action);\n }\n\n /** Sort the visible recent-actions list in place (agent tool — view-only). */\n private sortVisibleActions(field: 'name' | 'status' | 'type' | 'updated', direction: 'asc' | 'desc'): void {\n const dir = direction === 'asc' ? 1 : -1;\n const sorted = [...this.RecentActions].sort((a, b) => {\n let cmp = 0;\n switch (field) {\n case 'name': cmp = (a.Name || '').localeCompare(b.Name || ''); break;\n case 'status': cmp = (a.Status || '').localeCompare(b.Status || ''); break;\n case 'type': cmp = (a.Type || '').localeCompare(b.Type || ''); break;\n case 'updated': {\n const da = a.__mj_UpdatedAt ? new Date(a.__mj_UpdatedAt).getTime() : 0;\n const db = b.__mj_UpdatedAt ? new Date(b.__mj_UpdatedAt).getTime() : 0;\n cmp = da - db;\n break;\n }\n }\n return cmp * dir;\n });\n this.RecentActions = sorted;\n this.publishAgentContext();\n this.cdr.detectChanges();\n }\n\n public OpenCategory(categoryId: string): void {\n this.navigationService.OpenEntityRecord('MJ: Action Categories', CompositeKey.FromID(categoryId));\n }\n\n /** @deprecated Use {@link OpenCategory}. */\n public openCategory(categoryId: string): void {\n return this.OpenCategory(categoryId);\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 IsExecutionSuccess(execution: MJActionExecutionLogEntity): boolean {\n return IsActionResultSuccess(execution.ResultCode);\n }\n\n /** @deprecated Use {@link IsExecutionSuccess}. */\n public isExecutionSuccess(execution: MJActionExecutionLogEntity): boolean {\n return this.IsExecutionSuccess(execution);\n }\n\n public GetStatusColor(status: string): 'success' | 'warning' | 'error' | 'info' {\n switch (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(status: string): 'success' | 'warning' | 'error' | 'info' {\n return this.GetStatusColor(status);\n }\n\n public GetTypeIcon(type: string): string {\n switch (type) {\n case 'Generated': return 'fa-solid fa-robot';\n case 'Custom': return 'fa-solid fa-code';\n default: return 'fa-solid fa-cog';\n }\n }\n\n /** @deprecated Use {@link GetTypeIcon}. */\n public getTypeIcon(type: string): string {\n return this.GetTypeIcon(type);\n }\n\n // Metric card click handlers - these now filter the current view\n public OnTotalActionsClick(): void {\n // Reset filters to show all actions\n this.SelectedStatus$.next('all');\n this.SelectedType$.next('all');\n }\n\n /** @deprecated Use {@link OnTotalActionsClick}. */\n public onTotalActionsClick(): void {\n return this.OnTotalActionsClick();\n }\n\n public OnExecutionsClick(): void {\n // This would navigate to execution monitoring resource\n }\n\n /** @deprecated Use {@link OnExecutionsClick}. */\n public onExecutionsClick(): void {\n return this.OnExecutionsClick();\n }\n\n public OnCategoriesClick(): void {\n // This would navigate to categories view\n }\n\n /** @deprecated Use {@link OnCategoriesClick}. */\n public onCategoriesClick(): void {\n return this.OnCategoriesClick();\n }\n\n public OnAIGeneratedClick(): void {\n // Filter to show AI generated actions in the current view\n this.SelectedType$.next('Generated');\n }\n\n /** @deprecated Use {@link OnAIGeneratedClick}. */\n public onAIGeneratedClick(): void {\n return this.OnAIGeneratedClick();\n }\n\n public OnActionGalleryClick(): void {\n // This would navigate to action gallery view\n }\n\n /** @deprecated Use {@link OnActionGalleryClick}. */\n public onActionGalleryClick(): void {\n return this.OnActionGalleryClick();\n }\n\n public FormatJsonParams(params: string | null): string {\n if (!params) return '{}';\n try {\n // Try to parse and reformat\n const parsed = JSON.parse(params);\n return JSON.stringify(parsed, null, 2);\n } catch {\n // If parse fails, return as is\n return params;\n }\n }\n\n /** @deprecated Use {@link FormatJsonParams}. */\n public formatJsonParams(params: string | null): string {\n return this.FormatJsonParams(params);\n }\n\n /**\n * Gets the icon class for an action\n * Falls back to type-based icon if no IconClass is set\n */\n public GetActionIcon(action: MJActionEntity): string {\n return action?.IconClass || this.GetTypeIcon(action.Type);\n }\n\n /** @deprecated Use {@link GetActionIcon}. */\n public getActionIcon(action: MJActionEntity): string {\n return this.GetActionIcon(action);\n }\n\n async GetResourceDisplayName(data: ResourceData): Promise<string> {\n return 'Actions Overview';\n }\n\n async GetResourceIconClass(data: ResourceData): Promise<string> {\n return 'fa-solid fa-bolt';\n }\n}","<mj-page-layout>\n <mj-page-header\n Title=\"Actions Overview\"\n Icon=\"fa-solid fa-bolt\"\n Subtitle=\"Health and activity for all configured actions\">\n <!-- [meta] intentionally omitted — chrome slot discipline audit Task B.\n totalActions was a single inventory count; the body's KPI cards\n surface this and other metrics in their proper place. -->\n <!-- No [actions] — this page has no primary CTA; the control bar lives in [toolbar] per §3. -->\n <div toolbar>\n <mj-page-search\n Placeholder=\"Search actions...\"\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=\"actions-overview\" >\n\n <!-- Metrics Cards -->\n <div class=\"metrics-grid\">\n <div class=\"metric-card primary clickable\" (click)=\"onTotalActionsClick()\">\n <div class=\"metric-icon\">\n <i class=\"fa-solid fa-cogs\"></i>\n </div>\n <div class=\"metric-content\">\n <div class=\"metric-value\">{{ metrics.totalActions }}</div>\n <div class=\"metric-label\">Total Actions</div>\n <div class=\"metric-breakdown\">\n <span class=\"active\">{{ metrics.activeActions }} Active</span>\n <span class=\"pending\">{{ metrics.pendingActions }} Pending</span>\n <span class=\"disabled\">{{ metrics.disabledActions }} Disabled</span>\n </div>\n </div>\n </div>\n\n <div class=\"metric-card success clickable\" (click)=\"onExecutionsClick()\">\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 class=\"metric-breakdown\">\n <span class=\"recent\">{{ metrics.recentExecutions }} in last 24h</span>\n <span class=\"success-rate\">{{ metrics.successRate }}% success rate</span>\n </div>\n </div>\n </div>\n\n <div class=\"metric-card info clickable\" (click)=\"onCategoriesClick()\">\n <div class=\"metric-icon\">\n <i class=\"fa-solid fa-sitemap\"></i>\n </div>\n <div class=\"metric-content\">\n <div class=\"metric-value\">{{ metrics.totalCategories }}</div>\n <div class=\"metric-label\">Categories</div>\n <div class=\"metric-breakdown\">\n <span>Organized structure</span>\n </div>\n </div>\n </div>\n\n <div class=\"metric-card warning clickable\" (click)=\"onAIGeneratedClick()\">\n <div class=\"metric-icon\">\n <i class=\"fa-solid fa-robot\"></i>\n </div>\n <div class=\"metric-content\">\n <div class=\"metric-value\">{{ metrics.aiGeneratedActions }}</div>\n <div class=\"metric-label\">AI Generated</div>\n <div class=\"metric-breakdown\">\n <span class=\"custom\">{{ metrics.customActions }} Custom</span>\n </div>\n </div>\n </div>\n \n <div class=\"metric-card gallery clickable\" (click)=\"onActionGalleryClick()\">\n <div class=\"metric-icon\">\n <i class=\"fa-solid fa-th\"></i>\n </div>\n <div class=\"metric-content\">\n <div class=\"metric-value\">\n <i class=\"fa-solid fa-sparkles\"></i>\n </div>\n <div class=\"metric-label\">Action Gallery</div>\n <div class=\"metric-breakdown\">\n <span>Visual action browser</span>\n </div>\n </div>\n </div>\n </div>\n\n <!-- Content Grid -->\n <div class=\"content-grid\">\n <!-- Category Statistics -->\n <div class=\"panel category-stats\">\n <div class=\"panel-header\">\n <h3><i class=\"fa-solid fa-chart-bar\"></i> Category Performance</h3>\n </div>\n <div class=\"panel-content\">\n @if (categoryStats.length > 0) {\n <div class=\"category-list\">\n @for (category of categoryStats; track category.categoryId) {\n <div class=\"category-item\" (click)=\"openCategory(category.categoryId)\">\n <div class=\"category-info\">\n <div class=\"category-name\">{{ category.categoryName }}</div>\n <div class=\"category-metrics\">\n <span class=\"metric\">{{ category.actionCount }} actions</span>\n <span class=\"metric\">{{ category.executionCount }} executions</span>\n <span class=\"metric success-rate\">{{ category.successRate }}% success</span>\n </div>\n </div>\n <div class=\"category-chart\">\n <div class=\"progress-bar\">\n <div class=\"progress-fill\" [style.width.%]=\"category.successRate\"></div>\n </div>\n </div>\n </div>\n }\n </div>\n } @else {\n <mj-empty-state Size=\"compact\" Icon=\"fa-solid fa-chart-bar\"\n Title=\"No category statistics available\" />\n }\n </div>\n </div>\n\n <!-- Recent Actions -->\n <div class=\"panel recent-actions\">\n <div class=\"panel-header\">\n <h3><i class=\"fa-solid fa-clock\"></i> Recent Actions</h3>\n </div>\n <div class=\"panel-content\">\n @if (recentActions.length > 0) {\n <div class=\"actions-list\">\n @for (action of recentActions; track action.ID) {\n <div class=\"action-item\" (click)=\"openAction(action)\">\n <div class=\"action-icon\">\n <i [class]=\"getActionIcon(action)\"></i>\n </div>\n <div class=\"action-info\">\n <div class=\"action-name\">{{ action.Name }}</div>\n <div class=\"action-description\">{{ action.Description || 'No description' }}</div>\n </div>\n <div class=\"action-status\">\n <span class=\"status-chip\" [attr.data-color]=\"getStatusColor(action.Status)\">\n {{ action.Status }}\n </span>\n </div>\n </div>\n }\n </div>\n } @else {\n <mj-empty-state Size=\"compact\" Icon=\"fa-solid fa-cogs\"\n Title=\"No recent actions found\" />\n }\n </div>\n </div>\n\n <!-- Recent Executions -->\n <div class=\"panel recent-executions\">\n <div class=\"panel-header\">\n <h3><i class=\"fa-solid fa-history\"></i> Recent Executions</h3>\n </div>\n <div class=\"panel-content\">\n @if (recentExecutions.length > 0) {\n <div class=\"executions-list\">\n @for (execution of recentExecutions; track execution.ID) {\n <mj-accordion-panel Size=\"sm\" [FlushBody]=\"true\" [Expanded]=\"execution.isExpanded ?? false\" (ExpandedChange)=\"execution.isExpanded = $event\">\n <ng-template mjAccordionTitle>\n <div class=\"execution-time\">\n {{ execution.StartedAt | date:'MMM d, HH:mm' }}\n </div>\n <div class=\"execution-info\">\n <div class=\"execution-action\">{{ execution.Action || 'Action ID: ' + execution.ActionID }}</div>\n <div class=\"execution-user\">{{ execution.User || 'User ID: ' + execution.UserID }}</div>\n </div>\n <div class=\"execution-result\">\n <span class=\"status-chip\" [attr.data-color]=\"isExecutionSuccess(execution) ? 'success' : 'error'\">\n {{ execution.ResultCode || 'Unknown' }}\n </span>\n </div>\n </ng-template>\n <ng-template mjAccordionBody>\n <div class=\"execution-details\">\n <div class=\"params-section\">\n <h5><i class=\"fa-solid fa-sliders\"></i> Parameters</h5>\n <mj-code-editor\n [ngModel]=\"formatJsonParams(execution.Params)\"\n [readonly]=\"true\"\n [language]=\"'json'\"\n [lineWrapping]=\"true\"\n style=\"height: 150px; width: 100%;\">\n </mj-code-editor>\n </div>\n <div class=\"execution-actions\">\n <button mjButton\n variant=\"primary\"\n size=\"sm\"\n (click)=\"openExecution(execution)\">\n <i class=\"fa-solid fa-external-link\"></i> Open Details\n </button>\n </div>\n </div>\n </ng-template>\n </mj-accordion-panel>\n }\n </div>\n } @else {\n <mj-empty-state Size=\"compact\" Icon=\"fa-solid fa-history\"\n Title=\"No recent executions found\" />\n }\n </div>\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>"]}
@@ -84,20 +84,35 @@ export declare class ActionExecutionMonitoringComponent extends BaseResourceComp
84
84
  text: string;
85
85
  value: string;
86
86
  }[]);
87
- ResultOptions: {
88
- text: string;
89
- value: string;
90
- }[];
91
- /** @deprecated Use {@link ResultOptions}. */
92
- get resultOptions(): {
87
+ /**
88
+ * The visible result filter. `Failed` and `Error` were two separate options that both
89
+ * matched the stored code literally; they are one option now because they are one OUTCOME —
90
+ * a run that ended without succeeding — and the codes for it (`RUNTIME_ERROR`, `TIMEOUT`,
91
+ * `NOT_APPROVED`, legacy `Failed`…) never matched either label anyway. `Error` is still
92
+ * ACCEPTED as an alias (see {@link RESULT_FILTER_CLASSES}) so an agent or a restored filter
93
+ * asking for it keeps working.
94
+ */
95
+ private static readonly RESULT_OPTIONS;
96
+ /**
97
+ * A constant list, so it lives on the class rather than on each instance — which also makes
98
+ * it readable without constructing the component, and therefore testable alongside
99
+ * {@link RESULT_FILTER_CLASSES}. Those two must agree: every offered value has to select
100
+ * something.
101
+ */
102
+ get ResultOptions(): ReadonlyArray<{
93
103
  text: string;
94
104
  value: string;
95
- }[];
105
+ }>;
96
106
  /** @deprecated Use {@link ResultOptions}. */
97
- set resultOptions(value: {
107
+ get resultOptions(): ReadonlyArray<{
98
108
  text: string;
99
109
  value: string;
100
- }[]);
110
+ }>;
111
+ /**
112
+ * Which outcome class each accepted filter value selects. `Failed` and `Error` deliberately
113
+ * map to the same class — see {@link ResultOptions}.
114
+ */
115
+ private static readonly RESULT_FILTER_CLASSES;
101
116
  ActionOptions: Array<{
102
117
  text: string;
103
118
  value: string;
@@ -200,6 +215,11 @@ export declare class ActionExecutionMonitoringComponent extends BaseResourceComp
200
215
  GetDuration(execution: MJActionExecutionLogEntity): string;
201
216
  /** @deprecated Use {@link GetDuration}. */
202
217
  getDuration(execution: MJActionExecutionLogEntity): string;
218
+ /**
219
+ * Successes as a share of SETTLED runs — see {@link ActionSuccessRate}. Dividing by
220
+ * `totalExecutions` put still-running and unrecognised-code rows in the denominator, which
221
+ * drags the rate down for reasons that are not failures.
222
+ */
203
223
  GetSuccessRate(): number;
204
224
  /** @deprecated Use {@link GetSuccessRate}. */
205
225
  getSuccessRate(): number;
@@ -1 +1 @@
1
- {"version":3,"file":"execution-monitoring.component.d.ts","sourceRoot":"","sources":["../../../src/Actions/components/execution-monitoring.component.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"execution-monitoring.component.d.ts","sourceRoot":"","sources":["../../../src/Actions/components/execution-monitoring.component.ts"],"names":[],"mappings":"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"}