@memberjunction/ng-core-entity-forms 2.80.1 → 2.82.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 (87) hide show
  1. package/dist/lib/custom/AIAgents/add-action-dialog.component.d.ts +2 -2
  2. package/dist/lib/custom/AIAgents/add-action-dialog.component.d.ts.map +1 -1
  3. package/dist/lib/custom/AIAgents/add-action-dialog.component.js +4 -4
  4. package/dist/lib/custom/AIAgents/agent-prompt-advanced-settings-dialog.component.d.ts +2 -2
  5. package/dist/lib/custom/AIAgents/agent-prompt-advanced-settings-dialog.component.d.ts.map +1 -1
  6. package/dist/lib/custom/AIAgents/agent-prompt-advanced-settings-dialog.component.js +4 -4
  7. package/dist/lib/custom/AIAgents/ai-agent-form.component.d.ts +51 -3
  8. package/dist/lib/custom/AIAgents/ai-agent-form.component.d.ts.map +1 -1
  9. package/dist/lib/custom/AIAgents/ai-agent-form.component.js +722 -163
  10. package/dist/lib/custom/AIAgents/ai-agent-form.component.js.map +1 -1
  11. package/dist/lib/custom/AIAgents/ai-agent-management.service.d.ts +3 -2
  12. package/dist/lib/custom/AIAgents/ai-agent-management.service.d.ts.map +1 -1
  13. package/dist/lib/custom/AIAgents/ai-agent-management.service.js +74 -46
  14. package/dist/lib/custom/AIAgents/ai-agent-management.service.js.map +1 -1
  15. package/dist/lib/custom/AIAgents/create-prompt-dialog.component.d.ts +2 -2
  16. package/dist/lib/custom/AIAgents/create-prompt-dialog.component.d.ts.map +1 -1
  17. package/dist/lib/custom/AIAgents/create-prompt-dialog.component.js +4 -4
  18. package/dist/lib/custom/AIAgents/create-sub-agent-dialog.component.d.ts +2 -2
  19. package/dist/lib/custom/AIAgents/create-sub-agent-dialog.component.d.ts.map +1 -1
  20. package/dist/lib/custom/AIAgents/create-sub-agent-dialog.component.js +39 -32
  21. package/dist/lib/custom/AIAgents/create-sub-agent-dialog.component.js.map +1 -1
  22. package/dist/lib/custom/AIAgents/prompt-selector-dialog.component.d.ts.map +1 -1
  23. package/dist/lib/custom/AIAgents/prompt-selector-dialog.component.js +2 -2
  24. package/dist/lib/custom/AIAgents/prompt-selector-dialog.component.js.map +1 -1
  25. package/dist/lib/custom/AIAgents/sub-agent-advanced-settings-dialog.component.d.ts +2 -2
  26. package/dist/lib/custom/AIAgents/sub-agent-advanced-settings-dialog.component.d.ts.map +1 -1
  27. package/dist/lib/custom/AIAgents/sub-agent-advanced-settings-dialog.component.js +4 -4
  28. package/dist/lib/custom/AIAgents/sub-agent-selector-dialog.component.d.ts +2 -2
  29. package/dist/lib/custom/AIAgents/sub-agent-selector-dialog.component.d.ts.map +1 -1
  30. package/dist/lib/custom/AIAgents/sub-agent-selector-dialog.component.js +29 -25
  31. package/dist/lib/custom/AIAgents/sub-agent-selector-dialog.component.js.map +1 -1
  32. package/dist/lib/custom/AIPromptRuns/ai-prompt-run-form.component.js +299 -283
  33. package/dist/lib/custom/AIPromptRuns/ai-prompt-run-form.component.js.map +1 -1
  34. package/dist/lib/custom/AIPrompts/ai-prompt-form.component.js +474 -456
  35. package/dist/lib/custom/AIPrompts/ai-prompt-form.component.js.map +1 -1
  36. package/dist/lib/custom/Templates/templates-form.component.d.ts +5 -0
  37. package/dist/lib/custom/Templates/templates-form.component.d.ts.map +1 -1
  38. package/dist/lib/custom/Templates/templates-form.component.js +21 -2
  39. package/dist/lib/custom/Templates/templates-form.component.js.map +1 -1
  40. package/dist/lib/custom/ai-agent-run/ai-agent-run-analytics.component.d.ts +6 -0
  41. package/dist/lib/custom/ai-agent-run/ai-agent-run-analytics.component.d.ts.map +1 -1
  42. package/dist/lib/custom/ai-agent-run/ai-agent-run-analytics.component.js +70 -16
  43. package/dist/lib/custom/ai-agent-run/ai-agent-run-analytics.component.js.map +1 -1
  44. package/dist/lib/custom/ai-agent-run/ai-agent-run-data.service.d.ts +6 -5
  45. package/dist/lib/custom/ai-agent-run/ai-agent-run-data.service.d.ts.map +1 -1
  46. package/dist/lib/custom/ai-agent-run/ai-agent-run-data.service.js +8 -22
  47. package/dist/lib/custom/ai-agent-run/ai-agent-run-data.service.js.map +1 -1
  48. package/dist/lib/custom/ai-agent-run/ai-agent-run-timeline.component.d.ts +5 -4
  49. package/dist/lib/custom/ai-agent-run/ai-agent-run-timeline.component.d.ts.map +1 -1
  50. package/dist/lib/custom/ai-agent-run/ai-agent-run-timeline.component.js +30 -24
  51. package/dist/lib/custom/ai-agent-run/ai-agent-run-timeline.component.js.map +1 -1
  52. package/dist/lib/custom/ai-agent-run/ai-agent-run-visualization.component.d.ts +8 -4
  53. package/dist/lib/custom/ai-agent-run/ai-agent-run-visualization.component.d.ts.map +1 -1
  54. package/dist/lib/custom/ai-agent-run/ai-agent-run-visualization.component.js +39 -18
  55. package/dist/lib/custom/ai-agent-run/ai-agent-run-visualization.component.js.map +1 -1
  56. package/dist/lib/custom/ai-agent-run/ai-agent-run.component.d.ts +20 -3
  57. package/dist/lib/custom/ai-agent-run/ai-agent-run.component.d.ts.map +1 -1
  58. package/dist/lib/custom/ai-agent-run/ai-agent-run.component.js +317 -140
  59. package/dist/lib/custom/ai-agent-run/ai-agent-run.component.js.map +1 -1
  60. package/dist/lib/generated/Entities/AIAgent/sections/details.component.d.ts.map +1 -1
  61. package/dist/lib/generated/Entities/AIAgent/sections/details.component.js +13 -4
  62. package/dist/lib/generated/Entities/AIAgent/sections/details.component.js.map +1 -1
  63. package/dist/lib/generated/Entities/AIAgentRun/sections/details.component.d.ts.map +1 -1
  64. package/dist/lib/generated/Entities/AIAgentRun/sections/details.component.js +13 -4
  65. package/dist/lib/generated/Entities/AIAgentRun/sections/details.component.js.map +1 -1
  66. package/dist/lib/generated/Entities/AIPrompt/sections/details.component.d.ts.map +1 -1
  67. package/dist/lib/generated/Entities/AIPrompt/sections/details.component.js +13 -4
  68. package/dist/lib/generated/Entities/AIPrompt/sections/details.component.js.map +1 -1
  69. package/dist/lib/generated/Entities/AIPromptRun/sections/details.component.d.ts.map +1 -1
  70. package/dist/lib/generated/Entities/AIPromptRun/sections/details.component.js +13 -4
  71. package/dist/lib/generated/Entities/AIPromptRun/sections/details.component.js.map +1 -1
  72. package/dist/lib/generated/Entities/Entity/sections/details.component.d.ts.map +1 -1
  73. package/dist/lib/generated/Entities/Entity/sections/details.component.js +13 -4
  74. package/dist/lib/generated/Entities/Entity/sections/details.component.js.map +1 -1
  75. package/dist/lib/generated/Entities/Query/sections/details.component.d.ts.map +1 -1
  76. package/dist/lib/generated/Entities/Query/sections/details.component.js +40 -4
  77. package/dist/lib/generated/Entities/Query/sections/details.component.js.map +1 -1
  78. package/dist/lib/generated/Entities/QueryCategory/sections/details.component.d.ts.map +1 -1
  79. package/dist/lib/generated/Entities/QueryCategory/sections/details.component.js +40 -4
  80. package/dist/lib/generated/Entities/QueryCategory/sections/details.component.js.map +1 -1
  81. package/dist/lib/generated/Entities/User/user.form.component.js +6 -6
  82. package/dist/lib/generated/Entities/User/user.form.component.js.map +1 -1
  83. package/dist/lib/shared/components/template-editor.component.d.ts +5 -0
  84. package/dist/lib/shared/components/template-editor.component.d.ts.map +1 -1
  85. package/dist/lib/shared/components/template-editor.component.js +21 -2
  86. package/dist/lib/shared/components/template-editor.component.js.map +1 -1
  87. package/package.json +17 -16
@@ -15,20 +15,20 @@ import { AIAgentRunFormComponent } from '../../generated/Entities/AIAgentRun/aia
15
15
  import { ParseJSONRecursive } from '@memberjunction/global';
16
16
  import { AIAgentRunAnalyticsComponent } from './ai-agent-run-analytics.component';
17
17
  import { AIAgentRunVisualizationComponent } from './ai-agent-run-visualization.component';
18
+ import { AIAgentRunDataHelper } from './ai-agent-run-data.service';
18
19
  import * as i0 from "@angular/core";
19
20
  import * as i1 from "@memberjunction/ng-shared";
20
21
  import * as i2 from "@angular/router";
21
22
  import * as i3 from "./ai-agent-run-cost.service";
22
- import * as i4 from "./ai-agent-run-data.service";
23
- import * as i5 from "@angular/common";
24
- import * as i6 from "@angular/forms";
25
- import * as i7 from "@progress/kendo-angular-layout";
26
- import * as i8 from "@memberjunction/ng-code-editor";
27
- import * as i9 from "@memberjunction/ng-deep-diff";
28
- import * as i10 from "./ai-agent-run-timeline.component";
29
- import * as i11 from "./ai-agent-run-analytics.component";
30
- import * as i12 from "./ai-agent-run-visualization.component";
31
- import * as i13 from "./ai-agent-run-step-detail.component";
23
+ import * as i4 from "@angular/common";
24
+ import * as i5 from "@angular/forms";
25
+ import * as i6 from "@progress/kendo-angular-layout";
26
+ import * as i7 from "@memberjunction/ng-code-editor";
27
+ import * as i8 from "@memberjunction/ng-deep-diff";
28
+ import * as i9 from "./ai-agent-run-timeline.component";
29
+ import * as i10 from "./ai-agent-run-analytics.component";
30
+ import * as i11 from "./ai-agent-run-visualization.component";
31
+ import * as i12 from "./ai-agent-run-step-detail.component";
32
32
  function AIAgentRunFormComponentExtended_span_11_Template(rf, ctx) { if (rf & 1) {
33
33
  i0.ɵɵelementStart(0, "span", 35);
34
34
  i0.ɵɵtext(1);
@@ -143,6 +143,18 @@ function AIAgentRunFormComponentExtended_div_33_Template(rf, ctx) { if (rf & 1)
143
143
  i0.ɵɵproperty("ngIf", ctx_r0.costMetrics.isLoading);
144
144
  } }
145
145
  function AIAgentRunFormComponentExtended_div_34_Template(rf, ctx) { if (rf & 1) {
146
+ i0.ɵɵelementStart(0, "div", 21)(1, "span", 22);
147
+ i0.ɵɵtext(2, "Effort Level");
148
+ i0.ɵɵelementEnd();
149
+ i0.ɵɵelementStart(3, "span", 23);
150
+ i0.ɵɵtext(4);
151
+ i0.ɵɵelementEnd()();
152
+ } if (rf & 2) {
153
+ const ctx_r0 = i0.ɵɵnextContext();
154
+ i0.ɵɵadvance(4);
155
+ i0.ɵɵtextInterpolate(ctx_r0.record.EffortLevel);
156
+ } }
157
+ function AIAgentRunFormComponentExtended_div_35_Template(rf, ctx) { if (rf & 1) {
146
158
  const _r3 = i0.ɵɵgetCurrentView();
147
159
  i0.ɵɵelementStart(0, "div", 43)(1, "div", 44);
148
160
  i0.ɵɵelement(2, "i", 45);
@@ -150,7 +162,7 @@ function AIAgentRunFormComponentExtended_div_34_Template(rf, ctx) { if (rf & 1)
150
162
  i0.ɵɵtext(5, "Configuration");
151
163
  i0.ɵɵelementEnd();
152
164
  i0.ɵɵelementStart(6, "div", 48)(7, "a", 49);
153
- i0.ɵɵlistener("click", function AIAgentRunFormComponentExtended_div_34_Template_a_click_7_listener() { i0.ɵɵrestoreView(_r3); const ctx_r0 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r0.openEntityRecord("MJ: AI Configurations", ctx_r0.record.ConfigurationID)); });
165
+ i0.ɵɵlistener("click", function AIAgentRunFormComponentExtended_div_35_Template_a_click_7_listener() { i0.ɵɵrestoreView(_r3); const ctx_r0 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r0.openEntityRecord("MJ: AI Configurations", ctx_r0.record.ConfigurationID)); });
154
166
  i0.ɵɵtext(8);
155
167
  i0.ɵɵelementEnd()()()()();
156
168
  } if (rf & 2) {
@@ -158,59 +170,59 @@ function AIAgentRunFormComponentExtended_div_34_Template(rf, ctx) { if (rf & 1)
158
170
  i0.ɵɵadvance(8);
159
171
  i0.ɵɵtextInterpolate1(" ", ctx_r0.record.Configuration || "Unknown", " ");
160
172
  } }
161
- function AIAgentRunFormComponentExtended_div_49_Template(rf, ctx) { if (rf & 1) {
173
+ function AIAgentRunFormComponentExtended_div_50_Template(rf, ctx) { if (rf & 1) {
162
174
  const _r4 = i0.ɵɵgetCurrentView();
163
175
  i0.ɵɵelementStart(0, "div", 50)(1, "kendo-splitter", 51)(2, "kendo-splitter-pane", 52)(3, "mj-ai-agent-run-timeline", 53);
164
- i0.ɵɵlistener("itemSelected", function AIAgentRunFormComponentExtended_div_49_Template_mj_ai_agent_run_timeline_itemSelected_3_listener($event) { i0.ɵɵrestoreView(_r4); const ctx_r0 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r0.selectTimelineItem($event)); })("navigateToEntity", function AIAgentRunFormComponentExtended_div_49_Template_mj_ai_agent_run_timeline_navigateToEntity_3_listener($event) { i0.ɵɵrestoreView(_r4); const ctx_r0 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r0.navigateToEntityRecord($event)); })("agentRunCompleted", function AIAgentRunFormComponentExtended_div_49_Template_mj_ai_agent_run_timeline_agentRunCompleted_3_listener($event) { i0.ɵɵrestoreView(_r4); const ctx_r0 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r0.onAgentRunCompleted($event)); });
176
+ i0.ɵɵlistener("itemSelected", function AIAgentRunFormComponentExtended_div_50_Template_mj_ai_agent_run_timeline_itemSelected_3_listener($event) { i0.ɵɵrestoreView(_r4); const ctx_r0 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r0.selectTimelineItem($event)); })("navigateToEntity", function AIAgentRunFormComponentExtended_div_50_Template_mj_ai_agent_run_timeline_navigateToEntity_3_listener($event) { i0.ɵɵrestoreView(_r4); const ctx_r0 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r0.navigateToEntityRecord($event)); })("agentRunCompleted", function AIAgentRunFormComponentExtended_div_50_Template_mj_ai_agent_run_timeline_agentRunCompleted_3_listener($event) { i0.ɵɵrestoreView(_r4); const ctx_r0 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r0.onAgentRunCompleted($event)); });
165
177
  i0.ɵɵelementEnd()();
166
178
  i0.ɵɵelementStart(4, "kendo-splitter-pane", 54)(5, "mj-ai-agent-run-step-detail", 55);
167
- i0.ɵɵlistener("closePanel", function AIAgentRunFormComponentExtended_div_49_Template_mj_ai_agent_run_step_detail_closePanel_5_listener() { i0.ɵɵrestoreView(_r4); const ctx_r0 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r0.closeJsonPanel()); })("navigateToActionLog", function AIAgentRunFormComponentExtended_div_49_Template_mj_ai_agent_run_step_detail_navigateToActionLog_5_listener($event) { i0.ɵɵrestoreView(_r4); const ctx_r0 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r0.navigateToActionLog($event)); })("copyToClipboard", function AIAgentRunFormComponentExtended_div_49_Template_mj_ai_agent_run_step_detail_copyToClipboard_5_listener($event) { i0.ɵɵrestoreView(_r4); const ctx_r0 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r0.copyToClipboard($event)); });
179
+ i0.ɵɵlistener("closePanel", function AIAgentRunFormComponentExtended_div_50_Template_mj_ai_agent_run_step_detail_closePanel_5_listener() { i0.ɵɵrestoreView(_r4); const ctx_r0 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r0.closeJsonPanel()); })("navigateToActionLog", function AIAgentRunFormComponentExtended_div_50_Template_mj_ai_agent_run_step_detail_navigateToActionLog_5_listener($event) { i0.ɵɵrestoreView(_r4); const ctx_r0 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r0.navigateToActionLog($event)); })("copyToClipboard", function AIAgentRunFormComponentExtended_div_50_Template_mj_ai_agent_run_step_detail_copyToClipboard_5_listener($event) { i0.ɵɵrestoreView(_r4); const ctx_r0 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r0.copyToClipboard($event)); });
168
180
  i0.ɵɵelementEnd()()()();
169
181
  } if (rf & 2) {
170
182
  const ctx_r0 = i0.ɵɵnextContext();
171
183
  i0.ɵɵadvance(2);
172
184
  i0.ɵɵproperty("min", "400px");
173
185
  i0.ɵɵadvance();
174
- i0.ɵɵproperty("aiAgentRunId", ctx_r0.record.ID)("autoRefresh", ctx_r0.record.Status === "Running")("refreshInterval", 30000);
186
+ i0.ɵɵproperty("aiAgentRunId", ctx_r0.record.ID)("dataHelper", ctx_r0.dataHelper)("autoRefresh", ctx_r0.record.Status === "Running")("refreshInterval", 30000);
175
187
  i0.ɵɵadvance();
176
188
  i0.ɵɵproperty("size", "45%")("min", "300px")("collapsed", !ctx_r0.selectedTimelineItem);
177
189
  i0.ɵɵadvance();
178
190
  i0.ɵɵproperty("selectedTimelineItem", ctx_r0.selectedTimelineItem);
179
191
  } }
180
- function AIAgentRunFormComponentExtended_div_50_mj_ai_agent_run_visualization_1_Template(rf, ctx) { if (rf & 1) {
192
+ function AIAgentRunFormComponentExtended_div_51_mj_ai_agent_run_visualization_1_Template(rf, ctx) { if (rf & 1) {
181
193
  i0.ɵɵelement(0, "mj-ai-agent-run-visualization", 57, 0);
182
194
  } if (rf & 2) {
183
195
  const ctx_r0 = i0.ɵɵnextContext(2);
184
- i0.ɵɵproperty("aiAgentRunId", ctx_r0.record.ID);
196
+ i0.ɵɵproperty("aiAgentRunId", ctx_r0.record.ID)("dataHelper", ctx_r0.dataHelper);
185
197
  } }
186
- function AIAgentRunFormComponentExtended_div_50_Template(rf, ctx) { if (rf & 1) {
198
+ function AIAgentRunFormComponentExtended_div_51_Template(rf, ctx) { if (rf & 1) {
187
199
  i0.ɵɵelementStart(0, "div", 50);
188
- i0.ɵɵtemplate(1, AIAgentRunFormComponentExtended_div_50_mj_ai_agent_run_visualization_1_Template, 2, 1, "mj-ai-agent-run-visualization", 56);
200
+ i0.ɵɵtemplate(1, AIAgentRunFormComponentExtended_div_51_mj_ai_agent_run_visualization_1_Template, 2, 2, "mj-ai-agent-run-visualization", 56);
189
201
  i0.ɵɵelementEnd();
190
202
  } if (rf & 2) {
191
203
  const ctx_r0 = i0.ɵɵnextContext();
192
204
  i0.ɵɵadvance();
193
205
  i0.ɵɵproperty("ngIf", ctx_r0.visualizationLoaded);
194
206
  } }
195
- function AIAgentRunFormComponentExtended_div_51_mj_ai_agent_run_analytics_1_Template(rf, ctx) { if (rf & 1) {
207
+ function AIAgentRunFormComponentExtended_div_52_mj_ai_agent_run_analytics_1_Template(rf, ctx) { if (rf & 1) {
196
208
  i0.ɵɵelement(0, "mj-ai-agent-run-analytics", 59, 1);
197
209
  } if (rf & 2) {
198
210
  const ctx_r0 = i0.ɵɵnextContext(2);
199
211
  i0.ɵɵproperty("agentRunId", ctx_r0.record.ID);
200
212
  } }
201
- function AIAgentRunFormComponentExtended_div_51_Template(rf, ctx) { if (rf & 1) {
213
+ function AIAgentRunFormComponentExtended_div_52_Template(rf, ctx) { if (rf & 1) {
202
214
  i0.ɵɵelementStart(0, "div", 50);
203
- i0.ɵɵtemplate(1, AIAgentRunFormComponentExtended_div_51_mj_ai_agent_run_analytics_1_Template, 2, 1, "mj-ai-agent-run-analytics", 58);
215
+ i0.ɵɵtemplate(1, AIAgentRunFormComponentExtended_div_52_mj_ai_agent_run_analytics_1_Template, 2, 1, "mj-ai-agent-run-analytics", 58);
204
216
  i0.ɵɵelementEnd();
205
217
  } if (rf & 2) {
206
218
  const ctx_r0 = i0.ɵɵnextContext();
207
219
  i0.ɵɵadvance();
208
220
  i0.ɵɵproperty("ngIf", ctx_r0.analyticsLoaded);
209
221
  } }
210
- function AIAgentRunFormComponentExtended_div_52_ng_template_3_a_11_Template(rf, ctx) { if (rf & 1) {
222
+ function AIAgentRunFormComponentExtended_div_53_ng_template_3_a_11_Template(rf, ctx) { if (rf & 1) {
211
223
  const _r6 = i0.ɵɵgetCurrentView();
212
224
  i0.ɵɵelementStart(0, "a", 49);
213
- i0.ɵɵlistener("click", function AIAgentRunFormComponentExtended_div_52_ng_template_3_a_11_Template_a_click_0_listener() { i0.ɵɵrestoreView(_r6); const ctx_r0 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r0.openEntityRecord("MJ: AI Agent Runs", ctx_r0.record.ParentRunID)); });
225
+ i0.ɵɵlistener("click", function AIAgentRunFormComponentExtended_div_53_ng_template_3_a_11_Template_a_click_0_listener() { i0.ɵɵrestoreView(_r6); const ctx_r0 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r0.openEntityRecord("MJ: AI Agent Runs", ctx_r0.record.ParentRunID)); });
214
226
  i0.ɵɵtext(1);
215
227
  i0.ɵɵelementEnd();
216
228
  } if (rf & 2) {
@@ -218,15 +230,15 @@ function AIAgentRunFormComponentExtended_div_52_ng_template_3_a_11_Template(rf,
218
230
  i0.ɵɵadvance();
219
231
  i0.ɵɵtextInterpolate1(" ", ctx_r0.record.ParentRunID, " ");
220
232
  } }
221
- function AIAgentRunFormComponentExtended_div_52_ng_template_3_span_12_Template(rf, ctx) { if (rf & 1) {
233
+ function AIAgentRunFormComponentExtended_div_53_ng_template_3_span_12_Template(rf, ctx) { if (rf & 1) {
222
234
  i0.ɵɵelementStart(0, "span");
223
235
  i0.ɵɵtext(1, "None (Root)");
224
236
  i0.ɵɵelementEnd();
225
237
  } }
226
- function AIAgentRunFormComponentExtended_div_52_ng_template_3_a_17_Template(rf, ctx) { if (rf & 1) {
238
+ function AIAgentRunFormComponentExtended_div_53_ng_template_3_a_17_Template(rf, ctx) { if (rf & 1) {
227
239
  const _r7 = i0.ɵɵgetCurrentView();
228
240
  i0.ɵɵelementStart(0, "a", 49);
229
- i0.ɵɵlistener("click", function AIAgentRunFormComponentExtended_div_52_ng_template_3_a_17_Template_a_click_0_listener() { i0.ɵɵrestoreView(_r7); const ctx_r0 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r0.openEntityRecord("MJ: AI Agent Runs", ctx_r0.record.LastRunID)); });
241
+ i0.ɵɵlistener("click", function AIAgentRunFormComponentExtended_div_53_ng_template_3_a_17_Template_a_click_0_listener() { i0.ɵɵrestoreView(_r7); const ctx_r0 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r0.openEntityRecord("MJ: AI Agent Runs", ctx_r0.record.LastRunID)); });
230
242
  i0.ɵɵtext(1);
231
243
  i0.ɵɵelementEnd();
232
244
  } if (rf & 2) {
@@ -234,15 +246,15 @@ function AIAgentRunFormComponentExtended_div_52_ng_template_3_a_17_Template(rf,
234
246
  i0.ɵɵadvance();
235
247
  i0.ɵɵtextInterpolate1(" ", ctx_r0.record.LastRunID, " ");
236
248
  } }
237
- function AIAgentRunFormComponentExtended_div_52_ng_template_3_span_18_Template(rf, ctx) { if (rf & 1) {
249
+ function AIAgentRunFormComponentExtended_div_53_ng_template_3_span_18_Template(rf, ctx) { if (rf & 1) {
238
250
  i0.ɵɵelementStart(0, "span");
239
251
  i0.ɵɵtext(1, "None");
240
252
  i0.ɵɵelementEnd();
241
253
  } }
242
- function AIAgentRunFormComponentExtended_div_52_ng_template_3_a_23_Template(rf, ctx) { if (rf & 1) {
254
+ function AIAgentRunFormComponentExtended_div_53_ng_template_3_a_23_Template(rf, ctx) { if (rf & 1) {
243
255
  const _r8 = i0.ɵɵgetCurrentView();
244
256
  i0.ɵɵelementStart(0, "a", 49);
245
- i0.ɵɵlistener("click", function AIAgentRunFormComponentExtended_div_52_ng_template_3_a_23_Template_a_click_0_listener() { i0.ɵɵrestoreView(_r8); const ctx_r0 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r0.openEntityRecord("Conversations", ctx_r0.record.ConversationID)); });
257
+ i0.ɵɵlistener("click", function AIAgentRunFormComponentExtended_div_53_ng_template_3_a_23_Template_a_click_0_listener() { i0.ɵɵrestoreView(_r8); const ctx_r0 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r0.openEntityRecord("Conversations", ctx_r0.record.ConversationID)); });
246
258
  i0.ɵɵtext(1);
247
259
  i0.ɵɵelementEnd();
248
260
  } if (rf & 2) {
@@ -250,15 +262,15 @@ function AIAgentRunFormComponentExtended_div_52_ng_template_3_a_23_Template(rf,
250
262
  i0.ɵɵadvance();
251
263
  i0.ɵɵtextInterpolate1(" ", ctx_r0.record.ConversationID, " ");
252
264
  } }
253
- function AIAgentRunFormComponentExtended_div_52_ng_template_3_span_24_Template(rf, ctx) { if (rf & 1) {
265
+ function AIAgentRunFormComponentExtended_div_53_ng_template_3_span_24_Template(rf, ctx) { if (rf & 1) {
254
266
  i0.ɵɵelementStart(0, "span");
255
267
  i0.ɵɵtext(1, "N/A");
256
268
  i0.ɵɵelementEnd();
257
269
  } }
258
- function AIAgentRunFormComponentExtended_div_52_ng_template_3_a_29_Template(rf, ctx) { if (rf & 1) {
270
+ function AIAgentRunFormComponentExtended_div_53_ng_template_3_a_29_Template(rf, ctx) { if (rf & 1) {
259
271
  const _r9 = i0.ɵɵgetCurrentView();
260
272
  i0.ɵɵelementStart(0, "a", 49);
261
- i0.ɵɵlistener("click", function AIAgentRunFormComponentExtended_div_52_ng_template_3_a_29_Template_a_click_0_listener() { i0.ɵɵrestoreView(_r9); const ctx_r0 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r0.openEntityRecord("Users", ctx_r0.record.UserID)); });
273
+ i0.ɵɵlistener("click", function AIAgentRunFormComponentExtended_div_53_ng_template_3_a_29_Template_a_click_0_listener() { i0.ɵɵrestoreView(_r9); const ctx_r0 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r0.openEntityRecord("Users", ctx_r0.record.UserID)); });
262
274
  i0.ɵɵtext(1);
263
275
  i0.ɵɵelementEnd();
264
276
  } if (rf & 2) {
@@ -266,43 +278,43 @@ function AIAgentRunFormComponentExtended_div_52_ng_template_3_a_29_Template(rf,
266
278
  i0.ɵɵadvance();
267
279
  i0.ɵɵtextInterpolate1(" ", ctx_r0.record.User || "N/A", " ");
268
280
  } }
269
- function AIAgentRunFormComponentExtended_div_52_ng_template_3_span_30_Template(rf, ctx) { if (rf & 1) {
281
+ function AIAgentRunFormComponentExtended_div_53_ng_template_3_span_30_Template(rf, ctx) { if (rf & 1) {
270
282
  i0.ɵɵelementStart(0, "span");
271
283
  i0.ɵɵtext(1, "N/A");
272
284
  i0.ɵɵelementEnd();
273
285
  } }
274
- function AIAgentRunFormComponentExtended_div_52_ng_template_3_Template(rf, ctx) { if (rf & 1) {
286
+ function AIAgentRunFormComponentExtended_div_53_ng_template_3_Template(rf, ctx) { if (rf & 1) {
275
287
  const _r5 = i0.ɵɵgetCurrentView();
276
288
  i0.ɵɵelementStart(0, "div", 72)(1, "div", 73)(2, "label");
277
289
  i0.ɵɵtext(3, "Agent");
278
290
  i0.ɵɵelementEnd();
279
291
  i0.ɵɵelementStart(4, "span")(5, "a", 49);
280
- i0.ɵɵlistener("click", function AIAgentRunFormComponentExtended_div_52_ng_template_3_Template_a_click_5_listener() { i0.ɵɵrestoreView(_r5); const ctx_r0 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r0.openEntityRecord("AI Agents", ctx_r0.record.AgentID)); });
292
+ i0.ɵɵlistener("click", function AIAgentRunFormComponentExtended_div_53_ng_template_3_Template_a_click_5_listener() { i0.ɵɵrestoreView(_r5); const ctx_r0 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r0.openEntityRecord("AI Agents", ctx_r0.record.AgentID)); });
281
293
  i0.ɵɵtext(6);
282
294
  i0.ɵɵelementEnd()()();
283
295
  i0.ɵɵelementStart(7, "div", 73)(8, "label");
284
296
  i0.ɵɵtext(9, "Parent Run ID");
285
297
  i0.ɵɵelementEnd();
286
298
  i0.ɵɵelementStart(10, "span");
287
- i0.ɵɵtemplate(11, AIAgentRunFormComponentExtended_div_52_ng_template_3_a_11_Template, 2, 1, "a", 74)(12, AIAgentRunFormComponentExtended_div_52_ng_template_3_span_12_Template, 2, 0, "span", 75);
299
+ i0.ɵɵtemplate(11, AIAgentRunFormComponentExtended_div_53_ng_template_3_a_11_Template, 2, 1, "a", 74)(12, AIAgentRunFormComponentExtended_div_53_ng_template_3_span_12_Template, 2, 0, "span", 75);
288
300
  i0.ɵɵelementEnd()();
289
301
  i0.ɵɵelementStart(13, "div", 73)(14, "label");
290
302
  i0.ɵɵtext(15, "Last Run ID");
291
303
  i0.ɵɵelementEnd();
292
304
  i0.ɵɵelementStart(16, "span");
293
- i0.ɵɵtemplate(17, AIAgentRunFormComponentExtended_div_52_ng_template_3_a_17_Template, 2, 1, "a", 74)(18, AIAgentRunFormComponentExtended_div_52_ng_template_3_span_18_Template, 2, 0, "span", 75);
305
+ i0.ɵɵtemplate(17, AIAgentRunFormComponentExtended_div_53_ng_template_3_a_17_Template, 2, 1, "a", 74)(18, AIAgentRunFormComponentExtended_div_53_ng_template_3_span_18_Template, 2, 0, "span", 75);
294
306
  i0.ɵɵelementEnd()();
295
307
  i0.ɵɵelementStart(19, "div", 73)(20, "label");
296
308
  i0.ɵɵtext(21, "Conversation ID");
297
309
  i0.ɵɵelementEnd();
298
310
  i0.ɵɵelementStart(22, "span");
299
- i0.ɵɵtemplate(23, AIAgentRunFormComponentExtended_div_52_ng_template_3_a_23_Template, 2, 1, "a", 74)(24, AIAgentRunFormComponentExtended_div_52_ng_template_3_span_24_Template, 2, 0, "span", 75);
311
+ i0.ɵɵtemplate(23, AIAgentRunFormComponentExtended_div_53_ng_template_3_a_23_Template, 2, 1, "a", 74)(24, AIAgentRunFormComponentExtended_div_53_ng_template_3_span_24_Template, 2, 0, "span", 75);
300
312
  i0.ɵɵelementEnd()();
301
313
  i0.ɵɵelementStart(25, "div", 73)(26, "label");
302
314
  i0.ɵɵtext(27, "User");
303
315
  i0.ɵɵelementEnd();
304
316
  i0.ɵɵelementStart(28, "span");
305
- i0.ɵɵtemplate(29, AIAgentRunFormComponentExtended_div_52_ng_template_3_a_29_Template, 2, 1, "a", 74)(30, AIAgentRunFormComponentExtended_div_52_ng_template_3_span_30_Template, 2, 0, "span", 75);
317
+ i0.ɵɵtemplate(29, AIAgentRunFormComponentExtended_div_53_ng_template_3_a_29_Template, 2, 1, "a", 74)(30, AIAgentRunFormComponentExtended_div_53_ng_template_3_span_30_Template, 2, 0, "span", 75);
306
318
  i0.ɵɵelementEnd()()();
307
319
  } if (rf & 2) {
308
320
  const ctx_r0 = i0.ɵɵnextContext(2);
@@ -325,10 +337,10 @@ function AIAgentRunFormComponentExtended_div_52_ng_template_3_Template(rf, ctx)
325
337
  i0.ɵɵadvance();
326
338
  i0.ɵɵproperty("ngIf", !ctx_r0.record.UserID);
327
339
  } }
328
- function AIAgentRunFormComponentExtended_div_52_ng_template_5_a_5_Template(rf, ctx) { if (rf & 1) {
340
+ function AIAgentRunFormComponentExtended_div_53_ng_template_5_a_5_Template(rf, ctx) { if (rf & 1) {
329
341
  const _r10 = i0.ɵɵgetCurrentView();
330
342
  i0.ɵɵelementStart(0, "a", 49);
331
- i0.ɵɵlistener("click", function AIAgentRunFormComponentExtended_div_52_ng_template_5_a_5_Template_a_click_0_listener() { i0.ɵɵrestoreView(_r10); const ctx_r0 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r0.openEntityRecord("AI Models", ctx_r0.record.OverrideModelID)); });
343
+ i0.ɵɵlistener("click", function AIAgentRunFormComponentExtended_div_53_ng_template_5_a_5_Template_a_click_0_listener() { i0.ɵɵrestoreView(_r10); const ctx_r0 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r0.openEntityRecord("AI Models", ctx_r0.record.OverrideModelID)); });
332
344
  i0.ɵɵtext(1);
333
345
  i0.ɵɵelementEnd();
334
346
  } if (rf & 2) {
@@ -336,15 +348,15 @@ function AIAgentRunFormComponentExtended_div_52_ng_template_5_a_5_Template(rf, c
336
348
  i0.ɵɵadvance();
337
349
  i0.ɵɵtextInterpolate1(" ", ctx_r0.record.OverrideModel || "N/A", " ");
338
350
  } }
339
- function AIAgentRunFormComponentExtended_div_52_ng_template_5_span_6_Template(rf, ctx) { if (rf & 1) {
351
+ function AIAgentRunFormComponentExtended_div_53_ng_template_5_span_6_Template(rf, ctx) { if (rf & 1) {
340
352
  i0.ɵɵelementStart(0, "span");
341
353
  i0.ɵɵtext(1, "N/A");
342
354
  i0.ɵɵelementEnd();
343
355
  } }
344
- function AIAgentRunFormComponentExtended_div_52_ng_template_5_a_11_Template(rf, ctx) { if (rf & 1) {
356
+ function AIAgentRunFormComponentExtended_div_53_ng_template_5_a_11_Template(rf, ctx) { if (rf & 1) {
345
357
  const _r11 = i0.ɵɵgetCurrentView();
346
358
  i0.ɵɵelementStart(0, "a", 49);
347
- i0.ɵɵlistener("click", function AIAgentRunFormComponentExtended_div_52_ng_template_5_a_11_Template_a_click_0_listener() { i0.ɵɵrestoreView(_r11); const ctx_r0 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r0.openEntityRecord("AI Vendors", ctx_r0.record.OverrideVendorID)); });
359
+ i0.ɵɵlistener("click", function AIAgentRunFormComponentExtended_div_53_ng_template_5_a_11_Template_a_click_0_listener() { i0.ɵɵrestoreView(_r11); const ctx_r0 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r0.openEntityRecord("AI Vendors", ctx_r0.record.OverrideVendorID)); });
348
360
  i0.ɵɵtext(1);
349
361
  i0.ɵɵelementEnd();
350
362
  } if (rf & 2) {
@@ -352,23 +364,23 @@ function AIAgentRunFormComponentExtended_div_52_ng_template_5_a_11_Template(rf,
352
364
  i0.ɵɵadvance();
353
365
  i0.ɵɵtextInterpolate1(" ", ctx_r0.record.OverrideVendor || "N/A", " ");
354
366
  } }
355
- function AIAgentRunFormComponentExtended_div_52_ng_template_5_span_12_Template(rf, ctx) { if (rf & 1) {
367
+ function AIAgentRunFormComponentExtended_div_53_ng_template_5_span_12_Template(rf, ctx) { if (rf & 1) {
356
368
  i0.ɵɵelementStart(0, "span");
357
369
  i0.ɵɵtext(1, "N/A");
358
370
  i0.ɵɵelementEnd();
359
371
  } }
360
- function AIAgentRunFormComponentExtended_div_52_ng_template_5_Template(rf, ctx) { if (rf & 1) {
372
+ function AIAgentRunFormComponentExtended_div_53_ng_template_5_Template(rf, ctx) { if (rf & 1) {
361
373
  i0.ɵɵelementStart(0, "div", 72)(1, "div", 73)(2, "label");
362
374
  i0.ɵɵtext(3, "Override Model");
363
375
  i0.ɵɵelementEnd();
364
376
  i0.ɵɵelementStart(4, "span");
365
- i0.ɵɵtemplate(5, AIAgentRunFormComponentExtended_div_52_ng_template_5_a_5_Template, 2, 1, "a", 74)(6, AIAgentRunFormComponentExtended_div_52_ng_template_5_span_6_Template, 2, 0, "span", 75);
377
+ i0.ɵɵtemplate(5, AIAgentRunFormComponentExtended_div_53_ng_template_5_a_5_Template, 2, 1, "a", 74)(6, AIAgentRunFormComponentExtended_div_53_ng_template_5_span_6_Template, 2, 0, "span", 75);
366
378
  i0.ɵɵelementEnd()();
367
379
  i0.ɵɵelementStart(7, "div", 73)(8, "label");
368
380
  i0.ɵɵtext(9, "Override Vendor");
369
381
  i0.ɵɵelementEnd();
370
382
  i0.ɵɵelementStart(10, "span");
371
- i0.ɵɵtemplate(11, AIAgentRunFormComponentExtended_div_52_ng_template_5_a_11_Template, 2, 1, "a", 74)(12, AIAgentRunFormComponentExtended_div_52_ng_template_5_span_12_Template, 2, 0, "span", 75);
383
+ i0.ɵɵtemplate(11, AIAgentRunFormComponentExtended_div_53_ng_template_5_a_11_Template, 2, 1, "a", 74)(12, AIAgentRunFormComponentExtended_div_53_ng_template_5_span_12_Template, 2, 0, "span", 75);
372
384
  i0.ɵɵelementEnd()();
373
385
  i0.ɵɵelementStart(13, "div", 73)(14, "label");
374
386
  i0.ɵɵtext(15, "Verbose Logging");
@@ -389,7 +401,7 @@ function AIAgentRunFormComponentExtended_div_52_ng_template_5_Template(rf, ctx)
389
401
  i0.ɵɵadvance(5);
390
402
  i0.ɵɵtextInterpolate(ctx_r0.record.Verbose ? "Yes" : "No");
391
403
  } }
392
- function AIAgentRunFormComponentExtended_div_52_ng_template_7_div_11_Template(rf, ctx) { if (rf & 1) {
404
+ function AIAgentRunFormComponentExtended_div_53_ng_template_7_div_11_Template(rf, ctx) { if (rf & 1) {
393
405
  i0.ɵɵelementStart(0, "div", 77)(1, "label");
394
406
  i0.ɵɵtext(2, "Error Message");
395
407
  i0.ɵɵelementEnd();
@@ -401,7 +413,7 @@ function AIAgentRunFormComponentExtended_div_52_ng_template_7_div_11_Template(rf
401
413
  i0.ɵɵadvance(4);
402
414
  i0.ɵɵtextInterpolate(ctx_r0.record.ErrorMessage);
403
415
  } }
404
- function AIAgentRunFormComponentExtended_div_52_ng_template_7_Template(rf, ctx) { if (rf & 1) {
416
+ function AIAgentRunFormComponentExtended_div_53_ng_template_7_Template(rf, ctx) { if (rf & 1) {
405
417
  i0.ɵɵelementStart(0, "div", 72)(1, "div", 73)(2, "label");
406
418
  i0.ɵɵtext(3, "Status");
407
419
  i0.ɵɵelementEnd();
@@ -414,7 +426,7 @@ function AIAgentRunFormComponentExtended_div_52_ng_template_7_Template(rf, ctx)
414
426
  i0.ɵɵelementStart(9, "span");
415
427
  i0.ɵɵtext(10);
416
428
  i0.ɵɵelementEnd()();
417
- i0.ɵɵtemplate(11, AIAgentRunFormComponentExtended_div_52_ng_template_7_div_11_Template, 5, 1, "div", 76);
429
+ i0.ɵɵtemplate(11, AIAgentRunFormComponentExtended_div_53_ng_template_7_div_11_Template, 5, 1, "div", 76);
418
430
  i0.ɵɵelementEnd();
419
431
  } if (rf & 2) {
420
432
  const ctx_r0 = i0.ɵɵnextContext(2);
@@ -429,7 +441,7 @@ function AIAgentRunFormComponentExtended_div_52_ng_template_7_Template(rf, ctx)
429
441
  i0.ɵɵadvance();
430
442
  i0.ɵɵproperty("ngIf", ctx_r0.record.ErrorMessage);
431
443
  } }
432
- function AIAgentRunFormComponentExtended_div_52_ng_template_9_Template(rf, ctx) { if (rf & 1) {
444
+ function AIAgentRunFormComponentExtended_div_53_ng_template_9_Template(rf, ctx) { if (rf & 1) {
433
445
  i0.ɵɵelementStart(0, "div", 72)(1, "div", 73)(2, "label");
434
446
  i0.ɵɵtext(3, "Total Tokens Used");
435
447
  i0.ɵɵelementEnd();
@@ -478,90 +490,150 @@ function AIAgentRunFormComponentExtended_div_52_ng_template_9_Template(rf, ctx)
478
490
  i0.ɵɵadvance(6);
479
491
  i0.ɵɵtextInterpolate(ctx_r0.record.TotalPromptIterations != null ? i0.ɵɵpipeBind2(30, 17, ctx_r0.record.TotalPromptIterations, "1.0-0") : "N/A");
480
492
  } }
481
- function AIAgentRunFormComponentExtended_div_52_kendo_panelbar_item_10_ng_template_1_Template(rf, ctx) { if (rf & 1) {
482
- i0.ɵɵelementStart(0, "div", 80);
483
- i0.ɵɵelement(1, "mj-code-editor", 81);
484
- i0.ɵɵelementEnd();
493
+ function AIAgentRunFormComponentExtended_div_53_kendo_panelbar_item_10_ng_template_1_Conditional_1_Template(rf, ctx) { if (rf & 1) {
494
+ i0.ɵɵelement(0, "mj-code-editor", 81);
485
495
  } if (rf & 2) {
486
- const ctx_r0 = i0.ɵɵnextContext(3);
487
- i0.ɵɵadvance();
496
+ const ctx_r0 = i0.ɵɵnextContext(4);
488
497
  i0.ɵɵproperty("ngModel", ctx_r0.parsedResult)("language", "json")("readonly", true);
489
498
  } }
490
- function AIAgentRunFormComponentExtended_div_52_kendo_panelbar_item_10_Template(rf, ctx) { if (rf & 1) {
491
- i0.ɵɵelementStart(0, "kendo-panelbar-item", 79);
492
- i0.ɵɵtemplate(1, AIAgentRunFormComponentExtended_div_52_kendo_panelbar_item_10_ng_template_1_Template, 2, 3, "ng-template", 63);
499
+ function AIAgentRunFormComponentExtended_div_53_kendo_panelbar_item_10_ng_template_1_Conditional_2_Template(rf, ctx) { if (rf & 1) {
500
+ i0.ɵɵelementStart(0, "div", 82);
501
+ i0.ɵɵelement(1, "i", 42);
502
+ i0.ɵɵtext(2, " Loading result data... ");
493
503
  i0.ɵɵelementEnd();
494
504
  } }
495
- function AIAgentRunFormComponentExtended_div_52_kendo_panelbar_item_11_ng_template_1_Template(rf, ctx) { if (rf & 1) {
505
+ function AIAgentRunFormComponentExtended_div_53_kendo_panelbar_item_10_ng_template_1_Template(rf, ctx) { if (rf & 1) {
496
506
  i0.ɵɵelementStart(0, "div", 80);
497
- i0.ɵɵelement(1, "mj-code-editor", 81);
507
+ i0.ɵɵtemplate(1, AIAgentRunFormComponentExtended_div_53_kendo_panelbar_item_10_ng_template_1_Conditional_1_Template, 1, 3, "mj-code-editor", 81)(2, AIAgentRunFormComponentExtended_div_53_kendo_panelbar_item_10_ng_template_1_Conditional_2_Template, 3, 0, "div", 82);
498
508
  i0.ɵɵelementEnd();
499
509
  } if (rf & 2) {
500
510
  const ctx_r0 = i0.ɵɵnextContext(3);
501
511
  i0.ɵɵadvance();
512
+ i0.ɵɵconditional(ctx_r0.isParsingComplete ? 1 : 2);
513
+ } }
514
+ function AIAgentRunFormComponentExtended_div_53_kendo_panelbar_item_10_Template(rf, ctx) { if (rf & 1) {
515
+ i0.ɵɵelementStart(0, "kendo-panelbar-item", 79);
516
+ i0.ɵɵtemplate(1, AIAgentRunFormComponentExtended_div_53_kendo_panelbar_item_10_ng_template_1_Template, 3, 1, "ng-template", 63);
517
+ i0.ɵɵelementEnd();
518
+ } }
519
+ function AIAgentRunFormComponentExtended_div_53_kendo_panelbar_item_11_ng_template_1_Conditional_1_Template(rf, ctx) { if (rf & 1) {
520
+ i0.ɵɵelement(0, "mj-code-editor", 81);
521
+ } if (rf & 2) {
522
+ const ctx_r0 = i0.ɵɵnextContext(4);
502
523
  i0.ɵɵproperty("ngModel", ctx_r0.parsedStartingPayload)("language", "json")("readonly", true);
503
524
  } }
504
- function AIAgentRunFormComponentExtended_div_52_kendo_panelbar_item_11_Template(rf, ctx) { if (rf & 1) {
505
- i0.ɵɵelementStart(0, "kendo-panelbar-item", 82);
506
- i0.ɵɵtemplate(1, AIAgentRunFormComponentExtended_div_52_kendo_panelbar_item_11_ng_template_1_Template, 2, 3, "ng-template", 63);
525
+ function AIAgentRunFormComponentExtended_div_53_kendo_panelbar_item_11_ng_template_1_Conditional_2_Template(rf, ctx) { if (rf & 1) {
526
+ i0.ɵɵelementStart(0, "div", 82);
527
+ i0.ɵɵelement(1, "i", 42);
528
+ i0.ɵɵtext(2, " Loading payload data... ");
507
529
  i0.ɵɵelementEnd();
508
530
  } }
509
- function AIAgentRunFormComponentExtended_div_52_kendo_panelbar_item_12_ng_template_1_Template(rf, ctx) { if (rf & 1) {
531
+ function AIAgentRunFormComponentExtended_div_53_kendo_panelbar_item_11_ng_template_1_Template(rf, ctx) { if (rf & 1) {
510
532
  i0.ɵɵelementStart(0, "div", 80);
511
- i0.ɵɵelement(1, "mj-code-editor", 81);
533
+ i0.ɵɵtemplate(1, AIAgentRunFormComponentExtended_div_53_kendo_panelbar_item_11_ng_template_1_Conditional_1_Template, 1, 3, "mj-code-editor", 81)(2, AIAgentRunFormComponentExtended_div_53_kendo_panelbar_item_11_ng_template_1_Conditional_2_Template, 3, 0, "div", 82);
512
534
  i0.ɵɵelementEnd();
513
535
  } if (rf & 2) {
514
536
  const ctx_r0 = i0.ɵɵnextContext(3);
515
537
  i0.ɵɵadvance();
516
- i0.ɵɵproperty("ngModel", ctx_r0.parsedData)("language", "json")("readonly", true);
538
+ i0.ɵɵconditional(ctx_r0.isParsingComplete ? 1 : 2);
517
539
  } }
518
- function AIAgentRunFormComponentExtended_div_52_kendo_panelbar_item_12_Template(rf, ctx) { if (rf & 1) {
540
+ function AIAgentRunFormComponentExtended_div_53_kendo_panelbar_item_11_Template(rf, ctx) { if (rf & 1) {
519
541
  i0.ɵɵelementStart(0, "kendo-panelbar-item", 83);
520
- i0.ɵɵtemplate(1, AIAgentRunFormComponentExtended_div_52_kendo_panelbar_item_12_ng_template_1_Template, 2, 3, "ng-template", 63);
542
+ i0.ɵɵtemplate(1, AIAgentRunFormComponentExtended_div_53_kendo_panelbar_item_11_ng_template_1_Template, 3, 1, "ng-template", 63);
521
543
  i0.ɵɵelementEnd();
522
544
  } }
523
- function AIAgentRunFormComponentExtended_div_52_kendo_panelbar_item_13_ng_template_1_Template(rf, ctx) { if (rf & 1) {
545
+ function AIAgentRunFormComponentExtended_div_53_kendo_panelbar_item_12_ng_template_1_Conditional_1_Template(rf, ctx) { if (rf & 1) {
546
+ i0.ɵɵelement(0, "mj-code-editor", 81);
547
+ } if (rf & 2) {
548
+ const ctx_r0 = i0.ɵɵnextContext(4);
549
+ i0.ɵɵproperty("ngModel", ctx_r0.parsedData)("language", "json")("readonly", true);
550
+ } }
551
+ function AIAgentRunFormComponentExtended_div_53_kendo_panelbar_item_12_ng_template_1_Conditional_2_Template(rf, ctx) { if (rf & 1) {
552
+ i0.ɵɵelementStart(0, "div", 82);
553
+ i0.ɵɵelement(1, "i", 42);
554
+ i0.ɵɵtext(2, " Loading execution data... ");
555
+ i0.ɵɵelementEnd();
556
+ } }
557
+ function AIAgentRunFormComponentExtended_div_53_kendo_panelbar_item_12_ng_template_1_Template(rf, ctx) { if (rf & 1) {
524
558
  i0.ɵɵelementStart(0, "div", 80);
525
- i0.ɵɵelement(1, "mj-code-editor", 81);
559
+ i0.ɵɵtemplate(1, AIAgentRunFormComponentExtended_div_53_kendo_panelbar_item_12_ng_template_1_Conditional_1_Template, 1, 3, "mj-code-editor", 81)(2, AIAgentRunFormComponentExtended_div_53_kendo_panelbar_item_12_ng_template_1_Conditional_2_Template, 3, 0, "div", 82);
526
560
  i0.ɵɵelementEnd();
527
561
  } if (rf & 2) {
528
562
  const ctx_r0 = i0.ɵɵnextContext(3);
529
563
  i0.ɵɵadvance();
530
- i0.ɵɵproperty("ngModel", ctx_r0.parsedFinalPayload)("language", "json")("readonly", true);
564
+ i0.ɵɵconditional(ctx_r0.isParsingComplete ? 1 : 2);
531
565
  } }
532
- function AIAgentRunFormComponentExtended_div_52_kendo_panelbar_item_13_Template(rf, ctx) { if (rf & 1) {
566
+ function AIAgentRunFormComponentExtended_div_53_kendo_panelbar_item_12_Template(rf, ctx) { if (rf & 1) {
533
567
  i0.ɵɵelementStart(0, "kendo-panelbar-item", 84);
534
- i0.ɵɵtemplate(1, AIAgentRunFormComponentExtended_div_52_kendo_panelbar_item_13_ng_template_1_Template, 2, 3, "ng-template", 63);
568
+ i0.ɵɵtemplate(1, AIAgentRunFormComponentExtended_div_53_kendo_panelbar_item_12_ng_template_1_Template, 3, 1, "ng-template", 63);
569
+ i0.ɵɵelementEnd();
570
+ } }
571
+ function AIAgentRunFormComponentExtended_div_53_kendo_panelbar_item_13_ng_template_1_Conditional_1_Template(rf, ctx) { if (rf & 1) {
572
+ i0.ɵɵelement(0, "mj-code-editor", 81);
573
+ } if (rf & 2) {
574
+ const ctx_r0 = i0.ɵɵnextContext(4);
575
+ i0.ɵɵproperty("ngModel", ctx_r0.parsedFinalPayload)("language", "json")("readonly", true);
576
+ } }
577
+ function AIAgentRunFormComponentExtended_div_53_kendo_panelbar_item_13_ng_template_1_Conditional_2_Template(rf, ctx) { if (rf & 1) {
578
+ i0.ɵɵelementStart(0, "div", 82);
579
+ i0.ɵɵelement(1, "i", 42);
580
+ i0.ɵɵtext(2, " Loading final payload data... ");
535
581
  i0.ɵɵelementEnd();
536
582
  } }
537
- function AIAgentRunFormComponentExtended_div_52_kendo_panelbar_item_14_ng_template_1_Template(rf, ctx) { if (rf & 1) {
538
- i0.ɵɵelementStart(0, "div", 86);
539
- i0.ɵɵelement(1, "mj-deep-diff", 87);
583
+ function AIAgentRunFormComponentExtended_div_53_kendo_panelbar_item_13_ng_template_1_Template(rf, ctx) { if (rf & 1) {
584
+ i0.ɵɵelementStart(0, "div", 80);
585
+ i0.ɵɵtemplate(1, AIAgentRunFormComponentExtended_div_53_kendo_panelbar_item_13_ng_template_1_Conditional_1_Template, 1, 3, "mj-code-editor", 81)(2, AIAgentRunFormComponentExtended_div_53_kendo_panelbar_item_13_ng_template_1_Conditional_2_Template, 3, 0, "div", 82);
540
586
  i0.ɵɵelementEnd();
541
587
  } if (rf & 2) {
542
588
  const ctx_r0 = i0.ɵɵnextContext(3);
543
589
  i0.ɵɵadvance();
544
- i0.ɵɵproperty("oldValue", ctx_r0.startingPayloadObject)("newValue", ctx_r0.finalPayloadObject)("title", "")("showSummary", true)("showUnchanged", false)("expandAll", false)("maxDepth", 10)("maxStringLength", 200)("treatNullAsUndefined", true);
590
+ i0.ɵɵconditional(ctx_r0.isParsingComplete ? 1 : 2);
545
591
  } }
546
- function AIAgentRunFormComponentExtended_div_52_kendo_panelbar_item_14_Template(rf, ctx) { if (rf & 1) {
592
+ function AIAgentRunFormComponentExtended_div_53_kendo_panelbar_item_13_Template(rf, ctx) { if (rf & 1) {
547
593
  i0.ɵɵelementStart(0, "kendo-panelbar-item", 85);
548
- i0.ɵɵtemplate(1, AIAgentRunFormComponentExtended_div_52_kendo_panelbar_item_14_ng_template_1_Template, 2, 9, "ng-template", 63);
594
+ i0.ɵɵtemplate(1, AIAgentRunFormComponentExtended_div_53_kendo_panelbar_item_13_ng_template_1_Template, 3, 1, "ng-template", 63);
549
595
  i0.ɵɵelementEnd();
550
596
  } }
551
- function AIAgentRunFormComponentExtended_div_52_Template(rf, ctx) { if (rf & 1) {
597
+ function AIAgentRunFormComponentExtended_div_53_kendo_panelbar_item_14_ng_template_1_Conditional_1_Template(rf, ctx) { if (rf & 1) {
598
+ i0.ɵɵelement(0, "mj-deep-diff", 88);
599
+ } if (rf & 2) {
600
+ const ctx_r0 = i0.ɵɵnextContext(4);
601
+ i0.ɵɵproperty("oldValue", ctx_r0.startingPayloadObject)("newValue", ctx_r0.finalPayloadObject)("title", "")("showSummary", true)("showUnchanged", false)("expandAll", false)("maxDepth", 10)("maxStringLength", 200)("treatNullAsUndefined", true);
602
+ } }
603
+ function AIAgentRunFormComponentExtended_div_53_kendo_panelbar_item_14_ng_template_1_Conditional_2_Template(rf, ctx) { if (rf & 1) {
604
+ i0.ɵɵelementStart(0, "div", 82);
605
+ i0.ɵɵelement(1, "i", 42);
606
+ i0.ɵɵtext(2, " Loading payload diff... ");
607
+ i0.ɵɵelementEnd();
608
+ } }
609
+ function AIAgentRunFormComponentExtended_div_53_kendo_panelbar_item_14_ng_template_1_Template(rf, ctx) { if (rf & 1) {
610
+ i0.ɵɵelementStart(0, "div", 87);
611
+ i0.ɵɵtemplate(1, AIAgentRunFormComponentExtended_div_53_kendo_panelbar_item_14_ng_template_1_Conditional_1_Template, 1, 9, "mj-deep-diff", 88)(2, AIAgentRunFormComponentExtended_div_53_kendo_panelbar_item_14_ng_template_1_Conditional_2_Template, 3, 0, "div", 82);
612
+ i0.ɵɵelementEnd();
613
+ } if (rf & 2) {
614
+ const ctx_r0 = i0.ɵɵnextContext(3);
615
+ i0.ɵɵadvance();
616
+ i0.ɵɵconditional(ctx_r0.isParsingComplete ? 1 : 2);
617
+ } }
618
+ function AIAgentRunFormComponentExtended_div_53_kendo_panelbar_item_14_Template(rf, ctx) { if (rf & 1) {
619
+ i0.ɵɵelementStart(0, "kendo-panelbar-item", 86);
620
+ i0.ɵɵtemplate(1, AIAgentRunFormComponentExtended_div_53_kendo_panelbar_item_14_ng_template_1_Template, 3, 1, "ng-template", 63);
621
+ i0.ɵɵelementEnd();
622
+ } }
623
+ function AIAgentRunFormComponentExtended_div_53_Template(rf, ctx) { if (rf & 1) {
552
624
  i0.ɵɵelementStart(0, "div", 60)(1, "kendo-panelbar", 61)(2, "kendo-panelbar-item", 62);
553
- i0.ɵɵtemplate(3, AIAgentRunFormComponentExtended_div_52_ng_template_3_Template, 31, 9, "ng-template", 63);
625
+ i0.ɵɵtemplate(3, AIAgentRunFormComponentExtended_div_53_ng_template_3_Template, 31, 9, "ng-template", 63);
554
626
  i0.ɵɵelementEnd();
555
627
  i0.ɵɵelementStart(4, "kendo-panelbar-item", 64);
556
- i0.ɵɵtemplate(5, AIAgentRunFormComponentExtended_div_52_ng_template_5_Template, 18, 5, "ng-template", 63);
628
+ i0.ɵɵtemplate(5, AIAgentRunFormComponentExtended_div_53_ng_template_5_Template, 18, 5, "ng-template", 63);
557
629
  i0.ɵɵelementEnd();
558
630
  i0.ɵɵelementStart(6, "kendo-panelbar-item", 65);
559
- i0.ɵɵtemplate(7, AIAgentRunFormComponentExtended_div_52_ng_template_7_Template, 12, 8, "ng-template", 63);
631
+ i0.ɵɵtemplate(7, AIAgentRunFormComponentExtended_div_53_ng_template_7_Template, 12, 8, "ng-template", 63);
560
632
  i0.ɵɵelementEnd();
561
633
  i0.ɵɵelementStart(8, "kendo-panelbar-item", 66);
562
- i0.ɵɵtemplate(9, AIAgentRunFormComponentExtended_div_52_ng_template_9_Template, 31, 20, "ng-template", 63);
634
+ i0.ɵɵtemplate(9, AIAgentRunFormComponentExtended_div_53_ng_template_9_Template, 31, 20, "ng-template", 63);
563
635
  i0.ɵɵelementEnd();
564
- i0.ɵɵtemplate(10, AIAgentRunFormComponentExtended_div_52_kendo_panelbar_item_10_Template, 2, 0, "kendo-panelbar-item", 67)(11, AIAgentRunFormComponentExtended_div_52_kendo_panelbar_item_11_Template, 2, 0, "kendo-panelbar-item", 68)(12, AIAgentRunFormComponentExtended_div_52_kendo_panelbar_item_12_Template, 2, 0, "kendo-panelbar-item", 69)(13, AIAgentRunFormComponentExtended_div_52_kendo_panelbar_item_13_Template, 2, 0, "kendo-panelbar-item", 70)(14, AIAgentRunFormComponentExtended_div_52_kendo_panelbar_item_14_Template, 2, 0, "kendo-panelbar-item", 71);
636
+ i0.ɵɵtemplate(10, AIAgentRunFormComponentExtended_div_53_kendo_panelbar_item_10_Template, 2, 0, "kendo-panelbar-item", 67)(11, AIAgentRunFormComponentExtended_div_53_kendo_panelbar_item_11_Template, 2, 0, "kendo-panelbar-item", 68)(12, AIAgentRunFormComponentExtended_div_53_kendo_panelbar_item_12_Template, 2, 0, "kendo-panelbar-item", 69)(13, AIAgentRunFormComponentExtended_div_53_kendo_panelbar_item_13_Template, 2, 0, "kendo-panelbar-item", 70)(14, AIAgentRunFormComponentExtended_div_53_kendo_panelbar_item_14_Template, 2, 0, "kendo-panelbar-item", 71);
565
637
  i0.ɵɵelementEnd()();
566
638
  } if (rf & 2) {
567
639
  const ctx_r0 = i0.ɵɵnextContext();
@@ -581,11 +653,10 @@ function AIAgentRunFormComponentExtended_div_52_Template(rf, ctx) { if (rf & 1)
581
653
  i0.ɵɵproperty("ngIf", ctx_r0.showPayloadDiff);
582
654
  } }
583
655
  let AIAgentRunFormComponentExtended = class AIAgentRunFormComponentExtended extends AIAgentRunFormComponent {
584
- constructor(elementRef, sharedService, router, route, cdr, costService, dataService) {
656
+ constructor(elementRef, sharedService, router, route, cdr, costService) {
585
657
  super(elementRef, sharedService, router, route, cdr);
586
658
  this.router = router;
587
659
  this.costService = costService;
588
- this.dataService = dataService;
589
660
  this.destroy$ = new Subject();
590
661
  // UI state
591
662
  this.activeTab = 'timeline';
@@ -598,21 +669,32 @@ let AIAgentRunFormComponentExtended = class AIAgentRunFormComponentExtended exte
598
669
  this.agent = null;
599
670
  // Cost metrics using shared service
600
671
  this.costMetrics = null;
672
+ // Cached parsed results to prevent redundant JSON parsing
673
+ this._cachedParsedResult = null;
674
+ this._cachedParsedStartingPayload = null;
675
+ this._cachedParsedFinalPayload = null;
676
+ this._cachedParsedData = null;
677
+ // Simple parsing state - true when all parsing is complete
678
+ this._allParsingComplete = false;
679
+ this.dataHelper = new AIAgentRunDataHelper();
601
680
  }
602
681
  async ngOnInit() {
603
682
  await super.ngOnInit();
604
683
  if (this.record && this.record.ID) {
605
- // Load all data through the service
606
- await this.dataService.loadAgentRunData(this.record.ID);
684
+ await this.dataHelper.loadAgentRunData(this.record.ID);
607
685
  await this.loadAgent();
608
686
  await this.loadCostMetrics();
687
+ // Parse all JSON fields on form load for instant access later
688
+ this.parseAllFields();
609
689
  }
610
690
  }
611
691
  ngOnDestroy() {
612
692
  this.destroy$.next();
613
693
  this.destroy$.complete();
614
- // Clear data when component is destroyed
615
- this.dataService.clearData();
694
+ this.clearParsedCache();
695
+ this.dataHelper.clearData();
696
+ this.costMetrics = null;
697
+ this.agent = null;
616
698
  }
617
699
  async loadAgent() {
618
700
  if (!this.record?.AgentID)
@@ -633,7 +715,7 @@ let AIAgentRunFormComponentExtended = class AIAgentRunFormComponentExtended exte
633
715
  return;
634
716
  try {
635
717
  this.costMetrics = await this.costService.getAgentRunCostMetrics(this.record.ID);
636
- this.cdr.detectChanges();
718
+ this.cdr.markForCheck();
637
719
  }
638
720
  catch (error) {
639
721
  console.error('Error loading cost metrics:', error);
@@ -652,13 +734,12 @@ let AIAgentRunFormComponentExtended = class AIAgentRunFormComponentExtended exte
652
734
  // Lazy load visualization when the tab is first accessed
653
735
  if (tab === 'visualization' && !this.visualizationLoaded) {
654
736
  this.visualizationLoaded = true;
655
- this.cdr.detectChanges();
737
+ this.cdr.markForCheck();
656
738
  }
657
739
  // Lazy load analytics when the tab is first accessed
658
740
  if (tab === 'analytics' && !this.analyticsLoaded) {
659
741
  this.analyticsLoaded = true;
660
- // The component will load data in its ngOnInit
661
- this.cdr.detectChanges();
742
+ this.cdr.markForCheck();
662
743
  }
663
744
  }
664
745
  calculateDuration(start, end) {
@@ -676,11 +757,11 @@ let AIAgentRunFormComponentExtended = class AIAgentRunFormComponentExtended exte
676
757
  selectTimelineItem(item) {
677
758
  this.selectedTimelineItem = item;
678
759
  this.jsonPanelExpanded = true;
679
- this.cdr.detectChanges();
760
+ this.cdr.markForCheck();
680
761
  }
681
762
  closeJsonPanel() {
682
763
  this.selectedTimelineItem = null;
683
- this.cdr.detectChanges();
764
+ this.cdr.markForCheck();
684
765
  }
685
766
  navigateToSubRun(runId) {
686
767
  SharedService.Instance.OpenEntityRecord("MJ: AI Agent Runs", CompositeKey.FromID(runId));
@@ -704,12 +785,15 @@ let AIAgentRunFormComponentExtended = class AIAgentRunFormComponentExtended exte
704
785
  refreshData() {
705
786
  // Reload the agent run record to get latest status
706
787
  if (this.record?.ID) {
788
+ // Clear parsed cache when refreshing data
789
+ this.clearParsedCache();
790
+ // No panel states to reset in simplified approach
707
791
  this.record.Load(this.record.ID).then(() => {
708
792
  // Clear cost cache and reload
709
793
  this.costService.clearCache(this.record.ID);
710
794
  this.loadCostMetrics();
711
- // Reload data through service - this will update all components
712
- this.dataService.loadAgentRunData(this.record.ID);
795
+ // Reload data through helper - this will update all components (force reload for refresh)
796
+ this.dataHelper.loadAgentRunData(this.record.ID, true);
713
797
  // Trigger analytics refresh
714
798
  if (this.analyticsComponent) {
715
799
  this.analyticsComponent.loadData();
@@ -739,7 +823,7 @@ let AIAgentRunFormComponentExtended = class AIAgentRunFormComponentExtended exte
739
823
  onAgentRunCompleted(status) {
740
824
  // Update the record status
741
825
  this.record.Status = status;
742
- this.cdr.detectChanges();
826
+ this.cdr.markForCheck();
743
827
  // Reload the full record to get updated data
744
828
  this.refreshData();
745
829
  }
@@ -747,8 +831,13 @@ let AIAgentRunFormComponentExtended = class AIAgentRunFormComponentExtended exte
747
831
  * Get the Result field with recursive JSON parsing applied
748
832
  */
749
833
  get parsedResult() {
750
- if (!this.record?.Result)
834
+ if (!this.record?.Result) {
751
835
  return '';
836
+ }
837
+ // Return cached result if available
838
+ if (this._cachedParsedResult !== null) {
839
+ return this._cachedParsedResult;
840
+ }
752
841
  try {
753
842
  // First, check if Result is a JSON string that needs to be parsed
754
843
  let resultData = this.record.Result;
@@ -765,19 +854,30 @@ let AIAgentRunFormComponentExtended = class AIAgentRunFormComponentExtended exte
765
854
  maxDepth: 100,
766
855
  debug: false // Disable debug logging - regex issue fixed
767
856
  };
857
+ // Re-enabled ParseJSONRecursive with performance optimizations
768
858
  const parsed = ParseJSONRecursive(resultData, parseOptions);
769
- return JSON.stringify(parsed, null, 2);
859
+ const result = JSON.stringify(parsed, null, 2);
860
+ // Cache the result
861
+ this._cachedParsedResult = result;
862
+ return result;
770
863
  }
771
864
  catch (e) {
772
- return this.record.Result;
865
+ const fallbackResult = this.record.Result;
866
+ this._cachedParsedResult = fallbackResult;
867
+ return fallbackResult;
773
868
  }
774
869
  }
775
870
  /**
776
871
  * Get the Starting Payload field with recursive JSON parsing applied
777
872
  */
778
873
  get parsedStartingPayload() {
779
- if (!this.record?.StartingPayload)
874
+ if (!this.record?.StartingPayload) {
780
875
  return '';
876
+ }
877
+ // Return cached result if available
878
+ if (this._cachedParsedStartingPayload !== null) {
879
+ return this._cachedParsedStartingPayload;
880
+ }
781
881
  try {
782
882
  // First, check if StartingPayload is a JSON string that needs to be parsed
783
883
  let payloadData = this.record.StartingPayload;
@@ -794,11 +894,17 @@ let AIAgentRunFormComponentExtended = class AIAgentRunFormComponentExtended exte
794
894
  maxDepth: 100,
795
895
  debug: false
796
896
  };
897
+ // Re-enabled ParseJSONRecursive with performance optimizations
797
898
  const parsed = ParseJSONRecursive(payloadData, parseOptions);
798
- return JSON.stringify(parsed, null, 2);
899
+ const result = JSON.stringify(parsed, null, 2);
900
+ // Cache the result
901
+ this._cachedParsedStartingPayload = result;
902
+ return result;
799
903
  }
800
904
  catch (e) {
801
- return this.record.StartingPayload;
905
+ const fallbackResult = this.record.StartingPayload;
906
+ this._cachedParsedStartingPayload = fallbackResult;
907
+ return fallbackResult;
802
908
  }
803
909
  }
804
910
  /**
@@ -807,6 +913,10 @@ let AIAgentRunFormComponentExtended = class AIAgentRunFormComponentExtended exte
807
913
  get parsedFinalPayload() {
808
914
  if (!this.record?.FinalPayload)
809
915
  return '';
916
+ // Return cached result if available
917
+ if (this._cachedParsedFinalPayload !== null) {
918
+ return this._cachedParsedFinalPayload;
919
+ }
810
920
  try {
811
921
  // First, check if FinalPayload is a JSON string that needs to be parsed
812
922
  let payloadData = this.record.FinalPayload;
@@ -823,11 +933,17 @@ let AIAgentRunFormComponentExtended = class AIAgentRunFormComponentExtended exte
823
933
  maxDepth: 100,
824
934
  debug: false // Disable debug logging - regex issue fixed
825
935
  };
936
+ // Re-enabled ParseJSONRecursive with performance optimizations
826
937
  const parsed = ParseJSONRecursive(payloadData, parseOptions);
827
- return JSON.stringify(parsed, null, 2);
938
+ const result = JSON.stringify(parsed, null, 2);
939
+ // Cache the result
940
+ this._cachedParsedFinalPayload = result;
941
+ return result;
828
942
  }
829
943
  catch (e) {
830
- return this.record.FinalPayload;
944
+ const fallbackResult = this.record.FinalPayload;
945
+ this._cachedParsedFinalPayload = fallbackResult;
946
+ return fallbackResult;
831
947
  }
832
948
  }
833
949
  /**
@@ -836,6 +952,10 @@ let AIAgentRunFormComponentExtended = class AIAgentRunFormComponentExtended exte
836
952
  get parsedData() {
837
953
  if (!this.record?.Data)
838
954
  return '';
955
+ // Return cached result if available
956
+ if (this._cachedParsedData !== null) {
957
+ return this._cachedParsedData;
958
+ }
839
959
  try {
840
960
  // First, check if Data is a JSON string that needs to be parsed
841
961
  let data = this.record.Data;
@@ -852,11 +972,17 @@ let AIAgentRunFormComponentExtended = class AIAgentRunFormComponentExtended exte
852
972
  maxDepth: 100,
853
973
  debug: false
854
974
  };
975
+ // Re-enabled ParseJSONRecursive with performance optimizations
855
976
  const parsed = ParseJSONRecursive(data, parseOptions);
856
- return JSON.stringify(parsed, null, 2);
977
+ const result = JSON.stringify(parsed, null, 2);
978
+ // Cache the result
979
+ this._cachedParsedData = result;
980
+ return result;
857
981
  }
858
982
  catch (e) {
859
- return this.record.Data;
983
+ const fallbackResult = this.record.Data;
984
+ this._cachedParsedData = fallbackResult;
985
+ return fallbackResult;
860
986
  }
861
987
  }
862
988
  /**
@@ -881,6 +1007,7 @@ let AIAgentRunFormComponentExtended = class AIAgentRunFormComponentExtended exte
881
1007
  maxDepth: 100,
882
1008
  debug: false
883
1009
  };
1010
+ // Re-enabled ParseJSONRecursive with performance optimizations
884
1011
  return ParseJSONRecursive(payloadData, parseOptions);
885
1012
  }
886
1013
  catch (e) {
@@ -909,12 +1036,58 @@ let AIAgentRunFormComponentExtended = class AIAgentRunFormComponentExtended exte
909
1036
  maxDepth: 100,
910
1037
  debug: false
911
1038
  };
1039
+ // Re-enabled ParseJSONRecursive with performance optimizations
912
1040
  return ParseJSONRecursive(payloadData, parseOptions);
913
1041
  }
914
1042
  catch (e) {
915
1043
  return null;
916
1044
  }
917
1045
  }
1046
+ /**
1047
+ * Clear all cached parsed results
1048
+ */
1049
+ clearParsedCache() {
1050
+ this._cachedParsedResult = null;
1051
+ this._cachedParsedStartingPayload = null;
1052
+ this._cachedParsedFinalPayload = null;
1053
+ this._cachedParsedData = null;
1054
+ this._allParsingComplete = false;
1055
+ }
1056
+ /**
1057
+ * Parse all JSON fields at once and cache results
1058
+ */
1059
+ parseAllFields() {
1060
+ try {
1061
+ let parsedCount = 0;
1062
+ // Parse all fields that exist
1063
+ if (this.record?.Result) {
1064
+ this.parsedResult; // Triggers parsing and caching
1065
+ parsedCount++;
1066
+ }
1067
+ if (this.record?.StartingPayload) {
1068
+ this.parsedStartingPayload; // Triggers parsing and caching
1069
+ parsedCount++;
1070
+ }
1071
+ if (this.record?.FinalPayload) {
1072
+ this.parsedFinalPayload; // Triggers parsing and caching
1073
+ parsedCount++;
1074
+ }
1075
+ if (this.record?.Data) {
1076
+ this.parsedData; // Triggers parsing and caching
1077
+ parsedCount++;
1078
+ }
1079
+ this._allParsingComplete = true;
1080
+ }
1081
+ catch (error) {
1082
+ console.error('Error during JSON parsing:', error);
1083
+ }
1084
+ }
1085
+ /**
1086
+ * Check if all parsing is complete - used by template
1087
+ */
1088
+ get isParsingComplete() {
1089
+ return this._allParsingComplete;
1090
+ }
918
1091
  /**
919
1092
  * Check if we have both payloads to show diff
920
1093
  */
@@ -961,6 +1134,7 @@ let AIAgentRunFormComponentExtended = class AIAgentRunFormComponentExtended exte
961
1134
  maxDepth: 100,
962
1135
  debug: false
963
1136
  };
1137
+ // Re-enabled ParseJSONRecursive with performance optimizations
964
1138
  return ParseJSONRecursive(payloadData, parseOptions);
965
1139
  }
966
1140
  catch (e) {
@@ -991,13 +1165,14 @@ let AIAgentRunFormComponentExtended = class AIAgentRunFormComponentExtended exte
991
1165
  maxDepth: 100,
992
1166
  debug: false
993
1167
  };
1168
+ // Re-enabled ParseJSONRecursive with performance optimizations
994
1169
  return ParseJSONRecursive(payloadData, parseOptions);
995
1170
  }
996
1171
  catch (e) {
997
1172
  return null;
998
1173
  }
999
1174
  }
1000
- 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), i0.ɵɵdirectiveInject(i3.AIAgentRunCostService), i0.ɵɵdirectiveInject(i4.AIAgentRunDataService)); }; }
1175
+ 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), i0.ɵɵdirectiveInject(i3.AIAgentRunCostService)); }; }
1001
1176
  static { this.ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: AIAgentRunFormComponentExtended, selectors: [["mj-ai-agent-run-form"]], viewQuery: function AIAgentRunFormComponentExtended_Query(rf, ctx) { if (rf & 1) {
1002
1177
  i0.ɵɵviewQuery(AIAgentRunTimelineComponent, 5);
1003
1178
  i0.ɵɵviewQuery(AIAgentRunAnalyticsComponent, 5);
@@ -1007,7 +1182,7 @@ let AIAgentRunFormComponentExtended = class AIAgentRunFormComponentExtended exte
1007
1182
  i0.ɵɵqueryRefresh(_t = i0.ɵɵloadQuery()) && (ctx.timelineComponent = _t.first);
1008
1183
  i0.ɵɵqueryRefresh(_t = i0.ɵɵloadQuery()) && (ctx.analyticsComponent = _t.first);
1009
1184
  i0.ɵɵqueryRefresh(_t = i0.ɵɵloadQuery()) && (ctx.visualizationComponent = _t.first);
1010
- } }, features: [i0.ɵɵInheritDefinitionFeature], decls: 53, vars: 28, consts: [["visualizationComponent", ""], ["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"], ["class", "configuration-bar", 4, "ngIf"], [1, "tabs"], [1, "tab", 3, "click"], [1, "fas", "fa-stream"], [1, "fas", "fa-diagram-project"], [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"], ["class", "value", 4, "ngIf"], ["class", "value loading", 4, "ngIf"], [1, "value", "loading"], [1, "fas", "fa-spinner", "fa-spin"], [1, "configuration-bar"], [1, "config-item"], [1, "fas", "fa-cog"], [1, "config-content"], [1, "config-label"], [1, "config-value"], ["href", "javascript:void(0)", 1, "entity-link", 3, "click"], [1, "tab-content", 2, "height", "100%"], ["orientation", "horizontal", 2, "height", "100%"], [3, "min"], [3, "itemSelected", "navigateToEntity", "agentRunCompleted", "aiAgentRunId", "autoRefresh", "refreshInterval"], [3, "size", "min", "collapsed"], [3, "closePanel", "navigateToActionLog", "copyToClipboard", "selectedTimelineItem"], [3, "aiAgentRunId", 4, "ngIf"], [3, "aiAgentRunId"], [3, "agentRunId", 4, "ngIf"], [3, "agentRunId"], [1, "tab-content"], [3, "keepItemContent"], ["title", "General Information", 3, "expanded"], ["kendoPanelBarContent", ""], ["title", "Execution Settings"], ["title", "Execution Status"], ["title", "Usage & Cost"], ["title", "Result", 4, "ngIf"], ["title", "Starting Payload", 4, "ngIf"], ["title", "Execution Data", 4, "ngIf"], ["title", "Final Payload", 4, "ngIf"], ["title", "Payload Diff", 4, "ngIf"], [1, "details-grid"], [1, "detail-item"], ["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", "Execution Data"], ["title", "Final Payload"], ["title", "Payload Diff"], [2, "padding", "20px", "background", "#f8f9fa"], [3, "oldValue", "newValue", "title", "showSummary", "showUnchanged", "expandAll", "maxDepth", "maxStringLength", "treatNullAsUndefined"]], template: function AIAgentRunFormComponentExtended_Template(rf, ctx) { if (rf & 1) {
1185
+ } }, features: [i0.ɵɵInheritDefinitionFeature], decls: 54, vars: 29, consts: [["visualizationComponent", ""], ["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"], ["class", "configuration-bar", 4, "ngIf"], [1, "tabs"], [1, "tab", 3, "click"], [1, "fas", "fa-stream"], [1, "fas", "fa-diagram-project"], [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"], ["class", "value", 4, "ngIf"], ["class", "value loading", 4, "ngIf"], [1, "value", "loading"], [1, "fas", "fa-spinner", "fa-spin"], [1, "configuration-bar"], [1, "config-item"], [1, "fas", "fa-cog"], [1, "config-content"], [1, "config-label"], [1, "config-value"], ["href", "javascript:void(0)", 1, "entity-link", 3, "click"], [1, "tab-content", 2, "height", "100%"], ["orientation", "horizontal", 2, "height", "100%"], [3, "min"], [3, "itemSelected", "navigateToEntity", "agentRunCompleted", "aiAgentRunId", "dataHelper", "autoRefresh", "refreshInterval"], [3, "size", "min", "collapsed"], [3, "closePanel", "navigateToActionLog", "copyToClipboard", "selectedTimelineItem"], [3, "aiAgentRunId", "dataHelper", 4, "ngIf"], [3, "aiAgentRunId", "dataHelper"], [3, "agentRunId", 4, "ngIf"], [3, "agentRunId"], [1, "tab-content"], [3, "keepItemContent"], ["title", "General Information", 3, "expanded"], ["kendoPanelBarContent", ""], ["title", "Execution Settings"], ["title", "Execution Status"], ["title", "Usage & Cost"], ["title", "Result", 4, "ngIf"], ["title", "Starting Payload", 4, "ngIf"], ["title", "Execution Data", 4, "ngIf"], ["title", "Final Payload", 4, "ngIf"], ["title", "Payload Diff", 4, "ngIf"], [1, "details-grid"], [1, "detail-item"], ["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"], [2, "padding", "20px", "text-align", "center", "color", "#666"], ["title", "Starting Payload"], ["title", "Execution Data"], ["title", "Final Payload"], ["title", "Payload Diff"], [2, "padding", "20px", "background", "#f8f9fa"], [3, "oldValue", "newValue", "title", "showSummary", "showUnchanged", "expandAll", "maxDepth", "maxStringLength", "treatNullAsUndefined"]], template: function AIAgentRunFormComponentExtended_Template(rf, ctx) { if (rf & 1) {
1011
1186
  i0.ɵɵelementStart(0, "div", 2)(1, "div", 3)(2, "div", 4)(3, "div", 5)(4, "div", 6)(5, "div", 7);
1012
1187
  i0.ɵɵelement(6, "i", 8);
1013
1188
  i0.ɵɵelementEnd();
@@ -1036,32 +1211,32 @@ let AIAgentRunFormComponentExtended = class AIAgentRunFormComponentExtended exte
1036
1211
  i0.ɵɵtext(27);
1037
1212
  i0.ɵɵpipe(28, "date");
1038
1213
  i0.ɵɵelementEnd()();
1039
- i0.ɵɵtemplate(29, AIAgentRunFormComponentExtended_div_29_Template, 6, 4, "div", 24)(30, AIAgentRunFormComponentExtended_div_30_Template, 5, 1, "div", 24)(31, AIAgentRunFormComponentExtended_div_31_Template, 5, 5, "div", 24)(32, AIAgentRunFormComponentExtended_div_32_Template, 5, 2, "div", 24)(33, AIAgentRunFormComponentExtended_div_33_Template, 5, 2, "div", 24);
1214
+ i0.ɵɵtemplate(29, AIAgentRunFormComponentExtended_div_29_Template, 6, 4, "div", 24)(30, AIAgentRunFormComponentExtended_div_30_Template, 5, 1, "div", 24)(31, AIAgentRunFormComponentExtended_div_31_Template, 5, 5, "div", 24)(32, AIAgentRunFormComponentExtended_div_32_Template, 5, 2, "div", 24)(33, AIAgentRunFormComponentExtended_div_33_Template, 5, 2, "div", 24)(34, AIAgentRunFormComponentExtended_div_34_Template, 5, 1, "div", 24);
1040
1215
  i0.ɵɵelementEnd();
1041
- i0.ɵɵtemplate(34, AIAgentRunFormComponentExtended_div_34_Template, 9, 1, "div", 25);
1216
+ i0.ɵɵtemplate(35, AIAgentRunFormComponentExtended_div_35_Template, 9, 1, "div", 25);
1042
1217
  i0.ɵɵelementEnd();
1043
- i0.ɵɵelementStart(35, "div", 26)(36, "button", 27);
1044
- i0.ɵɵlistener("click", function AIAgentRunFormComponentExtended_Template_button_click_36_listener() { return ctx.changeTab("timeline"); });
1045
- i0.ɵɵelement(37, "i", 28);
1046
- i0.ɵɵtext(38, " Timeline ");
1218
+ i0.ɵɵelementStart(36, "div", 26)(37, "button", 27);
1219
+ i0.ɵɵlistener("click", function AIAgentRunFormComponentExtended_Template_button_click_37_listener() { return ctx.changeTab("timeline"); });
1220
+ i0.ɵɵelement(38, "i", 28);
1221
+ i0.ɵɵtext(39, " Timeline ");
1047
1222
  i0.ɵɵelementEnd();
1048
- i0.ɵɵelementStart(39, "button", 27);
1049
- i0.ɵɵlistener("click", function AIAgentRunFormComponentExtended_Template_button_click_39_listener() { return ctx.changeTab("visualization"); });
1050
- i0.ɵɵelement(40, "i", 29);
1051
- i0.ɵɵtext(41, " Visualization ");
1223
+ i0.ɵɵelementStart(40, "button", 27);
1224
+ i0.ɵɵlistener("click", function AIAgentRunFormComponentExtended_Template_button_click_40_listener() { return ctx.changeTab("visualization"); });
1225
+ i0.ɵɵelement(41, "i", 29);
1226
+ i0.ɵɵtext(42, " Visualization ");
1052
1227
  i0.ɵɵelementEnd();
1053
- i0.ɵɵelementStart(42, "button", 27);
1054
- i0.ɵɵlistener("click", function AIAgentRunFormComponentExtended_Template_button_click_42_listener() { return ctx.changeTab("analytics"); });
1055
- i0.ɵɵelement(43, "i", 30);
1056
- i0.ɵɵtext(44, " Analytics ");
1228
+ i0.ɵɵelementStart(43, "button", 27);
1229
+ i0.ɵɵlistener("click", function AIAgentRunFormComponentExtended_Template_button_click_43_listener() { return ctx.changeTab("analytics"); });
1230
+ i0.ɵɵelement(44, "i", 30);
1231
+ i0.ɵɵtext(45, " Analytics ");
1057
1232
  i0.ɵɵelementEnd();
1058
- i0.ɵɵelementStart(45, "button", 27);
1059
- i0.ɵɵlistener("click", function AIAgentRunFormComponentExtended_Template_button_click_45_listener() { return ctx.changeTab("details"); });
1060
- i0.ɵɵelement(46, "i", 31);
1061
- i0.ɵɵtext(47, " Details ");
1233
+ i0.ɵɵelementStart(46, "button", 27);
1234
+ i0.ɵɵlistener("click", function AIAgentRunFormComponentExtended_Template_button_click_46_listener() { return ctx.changeTab("details"); });
1235
+ i0.ɵɵelement(47, "i", 31);
1236
+ i0.ɵɵtext(48, " Details ");
1062
1237
  i0.ɵɵelementEnd()();
1063
- i0.ɵɵelementStart(48, "div", 32);
1064
- i0.ɵɵtemplate(49, AIAgentRunFormComponentExtended_div_49_Template, 6, 8, "div", 33)(50, AIAgentRunFormComponentExtended_div_50_Template, 2, 1, "div", 33)(51, AIAgentRunFormComponentExtended_div_51_Template, 2, 1, "div", 33)(52, AIAgentRunFormComponentExtended_div_52_Template, 15, 7, "div", 34);
1238
+ i0.ɵɵelementStart(49, "div", 32);
1239
+ i0.ɵɵtemplate(50, AIAgentRunFormComponentExtended_div_50_Template, 6, 9, "div", 33)(51, AIAgentRunFormComponentExtended_div_51_Template, 2, 1, "div", 33)(52, AIAgentRunFormComponentExtended_div_52_Template, 2, 1, "div", 33)(53, AIAgentRunFormComponentExtended_div_53_Template, 15, 7, "div", 34);
1065
1240
  i0.ɵɵelementEnd()()();
1066
1241
  } if (rf & 2) {
1067
1242
  i0.ɵɵadvance(11);
@@ -1077,7 +1252,7 @@ let AIAgentRunFormComponentExtended = class AIAgentRunFormComponentExtended exte
1077
1252
  i0.ɵɵadvance();
1078
1253
  i0.ɵɵtextInterpolate1(" ", ctx.record.Status, " ");
1079
1254
  i0.ɵɵadvance(9);
1080
- i0.ɵɵtextInterpolate(i0.ɵɵpipeBind2(28, 25, ctx.record.StartedAt, "medium"));
1255
+ i0.ɵɵtextInterpolate(i0.ɵɵpipeBind2(28, 26, ctx.record.StartedAt, "medium"));
1081
1256
  i0.ɵɵadvance(2);
1082
1257
  i0.ɵɵproperty("ngIf", ctx.record.CompletedAt);
1083
1258
  i0.ɵɵadvance();
@@ -1089,6 +1264,8 @@ let AIAgentRunFormComponentExtended = class AIAgentRunFormComponentExtended exte
1089
1264
  i0.ɵɵadvance();
1090
1265
  i0.ɵɵproperty("ngIf", ctx.costMetrics && ctx.costMetrics.totalCost > 0);
1091
1266
  i0.ɵɵadvance();
1267
+ i0.ɵɵproperty("ngIf", ctx.record.EffortLevel);
1268
+ i0.ɵɵadvance();
1092
1269
  i0.ɵɵproperty("ngIf", ctx.record.ConfigurationID);
1093
1270
  i0.ɵɵadvance(2);
1094
1271
  i0.ɵɵclassProp("active", ctx.activeTab === "timeline");
@@ -1106,7 +1283,7 @@ let AIAgentRunFormComponentExtended = class AIAgentRunFormComponentExtended exte
1106
1283
  i0.ɵɵproperty("ngIf", ctx.activeTab === "analytics");
1107
1284
  i0.ɵɵadvance();
1108
1285
  i0.ɵɵproperty("ngIf", ctx.activeTab === "details");
1109
- } }, dependencies: [i5.NgClass, i5.NgIf, i6.NgControlStatus, i6.NgModel, i7.PanelBarComponent, i7.PanelBarItemComponent, i7.PanelBarContentDirective, i7.SplitterComponent, i7.SplitterPaneComponent, i8.CodeEditorComponent, i9.DeepDiffComponent, i10.AIAgentRunTimelineComponent, i11.AIAgentRunAnalyticsComponent, i12.AIAgentRunVisualizationComponent, i13.AIAgentRunStepDetailComponent, i5.DecimalPipe, i5.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\n\n.configuration-bar[_ngcontent-%COMP%] {\n display: flex;\n gap: 24px;\n padding-top: 16px;\n border-top: 1px solid #e9ecef;\n margin-top: 16px;\n}\n\n.config-item[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 12px;\n}\n\n.config-item[_ngcontent-%COMP%] > i[_ngcontent-%COMP%] {\n font-size: 1.2em;\n color: #6c757d;\n width: 24px;\n text-align: center;\n}\n\n.config-content[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n}\n\n.config-label[_ngcontent-%COMP%] {\n font-size: 12px;\n color: #6c757d;\n text-transform: uppercase;\n letter-spacing: 0.5px;\n}\n\n.config-value[_ngcontent-%COMP%] {\n font-size: 14px;\n font-weight: 600;\n color: #2c3e50;\n}\n\n.config-value[_ngcontent-%COMP%] .entity-link[_ngcontent-%COMP%] {\n color: #007bff;\n text-decoration: none;\n cursor: pointer;\n transition: color 0.2s;\n}\n\n.config-value[_ngcontent-%COMP%] .entity-link[_ngcontent-%COMP%]:hover {\n color: #0056b3;\n text-decoration: underline;\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}"] }); }
1286
+ } }, dependencies: [i4.NgClass, i4.NgIf, i5.NgControlStatus, i5.NgModel, i6.PanelBarComponent, i6.PanelBarItemComponent, i6.PanelBarContentDirective, i6.SplitterComponent, i6.SplitterPaneComponent, i7.CodeEditorComponent, i8.DeepDiffComponent, i9.AIAgentRunTimelineComponent, i10.AIAgentRunAnalyticsComponent, i11.AIAgentRunVisualizationComponent, i12.AIAgentRunStepDetailComponent, i4.DecimalPipe, i4.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\n\n.configuration-bar[_ngcontent-%COMP%] {\n display: flex;\n gap: 24px;\n padding-top: 16px;\n border-top: 1px solid #e9ecef;\n margin-top: 16px;\n}\n\n.config-item[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 12px;\n}\n\n.config-item[_ngcontent-%COMP%] > i[_ngcontent-%COMP%] {\n font-size: 1.2em;\n color: #6c757d;\n width: 24px;\n text-align: center;\n}\n\n.config-content[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n}\n\n.config-label[_ngcontent-%COMP%] {\n font-size: 12px;\n color: #6c757d;\n text-transform: uppercase;\n letter-spacing: 0.5px;\n}\n\n.config-value[_ngcontent-%COMP%] {\n font-size: 14px;\n font-weight: 600;\n color: #2c3e50;\n}\n\n.config-value[_ngcontent-%COMP%] .entity-link[_ngcontent-%COMP%] {\n color: #007bff;\n text-decoration: none;\n cursor: pointer;\n transition: color 0.2s;\n}\n\n.config-value[_ngcontent-%COMP%] .entity-link[_ngcontent-%COMP%]:hover {\n color: #0056b3;\n text-decoration: underline;\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}"] }); }
1110
1287
  };
1111
1288
  AIAgentRunFormComponentExtended = __decorate([
1112
1289
  RegisterClass(BaseFormComponent, 'MJ: AI Agent Runs')
@@ -1114,8 +1291,8 @@ AIAgentRunFormComponentExtended = __decorate([
1114
1291
  export { AIAgentRunFormComponentExtended };
1115
1292
  (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(AIAgentRunFormComponentExtended, [{
1116
1293
  type: Component,
1117
- 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=\"costMetrics && (costMetrics.totalTokensInput + costMetrics.totalTokensOutput) > 0\">\n <span class=\"label\">Tokens</span>\n <span class=\"value\" *ngIf=\"!costMetrics.isLoading\">{{ (costMetrics.totalTokensInput + costMetrics.totalTokensOutput) | number:'1.0-0' }}</span>\n <span class=\"value loading\" *ngIf=\"costMetrics.isLoading\"><i class=\"fas fa-spinner fa-spin\"></i></span>\n </div>\n <div class=\"stat\" *ngIf=\"costMetrics && costMetrics.totalCost > 0\">\n <span class=\"label\">Cost</span>\n <span class=\"value\" *ngIf=\"!costMetrics.isLoading\">${{ costMetrics.totalCost | number:'1.2-4' }}</span>\n <span class=\"value loading\" *ngIf=\"costMetrics.isLoading\"><i class=\"fas fa-spinner fa-spin\"></i></span>\n </div>\n </div>\n \n <!-- Configuration Bar (shown below header stats when ConfigurationID exists) -->\n <div class=\"configuration-bar\" *ngIf=\"record.ConfigurationID\">\n <div class=\"config-item\">\n <i class=\"fas fa-cog\"></i>\n <div class=\"config-content\">\n <div class=\"config-label\">Configuration</div>\n <div class=\"config-value\">\n <a href=\"javascript:void(0)\" class=\"entity-link\" (click)=\"openEntityRecord('MJ: AI Configurations', record.ConfigurationID)\">\n {{ record.Configuration || 'Unknown' }}\n </a>\n </div>\n </div>\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 === 'visualization'\" (click)=\"changeTab('visualization')\">\n <i class=\"fas fa-diagram-project\"></i> Visualization\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]=\"30000\"\n (itemSelected)=\"selectTimelineItem($event)\"\n (navigateToEntity)=\"navigateToEntityRecord($event)\"\n (agentRunCompleted)=\"onAgentRunCompleted($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 <mj-ai-agent-run-step-detail\n [selectedTimelineItem]=\"selectedTimelineItem\"\n (closePanel)=\"closeJsonPanel()\"\n (navigateToActionLog)=\"navigateToActionLog($event)\"\n (copyToClipboard)=\"copyToClipboard($event)\">\n </mj-ai-agent-run-step-detail>\n </kendo-splitter-pane>\n </kendo-splitter>\n </div>\n\n <!-- Visualization Tab -->\n <div class=\"tab-content\" *ngIf=\"activeTab === 'visualization'\" style=\"height: 100%;\">\n <mj-ai-agent-run-visualization\n #visualizationComponent\n [aiAgentRunId]=\"record.ID\"\n *ngIf=\"visualizationLoaded\">\n </mj-ai-agent-run-visualization>\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 [keepItemContent]=\"true\">\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 Settings\">\n <ng-template kendoPanelBarContent>\n <div class=\"details-grid\">\n <div class=\"detail-item\">\n <label>Override Model</label>\n <span>\n <a *ngIf=\"record.OverrideModelID\" href=\"javascript:void(0)\" class=\"entity-link\" (click)=\"openEntityRecord('AI Models', record.OverrideModelID)\">\n {{ record.OverrideModel || 'N/A' }}\n </a>\n <span *ngIf=\"!record.OverrideModelID\">N/A</span>\n </span>\n </div>\n <div class=\"detail-item\">\n <label>Override Vendor</label>\n <span>\n <a *ngIf=\"record.OverrideVendorID\" href=\"javascript:void(0)\" class=\"entity-link\" (click)=\"openEntityRecord('AI Vendors', record.OverrideVendorID)\">\n {{ record.OverrideVendor || 'N/A' }}\n </a>\n <span *ngIf=\"!record.OverrideVendorID\">N/A</span>\n </span>\n </div>\n <div class=\"detail-item\">\n <label>Verbose Logging</label>\n <span>{{ record.Verbose ? 'Yes' : 'No' }}</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=\"Execution Data\" *ngIf=\"record.Data\">\n <ng-template kendoPanelBarContent>\n <div class=\"result-viewer\">\n <mj-code-editor\n [ngModel]=\"parsedData\"\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/* Configuration Bar */\n.configuration-bar {\n display: flex;\n gap: 24px;\n padding-top: 16px;\n border-top: 1px solid #e9ecef;\n margin-top: 16px;\n}\n\n.config-item {\n display: flex;\n align-items: center;\n gap: 12px;\n}\n\n.config-item > i {\n font-size: 1.2em;\n color: #6c757d;\n width: 24px;\n text-align: center;\n}\n\n.config-content {\n display: flex;\n flex-direction: column;\n}\n\n.config-label {\n font-size: 12px;\n color: #6c757d;\n text-transform: uppercase;\n letter-spacing: 0.5px;\n}\n\n.config-value {\n font-size: 14px;\n font-weight: 600;\n color: #2c3e50;\n}\n\n.config-value .entity-link {\n color: #007bff;\n text-decoration: none;\n cursor: pointer;\n transition: color 0.2s;\n}\n\n.config-value .entity-link:hover {\n color: #0056b3;\n text-decoration: underline;\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}"] }]
1118
- }], () => [{ type: i0.ElementRef }, { type: i1.SharedService }, { type: i2.Router }, { type: i2.ActivatedRoute }, { type: i0.ChangeDetectorRef }, { type: i3.AIAgentRunCostService }, { type: i4.AIAgentRunDataService }], { timelineComponent: [{
1294
+ 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=\"costMetrics && (costMetrics.totalTokensInput + costMetrics.totalTokensOutput) > 0\">\n <span class=\"label\">Tokens</span>\n <span class=\"value\" *ngIf=\"!costMetrics.isLoading\">{{ (costMetrics.totalTokensInput + costMetrics.totalTokensOutput) | number:'1.0-0' }}</span>\n <span class=\"value loading\" *ngIf=\"costMetrics.isLoading\"><i class=\"fas fa-spinner fa-spin\"></i></span>\n </div>\n <div class=\"stat\" *ngIf=\"costMetrics && costMetrics.totalCost > 0\">\n <span class=\"label\">Cost</span>\n <span class=\"value\" *ngIf=\"!costMetrics.isLoading\">${{ costMetrics.totalCost | number:'1.2-4' }}</span>\n <span class=\"value loading\" *ngIf=\"costMetrics.isLoading\"><i class=\"fas fa-spinner fa-spin\"></i></span>\n </div>\n <div class=\"stat\" *ngIf=\"record.EffortLevel\">\n <span class=\"label\">Effort Level</span>\n <span class=\"value\">{{ record.EffortLevel }}</span>\n </div>\n </div>\n \n <!-- Configuration Bar (shown below header stats when ConfigurationID exists) -->\n <div class=\"configuration-bar\" *ngIf=\"record.ConfigurationID\">\n <div class=\"config-item\">\n <i class=\"fas fa-cog\"></i>\n <div class=\"config-content\">\n <div class=\"config-label\">Configuration</div>\n <div class=\"config-value\">\n <a href=\"javascript:void(0)\" class=\"entity-link\" (click)=\"openEntityRecord('MJ: AI Configurations', record.ConfigurationID)\">\n {{ record.Configuration || 'Unknown' }}\n </a>\n </div>\n </div>\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 === 'visualization'\" (click)=\"changeTab('visualization')\">\n <i class=\"fas fa-diagram-project\"></i> Visualization\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 [dataHelper]=\"dataHelper\"\n [autoRefresh]=\"record.Status === 'Running'\"\n [refreshInterval]=\"30000\"\n (itemSelected)=\"selectTimelineItem($event)\"\n (navigateToEntity)=\"navigateToEntityRecord($event)\"\n (agentRunCompleted)=\"onAgentRunCompleted($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 <mj-ai-agent-run-step-detail\n [selectedTimelineItem]=\"selectedTimelineItem\"\n (closePanel)=\"closeJsonPanel()\"\n (navigateToActionLog)=\"navigateToActionLog($event)\"\n (copyToClipboard)=\"copyToClipboard($event)\">\n </mj-ai-agent-run-step-detail>\n </kendo-splitter-pane>\n </kendo-splitter>\n </div>\n\n <!-- Visualization Tab -->\n <div class=\"tab-content\" *ngIf=\"activeTab === 'visualization'\" style=\"height: 100%;\">\n <mj-ai-agent-run-visualization\n #visualizationComponent\n [aiAgentRunId]=\"record.ID\"\n [dataHelper]=\"dataHelper\"\n *ngIf=\"visualizationLoaded\">\n </mj-ai-agent-run-visualization>\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 [keepItemContent]=\"true\">\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 Settings\">\n <ng-template kendoPanelBarContent>\n <div class=\"details-grid\">\n <div class=\"detail-item\">\n <label>Override Model</label>\n <span>\n <a *ngIf=\"record.OverrideModelID\" href=\"javascript:void(0)\" class=\"entity-link\" (click)=\"openEntityRecord('AI Models', record.OverrideModelID)\">\n {{ record.OverrideModel || 'N/A' }}\n </a>\n <span *ngIf=\"!record.OverrideModelID\">N/A</span>\n </span>\n </div>\n <div class=\"detail-item\">\n <label>Override Vendor</label>\n <span>\n <a *ngIf=\"record.OverrideVendorID\" href=\"javascript:void(0)\" class=\"entity-link\" (click)=\"openEntityRecord('AI Vendors', record.OverrideVendorID)\">\n {{ record.OverrideVendor || 'N/A' }}\n </a>\n <span *ngIf=\"!record.OverrideVendorID\">N/A</span>\n </span>\n </div>\n <div class=\"detail-item\">\n <label>Verbose Logging</label>\n <span>{{ record.Verbose ? 'Yes' : 'No' }}</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 @if (isParsingComplete) {\n <mj-code-editor\n [ngModel]=\"parsedResult\"\n [language]=\"'json'\"\n [readonly]=\"true\"\n style=\"height: 300px; width: 100%;\">\n </mj-code-editor>\n } @else {\n <div style=\"padding: 20px; text-align: center; color: #666;\">\n <i class=\"fas fa-spinner fa-spin\"></i> Loading result data...\n </div>\n }\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 @if (isParsingComplete) {\n <mj-code-editor\n [ngModel]=\"parsedStartingPayload\"\n [language]=\"'json'\"\n [readonly]=\"true\"\n style=\"height: 300px; width: 100%;\">\n </mj-code-editor>\n } @else {\n <div style=\"padding: 20px; text-align: center; color: #666;\">\n <i class=\"fas fa-spinner fa-spin\"></i> Loading payload data...\n </div>\n }\n </div>\n </ng-template>\n </kendo-panelbar-item>\n \n <kendo-panelbar-item title=\"Execution Data\" *ngIf=\"record.Data\">\n <ng-template kendoPanelBarContent>\n <div class=\"result-viewer\">\n @if (isParsingComplete) {\n <mj-code-editor\n [ngModel]=\"parsedData\"\n [language]=\"'json'\"\n [readonly]=\"true\"\n style=\"height: 300px; width: 100%;\">\n </mj-code-editor>\n } @else {\n <div style=\"padding: 20px; text-align: center; color: #666;\">\n <i class=\"fas fa-spinner fa-spin\"></i> Loading execution data...\n </div>\n }\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 @if (isParsingComplete) {\n <mj-code-editor\n [ngModel]=\"parsedFinalPayload\"\n [language]=\"'json'\"\n [readonly]=\"true\"\n style=\"height: 300px; width: 100%;\">\n </mj-code-editor>\n } @else {\n <div style=\"padding: 20px; text-align: center; color: #666;\">\n <i class=\"fas fa-spinner fa-spin\"></i> Loading final payload data...\n </div>\n }\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 @if (isParsingComplete) {\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 } @else {\n <div style=\"padding: 20px; text-align: center; color: #666;\">\n <i class=\"fas fa-spinner fa-spin\"></i> Loading payload diff...\n </div>\n }\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/* Configuration Bar */\n.configuration-bar {\n display: flex;\n gap: 24px;\n padding-top: 16px;\n border-top: 1px solid #e9ecef;\n margin-top: 16px;\n}\n\n.config-item {\n display: flex;\n align-items: center;\n gap: 12px;\n}\n\n.config-item > i {\n font-size: 1.2em;\n color: #6c757d;\n width: 24px;\n text-align: center;\n}\n\n.config-content {\n display: flex;\n flex-direction: column;\n}\n\n.config-label {\n font-size: 12px;\n color: #6c757d;\n text-transform: uppercase;\n letter-spacing: 0.5px;\n}\n\n.config-value {\n font-size: 14px;\n font-weight: 600;\n color: #2c3e50;\n}\n\n.config-value .entity-link {\n color: #007bff;\n text-decoration: none;\n cursor: pointer;\n transition: color 0.2s;\n}\n\n.config-value .entity-link:hover {\n color: #0056b3;\n text-decoration: underline;\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}"] }]
1295
+ }], () => [{ type: i0.ElementRef }, { type: i1.SharedService }, { type: i2.Router }, { type: i2.ActivatedRoute }, { type: i0.ChangeDetectorRef }, { type: i3.AIAgentRunCostService }], { timelineComponent: [{
1119
1296
  type: ViewChild,
1120
1297
  args: [AIAgentRunTimelineComponent]
1121
1298
  }], analyticsComponent: [{