@memberjunction/ng-ai-test-harness 2.58.0 → 2.60.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/agent-execution-monitor.component.d.ts +49 -94
- package/dist/lib/agent-execution-monitor.component.d.ts.map +1 -1
- package/dist/lib/agent-execution-monitor.component.js +448 -772
- package/dist/lib/agent-execution-monitor.component.js.map +1 -1
- package/dist/lib/agent-execution-node.component.d.ts +28 -6
- package/dist/lib/agent-execution-node.component.d.ts.map +1 -1
- package/dist/lib/agent-execution-node.component.js +399 -199
- package/dist/lib/agent-execution-node.component.js.map +1 -1
- package/dist/lib/ai-test-harness-window.component.d.ts +1 -0
- package/dist/lib/ai-test-harness-window.component.d.ts.map +1 -1
- package/dist/lib/ai-test-harness-window.component.js +13 -4
- package/dist/lib/ai-test-harness-window.component.js.map +1 -1
- package/dist/lib/ai-test-harness.component.d.ts +33 -17
- package/dist/lib/ai-test-harness.component.d.ts.map +1 -1
- package/dist/lib/ai-test-harness.component.js +294 -200
- package/dist/lib/ai-test-harness.component.js.map +1 -1
- package/dist/lib/test-harness-window.service.d.ts.map +1 -1
- package/dist/lib/test-harness-window.service.js +10 -6
- package/dist/lib/test-harness-window.service.js.map +1 -1
- package/dist/module.d.ts +16 -16
- package/dist/module.d.ts.map +1 -1
- package/dist/module.js +9 -16
- package/dist/module.js.map +1 -1
- package/dist/public-api.d.ts +1 -1
- package/dist/public-api.d.ts.map +1 -1
- package/dist/public-api.js +1 -1
- package/dist/public-api.js.map +1 -1
- package/package.json +8 -8
|
@@ -1,18 +1,16 @@
|
|
|
1
|
-
import { Component, Input, Output, EventEmitter } from '@angular/core';
|
|
2
|
-
import { CommonModule } from '@angular/common';
|
|
1
|
+
import { Component, Input, Output, EventEmitter, ChangeDetectionStrategy } from '@angular/core';
|
|
3
2
|
import * as i0 from "@angular/core";
|
|
4
|
-
const _forTrack0 = ($index, $item) => $item.id;
|
|
5
3
|
function ExecutionNodeComponent_Conditional_2_Template(rf, ctx) { if (rf & 1) {
|
|
6
4
|
const _r1 = i0.ɵɵgetCurrentView();
|
|
7
|
-
i0.ɵɵelementStart(0, "i",
|
|
8
|
-
i0.ɵɵlistener("click", function ExecutionNodeComponent_Conditional_2_Template_i_click_0_listener($event) { i0.ɵɵrestoreView(_r1); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.
|
|
5
|
+
i0.ɵɵelementStart(0, "i", 19);
|
|
6
|
+
i0.ɵɵlistener("click", function ExecutionNodeComponent_Conditional_2_Template_i_click_0_listener($event) { i0.ɵɵrestoreView(_r1); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.onToggleChildren($event)); });
|
|
9
7
|
i0.ɵɵelementEnd();
|
|
10
8
|
} if (rf & 2) {
|
|
11
9
|
const ctx_r1 = i0.ɵɵnextContext();
|
|
12
|
-
i0.ɵɵclassProp("fa-chevron-down", ctx_r1.
|
|
10
|
+
i0.ɵɵclassProp("fa-chevron-down", ctx_r1.expanded)("fa-chevron-right", !ctx_r1.expanded);
|
|
13
11
|
} }
|
|
14
|
-
function
|
|
15
|
-
i0.ɵɵelement(0, "
|
|
12
|
+
function ExecutionNodeComponent_Case_4_Template(rf, ctx) { if (rf & 1) {
|
|
13
|
+
i0.ɵɵelement(0, "i", 4);
|
|
16
14
|
} }
|
|
17
15
|
function ExecutionNodeComponent_Case_5_Template(rf, ctx) { if (rf & 1) {
|
|
18
16
|
i0.ɵɵelement(0, "i", 5);
|
|
@@ -23,56 +21,62 @@ function ExecutionNodeComponent_Case_6_Template(rf, ctx) { if (rf & 1) {
|
|
|
23
21
|
function ExecutionNodeComponent_Case_7_Template(rf, ctx) { if (rf & 1) {
|
|
24
22
|
i0.ɵɵelement(0, "i", 7);
|
|
25
23
|
} }
|
|
26
|
-
function
|
|
27
|
-
i0.ɵɵelement(0, "i",
|
|
24
|
+
function ExecutionNodeComponent_Case_9_Template(rf, ctx) { if (rf & 1) {
|
|
25
|
+
i0.ɵɵelement(0, "i", 9);
|
|
28
26
|
} }
|
|
29
27
|
function ExecutionNodeComponent_Case_10_Template(rf, ctx) { if (rf & 1) {
|
|
30
28
|
i0.ɵɵelement(0, "i", 10);
|
|
31
29
|
} }
|
|
32
|
-
function
|
|
33
|
-
i0.ɵɵelement(0, "i", 11);
|
|
34
|
-
} }
|
|
35
|
-
function ExecutionNodeComponent_Case_12_Conditional_0_Template(rf, ctx) { if (rf & 1) {
|
|
30
|
+
function ExecutionNodeComponent_Case_11_Conditional_0_Template(rf, ctx) { if (rf & 1) {
|
|
36
31
|
i0.ɵɵelement(0, "i");
|
|
37
32
|
} if (rf & 2) {
|
|
38
33
|
const ctx_r1 = i0.ɵɵnextContext(2);
|
|
39
|
-
i0.ɵɵclassMap(ctx_r1.
|
|
34
|
+
i0.ɵɵclassMap(ctx_r1.getActionIconClass());
|
|
40
35
|
} }
|
|
41
|
-
function
|
|
42
|
-
i0.ɵɵelement(0, "i",
|
|
36
|
+
function ExecutionNodeComponent_Case_11_Conditional_1_Template(rf, ctx) { if (rf & 1) {
|
|
37
|
+
i0.ɵɵelement(0, "i", 21);
|
|
43
38
|
} }
|
|
44
|
-
function
|
|
45
|
-
i0.ɵɵtemplate(0,
|
|
39
|
+
function ExecutionNodeComponent_Case_11_Template(rf, ctx) { if (rf & 1) {
|
|
40
|
+
i0.ɵɵtemplate(0, ExecutionNodeComponent_Case_11_Conditional_0_Template, 1, 2, "i", 20)(1, ExecutionNodeComponent_Case_11_Conditional_1_Template, 1, 0, "i", 21);
|
|
46
41
|
} if (rf & 2) {
|
|
47
42
|
const ctx_r1 = i0.ɵɵnextContext();
|
|
48
|
-
i0.ɵɵconditional(ctx_r1.
|
|
43
|
+
i0.ɵɵconditional(ctx_r1.getActionIconClass() ? 0 : 1);
|
|
49
44
|
} }
|
|
50
|
-
function
|
|
51
|
-
i0.ɵɵelement(0, "img",
|
|
45
|
+
function ExecutionNodeComponent_Case_12_Conditional_0_Template(rf, ctx) { if (rf & 1) {
|
|
46
|
+
i0.ɵɵelement(0, "img", 22);
|
|
52
47
|
} if (rf & 2) {
|
|
53
48
|
const ctx_r1 = i0.ɵɵnextContext(2);
|
|
54
|
-
i0.ɵɵproperty("src", ctx_r1.
|
|
49
|
+
i0.ɵɵproperty("src", ctx_r1.getAgentLogoURL(), i0.ɵɵsanitizeUrl)("alt", ctx_r1.getAgentName() || "Agent");
|
|
55
50
|
} }
|
|
56
|
-
function
|
|
51
|
+
function ExecutionNodeComponent_Case_12_Conditional_1_Template(rf, ctx) { if (rf & 1) {
|
|
57
52
|
i0.ɵɵelement(0, "i");
|
|
58
53
|
} if (rf & 2) {
|
|
59
54
|
const ctx_r1 = i0.ɵɵnextContext(2);
|
|
60
|
-
i0.ɵɵclassMap(ctx_r1.
|
|
55
|
+
i0.ɵɵclassMap(ctx_r1.getAgentIconClass());
|
|
61
56
|
} }
|
|
62
|
-
function
|
|
63
|
-
i0.ɵɵelement(0, "i",
|
|
57
|
+
function ExecutionNodeComponent_Case_12_Conditional_2_Template(rf, ctx) { if (rf & 1) {
|
|
58
|
+
i0.ɵɵelement(0, "i", 23);
|
|
64
59
|
} }
|
|
65
|
-
function
|
|
66
|
-
i0.ɵɵtemplate(0,
|
|
60
|
+
function ExecutionNodeComponent_Case_12_Template(rf, ctx) { if (rf & 1) {
|
|
61
|
+
i0.ɵɵtemplate(0, ExecutionNodeComponent_Case_12_Conditional_0_Template, 1, 2, "img", 22)(1, ExecutionNodeComponent_Case_12_Conditional_1_Template, 1, 2, "i", 20)(2, ExecutionNodeComponent_Case_12_Conditional_2_Template, 1, 0, "i", 23);
|
|
67
62
|
} if (rf & 2) {
|
|
68
63
|
const ctx_r1 = i0.ɵɵnextContext();
|
|
69
|
-
i0.ɵɵconditional(ctx_r1.
|
|
64
|
+
i0.ɵɵconditional(ctx_r1.getAgentLogoURL() ? 0 : ctx_r1.getAgentIconClass() ? 1 : 2);
|
|
65
|
+
} }
|
|
66
|
+
function ExecutionNodeComponent_Case_13_Template(rf, ctx) { if (rf & 1) {
|
|
67
|
+
i0.ɵɵelement(0, "i", 11);
|
|
70
68
|
} }
|
|
71
69
|
function ExecutionNodeComponent_Case_14_Template(rf, ctx) { if (rf & 1) {
|
|
72
70
|
i0.ɵɵelement(0, "i", 12);
|
|
73
71
|
} }
|
|
74
|
-
function
|
|
75
|
-
i0.ɵɵ
|
|
72
|
+
function ExecutionNodeComponent_Conditional_16_Template(rf, ctx) { if (rf & 1) {
|
|
73
|
+
i0.ɵɵelementStart(0, "small", 14);
|
|
74
|
+
i0.ɵɵtext(1);
|
|
75
|
+
i0.ɵɵelementEnd();
|
|
76
|
+
} if (rf & 2) {
|
|
77
|
+
const ctx_r1 = i0.ɵɵnextContext();
|
|
78
|
+
i0.ɵɵadvance();
|
|
79
|
+
i0.ɵɵtextInterpolate1("[Level ", ctx_r1.depth, "]");
|
|
76
80
|
} }
|
|
77
81
|
function ExecutionNodeComponent_Conditional_18_Template(rf, ctx) { if (rf & 1) {
|
|
78
82
|
i0.ɵɵelementStart(0, "span", 15);
|
|
@@ -81,179 +85,192 @@ function ExecutionNodeComponent_Conditional_18_Template(rf, ctx) { if (rf & 1) {
|
|
|
81
85
|
} if (rf & 2) {
|
|
82
86
|
const ctx_r1 = i0.ɵɵnextContext();
|
|
83
87
|
i0.ɵɵadvance();
|
|
84
|
-
i0.ɵɵtextInterpolate(ctx_r1.formatDuration(ctx_r1.
|
|
88
|
+
i0.ɵɵtextInterpolate(ctx_r1.formatDuration(ctx_r1.getDuration()));
|
|
85
89
|
} }
|
|
86
90
|
function ExecutionNodeComponent_Conditional_19_Conditional_1_Template(rf, ctx) { if (rf & 1) {
|
|
87
|
-
i0.ɵɵelementStart(0, "span",
|
|
91
|
+
i0.ɵɵelementStart(0, "span", 24);
|
|
88
92
|
i0.ɵɵtext(1);
|
|
89
93
|
i0.ɵɵelementEnd();
|
|
90
94
|
} if (rf & 2) {
|
|
91
95
|
const ctx_r1 = i0.ɵɵnextContext(2);
|
|
92
96
|
i0.ɵɵadvance();
|
|
93
|
-
i0.ɵɵtextInterpolate1("", ctx_r1.
|
|
97
|
+
i0.ɵɵtextInterpolate1("", ctx_r1.getTokensUsed(), " tokens");
|
|
94
98
|
} }
|
|
95
99
|
function ExecutionNodeComponent_Conditional_19_Conditional_2_Template(rf, ctx) { if (rf & 1) {
|
|
96
|
-
i0.ɵɵelementStart(0, "span",
|
|
100
|
+
i0.ɵɵelementStart(0, "span", 25);
|
|
97
101
|
i0.ɵɵtext(1);
|
|
98
102
|
i0.ɵɵelementEnd();
|
|
99
103
|
} if (rf & 2) {
|
|
100
104
|
const ctx_r1 = i0.ɵɵnextContext(2);
|
|
101
105
|
i0.ɵɵadvance();
|
|
102
|
-
i0.ɵɵtextInterpolate1("$", ctx_r1.
|
|
106
|
+
i0.ɵɵtextInterpolate1("$", ctx_r1.getCost().toFixed(4), "");
|
|
103
107
|
} }
|
|
104
108
|
function ExecutionNodeComponent_Conditional_19_Template(rf, ctx) { if (rf & 1) {
|
|
105
109
|
i0.ɵɵelementStart(0, "span", 16);
|
|
106
|
-
i0.ɵɵtemplate(1, ExecutionNodeComponent_Conditional_19_Conditional_1_Template, 2, 1, "span",
|
|
110
|
+
i0.ɵɵtemplate(1, ExecutionNodeComponent_Conditional_19_Conditional_1_Template, 2, 1, "span", 24)(2, ExecutionNodeComponent_Conditional_19_Conditional_2_Template, 2, 1, "span", 25);
|
|
107
111
|
i0.ɵɵelementEnd();
|
|
108
112
|
} if (rf & 2) {
|
|
109
113
|
const ctx_r1 = i0.ɵɵnextContext();
|
|
110
114
|
i0.ɵɵadvance();
|
|
111
|
-
i0.ɵɵconditional(ctx_r1.
|
|
115
|
+
i0.ɵɵconditional(ctx_r1.getTokensUsed() ? 1 : -1);
|
|
116
|
+
i0.ɵɵadvance();
|
|
117
|
+
i0.ɵɵconditional(ctx_r1.getCost() ? 2 : -1);
|
|
118
|
+
} }
|
|
119
|
+
function ExecutionNodeComponent_Conditional_20_Template(rf, ctx) { if (rf & 1) {
|
|
120
|
+
const _r3 = i0.ɵɵgetCurrentView();
|
|
121
|
+
i0.ɵɵelementStart(0, "button", 26);
|
|
122
|
+
i0.ɵɵlistener("click", function ExecutionNodeComponent_Conditional_20_Template_button_click_0_listener($event) { i0.ɵɵrestoreView(_r3); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.onToggleDetails($event)); });
|
|
123
|
+
i0.ɵɵelement(1, "i", 27);
|
|
124
|
+
i0.ɵɵelementEnd();
|
|
125
|
+
} if (rf & 2) {
|
|
126
|
+
const ctx_r1 = i0.ɵɵnextContext();
|
|
127
|
+
i0.ɵɵproperty("title", ctx_r1.detailsExpanded ? "Hide details" : "Show details");
|
|
112
128
|
i0.ɵɵadvance();
|
|
113
|
-
i0.ɵɵ
|
|
129
|
+
i0.ɵɵclassProp("fa-info", !ctx_r1.detailsExpanded)("fa-times", ctx_r1.detailsExpanded);
|
|
114
130
|
} }
|
|
115
|
-
function
|
|
116
|
-
i0.ɵɵelementStart(0, "div",
|
|
131
|
+
function ExecutionNodeComponent_Conditional_21_Conditional_0_Conditional_1_Template(rf, ctx) { if (rf & 1) {
|
|
132
|
+
i0.ɵɵelementStart(0, "div", 31);
|
|
117
133
|
i0.ɵɵtext(1);
|
|
118
134
|
i0.ɵɵelementEnd();
|
|
119
135
|
} if (rf & 2) {
|
|
120
136
|
const ctx_r1 = i0.ɵɵnextContext(3);
|
|
121
137
|
i0.ɵɵadvance();
|
|
122
|
-
i0.ɵɵtextInterpolate(ctx_r1.
|
|
138
|
+
i0.ɵɵtextInterpolate(ctx_r1.step.StepName);
|
|
123
139
|
} }
|
|
124
|
-
function
|
|
125
|
-
i0.ɵɵelement(0, "div",
|
|
140
|
+
function ExecutionNodeComponent_Conditional_21_Conditional_0_Conditional_2_Template(rf, ctx) { if (rf & 1) {
|
|
141
|
+
i0.ɵɵelement(0, "div", 32);
|
|
126
142
|
} if (rf & 2) {
|
|
127
143
|
const ctx_r1 = i0.ɵɵnextContext(3);
|
|
128
|
-
i0.ɵɵproperty("innerHTML", ctx_r1.formatMarkdown(ctx_r1.
|
|
144
|
+
i0.ɵɵproperty("innerHTML", ctx_r1.formatMarkdown(ctx_r1.getDetailsMarkdown()), i0.ɵɵsanitizeHtml);
|
|
129
145
|
} }
|
|
130
|
-
function
|
|
131
|
-
i0.ɵɵelementStart(0, "div",
|
|
132
|
-
i0.ɵɵtemplate(1,
|
|
146
|
+
function ExecutionNodeComponent_Conditional_21_Conditional_0_Template(rf, ctx) { if (rf & 1) {
|
|
147
|
+
i0.ɵɵelementStart(0, "div", 28);
|
|
148
|
+
i0.ɵɵtemplate(1, ExecutionNodeComponent_Conditional_21_Conditional_0_Conditional_1_Template, 2, 1, "div", 31)(2, ExecutionNodeComponent_Conditional_21_Conditional_0_Conditional_2_Template, 1, 1, "div", 32);
|
|
133
149
|
i0.ɵɵelementEnd();
|
|
134
150
|
} if (rf & 2) {
|
|
135
151
|
const ctx_r1 = i0.ɵɵnextContext(2);
|
|
136
152
|
i0.ɵɵadvance();
|
|
137
153
|
i0.ɵɵconditional(ctx_r1.isNameTruncated() ? 1 : -1);
|
|
138
154
|
i0.ɵɵadvance();
|
|
139
|
-
i0.ɵɵconditional(ctx_r1.
|
|
155
|
+
i0.ɵɵconditional(ctx_r1.getDetailsMarkdown() ? 2 : -1);
|
|
140
156
|
} }
|
|
141
|
-
function
|
|
142
|
-
i0.ɵɵelementStart(0, "div",
|
|
143
|
-
i0.ɵɵelement(2, "i",
|
|
157
|
+
function ExecutionNodeComponent_Conditional_21_Conditional_2_Template(rf, ctx) { if (rf & 1) {
|
|
158
|
+
i0.ɵɵelementStart(0, "div", 29)(1, "div", 33);
|
|
159
|
+
i0.ɵɵelement(2, "i", 34);
|
|
144
160
|
i0.ɵɵtext(3, " Error ");
|
|
145
161
|
i0.ɵɵelementEnd();
|
|
146
|
-
i0.ɵɵelementStart(4, "div",
|
|
162
|
+
i0.ɵɵelementStart(4, "div", 35);
|
|
147
163
|
i0.ɵɵtext(5);
|
|
148
164
|
i0.ɵɵelementEnd()();
|
|
149
165
|
} if (rf & 2) {
|
|
150
|
-
const ctx_r1 = i0.ɵɵnextContext(
|
|
166
|
+
const ctx_r1 = i0.ɵɵnextContext(2);
|
|
151
167
|
i0.ɵɵadvance(5);
|
|
152
|
-
i0.ɵɵtextInterpolate(ctx_r1.
|
|
168
|
+
i0.ɵɵtextInterpolate(ctx_r1.step.ErrorMessage);
|
|
153
169
|
} }
|
|
154
|
-
function
|
|
155
|
-
i0.ɵɵelementStart(0, "div",
|
|
156
|
-
i0.ɵɵelement(2, "i",
|
|
170
|
+
function ExecutionNodeComponent_Conditional_21_Conditional_3_Template(rf, ctx) { if (rf & 1) {
|
|
171
|
+
i0.ɵɵelementStart(0, "div", 30)(1, "div", 33);
|
|
172
|
+
i0.ɵɵelement(2, "i", 36);
|
|
157
173
|
i0.ɵɵtext(3, " Input ");
|
|
158
174
|
i0.ɵɵelementEnd();
|
|
159
|
-
i0.ɵɵelementStart(4, "div",
|
|
175
|
+
i0.ɵɵelementStart(4, "div", 35);
|
|
160
176
|
i0.ɵɵtext(5);
|
|
161
177
|
i0.ɵɵelementEnd()();
|
|
162
178
|
} if (rf & 2) {
|
|
163
|
-
const ctx_r1 = i0.ɵɵnextContext(
|
|
179
|
+
const ctx_r1 = i0.ɵɵnextContext(2);
|
|
164
180
|
i0.ɵɵadvance(5);
|
|
165
|
-
i0.ɵɵtextInterpolate(ctx_r1.
|
|
181
|
+
i0.ɵɵtextInterpolate(ctx_r1.getInputPreview());
|
|
166
182
|
} }
|
|
167
|
-
function
|
|
168
|
-
i0.ɵɵelementStart(0, "div",
|
|
169
|
-
i0.ɵɵelement(2, "i",
|
|
183
|
+
function ExecutionNodeComponent_Conditional_21_Conditional_4_Template(rf, ctx) { if (rf & 1) {
|
|
184
|
+
i0.ɵɵelementStart(0, "div", 30)(1, "div", 33);
|
|
185
|
+
i0.ɵɵelement(2, "i", 37);
|
|
170
186
|
i0.ɵɵtext(3, " Output ");
|
|
171
187
|
i0.ɵɵelementEnd();
|
|
172
|
-
i0.ɵɵelementStart(4, "div",
|
|
188
|
+
i0.ɵɵelementStart(4, "div", 35);
|
|
173
189
|
i0.ɵɵtext(5);
|
|
174
190
|
i0.ɵɵelementEnd()();
|
|
175
191
|
} if (rf & 2) {
|
|
176
|
-
const ctx_r1 = i0.ɵɵnextContext(
|
|
192
|
+
const ctx_r1 = i0.ɵɵnextContext(2);
|
|
177
193
|
i0.ɵɵadvance(5);
|
|
178
|
-
i0.ɵɵtextInterpolate(ctx_r1.
|
|
194
|
+
i0.ɵɵtextInterpolate(ctx_r1.getOutputPreview());
|
|
179
195
|
} }
|
|
180
|
-
function
|
|
181
|
-
i0.ɵɵelementStart(0, "div",
|
|
182
|
-
i0.ɵɵ
|
|
196
|
+
function ExecutionNodeComponent_Conditional_21_Conditional_5_Template(rf, ctx) { if (rf & 1) {
|
|
197
|
+
i0.ɵɵelementStart(0, "div", 30)(1, "div", 35);
|
|
198
|
+
i0.ɵɵtext(2, "No additional details available for this step.");
|
|
199
|
+
i0.ɵɵelementEnd()();
|
|
200
|
+
} }
|
|
201
|
+
function ExecutionNodeComponent_Conditional_21_Template(rf, ctx) { if (rf & 1) {
|
|
202
|
+
i0.ɵɵtemplate(0, ExecutionNodeComponent_Conditional_21_Conditional_0_Template, 3, 2, "div", 28);
|
|
203
|
+
i0.ɵɵelementStart(1, "div", 18);
|
|
204
|
+
i0.ɵɵtemplate(2, ExecutionNodeComponent_Conditional_21_Conditional_2_Template, 6, 1, "div", 29)(3, ExecutionNodeComponent_Conditional_21_Conditional_3_Template, 6, 1, "div", 30)(4, ExecutionNodeComponent_Conditional_21_Conditional_4_Template, 6, 1, "div", 30)(5, ExecutionNodeComponent_Conditional_21_Conditional_5_Template, 3, 0, "div", 30);
|
|
183
205
|
i0.ɵɵelementEnd();
|
|
184
206
|
} if (rf & 2) {
|
|
185
|
-
const ctx_r1 = i0.ɵɵnextContext(
|
|
186
|
-
i0.ɵɵ
|
|
187
|
-
i0.ɵɵ
|
|
207
|
+
const ctx_r1 = i0.ɵɵnextContext();
|
|
208
|
+
i0.ɵɵconditional(ctx_r1.getDetailsMarkdown() || ctx_r1.isNameTruncated() ? 0 : -1);
|
|
209
|
+
i0.ɵɵadvance(2);
|
|
210
|
+
i0.ɵɵconditional(ctx_r1.step.ErrorMessage ? 2 : -1);
|
|
188
211
|
i0.ɵɵadvance();
|
|
189
|
-
i0.ɵɵconditional(ctx_r1.
|
|
212
|
+
i0.ɵɵconditional(ctx_r1.getInputPreview() ? 3 : -1);
|
|
190
213
|
i0.ɵɵadvance();
|
|
191
|
-
i0.ɵɵconditional(ctx_r1.
|
|
192
|
-
} }
|
|
193
|
-
function ExecutionNodeComponent_Conditional_20_Template(rf, ctx) { if (rf & 1) {
|
|
194
|
-
i0.ɵɵtemplate(0, ExecutionNodeComponent_Conditional_20_Conditional_0_Template, 3, 2, "div", 24)(1, ExecutionNodeComponent_Conditional_20_Conditional_1_Template, 4, 3, "div", 25);
|
|
195
|
-
} if (rf & 2) {
|
|
196
|
-
const ctx_r1 = i0.ɵɵnextContext();
|
|
197
|
-
i0.ɵɵconditional(ctx_r1.node.detailsMarkdown || ctx_r1.isNameTruncated() ? 0 : -1);
|
|
214
|
+
i0.ɵɵconditional(ctx_r1.getOutputPreview() ? 4 : -1);
|
|
198
215
|
i0.ɵɵadvance();
|
|
199
|
-
i0.ɵɵconditional(ctx_r1.
|
|
200
|
-
} }
|
|
201
|
-
function ExecutionNodeComponent_Conditional_21_For_1_Template(rf, ctx) { if (rf & 1) {
|
|
202
|
-
const _r3 = i0.ɵɵgetCurrentView();
|
|
203
|
-
i0.ɵɵelementStart(0, "mj-execution-node", 36);
|
|
204
|
-
i0.ɵɵlistener("toggleNode", function ExecutionNodeComponent_Conditional_21_For_1_Template_mj_execution_node_toggleNode_0_listener($event) { i0.ɵɵrestoreView(_r3); const ctx_r1 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r1.toggleNode.emit($event)); })("userInteracted", function ExecutionNodeComponent_Conditional_21_For_1_Template_mj_execution_node_userInteracted_0_listener() { i0.ɵɵrestoreView(_r3); const ctx_r1 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r1.userInteracted.emit()); });
|
|
205
|
-
i0.ɵɵelementEnd();
|
|
206
|
-
} if (rf & 2) {
|
|
207
|
-
const child_r4 = ctx.$implicit;
|
|
208
|
-
i0.ɵɵproperty("node", child_r4);
|
|
209
|
-
} }
|
|
210
|
-
function ExecutionNodeComponent_Conditional_21_Template(rf, ctx) { if (rf & 1) {
|
|
211
|
-
i0.ɵɵrepeaterCreate(0, ExecutionNodeComponent_Conditional_21_For_1_Template, 1, 1, "mj-execution-node", 35, _forTrack0);
|
|
212
|
-
} if (rf & 2) {
|
|
213
|
-
const ctx_r1 = i0.ɵɵnextContext();
|
|
214
|
-
i0.ɵɵrepeater(ctx_r1.node.children);
|
|
216
|
+
i0.ɵɵconditional(!ctx_r1.step.ErrorMessage && !ctx_r1.getInputPreview() && !ctx_r1.getOutputPreview() && !ctx_r1.getDetailsMarkdown() && !ctx_r1.isNameTruncated() ? 5 : -1);
|
|
215
217
|
} }
|
|
216
218
|
export class ExecutionNodeComponent {
|
|
217
219
|
constructor() {
|
|
220
|
+
this.depth = 0;
|
|
221
|
+
this.agentPath = [];
|
|
222
|
+
this.expanded = false;
|
|
223
|
+
this.detailsExpanded = false;
|
|
218
224
|
this.toggleNode = new EventEmitter();
|
|
225
|
+
this.toggleDetails = new EventEmitter();
|
|
219
226
|
this.userInteracted = new EventEmitter();
|
|
220
227
|
}
|
|
221
|
-
hasExpandableContent() {
|
|
222
|
-
return !!(this.node.children && this.node.children.length > 0) ||
|
|
223
|
-
this.node.type === 'sub-agent' ||
|
|
224
|
-
this.node.type === 'action' ||
|
|
225
|
-
!!this.node.inputPreview ||
|
|
226
|
-
!!this.node.outputPreview ||
|
|
227
|
-
!!this.node.error ||
|
|
228
|
-
!!this.node.detailsMarkdown;
|
|
229
|
-
}
|
|
230
228
|
hasChildren() {
|
|
231
|
-
return
|
|
229
|
+
return this.step.StepType === 'Sub-Agent' &&
|
|
230
|
+
!!this.step.SubAgentRun?.Steps &&
|
|
231
|
+
this.step.SubAgentRun.Steps.length > 0;
|
|
232
|
+
}
|
|
233
|
+
onToggleChildren(event) {
|
|
234
|
+
if (event) {
|
|
235
|
+
event.stopPropagation();
|
|
236
|
+
}
|
|
237
|
+
if (this.hasChildren()) {
|
|
238
|
+
this.toggleNode.emit();
|
|
239
|
+
this.userInteracted.emit();
|
|
240
|
+
}
|
|
232
241
|
}
|
|
233
|
-
|
|
242
|
+
onToggleDetails(event) {
|
|
234
243
|
if (event) {
|
|
235
244
|
event.stopPropagation();
|
|
236
245
|
}
|
|
237
|
-
if (this.
|
|
238
|
-
this.
|
|
246
|
+
if (this.hasNodeDetails()) {
|
|
247
|
+
this.toggleDetails.emit();
|
|
239
248
|
this.userInteracted.emit();
|
|
240
249
|
}
|
|
241
250
|
}
|
|
242
251
|
onDoubleClick() {
|
|
243
|
-
if (this.
|
|
244
|
-
this.toggleNode.emit(
|
|
252
|
+
if (this.hasChildren()) {
|
|
253
|
+
this.toggleNode.emit();
|
|
245
254
|
this.userInteracted.emit();
|
|
246
255
|
}
|
|
247
256
|
}
|
|
257
|
+
hasNodeDetails() {
|
|
258
|
+
return !!this.step.InputData ||
|
|
259
|
+
!!this.step.OutputData ||
|
|
260
|
+
!!this.step.ErrorMessage ||
|
|
261
|
+
!!this.getDetailsMarkdown() ||
|
|
262
|
+
this.isNameTruncated();
|
|
263
|
+
}
|
|
248
264
|
getTruncatedName() {
|
|
249
265
|
const maxLength = 120;
|
|
250
|
-
|
|
251
|
-
|
|
266
|
+
const name = this.getStepName();
|
|
267
|
+
if (name.length <= maxLength) {
|
|
268
|
+
return name;
|
|
252
269
|
}
|
|
253
|
-
return
|
|
270
|
+
return name.substring(0, maxLength) + '...';
|
|
254
271
|
}
|
|
255
272
|
isNameTruncated() {
|
|
256
|
-
return this.
|
|
273
|
+
return this.step.StepName.length > 120;
|
|
257
274
|
}
|
|
258
275
|
formatDuration(ms) {
|
|
259
276
|
if (ms < 1000)
|
|
@@ -265,13 +282,170 @@ export class ExecutionNodeComponent {
|
|
|
265
282
|
return `${minutes}m ${seconds}s`;
|
|
266
283
|
}
|
|
267
284
|
getNodeTitle() {
|
|
268
|
-
if (this.
|
|
269
|
-
return `Sub-agent: ${this.
|
|
285
|
+
if (this.step.StepType === 'Sub-Agent' && this.getAgentName()) {
|
|
286
|
+
return `Sub-agent: ${this.getAgentName()}`;
|
|
287
|
+
}
|
|
288
|
+
if (this.step.StepType === 'Actions' && this.getActionName()) {
|
|
289
|
+
return `Action: ${this.getActionName()}`;
|
|
290
|
+
}
|
|
291
|
+
return this.step.StepType;
|
|
292
|
+
}
|
|
293
|
+
// Getter methods for step data
|
|
294
|
+
getStepName() {
|
|
295
|
+
// Extract just the first line if the name contains markdown
|
|
296
|
+
const lines = this.step.StepName.split('\n');
|
|
297
|
+
return lines[0].trim();
|
|
298
|
+
}
|
|
299
|
+
getStepTypeClass() {
|
|
300
|
+
const typeMap = {
|
|
301
|
+
'Validation': 'validation',
|
|
302
|
+
'Prompt': 'prompt',
|
|
303
|
+
'Actions': 'action',
|
|
304
|
+
'Sub-Agent': 'sub-agent',
|
|
305
|
+
'Decision': 'decision',
|
|
306
|
+
'Chat': 'chat'
|
|
307
|
+
};
|
|
308
|
+
return typeMap[this.step.StepType] || 'prompt';
|
|
309
|
+
}
|
|
310
|
+
getStatusClass() {
|
|
311
|
+
const statusMap = {
|
|
312
|
+
'Pending': 'pending',
|
|
313
|
+
'Running': 'running',
|
|
314
|
+
'Completed': 'completed',
|
|
315
|
+
'Failed': 'failed',
|
|
316
|
+
'Cancelled': 'failed',
|
|
317
|
+
'Paused': 'pending'
|
|
318
|
+
};
|
|
319
|
+
// Use override if provided, otherwise use actual status
|
|
320
|
+
const status = this.overrideDisplayStatus || this.step.Status;
|
|
321
|
+
return statusMap[status] || 'pending';
|
|
322
|
+
}
|
|
323
|
+
getDuration() {
|
|
324
|
+
if (!this.step.StartedAt || !this.step.CompletedAt)
|
|
325
|
+
return 0;
|
|
326
|
+
return new Date(this.step.CompletedAt).getTime() - new Date(this.step.StartedAt).getTime();
|
|
327
|
+
}
|
|
328
|
+
getTokensUsed() {
|
|
329
|
+
// Check if this is a prompt step with token data
|
|
330
|
+
if (this.step.StepType === 'Prompt' && this.step.PromptRun) {
|
|
331
|
+
return this.step.PromptRun.TokensUsed || undefined;
|
|
332
|
+
}
|
|
333
|
+
return undefined;
|
|
334
|
+
}
|
|
335
|
+
getCost() {
|
|
336
|
+
// Check if this is a prompt step with cost data
|
|
337
|
+
if (this.step.StepType === 'Prompt' && this.step.PromptRun) {
|
|
338
|
+
return this.step.PromptRun.TotalCost || undefined;
|
|
339
|
+
}
|
|
340
|
+
return undefined;
|
|
341
|
+
}
|
|
342
|
+
getDetailsMarkdown() {
|
|
343
|
+
// Check if the step name contains markdown details after the first line
|
|
344
|
+
const lines = this.step.StepName.split('\n');
|
|
345
|
+
if (lines.length > 1) {
|
|
346
|
+
return lines.slice(1).join('\n').trim();
|
|
347
|
+
}
|
|
348
|
+
return undefined;
|
|
349
|
+
}
|
|
350
|
+
getInputPreview() {
|
|
351
|
+
if (!this.step.InputData)
|
|
352
|
+
return undefined;
|
|
353
|
+
try {
|
|
354
|
+
const parsed = JSON.parse(this.step.InputData);
|
|
355
|
+
// Extract meaningful preview
|
|
356
|
+
if (parsed.promptName)
|
|
357
|
+
return `Prompt: ${parsed.promptName}`;
|
|
358
|
+
if (parsed.actionName)
|
|
359
|
+
return `Action: ${parsed.actionName}`;
|
|
360
|
+
if (parsed.subAgentName)
|
|
361
|
+
return `Sub-agent: ${parsed.subAgentName}`;
|
|
362
|
+
if (parsed.message)
|
|
363
|
+
return parsed.message;
|
|
364
|
+
if (parsed.userMessage)
|
|
365
|
+
return parsed.userMessage;
|
|
366
|
+
// Fallback to stringified preview
|
|
367
|
+
const str = JSON.stringify(parsed, null, 2);
|
|
368
|
+
return str.length > 500 ? str.substring(0, 500) + '...' : str;
|
|
369
|
+
}
|
|
370
|
+
catch {
|
|
371
|
+
return typeof this.step.InputData === 'string' ? this.step.InputData : JSON.stringify(this.step.InputData);
|
|
372
|
+
}
|
|
373
|
+
}
|
|
374
|
+
getOutputPreview() {
|
|
375
|
+
if (!this.step.OutputData)
|
|
376
|
+
return undefined;
|
|
377
|
+
try {
|
|
378
|
+
const parsed = JSON.parse(this.step.OutputData);
|
|
379
|
+
// Show action results clearly
|
|
380
|
+
if (parsed.actionResult) {
|
|
381
|
+
const result = parsed.actionResult;
|
|
382
|
+
let preview = '';
|
|
383
|
+
if (result.success !== undefined) {
|
|
384
|
+
preview += `Success: ${result.success}\n`;
|
|
385
|
+
}
|
|
386
|
+
if (result.resultCode) {
|
|
387
|
+
preview += `Result Code: ${result.resultCode}\n`;
|
|
388
|
+
}
|
|
389
|
+
if (result.message) {
|
|
390
|
+
preview += `Message: ${result.message}\n`;
|
|
391
|
+
}
|
|
392
|
+
if (result.result) {
|
|
393
|
+
preview += `Result: ${typeof result.result === 'object' ? JSON.stringify(result.result, null, 2) : result.result}`;
|
|
394
|
+
}
|
|
395
|
+
return preview.trim();
|
|
396
|
+
}
|
|
397
|
+
// Show prompt results
|
|
398
|
+
if (parsed.promptResult) {
|
|
399
|
+
const result = parsed.promptResult;
|
|
400
|
+
let preview = '';
|
|
401
|
+
if (result.success !== undefined) {
|
|
402
|
+
preview += `Success: ${result.success}\n`;
|
|
403
|
+
}
|
|
404
|
+
if (result.content) {
|
|
405
|
+
preview += `Content: ${result.content}`;
|
|
406
|
+
}
|
|
407
|
+
return preview;
|
|
408
|
+
}
|
|
409
|
+
// Fallback
|
|
410
|
+
const str = JSON.stringify(parsed, null, 2);
|
|
411
|
+
return str.length > 500 ? str.substring(0, 500) + '...' : str;
|
|
270
412
|
}
|
|
271
|
-
|
|
272
|
-
return
|
|
413
|
+
catch {
|
|
414
|
+
return typeof this.step.OutputData === 'string' ? this.step.OutputData : JSON.stringify(this.step.OutputData);
|
|
415
|
+
}
|
|
416
|
+
}
|
|
417
|
+
// Methods to extract metadata from input/output data
|
|
418
|
+
getAgentName() {
|
|
419
|
+
if (this.step.StepType === 'Sub-Agent' && this.step.SubAgentRun) {
|
|
420
|
+
return this.step.SubAgentRun.Agent || undefined;
|
|
421
|
+
}
|
|
422
|
+
return this.parseMetadata('subAgentName');
|
|
423
|
+
}
|
|
424
|
+
getAgentIconClass() {
|
|
425
|
+
return this.parseMetadata('subAgentIconClass') || this.parseMetadata('agentIconClass');
|
|
426
|
+
}
|
|
427
|
+
getAgentLogoURL() {
|
|
428
|
+
return this.parseMetadata('subAgentLogoURL') || this.parseMetadata('agentLogoURL');
|
|
429
|
+
}
|
|
430
|
+
getActionName() {
|
|
431
|
+
if (this.step.StepType === 'Actions' && this.step.ActionExecutionLog) {
|
|
432
|
+
return this.step.ActionExecutionLog.Action;
|
|
433
|
+
}
|
|
434
|
+
return this.parseMetadata('actionName');
|
|
435
|
+
}
|
|
436
|
+
getActionIconClass() {
|
|
437
|
+
return this.parseMetadata('actionIconClass');
|
|
438
|
+
}
|
|
439
|
+
parseMetadata(key) {
|
|
440
|
+
if (!this.step.InputData)
|
|
441
|
+
return undefined;
|
|
442
|
+
try {
|
|
443
|
+
const parsed = JSON.parse(this.step.InputData);
|
|
444
|
+
return parsed[key];
|
|
445
|
+
}
|
|
446
|
+
catch {
|
|
447
|
+
return undefined;
|
|
273
448
|
}
|
|
274
|
-
return this.node.type;
|
|
275
449
|
}
|
|
276
450
|
formatMarkdown(markdown) {
|
|
277
451
|
// Basic markdown formatting
|
|
@@ -302,72 +476,77 @@ export class ExecutionNodeComponent {
|
|
|
302
476
|
return html;
|
|
303
477
|
}
|
|
304
478
|
static { this.ɵfac = function ExecutionNodeComponent_Factory(t) { return new (t || ExecutionNodeComponent)(); }; }
|
|
305
|
-
static { this.ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: ExecutionNodeComponent, selectors: [["mj-execution-node"]], inputs: {
|
|
479
|
+
static { this.ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: ExecutionNodeComponent, selectors: [["mj-execution-node"]], inputs: { step: "step", depth: "depth", agentPath: "agentPath", expanded: "expanded", detailsExpanded: "detailsExpanded", overrideDisplayStatus: "overrideDisplayStatus" }, outputs: { toggleNode: "toggleNode", toggleDetails: "toggleDetails", userInteracted: "userInteracted" }, decls: 22, vars: 20, consts: [[1, "tree-node"], [1, "node-header", 3, "dblclick"], ["title", "Toggle children", 1, "expand-icon", "fa-solid", 3, "fa-chevron-down", "fa-chevron-right"], [1, "status-icon"], [1, "fa-regular", "fa-circle"], [1, "fa-solid", "fa-spinner", "fa-spin"], [1, "fa-solid", "fa-check-circle"], [1, "fa-solid", "fa-times-circle"], [1, "type-icon", 3, "title"], [1, "fa-solid", "fa-shield-halved"], [1, "fa-solid", "fa-brain"], [1, "fa-solid", "fa-code-branch"], [1, "fa-solid", "fa-comments"], [1, "node-name"], [2, "color", "#666", "margin-right", "8px"], [1, "node-duration"], [1, "node-metrics"], [1, "details-toggle-btn", 3, "title"], [1, "node-details"], ["title", "Toggle children", 1, "expand-icon", "fa-solid", 3, "click"], [3, "class"], [1, "fa-solid", "fa-bolt"], [1, "agent-logo-icon", 3, "src", "alt"], [1, "fa-solid", "fa-sitemap"], [1, "tokens"], [1, "cost"], [1, "details-toggle-btn", 3, "click", "title"], [1, "fa-solid"], [1, "markdown-details"], [1, "detail-section", "error"], [1, "detail-section"], [1, "full-name"], [1, "detail-content", "markdown", 3, "innerHTML"], [1, "detail-label"], [1, "fa-solid", "fa-exclamation-triangle"], [1, "detail-content"], [1, "fa-solid", "fa-sign-in-alt"], [1, "fa-solid", "fa-sign-out-alt"]], template: function ExecutionNodeComponent_Template(rf, ctx) { if (rf & 1) {
|
|
306
480
|
i0.ɵɵelementStart(0, "div", 0)(1, "div", 1);
|
|
307
481
|
i0.ɵɵlistener("dblclick", function ExecutionNodeComponent_Template_div_dblclick_1_listener() { return ctx.onDoubleClick(); });
|
|
308
|
-
i0.ɵɵtemplate(2, ExecutionNodeComponent_Conditional_2_Template, 1, 4, "i", 2)
|
|
309
|
-
i0.ɵɵelementStart(
|
|
310
|
-
i0.ɵɵtemplate(
|
|
482
|
+
i0.ɵɵtemplate(2, ExecutionNodeComponent_Conditional_2_Template, 1, 4, "i", 2);
|
|
483
|
+
i0.ɵɵelementStart(3, "span", 3);
|
|
484
|
+
i0.ɵɵtemplate(4, ExecutionNodeComponent_Case_4_Template, 1, 0, "i", 4)(5, ExecutionNodeComponent_Case_5_Template, 1, 0, "i", 5)(6, ExecutionNodeComponent_Case_6_Template, 1, 0, "i", 6)(7, ExecutionNodeComponent_Case_7_Template, 1, 0, "i", 7);
|
|
311
485
|
i0.ɵɵelementEnd();
|
|
312
|
-
i0.ɵɵelementStart(
|
|
313
|
-
i0.ɵɵtemplate(
|
|
486
|
+
i0.ɵɵelementStart(8, "span", 8);
|
|
487
|
+
i0.ɵɵtemplate(9, ExecutionNodeComponent_Case_9_Template, 1, 0, "i", 9)(10, ExecutionNodeComponent_Case_10_Template, 1, 0, "i", 10)(11, ExecutionNodeComponent_Case_11_Template, 2, 1)(12, ExecutionNodeComponent_Case_12_Template, 3, 1)(13, ExecutionNodeComponent_Case_13_Template, 1, 0, "i", 11)(14, ExecutionNodeComponent_Case_14_Template, 1, 0, "i", 12);
|
|
314
488
|
i0.ɵɵelementEnd();
|
|
315
|
-
i0.ɵɵelementStart(
|
|
489
|
+
i0.ɵɵelementStart(15, "span", 13);
|
|
490
|
+
i0.ɵɵtemplate(16, ExecutionNodeComponent_Conditional_16_Template, 2, 1, "small", 14);
|
|
316
491
|
i0.ɵɵtext(17);
|
|
317
492
|
i0.ɵɵelementEnd();
|
|
318
|
-
i0.ɵɵtemplate(18, ExecutionNodeComponent_Conditional_18_Template, 2, 1, "span", 15)(19, ExecutionNodeComponent_Conditional_19_Template, 3, 2, "span", 16);
|
|
493
|
+
i0.ɵɵtemplate(18, ExecutionNodeComponent_Conditional_18_Template, 2, 1, "span", 15)(19, ExecutionNodeComponent_Conditional_19_Template, 3, 2, "span", 16)(20, ExecutionNodeComponent_Conditional_20_Template, 2, 5, "button", 17);
|
|
319
494
|
i0.ɵɵelementEnd();
|
|
320
|
-
i0.ɵɵtemplate(
|
|
495
|
+
i0.ɵɵtemplate(21, ExecutionNodeComponent_Conditional_21_Template, 6, 5, "div", 18);
|
|
321
496
|
i0.ɵɵelementEnd();
|
|
322
497
|
} if (rf & 2) {
|
|
323
|
-
let tmp_4_0;
|
|
324
498
|
let tmp_6_0;
|
|
325
|
-
|
|
326
|
-
i0.ɵɵ
|
|
327
|
-
i0.ɵɵ
|
|
328
|
-
i0.ɵɵconditional(ctx.hasExpandableContent() ? 2 : 3);
|
|
499
|
+
let tmp_8_0;
|
|
500
|
+
i0.ɵɵclassMap("depth-" + ctx.depth + " type-" + ctx.getStepTypeClass());
|
|
501
|
+
i0.ɵɵclassProp("expanded", ctx.expanded)("has-children", ctx.hasChildren())("details-expanded", ctx.detailsExpanded);
|
|
329
502
|
i0.ɵɵadvance(2);
|
|
330
|
-
i0.ɵɵ
|
|
503
|
+
i0.ɵɵconditional(ctx.hasChildren() ? 2 : -1);
|
|
331
504
|
i0.ɵɵadvance();
|
|
332
|
-
i0.ɵɵ
|
|
505
|
+
i0.ɵɵclassMap("status-" + ctx.getStatusClass());
|
|
506
|
+
i0.ɵɵadvance();
|
|
507
|
+
i0.ɵɵconditional((tmp_6_0 = ctx.getStatusClass()) === "pending" ? 4 : tmp_6_0 === "running" ? 5 : tmp_6_0 === "completed" ? 6 : tmp_6_0 === "failed" ? 7 : -1);
|
|
333
508
|
i0.ɵɵadvance(4);
|
|
334
509
|
i0.ɵɵproperty("title", ctx.getNodeTitle());
|
|
335
510
|
i0.ɵɵadvance();
|
|
336
|
-
i0.ɵɵconditional((
|
|
511
|
+
i0.ɵɵconditional((tmp_8_0 = ctx.getStepTypeClass()) === "validation" ? 9 : tmp_8_0 === "prompt" ? 10 : tmp_8_0 === "action" ? 11 : tmp_8_0 === "sub-agent" ? 12 : tmp_8_0 === "decision" ? 13 : tmp_8_0 === "chat" ? 14 : -1);
|
|
337
512
|
i0.ɵɵadvance(7);
|
|
513
|
+
i0.ɵɵconditional(ctx.step.StepType === "Sub-Agent" && ctx.depth > 0 ? 16 : -1);
|
|
514
|
+
i0.ɵɵadvance();
|
|
338
515
|
i0.ɵɵtextInterpolate1(" ", ctx.getTruncatedName(), " ");
|
|
339
516
|
i0.ɵɵadvance();
|
|
340
|
-
i0.ɵɵconditional(ctx.
|
|
517
|
+
i0.ɵɵconditional(ctx.getDuration() ? 18 : -1);
|
|
341
518
|
i0.ɵɵadvance();
|
|
342
|
-
i0.ɵɵconditional(ctx.
|
|
519
|
+
i0.ɵɵconditional(ctx.getTokensUsed() || ctx.getCost() ? 19 : -1);
|
|
343
520
|
i0.ɵɵadvance();
|
|
344
|
-
i0.ɵɵconditional(ctx.
|
|
521
|
+
i0.ɵɵconditional(ctx.hasNodeDetails() ? 20 : -1);
|
|
345
522
|
i0.ɵɵadvance();
|
|
346
|
-
i0.ɵɵconditional(ctx.
|
|
347
|
-
} }, dependencies: [ExecutionNodeComponent, CommonModule], styles: ["[_nghost-%COMP%] {\n display: block;\n width: 100%;\n }\n \n .tree-node[_ngcontent-%COMP%] {\n margin-bottom: 4px;\n }\n \n .node-header[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 8px;\n padding: 8px 12px;\n background: #f8f9fa;\n border: 1px solid #e0e0e0;\n border-radius: 6px;\n transition: all 0.2s ease;\n user-select: none;\n }\n \n .node-header[_ngcontent-%COMP%]:hover {\n background: #e8f0fe;\n border-color: #2196f3;\n }\n \n .expand-icon[_ngcontent-%COMP%] {\n width: 20px;\n height: 20px;\n display: flex;\n align-items: center;\n justify-content: center;\n text-align: center;\n color: #666;\n font-size: 10px;\n cursor: pointer;\n border-radius: 3px;\n transition: all 0.2s ease;\n }\n \n .expand-icon[_ngcontent-%COMP%]:hover {\n background: #e0e0e0;\n color: #333;\n }\n \n .expand-spacer[_ngcontent-%COMP%] {\n width: 20px;\n text-align: center;\n }\n \n .status-icon[_ngcontent-%COMP%] {\n width: 20px;\n text-align: center;\n font-size: 14px;\n }\n \n .status-pending[_ngcontent-%COMP%] { color: #999; }\n .status-running[_ngcontent-%COMP%] { color: #2196f3; }\n .status-completed[_ngcontent-%COMP%] { color: #4caf50; }\n .status-failed[_ngcontent-%COMP%] { color: #f44336; }\n \n .type-icon[_ngcontent-%COMP%] {\n width: 20px;\n text-align: center;\n display: flex;\n align-items: center;\n justify-content: center;\n font-size: 14px;\n color: #666;\n }\n \n .agent-logo-icon[_ngcontent-%COMP%] {\n width: 16px;\n height: 16px;\n object-fit: cover;\n border-radius: 3px;\n }\n \n .node-name[_ngcontent-%COMP%] {\n flex: 1;\n font-size: 13px;\n font-weight: 500;\n color: #1a1a1a;\n }\n \n \n .node-duration[_ngcontent-%COMP%] {\n font-size: 12px;\n color: #666;\n font-weight: 500;\n }\n \n .node-metrics[_ngcontent-%COMP%] {\n display: flex;\n gap: 12px;\n font-size: 12px;\n }\n \n .tokens[_ngcontent-%COMP%] {\n color: #666;\n }\n \n .cost[_ngcontent-%COMP%] {\n color: #2196f3;\n font-weight: 500;\n }\n \n .node-details[_ngcontent-%COMP%] {\n margin: 8px 0 8px 44px;\n padding: 12px;\n background: #f5f5f5;\n border-radius: 4px;\n font-size: 12px;\n }\n \n .detail-section[_ngcontent-%COMP%] {\n margin-bottom: 8px;\n }\n \n .detail-section[_ngcontent-%COMP%]:last-child {\n margin-bottom: 0;\n }\n \n .detail-section.error[_ngcontent-%COMP%] {\n color: #d32f2f;\n }\n \n .detail-label[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 6px;\n font-weight: 600;\n margin-bottom: 4px;\n color: #555;\n }\n \n .detail-content[_ngcontent-%COMP%] {\n white-space: pre-wrap;\n word-break: break-word;\n color: #333;\n line-height: 1.4;\n }\n \n .markdown-details[_ngcontent-%COMP%] {\n margin: 8px 0 8px 44px;\n padding: 12px;\n background: #f9f9f9;\n border-left: 3px solid #2196f3;\n border-radius: 0 4px 4px 0;\n font-size: 13px;\n }\n \n .markdown[_ngcontent-%COMP%] h3[_ngcontent-%COMP%], .markdown[_ngcontent-%COMP%] h4[_ngcontent-%COMP%] {\n margin: 8px 0 4px 0;\n color: #1a1a1a;\n }\n \n .markdown[_ngcontent-%COMP%] h3[_ngcontent-%COMP%] {\n font-size: 14px;\n }\n \n .markdown[_ngcontent-%COMP%] h4[_ngcontent-%COMP%] {\n font-size: 13px;\n }\n \n .markdown[_ngcontent-%COMP%] ul[_ngcontent-%COMP%] {\n margin: 4px 0;\n padding-left: 20px;\n }\n \n .markdown[_ngcontent-%COMP%] li[_ngcontent-%COMP%] {\n margin: 2px 0;\n }\n \n .markdown[_ngcontent-%COMP%] code[_ngcontent-%COMP%] {\n background: #e8e8e8;\n padding: 1px 4px;\n border-radius: 3px;\n font-size: 12px;\n }\n \n .markdown[_ngcontent-%COMP%] pre[_ngcontent-%COMP%] {\n background: #f5f5f5;\n padding: 8px;\n border-radius: 4px;\n overflow-x: auto;\n margin: 4px 0;\n }\n \n .markdown[_ngcontent-%COMP%] pre[_ngcontent-%COMP%] code[_ngcontent-%COMP%] {\n background: none;\n padding: 0;\n }\n \n .markdown[_ngcontent-%COMP%] strong[_ngcontent-%COMP%] {\n font-weight: 600;\n color: #1a1a1a;\n }\n \n .markdown[_ngcontent-%COMP%] em[_ngcontent-%COMP%] {\n font-style: italic;\n color: #555;\n }\n \n .full-name[_ngcontent-%COMP%] {\n font-weight: 600;\n color: #1a1a1a;\n margin-bottom: 8px;\n padding-bottom: 8px;\n border-bottom: 1px solid #e0e0e0;\n word-wrap: break-word;\n }"] }); }
|
|
523
|
+
i0.ɵɵconditional(ctx.detailsExpanded ? 21 : -1);
|
|
524
|
+
} }, styles: ["[_nghost-%COMP%] {\n display: block;\n width: 100%;\n }\n \n \n\n .tree-node[_ngcontent-%COMP%] {\n margin: 4px 0;\n position: relative;\n }\n \n \n\n .depth-0[_ngcontent-%COMP%] { \n margin-left: 0;\n position: relative;\n z-index: 2;\n }\n .depth-0[_ngcontent-%COMP%]::after {\n display: none;\n }\n .depth-0[_ngcontent-%COMP%] .node-header[_ngcontent-%COMP%] { \n background: #f8f9fa;\n border: 2px solid #e0e0e0;\n font-weight: 600;\n position: relative;\n z-index: 10;\n }\n \n \n\n .depth-1[_ngcontent-%COMP%] {\n margin-left: 24px;\n }\n .depth-1[_ngcontent-%COMP%] .node-header[_ngcontent-%COMP%] {\n background: #fafafa;\n border-color: #d0d0d0;\n }\n \n .depth-2[_ngcontent-%COMP%] {\n margin-left: 48px;\n }\n .depth-2[_ngcontent-%COMP%] .node-header[_ngcontent-%COMP%] {\n background: #fcfcfc;\n border-color: #c0c0c0;\n }\n \n .depth-3[_ngcontent-%COMP%] {\n margin-left: 72px;\n }\n .depth-3[_ngcontent-%COMP%] .node-header[_ngcontent-%COMP%] {\n background: #fdfdfd;\n border-color: #b0b0b0;\n }\n \n .depth-4[_ngcontent-%COMP%] {\n margin-left: 96px;\n }\n .depth-4[_ngcontent-%COMP%] .node-header[_ngcontent-%COMP%] {\n background: #fefefe;\n border-color: #a0a0a0;\n }\n \n .depth-5[_ngcontent-%COMP%] {\n margin-left: 120px;\n }\n .depth-5[_ngcontent-%COMP%] .node-header[_ngcontent-%COMP%] {\n background: #fefefe;\n border-color: #a0a0a0;\n }\n \n .depth-6[_ngcontent-%COMP%] {\n margin-left: 144px;\n }\n .depth-6[_ngcontent-%COMP%] .node-header[_ngcontent-%COMP%] {\n background: #fefefe;\n border-color: #a0a0a0;\n }\n\n \n\n .depth-0[_ngcontent-%COMP%] { \n position: relative;\n overflow: hidden;\n z-index: 2;\n }\n .depth-0[_ngcontent-%COMP%] .node-header[_ngcontent-%COMP%] { \n background: #f8f9fa;\n position: relative;\n z-index: 2;\n }\n \n \n\n .depth-0.has-children[_ngcontent-%COMP%]::before {\n content: '';\n position: absolute;\n left: 12px;\n top: 0;\n width: 2px;\n height: 100%;\n border-left: 2px dotted #c0c7d0;\n z-index: 0; \n\n }\n \n \n\n .depth-1[_ngcontent-%COMP%] { \n margin-left: 30px;\n padding-left: 12px;\n position: relative;\n z-index: 1;\n }\n .depth-1[_ngcontent-%COMP%] .node-header[_ngcontent-%COMP%] { \n background: #fafbfc;\n position: relative;\n z-index: 1;\n }\n \n \n\n .depth-1[_ngcontent-%COMP%]::after {\n content: '';\n position: absolute;\n left: -15px;\n top: 12px;\n width: 25px;\n height: 2px;\n border-bottom: 2px dotted #c0c7d0;\n z-index: 1;\n }\n \n \n\n .tree-node.details-expanded[_ngcontent-%COMP%] > .node-header[_ngcontent-%COMP%] {\n border-bottom-left-radius: 0;\n border-bottom-right-radius: 0;\n border-bottom: 1px solid #2196f3;\n }\n \n .node-header[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 8px;\n padding: 8px 12px;\n border: 1px solid #e0e0e0;\n border-radius: 6px;\n transition: all 0.2s ease;\n user-select: none;\n position: relative;\n z-index: 5;\n background: white;\n }\n \n .node-header[_ngcontent-%COMP%]:hover {\n background: var(--gray-700);\n border-color: var(--mj-blue) !important;\n }\n \n \n\n .tree-node.type-sub-agent[_ngcontent-%COMP%] > .node-header[_ngcontent-%COMP%] {\n border-left: 4px solid var(--mj-blue);\n }\n \n \n\n .tree-node.type-action[_ngcontent-%COMP%] > .node-header[_ngcontent-%COMP%] {\n border-left: 4px solid #4caf50;\n }\n \n .expand-icon[_ngcontent-%COMP%] {\n width: 20px;\n height: 20px;\n display: flex;\n align-items: center;\n justify-content: center;\n text-align: center;\n color: #666;\n font-size: 10px;\n cursor: pointer;\n border-radius: 3px;\n transition: all 0.2s ease;\n z-index: 10; \n\n position: relative;\n }\n \n .expand-icon[_ngcontent-%COMP%]:hover {\n background: #e0e0e0;\n color: #333;\n }\n \n .status-icon[_ngcontent-%COMP%] {\n width: 20px;\n text-align: center;\n font-size: 14px;\n }\n \n .status-pending[_ngcontent-%COMP%] { color: #999; }\n .status-running[_ngcontent-%COMP%] { color: #2196f3; }\n .status-completed[_ngcontent-%COMP%] { color: #4caf50; }\n .status-failed[_ngcontent-%COMP%] { color: #f44336; }\n \n .type-icon[_ngcontent-%COMP%] {\n width: 20px;\n text-align: center;\n display: flex;\n align-items: center;\n justify-content: center;\n font-size: 14px;\n color: #666;\n }\n \n .agent-logo-icon[_ngcontent-%COMP%] {\n width: 16px;\n height: 16px;\n object-fit: cover;\n border-radius: 3px;\n }\n \n .node-name[_ngcontent-%COMP%] {\n flex: 1;\n font-size: 13px;\n font-weight: 500;\n color: #1a1a1a;\n }\n \n \n .node-duration[_ngcontent-%COMP%] {\n font-size: 12px;\n color: #666;\n font-weight: 500;\n }\n \n .node-metrics[_ngcontent-%COMP%] {\n display: flex;\n gap: 12px;\n font-size: 12px;\n }\n \n .tokens[_ngcontent-%COMP%] {\n color: #666;\n }\n \n .cost[_ngcontent-%COMP%] {\n color: #2196f3;\n font-weight: 500;\n }\n \n \n\n .details-toggle-btn[_ngcontent-%COMP%] {\n width: 28px;\n height: 28px;\n display: flex;\n align-items: center;\n justify-content: center;\n background: transparent;\n border: 1px solid #e0e0e0;\n border-radius: 4px;\n cursor: pointer;\n transition: all 0.2s ease;\n font-size: 12px;\n color: #666;\n margin-left: 4px;\n }\n \n .details-toggle-btn[_ngcontent-%COMP%]:hover {\n background: #f0f0f0;\n border-color: #2196f3;\n color: #2196f3;\n }\n \n .details-toggle-btn[_ngcontent-%COMP%]:active {\n background: #e3f2fd;\n }\n \n \n\n .tree-node.details-expanded[_ngcontent-%COMP%] .details-toggle-btn[_ngcontent-%COMP%] {\n background: #2196f3;\n border-color: #2196f3;\n color: white;\n }\n \n .tree-node.details-expanded[_ngcontent-%COMP%] .details-toggle-btn[_ngcontent-%COMP%]:hover {\n background: #1976d2;\n border-color: #1976d2;\n }\n \n .node-details[_ngcontent-%COMP%] {\n margin: 0 5px;\n padding: 16px;\n background: var(--gray-600);\n border: 1px solid var(--gray-700);\n border-top: none;\n border-radius: 0 0 6px 6px;\n font-size: 12px;\n position: relative;\n z-index: 4;\n }\n \n .detail-section[_ngcontent-%COMP%] {\n margin-bottom: 8px;\n }\n \n .detail-section[_ngcontent-%COMP%]:last-child {\n margin-bottom: 0;\n }\n \n .detail-section.error[_ngcontent-%COMP%] {\n color: #d32f2f;\n }\n \n .detail-label[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 6px;\n font-weight: 600;\n margin-bottom: 4px;\n color: #555;\n }\n \n .detail-content[_ngcontent-%COMP%] {\n white-space: pre-wrap;\n word-break: break-word;\n color: #333;\n line-height: 1.4;\n }\n \n .markdown-details[_ngcontent-%COMP%] {\n padding: 16px 16px 0 16px;\n background: var(--gray-600);\n border: 1px solid var(--gray-700);\n border-bottom: none;\n border-top: none;\n margin: 0 5px;\n }\n \n .markdown[_ngcontent-%COMP%] h3[_ngcontent-%COMP%], .markdown[_ngcontent-%COMP%] h4[_ngcontent-%COMP%] {\n margin: 8px 0 4px 0;\n color: #1a1a1a;\n }\n \n .markdown[_ngcontent-%COMP%] h3[_ngcontent-%COMP%] {\n font-size: 14px;\n }\n \n .markdown[_ngcontent-%COMP%] h4[_ngcontent-%COMP%] {\n font-size: 13px;\n }\n \n .markdown[_ngcontent-%COMP%] ul[_ngcontent-%COMP%] {\n margin: 4px 0;\n padding-left: 20px;\n }\n \n .markdown[_ngcontent-%COMP%] li[_ngcontent-%COMP%] {\n margin: 2px 0;\n }\n \n .markdown[_ngcontent-%COMP%] code[_ngcontent-%COMP%] {\n background: #e8e8e8;\n padding: 1px 4px;\n border-radius: 3px;\n font-size: 12px;\n }\n \n .markdown[_ngcontent-%COMP%] pre[_ngcontent-%COMP%] {\n background: #f5f5f5;\n padding: 8px;\n border-radius: 4px;\n overflow-x: auto;\n margin: 4px 0;\n }\n \n .markdown[_ngcontent-%COMP%] pre[_ngcontent-%COMP%] code[_ngcontent-%COMP%] {\n background: none;\n padding: 0;\n }\n \n .markdown[_ngcontent-%COMP%] strong[_ngcontent-%COMP%] {\n font-weight: 600;\n color: #1a1a1a;\n }\n \n .markdown[_ngcontent-%COMP%] em[_ngcontent-%COMP%] {\n font-style: italic;\n color: #555;\n }\n \n .full-name[_ngcontent-%COMP%] {\n font-weight: 600;\n color: #1a1a1a;\n padding-bottom: 8px;\n border-bottom: 1px solid #e0e0e0;\n word-wrap: break-word;\n }"], changeDetection: 0 }); }
|
|
348
525
|
}
|
|
349
526
|
(() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(ExecutionNodeComponent, [{
|
|
350
527
|
type: Component,
|
|
351
|
-
args: [{ selector: 'mj-execution-node',
|
|
528
|
+
args: [{ selector: 'mj-execution-node', changeDetection: ChangeDetectionStrategy.OnPush, template: `
|
|
352
529
|
<div class="tree-node"
|
|
353
|
-
[class.expanded]="
|
|
354
|
-
[
|
|
530
|
+
[class.expanded]="expanded"
|
|
531
|
+
[class.has-children]="hasChildren()"
|
|
532
|
+
[class.details-expanded]="detailsExpanded"
|
|
533
|
+
[class]="'depth-' + depth + ' type-' + getStepTypeClass()">
|
|
355
534
|
|
|
356
535
|
<!-- Node Header -->
|
|
357
|
-
<div class="node-header"
|
|
358
|
-
|
|
359
|
-
|
|
536
|
+
<div class="node-header"
|
|
537
|
+
(dblclick)="onDoubleClick()">
|
|
538
|
+
<!-- Expand/Collapse Icon - Only show if node has children -->
|
|
539
|
+
@if (hasChildren()) {
|
|
360
540
|
<i class="expand-icon fa-solid"
|
|
361
|
-
[class.fa-chevron-down]="
|
|
362
|
-
[class.fa-chevron-right]="!
|
|
363
|
-
(click)="
|
|
364
|
-
|
|
365
|
-
<span class="expand-spacer"></span>
|
|
541
|
+
[class.fa-chevron-down]="expanded"
|
|
542
|
+
[class.fa-chevron-right]="!expanded"
|
|
543
|
+
(click)="onToggleChildren($event)"
|
|
544
|
+
title="Toggle children"></i>
|
|
366
545
|
}
|
|
367
546
|
|
|
368
547
|
<!-- Status Icon -->
|
|
369
|
-
<span class="status-icon" [class]="'status-' +
|
|
370
|
-
@switch (
|
|
548
|
+
<span class="status-icon" [class]="'status-' + getStatusClass()">
|
|
549
|
+
@switch (getStatusClass()) {
|
|
371
550
|
@case ('pending') {
|
|
372
551
|
<i class="fa-regular fa-circle"></i>
|
|
373
552
|
}
|
|
@@ -385,7 +564,7 @@ export class ExecutionNodeComponent {
|
|
|
385
564
|
|
|
386
565
|
<!-- Type Icon -->
|
|
387
566
|
<span class="type-icon" [title]="getNodeTitle()">
|
|
388
|
-
@switch (
|
|
567
|
+
@switch (getStepTypeClass()) {
|
|
389
568
|
@case ('validation') {
|
|
390
569
|
<i class="fa-solid fa-shield-halved"></i>
|
|
391
570
|
}
|
|
@@ -393,17 +572,17 @@ export class ExecutionNodeComponent {
|
|
|
393
572
|
<i class="fa-solid fa-brain"></i>
|
|
394
573
|
}
|
|
395
574
|
@case ('action') {
|
|
396
|
-
@if (
|
|
397
|
-
<i [class]="
|
|
575
|
+
@if (getActionIconClass()) {
|
|
576
|
+
<i [class]="getActionIconClass()"></i>
|
|
398
577
|
} @else {
|
|
399
578
|
<i class="fa-solid fa-bolt"></i>
|
|
400
579
|
}
|
|
401
580
|
}
|
|
402
581
|
@case ('sub-agent') {
|
|
403
|
-
@if (
|
|
404
|
-
<img [src]="
|
|
405
|
-
} @else if (
|
|
406
|
-
<i [class]="
|
|
582
|
+
@if (getAgentLogoURL()) {
|
|
583
|
+
<img [src]="getAgentLogoURL()" [alt]="getAgentName() || 'Agent'" class="agent-logo-icon">
|
|
584
|
+
} @else if (getAgentIconClass()) {
|
|
585
|
+
<i [class]="getAgentIconClass()"></i>
|
|
407
586
|
} @else {
|
|
408
587
|
<i class="fa-solid fa-sitemap"></i>
|
|
409
588
|
}
|
|
@@ -417,91 +596,112 @@ export class ExecutionNodeComponent {
|
|
|
417
596
|
}
|
|
418
597
|
</span>
|
|
419
598
|
|
|
420
|
-
<!-- Node Name -->
|
|
599
|
+
<!-- Node Name with depth indicator for sub-agents -->
|
|
421
600
|
<span class="node-name">
|
|
601
|
+
@if (step.StepType === 'Sub-Agent' && depth > 0) {
|
|
602
|
+
<small style="color: #666; margin-right: 8px;">[Level {{ depth }}]</small>
|
|
603
|
+
}
|
|
422
604
|
{{ getTruncatedName() }}
|
|
423
605
|
</span>
|
|
424
606
|
|
|
425
607
|
<!-- Duration -->
|
|
426
|
-
@if (
|
|
427
|
-
<span class="node-duration">{{ formatDuration(
|
|
608
|
+
@if (getDuration()) {
|
|
609
|
+
<span class="node-duration">{{ formatDuration(getDuration()) }}</span>
|
|
428
610
|
}
|
|
429
611
|
|
|
430
612
|
<!-- Tokens/Cost -->
|
|
431
|
-
@if (
|
|
613
|
+
@if (getTokensUsed() || getCost()) {
|
|
432
614
|
<span class="node-metrics">
|
|
433
|
-
@if (
|
|
434
|
-
<span class="tokens">{{
|
|
615
|
+
@if (getTokensUsed()) {
|
|
616
|
+
<span class="tokens">{{ getTokensUsed() }} tokens</span>
|
|
435
617
|
}
|
|
436
|
-
@if (
|
|
437
|
-
<span class="cost">\${{
|
|
618
|
+
@if (getCost()) {
|
|
619
|
+
<span class="cost">\${{ getCost()!.toFixed(4) }}</span>
|
|
438
620
|
}
|
|
439
621
|
</span>
|
|
440
622
|
}
|
|
623
|
+
|
|
624
|
+
<!-- Details Toggle Button - Only show if node has details -->
|
|
625
|
+
@if (hasNodeDetails()) {
|
|
626
|
+
<button class="details-toggle-btn"
|
|
627
|
+
(click)="onToggleDetails($event)"
|
|
628
|
+
[title]="detailsExpanded ? 'Hide details' : 'Show details'">
|
|
629
|
+
<i class="fa-solid"
|
|
630
|
+
[class.fa-info]="!detailsExpanded"
|
|
631
|
+
[class.fa-times]="detailsExpanded"></i>
|
|
632
|
+
</button>
|
|
633
|
+
}
|
|
441
634
|
</div>
|
|
442
635
|
|
|
443
|
-
<!--
|
|
444
|
-
@if (
|
|
636
|
+
<!-- Node Details (when details are expanded) -->
|
|
637
|
+
@if (detailsExpanded) {
|
|
445
638
|
<!-- Show markdown details first if available -->
|
|
446
|
-
@if (
|
|
639
|
+
@if (getDetailsMarkdown() || isNameTruncated()) {
|
|
447
640
|
<div class="markdown-details">
|
|
448
641
|
@if (isNameTruncated()) {
|
|
449
|
-
<div class="full-name">{{
|
|
642
|
+
<div class="full-name">{{ step.StepName }}</div>
|
|
450
643
|
}
|
|
451
|
-
@if (
|
|
452
|
-
<div class="detail-content markdown" [innerHTML]="formatMarkdown(
|
|
644
|
+
@if (getDetailsMarkdown()) {
|
|
645
|
+
<div class="detail-content markdown" [innerHTML]="formatMarkdown(getDetailsMarkdown()!)"></div>
|
|
453
646
|
}
|
|
454
647
|
</div>
|
|
455
648
|
}
|
|
456
649
|
|
|
457
|
-
|
|
650
|
+
<!-- Always show details section if node is expanded, even if some content is empty -->
|
|
458
651
|
<div class="node-details">
|
|
459
|
-
@if (
|
|
652
|
+
@if (step.ErrorMessage) {
|
|
460
653
|
<div class="detail-section error">
|
|
461
654
|
<div class="detail-label">
|
|
462
655
|
<i class="fa-solid fa-exclamation-triangle"></i> Error
|
|
463
656
|
</div>
|
|
464
|
-
<div class="detail-content">{{
|
|
657
|
+
<div class="detail-content">{{ step.ErrorMessage }}</div>
|
|
465
658
|
</div>
|
|
466
659
|
}
|
|
467
|
-
@if (
|
|
660
|
+
@if (getInputPreview()) {
|
|
468
661
|
<div class="detail-section">
|
|
469
662
|
<div class="detail-label">
|
|
470
663
|
<i class="fa-solid fa-sign-in-alt"></i> Input
|
|
471
664
|
</div>
|
|
472
|
-
<div class="detail-content">{{
|
|
665
|
+
<div class="detail-content">{{ getInputPreview() }}</div>
|
|
473
666
|
</div>
|
|
474
667
|
}
|
|
475
|
-
@if (
|
|
668
|
+
@if (getOutputPreview()) {
|
|
476
669
|
<div class="detail-section">
|
|
477
670
|
<div class="detail-label">
|
|
478
671
|
<i class="fa-solid fa-sign-out-alt"></i> Output
|
|
479
672
|
</div>
|
|
480
|
-
<div class="detail-content">{{
|
|
673
|
+
<div class="detail-content">{{ getOutputPreview() }}</div>
|
|
674
|
+
</div>
|
|
675
|
+
}
|
|
676
|
+
@if (!step.ErrorMessage && !getInputPreview() && !getOutputPreview() && !getDetailsMarkdown() && !isNameTruncated()) {
|
|
677
|
+
<div class="detail-section">
|
|
678
|
+
<div class="detail-content">No additional details available for this step.</div>
|
|
481
679
|
</div>
|
|
482
680
|
}
|
|
483
681
|
</div>
|
|
484
|
-
}
|
|
485
682
|
}
|
|
486
683
|
|
|
487
|
-
<!--
|
|
488
|
-
@if (node.expanded && node.children) {
|
|
489
|
-
@for (child of node.children; track child.id) {
|
|
490
|
-
<mj-execution-node
|
|
491
|
-
[node]="child"
|
|
492
|
-
(toggleNode)="toggleNode.emit($event)"
|
|
493
|
-
(userInteracted)="userInteracted.emit()">
|
|
494
|
-
</mj-execution-node>
|
|
495
|
-
}
|
|
496
|
-
}
|
|
684
|
+
<!-- Note: Sub-agent children are rendered by the parent component to maintain proper depth tracking -->
|
|
497
685
|
</div>
|
|
498
|
-
`, styles: ["\n :host {\n display: block;\n width: 100%;\n }\n \n .tree-node {\n margin-bottom: 4px;\n }\n \n .node-header {\n display: flex;\n align-items: center;\n gap: 8px;\n padding: 8px 12px;\n background: #f8f9fa;\n border: 1px solid #e0e0e0;\n border-radius: 6px;\n transition: all 0.2s ease;\n user-select: none;\n }\n \n .node-header:hover {\n background: #e8f0fe;\n border-color: #2196f3;\n }\n \n .expand-icon {\n width: 20px;\n height: 20px;\n display: flex;\n align-items: center;\n justify-content: center;\n text-align: center;\n color: #666;\n font-size: 10px;\n cursor: pointer;\n border-radius: 3px;\n transition: all 0.2s ease;\n }\n \n .expand-icon:hover {\n background: #e0e0e0;\n color: #333;\n }\n \n .expand-spacer {\n width: 20px;\n text-align: center;\n }\n \n .status-icon {\n width: 20px;\n text-align: center;\n font-size: 14px;\n }\n \n .status-pending { color: #999; }\n .status-running { color: #2196f3; }\n .status-completed { color: #4caf50; }\n .status-failed { color: #f44336; }\n \n .type-icon {\n width: 20px;\n text-align: center;\n display: flex;\n align-items: center;\n justify-content: center;\n font-size: 14px;\n color: #666;\n }\n \n .agent-logo-icon {\n width: 16px;\n height: 16px;\n object-fit: cover;\n border-radius: 3px;\n }\n \n .node-name {\n flex: 1;\n font-size: 13px;\n font-weight: 500;\n color: #1a1a1a;\n }\n \n \n .node-duration {\n font-size: 12px;\n color: #666;\n font-weight: 500;\n }\n \n .node-metrics {\n display: flex;\n gap: 12px;\n font-size: 12px;\n }\n \n .tokens {\n color: #666;\n }\n \n .cost {\n color: #2196f3;\n font-weight: 500;\n }\n \n .node-details {\n margin: 8px 0 8px 44px;\n padding: 12px;\n background: #f5f5f5;\n border-radius: 4px;\n font-size: 12px;\n }\n \n .detail-section {\n margin-bottom: 8px;\n }\n \n .detail-section:last-child {\n margin-bottom: 0;\n }\n \n .detail-section.error {\n color: #d32f2f;\n }\n \n .detail-label {\n display: flex;\n align-items: center;\n gap: 6px;\n font-weight: 600;\n margin-bottom: 4px;\n color: #555;\n }\n \n .detail-content {\n white-space: pre-wrap;\n word-break: break-word;\n color: #333;\n line-height: 1.4;\n }\n \n .markdown-details {\n margin: 8px 0 8px 44px;\n padding: 12px;\n background: #f9f9f9;\n border-left: 3px solid #2196f3;\n border-radius: 0 4px 4px 0;\n font-size: 13px;\n }\n \n .markdown h3, .markdown h4 {\n margin: 8px 0 4px 0;\n color: #1a1a1a;\n }\n \n .markdown h3 {\n font-size: 14px;\n }\n \n .markdown h4 {\n font-size: 13px;\n }\n \n .markdown ul {\n margin: 4px 0;\n padding-left: 20px;\n }\n \n .markdown li {\n margin: 2px 0;\n }\n \n .markdown code {\n background: #e8e8e8;\n padding: 1px 4px;\n border-radius: 3px;\n font-size: 12px;\n }\n \n .markdown pre {\n background: #f5f5f5;\n padding: 8px;\n border-radius: 4px;\n overflow-x: auto;\n margin: 4px 0;\n }\n \n .markdown pre code {\n background: none;\n padding: 0;\n }\n \n .markdown strong {\n font-weight: 600;\n color: #1a1a1a;\n }\n \n .markdown em {\n font-style: italic;\n color: #555;\n }\n \n .full-name {\n font-weight: 600;\n color: #1a1a1a;\n margin-bottom: 8px;\n padding-bottom: 8px;\n border-bottom: 1px solid #e0e0e0;\n word-wrap: break-word;\n }\n "] }]
|
|
499
|
-
}], null, {
|
|
686
|
+
`, styles: ["\n :host {\n display: block;\n width: 100%;\n }\n \n /* Depth-based indentation - each level indents by 24px */\n .tree-node {\n margin: 4px 0;\n position: relative;\n }\n \n /* Root level nodes (depth 0) */\n .depth-0 { \n margin-left: 0;\n position: relative;\n z-index: 2;\n }\n .depth-0::after {\n display: none;\n }\n .depth-0 .node-header { \n background: #f8f9fa;\n border: 2px solid #e0e0e0;\n font-weight: 600;\n position: relative;\n z-index: 10;\n }\n \n /* Sub-level nodes with increasing indentation */\n .depth-1 {\n margin-left: 24px;\n }\n .depth-1 .node-header {\n background: #fafafa;\n border-color: #d0d0d0;\n }\n \n .depth-2 {\n margin-left: 48px;\n }\n .depth-2 .node-header {\n background: #fcfcfc;\n border-color: #c0c0c0;\n }\n \n .depth-3 {\n margin-left: 72px;\n }\n .depth-3 .node-header {\n background: #fdfdfd;\n border-color: #b0b0b0;\n }\n \n .depth-4 {\n margin-left: 96px;\n }\n .depth-4 .node-header {\n background: #fefefe;\n border-color: #a0a0a0;\n }\n \n .depth-5 {\n margin-left: 120px;\n }\n .depth-5 .node-header {\n background: #fefefe;\n border-color: #a0a0a0;\n }\n \n .depth-6 {\n margin-left: 144px;\n }\n .depth-6 .node-header {\n background: #fefefe;\n border-color: #a0a0a0;\n }\n\n /* Root level - higher z-index to hide lines behind it */\n .depth-0 { \n position: relative;\n overflow: hidden;\n z-index: 2;\n }\n .depth-0 .node-header { \n background: #f8f9fa;\n position: relative;\n z-index: 2;\n }\n \n /* Only add left padding for nodes with children (that show chevrons) */\n .depth-0.has-children::before {\n content: '';\n position: absolute;\n left: 12px;\n top: 0;\n width: 2px;\n height: 100%;\n border-left: 2px dotted #c0c7d0;\n z-index: 0; /* Behind everything */\n }\n \n /* Child level - only for nodes that actually have parent chevrons */\n .depth-1 { \n margin-left: 30px;\n padding-left: 12px;\n position: relative;\n z-index: 1;\n }\n .depth-1 .node-header { \n background: #fafbfc;\n position: relative;\n z-index: 1;\n }\n \n /* Horizontal line connecting to each child node - only when parent has children */\n .depth-1::after {\n content: '';\n position: absolute;\n left: -15px;\n top: 12px;\n width: 25px;\n height: 2px;\n border-bottom: 2px dotted #c0c7d0;\n z-index: 1;\n }\n \n /* Visual indicator when details are expanded */\n .tree-node.details-expanded > .node-header {\n border-bottom-left-radius: 0;\n border-bottom-right-radius: 0;\n border-bottom: 1px solid #2196f3;\n }\n \n .node-header {\n display: flex;\n align-items: center;\n gap: 8px;\n padding: 8px 12px;\n border: 1px solid #e0e0e0;\n border-radius: 6px;\n transition: all 0.2s ease;\n user-select: none;\n position: relative;\n z-index: 5;\n background: white;\n }\n \n .node-header:hover {\n background: var(--gray-700);\n border-color: var(--mj-blue) !important;\n }\n \n /* Sub-agent specific styling */\n .tree-node.type-sub-agent > .node-header {\n border-left: 4px solid var(--mj-blue);\n }\n \n /* Action specific styling */\n .tree-node.type-action > .node-header {\n border-left: 4px solid #4caf50;\n }\n \n .expand-icon {\n width: 20px;\n height: 20px;\n display: flex;\n align-items: center;\n justify-content: center;\n text-align: center;\n color: #666;\n font-size: 10px;\n cursor: pointer;\n border-radius: 3px;\n transition: all 0.2s ease;\n z-index: 10; /* Ensure expand icon is clickable */\n position: relative;\n }\n \n .expand-icon:hover {\n background: #e0e0e0;\n color: #333;\n }\n \n .status-icon {\n width: 20px;\n text-align: center;\n font-size: 14px;\n }\n \n .status-pending { color: #999; }\n .status-running { color: #2196f3; }\n .status-completed { color: #4caf50; }\n .status-failed { color: #f44336; }\n \n .type-icon {\n width: 20px;\n text-align: center;\n display: flex;\n align-items: center;\n justify-content: center;\n font-size: 14px;\n color: #666;\n }\n \n .agent-logo-icon {\n width: 16px;\n height: 16px;\n object-fit: cover;\n border-radius: 3px;\n }\n \n .node-name {\n flex: 1;\n font-size: 13px;\n font-weight: 500;\n color: #1a1a1a;\n }\n \n \n .node-duration {\n font-size: 12px;\n color: #666;\n font-weight: 500;\n }\n \n .node-metrics {\n display: flex;\n gap: 12px;\n font-size: 12px;\n }\n \n .tokens {\n color: #666;\n }\n \n .cost {\n color: #2196f3;\n font-weight: 500;\n }\n \n /* Details Toggle Button */\n .details-toggle-btn {\n width: 28px;\n height: 28px;\n display: flex;\n align-items: center;\n justify-content: center;\n background: transparent;\n border: 1px solid #e0e0e0;\n border-radius: 4px;\n cursor: pointer;\n transition: all 0.2s ease;\n font-size: 12px;\n color: #666;\n margin-left: 4px;\n }\n \n .details-toggle-btn:hover {\n background: #f0f0f0;\n border-color: #2196f3;\n color: #2196f3;\n }\n \n .details-toggle-btn:active {\n background: #e3f2fd;\n }\n \n /* When details are expanded, style the button differently */\n .tree-node.details-expanded .details-toggle-btn {\n background: #2196f3;\n border-color: #2196f3;\n color: white;\n }\n \n .tree-node.details-expanded .details-toggle-btn:hover {\n background: #1976d2;\n border-color: #1976d2;\n }\n \n .node-details {\n margin: 0 5px;\n padding: 16px;\n background: var(--gray-600);\n border: 1px solid var(--gray-700);\n border-top: none;\n border-radius: 0 0 6px 6px;\n font-size: 12px;\n position: relative;\n z-index: 4;\n }\n \n .detail-section {\n margin-bottom: 8px;\n }\n \n .detail-section:last-child {\n margin-bottom: 0;\n }\n \n .detail-section.error {\n color: #d32f2f;\n }\n \n .detail-label {\n display: flex;\n align-items: center;\n gap: 6px;\n font-weight: 600;\n margin-bottom: 4px;\n color: #555;\n }\n \n .detail-content {\n white-space: pre-wrap;\n word-break: break-word;\n color: #333;\n line-height: 1.4;\n }\n \n .markdown-details {\n padding: 16px 16px 0 16px;\n background: var(--gray-600);\n border: 1px solid var(--gray-700);\n border-bottom: none;\n border-top: none;\n margin: 0 5px;\n }\n \n .markdown h3, .markdown h4 {\n margin: 8px 0 4px 0;\n color: #1a1a1a;\n }\n \n .markdown h3 {\n font-size: 14px;\n }\n \n .markdown h4 {\n font-size: 13px;\n }\n \n .markdown ul {\n margin: 4px 0;\n padding-left: 20px;\n }\n \n .markdown li {\n margin: 2px 0;\n }\n \n .markdown code {\n background: #e8e8e8;\n padding: 1px 4px;\n border-radius: 3px;\n font-size: 12px;\n }\n \n .markdown pre {\n background: #f5f5f5;\n padding: 8px;\n border-radius: 4px;\n overflow-x: auto;\n margin: 4px 0;\n }\n \n .markdown pre code {\n background: none;\n padding: 0;\n }\n \n .markdown strong {\n font-weight: 600;\n color: #1a1a1a;\n }\n \n .markdown em {\n font-style: italic;\n color: #555;\n }\n \n .full-name {\n font-weight: 600;\n color: #1a1a1a;\n padding-bottom: 8px;\n border-bottom: 1px solid #e0e0e0;\n word-wrap: break-word;\n }\n "] }]
|
|
687
|
+
}], null, { step: [{
|
|
688
|
+
type: Input
|
|
689
|
+
}], depth: [{
|
|
690
|
+
type: Input
|
|
691
|
+
}], agentPath: [{
|
|
692
|
+
type: Input
|
|
693
|
+
}], expanded: [{
|
|
694
|
+
type: Input
|
|
695
|
+
}], detailsExpanded: [{
|
|
696
|
+
type: Input
|
|
697
|
+
}], overrideDisplayStatus: [{
|
|
500
698
|
type: Input
|
|
501
699
|
}], toggleNode: [{
|
|
502
700
|
type: Output
|
|
701
|
+
}], toggleDetails: [{
|
|
702
|
+
type: Output
|
|
503
703
|
}], userInteracted: [{
|
|
504
704
|
type: Output
|
|
505
705
|
}] }); })();
|
|
506
|
-
(() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassDebugInfo(ExecutionNodeComponent, { className: "ExecutionNodeComponent", filePath: "lib/agent-execution-node.component.ts", lineNumber:
|
|
706
|
+
(() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassDebugInfo(ExecutionNodeComponent, { className: "ExecutionNodeComponent", filePath: "lib/agent-execution-node.component.ts", lineNumber: 556 }); })();
|
|
507
707
|
//# sourceMappingURL=agent-execution-node.component.js.map
|