@memberjunction/ng-core-entity-forms 6.1.0-edge.1 → 6.1.0-edge.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/lib/custom/AIAgents/FlowAgentType/flow-agent-form-section.component.d.ts +19 -2
- package/dist/lib/custom/AIAgents/FlowAgentType/flow-agent-form-section.component.d.ts.map +1 -1
- package/dist/lib/custom/AIAgents/FlowAgentType/flow-agent-form-section.component.js +50 -9
- package/dist/lib/custom/AIAgents/FlowAgentType/flow-agent-form-section.component.js.map +1 -1
- package/dist/lib/custom/AIAgents/agent-form-tabs.d.ts +59 -0
- package/dist/lib/custom/AIAgents/agent-form-tabs.d.ts.map +1 -0
- package/dist/lib/custom/AIAgents/agent-form-tabs.js +53 -0
- package/dist/lib/custom/AIAgents/agent-form-tabs.js.map +1 -0
- package/dist/lib/custom/AIAgents/ai-agent-form.component.d.ts +54 -0
- package/dist/lib/custom/AIAgents/ai-agent-form.component.d.ts.map +1 -1
- package/dist/lib/custom/AIAgents/ai-agent-form.component.js +1300 -1143
- package/dist/lib/custom/AIAgents/ai-agent-form.component.js.map +1 -1
- package/dist/lib/custom/ai-agent-run/ai-agent-run-analytics.component.d.ts +25 -1
- package/dist/lib/custom/ai-agent-run/ai-agent-run-analytics.component.d.ts.map +1 -1
- package/dist/lib/custom/ai-agent-run/ai-agent-run-analytics.component.js +228 -170
- package/dist/lib/custom/ai-agent-run/ai-agent-run-analytics.component.js.map +1 -1
- package/dist/lib/custom/ai-agent-run/ai-agent-run-step-detail.component.d.ts +31 -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 +229 -157
- package/dist/lib/custom/ai-agent-run/ai-agent-run-step-detail.component.js.map +1 -1
- package/dist/lib/custom/ai-agent-run/ai-agent-run-step-node.component.d.ts +9 -0
- package/dist/lib/custom/ai-agent-run/ai-agent-run-step-node.component.d.ts.map +1 -1
- package/dist/lib/custom/ai-agent-run/ai-agent-run-step-node.component.js +86 -51
- package/dist/lib/custom/ai-agent-run/ai-agent-run-step-node.component.js.map +1 -1
- package/dist/lib/custom/ai-agent-run/ai-agent-run-timeline.component.d.ts +73 -4
- package/dist/lib/custom/ai-agent-run/ai-agent-run-timeline.component.d.ts.map +1 -1
- package/dist/lib/custom/ai-agent-run/ai-agent-run-timeline.component.js +133 -7
- package/dist/lib/custom/ai-agent-run/ai-agent-run-timeline.component.js.map +1 -1
- package/dist/lib/custom/ai-agent-run/ai-agent-run.component.d.ts +49 -1
- package/dist/lib/custom/ai-agent-run/ai-agent-run.component.d.ts.map +1 -1
- package/dist/lib/custom/ai-agent-run/ai-agent-run.component.js +383 -264
- package/dist/lib/custom/ai-agent-run/ai-agent-run.component.js.map +1 -1
- package/dist/lib/custom/ai-agent-run/flow/agent-run-flow.component.d.ts +10 -1
- package/dist/lib/custom/ai-agent-run/flow/agent-run-flow.component.d.ts.map +1 -1
- package/dist/lib/custom/ai-agent-run/flow/agent-run-flow.component.js +25 -3
- package/dist/lib/custom/ai-agent-run/flow/agent-run-flow.component.js.map +1 -1
- package/dist/lib/custom/ai-agent-run/flow/agent-run-flow.model.d.ts +21 -1
- package/dist/lib/custom/ai-agent-run/flow/agent-run-flow.model.d.ts.map +1 -1
- package/dist/lib/custom/ai-agent-run/flow/agent-run-flow.model.js +11 -0
- package/dist/lib/custom/ai-agent-run/flow/agent-run-flow.model.js.map +1 -1
- package/dist/lib/custom/ai-agent-run/flow/run-tree-flow-projection.d.ts +28 -0
- package/dist/lib/custom/ai-agent-run/flow/run-tree-flow-projection.d.ts.map +1 -0
- package/dist/lib/custom/ai-agent-run/flow/run-tree-flow-projection.js +120 -0
- package/dist/lib/custom/ai-agent-run/flow/run-tree-flow-projection.js.map +1 -0
- package/dist/lib/custom/ai-agent-run/run-tree-timeline-projection.d.ts +90 -0
- package/dist/lib/custom/ai-agent-run/run-tree-timeline-projection.d.ts.map +1 -0
- package/dist/lib/custom/ai-agent-run/run-tree-timeline-projection.js +326 -0
- package/dist/lib/custom/ai-agent-run/run-tree-timeline-projection.js.map +1 -0
- package/dist/lib/custom/custom-forms.module.d.ts +1 -1
- package/dist/lib/custom/custom-forms.module.d.ts.map +1 -1
- package/dist/lib/custom/custom-forms.module.js +4 -1
- package/dist/lib/custom/custom-forms.module.js.map +1 -1
- package/dist/lib/generated/Entities/MJAIAgentRequest/mjaiagentrequest.form.component.js +8 -6
- package/dist/lib/generated/Entities/MJAIAgentRequest/mjaiagentrequest.form.component.js.map +1 -1
- package/dist/lib/generated/Entities/MJAIModel/mjaimodel.form.component.js +171 -169
- package/dist/lib/generated/Entities/MJAIModel/mjaimodel.form.component.js.map +1 -1
- package/dist/lib/generated/Entities/MJAIModelType/mjaimodeltype.form.component.js +25 -23
- package/dist/lib/generated/Entities/MJAIModelType/mjaimodeltype.form.component.js.map +1 -1
- package/dist/lib/generated/Entities/MJAIModelVendor/mjaimodelvendor.form.component.js +15 -13
- package/dist/lib/generated/Entities/MJAIModelVendor/mjaimodelvendor.form.component.js.map +1 -1
- package/dist/lib/generated/Entities/MJAIPrompt/mjaiprompt.form.component.d.ts.map +1 -1
- package/dist/lib/generated/Entities/MJAIPrompt/mjaiprompt.form.component.js +43 -25
- package/dist/lib/generated/Entities/MJAIPrompt/mjaiprompt.form.component.js.map +1 -1
- package/dist/lib/generated/Entities/MJAction/mjaction.form.component.d.ts.map +1 -1
- package/dist/lib/generated/Entities/MJAction/mjaction.form.component.js +35 -17
- package/dist/lib/generated/Entities/MJAction/mjaction.form.component.js.map +1 -1
- package/dist/lib/generated/Entities/MJActionExecutionLog/mjactionexecutionlog.form.component.js +11 -11
- package/dist/lib/generated/Entities/MJActionExecutionLog/mjactionexecutionlog.form.component.js.map +1 -1
- package/dist/lib/generated/Entities/MJEntityAction/mjentityaction.form.component.js +38 -36
- package/dist/lib/generated/Entities/MJEntityAction/mjentityaction.form.component.js.map +1 -1
- package/dist/lib/generated/Entities/MJEntityActionParam/mjentityactionparam.form.component.d.ts.map +1 -1
- package/dist/lib/generated/Entities/MJEntityActionParam/mjentityactionparam.form.component.js +7 -13
- package/dist/lib/generated/Entities/MJEntityActionParam/mjentityactionparam.form.component.js.map +1 -1
- package/dist/lib/generated/Entities/MJTask/mjtask.form.component.d.ts.map +1 -1
- package/dist/lib/generated/Entities/MJTask/mjtask.form.component.js +52 -26
- package/dist/lib/generated/Entities/MJTask/mjtask.form.component.js.map +1 -1
- package/dist/lib/generated/Entities/MJTaskDependency/mjtaskdependency.form.component.d.ts.map +1 -1
- package/dist/lib/generated/Entities/MJTaskDependency/mjtaskdependency.form.component.js +16 -4
- package/dist/lib/generated/Entities/MJTaskDependency/mjtaskdependency.form.component.js.map +1 -1
- package/package.json +40 -40
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import { Component, Input, Output, EventEmitter } from '@angular/core';
|
|
2
2
|
import { MJAIAgentRunStepEntity } from '@memberjunction/core-entities';
|
|
3
|
+
import { ResolveTaskGraphPositions } from '@memberjunction/ai-core-plus';
|
|
3
4
|
import { ParseJSONRecursive } from '@memberjunction/global';
|
|
4
5
|
import * as i0 from "@angular/core";
|
|
5
6
|
import * as i1 from "@angular/common";
|
|
@@ -12,42 +13,51 @@ const _c0 = a0 => ({ $implicit: a0 });
|
|
|
12
13
|
const _forTrack0 = ($index, $item) => $item.SkillID;
|
|
13
14
|
const _forTrack1 = ($index, $item) => $item.id;
|
|
14
15
|
function AIAgentRunStepDetailComponent_Conditional_0_Conditional_24_Template(rf, ctx) { if (rf & 1) {
|
|
16
|
+
i0.ɵɵelementStart(0, "div", 10);
|
|
17
|
+
i0.ɵɵelement(1, "mj-alert", 19);
|
|
18
|
+
i0.ɵɵelementEnd();
|
|
19
|
+
} if (rf & 2) {
|
|
20
|
+
const ctx_r1 = i0.ɵɵnextContext(2);
|
|
21
|
+
i0.ɵɵadvance();
|
|
22
|
+
i0.ɵɵproperty("Variant", ctx_r1.StepNotice.Variant)("Message", ctx_r1.StepNotice.Message);
|
|
23
|
+
} }
|
|
24
|
+
function AIAgentRunStepDetailComponent_Conditional_0_Conditional_25_Template(rf, ctx) { if (rf & 1) {
|
|
15
25
|
const _r3 = i0.ɵɵgetCurrentView();
|
|
16
|
-
i0.ɵɵelementStart(0, "div",
|
|
17
|
-
i0.ɵɵlistener("click", function
|
|
18
|
-
i0.ɵɵelement(2, "i",
|
|
26
|
+
i0.ɵɵelementStart(0, "div", 11)(1, "button", 20);
|
|
27
|
+
i0.ɵɵlistener("click", function AIAgentRunStepDetailComponent_Conditional_0_Conditional_25_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)); });
|
|
28
|
+
i0.ɵɵelement(2, "i", 21);
|
|
19
29
|
i0.ɵɵtext(3, " View Action Execution Log ");
|
|
20
30
|
i0.ɵɵelementEnd()();
|
|
21
31
|
} }
|
|
22
|
-
function
|
|
32
|
+
function AIAgentRunStepDetailComponent_Conditional_0_Conditional_26_Conditional_1_Template(rf, ctx) { if (rf & 1) {
|
|
23
33
|
const _r5 = i0.ɵɵgetCurrentView();
|
|
24
|
-
i0.ɵɵelementStart(0, "button",
|
|
25
|
-
i0.ɵɵlistener("click", function
|
|
26
|
-
i0.ɵɵelement(1, "i",
|
|
34
|
+
i0.ɵɵelementStart(0, "button", 23);
|
|
35
|
+
i0.ɵɵlistener("click", function AIAgentRunStepDetailComponent_Conditional_0_Conditional_26_Conditional_1_Template_button_click_0_listener() { i0.ɵɵrestoreView(_r5); const ctx_r1 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r1.detailPaneTab = "graph"); });
|
|
36
|
+
i0.ɵɵelement(1, "i", 25);
|
|
27
37
|
i0.ɵɵtext(2, " Workflow ");
|
|
28
38
|
i0.ɵɵelementEnd();
|
|
29
39
|
} if (rf & 2) {
|
|
30
40
|
const ctx_r1 = i0.ɵɵnextContext(3);
|
|
31
41
|
i0.ɵɵclassProp("active", ctx_r1.detailPaneTab === "graph");
|
|
32
42
|
} }
|
|
33
|
-
function
|
|
43
|
+
function AIAgentRunStepDetailComponent_Conditional_0_Conditional_26_Conditional_2_Template(rf, ctx) { if (rf & 1) {
|
|
34
44
|
const _r6 = i0.ɵɵgetCurrentView();
|
|
35
|
-
i0.ɵɵelementStart(0, "button",
|
|
36
|
-
i0.ɵɵlistener("click", function
|
|
37
|
-
i0.ɵɵelement(1, "i",
|
|
45
|
+
i0.ɵɵelementStart(0, "button", 23);
|
|
46
|
+
i0.ɵɵlistener("click", function AIAgentRunStepDetailComponent_Conditional_0_Conditional_26_Conditional_2_Template_button_click_0_listener() { i0.ɵɵrestoreView(_r6); const ctx_r1 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r1.detailPaneTab = "diff"); });
|
|
47
|
+
i0.ɵɵelement(1, "i", 26);
|
|
38
48
|
i0.ɵɵtext(2, " Payload Changes ");
|
|
39
49
|
i0.ɵɵelementEnd();
|
|
40
50
|
} if (rf & 2) {
|
|
41
51
|
const ctx_r1 = i0.ɵɵnextContext(3);
|
|
42
52
|
i0.ɵɵclassProp("active", ctx_r1.detailPaneTab === "diff");
|
|
43
53
|
} }
|
|
44
|
-
function
|
|
54
|
+
function AIAgentRunStepDetailComponent_Conditional_0_Conditional_26_Conditional_3_Template(rf, ctx) { if (rf & 1) {
|
|
45
55
|
const _r7 = i0.ɵɵgetCurrentView();
|
|
46
|
-
i0.ɵɵelementStart(0, "button",
|
|
47
|
-
i0.ɵɵlistener("click", function
|
|
48
|
-
i0.ɵɵelement(1, "i",
|
|
56
|
+
i0.ɵɵelementStart(0, "button", 23);
|
|
57
|
+
i0.ɵɵlistener("click", function AIAgentRunStepDetailComponent_Conditional_0_Conditional_26_Conditional_3_Template_button_click_0_listener() { i0.ɵɵrestoreView(_r7); const ctx_r1 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r1.detailPaneTab = "skills"); });
|
|
58
|
+
i0.ɵɵelement(1, "i", 27);
|
|
49
59
|
i0.ɵɵtext(2, " Skills ");
|
|
50
|
-
i0.ɵɵelementStart(3, "span",
|
|
60
|
+
i0.ɵɵelementStart(3, "span", 28);
|
|
51
61
|
i0.ɵɵtext(4);
|
|
52
62
|
i0.ɵɵelementEnd()();
|
|
53
63
|
} if (rf & 2) {
|
|
@@ -56,8 +66,8 @@ function AIAgentRunStepDetailComponent_Conditional_0_Conditional_25_Conditional_
|
|
|
56
66
|
i0.ɵɵadvance(4);
|
|
57
67
|
i0.ɵɵtextInterpolate(ctx_r1.stepSkillInvocations.length);
|
|
58
68
|
} }
|
|
59
|
-
function
|
|
60
|
-
i0.ɵɵelementStart(0, "span",
|
|
69
|
+
function AIAgentRunStepDetailComponent_Conditional_0_Conditional_26_Conditional_4_Conditional_3_Template(rf, ctx) { if (rf & 1) {
|
|
70
|
+
i0.ɵɵelementStart(0, "span", 28);
|
|
61
71
|
i0.ɵɵtext(1);
|
|
62
72
|
i0.ɵɵelementEnd();
|
|
63
73
|
} if (rf & 2) {
|
|
@@ -65,13 +75,13 @@ function AIAgentRunStepDetailComponent_Conditional_0_Conditional_25_Conditional_
|
|
|
65
75
|
i0.ɵɵadvance();
|
|
66
76
|
i0.ɵɵtextInterpolate(ctx_r1.scratchpadTaskChangeCount);
|
|
67
77
|
} }
|
|
68
|
-
function
|
|
78
|
+
function AIAgentRunStepDetailComponent_Conditional_0_Conditional_26_Conditional_4_Template(rf, ctx) { if (rf & 1) {
|
|
69
79
|
const _r8 = i0.ɵɵgetCurrentView();
|
|
70
|
-
i0.ɵɵelementStart(0, "button",
|
|
71
|
-
i0.ɵɵlistener("click", function
|
|
72
|
-
i0.ɵɵelement(1, "i",
|
|
80
|
+
i0.ɵɵelementStart(0, "button", 23);
|
|
81
|
+
i0.ɵɵlistener("click", function AIAgentRunStepDetailComponent_Conditional_0_Conditional_26_Conditional_4_Template_button_click_0_listener() { i0.ɵɵrestoreView(_r8); const ctx_r1 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r1.detailPaneTab = "scratchpad"); });
|
|
82
|
+
i0.ɵɵelement(1, "i", 29);
|
|
73
83
|
i0.ɵɵtext(2, " Scratchpad ");
|
|
74
|
-
i0.ɵɵconditionalCreate(3,
|
|
84
|
+
i0.ɵɵconditionalCreate(3, AIAgentRunStepDetailComponent_Conditional_0_Conditional_26_Conditional_4_Conditional_3_Template, 2, 1, "span", 28);
|
|
75
85
|
i0.ɵɵelementEnd();
|
|
76
86
|
} if (rf & 2) {
|
|
77
87
|
const ctx_r1 = i0.ɵɵnextContext(3);
|
|
@@ -79,16 +89,16 @@ function AIAgentRunStepDetailComponent_Conditional_0_Conditional_25_Conditional_
|
|
|
79
89
|
i0.ɵɵadvance(3);
|
|
80
90
|
i0.ɵɵconditional(ctx_r1.scratchpadTaskChangeCount > 0 ? 3 : -1);
|
|
81
91
|
} }
|
|
82
|
-
function
|
|
92
|
+
function AIAgentRunStepDetailComponent_Conditional_0_Conditional_26_Template(rf, ctx) { if (rf & 1) {
|
|
83
93
|
const _r4 = i0.ɵɵgetCurrentView();
|
|
84
|
-
i0.ɵɵelementStart(0, "div",
|
|
85
|
-
i0.ɵɵconditionalCreate(1,
|
|
86
|
-
i0.ɵɵconditionalCreate(2,
|
|
87
|
-
i0.ɵɵconditionalCreate(3,
|
|
88
|
-
i0.ɵɵconditionalCreate(4,
|
|
89
|
-
i0.ɵɵelementStart(5, "button",
|
|
90
|
-
i0.ɵɵlistener("click", function
|
|
91
|
-
i0.ɵɵelement(6, "i",
|
|
94
|
+
i0.ɵɵelementStart(0, "div", 12);
|
|
95
|
+
i0.ɵɵconditionalCreate(1, AIAgentRunStepDetailComponent_Conditional_0_Conditional_26_Conditional_1_Template, 3, 2, "button", 22);
|
|
96
|
+
i0.ɵɵconditionalCreate(2, AIAgentRunStepDetailComponent_Conditional_0_Conditional_26_Conditional_2_Template, 3, 2, "button", 22);
|
|
97
|
+
i0.ɵɵconditionalCreate(3, AIAgentRunStepDetailComponent_Conditional_0_Conditional_26_Conditional_3_Template, 5, 3, "button", 22);
|
|
98
|
+
i0.ɵɵconditionalCreate(4, AIAgentRunStepDetailComponent_Conditional_0_Conditional_26_Conditional_4_Template, 4, 3, "button", 22);
|
|
99
|
+
i0.ɵɵelementStart(5, "button", 23);
|
|
100
|
+
i0.ɵɵlistener("click", function AIAgentRunStepDetailComponent_Conditional_0_Conditional_26_Template_button_click_5_listener() { i0.ɵɵrestoreView(_r4); const ctx_r1 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r1.detailPaneTab = "json"); });
|
|
101
|
+
i0.ɵɵelement(6, "i", 24);
|
|
92
102
|
i0.ɵɵtext(7, " Full JSON ");
|
|
93
103
|
i0.ɵɵelementEnd()();
|
|
94
104
|
} if (rf & 2) {
|
|
@@ -104,30 +114,30 @@ function AIAgentRunStepDetailComponent_Conditional_0_Conditional_25_Template(rf,
|
|
|
104
114
|
i0.ɵɵadvance();
|
|
105
115
|
i0.ɵɵclassProp("active", ctx_r1.detailPaneTab === "json");
|
|
106
116
|
} }
|
|
107
|
-
function
|
|
108
|
-
i0.ɵɵelement(0, "mj-alert",
|
|
117
|
+
function AIAgentRunStepDetailComponent_Conditional_0_Conditional_28_Conditional_2_Template(rf, ctx) { if (rf & 1) {
|
|
118
|
+
i0.ɵɵelement(0, "mj-alert", 31);
|
|
109
119
|
} }
|
|
110
|
-
function
|
|
120
|
+
function AIAgentRunStepDetailComponent_Conditional_0_Conditional_28_Template(rf, ctx) { if (rf & 1) {
|
|
111
121
|
const _r9 = i0.ɵɵgetCurrentView();
|
|
112
|
-
i0.ɵɵelementStart(0, "div",
|
|
113
|
-
i0.ɵɵconditionalCreate(2,
|
|
114
|
-
i0.ɵɵelementStart(3, "button",
|
|
115
|
-
i0.ɵɵlistener("click", function
|
|
116
|
-
i0.ɵɵelement(4, "i",
|
|
122
|
+
i0.ɵɵelementStart(0, "div", 14)(1, "div", 30);
|
|
123
|
+
i0.ɵɵconditionalCreate(2, AIAgentRunStepDetailComponent_Conditional_0_Conditional_28_Conditional_2_Template, 1, 0, "mj-alert", 31);
|
|
124
|
+
i0.ɵɵelementStart(3, "button", 32);
|
|
125
|
+
i0.ɵɵlistener("click", function AIAgentRunStepDetailComponent_Conditional_0_Conditional_28_Template_button_click_3_listener() { i0.ɵɵrestoreView(_r9); const ctx_r1 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r1.RequestSaveAsWorkflow()); });
|
|
126
|
+
i0.ɵɵelement(4, "i", 33);
|
|
117
127
|
i0.ɵɵtext(5, " Save as Workflow ");
|
|
118
128
|
i0.ɵɵelementEnd()();
|
|
119
|
-
i0.ɵɵelement(6, "mj-task-graph-editor",
|
|
129
|
+
i0.ɵɵelement(6, "mj-task-graph-editor", 34);
|
|
120
130
|
i0.ɵɵelementEnd();
|
|
121
131
|
} if (rf & 2) {
|
|
122
132
|
const ctx_r1 = i0.ɵɵnextContext(2);
|
|
123
133
|
i0.ɵɵadvance(2);
|
|
124
134
|
i0.ɵɵconditional(ctx_r1.stepTaskGraphWasFolded ? 2 : -1);
|
|
125
135
|
i0.ɵɵadvance(4);
|
|
126
|
-
i0.ɵɵproperty("Spec", ctx_r1.stepTaskGraph)("ReadOnly", true)("ShowPalette", false);
|
|
136
|
+
i0.ɵɵproperty("Spec", ctx_r1.stepTaskGraph)("NodePositions", ctx_r1.stepTaskGraphPositions)("ReadOnly", true)("ShowPalette", false);
|
|
127
137
|
} }
|
|
128
|
-
function
|
|
129
|
-
i0.ɵɵelementStart(0, "div",
|
|
130
|
-
i0.ɵɵelement(1, "i",
|
|
138
|
+
function AIAgentRunStepDetailComponent_Conditional_0_Conditional_29_For_2_Conditional_7_Template(rf, ctx) { if (rf & 1) {
|
|
139
|
+
i0.ɵɵelementStart(0, "div", 39);
|
|
140
|
+
i0.ɵɵelement(1, "i", 46);
|
|
131
141
|
i0.ɵɵtext(2);
|
|
132
142
|
i0.ɵɵelementEnd();
|
|
133
143
|
} if (rf & 2) {
|
|
@@ -135,46 +145,46 @@ function AIAgentRunStepDetailComponent_Conditional_0_Conditional_28_For_2_Condit
|
|
|
135
145
|
i0.ɵɵadvance(2);
|
|
136
146
|
i0.ɵɵtextInterpolate1(" ", inv_r10.Reason, " ");
|
|
137
147
|
} }
|
|
138
|
-
function
|
|
139
|
-
i0.ɵɵelementStart(0, "div",
|
|
140
|
-
i0.ɵɵelement(3, "i",
|
|
148
|
+
function AIAgentRunStepDetailComponent_Conditional_0_Conditional_29_For_2_Template(rf, ctx) { if (rf & 1) {
|
|
149
|
+
i0.ɵɵelementStart(0, "div", 35)(1, "div", 36)(2, "span", 37);
|
|
150
|
+
i0.ɵɵelement(3, "i", 27);
|
|
141
151
|
i0.ɵɵtext(4);
|
|
142
152
|
i0.ɵɵelementEnd();
|
|
143
|
-
i0.ɵɵelementStart(5, "span",
|
|
153
|
+
i0.ɵɵelementStart(5, "span", 38);
|
|
144
154
|
i0.ɵɵtext(6);
|
|
145
155
|
i0.ɵɵelementEnd()();
|
|
146
|
-
i0.ɵɵconditionalCreate(7,
|
|
147
|
-
i0.ɵɵelementStart(8, "div",
|
|
156
|
+
i0.ɵɵconditionalCreate(7, AIAgentRunStepDetailComponent_Conditional_0_Conditional_29_For_2_Conditional_7_Template, 3, 1, "div", 39);
|
|
157
|
+
i0.ɵɵelementStart(8, "div", 40)(9, "div", 41);
|
|
148
158
|
i0.ɵɵtext(10, "Provenance of Authority");
|
|
149
159
|
i0.ɵɵelementEnd();
|
|
150
|
-
i0.ɵɵelementStart(11, "div",
|
|
160
|
+
i0.ɵɵelementStart(11, "div", 42)(12, "span", 43);
|
|
151
161
|
i0.ɵɵtext(13, "Requested By");
|
|
152
162
|
i0.ɵɵelementEnd();
|
|
153
|
-
i0.ɵɵelementStart(14, "span",
|
|
163
|
+
i0.ɵɵelementStart(14, "span", 44);
|
|
154
164
|
i0.ɵɵtext(15);
|
|
155
165
|
i0.ɵɵelementEnd()();
|
|
156
|
-
i0.ɵɵelementStart(16, "div",
|
|
166
|
+
i0.ɵɵelementStart(16, "div", 42)(17, "span", 43);
|
|
157
167
|
i0.ɵɵtext(18, "Agent AcceptsSkills");
|
|
158
168
|
i0.ɵɵelementEnd();
|
|
159
|
-
i0.ɵɵelementStart(19, "span",
|
|
169
|
+
i0.ɵɵelementStart(19, "span", 44);
|
|
160
170
|
i0.ɵɵtext(20);
|
|
161
171
|
i0.ɵɵelementEnd()();
|
|
162
|
-
i0.ɵɵelementStart(21, "div",
|
|
172
|
+
i0.ɵɵelementStart(21, "div", 42)(22, "span", 43);
|
|
163
173
|
i0.ɵɵtext(23, "Skill ActivationMode");
|
|
164
174
|
i0.ɵɵelementEnd();
|
|
165
|
-
i0.ɵɵelementStart(24, "span",
|
|
175
|
+
i0.ɵɵelementStart(24, "span", 44);
|
|
166
176
|
i0.ɵɵtext(25);
|
|
167
177
|
i0.ɵɵelementEnd()();
|
|
168
|
-
i0.ɵɵelementStart(26, "div",
|
|
178
|
+
i0.ɵɵelementStart(26, "div", 42)(27, "span", 43);
|
|
169
179
|
i0.ɵɵtext(28, "Agent SkillActivationMode");
|
|
170
180
|
i0.ɵɵelementEnd();
|
|
171
|
-
i0.ɵɵelementStart(29, "span",
|
|
181
|
+
i0.ɵɵelementStart(29, "span", 44);
|
|
172
182
|
i0.ɵɵtext(30);
|
|
173
183
|
i0.ɵɵelementEnd()();
|
|
174
|
-
i0.ɵɵelementStart(31, "div",
|
|
184
|
+
i0.ɵɵelementStart(31, "div", 42)(32, "span", 43);
|
|
175
185
|
i0.ɵɵtext(33, "Skill ID");
|
|
176
186
|
i0.ɵɵelementEnd();
|
|
177
|
-
i0.ɵɵelementStart(34, "span",
|
|
187
|
+
i0.ɵɵelementStart(34, "span", 45);
|
|
178
188
|
i0.ɵɵtext(35);
|
|
179
189
|
i0.ɵɵelementEnd()()()();
|
|
180
190
|
} if (rf & 2) {
|
|
@@ -200,37 +210,37 @@ function AIAgentRunStepDetailComponent_Conditional_0_Conditional_28_For_2_Templa
|
|
|
200
210
|
i0.ɵɵadvance(5);
|
|
201
211
|
i0.ɵɵtextInterpolate(inv_r10.SkillID);
|
|
202
212
|
} }
|
|
203
|
-
function
|
|
204
|
-
i0.ɵɵelementStart(0, "div",
|
|
205
|
-
i0.ɵɵrepeaterCreate(1,
|
|
213
|
+
function AIAgentRunStepDetailComponent_Conditional_0_Conditional_29_Template(rf, ctx) { if (rf & 1) {
|
|
214
|
+
i0.ɵɵelementStart(0, "div", 15);
|
|
215
|
+
i0.ɵɵrepeaterCreate(1, AIAgentRunStepDetailComponent_Conditional_0_Conditional_29_For_2_Template, 36, 10, "div", 35, _forTrack0);
|
|
206
216
|
i0.ɵɵelementEnd();
|
|
207
217
|
} if (rf & 2) {
|
|
208
218
|
const ctx_r1 = i0.ɵɵnextContext(2);
|
|
209
219
|
i0.ɵɵadvance();
|
|
210
220
|
i0.ɵɵrepeater(ctx_r1.stepSkillInvocations);
|
|
211
221
|
} }
|
|
212
|
-
function
|
|
213
|
-
i0.ɵɵelementStart(0, "div",
|
|
214
|
-
i0.ɵɵelement(1, "mj-deep-diff",
|
|
222
|
+
function AIAgentRunStepDetailComponent_Conditional_0_Conditional_30_Template(rf, ctx) { if (rf & 1) {
|
|
223
|
+
i0.ɵɵelementStart(0, "div", 16);
|
|
224
|
+
i0.ɵɵelement(1, "mj-deep-diff", 47);
|
|
215
225
|
i0.ɵɵelementEnd();
|
|
216
226
|
} if (rf & 2) {
|
|
217
227
|
const ctx_r1 = i0.ɵɵnextContext(2);
|
|
218
228
|
i0.ɵɵadvance();
|
|
219
229
|
i0.ɵɵproperty("oldValue", ctx_r1.stepPayloadAtStartObject)("newValue", ctx_r1.stepPayloadAtEndObject)("title", "")("showSummary", true)("showUnchanged", false)("expandAll", false)("maxDepth", 8)("maxStringLength", 150)("treatNullAsUndefined", true);
|
|
220
230
|
} }
|
|
221
|
-
function
|
|
222
|
-
i0.ɵɵelement(0, "mj-deep-diff",
|
|
231
|
+
function AIAgentRunStepDetailComponent_Conditional_0_Conditional_31_Conditional_11_Conditional_1_Template(rf, ctx) { if (rf & 1) {
|
|
232
|
+
i0.ɵɵelement(0, "mj-deep-diff", 47);
|
|
223
233
|
} if (rf & 2) {
|
|
224
234
|
const ctx_r1 = i0.ɵɵnextContext(4);
|
|
225
235
|
i0.ɵɵproperty("oldValue", ctx_r1.stepScratchpadInput)("newValue", ctx_r1.stepScratchpadOutput)("title", "")("showSummary", true)("showUnchanged", false)("expandAll", true)("maxDepth", 6)("maxStringLength", 300)("treatNullAsUndefined", true);
|
|
226
236
|
} }
|
|
227
|
-
function
|
|
237
|
+
function AIAgentRunStepDetailComponent_Conditional_0_Conditional_31_Conditional_11_Conditional_2_ng_container_2_Template(rf, ctx) { if (rf & 1) {
|
|
228
238
|
i0.ɵɵelementContainer(0);
|
|
229
239
|
} }
|
|
230
|
-
function
|
|
231
|
-
i0.ɵɵelement(0, "mj-empty-state",
|
|
232
|
-
i0.ɵɵelementStart(1, "div",
|
|
233
|
-
i0.ɵɵtemplate(2,
|
|
240
|
+
function AIAgentRunStepDetailComponent_Conditional_0_Conditional_31_Conditional_11_Conditional_2_Template(rf, ctx) { if (rf & 1) {
|
|
241
|
+
i0.ɵɵelement(0, "mj-empty-state", 56);
|
|
242
|
+
i0.ɵɵelementStart(1, "div", 57);
|
|
243
|
+
i0.ɵɵtemplate(2, AIAgentRunStepDetailComponent_Conditional_0_Conditional_31_Conditional_11_Conditional_2_ng_container_2_Template, 1, 0, "ng-container", 58);
|
|
234
244
|
i0.ɵɵelementEnd();
|
|
235
245
|
} if (rf & 2) {
|
|
236
246
|
const ctx_r1 = i0.ɵɵnextContext(4);
|
|
@@ -238,82 +248,82 @@ function AIAgentRunStepDetailComponent_Conditional_0_Conditional_30_Conditional_
|
|
|
238
248
|
i0.ɵɵadvance(2);
|
|
239
249
|
i0.ɵɵproperty("ngTemplateOutlet", scratchpadSnapshotTpl_r12)("ngTemplateOutletContext", i0.ɵɵpureFunction1(2, _c0, ctx_r1.stepScratchpadOutput));
|
|
240
250
|
} }
|
|
241
|
-
function
|
|
242
|
-
i0.ɵɵelement(0, "mj-empty-state",
|
|
251
|
+
function AIAgentRunStepDetailComponent_Conditional_0_Conditional_31_Conditional_11_Conditional_3_Template(rf, ctx) { if (rf & 1) {
|
|
252
|
+
i0.ɵɵelement(0, "mj-empty-state", 55);
|
|
243
253
|
} }
|
|
244
|
-
function
|
|
245
|
-
i0.ɵɵelementStart(0, "div",
|
|
246
|
-
i0.ɵɵconditionalCreate(1,
|
|
254
|
+
function AIAgentRunStepDetailComponent_Conditional_0_Conditional_31_Conditional_11_Template(rf, ctx) { if (rf & 1) {
|
|
255
|
+
i0.ɵɵelementStart(0, "div", 53);
|
|
256
|
+
i0.ɵɵconditionalCreate(1, AIAgentRunStepDetailComponent_Conditional_0_Conditional_31_Conditional_11_Conditional_1_Template, 1, 9, "mj-deep-diff", 47)(2, AIAgentRunStepDetailComponent_Conditional_0_Conditional_31_Conditional_11_Conditional_2_Template, 3, 4)(3, AIAgentRunStepDetailComponent_Conditional_0_Conditional_31_Conditional_11_Conditional_3_Template, 1, 0, "mj-empty-state", 55);
|
|
247
257
|
i0.ɵɵelementEnd();
|
|
248
258
|
} if (rf & 2) {
|
|
249
259
|
const ctx_r1 = i0.ɵɵnextContext(3);
|
|
250
260
|
i0.ɵɵadvance();
|
|
251
261
|
i0.ɵɵconditional(ctx_r1.stepScratchpadInput && ctx_r1.stepScratchpadOutput ? 1 : ctx_r1.stepScratchpadOutput ? 2 : 3);
|
|
252
262
|
} }
|
|
253
|
-
function
|
|
263
|
+
function AIAgentRunStepDetailComponent_Conditional_0_Conditional_31_Conditional_12_Conditional_1_ng_container_0_Template(rf, ctx) { if (rf & 1) {
|
|
254
264
|
i0.ɵɵelementContainer(0);
|
|
255
265
|
} }
|
|
256
|
-
function
|
|
257
|
-
i0.ɵɵtemplate(0,
|
|
266
|
+
function AIAgentRunStepDetailComponent_Conditional_0_Conditional_31_Conditional_12_Conditional_1_Template(rf, ctx) { if (rf & 1) {
|
|
267
|
+
i0.ɵɵtemplate(0, AIAgentRunStepDetailComponent_Conditional_0_Conditional_31_Conditional_12_Conditional_1_ng_container_0_Template, 1, 0, "ng-container", 58);
|
|
258
268
|
} if (rf & 2) {
|
|
259
269
|
const ctx_r1 = i0.ɵɵnextContext(4);
|
|
260
270
|
const scratchpadSnapshotTpl_r12 = i0.ɵɵreference(2);
|
|
261
271
|
i0.ɵɵproperty("ngTemplateOutlet", scratchpadSnapshotTpl_r12)("ngTemplateOutletContext", i0.ɵɵpureFunction1(2, _c0, ctx_r1.stepScratchpadInput));
|
|
262
272
|
} }
|
|
263
|
-
function
|
|
264
|
-
i0.ɵɵelement(0, "mj-empty-state",
|
|
273
|
+
function AIAgentRunStepDetailComponent_Conditional_0_Conditional_31_Conditional_12_Conditional_2_Template(rf, ctx) { if (rf & 1) {
|
|
274
|
+
i0.ɵɵelement(0, "mj-empty-state", 59);
|
|
265
275
|
} }
|
|
266
|
-
function
|
|
267
|
-
i0.ɵɵelementStart(0, "div",
|
|
268
|
-
i0.ɵɵconditionalCreate(1,
|
|
276
|
+
function AIAgentRunStepDetailComponent_Conditional_0_Conditional_31_Conditional_12_Template(rf, ctx) { if (rf & 1) {
|
|
277
|
+
i0.ɵɵelementStart(0, "div", 54);
|
|
278
|
+
i0.ɵɵconditionalCreate(1, AIAgentRunStepDetailComponent_Conditional_0_Conditional_31_Conditional_12_Conditional_1_Template, 1, 4, "ng-container")(2, AIAgentRunStepDetailComponent_Conditional_0_Conditional_31_Conditional_12_Conditional_2_Template, 1, 0, "mj-empty-state", 59);
|
|
269
279
|
i0.ɵɵelementEnd();
|
|
270
280
|
} if (rf & 2) {
|
|
271
281
|
const ctx_r1 = i0.ɵɵnextContext(3);
|
|
272
282
|
i0.ɵɵadvance();
|
|
273
283
|
i0.ɵɵconditional(ctx_r1.stepScratchpadInput ? 1 : 2);
|
|
274
284
|
} }
|
|
275
|
-
function
|
|
285
|
+
function AIAgentRunStepDetailComponent_Conditional_0_Conditional_31_Conditional_13_Conditional_1_ng_container_0_Template(rf, ctx) { if (rf & 1) {
|
|
276
286
|
i0.ɵɵelementContainer(0);
|
|
277
287
|
} }
|
|
278
|
-
function
|
|
279
|
-
i0.ɵɵtemplate(0,
|
|
288
|
+
function AIAgentRunStepDetailComponent_Conditional_0_Conditional_31_Conditional_13_Conditional_1_Template(rf, ctx) { if (rf & 1) {
|
|
289
|
+
i0.ɵɵtemplate(0, AIAgentRunStepDetailComponent_Conditional_0_Conditional_31_Conditional_13_Conditional_1_ng_container_0_Template, 1, 0, "ng-container", 58);
|
|
280
290
|
} if (rf & 2) {
|
|
281
291
|
const ctx_r1 = i0.ɵɵnextContext(4);
|
|
282
292
|
const scratchpadSnapshotTpl_r12 = i0.ɵɵreference(2);
|
|
283
293
|
i0.ɵɵproperty("ngTemplateOutlet", scratchpadSnapshotTpl_r12)("ngTemplateOutletContext", i0.ɵɵpureFunction1(2, _c0, ctx_r1.stepScratchpadOutput));
|
|
284
294
|
} }
|
|
285
|
-
function
|
|
286
|
-
i0.ɵɵelement(0, "mj-empty-state",
|
|
295
|
+
function AIAgentRunStepDetailComponent_Conditional_0_Conditional_31_Conditional_13_Conditional_2_Template(rf, ctx) { if (rf & 1) {
|
|
296
|
+
i0.ɵɵelement(0, "mj-empty-state", 60);
|
|
287
297
|
} }
|
|
288
|
-
function
|
|
289
|
-
i0.ɵɵelementStart(0, "div",
|
|
290
|
-
i0.ɵɵconditionalCreate(1,
|
|
298
|
+
function AIAgentRunStepDetailComponent_Conditional_0_Conditional_31_Conditional_13_Template(rf, ctx) { if (rf & 1) {
|
|
299
|
+
i0.ɵɵelementStart(0, "div", 54);
|
|
300
|
+
i0.ɵɵconditionalCreate(1, AIAgentRunStepDetailComponent_Conditional_0_Conditional_31_Conditional_13_Conditional_1_Template, 1, 4, "ng-container")(2, AIAgentRunStepDetailComponent_Conditional_0_Conditional_31_Conditional_13_Conditional_2_Template, 1, 0, "mj-empty-state", 60);
|
|
291
301
|
i0.ɵɵelementEnd();
|
|
292
302
|
} if (rf & 2) {
|
|
293
303
|
const ctx_r1 = i0.ɵɵnextContext(3);
|
|
294
304
|
i0.ɵɵadvance();
|
|
295
305
|
i0.ɵɵconditional(ctx_r1.stepScratchpadOutput ? 1 : 2);
|
|
296
306
|
} }
|
|
297
|
-
function
|
|
307
|
+
function AIAgentRunStepDetailComponent_Conditional_0_Conditional_31_Template(rf, ctx) { if (rf & 1) {
|
|
298
308
|
const _r11 = i0.ɵɵgetCurrentView();
|
|
299
|
-
i0.ɵɵelementStart(0, "div",
|
|
300
|
-
i0.ɵɵlistener("click", function
|
|
301
|
-
i0.ɵɵelement(3, "i",
|
|
309
|
+
i0.ɵɵelementStart(0, "div", 17)(1, "div", 48)(2, "button", 49);
|
|
310
|
+
i0.ɵɵlistener("click", function AIAgentRunStepDetailComponent_Conditional_0_Conditional_31_Template_button_click_2_listener() { i0.ɵɵrestoreView(_r11); const ctx_r1 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r1.scratchpadSubTab = "diff"); });
|
|
311
|
+
i0.ɵɵelement(3, "i", 50);
|
|
302
312
|
i0.ɵɵtext(4, " Diff ");
|
|
303
313
|
i0.ɵɵelementEnd();
|
|
304
|
-
i0.ɵɵelementStart(5, "button",
|
|
305
|
-
i0.ɵɵlistener("click", function
|
|
306
|
-
i0.ɵɵelement(6, "i",
|
|
314
|
+
i0.ɵɵelementStart(5, "button", 49);
|
|
315
|
+
i0.ɵɵlistener("click", function AIAgentRunStepDetailComponent_Conditional_0_Conditional_31_Template_button_click_5_listener() { i0.ɵɵrestoreView(_r11); const ctx_r1 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r1.scratchpadSubTab = "input"); });
|
|
316
|
+
i0.ɵɵelement(6, "i", 51);
|
|
307
317
|
i0.ɵɵtext(7, " Input ");
|
|
308
318
|
i0.ɵɵelementEnd();
|
|
309
|
-
i0.ɵɵelementStart(8, "button",
|
|
310
|
-
i0.ɵɵlistener("click", function
|
|
311
|
-
i0.ɵɵelement(9, "i",
|
|
319
|
+
i0.ɵɵelementStart(8, "button", 49);
|
|
320
|
+
i0.ɵɵlistener("click", function AIAgentRunStepDetailComponent_Conditional_0_Conditional_31_Template_button_click_8_listener() { i0.ɵɵrestoreView(_r11); const ctx_r1 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r1.scratchpadSubTab = "output"); });
|
|
321
|
+
i0.ɵɵelement(9, "i", 52);
|
|
312
322
|
i0.ɵɵtext(10, " Output ");
|
|
313
323
|
i0.ɵɵelementEnd()();
|
|
314
|
-
i0.ɵɵconditionalCreate(11,
|
|
315
|
-
i0.ɵɵconditionalCreate(12,
|
|
316
|
-
i0.ɵɵconditionalCreate(13,
|
|
324
|
+
i0.ɵɵconditionalCreate(11, AIAgentRunStepDetailComponent_Conditional_0_Conditional_31_Conditional_11_Template, 4, 1, "div", 53);
|
|
325
|
+
i0.ɵɵconditionalCreate(12, AIAgentRunStepDetailComponent_Conditional_0_Conditional_31_Conditional_12_Template, 3, 1, "div", 54);
|
|
326
|
+
i0.ɵɵconditionalCreate(13, AIAgentRunStepDetailComponent_Conditional_0_Conditional_31_Conditional_13_Template, 3, 1, "div", 54);
|
|
317
327
|
i0.ɵɵelementEnd();
|
|
318
328
|
} if (rf & 2) {
|
|
319
329
|
const ctx_r1 = i0.ɵɵnextContext(2);
|
|
@@ -330,14 +340,14 @@ function AIAgentRunStepDetailComponent_Conditional_0_Conditional_30_Template(rf,
|
|
|
330
340
|
i0.ɵɵadvance();
|
|
331
341
|
i0.ɵɵconditional(ctx_r1.scratchpadSubTab === "output" ? 13 : -1);
|
|
332
342
|
} }
|
|
333
|
-
function
|
|
343
|
+
function AIAgentRunStepDetailComponent_Conditional_0_Conditional_32_Template(rf, ctx) { if (rf & 1) {
|
|
334
344
|
const _r13 = i0.ɵɵgetCurrentView();
|
|
335
|
-
i0.ɵɵelementStart(0, "div",
|
|
336
|
-
i0.ɵɵlistener("click", function
|
|
337
|
-
i0.ɵɵelement(3, "i",
|
|
345
|
+
i0.ɵɵelementStart(0, "div", 18)(1, "div", 61)(2, "button", 62);
|
|
346
|
+
i0.ɵɵlistener("click", function AIAgentRunStepDetailComponent_Conditional_0_Conditional_32_Template_button_click_2_listener() { i0.ɵɵrestoreView(_r13); const ctx_r1 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r1.onCopyToClipboard()); });
|
|
347
|
+
i0.ɵɵelement(3, "i", 63);
|
|
338
348
|
i0.ɵɵelementEnd()();
|
|
339
|
-
i0.ɵɵelementStart(4, "mj-code-editor",
|
|
340
|
-
i0.ɵɵtwoWayListener("ngModelChange", function
|
|
349
|
+
i0.ɵɵelementStart(4, "mj-code-editor", 64);
|
|
350
|
+
i0.ɵɵtwoWayListener("ngModelChange", function AIAgentRunStepDetailComponent_Conditional_0_Conditional_32_Template_mj_code_editor_ngModelChange_4_listener($event) { i0.ɵɵrestoreView(_r13); const ctx_r1 = i0.ɵɵnextContext(2); i0.ɵɵtwoWayBindingSet(ctx_r1.selectedItemJsonString, $event) || (ctx_r1.selectedItemJsonString = $event); return i0.ɵɵresetView($event); });
|
|
341
351
|
i0.ɵɵelementEnd()();
|
|
342
352
|
} if (rf & 2) {
|
|
343
353
|
const ctx_r1 = i0.ɵɵnextContext(2);
|
|
@@ -373,14 +383,15 @@ function AIAgentRunStepDetailComponent_Conditional_0_Template(rf, ctx) { if (rf
|
|
|
373
383
|
i0.ɵɵelementStart(22, "span");
|
|
374
384
|
i0.ɵɵtext(23);
|
|
375
385
|
i0.ɵɵelementEnd()()();
|
|
376
|
-
i0.ɵɵconditionalCreate(24, AIAgentRunStepDetailComponent_Conditional_0_Conditional_24_Template,
|
|
377
|
-
i0.ɵɵconditionalCreate(25, AIAgentRunStepDetailComponent_Conditional_0_Conditional_25_Template,
|
|
378
|
-
i0.ɵɵ
|
|
379
|
-
i0.ɵɵ
|
|
380
|
-
i0.ɵɵconditionalCreate(28, AIAgentRunStepDetailComponent_Conditional_0_Conditional_28_Template,
|
|
381
|
-
i0.ɵɵconditionalCreate(29, AIAgentRunStepDetailComponent_Conditional_0_Conditional_29_Template,
|
|
382
|
-
i0.ɵɵconditionalCreate(30, AIAgentRunStepDetailComponent_Conditional_0_Conditional_30_Template,
|
|
383
|
-
i0.ɵɵconditionalCreate(31, AIAgentRunStepDetailComponent_Conditional_0_Conditional_31_Template,
|
|
386
|
+
i0.ɵɵconditionalCreate(24, AIAgentRunStepDetailComponent_Conditional_0_Conditional_24_Template, 2, 2, "div", 10);
|
|
387
|
+
i0.ɵɵconditionalCreate(25, AIAgentRunStepDetailComponent_Conditional_0_Conditional_25_Template, 4, 0, "div", 11);
|
|
388
|
+
i0.ɵɵconditionalCreate(26, AIAgentRunStepDetailComponent_Conditional_0_Conditional_26_Template, 8, 6, "div", 12);
|
|
389
|
+
i0.ɵɵelementStart(27, "div", 13);
|
|
390
|
+
i0.ɵɵconditionalCreate(28, AIAgentRunStepDetailComponent_Conditional_0_Conditional_28_Template, 7, 5, "div", 14);
|
|
391
|
+
i0.ɵɵconditionalCreate(29, AIAgentRunStepDetailComponent_Conditional_0_Conditional_29_Template, 3, 0, "div", 15);
|
|
392
|
+
i0.ɵɵconditionalCreate(30, AIAgentRunStepDetailComponent_Conditional_0_Conditional_30_Template, 2, 9, "div", 16);
|
|
393
|
+
i0.ɵɵconditionalCreate(31, AIAgentRunStepDetailComponent_Conditional_0_Conditional_31_Template, 14, 9, "div", 17);
|
|
394
|
+
i0.ɵɵconditionalCreate(32, AIAgentRunStepDetailComponent_Conditional_0_Conditional_32_Template, 5, 3, "div", 18);
|
|
384
395
|
i0.ɵɵelementEnd()()();
|
|
385
396
|
} if (rf & 2) {
|
|
386
397
|
const ctx_r1 = i0.ɵɵnextContext();
|
|
@@ -397,28 +408,30 @@ function AIAgentRunStepDetailComponent_Conditional_0_Template(rf, ctx) { if (rf
|
|
|
397
408
|
i0.ɵɵadvance(5);
|
|
398
409
|
i0.ɵɵtextInterpolate(ctx_r1.selectedTimelineItem.duration || "N/A");
|
|
399
410
|
i0.ɵɵadvance();
|
|
400
|
-
i0.ɵɵconditional(ctx_r1.
|
|
411
|
+
i0.ɵɵconditional(ctx_r1.StepNotice ? 24 : -1);
|
|
412
|
+
i0.ɵɵadvance();
|
|
413
|
+
i0.ɵɵconditional(ctx_r1.selectedTimelineItem.type === "action" && (ctx_r1.selectedTimelineItem.data == null ? null : ctx_r1.selectedTimelineItem.data.ID) ? 25 : -1);
|
|
401
414
|
i0.ɵɵadvance();
|
|
402
|
-
i0.ɵɵconditional(ctx_r1.showStepPayloadDiff || ctx_r1.showScratchpadTab || ctx_r1.showSkillsTab || ctx_r1.showGraphTab ?
|
|
415
|
+
i0.ɵɵconditional(ctx_r1.showStepPayloadDiff || ctx_r1.showScratchpadTab || ctx_r1.showSkillsTab || ctx_r1.showGraphTab ? 26 : -1);
|
|
403
416
|
i0.ɵɵadvance();
|
|
404
417
|
i0.ɵɵclassProp("with-tabs", ctx_r1.showStepPayloadDiff || ctx_r1.showScratchpadTab || ctx_r1.showSkillsTab || ctx_r1.showGraphTab);
|
|
405
418
|
i0.ɵɵadvance();
|
|
406
|
-
i0.ɵɵconditional(ctx_r1.detailPaneTab === "graph" && ctx_r1.showGraphTab ?
|
|
419
|
+
i0.ɵɵconditional(ctx_r1.detailPaneTab === "graph" && ctx_r1.showGraphTab ? 28 : -1);
|
|
407
420
|
i0.ɵɵadvance();
|
|
408
|
-
i0.ɵɵconditional(ctx_r1.detailPaneTab === "skills" && ctx_r1.showSkillsTab ?
|
|
421
|
+
i0.ɵɵconditional(ctx_r1.detailPaneTab === "skills" && ctx_r1.showSkillsTab ? 29 : -1);
|
|
409
422
|
i0.ɵɵadvance();
|
|
410
|
-
i0.ɵɵconditional(ctx_r1.detailPaneTab === "diff" && ctx_r1.showStepPayloadDiff ?
|
|
423
|
+
i0.ɵɵconditional(ctx_r1.detailPaneTab === "diff" && ctx_r1.showStepPayloadDiff ? 30 : -1);
|
|
411
424
|
i0.ɵɵadvance();
|
|
412
|
-
i0.ɵɵconditional(ctx_r1.detailPaneTab === "scratchpad" && ctx_r1.showScratchpadTab ?
|
|
425
|
+
i0.ɵɵconditional(ctx_r1.detailPaneTab === "scratchpad" && ctx_r1.showScratchpadTab ? 31 : -1);
|
|
413
426
|
i0.ɵɵadvance();
|
|
414
|
-
i0.ɵɵconditional(ctx_r1.detailPaneTab === "json" || !ctx_r1.showStepPayloadDiff && !ctx_r1.showScratchpadTab ?
|
|
427
|
+
i0.ɵɵconditional(ctx_r1.detailPaneTab === "json" || !ctx_r1.showStepPayloadDiff && !ctx_r1.showScratchpadTab ? 32 : -1);
|
|
415
428
|
} }
|
|
416
429
|
function AIAgentRunStepDetailComponent_ng_template_1_Conditional_1_Template(rf, ctx) { if (rf & 1) {
|
|
417
|
-
i0.ɵɵelementStart(0, "div",
|
|
418
|
-
i0.ɵɵelement(2, "i",
|
|
430
|
+
i0.ɵɵelementStart(0, "div", 65)(1, "h4");
|
|
431
|
+
i0.ɵɵelement(2, "i", 68);
|
|
419
432
|
i0.ɵɵtext(3, " Notes");
|
|
420
433
|
i0.ɵɵelementEnd();
|
|
421
|
-
i0.ɵɵelementStart(4, "div",
|
|
434
|
+
i0.ɵɵelementStart(4, "div", 69);
|
|
422
435
|
i0.ɵɵtext(5);
|
|
423
436
|
i0.ɵɵelementEnd()();
|
|
424
437
|
} if (rf & 2) {
|
|
@@ -427,19 +440,19 @@ function AIAgentRunStepDetailComponent_ng_template_1_Conditional_1_Template(rf,
|
|
|
427
440
|
i0.ɵɵtextInterpolate(snapshot_r14.notes);
|
|
428
441
|
} }
|
|
429
442
|
function AIAgentRunStepDetailComponent_ng_template_1_Conditional_2_For_6_Case_2_Template(rf, ctx) { if (rf & 1) {
|
|
430
|
-
i0.ɵɵelement(0, "i",
|
|
443
|
+
i0.ɵɵelement(0, "i", 74);
|
|
431
444
|
} }
|
|
432
445
|
function AIAgentRunStepDetailComponent_ng_template_1_Conditional_2_For_6_Case_3_Template(rf, ctx) { if (rf & 1) {
|
|
433
|
-
i0.ɵɵelement(0, "i",
|
|
446
|
+
i0.ɵɵelement(0, "i", 75);
|
|
434
447
|
} }
|
|
435
448
|
function AIAgentRunStepDetailComponent_ng_template_1_Conditional_2_For_6_Case_4_Template(rf, ctx) { if (rf & 1) {
|
|
436
|
-
i0.ɵɵelement(0, "i",
|
|
449
|
+
i0.ɵɵelement(0, "i", 76);
|
|
437
450
|
} }
|
|
438
451
|
function AIAgentRunStepDetailComponent_ng_template_1_Conditional_2_For_6_Case_5_Template(rf, ctx) { if (rf & 1) {
|
|
439
|
-
i0.ɵɵelement(0, "i",
|
|
452
|
+
i0.ɵɵelement(0, "i", 77);
|
|
440
453
|
} }
|
|
441
454
|
function AIAgentRunStepDetailComponent_ng_template_1_Conditional_2_For_6_Conditional_11_Template(rf, ctx) { if (rf & 1) {
|
|
442
|
-
i0.ɵɵelementStart(0, "span",
|
|
455
|
+
i0.ɵɵelementStart(0, "span", 81);
|
|
443
456
|
i0.ɵɵtext(1);
|
|
444
457
|
i0.ɵɵelementEnd();
|
|
445
458
|
} if (rf & 2) {
|
|
@@ -448,18 +461,18 @@ function AIAgentRunStepDetailComponent_ng_template_1_Conditional_2_For_6_Conditi
|
|
|
448
461
|
i0.ɵɵtextInterpolate(task_r15.notes);
|
|
449
462
|
} }
|
|
450
463
|
function AIAgentRunStepDetailComponent_ng_template_1_Conditional_2_For_6_Template(rf, ctx) { if (rf & 1) {
|
|
451
|
-
i0.ɵɵelementStart(0, "div",
|
|
452
|
-
i0.ɵɵconditionalCreate(2, AIAgentRunStepDetailComponent_ng_template_1_Conditional_2_For_6_Case_2_Template, 1, 0, "i",
|
|
464
|
+
i0.ɵɵelementStart(0, "div", 72)(1, "span", 73);
|
|
465
|
+
i0.ɵɵconditionalCreate(2, AIAgentRunStepDetailComponent_ng_template_1_Conditional_2_For_6_Case_2_Template, 1, 0, "i", 74)(3, AIAgentRunStepDetailComponent_ng_template_1_Conditional_2_For_6_Case_3_Template, 1, 0, "i", 75)(4, AIAgentRunStepDetailComponent_ng_template_1_Conditional_2_For_6_Case_4_Template, 1, 0, "i", 76)(5, AIAgentRunStepDetailComponent_ng_template_1_Conditional_2_For_6_Case_5_Template, 1, 0, "i", 77);
|
|
453
466
|
i0.ɵɵelementEnd();
|
|
454
|
-
i0.ɵɵelementStart(6, "div",
|
|
467
|
+
i0.ɵɵelementStart(6, "div", 78)(7, "span", 79);
|
|
455
468
|
i0.ɵɵtext(8);
|
|
456
469
|
i0.ɵɵelementEnd();
|
|
457
|
-
i0.ɵɵelementStart(9, "span",
|
|
470
|
+
i0.ɵɵelementStart(9, "span", 80);
|
|
458
471
|
i0.ɵɵtext(10);
|
|
459
472
|
i0.ɵɵelementEnd();
|
|
460
|
-
i0.ɵɵconditionalCreate(11, AIAgentRunStepDetailComponent_ng_template_1_Conditional_2_For_6_Conditional_11_Template, 2, 1, "span",
|
|
473
|
+
i0.ɵɵconditionalCreate(11, AIAgentRunStepDetailComponent_ng_template_1_Conditional_2_For_6_Conditional_11_Template, 2, 1, "span", 81);
|
|
461
474
|
i0.ɵɵelementEnd();
|
|
462
|
-
i0.ɵɵelementStart(12, "span",
|
|
475
|
+
i0.ɵɵelementStart(12, "span", 82);
|
|
463
476
|
i0.ɵɵtext(13);
|
|
464
477
|
i0.ɵɵelementEnd()();
|
|
465
478
|
} if (rf & 2) {
|
|
@@ -482,12 +495,12 @@ function AIAgentRunStepDetailComponent_ng_template_1_Conditional_2_For_6_Templat
|
|
|
482
495
|
i0.ɵɵtextInterpolate(task_r15.status);
|
|
483
496
|
} }
|
|
484
497
|
function AIAgentRunStepDetailComponent_ng_template_1_Conditional_2_Template(rf, ctx) { if (rf & 1) {
|
|
485
|
-
i0.ɵɵelementStart(0, "div",
|
|
486
|
-
i0.ɵɵelement(2, "i",
|
|
498
|
+
i0.ɵɵelementStart(0, "div", 66)(1, "h4");
|
|
499
|
+
i0.ɵɵelement(2, "i", 70);
|
|
487
500
|
i0.ɵɵtext(3);
|
|
488
501
|
i0.ɵɵelementEnd();
|
|
489
|
-
i0.ɵɵelementStart(4, "div",
|
|
490
|
-
i0.ɵɵrepeaterCreate(5, AIAgentRunStepDetailComponent_ng_template_1_Conditional_2_For_6_Template, 14, 8, "div",
|
|
502
|
+
i0.ɵɵelementStart(4, "div", 71);
|
|
503
|
+
i0.ɵɵrepeaterCreate(5, AIAgentRunStepDetailComponent_ng_template_1_Conditional_2_For_6_Template, 14, 8, "div", 72, _forTrack1);
|
|
491
504
|
i0.ɵɵelementEnd()();
|
|
492
505
|
} if (rf & 2) {
|
|
493
506
|
const snapshot_r14 = i0.ɵɵnextContext().$implicit;
|
|
@@ -497,13 +510,13 @@ function AIAgentRunStepDetailComponent_ng_template_1_Conditional_2_Template(rf,
|
|
|
497
510
|
i0.ɵɵrepeater(snapshot_r14.tasks);
|
|
498
511
|
} }
|
|
499
512
|
function AIAgentRunStepDetailComponent_ng_template_1_Conditional_3_Template(rf, ctx) { if (rf & 1) {
|
|
500
|
-
i0.ɵɵelement(0, "mj-empty-state",
|
|
513
|
+
i0.ɵɵelement(0, "mj-empty-state", 67);
|
|
501
514
|
} }
|
|
502
515
|
function AIAgentRunStepDetailComponent_ng_template_1_Template(rf, ctx) { if (rf & 1) {
|
|
503
|
-
i0.ɵɵelementStart(0, "div",
|
|
504
|
-
i0.ɵɵconditionalCreate(1, AIAgentRunStepDetailComponent_ng_template_1_Conditional_1_Template, 6, 1, "div",
|
|
505
|
-
i0.ɵɵconditionalCreate(2, AIAgentRunStepDetailComponent_ng_template_1_Conditional_2_Template, 7, 1, "div",
|
|
506
|
-
i0.ɵɵconditionalCreate(3, AIAgentRunStepDetailComponent_ng_template_1_Conditional_3_Template, 1, 0, "mj-empty-state",
|
|
516
|
+
i0.ɵɵelementStart(0, "div", 57);
|
|
517
|
+
i0.ɵɵconditionalCreate(1, AIAgentRunStepDetailComponent_ng_template_1_Conditional_1_Template, 6, 1, "div", 65);
|
|
518
|
+
i0.ɵɵconditionalCreate(2, AIAgentRunStepDetailComponent_ng_template_1_Conditional_2_Template, 7, 1, "div", 66);
|
|
519
|
+
i0.ɵɵconditionalCreate(3, AIAgentRunStepDetailComponent_ng_template_1_Conditional_3_Template, 1, 0, "mj-empty-state", 67);
|
|
507
520
|
i0.ɵɵelementEnd();
|
|
508
521
|
} if (rf & 2) {
|
|
509
522
|
const snapshot_r14 = ctx.$implicit;
|
|
@@ -562,6 +575,50 @@ export class AIAgentRunStepDetailComponent {
|
|
|
562
575
|
this.cdr.detectChanges();
|
|
563
576
|
}
|
|
564
577
|
}
|
|
578
|
+
/**
|
|
579
|
+
* What to say about a step that never executed, or null when it ran.
|
|
580
|
+
*
|
|
581
|
+
* **Why this needs saying at all.** A workflow persists every step at submission, before anything
|
|
582
|
+
* runs — the rows are the dispatcher's work queue, and the skip cascade is computed from the graph
|
|
583
|
+
* they form. So a branch the workflow did not take still has a row, and opening it shows a
|
|
584
|
+
* perfectly normal record with empty payloads. Without a word of explanation the reader is left to
|
|
585
|
+
* work out whether that emptiness is a branch that was not chosen, work still queued, or a step
|
|
586
|
+
* that broke silently — three very different situations that look identical in JSON.
|
|
587
|
+
*
|
|
588
|
+
* The distinction between Skipped and Blocked is load-bearing and deliberately preserved here:
|
|
589
|
+
* `Skipped` means the workflow chose another route, `Blocked` means something upstream failed. The
|
|
590
|
+
* dispatcher separated them precisely because conflating them made every conditional workflow look
|
|
591
|
+
* half-broken.
|
|
592
|
+
*/
|
|
593
|
+
get StepNotice() {
|
|
594
|
+
const item = this.selectedTimelineItem;
|
|
595
|
+
if (!item?.data?.IsWorkflowStep)
|
|
596
|
+
return null;
|
|
597
|
+
switch (item.status) {
|
|
598
|
+
case 'Skipped':
|
|
599
|
+
return {
|
|
600
|
+
Variant: 'info',
|
|
601
|
+
Message: 'This step never ran — the workflow took another route. Its row exists because ' +
|
|
602
|
+
'every step is created when the workflow is submitted, so the record of the branch ' +
|
|
603
|
+
'that was not taken survives. Nothing went wrong here.',
|
|
604
|
+
};
|
|
605
|
+
case 'Blocked':
|
|
606
|
+
return {
|
|
607
|
+
Variant: 'error',
|
|
608
|
+
Message: 'This step could not run: something it depended on failed, so no path to it was ' +
|
|
609
|
+
'left. It is not a branch that lost — it is work that became unreachable.',
|
|
610
|
+
};
|
|
611
|
+
case 'Pending':
|
|
612
|
+
return {
|
|
613
|
+
Variant: 'warning',
|
|
614
|
+
Message: 'This step has not started yet. A workflow runs on the dispatcher and outlives the ' +
|
|
615
|
+
'agent run that submitted it, so a finished run can still contain steps that are ' +
|
|
616
|
+
'queued or in flight.',
|
|
617
|
+
};
|
|
618
|
+
default:
|
|
619
|
+
return null;
|
|
620
|
+
}
|
|
621
|
+
}
|
|
565
622
|
getSelectedItemJson() {
|
|
566
623
|
if (!this.selectedTimelineItem)
|
|
567
624
|
return '{}';
|
|
@@ -740,6 +797,21 @@ export class AIAgentRunStepDetailComponent {
|
|
|
740
797
|
}
|
|
741
798
|
return null;
|
|
742
799
|
}
|
|
800
|
+
/**
|
|
801
|
+
* Where the recorded graph's nodes go on the canvas.
|
|
802
|
+
*
|
|
803
|
+
* Without this the editor receives a spec and no geometry, so every node projects to the origin —
|
|
804
|
+
* all of them, in one place. The canvas then rescues it with a deferred layout pass whose
|
|
805
|
+
* zoom-to-fit measures a bounding box one node wide, and a four-step workflow renders as a single
|
|
806
|
+
* enormous box at 265%. The positions exist the whole time: a workflow compiled from a Flow agent
|
|
807
|
+
* carries the arrangement its author dragged into place, on every node.
|
|
808
|
+
*/
|
|
809
|
+
get stepTaskGraphPositions() {
|
|
810
|
+
const spec = this.stepTaskGraph;
|
|
811
|
+
if (!spec)
|
|
812
|
+
return null;
|
|
813
|
+
return ResolveTaskGraphPositions(spec);
|
|
814
|
+
}
|
|
743
815
|
/** True when the recorded graph was constant-folded rather than dispatched (D9). */
|
|
744
816
|
get stepTaskGraphWasFolded() {
|
|
745
817
|
if (!this.selectedTimelineItem)
|
|
@@ -835,16 +907,16 @@ export class AIAgentRunStepDetailComponent {
|
|
|
835
907
|
}
|
|
836
908
|
}
|
|
837
909
|
static { this.ɵfac = function AIAgentRunStepDetailComponent_Factory(__ngFactoryType__) { return new (__ngFactoryType__ || AIAgentRunStepDetailComponent)(i0.ɵɵdirectiveInject(i0.ChangeDetectorRef)); }; }
|
|
838
|
-
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", saveAsWorkflowRequested: "saveAsWorkflowRequested" }, 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, "detail-graph"], [1, "skills-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-diagram-project"], [1, "fa-solid", "fa-code-branch"], [1, "fa-solid", "fa-wand-magic-sparkles"], [1, "tab-badge"], [1, "fa-solid", "fa-clipboard-list"], [1, "detail-graph__actions"], ["Variant", "info", "Size", "sm", "Message", "This ran inline as a single step \u2014 a workflow of one needs no scheduling. You can still save it."], ["mjButton", "", "variant", "primary", "size", "sm", 3, "click"], [1, "fa-solid", "fa-floppy-disk"], [1, "detail-graph__canvas", 3, "Spec", "ReadOnly", "ShowPalette"], [1, "skill-invocation-card"], [1, "skill-invocation-header"], [1, "skill-invocation-name"], [1, "skill-invocation-type"], [1, "skill-invocation-reason"], [1, "skill-invocation-provenance"], [1, "provenance-title"], [1, "provenance-row"], [1, "provenance-label"], [1, "provenance-value"], [1, "provenance-value", "provenance-id"], [1, "fa-solid", "fa-quote-left"], [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"], ["Size", "compact", "Icon", "fa-solid fa-circle-info", "Title", "No scratchpad changes in this step"], ["Size", "compact", "Icon", "fa-solid fa-circle-plus", "Title", "Scratchpad created in this step (no prior state)"], [1, "scratchpad-snapshot"], [4, "ngTemplateOutlet", "ngTemplateOutletContext"], ["Size", "compact", "Icon", "fa-solid fa-circle-info", "Title", "No scratchpad input for this step"], ["Size", "compact", "Icon", "fa-solid fa-circle-info", "Title", "No scratchpad output for this step"], [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"], ["Size", "compact", "Icon", "fa-solid fa-circle-info", "Title", "Empty scratchpad"], [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) {
|
|
839
|
-
i0.ɵɵconditionalCreate(0, AIAgentRunStepDetailComponent_Conditional_0_Template,
|
|
910
|
+
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", saveAsWorkflowRequested: "saveAsWorkflowRequested" }, 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, "step-notice"], [1, "action-link"], [1, "detail-pane-tabs"], [1, "detail-pane-content"], [1, "detail-graph"], [1, "skills-content"], [1, "step-payload-diff"], [1, "scratchpad-content"], [1, "json-viewer"], ["Size", "sm", 3, "Variant", "Message"], [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-diagram-project"], [1, "fa-solid", "fa-code-branch"], [1, "fa-solid", "fa-wand-magic-sparkles"], [1, "tab-badge"], [1, "fa-solid", "fa-clipboard-list"], [1, "detail-graph__actions"], ["Variant", "info", "Size", "sm", "Message", "This ran inline as a single step \u2014 a workflow of one needs no scheduling. You can still save it."], ["mjButton", "", "variant", "primary", "size", "sm", 3, "click"], [1, "fa-solid", "fa-floppy-disk"], [1, "detail-graph__canvas", 3, "Spec", "NodePositions", "ReadOnly", "ShowPalette"], [1, "skill-invocation-card"], [1, "skill-invocation-header"], [1, "skill-invocation-name"], [1, "skill-invocation-type"], [1, "skill-invocation-reason"], [1, "skill-invocation-provenance"], [1, "provenance-title"], [1, "provenance-row"], [1, "provenance-label"], [1, "provenance-value"], [1, "provenance-value", "provenance-id"], [1, "fa-solid", "fa-quote-left"], [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"], ["Size", "compact", "Icon", "fa-solid fa-circle-info", "Title", "No scratchpad changes in this step"], ["Size", "compact", "Icon", "fa-solid fa-circle-plus", "Title", "Scratchpad created in this step (no prior state)"], [1, "scratchpad-snapshot"], [4, "ngTemplateOutlet", "ngTemplateOutletContext"], ["Size", "compact", "Icon", "fa-solid fa-circle-info", "Title", "No scratchpad input for this step"], ["Size", "compact", "Icon", "fa-solid fa-circle-info", "Title", "No scratchpad output for this step"], [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"], ["Size", "compact", "Icon", "fa-solid fa-circle-info", "Title", "Empty scratchpad"], [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) {
|
|
911
|
+
i0.ɵɵconditionalCreate(0, AIAgentRunStepDetailComponent_Conditional_0_Template, 33, 16, "div", 1);
|
|
840
912
|
i0.ɵɵtemplate(1, AIAgentRunStepDetailComponent_ng_template_1_Template, 4, 3, "ng-template", null, 0, i0.ɵɵtemplateRefExtractor);
|
|
841
913
|
} if (rf & 2) {
|
|
842
914
|
i0.ɵɵconditional(ctx.selectedTimelineItem ? 0 : -1);
|
|
843
|
-
} }, dependencies: [i1.NgClass, i1.NgTemplateOutlet, i2.NgControlStatus, i2.NgModel, i3.MJEmptyStateComponent, i3.MJAlertComponent, i3.MJButtonDirective, i4.CodeEditorComponent, i5.DeepDiffComponent, i6.TaskGraphEditorComponent], 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\n\n.skills-content[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n gap: 12px;\n padding: 12px;\n}\n\n.skill-invocation-card[_ngcontent-%COMP%] {\n border: 1px solid var(--mj-border-default);\n border-radius: 8px;\n padding: 12px 14px;\n background: var(--mj-bg-surface);\n border-left: 3px solid var(--mj-brand-primary);\n}\n\n.skill-invocation-card[data-activation=\"auto\"][_ngcontent-%COMP%] {\n border-left-color: var(--mj-status-warning);\n}\n\n.skill-invocation-header[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n justify-content: space-between;\n gap: 8px;\n}\n\n.skill-invocation-name[_ngcontent-%COMP%] {\n font-weight: 600;\n font-size: 14px;\n color: var(--mj-text-primary);\n display: inline-flex;\n align-items: center;\n gap: 8px;\n}\n\n.skill-invocation-name[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n color: var(--mj-brand-primary);\n}\n\n.skill-invocation-type[_ngcontent-%COMP%] {\n font-size: 11px;\n font-weight: 600;\n text-transform: uppercase;\n letter-spacing: 0.5px;\n padding: 2px 10px;\n border-radius: 10px;\n background: color-mix(in srgb, var(--mj-brand-primary) 12%, var(--mj-bg-surface));\n color: var(--mj-brand-primary);\n}\n\n.skill-invocation-type[data-activation=\"auto\"][_ngcontent-%COMP%] {\n background: color-mix(in srgb, var(--mj-status-warning) 12%, var(--mj-bg-surface));\n color: var(--mj-status-warning-text);\n}\n\n.skill-invocation-reason[_ngcontent-%COMP%] {\n margin-top: 8px;\n font-size: 13px;\n font-style: italic;\n color: var(--mj-text-secondary);\n display: flex;\n gap: 8px;\n align-items: baseline;\n}\n\n.skill-invocation-reason[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n color: var(--mj-text-muted);\n font-size: 10px;\n}\n\n.skill-invocation-provenance[_ngcontent-%COMP%] {\n margin-top: 10px;\n padding-top: 10px;\n border-top: 1px solid var(--mj-border-subtle);\n}\n\n.provenance-title[_ngcontent-%COMP%] {\n font-size: 11px;\n font-weight: 700;\n text-transform: uppercase;\n letter-spacing: 0.5px;\n color: var(--mj-text-muted);\n margin-bottom: 6px;\n}\n\n.provenance-row[_ngcontent-%COMP%] {\n display: flex;\n justify-content: space-between;\n gap: 12px;\n font-size: 12px;\n padding: 2px 0;\n}\n\n.provenance-label[_ngcontent-%COMP%] {\n color: var(--mj-text-secondary);\n}\n\n.provenance-value[_ngcontent-%COMP%] {\n color: var(--mj-text-primary);\n font-weight: 500;\n}\n\n.provenance-id[_ngcontent-%COMP%] {\n font-family: monospace;\n font-size: 11px;\n color: var(--mj-text-muted);\n}\n\n\n\n.detail-graph[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n height: 100%;\n min-height: 0;\n}\n\n.detail-graph__actions[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: var(--mj-space-sm, 0.5rem);\n padding: var(--mj-space-sm, 0.5rem);\n border-bottom: 1px solid var(--mj-border-subtle);\n}\n\n\n\n.detail-graph__canvas[_ngcontent-%COMP%] {\n flex: 1 1 auto;\n min-height: 0;\n}"] }); }
|
|
915
|
+
} }, dependencies: [i1.NgClass, i1.NgTemplateOutlet, i2.NgControlStatus, i2.NgModel, i3.MJEmptyStateComponent, i3.MJAlertComponent, i3.MJButtonDirective, i4.CodeEditorComponent, i5.DeepDiffComponent, i6.TaskGraphEditorComponent], 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\n\n.skills-content[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n gap: 12px;\n padding: 12px;\n}\n\n.skill-invocation-card[_ngcontent-%COMP%] {\n border: 1px solid var(--mj-border-default);\n border-radius: 8px;\n padding: 12px 14px;\n background: var(--mj-bg-surface);\n border-left: 3px solid var(--mj-brand-primary);\n}\n\n.skill-invocation-card[data-activation=\"auto\"][_ngcontent-%COMP%] {\n border-left-color: var(--mj-status-warning);\n}\n\n.skill-invocation-header[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n justify-content: space-between;\n gap: 8px;\n}\n\n.skill-invocation-name[_ngcontent-%COMP%] {\n font-weight: 600;\n font-size: 14px;\n color: var(--mj-text-primary);\n display: inline-flex;\n align-items: center;\n gap: 8px;\n}\n\n.skill-invocation-name[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n color: var(--mj-brand-primary);\n}\n\n.skill-invocation-type[_ngcontent-%COMP%] {\n font-size: 11px;\n font-weight: 600;\n text-transform: uppercase;\n letter-spacing: 0.5px;\n padding: 2px 10px;\n border-radius: 10px;\n background: color-mix(in srgb, var(--mj-brand-primary) 12%, var(--mj-bg-surface));\n color: var(--mj-brand-primary);\n}\n\n.skill-invocation-type[data-activation=\"auto\"][_ngcontent-%COMP%] {\n background: color-mix(in srgb, var(--mj-status-warning) 12%, var(--mj-bg-surface));\n color: var(--mj-status-warning-text);\n}\n\n.skill-invocation-reason[_ngcontent-%COMP%] {\n margin-top: 8px;\n font-size: 13px;\n font-style: italic;\n color: var(--mj-text-secondary);\n display: flex;\n gap: 8px;\n align-items: baseline;\n}\n\n.skill-invocation-reason[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n color: var(--mj-text-muted);\n font-size: 10px;\n}\n\n.skill-invocation-provenance[_ngcontent-%COMP%] {\n margin-top: 10px;\n padding-top: 10px;\n border-top: 1px solid var(--mj-border-subtle);\n}\n\n.provenance-title[_ngcontent-%COMP%] {\n font-size: 11px;\n font-weight: 700;\n text-transform: uppercase;\n letter-spacing: 0.5px;\n color: var(--mj-text-muted);\n margin-bottom: 6px;\n}\n\n.provenance-row[_ngcontent-%COMP%] {\n display: flex;\n justify-content: space-between;\n gap: 12px;\n font-size: 12px;\n padding: 2px 0;\n}\n\n.provenance-label[_ngcontent-%COMP%] {\n color: var(--mj-text-secondary);\n}\n\n.provenance-value[_ngcontent-%COMP%] {\n color: var(--mj-text-primary);\n font-weight: 500;\n}\n\n.provenance-id[_ngcontent-%COMP%] {\n font-family: monospace;\n font-size: 11px;\n color: var(--mj-text-muted);\n}\n\n\n\n.detail-graph[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n height: 100%;\n min-height: 0;\n}\n\n.detail-graph__actions[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: var(--mj-space-sm, 0.5rem);\n padding: var(--mj-space-sm, 0.5rem);\n border-bottom: 1px solid var(--mj-border-subtle);\n}\n\n\n\n.detail-graph__canvas[_ngcontent-%COMP%] {\n flex: 1 1 auto;\n min-height: 0;\n}\n\n\n\n\n.step-notice[_ngcontent-%COMP%] {\n padding: 0 var(--mj-space-3, 12px) var(--mj-space-2, 8px);\n}"] }); }
|
|
844
916
|
}
|
|
845
917
|
(() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(AIAgentRunStepDetailComponent, [{
|
|
846
918
|
type: Component,
|
|
847
|
-
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 || showSkillsTab || showGraphTab) {\n <div class=\"detail-pane-tabs\">\n @if (showGraphTab) {\n <button\n class=\"detail-tab\"\n [class.active]=\"detailPaneTab === 'graph'\"\n (click)=\"detailPaneTab = 'graph'\">\n <i class=\"fa-solid fa-diagram-project\"></i>\n Workflow\n </button>\n }\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 (showSkillsTab) {\n <button\n class=\"detail-tab\"\n [class.active]=\"detailPaneTab === 'skills'\"\n (click)=\"detailPaneTab = 'skills'\">\n <i class=\"fa-solid fa-wand-magic-sparkles\"></i>\n Skills\n <span class=\"tab-badge\">{{ stepSkillInvocations.length }}</span>\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 || showSkillsTab || showGraphTab\">\n <!-- Skills Tab \u2014 skill-invocation observability (activation type, provenance of authority, reason) -->\n @if (detailPaneTab === 'graph' && showGraphTab) {\n <div class=\"detail-graph\">\n <div class=\"detail-graph__actions\">\n @if (stepTaskGraphWasFolded) {\n <!-- The fold is recorded rather than silent (D9), so the reader can see WHY this\n graph never reached the dispatcher instead of inferring it. -->\n <mj-alert Variant=\"info\" Size=\"sm\"\n Message=\"This ran inline as a single step \u2014 a workflow of one needs no scheduling. You can still save it.\">\n </mj-alert>\n }\n <button mjButton variant=\"primary\" size=\"sm\" (click)=\"RequestSaveAsWorkflow()\">\n <i class=\"fa-solid fa-floppy-disk\"></i> Save as Workflow\n </button>\n </div>\n <mj-task-graph-editor\n class=\"detail-graph__canvas\"\n [Spec]=\"stepTaskGraph\"\n [ReadOnly]=\"true\"\n [ShowPalette]=\"false\">\n </mj-task-graph-editor>\n </div>\n }\n @if (detailPaneTab === 'skills' && showSkillsTab) {\n <div class=\"skills-content\">\n @for (inv of stepSkillInvocations; track inv.SkillID) {\n <div class=\"skill-invocation-card\" [attr.data-activation]=\"inv.ActivationType\">\n <div class=\"skill-invocation-header\">\n <span class=\"skill-invocation-name\">\n <i class=\"fa-solid fa-wand-magic-sparkles\"></i>\n {{ inv.SkillName }}\n </span>\n <span class=\"skill-invocation-type\" [attr.data-activation]=\"inv.ActivationType\">\n {{ GetActivationTypeLabel(inv) }}\n </span>\n </div>\n @if (inv.Reason) {\n <div class=\"skill-invocation-reason\">\n <i class=\"fa-solid fa-quote-left\"></i>\n {{ inv.Reason }}\n </div>\n }\n <div class=\"skill-invocation-provenance\">\n <div class=\"provenance-title\">Provenance of Authority</div>\n <div class=\"provenance-row\">\n <span class=\"provenance-label\">Requested By</span>\n <span class=\"provenance-value\">{{ inv.Provenance.RequestedBy === 'user-request' ? 'User (/skill mention)' : 'Agent decision' }}</span>\n </div>\n <div class=\"provenance-row\">\n <span class=\"provenance-label\">Agent AcceptsSkills</span>\n <span class=\"provenance-value\">{{ inv.Provenance.AgentAcceptsSkills }}</span>\n </div>\n <div class=\"provenance-row\">\n <span class=\"provenance-label\">Skill ActivationMode</span>\n <span class=\"provenance-value\">{{ inv.Provenance.SkillActivationMode }}</span>\n </div>\n <div class=\"provenance-row\">\n <span class=\"provenance-label\">Agent SkillActivationMode</span>\n <span class=\"provenance-value\">{{ inv.Provenance.AgentSkillActivationMode }}</span>\n </div>\n <div class=\"provenance-row\">\n <span class=\"provenance-label\">Skill ID</span>\n <span class=\"provenance-value provenance-id\">{{ inv.SkillID }}</span>\n </div>\n </div>\n </div>\n }\n </div>\n }\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 <mj-empty-state\n Size=\"compact\"\n Icon=\"fa-solid fa-circle-plus\"\n Title=\"Scratchpad created in this step (no prior state)\" />\n <div class=\"scratchpad-snapshot\">\n <ng-container *ngTemplateOutlet=\"scratchpadSnapshotTpl; context: { $implicit: stepScratchpadOutput }\"></ng-container>\n </div>\n } @else {\n <mj-empty-state\n Size=\"compact\"\n Icon=\"fa-solid fa-circle-info\"\n Title=\"No scratchpad changes in this step\" />\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 <mj-empty-state\n Size=\"compact\"\n Icon=\"fa-solid fa-circle-info\"\n Title=\"No scratchpad input for this step\" />\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 <mj-empty-state\n Size=\"compact\"\n Icon=\"fa-solid fa-circle-info\"\n Title=\"No scratchpad output for this step\" />\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 <mj-empty-state\n Size=\"compact\"\n Icon=\"fa-solid fa-circle-info\"\n Title=\"Empty scratchpad\" />\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/* ============================================================\n Skills tab \u2014 skill-invocation observability cards\n ============================================================ */\n.skills-content {\n display: flex;\n flex-direction: column;\n gap: 12px;\n padding: 12px;\n}\n\n.skill-invocation-card {\n border: 1px solid var(--mj-border-default);\n border-radius: 8px;\n padding: 12px 14px;\n background: var(--mj-bg-surface);\n border-left: 3px solid var(--mj-brand-primary);\n}\n\n.skill-invocation-card[data-activation=\"auto\"] {\n border-left-color: var(--mj-status-warning);\n}\n\n.skill-invocation-header {\n display: flex;\n align-items: center;\n justify-content: space-between;\n gap: 8px;\n}\n\n.skill-invocation-name {\n font-weight: 600;\n font-size: 14px;\n color: var(--mj-text-primary);\n display: inline-flex;\n align-items: center;\n gap: 8px;\n}\n\n.skill-invocation-name i {\n color: var(--mj-brand-primary);\n}\n\n.skill-invocation-type {\n font-size: 11px;\n font-weight: 600;\n text-transform: uppercase;\n letter-spacing: 0.5px;\n padding: 2px 10px;\n border-radius: 10px;\n background: color-mix(in srgb, var(--mj-brand-primary) 12%, var(--mj-bg-surface));\n color: var(--mj-brand-primary);\n}\n\n.skill-invocation-type[data-activation=\"auto\"] {\n background: color-mix(in srgb, var(--mj-status-warning) 12%, var(--mj-bg-surface));\n color: var(--mj-status-warning-text);\n}\n\n.skill-invocation-reason {\n margin-top: 8px;\n font-size: 13px;\n font-style: italic;\n color: var(--mj-text-secondary);\n display: flex;\n gap: 8px;\n align-items: baseline;\n}\n\n.skill-invocation-reason i {\n color: var(--mj-text-muted);\n font-size: 10px;\n}\n\n.skill-invocation-provenance {\n margin-top: 10px;\n padding-top: 10px;\n border-top: 1px solid var(--mj-border-subtle);\n}\n\n.provenance-title {\n font-size: 11px;\n font-weight: 700;\n text-transform: uppercase;\n letter-spacing: 0.5px;\n color: var(--mj-text-muted);\n margin-bottom: 6px;\n}\n\n.provenance-row {\n display: flex;\n justify-content: space-between;\n gap: 12px;\n font-size: 12px;\n padding: 2px 0;\n}\n\n.provenance-label {\n color: var(--mj-text-secondary);\n}\n\n.provenance-value {\n color: var(--mj-text-primary);\n font-weight: 500;\n}\n\n.provenance-id {\n font-family: monospace;\n font-size: 11px;\n color: var(--mj-text-muted);\n}\n\n/* Workflow tab \u2014 the recorded task graph, read-only, with the Save as Workflow action. */\n.detail-graph {\n display: flex;\n flex-direction: column;\n height: 100%;\n min-height: 0;\n}\n\n.detail-graph__actions {\n display: flex;\n align-items: center;\n gap: var(--mj-space-sm, 0.5rem);\n padding: var(--mj-space-sm, 0.5rem);\n border-bottom: 1px solid var(--mj-border-subtle);\n}\n\n/* min-height:0 is what lets the canvas actually shrink inside the flex column. */\n.detail-graph__canvas {\n flex: 1 1 auto;\n min-height: 0;\n}\n"] }]
|
|
919
|
+
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 <!-- Why a workflow step has nothing to show: it never ran. Above the tabs, because it explains\n the emptiness the reader is about to look at. -->\n @if (StepNotice) {\n <div class=\"step-notice\">\n <mj-alert [Variant]=\"StepNotice.Variant\" Size=\"sm\" [Message]=\"StepNotice.Message\"></mj-alert>\n </div>\n }\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 || showSkillsTab || showGraphTab) {\n <div class=\"detail-pane-tabs\">\n @if (showGraphTab) {\n <button\n class=\"detail-tab\"\n [class.active]=\"detailPaneTab === 'graph'\"\n (click)=\"detailPaneTab = 'graph'\">\n <i class=\"fa-solid fa-diagram-project\"></i>\n Workflow\n </button>\n }\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 (showSkillsTab) {\n <button\n class=\"detail-tab\"\n [class.active]=\"detailPaneTab === 'skills'\"\n (click)=\"detailPaneTab = 'skills'\">\n <i class=\"fa-solid fa-wand-magic-sparkles\"></i>\n Skills\n <span class=\"tab-badge\">{{ stepSkillInvocations.length }}</span>\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 || showSkillsTab || showGraphTab\">\n <!-- Skills Tab \u2014 skill-invocation observability (activation type, provenance of authority, reason) -->\n @if (detailPaneTab === 'graph' && showGraphTab) {\n <div class=\"detail-graph\">\n <div class=\"detail-graph__actions\">\n @if (stepTaskGraphWasFolded) {\n <!-- The fold is recorded rather than silent (D9), so the reader can see WHY this\n graph never reached the dispatcher instead of inferring it. -->\n <mj-alert Variant=\"info\" Size=\"sm\"\n Message=\"This ran inline as a single step \u2014 a workflow of one needs no scheduling. You can still save it.\">\n </mj-alert>\n }\n <button mjButton variant=\"primary\" size=\"sm\" (click)=\"RequestSaveAsWorkflow()\">\n <i class=\"fa-solid fa-floppy-disk\"></i> Save as Workflow\n </button>\n </div>\n <mj-task-graph-editor\n class=\"detail-graph__canvas\"\n [Spec]=\"stepTaskGraph\"\n [NodePositions]=\"stepTaskGraphPositions\"\n [ReadOnly]=\"true\"\n [ShowPalette]=\"false\">\n </mj-task-graph-editor>\n </div>\n }\n @if (detailPaneTab === 'skills' && showSkillsTab) {\n <div class=\"skills-content\">\n @for (inv of stepSkillInvocations; track inv.SkillID) {\n <div class=\"skill-invocation-card\" [attr.data-activation]=\"inv.ActivationType\">\n <div class=\"skill-invocation-header\">\n <span class=\"skill-invocation-name\">\n <i class=\"fa-solid fa-wand-magic-sparkles\"></i>\n {{ inv.SkillName }}\n </span>\n <span class=\"skill-invocation-type\" [attr.data-activation]=\"inv.ActivationType\">\n {{ GetActivationTypeLabel(inv) }}\n </span>\n </div>\n @if (inv.Reason) {\n <div class=\"skill-invocation-reason\">\n <i class=\"fa-solid fa-quote-left\"></i>\n {{ inv.Reason }}\n </div>\n }\n <div class=\"skill-invocation-provenance\">\n <div class=\"provenance-title\">Provenance of Authority</div>\n <div class=\"provenance-row\">\n <span class=\"provenance-label\">Requested By</span>\n <span class=\"provenance-value\">{{ inv.Provenance.RequestedBy === 'user-request' ? 'User (/skill mention)' : 'Agent decision' }}</span>\n </div>\n <div class=\"provenance-row\">\n <span class=\"provenance-label\">Agent AcceptsSkills</span>\n <span class=\"provenance-value\">{{ inv.Provenance.AgentAcceptsSkills }}</span>\n </div>\n <div class=\"provenance-row\">\n <span class=\"provenance-label\">Skill ActivationMode</span>\n <span class=\"provenance-value\">{{ inv.Provenance.SkillActivationMode }}</span>\n </div>\n <div class=\"provenance-row\">\n <span class=\"provenance-label\">Agent SkillActivationMode</span>\n <span class=\"provenance-value\">{{ inv.Provenance.AgentSkillActivationMode }}</span>\n </div>\n <div class=\"provenance-row\">\n <span class=\"provenance-label\">Skill ID</span>\n <span class=\"provenance-value provenance-id\">{{ inv.SkillID }}</span>\n </div>\n </div>\n </div>\n }\n </div>\n }\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 <mj-empty-state\n Size=\"compact\"\n Icon=\"fa-solid fa-circle-plus\"\n Title=\"Scratchpad created in this step (no prior state)\" />\n <div class=\"scratchpad-snapshot\">\n <ng-container *ngTemplateOutlet=\"scratchpadSnapshotTpl; context: { $implicit: stepScratchpadOutput }\"></ng-container>\n </div>\n } @else {\n <mj-empty-state\n Size=\"compact\"\n Icon=\"fa-solid fa-circle-info\"\n Title=\"No scratchpad changes in this step\" />\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 <mj-empty-state\n Size=\"compact\"\n Icon=\"fa-solid fa-circle-info\"\n Title=\"No scratchpad input for this step\" />\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 <mj-empty-state\n Size=\"compact\"\n Icon=\"fa-solid fa-circle-info\"\n Title=\"No scratchpad output for this step\" />\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 <mj-empty-state\n Size=\"compact\"\n Icon=\"fa-solid fa-circle-info\"\n Title=\"Empty scratchpad\" />\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/* ============================================================\n Skills tab \u2014 skill-invocation observability cards\n ============================================================ */\n.skills-content {\n display: flex;\n flex-direction: column;\n gap: 12px;\n padding: 12px;\n}\n\n.skill-invocation-card {\n border: 1px solid var(--mj-border-default);\n border-radius: 8px;\n padding: 12px 14px;\n background: var(--mj-bg-surface);\n border-left: 3px solid var(--mj-brand-primary);\n}\n\n.skill-invocation-card[data-activation=\"auto\"] {\n border-left-color: var(--mj-status-warning);\n}\n\n.skill-invocation-header {\n display: flex;\n align-items: center;\n justify-content: space-between;\n gap: 8px;\n}\n\n.skill-invocation-name {\n font-weight: 600;\n font-size: 14px;\n color: var(--mj-text-primary);\n display: inline-flex;\n align-items: center;\n gap: 8px;\n}\n\n.skill-invocation-name i {\n color: var(--mj-brand-primary);\n}\n\n.skill-invocation-type {\n font-size: 11px;\n font-weight: 600;\n text-transform: uppercase;\n letter-spacing: 0.5px;\n padding: 2px 10px;\n border-radius: 10px;\n background: color-mix(in srgb, var(--mj-brand-primary) 12%, var(--mj-bg-surface));\n color: var(--mj-brand-primary);\n}\n\n.skill-invocation-type[data-activation=\"auto\"] {\n background: color-mix(in srgb, var(--mj-status-warning) 12%, var(--mj-bg-surface));\n color: var(--mj-status-warning-text);\n}\n\n.skill-invocation-reason {\n margin-top: 8px;\n font-size: 13px;\n font-style: italic;\n color: var(--mj-text-secondary);\n display: flex;\n gap: 8px;\n align-items: baseline;\n}\n\n.skill-invocation-reason i {\n color: var(--mj-text-muted);\n font-size: 10px;\n}\n\n.skill-invocation-provenance {\n margin-top: 10px;\n padding-top: 10px;\n border-top: 1px solid var(--mj-border-subtle);\n}\n\n.provenance-title {\n font-size: 11px;\n font-weight: 700;\n text-transform: uppercase;\n letter-spacing: 0.5px;\n color: var(--mj-text-muted);\n margin-bottom: 6px;\n}\n\n.provenance-row {\n display: flex;\n justify-content: space-between;\n gap: 12px;\n font-size: 12px;\n padding: 2px 0;\n}\n\n.provenance-label {\n color: var(--mj-text-secondary);\n}\n\n.provenance-value {\n color: var(--mj-text-primary);\n font-weight: 500;\n}\n\n.provenance-id {\n font-family: monospace;\n font-size: 11px;\n color: var(--mj-text-muted);\n}\n\n/* Workflow tab \u2014 the recorded task graph, read-only, with the Save as Workflow action. */\n.detail-graph {\n display: flex;\n flex-direction: column;\n height: 100%;\n min-height: 0;\n}\n\n.detail-graph__actions {\n display: flex;\n align-items: center;\n gap: var(--mj-space-sm, 0.5rem);\n padding: var(--mj-space-sm, 0.5rem);\n border-bottom: 1px solid var(--mj-border-subtle);\n}\n\n/* min-height:0 is what lets the canvas actually shrink inside the flex column. */\n.detail-graph__canvas {\n flex: 1 1 auto;\n min-height: 0;\n}\n\n/* Explanation for a step that never executed \u2014 see StepNotice. Sits above the tabs because it\n accounts for the emptiness the reader is about to look at. */\n.step-notice {\n padding: 0 var(--mj-space-3, 12px) var(--mj-space-2, 8px);\n}\n"] }]
|
|
848
920
|
}], () => [{ type: i0.ChangeDetectorRef }], { selectedTimelineItem: [{
|
|
849
921
|
type: Input
|
|
850
922
|
}], closePanel: [{
|
|
@@ -856,5 +928,5 @@ export class AIAgentRunStepDetailComponent {
|
|
|
856
928
|
}], saveAsWorkflowRequested: [{
|
|
857
929
|
type: Output
|
|
858
930
|
}] }); })();
|
|
859
|
-
(() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassDebugInfo(AIAgentRunStepDetailComponent, { className: "AIAgentRunStepDetailComponent", filePath: "src/lib/custom/ai-agent-run/ai-agent-run-step-detail.component.ts", lineNumber:
|
|
931
|
+
(() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassDebugInfo(AIAgentRunStepDetailComponent, { className: "AIAgentRunStepDetailComponent", filePath: "src/lib/custom/ai-agent-run/ai-agent-run-step-detail.component.ts", lineNumber: 24 }); })();
|
|
860
932
|
//# sourceMappingURL=ai-agent-run-step-detail.component.js.map
|