@memberjunction/ng-core-entity-forms 2.53.0 → 2.54.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.
- package/dist/lib/custom/AIAgents/ai-agent-form.component.d.ts +20 -0
- package/dist/lib/custom/AIAgents/ai-agent-form.component.d.ts.map +1 -1
- package/dist/lib/custom/AIAgents/ai-agent-form.component.js +188 -40
- package/dist/lib/custom/AIAgents/ai-agent-form.component.js.map +1 -1
- package/dist/lib/custom/AIPromptRuns/ai-prompt-run-form.component.js +5 -7
- package/dist/lib/custom/AIPromptRuns/ai-prompt-run-form.component.js.map +1 -1
- package/dist/lib/custom/Actions/action-execution-log-form.component.d.ts +1 -0
- package/dist/lib/custom/Actions/action-execution-log-form.component.d.ts.map +1 -1
- package/dist/lib/custom/Actions/action-execution-log-form.component.js +212 -293
- package/dist/lib/custom/Actions/action-execution-log-form.component.js.map +1 -1
- package/dist/lib/custom/Actions/action-form.component.js +6 -8
- package/dist/lib/custom/Actions/action-form.component.js.map +1 -1
- package/dist/lib/custom/ai-agent-run/ai-agent-run-step-node.component.d.ts +25 -0
- package/dist/lib/custom/ai-agent-run/ai-agent-run-step-node.component.d.ts.map +1 -0
- package/dist/lib/custom/ai-agent-run/ai-agent-run-step-node.component.js +261 -0
- package/dist/lib/custom/ai-agent-run/ai-agent-run-step-node.component.js.map +1 -0
- package/dist/lib/custom/ai-agent-run/ai-agent-run-timeline.component.d.ts +73 -0
- package/dist/lib/custom/ai-agent-run/ai-agent-run-timeline.component.d.ts.map +1 -0
- package/dist/lib/custom/ai-agent-run/ai-agent-run-timeline.component.js +510 -0
- package/dist/lib/custom/ai-agent-run/ai-agent-run-timeline.component.js.map +1 -0
- package/dist/lib/custom/ai-agent-run/ai-agent-run.component.d.ts +40 -0
- package/dist/lib/custom/ai-agent-run/ai-agent-run.component.d.ts.map +1 -0
- package/dist/lib/custom/ai-agent-run/ai-agent-run.component.js +490 -0
- package/dist/lib/custom/ai-agent-run/ai-agent-run.component.js.map +1 -0
- package/dist/lib/custom/ai-test-harness/agent-execution-monitor.component.d.ts +31 -2
- package/dist/lib/custom/ai-test-harness/agent-execution-monitor.component.d.ts.map +1 -1
- package/dist/lib/custom/ai-test-harness/agent-execution-monitor.component.js +167 -65
- package/dist/lib/custom/ai-test-harness/agent-execution-monitor.component.js.map +1 -1
- package/dist/lib/custom/ai-test-harness/ai-test-harness.component.d.ts +35 -2
- package/dist/lib/custom/ai-test-harness/ai-test-harness.component.d.ts.map +1 -1
- package/dist/lib/custom/ai-test-harness/ai-test-harness.component.js +423 -247
- package/dist/lib/custom/ai-test-harness/ai-test-harness.component.js.map +1 -1
- package/dist/lib/custom/custom-forms.module.d.ts +25 -21
- package/dist/lib/custom/custom-forms.module.d.ts.map +1 -1
- package/dist/lib/custom/custom-forms.module.js +25 -2
- package/dist/lib/custom/custom-forms.module.js.map +1 -1
- package/dist/lib/generated/Entities/AIAgent/aiagent.form.component.js +10 -10
- package/dist/lib/generated/Entities/AIAgent/aiagent.form.component.js.map +1 -1
- package/dist/lib/generated/Entities/AIAgentRun/aiagentrun.form.component.js +7 -9
- package/dist/lib/generated/Entities/AIAgentRun/aiagentrun.form.component.js.map +1 -1
- package/dist/lib/generated/Entities/AIAgentRunStep/aiagentrunstep.form.component.js +3 -5
- package/dist/lib/generated/Entities/AIAgentRunStep/aiagentrunstep.form.component.js.map +1 -1
- package/dist/lib/generated/Entities/AIAgentRunStep/sections/details.component.d.ts.map +1 -1
- package/dist/lib/generated/Entities/AIAgentRunStep/sections/details.component.js +13 -4
- package/dist/lib/generated/Entities/AIAgentRunStep/sections/details.component.js.map +1 -1
- package/dist/lib/generated/Entities/AIAgentType/aiagenttype.form.component.js +5 -7
- package/dist/lib/generated/Entities/AIAgentType/aiagenttype.form.component.js.map +1 -1
- package/dist/lib/generated/Entities/AIModel/aimodel.form.component.js +9 -9
- package/dist/lib/generated/Entities/AIModel/aimodel.form.component.js.map +1 -1
- package/dist/lib/generated/Entities/AIModelCost/aimodelcost.form.component.js +3 -5
- package/dist/lib/generated/Entities/AIModelCost/aimodelcost.form.component.js.map +1 -1
- package/dist/lib/generated/Entities/AIModelPriceType/aimodelpricetype.form.component.js +5 -7
- package/dist/lib/generated/Entities/AIModelPriceType/aimodelpricetype.form.component.js.map +1 -1
- package/dist/lib/generated/Entities/AIModelPriceUnitType/aimodelpriceunittype.form.component.js +5 -7
- package/dist/lib/generated/Entities/AIModelPriceUnitType/aimodelpriceunittype.form.component.js.map +1 -1
- package/dist/lib/generated/Entities/AIPrompt/aiprompt.form.component.js +13 -13
- package/dist/lib/generated/Entities/AIPrompt/aiprompt.form.component.js.map +1 -1
- package/dist/lib/generated/Entities/AIVendor/aivendor.form.component.js +9 -9
- package/dist/lib/generated/Entities/AIVendor/aivendor.form.component.js.map +1 -1
- package/dist/lib/generated/Entities/Action/action.form.component.js +5 -5
- package/dist/lib/generated/Entities/Action/action.form.component.js.map +1 -1
- package/dist/lib/generated/Entities/ActionAuthorization/actionauthorization.form.component.js +1 -1
- package/dist/lib/generated/Entities/ActionAuthorization/actionauthorization.form.component.js.map +1 -1
- package/dist/lib/generated/Entities/ActionContext/actioncontext.form.component.js +1 -1
- package/dist/lib/generated/Entities/ActionContext/actioncontext.form.component.js.map +1 -1
- package/dist/lib/generated/Entities/Conversation/conversation.form.component.js +5 -5
- package/dist/lib/generated/Entities/Conversation/conversation.form.component.js.map +1 -1
- package/dist/lib/generated/Entities/TemplateContent/templatecontent.form.component.js +4 -4
- package/dist/lib/generated/Entities/TemplateContent/templatecontent.form.component.js.map +1 -1
- package/dist/lib/generated/Entities/User/user.form.component.js +5 -5
- package/dist/lib/generated/Entities/User/user.form.component.js.map +1 -1
- package/package.json +12 -12
|
@@ -0,0 +1,490 @@
|
|
|
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 * as i0 from "@angular/core";
|
|
14
|
+
import * as i1 from "@memberjunction/ng-shared";
|
|
15
|
+
import * as i2 from "@angular/router";
|
|
16
|
+
import * as i3 from "@angular/common";
|
|
17
|
+
import * as i4 from "@angular/forms";
|
|
18
|
+
import * as i5 from "@progress/kendo-angular-layout";
|
|
19
|
+
import * as i6 from "@memberjunction/ng-code-editor";
|
|
20
|
+
import * as i7 from "./ai-agent-run-timeline.component";
|
|
21
|
+
function AIAgentRunFormComponent_span_11_Template(rf, ctx) { if (rf & 1) {
|
|
22
|
+
i0.ɵɵelementStart(0, "span", 30);
|
|
23
|
+
i0.ɵɵtext(1);
|
|
24
|
+
i0.ɵɵelementEnd();
|
|
25
|
+
} if (rf & 2) {
|
|
26
|
+
const ctx_r0 = i0.ɵɵnextContext();
|
|
27
|
+
i0.ɵɵadvance();
|
|
28
|
+
i0.ɵɵtextInterpolate(ctx_r0.agent.Name);
|
|
29
|
+
} }
|
|
30
|
+
function AIAgentRunFormComponent_span_14_Template(rf, ctx) { if (rf & 1) {
|
|
31
|
+
const _r2 = i0.ɵɵgetCurrentView();
|
|
32
|
+
i0.ɵɵelementStart(0, "span", 31);
|
|
33
|
+
i0.ɵɵelement(1, "i", 32);
|
|
34
|
+
i0.ɵɵelementStart(2, "a", 33);
|
|
35
|
+
i0.ɵɵlistener("click", function AIAgentRunFormComponent_span_14_Template_a_click_2_listener() { i0.ɵɵrestoreView(_r2); const ctx_r0 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r0.navigateToParentRun()); });
|
|
36
|
+
i0.ɵɵtext(3, "Parent Run");
|
|
37
|
+
i0.ɵɵelementEnd()();
|
|
38
|
+
} }
|
|
39
|
+
function AIAgentRunFormComponent_div_29_Template(rf, ctx) { if (rf & 1) {
|
|
40
|
+
i0.ɵɵelementStart(0, "div", 19)(1, "span", 20);
|
|
41
|
+
i0.ɵɵtext(2, "Completed");
|
|
42
|
+
i0.ɵɵelementEnd();
|
|
43
|
+
i0.ɵɵelementStart(3, "span", 21);
|
|
44
|
+
i0.ɵɵtext(4);
|
|
45
|
+
i0.ɵɵpipe(5, "date");
|
|
46
|
+
i0.ɵɵelementEnd()();
|
|
47
|
+
} if (rf & 2) {
|
|
48
|
+
const ctx_r0 = i0.ɵɵnextContext();
|
|
49
|
+
i0.ɵɵadvance(4);
|
|
50
|
+
i0.ɵɵtextInterpolate(i0.ɵɵpipeBind2(5, 1, ctx_r0.record.CompletedAt, "medium"));
|
|
51
|
+
} }
|
|
52
|
+
function AIAgentRunFormComponent_div_30_Template(rf, ctx) { if (rf & 1) {
|
|
53
|
+
i0.ɵɵelementStart(0, "div", 19)(1, "span", 20);
|
|
54
|
+
i0.ɵɵtext(2, "Duration");
|
|
55
|
+
i0.ɵɵelementEnd();
|
|
56
|
+
i0.ɵɵelementStart(3, "span", 21);
|
|
57
|
+
i0.ɵɵtext(4);
|
|
58
|
+
i0.ɵɵelementEnd()();
|
|
59
|
+
} if (rf & 2) {
|
|
60
|
+
const ctx_r0 = i0.ɵɵnextContext();
|
|
61
|
+
i0.ɵɵadvance(4);
|
|
62
|
+
i0.ɵɵtextInterpolate(ctx_r0.calculateDuration(ctx_r0.record.StartedAt, ctx_r0.record.CompletedAt));
|
|
63
|
+
} }
|
|
64
|
+
function AIAgentRunFormComponent_div_31_Template(rf, ctx) { if (rf & 1) {
|
|
65
|
+
i0.ɵɵelementStart(0, "div", 19)(1, "span", 20);
|
|
66
|
+
i0.ɵɵtext(2, "Result");
|
|
67
|
+
i0.ɵɵelementEnd();
|
|
68
|
+
i0.ɵɵelementStart(3, "span", 21);
|
|
69
|
+
i0.ɵɵtext(4);
|
|
70
|
+
i0.ɵɵelementEnd()();
|
|
71
|
+
} if (rf & 2) {
|
|
72
|
+
const ctx_r0 = i0.ɵɵnextContext();
|
|
73
|
+
i0.ɵɵadvance(3);
|
|
74
|
+
i0.ɵɵclassProp("success", ctx_r0.record.Success)("error", !ctx_r0.record.Success);
|
|
75
|
+
i0.ɵɵadvance();
|
|
76
|
+
i0.ɵɵtextInterpolate1(" ", ctx_r0.record.Success ? "Success" : "Failed", " ");
|
|
77
|
+
} }
|
|
78
|
+
function AIAgentRunFormComponent_div_40_div_5_div_24_Template(rf, ctx) { if (rf & 1) {
|
|
79
|
+
const _r5 = i0.ɵɵgetCurrentView();
|
|
80
|
+
i0.ɵɵelementStart(0, "div", 54)(1, "button", 55);
|
|
81
|
+
i0.ɵɵlistener("click", function AIAgentRunFormComponent_div_40_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)); });
|
|
82
|
+
i0.ɵɵelement(2, "i", 56);
|
|
83
|
+
i0.ɵɵtext(3, " View Action Execution Log ");
|
|
84
|
+
i0.ɵɵelementEnd()();
|
|
85
|
+
} }
|
|
86
|
+
function AIAgentRunFormComponent_div_40_div_5_Template(rf, ctx) { if (rf & 1) {
|
|
87
|
+
const _r4 = i0.ɵɵgetCurrentView();
|
|
88
|
+
i0.ɵɵelementStart(0, "div", 40)(1, "div", 41)(2, "h3");
|
|
89
|
+
i0.ɵɵelement(3, "i", 14);
|
|
90
|
+
i0.ɵɵtext(4);
|
|
91
|
+
i0.ɵɵelementEnd();
|
|
92
|
+
i0.ɵɵelementStart(5, "button", 42);
|
|
93
|
+
i0.ɵɵlistener("click", function AIAgentRunFormComponent_div_40_div_5_Template_button_click_5_listener() { i0.ɵɵrestoreView(_r4); const ctx_r0 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r0.closeJsonPanel()); });
|
|
94
|
+
i0.ɵɵelement(6, "i", 43);
|
|
95
|
+
i0.ɵɵelementEnd()();
|
|
96
|
+
i0.ɵɵelementStart(7, "div", 44)(8, "div", 45)(9, "div", 46)(10, "label");
|
|
97
|
+
i0.ɵɵtext(11, "Type");
|
|
98
|
+
i0.ɵɵelementEnd();
|
|
99
|
+
i0.ɵɵelementStart(12, "span");
|
|
100
|
+
i0.ɵɵtext(13);
|
|
101
|
+
i0.ɵɵelementEnd()();
|
|
102
|
+
i0.ɵɵelementStart(14, "div", 46)(15, "label");
|
|
103
|
+
i0.ɵɵtext(16, "Status");
|
|
104
|
+
i0.ɵɵelementEnd();
|
|
105
|
+
i0.ɵɵelementStart(17, "span", 47);
|
|
106
|
+
i0.ɵɵtext(18);
|
|
107
|
+
i0.ɵɵelementEnd()();
|
|
108
|
+
i0.ɵɵelementStart(19, "div", 46)(20, "label");
|
|
109
|
+
i0.ɵɵtext(21, "Duration");
|
|
110
|
+
i0.ɵɵelementEnd();
|
|
111
|
+
i0.ɵɵelementStart(22, "span");
|
|
112
|
+
i0.ɵɵtext(23);
|
|
113
|
+
i0.ɵɵelementEnd()()();
|
|
114
|
+
i0.ɵɵtemplate(24, AIAgentRunFormComponent_div_40_div_5_div_24_Template, 4, 0, "div", 48);
|
|
115
|
+
i0.ɵɵelementStart(25, "div", 49)(26, "div", 50)(27, "button", 51);
|
|
116
|
+
i0.ɵɵlistener("click", function AIAgentRunFormComponent_div_40_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())); });
|
|
117
|
+
i0.ɵɵelement(28, "i", 52);
|
|
118
|
+
i0.ɵɵelementEnd()();
|
|
119
|
+
i0.ɵɵelementStart(29, "mj-code-editor", 53);
|
|
120
|
+
i0.ɵɵtwoWayListener("ngModelChange", function AIAgentRunFormComponent_div_40_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); });
|
|
121
|
+
i0.ɵɵelementEnd()()()();
|
|
122
|
+
} if (rf & 2) {
|
|
123
|
+
const ctx_r0 = i0.ɵɵnextContext(2);
|
|
124
|
+
i0.ɵɵadvance(3);
|
|
125
|
+
i0.ɵɵproperty("ngClass", ctx_r0.selectedTimelineItem.icon);
|
|
126
|
+
i0.ɵɵadvance();
|
|
127
|
+
i0.ɵɵtextInterpolate1(" ", ctx_r0.selectedTimelineItem.title, " ");
|
|
128
|
+
i0.ɵɵadvance(9);
|
|
129
|
+
i0.ɵɵtextInterpolate(ctx_r0.selectedTimelineItem.type);
|
|
130
|
+
i0.ɵɵadvance(4);
|
|
131
|
+
i0.ɵɵattribute("data-status", ctx_r0.selectedTimelineItem.status);
|
|
132
|
+
i0.ɵɵadvance();
|
|
133
|
+
i0.ɵɵtextInterpolate1(" ", ctx_r0.selectedTimelineItem.status, " ");
|
|
134
|
+
i0.ɵɵadvance(5);
|
|
135
|
+
i0.ɵɵtextInterpolate(ctx_r0.selectedTimelineItem.duration || "N/A");
|
|
136
|
+
i0.ɵɵadvance();
|
|
137
|
+
i0.ɵɵproperty("ngIf", ctx_r0.selectedTimelineItem.type === "action" && (ctx_r0.selectedTimelineItem.data == null ? null : ctx_r0.selectedTimelineItem.data.ID));
|
|
138
|
+
i0.ɵɵadvance(5);
|
|
139
|
+
i0.ɵɵtwoWayProperty("ngModel", ctx_r0.selectedItemJsonString);
|
|
140
|
+
i0.ɵɵproperty("language", "json")("readonly", true);
|
|
141
|
+
} }
|
|
142
|
+
function AIAgentRunFormComponent_div_40_Template(rf, ctx) { if (rf & 1) {
|
|
143
|
+
const _r3 = i0.ɵɵgetCurrentView();
|
|
144
|
+
i0.ɵɵelementStart(0, "div", 34)(1, "kendo-splitter", 35)(2, "kendo-splitter-pane", 36)(3, "mj-ai-agent-run-timeline", 37);
|
|
145
|
+
i0.ɵɵlistener("itemSelected", function AIAgentRunFormComponent_div_40_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 AIAgentRunFormComponent_div_40_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)); });
|
|
146
|
+
i0.ɵɵelementEnd()();
|
|
147
|
+
i0.ɵɵelementStart(4, "kendo-splitter-pane", 38);
|
|
148
|
+
i0.ɵɵtemplate(5, AIAgentRunFormComponent_div_40_div_5_Template, 30, 10, "div", 39);
|
|
149
|
+
i0.ɵɵelementEnd()()();
|
|
150
|
+
} if (rf & 2) {
|
|
151
|
+
const ctx_r0 = i0.ɵɵnextContext();
|
|
152
|
+
i0.ɵɵadvance(2);
|
|
153
|
+
i0.ɵɵproperty("min", "400px");
|
|
154
|
+
i0.ɵɵadvance();
|
|
155
|
+
i0.ɵɵproperty("aiAgentRunId", ctx_r0.record.ID)("autoRefresh", ctx_r0.record.Status === "Running")("refreshInterval", 3000);
|
|
156
|
+
i0.ɵɵadvance();
|
|
157
|
+
i0.ɵɵproperty("size", "45%")("min", "300px")("collapsed", !ctx_r0.selectedTimelineItem);
|
|
158
|
+
i0.ɵɵadvance();
|
|
159
|
+
i0.ɵɵproperty("ngIf", ctx_r0.selectedTimelineItem);
|
|
160
|
+
} }
|
|
161
|
+
function AIAgentRunFormComponent_div_41_ng_template_3_Template(rf, ctx) { if (rf & 1) {
|
|
162
|
+
i0.ɵɵelementStart(0, "div", 63)(1, "div", 64)(2, "label");
|
|
163
|
+
i0.ɵɵtext(3, "Run ID");
|
|
164
|
+
i0.ɵɵelementEnd();
|
|
165
|
+
i0.ɵɵelementStart(4, "span");
|
|
166
|
+
i0.ɵɵtext(5);
|
|
167
|
+
i0.ɵɵelementEnd()();
|
|
168
|
+
i0.ɵɵelementStart(6, "div", 64)(7, "label");
|
|
169
|
+
i0.ɵɵtext(8, "Agent ID");
|
|
170
|
+
i0.ɵɵelementEnd();
|
|
171
|
+
i0.ɵɵelementStart(9, "span");
|
|
172
|
+
i0.ɵɵtext(10);
|
|
173
|
+
i0.ɵɵelementEnd()();
|
|
174
|
+
i0.ɵɵelementStart(11, "div", 64)(12, "label");
|
|
175
|
+
i0.ɵɵtext(13, "Agent Name");
|
|
176
|
+
i0.ɵɵelementEnd();
|
|
177
|
+
i0.ɵɵelementStart(14, "span");
|
|
178
|
+
i0.ɵɵtext(15);
|
|
179
|
+
i0.ɵɵelementEnd()();
|
|
180
|
+
i0.ɵɵelementStart(16, "div", 64)(17, "label");
|
|
181
|
+
i0.ɵɵtext(18, "Parent Run ID");
|
|
182
|
+
i0.ɵɵelementEnd();
|
|
183
|
+
i0.ɵɵelementStart(19, "span");
|
|
184
|
+
i0.ɵɵtext(20);
|
|
185
|
+
i0.ɵɵelementEnd()();
|
|
186
|
+
i0.ɵɵelementStart(21, "div", 64)(22, "label");
|
|
187
|
+
i0.ɵɵtext(23, "Conversation ID");
|
|
188
|
+
i0.ɵɵelementEnd();
|
|
189
|
+
i0.ɵɵelementStart(24, "span");
|
|
190
|
+
i0.ɵɵtext(25);
|
|
191
|
+
i0.ɵɵelementEnd()();
|
|
192
|
+
i0.ɵɵelementStart(26, "div", 64)(27, "label");
|
|
193
|
+
i0.ɵɵtext(28, "User");
|
|
194
|
+
i0.ɵɵelementEnd();
|
|
195
|
+
i0.ɵɵelementStart(29, "span");
|
|
196
|
+
i0.ɵɵtext(30);
|
|
197
|
+
i0.ɵɵelementEnd()()();
|
|
198
|
+
} if (rf & 2) {
|
|
199
|
+
const ctx_r0 = i0.ɵɵnextContext(2);
|
|
200
|
+
i0.ɵɵadvance(5);
|
|
201
|
+
i0.ɵɵtextInterpolate(ctx_r0.record.ID);
|
|
202
|
+
i0.ɵɵadvance(5);
|
|
203
|
+
i0.ɵɵtextInterpolate(ctx_r0.record.AgentID);
|
|
204
|
+
i0.ɵɵadvance(5);
|
|
205
|
+
i0.ɵɵtextInterpolate((ctx_r0.agent == null ? null : ctx_r0.agent.Name) || "N/A");
|
|
206
|
+
i0.ɵɵadvance(5);
|
|
207
|
+
i0.ɵɵtextInterpolate(ctx_r0.record.ParentRunID || "None (Root)");
|
|
208
|
+
i0.ɵɵadvance(5);
|
|
209
|
+
i0.ɵɵtextInterpolate(ctx_r0.record.ConversationID || "N/A");
|
|
210
|
+
i0.ɵɵadvance(5);
|
|
211
|
+
i0.ɵɵtextInterpolate(ctx_r0.record.User || "N/A");
|
|
212
|
+
} }
|
|
213
|
+
function AIAgentRunFormComponent_div_41_ng_template_5_div_11_Template(rf, ctx) { if (rf & 1) {
|
|
214
|
+
i0.ɵɵelementStart(0, "div", 66)(1, "label");
|
|
215
|
+
i0.ɵɵtext(2, "Error Message");
|
|
216
|
+
i0.ɵɵelementEnd();
|
|
217
|
+
i0.ɵɵelementStart(3, "div", 67);
|
|
218
|
+
i0.ɵɵtext(4);
|
|
219
|
+
i0.ɵɵelementEnd()();
|
|
220
|
+
} if (rf & 2) {
|
|
221
|
+
const ctx_r0 = i0.ɵɵnextContext(3);
|
|
222
|
+
i0.ɵɵadvance(4);
|
|
223
|
+
i0.ɵɵtextInterpolate(ctx_r0.record.ErrorMessage);
|
|
224
|
+
} }
|
|
225
|
+
function AIAgentRunFormComponent_div_41_ng_template_5_Template(rf, ctx) { if (rf & 1) {
|
|
226
|
+
i0.ɵɵelementStart(0, "div", 63)(1, "div", 64)(2, "label");
|
|
227
|
+
i0.ɵɵtext(3, "Status");
|
|
228
|
+
i0.ɵɵelementEnd();
|
|
229
|
+
i0.ɵɵelementStart(4, "span", 13);
|
|
230
|
+
i0.ɵɵtext(5);
|
|
231
|
+
i0.ɵɵelementEnd()();
|
|
232
|
+
i0.ɵɵelementStart(6, "div", 64)(7, "label");
|
|
233
|
+
i0.ɵɵtext(8, "Success");
|
|
234
|
+
i0.ɵɵelementEnd();
|
|
235
|
+
i0.ɵɵelementStart(9, "span");
|
|
236
|
+
i0.ɵɵtext(10);
|
|
237
|
+
i0.ɵɵelementEnd()();
|
|
238
|
+
i0.ɵɵtemplate(11, AIAgentRunFormComponent_div_41_ng_template_5_div_11_Template, 5, 1, "div", 65);
|
|
239
|
+
i0.ɵɵelementEnd();
|
|
240
|
+
} if (rf & 2) {
|
|
241
|
+
const ctx_r0 = i0.ɵɵnextContext(2);
|
|
242
|
+
i0.ɵɵadvance(4);
|
|
243
|
+
i0.ɵɵattribute("data-status", ctx_r0.record.Status);
|
|
244
|
+
i0.ɵɵadvance();
|
|
245
|
+
i0.ɵɵtextInterpolate1(" ", ctx_r0.record.Status, " ");
|
|
246
|
+
i0.ɵɵadvance(4);
|
|
247
|
+
i0.ɵɵclassProp("success", ctx_r0.record.Success)("error", ctx_r0.record.Success === false);
|
|
248
|
+
i0.ɵɵadvance();
|
|
249
|
+
i0.ɵɵtextInterpolate1(" ", ctx_r0.record.Success === null ? "In Progress" : ctx_r0.record.Success ? "Yes" : "No", " ");
|
|
250
|
+
i0.ɵɵadvance();
|
|
251
|
+
i0.ɵɵproperty("ngIf", ctx_r0.record.ErrorMessage);
|
|
252
|
+
} }
|
|
253
|
+
function AIAgentRunFormComponent_div_41_kendo_panelbar_item_6_ng_template_1_Template(rf, ctx) { if (rf & 1) {
|
|
254
|
+
const _r6 = i0.ɵɵgetCurrentView();
|
|
255
|
+
i0.ɵɵelementStart(0, "div", 69)(1, "mj-code-editor", 70);
|
|
256
|
+
i0.ɵɵtwoWayListener("ngModelChange", function AIAgentRunFormComponent_div_41_kendo_panelbar_item_6_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); });
|
|
257
|
+
i0.ɵɵelementEnd()();
|
|
258
|
+
} if (rf & 2) {
|
|
259
|
+
const ctx_r0 = i0.ɵɵnextContext(3);
|
|
260
|
+
i0.ɵɵadvance();
|
|
261
|
+
i0.ɵɵtwoWayProperty("ngModel", ctx_r0.record.Result);
|
|
262
|
+
i0.ɵɵproperty("language", "json")("readonly", true);
|
|
263
|
+
} }
|
|
264
|
+
function AIAgentRunFormComponent_div_41_kendo_panelbar_item_6_Template(rf, ctx) { if (rf & 1) {
|
|
265
|
+
i0.ɵɵelementStart(0, "kendo-panelbar-item", 68);
|
|
266
|
+
i0.ɵɵtemplate(1, AIAgentRunFormComponent_div_41_kendo_panelbar_item_6_ng_template_1_Template, 2, 3, "ng-template", 59);
|
|
267
|
+
i0.ɵɵelementEnd();
|
|
268
|
+
} }
|
|
269
|
+
function AIAgentRunFormComponent_div_41_kendo_panelbar_item_7_ng_template_1_Template(rf, ctx) { if (rf & 1) {
|
|
270
|
+
const _r7 = i0.ɵɵgetCurrentView();
|
|
271
|
+
i0.ɵɵelementStart(0, "div", 72)(1, "mj-code-editor", 73);
|
|
272
|
+
i0.ɵɵtwoWayListener("ngModelChange", function AIAgentRunFormComponent_div_41_kendo_panelbar_item_7_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); });
|
|
273
|
+
i0.ɵɵelementEnd()();
|
|
274
|
+
} if (rf & 2) {
|
|
275
|
+
const ctx_r0 = i0.ɵɵnextContext(3);
|
|
276
|
+
i0.ɵɵadvance();
|
|
277
|
+
i0.ɵɵtwoWayProperty("ngModel", ctx_r0.record.AgentState);
|
|
278
|
+
i0.ɵɵproperty("language", "json")("readonly", true);
|
|
279
|
+
} }
|
|
280
|
+
function AIAgentRunFormComponent_div_41_kendo_panelbar_item_7_Template(rf, ctx) { if (rf & 1) {
|
|
281
|
+
i0.ɵɵelementStart(0, "kendo-panelbar-item", 71);
|
|
282
|
+
i0.ɵɵtemplate(1, AIAgentRunFormComponent_div_41_kendo_panelbar_item_7_ng_template_1_Template, 2, 3, "ng-template", 59);
|
|
283
|
+
i0.ɵɵelementEnd();
|
|
284
|
+
} }
|
|
285
|
+
function AIAgentRunFormComponent_div_41_Template(rf, ctx) { if (rf & 1) {
|
|
286
|
+
i0.ɵɵelementStart(0, "div", 57)(1, "kendo-panelbar")(2, "kendo-panelbar-item", 58);
|
|
287
|
+
i0.ɵɵtemplate(3, AIAgentRunFormComponent_div_41_ng_template_3_Template, 31, 6, "ng-template", 59);
|
|
288
|
+
i0.ɵɵelementEnd();
|
|
289
|
+
i0.ɵɵelementStart(4, "kendo-panelbar-item", 60);
|
|
290
|
+
i0.ɵɵtemplate(5, AIAgentRunFormComponent_div_41_ng_template_5_Template, 12, 8, "ng-template", 59);
|
|
291
|
+
i0.ɵɵelementEnd();
|
|
292
|
+
i0.ɵɵtemplate(6, AIAgentRunFormComponent_div_41_kendo_panelbar_item_6_Template, 2, 0, "kendo-panelbar-item", 61)(7, AIAgentRunFormComponent_div_41_kendo_panelbar_item_7_Template, 2, 0, "kendo-panelbar-item", 62);
|
|
293
|
+
i0.ɵɵelementEnd()();
|
|
294
|
+
} if (rf & 2) {
|
|
295
|
+
const ctx_r0 = i0.ɵɵnextContext();
|
|
296
|
+
i0.ɵɵadvance(2);
|
|
297
|
+
i0.ɵɵproperty("expanded", true);
|
|
298
|
+
i0.ɵɵadvance(4);
|
|
299
|
+
i0.ɵɵproperty("ngIf", ctx_r0.record.Result);
|
|
300
|
+
i0.ɵɵadvance();
|
|
301
|
+
i0.ɵɵproperty("ngIf", ctx_r0.record.AgentState);
|
|
302
|
+
} }
|
|
303
|
+
let AIAgentRunFormComponent = class AIAgentRunFormComponent extends BaseFormComponent {
|
|
304
|
+
constructor(elementRef, sharedService, router, route, cdr) {
|
|
305
|
+
super(elementRef, sharedService, router, route, cdr);
|
|
306
|
+
this.router = router;
|
|
307
|
+
this.destroy$ = new Subject();
|
|
308
|
+
// UI state
|
|
309
|
+
this.activeTab = 'timeline';
|
|
310
|
+
this.selectedTimelineItem = null;
|
|
311
|
+
this.jsonPanelExpanded = false;
|
|
312
|
+
this.loading = false;
|
|
313
|
+
this.error = null;
|
|
314
|
+
this.selectedItemJsonString = '{}';
|
|
315
|
+
this.agent = null;
|
|
316
|
+
}
|
|
317
|
+
async ngOnInit() {
|
|
318
|
+
await super.ngOnInit();
|
|
319
|
+
if (this.record) {
|
|
320
|
+
await this.loadAgent();
|
|
321
|
+
}
|
|
322
|
+
}
|
|
323
|
+
ngOnDestroy() {
|
|
324
|
+
this.destroy$.next();
|
|
325
|
+
this.destroy$.complete();
|
|
326
|
+
}
|
|
327
|
+
async loadAgent() {
|
|
328
|
+
if (!this.record?.AgentID)
|
|
329
|
+
return;
|
|
330
|
+
try {
|
|
331
|
+
const md = new Metadata();
|
|
332
|
+
const agent = await md.GetEntityObject('AI Agents');
|
|
333
|
+
if (agent && await agent.Load(this.record.AgentID)) {
|
|
334
|
+
this.agent = agent;
|
|
335
|
+
}
|
|
336
|
+
}
|
|
337
|
+
catch (error) {
|
|
338
|
+
console.error('Error loading agent:', error);
|
|
339
|
+
}
|
|
340
|
+
}
|
|
341
|
+
calculateDuration(start, end) {
|
|
342
|
+
if (!end)
|
|
343
|
+
return 'Running...';
|
|
344
|
+
const ms = end.getTime() - start.getTime();
|
|
345
|
+
if (ms < 1000)
|
|
346
|
+
return `${ms}ms`;
|
|
347
|
+
if (ms < 60000)
|
|
348
|
+
return `${(ms / 1000).toFixed(1)}s`;
|
|
349
|
+
if (ms < 3600000)
|
|
350
|
+
return `${Math.floor(ms / 60000)}m ${Math.floor((ms % 60000) / 1000)}s`;
|
|
351
|
+
return `${Math.floor(ms / 3600000)}h ${Math.floor((ms % 3600000) / 60000)}m`;
|
|
352
|
+
}
|
|
353
|
+
selectTimelineItem(item) {
|
|
354
|
+
this.selectedTimelineItem = item;
|
|
355
|
+
this.selectedItemJsonString = this.getSelectedItemJson();
|
|
356
|
+
this.jsonPanelExpanded = true;
|
|
357
|
+
this.cdr.detectChanges();
|
|
358
|
+
}
|
|
359
|
+
closeJsonPanel() {
|
|
360
|
+
this.selectedTimelineItem = null;
|
|
361
|
+
this.selectedItemJsonString = '{}';
|
|
362
|
+
this.cdr.detectChanges();
|
|
363
|
+
}
|
|
364
|
+
navigateToSubRun(runId) {
|
|
365
|
+
SharedService.Instance.OpenEntityRecord("MJ: AI Agent Runs", CompositeKey.FromID(runId));
|
|
366
|
+
}
|
|
367
|
+
navigateToParentRun() {
|
|
368
|
+
if (this.record.ParentRunID) {
|
|
369
|
+
SharedService.Instance.OpenEntityRecord("MJ: AI Agent Runs", CompositeKey.FromID(this.record.ParentRunID));
|
|
370
|
+
}
|
|
371
|
+
}
|
|
372
|
+
navigateToActionLog(logId) {
|
|
373
|
+
SharedService.Instance.OpenEntityRecord("Action Execution Logs", CompositeKey.FromID(logId));
|
|
374
|
+
}
|
|
375
|
+
navigateToEntityRecord(event) {
|
|
376
|
+
SharedService.Instance.OpenEntityRecord(event.entityName, CompositeKey.FromID(event.recordId));
|
|
377
|
+
}
|
|
378
|
+
refreshData() {
|
|
379
|
+
// Timeline component will handle its own refresh
|
|
380
|
+
}
|
|
381
|
+
getSelectedItemJson() {
|
|
382
|
+
if (!this.selectedTimelineItem)
|
|
383
|
+
return '{}';
|
|
384
|
+
return JSON.stringify(this.selectedTimelineItem.data.GetAll(), null, 2);
|
|
385
|
+
}
|
|
386
|
+
getStatusIcon(status) {
|
|
387
|
+
const iconMap = {
|
|
388
|
+
'Running': 'fa-circle-notch fa-spin',
|
|
389
|
+
'Completed': 'fa-check-circle',
|
|
390
|
+
'Failed': 'fa-times-circle',
|
|
391
|
+
'Cancelled': 'fa-ban',
|
|
392
|
+
'Paused': 'fa-pause-circle'
|
|
393
|
+
};
|
|
394
|
+
return iconMap[status] || 'fa-question-circle';
|
|
395
|
+
}
|
|
396
|
+
async copyToClipboard(text) {
|
|
397
|
+
try {
|
|
398
|
+
await navigator.clipboard.writeText(text);
|
|
399
|
+
// Could show a toast notification here
|
|
400
|
+
}
|
|
401
|
+
catch (err) {
|
|
402
|
+
console.error('Failed to copy to clipboard:', err);
|
|
403
|
+
}
|
|
404
|
+
}
|
|
405
|
+
static { this.ɵfac = function AIAgentRunFormComponent_Factory(t) { return new (t || AIAgentRunFormComponent)(i0.ɵɵdirectiveInject(i0.ElementRef), i0.ɵɵdirectiveInject(i1.SharedService), i0.ɵɵdirectiveInject(i2.Router), i0.ɵɵdirectiveInject(i2.ActivatedRoute), i0.ɵɵdirectiveInject(i0.ChangeDetectorRef)); }; }
|
|
406
|
+
static { this.ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: AIAgentRunFormComponent, selectors: [["mj-ai-agent-run-form"]], features: [i0.ɵɵInheritDefinitionFeature], decls: 42, vars: 19, 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", "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 AIAgentRunFormComponent_Template(rf, ctx) { if (rf & 1) {
|
|
407
|
+
i0.ɵɵelementStart(0, "div", 0)(1, "div", 1)(2, "div", 2)(3, "div", 3)(4, "div", 4)(5, "div", 5);
|
|
408
|
+
i0.ɵɵelement(6, "i", 6);
|
|
409
|
+
i0.ɵɵelementEnd();
|
|
410
|
+
i0.ɵɵelementStart(7, "div", 7)(8, "h2");
|
|
411
|
+
i0.ɵɵtext(9, "AI Agent Run");
|
|
412
|
+
i0.ɵɵelementEnd();
|
|
413
|
+
i0.ɵɵelementStart(10, "div", 8);
|
|
414
|
+
i0.ɵɵtemplate(11, AIAgentRunFormComponent_span_11_Template, 2, 1, "span", 9);
|
|
415
|
+
i0.ɵɵelementStart(12, "span", 10);
|
|
416
|
+
i0.ɵɵtext(13);
|
|
417
|
+
i0.ɵɵelementEnd();
|
|
418
|
+
i0.ɵɵtemplate(14, AIAgentRunFormComponent_span_14_Template, 4, 0, "span", 11);
|
|
419
|
+
i0.ɵɵelementEnd()()();
|
|
420
|
+
i0.ɵɵelementStart(15, "div", 12)(16, "div", 13);
|
|
421
|
+
i0.ɵɵelement(17, "i", 14);
|
|
422
|
+
i0.ɵɵtext(18);
|
|
423
|
+
i0.ɵɵelementEnd();
|
|
424
|
+
i0.ɵɵelementStart(19, "div", 15)(20, "button", 16);
|
|
425
|
+
i0.ɵɵlistener("click", function AIAgentRunFormComponent_Template_button_click_20_listener() { return ctx.refreshData(); });
|
|
426
|
+
i0.ɵɵelement(21, "i", 17);
|
|
427
|
+
i0.ɵɵelementEnd()()()();
|
|
428
|
+
i0.ɵɵelementStart(22, "div", 18)(23, "div", 19)(24, "span", 20);
|
|
429
|
+
i0.ɵɵtext(25, "Started");
|
|
430
|
+
i0.ɵɵelementEnd();
|
|
431
|
+
i0.ɵɵelementStart(26, "span", 21);
|
|
432
|
+
i0.ɵɵtext(27);
|
|
433
|
+
i0.ɵɵpipe(28, "date");
|
|
434
|
+
i0.ɵɵelementEnd()();
|
|
435
|
+
i0.ɵɵtemplate(29, AIAgentRunFormComponent_div_29_Template, 6, 4, "div", 22)(30, AIAgentRunFormComponent_div_30_Template, 5, 1, "div", 22)(31, AIAgentRunFormComponent_div_31_Template, 5, 5, "div", 22);
|
|
436
|
+
i0.ɵɵelementEnd()();
|
|
437
|
+
i0.ɵɵelementStart(32, "div", 23)(33, "button", 24);
|
|
438
|
+
i0.ɵɵlistener("click", function AIAgentRunFormComponent_Template_button_click_33_listener() { return ctx.activeTab = "timeline"; });
|
|
439
|
+
i0.ɵɵelement(34, "i", 25);
|
|
440
|
+
i0.ɵɵtext(35, " Timeline ");
|
|
441
|
+
i0.ɵɵelementEnd();
|
|
442
|
+
i0.ɵɵelementStart(36, "button", 24);
|
|
443
|
+
i0.ɵɵlistener("click", function AIAgentRunFormComponent_Template_button_click_36_listener() { return ctx.activeTab = "details"; });
|
|
444
|
+
i0.ɵɵelement(37, "i", 26);
|
|
445
|
+
i0.ɵɵtext(38, " Details ");
|
|
446
|
+
i0.ɵɵelementEnd()();
|
|
447
|
+
i0.ɵɵelementStart(39, "div", 27);
|
|
448
|
+
i0.ɵɵtemplate(40, AIAgentRunFormComponent_div_40_Template, 6, 8, "div", 28)(41, AIAgentRunFormComponent_div_41_Template, 8, 3, "div", 29);
|
|
449
|
+
i0.ɵɵelementEnd()()();
|
|
450
|
+
} if (rf & 2) {
|
|
451
|
+
i0.ɵɵadvance(11);
|
|
452
|
+
i0.ɵɵproperty("ngIf", ctx.agent);
|
|
453
|
+
i0.ɵɵadvance(2);
|
|
454
|
+
i0.ɵɵtextInterpolate(ctx.record.ID);
|
|
455
|
+
i0.ɵɵadvance();
|
|
456
|
+
i0.ɵɵproperty("ngIf", ctx.record.ParentRunID);
|
|
457
|
+
i0.ɵɵadvance(2);
|
|
458
|
+
i0.ɵɵattribute("data-status", ctx.record.Status);
|
|
459
|
+
i0.ɵɵadvance();
|
|
460
|
+
i0.ɵɵproperty("ngClass", ctx.getStatusIcon(ctx.record.Status || ""));
|
|
461
|
+
i0.ɵɵadvance();
|
|
462
|
+
i0.ɵɵtextInterpolate1(" ", ctx.record.Status, " ");
|
|
463
|
+
i0.ɵɵadvance(9);
|
|
464
|
+
i0.ɵɵtextInterpolate(i0.ɵɵpipeBind2(28, 16, ctx.record.StartedAt, "medium"));
|
|
465
|
+
i0.ɵɵadvance(2);
|
|
466
|
+
i0.ɵɵproperty("ngIf", ctx.record.CompletedAt);
|
|
467
|
+
i0.ɵɵadvance();
|
|
468
|
+
i0.ɵɵproperty("ngIf", ctx.record.CompletedAt);
|
|
469
|
+
i0.ɵɵadvance();
|
|
470
|
+
i0.ɵɵproperty("ngIf", ctx.record.Success !== null);
|
|
471
|
+
i0.ɵɵadvance(2);
|
|
472
|
+
i0.ɵɵclassProp("active", ctx.activeTab === "timeline");
|
|
473
|
+
i0.ɵɵadvance(3);
|
|
474
|
+
i0.ɵɵclassProp("active", ctx.activeTab === "details");
|
|
475
|
+
i0.ɵɵadvance(4);
|
|
476
|
+
i0.ɵɵproperty("ngIf", ctx.activeTab === "timeline");
|
|
477
|
+
i0.ɵɵadvance();
|
|
478
|
+
i0.ɵɵproperty("ngIf", ctx.activeTab === "details");
|
|
479
|
+
} }, dependencies: [i3.NgClass, i3.NgIf, i4.NgControlStatus, i4.NgModel, i5.PanelBarComponent, i5.PanelBarItemComponent, i5.PanelBarContentDirective, i5.SplitterComponent, i5.SplitterPaneComponent, i6.CodeEditorComponent, i7.AIAgentRunTimelineComponent, 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}"] }); }
|
|
480
|
+
};
|
|
481
|
+
AIAgentRunFormComponent = __decorate([
|
|
482
|
+
RegisterClass(BaseFormComponent, 'MJ: AI Agent Runs')
|
|
483
|
+
], AIAgentRunFormComponent);
|
|
484
|
+
export { AIAgentRunFormComponent };
|
|
485
|
+
(() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(AIAgentRunFormComponent, [{
|
|
486
|
+
type: Component,
|
|
487
|
+
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>\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=\"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}"] }]
|
|
488
|
+
}], () => [{ type: i0.ElementRef }, { type: i1.SharedService }, { type: i2.Router }, { type: i2.ActivatedRoute }, { type: i0.ChangeDetectorRef }], null); })();
|
|
489
|
+
(() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassDebugInfo(AIAgentRunFormComponent, { className: "AIAgentRunFormComponent", filePath: "src/lib/custom/ai-agent-run/ai-agent-run.component.ts", lineNumber: 18 }); })();
|
|
490
|
+
//# sourceMappingURL=ai-agent-run.component.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ai-agent-run.component.js","sourceRoot":"","sources":["../../../../src/lib/custom/ai-agent-run/ai-agent-run.component.ts","../../../../src/lib/custom/ai-agent-run/ai-agent-run.component.html"],"names":[],"mappings":"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"}
|