@memberjunction/ng-dashboards 2.48.0 → 2.50.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (92) hide show
  1. package/README.md +105 -2
  2. package/dist/AI/ai-dashboard.component.d.ts +2 -0
  3. package/dist/AI/ai-dashboard.component.d.ts.map +1 -1
  4. package/dist/AI/ai-dashboard.component.js +66 -43
  5. package/dist/AI/ai-dashboard.component.js.map +1 -1
  6. package/dist/AI/components/agents/agent-configuration.component.js +45 -58
  7. package/dist/AI/components/agents/agent-configuration.component.js.map +1 -1
  8. package/dist/AI/components/agents/agent-editor.component.d.ts +6 -1
  9. package/dist/AI/components/agents/agent-editor.component.d.ts.map +1 -1
  10. package/dist/AI/components/agents/agent-editor.component.js +368 -366
  11. package/dist/AI/components/agents/agent-editor.component.js.map +1 -1
  12. package/dist/AI/components/agents/agent-filter-panel.component.js +83 -85
  13. package/dist/AI/components/agents/agent-filter-panel.component.js.map +1 -1
  14. package/dist/AI/components/charts/performance-heatmap.component.d.ts +66 -0
  15. package/dist/AI/components/charts/performance-heatmap.component.d.ts.map +1 -0
  16. package/dist/AI/components/charts/performance-heatmap.component.js +428 -0
  17. package/dist/AI/components/charts/performance-heatmap.component.js.map +1 -0
  18. package/dist/AI/components/charts/time-series-chart.component.d.ts +66 -0
  19. package/dist/AI/components/charts/time-series-chart.component.d.ts.map +1 -0
  20. package/dist/AI/components/charts/time-series-chart.component.js +547 -0
  21. package/dist/AI/components/charts/time-series-chart.component.js.map +1 -0
  22. package/dist/AI/components/execution-monitoring.component.d.ts +157 -5
  23. package/dist/AI/components/execution-monitoring.component.d.ts.map +1 -1
  24. package/dist/AI/components/execution-monitoring.component.js +2032 -20
  25. package/dist/AI/components/execution-monitoring.component.js.map +1 -1
  26. package/dist/AI/components/models/model-management.component.js +211 -237
  27. package/dist/AI/components/models/model-management.component.js.map +1 -1
  28. package/dist/AI/components/prompts/model-prompt-priority-matrix.component.js +208 -226
  29. package/dist/AI/components/prompts/model-prompt-priority-matrix.component.js.map +1 -1
  30. package/dist/AI/components/prompts/prompt-filter-panel.component.js +97 -99
  31. package/dist/AI/components/prompts/prompt-filter-panel.component.js.map +1 -1
  32. package/dist/AI/components/prompts/prompt-management.component.js +381 -424
  33. package/dist/AI/components/prompts/prompt-management.component.js.map +1 -1
  34. package/dist/AI/components/prompts/prompt-version-control.component.js +173 -191
  35. package/dist/AI/components/prompts/prompt-version-control.component.js.map +1 -1
  36. package/dist/AI/components/system/system-config-filter-panel.component.js +85 -87
  37. package/dist/AI/components/system/system-config-filter-panel.component.js.map +1 -1
  38. package/dist/AI/components/system/system-configuration.component.js +86 -99
  39. package/dist/AI/components/system/system-configuration.component.js.map +1 -1
  40. package/dist/AI/components/widgets/kpi-card.component.d.ts +25 -0
  41. package/dist/AI/components/widgets/kpi-card.component.d.ts.map +1 -0
  42. package/dist/AI/components/widgets/kpi-card.component.js +163 -0
  43. package/dist/AI/components/widgets/kpi-card.component.js.map +1 -0
  44. package/dist/AI/components/widgets/live-execution-widget.component.d.ts +25 -0
  45. package/dist/AI/components/widgets/live-execution-widget.component.d.ts.map +1 -0
  46. package/dist/AI/components/widgets/live-execution-widget.component.js +298 -0
  47. package/dist/AI/components/widgets/live-execution-widget.component.js.map +1 -0
  48. package/dist/AI/index.d.ts +7 -0
  49. package/dist/AI/index.d.ts.map +1 -0
  50. package/dist/AI/index.js +9 -0
  51. package/dist/AI/index.js.map +1 -0
  52. package/dist/AI/services/ai-instrumentation.service.d.ts +109 -0
  53. package/dist/AI/services/ai-instrumentation.service.d.ts.map +1 -0
  54. package/dist/AI/services/ai-instrumentation.service.js +490 -0
  55. package/dist/AI/services/ai-instrumentation.service.js.map +1 -0
  56. package/dist/Actions/actions-management-dashboard.component.js +40 -41
  57. package/dist/Actions/actions-management-dashboard.component.js.map +1 -1
  58. package/dist/Actions/components/actions-list-view.component.js +117 -134
  59. package/dist/Actions/components/actions-list-view.component.js.map +1 -1
  60. package/dist/Actions/components/actions-overview.component.js +274 -296
  61. package/dist/Actions/components/actions-overview.component.js.map +1 -1
  62. package/dist/Actions/components/categories-list-view.component.js +12 -14
  63. package/dist/Actions/components/categories-list-view.component.js.map +1 -1
  64. package/dist/Actions/components/code-management.component.js +12 -14
  65. package/dist/Actions/components/code-management.component.js.map +1 -1
  66. package/dist/Actions/components/entity-integration.component.js +12 -14
  67. package/dist/Actions/components/entity-integration.component.js.map +1 -1
  68. package/dist/Actions/components/execution-monitoring.component.js +238 -256
  69. package/dist/Actions/components/execution-monitoring.component.js.map +1 -1
  70. package/dist/Actions/components/executions-list-view.component.js +12 -14
  71. package/dist/Actions/components/executions-list-view.component.js.map +1 -1
  72. package/dist/Actions/components/scheduled-actions.component.js +12 -14
  73. package/dist/Actions/components/scheduled-actions.component.js.map +1 -1
  74. package/dist/Actions/components/security-permissions.component.js +12 -14
  75. package/dist/Actions/components/security-permissions.component.js.map +1 -1
  76. package/dist/EntityAdmin/components/entity-details.component.js +105 -107
  77. package/dist/EntityAdmin/components/entity-details.component.js.map +1 -1
  78. package/dist/EntityAdmin/components/entity-filter-panel.component.js +100 -102
  79. package/dist/EntityAdmin/components/entity-filter-panel.component.js.map +1 -1
  80. package/dist/EntityAdmin/components/erd-composite.component.js +84 -100
  81. package/dist/EntityAdmin/components/erd-composite.component.js.map +1 -1
  82. package/dist/EntityAdmin/components/erd-diagram.component.js +50 -50
  83. package/dist/EntityAdmin/components/erd-diagram.component.js.map +1 -1
  84. package/dist/EntityAdmin/entity-admin-dashboard.component.js +45 -49
  85. package/dist/EntityAdmin/entity-admin-dashboard.component.js.map +1 -1
  86. package/dist/generic/base-dashboard.js +28 -40
  87. package/dist/generic/base-dashboard.js.map +1 -1
  88. package/dist/module.d.ts +16 -12
  89. package/dist/module.d.ts.map +1 -1
  90. package/dist/module.js +36 -15
  91. package/dist/module.js.map +1 -1
  92. package/package.json +6 -6
@@ -0,0 +1,298 @@
1
+ import { Component, Input, Output, EventEmitter } from '@angular/core';
2
+ import * as i0 from "@angular/core";
3
+ const _forTrack0 = ($index, $item) => $item.id;
4
+ function LiveExecutionWidgetComponent_Conditional_7_For_2_Conditional_11_Template(rf, ctx) { if (rf & 1) {
5
+ i0.ɵɵelementStart(0, "span", 16);
6
+ i0.ɵɵtext(1);
7
+ i0.ɵɵelementEnd();
8
+ } if (rf & 2) {
9
+ const execution_r2 = i0.ɵɵnextContext().$implicit;
10
+ const ctx_r2 = i0.ɵɵnextContext(2);
11
+ i0.ɵɵadvance();
12
+ i0.ɵɵtextInterpolate1(" ", ctx_r2.formatCurrency(execution_r2.cost), " ");
13
+ } }
14
+ function LiveExecutionWidgetComponent_Conditional_7_For_2_Conditional_13_Template(rf, ctx) { if (rf & 1) {
15
+ i0.ɵɵelementStart(0, "div", 18);
16
+ i0.ɵɵnamespaceSVG();
17
+ i0.ɵɵelementStart(1, "svg", 20);
18
+ i0.ɵɵelement(2, "circle", 21)(3, "circle", 22);
19
+ i0.ɵɵelementEnd();
20
+ i0.ɵɵnamespaceHTML();
21
+ i0.ɵɵelementStart(4, "span", 23);
22
+ i0.ɵɵtext(5);
23
+ i0.ɵɵelementEnd()();
24
+ } if (rf & 2) {
25
+ const execution_r2 = i0.ɵɵnextContext().$implicit;
26
+ const ctx_r2 = i0.ɵɵnextContext(2);
27
+ i0.ɵɵadvance(3);
28
+ i0.ɵɵstyleProp("stroke-dasharray", ctx_r2.circumference)("stroke-dashoffset", ctx_r2.getProgressOffset(execution_r2.progress));
29
+ i0.ɵɵadvance(2);
30
+ i0.ɵɵtextInterpolate1("", execution_r2.progress.toFixed(0), "%");
31
+ } }
32
+ function LiveExecutionWidgetComponent_Conditional_7_For_2_Template(rf, ctx) { if (rf & 1) {
33
+ const _r1 = i0.ɵɵgetCurrentView();
34
+ i0.ɵɵelementStart(0, "div", 9);
35
+ i0.ɵɵlistener("click", function LiveExecutionWidgetComponent_Conditional_7_For_2_Template_div_click_0_listener() { const execution_r2 = i0.ɵɵrestoreView(_r1).$implicit; const ctx_r2 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r2.onExecutionClick(execution_r2)); });
36
+ i0.ɵɵelementStart(1, "div", 10);
37
+ i0.ɵɵelement(2, "i");
38
+ i0.ɵɵelementEnd();
39
+ i0.ɵɵelementStart(3, "div", 11)(4, "div", 12);
40
+ i0.ɵɵtext(5);
41
+ i0.ɵɵelementEnd();
42
+ i0.ɵɵelementStart(6, "div", 13)(7, "span", 14);
43
+ i0.ɵɵtext(8);
44
+ i0.ɵɵelementEnd();
45
+ i0.ɵɵelementStart(9, "span", 15);
46
+ i0.ɵɵtext(10);
47
+ i0.ɵɵelementEnd();
48
+ i0.ɵɵtemplate(11, LiveExecutionWidgetComponent_Conditional_7_For_2_Conditional_11_Template, 2, 1, "span", 16);
49
+ i0.ɵɵelementEnd()();
50
+ i0.ɵɵelementStart(12, "div", 17);
51
+ i0.ɵɵtemplate(13, LiveExecutionWidgetComponent_Conditional_7_For_2_Conditional_13_Template, 6, 5, "div", 18);
52
+ i0.ɵɵelementStart(14, "div", 19);
53
+ i0.ɵɵelement(15, "i");
54
+ i0.ɵɵelementEnd()()();
55
+ } if (rf & 2) {
56
+ const execution_r2 = ctx.$implicit;
57
+ const ctx_r2 = i0.ɵɵnextContext(2);
58
+ i0.ɵɵclassMap("execution-item--" + execution_r2.status);
59
+ i0.ɵɵadvance(2);
60
+ i0.ɵɵclassMap(ctx_r2.getExecutionIcon(execution_r2));
61
+ i0.ɵɵadvance(3);
62
+ i0.ɵɵtextInterpolate(execution_r2.name);
63
+ i0.ɵɵadvance(3);
64
+ i0.ɵɵtextInterpolate(execution_r2.type);
65
+ i0.ɵɵadvance(2);
66
+ i0.ɵɵtextInterpolate(ctx_r2.formatDuration(execution_r2.duration));
67
+ i0.ɵɵadvance();
68
+ i0.ɵɵconditional(execution_r2.cost ? 11 : -1);
69
+ i0.ɵɵadvance(2);
70
+ i0.ɵɵconditional(execution_r2.status === "running" && execution_r2.progress ? 13 : -1);
71
+ i0.ɵɵadvance();
72
+ i0.ɵɵclassMap("status-indicator--" + execution_r2.status);
73
+ i0.ɵɵadvance();
74
+ i0.ɵɵclassMap(ctx_r2.getStatusIcon(execution_r2.status));
75
+ } }
76
+ function LiveExecutionWidgetComponent_Conditional_7_Conditional_3_Template(rf, ctx) { if (rf & 1) {
77
+ const _r4 = i0.ɵɵgetCurrentView();
78
+ i0.ɵɵelementStart(0, "div", 8)(1, "button", 24);
79
+ i0.ɵɵlistener("click", function LiveExecutionWidgetComponent_Conditional_7_Conditional_3_Template_button_click_1_listener() { i0.ɵɵrestoreView(_r4); const ctx_r2 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r2.toggleShowAll()); });
80
+ i0.ɵɵtext(2);
81
+ i0.ɵɵelement(3, "i");
82
+ i0.ɵɵelementEnd()();
83
+ } if (rf & 2) {
84
+ const ctx_r2 = i0.ɵɵnextContext(2);
85
+ i0.ɵɵadvance(2);
86
+ i0.ɵɵtextInterpolate1(" ", ctx_r2.showAll ? "Show Less" : "Show All (" + ctx_r2.executions.length + ")", " ");
87
+ i0.ɵɵadvance();
88
+ i0.ɵɵclassMap(ctx_r2.showAll ? "fa-solid fa-chevron-up" : "fa-solid fa-chevron-down");
89
+ } }
90
+ function LiveExecutionWidgetComponent_Conditional_7_Template(rf, ctx) { if (rf & 1) {
91
+ i0.ɵɵelementStart(0, "div", 5);
92
+ i0.ɵɵrepeaterCreate(1, LiveExecutionWidgetComponent_Conditional_7_For_2_Template, 16, 13, "div", 7, _forTrack0);
93
+ i0.ɵɵtemplate(3, LiveExecutionWidgetComponent_Conditional_7_Conditional_3_Template, 4, 3, "div", 8);
94
+ i0.ɵɵelementEnd();
95
+ } if (rf & 2) {
96
+ const ctx_r2 = i0.ɵɵnextContext();
97
+ i0.ɵɵadvance();
98
+ i0.ɵɵrepeater(ctx_r2.executions.slice(0, ctx_r2.maxVisible));
99
+ i0.ɵɵadvance(2);
100
+ i0.ɵɵconditional(ctx_r2.executions.length > ctx_r2.maxVisible ? 3 : -1);
101
+ } }
102
+ function LiveExecutionWidgetComponent_Conditional_8_Template(rf, ctx) { if (rf & 1) {
103
+ i0.ɵɵelementStart(0, "div", 6);
104
+ i0.ɵɵelement(1, "i", 25);
105
+ i0.ɵɵelementStart(2, "p");
106
+ i0.ɵɵtext(3, "No recent executions");
107
+ i0.ɵɵelementEnd()();
108
+ } }
109
+ export class LiveExecutionWidgetComponent {
110
+ executions = [];
111
+ maxVisible = 8;
112
+ executionClick = new EventEmitter();
113
+ showAll = false;
114
+ circumference = 2 * Math.PI * 10; // r=10
115
+ ngOnInit() { }
116
+ ngOnDestroy() { }
117
+ trackByExecutionId(index, execution) {
118
+ return execution.id;
119
+ }
120
+ hasActiveExecutions() {
121
+ return this.executions.some(e => e.status === 'running');
122
+ }
123
+ getActiveCount() {
124
+ return this.executions.filter(e => e.status === 'running').length;
125
+ }
126
+ getExecutionIcon(execution) {
127
+ if (execution.type === 'agent') {
128
+ return 'fa-solid fa-robot';
129
+ }
130
+ else {
131
+ return 'fa-solid fa-comment-dots';
132
+ }
133
+ }
134
+ getStatusIcon(status) {
135
+ switch (status) {
136
+ case 'running':
137
+ return 'fa-solid fa-play';
138
+ case 'completed':
139
+ return 'fa-solid fa-check';
140
+ case 'failed':
141
+ return 'fa-solid fa-times';
142
+ default:
143
+ return 'fa-solid fa-question';
144
+ }
145
+ }
146
+ formatDuration(duration) {
147
+ if (!duration)
148
+ return '0s';
149
+ const seconds = Math.floor(duration / 1000);
150
+ const minutes = Math.floor(seconds / 60);
151
+ const hours = Math.floor(minutes / 60);
152
+ if (hours > 0) {
153
+ return `${hours}h ${minutes % 60}m`;
154
+ }
155
+ else if (minutes > 0) {
156
+ return `${minutes}m ${seconds % 60}s`;
157
+ }
158
+ else {
159
+ return `${seconds}s`;
160
+ }
161
+ }
162
+ getProgressOffset(progress) {
163
+ return this.circumference - (progress / 100) * this.circumference;
164
+ }
165
+ toggleShowAll() {
166
+ this.showAll = !this.showAll;
167
+ this.maxVisible = this.showAll ? this.executions.length : 8;
168
+ }
169
+ onExecutionClick(execution) {
170
+ this.executionClick.emit(execution);
171
+ }
172
+ formatCurrency(amount) {
173
+ return `$${amount.toFixed(4)}`;
174
+ }
175
+ static ɵfac = function LiveExecutionWidgetComponent_Factory(t) { return new (t || LiveExecutionWidgetComponent)(); };
176
+ static ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: LiveExecutionWidgetComponent, selectors: [["app-live-execution-widget"]], inputs: { executions: "executions", maxVisible: "maxVisible" }, outputs: { executionClick: "executionClick" }, decls: 9, vars: 4, consts: [[1, "live-execution-widget"], [1, "widget-header"], [1, "widget-title"], [1, "fa-solid", "fa-bolt"], [1, "active-count"], [1, "execution-list"], [1, "no-executions"], [1, "execution-item", 3, "class"], [1, "show-more"], [1, "execution-item", 3, "click"], [1, "execution-icon"], [1, "execution-info"], [1, "execution-name"], [1, "execution-meta"], [1, "execution-type"], [1, "execution-duration"], [1, "execution-cost"], [1, "execution-status"], [1, "progress-ring"], [1, "status-indicator"], ["width", "24", "height", "24"], ["cx", "12", "cy", "12", "r", "10", "fill", "none", "stroke", "#e0e0e0", "stroke-width", "2"], ["cx", "12", "cy", "12", "r", "10", "fill", "none", "stroke", "#2196f3", "stroke-width", "2", "stroke-linecap", "round", 1, "progress-circle"], [1, "progress-text"], [1, "show-more-btn", 3, "click"], [1, "fa-solid", "fa-circle-check"]], template: function LiveExecutionWidgetComponent_Template(rf, ctx) { if (rf & 1) {
177
+ i0.ɵɵelementStart(0, "div", 0)(1, "div", 1)(2, "h3", 2);
178
+ i0.ɵɵelement(3, "i", 3);
179
+ i0.ɵɵtext(4, " Live Executions ");
180
+ i0.ɵɵelementEnd();
181
+ i0.ɵɵelementStart(5, "div", 4);
182
+ i0.ɵɵtext(6);
183
+ i0.ɵɵelementEnd()();
184
+ i0.ɵɵtemplate(7, LiveExecutionWidgetComponent_Conditional_7_Template, 4, 1, "div", 5)(8, LiveExecutionWidgetComponent_Conditional_8_Template, 4, 0, "div", 6);
185
+ i0.ɵɵelementEnd();
186
+ } if (rf & 2) {
187
+ i0.ɵɵadvance(5);
188
+ i0.ɵɵclassProp("pulsing", ctx.hasActiveExecutions());
189
+ i0.ɵɵadvance();
190
+ i0.ɵɵtextInterpolate1(" ", ctx.getActiveCount(), " active ");
191
+ i0.ɵɵadvance();
192
+ i0.ɵɵconditional(ctx.executions.length > 0 ? 7 : 8);
193
+ } }, styles: [".live-execution-widget[_ngcontent-%COMP%] {\n background: white;\n border-radius: 8px;\n box-shadow: 0 2px 8px rgba(0, 0, 0, 0.1);\n height: 400px;\n display: flex;\n flex-direction: column;\n }\n\n .widget-header[_ngcontent-%COMP%] {\n padding: 20px 20px 16px;\n border-bottom: 1px solid #f0f0f0;\n display: flex;\n justify-content: space-between;\n align-items: center;\n }\n\n .widget-title[_ngcontent-%COMP%] {\n margin: 0;\n font-size: 16px;\n font-weight: 600;\n color: #333;\n display: flex;\n align-items: center;\n gap: 8px;\n }\n\n .widget-title[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n color: #2196f3;\n }\n\n .active-count[_ngcontent-%COMP%] {\n background: #e3f2fd;\n color: #2196f3;\n padding: 4px 12px;\n border-radius: 12px;\n font-size: 12px;\n font-weight: 600;\n transition: all 0.3s ease;\n }\n\n .active-count.pulsing[_ngcontent-%COMP%] {\n animation: _ngcontent-%COMP%_pulse 2s infinite;\n }\n\n @keyframes _ngcontent-%COMP%_pulse {\n 0% { opacity: 1; }\n 50% { opacity: 0.7; }\n 100% { opacity: 1; }\n }\n\n .execution-list[_ngcontent-%COMP%] {\n flex: 1;\n overflow-y: auto;\n padding: 8px 0;\n }\n\n .execution-item[_ngcontent-%COMP%] {\n padding: 12px 20px;\n display: flex;\n align-items: center;\n gap: 12px;\n cursor: pointer;\n transition: all 0.2s ease;\n border-left: 3px solid transparent;\n }\n\n .execution-item[_ngcontent-%COMP%]:hover {\n background: #f8f9fa;\n }\n\n .execution-item--running[_ngcontent-%COMP%] {\n border-left-color: #2196f3;\n background: rgba(33, 150, 243, 0.02);\n }\n\n .execution-item--completed[_ngcontent-%COMP%] {\n border-left-color: #4caf50;\n }\n\n .execution-item--failed[_ngcontent-%COMP%] {\n border-left-color: #f44336;\n background: rgba(244, 67, 54, 0.02);\n }\n\n .execution-icon[_ngcontent-%COMP%] {\n width: 32px;\n height: 32px;\n border-radius: 6px;\n display: flex;\n align-items: center;\n justify-content: center;\n font-size: 14px;\n flex-shrink: 0;\n }\n\n .execution-item--running[_ngcontent-%COMP%] .execution-icon[_ngcontent-%COMP%] {\n background: rgba(33, 150, 243, 0.1);\n color: #2196f3;\n }\n\n .execution-item--completed[_ngcontent-%COMP%] .execution-icon[_ngcontent-%COMP%] {\n background: rgba(76, 175, 80, 0.1);\n color: #4caf50;\n }\n\n .execution-item--failed[_ngcontent-%COMP%] .execution-icon[_ngcontent-%COMP%] {\n background: rgba(244, 67, 54, 0.1);\n color: #f44336;\n }\n\n .execution-info[_ngcontent-%COMP%] {\n flex: 1;\n min-width: 0;\n }\n\n .execution-name[_ngcontent-%COMP%] {\n font-weight: 500;\n color: #333;\n font-size: 14px;\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n margin-bottom: 4px;\n }\n\n .execution-meta[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 8px;\n font-size: 11px;\n color: #666;\n }\n\n .execution-type[_ngcontent-%COMP%] {\n background: #f0f0f0;\n padding: 2px 6px;\n border-radius: 3px;\n font-weight: 500;\n }\n\n .execution-duration[_ngcontent-%COMP%] {\n color: #999;\n }\n\n .execution-cost[_ngcontent-%COMP%] {\n color: #ff9800;\n font-weight: 500;\n }\n\n .execution-status[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 8px;\n flex-shrink: 0;\n }\n\n .progress-ring[_ngcontent-%COMP%] {\n position: relative;\n width: 24px;\n height: 24px;\n }\n\n .progress-circle[_ngcontent-%COMP%] {\n transform: rotate(-90deg);\n transform-origin: center;\n transition: stroke-dashoffset 0.3s ease;\n }\n\n .progress-text[_ngcontent-%COMP%] {\n position: absolute;\n top: 50%;\n left: 50%;\n transform: translate(-50%, -50%);\n font-size: 8px;\n font-weight: 600;\n color: #2196f3;\n }\n\n .status-indicator[_ngcontent-%COMP%] {\n width: 20px;\n height: 20px;\n border-radius: 50%;\n display: flex;\n align-items: center;\n justify-content: center;\n font-size: 10px;\n }\n\n .status-indicator--running[_ngcontent-%COMP%] {\n background: #2196f3;\n color: white;\n animation: _ngcontent-%COMP%_pulse 2s infinite;\n }\n\n .status-indicator--completed[_ngcontent-%COMP%] {\n background: #4caf50;\n color: white;\n }\n\n .status-indicator--failed[_ngcontent-%COMP%] {\n background: #f44336;\n color: white;\n }\n\n .show-more[_ngcontent-%COMP%] {\n padding: 12px 20px;\n border-top: 1px solid #f0f0f0;\n }\n\n .show-more-btn[_ngcontent-%COMP%] {\n width: 100%;\n background: none;\n border: none;\n color: #2196f3;\n font-size: 12px;\n font-weight: 500;\n cursor: pointer;\n display: flex;\n align-items: center;\n justify-content: center;\n gap: 4px;\n padding: 8px;\n border-radius: 4px;\n transition: background 0.2s ease;\n }\n\n .show-more-btn[_ngcontent-%COMP%]:hover {\n background: rgba(33, 150, 243, 0.1);\n }\n\n .no-executions[_ngcontent-%COMP%] {\n flex: 1;\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: center;\n color: #999;\n gap: 12px;\n }\n\n .no-executions[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n font-size: 32px;\n color: #ddd;\n }\n\n .no-executions[_ngcontent-%COMP%] p[_ngcontent-%COMP%] {\n margin: 0;\n font-size: 14px;\n }\n\n \n\n .execution-list[_ngcontent-%COMP%]::-webkit-scrollbar {\n width: 4px;\n }\n\n .execution-list[_ngcontent-%COMP%]::-webkit-scrollbar-track {\n background: #f1f1f1;\n }\n\n .execution-list[_ngcontent-%COMP%]::-webkit-scrollbar-thumb {\n background: #ccc;\n border-radius: 2px;\n }\n\n .execution-list[_ngcontent-%COMP%]::-webkit-scrollbar-thumb:hover {\n background: #999;\n }\n\n @media (max-width: 768px) {\n .execution-item[_ngcontent-%COMP%] {\n padding: 10px 16px;\n }\n \n .execution-meta[_ngcontent-%COMP%] {\n flex-direction: column;\n align-items: flex-start;\n gap: 4px;\n }\n }"] });
194
+ }
195
+ (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(LiveExecutionWidgetComponent, [{
196
+ type: Component,
197
+ args: [{ selector: 'app-live-execution-widget', template: `
198
+ <div class="live-execution-widget">
199
+ <div class="widget-header">
200
+ <h3 class="widget-title">
201
+ <i class="fa-solid fa-bolt"></i>
202
+ Live Executions
203
+ </h3>
204
+ <div class="active-count" [class.pulsing]="hasActiveExecutions()">
205
+ {{ getActiveCount() }} active
206
+ </div>
207
+ </div>
208
+
209
+ @if (executions.length > 0) {
210
+ <div class="execution-list">
211
+ @for (execution of executions.slice(0, maxVisible); track execution.id) {
212
+ <div
213
+ class="execution-item"
214
+ [class]="'execution-item--' + execution.status"
215
+ (click)="onExecutionClick(execution)"
216
+ >
217
+ <div class="execution-icon">
218
+ <i [class]="getExecutionIcon(execution)"></i>
219
+ </div>
220
+
221
+ <div class="execution-info">
222
+ <div class="execution-name">{{ execution.name }}</div>
223
+ <div class="execution-meta">
224
+ <span class="execution-type">{{ execution.type }}</span>
225
+ <span class="execution-duration">{{ formatDuration(execution.duration) }}</span>
226
+ @if (execution.cost) {
227
+ <span class="execution-cost">
228
+ {{ formatCurrency(execution.cost) }}
229
+ </span>
230
+ }
231
+ </div>
232
+ </div>
233
+
234
+ <div class="execution-status">
235
+ @if (execution.status === 'running' && execution.progress) {
236
+ <div class="progress-ring">
237
+ <svg width="24" height="24">
238
+ <circle
239
+ cx="12"
240
+ cy="12"
241
+ r="10"
242
+ fill="none"
243
+ stroke="#e0e0e0"
244
+ stroke-width="2"
245
+ />
246
+ <circle
247
+ cx="12"
248
+ cy="12"
249
+ r="10"
250
+ fill="none"
251
+ stroke="#2196f3"
252
+ stroke-width="2"
253
+ stroke-linecap="round"
254
+ [style.stroke-dasharray]="circumference"
255
+ [style.stroke-dashoffset]="getProgressOffset(execution.progress)"
256
+ class="progress-circle"
257
+ />
258
+ </svg>
259
+ <span class="progress-text">{{ execution.progress.toFixed(0) }}%</span>
260
+ </div>
261
+ }
262
+
263
+ <div class="status-indicator" [class]="'status-indicator--' + execution.status">
264
+ <i [class]="getStatusIcon(execution.status)"></i>
265
+ </div>
266
+ </div>
267
+ </div>
268
+ }
269
+
270
+ @if (executions.length > maxVisible) {
271
+ <div class="show-more">
272
+ <button
273
+ class="show-more-btn"
274
+ (click)="toggleShowAll()"
275
+ >
276
+ {{ showAll ? 'Show Less' : 'Show All (' + executions.length + ')' }}
277
+ <i [class]="showAll ? 'fa-solid fa-chevron-up' : 'fa-solid fa-chevron-down'"></i>
278
+ </button>
279
+ </div>
280
+ }
281
+ </div>
282
+ } @else {
283
+ <div class="no-executions">
284
+ <i class="fa-solid fa-circle-check"></i>
285
+ <p>No recent executions</p>
286
+ </div>
287
+ }
288
+ </div>
289
+ `, styles: ["\n .live-execution-widget {\n background: white;\n border-radius: 8px;\n box-shadow: 0 2px 8px rgba(0, 0, 0, 0.1);\n height: 400px;\n display: flex;\n flex-direction: column;\n }\n\n .widget-header {\n padding: 20px 20px 16px;\n border-bottom: 1px solid #f0f0f0;\n display: flex;\n justify-content: space-between;\n align-items: center;\n }\n\n .widget-title {\n margin: 0;\n font-size: 16px;\n font-weight: 600;\n color: #333;\n display: flex;\n align-items: center;\n gap: 8px;\n }\n\n .widget-title i {\n color: #2196f3;\n }\n\n .active-count {\n background: #e3f2fd;\n color: #2196f3;\n padding: 4px 12px;\n border-radius: 12px;\n font-size: 12px;\n font-weight: 600;\n transition: all 0.3s ease;\n }\n\n .active-count.pulsing {\n animation: pulse 2s infinite;\n }\n\n @keyframes pulse {\n 0% { opacity: 1; }\n 50% { opacity: 0.7; }\n 100% { opacity: 1; }\n }\n\n .execution-list {\n flex: 1;\n overflow-y: auto;\n padding: 8px 0;\n }\n\n .execution-item {\n padding: 12px 20px;\n display: flex;\n align-items: center;\n gap: 12px;\n cursor: pointer;\n transition: all 0.2s ease;\n border-left: 3px solid transparent;\n }\n\n .execution-item:hover {\n background: #f8f9fa;\n }\n\n .execution-item--running {\n border-left-color: #2196f3;\n background: rgba(33, 150, 243, 0.02);\n }\n\n .execution-item--completed {\n border-left-color: #4caf50;\n }\n\n .execution-item--failed {\n border-left-color: #f44336;\n background: rgba(244, 67, 54, 0.02);\n }\n\n .execution-icon {\n width: 32px;\n height: 32px;\n border-radius: 6px;\n display: flex;\n align-items: center;\n justify-content: center;\n font-size: 14px;\n flex-shrink: 0;\n }\n\n .execution-item--running .execution-icon {\n background: rgba(33, 150, 243, 0.1);\n color: #2196f3;\n }\n\n .execution-item--completed .execution-icon {\n background: rgba(76, 175, 80, 0.1);\n color: #4caf50;\n }\n\n .execution-item--failed .execution-icon {\n background: rgba(244, 67, 54, 0.1);\n color: #f44336;\n }\n\n .execution-info {\n flex: 1;\n min-width: 0;\n }\n\n .execution-name {\n font-weight: 500;\n color: #333;\n font-size: 14px;\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n margin-bottom: 4px;\n }\n\n .execution-meta {\n display: flex;\n align-items: center;\n gap: 8px;\n font-size: 11px;\n color: #666;\n }\n\n .execution-type {\n background: #f0f0f0;\n padding: 2px 6px;\n border-radius: 3px;\n font-weight: 500;\n }\n\n .execution-duration {\n color: #999;\n }\n\n .execution-cost {\n color: #ff9800;\n font-weight: 500;\n }\n\n .execution-status {\n display: flex;\n align-items: center;\n gap: 8px;\n flex-shrink: 0;\n }\n\n .progress-ring {\n position: relative;\n width: 24px;\n height: 24px;\n }\n\n .progress-circle {\n transform: rotate(-90deg);\n transform-origin: center;\n transition: stroke-dashoffset 0.3s ease;\n }\n\n .progress-text {\n position: absolute;\n top: 50%;\n left: 50%;\n transform: translate(-50%, -50%);\n font-size: 8px;\n font-weight: 600;\n color: #2196f3;\n }\n\n .status-indicator {\n width: 20px;\n height: 20px;\n border-radius: 50%;\n display: flex;\n align-items: center;\n justify-content: center;\n font-size: 10px;\n }\n\n .status-indicator--running {\n background: #2196f3;\n color: white;\n animation: pulse 2s infinite;\n }\n\n .status-indicator--completed {\n background: #4caf50;\n color: white;\n }\n\n .status-indicator--failed {\n background: #f44336;\n color: white;\n }\n\n .show-more {\n padding: 12px 20px;\n border-top: 1px solid #f0f0f0;\n }\n\n .show-more-btn {\n width: 100%;\n background: none;\n border: none;\n color: #2196f3;\n font-size: 12px;\n font-weight: 500;\n cursor: pointer;\n display: flex;\n align-items: center;\n justify-content: center;\n gap: 4px;\n padding: 8px;\n border-radius: 4px;\n transition: background 0.2s ease;\n }\n\n .show-more-btn:hover {\n background: rgba(33, 150, 243, 0.1);\n }\n\n .no-executions {\n flex: 1;\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: center;\n color: #999;\n gap: 12px;\n }\n\n .no-executions i {\n font-size: 32px;\n color: #ddd;\n }\n\n .no-executions p {\n margin: 0;\n font-size: 14px;\n }\n\n /* Custom scrollbar */\n .execution-list::-webkit-scrollbar {\n width: 4px;\n }\n\n .execution-list::-webkit-scrollbar-track {\n background: #f1f1f1;\n }\n\n .execution-list::-webkit-scrollbar-thumb {\n background: #ccc;\n border-radius: 2px;\n }\n\n .execution-list::-webkit-scrollbar-thumb:hover {\n background: #999;\n }\n\n @media (max-width: 768px) {\n .execution-item {\n padding: 10px 16px;\n }\n \n .execution-meta {\n flex-direction: column;\n align-items: flex-start;\n gap: 4px;\n }\n }\n "] }]
290
+ }], null, { executions: [{
291
+ type: Input
292
+ }], maxVisible: [{
293
+ type: Input
294
+ }], executionClick: [{
295
+ type: Output
296
+ }] }); })();
297
+ (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassDebugInfo(LiveExecutionWidgetComponent, { className: "LiveExecutionWidgetComponent", filePath: "src/AI/components/widgets/live-execution-widget.component.ts", lineNumber: 382 }); })();
298
+ //# sourceMappingURL=live-execution-widget.component.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"live-execution-widget.component.js","sourceRoot":"","sources":["../../../../src/AI/components/widgets/live-execution-widget.component.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,7 @@
1
+ export * from './services/ai-instrumentation.service';
2
+ export * from './components/execution-monitoring.component';
3
+ export * from './components/widgets/kpi-card.component';
4
+ export * from './components/widgets/live-execution-widget.component';
5
+ export * from './components/charts/time-series-chart.component';
6
+ export * from './components/charts/performance-heatmap.component';
7
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/AI/index.ts"],"names":[],"mappings":"AACA,cAAc,uCAAuC,CAAC;AAGtD,cAAc,6CAA6C,CAAC;AAC5D,cAAc,yCAAyC,CAAC;AACxD,cAAc,sDAAsD,CAAC;AACrE,cAAc,iDAAiD,CAAC;AAChE,cAAc,mDAAmD,CAAC"}
@@ -0,0 +1,9 @@
1
+ // Services
2
+ export * from './services/ai-instrumentation.service';
3
+ // Components
4
+ export * from './components/execution-monitoring.component';
5
+ export * from './components/widgets/kpi-card.component';
6
+ export * from './components/widgets/live-execution-widget.component';
7
+ export * from './components/charts/time-series-chart.component';
8
+ export * from './components/charts/performance-heatmap.component';
9
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/AI/index.ts"],"names":[],"mappings":"AAAA,WAAW;AACX,cAAc,uCAAuC,CAAC;AAEtD,aAAa;AACb,cAAc,6CAA6C,CAAC;AAC5D,cAAc,yCAAyC,CAAC;AACxD,cAAc,sDAAsD,CAAC;AACrE,cAAc,iDAAiD,CAAC;AAChE,cAAc,mDAAmD,CAAC"}
@@ -0,0 +1,109 @@
1
+ import { Observable } from 'rxjs';
2
+ import * as i0 from "@angular/core";
3
+ export interface DashboardKPIs {
4
+ totalExecutions: number;
5
+ activeExecutions: number;
6
+ totalCost: number;
7
+ costCurrency: string;
8
+ avgExecutionTime: number;
9
+ successRate: number;
10
+ totalTokens: number;
11
+ costPerToken: number;
12
+ topModel: string;
13
+ topAgent: string;
14
+ errorRate: number;
15
+ dailyCostBurn: number;
16
+ }
17
+ export interface TrendData {
18
+ timestamp: Date;
19
+ executions: number;
20
+ cost: number;
21
+ tokens: number;
22
+ avgTime: number;
23
+ errors: number;
24
+ }
25
+ export interface LiveExecution {
26
+ id: string;
27
+ type: 'prompt' | 'agent';
28
+ name: string;
29
+ status: 'running' | 'completed' | 'failed';
30
+ startTime: Date;
31
+ duration?: number;
32
+ cost?: number;
33
+ tokens?: number;
34
+ progress?: number;
35
+ }
36
+ export interface ExecutionDetails {
37
+ id: string;
38
+ type: 'prompt' | 'agent';
39
+ name: string;
40
+ status: string;
41
+ startTime: Date;
42
+ endTime?: Date;
43
+ cost: number;
44
+ tokens: number;
45
+ success: boolean;
46
+ errorMessage?: string;
47
+ parentId?: string;
48
+ children: ExecutionDetails[];
49
+ model?: string;
50
+ vendor?: string;
51
+ }
52
+ export interface ChartData {
53
+ executionTrends: TrendData[];
54
+ costByModel: {
55
+ model: string;
56
+ cost: number;
57
+ tokens: number;
58
+ }[];
59
+ performanceMatrix: {
60
+ agent: string;
61
+ model: string;
62
+ avgTime: number;
63
+ successRate: number;
64
+ }[];
65
+ tokenEfficiency: {
66
+ inputTokens: number;
67
+ outputTokens: number;
68
+ cost: number;
69
+ model: string;
70
+ }[];
71
+ }
72
+ export declare class AIInstrumentationService {
73
+ private readonly _refreshInterval$;
74
+ private readonly _dateRange$;
75
+ constructor();
76
+ readonly kpis$: Observable<DashboardKPIs>;
77
+ readonly trends$: Observable<TrendData[]>;
78
+ readonly liveExecutions$: Observable<LiveExecution[]>;
79
+ readonly chartData$: Observable<ChartData>;
80
+ setRefreshInterval(intervalMs: number): void;
81
+ setDateRange(start: Date, end: Date): void;
82
+ private createRefreshableStream;
83
+ private loadKPIs;
84
+ private loadTrends;
85
+ private loadLiveExecutions;
86
+ private loadChartData;
87
+ private countActiveExecutions;
88
+ private sumCosts;
89
+ private sumTokens;
90
+ private calculateAverageExecutionTime;
91
+ private calculateSuccessRate;
92
+ private countErrors;
93
+ private calculateDailyCostBurn;
94
+ private createHourlyBuckets;
95
+ private getPromptName;
96
+ private getAgentName;
97
+ private getTopModel;
98
+ private getTopAgent;
99
+ private analyzeCostByModel;
100
+ private analyzePerformanceMatrix;
101
+ private analyzeTokenEfficiency;
102
+ private getModelName;
103
+ getExecutionDetails(executionId: string, type: 'prompt' | 'agent'): Promise<ExecutionDetails | null>;
104
+ private getPromptExecutionDetails;
105
+ private getAgentExecutionDetails;
106
+ static ɵfac: i0.ɵɵFactoryDeclaration<AIInstrumentationService, never>;
107
+ static ɵprov: i0.ɵɵInjectableDeclaration<AIInstrumentationService>;
108
+ }
109
+ //# sourceMappingURL=ai-instrumentation.service.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ai-instrumentation.service.d.ts","sourceRoot":"","sources":["../../../src/AI/services/ai-instrumentation.service.ts"],"names":[],"mappings":"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"}