@memberjunction/ng-core-entity-forms 2.53.0 → 2.55.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 (114) hide show
  1. package/README.md +1 -206
  2. package/dist/lib/custom/AIAgents/ai-agent-form.component.d.ts +28 -5
  3. package/dist/lib/custom/AIAgents/ai-agent-form.component.d.ts.map +1 -1
  4. package/dist/lib/custom/AIAgents/ai-agent-form.component.js +364 -234
  5. package/dist/lib/custom/AIAgents/ai-agent-form.component.js.map +1 -1
  6. package/dist/lib/custom/AIAgents/new-agent-dialog.component.d.ts +36 -0
  7. package/dist/lib/custom/AIAgents/new-agent-dialog.component.d.ts.map +1 -0
  8. package/dist/lib/custom/AIAgents/new-agent-dialog.component.js +325 -0
  9. package/dist/lib/custom/AIAgents/new-agent-dialog.component.js.map +1 -0
  10. package/dist/lib/custom/AIAgents/new-agent-dialog.service.d.ts +41 -0
  11. package/dist/lib/custom/AIAgents/new-agent-dialog.service.d.ts.map +1 -0
  12. package/dist/lib/custom/AIAgents/new-agent-dialog.service.js +87 -0
  13. package/dist/lib/custom/AIAgents/new-agent-dialog.service.js.map +1 -0
  14. package/dist/lib/custom/AIPromptRuns/ai-prompt-run-form.component.js +5 -7
  15. package/dist/lib/custom/AIPromptRuns/ai-prompt-run-form.component.js.map +1 -1
  16. package/dist/lib/custom/AIPrompts/ai-prompt-form.component.d.ts +5 -2
  17. package/dist/lib/custom/AIPrompts/ai-prompt-form.component.d.ts.map +1 -1
  18. package/dist/lib/custom/AIPrompts/ai-prompt-form.component.js +501 -485
  19. package/dist/lib/custom/AIPrompts/ai-prompt-form.component.js.map +1 -1
  20. package/dist/lib/custom/Actions/action-execution-log-form.component.d.ts +2 -0
  21. package/dist/lib/custom/Actions/action-execution-log-form.component.d.ts.map +1 -1
  22. package/dist/lib/custom/Actions/action-execution-log-form.component.js +216 -293
  23. package/dist/lib/custom/Actions/action-execution-log-form.component.js.map +1 -1
  24. package/dist/lib/custom/Actions/action-form.component.js +6 -8
  25. package/dist/lib/custom/Actions/action-form.component.js.map +1 -1
  26. package/dist/lib/custom/ai-agent-run/ai-agent-run-step-node.component.d.ts +25 -0
  27. package/dist/lib/custom/ai-agent-run/ai-agent-run-step-node.component.d.ts.map +1 -0
  28. package/dist/lib/custom/ai-agent-run/ai-agent-run-step-node.component.js +261 -0
  29. package/dist/lib/custom/ai-agent-run/ai-agent-run-step-node.component.js.map +1 -0
  30. package/dist/lib/custom/ai-agent-run/ai-agent-run-timeline.component.d.ts +73 -0
  31. package/dist/lib/custom/ai-agent-run/ai-agent-run-timeline.component.d.ts.map +1 -0
  32. package/dist/lib/custom/ai-agent-run/ai-agent-run-timeline.component.js +510 -0
  33. package/dist/lib/custom/ai-agent-run/ai-agent-run-timeline.component.js.map +1 -0
  34. package/dist/lib/custom/ai-agent-run/ai-agent-run.component.d.ts +41 -0
  35. package/dist/lib/custom/ai-agent-run/ai-agent-run.component.d.ts.map +1 -0
  36. package/dist/lib/custom/ai-agent-run/ai-agent-run.component.js +568 -0
  37. package/dist/lib/custom/ai-agent-run/ai-agent-run.component.js.map +1 -0
  38. package/dist/lib/custom/custom-forms.module.d.ts +31 -31
  39. package/dist/lib/custom/custom-forms.module.d.ts.map +1 -1
  40. package/dist/lib/custom/custom-forms.module.js +37 -34
  41. package/dist/lib/custom/custom-forms.module.js.map +1 -1
  42. package/dist/lib/generated/Entities/AIAgent/aiagent.form.component.js +16 -17
  43. package/dist/lib/generated/Entities/AIAgent/aiagent.form.component.js.map +1 -1
  44. package/dist/lib/generated/Entities/AIAgentRun/aiagentrun.form.component.js +11 -14
  45. package/dist/lib/generated/Entities/AIAgentRun/aiagentrun.form.component.js.map +1 -1
  46. package/dist/lib/generated/Entities/AIAgentRunStep/aiagentrunstep.form.component.js +3 -5
  47. package/dist/lib/generated/Entities/AIAgentRunStep/aiagentrunstep.form.component.js.map +1 -1
  48. package/dist/lib/generated/Entities/AIAgentRunStep/sections/details.component.d.ts.map +1 -1
  49. package/dist/lib/generated/Entities/AIAgentRunStep/sections/details.component.js +13 -4
  50. package/dist/lib/generated/Entities/AIAgentRunStep/sections/details.component.js.map +1 -1
  51. package/dist/lib/generated/Entities/AIAgentType/aiagenttype.form.component.js +5 -7
  52. package/dist/lib/generated/Entities/AIAgentType/aiagenttype.form.component.js.map +1 -1
  53. package/dist/lib/generated/Entities/AIConfiguration/aiconfiguration.form.component.js +7 -8
  54. package/dist/lib/generated/Entities/AIConfiguration/aiconfiguration.form.component.js.map +1 -1
  55. package/dist/lib/generated/Entities/AIModel/aimodel.form.component.js +12 -13
  56. package/dist/lib/generated/Entities/AIModel/aimodel.form.component.js.map +1 -1
  57. package/dist/lib/generated/Entities/AIModelCost/aimodelcost.form.component.js +3 -5
  58. package/dist/lib/generated/Entities/AIModelCost/aimodelcost.form.component.js.map +1 -1
  59. package/dist/lib/generated/Entities/AIModelPriceType/aimodelpricetype.form.component.js +5 -7
  60. package/dist/lib/generated/Entities/AIModelPriceType/aimodelpricetype.form.component.js.map +1 -1
  61. package/dist/lib/generated/Entities/AIModelPriceUnitType/aimodelpriceunittype.form.component.js +5 -7
  62. package/dist/lib/generated/Entities/AIModelPriceUnitType/aimodelpriceunittype.form.component.js.map +1 -1
  63. package/dist/lib/generated/Entities/AIModelType/aimodeltype.form.component.js +11 -12
  64. package/dist/lib/generated/Entities/AIModelType/aimodeltype.form.component.js.map +1 -1
  65. package/dist/lib/generated/Entities/AIPrompt/aiprompt.form.component.js +19 -20
  66. package/dist/lib/generated/Entities/AIPrompt/aiprompt.form.component.js.map +1 -1
  67. package/dist/lib/generated/Entities/AIPromptRun/aipromptrun.form.component.js +11 -12
  68. package/dist/lib/generated/Entities/AIPromptRun/aipromptrun.form.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/AIVendor/aivendor.form.component.js +15 -16
  73. package/dist/lib/generated/Entities/AIVendor/aivendor.form.component.js.map +1 -1
  74. package/dist/lib/generated/Entities/Action/action.form.component.js +5 -5
  75. package/dist/lib/generated/Entities/Action/action.form.component.js.map +1 -1
  76. package/dist/lib/generated/Entities/ActionAuthorization/actionauthorization.form.component.js +1 -1
  77. package/dist/lib/generated/Entities/ActionAuthorization/actionauthorization.form.component.js.map +1 -1
  78. package/dist/lib/generated/Entities/ActionContext/actioncontext.form.component.js +1 -1
  79. package/dist/lib/generated/Entities/ActionContext/actioncontext.form.component.js.map +1 -1
  80. package/dist/lib/generated/Entities/Conversation/conversation.form.component.js +5 -5
  81. package/dist/lib/generated/Entities/Conversation/conversation.form.component.js.map +1 -1
  82. package/dist/lib/generated/Entities/TemplateContent/templatecontent.form.component.js +4 -4
  83. package/dist/lib/generated/Entities/TemplateContent/templatecontent.form.component.js.map +1 -1
  84. package/dist/lib/generated/Entities/User/user.form.component.js +5 -5
  85. package/dist/lib/generated/Entities/User/user.form.component.js.map +1 -1
  86. package/dist/public-api.d.ts +2 -3
  87. package/dist/public-api.d.ts.map +1 -1
  88. package/dist/public-api.js +3 -16
  89. package/dist/public-api.js.map +1 -1
  90. package/package.json +13 -12
  91. package/dist/lib/custom/ai-test-harness/agent-execution-monitor.component.d.ts +0 -244
  92. package/dist/lib/custom/ai-test-harness/agent-execution-monitor.component.d.ts.map +0 -1
  93. package/dist/lib/custom/ai-test-harness/agent-execution-monitor.component.js +0 -1327
  94. package/dist/lib/custom/ai-test-harness/agent-execution-monitor.component.js.map +0 -1
  95. package/dist/lib/custom/ai-test-harness/agent-execution-node.component.d.ts +0 -19
  96. package/dist/lib/custom/ai-test-harness/agent-execution-node.component.d.ts.map +0 -1
  97. package/dist/lib/custom/ai-test-harness/agent-execution-node.component.js +0 -458
  98. package/dist/lib/custom/ai-test-harness/agent-execution-node.component.js.map +0 -1
  99. package/dist/lib/custom/ai-test-harness/ai-test-harness-dialog.component.d.ts +0 -78
  100. package/dist/lib/custom/ai-test-harness/ai-test-harness-dialog.component.d.ts.map +0 -1
  101. package/dist/lib/custom/ai-test-harness/ai-test-harness-dialog.component.js +0 -157
  102. package/dist/lib/custom/ai-test-harness/ai-test-harness-dialog.component.js.map +0 -1
  103. package/dist/lib/custom/ai-test-harness/ai-test-harness.component.d.ts +0 -598
  104. package/dist/lib/custom/ai-test-harness/ai-test-harness.component.d.ts.map +0 -1
  105. package/dist/lib/custom/ai-test-harness/ai-test-harness.component.js +0 -3204
  106. package/dist/lib/custom/ai-test-harness/ai-test-harness.component.js.map +0 -1
  107. package/dist/lib/custom/ai-test-harness/json-viewer-window.component.d.ts +0 -8
  108. package/dist/lib/custom/ai-test-harness/json-viewer-window.component.d.ts.map +0 -1
  109. package/dist/lib/custom/ai-test-harness/json-viewer-window.component.js +0 -57
  110. package/dist/lib/custom/ai-test-harness/json-viewer-window.component.js.map +0 -1
  111. package/dist/lib/custom/test-harness-dialog.service.d.ts +0 -111
  112. package/dist/lib/custom/test-harness-dialog.service.d.ts.map +0 -1
  113. package/dist/lib/custom/test-harness-dialog.service.js +0 -211
  114. package/dist/lib/custom/test-harness-dialog.service.js.map +0 -1
@@ -0,0 +1,568 @@
1
+ var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
2
+ var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
3
+ if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
4
+ else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
5
+ return c > 3 && r && Object.defineProperty(target, key, r), r;
6
+ };
7
+ import { Component } from '@angular/core';
8
+ import { Subject } from 'rxjs';
9
+ import { CompositeKey, Metadata } from '@memberjunction/core';
10
+ import { BaseFormComponent } from '@memberjunction/ng-base-forms';
11
+ import { RegisterClass } from '@memberjunction/global';
12
+ import { SharedService } from '@memberjunction/ng-shared';
13
+ import { AIAgentRunFormComponent } from '../../generated/Entities/AIAgentRun/aiagentrun.form.component';
14
+ import * as i0 from "@angular/core";
15
+ import * as i1 from "@memberjunction/ng-shared";
16
+ import * as i2 from "@angular/router";
17
+ import * as i3 from "@angular/common";
18
+ import * as i4 from "@angular/forms";
19
+ import * as i5 from "@progress/kendo-angular-layout";
20
+ import * as i6 from "@memberjunction/ng-code-editor";
21
+ import * as i7 from "./ai-agent-run-timeline.component";
22
+ function AIAgentRunFormComponentExtended_span_11_Template(rf, ctx) { if (rf & 1) {
23
+ i0.ɵɵelementStart(0, "span", 30);
24
+ i0.ɵɵtext(1);
25
+ i0.ɵɵelementEnd();
26
+ } if (rf & 2) {
27
+ const ctx_r0 = i0.ɵɵnextContext();
28
+ i0.ɵɵadvance();
29
+ i0.ɵɵtextInterpolate(ctx_r0.agent.Name);
30
+ } }
31
+ function AIAgentRunFormComponentExtended_span_14_Template(rf, ctx) { if (rf & 1) {
32
+ const _r2 = i0.ɵɵgetCurrentView();
33
+ i0.ɵɵelementStart(0, "span", 31);
34
+ i0.ɵɵelement(1, "i", 32);
35
+ i0.ɵɵelementStart(2, "a", 33);
36
+ i0.ɵɵlistener("click", function AIAgentRunFormComponentExtended_span_14_Template_a_click_2_listener() { i0.ɵɵrestoreView(_r2); const ctx_r0 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r0.navigateToParentRun()); });
37
+ i0.ɵɵtext(3, "Parent Run");
38
+ i0.ɵɵelementEnd()();
39
+ } }
40
+ function AIAgentRunFormComponentExtended_div_29_Template(rf, ctx) { if (rf & 1) {
41
+ i0.ɵɵelementStart(0, "div", 19)(1, "span", 20);
42
+ i0.ɵɵtext(2, "Completed");
43
+ i0.ɵɵelementEnd();
44
+ i0.ɵɵelementStart(3, "span", 21);
45
+ i0.ɵɵtext(4);
46
+ i0.ɵɵpipe(5, "date");
47
+ i0.ɵɵelementEnd()();
48
+ } if (rf & 2) {
49
+ const ctx_r0 = i0.ɵɵnextContext();
50
+ i0.ɵɵadvance(4);
51
+ i0.ɵɵtextInterpolate(i0.ɵɵpipeBind2(5, 1, ctx_r0.record.CompletedAt, "medium"));
52
+ } }
53
+ function AIAgentRunFormComponentExtended_div_30_Template(rf, ctx) { if (rf & 1) {
54
+ i0.ɵɵelementStart(0, "div", 19)(1, "span", 20);
55
+ i0.ɵɵtext(2, "Duration");
56
+ i0.ɵɵelementEnd();
57
+ i0.ɵɵelementStart(3, "span", 21);
58
+ i0.ɵɵtext(4);
59
+ i0.ɵɵelementEnd()();
60
+ } if (rf & 2) {
61
+ const ctx_r0 = i0.ɵɵnextContext();
62
+ i0.ɵɵadvance(4);
63
+ i0.ɵɵtextInterpolate(ctx_r0.calculateDuration(ctx_r0.record.StartedAt, ctx_r0.record.CompletedAt));
64
+ } }
65
+ function AIAgentRunFormComponentExtended_div_31_Template(rf, ctx) { if (rf & 1) {
66
+ i0.ɵɵelementStart(0, "div", 19)(1, "span", 20);
67
+ i0.ɵɵtext(2, "Result");
68
+ i0.ɵɵelementEnd();
69
+ i0.ɵɵelementStart(3, "span", 21);
70
+ i0.ɵɵtext(4);
71
+ i0.ɵɵelementEnd()();
72
+ } if (rf & 2) {
73
+ const ctx_r0 = i0.ɵɵnextContext();
74
+ i0.ɵɵadvance(3);
75
+ i0.ɵɵclassProp("success", ctx_r0.record.Success)("error", !ctx_r0.record.Success);
76
+ i0.ɵɵadvance();
77
+ i0.ɵɵtextInterpolate1(" ", ctx_r0.record.Success ? "Success" : "Failed", " ");
78
+ } }
79
+ function AIAgentRunFormComponentExtended_div_32_Template(rf, ctx) { if (rf & 1) {
80
+ i0.ɵɵelementStart(0, "div", 19)(1, "span", 20);
81
+ i0.ɵɵtext(2, "Tokens");
82
+ i0.ɵɵelementEnd();
83
+ i0.ɵɵelementStart(3, "span", 21);
84
+ i0.ɵɵtext(4);
85
+ i0.ɵɵpipe(5, "number");
86
+ i0.ɵɵelementEnd()();
87
+ } if (rf & 2) {
88
+ const ctx_r0 = i0.ɵɵnextContext();
89
+ i0.ɵɵadvance(4);
90
+ i0.ɵɵtextInterpolate(i0.ɵɵpipeBind2(5, 1, ctx_r0.record.TotalTokensUsed, "1.0-0"));
91
+ } }
92
+ function AIAgentRunFormComponentExtended_div_33_Template(rf, ctx) { if (rf & 1) {
93
+ i0.ɵɵelementStart(0, "div", 19)(1, "span", 20);
94
+ i0.ɵɵtext(2, "Cost");
95
+ i0.ɵɵelementEnd();
96
+ i0.ɵɵelementStart(3, "span", 21);
97
+ i0.ɵɵtext(4);
98
+ i0.ɵɵpipe(5, "number");
99
+ i0.ɵɵelementEnd()();
100
+ } if (rf & 2) {
101
+ const ctx_r0 = i0.ɵɵnextContext();
102
+ i0.ɵɵadvance(4);
103
+ i0.ɵɵtextInterpolate1("$", i0.ɵɵpipeBind2(5, 1, ctx_r0.record.TotalCost, "1.2-4"), "");
104
+ } }
105
+ function AIAgentRunFormComponentExtended_div_42_div_5_div_24_Template(rf, ctx) { if (rf & 1) {
106
+ const _r5 = i0.ɵɵgetCurrentView();
107
+ i0.ɵɵelementStart(0, "div", 54)(1, "button", 55);
108
+ i0.ɵɵlistener("click", function AIAgentRunFormComponentExtended_div_42_div_5_div_24_Template_button_click_1_listener() { i0.ɵɵrestoreView(_r5); const ctx_r0 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r0.navigateToActionLog(ctx_r0.selectedTimelineItem.data.ID)); });
109
+ i0.ɵɵelement(2, "i", 56);
110
+ i0.ɵɵtext(3, " View Action Execution Log ");
111
+ i0.ɵɵelementEnd()();
112
+ } }
113
+ function AIAgentRunFormComponentExtended_div_42_div_5_Template(rf, ctx) { if (rf & 1) {
114
+ const _r4 = i0.ɵɵgetCurrentView();
115
+ i0.ɵɵelementStart(0, "div", 40)(1, "div", 41)(2, "h3");
116
+ i0.ɵɵelement(3, "i", 14);
117
+ i0.ɵɵtext(4);
118
+ i0.ɵɵelementEnd();
119
+ i0.ɵɵelementStart(5, "button", 42);
120
+ i0.ɵɵlistener("click", function AIAgentRunFormComponentExtended_div_42_div_5_Template_button_click_5_listener() { i0.ɵɵrestoreView(_r4); const ctx_r0 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r0.closeJsonPanel()); });
121
+ i0.ɵɵelement(6, "i", 43);
122
+ i0.ɵɵelementEnd()();
123
+ i0.ɵɵelementStart(7, "div", 44)(8, "div", 45)(9, "div", 46)(10, "label");
124
+ i0.ɵɵtext(11, "Type");
125
+ i0.ɵɵelementEnd();
126
+ i0.ɵɵelementStart(12, "span");
127
+ i0.ɵɵtext(13);
128
+ i0.ɵɵelementEnd()();
129
+ i0.ɵɵelementStart(14, "div", 46)(15, "label");
130
+ i0.ɵɵtext(16, "Status");
131
+ i0.ɵɵelementEnd();
132
+ i0.ɵɵelementStart(17, "span", 47);
133
+ i0.ɵɵtext(18);
134
+ i0.ɵɵelementEnd()();
135
+ i0.ɵɵelementStart(19, "div", 46)(20, "label");
136
+ i0.ɵɵtext(21, "Duration");
137
+ i0.ɵɵelementEnd();
138
+ i0.ɵɵelementStart(22, "span");
139
+ i0.ɵɵtext(23);
140
+ i0.ɵɵelementEnd()()();
141
+ i0.ɵɵtemplate(24, AIAgentRunFormComponentExtended_div_42_div_5_div_24_Template, 4, 0, "div", 48);
142
+ i0.ɵɵelementStart(25, "div", 49)(26, "div", 50)(27, "button", 51);
143
+ i0.ɵɵlistener("click", function AIAgentRunFormComponentExtended_div_42_div_5_Template_button_click_27_listener() { i0.ɵɵrestoreView(_r4); const ctx_r0 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r0.copyToClipboard(ctx_r0.getSelectedItemJson())); });
144
+ i0.ɵɵelement(28, "i", 52);
145
+ i0.ɵɵelementEnd()();
146
+ i0.ɵɵelementStart(29, "mj-code-editor", 53);
147
+ i0.ɵɵtwoWayListener("ngModelChange", function AIAgentRunFormComponentExtended_div_42_div_5_Template_mj_code_editor_ngModelChange_29_listener($event) { i0.ɵɵrestoreView(_r4); const ctx_r0 = i0.ɵɵnextContext(2); i0.ɵɵtwoWayBindingSet(ctx_r0.selectedItemJsonString, $event) || (ctx_r0.selectedItemJsonString = $event); return i0.ɵɵresetView($event); });
148
+ i0.ɵɵelementEnd()()()();
149
+ } if (rf & 2) {
150
+ const ctx_r0 = i0.ɵɵnextContext(2);
151
+ i0.ɵɵadvance(3);
152
+ i0.ɵɵproperty("ngClass", ctx_r0.selectedTimelineItem.icon);
153
+ i0.ɵɵadvance();
154
+ i0.ɵɵtextInterpolate1(" ", ctx_r0.selectedTimelineItem.title, " ");
155
+ i0.ɵɵadvance(9);
156
+ i0.ɵɵtextInterpolate(ctx_r0.selectedTimelineItem.type);
157
+ i0.ɵɵadvance(4);
158
+ i0.ɵɵattribute("data-status", ctx_r0.selectedTimelineItem.status);
159
+ i0.ɵɵadvance();
160
+ i0.ɵɵtextInterpolate1(" ", ctx_r0.selectedTimelineItem.status, " ");
161
+ i0.ɵɵadvance(5);
162
+ i0.ɵɵtextInterpolate(ctx_r0.selectedTimelineItem.duration || "N/A");
163
+ i0.ɵɵadvance();
164
+ i0.ɵɵproperty("ngIf", ctx_r0.selectedTimelineItem.type === "action" && (ctx_r0.selectedTimelineItem.data == null ? null : ctx_r0.selectedTimelineItem.data.ID));
165
+ i0.ɵɵadvance(5);
166
+ i0.ɵɵtwoWayProperty("ngModel", ctx_r0.selectedItemJsonString);
167
+ i0.ɵɵproperty("language", "json")("readonly", true);
168
+ } }
169
+ function AIAgentRunFormComponentExtended_div_42_Template(rf, ctx) { if (rf & 1) {
170
+ const _r3 = i0.ɵɵgetCurrentView();
171
+ i0.ɵɵelementStart(0, "div", 34)(1, "kendo-splitter", 35)(2, "kendo-splitter-pane", 36)(3, "mj-ai-agent-run-timeline", 37);
172
+ i0.ɵɵlistener("itemSelected", function AIAgentRunFormComponentExtended_div_42_Template_mj_ai_agent_run_timeline_itemSelected_3_listener($event) { i0.ɵɵrestoreView(_r3); const ctx_r0 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r0.selectTimelineItem($event)); })("navigateToEntity", function AIAgentRunFormComponentExtended_div_42_Template_mj_ai_agent_run_timeline_navigateToEntity_3_listener($event) { i0.ɵɵrestoreView(_r3); const ctx_r0 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r0.navigateToEntityRecord($event)); });
173
+ i0.ɵɵelementEnd()();
174
+ i0.ɵɵelementStart(4, "kendo-splitter-pane", 38);
175
+ i0.ɵɵtemplate(5, AIAgentRunFormComponentExtended_div_42_div_5_Template, 30, 10, "div", 39);
176
+ i0.ɵɵelementEnd()()();
177
+ } if (rf & 2) {
178
+ const ctx_r0 = i0.ɵɵnextContext();
179
+ i0.ɵɵadvance(2);
180
+ i0.ɵɵproperty("min", "400px");
181
+ i0.ɵɵadvance();
182
+ i0.ɵɵproperty("aiAgentRunId", ctx_r0.record.ID)("autoRefresh", ctx_r0.record.Status === "Running")("refreshInterval", 3000);
183
+ i0.ɵɵadvance();
184
+ i0.ɵɵproperty("size", "45%")("min", "300px")("collapsed", !ctx_r0.selectedTimelineItem);
185
+ i0.ɵɵadvance();
186
+ i0.ɵɵproperty("ngIf", ctx_r0.selectedTimelineItem);
187
+ } }
188
+ function AIAgentRunFormComponentExtended_div_43_ng_template_3_Template(rf, ctx) { if (rf & 1) {
189
+ i0.ɵɵelementStart(0, "div", 64)(1, "div", 65)(2, "label");
190
+ i0.ɵɵtext(3, "Run ID");
191
+ i0.ɵɵelementEnd();
192
+ i0.ɵɵelementStart(4, "span");
193
+ i0.ɵɵtext(5);
194
+ i0.ɵɵelementEnd()();
195
+ i0.ɵɵelementStart(6, "div", 65)(7, "label");
196
+ i0.ɵɵtext(8, "Agent ID");
197
+ i0.ɵɵelementEnd();
198
+ i0.ɵɵelementStart(9, "span");
199
+ i0.ɵɵtext(10);
200
+ i0.ɵɵelementEnd()();
201
+ i0.ɵɵelementStart(11, "div", 65)(12, "label");
202
+ i0.ɵɵtext(13, "Agent Name");
203
+ i0.ɵɵelementEnd();
204
+ i0.ɵɵelementStart(14, "span");
205
+ i0.ɵɵtext(15);
206
+ i0.ɵɵelementEnd()();
207
+ i0.ɵɵelementStart(16, "div", 65)(17, "label");
208
+ i0.ɵɵtext(18, "Parent Run ID");
209
+ i0.ɵɵelementEnd();
210
+ i0.ɵɵelementStart(19, "span");
211
+ i0.ɵɵtext(20);
212
+ i0.ɵɵelementEnd()();
213
+ i0.ɵɵelementStart(21, "div", 65)(22, "label");
214
+ i0.ɵɵtext(23, "Conversation ID");
215
+ i0.ɵɵelementEnd();
216
+ i0.ɵɵelementStart(24, "span");
217
+ i0.ɵɵtext(25);
218
+ i0.ɵɵelementEnd()();
219
+ i0.ɵɵelementStart(26, "div", 65)(27, "label");
220
+ i0.ɵɵtext(28, "User");
221
+ i0.ɵɵelementEnd();
222
+ i0.ɵɵelementStart(29, "span");
223
+ i0.ɵɵtext(30);
224
+ i0.ɵɵelementEnd()()();
225
+ } if (rf & 2) {
226
+ const ctx_r0 = i0.ɵɵnextContext(2);
227
+ i0.ɵɵadvance(5);
228
+ i0.ɵɵtextInterpolate(ctx_r0.record.ID);
229
+ i0.ɵɵadvance(5);
230
+ i0.ɵɵtextInterpolate(ctx_r0.record.AgentID);
231
+ i0.ɵɵadvance(5);
232
+ i0.ɵɵtextInterpolate((ctx_r0.agent == null ? null : ctx_r0.agent.Name) || "N/A");
233
+ i0.ɵɵadvance(5);
234
+ i0.ɵɵtextInterpolate(ctx_r0.record.ParentRunID || "None (Root)");
235
+ i0.ɵɵadvance(5);
236
+ i0.ɵɵtextInterpolate(ctx_r0.record.ConversationID || "N/A");
237
+ i0.ɵɵadvance(5);
238
+ i0.ɵɵtextInterpolate(ctx_r0.record.User || "N/A");
239
+ } }
240
+ function AIAgentRunFormComponentExtended_div_43_ng_template_5_div_11_Template(rf, ctx) { if (rf & 1) {
241
+ i0.ɵɵelementStart(0, "div", 67)(1, "label");
242
+ i0.ɵɵtext(2, "Error Message");
243
+ i0.ɵɵelementEnd();
244
+ i0.ɵɵelementStart(3, "div", 68);
245
+ i0.ɵɵtext(4);
246
+ i0.ɵɵelementEnd()();
247
+ } if (rf & 2) {
248
+ const ctx_r0 = i0.ɵɵnextContext(3);
249
+ i0.ɵɵadvance(4);
250
+ i0.ɵɵtextInterpolate(ctx_r0.record.ErrorMessage);
251
+ } }
252
+ function AIAgentRunFormComponentExtended_div_43_ng_template_5_Template(rf, ctx) { if (rf & 1) {
253
+ i0.ɵɵelementStart(0, "div", 64)(1, "div", 65)(2, "label");
254
+ i0.ɵɵtext(3, "Status");
255
+ i0.ɵɵelementEnd();
256
+ i0.ɵɵelementStart(4, "span", 13);
257
+ i0.ɵɵtext(5);
258
+ i0.ɵɵelementEnd()();
259
+ i0.ɵɵelementStart(6, "div", 65)(7, "label");
260
+ i0.ɵɵtext(8, "Success");
261
+ i0.ɵɵelementEnd();
262
+ i0.ɵɵelementStart(9, "span");
263
+ i0.ɵɵtext(10);
264
+ i0.ɵɵelementEnd()();
265
+ i0.ɵɵtemplate(11, AIAgentRunFormComponentExtended_div_43_ng_template_5_div_11_Template, 5, 1, "div", 66);
266
+ i0.ɵɵelementEnd();
267
+ } if (rf & 2) {
268
+ const ctx_r0 = i0.ɵɵnextContext(2);
269
+ i0.ɵɵadvance(4);
270
+ i0.ɵɵattribute("data-status", ctx_r0.record.Status);
271
+ i0.ɵɵadvance();
272
+ i0.ɵɵtextInterpolate1(" ", ctx_r0.record.Status, " ");
273
+ i0.ɵɵadvance(4);
274
+ i0.ɵɵclassProp("success", ctx_r0.record.Success)("error", ctx_r0.record.Success === false);
275
+ i0.ɵɵadvance();
276
+ i0.ɵɵtextInterpolate1(" ", ctx_r0.record.Success === null ? "In Progress" : ctx_r0.record.Success ? "Yes" : "No", " ");
277
+ i0.ɵɵadvance();
278
+ i0.ɵɵproperty("ngIf", ctx_r0.record.ErrorMessage);
279
+ } }
280
+ function AIAgentRunFormComponentExtended_div_43_ng_template_7_Template(rf, ctx) { if (rf & 1) {
281
+ i0.ɵɵelementStart(0, "div", 64)(1, "div", 65)(2, "label");
282
+ i0.ɵɵtext(3, "Total Tokens Used");
283
+ i0.ɵɵelementEnd();
284
+ i0.ɵɵelementStart(4, "span");
285
+ i0.ɵɵtext(5);
286
+ i0.ɵɵpipe(6, "number");
287
+ i0.ɵɵelementEnd()();
288
+ i0.ɵɵelementStart(7, "div", 65)(8, "label");
289
+ i0.ɵɵtext(9, "Prompt Tokens");
290
+ i0.ɵɵelementEnd();
291
+ i0.ɵɵelementStart(10, "span");
292
+ i0.ɵɵtext(11);
293
+ i0.ɵɵpipe(12, "number");
294
+ i0.ɵɵelementEnd()();
295
+ i0.ɵɵelementStart(13, "div", 65)(14, "label");
296
+ i0.ɵɵtext(15, "Completion Tokens");
297
+ i0.ɵɵelementEnd();
298
+ i0.ɵɵelementStart(16, "span");
299
+ i0.ɵɵtext(17);
300
+ i0.ɵɵpipe(18, "number");
301
+ i0.ɵɵelementEnd()();
302
+ i0.ɵɵelementStart(19, "div", 65)(20, "label");
303
+ i0.ɵɵtext(21, "Total Cost");
304
+ i0.ɵɵelementEnd();
305
+ i0.ɵɵelementStart(22, "span");
306
+ i0.ɵɵtext(23);
307
+ i0.ɵɵpipe(24, "number");
308
+ i0.ɵɵelementEnd()()();
309
+ } if (rf & 2) {
310
+ const ctx_r0 = i0.ɵɵnextContext(2);
311
+ i0.ɵɵadvance(5);
312
+ i0.ɵɵtextInterpolate(ctx_r0.record.TotalTokensUsed ? i0.ɵɵpipeBind2(6, 4, ctx_r0.record.TotalTokensUsed, "1.0-0") : "N/A");
313
+ i0.ɵɵadvance(6);
314
+ i0.ɵɵtextInterpolate(ctx_r0.record.TotalPromptTokensUsed ? i0.ɵɵpipeBind2(12, 7, ctx_r0.record.TotalPromptTokensUsed, "1.0-0") : "N/A");
315
+ i0.ɵɵadvance(6);
316
+ i0.ɵɵtextInterpolate(ctx_r0.record.TotalCompletionTokensUsed ? i0.ɵɵpipeBind2(18, 10, ctx_r0.record.TotalCompletionTokensUsed, "1.0-0") : "N/A");
317
+ i0.ɵɵadvance(6);
318
+ i0.ɵɵtextInterpolate(ctx_r0.record.TotalCost != null ? "$" + i0.ɵɵpipeBind2(24, 13, ctx_r0.record.TotalCost, "1.2-4") : "N/A");
319
+ } }
320
+ function AIAgentRunFormComponentExtended_div_43_kendo_panelbar_item_8_ng_template_1_Template(rf, ctx) { if (rf & 1) {
321
+ const _r6 = i0.ɵɵgetCurrentView();
322
+ i0.ɵɵelementStart(0, "div", 70)(1, "mj-code-editor", 71);
323
+ i0.ɵɵtwoWayListener("ngModelChange", function AIAgentRunFormComponentExtended_div_43_kendo_panelbar_item_8_ng_template_1_Template_mj_code_editor_ngModelChange_1_listener($event) { i0.ɵɵrestoreView(_r6); const ctx_r0 = i0.ɵɵnextContext(3); i0.ɵɵtwoWayBindingSet(ctx_r0.record.Result, $event) || (ctx_r0.record.Result = $event); return i0.ɵɵresetView($event); });
324
+ i0.ɵɵelementEnd()();
325
+ } if (rf & 2) {
326
+ const ctx_r0 = i0.ɵɵnextContext(3);
327
+ i0.ɵɵadvance();
328
+ i0.ɵɵtwoWayProperty("ngModel", ctx_r0.record.Result);
329
+ i0.ɵɵproperty("language", "json")("readonly", true);
330
+ } }
331
+ function AIAgentRunFormComponentExtended_div_43_kendo_panelbar_item_8_Template(rf, ctx) { if (rf & 1) {
332
+ i0.ɵɵelementStart(0, "kendo-panelbar-item", 69);
333
+ i0.ɵɵtemplate(1, AIAgentRunFormComponentExtended_div_43_kendo_panelbar_item_8_ng_template_1_Template, 2, 3, "ng-template", 59);
334
+ i0.ɵɵelementEnd();
335
+ } }
336
+ function AIAgentRunFormComponentExtended_div_43_kendo_panelbar_item_9_ng_template_1_Template(rf, ctx) { if (rf & 1) {
337
+ const _r7 = i0.ɵɵgetCurrentView();
338
+ i0.ɵɵelementStart(0, "div", 73)(1, "mj-code-editor", 74);
339
+ i0.ɵɵtwoWayListener("ngModelChange", function AIAgentRunFormComponentExtended_div_43_kendo_panelbar_item_9_ng_template_1_Template_mj_code_editor_ngModelChange_1_listener($event) { i0.ɵɵrestoreView(_r7); const ctx_r0 = i0.ɵɵnextContext(3); i0.ɵɵtwoWayBindingSet(ctx_r0.record.AgentState, $event) || (ctx_r0.record.AgentState = $event); return i0.ɵɵresetView($event); });
340
+ i0.ɵɵelementEnd()();
341
+ } if (rf & 2) {
342
+ const ctx_r0 = i0.ɵɵnextContext(3);
343
+ i0.ɵɵadvance();
344
+ i0.ɵɵtwoWayProperty("ngModel", ctx_r0.record.AgentState);
345
+ i0.ɵɵproperty("language", "json")("readonly", true);
346
+ } }
347
+ function AIAgentRunFormComponentExtended_div_43_kendo_panelbar_item_9_Template(rf, ctx) { if (rf & 1) {
348
+ i0.ɵɵelementStart(0, "kendo-panelbar-item", 72);
349
+ i0.ɵɵtemplate(1, AIAgentRunFormComponentExtended_div_43_kendo_panelbar_item_9_ng_template_1_Template, 2, 3, "ng-template", 59);
350
+ i0.ɵɵelementEnd();
351
+ } }
352
+ function AIAgentRunFormComponentExtended_div_43_Template(rf, ctx) { if (rf & 1) {
353
+ i0.ɵɵelementStart(0, "div", 57)(1, "kendo-panelbar")(2, "kendo-panelbar-item", 58);
354
+ i0.ɵɵtemplate(3, AIAgentRunFormComponentExtended_div_43_ng_template_3_Template, 31, 6, "ng-template", 59);
355
+ i0.ɵɵelementEnd();
356
+ i0.ɵɵelementStart(4, "kendo-panelbar-item", 60);
357
+ i0.ɵɵtemplate(5, AIAgentRunFormComponentExtended_div_43_ng_template_5_Template, 12, 8, "ng-template", 59);
358
+ i0.ɵɵelementEnd();
359
+ i0.ɵɵelementStart(6, "kendo-panelbar-item", 61);
360
+ i0.ɵɵtemplate(7, AIAgentRunFormComponentExtended_div_43_ng_template_7_Template, 25, 16, "ng-template", 59);
361
+ i0.ɵɵelementEnd();
362
+ i0.ɵɵtemplate(8, AIAgentRunFormComponentExtended_div_43_kendo_panelbar_item_8_Template, 2, 0, "kendo-panelbar-item", 62)(9, AIAgentRunFormComponentExtended_div_43_kendo_panelbar_item_9_Template, 2, 0, "kendo-panelbar-item", 63);
363
+ i0.ɵɵelementEnd()();
364
+ } if (rf & 2) {
365
+ const ctx_r0 = i0.ɵɵnextContext();
366
+ i0.ɵɵadvance(2);
367
+ i0.ɵɵproperty("expanded", true);
368
+ i0.ɵɵadvance(6);
369
+ i0.ɵɵproperty("ngIf", ctx_r0.record.Result);
370
+ i0.ɵɵadvance();
371
+ i0.ɵɵproperty("ngIf", ctx_r0.record.AgentState);
372
+ } }
373
+ let AIAgentRunFormComponentExtended = class AIAgentRunFormComponentExtended extends AIAgentRunFormComponent {
374
+ constructor(elementRef, sharedService, router, route, cdr) {
375
+ super(elementRef, sharedService, router, route, cdr);
376
+ this.router = router;
377
+ this.destroy$ = new Subject();
378
+ // UI state
379
+ this.activeTab = 'timeline';
380
+ this.selectedTimelineItem = null;
381
+ this.jsonPanelExpanded = false;
382
+ this.loading = false;
383
+ this.error = null;
384
+ this.selectedItemJsonString = '{}';
385
+ this.agent = null;
386
+ }
387
+ async ngOnInit() {
388
+ await super.ngOnInit();
389
+ if (this.record) {
390
+ await this.loadAgent();
391
+ }
392
+ }
393
+ ngOnDestroy() {
394
+ this.destroy$.next();
395
+ this.destroy$.complete();
396
+ }
397
+ async loadAgent() {
398
+ if (!this.record?.AgentID)
399
+ return;
400
+ try {
401
+ const md = new Metadata();
402
+ const agent = await md.GetEntityObject('AI Agents');
403
+ if (agent && await agent.Load(this.record.AgentID)) {
404
+ this.agent = agent;
405
+ }
406
+ }
407
+ catch (error) {
408
+ console.error('Error loading agent:', error);
409
+ }
410
+ }
411
+ calculateDuration(start, end) {
412
+ if (!end)
413
+ return 'Running...';
414
+ const ms = end.getTime() - start.getTime();
415
+ if (ms < 1000)
416
+ return `${ms}ms`;
417
+ if (ms < 60000)
418
+ return `${(ms / 1000).toFixed(1)}s`;
419
+ if (ms < 3600000)
420
+ return `${Math.floor(ms / 60000)}m ${Math.floor((ms % 60000) / 1000)}s`;
421
+ return `${Math.floor(ms / 3600000)}h ${Math.floor((ms % 3600000) / 60000)}m`;
422
+ }
423
+ selectTimelineItem(item) {
424
+ this.selectedTimelineItem = item;
425
+ this.selectedItemJsonString = this.getSelectedItemJson();
426
+ this.jsonPanelExpanded = true;
427
+ this.cdr.detectChanges();
428
+ }
429
+ closeJsonPanel() {
430
+ this.selectedTimelineItem = null;
431
+ this.selectedItemJsonString = '{}';
432
+ this.cdr.detectChanges();
433
+ }
434
+ navigateToSubRun(runId) {
435
+ SharedService.Instance.OpenEntityRecord("MJ: AI Agent Runs", CompositeKey.FromID(runId));
436
+ }
437
+ navigateToParentRun() {
438
+ if (this.record.ParentRunID) {
439
+ SharedService.Instance.OpenEntityRecord("MJ: AI Agent Runs", CompositeKey.FromID(this.record.ParentRunID));
440
+ }
441
+ }
442
+ navigateToActionLog(logId) {
443
+ SharedService.Instance.OpenEntityRecord("Action Execution Logs", CompositeKey.FromID(logId));
444
+ }
445
+ navigateToEntityRecord(event) {
446
+ SharedService.Instance.OpenEntityRecord(event.entityName, CompositeKey.FromID(event.recordId));
447
+ }
448
+ refreshData() {
449
+ // Timeline component will handle its own refresh
450
+ }
451
+ getSelectedItemJson() {
452
+ if (!this.selectedTimelineItem)
453
+ return '{}';
454
+ return JSON.stringify(this.selectedTimelineItem.data.GetAll(), null, 2);
455
+ }
456
+ getStatusIcon(status) {
457
+ const iconMap = {
458
+ 'Running': 'fa-circle-notch fa-spin',
459
+ 'Completed': 'fa-check-circle',
460
+ 'Failed': 'fa-times-circle',
461
+ 'Cancelled': 'fa-ban',
462
+ 'Paused': 'fa-pause-circle'
463
+ };
464
+ return iconMap[status] || 'fa-question-circle';
465
+ }
466
+ async copyToClipboard(text) {
467
+ try {
468
+ await navigator.clipboard.writeText(text);
469
+ // Could show a toast notification here
470
+ }
471
+ catch (err) {
472
+ console.error('Failed to copy to clipboard:', err);
473
+ }
474
+ }
475
+ 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)); }; }
476
+ static { this.ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: AIAgentRunFormComponentExtended, selectors: [["mj-ai-agent-run-form"]], features: [i0.ɵɵInheritDefinitionFeature], decls: 44, vars: 21, consts: [[1, "record-form-container", "ai-agent-run-form"], [1, "record-form"], [1, "header"], [1, "header-content"], [1, "header-left"], [1, "icon-wrapper"], [1, "fas", "fa-robot"], [1, "header-info"], [1, "meta-info"], ["class", "agent-name", 4, "ngIf"], [1, "run-id"], ["class", "parent-run", 4, "ngIf"], [1, "header-right"], [1, "status-badge"], [1, "fas", 3, "ngClass"], [1, "header-actions"], ["title", "Refresh", 1, "btn-icon", 3, "click"], [1, "fas", "fa-sync-alt"], [1, "header-stats"], [1, "stat"], [1, "label"], [1, "value"], ["class", "stat", 4, "ngIf"], [1, "tabs"], [1, "tab", 3, "click"], [1, "fas", "fa-stream"], [1, "fas", "fa-info-circle"], [1, "content-area"], ["class", "tab-content", "style", "height: 100%;", 4, "ngIf"], ["class", "tab-content", 4, "ngIf"], [1, "agent-name"], [1, "parent-run"], [1, "fas", "fa-level-up-alt"], [1, "parent-link", 3, "click"], [1, "tab-content", 2, "height", "100%"], ["orientation", "horizontal", 2, "height", "100%"], [3, "min"], [3, "itemSelected", "navigateToEntity", "aiAgentRunId", "autoRefresh", "refreshInterval"], [3, "size", "min", "collapsed"], ["class", "json-detail-pane", 4, "ngIf"], [1, "json-detail-pane"], [1, "json-pane-header"], ["title", "Close", 1, "btn-icon", 3, "click"], [1, "fas", "fa-times"], [1, "json-pane-content"], [1, "json-meta"], [1, "meta-item"], [1, "status-badge", "small"], ["class", "action-link", 4, "ngIf"], [1, "json-viewer"], [1, "json-toolbar"], ["title", "Copy JSON", 1, "btn-icon", 3, "click"], [1, "fas", "fa-copy"], [2, "height", "calc(100% - 160px)", "width", "100%", 3, "ngModelChange", "ngModel", "language", "readonly"], [1, "action-link"], [1, "btn-link", 3, "click"], [1, "fas", "fa-external-link-alt"], [1, "tab-content"], ["title", "General Information", 3, "expanded"], ["kendoPanelBarContent", ""], ["title", "Execution Status"], ["title", "Usage & Cost"], ["title", "Result", 4, "ngIf"], ["title", "Agent State", 4, "ngIf"], [1, "details-grid"], [1, "detail-item"], ["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, "ngModelChange", "ngModel", "language", "readonly"], ["title", "Agent State"], [1, "state-viewer"], [2, "height", "400px", "width", "100%", 3, "ngModelChange", "ngModel", "language", "readonly"]], template: function AIAgentRunFormComponentExtended_Template(rf, ctx) { if (rf & 1) {
477
+ i0.ɵɵelementStart(0, "div", 0)(1, "div", 1)(2, "div", 2)(3, "div", 3)(4, "div", 4)(5, "div", 5);
478
+ i0.ɵɵelement(6, "i", 6);
479
+ i0.ɵɵelementEnd();
480
+ i0.ɵɵelementStart(7, "div", 7)(8, "h2");
481
+ i0.ɵɵtext(9, "AI Agent Run");
482
+ i0.ɵɵelementEnd();
483
+ i0.ɵɵelementStart(10, "div", 8);
484
+ i0.ɵɵtemplate(11, AIAgentRunFormComponentExtended_span_11_Template, 2, 1, "span", 9);
485
+ i0.ɵɵelementStart(12, "span", 10);
486
+ i0.ɵɵtext(13);
487
+ i0.ɵɵelementEnd();
488
+ i0.ɵɵtemplate(14, AIAgentRunFormComponentExtended_span_14_Template, 4, 0, "span", 11);
489
+ i0.ɵɵelementEnd()()();
490
+ i0.ɵɵelementStart(15, "div", 12)(16, "div", 13);
491
+ i0.ɵɵelement(17, "i", 14);
492
+ i0.ɵɵtext(18);
493
+ i0.ɵɵelementEnd();
494
+ i0.ɵɵelementStart(19, "div", 15)(20, "button", 16);
495
+ i0.ɵɵlistener("click", function AIAgentRunFormComponentExtended_Template_button_click_20_listener() { return ctx.refreshData(); });
496
+ i0.ɵɵelement(21, "i", 17);
497
+ i0.ɵɵelementEnd()()()();
498
+ i0.ɵɵelementStart(22, "div", 18)(23, "div", 19)(24, "span", 20);
499
+ i0.ɵɵtext(25, "Started");
500
+ i0.ɵɵelementEnd();
501
+ i0.ɵɵelementStart(26, "span", 21);
502
+ i0.ɵɵtext(27);
503
+ i0.ɵɵpipe(28, "date");
504
+ i0.ɵɵelementEnd()();
505
+ i0.ɵɵtemplate(29, AIAgentRunFormComponentExtended_div_29_Template, 6, 4, "div", 22)(30, AIAgentRunFormComponentExtended_div_30_Template, 5, 1, "div", 22)(31, AIAgentRunFormComponentExtended_div_31_Template, 5, 5, "div", 22)(32, AIAgentRunFormComponentExtended_div_32_Template, 6, 4, "div", 22)(33, AIAgentRunFormComponentExtended_div_33_Template, 6, 4, "div", 22);
506
+ i0.ɵɵelementEnd()();
507
+ i0.ɵɵelementStart(34, "div", 23)(35, "button", 24);
508
+ i0.ɵɵlistener("click", function AIAgentRunFormComponentExtended_Template_button_click_35_listener() { return ctx.activeTab = "timeline"; });
509
+ i0.ɵɵelement(36, "i", 25);
510
+ i0.ɵɵtext(37, " Timeline ");
511
+ i0.ɵɵelementEnd();
512
+ i0.ɵɵelementStart(38, "button", 24);
513
+ i0.ɵɵlistener("click", function AIAgentRunFormComponentExtended_Template_button_click_38_listener() { return ctx.activeTab = "details"; });
514
+ i0.ɵɵelement(39, "i", 26);
515
+ i0.ɵɵtext(40, " Details ");
516
+ i0.ɵɵelementEnd()();
517
+ i0.ɵɵelementStart(41, "div", 27);
518
+ i0.ɵɵtemplate(42, AIAgentRunFormComponentExtended_div_42_Template, 6, 8, "div", 28)(43, AIAgentRunFormComponentExtended_div_43_Template, 10, 3, "div", 29);
519
+ i0.ɵɵelementEnd()()();
520
+ } if (rf & 2) {
521
+ i0.ɵɵadvance(11);
522
+ i0.ɵɵproperty("ngIf", ctx.agent);
523
+ i0.ɵɵadvance(2);
524
+ i0.ɵɵtextInterpolate(ctx.record.ID);
525
+ i0.ɵɵadvance();
526
+ i0.ɵɵproperty("ngIf", ctx.record.ParentRunID);
527
+ i0.ɵɵadvance(2);
528
+ i0.ɵɵattribute("data-status", ctx.record.Status);
529
+ i0.ɵɵadvance();
530
+ i0.ɵɵproperty("ngClass", ctx.getStatusIcon(ctx.record.Status || ""));
531
+ i0.ɵɵadvance();
532
+ i0.ɵɵtextInterpolate1(" ", ctx.record.Status, " ");
533
+ i0.ɵɵadvance(9);
534
+ i0.ɵɵtextInterpolate(i0.ɵɵpipeBind2(28, 18, ctx.record.StartedAt, "medium"));
535
+ i0.ɵɵadvance(2);
536
+ i0.ɵɵproperty("ngIf", ctx.record.CompletedAt);
537
+ i0.ɵɵadvance();
538
+ i0.ɵɵproperty("ngIf", ctx.record.CompletedAt);
539
+ i0.ɵɵadvance();
540
+ i0.ɵɵproperty("ngIf", ctx.record.Success !== null);
541
+ i0.ɵɵadvance();
542
+ i0.ɵɵproperty("ngIf", ctx.record.TotalTokensUsed);
543
+ i0.ɵɵadvance();
544
+ i0.ɵɵproperty("ngIf", ctx.record.TotalCost != null && ctx.record.TotalCost > 0);
545
+ i0.ɵɵadvance(2);
546
+ i0.ɵɵclassProp("active", ctx.activeTab === "timeline");
547
+ i0.ɵɵadvance(3);
548
+ i0.ɵɵclassProp("active", ctx.activeTab === "details");
549
+ i0.ɵɵadvance(4);
550
+ i0.ɵɵproperty("ngIf", ctx.activeTab === "timeline");
551
+ i0.ɵɵadvance();
552
+ i0.ɵɵproperty("ngIf", ctx.activeTab === "details");
553
+ } }, dependencies: [i3.NgClass, i3.NgIf, i4.NgControlStatus, i4.NgModel, i5.PanelBarComponent, i5.PanelBarItemComponent, i5.PanelBarContentDirective, i5.SplitterComponent, i5.SplitterPaneComponent, i6.CodeEditorComponent, i7.AIAgentRunTimelineComponent, i3.DecimalPipe, i3.DatePipe], styles: [".ai-agent-run-form[_ngcontent-%COMP%] {\n height: 100%;\n overflow: auto;\n}\n\n\n\n.header[_ngcontent-%COMP%] {\n background: linear-gradient(135deg, #ffffff 0%, #f8f9fa 100%);\n border-bottom: 1px solid #e0e6ed;\n padding: 20px;\n box-shadow: 0 2px 4px rgba(0,0,0,0.04);\n}\n\n.header-content[_ngcontent-%COMP%] {\n display: flex;\n justify-content: space-between;\n align-items: flex-start;\n margin-bottom: 16px;\n}\n\n.header-left[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 16px;\n}\n\n.icon-wrapper[_ngcontent-%COMP%] {\n width: 48px;\n height: 48px;\n background: linear-gradient(135deg, #2196f3, #1976d2);\n border-radius: 12px;\n display: flex;\n align-items: center;\n justify-content: center;\n color: white;\n font-size: 20px;\n}\n\n.header-info[_ngcontent-%COMP%] h2[_ngcontent-%COMP%] {\n margin: 0;\n font-size: 24px;\n font-weight: 600;\n color: #2c3e50;\n}\n\n.meta-info[_ngcontent-%COMP%] {\n display: flex;\n gap: 12px;\n margin-top: 4px;\n font-size: 14px;\n color: #6c757d;\n}\n\n.parent-run[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 6px;\n}\n\n.parent-link[_ngcontent-%COMP%] {\n color: #ff6358;\n text-decoration: none;\n cursor: pointer;\n transition: color 0.2s;\n}\n\n.parent-link[_ngcontent-%COMP%]:hover {\n color: #ff4444;\n text-decoration: underline;\n}\n\n.agent-name[_ngcontent-%COMP%] {\n font-weight: 500;\n color: #495057;\n}\n\n.run-id[_ngcontent-%COMP%] {\n font-family: monospace;\n font-size: 12px;\n opacity: 0.7;\n}\n\n.header-right[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 16px;\n}\n\n.status-badge[_ngcontent-%COMP%] {\n padding: 6px 16px;\n border-radius: 20px;\n font-size: 13px;\n font-weight: 600;\n text-transform: uppercase;\n letter-spacing: 0.5px;\n display: inline-flex;\n align-items: center;\n gap: 6px;\n}\n\n.status-badge[data-status=\"Running\"][_ngcontent-%COMP%] {\n background: #e3f2fd;\n color: #1976d2;\n}\n\n.status-badge[data-status=\"Completed\"][_ngcontent-%COMP%] {\n background: #d4edda;\n color: #155724;\n}\n\n.status-badge[data-status=\"Failed\"][_ngcontent-%COMP%] {\n background: #f8d7da;\n color: #721c24;\n}\n\n.status-badge[data-status=\"Cancelled\"][_ngcontent-%COMP%] {\n background: #fff3cd;\n color: #856404;\n}\n\n.status-badge[data-status=\"Paused\"][_ngcontent-%COMP%] {\n background: #e2e3e5;\n color: #383d41;\n}\n\n.status-badge.small[_ngcontent-%COMP%] {\n padding: 4px 12px;\n font-size: 11px;\n}\n\n.header-actions[_ngcontent-%COMP%] {\n display: flex;\n gap: 8px;\n}\n\n.btn-icon[_ngcontent-%COMP%] {\n width: 36px;\n height: 36px;\n border: 1px solid #dee2e6;\n background: white;\n border-radius: 8px;\n display: flex;\n align-items: center;\n justify-content: center;\n cursor: pointer;\n transition: all 0.2s ease;\n color: #6c757d;\n}\n\n.btn-icon[_ngcontent-%COMP%]:hover {\n background: #f8f9fa;\n border-color: #adb5bd;\n color: #495057;\n}\n\n.header-stats[_ngcontent-%COMP%] {\n display: flex;\n gap: 24px;\n padding-top: 12px;\n border-top: 1px solid #e9ecef;\n}\n\n.stat[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n gap: 4px;\n}\n\n.stat[_ngcontent-%COMP%] .label[_ngcontent-%COMP%] {\n font-size: 12px;\n color: #6c757d;\n text-transform: uppercase;\n letter-spacing: 0.5px;\n}\n\n.stat[_ngcontent-%COMP%] .value[_ngcontent-%COMP%] {\n font-size: 14px;\n font-weight: 500;\n color: #495057;\n}\n\n.stat[_ngcontent-%COMP%] .value.success[_ngcontent-%COMP%] {\n color: #28a745;\n}\n\n.stat[_ngcontent-%COMP%] .value.error[_ngcontent-%COMP%] {\n color: #dc3545;\n}\n\n\n\n.tabs[_ngcontent-%COMP%] {\n display: flex;\n border-bottom: 1px solid #dee2e6;\n background: #f8f9fa;\n}\n\n.tab[_ngcontent-%COMP%] {\n padding: 12px 24px;\n border: none;\n background: transparent;\n cursor: pointer;\n font-size: 14px;\n font-weight: 500;\n color: #6c757d;\n display: flex;\n align-items: center;\n gap: 8px;\n transition: all 0.2s ease;\n border-bottom: 3px solid transparent;\n}\n\n.tab[_ngcontent-%COMP%]:hover {\n color: #495057;\n background: rgba(0,0,0,0.02);\n}\n\n.tab.active[_ngcontent-%COMP%] {\n color: #2196f3;\n border-bottom-color: #2196f3;\n background: white;\n}\n\n\n\n.content-area[_ngcontent-%COMP%] {\n position: relative;\n height: calc(100vh - 280px);\n overflow: auto;\n background: white;\n}\n\n.tab-content[_ngcontent-%COMP%] {\n height: 100%;\n overflow: auto;\n}\n\n\n\n.tab-content[ng-reflect-ng-if=\"true\"][_ngcontent-%COMP%] > kendo-panelbar[_ngcontent-%COMP%] {\n height: 100%;\n overflow-y: auto;\n}\n\n\n\n.json-detail-pane[_ngcontent-%COMP%] {\n height: 100%;\n display: flex;\n flex-direction: column;\n background: #f8f9fa;\n border-left: 1px solid #e0e6ed;\n}\n\n.json-pane-header[_ngcontent-%COMP%] {\n display: flex;\n justify-content: space-between;\n align-items: center;\n padding: 16px 20px;\n background: white;\n border-bottom: 1px solid #e0e6ed;\n box-shadow: 0 2px 4px rgba(0,0,0,0.04);\n}\n\n.json-pane-header[_ngcontent-%COMP%] h3[_ngcontent-%COMP%] {\n margin: 0;\n font-size: 16px;\n font-weight: 600;\n color: #2c3e50;\n display: flex;\n align-items: center;\n gap: 8px;\n}\n\n.json-pane-header[_ngcontent-%COMP%] h3[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n color: #6b7280;\n font-size: 14px;\n}\n\n.json-pane-content[_ngcontent-%COMP%] {\n flex: 1;\n display: flex;\n flex-direction: column;\n overflow: auto;\n padding: 16px;\n}\n\n.json-meta[_ngcontent-%COMP%] {\n display: flex;\n gap: 20px;\n margin-bottom: 16px;\n flex-wrap: wrap;\n}\n\n.json-meta[_ngcontent-%COMP%] .meta-item[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n gap: 4px;\n}\n\n.json-meta[_ngcontent-%COMP%] .meta-item[_ngcontent-%COMP%] label[_ngcontent-%COMP%] {\n font-size: 11px;\n text-transform: uppercase;\n color: #6b7280;\n font-weight: 600;\n letter-spacing: 0.5px;\n}\n\n.json-meta[_ngcontent-%COMP%] .meta-item[_ngcontent-%COMP%] span[_ngcontent-%COMP%] {\n font-size: 14px;\n color: #2c3e50;\n font-weight: 500;\n}\n\n.action-link[_ngcontent-%COMP%] {\n margin-bottom: 12px;\n}\n\n.action-link[_ngcontent-%COMP%] .btn-link[_ngcontent-%COMP%] {\n background: none;\n border: none;\n color: #2196f3;\n font-size: 14px;\n cursor: pointer;\n padding: 6px 12px;\n border-radius: 4px;\n transition: all 0.2s;\n display: inline-flex;\n align-items: center;\n gap: 6px;\n}\n\n.action-link[_ngcontent-%COMP%] .btn-link[_ngcontent-%COMP%]:hover {\n background: rgba(33, 150, 243, 0.08);\n color: #1976d2;\n}\n\n.json-viewer[_ngcontent-%COMP%] {\n flex: 1;\n display: flex;\n flex-direction: column;\n background: white;\n border-radius: 8px;\n border: 1px solid #e0e6ed;\n overflow: auto;\n}\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.json-viewer[_ngcontent-%COMP%] {\n flex: 1;\n padding: 20px;\n display: flex;\n flex-direction: column;\n gap: 10px;\n min-height: 0;\n overflow: auto;\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}"] }); }
554
+ };
555
+ AIAgentRunFormComponentExtended = __decorate([
556
+ RegisterClass(BaseFormComponent, 'MJ: AI Agent Runs')
557
+ ], AIAgentRunFormComponentExtended);
558
+ export { AIAgentRunFormComponentExtended };
559
+ (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(AIAgentRunFormComponentExtended, [{
560
+ type: Component,
561
+ 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\">\n <span class=\"label\">Result</span>\n <span class=\"value\" [class.success]=\"record.Success\" [class.error]=\"!record.Success\">\n {{ record.Success ? 'Success' : 'Failed' }}\n </span>\n </div>\n <div class=\"stat\" *ngIf=\"record.TotalTokensUsed\">\n <span class=\"label\">Tokens</span>\n <span class=\"value\">{{ record.TotalTokensUsed | number:'1.0-0' }}</span>\n </div>\n <div class=\"stat\" *ngIf=\"record.TotalCost != null && record.TotalCost > 0\">\n <span class=\"label\">Cost</span>\n <span class=\"value\">${{ record.TotalCost | number:'1.2-4' }}</span>\n </div>\n </div>\n </div>\n\n <!-- Tabs -->\n <div class=\"tabs\">\n <button class=\"tab\" [class.active]=\"activeTab === 'timeline'\" (click)=\"activeTab = 'timeline'\">\n <i class=\"fas fa-stream\"></i> Timeline\n </button>\n <button class=\"tab\" [class.active]=\"activeTab === 'details'\" (click)=\"activeTab = 'details'\">\n <i class=\"fas fa-info-circle\"></i> Details\n </button>\n </div>\n\n <!-- Content -->\n <div class=\"content-area\">\n <!-- Timeline Tab -->\n <div class=\"tab-content\" *ngIf=\"activeTab === 'timeline'\" style=\"height: 100%;\">\n <kendo-splitter style=\"height: 100%;\" orientation=\"horizontal\">\n <!-- Timeline Pane -->\n <kendo-splitter-pane [min]=\"'400px'\">\n <mj-ai-agent-run-timeline\n [aiAgentRunId]=\"record.ID\"\n [autoRefresh]=\"record.Status === 'Running'\"\n [refreshInterval]=\"3000\"\n (itemSelected)=\"selectTimelineItem($event)\"\n (navigateToEntity)=\"navigateToEntityRecord($event)\">\n </mj-ai-agent-run-timeline>\n </kendo-splitter-pane>\n \n <!-- JSON Detail Pane -->\n <kendo-splitter-pane [size]=\"'45%'\" [min]=\"'300px'\" [collapsed]=\"!selectedTimelineItem\">\n <div class=\"json-detail-pane\" *ngIf=\"selectedTimelineItem\">\n <div class=\"json-pane-header\">\n <h3>\n <i class=\"fas\" [ngClass]=\"selectedTimelineItem.icon\"></i>\n {{ selectedTimelineItem.title }}\n </h3>\n <button class=\"btn-icon\" (click)=\"closeJsonPanel()\" title=\"Close\">\n <i class=\"fas fa-times\"></i>\n </button>\n </div>\n <div class=\"json-pane-content\">\n <div class=\"json-meta\">\n <div class=\"meta-item\">\n <label>Type</label>\n <span>{{ selectedTimelineItem.type }}</span>\n </div>\n <div class=\"meta-item\">\n <label>Status</label>\n <span class=\"status-badge small\" [attr.data-status]=\"selectedTimelineItem.status\">\n {{ selectedTimelineItem.status }}\n </span>\n </div>\n <div class=\"meta-item\">\n <label>Duration</label>\n <span>{{ selectedTimelineItem.duration || 'N/A' }}</span>\n </div>\n </div>\n \n <!-- Action-specific link -->\n <div class=\"action-link\" *ngIf=\"selectedTimelineItem.type === 'action' && selectedTimelineItem.data?.ID\">\n <button class=\"btn-link\" (click)=\"navigateToActionLog(selectedTimelineItem.data.ID)\">\n <i class=\"fas fa-external-link-alt\"></i> View Action Execution Log\n </button>\n </div>\n \n <div class=\"json-viewer\">\n <div class=\"json-toolbar\">\n <button class=\"btn-icon\" title=\"Copy JSON\" (click)=\"copyToClipboard(getSelectedItemJson())\">\n <i class=\"fas fa-copy\"></i>\n </button>\n </div>\n <mj-code-editor\n [(ngModel)]=\"selectedItemJsonString\"\n [language]=\"'json'\"\n [readonly]=\"true\"\n style=\"height: calc(100% - 160px); width: 100%;\">\n </mj-code-editor>\n </div>\n </div>\n </div>\n </kendo-splitter-pane>\n </kendo-splitter>\n </div>\n\n <!-- Details Tab -->\n <div class=\"tab-content\" *ngIf=\"activeTab === 'details'\">\n <kendo-panelbar>\n <kendo-panelbar-item title=\"General Information\" [expanded]=\"true\">\n <ng-template kendoPanelBarContent>\n <div class=\"details-grid\">\n <div class=\"detail-item\">\n <label>Run ID</label>\n <span>{{ record.ID }}</span>\n </div>\n <div class=\"detail-item\">\n <label>Agent ID</label>\n <span>{{ record.AgentID }}</span>\n </div>\n <div class=\"detail-item\">\n <label>Agent Name</label>\n <span>{{ agent?.Name || 'N/A' }}</span>\n </div>\n <div class=\"detail-item\">\n <label>Parent Run ID</label>\n <span>{{ record.ParentRunID || 'None (Root)' }}</span>\n </div>\n <div class=\"detail-item\">\n <label>Conversation ID</label>\n <span>{{ record.ConversationID || 'N/A' }}</span>\n </div>\n <div class=\"detail-item\">\n <label>User</label>\n <span>{{ record.User || 'N/A' }}</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>\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)]=\"record.Result\"\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=\"Agent State\" *ngIf=\"record.AgentState\">\n <ng-template kendoPanelBarContent>\n <div class=\"state-viewer\">\n <mj-code-editor\n [(ngModel)]=\"record.AgentState\"\n [language]=\"'json'\"\n [readonly]=\"true\"\n style=\"height: 400px; width: 100%;\">\n </mj-code-editor>\n </div>\n </ng-template>\n </kendo-panelbar-item>\n </kendo-panelbar>\n </div>\n </div>\n </div>\n</div>", styles: [".ai-agent-run-form {\n height: 100%;\n overflow: auto;\n}\n\n/* Header Styles */\n.header {\n background: linear-gradient(135deg, #ffffff 0%, #f8f9fa 100%);\n border-bottom: 1px solid #e0e6ed;\n padding: 20px;\n box-shadow: 0 2px 4px rgba(0,0,0,0.04);\n}\n\n.header-content {\n display: flex;\n justify-content: space-between;\n align-items: flex-start;\n margin-bottom: 16px;\n}\n\n.header-left {\n display: flex;\n align-items: center;\n gap: 16px;\n}\n\n.icon-wrapper {\n width: 48px;\n height: 48px;\n background: linear-gradient(135deg, #2196f3, #1976d2);\n border-radius: 12px;\n display: flex;\n align-items: center;\n justify-content: center;\n color: white;\n font-size: 20px;\n}\n\n.header-info h2 {\n margin: 0;\n font-size: 24px;\n font-weight: 600;\n color: #2c3e50;\n}\n\n.meta-info {\n display: flex;\n gap: 12px;\n margin-top: 4px;\n font-size: 14px;\n color: #6c757d;\n}\n\n.parent-run {\n display: flex;\n align-items: center;\n gap: 6px;\n}\n\n.parent-link {\n color: #ff6358;\n text-decoration: none;\n cursor: pointer;\n transition: color 0.2s;\n}\n\n.parent-link:hover {\n color: #ff4444;\n text-decoration: underline;\n}\n\n.agent-name {\n font-weight: 500;\n color: #495057;\n}\n\n.run-id {\n font-family: monospace;\n font-size: 12px;\n opacity: 0.7;\n}\n\n.header-right {\n display: flex;\n align-items: center;\n gap: 16px;\n}\n\n.status-badge {\n padding: 6px 16px;\n border-radius: 20px;\n font-size: 13px;\n font-weight: 600;\n text-transform: uppercase;\n letter-spacing: 0.5px;\n display: inline-flex;\n align-items: center;\n gap: 6px;\n}\n\n.status-badge[data-status=\"Running\"] {\n background: #e3f2fd;\n color: #1976d2;\n}\n\n.status-badge[data-status=\"Completed\"] {\n background: #d4edda;\n color: #155724;\n}\n\n.status-badge[data-status=\"Failed\"] {\n background: #f8d7da;\n color: #721c24;\n}\n\n.status-badge[data-status=\"Cancelled\"] {\n background: #fff3cd;\n color: #856404;\n}\n\n.status-badge[data-status=\"Paused\"] {\n background: #e2e3e5;\n color: #383d41;\n}\n\n.status-badge.small {\n padding: 4px 12px;\n font-size: 11px;\n}\n\n.header-actions {\n display: flex;\n gap: 8px;\n}\n\n.btn-icon {\n width: 36px;\n height: 36px;\n border: 1px solid #dee2e6;\n background: white;\n border-radius: 8px;\n display: flex;\n align-items: center;\n justify-content: center;\n cursor: pointer;\n transition: all 0.2s ease;\n color: #6c757d;\n}\n\n.btn-icon:hover {\n background: #f8f9fa;\n border-color: #adb5bd;\n color: #495057;\n}\n\n.header-stats {\n display: flex;\n gap: 24px;\n padding-top: 12px;\n border-top: 1px solid #e9ecef;\n}\n\n.stat {\n display: flex;\n flex-direction: column;\n gap: 4px;\n}\n\n.stat .label {\n font-size: 12px;\n color: #6c757d;\n text-transform: uppercase;\n letter-spacing: 0.5px;\n}\n\n.stat .value {\n font-size: 14px;\n font-weight: 500;\n color: #495057;\n}\n\n.stat .value.success {\n color: #28a745;\n}\n\n.stat .value.error {\n color: #dc3545;\n}\n\n/* Tabs */\n.tabs {\n display: flex;\n border-bottom: 1px solid #dee2e6;\n background: #f8f9fa;\n}\n\n.tab {\n padding: 12px 24px;\n border: none;\n background: transparent;\n cursor: pointer;\n font-size: 14px;\n font-weight: 500;\n color: #6c757d;\n display: flex;\n align-items: center;\n gap: 8px;\n transition: all 0.2s ease;\n border-bottom: 3px solid transparent;\n}\n\n.tab:hover {\n color: #495057;\n background: rgba(0,0,0,0.02);\n}\n\n.tab.active {\n color: #2196f3;\n border-bottom-color: #2196f3;\n background: white;\n}\n\n/* Content Area */\n.content-area {\n position: relative;\n height: calc(100vh - 280px);\n overflow: auto;\n background: white;\n}\n\n.tab-content {\n height: 100%;\n overflow: auto;\n}\n\n/* Details tab specific */\n.tab-content[ng-reflect-ng-if=\"true\"] > kendo-panelbar {\n height: 100%;\n overflow-y: auto;\n}\n\n/* JSON Detail Pane */\n.json-detail-pane {\n height: 100%;\n display: flex;\n flex-direction: column;\n background: #f8f9fa;\n border-left: 1px solid #e0e6ed;\n}\n\n.json-pane-header {\n display: flex;\n justify-content: space-between;\n align-items: center;\n padding: 16px 20px;\n background: white;\n border-bottom: 1px solid #e0e6ed;\n box-shadow: 0 2px 4px rgba(0,0,0,0.04);\n}\n\n.json-pane-header h3 {\n margin: 0;\n font-size: 16px;\n font-weight: 600;\n color: #2c3e50;\n display: flex;\n align-items: center;\n gap: 8px;\n}\n\n.json-pane-header h3 i {\n color: #6b7280;\n font-size: 14px;\n}\n\n.json-pane-content {\n flex: 1;\n display: flex;\n flex-direction: column;\n overflow: auto;\n padding: 16px;\n}\n\n.json-meta {\n display: flex;\n gap: 20px;\n margin-bottom: 16px;\n flex-wrap: wrap;\n}\n\n.json-meta .meta-item {\n display: flex;\n flex-direction: column;\n gap: 4px;\n}\n\n.json-meta .meta-item label {\n font-size: 11px;\n text-transform: uppercase;\n color: #6b7280;\n font-weight: 600;\n letter-spacing: 0.5px;\n}\n\n.json-meta .meta-item span {\n font-size: 14px;\n color: #2c3e50;\n font-weight: 500;\n}\n\n.action-link {\n margin-bottom: 12px;\n}\n\n.action-link .btn-link {\n background: none;\n border: none;\n color: #2196f3;\n font-size: 14px;\n cursor: pointer;\n padding: 6px 12px;\n border-radius: 4px;\n transition: all 0.2s;\n display: inline-flex;\n align-items: center;\n gap: 6px;\n}\n\n.action-link .btn-link:hover {\n background: rgba(33, 150, 243, 0.08);\n color: #1976d2;\n}\n\n.json-viewer {\n flex: 1;\n display: flex;\n flex-direction: column;\n background: white;\n border-radius: 8px;\n border: 1px solid #e0e6ed;\n overflow: auto;\n}\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.json-viewer {\n flex: 1;\n padding: 20px;\n display: flex;\n flex-direction: column;\n gap: 10px;\n min-height: 0;\n overflow: auto;\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}"] }]
562
+ }], () => [{ type: i0.ElementRef }, { type: i1.SharedService }, { type: i2.Router }, { type: i2.ActivatedRoute }, { type: i0.ChangeDetectorRef }], null); })();
563
+ (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassDebugInfo(AIAgentRunFormComponentExtended, { className: "AIAgentRunFormComponentExtended", filePath: "src/lib/custom/ai-agent-run/ai-agent-run.component.ts", lineNumber: 19 }); })();
564
+ // Loader function for AIAgentRunFormComponent
565
+ export function LoadAIAgentRunFormComponent() {
566
+ // This function is called to ensure the form is loaded
567
+ }
568
+ //# sourceMappingURL=ai-agent-run.component.js.map