@memberjunction/ng-core-entity-forms 2.72.0 → 2.74.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 (57) hide show
  1. package/dist/lib/custom/AIAgents/ai-agent-form.component.d.ts.map +1 -1
  2. package/dist/lib/custom/AIAgents/ai-agent-form.component.js +592 -580
  3. package/dist/lib/custom/AIAgents/ai-agent-form.component.js.map +1 -1
  4. package/dist/lib/custom/Queries/query-category-dialog.component.d.ts +33 -0
  5. package/dist/lib/custom/Queries/query-category-dialog.component.d.ts.map +1 -0
  6. package/dist/lib/custom/Queries/query-category-dialog.component.js +241 -0
  7. package/dist/lib/custom/Queries/query-category-dialog.component.js.map +1 -0
  8. package/dist/lib/custom/Queries/query-form.component.d.ts +135 -0
  9. package/dist/lib/custom/Queries/query-form.component.d.ts.map +1 -0
  10. package/dist/lib/custom/Queries/query-form.component.js +1563 -0
  11. package/dist/lib/custom/Queries/query-form.component.js.map +1 -0
  12. package/dist/lib/custom/Queries/query-run-dialog.component.d.ts +66 -0
  13. package/dist/lib/custom/Queries/query-run-dialog.component.d.ts.map +1 -0
  14. package/dist/lib/custom/Queries/query-run-dialog.component.js +788 -0
  15. package/dist/lib/custom/Queries/query-run-dialog.component.js.map +1 -0
  16. package/dist/lib/custom/ai-agent-run/ai-agent-run-analytics.component.d.ts +162 -0
  17. package/dist/lib/custom/ai-agent-run/ai-agent-run-analytics.component.d.ts.map +1 -0
  18. package/dist/lib/custom/ai-agent-run/ai-agent-run-analytics.component.js +2091 -0
  19. package/dist/lib/custom/ai-agent-run/ai-agent-run-analytics.component.js.map +1 -0
  20. package/dist/lib/custom/ai-agent-run/ai-agent-run-step-node.component.js +1 -1
  21. package/dist/lib/custom/ai-agent-run/ai-agent-run-step-node.component.js.map +1 -1
  22. package/dist/lib/custom/ai-agent-run/ai-agent-run-timeline.component.d.ts +2 -8
  23. package/dist/lib/custom/ai-agent-run/ai-agent-run-timeline.component.d.ts.map +1 -1
  24. package/dist/lib/custom/ai-agent-run/ai-agent-run-timeline.component.js +122 -128
  25. package/dist/lib/custom/ai-agent-run/ai-agent-run-timeline.component.js.map +1 -1
  26. package/dist/lib/custom/ai-agent-run/ai-agent-run.component.d.ts +6 -1
  27. package/dist/lib/custom/ai-agent-run/ai-agent-run.component.d.ts.map +1 -1
  28. package/dist/lib/custom/ai-agent-run/ai-agent-run.component.js +218 -156
  29. package/dist/lib/custom/ai-agent-run/ai-agent-run.component.js.map +1 -1
  30. package/dist/lib/custom/custom-forms.module.d.ts +26 -22
  31. package/dist/lib/custom/custom-forms.module.d.ts.map +1 -1
  32. package/dist/lib/custom/custom-forms.module.js +23 -3
  33. package/dist/lib/custom/custom-forms.module.js.map +1 -1
  34. package/dist/lib/generated/Entities/Query/query.form.component.js +14 -4
  35. package/dist/lib/generated/Entities/Query/query.form.component.js.map +1 -1
  36. package/dist/lib/generated/Entities/Query/sections/details.component.d.ts.map +1 -1
  37. package/dist/lib/generated/Entities/Query/sections/details.component.js +13 -4
  38. package/dist/lib/generated/Entities/Query/sections/details.component.js.map +1 -1
  39. package/dist/lib/generated/Entities/QueryEntity/sections/details.component.d.ts.map +1 -1
  40. package/dist/lib/generated/Entities/QueryEntity/sections/details.component.js +22 -4
  41. package/dist/lib/generated/Entities/QueryEntity/sections/details.component.js.map +1 -1
  42. package/dist/lib/generated/Entities/QueryField/sections/details.component.d.ts.map +1 -1
  43. package/dist/lib/generated/Entities/QueryField/sections/details.component.js +22 -4
  44. package/dist/lib/generated/Entities/QueryField/sections/details.component.js.map +1 -1
  45. package/dist/lib/generated/Entities/QueryParameter/queryparameter.form.component.d.ts +10 -0
  46. package/dist/lib/generated/Entities/QueryParameter/queryparameter.form.component.d.ts.map +1 -0
  47. package/dist/lib/generated/Entities/QueryParameter/queryparameter.form.component.js +59 -0
  48. package/dist/lib/generated/Entities/QueryParameter/queryparameter.form.component.js.map +1 -0
  49. package/dist/lib/generated/Entities/QueryParameter/sections/details.component.d.ts +11 -0
  50. package/dist/lib/generated/Entities/QueryParameter/sections/details.component.d.ts.map +1 -0
  51. package/dist/lib/generated/Entities/QueryParameter/sections/details.component.js +172 -0
  52. package/dist/lib/generated/Entities/QueryParameter/sections/details.component.js.map +1 -0
  53. package/dist/lib/generated/generated-forms.module.d.ts +265 -263
  54. package/dist/lib/generated/generated-forms.module.d.ts.map +1 -1
  55. package/dist/lib/generated/generated-forms.module.js +74 -66
  56. package/dist/lib/generated/generated-forms.module.js.map +1 -1
  57. package/package.json +18 -16
@@ -4,15 +4,17 @@ var __decorate = (this && this.__decorate) || function (decorators, target, key,
4
4
  else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
5
5
  return c > 3 && r && Object.defineProperty(target, key, r), r;
6
6
  };
7
- import { Component } from '@angular/core';
7
+ import { Component, ViewChild } from '@angular/core';
8
8
  import { Subject } from 'rxjs';
9
9
  import { CompositeKey, Metadata } from '@memberjunction/core';
10
10
  import { AIAgentRunStepEntity } from '@memberjunction/core-entities';
11
11
  import { BaseFormComponent } from '@memberjunction/ng-base-forms';
12
12
  import { RegisterClass } from '@memberjunction/global';
13
13
  import { SharedService } from '@memberjunction/ng-shared';
14
+ import { AIAgentRunTimelineComponent } from './ai-agent-run-timeline.component';
14
15
  import { AIAgentRunFormComponent } from '../../generated/Entities/AIAgentRun/aiagentrun.form.component';
15
16
  import { ParseJSONRecursive } from '@memberjunction/global';
17
+ import { AIAgentRunAnalyticsComponent } from './ai-agent-run-analytics.component';
16
18
  import * as i0 from "@angular/core";
17
19
  import * as i1 from "@memberjunction/ng-shared";
18
20
  import * as i2 from "@angular/router";
@@ -22,8 +24,9 @@ import * as i5 from "@progress/kendo-angular-layout";
22
24
  import * as i6 from "@memberjunction/ng-code-editor";
23
25
  import * as i7 from "@memberjunction/ng-deep-diff";
24
26
  import * as i8 from "./ai-agent-run-timeline.component";
27
+ import * as i9 from "./ai-agent-run-analytics.component";
25
28
  function AIAgentRunFormComponentExtended_span_11_Template(rf, ctx) { if (rf & 1) {
26
- i0.ɵɵelementStart(0, "span", 30);
29
+ i0.ɵɵelementStart(0, "span", 32);
27
30
  i0.ɵɵtext(1);
28
31
  i0.ɵɵelementEnd();
29
32
  } if (rf & 2) {
@@ -33,18 +36,18 @@ function AIAgentRunFormComponentExtended_span_11_Template(rf, ctx) { if (rf & 1)
33
36
  } }
34
37
  function AIAgentRunFormComponentExtended_span_14_Template(rf, ctx) { if (rf & 1) {
35
38
  const _r2 = i0.ɵɵgetCurrentView();
36
- i0.ɵɵelementStart(0, "span", 31);
37
- i0.ɵɵelement(1, "i", 32);
38
- i0.ɵɵelementStart(2, "a", 33);
39
+ i0.ɵɵelementStart(0, "span", 33);
40
+ i0.ɵɵelement(1, "i", 34);
41
+ i0.ɵɵelementStart(2, "a", 35);
39
42
  i0.ɵɵlistener("click", function AIAgentRunFormComponentExtended_span_14_Template_a_click_2_listener() { i0.ɵɵrestoreView(_r2); const ctx_r0 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r0.navigateToParentRun()); });
40
43
  i0.ɵɵtext(3, "Parent Run");
41
44
  i0.ɵɵelementEnd()();
42
45
  } }
43
46
  function AIAgentRunFormComponentExtended_div_29_Template(rf, ctx) { if (rf & 1) {
44
- i0.ɵɵelementStart(0, "div", 19)(1, "span", 20);
47
+ i0.ɵɵelementStart(0, "div", 20)(1, "span", 21);
45
48
  i0.ɵɵtext(2, "Completed");
46
49
  i0.ɵɵelementEnd();
47
- i0.ɵɵelementStart(3, "span", 21);
50
+ i0.ɵɵelementStart(3, "span", 22);
48
51
  i0.ɵɵtext(4);
49
52
  i0.ɵɵpipe(5, "date");
50
53
  i0.ɵɵelementEnd()();
@@ -54,10 +57,10 @@ function AIAgentRunFormComponentExtended_div_29_Template(rf, ctx) { if (rf & 1)
54
57
  i0.ɵɵtextInterpolate(i0.ɵɵpipeBind2(5, 1, ctx_r0.record.CompletedAt, "medium"));
55
58
  } }
56
59
  function AIAgentRunFormComponentExtended_div_30_Template(rf, ctx) { if (rf & 1) {
57
- i0.ɵɵelementStart(0, "div", 19)(1, "span", 20);
60
+ i0.ɵɵelementStart(0, "div", 20)(1, "span", 21);
58
61
  i0.ɵɵtext(2, "Duration");
59
62
  i0.ɵɵelementEnd();
60
- i0.ɵɵelementStart(3, "span", 21);
63
+ i0.ɵɵelementStart(3, "span", 22);
61
64
  i0.ɵɵtext(4);
62
65
  i0.ɵɵelementEnd()();
63
66
  } if (rf & 2) {
@@ -66,10 +69,10 @@ function AIAgentRunFormComponentExtended_div_30_Template(rf, ctx) { if (rf & 1)
66
69
  i0.ɵɵtextInterpolate(ctx_r0.calculateDuration(ctx_r0.record.StartedAt, ctx_r0.record.CompletedAt));
67
70
  } }
68
71
  function AIAgentRunFormComponentExtended_div_31_Template(rf, ctx) { if (rf & 1) {
69
- i0.ɵɵelementStart(0, "div", 19)(1, "span", 20);
72
+ i0.ɵɵelementStart(0, "div", 20)(1, "span", 21);
70
73
  i0.ɵɵtext(2, "Result");
71
74
  i0.ɵɵelementEnd();
72
- i0.ɵɵelementStart(3, "span", 21);
75
+ i0.ɵɵelementStart(3, "span", 22);
73
76
  i0.ɵɵtext(4);
74
77
  i0.ɵɵelementEnd()();
75
78
  } if (rf & 2) {
@@ -80,10 +83,10 @@ function AIAgentRunFormComponentExtended_div_31_Template(rf, ctx) { if (rf & 1)
80
83
  i0.ɵɵtextInterpolate1(" ", ctx_r0.record.Success ? "Success" : "Failed", " ");
81
84
  } }
82
85
  function AIAgentRunFormComponentExtended_div_32_Template(rf, ctx) { if (rf & 1) {
83
- i0.ɵɵelementStart(0, "div", 19)(1, "span", 20);
86
+ i0.ɵɵelementStart(0, "div", 20)(1, "span", 21);
84
87
  i0.ɵɵtext(2, "Tokens");
85
88
  i0.ɵɵelementEnd();
86
- i0.ɵɵelementStart(3, "span", 21);
89
+ i0.ɵɵelementStart(3, "span", 22);
87
90
  i0.ɵɵtext(4);
88
91
  i0.ɵɵpipe(5, "number");
89
92
  i0.ɵɵelementEnd()();
@@ -93,10 +96,10 @@ function AIAgentRunFormComponentExtended_div_32_Template(rf, ctx) { if (rf & 1)
93
96
  i0.ɵɵtextInterpolate(i0.ɵɵpipeBind2(5, 1, ctx_r0.record.TotalTokensUsed, "1.0-0"));
94
97
  } }
95
98
  function AIAgentRunFormComponentExtended_div_33_Template(rf, ctx) { if (rf & 1) {
96
- i0.ɵɵelementStart(0, "div", 19)(1, "span", 20);
99
+ i0.ɵɵelementStart(0, "div", 20)(1, "span", 21);
97
100
  i0.ɵɵtext(2, "Cost");
98
101
  i0.ɵɵelementEnd();
99
- i0.ɵɵelementStart(3, "span", 21);
102
+ i0.ɵɵelementStart(3, "span", 22);
100
103
  i0.ɵɵtext(4);
101
104
  i0.ɵɵpipe(5, "number");
102
105
  i0.ɵɵelementEnd()();
@@ -105,24 +108,24 @@ function AIAgentRunFormComponentExtended_div_33_Template(rf, ctx) { if (rf & 1)
105
108
  i0.ɵɵadvance(4);
106
109
  i0.ɵɵtextInterpolate1("$", i0.ɵɵpipeBind2(5, 1, ctx_r0.record.TotalCost, "1.2-4"), "");
107
110
  } }
108
- function AIAgentRunFormComponentExtended_div_42_div_5_div_24_Template(rf, ctx) { if (rf & 1) {
111
+ function AIAgentRunFormComponentExtended_div_45_div_5_div_24_Template(rf, ctx) { if (rf & 1) {
109
112
  const _r5 = i0.ɵɵgetCurrentView();
110
- i0.ɵɵelementStart(0, "div", 53)(1, "button", 54);
111
- i0.ɵɵlistener("click", function AIAgentRunFormComponentExtended_div_42_div_5_div_24_Template_button_click_1_listener() { i0.ɵɵrestoreView(_r5); const ctx_r0 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r0.navigateToActionLog(ctx_r0.selectedTimelineItem.data.ID)); });
112
- i0.ɵɵelement(2, "i", 55);
113
+ i0.ɵɵelementStart(0, "div", 55)(1, "button", 56);
114
+ i0.ɵɵlistener("click", function AIAgentRunFormComponentExtended_div_45_div_5_div_24_Template_button_click_1_listener() { i0.ɵɵrestoreView(_r5); const ctx_r0 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r0.navigateToActionLog(ctx_r0.selectedTimelineItem.data.ID)); });
115
+ i0.ɵɵelement(2, "i", 57);
113
116
  i0.ɵɵtext(3, " View Action Execution Log ");
114
117
  i0.ɵɵelementEnd()();
115
118
  } }
116
- function AIAgentRunFormComponentExtended_div_42_div_5_Conditional_25_Template(rf, ctx) { if (rf & 1) {
119
+ function AIAgentRunFormComponentExtended_div_45_div_5_Conditional_25_Template(rf, ctx) { if (rf & 1) {
117
120
  const _r6 = i0.ɵɵgetCurrentView();
118
- i0.ɵɵelementStart(0, "div", 49)(1, "button", 56);
119
- i0.ɵɵlistener("click", function AIAgentRunFormComponentExtended_div_42_div_5_Conditional_25_Template_button_click_1_listener() { i0.ɵɵrestoreView(_r6); const ctx_r0 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r0.detailPaneTab = "diff"); });
120
- i0.ɵɵelement(2, "i", 57);
121
+ i0.ɵɵelementStart(0, "div", 51)(1, "button", 58);
122
+ i0.ɵɵlistener("click", function AIAgentRunFormComponentExtended_div_45_div_5_Conditional_25_Template_button_click_1_listener() { i0.ɵɵrestoreView(_r6); const ctx_r0 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r0.detailPaneTab = "diff"); });
123
+ i0.ɵɵelement(2, "i", 59);
121
124
  i0.ɵɵtext(3, " Payload Changes ");
122
125
  i0.ɵɵelementEnd();
123
- i0.ɵɵelementStart(4, "button", 56);
124
- i0.ɵɵlistener("click", function AIAgentRunFormComponentExtended_div_42_div_5_Conditional_25_Template_button_click_4_listener() { i0.ɵɵrestoreView(_r6); const ctx_r0 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r0.detailPaneTab = "json"); });
125
- i0.ɵɵelement(5, "i", 58);
126
+ i0.ɵɵelementStart(4, "button", 58);
127
+ i0.ɵɵlistener("click", function AIAgentRunFormComponentExtended_div_45_div_5_Conditional_25_Template_button_click_4_listener() { i0.ɵɵrestoreView(_r6); const ctx_r0 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r0.detailPaneTab = "json"); });
128
+ i0.ɵɵelement(5, "i", 60);
126
129
  i0.ɵɵtext(6, " Full JSON ");
127
130
  i0.ɵɵelementEnd()();
128
131
  } if (rf & 2) {
@@ -132,23 +135,23 @@ function AIAgentRunFormComponentExtended_div_42_div_5_Conditional_25_Template(rf
132
135
  i0.ɵɵadvance(3);
133
136
  i0.ɵɵclassProp("active", ctx_r0.detailPaneTab === "json");
134
137
  } }
135
- function AIAgentRunFormComponentExtended_div_42_div_5_Conditional_27_Template(rf, ctx) { if (rf & 1) {
136
- i0.ɵɵelementStart(0, "div", 51);
137
- i0.ɵɵelement(1, "mj-deep-diff", 59);
138
+ function AIAgentRunFormComponentExtended_div_45_div_5_Conditional_27_Template(rf, ctx) { if (rf & 1) {
139
+ i0.ɵɵelementStart(0, "div", 53);
140
+ i0.ɵɵelement(1, "mj-deep-diff", 61);
138
141
  i0.ɵɵelementEnd();
139
142
  } if (rf & 2) {
140
143
  const ctx_r0 = i0.ɵɵnextContext(3);
141
144
  i0.ɵɵadvance();
142
145
  i0.ɵɵproperty("oldValue", ctx_r0.stepPayloadAtStartObject)("newValue", ctx_r0.stepPayloadAtEndObject)("title", "")("showSummary", true)("showUnchanged", false)("expandAll", false)("maxDepth", 8)("maxStringLength", 150)("treatNullAsUndefined", true);
143
146
  } }
144
- function AIAgentRunFormComponentExtended_div_42_div_5_Conditional_28_Template(rf, ctx) { if (rf & 1) {
147
+ function AIAgentRunFormComponentExtended_div_45_div_5_Conditional_28_Template(rf, ctx) { if (rf & 1) {
145
148
  const _r7 = i0.ɵɵgetCurrentView();
146
- i0.ɵɵelementStart(0, "div", 52)(1, "div", 60)(2, "button", 61);
147
- i0.ɵɵlistener("click", function AIAgentRunFormComponentExtended_div_42_div_5_Conditional_28_Template_button_click_2_listener() { i0.ɵɵrestoreView(_r7); const ctx_r0 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r0.copyToClipboard(ctx_r0.getSelectedItemJson())); });
148
- i0.ɵɵelement(3, "i", 62);
149
+ i0.ɵɵelementStart(0, "div", 54)(1, "div", 62)(2, "button", 63);
150
+ i0.ɵɵlistener("click", function AIAgentRunFormComponentExtended_div_45_div_5_Conditional_28_Template_button_click_2_listener() { i0.ɵɵrestoreView(_r7); const ctx_r0 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r0.copyToClipboard(ctx_r0.getSelectedItemJson())); });
151
+ i0.ɵɵelement(3, "i", 64);
149
152
  i0.ɵɵelementEnd()();
150
- i0.ɵɵelementStart(4, "mj-code-editor", 63);
151
- i0.ɵɵtwoWayListener("ngModelChange", function AIAgentRunFormComponentExtended_div_42_div_5_Conditional_28_Template_mj_code_editor_ngModelChange_4_listener($event) { i0.ɵɵrestoreView(_r7); const ctx_r0 = i0.ɵɵnextContext(3); i0.ɵɵtwoWayBindingSet(ctx_r0.selectedItemJsonString, $event) || (ctx_r0.selectedItemJsonString = $event); return i0.ɵɵresetView($event); });
153
+ i0.ɵɵelementStart(4, "mj-code-editor", 65);
154
+ i0.ɵɵtwoWayListener("ngModelChange", function AIAgentRunFormComponentExtended_div_45_div_5_Conditional_28_Template_mj_code_editor_ngModelChange_4_listener($event) { i0.ɵɵrestoreView(_r7); const ctx_r0 = i0.ɵɵnextContext(3); i0.ɵɵtwoWayBindingSet(ctx_r0.selectedItemJsonString, $event) || (ctx_r0.selectedItemJsonString = $event); return i0.ɵɵresetView($event); });
152
155
  i0.ɵɵelementEnd()();
153
156
  } if (rf & 2) {
154
157
  const ctx_r0 = i0.ɵɵnextContext(3);
@@ -156,37 +159,37 @@ function AIAgentRunFormComponentExtended_div_42_div_5_Conditional_28_Template(rf
156
159
  i0.ɵɵtwoWayProperty("ngModel", ctx_r0.selectedItemJsonString);
157
160
  i0.ɵɵproperty("language", "json")("readonly", true);
158
161
  } }
159
- function AIAgentRunFormComponentExtended_div_42_div_5_Template(rf, ctx) { if (rf & 1) {
162
+ function AIAgentRunFormComponentExtended_div_45_div_5_Template(rf, ctx) { if (rf & 1) {
160
163
  const _r4 = i0.ɵɵgetCurrentView();
161
- i0.ɵɵelementStart(0, "div", 40)(1, "div", 41)(2, "h3");
162
- i0.ɵɵelement(3, "i", 14);
164
+ i0.ɵɵelementStart(0, "div", 42)(1, "div", 43)(2, "h3");
165
+ i0.ɵɵelement(3, "i", 15);
163
166
  i0.ɵɵtext(4);
164
167
  i0.ɵɵelementEnd();
165
- i0.ɵɵelementStart(5, "button", 42);
166
- i0.ɵɵlistener("click", function AIAgentRunFormComponentExtended_div_42_div_5_Template_button_click_5_listener() { i0.ɵɵrestoreView(_r4); const ctx_r0 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r0.closeJsonPanel()); });
167
- i0.ɵɵelement(6, "i", 43);
168
+ i0.ɵɵelementStart(5, "button", 44);
169
+ i0.ɵɵlistener("click", function AIAgentRunFormComponentExtended_div_45_div_5_Template_button_click_5_listener() { i0.ɵɵrestoreView(_r4); const ctx_r0 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r0.closeJsonPanel()); });
170
+ i0.ɵɵelement(6, "i", 45);
168
171
  i0.ɵɵelementEnd()();
169
- i0.ɵɵelementStart(7, "div", 44)(8, "div", 45)(9, "div", 46)(10, "label");
172
+ i0.ɵɵelementStart(7, "div", 46)(8, "div", 47)(9, "div", 48)(10, "label");
170
173
  i0.ɵɵtext(11, "Type");
171
174
  i0.ɵɵelementEnd();
172
175
  i0.ɵɵelementStart(12, "span");
173
176
  i0.ɵɵtext(13);
174
177
  i0.ɵɵelementEnd()();
175
- i0.ɵɵelementStart(14, "div", 46)(15, "label");
178
+ i0.ɵɵelementStart(14, "div", 48)(15, "label");
176
179
  i0.ɵɵtext(16, "Status");
177
180
  i0.ɵɵelementEnd();
178
- i0.ɵɵelementStart(17, "span", 47);
181
+ i0.ɵɵelementStart(17, "span", 49);
179
182
  i0.ɵɵtext(18);
180
183
  i0.ɵɵelementEnd()();
181
- i0.ɵɵelementStart(19, "div", 46)(20, "label");
184
+ i0.ɵɵelementStart(19, "div", 48)(20, "label");
182
185
  i0.ɵɵtext(21, "Duration");
183
186
  i0.ɵɵelementEnd();
184
187
  i0.ɵɵelementStart(22, "span");
185
188
  i0.ɵɵtext(23);
186
189
  i0.ɵɵelementEnd()()();
187
- i0.ɵɵtemplate(24, AIAgentRunFormComponentExtended_div_42_div_5_div_24_Template, 4, 0, "div", 48)(25, AIAgentRunFormComponentExtended_div_42_div_5_Conditional_25_Template, 7, 4, "div", 49);
188
- i0.ɵɵelementStart(26, "div", 50);
189
- i0.ɵɵtemplate(27, AIAgentRunFormComponentExtended_div_42_div_5_Conditional_27_Template, 2, 9, "div", 51)(28, AIAgentRunFormComponentExtended_div_42_div_5_Conditional_28_Template, 5, 3, "div", 52);
190
+ i0.ɵɵtemplate(24, AIAgentRunFormComponentExtended_div_45_div_5_div_24_Template, 4, 0, "div", 50)(25, AIAgentRunFormComponentExtended_div_45_div_5_Conditional_25_Template, 7, 4, "div", 51);
191
+ i0.ɵɵelementStart(26, "div", 52);
192
+ i0.ɵɵtemplate(27, AIAgentRunFormComponentExtended_div_45_div_5_Conditional_27_Template, 2, 9, "div", 53)(28, AIAgentRunFormComponentExtended_div_45_div_5_Conditional_28_Template, 5, 3, "div", 54);
190
193
  i0.ɵɵelementEnd()()();
191
194
  } if (rf & 2) {
192
195
  const ctx_r0 = i0.ɵɵnextContext(2);
@@ -213,13 +216,13 @@ function AIAgentRunFormComponentExtended_div_42_div_5_Template(rf, ctx) { if (rf
213
216
  i0.ɵɵadvance();
214
217
  i0.ɵɵconditional(ctx_r0.detailPaneTab === "json" || !ctx_r0.showStepPayloadDiff ? 28 : -1);
215
218
  } }
216
- function AIAgentRunFormComponentExtended_div_42_Template(rf, ctx) { if (rf & 1) {
219
+ function AIAgentRunFormComponentExtended_div_45_Template(rf, ctx) { if (rf & 1) {
217
220
  const _r3 = i0.ɵɵgetCurrentView();
218
- i0.ɵɵelementStart(0, "div", 34)(1, "kendo-splitter", 35)(2, "kendo-splitter-pane", 36)(3, "mj-ai-agent-run-timeline", 37);
219
- i0.ɵɵlistener("itemSelected", function AIAgentRunFormComponentExtended_div_42_Template_mj_ai_agent_run_timeline_itemSelected_3_listener($event) { i0.ɵɵrestoreView(_r3); const ctx_r0 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r0.selectTimelineItem($event)); })("navigateToEntity", function AIAgentRunFormComponentExtended_div_42_Template_mj_ai_agent_run_timeline_navigateToEntity_3_listener($event) { i0.ɵɵrestoreView(_r3); const ctx_r0 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r0.navigateToEntityRecord($event)); });
221
+ i0.ɵɵelementStart(0, "div", 36)(1, "kendo-splitter", 37)(2, "kendo-splitter-pane", 38)(3, "mj-ai-agent-run-timeline", 39);
222
+ i0.ɵɵlistener("itemSelected", function AIAgentRunFormComponentExtended_div_45_Template_mj_ai_agent_run_timeline_itemSelected_3_listener($event) { i0.ɵɵrestoreView(_r3); const ctx_r0 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r0.selectTimelineItem($event)); })("navigateToEntity", function AIAgentRunFormComponentExtended_div_45_Template_mj_ai_agent_run_timeline_navigateToEntity_3_listener($event) { i0.ɵɵrestoreView(_r3); const ctx_r0 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r0.navigateToEntityRecord($event)); });
220
223
  i0.ɵɵelementEnd()();
221
- i0.ɵɵelementStart(4, "kendo-splitter-pane", 38);
222
- i0.ɵɵtemplate(5, AIAgentRunFormComponentExtended_div_42_div_5_Template, 29, 12, "div", 39);
224
+ i0.ɵɵelementStart(4, "kendo-splitter-pane", 40);
225
+ i0.ɵɵtemplate(5, AIAgentRunFormComponentExtended_div_45_div_5_Template, 29, 12, "div", 41);
223
226
  i0.ɵɵelementEnd()()();
224
227
  } if (rf & 2) {
225
228
  const ctx_r0 = i0.ɵɵnextContext();
@@ -232,10 +235,25 @@ function AIAgentRunFormComponentExtended_div_42_Template(rf, ctx) { if (rf & 1)
232
235
  i0.ɵɵadvance();
233
236
  i0.ɵɵproperty("ngIf", ctx_r0.selectedTimelineItem);
234
237
  } }
235
- function AIAgentRunFormComponentExtended_div_43_ng_template_3_a_11_Template(rf, ctx) { if (rf & 1) {
238
+ function AIAgentRunFormComponentExtended_div_46_mj_ai_agent_run_analytics_1_Template(rf, ctx) { if (rf & 1) {
239
+ i0.ɵɵelement(0, "mj-ai-agent-run-analytics", 67, 0);
240
+ } if (rf & 2) {
241
+ const ctx_r0 = i0.ɵɵnextContext(2);
242
+ i0.ɵɵproperty("agentRunId", ctx_r0.record.ID);
243
+ } }
244
+ function AIAgentRunFormComponentExtended_div_46_Template(rf, ctx) { if (rf & 1) {
245
+ i0.ɵɵelementStart(0, "div", 36);
246
+ i0.ɵɵtemplate(1, AIAgentRunFormComponentExtended_div_46_mj_ai_agent_run_analytics_1_Template, 2, 1, "mj-ai-agent-run-analytics", 66);
247
+ i0.ɵɵelementEnd();
248
+ } if (rf & 2) {
249
+ const ctx_r0 = i0.ɵɵnextContext();
250
+ i0.ɵɵadvance();
251
+ i0.ɵɵproperty("ngIf", ctx_r0.analyticsLoaded);
252
+ } }
253
+ function AIAgentRunFormComponentExtended_div_47_ng_template_3_a_11_Template(rf, ctx) { if (rf & 1) {
236
254
  const _r9 = i0.ɵɵgetCurrentView();
237
- i0.ɵɵelementStart(0, "a", 75);
238
- i0.ɵɵlistener("click", function AIAgentRunFormComponentExtended_div_43_ng_template_3_a_11_Template_a_click_0_listener() { i0.ɵɵrestoreView(_r9); const ctx_r0 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r0.openEntityRecord("MJ: AI Agent Runs", ctx_r0.record.ParentRunID)); });
255
+ i0.ɵɵelementStart(0, "a", 79);
256
+ i0.ɵɵlistener("click", function AIAgentRunFormComponentExtended_div_47_ng_template_3_a_11_Template_a_click_0_listener() { i0.ɵɵrestoreView(_r9); const ctx_r0 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r0.openEntityRecord("MJ: AI Agent Runs", ctx_r0.record.ParentRunID)); });
239
257
  i0.ɵɵtext(1);
240
258
  i0.ɵɵelementEnd();
241
259
  } if (rf & 2) {
@@ -243,15 +261,15 @@ function AIAgentRunFormComponentExtended_div_43_ng_template_3_a_11_Template(rf,
243
261
  i0.ɵɵadvance();
244
262
  i0.ɵɵtextInterpolate1(" ", ctx_r0.record.ParentRunID, " ");
245
263
  } }
246
- function AIAgentRunFormComponentExtended_div_43_ng_template_3_span_12_Template(rf, ctx) { if (rf & 1) {
264
+ function AIAgentRunFormComponentExtended_div_47_ng_template_3_span_12_Template(rf, ctx) { if (rf & 1) {
247
265
  i0.ɵɵelementStart(0, "span");
248
266
  i0.ɵɵtext(1, "None (Root)");
249
267
  i0.ɵɵelementEnd();
250
268
  } }
251
- function AIAgentRunFormComponentExtended_div_43_ng_template_3_a_17_Template(rf, ctx) { if (rf & 1) {
269
+ function AIAgentRunFormComponentExtended_div_47_ng_template_3_a_17_Template(rf, ctx) { if (rf & 1) {
252
270
  const _r10 = i0.ɵɵgetCurrentView();
253
- i0.ɵɵelementStart(0, "a", 75);
254
- i0.ɵɵlistener("click", function AIAgentRunFormComponentExtended_div_43_ng_template_3_a_17_Template_a_click_0_listener() { i0.ɵɵrestoreView(_r10); const ctx_r0 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r0.openEntityRecord("MJ: AI Agent Runs", ctx_r0.record.LastRunID)); });
271
+ i0.ɵɵelementStart(0, "a", 79);
272
+ i0.ɵɵlistener("click", function AIAgentRunFormComponentExtended_div_47_ng_template_3_a_17_Template_a_click_0_listener() { i0.ɵɵrestoreView(_r10); const ctx_r0 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r0.openEntityRecord("MJ: AI Agent Runs", ctx_r0.record.LastRunID)); });
255
273
  i0.ɵɵtext(1);
256
274
  i0.ɵɵelementEnd();
257
275
  } if (rf & 2) {
@@ -259,15 +277,15 @@ function AIAgentRunFormComponentExtended_div_43_ng_template_3_a_17_Template(rf,
259
277
  i0.ɵɵadvance();
260
278
  i0.ɵɵtextInterpolate1(" ", ctx_r0.record.LastRunID, " ");
261
279
  } }
262
- function AIAgentRunFormComponentExtended_div_43_ng_template_3_span_18_Template(rf, ctx) { if (rf & 1) {
280
+ function AIAgentRunFormComponentExtended_div_47_ng_template_3_span_18_Template(rf, ctx) { if (rf & 1) {
263
281
  i0.ɵɵelementStart(0, "span");
264
282
  i0.ɵɵtext(1, "None");
265
283
  i0.ɵɵelementEnd();
266
284
  } }
267
- function AIAgentRunFormComponentExtended_div_43_ng_template_3_a_23_Template(rf, ctx) { if (rf & 1) {
285
+ function AIAgentRunFormComponentExtended_div_47_ng_template_3_a_23_Template(rf, ctx) { if (rf & 1) {
268
286
  const _r11 = i0.ɵɵgetCurrentView();
269
- i0.ɵɵelementStart(0, "a", 75);
270
- i0.ɵɵlistener("click", function AIAgentRunFormComponentExtended_div_43_ng_template_3_a_23_Template_a_click_0_listener() { i0.ɵɵrestoreView(_r11); const ctx_r0 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r0.openEntityRecord("Conversations", ctx_r0.record.ConversationID)); });
287
+ i0.ɵɵelementStart(0, "a", 79);
288
+ i0.ɵɵlistener("click", function AIAgentRunFormComponentExtended_div_47_ng_template_3_a_23_Template_a_click_0_listener() { i0.ɵɵrestoreView(_r11); const ctx_r0 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r0.openEntityRecord("Conversations", ctx_r0.record.ConversationID)); });
271
289
  i0.ɵɵtext(1);
272
290
  i0.ɵɵelementEnd();
273
291
  } if (rf & 2) {
@@ -275,15 +293,15 @@ function AIAgentRunFormComponentExtended_div_43_ng_template_3_a_23_Template(rf,
275
293
  i0.ɵɵadvance();
276
294
  i0.ɵɵtextInterpolate1(" ", ctx_r0.record.ConversationID, " ");
277
295
  } }
278
- function AIAgentRunFormComponentExtended_div_43_ng_template_3_span_24_Template(rf, ctx) { if (rf & 1) {
296
+ function AIAgentRunFormComponentExtended_div_47_ng_template_3_span_24_Template(rf, ctx) { if (rf & 1) {
279
297
  i0.ɵɵelementStart(0, "span");
280
298
  i0.ɵɵtext(1, "N/A");
281
299
  i0.ɵɵelementEnd();
282
300
  } }
283
- function AIAgentRunFormComponentExtended_div_43_ng_template_3_a_29_Template(rf, ctx) { if (rf & 1) {
301
+ function AIAgentRunFormComponentExtended_div_47_ng_template_3_a_29_Template(rf, ctx) { if (rf & 1) {
284
302
  const _r12 = i0.ɵɵgetCurrentView();
285
- i0.ɵɵelementStart(0, "a", 75);
286
- i0.ɵɵlistener("click", function AIAgentRunFormComponentExtended_div_43_ng_template_3_a_29_Template_a_click_0_listener() { i0.ɵɵrestoreView(_r12); const ctx_r0 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r0.openEntityRecord("Users", ctx_r0.record.UserID)); });
303
+ i0.ɵɵelementStart(0, "a", 79);
304
+ i0.ɵɵlistener("click", function AIAgentRunFormComponentExtended_div_47_ng_template_3_a_29_Template_a_click_0_listener() { i0.ɵɵrestoreView(_r12); const ctx_r0 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r0.openEntityRecord("Users", ctx_r0.record.UserID)); });
287
305
  i0.ɵɵtext(1);
288
306
  i0.ɵɵelementEnd();
289
307
  } if (rf & 2) {
@@ -291,43 +309,43 @@ function AIAgentRunFormComponentExtended_div_43_ng_template_3_a_29_Template(rf,
291
309
  i0.ɵɵadvance();
292
310
  i0.ɵɵtextInterpolate1(" ", ctx_r0.record.User || "N/A", " ");
293
311
  } }
294
- function AIAgentRunFormComponentExtended_div_43_ng_template_3_span_30_Template(rf, ctx) { if (rf & 1) {
312
+ function AIAgentRunFormComponentExtended_div_47_ng_template_3_span_30_Template(rf, ctx) { if (rf & 1) {
295
313
  i0.ɵɵelementStart(0, "span");
296
314
  i0.ɵɵtext(1, "N/A");
297
315
  i0.ɵɵelementEnd();
298
316
  } }
299
- function AIAgentRunFormComponentExtended_div_43_ng_template_3_Template(rf, ctx) { if (rf & 1) {
317
+ function AIAgentRunFormComponentExtended_div_47_ng_template_3_Template(rf, ctx) { if (rf & 1) {
300
318
  const _r8 = i0.ɵɵgetCurrentView();
301
- i0.ɵɵelementStart(0, "div", 73)(1, "div", 74)(2, "label");
319
+ i0.ɵɵelementStart(0, "div", 77)(1, "div", 78)(2, "label");
302
320
  i0.ɵɵtext(3, "Agent");
303
321
  i0.ɵɵelementEnd();
304
- i0.ɵɵelementStart(4, "span")(5, "a", 75);
305
- i0.ɵɵlistener("click", function AIAgentRunFormComponentExtended_div_43_ng_template_3_Template_a_click_5_listener() { i0.ɵɵrestoreView(_r8); const ctx_r0 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r0.openEntityRecord("AI Agents", ctx_r0.record.AgentID)); });
322
+ i0.ɵɵelementStart(4, "span")(5, "a", 79);
323
+ i0.ɵɵlistener("click", function AIAgentRunFormComponentExtended_div_47_ng_template_3_Template_a_click_5_listener() { i0.ɵɵrestoreView(_r8); const ctx_r0 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r0.openEntityRecord("AI Agents", ctx_r0.record.AgentID)); });
306
324
  i0.ɵɵtext(6);
307
325
  i0.ɵɵelementEnd()()();
308
- i0.ɵɵelementStart(7, "div", 74)(8, "label");
326
+ i0.ɵɵelementStart(7, "div", 78)(8, "label");
309
327
  i0.ɵɵtext(9, "Parent Run ID");
310
328
  i0.ɵɵelementEnd();
311
329
  i0.ɵɵelementStart(10, "span");
312
- i0.ɵɵtemplate(11, AIAgentRunFormComponentExtended_div_43_ng_template_3_a_11_Template, 2, 1, "a", 76)(12, AIAgentRunFormComponentExtended_div_43_ng_template_3_span_12_Template, 2, 0, "span", 77);
330
+ i0.ɵɵtemplate(11, AIAgentRunFormComponentExtended_div_47_ng_template_3_a_11_Template, 2, 1, "a", 80)(12, AIAgentRunFormComponentExtended_div_47_ng_template_3_span_12_Template, 2, 0, "span", 81);
313
331
  i0.ɵɵelementEnd()();
314
- i0.ɵɵelementStart(13, "div", 74)(14, "label");
332
+ i0.ɵɵelementStart(13, "div", 78)(14, "label");
315
333
  i0.ɵɵtext(15, "Last Run ID");
316
334
  i0.ɵɵelementEnd();
317
335
  i0.ɵɵelementStart(16, "span");
318
- i0.ɵɵtemplate(17, AIAgentRunFormComponentExtended_div_43_ng_template_3_a_17_Template, 2, 1, "a", 76)(18, AIAgentRunFormComponentExtended_div_43_ng_template_3_span_18_Template, 2, 0, "span", 77);
336
+ i0.ɵɵtemplate(17, AIAgentRunFormComponentExtended_div_47_ng_template_3_a_17_Template, 2, 1, "a", 80)(18, AIAgentRunFormComponentExtended_div_47_ng_template_3_span_18_Template, 2, 0, "span", 81);
319
337
  i0.ɵɵelementEnd()();
320
- i0.ɵɵelementStart(19, "div", 74)(20, "label");
338
+ i0.ɵɵelementStart(19, "div", 78)(20, "label");
321
339
  i0.ɵɵtext(21, "Conversation ID");
322
340
  i0.ɵɵelementEnd();
323
341
  i0.ɵɵelementStart(22, "span");
324
- i0.ɵɵtemplate(23, AIAgentRunFormComponentExtended_div_43_ng_template_3_a_23_Template, 2, 1, "a", 76)(24, AIAgentRunFormComponentExtended_div_43_ng_template_3_span_24_Template, 2, 0, "span", 77);
342
+ i0.ɵɵtemplate(23, AIAgentRunFormComponentExtended_div_47_ng_template_3_a_23_Template, 2, 1, "a", 80)(24, AIAgentRunFormComponentExtended_div_47_ng_template_3_span_24_Template, 2, 0, "span", 81);
325
343
  i0.ɵɵelementEnd()();
326
- i0.ɵɵelementStart(25, "div", 74)(26, "label");
344
+ i0.ɵɵelementStart(25, "div", 78)(26, "label");
327
345
  i0.ɵɵtext(27, "User");
328
346
  i0.ɵɵelementEnd();
329
347
  i0.ɵɵelementStart(28, "span");
330
- i0.ɵɵtemplate(29, AIAgentRunFormComponentExtended_div_43_ng_template_3_a_29_Template, 2, 1, "a", 76)(30, AIAgentRunFormComponentExtended_div_43_ng_template_3_span_30_Template, 2, 0, "span", 77);
348
+ i0.ɵɵtemplate(29, AIAgentRunFormComponentExtended_div_47_ng_template_3_a_29_Template, 2, 1, "a", 80)(30, AIAgentRunFormComponentExtended_div_47_ng_template_3_span_30_Template, 2, 0, "span", 81);
331
349
  i0.ɵɵelementEnd()()();
332
350
  } if (rf & 2) {
333
351
  const ctx_r0 = i0.ɵɵnextContext(2);
@@ -350,11 +368,11 @@ function AIAgentRunFormComponentExtended_div_43_ng_template_3_Template(rf, ctx)
350
368
  i0.ɵɵadvance();
351
369
  i0.ɵɵproperty("ngIf", !ctx_r0.record.UserID);
352
370
  } }
353
- function AIAgentRunFormComponentExtended_div_43_ng_template_5_div_11_Template(rf, ctx) { if (rf & 1) {
354
- i0.ɵɵelementStart(0, "div", 79)(1, "label");
371
+ function AIAgentRunFormComponentExtended_div_47_ng_template_5_div_11_Template(rf, ctx) { if (rf & 1) {
372
+ i0.ɵɵelementStart(0, "div", 83)(1, "label");
355
373
  i0.ɵɵtext(2, "Error Message");
356
374
  i0.ɵɵelementEnd();
357
- i0.ɵɵelementStart(3, "div", 80);
375
+ i0.ɵɵelementStart(3, "div", 84);
358
376
  i0.ɵɵtext(4);
359
377
  i0.ɵɵelementEnd()();
360
378
  } if (rf & 2) {
@@ -362,20 +380,20 @@ function AIAgentRunFormComponentExtended_div_43_ng_template_5_div_11_Template(rf
362
380
  i0.ɵɵadvance(4);
363
381
  i0.ɵɵtextInterpolate(ctx_r0.record.ErrorMessage);
364
382
  } }
365
- function AIAgentRunFormComponentExtended_div_43_ng_template_5_Template(rf, ctx) { if (rf & 1) {
366
- i0.ɵɵelementStart(0, "div", 73)(1, "div", 74)(2, "label");
383
+ function AIAgentRunFormComponentExtended_div_47_ng_template_5_Template(rf, ctx) { if (rf & 1) {
384
+ i0.ɵɵelementStart(0, "div", 77)(1, "div", 78)(2, "label");
367
385
  i0.ɵɵtext(3, "Status");
368
386
  i0.ɵɵelementEnd();
369
- i0.ɵɵelementStart(4, "span", 13);
387
+ i0.ɵɵelementStart(4, "span", 14);
370
388
  i0.ɵɵtext(5);
371
389
  i0.ɵɵelementEnd()();
372
- i0.ɵɵelementStart(6, "div", 74)(7, "label");
390
+ i0.ɵɵelementStart(6, "div", 78)(7, "label");
373
391
  i0.ɵɵtext(8, "Success");
374
392
  i0.ɵɵelementEnd();
375
393
  i0.ɵɵelementStart(9, "span");
376
394
  i0.ɵɵtext(10);
377
395
  i0.ɵɵelementEnd()();
378
- i0.ɵɵtemplate(11, AIAgentRunFormComponentExtended_div_43_ng_template_5_div_11_Template, 5, 1, "div", 78);
396
+ i0.ɵɵtemplate(11, AIAgentRunFormComponentExtended_div_47_ng_template_5_div_11_Template, 5, 1, "div", 82);
379
397
  i0.ɵɵelementEnd();
380
398
  } if (rf & 2) {
381
399
  const ctx_r0 = i0.ɵɵnextContext(2);
@@ -390,36 +408,36 @@ function AIAgentRunFormComponentExtended_div_43_ng_template_5_Template(rf, ctx)
390
408
  i0.ɵɵadvance();
391
409
  i0.ɵɵproperty("ngIf", ctx_r0.record.ErrorMessage);
392
410
  } }
393
- function AIAgentRunFormComponentExtended_div_43_ng_template_7_Template(rf, ctx) { if (rf & 1) {
394
- i0.ɵɵelementStart(0, "div", 73)(1, "div", 74)(2, "label");
411
+ function AIAgentRunFormComponentExtended_div_47_ng_template_7_Template(rf, ctx) { if (rf & 1) {
412
+ i0.ɵɵelementStart(0, "div", 77)(1, "div", 78)(2, "label");
395
413
  i0.ɵɵtext(3, "Total Tokens Used");
396
414
  i0.ɵɵelementEnd();
397
415
  i0.ɵɵelementStart(4, "span");
398
416
  i0.ɵɵtext(5);
399
417
  i0.ɵɵpipe(6, "number");
400
418
  i0.ɵɵelementEnd()();
401
- i0.ɵɵelementStart(7, "div", 74)(8, "label");
419
+ i0.ɵɵelementStart(7, "div", 78)(8, "label");
402
420
  i0.ɵɵtext(9, "Prompt Tokens");
403
421
  i0.ɵɵelementEnd();
404
422
  i0.ɵɵelementStart(10, "span");
405
423
  i0.ɵɵtext(11);
406
424
  i0.ɵɵpipe(12, "number");
407
425
  i0.ɵɵelementEnd()();
408
- i0.ɵɵelementStart(13, "div", 74)(14, "label");
426
+ i0.ɵɵelementStart(13, "div", 78)(14, "label");
409
427
  i0.ɵɵtext(15, "Completion Tokens");
410
428
  i0.ɵɵelementEnd();
411
429
  i0.ɵɵelementStart(16, "span");
412
430
  i0.ɵɵtext(17);
413
431
  i0.ɵɵpipe(18, "number");
414
432
  i0.ɵɵelementEnd()();
415
- i0.ɵɵelementStart(19, "div", 74)(20, "label");
433
+ i0.ɵɵelementStart(19, "div", 78)(20, "label");
416
434
  i0.ɵɵtext(21, "Total Cost");
417
435
  i0.ɵɵelementEnd();
418
436
  i0.ɵɵelementStart(22, "span");
419
437
  i0.ɵɵtext(23);
420
438
  i0.ɵɵpipe(24, "number");
421
439
  i0.ɵɵelementEnd()();
422
- i0.ɵɵelementStart(25, "div", 74)(26, "label");
440
+ i0.ɵɵelementStart(25, "div", 78)(26, "label");
423
441
  i0.ɵɵtext(27, "Total Prompt Iterations");
424
442
  i0.ɵɵelementEnd();
425
443
  i0.ɵɵelementStart(28, "span");
@@ -439,73 +457,73 @@ function AIAgentRunFormComponentExtended_div_43_ng_template_7_Template(rf, ctx)
439
457
  i0.ɵɵadvance(6);
440
458
  i0.ɵɵtextInterpolate(ctx_r0.record.TotalPromptIterations != null ? i0.ɵɵpipeBind2(30, 17, ctx_r0.record.TotalPromptIterations, "1.0-0") : "N/A");
441
459
  } }
442
- function AIAgentRunFormComponentExtended_div_43_kendo_panelbar_item_8_ng_template_1_Template(rf, ctx) { if (rf & 1) {
443
- i0.ɵɵelementStart(0, "div", 82);
444
- i0.ɵɵelement(1, "mj-code-editor", 83);
460
+ function AIAgentRunFormComponentExtended_div_47_kendo_panelbar_item_8_ng_template_1_Template(rf, ctx) { if (rf & 1) {
461
+ i0.ɵɵelementStart(0, "div", 86);
462
+ i0.ɵɵelement(1, "mj-code-editor", 87);
445
463
  i0.ɵɵelementEnd();
446
464
  } if (rf & 2) {
447
465
  const ctx_r0 = i0.ɵɵnextContext(3);
448
466
  i0.ɵɵadvance();
449
467
  i0.ɵɵproperty("ngModel", ctx_r0.parsedResult)("language", "json")("readonly", true);
450
468
  } }
451
- function AIAgentRunFormComponentExtended_div_43_kendo_panelbar_item_8_Template(rf, ctx) { if (rf & 1) {
452
- i0.ɵɵelementStart(0, "kendo-panelbar-item", 81);
453
- i0.ɵɵtemplate(1, AIAgentRunFormComponentExtended_div_43_kendo_panelbar_item_8_ng_template_1_Template, 2, 3, "ng-template", 66);
469
+ function AIAgentRunFormComponentExtended_div_47_kendo_panelbar_item_8_Template(rf, ctx) { if (rf & 1) {
470
+ i0.ɵɵelementStart(0, "kendo-panelbar-item", 85);
471
+ i0.ɵɵtemplate(1, AIAgentRunFormComponentExtended_div_47_kendo_panelbar_item_8_ng_template_1_Template, 2, 3, "ng-template", 70);
454
472
  i0.ɵɵelementEnd();
455
473
  } }
456
- function AIAgentRunFormComponentExtended_div_43_kendo_panelbar_item_9_ng_template_1_Template(rf, ctx) { if (rf & 1) {
457
- i0.ɵɵelementStart(0, "div", 82);
458
- i0.ɵɵelement(1, "mj-code-editor", 83);
474
+ function AIAgentRunFormComponentExtended_div_47_kendo_panelbar_item_9_ng_template_1_Template(rf, ctx) { if (rf & 1) {
475
+ i0.ɵɵelementStart(0, "div", 86);
476
+ i0.ɵɵelement(1, "mj-code-editor", 87);
459
477
  i0.ɵɵelementEnd();
460
478
  } if (rf & 2) {
461
479
  const ctx_r0 = i0.ɵɵnextContext(3);
462
480
  i0.ɵɵadvance();
463
481
  i0.ɵɵproperty("ngModel", ctx_r0.parsedStartingPayload)("language", "json")("readonly", true);
464
482
  } }
465
- function AIAgentRunFormComponentExtended_div_43_kendo_panelbar_item_9_Template(rf, ctx) { if (rf & 1) {
466
- i0.ɵɵelementStart(0, "kendo-panelbar-item", 84);
467
- i0.ɵɵtemplate(1, AIAgentRunFormComponentExtended_div_43_kendo_panelbar_item_9_ng_template_1_Template, 2, 3, "ng-template", 66);
483
+ function AIAgentRunFormComponentExtended_div_47_kendo_panelbar_item_9_Template(rf, ctx) { if (rf & 1) {
484
+ i0.ɵɵelementStart(0, "kendo-panelbar-item", 88);
485
+ i0.ɵɵtemplate(1, AIAgentRunFormComponentExtended_div_47_kendo_panelbar_item_9_ng_template_1_Template, 2, 3, "ng-template", 70);
468
486
  i0.ɵɵelementEnd();
469
487
  } }
470
- function AIAgentRunFormComponentExtended_div_43_kendo_panelbar_item_10_ng_template_1_Template(rf, ctx) { if (rf & 1) {
471
- i0.ɵɵelementStart(0, "div", 82);
472
- i0.ɵɵelement(1, "mj-code-editor", 83);
488
+ function AIAgentRunFormComponentExtended_div_47_kendo_panelbar_item_10_ng_template_1_Template(rf, ctx) { if (rf & 1) {
489
+ i0.ɵɵelementStart(0, "div", 86);
490
+ i0.ɵɵelement(1, "mj-code-editor", 87);
473
491
  i0.ɵɵelementEnd();
474
492
  } if (rf & 2) {
475
493
  const ctx_r0 = i0.ɵɵnextContext(3);
476
494
  i0.ɵɵadvance();
477
495
  i0.ɵɵproperty("ngModel", ctx_r0.parsedFinalPayload)("language", "json")("readonly", true);
478
496
  } }
479
- function AIAgentRunFormComponentExtended_div_43_kendo_panelbar_item_10_Template(rf, ctx) { if (rf & 1) {
480
- i0.ɵɵelementStart(0, "kendo-panelbar-item", 85);
481
- i0.ɵɵtemplate(1, AIAgentRunFormComponentExtended_div_43_kendo_panelbar_item_10_ng_template_1_Template, 2, 3, "ng-template", 66);
497
+ function AIAgentRunFormComponentExtended_div_47_kendo_panelbar_item_10_Template(rf, ctx) { if (rf & 1) {
498
+ i0.ɵɵelementStart(0, "kendo-panelbar-item", 89);
499
+ i0.ɵɵtemplate(1, AIAgentRunFormComponentExtended_div_47_kendo_panelbar_item_10_ng_template_1_Template, 2, 3, "ng-template", 70);
482
500
  i0.ɵɵelementEnd();
483
501
  } }
484
- function AIAgentRunFormComponentExtended_div_43_kendo_panelbar_item_11_ng_template_1_Template(rf, ctx) { if (rf & 1) {
485
- i0.ɵɵelementStart(0, "div", 87);
486
- i0.ɵɵelement(1, "mj-deep-diff", 59);
502
+ function AIAgentRunFormComponentExtended_div_47_kendo_panelbar_item_11_ng_template_1_Template(rf, ctx) { if (rf & 1) {
503
+ i0.ɵɵelementStart(0, "div", 91);
504
+ i0.ɵɵelement(1, "mj-deep-diff", 61);
487
505
  i0.ɵɵelementEnd();
488
506
  } if (rf & 2) {
489
507
  const ctx_r0 = i0.ɵɵnextContext(3);
490
508
  i0.ɵɵadvance();
491
509
  i0.ɵɵproperty("oldValue", ctx_r0.startingPayloadObject)("newValue", ctx_r0.finalPayloadObject)("title", "")("showSummary", true)("showUnchanged", false)("expandAll", false)("maxDepth", 10)("maxStringLength", 200)("treatNullAsUndefined", true);
492
510
  } }
493
- function AIAgentRunFormComponentExtended_div_43_kendo_panelbar_item_11_Template(rf, ctx) { if (rf & 1) {
494
- i0.ɵɵelementStart(0, "kendo-panelbar-item", 86);
495
- i0.ɵɵtemplate(1, AIAgentRunFormComponentExtended_div_43_kendo_panelbar_item_11_ng_template_1_Template, 2, 9, "ng-template", 66);
511
+ function AIAgentRunFormComponentExtended_div_47_kendo_panelbar_item_11_Template(rf, ctx) { if (rf & 1) {
512
+ i0.ɵɵelementStart(0, "kendo-panelbar-item", 90);
513
+ i0.ɵɵtemplate(1, AIAgentRunFormComponentExtended_div_47_kendo_panelbar_item_11_ng_template_1_Template, 2, 9, "ng-template", 70);
496
514
  i0.ɵɵelementEnd();
497
515
  } }
498
- function AIAgentRunFormComponentExtended_div_43_Template(rf, ctx) { if (rf & 1) {
499
- i0.ɵɵelementStart(0, "div", 64)(1, "kendo-panelbar")(2, "kendo-panelbar-item", 65);
500
- i0.ɵɵtemplate(3, AIAgentRunFormComponentExtended_div_43_ng_template_3_Template, 31, 9, "ng-template", 66);
516
+ function AIAgentRunFormComponentExtended_div_47_Template(rf, ctx) { if (rf & 1) {
517
+ i0.ɵɵelementStart(0, "div", 68)(1, "kendo-panelbar")(2, "kendo-panelbar-item", 69);
518
+ i0.ɵɵtemplate(3, AIAgentRunFormComponentExtended_div_47_ng_template_3_Template, 31, 9, "ng-template", 70);
501
519
  i0.ɵɵelementEnd();
502
- i0.ɵɵelementStart(4, "kendo-panelbar-item", 67);
503
- i0.ɵɵtemplate(5, AIAgentRunFormComponentExtended_div_43_ng_template_5_Template, 12, 8, "ng-template", 66);
520
+ i0.ɵɵelementStart(4, "kendo-panelbar-item", 71);
521
+ i0.ɵɵtemplate(5, AIAgentRunFormComponentExtended_div_47_ng_template_5_Template, 12, 8, "ng-template", 70);
504
522
  i0.ɵɵelementEnd();
505
- i0.ɵɵelementStart(6, "kendo-panelbar-item", 68);
506
- i0.ɵɵtemplate(7, AIAgentRunFormComponentExtended_div_43_ng_template_7_Template, 31, 20, "ng-template", 66);
523
+ i0.ɵɵelementStart(6, "kendo-panelbar-item", 72);
524
+ i0.ɵɵtemplate(7, AIAgentRunFormComponentExtended_div_47_ng_template_7_Template, 31, 20, "ng-template", 70);
507
525
  i0.ɵɵelementEnd();
508
- i0.ɵɵtemplate(8, AIAgentRunFormComponentExtended_div_43_kendo_panelbar_item_8_Template, 2, 0, "kendo-panelbar-item", 69)(9, AIAgentRunFormComponentExtended_div_43_kendo_panelbar_item_9_Template, 2, 0, "kendo-panelbar-item", 70)(10, AIAgentRunFormComponentExtended_div_43_kendo_panelbar_item_10_Template, 2, 0, "kendo-panelbar-item", 71)(11, AIAgentRunFormComponentExtended_div_43_kendo_panelbar_item_11_Template, 2, 0, "kendo-panelbar-item", 72);
526
+ i0.ɵɵtemplate(8, AIAgentRunFormComponentExtended_div_47_kendo_panelbar_item_8_Template, 2, 0, "kendo-panelbar-item", 73)(9, AIAgentRunFormComponentExtended_div_47_kendo_panelbar_item_9_Template, 2, 0, "kendo-panelbar-item", 74)(10, AIAgentRunFormComponentExtended_div_47_kendo_panelbar_item_10_Template, 2, 0, "kendo-panelbar-item", 75)(11, AIAgentRunFormComponentExtended_div_47_kendo_panelbar_item_11_Template, 2, 0, "kendo-panelbar-item", 76);
509
527
  i0.ɵɵelementEnd()();
510
528
  } if (rf & 2) {
511
529
  const ctx_r0 = i0.ɵɵnextContext();
@@ -533,6 +551,7 @@ let AIAgentRunFormComponentExtended = class AIAgentRunFormComponentExtended exte
533
551
  this.error = null;
534
552
  this.selectedItemJsonString = '{}';
535
553
  this.detailPaneTab = 'diff';
554
+ this.analyticsLoaded = false;
536
555
  this.agent = null;
537
556
  }
538
557
  async ngOnInit() {
@@ -559,6 +578,15 @@ let AIAgentRunFormComponentExtended = class AIAgentRunFormComponentExtended exte
559
578
  console.error('Error loading agent:', error);
560
579
  }
561
580
  }
581
+ changeTab(tab) {
582
+ this.activeTab = tab;
583
+ // Lazy load analytics when the tab is first accessed
584
+ if (tab === 'analytics' && !this.analyticsLoaded) {
585
+ this.analyticsLoaded = true;
586
+ // The component will load data in its ngOnInit
587
+ this.cdr.detectChanges();
588
+ }
589
+ }
562
590
  calculateDuration(start, end) {
563
591
  if (!end)
564
592
  return 'Running...';
@@ -604,7 +632,19 @@ let AIAgentRunFormComponentExtended = class AIAgentRunFormComponentExtended exte
604
632
  SharedService.Instance.OpenEntityRecord(event.entityName, CompositeKey.FromID(event.recordId));
605
633
  }
606
634
  refreshData() {
607
- // Timeline component will handle its own refresh
635
+ // Reload the agent run record to get latest status
636
+ if (this.record?.ID) {
637
+ this.record.Load(this.record.ID).then(() => {
638
+ // Trigger timeline refresh
639
+ if (this.timelineComponent) {
640
+ this.timelineComponent.loadData();
641
+ }
642
+ // Trigger analytics refresh
643
+ if (this.analyticsComponent) {
644
+ this.analyticsComponent.loadData();
645
+ }
646
+ });
647
+ }
608
648
  }
609
649
  getSelectedItemJson() {
610
650
  if (!this.selectedTimelineItem)
@@ -875,49 +915,61 @@ let AIAgentRunFormComponentExtended = class AIAgentRunFormComponentExtended exte
875
915
  }
876
916
  }
877
917
  static { this.ɵfac = function AIAgentRunFormComponentExtended_Factory(t) { return new (t || AIAgentRunFormComponentExtended)(i0.ɵɵdirectiveInject(i0.ElementRef), i0.ɵɵdirectiveInject(i1.SharedService), i0.ɵɵdirectiveInject(i2.Router), i0.ɵɵdirectiveInject(i2.ActivatedRoute), i0.ɵɵdirectiveInject(i0.ChangeDetectorRef)); }; }
878
- static { this.ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: AIAgentRunFormComponentExtended, selectors: [["mj-ai-agent-run-form"]], features: [i0.ɵɵInheritDefinitionFeature], decls: 44, vars: 21, consts: [[1, "record-form-container", "ai-agent-run-form"], [1, "record-form"], [1, "header"], [1, "header-content"], [1, "header-left"], [1, "icon-wrapper"], [1, "fas", "fa-robot"], [1, "header-info"], [1, "meta-info"], ["class", "agent-name", 4, "ngIf"], [1, "run-id"], ["class", "parent-run", 4, "ngIf"], [1, "header-right"], [1, "status-badge"], [1, "fas", 3, "ngClass"], [1, "header-actions"], ["title", "Refresh", 1, "btn-icon", 3, "click"], [1, "fas", "fa-sync-alt"], [1, "header-stats"], [1, "stat"], [1, "label"], [1, "value"], ["class", "stat", 4, "ngIf"], [1, "tabs"], [1, "tab", 3, "click"], [1, "fas", "fa-stream"], [1, "fas", "fa-info-circle"], [1, "content-area"], ["class", "tab-content", "style", "height: 100%;", 4, "ngIf"], ["class", "tab-content", 4, "ngIf"], [1, "agent-name"], [1, "parent-run"], [1, "fas", "fa-level-up-alt"], [1, "parent-link", 3, "click"], [1, "tab-content", 2, "height", "100%"], ["orientation", "horizontal", 2, "height", "100%"], [3, "min"], [3, "itemSelected", "navigateToEntity", "aiAgentRunId", "autoRefresh", "refreshInterval"], [3, "size", "min", "collapsed"], ["class", "json-detail-pane", 4, "ngIf"], [1, "json-detail-pane"], [1, "json-pane-header"], ["title", "Close", 1, "btn-icon", 3, "click"], [1, "fas", "fa-times"], [1, "json-pane-content"], [1, "json-meta"], [1, "meta-item"], [1, "status-badge", "small"], ["class", "action-link", 4, "ngIf"], [1, "detail-pane-tabs"], [1, "detail-pane-content"], [1, "step-payload-diff"], [1, "json-viewer"], [1, "action-link"], [1, "btn-link", 3, "click"], [1, "fas", "fa-external-link-alt"], [1, "detail-tab", 3, "click"], [1, "fa-solid", "fa-code-branch"], [1, "fa-solid", "fa-code"], [3, "oldValue", "newValue", "title", "showSummary", "showUnchanged", "expandAll", "maxDepth", "maxStringLength", "treatNullAsUndefined"], [1, "json-toolbar"], ["title", "Copy JSON", 1, "btn-icon", 3, "click"], [1, "fas", "fa-copy"], [2, "height", "calc(100% - 40px)", "width", "100%", 3, "ngModelChange", "ngModel", "language", "readonly"], [1, "tab-content"], ["title", "General Information", 3, "expanded"], ["kendoPanelBarContent", ""], ["title", "Execution Status"], ["title", "Usage & Cost"], ["title", "Result", 4, "ngIf"], ["title", "Starting Payload", 4, "ngIf"], ["title", "Final Payload", 4, "ngIf"], ["title", "Payload Diff", 4, "ngIf"], [1, "details-grid"], [1, "detail-item"], ["href", "javascript:void(0)", 1, "entity-link", 3, "click"], ["href", "javascript:void(0)", "class", "entity-link", 3, "click", 4, "ngIf"], [4, "ngIf"], ["class", "detail-item full-width", 4, "ngIf"], [1, "detail-item", "full-width"], [1, "error-message"], ["title", "Result"], [1, "result-viewer"], [2, "height", "300px", "width", "100%", 3, "ngModel", "language", "readonly"], ["title", "Starting Payload"], ["title", "Final Payload"], ["title", "Payload Diff"], [2, "padding", "20px", "background", "#f8f9fa"]], template: function AIAgentRunFormComponentExtended_Template(rf, ctx) { if (rf & 1) {
879
- i0.ɵɵelementStart(0, "div", 0)(1, "div", 1)(2, "div", 2)(3, "div", 3)(4, "div", 4)(5, "div", 5);
880
- i0.ɵɵelement(6, "i", 6);
918
+ static { this.ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: AIAgentRunFormComponentExtended, selectors: [["mj-ai-agent-run-form"]], viewQuery: function AIAgentRunFormComponentExtended_Query(rf, ctx) { if (rf & 1) {
919
+ i0.ɵɵviewQuery(AIAgentRunTimelineComponent, 5);
920
+ i0.ɵɵviewQuery(AIAgentRunAnalyticsComponent, 5);
921
+ } if (rf & 2) {
922
+ let _t;
923
+ i0.ɵɵqueryRefresh(_t = i0.ɵɵloadQuery()) && (ctx.timelineComponent = _t.first);
924
+ i0.ɵɵqueryRefresh(_t = i0.ɵɵloadQuery()) && (ctx.analyticsComponent = _t.first);
925
+ } }, features: [i0.ɵɵInheritDefinitionFeature], decls: 48, vars: 24, consts: [["analyticsComponent", ""], [1, "record-form-container", "ai-agent-run-form"], [1, "record-form"], [1, "header"], [1, "header-content"], [1, "header-left"], [1, "icon-wrapper"], [1, "fas", "fa-robot"], [1, "header-info"], [1, "meta-info"], ["class", "agent-name", 4, "ngIf"], [1, "run-id"], ["class", "parent-run", 4, "ngIf"], [1, "header-right"], [1, "status-badge"], [1, "fas", 3, "ngClass"], [1, "header-actions"], ["title", "Refresh", 1, "btn-icon", 3, "click"], [1, "fas", "fa-sync-alt"], [1, "header-stats"], [1, "stat"], [1, "label"], [1, "value"], ["class", "stat", 4, "ngIf"], [1, "tabs"], [1, "tab", 3, "click"], [1, "fas", "fa-stream"], [1, "fas", "fa-chart-line"], [1, "fas", "fa-info-circle"], [1, "content-area"], ["class", "tab-content", "style", "height: 100%;", 4, "ngIf"], ["class", "tab-content", 4, "ngIf"], [1, "agent-name"], [1, "parent-run"], [1, "fas", "fa-level-up-alt"], [1, "parent-link", 3, "click"], [1, "tab-content", 2, "height", "100%"], ["orientation", "horizontal", 2, "height", "100%"], [3, "min"], [3, "itemSelected", "navigateToEntity", "aiAgentRunId", "autoRefresh", "refreshInterval"], [3, "size", "min", "collapsed"], ["class", "json-detail-pane", 4, "ngIf"], [1, "json-detail-pane"], [1, "json-pane-header"], ["title", "Close", 1, "btn-icon", 3, "click"], [1, "fas", "fa-times"], [1, "json-pane-content"], [1, "json-meta"], [1, "meta-item"], [1, "status-badge", "small"], ["class", "action-link", 4, "ngIf"], [1, "detail-pane-tabs"], [1, "detail-pane-content"], [1, "step-payload-diff"], [1, "json-viewer"], [1, "action-link"], [1, "btn-link", 3, "click"], [1, "fas", "fa-external-link-alt"], [1, "detail-tab", 3, "click"], [1, "fa-solid", "fa-code-branch"], [1, "fa-solid", "fa-code"], [3, "oldValue", "newValue", "title", "showSummary", "showUnchanged", "expandAll", "maxDepth", "maxStringLength", "treatNullAsUndefined"], [1, "json-toolbar"], ["title", "Copy JSON", 1, "btn-icon", 3, "click"], [1, "fas", "fa-copy"], [2, "height", "calc(100% - 40px)", "width", "100%", 3, "ngModelChange", "ngModel", "language", "readonly"], [3, "agentRunId", 4, "ngIf"], [3, "agentRunId"], [1, "tab-content"], ["title", "General Information", 3, "expanded"], ["kendoPanelBarContent", ""], ["title", "Execution Status"], ["title", "Usage & Cost"], ["title", "Result", 4, "ngIf"], ["title", "Starting Payload", 4, "ngIf"], ["title", "Final Payload", 4, "ngIf"], ["title", "Payload Diff", 4, "ngIf"], [1, "details-grid"], [1, "detail-item"], ["href", "javascript:void(0)", 1, "entity-link", 3, "click"], ["href", "javascript:void(0)", "class", "entity-link", 3, "click", 4, "ngIf"], [4, "ngIf"], ["class", "detail-item full-width", 4, "ngIf"], [1, "detail-item", "full-width"], [1, "error-message"], ["title", "Result"], [1, "result-viewer"], [2, "height", "300px", "width", "100%", 3, "ngModel", "language", "readonly"], ["title", "Starting Payload"], ["title", "Final Payload"], ["title", "Payload Diff"], [2, "padding", "20px", "background", "#f8f9fa"]], template: function AIAgentRunFormComponentExtended_Template(rf, ctx) { if (rf & 1) {
926
+ i0.ɵɵelementStart(0, "div", 1)(1, "div", 2)(2, "div", 3)(3, "div", 4)(4, "div", 5)(5, "div", 6);
927
+ i0.ɵɵelement(6, "i", 7);
881
928
  i0.ɵɵelementEnd();
882
- i0.ɵɵelementStart(7, "div", 7)(8, "h2");
929
+ i0.ɵɵelementStart(7, "div", 8)(8, "h2");
883
930
  i0.ɵɵtext(9, "AI Agent Run");
884
931
  i0.ɵɵelementEnd();
885
- i0.ɵɵelementStart(10, "div", 8);
886
- i0.ɵɵtemplate(11, AIAgentRunFormComponentExtended_span_11_Template, 2, 1, "span", 9);
887
- i0.ɵɵelementStart(12, "span", 10);
932
+ i0.ɵɵelementStart(10, "div", 9);
933
+ i0.ɵɵtemplate(11, AIAgentRunFormComponentExtended_span_11_Template, 2, 1, "span", 10);
934
+ i0.ɵɵelementStart(12, "span", 11);
888
935
  i0.ɵɵtext(13);
889
936
  i0.ɵɵelementEnd();
890
- i0.ɵɵtemplate(14, AIAgentRunFormComponentExtended_span_14_Template, 4, 0, "span", 11);
937
+ i0.ɵɵtemplate(14, AIAgentRunFormComponentExtended_span_14_Template, 4, 0, "span", 12);
891
938
  i0.ɵɵelementEnd()()();
892
- i0.ɵɵelementStart(15, "div", 12)(16, "div", 13);
893
- i0.ɵɵelement(17, "i", 14);
939
+ i0.ɵɵelementStart(15, "div", 13)(16, "div", 14);
940
+ i0.ɵɵelement(17, "i", 15);
894
941
  i0.ɵɵtext(18);
895
942
  i0.ɵɵelementEnd();
896
- i0.ɵɵelementStart(19, "div", 15)(20, "button", 16);
943
+ i0.ɵɵelementStart(19, "div", 16)(20, "button", 17);
897
944
  i0.ɵɵlistener("click", function AIAgentRunFormComponentExtended_Template_button_click_20_listener() { return ctx.refreshData(); });
898
- i0.ɵɵelement(21, "i", 17);
945
+ i0.ɵɵelement(21, "i", 18);
899
946
  i0.ɵɵelementEnd()()()();
900
- i0.ɵɵelementStart(22, "div", 18)(23, "div", 19)(24, "span", 20);
947
+ i0.ɵɵelementStart(22, "div", 19)(23, "div", 20)(24, "span", 21);
901
948
  i0.ɵɵtext(25, "Started");
902
949
  i0.ɵɵelementEnd();
903
- i0.ɵɵelementStart(26, "span", 21);
950
+ i0.ɵɵelementStart(26, "span", 22);
904
951
  i0.ɵɵtext(27);
905
952
  i0.ɵɵpipe(28, "date");
906
953
  i0.ɵɵelementEnd()();
907
- i0.ɵɵtemplate(29, AIAgentRunFormComponentExtended_div_29_Template, 6, 4, "div", 22)(30, AIAgentRunFormComponentExtended_div_30_Template, 5, 1, "div", 22)(31, AIAgentRunFormComponentExtended_div_31_Template, 5, 5, "div", 22)(32, AIAgentRunFormComponentExtended_div_32_Template, 6, 4, "div", 22)(33, AIAgentRunFormComponentExtended_div_33_Template, 6, 4, "div", 22);
954
+ i0.ɵɵtemplate(29, AIAgentRunFormComponentExtended_div_29_Template, 6, 4, "div", 23)(30, AIAgentRunFormComponentExtended_div_30_Template, 5, 1, "div", 23)(31, AIAgentRunFormComponentExtended_div_31_Template, 5, 5, "div", 23)(32, AIAgentRunFormComponentExtended_div_32_Template, 6, 4, "div", 23)(33, AIAgentRunFormComponentExtended_div_33_Template, 6, 4, "div", 23);
908
955
  i0.ɵɵelementEnd()();
909
- i0.ɵɵelementStart(34, "div", 23)(35, "button", 24);
910
- i0.ɵɵlistener("click", function AIAgentRunFormComponentExtended_Template_button_click_35_listener() { return ctx.activeTab = "timeline"; });
911
- i0.ɵɵelement(36, "i", 25);
956
+ i0.ɵɵelementStart(34, "div", 24)(35, "button", 25);
957
+ i0.ɵɵlistener("click", function AIAgentRunFormComponentExtended_Template_button_click_35_listener() { return ctx.changeTab("timeline"); });
958
+ i0.ɵɵelement(36, "i", 26);
912
959
  i0.ɵɵtext(37, " Timeline ");
913
960
  i0.ɵɵelementEnd();
914
- i0.ɵɵelementStart(38, "button", 24);
915
- i0.ɵɵlistener("click", function AIAgentRunFormComponentExtended_Template_button_click_38_listener() { return ctx.activeTab = "details"; });
916
- i0.ɵɵelement(39, "i", 26);
917
- i0.ɵɵtext(40, " Details ");
961
+ i0.ɵɵelementStart(38, "button", 25);
962
+ i0.ɵɵlistener("click", function AIAgentRunFormComponentExtended_Template_button_click_38_listener() { return ctx.changeTab("analytics"); });
963
+ i0.ɵɵelement(39, "i", 27);
964
+ i0.ɵɵtext(40, " Analytics ");
965
+ i0.ɵɵelementEnd();
966
+ i0.ɵɵelementStart(41, "button", 25);
967
+ i0.ɵɵlistener("click", function AIAgentRunFormComponentExtended_Template_button_click_41_listener() { return ctx.changeTab("details"); });
968
+ i0.ɵɵelement(42, "i", 28);
969
+ i0.ɵɵtext(43, " Details ");
918
970
  i0.ɵɵelementEnd()();
919
- i0.ɵɵelementStart(41, "div", 27);
920
- i0.ɵɵtemplate(42, AIAgentRunFormComponentExtended_div_42_Template, 6, 8, "div", 28)(43, AIAgentRunFormComponentExtended_div_43_Template, 12, 5, "div", 29);
971
+ i0.ɵɵelementStart(44, "div", 29);
972
+ i0.ɵɵtemplate(45, AIAgentRunFormComponentExtended_div_45_Template, 6, 8, "div", 30)(46, AIAgentRunFormComponentExtended_div_46_Template, 2, 1, "div", 30)(47, AIAgentRunFormComponentExtended_div_47_Template, 12, 5, "div", 31);
921
973
  i0.ɵɵelementEnd()()();
922
974
  } if (rf & 2) {
923
975
  i0.ɵɵadvance(11);
@@ -933,7 +985,7 @@ let AIAgentRunFormComponentExtended = class AIAgentRunFormComponentExtended exte
933
985
  i0.ɵɵadvance();
934
986
  i0.ɵɵtextInterpolate1(" ", ctx.record.Status, " ");
935
987
  i0.ɵɵadvance(9);
936
- i0.ɵɵtextInterpolate(i0.ɵɵpipeBind2(28, 18, ctx.record.StartedAt, "medium"));
988
+ i0.ɵɵtextInterpolate(i0.ɵɵpipeBind2(28, 21, ctx.record.StartedAt, "medium"));
937
989
  i0.ɵɵadvance(2);
938
990
  i0.ɵɵproperty("ngIf", ctx.record.CompletedAt);
939
991
  i0.ɵɵadvance();
@@ -947,12 +999,16 @@ let AIAgentRunFormComponentExtended = class AIAgentRunFormComponentExtended exte
947
999
  i0.ɵɵadvance(2);
948
1000
  i0.ɵɵclassProp("active", ctx.activeTab === "timeline");
949
1001
  i0.ɵɵadvance(3);
1002
+ i0.ɵɵclassProp("active", ctx.activeTab === "analytics");
1003
+ i0.ɵɵadvance(3);
950
1004
  i0.ɵɵclassProp("active", ctx.activeTab === "details");
951
1005
  i0.ɵɵadvance(4);
952
1006
  i0.ɵɵproperty("ngIf", ctx.activeTab === "timeline");
953
1007
  i0.ɵɵadvance();
1008
+ i0.ɵɵproperty("ngIf", ctx.activeTab === "analytics");
1009
+ i0.ɵɵadvance();
954
1010
  i0.ɵɵproperty("ngIf", ctx.activeTab === "details");
955
- } }, dependencies: [i3.NgClass, i3.NgIf, i4.NgControlStatus, i4.NgModel, i5.PanelBarComponent, i5.PanelBarItemComponent, i5.PanelBarContentDirective, i5.SplitterComponent, i5.SplitterPaneComponent, i6.CodeEditorComponent, i7.DeepDiffComponent, i8.AIAgentRunTimelineComponent, i3.DecimalPipe, i3.DatePipe], styles: [".ai-agent-run-form[_ngcontent-%COMP%] {\n height: 100%;\n overflow: auto;\n}\n\n\n\n.header[_ngcontent-%COMP%] {\n background: linear-gradient(135deg, #ffffff 0%, #f8f9fa 100%);\n border-bottom: 1px solid #e0e6ed;\n padding: 20px;\n box-shadow: 0 2px 4px rgba(0,0,0,0.04);\n}\n\n.header-content[_ngcontent-%COMP%] {\n display: flex;\n justify-content: space-between;\n align-items: flex-start;\n margin-bottom: 16px;\n}\n\n.header-left[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 16px;\n}\n\n.icon-wrapper[_ngcontent-%COMP%] {\n width: 48px;\n height: 48px;\n background: linear-gradient(135deg, #2196f3, #1976d2);\n border-radius: 12px;\n display: flex;\n align-items: center;\n justify-content: center;\n color: white;\n font-size: 20px;\n}\n\n.header-info[_ngcontent-%COMP%] h2[_ngcontent-%COMP%] {\n margin: 0;\n font-size: 24px;\n font-weight: 600;\n color: #2c3e50;\n}\n\n.meta-info[_ngcontent-%COMP%] {\n display: flex;\n gap: 12px;\n margin-top: 4px;\n font-size: 14px;\n color: #6c757d;\n}\n\n.parent-run[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 6px;\n}\n\n.parent-link[_ngcontent-%COMP%] {\n color: #ff6358;\n text-decoration: none;\n cursor: pointer;\n transition: color 0.2s;\n}\n\n.parent-link[_ngcontent-%COMP%]:hover {\n color: #ff4444;\n text-decoration: underline;\n}\n\n.agent-name[_ngcontent-%COMP%] {\n font-weight: 500;\n color: #495057;\n}\n\n.run-id[_ngcontent-%COMP%] {\n font-family: monospace;\n font-size: 12px;\n opacity: 0.7;\n}\n\n.header-right[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 16px;\n}\n\n.status-badge[_ngcontent-%COMP%] {\n padding: 6px 16px;\n border-radius: 20px;\n font-size: 13px;\n font-weight: 600;\n text-transform: uppercase;\n letter-spacing: 0.5px;\n display: inline-flex;\n align-items: center;\n gap: 6px;\n}\n\n.status-badge[data-status=\"Running\"][_ngcontent-%COMP%] {\n background: #e3f2fd;\n color: #1976d2;\n}\n\n.status-badge[data-status=\"Completed\"][_ngcontent-%COMP%] {\n background: #d4edda;\n color: #155724;\n}\n\n.status-badge[data-status=\"Failed\"][_ngcontent-%COMP%] {\n background: #f8d7da;\n color: #721c24;\n}\n\n.status-badge[data-status=\"Cancelled\"][_ngcontent-%COMP%] {\n background: #fff3cd;\n color: #856404;\n}\n\n.status-badge[data-status=\"Paused\"][_ngcontent-%COMP%] {\n background: #e2e3e5;\n color: #383d41;\n}\n\n.status-badge.small[_ngcontent-%COMP%] {\n padding: 4px 12px;\n font-size: 11px;\n}\n\n.header-actions[_ngcontent-%COMP%] {\n display: flex;\n gap: 8px;\n}\n\n.btn-icon[_ngcontent-%COMP%] {\n width: 36px;\n height: 36px;\n border: 1px solid #dee2e6;\n background: white;\n border-radius: 8px;\n display: flex;\n align-items: center;\n justify-content: center;\n cursor: pointer;\n transition: all 0.2s ease;\n color: #6c757d;\n}\n\n.btn-icon[_ngcontent-%COMP%]:hover {\n background: #f8f9fa;\n border-color: #adb5bd;\n color: #495057;\n}\n\n.header-stats[_ngcontent-%COMP%] {\n display: flex;\n gap: 24px;\n padding-top: 12px;\n border-top: 1px solid #e9ecef;\n}\n\n.stat[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n gap: 4px;\n}\n\n.stat[_ngcontent-%COMP%] .label[_ngcontent-%COMP%] {\n font-size: 12px;\n color: #6c757d;\n text-transform: uppercase;\n letter-spacing: 0.5px;\n}\n\n.stat[_ngcontent-%COMP%] .value[_ngcontent-%COMP%] {\n font-size: 14px;\n font-weight: 500;\n color: #495057;\n}\n\n.stat[_ngcontent-%COMP%] .value.success[_ngcontent-%COMP%] {\n color: #28a745;\n}\n\n.stat[_ngcontent-%COMP%] .value.error[_ngcontent-%COMP%] {\n color: #dc3545;\n}\n\n\n\n.tabs[_ngcontent-%COMP%] {\n display: flex;\n border-bottom: 1px solid #dee2e6;\n background: #f8f9fa;\n}\n\n.tab[_ngcontent-%COMP%] {\n padding: 12px 24px;\n border: none;\n background: transparent;\n cursor: pointer;\n font-size: 14px;\n font-weight: 500;\n color: #6c757d;\n display: flex;\n align-items: center;\n gap: 8px;\n transition: all 0.2s ease;\n border-bottom: 3px solid transparent;\n}\n\n.tab[_ngcontent-%COMP%]:hover {\n color: #495057;\n background: rgba(0,0,0,0.02);\n}\n\n.tab.active[_ngcontent-%COMP%] {\n color: #2196f3;\n border-bottom-color: #2196f3;\n background: white;\n}\n\n\n\n.content-area[_ngcontent-%COMP%] {\n position: relative;\n height: calc(100vh - 280px);\n overflow: auto;\n background: white;\n}\n\n.tab-content[_ngcontent-%COMP%] {\n height: 100%;\n overflow: auto;\n}\n\n\n\n.tab-content[ng-reflect-ng-if=\"true\"][_ngcontent-%COMP%] > kendo-panelbar[_ngcontent-%COMP%] {\n height: 100%;\n overflow-y: auto;\n}\n\n\n\n.json-detail-pane[_ngcontent-%COMP%] {\n height: 100%;\n display: flex;\n flex-direction: column;\n background: #f8f9fa;\n border-left: 1px solid #e0e6ed;\n}\n\n.json-pane-header[_ngcontent-%COMP%] {\n display: flex;\n justify-content: space-between;\n align-items: center;\n padding: 16px 20px;\n background: white;\n border-bottom: 1px solid #e0e6ed;\n box-shadow: 0 2px 4px rgba(0,0,0,0.04);\n}\n\n.json-pane-header[_ngcontent-%COMP%] h3[_ngcontent-%COMP%] {\n margin: 0;\n font-size: 16px;\n font-weight: 600;\n color: #2c3e50;\n display: flex;\n align-items: center;\n gap: 8px;\n}\n\n.json-pane-header[_ngcontent-%COMP%] h3[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n color: #6b7280;\n font-size: 14px;\n}\n\n.json-pane-content[_ngcontent-%COMP%] {\n flex: 1;\n display: flex;\n flex-direction: column;\n overflow: auto;\n padding: 16px;\n}\n\n.json-meta[_ngcontent-%COMP%] {\n display: flex;\n gap: 20px;\n margin-bottom: 16px;\n flex-wrap: wrap;\n}\n\n.json-meta[_ngcontent-%COMP%] .meta-item[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n gap: 4px;\n}\n\n.json-meta[_ngcontent-%COMP%] .meta-item[_ngcontent-%COMP%] label[_ngcontent-%COMP%] {\n font-size: 11px;\n text-transform: uppercase;\n color: #6b7280;\n font-weight: 600;\n letter-spacing: 0.5px;\n}\n\n.json-meta[_ngcontent-%COMP%] .meta-item[_ngcontent-%COMP%] span[_ngcontent-%COMP%] {\n font-size: 14px;\n color: #2c3e50;\n font-weight: 500;\n}\n\n.action-link[_ngcontent-%COMP%] {\n margin-bottom: 12px;\n}\n\n.action-link[_ngcontent-%COMP%] .btn-link[_ngcontent-%COMP%] {\n background: none;\n border: none;\n color: #2196f3;\n font-size: 14px;\n cursor: pointer;\n padding: 6px 12px;\n border-radius: 4px;\n transition: all 0.2s;\n display: inline-flex;\n align-items: center;\n gap: 6px;\n}\n\n.action-link[_ngcontent-%COMP%] .btn-link[_ngcontent-%COMP%]:hover {\n background: rgba(33, 150, 243, 0.08);\n color: #1976d2;\n}\n\n.json-viewer[_ngcontent-%COMP%] {\n flex: 1;\n display: flex;\n flex-direction: column;\n background: white;\n border-radius: 8px;\n border: 1px solid #e0e6ed;\n overflow: auto;\n padding: 20px;\n gap: 10px;\n min-height: 0;\n margin-bottom: 45px;\n}\n\n\n.json-toolbar[_ngcontent-%COMP%] {\n display: flex;\n justify-content: flex-end;\n padding: 8px 12px;\n background: #f8f9fa;\n border-bottom: 1px solid #e0e6ed;\n}\n\n\n\n.timeline-container[_ngcontent-%COMP%] {\n height: 100%;\n overflow-y: auto;\n padding: 20px;\n}\n\n.timeline-container[_ngcontent-%COMP%] > .timeline[_ngcontent-%COMP%] {\n max-width: 900px;\n margin: 0 auto;\n}\n\n.timeline[_ngcontent-%COMP%] {\n position: relative;\n padding-left: 40px;\n}\n\n.timeline[_ngcontent-%COMP%]::before {\n content: '';\n position: absolute;\n left: 20px;\n top: 0;\n bottom: 0;\n width: 2px;\n background: #e9ecef;\n}\n\n.timeline-item[_ngcontent-%COMP%] {\n position: relative;\n margin-bottom: 24px;\n cursor: pointer;\n transition: all 0.2s ease;\n}\n\n.timeline-item[_ngcontent-%COMP%]:hover {\n transform: translateX(4px);\n}\n\n.timeline-item.selected[_ngcontent-%COMP%] {\n transform: translateX(8px);\n}\n\n.timeline-item.selected[_ngcontent-%COMP%] .timeline-content[_ngcontent-%COMP%] {\n background: #f0f7ff;\n border-color: #2196f3;\n}\n\n.timeline-marker[_ngcontent-%COMP%] {\n position: absolute;\n left: -30px;\n top: 0;\n width: 40px;\n height: 40px;\n border-radius: 50%;\n display: flex;\n align-items: center;\n justify-content: center;\n background: white;\n border: 3px solid #e9ecef;\n z-index: 1;\n transition: all 0.2s ease;\n}\n\n.timeline-marker[data-color=\"success\"][_ngcontent-%COMP%] {\n border-color: #28a745;\n color: #28a745;\n}\n\n.timeline-marker[data-color=\"error\"][_ngcontent-%COMP%] {\n border-color: #dc3545;\n color: #dc3545;\n}\n\n.timeline-marker[data-color=\"info\"][_ngcontent-%COMP%] {\n border-color: #17a2b8;\n color: #17a2b8;\n}\n\n.timeline-marker[data-color=\"warning\"][_ngcontent-%COMP%] {\n border-color: #ffc107;\n color: #ffc107;\n}\n\n.timeline-marker[data-color=\"secondary\"][_ngcontent-%COMP%] {\n border-color: #6c757d;\n color: #6c757d;\n}\n\n.timeline-marker.small[_ngcontent-%COMP%] {\n width: 28px;\n height: 28px;\n font-size: 12px;\n}\n\n.timeline-content[_ngcontent-%COMP%] {\n background: white;\n border: 1px solid #e9ecef;\n border-radius: 12px;\n padding: 16px 20px;\n margin-left: 20px;\n box-shadow: 0 2px 4px rgba(0,0,0,0.04);\n transition: all 0.2s ease;\n}\n\n.timeline-header[_ngcontent-%COMP%] {\n display: flex;\n justify-content: space-between;\n align-items: center;\n margin-bottom: 8px;\n}\n\n.timeline-header[_ngcontent-%COMP%] h4[_ngcontent-%COMP%] {\n margin: 0;\n font-size: 16px;\n font-weight: 600;\n color: #2c3e50;\n}\n\n.timeline-header[_ngcontent-%COMP%] h5[_ngcontent-%COMP%] {\n margin: 0;\n font-size: 14px;\n font-weight: 600;\n color: #495057;\n}\n\n.timeline-time[_ngcontent-%COMP%] {\n font-size: 12px;\n color: #6c757d;\n font-family: monospace;\n}\n\n.timeline-subtitle[_ngcontent-%COMP%] {\n font-size: 13px;\n color: #6c757d;\n margin-bottom: 8px;\n}\n\n.timeline-meta[_ngcontent-%COMP%] {\n display: flex;\n gap: 16px;\n font-size: 12px;\n color: #6c757d;\n}\n\n.timeline-meta[_ngcontent-%COMP%] .status[_ngcontent-%COMP%] {\n display: inline-flex;\n align-items: center;\n gap: 6px;\n padding: 2px 8px;\n border-radius: 12px;\n font-size: 11px;\n font-weight: 600;\n text-transform: uppercase;\n letter-spacing: 0.5px;\n}\n\n.timeline-meta[_ngcontent-%COMP%] .status[data-status=\"Completed\"][_ngcontent-%COMP%] {\n background: #d4edda;\n color: #155724;\n}\n\n.timeline-meta[_ngcontent-%COMP%] .status[data-status=\"Failed\"][_ngcontent-%COMP%] {\n background: #f8d7da;\n color: #721c24;\n}\n\n.timeline-meta[_ngcontent-%COMP%] .status[data-status=\"Running\"][_ngcontent-%COMP%] {\n background: #cce5ff;\n color: #004085;\n}\n\n.timeline-meta[_ngcontent-%COMP%] .status[data-status=\"Paused\"][_ngcontent-%COMP%] {\n background: #e2e3e5;\n color: #383d41;\n}\n\n.duration[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 4px;\n}\n\n.timeline-actions[_ngcontent-%COMP%] {\n position: absolute;\n right: 20px;\n top: 50%;\n transform: translateY(-50%);\n display: flex;\n align-items: center;\n gap: 8px;\n}\n\n.btn-link[_ngcontent-%COMP%] {\n background: none;\n border: none;\n color: #2196f3;\n cursor: pointer;\n font-size: 12px;\n display: flex;\n align-items: center;\n gap: 4px;\n padding: 4px 8px;\n border-radius: 4px;\n transition: all 0.2s ease;\n}\n\n.btn-link[_ngcontent-%COMP%]:hover {\n background: rgba(33, 150, 243, 0.1);\n}\n\n.btn-expand[_ngcontent-%COMP%] {\n width: 24px;\n height: 24px;\n border: 1px solid #dee2e6;\n background: white;\n border-radius: 4px;\n display: flex;\n align-items: center;\n justify-content: center;\n cursor: pointer;\n transition: all 0.2s ease;\n color: #6c757d;\n font-size: 12px;\n}\n\n.btn-expand[_ngcontent-%COMP%]:hover {\n background: #f8f9fa;\n border-color: #adb5bd;\n color: #495057;\n}\n\n\n\n.timeline-children[_ngcontent-%COMP%] {\n position: relative;\n margin-top: 12px;\n margin-bottom: 12px;\n}\n\n.timeline-children[_ngcontent-%COMP%]::before {\n content: '';\n position: absolute;\n left: -10px;\n top: -12px;\n bottom: 0;\n width: 2px;\n background: #e9ecef;\n}\n\n.child-item[_ngcontent-%COMP%] {\n margin-bottom: 12px;\n}\n\n.child-item[_ngcontent-%COMP%] .timeline-content[_ngcontent-%COMP%] {\n background: #f8f9fa;\n border-color: #e0e6ed;\n}\n\n\n\n.sub-run-timeline[_ngcontent-%COMP%] {\n background: rgba(33, 150, 243, 0.02);\n border-left: 2px solid rgba(33, 150, 243, 0.2);\n margin-left: 20px;\n padding-left: 20px;\n margin-top: 8px;\n margin-bottom: 8px;\n}\n\n.sub-run-item[_ngcontent-%COMP%] .timeline-marker[_ngcontent-%COMP%] {\n border-width: 2px;\n}\n\n.sub-run-item[_ngcontent-%COMP%] .timeline-content[_ngcontent-%COMP%] {\n transition: all 0.2s ease;\n}\n\n\n\n.json-detail-pane[_ngcontent-%COMP%] {\n height: 100%;\n display: flex;\n flex-direction: column;\n background: white;\n border-left: 1px solid #e0e6ed;\n}\n\n.json-pane-header[_ngcontent-%COMP%] {\n padding: 16px 20px;\n background: #f8f9fa;\n border-bottom: 1px solid #e0e6ed;\n display: flex;\n justify-content: space-between;\n align-items: center;\n flex-shrink: 0;\n}\n\n.json-pane-header[_ngcontent-%COMP%] h3[_ngcontent-%COMP%] {\n margin: 0;\n font-size: 16px;\n color: #2c3e50;\n display: flex;\n align-items: center;\n gap: 10px;\n font-weight: 600;\n}\n\n.json-pane-content[_ngcontent-%COMP%] {\n flex: 1;\n overflow-y: auto;\n display: flex;\n flex-direction: column;\n}\n\n.json-meta[_ngcontent-%COMP%] {\n padding: 16px 20px;\n border-bottom: 1px solid #e0e6ed;\n display: flex;\n gap: 20px;\n flex-wrap: wrap;\n flex-shrink: 0;\n}\n\n.json-meta[_ngcontent-%COMP%] .meta-item[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n gap: 4px;\n}\n\n.json-meta[_ngcontent-%COMP%] label[_ngcontent-%COMP%] {\n font-size: 11px;\n color: #7c8798;\n text-transform: uppercase;\n letter-spacing: 0.5px;\n}\n\n.json-meta[_ngcontent-%COMP%] span[_ngcontent-%COMP%] {\n font-size: 14px;\n color: #2c3e50;\n font-weight: 500;\n}\n\n.action-link[_ngcontent-%COMP%] {\n padding: 12px 20px;\n border-bottom: 1px solid #e0e6ed;\n flex-shrink: 0;\n}\n\n.action-link[_ngcontent-%COMP%] .btn-link[_ngcontent-%COMP%] {\n display: inline-flex;\n align-items: center;\n gap: 6px;\n color: #2196f3;\n text-decoration: none;\n font-size: 14px;\n padding: 8px 12px;\n background: #f0f7ff;\n border: 1px solid #d0e5ff;\n border-radius: 4px;\n transition: all 0.2s;\n cursor: pointer;\n}\n\n.action-link[_ngcontent-%COMP%] .btn-link[_ngcontent-%COMP%]:hover {\n background: #e1f0ff;\n border-color: #b0d5ff;\n text-decoration: none;\n}\n\n\n.json-toolbar[_ngcontent-%COMP%] {\n display: flex;\n justify-content: flex-end;\n gap: 8px;\n margin-bottom: 8px;\n}\n\n\n\n.details-grid[_ngcontent-%COMP%] {\n display: grid;\n grid-template-columns: repeat(auto-fit, minmax(250px, 1fr));\n gap: 20px;\n padding: 20px;\n}\n\n.detail-item[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n gap: 8px;\n}\n\n.detail-item.full-width[_ngcontent-%COMP%] {\n grid-column: 1 / -1;\n}\n\n.detail-item[_ngcontent-%COMP%] label[_ngcontent-%COMP%] {\n font-size: 12px;\n color: #6c757d;\n text-transform: uppercase;\n letter-spacing: 0.5px;\n}\n\n.detail-item[_ngcontent-%COMP%] span[_ngcontent-%COMP%] {\n font-size: 14px;\n color: #495057;\n}\n\n.error-message[_ngcontent-%COMP%] {\n background: #f8d7da;\n color: #721c24;\n padding: 12px;\n border-radius: 8px;\n font-size: 13px;\n}\n\n.result-viewer[_ngcontent-%COMP%], \n.state-viewer[_ngcontent-%COMP%] {\n padding: 20px;\n max-height: 450px;\n overflow: auto;\n display: flex;\n flex-direction: column;\n}\n\n.result-viewer[_ngcontent-%COMP%] mj-code-editor[_ngcontent-%COMP%], \n.state-viewer[_ngcontent-%COMP%] mj-code-editor[_ngcontent-%COMP%] {\n flex: 1;\n min-height: 0;\n}\n\n\n\n.empty-state[_ngcontent-%COMP%], \n.loading-state[_ngcontent-%COMP%], \n.error-state[_ngcontent-%COMP%] {\n text-align: center;\n padding: 60px 20px;\n color: #6c757d;\n}\n\n.empty-state[_ngcontent-%COMP%] i[_ngcontent-%COMP%], \n.loading-state[_ngcontent-%COMP%] i[_ngcontent-%COMP%], \n.error-state[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n opacity: 0.3;\n margin-bottom: 16px;\n}\n\n\n\n@media (max-width: 768px) {\n .header-content[_ngcontent-%COMP%] {\n flex-direction: column;\n gap: 16px;\n }\n \n .header-stats[_ngcontent-%COMP%] {\n flex-wrap: wrap;\n }\n \n .json-detail-pane[_ngcontent-%COMP%] {\n width: 100%;\n }\n \n .timeline[_ngcontent-%COMP%] {\n padding-left: 30px;\n }\n \n .timeline-marker[_ngcontent-%COMP%] {\n left: -25px;\n width: 32px;\n height: 32px;\n }\n \n .timeline-content[_ngcontent-%COMP%] {\n margin-left: 10px;\n }\n}\n\n\n\n.entity-link[_ngcontent-%COMP%] {\n color: #2196f3;\n text-decoration: none;\n transition: all 0.2s ease;\n border-bottom: 1px solid transparent;\n display: inline-block;\n}\n\n.entity-link[_ngcontent-%COMP%]:hover {\n color: #1976d2;\n border-bottom-color: #1976d2;\n}\n\n.entity-link[_ngcontent-%COMP%]:active {\n color: #0d47a1;\n}\n\n\n\n.detail-pane-tabs[_ngcontent-%COMP%] {\n display: flex;\n gap: 8px;\n margin: 8px 0 0 0;\n border-bottom: 1px solid #e0e6ed;\n padding: 0 16px;\n}\n\n.detail-tab[_ngcontent-%COMP%] {\n padding: 10px 16px;\n background: none;\n border: none;\n border-bottom: 3px solid transparent;\n color: #6c757d;\n font-size: 14px;\n font-weight: 500;\n cursor: pointer;\n transition: all 0.2s ease;\n display: flex;\n align-items: center;\n gap: 6px;\n}\n\n.detail-tab[_ngcontent-%COMP%]:hover {\n color: #495057;\n background: rgba(0, 0, 0, 0.02);\n}\n\n.detail-tab.active[_ngcontent-%COMP%] {\n color: #2196f3;\n border-bottom-color: #2196f3;\n}\n\n.detail-tab[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n font-size: 14px;\n}\n\n\n\n.detail-pane-content[_ngcontent-%COMP%] {\n flex: 1;\n overflow-y: auto;\n min-height: 0;\n margin-bottom: 35px;\n}\n\n.detail-pane-content.with-tabs[_ngcontent-%COMP%] {\n \n\n margin-top: 0;\n}\n\n\n\n.step-payload-diff[_ngcontent-%COMP%] {\n height: 100%;\n overflow-y: auto;\n padding: 16px;\n}\n\n.step-payload-diff[_ngcontent-%COMP%] mj-deep-diff[_ngcontent-%COMP%] {\n display: block;\n height: 100%;\n}\n\n\n\n.detail-pane-content[_ngcontent-%COMP%]:not(.with-tabs) .json-viewer[_ngcontent-%COMP%] {\n margin-top: 16px;\n}"] }); }
1011
+ } }, dependencies: [i3.NgClass, i3.NgIf, i4.NgControlStatus, i4.NgModel, i5.PanelBarComponent, i5.PanelBarItemComponent, i5.PanelBarContentDirective, i5.SplitterComponent, i5.SplitterPaneComponent, i6.CodeEditorComponent, i7.DeepDiffComponent, i8.AIAgentRunTimelineComponent, i9.AIAgentRunAnalyticsComponent, i3.DecimalPipe, i3.DatePipe], styles: [".ai-agent-run-form[_ngcontent-%COMP%] {\n height: 100%;\n overflow: auto;\n}\n\n\n\n.header[_ngcontent-%COMP%] {\n background: linear-gradient(135deg, #ffffff 0%, #f8f9fa 100%);\n border-bottom: 1px solid #e0e6ed;\n padding: 20px;\n box-shadow: 0 2px 4px rgba(0,0,0,0.04);\n}\n\n.header-content[_ngcontent-%COMP%] {\n display: flex;\n justify-content: space-between;\n align-items: flex-start;\n margin-bottom: 16px;\n}\n\n.header-left[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 16px;\n}\n\n.icon-wrapper[_ngcontent-%COMP%] {\n width: 48px;\n height: 48px;\n background: linear-gradient(135deg, #2196f3, #1976d2);\n border-radius: 12px;\n display: flex;\n align-items: center;\n justify-content: center;\n color: white;\n font-size: 20px;\n}\n\n.header-info[_ngcontent-%COMP%] h2[_ngcontent-%COMP%] {\n margin: 0;\n font-size: 24px;\n font-weight: 600;\n color: #2c3e50;\n}\n\n.meta-info[_ngcontent-%COMP%] {\n display: flex;\n gap: 12px;\n margin-top: 4px;\n font-size: 14px;\n color: #6c757d;\n}\n\n.parent-run[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 6px;\n}\n\n.parent-link[_ngcontent-%COMP%] {\n color: #ff6358;\n text-decoration: none;\n cursor: pointer;\n transition: color 0.2s;\n}\n\n.parent-link[_ngcontent-%COMP%]:hover {\n color: #ff4444;\n text-decoration: underline;\n}\n\n.agent-name[_ngcontent-%COMP%] {\n font-weight: 500;\n color: #495057;\n}\n\n.run-id[_ngcontent-%COMP%] {\n font-family: monospace;\n font-size: 12px;\n opacity: 0.7;\n}\n\n.header-right[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 16px;\n}\n\n.status-badge[_ngcontent-%COMP%] {\n padding: 6px 16px;\n border-radius: 20px;\n font-size: 13px;\n font-weight: 600;\n text-transform: uppercase;\n letter-spacing: 0.5px;\n display: inline-flex;\n align-items: center;\n gap: 6px;\n}\n\n.status-badge[data-status=\"Running\"][_ngcontent-%COMP%] {\n background: #e3f2fd;\n color: #1976d2;\n}\n\n.status-badge[data-status=\"Completed\"][_ngcontent-%COMP%] {\n background: #d4edda;\n color: #155724;\n}\n\n.status-badge[data-status=\"Failed\"][_ngcontent-%COMP%] {\n background: #f8d7da;\n color: #721c24;\n}\n\n.status-badge[data-status=\"Cancelled\"][_ngcontent-%COMP%] {\n background: #fff3cd;\n color: #856404;\n}\n\n.status-badge[data-status=\"Paused\"][_ngcontent-%COMP%] {\n background: #e2e3e5;\n color: #383d41;\n}\n\n.status-badge.small[_ngcontent-%COMP%] {\n padding: 4px 12px;\n font-size: 11px;\n}\n\n.header-actions[_ngcontent-%COMP%] {\n display: flex;\n gap: 8px;\n}\n\n.btn-icon[_ngcontent-%COMP%] {\n width: 36px;\n height: 36px;\n border: 1px solid #dee2e6;\n background: white;\n border-radius: 8px;\n display: flex;\n align-items: center;\n justify-content: center;\n cursor: pointer;\n transition: all 0.2s ease;\n color: #6c757d;\n}\n\n.btn-icon[_ngcontent-%COMP%]:hover {\n background: #f8f9fa;\n border-color: #adb5bd;\n color: #495057;\n}\n\n.header-stats[_ngcontent-%COMP%] {\n display: flex;\n gap: 24px;\n padding-top: 12px;\n border-top: 1px solid #e9ecef;\n}\n\n.stat[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n gap: 4px;\n}\n\n.stat[_ngcontent-%COMP%] .label[_ngcontent-%COMP%] {\n font-size: 12px;\n color: #6c757d;\n text-transform: uppercase;\n letter-spacing: 0.5px;\n}\n\n.stat[_ngcontent-%COMP%] .value[_ngcontent-%COMP%] {\n font-size: 14px;\n font-weight: 500;\n color: #495057;\n}\n\n.stat[_ngcontent-%COMP%] .value.success[_ngcontent-%COMP%] {\n color: #28a745;\n}\n\n.stat[_ngcontent-%COMP%] .value.error[_ngcontent-%COMP%] {\n color: #dc3545;\n}\n\n\n\n.tabs[_ngcontent-%COMP%] {\n display: flex;\n border-bottom: 1px solid #dee2e6;\n background: #f8f9fa;\n}\n\n.tab[_ngcontent-%COMP%] {\n padding: 12px 24px;\n border: none;\n background: transparent;\n cursor: pointer;\n font-size: 14px;\n font-weight: 500;\n color: #6c757d;\n display: flex;\n align-items: center;\n gap: 8px;\n transition: all 0.2s ease;\n border-bottom: 3px solid transparent;\n}\n\n.tab[_ngcontent-%COMP%]:hover {\n color: #495057;\n background: rgba(0,0,0,0.02);\n}\n\n.tab.active[_ngcontent-%COMP%] {\n color: #2196f3;\n border-bottom-color: #2196f3;\n background: white;\n}\n\n\n\n.content-area[_ngcontent-%COMP%] {\n position: relative;\n height: calc(100vh - 280px);\n overflow: auto;\n background: white;\n}\n\n.tab-content[_ngcontent-%COMP%] {\n height: 100%;\n overflow: auto;\n}\n\n\n\n.tab-content[ng-reflect-ng-if=\"true\"][_ngcontent-%COMP%] > kendo-panelbar[_ngcontent-%COMP%] {\n height: 100%;\n overflow-y: auto;\n}\n\n\n\n.json-detail-pane[_ngcontent-%COMP%] {\n height: 100%;\n display: flex;\n flex-direction: column;\n background: #f8f9fa;\n border-left: 1px solid #e0e6ed;\n}\n\n.json-pane-header[_ngcontent-%COMP%] {\n display: flex;\n justify-content: space-between;\n align-items: center;\n padding: 16px 20px;\n background: white;\n border-bottom: 1px solid #e0e6ed;\n box-shadow: 0 2px 4px rgba(0,0,0,0.04);\n}\n\n.json-pane-header[_ngcontent-%COMP%] h3[_ngcontent-%COMP%] {\n margin: 0;\n font-size: 16px;\n font-weight: 600;\n color: #2c3e50;\n display: flex;\n align-items: center;\n gap: 8px;\n}\n\n.json-pane-header[_ngcontent-%COMP%] h3[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n color: #6b7280;\n font-size: 14px;\n}\n\n.json-pane-content[_ngcontent-%COMP%] {\n flex: 1;\n display: flex;\n flex-direction: column;\n overflow: auto;\n padding: 16px;\n}\n\n.json-meta[_ngcontent-%COMP%] {\n display: flex;\n gap: 20px;\n margin-bottom: 16px;\n flex-wrap: wrap;\n}\n\n.json-meta[_ngcontent-%COMP%] .meta-item[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n gap: 4px;\n}\n\n.json-meta[_ngcontent-%COMP%] .meta-item[_ngcontent-%COMP%] label[_ngcontent-%COMP%] {\n font-size: 11px;\n text-transform: uppercase;\n color: #6b7280;\n font-weight: 600;\n letter-spacing: 0.5px;\n}\n\n.json-meta[_ngcontent-%COMP%] .meta-item[_ngcontent-%COMP%] span[_ngcontent-%COMP%] {\n font-size: 14px;\n color: #2c3e50;\n font-weight: 500;\n}\n\n.action-link[_ngcontent-%COMP%] {\n margin-bottom: 12px;\n}\n\n.action-link[_ngcontent-%COMP%] .btn-link[_ngcontent-%COMP%] {\n background: none;\n border: none;\n color: #2196f3;\n font-size: 14px;\n cursor: pointer;\n padding: 6px 12px;\n border-radius: 4px;\n transition: all 0.2s;\n display: inline-flex;\n align-items: center;\n gap: 6px;\n}\n\n.action-link[_ngcontent-%COMP%] .btn-link[_ngcontent-%COMP%]:hover {\n background: rgba(33, 150, 243, 0.08);\n color: #1976d2;\n}\n\n.json-viewer[_ngcontent-%COMP%] {\n flex: 1;\n display: flex;\n flex-direction: column;\n background: white;\n border-radius: 8px;\n border: 1px solid #e0e6ed;\n overflow: auto;\n padding: 20px;\n gap: 10px;\n min-height: 0;\n margin-bottom: 45px;\n}\n\n\n.json-toolbar[_ngcontent-%COMP%] {\n display: flex;\n justify-content: flex-end;\n padding: 8px 12px;\n background: #f8f9fa;\n border-bottom: 1px solid #e0e6ed;\n}\n\n\n\n.timeline-container[_ngcontent-%COMP%] {\n height: 100%;\n overflow-y: auto;\n padding: 20px;\n}\n\n.timeline-container[_ngcontent-%COMP%] > .timeline[_ngcontent-%COMP%] {\n max-width: 900px;\n margin: 0 auto;\n}\n\n.timeline[_ngcontent-%COMP%] {\n position: relative;\n padding-left: 40px;\n}\n\n.timeline[_ngcontent-%COMP%]::before {\n content: '';\n position: absolute;\n left: 20px;\n top: 0;\n bottom: 0;\n width: 2px;\n background: #e9ecef;\n}\n\n.timeline-item[_ngcontent-%COMP%] {\n position: relative;\n margin-bottom: 24px;\n cursor: pointer;\n transition: all 0.2s ease;\n}\n\n.timeline-item[_ngcontent-%COMP%]:hover {\n transform: translateX(4px);\n}\n\n.timeline-item.selected[_ngcontent-%COMP%] {\n transform: translateX(8px);\n}\n\n.timeline-item.selected[_ngcontent-%COMP%] .timeline-content[_ngcontent-%COMP%] {\n background: #f0f7ff;\n border-color: #2196f3;\n}\n\n.timeline-marker[_ngcontent-%COMP%] {\n position: absolute;\n left: -30px;\n top: 0;\n width: 40px;\n height: 40px;\n border-radius: 50%;\n display: flex;\n align-items: center;\n justify-content: center;\n background: white;\n border: 3px solid #e9ecef;\n z-index: 1;\n transition: all 0.2s ease;\n}\n\n.timeline-marker[data-color=\"success\"][_ngcontent-%COMP%] {\n border-color: #28a745;\n color: #28a745;\n}\n\n.timeline-marker[data-color=\"error\"][_ngcontent-%COMP%] {\n border-color: #dc3545;\n color: #dc3545;\n}\n\n.timeline-marker[data-color=\"info\"][_ngcontent-%COMP%] {\n border-color: #17a2b8;\n color: #17a2b8;\n}\n\n.timeline-marker[data-color=\"warning\"][_ngcontent-%COMP%] {\n border-color: #ffc107;\n color: #ffc107;\n}\n\n.timeline-marker[data-color=\"secondary\"][_ngcontent-%COMP%] {\n border-color: #6c757d;\n color: #6c757d;\n}\n\n.timeline-marker.small[_ngcontent-%COMP%] {\n width: 28px;\n height: 28px;\n font-size: 12px;\n}\n\n.timeline-content[_ngcontent-%COMP%] {\n background: white;\n border: 1px solid #e9ecef;\n border-radius: 12px;\n padding: 16px 20px;\n margin-left: 20px;\n box-shadow: 0 2px 4px rgba(0,0,0,0.04);\n transition: all 0.2s ease;\n}\n\n.timeline-header[_ngcontent-%COMP%] {\n display: flex;\n justify-content: space-between;\n align-items: center;\n margin-bottom: 8px;\n}\n\n.timeline-header[_ngcontent-%COMP%] h4[_ngcontent-%COMP%] {\n margin: 0;\n font-size: 16px;\n font-weight: 600;\n color: #2c3e50;\n}\n\n.timeline-header[_ngcontent-%COMP%] h5[_ngcontent-%COMP%] {\n margin: 0;\n font-size: 14px;\n font-weight: 600;\n color: #495057;\n}\n\n.timeline-time[_ngcontent-%COMP%] {\n font-size: 12px;\n color: #6c757d;\n font-family: monospace;\n}\n\n.timeline-subtitle[_ngcontent-%COMP%] {\n font-size: 13px;\n color: #6c757d;\n margin-bottom: 8px;\n}\n\n.timeline-meta[_ngcontent-%COMP%] {\n display: flex;\n gap: 16px;\n font-size: 12px;\n color: #6c757d;\n}\n\n.timeline-meta[_ngcontent-%COMP%] .status[_ngcontent-%COMP%] {\n display: inline-flex;\n align-items: center;\n gap: 6px;\n padding: 2px 8px;\n border-radius: 12px;\n font-size: 11px;\n font-weight: 600;\n text-transform: uppercase;\n letter-spacing: 0.5px;\n}\n\n.timeline-meta[_ngcontent-%COMP%] .status[data-status=\"Completed\"][_ngcontent-%COMP%] {\n background: #d4edda;\n color: #155724;\n}\n\n.timeline-meta[_ngcontent-%COMP%] .status[data-status=\"Failed\"][_ngcontent-%COMP%] {\n background: #f8d7da;\n color: #721c24;\n}\n\n.timeline-meta[_ngcontent-%COMP%] .status[data-status=\"Running\"][_ngcontent-%COMP%] {\n background: #cce5ff;\n color: #004085;\n}\n\n.timeline-meta[_ngcontent-%COMP%] .status[data-status=\"Paused\"][_ngcontent-%COMP%] {\n background: #e2e3e5;\n color: #383d41;\n}\n\n.duration[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 4px;\n}\n\n.timeline-actions[_ngcontent-%COMP%] {\n position: absolute;\n right: 20px;\n top: 50%;\n transform: translateY(-50%);\n display: flex;\n align-items: center;\n gap: 8px;\n}\n\n.btn-link[_ngcontent-%COMP%] {\n background: none;\n border: none;\n color: #2196f3;\n cursor: pointer;\n font-size: 12px;\n display: flex;\n align-items: center;\n gap: 4px;\n padding: 4px 8px;\n border-radius: 4px;\n transition: all 0.2s ease;\n}\n\n.btn-link[_ngcontent-%COMP%]:hover {\n background: rgba(33, 150, 243, 0.1);\n}\n\n.btn-expand[_ngcontent-%COMP%] {\n width: 24px;\n height: 24px;\n border: 1px solid #dee2e6;\n background: white;\n border-radius: 4px;\n display: flex;\n align-items: center;\n justify-content: center;\n cursor: pointer;\n transition: all 0.2s ease;\n color: #6c757d;\n font-size: 12px;\n}\n\n.btn-expand[_ngcontent-%COMP%]:hover {\n background: #f8f9fa;\n border-color: #adb5bd;\n color: #495057;\n}\n\n\n\n.timeline-children[_ngcontent-%COMP%] {\n position: relative;\n margin-top: 12px;\n margin-bottom: 12px;\n}\n\n.timeline-children[_ngcontent-%COMP%]::before {\n content: '';\n position: absolute;\n left: -10px;\n top: -12px;\n bottom: 0;\n width: 2px;\n background: #e9ecef;\n}\n\n.child-item[_ngcontent-%COMP%] {\n margin-bottom: 12px;\n}\n\n.child-item[_ngcontent-%COMP%] .timeline-content[_ngcontent-%COMP%] {\n background: #f8f9fa;\n border-color: #e0e6ed;\n}\n\n\n\n.sub-run-timeline[_ngcontent-%COMP%] {\n background: rgba(33, 150, 243, 0.02);\n border-left: 2px solid rgba(33, 150, 243, 0.2);\n margin-left: 20px;\n padding-left: 20px;\n margin-top: 8px;\n margin-bottom: 8px;\n}\n\n.sub-run-item[_ngcontent-%COMP%] .timeline-marker[_ngcontent-%COMP%] {\n border-width: 2px;\n}\n\n.sub-run-item[_ngcontent-%COMP%] .timeline-content[_ngcontent-%COMP%] {\n transition: all 0.2s ease;\n}\n\n\n\n.json-detail-pane[_ngcontent-%COMP%] {\n height: 100%;\n display: flex;\n flex-direction: column;\n background: white;\n border-left: 1px solid #e0e6ed;\n}\n\n.json-pane-header[_ngcontent-%COMP%] {\n padding: 16px 20px;\n background: #f8f9fa;\n border-bottom: 1px solid #e0e6ed;\n display: flex;\n justify-content: space-between;\n align-items: center;\n flex-shrink: 0;\n}\n\n.json-pane-header[_ngcontent-%COMP%] h3[_ngcontent-%COMP%] {\n margin: 0;\n font-size: 16px;\n color: #2c3e50;\n display: flex;\n align-items: center;\n gap: 10px;\n font-weight: 600;\n}\n\n.json-pane-content[_ngcontent-%COMP%] {\n flex: 1;\n overflow-y: auto;\n display: flex;\n flex-direction: column;\n}\n\n.json-meta[_ngcontent-%COMP%] {\n padding: 16px 20px;\n border-bottom: 1px solid #e0e6ed;\n display: flex;\n gap: 20px;\n flex-wrap: wrap;\n flex-shrink: 0;\n}\n\n.json-meta[_ngcontent-%COMP%] .meta-item[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n gap: 4px;\n}\n\n.json-meta[_ngcontent-%COMP%] label[_ngcontent-%COMP%] {\n font-size: 11px;\n color: #7c8798;\n text-transform: uppercase;\n letter-spacing: 0.5px;\n}\n\n.json-meta[_ngcontent-%COMP%] span[_ngcontent-%COMP%] {\n font-size: 14px;\n color: #2c3e50;\n font-weight: 500;\n}\n\n.action-link[_ngcontent-%COMP%] {\n padding: 12px 20px;\n border-bottom: 1px solid #e0e6ed;\n flex-shrink: 0;\n}\n\n.action-link[_ngcontent-%COMP%] .btn-link[_ngcontent-%COMP%] {\n display: inline-flex;\n align-items: center;\n gap: 6px;\n color: #2196f3;\n text-decoration: none;\n font-size: 14px;\n padding: 8px 12px;\n background: #f0f7ff;\n border: 1px solid #d0e5ff;\n border-radius: 4px;\n transition: all 0.2s;\n cursor: pointer;\n}\n\n.action-link[_ngcontent-%COMP%] .btn-link[_ngcontent-%COMP%]:hover {\n background: #e1f0ff;\n border-color: #b0d5ff;\n text-decoration: none;\n}\n\n\n.json-toolbar[_ngcontent-%COMP%] {\n display: flex;\n justify-content: flex-end;\n gap: 8px;\n margin-bottom: 8px;\n}\n\n\n\n.details-grid[_ngcontent-%COMP%] {\n display: grid;\n grid-template-columns: repeat(auto-fit, minmax(250px, 1fr));\n gap: 20px;\n padding: 20px;\n}\n\n.detail-item[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n gap: 8px;\n}\n\n.detail-item.full-width[_ngcontent-%COMP%] {\n grid-column: 1 / -1;\n}\n\n.detail-item[_ngcontent-%COMP%] label[_ngcontent-%COMP%] {\n font-size: 12px;\n color: #6c757d;\n text-transform: uppercase;\n letter-spacing: 0.5px;\n}\n\n.detail-item[_ngcontent-%COMP%] span[_ngcontent-%COMP%] {\n font-size: 14px;\n color: #495057;\n}\n\n.error-message[_ngcontent-%COMP%] {\n background: #f8d7da;\n color: #721c24;\n padding: 12px;\n border-radius: 8px;\n font-size: 13px;\n}\n\n.result-viewer[_ngcontent-%COMP%], \n.state-viewer[_ngcontent-%COMP%] {\n padding: 20px;\n max-height: 450px;\n overflow: auto;\n display: flex;\n flex-direction: column;\n}\n\n.result-viewer[_ngcontent-%COMP%] mj-code-editor[_ngcontent-%COMP%], \n.state-viewer[_ngcontent-%COMP%] mj-code-editor[_ngcontent-%COMP%] {\n flex: 1;\n min-height: 0;\n}\n\n\n\n.empty-state[_ngcontent-%COMP%], \n.loading-state[_ngcontent-%COMP%], \n.error-state[_ngcontent-%COMP%] {\n text-align: center;\n padding: 60px 20px;\n color: #6c757d;\n}\n\n.empty-state[_ngcontent-%COMP%] i[_ngcontent-%COMP%], \n.loading-state[_ngcontent-%COMP%] i[_ngcontent-%COMP%], \n.error-state[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n opacity: 0.3;\n margin-bottom: 16px;\n}\n\n\n\n@media (max-width: 768px) {\n .header-content[_ngcontent-%COMP%] {\n flex-direction: column;\n gap: 16px;\n }\n \n .header-stats[_ngcontent-%COMP%] {\n flex-wrap: wrap;\n }\n \n .json-detail-pane[_ngcontent-%COMP%] {\n width: 100%;\n }\n \n .timeline[_ngcontent-%COMP%] {\n padding-left: 30px;\n }\n \n .timeline-marker[_ngcontent-%COMP%] {\n left: -25px;\n width: 32px;\n height: 32px;\n }\n \n .timeline-content[_ngcontent-%COMP%] {\n margin-left: 10px;\n }\n}\n\n\n\n.entity-link[_ngcontent-%COMP%] {\n color: #2196f3;\n text-decoration: none;\n transition: all 0.2s ease;\n border-bottom: 1px solid transparent;\n display: inline-block;\n}\n\n.entity-link[_ngcontent-%COMP%]:hover {\n color: #1976d2;\n border-bottom-color: #1976d2;\n}\n\n.entity-link[_ngcontent-%COMP%]:active {\n color: #0d47a1;\n}\n\n\n\n.detail-pane-tabs[_ngcontent-%COMP%] {\n display: flex;\n gap: 8px;\n margin: 8px 0 0 0;\n border-bottom: 1px solid #e0e6ed;\n padding: 0 16px;\n}\n\n.detail-tab[_ngcontent-%COMP%] {\n padding: 10px 16px;\n background: none;\n border: none;\n border-bottom: 3px solid transparent;\n color: #6c757d;\n font-size: 14px;\n font-weight: 500;\n cursor: pointer;\n transition: all 0.2s ease;\n display: flex;\n align-items: center;\n gap: 6px;\n}\n\n.detail-tab[_ngcontent-%COMP%]:hover {\n color: #495057;\n background: rgba(0, 0, 0, 0.02);\n}\n\n.detail-tab.active[_ngcontent-%COMP%] {\n color: #2196f3;\n border-bottom-color: #2196f3;\n}\n\n.detail-tab[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n font-size: 14px;\n}\n\n\n\n.detail-pane-content[_ngcontent-%COMP%] {\n flex: 1;\n overflow-y: auto;\n min-height: 0;\n margin-bottom: 35px;\n}\n\n.detail-pane-content.with-tabs[_ngcontent-%COMP%] {\n \n\n margin-top: 0;\n}\n\n\n\n.step-payload-diff[_ngcontent-%COMP%] {\n height: 100%;\n overflow-y: auto;\n padding: 16px;\n}\n\n.step-payload-diff[_ngcontent-%COMP%] mj-deep-diff[_ngcontent-%COMP%] {\n display: block;\n height: 100%;\n}\n\n\n\n.detail-pane-content[_ngcontent-%COMP%]:not(.with-tabs) .json-viewer[_ngcontent-%COMP%] {\n margin-top: 16px;\n}"] }); }
956
1012
  };
957
1013
  AIAgentRunFormComponentExtended = __decorate([
958
1014
  RegisterClass(BaseFormComponent, 'MJ: AI Agent Runs')
@@ -960,8 +1016,14 @@ AIAgentRunFormComponentExtended = __decorate([
960
1016
  export { AIAgentRunFormComponentExtended };
961
1017
  (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(AIAgentRunFormComponentExtended, [{
962
1018
  type: Component,
963
- args: [{ selector: 'mj-ai-agent-run-form', template: "<div class=\"record-form-container ai-agent-run-form\">\n <div class=\"record-form\">\n <!-- Header -->\n <div class=\"header\">\n <div class=\"header-content\">\n <div class=\"header-left\">\n <div class=\"icon-wrapper\">\n <i class=\"fas fa-robot\"></i>\n </div>\n <div class=\"header-info\">\n <h2>AI Agent Run</h2>\n <div class=\"meta-info\">\n <span class=\"agent-name\" *ngIf=\"agent\">{{ agent.Name }}</span>\n <span class=\"run-id\">{{ record.ID }}</span>\n <span class=\"parent-run\" *ngIf=\"record.ParentRunID\">\n <i class=\"fas fa-level-up-alt\"></i>\n <a (click)=\"navigateToParentRun()\" class=\"parent-link\">Parent Run</a>\n </span>\n </div>\n </div>\n </div>\n <div class=\"header-right\">\n <div class=\"status-badge\" [attr.data-status]=\"record.Status\">\n <i class=\"fas\" [ngClass]=\"getStatusIcon(record.Status || '')\"></i>\n {{ record.Status }}\n </div>\n <div class=\"header-actions\">\n <button class=\"btn-icon\" (click)=\"refreshData()\" title=\"Refresh\">\n <i class=\"fas fa-sync-alt\"></i>\n </button>\n </div>\n </div>\n </div>\n <div class=\"header-stats\">\n <div class=\"stat\">\n <span class=\"label\">Started</span>\n <span class=\"value\">{{ record.StartedAt | date:'medium' }}</span>\n </div>\n <div class=\"stat\" *ngIf=\"record.CompletedAt\">\n <span class=\"label\">Completed</span>\n <span class=\"value\">{{ record.CompletedAt | date:'medium' }}</span>\n </div>\n <div class=\"stat\" *ngIf=\"record.CompletedAt\">\n <span class=\"label\">Duration</span>\n <span class=\"value\">{{ calculateDuration(record.StartedAt, record.CompletedAt) }}</span>\n </div>\n <div class=\"stat\" *ngIf=\"record.Success !== null && record.CompletedAt !== null\">\n <span class=\"label\">Result</span>\n <span class=\"value\" [class.success]=\"record.Success\" [class.error]=\"!record.Success\">\n {{ record.Success ? 'Success' : 'Failed' }}\n </span>\n </div>\n <div class=\"stat\" *ngIf=\"record.TotalTokensUsed\">\n <span class=\"label\">Tokens</span>\n <span class=\"value\">{{ record.TotalTokensUsed | number:'1.0-0' }}</span>\n </div>\n <div class=\"stat\" *ngIf=\"record.TotalCost != null && record.TotalCost > 0\">\n <span class=\"label\">Cost</span>\n <span class=\"value\">${{ record.TotalCost | number:'1.2-4' }}</span>\n </div>\n </div>\n </div>\n\n <!-- Tabs -->\n <div class=\"tabs\">\n <button class=\"tab\" [class.active]=\"activeTab === 'timeline'\" (click)=\"activeTab = 'timeline'\">\n <i class=\"fas fa-stream\"></i> Timeline\n </button>\n <button class=\"tab\" [class.active]=\"activeTab === 'details'\" (click)=\"activeTab = 'details'\">\n <i class=\"fas fa-info-circle\"></i> Details\n </button>\n </div>\n\n <!-- Content -->\n <div class=\"content-area\">\n <!-- Timeline Tab -->\n <div class=\"tab-content\" *ngIf=\"activeTab === 'timeline'\" style=\"height: 100%;\">\n <kendo-splitter style=\"height: 100%;\" orientation=\"horizontal\">\n <!-- Timeline Pane -->\n <kendo-splitter-pane [min]=\"'400px'\">\n <mj-ai-agent-run-timeline\n [aiAgentRunId]=\"record.ID\"\n [autoRefresh]=\"record.Status === 'Running'\"\n [refreshInterval]=\"3000\"\n (itemSelected)=\"selectTimelineItem($event)\"\n (navigateToEntity)=\"navigateToEntityRecord($event)\">\n </mj-ai-agent-run-timeline>\n </kendo-splitter-pane>\n \n <!-- JSON Detail Pane -->\n <kendo-splitter-pane [size]=\"'45%'\" [min]=\"'300px'\" [collapsed]=\"!selectedTimelineItem\">\n <div class=\"json-detail-pane\" *ngIf=\"selectedTimelineItem\">\n <div class=\"json-pane-header\">\n <h3>\n <i class=\"fas\" [ngClass]=\"selectedTimelineItem.icon\"></i>\n {{ selectedTimelineItem.title }}\n </h3>\n <button class=\"btn-icon\" (click)=\"closeJsonPanel()\" title=\"Close\">\n <i class=\"fas fa-times\"></i>\n </button>\n </div>\n <div class=\"json-pane-content\">\n <div class=\"json-meta\">\n <div class=\"meta-item\">\n <label>Type</label>\n <span>{{ selectedTimelineItem.type }}</span>\n </div>\n <div class=\"meta-item\">\n <label>Status</label>\n <span class=\"status-badge small\" [attr.data-status]=\"selectedTimelineItem.status\">\n {{ selectedTimelineItem.status }}\n </span>\n </div>\n <div class=\"meta-item\">\n <label>Duration</label>\n <span>{{ selectedTimelineItem.duration || 'N/A' }}</span>\n </div>\n </div>\n \n <!-- Action-specific link -->\n <div class=\"action-link\" *ngIf=\"selectedTimelineItem.type === 'action' && selectedTimelineItem.data?.ID\">\n <button class=\"btn-link\" (click)=\"navigateToActionLog(selectedTimelineItem.data.ID)\">\n <i class=\"fas fa-external-link-alt\"></i> View Action Execution Log\n </button>\n </div>\n \n <!-- Tab Navigation - Only show when we have both options -->\n @if (showStepPayloadDiff) {\n <div class=\"detail-pane-tabs\">\n <button \n class=\"detail-tab\" \n [class.active]=\"detailPaneTab === 'diff'\"\n (click)=\"detailPaneTab = 'diff'\">\n <i class=\"fa-solid fa-code-branch\"></i>\n Payload Changes\n </button>\n <button \n class=\"detail-tab\" \n [class.active]=\"detailPaneTab === 'json'\"\n (click)=\"detailPaneTab = 'json'\">\n <i class=\"fa-solid fa-code\"></i>\n Full JSON\n </button>\n </div>\n }\n \n <!-- Tab Content -->\n <div class=\"detail-pane-content\" [class.with-tabs]=\"showStepPayloadDiff\">\n <!-- Payload Diff Tab -->\n @if (detailPaneTab === 'diff' && showStepPayloadDiff) {\n <div class=\"step-payload-diff\">\n <mj-deep-diff\n [oldValue]=\"stepPayloadAtStartObject\"\n [newValue]=\"stepPayloadAtEndObject\"\n [title]=\"''\"\n [showSummary]=\"true\"\n [showUnchanged]=\"false\"\n [expandAll]=\"false\"\n [maxDepth]=\"8\"\n [maxStringLength]=\"150\"\n [treatNullAsUndefined]=\"true\">\n </mj-deep-diff>\n </div>\n }\n \n <!-- Full JSON Tab -->\n @if (detailPaneTab === 'json' || !showStepPayloadDiff) {\n <div class=\"json-viewer\">\n <div class=\"json-toolbar\">\n <button class=\"btn-icon\" title=\"Copy JSON\" (click)=\"copyToClipboard(getSelectedItemJson())\">\n <i class=\"fas fa-copy\"></i>\n </button>\n </div>\n <mj-code-editor\n [(ngModel)]=\"selectedItemJsonString\"\n [language]=\"'json'\"\n [readonly]=\"true\"\n style=\"height: calc(100% - 40px); width: 100%;\">\n </mj-code-editor>\n </div>\n }\n </div>\n </div>\n </div>\n </kendo-splitter-pane>\n </kendo-splitter>\n </div>\n\n <!-- Details Tab -->\n <div class=\"tab-content\" *ngIf=\"activeTab === 'details'\">\n <kendo-panelbar>\n <kendo-panelbar-item title=\"General Information\" [expanded]=\"true\">\n <ng-template kendoPanelBarContent>\n <div class=\"details-grid\">\n <div class=\"detail-item\">\n <label>Agent</label>\n <span>\n <a href=\"javascript:void(0)\" class=\"entity-link\" (click)=\"openEntityRecord('AI Agents', record.AgentID)\">\n {{ agent?.Name || 'N/A' }}\n </a>\n </span>\n </div>\n <div class=\"detail-item\">\n <label>Parent Run ID</label>\n <span>\n <a *ngIf=\"record.ParentRunID\" href=\"javascript:void(0)\" class=\"entity-link\" (click)=\"openEntityRecord('MJ: AI Agent Runs', record.ParentRunID)\">\n {{ record.ParentRunID }}\n </a>\n <span *ngIf=\"!record.ParentRunID\">None (Root)</span>\n </span>\n </div>\n <div class=\"detail-item\">\n <label>Last Run ID</label>\n <span>\n <a *ngIf=\"record.LastRunID\" href=\"javascript:void(0)\" class=\"entity-link\" (click)=\"openEntityRecord('MJ: AI Agent Runs', record.LastRunID)\">\n {{ record.LastRunID }}\n </a>\n <span *ngIf=\"!record.LastRunID\">None</span>\n </span>\n </div>\n <div class=\"detail-item\">\n <label>Conversation ID</label>\n <span>\n <a *ngIf=\"record.ConversationID\" href=\"javascript:void(0)\" class=\"entity-link\" (click)=\"openEntityRecord('Conversations', record.ConversationID)\">\n {{ record.ConversationID }}\n </a>\n <span *ngIf=\"!record.ConversationID\">N/A</span>\n </span>\n </div>\n <div class=\"detail-item\">\n <label>User</label>\n <span>\n <a *ngIf=\"record.UserID\" href=\"javascript:void(0)\" class=\"entity-link\" (click)=\"openEntityRecord('Users', record.UserID)\">\n {{ record.User || 'N/A' }}\n </a>\n <span *ngIf=\"!record.UserID\">N/A</span>\n </span>\n </div>\n </div>\n </ng-template>\n </kendo-panelbar-item>\n \n <kendo-panelbar-item title=\"Execution Status\">\n <ng-template kendoPanelBarContent>\n <div class=\"details-grid\">\n <div class=\"detail-item\">\n <label>Status</label>\n <span class=\"status-badge\" [attr.data-status]=\"record.Status\">\n {{ record.Status }}\n </span>\n </div>\n <div class=\"detail-item\">\n <label>Success</label>\n <span [class.success]=\"record.Success\" [class.error]=\"record.Success === false\">\n {{ record.Success === null ? 'In Progress' : (record.Success ? 'Yes' : 'No') }}\n </span>\n </div>\n <div class=\"detail-item full-width\" *ngIf=\"record.ErrorMessage\">\n <label>Error Message</label>\n <div class=\"error-message\">{{ record.ErrorMessage }}</div>\n </div>\n </div>\n </ng-template>\n </kendo-panelbar-item>\n \n <kendo-panelbar-item title=\"Usage & Cost\">\n <ng-template kendoPanelBarContent>\n <div class=\"details-grid\">\n <div class=\"detail-item\">\n <label>Total Tokens Used</label>\n <span>{{ record.TotalTokensUsed ? (record.TotalTokensUsed | number:'1.0-0') : 'N/A' }}</span>\n </div>\n <div class=\"detail-item\">\n <label>Prompt Tokens</label>\n <span>{{ record.TotalPromptTokensUsed ? (record.TotalPromptTokensUsed | number:'1.0-0') : 'N/A' }}</span>\n </div>\n <div class=\"detail-item\">\n <label>Completion Tokens</label>\n <span>{{ record.TotalCompletionTokensUsed ? (record.TotalCompletionTokensUsed | number:'1.0-0') : 'N/A' }}</span>\n </div>\n <div class=\"detail-item\">\n <label>Total Cost</label>\n <span>{{ record.TotalCost != null ? ('$' + (record.TotalCost | number:'1.2-4')) : 'N/A' }}</span>\n </div>\n <div class=\"detail-item\">\n <label>Total Prompt Iterations</label>\n <span>{{ record.TotalPromptIterations != null ? (record.TotalPromptIterations | number:'1.0-0') : 'N/A' }}</span>\n </div>\n </div>\n </ng-template>\n </kendo-panelbar-item>\n \n <kendo-panelbar-item title=\"Result\" *ngIf=\"record.Result\">\n <ng-template kendoPanelBarContent>\n <div class=\"result-viewer\">\n <mj-code-editor\n [ngModel]=\"parsedResult\"\n [language]=\"'json'\"\n [readonly]=\"true\"\n style=\"height: 300px; width: 100%;\">\n </mj-code-editor>\n </div>\n </ng-template>\n </kendo-panelbar-item>\n \n <kendo-panelbar-item title=\"Starting Payload\" *ngIf=\"record.StartingPayload\">\n <ng-template kendoPanelBarContent>\n <div class=\"result-viewer\">\n <mj-code-editor\n [ngModel]=\"parsedStartingPayload\"\n [language]=\"'json'\"\n [readonly]=\"true\"\n style=\"height: 300px; width: 100%;\">\n </mj-code-editor>\n </div>\n </ng-template>\n </kendo-panelbar-item>\n \n <kendo-panelbar-item title=\"Final Payload\" *ngIf=\"record.FinalPayload\">\n <ng-template kendoPanelBarContent>\n <div class=\"result-viewer\">\n <mj-code-editor\n [ngModel]=\"parsedFinalPayload\"\n [language]=\"'json'\"\n [readonly]=\"true\"\n style=\"height: 300px; width: 100%;\">\n </mj-code-editor>\n </div>\n </ng-template>\n </kendo-panelbar-item>\n \n <kendo-panelbar-item title=\"Payload Diff\" *ngIf=\"showPayloadDiff\">\n <ng-template kendoPanelBarContent>\n <div style=\"padding: 20px; background: #f8f9fa;\">\n <mj-deep-diff\n [oldValue]=\"startingPayloadObject\"\n [newValue]=\"finalPayloadObject\"\n [title]=\"''\"\n [showSummary]=\"true\"\n [showUnchanged]=\"false\"\n [expandAll]=\"false\"\n [maxDepth]=\"10\"\n [maxStringLength]=\"200\"\n [treatNullAsUndefined]=\"true\">\n </mj-deep-diff>\n </div>\n </ng-template>\n </kendo-panelbar-item>\n </kendo-panelbar>\n </div>\n </div>\n </div>\n</div>", styles: [".ai-agent-run-form {\n height: 100%;\n overflow: auto;\n}\n\n/* Header Styles */\n.header {\n background: linear-gradient(135deg, #ffffff 0%, #f8f9fa 100%);\n border-bottom: 1px solid #e0e6ed;\n padding: 20px;\n box-shadow: 0 2px 4px rgba(0,0,0,0.04);\n}\n\n.header-content {\n display: flex;\n justify-content: space-between;\n align-items: flex-start;\n margin-bottom: 16px;\n}\n\n.header-left {\n display: flex;\n align-items: center;\n gap: 16px;\n}\n\n.icon-wrapper {\n width: 48px;\n height: 48px;\n background: linear-gradient(135deg, #2196f3, #1976d2);\n border-radius: 12px;\n display: flex;\n align-items: center;\n justify-content: center;\n color: white;\n font-size: 20px;\n}\n\n.header-info h2 {\n margin: 0;\n font-size: 24px;\n font-weight: 600;\n color: #2c3e50;\n}\n\n.meta-info {\n display: flex;\n gap: 12px;\n margin-top: 4px;\n font-size: 14px;\n color: #6c757d;\n}\n\n.parent-run {\n display: flex;\n align-items: center;\n gap: 6px;\n}\n\n.parent-link {\n color: #ff6358;\n text-decoration: none;\n cursor: pointer;\n transition: color 0.2s;\n}\n\n.parent-link:hover {\n color: #ff4444;\n text-decoration: underline;\n}\n\n.agent-name {\n font-weight: 500;\n color: #495057;\n}\n\n.run-id {\n font-family: monospace;\n font-size: 12px;\n opacity: 0.7;\n}\n\n.header-right {\n display: flex;\n align-items: center;\n gap: 16px;\n}\n\n.status-badge {\n padding: 6px 16px;\n border-radius: 20px;\n font-size: 13px;\n font-weight: 600;\n text-transform: uppercase;\n letter-spacing: 0.5px;\n display: inline-flex;\n align-items: center;\n gap: 6px;\n}\n\n.status-badge[data-status=\"Running\"] {\n background: #e3f2fd;\n color: #1976d2;\n}\n\n.status-badge[data-status=\"Completed\"] {\n background: #d4edda;\n color: #155724;\n}\n\n.status-badge[data-status=\"Failed\"] {\n background: #f8d7da;\n color: #721c24;\n}\n\n.status-badge[data-status=\"Cancelled\"] {\n background: #fff3cd;\n color: #856404;\n}\n\n.status-badge[data-status=\"Paused\"] {\n background: #e2e3e5;\n color: #383d41;\n}\n\n.status-badge.small {\n padding: 4px 12px;\n font-size: 11px;\n}\n\n.header-actions {\n display: flex;\n gap: 8px;\n}\n\n.btn-icon {\n width: 36px;\n height: 36px;\n border: 1px solid #dee2e6;\n background: white;\n border-radius: 8px;\n display: flex;\n align-items: center;\n justify-content: center;\n cursor: pointer;\n transition: all 0.2s ease;\n color: #6c757d;\n}\n\n.btn-icon:hover {\n background: #f8f9fa;\n border-color: #adb5bd;\n color: #495057;\n}\n\n.header-stats {\n display: flex;\n gap: 24px;\n padding-top: 12px;\n border-top: 1px solid #e9ecef;\n}\n\n.stat {\n display: flex;\n flex-direction: column;\n gap: 4px;\n}\n\n.stat .label {\n font-size: 12px;\n color: #6c757d;\n text-transform: uppercase;\n letter-spacing: 0.5px;\n}\n\n.stat .value {\n font-size: 14px;\n font-weight: 500;\n color: #495057;\n}\n\n.stat .value.success {\n color: #28a745;\n}\n\n.stat .value.error {\n color: #dc3545;\n}\n\n/* Tabs */\n.tabs {\n display: flex;\n border-bottom: 1px solid #dee2e6;\n background: #f8f9fa;\n}\n\n.tab {\n padding: 12px 24px;\n border: none;\n background: transparent;\n cursor: pointer;\n font-size: 14px;\n font-weight: 500;\n color: #6c757d;\n display: flex;\n align-items: center;\n gap: 8px;\n transition: all 0.2s ease;\n border-bottom: 3px solid transparent;\n}\n\n.tab:hover {\n color: #495057;\n background: rgba(0,0,0,0.02);\n}\n\n.tab.active {\n color: #2196f3;\n border-bottom-color: #2196f3;\n background: white;\n}\n\n/* Content Area */\n.content-area {\n position: relative;\n height: calc(100vh - 280px);\n overflow: auto;\n background: white;\n}\n\n.tab-content {\n height: 100%;\n overflow: auto;\n}\n\n/* Details tab specific */\n.tab-content[ng-reflect-ng-if=\"true\"] > kendo-panelbar {\n height: 100%;\n overflow-y: auto;\n}\n\n/* JSON Detail Pane */\n.json-detail-pane {\n height: 100%;\n display: flex;\n flex-direction: column;\n background: #f8f9fa;\n border-left: 1px solid #e0e6ed;\n}\n\n.json-pane-header {\n display: flex;\n justify-content: space-between;\n align-items: center;\n padding: 16px 20px;\n background: white;\n border-bottom: 1px solid #e0e6ed;\n box-shadow: 0 2px 4px rgba(0,0,0,0.04);\n}\n\n.json-pane-header h3 {\n margin: 0;\n font-size: 16px;\n font-weight: 600;\n color: #2c3e50;\n display: flex;\n align-items: center;\n gap: 8px;\n}\n\n.json-pane-header h3 i {\n color: #6b7280;\n font-size: 14px;\n}\n\n.json-pane-content {\n flex: 1;\n display: flex;\n flex-direction: column;\n overflow: auto;\n padding: 16px;\n}\n\n.json-meta {\n display: flex;\n gap: 20px;\n margin-bottom: 16px;\n flex-wrap: wrap;\n}\n\n.json-meta .meta-item {\n display: flex;\n flex-direction: column;\n gap: 4px;\n}\n\n.json-meta .meta-item label {\n font-size: 11px;\n text-transform: uppercase;\n color: #6b7280;\n font-weight: 600;\n letter-spacing: 0.5px;\n}\n\n.json-meta .meta-item span {\n font-size: 14px;\n color: #2c3e50;\n font-weight: 500;\n}\n\n.action-link {\n margin-bottom: 12px;\n}\n\n.action-link .btn-link {\n background: none;\n border: none;\n color: #2196f3;\n font-size: 14px;\n cursor: pointer;\n padding: 6px 12px;\n border-radius: 4px;\n transition: all 0.2s;\n display: inline-flex;\n align-items: center;\n gap: 6px;\n}\n\n.action-link .btn-link:hover {\n background: rgba(33, 150, 243, 0.08);\n color: #1976d2;\n}\n\n.json-viewer {\n flex: 1;\n display: flex;\n flex-direction: column;\n background: white;\n border-radius: 8px;\n border: 1px solid #e0e6ed;\n overflow: auto;\n padding: 20px;\n gap: 10px;\n min-height: 0;\n margin-bottom: 45px;\n}\n\n\n.json-toolbar {\n display: flex;\n justify-content: flex-end;\n padding: 8px 12px;\n background: #f8f9fa;\n border-bottom: 1px solid #e0e6ed;\n}\n\n/* Timeline Styles */\n.timeline-container {\n height: 100%;\n overflow-y: auto;\n padding: 20px;\n}\n\n.timeline-container > .timeline {\n max-width: 900px;\n margin: 0 auto;\n}\n\n.timeline {\n position: relative;\n padding-left: 40px;\n}\n\n.timeline::before {\n content: '';\n position: absolute;\n left: 20px;\n top: 0;\n bottom: 0;\n width: 2px;\n background: #e9ecef;\n}\n\n.timeline-item {\n position: relative;\n margin-bottom: 24px;\n cursor: pointer;\n transition: all 0.2s ease;\n}\n\n.timeline-item:hover {\n transform: translateX(4px);\n}\n\n.timeline-item.selected {\n transform: translateX(8px);\n}\n\n.timeline-item.selected .timeline-content {\n background: #f0f7ff;\n border-color: #2196f3;\n}\n\n.timeline-marker {\n position: absolute;\n left: -30px;\n top: 0;\n width: 40px;\n height: 40px;\n border-radius: 50%;\n display: flex;\n align-items: center;\n justify-content: center;\n background: white;\n border: 3px solid #e9ecef;\n z-index: 1;\n transition: all 0.2s ease;\n}\n\n.timeline-marker[data-color=\"success\"] {\n border-color: #28a745;\n color: #28a745;\n}\n\n.timeline-marker[data-color=\"error\"] {\n border-color: #dc3545;\n color: #dc3545;\n}\n\n.timeline-marker[data-color=\"info\"] {\n border-color: #17a2b8;\n color: #17a2b8;\n}\n\n.timeline-marker[data-color=\"warning\"] {\n border-color: #ffc107;\n color: #ffc107;\n}\n\n.timeline-marker[data-color=\"secondary\"] {\n border-color: #6c757d;\n color: #6c757d;\n}\n\n.timeline-marker.small {\n width: 28px;\n height: 28px;\n font-size: 12px;\n}\n\n.timeline-content {\n background: white;\n border: 1px solid #e9ecef;\n border-radius: 12px;\n padding: 16px 20px;\n margin-left: 20px;\n box-shadow: 0 2px 4px rgba(0,0,0,0.04);\n transition: all 0.2s ease;\n}\n\n.timeline-header {\n display: flex;\n justify-content: space-between;\n align-items: center;\n margin-bottom: 8px;\n}\n\n.timeline-header h4 {\n margin: 0;\n font-size: 16px;\n font-weight: 600;\n color: #2c3e50;\n}\n\n.timeline-header h5 {\n margin: 0;\n font-size: 14px;\n font-weight: 600;\n color: #495057;\n}\n\n.timeline-time {\n font-size: 12px;\n color: #6c757d;\n font-family: monospace;\n}\n\n.timeline-subtitle {\n font-size: 13px;\n color: #6c757d;\n margin-bottom: 8px;\n}\n\n.timeline-meta {\n display: flex;\n gap: 16px;\n font-size: 12px;\n color: #6c757d;\n}\n\n.timeline-meta .status {\n display: inline-flex;\n align-items: center;\n gap: 6px;\n padding: 2px 8px;\n border-radius: 12px;\n font-size: 11px;\n font-weight: 600;\n text-transform: uppercase;\n letter-spacing: 0.5px;\n}\n\n.timeline-meta .status[data-status=\"Completed\"] {\n background: #d4edda;\n color: #155724;\n}\n\n.timeline-meta .status[data-status=\"Failed\"] {\n background: #f8d7da;\n color: #721c24;\n}\n\n.timeline-meta .status[data-status=\"Running\"] {\n background: #cce5ff;\n color: #004085;\n}\n\n.timeline-meta .status[data-status=\"Paused\"] {\n background: #e2e3e5;\n color: #383d41;\n}\n\n.duration {\n display: flex;\n align-items: center;\n gap: 4px;\n}\n\n.timeline-actions {\n position: absolute;\n right: 20px;\n top: 50%;\n transform: translateY(-50%);\n display: flex;\n align-items: center;\n gap: 8px;\n}\n\n.btn-link {\n background: none;\n border: none;\n color: #2196f3;\n cursor: pointer;\n font-size: 12px;\n display: flex;\n align-items: center;\n gap: 4px;\n padding: 4px 8px;\n border-radius: 4px;\n transition: all 0.2s ease;\n}\n\n.btn-link:hover {\n background: rgba(33, 150, 243, 0.1);\n}\n\n.btn-expand {\n width: 24px;\n height: 24px;\n border: 1px solid #dee2e6;\n background: white;\n border-radius: 4px;\n display: flex;\n align-items: center;\n justify-content: center;\n cursor: pointer;\n transition: all 0.2s ease;\n color: #6c757d;\n font-size: 12px;\n}\n\n.btn-expand:hover {\n background: #f8f9fa;\n border-color: #adb5bd;\n color: #495057;\n}\n\n/* Timeline Children */\n.timeline-children {\n position: relative;\n margin-top: 12px;\n margin-bottom: 12px;\n}\n\n.timeline-children::before {\n content: '';\n position: absolute;\n left: -10px;\n top: -12px;\n bottom: 0;\n width: 2px;\n background: #e9ecef;\n}\n\n.child-item {\n margin-bottom: 12px;\n}\n\n.child-item .timeline-content {\n background: #f8f9fa;\n border-color: #e0e6ed;\n}\n\n/* Sub-run timeline styles */\n.sub-run-timeline {\n background: rgba(33, 150, 243, 0.02);\n border-left: 2px solid rgba(33, 150, 243, 0.2);\n margin-left: 20px;\n padding-left: 20px;\n margin-top: 8px;\n margin-bottom: 8px;\n}\n\n.sub-run-item .timeline-marker {\n border-width: 2px;\n}\n\n.sub-run-item .timeline-content {\n transition: all 0.2s ease;\n}\n\n/* JSON Detail Pane (in splitter) */\n.json-detail-pane {\n height: 100%;\n display: flex;\n flex-direction: column;\n background: white;\n border-left: 1px solid #e0e6ed;\n}\n\n.json-pane-header {\n padding: 16px 20px;\n background: #f8f9fa;\n border-bottom: 1px solid #e0e6ed;\n display: flex;\n justify-content: space-between;\n align-items: center;\n flex-shrink: 0;\n}\n\n.json-pane-header h3 {\n margin: 0;\n font-size: 16px;\n color: #2c3e50;\n display: flex;\n align-items: center;\n gap: 10px;\n font-weight: 600;\n}\n\n.json-pane-content {\n flex: 1;\n overflow-y: auto;\n display: flex;\n flex-direction: column;\n}\n\n.json-meta {\n padding: 16px 20px;\n border-bottom: 1px solid #e0e6ed;\n display: flex;\n gap: 20px;\n flex-wrap: wrap;\n flex-shrink: 0;\n}\n\n.json-meta .meta-item {\n display: flex;\n flex-direction: column;\n gap: 4px;\n}\n\n.json-meta label {\n font-size: 11px;\n color: #7c8798;\n text-transform: uppercase;\n letter-spacing: 0.5px;\n}\n\n.json-meta span {\n font-size: 14px;\n color: #2c3e50;\n font-weight: 500;\n}\n\n.action-link {\n padding: 12px 20px;\n border-bottom: 1px solid #e0e6ed;\n flex-shrink: 0;\n}\n\n.action-link .btn-link {\n display: inline-flex;\n align-items: center;\n gap: 6px;\n color: #2196f3;\n text-decoration: none;\n font-size: 14px;\n padding: 8px 12px;\n background: #f0f7ff;\n border: 1px solid #d0e5ff;\n border-radius: 4px;\n transition: all 0.2s;\n cursor: pointer;\n}\n\n.action-link .btn-link:hover {\n background: #e1f0ff;\n border-color: #b0d5ff;\n text-decoration: none;\n}\n\n\n.json-toolbar {\n display: flex;\n justify-content: flex-end;\n gap: 8px;\n margin-bottom: 8px;\n}\n\n/* Details Tab */\n.details-grid {\n display: grid;\n grid-template-columns: repeat(auto-fit, minmax(250px, 1fr));\n gap: 20px;\n padding: 20px;\n}\n\n.detail-item {\n display: flex;\n flex-direction: column;\n gap: 8px;\n}\n\n.detail-item.full-width {\n grid-column: 1 / -1;\n}\n\n.detail-item label {\n font-size: 12px;\n color: #6c757d;\n text-transform: uppercase;\n letter-spacing: 0.5px;\n}\n\n.detail-item span {\n font-size: 14px;\n color: #495057;\n}\n\n.error-message {\n background: #f8d7da;\n color: #721c24;\n padding: 12px;\n border-radius: 8px;\n font-size: 13px;\n}\n\n.result-viewer,\n.state-viewer {\n padding: 20px;\n max-height: 450px;\n overflow: auto;\n display: flex;\n flex-direction: column;\n}\n\n.result-viewer mj-code-editor,\n.state-viewer mj-code-editor {\n flex: 1;\n min-height: 0;\n}\n\n/* Empty States */\n.empty-state,\n.loading-state,\n.error-state {\n text-align: center;\n padding: 60px 20px;\n color: #6c757d;\n}\n\n.empty-state i,\n.loading-state i,\n.error-state i {\n opacity: 0.3;\n margin-bottom: 16px;\n}\n\n/* Responsive */\n@media (max-width: 768px) {\n .header-content {\n flex-direction: column;\n gap: 16px;\n }\n \n .header-stats {\n flex-wrap: wrap;\n }\n \n .json-detail-pane {\n width: 100%;\n }\n \n .timeline {\n padding-left: 30px;\n }\n \n .timeline-marker {\n left: -25px;\n width: 32px;\n height: 32px;\n }\n \n .timeline-content {\n margin-left: 10px;\n }\n}\n\n/* Entity Link Styles */\n.entity-link {\n color: #2196f3;\n text-decoration: none;\n transition: all 0.2s ease;\n border-bottom: 1px solid transparent;\n display: inline-block;\n}\n\n.entity-link:hover {\n color: #1976d2;\n border-bottom-color: #1976d2;\n}\n\n.entity-link:active {\n color: #0d47a1;\n}\n\n/* Detail Pane Tabs */\n.detail-pane-tabs {\n display: flex;\n gap: 8px;\n margin: 8px 0 0 0;\n border-bottom: 1px solid #e0e6ed;\n padding: 0 16px;\n}\n\n.detail-tab {\n padding: 10px 16px;\n background: none;\n border: none;\n border-bottom: 3px solid transparent;\n color: #6c757d;\n font-size: 14px;\n font-weight: 500;\n cursor: pointer;\n transition: all 0.2s ease;\n display: flex;\n align-items: center;\n gap: 6px;\n}\n\n.detail-tab:hover {\n color: #495057;\n background: rgba(0, 0, 0, 0.02);\n}\n\n.detail-tab.active {\n color: #2196f3;\n border-bottom-color: #2196f3;\n}\n\n.detail-tab i {\n font-size: 14px;\n}\n\n/* Detail Pane Content */\n.detail-pane-content {\n flex: 1;\n overflow-y: auto;\n min-height: 0;\n margin-bottom: 35px;\n}\n\n.detail-pane-content.with-tabs {\n /* When tabs are shown, content starts right after tabs */\n margin-top: 0;\n}\n\n/* Step Payload Diff */\n.step-payload-diff {\n height: 100%;\n overflow-y: auto;\n padding: 16px;\n}\n\n.step-payload-diff mj-deep-diff {\n display: block;\n height: 100%;\n}\n\n/* JSON Viewer adjustments when no tabs */\n.detail-pane-content:not(.with-tabs) .json-viewer {\n margin-top: 16px;\n}"] }]
964
- }], () => [{ type: i0.ElementRef }, { type: i1.SharedService }, { type: i2.Router }, { type: i2.ActivatedRoute }, { type: i0.ChangeDetectorRef }], null); })();
1019
+ args: [{ selector: 'mj-ai-agent-run-form', template: "<div class=\"record-form-container ai-agent-run-form\">\n <div class=\"record-form\">\n <!-- Header -->\n <div class=\"header\">\n <div class=\"header-content\">\n <div class=\"header-left\">\n <div class=\"icon-wrapper\">\n <i class=\"fas fa-robot\"></i>\n </div>\n <div class=\"header-info\">\n <h2>AI Agent Run</h2>\n <div class=\"meta-info\">\n <span class=\"agent-name\" *ngIf=\"agent\">{{ agent.Name }}</span>\n <span class=\"run-id\">{{ record.ID }}</span>\n <span class=\"parent-run\" *ngIf=\"record.ParentRunID\">\n <i class=\"fas fa-level-up-alt\"></i>\n <a (click)=\"navigateToParentRun()\" class=\"parent-link\">Parent Run</a>\n </span>\n </div>\n </div>\n </div>\n <div class=\"header-right\">\n <div class=\"status-badge\" [attr.data-status]=\"record.Status\">\n <i class=\"fas\" [ngClass]=\"getStatusIcon(record.Status || '')\"></i>\n {{ record.Status }}\n </div>\n <div class=\"header-actions\">\n <button class=\"btn-icon\" (click)=\"refreshData()\" title=\"Refresh\">\n <i class=\"fas fa-sync-alt\"></i>\n </button>\n </div>\n </div>\n </div>\n <div class=\"header-stats\">\n <div class=\"stat\">\n <span class=\"label\">Started</span>\n <span class=\"value\">{{ record.StartedAt | date:'medium' }}</span>\n </div>\n <div class=\"stat\" *ngIf=\"record.CompletedAt\">\n <span class=\"label\">Completed</span>\n <span class=\"value\">{{ record.CompletedAt | date:'medium' }}</span>\n </div>\n <div class=\"stat\" *ngIf=\"record.CompletedAt\">\n <span class=\"label\">Duration</span>\n <span class=\"value\">{{ calculateDuration(record.StartedAt, record.CompletedAt) }}</span>\n </div>\n <div class=\"stat\" *ngIf=\"record.Success !== null && record.CompletedAt !== null\">\n <span class=\"label\">Result</span>\n <span class=\"value\" [class.success]=\"record.Success\" [class.error]=\"!record.Success\">\n {{ record.Success ? 'Success' : 'Failed' }}\n </span>\n </div>\n <div class=\"stat\" *ngIf=\"record.TotalTokensUsed\">\n <span class=\"label\">Tokens</span>\n <span class=\"value\">{{ record.TotalTokensUsed | number:'1.0-0' }}</span>\n </div>\n <div class=\"stat\" *ngIf=\"record.TotalCost != null && record.TotalCost > 0\">\n <span class=\"label\">Cost</span>\n <span class=\"value\">${{ record.TotalCost | number:'1.2-4' }}</span>\n </div>\n </div>\n </div>\n\n <!-- Tabs -->\n <div class=\"tabs\">\n <button class=\"tab\" [class.active]=\"activeTab === 'timeline'\" (click)=\"changeTab('timeline')\">\n <i class=\"fas fa-stream\"></i> Timeline\n </button>\n <button class=\"tab\" [class.active]=\"activeTab === 'analytics'\" (click)=\"changeTab('analytics')\">\n <i class=\"fas fa-chart-line\"></i> Analytics\n </button>\n <button class=\"tab\" [class.active]=\"activeTab === 'details'\" (click)=\"changeTab('details')\">\n <i class=\"fas fa-info-circle\"></i> Details\n </button>\n </div>\n\n <!-- Content -->\n <div class=\"content-area\">\n <!-- Timeline Tab -->\n <div class=\"tab-content\" *ngIf=\"activeTab === 'timeline'\" style=\"height: 100%;\">\n <kendo-splitter style=\"height: 100%;\" orientation=\"horizontal\">\n <!-- Timeline Pane -->\n <kendo-splitter-pane [min]=\"'400px'\">\n <mj-ai-agent-run-timeline\n [aiAgentRunId]=\"record.ID\"\n [autoRefresh]=\"record.Status === 'Running'\"\n [refreshInterval]=\"3000\"\n (itemSelected)=\"selectTimelineItem($event)\"\n (navigateToEntity)=\"navigateToEntityRecord($event)\">\n </mj-ai-agent-run-timeline>\n </kendo-splitter-pane>\n \n <!-- JSON Detail Pane -->\n <kendo-splitter-pane [size]=\"'45%'\" [min]=\"'300px'\" [collapsed]=\"!selectedTimelineItem\">\n <div class=\"json-detail-pane\" *ngIf=\"selectedTimelineItem\">\n <div class=\"json-pane-header\">\n <h3>\n <i class=\"fas\" [ngClass]=\"selectedTimelineItem.icon\"></i>\n {{ selectedTimelineItem.title }}\n </h3>\n <button class=\"btn-icon\" (click)=\"closeJsonPanel()\" title=\"Close\">\n <i class=\"fas fa-times\"></i>\n </button>\n </div>\n <div class=\"json-pane-content\">\n <div class=\"json-meta\">\n <div class=\"meta-item\">\n <label>Type</label>\n <span>{{ selectedTimelineItem.type }}</span>\n </div>\n <div class=\"meta-item\">\n <label>Status</label>\n <span class=\"status-badge small\" [attr.data-status]=\"selectedTimelineItem.status\">\n {{ selectedTimelineItem.status }}\n </span>\n </div>\n <div class=\"meta-item\">\n <label>Duration</label>\n <span>{{ selectedTimelineItem.duration || 'N/A' }}</span>\n </div>\n </div>\n \n <!-- Action-specific link -->\n <div class=\"action-link\" *ngIf=\"selectedTimelineItem.type === 'action' && selectedTimelineItem.data?.ID\">\n <button class=\"btn-link\" (click)=\"navigateToActionLog(selectedTimelineItem.data.ID)\">\n <i class=\"fas fa-external-link-alt\"></i> View Action Execution Log\n </button>\n </div>\n \n <!-- Tab Navigation - Only show when we have both options -->\n @if (showStepPayloadDiff) {\n <div class=\"detail-pane-tabs\">\n <button \n class=\"detail-tab\" \n [class.active]=\"detailPaneTab === 'diff'\"\n (click)=\"detailPaneTab = 'diff'\">\n <i class=\"fa-solid fa-code-branch\"></i>\n Payload Changes\n </button>\n <button \n class=\"detail-tab\" \n [class.active]=\"detailPaneTab === 'json'\"\n (click)=\"detailPaneTab = 'json'\">\n <i class=\"fa-solid fa-code\"></i>\n Full JSON\n </button>\n </div>\n }\n \n <!-- Tab Content -->\n <div class=\"detail-pane-content\" [class.with-tabs]=\"showStepPayloadDiff\">\n <!-- Payload Diff Tab -->\n @if (detailPaneTab === 'diff' && showStepPayloadDiff) {\n <div class=\"step-payload-diff\">\n <mj-deep-diff\n [oldValue]=\"stepPayloadAtStartObject\"\n [newValue]=\"stepPayloadAtEndObject\"\n [title]=\"''\"\n [showSummary]=\"true\"\n [showUnchanged]=\"false\"\n [expandAll]=\"false\"\n [maxDepth]=\"8\"\n [maxStringLength]=\"150\"\n [treatNullAsUndefined]=\"true\">\n </mj-deep-diff>\n </div>\n }\n \n <!-- Full JSON Tab -->\n @if (detailPaneTab === 'json' || !showStepPayloadDiff) {\n <div class=\"json-viewer\">\n <div class=\"json-toolbar\">\n <button class=\"btn-icon\" title=\"Copy JSON\" (click)=\"copyToClipboard(getSelectedItemJson())\">\n <i class=\"fas fa-copy\"></i>\n </button>\n </div>\n <mj-code-editor\n [(ngModel)]=\"selectedItemJsonString\"\n [language]=\"'json'\"\n [readonly]=\"true\"\n style=\"height: calc(100% - 40px); width: 100%;\">\n </mj-code-editor>\n </div>\n }\n </div>\n </div>\n </div>\n </kendo-splitter-pane>\n </kendo-splitter>\n </div>\n\n <!-- Analytics Tab -->\n <div class=\"tab-content\" *ngIf=\"activeTab === 'analytics'\" style=\"height: 100%;\">\n <mj-ai-agent-run-analytics \n #analyticsComponent\n [agentRunId]=\"record.ID\"\n *ngIf=\"analyticsLoaded\">\n </mj-ai-agent-run-analytics>\n </div>\n\n <!-- Details Tab -->\n <div class=\"tab-content\" *ngIf=\"activeTab === 'details'\">\n <kendo-panelbar>\n <kendo-panelbar-item title=\"General Information\" [expanded]=\"true\">\n <ng-template kendoPanelBarContent>\n <div class=\"details-grid\">\n <div class=\"detail-item\">\n <label>Agent</label>\n <span>\n <a href=\"javascript:void(0)\" class=\"entity-link\" (click)=\"openEntityRecord('AI Agents', record.AgentID)\">\n {{ agent?.Name || 'N/A' }}\n </a>\n </span>\n </div>\n <div class=\"detail-item\">\n <label>Parent Run ID</label>\n <span>\n <a *ngIf=\"record.ParentRunID\" href=\"javascript:void(0)\" class=\"entity-link\" (click)=\"openEntityRecord('MJ: AI Agent Runs', record.ParentRunID)\">\n {{ record.ParentRunID }}\n </a>\n <span *ngIf=\"!record.ParentRunID\">None (Root)</span>\n </span>\n </div>\n <div class=\"detail-item\">\n <label>Last Run ID</label>\n <span>\n <a *ngIf=\"record.LastRunID\" href=\"javascript:void(0)\" class=\"entity-link\" (click)=\"openEntityRecord('MJ: AI Agent Runs', record.LastRunID)\">\n {{ record.LastRunID }}\n </a>\n <span *ngIf=\"!record.LastRunID\">None</span>\n </span>\n </div>\n <div class=\"detail-item\">\n <label>Conversation ID</label>\n <span>\n <a *ngIf=\"record.ConversationID\" href=\"javascript:void(0)\" class=\"entity-link\" (click)=\"openEntityRecord('Conversations', record.ConversationID)\">\n {{ record.ConversationID }}\n </a>\n <span *ngIf=\"!record.ConversationID\">N/A</span>\n </span>\n </div>\n <div class=\"detail-item\">\n <label>User</label>\n <span>\n <a *ngIf=\"record.UserID\" href=\"javascript:void(0)\" class=\"entity-link\" (click)=\"openEntityRecord('Users', record.UserID)\">\n {{ record.User || 'N/A' }}\n </a>\n <span *ngIf=\"!record.UserID\">N/A</span>\n </span>\n </div>\n </div>\n </ng-template>\n </kendo-panelbar-item>\n \n <kendo-panelbar-item title=\"Execution Status\">\n <ng-template kendoPanelBarContent>\n <div class=\"details-grid\">\n <div class=\"detail-item\">\n <label>Status</label>\n <span class=\"status-badge\" [attr.data-status]=\"record.Status\">\n {{ record.Status }}\n </span>\n </div>\n <div class=\"detail-item\">\n <label>Success</label>\n <span [class.success]=\"record.Success\" [class.error]=\"record.Success === false\">\n {{ record.Success === null ? 'In Progress' : (record.Success ? 'Yes' : 'No') }}\n </span>\n </div>\n <div class=\"detail-item full-width\" *ngIf=\"record.ErrorMessage\">\n <label>Error Message</label>\n <div class=\"error-message\">{{ record.ErrorMessage }}</div>\n </div>\n </div>\n </ng-template>\n </kendo-panelbar-item>\n \n <kendo-panelbar-item title=\"Usage & Cost\">\n <ng-template kendoPanelBarContent>\n <div class=\"details-grid\">\n <div class=\"detail-item\">\n <label>Total Tokens Used</label>\n <span>{{ record.TotalTokensUsed ? (record.TotalTokensUsed | number:'1.0-0') : 'N/A' }}</span>\n </div>\n <div class=\"detail-item\">\n <label>Prompt Tokens</label>\n <span>{{ record.TotalPromptTokensUsed ? (record.TotalPromptTokensUsed | number:'1.0-0') : 'N/A' }}</span>\n </div>\n <div class=\"detail-item\">\n <label>Completion Tokens</label>\n <span>{{ record.TotalCompletionTokensUsed ? (record.TotalCompletionTokensUsed | number:'1.0-0') : 'N/A' }}</span>\n </div>\n <div class=\"detail-item\">\n <label>Total Cost</label>\n <span>{{ record.TotalCost != null ? ('$' + (record.TotalCost | number:'1.2-4')) : 'N/A' }}</span>\n </div>\n <div class=\"detail-item\">\n <label>Total Prompt Iterations</label>\n <span>{{ record.TotalPromptIterations != null ? (record.TotalPromptIterations | number:'1.0-0') : 'N/A' }}</span>\n </div>\n </div>\n </ng-template>\n </kendo-panelbar-item>\n \n <kendo-panelbar-item title=\"Result\" *ngIf=\"record.Result\">\n <ng-template kendoPanelBarContent>\n <div class=\"result-viewer\">\n <mj-code-editor\n [ngModel]=\"parsedResult\"\n [language]=\"'json'\"\n [readonly]=\"true\"\n style=\"height: 300px; width: 100%;\">\n </mj-code-editor>\n </div>\n </ng-template>\n </kendo-panelbar-item>\n \n <kendo-panelbar-item title=\"Starting Payload\" *ngIf=\"record.StartingPayload\">\n <ng-template kendoPanelBarContent>\n <div class=\"result-viewer\">\n <mj-code-editor\n [ngModel]=\"parsedStartingPayload\"\n [language]=\"'json'\"\n [readonly]=\"true\"\n style=\"height: 300px; width: 100%;\">\n </mj-code-editor>\n </div>\n </ng-template>\n </kendo-panelbar-item>\n \n <kendo-panelbar-item title=\"Final Payload\" *ngIf=\"record.FinalPayload\">\n <ng-template kendoPanelBarContent>\n <div class=\"result-viewer\">\n <mj-code-editor\n [ngModel]=\"parsedFinalPayload\"\n [language]=\"'json'\"\n [readonly]=\"true\"\n style=\"height: 300px; width: 100%;\">\n </mj-code-editor>\n </div>\n </ng-template>\n </kendo-panelbar-item>\n \n <kendo-panelbar-item title=\"Payload Diff\" *ngIf=\"showPayloadDiff\">\n <ng-template kendoPanelBarContent>\n <div style=\"padding: 20px; background: #f8f9fa;\">\n <mj-deep-diff\n [oldValue]=\"startingPayloadObject\"\n [newValue]=\"finalPayloadObject\"\n [title]=\"''\"\n [showSummary]=\"true\"\n [showUnchanged]=\"false\"\n [expandAll]=\"false\"\n [maxDepth]=\"10\"\n [maxStringLength]=\"200\"\n [treatNullAsUndefined]=\"true\">\n </mj-deep-diff>\n </div>\n </ng-template>\n </kendo-panelbar-item>\n </kendo-panelbar>\n </div>\n </div>\n </div>\n</div>", styles: [".ai-agent-run-form {\n height: 100%;\n overflow: auto;\n}\n\n/* Header Styles */\n.header {\n background: linear-gradient(135deg, #ffffff 0%, #f8f9fa 100%);\n border-bottom: 1px solid #e0e6ed;\n padding: 20px;\n box-shadow: 0 2px 4px rgba(0,0,0,0.04);\n}\n\n.header-content {\n display: flex;\n justify-content: space-between;\n align-items: flex-start;\n margin-bottom: 16px;\n}\n\n.header-left {\n display: flex;\n align-items: center;\n gap: 16px;\n}\n\n.icon-wrapper {\n width: 48px;\n height: 48px;\n background: linear-gradient(135deg, #2196f3, #1976d2);\n border-radius: 12px;\n display: flex;\n align-items: center;\n justify-content: center;\n color: white;\n font-size: 20px;\n}\n\n.header-info h2 {\n margin: 0;\n font-size: 24px;\n font-weight: 600;\n color: #2c3e50;\n}\n\n.meta-info {\n display: flex;\n gap: 12px;\n margin-top: 4px;\n font-size: 14px;\n color: #6c757d;\n}\n\n.parent-run {\n display: flex;\n align-items: center;\n gap: 6px;\n}\n\n.parent-link {\n color: #ff6358;\n text-decoration: none;\n cursor: pointer;\n transition: color 0.2s;\n}\n\n.parent-link:hover {\n color: #ff4444;\n text-decoration: underline;\n}\n\n.agent-name {\n font-weight: 500;\n color: #495057;\n}\n\n.run-id {\n font-family: monospace;\n font-size: 12px;\n opacity: 0.7;\n}\n\n.header-right {\n display: flex;\n align-items: center;\n gap: 16px;\n}\n\n.status-badge {\n padding: 6px 16px;\n border-radius: 20px;\n font-size: 13px;\n font-weight: 600;\n text-transform: uppercase;\n letter-spacing: 0.5px;\n display: inline-flex;\n align-items: center;\n gap: 6px;\n}\n\n.status-badge[data-status=\"Running\"] {\n background: #e3f2fd;\n color: #1976d2;\n}\n\n.status-badge[data-status=\"Completed\"] {\n background: #d4edda;\n color: #155724;\n}\n\n.status-badge[data-status=\"Failed\"] {\n background: #f8d7da;\n color: #721c24;\n}\n\n.status-badge[data-status=\"Cancelled\"] {\n background: #fff3cd;\n color: #856404;\n}\n\n.status-badge[data-status=\"Paused\"] {\n background: #e2e3e5;\n color: #383d41;\n}\n\n.status-badge.small {\n padding: 4px 12px;\n font-size: 11px;\n}\n\n.header-actions {\n display: flex;\n gap: 8px;\n}\n\n.btn-icon {\n width: 36px;\n height: 36px;\n border: 1px solid #dee2e6;\n background: white;\n border-radius: 8px;\n display: flex;\n align-items: center;\n justify-content: center;\n cursor: pointer;\n transition: all 0.2s ease;\n color: #6c757d;\n}\n\n.btn-icon:hover {\n background: #f8f9fa;\n border-color: #adb5bd;\n color: #495057;\n}\n\n.header-stats {\n display: flex;\n gap: 24px;\n padding-top: 12px;\n border-top: 1px solid #e9ecef;\n}\n\n.stat {\n display: flex;\n flex-direction: column;\n gap: 4px;\n}\n\n.stat .label {\n font-size: 12px;\n color: #6c757d;\n text-transform: uppercase;\n letter-spacing: 0.5px;\n}\n\n.stat .value {\n font-size: 14px;\n font-weight: 500;\n color: #495057;\n}\n\n.stat .value.success {\n color: #28a745;\n}\n\n.stat .value.error {\n color: #dc3545;\n}\n\n/* Tabs */\n.tabs {\n display: flex;\n border-bottom: 1px solid #dee2e6;\n background: #f8f9fa;\n}\n\n.tab {\n padding: 12px 24px;\n border: none;\n background: transparent;\n cursor: pointer;\n font-size: 14px;\n font-weight: 500;\n color: #6c757d;\n display: flex;\n align-items: center;\n gap: 8px;\n transition: all 0.2s ease;\n border-bottom: 3px solid transparent;\n}\n\n.tab:hover {\n color: #495057;\n background: rgba(0,0,0,0.02);\n}\n\n.tab.active {\n color: #2196f3;\n border-bottom-color: #2196f3;\n background: white;\n}\n\n/* Content Area */\n.content-area {\n position: relative;\n height: calc(100vh - 280px);\n overflow: auto;\n background: white;\n}\n\n.tab-content {\n height: 100%;\n overflow: auto;\n}\n\n/* Details tab specific */\n.tab-content[ng-reflect-ng-if=\"true\"] > kendo-panelbar {\n height: 100%;\n overflow-y: auto;\n}\n\n/* JSON Detail Pane */\n.json-detail-pane {\n height: 100%;\n display: flex;\n flex-direction: column;\n background: #f8f9fa;\n border-left: 1px solid #e0e6ed;\n}\n\n.json-pane-header {\n display: flex;\n justify-content: space-between;\n align-items: center;\n padding: 16px 20px;\n background: white;\n border-bottom: 1px solid #e0e6ed;\n box-shadow: 0 2px 4px rgba(0,0,0,0.04);\n}\n\n.json-pane-header h3 {\n margin: 0;\n font-size: 16px;\n font-weight: 600;\n color: #2c3e50;\n display: flex;\n align-items: center;\n gap: 8px;\n}\n\n.json-pane-header h3 i {\n color: #6b7280;\n font-size: 14px;\n}\n\n.json-pane-content {\n flex: 1;\n display: flex;\n flex-direction: column;\n overflow: auto;\n padding: 16px;\n}\n\n.json-meta {\n display: flex;\n gap: 20px;\n margin-bottom: 16px;\n flex-wrap: wrap;\n}\n\n.json-meta .meta-item {\n display: flex;\n flex-direction: column;\n gap: 4px;\n}\n\n.json-meta .meta-item label {\n font-size: 11px;\n text-transform: uppercase;\n color: #6b7280;\n font-weight: 600;\n letter-spacing: 0.5px;\n}\n\n.json-meta .meta-item span {\n font-size: 14px;\n color: #2c3e50;\n font-weight: 500;\n}\n\n.action-link {\n margin-bottom: 12px;\n}\n\n.action-link .btn-link {\n background: none;\n border: none;\n color: #2196f3;\n font-size: 14px;\n cursor: pointer;\n padding: 6px 12px;\n border-radius: 4px;\n transition: all 0.2s;\n display: inline-flex;\n align-items: center;\n gap: 6px;\n}\n\n.action-link .btn-link:hover {\n background: rgba(33, 150, 243, 0.08);\n color: #1976d2;\n}\n\n.json-viewer {\n flex: 1;\n display: flex;\n flex-direction: column;\n background: white;\n border-radius: 8px;\n border: 1px solid #e0e6ed;\n overflow: auto;\n padding: 20px;\n gap: 10px;\n min-height: 0;\n margin-bottom: 45px;\n}\n\n\n.json-toolbar {\n display: flex;\n justify-content: flex-end;\n padding: 8px 12px;\n background: #f8f9fa;\n border-bottom: 1px solid #e0e6ed;\n}\n\n/* Timeline Styles */\n.timeline-container {\n height: 100%;\n overflow-y: auto;\n padding: 20px;\n}\n\n.timeline-container > .timeline {\n max-width: 900px;\n margin: 0 auto;\n}\n\n.timeline {\n position: relative;\n padding-left: 40px;\n}\n\n.timeline::before {\n content: '';\n position: absolute;\n left: 20px;\n top: 0;\n bottom: 0;\n width: 2px;\n background: #e9ecef;\n}\n\n.timeline-item {\n position: relative;\n margin-bottom: 24px;\n cursor: pointer;\n transition: all 0.2s ease;\n}\n\n.timeline-item:hover {\n transform: translateX(4px);\n}\n\n.timeline-item.selected {\n transform: translateX(8px);\n}\n\n.timeline-item.selected .timeline-content {\n background: #f0f7ff;\n border-color: #2196f3;\n}\n\n.timeline-marker {\n position: absolute;\n left: -30px;\n top: 0;\n width: 40px;\n height: 40px;\n border-radius: 50%;\n display: flex;\n align-items: center;\n justify-content: center;\n background: white;\n border: 3px solid #e9ecef;\n z-index: 1;\n transition: all 0.2s ease;\n}\n\n.timeline-marker[data-color=\"success\"] {\n border-color: #28a745;\n color: #28a745;\n}\n\n.timeline-marker[data-color=\"error\"] {\n border-color: #dc3545;\n color: #dc3545;\n}\n\n.timeline-marker[data-color=\"info\"] {\n border-color: #17a2b8;\n color: #17a2b8;\n}\n\n.timeline-marker[data-color=\"warning\"] {\n border-color: #ffc107;\n color: #ffc107;\n}\n\n.timeline-marker[data-color=\"secondary\"] {\n border-color: #6c757d;\n color: #6c757d;\n}\n\n.timeline-marker.small {\n width: 28px;\n height: 28px;\n font-size: 12px;\n}\n\n.timeline-content {\n background: white;\n border: 1px solid #e9ecef;\n border-radius: 12px;\n padding: 16px 20px;\n margin-left: 20px;\n box-shadow: 0 2px 4px rgba(0,0,0,0.04);\n transition: all 0.2s ease;\n}\n\n.timeline-header {\n display: flex;\n justify-content: space-between;\n align-items: center;\n margin-bottom: 8px;\n}\n\n.timeline-header h4 {\n margin: 0;\n font-size: 16px;\n font-weight: 600;\n color: #2c3e50;\n}\n\n.timeline-header h5 {\n margin: 0;\n font-size: 14px;\n font-weight: 600;\n color: #495057;\n}\n\n.timeline-time {\n font-size: 12px;\n color: #6c757d;\n font-family: monospace;\n}\n\n.timeline-subtitle {\n font-size: 13px;\n color: #6c757d;\n margin-bottom: 8px;\n}\n\n.timeline-meta {\n display: flex;\n gap: 16px;\n font-size: 12px;\n color: #6c757d;\n}\n\n.timeline-meta .status {\n display: inline-flex;\n align-items: center;\n gap: 6px;\n padding: 2px 8px;\n border-radius: 12px;\n font-size: 11px;\n font-weight: 600;\n text-transform: uppercase;\n letter-spacing: 0.5px;\n}\n\n.timeline-meta .status[data-status=\"Completed\"] {\n background: #d4edda;\n color: #155724;\n}\n\n.timeline-meta .status[data-status=\"Failed\"] {\n background: #f8d7da;\n color: #721c24;\n}\n\n.timeline-meta .status[data-status=\"Running\"] {\n background: #cce5ff;\n color: #004085;\n}\n\n.timeline-meta .status[data-status=\"Paused\"] {\n background: #e2e3e5;\n color: #383d41;\n}\n\n.duration {\n display: flex;\n align-items: center;\n gap: 4px;\n}\n\n.timeline-actions {\n position: absolute;\n right: 20px;\n top: 50%;\n transform: translateY(-50%);\n display: flex;\n align-items: center;\n gap: 8px;\n}\n\n.btn-link {\n background: none;\n border: none;\n color: #2196f3;\n cursor: pointer;\n font-size: 12px;\n display: flex;\n align-items: center;\n gap: 4px;\n padding: 4px 8px;\n border-radius: 4px;\n transition: all 0.2s ease;\n}\n\n.btn-link:hover {\n background: rgba(33, 150, 243, 0.1);\n}\n\n.btn-expand {\n width: 24px;\n height: 24px;\n border: 1px solid #dee2e6;\n background: white;\n border-radius: 4px;\n display: flex;\n align-items: center;\n justify-content: center;\n cursor: pointer;\n transition: all 0.2s ease;\n color: #6c757d;\n font-size: 12px;\n}\n\n.btn-expand:hover {\n background: #f8f9fa;\n border-color: #adb5bd;\n color: #495057;\n}\n\n/* Timeline Children */\n.timeline-children {\n position: relative;\n margin-top: 12px;\n margin-bottom: 12px;\n}\n\n.timeline-children::before {\n content: '';\n position: absolute;\n left: -10px;\n top: -12px;\n bottom: 0;\n width: 2px;\n background: #e9ecef;\n}\n\n.child-item {\n margin-bottom: 12px;\n}\n\n.child-item .timeline-content {\n background: #f8f9fa;\n border-color: #e0e6ed;\n}\n\n/* Sub-run timeline styles */\n.sub-run-timeline {\n background: rgba(33, 150, 243, 0.02);\n border-left: 2px solid rgba(33, 150, 243, 0.2);\n margin-left: 20px;\n padding-left: 20px;\n margin-top: 8px;\n margin-bottom: 8px;\n}\n\n.sub-run-item .timeline-marker {\n border-width: 2px;\n}\n\n.sub-run-item .timeline-content {\n transition: all 0.2s ease;\n}\n\n/* JSON Detail Pane (in splitter) */\n.json-detail-pane {\n height: 100%;\n display: flex;\n flex-direction: column;\n background: white;\n border-left: 1px solid #e0e6ed;\n}\n\n.json-pane-header {\n padding: 16px 20px;\n background: #f8f9fa;\n border-bottom: 1px solid #e0e6ed;\n display: flex;\n justify-content: space-between;\n align-items: center;\n flex-shrink: 0;\n}\n\n.json-pane-header h3 {\n margin: 0;\n font-size: 16px;\n color: #2c3e50;\n display: flex;\n align-items: center;\n gap: 10px;\n font-weight: 600;\n}\n\n.json-pane-content {\n flex: 1;\n overflow-y: auto;\n display: flex;\n flex-direction: column;\n}\n\n.json-meta {\n padding: 16px 20px;\n border-bottom: 1px solid #e0e6ed;\n display: flex;\n gap: 20px;\n flex-wrap: wrap;\n flex-shrink: 0;\n}\n\n.json-meta .meta-item {\n display: flex;\n flex-direction: column;\n gap: 4px;\n}\n\n.json-meta label {\n font-size: 11px;\n color: #7c8798;\n text-transform: uppercase;\n letter-spacing: 0.5px;\n}\n\n.json-meta span {\n font-size: 14px;\n color: #2c3e50;\n font-weight: 500;\n}\n\n.action-link {\n padding: 12px 20px;\n border-bottom: 1px solid #e0e6ed;\n flex-shrink: 0;\n}\n\n.action-link .btn-link {\n display: inline-flex;\n align-items: center;\n gap: 6px;\n color: #2196f3;\n text-decoration: none;\n font-size: 14px;\n padding: 8px 12px;\n background: #f0f7ff;\n border: 1px solid #d0e5ff;\n border-radius: 4px;\n transition: all 0.2s;\n cursor: pointer;\n}\n\n.action-link .btn-link:hover {\n background: #e1f0ff;\n border-color: #b0d5ff;\n text-decoration: none;\n}\n\n\n.json-toolbar {\n display: flex;\n justify-content: flex-end;\n gap: 8px;\n margin-bottom: 8px;\n}\n\n/* Details Tab */\n.details-grid {\n display: grid;\n grid-template-columns: repeat(auto-fit, minmax(250px, 1fr));\n gap: 20px;\n padding: 20px;\n}\n\n.detail-item {\n display: flex;\n flex-direction: column;\n gap: 8px;\n}\n\n.detail-item.full-width {\n grid-column: 1 / -1;\n}\n\n.detail-item label {\n font-size: 12px;\n color: #6c757d;\n text-transform: uppercase;\n letter-spacing: 0.5px;\n}\n\n.detail-item span {\n font-size: 14px;\n color: #495057;\n}\n\n.error-message {\n background: #f8d7da;\n color: #721c24;\n padding: 12px;\n border-radius: 8px;\n font-size: 13px;\n}\n\n.result-viewer,\n.state-viewer {\n padding: 20px;\n max-height: 450px;\n overflow: auto;\n display: flex;\n flex-direction: column;\n}\n\n.result-viewer mj-code-editor,\n.state-viewer mj-code-editor {\n flex: 1;\n min-height: 0;\n}\n\n/* Empty States */\n.empty-state,\n.loading-state,\n.error-state {\n text-align: center;\n padding: 60px 20px;\n color: #6c757d;\n}\n\n.empty-state i,\n.loading-state i,\n.error-state i {\n opacity: 0.3;\n margin-bottom: 16px;\n}\n\n/* Responsive */\n@media (max-width: 768px) {\n .header-content {\n flex-direction: column;\n gap: 16px;\n }\n \n .header-stats {\n flex-wrap: wrap;\n }\n \n .json-detail-pane {\n width: 100%;\n }\n \n .timeline {\n padding-left: 30px;\n }\n \n .timeline-marker {\n left: -25px;\n width: 32px;\n height: 32px;\n }\n \n .timeline-content {\n margin-left: 10px;\n }\n}\n\n/* Entity Link Styles */\n.entity-link {\n color: #2196f3;\n text-decoration: none;\n transition: all 0.2s ease;\n border-bottom: 1px solid transparent;\n display: inline-block;\n}\n\n.entity-link:hover {\n color: #1976d2;\n border-bottom-color: #1976d2;\n}\n\n.entity-link:active {\n color: #0d47a1;\n}\n\n/* Detail Pane Tabs */\n.detail-pane-tabs {\n display: flex;\n gap: 8px;\n margin: 8px 0 0 0;\n border-bottom: 1px solid #e0e6ed;\n padding: 0 16px;\n}\n\n.detail-tab {\n padding: 10px 16px;\n background: none;\n border: none;\n border-bottom: 3px solid transparent;\n color: #6c757d;\n font-size: 14px;\n font-weight: 500;\n cursor: pointer;\n transition: all 0.2s ease;\n display: flex;\n align-items: center;\n gap: 6px;\n}\n\n.detail-tab:hover {\n color: #495057;\n background: rgba(0, 0, 0, 0.02);\n}\n\n.detail-tab.active {\n color: #2196f3;\n border-bottom-color: #2196f3;\n}\n\n.detail-tab i {\n font-size: 14px;\n}\n\n/* Detail Pane Content */\n.detail-pane-content {\n flex: 1;\n overflow-y: auto;\n min-height: 0;\n margin-bottom: 35px;\n}\n\n.detail-pane-content.with-tabs {\n /* When tabs are shown, content starts right after tabs */\n margin-top: 0;\n}\n\n/* Step Payload Diff */\n.step-payload-diff {\n height: 100%;\n overflow-y: auto;\n padding: 16px;\n}\n\n.step-payload-diff mj-deep-diff {\n display: block;\n height: 100%;\n}\n\n/* JSON Viewer adjustments when no tabs */\n.detail-pane-content:not(.with-tabs) .json-viewer {\n margin-top: 16px;\n}"] }]
1020
+ }], () => [{ type: i0.ElementRef }, { type: i1.SharedService }, { type: i2.Router }, { type: i2.ActivatedRoute }, { type: i0.ChangeDetectorRef }], { timelineComponent: [{
1021
+ type: ViewChild,
1022
+ args: [AIAgentRunTimelineComponent]
1023
+ }], analyticsComponent: [{
1024
+ type: ViewChild,
1025
+ args: [AIAgentRunAnalyticsComponent]
1026
+ }] }); })();
965
1027
  (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassDebugInfo(AIAgentRunFormComponentExtended, { className: "AIAgentRunFormComponentExtended", filePath: "src/lib/custom/ai-agent-run/ai-agent-run.component.ts", lineNumber: 20 }); })();
966
1028
  // Loader function for AIAgentRunFormComponent
967
1029
  export function LoadAIAgentRunFormComponent() {