@memberjunction/ng-core-entity-forms 5.17.0 → 5.19.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/AIPromptRuns/ai-prompt-run-form.component.d.ts +5 -0
- package/dist/lib/custom/AIPromptRuns/ai-prompt-run-form.component.d.ts.map +1 -1
- package/dist/lib/custom/AIPromptRuns/ai-prompt-run-form.component.js +754 -622
- package/dist/lib/custom/AIPromptRuns/ai-prompt-run-form.component.js.map +1 -1
- package/dist/lib/custom/AIPromptRuns/chat-message-viewer.component.d.ts +15 -0
- package/dist/lib/custom/AIPromptRuns/chat-message-viewer.component.d.ts.map +1 -1
- package/dist/lib/custom/AIPromptRuns/chat-message-viewer.component.js +110 -42
- package/dist/lib/custom/AIPromptRuns/chat-message-viewer.component.js.map +1 -1
- package/dist/lib/custom/ai-agent-run/ai-agent-run-step-detail.component.d.ts +29 -1
- package/dist/lib/custom/ai-agent-run/ai-agent-run-step-detail.component.d.ts.map +1 -1
- package/dist/lib/custom/ai-agent-run/ai-agent-run-step-detail.component.js +400 -44
- package/dist/lib/custom/ai-agent-run/ai-agent-run-step-detail.component.js.map +1 -1
- package/dist/lib/generated/Entities/MJUser/mjuser.form.component.js +9 -9
- package/dist/lib/generated/Entities/MJUser/mjuser.form.component.js.map +1 -1
- package/package.json +31 -31
|
@@ -6,50 +6,214 @@ import * as i1 from "@angular/common";
|
|
|
6
6
|
import * as i2 from "@angular/forms";
|
|
7
7
|
import * as i3 from "@memberjunction/ng-code-editor";
|
|
8
8
|
import * as i4 from "@memberjunction/ng-deep-diff";
|
|
9
|
+
const _c0 = a0 => ({ $implicit: a0 });
|
|
10
|
+
const _forTrack0 = ($index, $item) => $item.id;
|
|
9
11
|
function AIAgentRunStepDetailComponent_Conditional_0_Conditional_24_Template(rf, ctx) { if (rf & 1) {
|
|
10
12
|
const _r3 = i0.ɵɵgetCurrentView();
|
|
11
|
-
i0.ɵɵelementStart(0, "div",
|
|
13
|
+
i0.ɵɵelementStart(0, "div", 10)(1, "button", 16);
|
|
12
14
|
i0.ɵɵlistener("click", function AIAgentRunStepDetailComponent_Conditional_0_Conditional_24_Template_button_click_1_listener() { i0.ɵɵrestoreView(_r3); const ctx_r1 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r1.onNavigateToActionLog(ctx_r1.selectedTimelineItem.data.ID)); });
|
|
13
|
-
i0.ɵɵelement(2, "i",
|
|
15
|
+
i0.ɵɵelement(2, "i", 17);
|
|
14
16
|
i0.ɵɵtext(3, " View Action Execution Log ");
|
|
15
17
|
i0.ɵɵelementEnd()();
|
|
16
18
|
} }
|
|
19
|
+
function AIAgentRunStepDetailComponent_Conditional_0_Conditional_25_Conditional_1_Template(rf, ctx) { if (rf & 1) {
|
|
20
|
+
const _r5 = i0.ɵɵgetCurrentView();
|
|
21
|
+
i0.ɵɵelementStart(0, "button", 19);
|
|
22
|
+
i0.ɵɵlistener("click", function AIAgentRunStepDetailComponent_Conditional_0_Conditional_25_Conditional_1_Template_button_click_0_listener() { i0.ɵɵrestoreView(_r5); const ctx_r1 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r1.detailPaneTab = "diff"); });
|
|
23
|
+
i0.ɵɵelement(1, "i", 21);
|
|
24
|
+
i0.ɵɵtext(2, " Payload Changes ");
|
|
25
|
+
i0.ɵɵelementEnd();
|
|
26
|
+
} if (rf & 2) {
|
|
27
|
+
const ctx_r1 = i0.ɵɵnextContext(3);
|
|
28
|
+
i0.ɵɵclassProp("active", ctx_r1.detailPaneTab === "diff");
|
|
29
|
+
} }
|
|
30
|
+
function AIAgentRunStepDetailComponent_Conditional_0_Conditional_25_Conditional_2_Conditional_3_Template(rf, ctx) { if (rf & 1) {
|
|
31
|
+
i0.ɵɵelementStart(0, "span", 23);
|
|
32
|
+
i0.ɵɵtext(1);
|
|
33
|
+
i0.ɵɵelementEnd();
|
|
34
|
+
} if (rf & 2) {
|
|
35
|
+
const ctx_r1 = i0.ɵɵnextContext(4);
|
|
36
|
+
i0.ɵɵadvance();
|
|
37
|
+
i0.ɵɵtextInterpolate(ctx_r1.scratchpadTaskChangeCount);
|
|
38
|
+
} }
|
|
39
|
+
function AIAgentRunStepDetailComponent_Conditional_0_Conditional_25_Conditional_2_Template(rf, ctx) { if (rf & 1) {
|
|
40
|
+
const _r6 = i0.ɵɵgetCurrentView();
|
|
41
|
+
i0.ɵɵelementStart(0, "button", 19);
|
|
42
|
+
i0.ɵɵlistener("click", function AIAgentRunStepDetailComponent_Conditional_0_Conditional_25_Conditional_2_Template_button_click_0_listener() { i0.ɵɵrestoreView(_r6); const ctx_r1 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r1.detailPaneTab = "scratchpad"); });
|
|
43
|
+
i0.ɵɵelement(1, "i", 22);
|
|
44
|
+
i0.ɵɵtext(2, " Scratchpad ");
|
|
45
|
+
i0.ɵɵconditionalCreate(3, AIAgentRunStepDetailComponent_Conditional_0_Conditional_25_Conditional_2_Conditional_3_Template, 2, 1, "span", 23);
|
|
46
|
+
i0.ɵɵelementEnd();
|
|
47
|
+
} if (rf & 2) {
|
|
48
|
+
const ctx_r1 = i0.ɵɵnextContext(3);
|
|
49
|
+
i0.ɵɵclassProp("active", ctx_r1.detailPaneTab === "scratchpad");
|
|
50
|
+
i0.ɵɵadvance(3);
|
|
51
|
+
i0.ɵɵconditional(ctx_r1.scratchpadTaskChangeCount > 0 ? 3 : -1);
|
|
52
|
+
} }
|
|
17
53
|
function AIAgentRunStepDetailComponent_Conditional_0_Conditional_25_Template(rf, ctx) { if (rf & 1) {
|
|
18
54
|
const _r4 = i0.ɵɵgetCurrentView();
|
|
19
|
-
i0.ɵɵelementStart(0, "div",
|
|
20
|
-
i0.ɵɵ
|
|
21
|
-
i0.ɵɵ
|
|
22
|
-
i0.ɵɵ
|
|
23
|
-
i0.ɵɵ
|
|
24
|
-
i0.ɵɵ
|
|
25
|
-
i0.ɵɵ
|
|
26
|
-
i0.ɵɵelement(5, "i", 18);
|
|
27
|
-
i0.ɵɵtext(6, " Full JSON ");
|
|
55
|
+
i0.ɵɵelementStart(0, "div", 11);
|
|
56
|
+
i0.ɵɵconditionalCreate(1, AIAgentRunStepDetailComponent_Conditional_0_Conditional_25_Conditional_1_Template, 3, 2, "button", 18);
|
|
57
|
+
i0.ɵɵconditionalCreate(2, AIAgentRunStepDetailComponent_Conditional_0_Conditional_25_Conditional_2_Template, 4, 3, "button", 18);
|
|
58
|
+
i0.ɵɵelementStart(3, "button", 19);
|
|
59
|
+
i0.ɵɵlistener("click", function AIAgentRunStepDetailComponent_Conditional_0_Conditional_25_Template_button_click_3_listener() { i0.ɵɵrestoreView(_r4); const ctx_r1 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r1.detailPaneTab = "json"); });
|
|
60
|
+
i0.ɵɵelement(4, "i", 20);
|
|
61
|
+
i0.ɵɵtext(5, " Full JSON ");
|
|
28
62
|
i0.ɵɵelementEnd()();
|
|
29
63
|
} if (rf & 2) {
|
|
30
64
|
const ctx_r1 = i0.ɵɵnextContext(2);
|
|
31
65
|
i0.ɵɵadvance();
|
|
32
|
-
i0.ɵɵ
|
|
33
|
-
i0.ɵɵadvance(
|
|
66
|
+
i0.ɵɵconditional(ctx_r1.showStepPayloadDiff ? 1 : -1);
|
|
67
|
+
i0.ɵɵadvance();
|
|
68
|
+
i0.ɵɵconditional(ctx_r1.showScratchpadTab ? 2 : -1);
|
|
69
|
+
i0.ɵɵadvance();
|
|
34
70
|
i0.ɵɵclassProp("active", ctx_r1.detailPaneTab === "json");
|
|
35
71
|
} }
|
|
36
72
|
function AIAgentRunStepDetailComponent_Conditional_0_Conditional_27_Template(rf, ctx) { if (rf & 1) {
|
|
37
|
-
i0.ɵɵelementStart(0, "div",
|
|
38
|
-
i0.ɵɵelement(1, "mj-deep-diff",
|
|
73
|
+
i0.ɵɵelementStart(0, "div", 13);
|
|
74
|
+
i0.ɵɵelement(1, "mj-deep-diff", 24);
|
|
39
75
|
i0.ɵɵelementEnd();
|
|
40
76
|
} if (rf & 2) {
|
|
41
77
|
const ctx_r1 = i0.ɵɵnextContext(2);
|
|
42
78
|
i0.ɵɵadvance();
|
|
43
79
|
i0.ɵɵproperty("oldValue", ctx_r1.stepPayloadAtStartObject)("newValue", ctx_r1.stepPayloadAtEndObject)("title", "")("showSummary", true)("showUnchanged", false)("expandAll", false)("maxDepth", 8)("maxStringLength", 150)("treatNullAsUndefined", true);
|
|
44
80
|
} }
|
|
81
|
+
function AIAgentRunStepDetailComponent_Conditional_0_Conditional_28_Conditional_11_Conditional_1_Template(rf, ctx) { if (rf & 1) {
|
|
82
|
+
i0.ɵɵelement(0, "mj-deep-diff", 24);
|
|
83
|
+
} if (rf & 2) {
|
|
84
|
+
const ctx_r1 = i0.ɵɵnextContext(4);
|
|
85
|
+
i0.ɵɵproperty("oldValue", ctx_r1.stepScratchpadInput)("newValue", ctx_r1.stepScratchpadOutput)("title", "")("showSummary", true)("showUnchanged", false)("expandAll", true)("maxDepth", 6)("maxStringLength", 300)("treatNullAsUndefined", true);
|
|
86
|
+
} }
|
|
87
|
+
function AIAgentRunStepDetailComponent_Conditional_0_Conditional_28_Conditional_11_Conditional_2_ng_container_5_Template(rf, ctx) { if (rf & 1) {
|
|
88
|
+
i0.ɵɵelementContainer(0);
|
|
89
|
+
} }
|
|
90
|
+
function AIAgentRunStepDetailComponent_Conditional_0_Conditional_28_Conditional_11_Conditional_2_Template(rf, ctx) { if (rf & 1) {
|
|
91
|
+
i0.ɵɵelementStart(0, "div", 32);
|
|
92
|
+
i0.ɵɵelement(1, "i", 33);
|
|
93
|
+
i0.ɵɵelementStart(2, "span");
|
|
94
|
+
i0.ɵɵtext(3, "Scratchpad created in this step (no prior state)");
|
|
95
|
+
i0.ɵɵelementEnd()();
|
|
96
|
+
i0.ɵɵelementStart(4, "div", 34);
|
|
97
|
+
i0.ɵɵtemplate(5, AIAgentRunStepDetailComponent_Conditional_0_Conditional_28_Conditional_11_Conditional_2_ng_container_5_Template, 1, 0, "ng-container", 35);
|
|
98
|
+
i0.ɵɵelementEnd();
|
|
99
|
+
} if (rf & 2) {
|
|
100
|
+
const ctx_r1 = i0.ɵɵnextContext(4);
|
|
101
|
+
const scratchpadSnapshotTpl_r8 = i0.ɵɵreference(2);
|
|
102
|
+
i0.ɵɵadvance(5);
|
|
103
|
+
i0.ɵɵproperty("ngTemplateOutlet", scratchpadSnapshotTpl_r8)("ngTemplateOutletContext", i0.ɵɵpureFunction1(2, _c0, ctx_r1.stepScratchpadOutput));
|
|
104
|
+
} }
|
|
105
|
+
function AIAgentRunStepDetailComponent_Conditional_0_Conditional_28_Conditional_11_Conditional_3_Template(rf, ctx) { if (rf & 1) {
|
|
106
|
+
i0.ɵɵelementStart(0, "div", 32);
|
|
107
|
+
i0.ɵɵelement(1, "i", 36);
|
|
108
|
+
i0.ɵɵelementStart(2, "span");
|
|
109
|
+
i0.ɵɵtext(3, "No scratchpad changes in this step");
|
|
110
|
+
i0.ɵɵelementEnd()();
|
|
111
|
+
} }
|
|
112
|
+
function AIAgentRunStepDetailComponent_Conditional_0_Conditional_28_Conditional_11_Template(rf, ctx) { if (rf & 1) {
|
|
113
|
+
i0.ɵɵelementStart(0, "div", 30);
|
|
114
|
+
i0.ɵɵconditionalCreate(1, AIAgentRunStepDetailComponent_Conditional_0_Conditional_28_Conditional_11_Conditional_1_Template, 1, 9, "mj-deep-diff", 24)(2, AIAgentRunStepDetailComponent_Conditional_0_Conditional_28_Conditional_11_Conditional_2_Template, 6, 4)(3, AIAgentRunStepDetailComponent_Conditional_0_Conditional_28_Conditional_11_Conditional_3_Template, 4, 0, "div", 32);
|
|
115
|
+
i0.ɵɵelementEnd();
|
|
116
|
+
} if (rf & 2) {
|
|
117
|
+
const ctx_r1 = i0.ɵɵnextContext(3);
|
|
118
|
+
i0.ɵɵadvance();
|
|
119
|
+
i0.ɵɵconditional(ctx_r1.stepScratchpadInput && ctx_r1.stepScratchpadOutput ? 1 : ctx_r1.stepScratchpadOutput ? 2 : 3);
|
|
120
|
+
} }
|
|
121
|
+
function AIAgentRunStepDetailComponent_Conditional_0_Conditional_28_Conditional_12_Conditional_1_ng_container_0_Template(rf, ctx) { if (rf & 1) {
|
|
122
|
+
i0.ɵɵelementContainer(0);
|
|
123
|
+
} }
|
|
124
|
+
function AIAgentRunStepDetailComponent_Conditional_0_Conditional_28_Conditional_12_Conditional_1_Template(rf, ctx) { if (rf & 1) {
|
|
125
|
+
i0.ɵɵtemplate(0, AIAgentRunStepDetailComponent_Conditional_0_Conditional_28_Conditional_12_Conditional_1_ng_container_0_Template, 1, 0, "ng-container", 35);
|
|
126
|
+
} if (rf & 2) {
|
|
127
|
+
const ctx_r1 = i0.ɵɵnextContext(4);
|
|
128
|
+
const scratchpadSnapshotTpl_r8 = i0.ɵɵreference(2);
|
|
129
|
+
i0.ɵɵproperty("ngTemplateOutlet", scratchpadSnapshotTpl_r8)("ngTemplateOutletContext", i0.ɵɵpureFunction1(2, _c0, ctx_r1.stepScratchpadInput));
|
|
130
|
+
} }
|
|
131
|
+
function AIAgentRunStepDetailComponent_Conditional_0_Conditional_28_Conditional_12_Conditional_2_Template(rf, ctx) { if (rf & 1) {
|
|
132
|
+
i0.ɵɵelementStart(0, "div", 32);
|
|
133
|
+
i0.ɵɵelement(1, "i", 36);
|
|
134
|
+
i0.ɵɵelementStart(2, "span");
|
|
135
|
+
i0.ɵɵtext(3, "No scratchpad input for this step");
|
|
136
|
+
i0.ɵɵelementEnd()();
|
|
137
|
+
} }
|
|
138
|
+
function AIAgentRunStepDetailComponent_Conditional_0_Conditional_28_Conditional_12_Template(rf, ctx) { if (rf & 1) {
|
|
139
|
+
i0.ɵɵelementStart(0, "div", 31);
|
|
140
|
+
i0.ɵɵconditionalCreate(1, AIAgentRunStepDetailComponent_Conditional_0_Conditional_28_Conditional_12_Conditional_1_Template, 1, 4, "ng-container")(2, AIAgentRunStepDetailComponent_Conditional_0_Conditional_28_Conditional_12_Conditional_2_Template, 4, 0, "div", 32);
|
|
141
|
+
i0.ɵɵelementEnd();
|
|
142
|
+
} if (rf & 2) {
|
|
143
|
+
const ctx_r1 = i0.ɵɵnextContext(3);
|
|
144
|
+
i0.ɵɵadvance();
|
|
145
|
+
i0.ɵɵconditional(ctx_r1.stepScratchpadInput ? 1 : 2);
|
|
146
|
+
} }
|
|
147
|
+
function AIAgentRunStepDetailComponent_Conditional_0_Conditional_28_Conditional_13_Conditional_1_ng_container_0_Template(rf, ctx) { if (rf & 1) {
|
|
148
|
+
i0.ɵɵelementContainer(0);
|
|
149
|
+
} }
|
|
150
|
+
function AIAgentRunStepDetailComponent_Conditional_0_Conditional_28_Conditional_13_Conditional_1_Template(rf, ctx) { if (rf & 1) {
|
|
151
|
+
i0.ɵɵtemplate(0, AIAgentRunStepDetailComponent_Conditional_0_Conditional_28_Conditional_13_Conditional_1_ng_container_0_Template, 1, 0, "ng-container", 35);
|
|
152
|
+
} if (rf & 2) {
|
|
153
|
+
const ctx_r1 = i0.ɵɵnextContext(4);
|
|
154
|
+
const scratchpadSnapshotTpl_r8 = i0.ɵɵreference(2);
|
|
155
|
+
i0.ɵɵproperty("ngTemplateOutlet", scratchpadSnapshotTpl_r8)("ngTemplateOutletContext", i0.ɵɵpureFunction1(2, _c0, ctx_r1.stepScratchpadOutput));
|
|
156
|
+
} }
|
|
157
|
+
function AIAgentRunStepDetailComponent_Conditional_0_Conditional_28_Conditional_13_Conditional_2_Template(rf, ctx) { if (rf & 1) {
|
|
158
|
+
i0.ɵɵelementStart(0, "div", 32);
|
|
159
|
+
i0.ɵɵelement(1, "i", 36);
|
|
160
|
+
i0.ɵɵelementStart(2, "span");
|
|
161
|
+
i0.ɵɵtext(3, "No scratchpad output for this step");
|
|
162
|
+
i0.ɵɵelementEnd()();
|
|
163
|
+
} }
|
|
164
|
+
function AIAgentRunStepDetailComponent_Conditional_0_Conditional_28_Conditional_13_Template(rf, ctx) { if (rf & 1) {
|
|
165
|
+
i0.ɵɵelementStart(0, "div", 31);
|
|
166
|
+
i0.ɵɵconditionalCreate(1, AIAgentRunStepDetailComponent_Conditional_0_Conditional_28_Conditional_13_Conditional_1_Template, 1, 4, "ng-container")(2, AIAgentRunStepDetailComponent_Conditional_0_Conditional_28_Conditional_13_Conditional_2_Template, 4, 0, "div", 32);
|
|
167
|
+
i0.ɵɵelementEnd();
|
|
168
|
+
} if (rf & 2) {
|
|
169
|
+
const ctx_r1 = i0.ɵɵnextContext(3);
|
|
170
|
+
i0.ɵɵadvance();
|
|
171
|
+
i0.ɵɵconditional(ctx_r1.stepScratchpadOutput ? 1 : 2);
|
|
172
|
+
} }
|
|
45
173
|
function AIAgentRunStepDetailComponent_Conditional_0_Conditional_28_Template(rf, ctx) { if (rf & 1) {
|
|
46
|
-
const
|
|
47
|
-
i0.ɵɵelementStart(0, "div",
|
|
48
|
-
i0.ɵɵlistener("click", function AIAgentRunStepDetailComponent_Conditional_0_Conditional_28_Template_button_click_2_listener() { i0.ɵɵrestoreView(
|
|
49
|
-
i0.ɵɵelement(3, "i",
|
|
174
|
+
const _r7 = i0.ɵɵgetCurrentView();
|
|
175
|
+
i0.ɵɵelementStart(0, "div", 14)(1, "div", 25)(2, "button", 26);
|
|
176
|
+
i0.ɵɵlistener("click", function AIAgentRunStepDetailComponent_Conditional_0_Conditional_28_Template_button_click_2_listener() { i0.ɵɵrestoreView(_r7); const ctx_r1 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r1.scratchpadSubTab = "diff"); });
|
|
177
|
+
i0.ɵɵelement(3, "i", 27);
|
|
178
|
+
i0.ɵɵtext(4, " Diff ");
|
|
179
|
+
i0.ɵɵelementEnd();
|
|
180
|
+
i0.ɵɵelementStart(5, "button", 26);
|
|
181
|
+
i0.ɵɵlistener("click", function AIAgentRunStepDetailComponent_Conditional_0_Conditional_28_Template_button_click_5_listener() { i0.ɵɵrestoreView(_r7); const ctx_r1 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r1.scratchpadSubTab = "input"); });
|
|
182
|
+
i0.ɵɵelement(6, "i", 28);
|
|
183
|
+
i0.ɵɵtext(7, " Input ");
|
|
184
|
+
i0.ɵɵelementEnd();
|
|
185
|
+
i0.ɵɵelementStart(8, "button", 26);
|
|
186
|
+
i0.ɵɵlistener("click", function AIAgentRunStepDetailComponent_Conditional_0_Conditional_28_Template_button_click_8_listener() { i0.ɵɵrestoreView(_r7); const ctx_r1 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r1.scratchpadSubTab = "output"); });
|
|
187
|
+
i0.ɵɵelement(9, "i", 29);
|
|
188
|
+
i0.ɵɵtext(10, " Output ");
|
|
50
189
|
i0.ɵɵelementEnd()();
|
|
51
|
-
i0.ɵɵ
|
|
52
|
-
i0.ɵɵ
|
|
190
|
+
i0.ɵɵconditionalCreate(11, AIAgentRunStepDetailComponent_Conditional_0_Conditional_28_Conditional_11_Template, 4, 1, "div", 30);
|
|
191
|
+
i0.ɵɵconditionalCreate(12, AIAgentRunStepDetailComponent_Conditional_0_Conditional_28_Conditional_12_Template, 3, 1, "div", 31);
|
|
192
|
+
i0.ɵɵconditionalCreate(13, AIAgentRunStepDetailComponent_Conditional_0_Conditional_28_Conditional_13_Template, 3, 1, "div", 31);
|
|
193
|
+
i0.ɵɵelementEnd();
|
|
194
|
+
} if (rf & 2) {
|
|
195
|
+
const ctx_r1 = i0.ɵɵnextContext(2);
|
|
196
|
+
i0.ɵɵadvance(2);
|
|
197
|
+
i0.ɵɵclassProp("active", ctx_r1.scratchpadSubTab === "diff");
|
|
198
|
+
i0.ɵɵadvance(3);
|
|
199
|
+
i0.ɵɵclassProp("active", ctx_r1.scratchpadSubTab === "input");
|
|
200
|
+
i0.ɵɵadvance(3);
|
|
201
|
+
i0.ɵɵclassProp("active", ctx_r1.scratchpadSubTab === "output");
|
|
202
|
+
i0.ɵɵadvance(3);
|
|
203
|
+
i0.ɵɵconditional(ctx_r1.scratchpadSubTab === "diff" ? 11 : -1);
|
|
204
|
+
i0.ɵɵadvance();
|
|
205
|
+
i0.ɵɵconditional(ctx_r1.scratchpadSubTab === "input" ? 12 : -1);
|
|
206
|
+
i0.ɵɵadvance();
|
|
207
|
+
i0.ɵɵconditional(ctx_r1.scratchpadSubTab === "output" ? 13 : -1);
|
|
208
|
+
} }
|
|
209
|
+
function AIAgentRunStepDetailComponent_Conditional_0_Conditional_29_Template(rf, ctx) { if (rf & 1) {
|
|
210
|
+
const _r9 = i0.ɵɵgetCurrentView();
|
|
211
|
+
i0.ɵɵelementStart(0, "div", 15)(1, "div", 37)(2, "button", 38);
|
|
212
|
+
i0.ɵɵlistener("click", function AIAgentRunStepDetailComponent_Conditional_0_Conditional_29_Template_button_click_2_listener() { i0.ɵɵrestoreView(_r9); const ctx_r1 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r1.onCopyToClipboard()); });
|
|
213
|
+
i0.ɵɵelement(3, "i", 39);
|
|
214
|
+
i0.ɵɵelementEnd()();
|
|
215
|
+
i0.ɵɵelementStart(4, "mj-code-editor", 40);
|
|
216
|
+
i0.ɵɵtwoWayListener("ngModelChange", function AIAgentRunStepDetailComponent_Conditional_0_Conditional_29_Template_mj_code_editor_ngModelChange_4_listener($event) { i0.ɵɵrestoreView(_r9); const ctx_r1 = i0.ɵɵnextContext(2); i0.ɵɵtwoWayBindingSet(ctx_r1.selectedItemJsonString, $event) || (ctx_r1.selectedItemJsonString = $event); return i0.ɵɵresetView($event); });
|
|
53
217
|
i0.ɵɵelementEnd()();
|
|
54
218
|
} if (rf & 2) {
|
|
55
219
|
const ctx_r1 = i0.ɵɵnextContext(2);
|
|
@@ -59,37 +223,38 @@ function AIAgentRunStepDetailComponent_Conditional_0_Conditional_28_Template(rf,
|
|
|
59
223
|
} }
|
|
60
224
|
function AIAgentRunStepDetailComponent_Conditional_0_Template(rf, ctx) { if (rf & 1) {
|
|
61
225
|
const _r1 = i0.ɵɵgetCurrentView();
|
|
62
|
-
i0.ɵɵelementStart(0, "div",
|
|
63
|
-
i0.ɵɵelement(3, "i",
|
|
226
|
+
i0.ɵɵelementStart(0, "div", 1)(1, "div", 2)(2, "h3");
|
|
227
|
+
i0.ɵɵelement(3, "i", 3);
|
|
64
228
|
i0.ɵɵtext(4);
|
|
65
229
|
i0.ɵɵelementEnd();
|
|
66
|
-
i0.ɵɵelementStart(5, "button",
|
|
230
|
+
i0.ɵɵelementStart(5, "button", 4);
|
|
67
231
|
i0.ɵɵlistener("click", function AIAgentRunStepDetailComponent_Conditional_0_Template_button_click_5_listener() { i0.ɵɵrestoreView(_r1); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.onClosePanel()); });
|
|
68
|
-
i0.ɵɵelement(6, "i",
|
|
232
|
+
i0.ɵɵelement(6, "i", 5);
|
|
69
233
|
i0.ɵɵelementEnd()();
|
|
70
|
-
i0.ɵɵelementStart(7, "div",
|
|
234
|
+
i0.ɵɵelementStart(7, "div", 6)(8, "div", 7)(9, "div", 8)(10, "label");
|
|
71
235
|
i0.ɵɵtext(11, "Type");
|
|
72
236
|
i0.ɵɵelementEnd();
|
|
73
237
|
i0.ɵɵelementStart(12, "span");
|
|
74
238
|
i0.ɵɵtext(13);
|
|
75
239
|
i0.ɵɵelementEnd()();
|
|
76
|
-
i0.ɵɵelementStart(14, "div",
|
|
240
|
+
i0.ɵɵelementStart(14, "div", 8)(15, "label");
|
|
77
241
|
i0.ɵɵtext(16, "Status");
|
|
78
242
|
i0.ɵɵelementEnd();
|
|
79
|
-
i0.ɵɵelementStart(17, "span",
|
|
243
|
+
i0.ɵɵelementStart(17, "span", 9);
|
|
80
244
|
i0.ɵɵtext(18);
|
|
81
245
|
i0.ɵɵelementEnd()();
|
|
82
|
-
i0.ɵɵelementStart(19, "div",
|
|
246
|
+
i0.ɵɵelementStart(19, "div", 8)(20, "label");
|
|
83
247
|
i0.ɵɵtext(21, "Duration");
|
|
84
248
|
i0.ɵɵelementEnd();
|
|
85
249
|
i0.ɵɵelementStart(22, "span");
|
|
86
250
|
i0.ɵɵtext(23);
|
|
87
251
|
i0.ɵɵelementEnd()()();
|
|
88
|
-
i0.ɵɵconditionalCreate(24, AIAgentRunStepDetailComponent_Conditional_0_Conditional_24_Template, 4, 0, "div",
|
|
89
|
-
i0.ɵɵconditionalCreate(25, AIAgentRunStepDetailComponent_Conditional_0_Conditional_25_Template,
|
|
90
|
-
i0.ɵɵelementStart(26, "div",
|
|
91
|
-
i0.ɵɵconditionalCreate(27, AIAgentRunStepDetailComponent_Conditional_0_Conditional_27_Template, 2, 9, "div",
|
|
92
|
-
i0.ɵɵconditionalCreate(28, AIAgentRunStepDetailComponent_Conditional_0_Conditional_28_Template,
|
|
252
|
+
i0.ɵɵconditionalCreate(24, AIAgentRunStepDetailComponent_Conditional_0_Conditional_24_Template, 4, 0, "div", 10);
|
|
253
|
+
i0.ɵɵconditionalCreate(25, AIAgentRunStepDetailComponent_Conditional_0_Conditional_25_Template, 6, 4, "div", 11);
|
|
254
|
+
i0.ɵɵelementStart(26, "div", 12);
|
|
255
|
+
i0.ɵɵconditionalCreate(27, AIAgentRunStepDetailComponent_Conditional_0_Conditional_27_Template, 2, 9, "div", 13);
|
|
256
|
+
i0.ɵɵconditionalCreate(28, AIAgentRunStepDetailComponent_Conditional_0_Conditional_28_Template, 14, 9, "div", 14);
|
|
257
|
+
i0.ɵɵconditionalCreate(29, AIAgentRunStepDetailComponent_Conditional_0_Conditional_29_Template, 5, 3, "div", 15);
|
|
93
258
|
i0.ɵɵelementEnd()()();
|
|
94
259
|
} if (rf & 2) {
|
|
95
260
|
const ctx_r1 = i0.ɵɵnextContext();
|
|
@@ -108,13 +273,120 @@ function AIAgentRunStepDetailComponent_Conditional_0_Template(rf, ctx) { if (rf
|
|
|
108
273
|
i0.ɵɵadvance();
|
|
109
274
|
i0.ɵɵconditional(ctx_r1.selectedTimelineItem.type === "action" && (ctx_r1.selectedTimelineItem.data == null ? null : ctx_r1.selectedTimelineItem.data.ID) ? 24 : -1);
|
|
110
275
|
i0.ɵɵadvance();
|
|
111
|
-
i0.ɵɵconditional(ctx_r1.showStepPayloadDiff ? 25 : -1);
|
|
276
|
+
i0.ɵɵconditional(ctx_r1.showStepPayloadDiff || ctx_r1.showScratchpadTab ? 25 : -1);
|
|
112
277
|
i0.ɵɵadvance();
|
|
113
|
-
i0.ɵɵclassProp("with-tabs", ctx_r1.showStepPayloadDiff);
|
|
278
|
+
i0.ɵɵclassProp("with-tabs", ctx_r1.showStepPayloadDiff || ctx_r1.showScratchpadTab);
|
|
114
279
|
i0.ɵɵadvance();
|
|
115
280
|
i0.ɵɵconditional(ctx_r1.detailPaneTab === "diff" && ctx_r1.showStepPayloadDiff ? 27 : -1);
|
|
116
281
|
i0.ɵɵadvance();
|
|
117
|
-
i0.ɵɵconditional(ctx_r1.detailPaneTab === "
|
|
282
|
+
i0.ɵɵconditional(ctx_r1.detailPaneTab === "scratchpad" && ctx_r1.showScratchpadTab ? 28 : -1);
|
|
283
|
+
i0.ɵɵadvance();
|
|
284
|
+
i0.ɵɵconditional(ctx_r1.detailPaneTab === "json" || !ctx_r1.showStepPayloadDiff && !ctx_r1.showScratchpadTab ? 29 : -1);
|
|
285
|
+
} }
|
|
286
|
+
function AIAgentRunStepDetailComponent_ng_template_1_Conditional_1_Template(rf, ctx) { if (rf & 1) {
|
|
287
|
+
i0.ɵɵelementStart(0, "div", 41)(1, "h4");
|
|
288
|
+
i0.ɵɵelement(2, "i", 43);
|
|
289
|
+
i0.ɵɵtext(3, " Notes");
|
|
290
|
+
i0.ɵɵelementEnd();
|
|
291
|
+
i0.ɵɵelementStart(4, "div", 44);
|
|
292
|
+
i0.ɵɵtext(5);
|
|
293
|
+
i0.ɵɵelementEnd()();
|
|
294
|
+
} if (rf & 2) {
|
|
295
|
+
const snapshot_r10 = i0.ɵɵnextContext().$implicit;
|
|
296
|
+
i0.ɵɵadvance(5);
|
|
297
|
+
i0.ɵɵtextInterpolate(snapshot_r10.notes);
|
|
298
|
+
} }
|
|
299
|
+
function AIAgentRunStepDetailComponent_ng_template_1_Conditional_2_For_6_Case_2_Template(rf, ctx) { if (rf & 1) {
|
|
300
|
+
i0.ɵɵelement(0, "i", 49);
|
|
301
|
+
} }
|
|
302
|
+
function AIAgentRunStepDetailComponent_ng_template_1_Conditional_2_For_6_Case_3_Template(rf, ctx) { if (rf & 1) {
|
|
303
|
+
i0.ɵɵelement(0, "i", 50);
|
|
304
|
+
} }
|
|
305
|
+
function AIAgentRunStepDetailComponent_ng_template_1_Conditional_2_For_6_Case_4_Template(rf, ctx) { if (rf & 1) {
|
|
306
|
+
i0.ɵɵelement(0, "i", 51);
|
|
307
|
+
} }
|
|
308
|
+
function AIAgentRunStepDetailComponent_ng_template_1_Conditional_2_For_6_Case_5_Template(rf, ctx) { if (rf & 1) {
|
|
309
|
+
i0.ɵɵelement(0, "i", 52);
|
|
310
|
+
} }
|
|
311
|
+
function AIAgentRunStepDetailComponent_ng_template_1_Conditional_2_For_6_Conditional_11_Template(rf, ctx) { if (rf & 1) {
|
|
312
|
+
i0.ɵɵelementStart(0, "span", 56);
|
|
313
|
+
i0.ɵɵtext(1);
|
|
314
|
+
i0.ɵɵelementEnd();
|
|
315
|
+
} if (rf & 2) {
|
|
316
|
+
const task_r11 = i0.ɵɵnextContext().$implicit;
|
|
317
|
+
i0.ɵɵadvance();
|
|
318
|
+
i0.ɵɵtextInterpolate(task_r11.notes);
|
|
319
|
+
} }
|
|
320
|
+
function AIAgentRunStepDetailComponent_ng_template_1_Conditional_2_For_6_Template(rf, ctx) { if (rf & 1) {
|
|
321
|
+
i0.ɵɵelementStart(0, "div", 47)(1, "span", 48);
|
|
322
|
+
i0.ɵɵconditionalCreate(2, AIAgentRunStepDetailComponent_ng_template_1_Conditional_2_For_6_Case_2_Template, 1, 0, "i", 49)(3, AIAgentRunStepDetailComponent_ng_template_1_Conditional_2_For_6_Case_3_Template, 1, 0, "i", 50)(4, AIAgentRunStepDetailComponent_ng_template_1_Conditional_2_For_6_Case_4_Template, 1, 0, "i", 51)(5, AIAgentRunStepDetailComponent_ng_template_1_Conditional_2_For_6_Case_5_Template, 1, 0, "i", 52);
|
|
323
|
+
i0.ɵɵelementEnd();
|
|
324
|
+
i0.ɵɵelementStart(6, "div", 53)(7, "span", 54);
|
|
325
|
+
i0.ɵɵtext(8);
|
|
326
|
+
i0.ɵɵelementEnd();
|
|
327
|
+
i0.ɵɵelementStart(9, "span", 55);
|
|
328
|
+
i0.ɵɵtext(10);
|
|
329
|
+
i0.ɵɵelementEnd();
|
|
330
|
+
i0.ɵɵconditionalCreate(11, AIAgentRunStepDetailComponent_ng_template_1_Conditional_2_For_6_Conditional_11_Template, 2, 1, "span", 56);
|
|
331
|
+
i0.ɵɵelementEnd();
|
|
332
|
+
i0.ɵɵelementStart(12, "span", 57);
|
|
333
|
+
i0.ɵɵtext(13);
|
|
334
|
+
i0.ɵɵelementEnd()();
|
|
335
|
+
} if (rf & 2) {
|
|
336
|
+
let tmp_16_0;
|
|
337
|
+
const task_r11 = ctx.$implicit;
|
|
338
|
+
i0.ɵɵattribute("data-status", task_r11.status);
|
|
339
|
+
i0.ɵɵadvance();
|
|
340
|
+
i0.ɵɵattribute("data-status", task_r11.status);
|
|
341
|
+
i0.ɵɵadvance();
|
|
342
|
+
i0.ɵɵconditional((tmp_16_0 = task_r11.status) === "completed" ? 2 : tmp_16_0 === "in_progress" ? 3 : tmp_16_0 === "blocked" ? 4 : 5);
|
|
343
|
+
i0.ɵɵadvance(6);
|
|
344
|
+
i0.ɵɵtextInterpolate(task_r11.id);
|
|
345
|
+
i0.ɵɵadvance(2);
|
|
346
|
+
i0.ɵɵtextInterpolate(task_r11.title);
|
|
347
|
+
i0.ɵɵadvance();
|
|
348
|
+
i0.ɵɵconditional(task_r11.notes ? 11 : -1);
|
|
349
|
+
i0.ɵɵadvance();
|
|
350
|
+
i0.ɵɵattribute("data-status", task_r11.status);
|
|
351
|
+
i0.ɵɵadvance();
|
|
352
|
+
i0.ɵɵtextInterpolate(task_r11.status);
|
|
353
|
+
} }
|
|
354
|
+
function AIAgentRunStepDetailComponent_ng_template_1_Conditional_2_Template(rf, ctx) { if (rf & 1) {
|
|
355
|
+
i0.ɵɵelementStart(0, "div", 42)(1, "h4");
|
|
356
|
+
i0.ɵɵelement(2, "i", 45);
|
|
357
|
+
i0.ɵɵtext(3);
|
|
358
|
+
i0.ɵɵelementEnd();
|
|
359
|
+
i0.ɵɵelementStart(4, "div", 46);
|
|
360
|
+
i0.ɵɵrepeaterCreate(5, AIAgentRunStepDetailComponent_ng_template_1_Conditional_2_For_6_Template, 14, 8, "div", 47, _forTrack0);
|
|
361
|
+
i0.ɵɵelementEnd()();
|
|
362
|
+
} if (rf & 2) {
|
|
363
|
+
const snapshot_r10 = i0.ɵɵnextContext().$implicit;
|
|
364
|
+
i0.ɵɵadvance(3);
|
|
365
|
+
i0.ɵɵtextInterpolate1(" Tasks (", snapshot_r10.tasks.length, ")");
|
|
366
|
+
i0.ɵɵadvance(2);
|
|
367
|
+
i0.ɵɵrepeater(snapshot_r10.tasks);
|
|
368
|
+
} }
|
|
369
|
+
function AIAgentRunStepDetailComponent_ng_template_1_Conditional_3_Template(rf, ctx) { if (rf & 1) {
|
|
370
|
+
i0.ɵɵelementStart(0, "div", 32);
|
|
371
|
+
i0.ɵɵelement(1, "i", 36);
|
|
372
|
+
i0.ɵɵelementStart(2, "span");
|
|
373
|
+
i0.ɵɵtext(3, "Empty scratchpad");
|
|
374
|
+
i0.ɵɵelementEnd()();
|
|
375
|
+
} }
|
|
376
|
+
function AIAgentRunStepDetailComponent_ng_template_1_Template(rf, ctx) { if (rf & 1) {
|
|
377
|
+
i0.ɵɵelementStart(0, "div", 34);
|
|
378
|
+
i0.ɵɵconditionalCreate(1, AIAgentRunStepDetailComponent_ng_template_1_Conditional_1_Template, 6, 1, "div", 41);
|
|
379
|
+
i0.ɵɵconditionalCreate(2, AIAgentRunStepDetailComponent_ng_template_1_Conditional_2_Template, 7, 1, "div", 42);
|
|
380
|
+
i0.ɵɵconditionalCreate(3, AIAgentRunStepDetailComponent_ng_template_1_Conditional_3_Template, 4, 0, "div", 32);
|
|
381
|
+
i0.ɵɵelementEnd();
|
|
382
|
+
} if (rf & 2) {
|
|
383
|
+
const snapshot_r10 = ctx.$implicit;
|
|
384
|
+
i0.ɵɵadvance();
|
|
385
|
+
i0.ɵɵconditional(snapshot_r10.notes ? 1 : -1);
|
|
386
|
+
i0.ɵɵadvance();
|
|
387
|
+
i0.ɵɵconditional((snapshot_r10.tasks == null ? null : snapshot_r10.tasks.length) > 0 ? 2 : -1);
|
|
388
|
+
i0.ɵɵadvance();
|
|
389
|
+
i0.ɵɵconditional(!snapshot_r10.notes && (!snapshot_r10.tasks || snapshot_r10.tasks.length === 0) ? 3 : -1);
|
|
118
390
|
} }
|
|
119
391
|
export class AIAgentRunStepDetailComponent {
|
|
120
392
|
constructor(cdr) {
|
|
@@ -125,12 +397,22 @@ export class AIAgentRunStepDetailComponent {
|
|
|
125
397
|
this.copyToClipboard = new EventEmitter();
|
|
126
398
|
this.selectedItemJsonString = '{}';
|
|
127
399
|
this.detailPaneTab = 'diff';
|
|
400
|
+
this.scratchpadSubTab = 'diff';
|
|
128
401
|
}
|
|
129
402
|
ngOnChanges() {
|
|
130
403
|
if (this.selectedTimelineItem) {
|
|
131
404
|
this.selectedItemJsonString = this.getSelectedItemJson();
|
|
132
|
-
// Default to diff tab if step has payload diff, otherwise json
|
|
133
|
-
|
|
405
|
+
// Default to diff tab if step has payload diff, scratchpad if available, otherwise json
|
|
406
|
+
if (this.showStepPayloadDiff) {
|
|
407
|
+
this.detailPaneTab = 'diff';
|
|
408
|
+
}
|
|
409
|
+
else if (this.showScratchpadTab) {
|
|
410
|
+
this.detailPaneTab = 'scratchpad';
|
|
411
|
+
}
|
|
412
|
+
else {
|
|
413
|
+
this.detailPaneTab = 'json';
|
|
414
|
+
}
|
|
415
|
+
this.scratchpadSubTab = 'diff';
|
|
134
416
|
this.cdr.detectChanges();
|
|
135
417
|
}
|
|
136
418
|
}
|
|
@@ -244,16 +526,90 @@ export class AIAgentRunStepDetailComponent {
|
|
|
244
526
|
onCopyToClipboard() {
|
|
245
527
|
this.copyToClipboard.emit(this.getSelectedItemJson());
|
|
246
528
|
}
|
|
529
|
+
/**
|
|
530
|
+
* Whether the scratchpad tab should be shown (step has scratchpad data in InputData or OutputData)
|
|
531
|
+
*/
|
|
532
|
+
get showScratchpadTab() {
|
|
533
|
+
if (!this.selectedTimelineItem || this.selectedTimelineItem.type !== 'step') {
|
|
534
|
+
return false;
|
|
535
|
+
}
|
|
536
|
+
return this.stepScratchpadInput !== null || this.stepScratchpadOutput !== null;
|
|
537
|
+
}
|
|
538
|
+
/**
|
|
539
|
+
* Parse scratchpad snapshot from InputData JSON
|
|
540
|
+
*/
|
|
541
|
+
get stepScratchpadInput() {
|
|
542
|
+
return this.extractScratchpadFromField('InputData');
|
|
543
|
+
}
|
|
544
|
+
/**
|
|
545
|
+
* Parse scratchpad snapshot from OutputData JSON
|
|
546
|
+
*/
|
|
547
|
+
get stepScratchpadOutput() {
|
|
548
|
+
return this.extractScratchpadFromField('OutputData');
|
|
549
|
+
}
|
|
550
|
+
/**
|
|
551
|
+
* Number of tasks that changed between input and output scratchpad snapshots
|
|
552
|
+
*/
|
|
553
|
+
get scratchpadTaskChangeCount() {
|
|
554
|
+
const input = this.stepScratchpadInput;
|
|
555
|
+
const output = this.stepScratchpadOutput;
|
|
556
|
+
if (!input && !output)
|
|
557
|
+
return 0;
|
|
558
|
+
if (!input || !output)
|
|
559
|
+
return (output?.tasks?.length ?? 0) + (input?.tasks?.length ?? 0);
|
|
560
|
+
let changes = 0;
|
|
561
|
+
const inputMap = new Map(input.tasks.map(t => [t.id, t]));
|
|
562
|
+
const outputMap = new Map(output.tasks.map(t => [t.id, t]));
|
|
563
|
+
for (const [id, task] of outputMap) {
|
|
564
|
+
const prev = inputMap.get(id);
|
|
565
|
+
if (!prev || prev.status !== task.status || prev.title !== task.title || prev.notes !== task.notes) {
|
|
566
|
+
changes++;
|
|
567
|
+
}
|
|
568
|
+
}
|
|
569
|
+
for (const id of inputMap.keys()) {
|
|
570
|
+
if (!outputMap.has(id))
|
|
571
|
+
changes++; // removed tasks
|
|
572
|
+
}
|
|
573
|
+
if (input.notes !== output.notes)
|
|
574
|
+
changes++;
|
|
575
|
+
return changes;
|
|
576
|
+
}
|
|
577
|
+
extractScratchpadFromField(fieldName) {
|
|
578
|
+
if (!this.selectedTimelineItem || this.selectedTimelineItem.type !== 'step') {
|
|
579
|
+
return null;
|
|
580
|
+
}
|
|
581
|
+
const stepData = this.selectedTimelineItem.data;
|
|
582
|
+
const rawValue = stepData?.[fieldName];
|
|
583
|
+
if (!rawValue)
|
|
584
|
+
return null;
|
|
585
|
+
try {
|
|
586
|
+
let parsed = rawValue;
|
|
587
|
+
if (typeof parsed === 'string') {
|
|
588
|
+
parsed = JSON.parse(parsed);
|
|
589
|
+
}
|
|
590
|
+
const scratchpad = parsed?.scratchpad;
|
|
591
|
+
if (!scratchpad)
|
|
592
|
+
return null;
|
|
593
|
+
return {
|
|
594
|
+
notes: scratchpad.notes ?? '',
|
|
595
|
+
tasks: Array.isArray(scratchpad.tasks) ? scratchpad.tasks : []
|
|
596
|
+
};
|
|
597
|
+
}
|
|
598
|
+
catch {
|
|
599
|
+
return null;
|
|
600
|
+
}
|
|
601
|
+
}
|
|
247
602
|
static { this.ɵfac = function AIAgentRunStepDetailComponent_Factory(__ngFactoryType__) { return new (__ngFactoryType__ || AIAgentRunStepDetailComponent)(i0.ɵɵdirectiveInject(i0.ChangeDetectorRef)); }; }
|
|
248
|
-
static { this.ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: AIAgentRunStepDetailComponent, selectors: [["mj-ai-agent-run-step-detail"]], inputs: { selectedTimelineItem: "selectedTimelineItem" }, outputs: { closePanel: "closePanel", navigateToActionLog: "navigateToActionLog", copyToClipboard: "copyToClipboard" }, standalone: false, features: [i0.ɵɵNgOnChangesFeature], decls:
|
|
249
|
-
i0.ɵɵconditionalCreate(0, AIAgentRunStepDetailComponent_Conditional_0_Template,
|
|
603
|
+
static { this.ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: AIAgentRunStepDetailComponent, selectors: [["mj-ai-agent-run-step-detail"]], inputs: { selectedTimelineItem: "selectedTimelineItem" }, outputs: { closePanel: "closePanel", navigateToActionLog: "navigateToActionLog", copyToClipboard: "copyToClipboard" }, standalone: false, features: [i0.ɵɵNgOnChangesFeature], decls: 3, vars: 1, consts: [["scratchpadSnapshotTpl", ""], [1, "json-detail-pane"], [1, "json-pane-header"], [1, "fas", 3, "ngClass"], ["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"], [1, "action-link"], [1, "detail-pane-tabs"], [1, "detail-pane-content"], [1, "step-payload-diff"], [1, "scratchpad-content"], [1, "json-viewer"], [1, "btn-link", 3, "click"], [1, "fas", "fa-external-link-alt"], [1, "detail-tab", 3, "active"], [1, "detail-tab", 3, "click"], [1, "fa-solid", "fa-code"], [1, "fa-solid", "fa-code-branch"], [1, "fa-solid", "fa-clipboard-list"], [1, "tab-badge"], [3, "oldValue", "newValue", "title", "showSummary", "showUnchanged", "expandAll", "maxDepth", "maxStringLength", "treatNullAsUndefined"], [1, "scratchpad-sub-tabs"], [1, "scratchpad-sub-tab", 3, "click"], [1, "fa-solid", "fa-code-compare"], [1, "fa-solid", "fa-arrow-right-to-bracket"], [1, "fa-solid", "fa-arrow-right-from-bracket"], [1, "scratchpad-diff-view"], [1, "scratchpad-snapshot-view"], [1, "scratchpad-empty-state"], [1, "fa-solid", "fa-circle-plus"], [1, "scratchpad-snapshot"], [4, "ngTemplateOutlet", "ngTemplateOutletContext"], [1, "fa-solid", "fa-circle-info"], [1, "json-toolbar"], ["title", "Copy JSON", 1, "btn-icon", 3, "click"], [1, "fas", "fa-copy"], [2, "width", "100%", 3, "ngModelChange", "ngModel", "language", "readonly"], [1, "scratchpad-notes-section"], [1, "scratchpad-tasks-section"], [1, "fa-solid", "fa-note-sticky"], [1, "scratchpad-notes-content"], [1, "fa-solid", "fa-list-check"], [1, "scratchpad-task-list"], [1, "scratchpad-task-item"], [1, "task-status-indicator"], [1, "fa-solid", "fa-circle-check"], [1, "fa-solid", "fa-spinner"], [1, "fa-solid", "fa-circle-xmark"], [1, "fa-regular", "fa-circle"], [1, "task-content"], [1, "task-id"], [1, "task-title"], [1, "task-notes"], [1, "task-status-badge"]], template: function AIAgentRunStepDetailComponent_Template(rf, ctx) { if (rf & 1) {
|
|
604
|
+
i0.ɵɵconditionalCreate(0, AIAgentRunStepDetailComponent_Conditional_0_Template, 30, 13, "div", 1);
|
|
605
|
+
i0.ɵɵtemplate(1, AIAgentRunStepDetailComponent_ng_template_1_Template, 4, 3, "ng-template", null, 0, i0.ɵɵtemplateRefExtractor);
|
|
250
606
|
} if (rf & 2) {
|
|
251
607
|
i0.ɵɵconditional(ctx.selectedTimelineItem ? 0 : -1);
|
|
252
|
-
} }, dependencies: [i1.NgClass, i2.NgControlStatus, i2.NgModel, i3.CodeEditorComponent, i4.DeepDiffComponent], styles: [".json-detail-pane[_ngcontent-%COMP%] {\n height: 100%;\n display: flex;\n flex-direction: column;\n background: var(--mj-bg-surface);\n border-left: 1px solid var(--mj-border-default);\n}\n\n.json-pane-header[_ngcontent-%COMP%] {\n padding: 16px;\n border-bottom: 1px solid var(--mj-border-default);\n display: flex;\n justify-content: space-between;\n align-items: center;\n background: var(--mj-bg-surface-sunken);\n}\n\n.json-pane-header[_ngcontent-%COMP%] h3[_ngcontent-%COMP%] {\n margin: 0;\n font-size: 16px;\n font-weight: 600;\n color: var(--mj-text-primary);\n display: flex;\n align-items: center;\n gap: 8px;\n}\n\n.btn-icon[_ngcontent-%COMP%] {\n background: none;\n border: none;\n padding: 4px 8px;\n cursor: pointer;\n color: var(--mj-text-muted);\n border-radius: 4px;\n transition: all 0.2s;\n}\n\n.btn-icon[_ngcontent-%COMP%]:hover {\n background: color-mix(in srgb, var(--mj-text-primary) 5%, transparent);\n color: var(--mj-text-secondary);\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;\n display: flex;\n gap: 24px;\n border-bottom: 1px solid var(--mj-border-default);\n}\n\n.meta-item[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n gap: 4px;\n}\n\n.meta-item[_ngcontent-%COMP%] label[_ngcontent-%COMP%] {\n font-size: 11px;\n text-transform: uppercase;\n color: var(--mj-text-muted);\n font-weight: 600;\n}\n\n.meta-item[_ngcontent-%COMP%] span[_ngcontent-%COMP%] {\n font-size: 13px;\n color: var(--mj-text-primary);\n}\n\n.status-badge[_ngcontent-%COMP%] {\n display: inline-flex;\n align-items: center;\n padding: 4px 8px;\n border-radius: 4px;\n font-size: 11px;\n font-weight: 600;\n text-transform: uppercase;\n}\n\n.status-badge.small[_ngcontent-%COMP%] {\n padding: 2px 6px;\n font-size: 10px;\n}\n\n.status-badge[data-status=\"Running\"][_ngcontent-%COMP%] {\n background: color-mix(in srgb, var(--mj-brand-primary) 15%, var(--mj-bg-surface));\n color: var(--mj-brand-primary);\n}\n\n.status-badge[data-status=\"Completed\"][_ngcontent-%COMP%] {\n background: color-mix(in srgb, var(--mj-status-success) 15%, var(--mj-bg-surface));\n color: var(--mj-status-success);\n}\n\n.status-badge[data-status=\"Failed\"][_ngcontent-%COMP%] {\n background: color-mix(in srgb, var(--mj-status-error) 15%, var(--mj-bg-surface));\n color: var(--mj-status-error);\n}\n\n.status-badge[data-status=\"Cancelled\"][_ngcontent-%COMP%] {\n background: color-mix(in srgb, var(--mj-status-warning) 15%, var(--mj-bg-surface));\n color: var(--mj-status-warning);\n}\n\n.action-link[_ngcontent-%COMP%] {\n padding: 12px 16px;\n border-bottom: 1px solid var(--mj-border-default);\n}\n\n.btn-link[_ngcontent-%COMP%] {\n background: none;\n border: none;\n color: var(--mj-brand-primary);\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 font-size: 13px;\n}\n\n.btn-link[_ngcontent-%COMP%]:hover {\n background: color-mix(in srgb, var(--mj-brand-primary) 10%, transparent);\n color: var(--mj-brand-primary);\n}\n\n.detail-pane-tabs[_ngcontent-%COMP%] {\n display: flex;\n gap: 0;\n background: var(--mj-bg-surface-sunken);\n border-bottom: 1px solid var(--mj-border-default);\n padding: 0 16px;\n}\n\n.detail-tab[_ngcontent-%COMP%] {\n padding: 12px 16px;\n background: none;\n border: none;\n border-bottom: 2px solid transparent;\n cursor: pointer;\n font-size: 13px;\n color: var(--mj-text-muted);\n transition: all 0.2s;\n display: flex;\n align-items: center;\n gap: 6px;\n}\n\n.detail-tab[_ngcontent-%COMP%]:hover {\n color: var(--mj-text-secondary);\n background: color-mix(in srgb, var(--mj-text-primary) 2%, transparent);\n}\n\n.detail-tab.active[_ngcontent-%COMP%] {\n color: var(--mj-brand-primary);\n border-bottom-color: var(--mj-brand-primary);\n font-weight: 600;\n}\n\n.detail-pane-content[_ngcontent-%COMP%] {\n flex: 1;\n display: flex;\n flex-direction: column;\n overflow: hidden;\n min-height: 0; \n\n}\n\n\n\n\n\n\n\n\n.json-viewer[_ngcontent-%COMP%] {\n flex: 1;\n display: flex;\n flex-direction: column;\n position: relative;\n overflow: hidden;\n min-height: 0; \n\n}\n\n.json-toolbar[_ngcontent-%COMP%] {\n position: absolute;\n top: 8px;\n right: 8px;\n z-index: 10;\n display: flex;\n gap: 4px;\n}\n\n.step-payload-diff[_ngcontent-%COMP%] {\n flex: 1;\n overflow-y: auto;\n padding: 16px;\n min-height: 0; \n\n}\n\n\n\n.json-viewer[_ngcontent-%COMP%] mj-code-editor[_ngcontent-%COMP%] {\n flex: 1;\n overflow: hidden;\n min-height: 0;\n display: flex;\n flex-direction: column;\n}"] }); }
|
|
608
|
+
} }, dependencies: [i1.NgClass, i1.NgTemplateOutlet, i2.NgControlStatus, i2.NgModel, i3.CodeEditorComponent, i4.DeepDiffComponent], styles: [".json-detail-pane[_ngcontent-%COMP%] {\n height: 100%;\n display: flex;\n flex-direction: column;\n background: var(--mj-bg-surface);\n border-left: 1px solid var(--mj-border-default);\n}\n\n.json-pane-header[_ngcontent-%COMP%] {\n padding: 16px;\n border-bottom: 1px solid var(--mj-border-default);\n display: flex;\n justify-content: space-between;\n align-items: center;\n background: var(--mj-bg-surface-sunken);\n}\n\n.json-pane-header[_ngcontent-%COMP%] h3[_ngcontent-%COMP%] {\n margin: 0;\n font-size: 16px;\n font-weight: 600;\n color: var(--mj-text-primary);\n display: flex;\n align-items: center;\n gap: 8px;\n}\n\n.btn-icon[_ngcontent-%COMP%] {\n background: none;\n border: none;\n padding: 4px 8px;\n cursor: pointer;\n color: var(--mj-text-muted);\n border-radius: 4px;\n transition: all 0.2s;\n}\n\n.btn-icon[_ngcontent-%COMP%]:hover {\n background: color-mix(in srgb, var(--mj-text-primary) 5%, transparent);\n color: var(--mj-text-secondary);\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;\n display: flex;\n gap: 24px;\n border-bottom: 1px solid var(--mj-border-default);\n}\n\n.meta-item[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n gap: 4px;\n}\n\n.meta-item[_ngcontent-%COMP%] label[_ngcontent-%COMP%] {\n font-size: 11px;\n text-transform: uppercase;\n color: var(--mj-text-muted);\n font-weight: 600;\n}\n\n.meta-item[_ngcontent-%COMP%] span[_ngcontent-%COMP%] {\n font-size: 13px;\n color: var(--mj-text-primary);\n}\n\n.status-badge[_ngcontent-%COMP%] {\n display: inline-flex;\n align-items: center;\n padding: 4px 8px;\n border-radius: 4px;\n font-size: 11px;\n font-weight: 600;\n text-transform: uppercase;\n}\n\n.status-badge.small[_ngcontent-%COMP%] {\n padding: 2px 6px;\n font-size: 10px;\n}\n\n.status-badge[data-status=\"Running\"][_ngcontent-%COMP%] {\n background: color-mix(in srgb, var(--mj-brand-primary) 15%, var(--mj-bg-surface));\n color: var(--mj-brand-primary);\n}\n\n.status-badge[data-status=\"Completed\"][_ngcontent-%COMP%] {\n background: color-mix(in srgb, var(--mj-status-success) 15%, var(--mj-bg-surface));\n color: var(--mj-status-success);\n}\n\n.status-badge[data-status=\"Failed\"][_ngcontent-%COMP%] {\n background: color-mix(in srgb, var(--mj-status-error) 15%, var(--mj-bg-surface));\n color: var(--mj-status-error);\n}\n\n.status-badge[data-status=\"Cancelled\"][_ngcontent-%COMP%] {\n background: color-mix(in srgb, var(--mj-status-warning) 15%, var(--mj-bg-surface));\n color: var(--mj-status-warning);\n}\n\n.action-link[_ngcontent-%COMP%] {\n padding: 12px 16px;\n border-bottom: 1px solid var(--mj-border-default);\n}\n\n.btn-link[_ngcontent-%COMP%] {\n background: none;\n border: none;\n color: var(--mj-brand-primary);\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 font-size: 13px;\n}\n\n.btn-link[_ngcontent-%COMP%]:hover {\n background: color-mix(in srgb, var(--mj-brand-primary) 10%, transparent);\n color: var(--mj-brand-primary);\n}\n\n.detail-pane-tabs[_ngcontent-%COMP%] {\n display: flex;\n gap: 0;\n background: var(--mj-bg-surface-sunken);\n border-bottom: 1px solid var(--mj-border-default);\n padding: 0 16px;\n}\n\n.detail-tab[_ngcontent-%COMP%] {\n padding: 12px 16px;\n background: none;\n border: none;\n border-bottom: 2px solid transparent;\n cursor: pointer;\n font-size: 13px;\n color: var(--mj-text-muted);\n transition: all 0.2s;\n display: flex;\n align-items: center;\n gap: 6px;\n}\n\n.detail-tab[_ngcontent-%COMP%]:hover {\n color: var(--mj-text-secondary);\n background: color-mix(in srgb, var(--mj-text-primary) 2%, transparent);\n}\n\n.detail-tab.active[_ngcontent-%COMP%] {\n color: var(--mj-brand-primary);\n border-bottom-color: var(--mj-brand-primary);\n font-weight: 600;\n}\n\n.detail-pane-content[_ngcontent-%COMP%] {\n flex: 1;\n display: flex;\n flex-direction: column;\n overflow: hidden;\n min-height: 0; \n\n}\n\n\n\n\n\n\n\n\n.json-viewer[_ngcontent-%COMP%] {\n flex: 1;\n display: flex;\n flex-direction: column;\n position: relative;\n overflow: hidden;\n min-height: 0; \n\n}\n\n.json-toolbar[_ngcontent-%COMP%] {\n position: absolute;\n top: 8px;\n right: 8px;\n z-index: 10;\n display: flex;\n gap: 4px;\n}\n\n.step-payload-diff[_ngcontent-%COMP%] {\n flex: 1;\n overflow-y: auto;\n padding: 16px;\n min-height: 0; \n\n}\n\n\n\n.json-viewer[_ngcontent-%COMP%] mj-code-editor[_ngcontent-%COMP%] {\n flex: 1;\n overflow: hidden;\n min-height: 0;\n display: flex;\n flex-direction: column;\n}\n\n\n\n.tab-badge[_ngcontent-%COMP%] {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n min-width: 18px;\n height: 18px;\n padding: 0 5px;\n border-radius: 9px;\n font-size: 10px;\n font-weight: 700;\n background: var(--mj-brand-primary);\n color: var(--mj-text-inverse);\n}\n\n\n\n.scratchpad-content[_ngcontent-%COMP%] {\n flex: 1;\n display: flex;\n flex-direction: column;\n overflow: hidden;\n min-height: 0;\n}\n\n\n\n.scratchpad-sub-tabs[_ngcontent-%COMP%] {\n display: flex;\n gap: 0;\n padding: 0 16px;\n border-bottom: 1px solid var(--mj-border-subtle);\n background: var(--mj-bg-surface);\n}\n\n.scratchpad-sub-tab[_ngcontent-%COMP%] {\n padding: 8px 12px;\n background: none;\n border: none;\n border-bottom: 2px solid transparent;\n cursor: pointer;\n font-size: 12px;\n color: var(--mj-text-muted);\n transition: all 0.2s;\n display: flex;\n align-items: center;\n gap: 5px;\n}\n\n.scratchpad-sub-tab[_ngcontent-%COMP%]:hover {\n color: var(--mj-text-secondary);\n background: color-mix(in srgb, var(--mj-text-primary) 2%, transparent);\n}\n\n.scratchpad-sub-tab.active[_ngcontent-%COMP%] {\n color: var(--mj-brand-primary);\n border-bottom-color: var(--mj-brand-primary);\n font-weight: 600;\n}\n\n\n\n.scratchpad-diff-view[_ngcontent-%COMP%], \n.scratchpad-snapshot-view[_ngcontent-%COMP%] {\n flex: 1;\n overflow-y: auto;\n padding: 16px;\n min-height: 0;\n}\n\n\n\n.scratchpad-snapshot[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n gap: 16px;\n}\n\n.scratchpad-notes-section[_ngcontent-%COMP%] h4[_ngcontent-%COMP%], \n.scratchpad-tasks-section[_ngcontent-%COMP%] h4[_ngcontent-%COMP%] {\n margin: 0 0 8px 0;\n font-size: 13px;\n font-weight: 600;\n color: var(--mj-text-secondary);\n display: flex;\n align-items: center;\n gap: 6px;\n}\n\n.scratchpad-notes-content[_ngcontent-%COMP%] {\n padding: 12px;\n background: var(--mj-bg-surface-sunken);\n border-radius: 6px;\n border: 1px solid var(--mj-border-subtle);\n font-size: 13px;\n line-height: 1.5;\n color: var(--mj-text-primary);\n white-space: pre-wrap;\n word-break: break-word;\n}\n\n\n\n.scratchpad-task-list[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n gap: 4px;\n}\n\n.scratchpad-task-item[_ngcontent-%COMP%] {\n display: flex;\n align-items: flex-start;\n gap: 8px;\n padding: 8px 12px;\n border-radius: 6px;\n background: var(--mj-bg-surface);\n border: 1px solid var(--mj-border-subtle);\n transition: background 0.15s;\n}\n\n.scratchpad-task-item[_ngcontent-%COMP%]:hover {\n background: var(--mj-bg-surface-hover);\n}\n\n\n\n.task-status-indicator[_ngcontent-%COMP%] {\n flex-shrink: 0;\n width: 16px;\n margin-top: 2px;\n font-size: 14px;\n}\n\n.task-status-indicator[data-status=\"completed\"][_ngcontent-%COMP%] {\n color: var(--mj-status-success);\n}\n\n.task-status-indicator[data-status=\"in_progress\"][_ngcontent-%COMP%] {\n color: var(--mj-brand-primary);\n}\n\n.task-status-indicator[data-status=\"blocked\"][_ngcontent-%COMP%] {\n color: var(--mj-status-error);\n}\n\n.task-status-indicator[data-status=\"pending\"][_ngcontent-%COMP%] {\n color: var(--mj-text-muted);\n}\n\n\n\n.task-content[_ngcontent-%COMP%] {\n flex: 1;\n display: flex;\n flex-direction: column;\n gap: 2px;\n min-width: 0;\n}\n\n.task-id[_ngcontent-%COMP%] {\n font-size: 10px;\n font-weight: 700;\n color: var(--mj-text-muted);\n text-transform: uppercase;\n}\n\n.task-title[_ngcontent-%COMP%] {\n font-size: 13px;\n color: var(--mj-text-primary);\n line-height: 1.4;\n}\n\n.task-notes[_ngcontent-%COMP%] {\n font-size: 12px;\n color: var(--mj-text-secondary);\n line-height: 1.4;\n font-style: italic;\n}\n\n\n\n.task-status-badge[_ngcontent-%COMP%] {\n flex-shrink: 0;\n padding: 2px 6px;\n border-radius: 4px;\n font-size: 10px;\n font-weight: 600;\n text-transform: uppercase;\n white-space: nowrap;\n}\n\n.task-status-badge[data-status=\"completed\"][_ngcontent-%COMP%] {\n background: color-mix(in srgb, var(--mj-status-success) 15%, var(--mj-bg-surface));\n color: var(--mj-status-success);\n}\n\n.task-status-badge[data-status=\"in_progress\"][_ngcontent-%COMP%] {\n background: color-mix(in srgb, var(--mj-brand-primary) 15%, var(--mj-bg-surface));\n color: var(--mj-brand-primary);\n}\n\n.task-status-badge[data-status=\"blocked\"][_ngcontent-%COMP%] {\n background: color-mix(in srgb, var(--mj-status-error) 15%, var(--mj-bg-surface));\n color: var(--mj-status-error);\n}\n\n.task-status-badge[data-status=\"pending\"][_ngcontent-%COMP%] {\n background: color-mix(in srgb, var(--mj-text-muted) 15%, var(--mj-bg-surface));\n color: var(--mj-text-muted);\n}\n\n\n\n.scratchpad-empty-state[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 8px;\n padding: 16px;\n color: var(--mj-text-muted);\n font-size: 13px;\n font-style: italic;\n}"] }); }
|
|
253
609
|
}
|
|
254
610
|
(() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(AIAgentRunStepDetailComponent, [{
|
|
255
611
|
type: Component,
|
|
256
|
-
args: [{ standalone: false, selector: 'mj-ai-agent-run-step-detail', template: "@if (selectedTimelineItem) {\n <div class=\"json-detail-pane\">\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)=\"onClosePanel()\" 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 <!-- Action-specific link -->\n @if (selectedTimelineItem.type === 'action' && selectedTimelineItem.data?.ID) {\n <div class=\"action-link\">\n <button class=\"btn-link\" (click)=\"onNavigateToActionLog(selectedTimelineItem.data.ID)\">\n <i class=\"fas fa-external-link-alt\"></i> View Action Execution Log\n </button>\n </div>\n }\n <!-- Tab Navigation - Only show when we have both options -->\n @if (showStepPayloadDiff) {\n <div class=\"detail-pane-tabs\">\n <button\n class=\"detail-tab\"\n [class.active]=\"detailPaneTab === 'diff'\"\n (click)=\"detailPaneTab = 'diff'\">\n <i class=\"fa-solid fa-code-branch\"></i>\n Payload Changes\n </button>\n <button\n class=\"detail-tab\"\n [class.active]=\"detailPaneTab === 'json'\"\n (click)=\"detailPaneTab = 'json'\">\n <i class=\"fa-solid fa-code\"></i>\n Full JSON\n </button>\n </div>\n }\n <!-- Tab Content -->\n <div class=\"detail-pane-content\" [class.with-tabs]=\"showStepPayloadDiff\">\n <!-- Payload Diff Tab -->\n @if (detailPaneTab === 'diff' && showStepPayloadDiff) {\n <div class=\"step-payload-diff\">\n <mj-deep-diff\n [oldValue]=\"stepPayloadAtStartObject\"\n [newValue]=\"stepPayloadAtEndObject\"\n [title]=\"''\"\n [showSummary]=\"true\"\n [showUnchanged]=\"false\"\n [expandAll]=\"false\"\n [maxDepth]=\"8\"\n [maxStringLength]=\"150\"\n [treatNullAsUndefined]=\"true\">\n </mj-deep-diff>\n </div>\n }\n <!-- Full JSON Tab -->\n @if (detailPaneTab === 'json' || !showStepPayloadDiff) {\n <div class=\"json-viewer\">\n <div class=\"json-toolbar\">\n <button class=\"btn-icon\" title=\"Copy JSON\" (click)=\"onCopyToClipboard()\">\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=\"width: 100%;\">\n </mj-code-editor>\n </div>\n }\n </div>\n </div>\n </div>\n}", styles: [".json-detail-pane {\n height: 100%;\n display: flex;\n flex-direction: column;\n background: var(--mj-bg-surface);\n border-left: 1px solid var(--mj-border-default);\n}\n\n.json-pane-header {\n padding: 16px;\n border-bottom: 1px solid var(--mj-border-default);\n display: flex;\n justify-content: space-between;\n align-items: center;\n background: var(--mj-bg-surface-sunken);\n}\n\n.json-pane-header h3 {\n margin: 0;\n font-size: 16px;\n font-weight: 600;\n color: var(--mj-text-primary);\n display: flex;\n align-items: center;\n gap: 8px;\n}\n\n.btn-icon {\n background: none;\n border: none;\n padding: 4px 8px;\n cursor: pointer;\n color: var(--mj-text-muted);\n border-radius: 4px;\n transition: all 0.2s;\n}\n\n.btn-icon:hover {\n background: color-mix(in srgb, var(--mj-text-primary) 5%, transparent);\n color: var(--mj-text-secondary);\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;\n display: flex;\n gap: 24px;\n border-bottom: 1px solid var(--mj-border-default);\n}\n\n.meta-item {\n display: flex;\n flex-direction: column;\n gap: 4px;\n}\n\n.meta-item label {\n font-size: 11px;\n text-transform: uppercase;\n color: var(--mj-text-muted);\n font-weight: 600;\n}\n\n.meta-item span {\n font-size: 13px;\n color: var(--mj-text-primary);\n}\n\n.status-badge {\n display: inline-flex;\n align-items: center;\n padding: 4px 8px;\n border-radius: 4px;\n font-size: 11px;\n font-weight: 600;\n text-transform: uppercase;\n}\n\n.status-badge.small {\n padding: 2px 6px;\n font-size: 10px;\n}\n\n.status-badge[data-status=\"Running\"] {\n background: color-mix(in srgb, var(--mj-brand-primary) 15%, var(--mj-bg-surface));\n color: var(--mj-brand-primary);\n}\n\n.status-badge[data-status=\"Completed\"] {\n background: color-mix(in srgb, var(--mj-status-success) 15%, var(--mj-bg-surface));\n color: var(--mj-status-success);\n}\n\n.status-badge[data-status=\"Failed\"] {\n background: color-mix(in srgb, var(--mj-status-error) 15%, var(--mj-bg-surface));\n color: var(--mj-status-error);\n}\n\n.status-badge[data-status=\"Cancelled\"] {\n background: color-mix(in srgb, var(--mj-status-warning) 15%, var(--mj-bg-surface));\n color: var(--mj-status-warning);\n}\n\n.action-link {\n padding: 12px 16px;\n border-bottom: 1px solid var(--mj-border-default);\n}\n\n.btn-link {\n background: none;\n border: none;\n color: var(--mj-brand-primary);\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 font-size: 13px;\n}\n\n.btn-link:hover {\n background: color-mix(in srgb, var(--mj-brand-primary) 10%, transparent);\n color: var(--mj-brand-primary);\n}\n\n.detail-pane-tabs {\n display: flex;\n gap: 0;\n background: var(--mj-bg-surface-sunken);\n border-bottom: 1px solid var(--mj-border-default);\n padding: 0 16px;\n}\n\n.detail-tab {\n padding: 12px 16px;\n background: none;\n border: none;\n border-bottom: 2px solid transparent;\n cursor: pointer;\n font-size: 13px;\n color: var(--mj-text-muted);\n transition: all 0.2s;\n display: flex;\n align-items: center;\n gap: 6px;\n}\n\n.detail-tab:hover {\n color: var(--mj-text-secondary);\n background: color-mix(in srgb, var(--mj-text-primary) 2%, transparent);\n}\n\n.detail-tab.active {\n color: var(--mj-brand-primary);\n border-bottom-color: var(--mj-brand-primary);\n font-weight: 600;\n}\n\n.detail-pane-content {\n flex: 1;\n display: flex;\n flex-direction: column;\n overflow: hidden;\n min-height: 0; /* Allow flexbox to properly size */\n}\n\n/* \n.detail-pane-content.with-tabs {\n // No explicit height needed with flexbox \n} \n*/\n\n.json-viewer {\n flex: 1;\n display: flex;\n flex-direction: column;\n position: relative;\n overflow: hidden;\n min-height: 0; /* Important for flexbox children to respect overflow */\n}\n\n.json-toolbar {\n position: absolute;\n top: 8px;\n right: 8px;\n z-index: 10;\n display: flex;\n gap: 4px;\n}\n\n.step-payload-diff {\n flex: 1;\n overflow-y: auto;\n padding: 16px;\n min-height: 0; /* Allow proper scrolling */\n}\n\n/* Specific styling for mj-code-editor container */\n.json-viewer mj-code-editor {\n flex: 1;\n overflow: hidden;\n min-height: 0;\n display: flex;\n flex-direction: column;\n}"] }]
|
|
612
|
+
args: [{ standalone: false, selector: 'mj-ai-agent-run-step-detail', template: "@if (selectedTimelineItem) {\n <div class=\"json-detail-pane\">\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)=\"onClosePanel()\" 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 <!-- Action-specific link -->\n @if (selectedTimelineItem.type === 'action' && selectedTimelineItem.data?.ID) {\n <div class=\"action-link\">\n <button class=\"btn-link\" (click)=\"onNavigateToActionLog(selectedTimelineItem.data.ID)\">\n <i class=\"fas fa-external-link-alt\"></i> View Action Execution Log\n </button>\n </div>\n }\n <!-- Tab Navigation - Show when we have payload diff or scratchpad data -->\n @if (showStepPayloadDiff || showScratchpadTab) {\n <div class=\"detail-pane-tabs\">\n @if (showStepPayloadDiff) {\n <button\n class=\"detail-tab\"\n [class.active]=\"detailPaneTab === 'diff'\"\n (click)=\"detailPaneTab = 'diff'\">\n <i class=\"fa-solid fa-code-branch\"></i>\n Payload Changes\n </button>\n }\n @if (showScratchpadTab) {\n <button\n class=\"detail-tab\"\n [class.active]=\"detailPaneTab === 'scratchpad'\"\n (click)=\"detailPaneTab = 'scratchpad'\">\n <i class=\"fa-solid fa-clipboard-list\"></i>\n Scratchpad\n @if (scratchpadTaskChangeCount > 0) {\n <span class=\"tab-badge\">{{ scratchpadTaskChangeCount }}</span>\n }\n </button>\n }\n <button\n class=\"detail-tab\"\n [class.active]=\"detailPaneTab === 'json'\"\n (click)=\"detailPaneTab = 'json'\">\n <i class=\"fa-solid fa-code\"></i>\n Full JSON\n </button>\n </div>\n }\n <!-- Tab Content -->\n <div class=\"detail-pane-content\" [class.with-tabs]=\"showStepPayloadDiff || showScratchpadTab\">\n <!-- Payload Diff Tab -->\n @if (detailPaneTab === 'diff' && showStepPayloadDiff) {\n <div class=\"step-payload-diff\">\n <mj-deep-diff\n [oldValue]=\"stepPayloadAtStartObject\"\n [newValue]=\"stepPayloadAtEndObject\"\n [title]=\"''\"\n [showSummary]=\"true\"\n [showUnchanged]=\"false\"\n [expandAll]=\"false\"\n [maxDepth]=\"8\"\n [maxStringLength]=\"150\"\n [treatNullAsUndefined]=\"true\">\n </mj-deep-diff>\n </div>\n }\n <!-- Scratchpad Tab -->\n @if (detailPaneTab === 'scratchpad' && showScratchpadTab) {\n <div class=\"scratchpad-content\">\n <div class=\"scratchpad-sub-tabs\">\n <button\n class=\"scratchpad-sub-tab\"\n [class.active]=\"scratchpadSubTab === 'diff'\"\n (click)=\"scratchpadSubTab = 'diff'\">\n <i class=\"fa-solid fa-code-compare\"></i> Diff\n </button>\n <button\n class=\"scratchpad-sub-tab\"\n [class.active]=\"scratchpadSubTab === 'input'\"\n (click)=\"scratchpadSubTab = 'input'\">\n <i class=\"fa-solid fa-arrow-right-to-bracket\"></i> Input\n </button>\n <button\n class=\"scratchpad-sub-tab\"\n [class.active]=\"scratchpadSubTab === 'output'\"\n (click)=\"scratchpadSubTab = 'output'\">\n <i class=\"fa-solid fa-arrow-right-from-bracket\"></i> Output\n </button>\n </div>\n <!-- Scratchpad Diff Sub-Tab -->\n @if (scratchpadSubTab === 'diff') {\n <div class=\"scratchpad-diff-view\">\n @if (stepScratchpadInput && stepScratchpadOutput) {\n <mj-deep-diff\n [oldValue]=\"stepScratchpadInput\"\n [newValue]=\"stepScratchpadOutput\"\n [title]=\"''\"\n [showSummary]=\"true\"\n [showUnchanged]=\"false\"\n [expandAll]=\"true\"\n [maxDepth]=\"6\"\n [maxStringLength]=\"300\"\n [treatNullAsUndefined]=\"true\">\n </mj-deep-diff>\n } @else if (stepScratchpadOutput) {\n <div class=\"scratchpad-empty-state\">\n <i class=\"fa-solid fa-circle-plus\"></i>\n <span>Scratchpad created in this step (no prior state)</span>\n </div>\n <div class=\"scratchpad-snapshot\">\n <ng-container *ngTemplateOutlet=\"scratchpadSnapshotTpl; context: { $implicit: stepScratchpadOutput }\"></ng-container>\n </div>\n } @else {\n <div class=\"scratchpad-empty-state\">\n <i class=\"fa-solid fa-circle-info\"></i>\n <span>No scratchpad changes in this step</span>\n </div>\n }\n </div>\n }\n <!-- Scratchpad Input Sub-Tab -->\n @if (scratchpadSubTab === 'input') {\n <div class=\"scratchpad-snapshot-view\">\n @if (stepScratchpadInput) {\n <ng-container *ngTemplateOutlet=\"scratchpadSnapshotTpl; context: { $implicit: stepScratchpadInput }\"></ng-container>\n } @else {\n <div class=\"scratchpad-empty-state\">\n <i class=\"fa-solid fa-circle-info\"></i>\n <span>No scratchpad input for this step</span>\n </div>\n }\n </div>\n }\n <!-- Scratchpad Output Sub-Tab -->\n @if (scratchpadSubTab === 'output') {\n <div class=\"scratchpad-snapshot-view\">\n @if (stepScratchpadOutput) {\n <ng-container *ngTemplateOutlet=\"scratchpadSnapshotTpl; context: { $implicit: stepScratchpadOutput }\"></ng-container>\n } @else {\n <div class=\"scratchpad-empty-state\">\n <i class=\"fa-solid fa-circle-info\"></i>\n <span>No scratchpad output for this step</span>\n </div>\n }\n </div>\n }\n </div>\n }\n <!-- Full JSON Tab -->\n @if (detailPaneTab === 'json' || (!showStepPayloadDiff && !showScratchpadTab)) {\n <div class=\"json-viewer\">\n <div class=\"json-toolbar\">\n <button class=\"btn-icon\" title=\"Copy JSON\" (click)=\"onCopyToClipboard()\">\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=\"width: 100%;\">\n </mj-code-editor>\n </div>\n }\n </div>\n </div>\n </div>\n}\n\n<!-- Reusable scratchpad snapshot template -->\n<ng-template #scratchpadSnapshotTpl let-snapshot>\n <div class=\"scratchpad-snapshot\">\n @if (snapshot.notes) {\n <div class=\"scratchpad-notes-section\">\n <h4><i class=\"fa-solid fa-note-sticky\"></i> Notes</h4>\n <div class=\"scratchpad-notes-content\">{{ snapshot.notes }}</div>\n </div>\n }\n @if (snapshot.tasks?.length > 0) {\n <div class=\"scratchpad-tasks-section\">\n <h4><i class=\"fa-solid fa-list-check\"></i> Tasks ({{ snapshot.tasks.length }})</h4>\n <div class=\"scratchpad-task-list\">\n @for (task of snapshot.tasks; track task.id) {\n <div class=\"scratchpad-task-item\" [attr.data-status]=\"task.status\">\n <span class=\"task-status-indicator\" [attr.data-status]=\"task.status\">\n @switch (task.status) {\n @case ('completed') { <i class=\"fa-solid fa-circle-check\"></i> }\n @case ('in_progress') { <i class=\"fa-solid fa-spinner\"></i> }\n @case ('blocked') { <i class=\"fa-solid fa-circle-xmark\"></i> }\n @default { <i class=\"fa-regular fa-circle\"></i> }\n }\n </span>\n <div class=\"task-content\">\n <span class=\"task-id\">{{ task.id }}</span>\n <span class=\"task-title\">{{ task.title }}</span>\n @if (task.notes) {\n <span class=\"task-notes\">{{ task.notes }}</span>\n }\n </div>\n <span class=\"task-status-badge\" [attr.data-status]=\"task.status\">{{ task.status }}</span>\n </div>\n }\n </div>\n </div>\n }\n @if (!snapshot.notes && (!snapshot.tasks || snapshot.tasks.length === 0)) {\n <div class=\"scratchpad-empty-state\">\n <i class=\"fa-solid fa-circle-info\"></i>\n <span>Empty scratchpad</span>\n </div>\n }\n </div>\n</ng-template>", styles: [".json-detail-pane {\n height: 100%;\n display: flex;\n flex-direction: column;\n background: var(--mj-bg-surface);\n border-left: 1px solid var(--mj-border-default);\n}\n\n.json-pane-header {\n padding: 16px;\n border-bottom: 1px solid var(--mj-border-default);\n display: flex;\n justify-content: space-between;\n align-items: center;\n background: var(--mj-bg-surface-sunken);\n}\n\n.json-pane-header h3 {\n margin: 0;\n font-size: 16px;\n font-weight: 600;\n color: var(--mj-text-primary);\n display: flex;\n align-items: center;\n gap: 8px;\n}\n\n.btn-icon {\n background: none;\n border: none;\n padding: 4px 8px;\n cursor: pointer;\n color: var(--mj-text-muted);\n border-radius: 4px;\n transition: all 0.2s;\n}\n\n.btn-icon:hover {\n background: color-mix(in srgb, var(--mj-text-primary) 5%, transparent);\n color: var(--mj-text-secondary);\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;\n display: flex;\n gap: 24px;\n border-bottom: 1px solid var(--mj-border-default);\n}\n\n.meta-item {\n display: flex;\n flex-direction: column;\n gap: 4px;\n}\n\n.meta-item label {\n font-size: 11px;\n text-transform: uppercase;\n color: var(--mj-text-muted);\n font-weight: 600;\n}\n\n.meta-item span {\n font-size: 13px;\n color: var(--mj-text-primary);\n}\n\n.status-badge {\n display: inline-flex;\n align-items: center;\n padding: 4px 8px;\n border-radius: 4px;\n font-size: 11px;\n font-weight: 600;\n text-transform: uppercase;\n}\n\n.status-badge.small {\n padding: 2px 6px;\n font-size: 10px;\n}\n\n.status-badge[data-status=\"Running\"] {\n background: color-mix(in srgb, var(--mj-brand-primary) 15%, var(--mj-bg-surface));\n color: var(--mj-brand-primary);\n}\n\n.status-badge[data-status=\"Completed\"] {\n background: color-mix(in srgb, var(--mj-status-success) 15%, var(--mj-bg-surface));\n color: var(--mj-status-success);\n}\n\n.status-badge[data-status=\"Failed\"] {\n background: color-mix(in srgb, var(--mj-status-error) 15%, var(--mj-bg-surface));\n color: var(--mj-status-error);\n}\n\n.status-badge[data-status=\"Cancelled\"] {\n background: color-mix(in srgb, var(--mj-status-warning) 15%, var(--mj-bg-surface));\n color: var(--mj-status-warning);\n}\n\n.action-link {\n padding: 12px 16px;\n border-bottom: 1px solid var(--mj-border-default);\n}\n\n.btn-link {\n background: none;\n border: none;\n color: var(--mj-brand-primary);\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 font-size: 13px;\n}\n\n.btn-link:hover {\n background: color-mix(in srgb, var(--mj-brand-primary) 10%, transparent);\n color: var(--mj-brand-primary);\n}\n\n.detail-pane-tabs {\n display: flex;\n gap: 0;\n background: var(--mj-bg-surface-sunken);\n border-bottom: 1px solid var(--mj-border-default);\n padding: 0 16px;\n}\n\n.detail-tab {\n padding: 12px 16px;\n background: none;\n border: none;\n border-bottom: 2px solid transparent;\n cursor: pointer;\n font-size: 13px;\n color: var(--mj-text-muted);\n transition: all 0.2s;\n display: flex;\n align-items: center;\n gap: 6px;\n}\n\n.detail-tab:hover {\n color: var(--mj-text-secondary);\n background: color-mix(in srgb, var(--mj-text-primary) 2%, transparent);\n}\n\n.detail-tab.active {\n color: var(--mj-brand-primary);\n border-bottom-color: var(--mj-brand-primary);\n font-weight: 600;\n}\n\n.detail-pane-content {\n flex: 1;\n display: flex;\n flex-direction: column;\n overflow: hidden;\n min-height: 0; /* Allow flexbox to properly size */\n}\n\n/* \n.detail-pane-content.with-tabs {\n // No explicit height needed with flexbox \n} \n*/\n\n.json-viewer {\n flex: 1;\n display: flex;\n flex-direction: column;\n position: relative;\n overflow: hidden;\n min-height: 0; /* Important for flexbox children to respect overflow */\n}\n\n.json-toolbar {\n position: absolute;\n top: 8px;\n right: 8px;\n z-index: 10;\n display: flex;\n gap: 4px;\n}\n\n.step-payload-diff {\n flex: 1;\n overflow-y: auto;\n padding: 16px;\n min-height: 0; /* Allow proper scrolling */\n}\n\n/* Specific styling for mj-code-editor container */\n.json-viewer mj-code-editor {\n flex: 1;\n overflow: hidden;\n min-height: 0;\n display: flex;\n flex-direction: column;\n}\n\n/* Tab badge for change count */\n.tab-badge {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n min-width: 18px;\n height: 18px;\n padding: 0 5px;\n border-radius: 9px;\n font-size: 10px;\n font-weight: 700;\n background: var(--mj-brand-primary);\n color: var(--mj-text-inverse);\n}\n\n/* Scratchpad content area */\n.scratchpad-content {\n flex: 1;\n display: flex;\n flex-direction: column;\n overflow: hidden;\n min-height: 0;\n}\n\n/* Scratchpad sub-tabs */\n.scratchpad-sub-tabs {\n display: flex;\n gap: 0;\n padding: 0 16px;\n border-bottom: 1px solid var(--mj-border-subtle);\n background: var(--mj-bg-surface);\n}\n\n.scratchpad-sub-tab {\n padding: 8px 12px;\n background: none;\n border: none;\n border-bottom: 2px solid transparent;\n cursor: pointer;\n font-size: 12px;\n color: var(--mj-text-muted);\n transition: all 0.2s;\n display: flex;\n align-items: center;\n gap: 5px;\n}\n\n.scratchpad-sub-tab:hover {\n color: var(--mj-text-secondary);\n background: color-mix(in srgb, var(--mj-text-primary) 2%, transparent);\n}\n\n.scratchpad-sub-tab.active {\n color: var(--mj-brand-primary);\n border-bottom-color: var(--mj-brand-primary);\n font-weight: 600;\n}\n\n/* Scratchpad diff and snapshot views */\n.scratchpad-diff-view,\n.scratchpad-snapshot-view {\n flex: 1;\n overflow-y: auto;\n padding: 16px;\n min-height: 0;\n}\n\n/* Scratchpad snapshot rendering */\n.scratchpad-snapshot {\n display: flex;\n flex-direction: column;\n gap: 16px;\n}\n\n.scratchpad-notes-section h4,\n.scratchpad-tasks-section h4 {\n margin: 0 0 8px 0;\n font-size: 13px;\n font-weight: 600;\n color: var(--mj-text-secondary);\n display: flex;\n align-items: center;\n gap: 6px;\n}\n\n.scratchpad-notes-content {\n padding: 12px;\n background: var(--mj-bg-surface-sunken);\n border-radius: 6px;\n border: 1px solid var(--mj-border-subtle);\n font-size: 13px;\n line-height: 1.5;\n color: var(--mj-text-primary);\n white-space: pre-wrap;\n word-break: break-word;\n}\n\n/* Task list */\n.scratchpad-task-list {\n display: flex;\n flex-direction: column;\n gap: 4px;\n}\n\n.scratchpad-task-item {\n display: flex;\n align-items: flex-start;\n gap: 8px;\n padding: 8px 12px;\n border-radius: 6px;\n background: var(--mj-bg-surface);\n border: 1px solid var(--mj-border-subtle);\n transition: background 0.15s;\n}\n\n.scratchpad-task-item:hover {\n background: var(--mj-bg-surface-hover);\n}\n\n/* Task status indicator icon */\n.task-status-indicator {\n flex-shrink: 0;\n width: 16px;\n margin-top: 2px;\n font-size: 14px;\n}\n\n.task-status-indicator[data-status=\"completed\"] {\n color: var(--mj-status-success);\n}\n\n.task-status-indicator[data-status=\"in_progress\"] {\n color: var(--mj-brand-primary);\n}\n\n.task-status-indicator[data-status=\"blocked\"] {\n color: var(--mj-status-error);\n}\n\n.task-status-indicator[data-status=\"pending\"] {\n color: var(--mj-text-muted);\n}\n\n/* Task content */\n.task-content {\n flex: 1;\n display: flex;\n flex-direction: column;\n gap: 2px;\n min-width: 0;\n}\n\n.task-id {\n font-size: 10px;\n font-weight: 700;\n color: var(--mj-text-muted);\n text-transform: uppercase;\n}\n\n.task-title {\n font-size: 13px;\n color: var(--mj-text-primary);\n line-height: 1.4;\n}\n\n.task-notes {\n font-size: 12px;\n color: var(--mj-text-secondary);\n line-height: 1.4;\n font-style: italic;\n}\n\n/* Task status badge */\n.task-status-badge {\n flex-shrink: 0;\n padding: 2px 6px;\n border-radius: 4px;\n font-size: 10px;\n font-weight: 600;\n text-transform: uppercase;\n white-space: nowrap;\n}\n\n.task-status-badge[data-status=\"completed\"] {\n background: color-mix(in srgb, var(--mj-status-success) 15%, var(--mj-bg-surface));\n color: var(--mj-status-success);\n}\n\n.task-status-badge[data-status=\"in_progress\"] {\n background: color-mix(in srgb, var(--mj-brand-primary) 15%, var(--mj-bg-surface));\n color: var(--mj-brand-primary);\n}\n\n.task-status-badge[data-status=\"blocked\"] {\n background: color-mix(in srgb, var(--mj-status-error) 15%, var(--mj-bg-surface));\n color: var(--mj-status-error);\n}\n\n.task-status-badge[data-status=\"pending\"] {\n background: color-mix(in srgb, var(--mj-text-muted) 15%, var(--mj-bg-surface));\n color: var(--mj-text-muted);\n}\n\n/* Empty state */\n.scratchpad-empty-state {\n display: flex;\n align-items: center;\n gap: 8px;\n padding: 16px;\n color: var(--mj-text-muted);\n font-size: 13px;\n font-style: italic;\n}"] }]
|
|
257
613
|
}], () => [{ type: i0.ChangeDetectorRef }], { selectedTimelineItem: [{
|
|
258
614
|
type: Input
|
|
259
615
|
}], closePanel: [{
|
|
@@ -263,5 +619,5 @@ export class AIAgentRunStepDetailComponent {
|
|
|
263
619
|
}], copyToClipboard: [{
|
|
264
620
|
type: Output
|
|
265
621
|
}] }); })();
|
|
266
|
-
(() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassDebugInfo(AIAgentRunStepDetailComponent, { className: "AIAgentRunStepDetailComponent", filePath: "src/lib/custom/ai-agent-run/ai-agent-run-step-detail.component.ts", lineNumber:
|
|
622
|
+
(() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassDebugInfo(AIAgentRunStepDetailComponent, { className: "AIAgentRunStepDetailComponent", filePath: "src/lib/custom/ai-agent-run/ai-agent-run-step-detail.component.ts", lineNumber: 22 }); })();
|
|
267
623
|
//# sourceMappingURL=ai-agent-run-step-detail.component.js.map
|