@memberjunction/ng-dashboards 2.48.0 → 2.50.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +105 -2
- package/dist/AI/ai-dashboard.component.d.ts +2 -0
- package/dist/AI/ai-dashboard.component.d.ts.map +1 -1
- package/dist/AI/ai-dashboard.component.js +66 -43
- package/dist/AI/ai-dashboard.component.js.map +1 -1
- package/dist/AI/components/agents/agent-configuration.component.js +45 -58
- package/dist/AI/components/agents/agent-configuration.component.js.map +1 -1
- package/dist/AI/components/agents/agent-editor.component.d.ts +6 -1
- package/dist/AI/components/agents/agent-editor.component.d.ts.map +1 -1
- package/dist/AI/components/agents/agent-editor.component.js +368 -366
- package/dist/AI/components/agents/agent-editor.component.js.map +1 -1
- package/dist/AI/components/agents/agent-filter-panel.component.js +83 -85
- package/dist/AI/components/agents/agent-filter-panel.component.js.map +1 -1
- package/dist/AI/components/charts/performance-heatmap.component.d.ts +66 -0
- package/dist/AI/components/charts/performance-heatmap.component.d.ts.map +1 -0
- package/dist/AI/components/charts/performance-heatmap.component.js +428 -0
- package/dist/AI/components/charts/performance-heatmap.component.js.map +1 -0
- package/dist/AI/components/charts/time-series-chart.component.d.ts +66 -0
- package/dist/AI/components/charts/time-series-chart.component.d.ts.map +1 -0
- package/dist/AI/components/charts/time-series-chart.component.js +547 -0
- package/dist/AI/components/charts/time-series-chart.component.js.map +1 -0
- package/dist/AI/components/execution-monitoring.component.d.ts +157 -5
- package/dist/AI/components/execution-monitoring.component.d.ts.map +1 -1
- package/dist/AI/components/execution-monitoring.component.js +2032 -20
- package/dist/AI/components/execution-monitoring.component.js.map +1 -1
- package/dist/AI/components/models/model-management.component.js +211 -237
- package/dist/AI/components/models/model-management.component.js.map +1 -1
- package/dist/AI/components/prompts/model-prompt-priority-matrix.component.js +208 -226
- package/dist/AI/components/prompts/model-prompt-priority-matrix.component.js.map +1 -1
- package/dist/AI/components/prompts/prompt-filter-panel.component.js +97 -99
- package/dist/AI/components/prompts/prompt-filter-panel.component.js.map +1 -1
- package/dist/AI/components/prompts/prompt-management.component.js +381 -424
- package/dist/AI/components/prompts/prompt-management.component.js.map +1 -1
- package/dist/AI/components/prompts/prompt-version-control.component.js +173 -191
- package/dist/AI/components/prompts/prompt-version-control.component.js.map +1 -1
- package/dist/AI/components/system/system-config-filter-panel.component.js +85 -87
- package/dist/AI/components/system/system-config-filter-panel.component.js.map +1 -1
- package/dist/AI/components/system/system-configuration.component.js +86 -99
- package/dist/AI/components/system/system-configuration.component.js.map +1 -1
- package/dist/AI/components/widgets/kpi-card.component.d.ts +25 -0
- package/dist/AI/components/widgets/kpi-card.component.d.ts.map +1 -0
- package/dist/AI/components/widgets/kpi-card.component.js +163 -0
- package/dist/AI/components/widgets/kpi-card.component.js.map +1 -0
- package/dist/AI/components/widgets/live-execution-widget.component.d.ts +25 -0
- package/dist/AI/components/widgets/live-execution-widget.component.d.ts.map +1 -0
- package/dist/AI/components/widgets/live-execution-widget.component.js +298 -0
- package/dist/AI/components/widgets/live-execution-widget.component.js.map +1 -0
- package/dist/AI/index.d.ts +7 -0
- package/dist/AI/index.d.ts.map +1 -0
- package/dist/AI/index.js +9 -0
- package/dist/AI/index.js.map +1 -0
- package/dist/AI/services/ai-instrumentation.service.d.ts +109 -0
- package/dist/AI/services/ai-instrumentation.service.d.ts.map +1 -0
- package/dist/AI/services/ai-instrumentation.service.js +490 -0
- package/dist/AI/services/ai-instrumentation.service.js.map +1 -0
- package/dist/Actions/actions-management-dashboard.component.js +40 -41
- package/dist/Actions/actions-management-dashboard.component.js.map +1 -1
- package/dist/Actions/components/actions-list-view.component.js +117 -134
- package/dist/Actions/components/actions-list-view.component.js.map +1 -1
- package/dist/Actions/components/actions-overview.component.js +274 -296
- package/dist/Actions/components/actions-overview.component.js.map +1 -1
- package/dist/Actions/components/categories-list-view.component.js +12 -14
- package/dist/Actions/components/categories-list-view.component.js.map +1 -1
- package/dist/Actions/components/code-management.component.js +12 -14
- package/dist/Actions/components/code-management.component.js.map +1 -1
- package/dist/Actions/components/entity-integration.component.js +12 -14
- package/dist/Actions/components/entity-integration.component.js.map +1 -1
- package/dist/Actions/components/execution-monitoring.component.js +238 -256
- package/dist/Actions/components/execution-monitoring.component.js.map +1 -1
- package/dist/Actions/components/executions-list-view.component.js +12 -14
- package/dist/Actions/components/executions-list-view.component.js.map +1 -1
- package/dist/Actions/components/scheduled-actions.component.js +12 -14
- package/dist/Actions/components/scheduled-actions.component.js.map +1 -1
- package/dist/Actions/components/security-permissions.component.js +12 -14
- package/dist/Actions/components/security-permissions.component.js.map +1 -1
- package/dist/EntityAdmin/components/entity-details.component.js +105 -107
- package/dist/EntityAdmin/components/entity-details.component.js.map +1 -1
- package/dist/EntityAdmin/components/entity-filter-panel.component.js +100 -102
- package/dist/EntityAdmin/components/entity-filter-panel.component.js.map +1 -1
- package/dist/EntityAdmin/components/erd-composite.component.js +84 -100
- package/dist/EntityAdmin/components/erd-composite.component.js.map +1 -1
- package/dist/EntityAdmin/components/erd-diagram.component.js +50 -50
- package/dist/EntityAdmin/components/erd-diagram.component.js.map +1 -1
- package/dist/EntityAdmin/entity-admin-dashboard.component.js +45 -49
- package/dist/EntityAdmin/entity-admin-dashboard.component.js.map +1 -1
- package/dist/generic/base-dashboard.js +28 -40
- package/dist/generic/base-dashboard.js.map +1 -1
- package/dist/module.d.ts +16 -12
- package/dist/module.d.ts.map +1 -1
- package/dist/module.js +36 -15
- package/dist/module.js.map +1 -1
- package/package.json +6 -6
|
@@ -1,12 +1,3 @@
|
|
|
1
|
-
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
|
2
|
-
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
|
3
|
-
return new (P || (P = Promise))(function (resolve, reject) {
|
|
4
|
-
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
|
5
|
-
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
|
6
|
-
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
|
7
|
-
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
8
|
-
});
|
|
9
|
-
};
|
|
10
1
|
import { Component, Input, Output, EventEmitter, ViewChild } from '@angular/core';
|
|
11
2
|
import { RunView, Metadata, LogError, LogStatus } from '@memberjunction/core';
|
|
12
3
|
import * as d3 from 'd3';
|
|
@@ -15,405 +6,419 @@ import * as i1 from "@angular/forms";
|
|
|
15
6
|
import * as i2 from "@memberjunction/ng-container-directives";
|
|
16
7
|
const _c0 = ["hierarchyChart"];
|
|
17
8
|
const _forTrack0 = ($index, $item) => $item.id;
|
|
18
|
-
function
|
|
19
|
-
i0.ɵɵ
|
|
20
|
-
i0.ɵɵ
|
|
9
|
+
function AgentEditorComponent_Conditional_7_Template(rf, ctx) { if (rf & 1) {
|
|
10
|
+
const _r1 = i0.ɵɵgetCurrentView();
|
|
11
|
+
i0.ɵɵelementStart(0, "button", 14);
|
|
12
|
+
i0.ɵɵlistener("click", function AgentEditorComponent_Conditional_7_Template_button_click_0_listener() { i0.ɵɵrestoreView(_r1); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.openCurrentAgentRecord()); });
|
|
13
|
+
i0.ɵɵelement(1, "i", 15);
|
|
14
|
+
i0.ɵɵtext(2, " Open Record ");
|
|
15
|
+
i0.ɵɵelementEnd();
|
|
16
|
+
} }
|
|
17
|
+
function AgentEditorComponent_Conditional_8_Conditional_3_Template(rf, ctx) { if (rf & 1) {
|
|
18
|
+
i0.ɵɵelementStart(0, "span", 16);
|
|
19
|
+
i0.ɵɵelement(1, "i", 17);
|
|
21
20
|
i0.ɵɵtext(2);
|
|
22
21
|
i0.ɵɵelementEnd();
|
|
23
22
|
} if (rf & 2) {
|
|
24
|
-
const
|
|
23
|
+
const ctx_r1 = i0.ɵɵnextContext(2);
|
|
25
24
|
i0.ɵɵadvance(2);
|
|
26
|
-
i0.ɵɵtextInterpolate1(" Child of ",
|
|
25
|
+
i0.ɵɵtextInterpolate1(" Child of ", ctx_r1.currentAgent.Parent, " ");
|
|
27
26
|
} }
|
|
28
|
-
function
|
|
29
|
-
i0.ɵɵelementStart(0, "div",
|
|
27
|
+
function AgentEditorComponent_Conditional_8_Template(rf, ctx) { if (rf & 1) {
|
|
28
|
+
i0.ɵɵelementStart(0, "div", 8)(1, "h2");
|
|
30
29
|
i0.ɵɵtext(2);
|
|
31
30
|
i0.ɵɵelementEnd();
|
|
32
|
-
i0.ɵɵtemplate(3,
|
|
31
|
+
i0.ɵɵtemplate(3, AgentEditorComponent_Conditional_8_Conditional_3_Template, 3, 1, "span", 16);
|
|
33
32
|
i0.ɵɵelementEnd();
|
|
34
33
|
} if (rf & 2) {
|
|
35
|
-
const
|
|
34
|
+
const ctx_r1 = i0.ɵɵnextContext();
|
|
36
35
|
i0.ɵɵadvance(2);
|
|
37
|
-
i0.ɵɵtextInterpolate(
|
|
36
|
+
i0.ɵɵtextInterpolate(ctx_r1.currentAgent.Name);
|
|
38
37
|
i0.ɵɵadvance();
|
|
39
|
-
i0.ɵɵconditional(
|
|
38
|
+
i0.ɵɵconditional(ctx_r1.currentAgent.Parent ? 3 : -1);
|
|
40
39
|
} }
|
|
41
|
-
function
|
|
42
|
-
const
|
|
43
|
-
i0.ɵɵelementStart(0, "div",
|
|
44
|
-
i0.ɵɵlistener("click", function
|
|
45
|
-
i0.ɵɵelement(2, "i",
|
|
40
|
+
function AgentEditorComponent_Conditional_9_Template(rf, ctx) { if (rf & 1) {
|
|
41
|
+
const _r3 = i0.ɵɵgetCurrentView();
|
|
42
|
+
i0.ɵɵelementStart(0, "div", 9)(1, "button", 18);
|
|
43
|
+
i0.ɵɵlistener("click", function AgentEditorComponent_Conditional_9_Template_button_click_1_listener() { i0.ɵɵrestoreView(_r3); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.setActiveTab("hierarchy")); });
|
|
44
|
+
i0.ɵɵelement(2, "i", 19);
|
|
46
45
|
i0.ɵɵtext(3, " Hierarchy ");
|
|
47
46
|
i0.ɵɵelementEnd();
|
|
48
|
-
i0.ɵɵelementStart(4, "button",
|
|
49
|
-
i0.ɵɵlistener("click", function
|
|
50
|
-
i0.ɵɵelement(5, "i",
|
|
47
|
+
i0.ɵɵelementStart(4, "button", 18);
|
|
48
|
+
i0.ɵɵlistener("click", function AgentEditorComponent_Conditional_9_Template_button_click_4_listener() { i0.ɵɵrestoreView(_r3); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.setActiveTab("prompts")); });
|
|
49
|
+
i0.ɵɵelement(5, "i", 20);
|
|
51
50
|
i0.ɵɵtext(6, " Prompts ");
|
|
52
51
|
i0.ɵɵelementEnd();
|
|
53
|
-
i0.ɵɵelementStart(7, "button",
|
|
54
|
-
i0.ɵɵlistener("click", function
|
|
55
|
-
i0.ɵɵelement(8, "i",
|
|
52
|
+
i0.ɵɵelementStart(7, "button", 18);
|
|
53
|
+
i0.ɵɵlistener("click", function AgentEditorComponent_Conditional_9_Template_button_click_7_listener() { i0.ɵɵrestoreView(_r3); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.setActiveTab("properties")); });
|
|
54
|
+
i0.ɵɵelement(8, "i", 21);
|
|
56
55
|
i0.ɵɵtext(9, " Properties ");
|
|
57
56
|
i0.ɵɵelementEnd()();
|
|
58
57
|
} if (rf & 2) {
|
|
59
|
-
const
|
|
58
|
+
const ctx_r1 = i0.ɵɵnextContext();
|
|
60
59
|
i0.ɵɵadvance();
|
|
61
|
-
i0.ɵɵclassProp("active",
|
|
60
|
+
i0.ɵɵclassProp("active", ctx_r1.activeTab === "hierarchy");
|
|
62
61
|
i0.ɵɵadvance(3);
|
|
63
|
-
i0.ɵɵclassProp("active",
|
|
62
|
+
i0.ɵɵclassProp("active", ctx_r1.activeTab === "prompts");
|
|
64
63
|
i0.ɵɵadvance(3);
|
|
65
|
-
i0.ɵɵclassProp("active",
|
|
64
|
+
i0.ɵɵclassProp("active", ctx_r1.activeTab === "properties");
|
|
66
65
|
} }
|
|
67
|
-
function
|
|
68
|
-
i0.ɵɵelementStart(0, "div",
|
|
69
|
-
i0.ɵɵelement(3, "div",
|
|
66
|
+
function AgentEditorComponent_Conditional_10_Template(rf, ctx) { if (rf & 1) {
|
|
67
|
+
i0.ɵɵelementStart(0, "div", 10)(1, "div", 22)(2, "div", 23);
|
|
68
|
+
i0.ɵɵelement(3, "div", 24)(4, "div", 24)(5, "div", 24);
|
|
70
69
|
i0.ɵɵelementEnd();
|
|
71
|
-
i0.ɵɵelementStart(6, "div",
|
|
70
|
+
i0.ɵɵelementStart(6, "div", 25);
|
|
72
71
|
i0.ɵɵtext(7, "Loading agent data...");
|
|
73
72
|
i0.ɵɵelementEnd()()();
|
|
74
73
|
} }
|
|
75
|
-
function
|
|
76
|
-
const
|
|
77
|
-
i0.ɵɵelementStart(0, "div",
|
|
78
|
-
i0.ɵɵelement(2, "i",
|
|
74
|
+
function AgentEditorComponent_Conditional_11_Template(rf, ctx) { if (rf & 1) {
|
|
75
|
+
const _r4 = i0.ɵɵgetCurrentView();
|
|
76
|
+
i0.ɵɵelementStart(0, "div", 11)(1, "div", 26);
|
|
77
|
+
i0.ɵɵelement(2, "i", 27);
|
|
79
78
|
i0.ɵɵelementStart(3, "h3");
|
|
80
79
|
i0.ɵɵtext(4, "Error Loading Agent");
|
|
81
80
|
i0.ɵɵelementEnd();
|
|
82
81
|
i0.ɵɵelementStart(5, "p");
|
|
83
82
|
i0.ɵɵtext(6);
|
|
84
83
|
i0.ɵɵelementEnd();
|
|
85
|
-
i0.ɵɵelementStart(7, "button",
|
|
86
|
-
i0.ɵɵlistener("click", function
|
|
87
|
-
i0.ɵɵelement(8, "i",
|
|
84
|
+
i0.ɵɵelementStart(7, "button", 28);
|
|
85
|
+
i0.ɵɵlistener("click", function AgentEditorComponent_Conditional_11_Template_button_click_7_listener() { i0.ɵɵrestoreView(_r4); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.loadAgentData()); });
|
|
86
|
+
i0.ɵɵelement(8, "i", 29);
|
|
88
87
|
i0.ɵɵtext(9, " Retry ");
|
|
89
88
|
i0.ɵɵelementEnd()()();
|
|
90
89
|
} if (rf & 2) {
|
|
91
|
-
const
|
|
90
|
+
const ctx_r1 = i0.ɵɵnextContext();
|
|
92
91
|
i0.ɵɵadvance(6);
|
|
93
|
-
i0.ɵɵtextInterpolate(
|
|
92
|
+
i0.ɵɵtextInterpolate(ctx_r1.error);
|
|
94
93
|
} }
|
|
95
|
-
function
|
|
96
|
-
i0.ɵɵelementStart(0, "div",
|
|
97
|
-
i0.ɵɵelement(2, "i",
|
|
94
|
+
function AgentEditorComponent_Conditional_12_Conditional_1_Conditional_28_Template(rf, ctx) { if (rf & 1) {
|
|
95
|
+
i0.ɵɵelementStart(0, "div", 48)(1, "small");
|
|
96
|
+
i0.ɵɵelement(2, "i", 50);
|
|
98
97
|
i0.ɵɵtext(3, " Drag to pan \u2022 Use zoom controls or scroll to zoom \u2022 Click nodes to navigate ");
|
|
99
98
|
i0.ɵɵelementEnd()();
|
|
100
99
|
} }
|
|
101
|
-
function
|
|
102
|
-
const
|
|
103
|
-
i0.ɵɵelementStart(0, "div",
|
|
104
|
-
i0.ɵɵelement(1, "i",
|
|
100
|
+
function AgentEditorComponent_Conditional_12_Conditional_1_Conditional_29_Template(rf, ctx) { if (rf & 1) {
|
|
101
|
+
const _r6 = i0.ɵɵgetCurrentView();
|
|
102
|
+
i0.ɵɵelementStart(0, "div", 49);
|
|
103
|
+
i0.ɵɵelement(1, "i", 19);
|
|
105
104
|
i0.ɵɵelementStart(2, "h4");
|
|
106
105
|
i0.ɵɵtext(3, "No Agent Hierarchy");
|
|
107
106
|
i0.ɵɵelementEnd();
|
|
108
107
|
i0.ɵɵelementStart(4, "p");
|
|
109
108
|
i0.ɵɵtext(5, "This agent doesn't have any parent or child agents yet.");
|
|
110
109
|
i0.ɵɵelementEnd();
|
|
111
|
-
i0.ɵɵelementStart(6, "button",
|
|
112
|
-
i0.ɵɵlistener("click", function
|
|
113
|
-
i0.ɵɵelement(7, "i",
|
|
110
|
+
i0.ɵɵelementStart(6, "button", 51);
|
|
111
|
+
i0.ɵɵlistener("click", function AgentEditorComponent_Conditional_12_Conditional_1_Conditional_29_Template_button_click_6_listener() { i0.ɵɵrestoreView(_r6); const ctx_r1 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r1.openCreateSubAgent()); });
|
|
112
|
+
i0.ɵɵelement(7, "i", 37);
|
|
114
113
|
i0.ɵɵtext(8, " Create Sub-Agent ");
|
|
115
114
|
i0.ɵɵelementEnd()();
|
|
116
115
|
} }
|
|
117
|
-
function
|
|
118
|
-
const
|
|
119
|
-
i0.ɵɵelementStart(0, "div",
|
|
120
|
-
i0.ɵɵelement(3, "i",
|
|
116
|
+
function AgentEditorComponent_Conditional_12_Conditional_1_Template(rf, ctx) { if (rf & 1) {
|
|
117
|
+
const _r5 = i0.ɵɵgetCurrentView();
|
|
118
|
+
i0.ɵɵelementStart(0, "div", 30)(1, "div", 33)(2, "h3");
|
|
119
|
+
i0.ɵɵelement(3, "i", 19);
|
|
121
120
|
i0.ɵɵtext(4, " Agent Hierarchy ");
|
|
122
121
|
i0.ɵɵelementEnd();
|
|
123
|
-
i0.ɵɵelementStart(5, "div",
|
|
124
|
-
i0.ɵɵlistener("click", function
|
|
125
|
-
i0.ɵɵelement(8, "i",
|
|
122
|
+
i0.ɵɵelementStart(5, "div", 34)(6, "div", 35)(7, "button", 36);
|
|
123
|
+
i0.ɵɵlistener("click", function AgentEditorComponent_Conditional_12_Conditional_1_Template_button_click_7_listener() { i0.ɵɵrestoreView(_r5); const ctx_r1 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r1.zoomIn()); });
|
|
124
|
+
i0.ɵɵelement(8, "i", 37);
|
|
126
125
|
i0.ɵɵelementEnd();
|
|
127
|
-
i0.ɵɵelementStart(9, "button",
|
|
128
|
-
i0.ɵɵlistener("click", function
|
|
129
|
-
i0.ɵɵelement(10, "i",
|
|
126
|
+
i0.ɵɵelementStart(9, "button", 38);
|
|
127
|
+
i0.ɵɵlistener("click", function AgentEditorComponent_Conditional_12_Conditional_1_Template_button_click_9_listener() { i0.ɵɵrestoreView(_r5); const ctx_r1 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r1.zoomOut()); });
|
|
128
|
+
i0.ɵɵelement(10, "i", 39);
|
|
130
129
|
i0.ɵɵelementEnd();
|
|
131
|
-
i0.ɵɵelementStart(11, "button",
|
|
132
|
-
i0.ɵɵlistener("click", function
|
|
133
|
-
i0.ɵɵelement(12, "i",
|
|
130
|
+
i0.ɵɵelementStart(11, "button", 40);
|
|
131
|
+
i0.ɵɵlistener("click", function AgentEditorComponent_Conditional_12_Conditional_1_Template_button_click_11_listener() { i0.ɵɵrestoreView(_r5); const ctx_r1 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r1.resetZoom()); });
|
|
132
|
+
i0.ɵɵelement(12, "i", 41);
|
|
134
133
|
i0.ɵɵelementEnd()();
|
|
135
|
-
i0.ɵɵelementStart(13, "div",
|
|
136
|
-
i0.ɵɵelement(15, "div",
|
|
134
|
+
i0.ɵɵelementStart(13, "div", 42)(14, "div", 43);
|
|
135
|
+
i0.ɵɵelement(15, "div", 44);
|
|
137
136
|
i0.ɵɵelementStart(16, "span");
|
|
138
137
|
i0.ɵɵtext(17, "Root");
|
|
139
138
|
i0.ɵɵelementEnd()();
|
|
140
|
-
i0.ɵɵelementStart(18, "div",
|
|
141
|
-
i0.ɵɵelement(19, "div",
|
|
139
|
+
i0.ɵɵelementStart(18, "div", 43);
|
|
140
|
+
i0.ɵɵelement(19, "div", 45);
|
|
142
141
|
i0.ɵɵelementStart(20, "span");
|
|
143
142
|
i0.ɵɵtext(21, "Level 1");
|
|
144
143
|
i0.ɵɵelementEnd()();
|
|
145
|
-
i0.ɵɵelementStart(22, "div",
|
|
146
|
-
i0.ɵɵelement(23, "div",
|
|
144
|
+
i0.ɵɵelementStart(22, "div", 43);
|
|
145
|
+
i0.ɵɵelement(23, "div", 46);
|
|
147
146
|
i0.ɵɵelementStart(24, "span");
|
|
148
147
|
i0.ɵɵtext(25, "Level 2+");
|
|
149
148
|
i0.ɵɵelementEnd()()()()();
|
|
150
|
-
i0.ɵɵelementStart(26, "div",
|
|
151
|
-
i0.ɵɵtemplate(28,
|
|
149
|
+
i0.ɵɵelementStart(26, "div", 47, 0);
|
|
150
|
+
i0.ɵɵtemplate(28, AgentEditorComponent_Conditional_12_Conditional_1_Conditional_28_Template, 4, 0, "div", 48)(29, AgentEditorComponent_Conditional_12_Conditional_1_Conditional_29_Template, 9, 0, "div", 49);
|
|
152
151
|
i0.ɵɵelementEnd()();
|
|
153
152
|
} if (rf & 2) {
|
|
154
|
-
const
|
|
153
|
+
const ctx_r1 = i0.ɵɵnextContext(2);
|
|
155
154
|
i0.ɵɵadvance(28);
|
|
156
|
-
i0.ɵɵconditional(
|
|
155
|
+
i0.ɵɵconditional(ctx_r1.hierarchyData && (ctx_r1.hasChildren() || ctx_r1.hasParent()) ? 28 : -1);
|
|
157
156
|
i0.ɵɵadvance();
|
|
158
|
-
i0.ɵɵconditional(!
|
|
157
|
+
i0.ɵɵconditional(!ctx_r1.hierarchyData || !ctx_r1.hasChildren() && !ctx_r1.hasParent() ? 29 : -1);
|
|
159
158
|
} }
|
|
160
|
-
function
|
|
161
|
-
i0.ɵɵelementStart(0, "div",
|
|
162
|
-
i0.ɵɵelement(1, "i",
|
|
159
|
+
function AgentEditorComponent_Conditional_12_Conditional_2_Conditional_9_Template(rf, ctx) { if (rf & 1) {
|
|
160
|
+
i0.ɵɵelementStart(0, "div", 54);
|
|
161
|
+
i0.ɵɵelement(1, "i", 20);
|
|
163
162
|
i0.ɵɵelementStart(2, "p");
|
|
164
163
|
i0.ɵɵtext(3, "No prompts configured for this agent");
|
|
165
164
|
i0.ɵɵelementEnd();
|
|
166
|
-
i0.ɵɵelementStart(4, "button",
|
|
167
|
-
i0.ɵɵelement(5, "i",
|
|
165
|
+
i0.ɵɵelementStart(4, "button", 55);
|
|
166
|
+
i0.ɵɵelement(5, "i", 37);
|
|
168
167
|
i0.ɵɵtext(6, " Add First Prompt ");
|
|
169
168
|
i0.ɵɵelementEnd()();
|
|
170
169
|
} }
|
|
171
|
-
function
|
|
172
|
-
i0.ɵɵelementStart(0, "div",
|
|
170
|
+
function AgentEditorComponent_Conditional_12_Conditional_2_Conditional_10_For_1_Template(rf, ctx) { if (rf & 1) {
|
|
171
|
+
i0.ɵɵelementStart(0, "div", 56)(1, "div", 57)(2, "div", 58)(3, "h4");
|
|
173
172
|
i0.ɵɵtext(4);
|
|
174
173
|
i0.ɵɵelementEnd();
|
|
175
|
-
i0.ɵɵelementStart(5, "span",
|
|
174
|
+
i0.ɵɵelementStart(5, "span", 59);
|
|
176
175
|
i0.ɵɵtext(6);
|
|
177
176
|
i0.ɵɵelementEnd()();
|
|
178
|
-
i0.ɵɵelementStart(7, "div",
|
|
179
|
-
i0.ɵɵelement(9, "i",
|
|
177
|
+
i0.ɵɵelementStart(7, "div", 60)(8, "button", 61);
|
|
178
|
+
i0.ɵɵelement(9, "i", 62);
|
|
180
179
|
i0.ɵɵelementEnd();
|
|
181
|
-
i0.ɵɵelementStart(10, "button",
|
|
182
|
-
i0.ɵɵelement(11, "i",
|
|
180
|
+
i0.ɵɵelementStart(10, "button", 63);
|
|
181
|
+
i0.ɵɵelement(11, "i", 64);
|
|
183
182
|
i0.ɵɵelementEnd()()();
|
|
184
|
-
i0.ɵɵelementStart(12, "div",
|
|
183
|
+
i0.ɵɵelementStart(12, "div", 65)(13, "p");
|
|
185
184
|
i0.ɵɵtext(14);
|
|
186
185
|
i0.ɵɵelementEnd()()();
|
|
187
186
|
} if (rf & 2) {
|
|
188
|
-
const
|
|
187
|
+
const prompt_r7 = ctx.$implicit;
|
|
189
188
|
i0.ɵɵadvance(4);
|
|
190
|
-
i0.ɵɵtextInterpolate(
|
|
189
|
+
i0.ɵɵtextInterpolate(prompt_r7.name);
|
|
191
190
|
i0.ɵɵadvance(2);
|
|
192
|
-
i0.ɵɵtextInterpolate(
|
|
191
|
+
i0.ɵɵtextInterpolate(prompt_r7.type);
|
|
193
192
|
i0.ɵɵadvance(8);
|
|
194
|
-
i0.ɵɵtextInterpolate(
|
|
193
|
+
i0.ɵɵtextInterpolate(prompt_r7.content);
|
|
195
194
|
} }
|
|
196
|
-
function
|
|
197
|
-
i0.ɵɵrepeaterCreate(0,
|
|
195
|
+
function AgentEditorComponent_Conditional_12_Conditional_2_Conditional_10_Template(rf, ctx) { if (rf & 1) {
|
|
196
|
+
i0.ɵɵrepeaterCreate(0, AgentEditorComponent_Conditional_12_Conditional_2_Conditional_10_For_1_Template, 15, 3, "div", 56, _forTrack0);
|
|
198
197
|
} if (rf & 2) {
|
|
199
|
-
const
|
|
200
|
-
i0.ɵɵrepeater(
|
|
198
|
+
const ctx_r1 = i0.ɵɵnextContext(3);
|
|
199
|
+
i0.ɵɵrepeater(ctx_r1.agentPrompts);
|
|
201
200
|
} }
|
|
202
|
-
function
|
|
203
|
-
i0.ɵɵelementStart(0, "div",
|
|
204
|
-
i0.ɵɵelement(3, "i",
|
|
201
|
+
function AgentEditorComponent_Conditional_12_Conditional_2_Template(rf, ctx) { if (rf & 1) {
|
|
202
|
+
i0.ɵɵelementStart(0, "div", 31)(1, "div", 33)(2, "h3");
|
|
203
|
+
i0.ɵɵelement(3, "i", 20);
|
|
205
204
|
i0.ɵɵtext(4, " Agent Prompts ");
|
|
206
205
|
i0.ɵɵelementEnd();
|
|
207
|
-
i0.ɵɵelementStart(5, "button",
|
|
208
|
-
i0.ɵɵelement(6, "i",
|
|
206
|
+
i0.ɵɵelementStart(5, "button", 52);
|
|
207
|
+
i0.ɵɵelement(6, "i", 37);
|
|
209
208
|
i0.ɵɵtext(7, " Add Prompt ");
|
|
210
209
|
i0.ɵɵelementEnd()();
|
|
211
|
-
i0.ɵɵelementStart(8, "div",
|
|
212
|
-
i0.ɵɵtemplate(9,
|
|
210
|
+
i0.ɵɵelementStart(8, "div", 53);
|
|
211
|
+
i0.ɵɵtemplate(9, AgentEditorComponent_Conditional_12_Conditional_2_Conditional_9_Template, 7, 0, "div", 54)(10, AgentEditorComponent_Conditional_12_Conditional_2_Conditional_10_Template, 2, 0);
|
|
213
212
|
i0.ɵɵelementEnd()();
|
|
214
213
|
} if (rf & 2) {
|
|
215
|
-
const
|
|
214
|
+
const ctx_r1 = i0.ɵɵnextContext(2);
|
|
216
215
|
i0.ɵɵadvance(9);
|
|
217
|
-
i0.ɵɵconditional(
|
|
216
|
+
i0.ɵɵconditional(ctx_r1.agentPrompts.length === 0 ? 9 : 10);
|
|
218
217
|
} }
|
|
219
|
-
function
|
|
220
|
-
i0.ɵɵelementStart(0, "div",
|
|
218
|
+
function AgentEditorComponent_Conditional_12_Conditional_3_Conditional_44_Template(rf, ctx) { if (rf & 1) {
|
|
219
|
+
i0.ɵɵelementStart(0, "div", 72)(1, "div", 69)(2, "label");
|
|
221
220
|
i0.ɵɵtext(3, "Message Threshold");
|
|
222
221
|
i0.ɵɵelementEnd();
|
|
223
|
-
i0.ɵɵelement(4, "input",
|
|
222
|
+
i0.ɵɵelement(4, "input", 81);
|
|
224
223
|
i0.ɵɵelementEnd();
|
|
225
|
-
i0.ɵɵelementStart(5, "div",
|
|
224
|
+
i0.ɵɵelementStart(5, "div", 69)(6, "label");
|
|
226
225
|
i0.ɵɵtext(7, "Retention Count");
|
|
227
226
|
i0.ɵɵelementEnd();
|
|
228
|
-
i0.ɵɵelement(8, "input",
|
|
227
|
+
i0.ɵɵelement(8, "input", 82);
|
|
229
228
|
i0.ɵɵelementEnd()();
|
|
230
229
|
} if (rf & 2) {
|
|
231
|
-
const
|
|
230
|
+
const ctx_r1 = i0.ɵɵnextContext(3);
|
|
232
231
|
i0.ɵɵadvance(4);
|
|
233
|
-
i0.ɵɵproperty("value",
|
|
232
|
+
i0.ɵɵproperty("value", ctx_r1.currentAgent.ContextCompressionMessageThreshold);
|
|
234
233
|
i0.ɵɵadvance(4);
|
|
235
|
-
i0.ɵɵproperty("value",
|
|
234
|
+
i0.ɵɵproperty("value", ctx_r1.currentAgent.ContextCompressionMessageRetentionCount);
|
|
236
235
|
} }
|
|
237
|
-
function
|
|
238
|
-
i0.ɵɵelementStart(0, "div",
|
|
239
|
-
i0.ɵɵelement(3, "i",
|
|
236
|
+
function AgentEditorComponent_Conditional_12_Conditional_3_Template(rf, ctx) { if (rf & 1) {
|
|
237
|
+
i0.ɵɵelementStart(0, "div", 32)(1, "div", 33)(2, "h3");
|
|
238
|
+
i0.ɵɵelement(3, "i", 21);
|
|
240
239
|
i0.ɵɵtext(4, " Agent Properties ");
|
|
241
240
|
i0.ɵɵelementEnd();
|
|
242
|
-
i0.ɵɵelementStart(5, "button",
|
|
243
|
-
i0.ɵɵelement(6, "i",
|
|
241
|
+
i0.ɵɵelementStart(5, "button", 66);
|
|
242
|
+
i0.ɵɵelement(6, "i", 67);
|
|
244
243
|
i0.ɵɵtext(7, " Save ");
|
|
245
244
|
i0.ɵɵelementEnd()();
|
|
246
|
-
i0.ɵɵelementStart(8, "div",
|
|
245
|
+
i0.ɵɵelementStart(8, "div", 68)(9, "div", 69)(10, "label");
|
|
247
246
|
i0.ɵɵtext(11, "Name");
|
|
248
247
|
i0.ɵɵelementEnd();
|
|
249
|
-
i0.ɵɵelement(12, "input",
|
|
248
|
+
i0.ɵɵelement(12, "input", 70);
|
|
250
249
|
i0.ɵɵelementEnd();
|
|
251
|
-
i0.ɵɵelementStart(13, "div",
|
|
250
|
+
i0.ɵɵelementStart(13, "div", 69)(14, "label");
|
|
252
251
|
i0.ɵɵtext(15, "Description");
|
|
253
252
|
i0.ɵɵelementEnd();
|
|
254
|
-
i0.ɵɵelement(16, "textarea",
|
|
253
|
+
i0.ɵɵelement(16, "textarea", 71);
|
|
255
254
|
i0.ɵɵelementEnd();
|
|
256
|
-
i0.ɵɵelementStart(17, "div",
|
|
255
|
+
i0.ɵɵelementStart(17, "div", 72)(18, "div", 69)(19, "label");
|
|
257
256
|
i0.ɵɵtext(20, "Execution Mode");
|
|
258
257
|
i0.ɵɵelementEnd();
|
|
259
|
-
i0.ɵɵelementStart(21, "select",
|
|
258
|
+
i0.ɵɵelementStart(21, "select", 73)(22, "option", 74);
|
|
260
259
|
i0.ɵɵtext(23, "Sequential");
|
|
261
260
|
i0.ɵɵelementEnd();
|
|
262
|
-
i0.ɵɵelementStart(24, "option",
|
|
261
|
+
i0.ɵɵelementStart(24, "option", 75);
|
|
263
262
|
i0.ɵɵtext(25, "Parallel");
|
|
264
263
|
i0.ɵɵelementEnd()()();
|
|
265
|
-
i0.ɵɵelementStart(26, "div",
|
|
264
|
+
i0.ɵɵelementStart(26, "div", 69)(27, "label");
|
|
266
265
|
i0.ɵɵtext(28, "Execution Order");
|
|
267
266
|
i0.ɵɵelementEnd();
|
|
268
|
-
i0.ɵɵelement(29, "input",
|
|
267
|
+
i0.ɵɵelement(29, "input", 76);
|
|
269
268
|
i0.ɵɵelementEnd()();
|
|
270
|
-
i0.ɵɵelementStart(30, "div",
|
|
271
|
-
i0.ɵɵelement(32, "input",
|
|
269
|
+
i0.ɵɵelementStart(30, "div", 77)(31, "label", 78);
|
|
270
|
+
i0.ɵɵelement(32, "input", 79)(33, "span", 80);
|
|
272
271
|
i0.ɵɵtext(34, " Expose as Action ");
|
|
273
272
|
i0.ɵɵelementEnd();
|
|
274
273
|
i0.ɵɵelementStart(35, "small");
|
|
275
274
|
i0.ɵɵtext(36, "Allow this agent to be used as an action by other agents");
|
|
276
275
|
i0.ɵɵelementEnd()();
|
|
277
|
-
i0.ɵɵelementStart(37, "div",
|
|
278
|
-
i0.ɵɵelement(39, "input",
|
|
276
|
+
i0.ɵɵelementStart(37, "div", 77)(38, "label", 78);
|
|
277
|
+
i0.ɵɵelement(39, "input", 79)(40, "span", 80);
|
|
279
278
|
i0.ɵɵtext(41, " Enable Context Compression ");
|
|
280
279
|
i0.ɵɵelementEnd();
|
|
281
280
|
i0.ɵɵelementStart(42, "small");
|
|
282
281
|
i0.ɵɵtext(43, "Automatically compress conversation context when threshold is reached");
|
|
283
282
|
i0.ɵɵelementEnd()();
|
|
284
|
-
i0.ɵɵtemplate(44,
|
|
283
|
+
i0.ɵɵtemplate(44, AgentEditorComponent_Conditional_12_Conditional_3_Conditional_44_Template, 9, 2, "div", 72);
|
|
285
284
|
i0.ɵɵelementEnd()();
|
|
286
285
|
} if (rf & 2) {
|
|
287
|
-
const
|
|
286
|
+
const ctx_r1 = i0.ɵɵnextContext(2);
|
|
288
287
|
i0.ɵɵadvance(12);
|
|
289
|
-
i0.ɵɵproperty("value",
|
|
288
|
+
i0.ɵɵproperty("value", ctx_r1.currentAgent.Name);
|
|
290
289
|
i0.ɵɵadvance(4);
|
|
291
|
-
i0.ɵɵproperty("value",
|
|
290
|
+
i0.ɵɵproperty("value", ctx_r1.currentAgent.Description);
|
|
292
291
|
i0.ɵɵadvance(5);
|
|
293
|
-
i0.ɵɵproperty("value",
|
|
292
|
+
i0.ɵɵproperty("value", ctx_r1.currentAgent.ExecutionMode);
|
|
294
293
|
i0.ɵɵadvance(8);
|
|
295
|
-
i0.ɵɵproperty("value",
|
|
294
|
+
i0.ɵɵproperty("value", ctx_r1.currentAgent.ExecutionOrder);
|
|
296
295
|
i0.ɵɵadvance(3);
|
|
297
|
-
i0.ɵɵproperty("checked",
|
|
296
|
+
i0.ɵɵproperty("checked", ctx_r1.currentAgent.ExposeAsAction);
|
|
298
297
|
i0.ɵɵadvance(7);
|
|
299
|
-
i0.ɵɵproperty("checked",
|
|
298
|
+
i0.ɵɵproperty("checked", ctx_r1.currentAgent.EnableContextCompression);
|
|
300
299
|
i0.ɵɵadvance(5);
|
|
301
|
-
i0.ɵɵconditional(
|
|
300
|
+
i0.ɵɵconditional(ctx_r1.currentAgent.EnableContextCompression ? 44 : -1);
|
|
302
301
|
} }
|
|
303
|
-
function
|
|
304
|
-
i0.ɵɵelementStart(0, "div",
|
|
305
|
-
i0.ɵɵtemplate(1,
|
|
302
|
+
function AgentEditorComponent_Conditional_12_Template(rf, ctx) { if (rf & 1) {
|
|
303
|
+
i0.ɵɵelementStart(0, "div", 12);
|
|
304
|
+
i0.ɵɵtemplate(1, AgentEditorComponent_Conditional_12_Conditional_1_Template, 30, 2, "div", 30)(2, AgentEditorComponent_Conditional_12_Conditional_2_Template, 11, 1, "div", 31)(3, AgentEditorComponent_Conditional_12_Conditional_3_Template, 45, 7, "div", 32);
|
|
306
305
|
i0.ɵɵelementEnd();
|
|
307
306
|
} if (rf & 2) {
|
|
308
|
-
const
|
|
307
|
+
const ctx_r1 = i0.ɵɵnextContext();
|
|
309
308
|
i0.ɵɵadvance();
|
|
310
|
-
i0.ɵɵconditional(
|
|
309
|
+
i0.ɵɵconditional(ctx_r1.activeTab === "hierarchy" ? 1 : -1);
|
|
311
310
|
i0.ɵɵadvance();
|
|
312
|
-
i0.ɵɵconditional(
|
|
311
|
+
i0.ɵɵconditional(ctx_r1.activeTab === "prompts" ? 2 : -1);
|
|
313
312
|
i0.ɵɵadvance();
|
|
314
|
-
i0.ɵɵconditional(
|
|
313
|
+
i0.ɵɵconditional(ctx_r1.activeTab === "properties" ? 3 : -1);
|
|
315
314
|
} }
|
|
316
|
-
function
|
|
317
|
-
i0.ɵɵelementStart(0, "div",
|
|
318
|
-
i0.ɵɵelement(1, "i",
|
|
315
|
+
function AgentEditorComponent_Conditional_13_Conditional_9_Template(rf, ctx) { if (rf & 1) {
|
|
316
|
+
i0.ɵɵelementStart(0, "div", 89);
|
|
317
|
+
i0.ɵɵelement(1, "i", 27);
|
|
319
318
|
i0.ɵɵtext(2);
|
|
320
319
|
i0.ɵɵelementEnd();
|
|
321
320
|
} if (rf & 2) {
|
|
322
|
-
const
|
|
321
|
+
const ctx_r1 = i0.ɵɵnextContext(2);
|
|
323
322
|
i0.ɵɵadvance(2);
|
|
324
|
-
i0.ɵɵtextInterpolate1(" ",
|
|
323
|
+
i0.ɵɵtextInterpolate1(" ", ctx_r1.error, " ");
|
|
325
324
|
} }
|
|
326
|
-
function
|
|
327
|
-
i0.ɵɵelement(0, "span",
|
|
325
|
+
function AgentEditorComponent_Conditional_13_Conditional_26_Template(rf, ctx) { if (rf & 1) {
|
|
326
|
+
i0.ɵɵelement(0, "span", 96);
|
|
328
327
|
i0.ɵɵtext(1, " Creating... ");
|
|
329
328
|
} }
|
|
330
|
-
function
|
|
331
|
-
i0.ɵɵelement(0, "i",
|
|
329
|
+
function AgentEditorComponent_Conditional_13_Conditional_27_Template(rf, ctx) { if (rf & 1) {
|
|
330
|
+
i0.ɵɵelement(0, "i", 37);
|
|
332
331
|
i0.ɵɵtext(1, " Create Sub-Agent ");
|
|
333
332
|
} }
|
|
334
|
-
function
|
|
335
|
-
const
|
|
336
|
-
i0.ɵɵelementStart(0, "div",
|
|
337
|
-
i0.ɵɵlistener("click", function
|
|
338
|
-
i0.ɵɵelementStart(1, "div",
|
|
339
|
-
i0.ɵɵlistener("click", function
|
|
340
|
-
i0.ɵɵelementStart(2, "div",
|
|
341
|
-
i0.ɵɵelement(4, "i",
|
|
333
|
+
function AgentEditorComponent_Conditional_13_Template(rf, ctx) { if (rf & 1) {
|
|
334
|
+
const _r8 = i0.ɵɵgetCurrentView();
|
|
335
|
+
i0.ɵɵelementStart(0, "div", 83);
|
|
336
|
+
i0.ɵɵlistener("click", function AgentEditorComponent_Conditional_13_Template_div_click_0_listener() { i0.ɵɵrestoreView(_r8); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.closeCreateSubAgent()); });
|
|
337
|
+
i0.ɵɵelementStart(1, "div", 84);
|
|
338
|
+
i0.ɵɵlistener("click", function AgentEditorComponent_Conditional_13_Template_div_click_1_listener($event) { i0.ɵɵrestoreView(_r8); return i0.ɵɵresetView($event.stopPropagation()); });
|
|
339
|
+
i0.ɵɵelementStart(2, "div", 85)(3, "h3");
|
|
340
|
+
i0.ɵɵelement(4, "i", 37);
|
|
342
341
|
i0.ɵɵtext(5, " Create Sub-Agent ");
|
|
343
342
|
i0.ɵɵelementEnd();
|
|
344
|
-
i0.ɵɵelementStart(6, "button",
|
|
345
|
-
i0.ɵɵlistener("click", function
|
|
346
|
-
i0.ɵɵelement(7, "i",
|
|
343
|
+
i0.ɵɵelementStart(6, "button", 86);
|
|
344
|
+
i0.ɵɵlistener("click", function AgentEditorComponent_Conditional_13_Template_button_click_6_listener() { i0.ɵɵrestoreView(_r8); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.closeCreateSubAgent()); });
|
|
345
|
+
i0.ɵɵelement(7, "i", 87);
|
|
347
346
|
i0.ɵɵelementEnd()();
|
|
348
|
-
i0.ɵɵelementStart(8, "div",
|
|
349
|
-
i0.ɵɵtemplate(9,
|
|
350
|
-
i0.ɵɵelementStart(10, "div",
|
|
347
|
+
i0.ɵɵelementStart(8, "div", 88);
|
|
348
|
+
i0.ɵɵtemplate(9, AgentEditorComponent_Conditional_13_Conditional_9_Template, 3, 1, "div", 89);
|
|
349
|
+
i0.ɵɵelementStart(10, "div", 69)(11, "label");
|
|
351
350
|
i0.ɵɵtext(12, "Agent Name *");
|
|
352
351
|
i0.ɵɵelementEnd();
|
|
353
|
-
i0.ɵɵelementStart(13, "input",
|
|
354
|
-
i0.ɵɵtwoWayListener("ngModelChange", function
|
|
352
|
+
i0.ɵɵelementStart(13, "input", 90);
|
|
353
|
+
i0.ɵɵtwoWayListener("ngModelChange", function AgentEditorComponent_Conditional_13_Template_input_ngModelChange_13_listener($event) { i0.ɵɵrestoreView(_r8); const ctx_r1 = i0.ɵɵnextContext(); i0.ɵɵtwoWayBindingSet(ctx_r1.newSubAgentName, $event) || (ctx_r1.newSubAgentName = $event); return i0.ɵɵresetView($event); });
|
|
355
354
|
i0.ɵɵelementEnd()();
|
|
356
|
-
i0.ɵɵelementStart(14, "div",
|
|
355
|
+
i0.ɵɵelementStart(14, "div", 69)(15, "label");
|
|
357
356
|
i0.ɵɵtext(16, "Description");
|
|
358
357
|
i0.ɵɵelementEnd();
|
|
359
|
-
i0.ɵɵelementStart(17, "textarea",
|
|
360
|
-
i0.ɵɵtwoWayListener("ngModelChange", function
|
|
358
|
+
i0.ɵɵelementStart(17, "textarea", 91);
|
|
359
|
+
i0.ɵɵtwoWayListener("ngModelChange", function AgentEditorComponent_Conditional_13_Template_textarea_ngModelChange_17_listener($event) { i0.ɵɵrestoreView(_r8); const ctx_r1 = i0.ɵɵnextContext(); i0.ɵɵtwoWayBindingSet(ctx_r1.newSubAgentDescription, $event) || (ctx_r1.newSubAgentDescription = $event); return i0.ɵɵresetView($event); });
|
|
361
360
|
i0.ɵɵelementEnd()();
|
|
362
|
-
i0.ɵɵelementStart(18, "div",
|
|
361
|
+
i0.ɵɵelementStart(18, "div", 92)(19, "strong");
|
|
363
362
|
i0.ɵɵtext(20, "Parent Agent:");
|
|
364
363
|
i0.ɵɵelementEnd();
|
|
365
364
|
i0.ɵɵtext(21);
|
|
366
365
|
i0.ɵɵelementEnd()();
|
|
367
|
-
i0.ɵɵelementStart(22, "div",
|
|
368
|
-
i0.ɵɵlistener("click", function
|
|
366
|
+
i0.ɵɵelementStart(22, "div", 93)(23, "button", 94);
|
|
367
|
+
i0.ɵɵlistener("click", function AgentEditorComponent_Conditional_13_Template_button_click_23_listener() { i0.ɵɵrestoreView(_r8); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.closeCreateSubAgent()); });
|
|
369
368
|
i0.ɵɵtext(24, " Cancel ");
|
|
370
369
|
i0.ɵɵelementEnd();
|
|
371
|
-
i0.ɵɵelementStart(25, "button",
|
|
372
|
-
i0.ɵɵlistener("click", function
|
|
373
|
-
i0.ɵɵtemplate(26,
|
|
370
|
+
i0.ɵɵelementStart(25, "button", 95);
|
|
371
|
+
i0.ɵɵlistener("click", function AgentEditorComponent_Conditional_13_Template_button_click_25_listener() { i0.ɵɵrestoreView(_r8); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.createSubAgent()); });
|
|
372
|
+
i0.ɵɵtemplate(26, AgentEditorComponent_Conditional_13_Conditional_26_Template, 2, 0)(27, AgentEditorComponent_Conditional_13_Conditional_27_Template, 2, 0);
|
|
374
373
|
i0.ɵɵelementEnd()()()();
|
|
375
374
|
} if (rf & 2) {
|
|
376
|
-
const
|
|
375
|
+
const ctx_r1 = i0.ɵɵnextContext();
|
|
377
376
|
i0.ɵɵadvance(9);
|
|
378
|
-
i0.ɵɵconditional(
|
|
377
|
+
i0.ɵɵconditional(ctx_r1.error ? 9 : -1);
|
|
379
378
|
i0.ɵɵadvance(4);
|
|
380
|
-
i0.ɵɵtwoWayProperty("ngModel",
|
|
381
|
-
i0.ɵɵproperty("disabled",
|
|
379
|
+
i0.ɵɵtwoWayProperty("ngModel", ctx_r1.newSubAgentName);
|
|
380
|
+
i0.ɵɵproperty("disabled", ctx_r1.isLoading);
|
|
382
381
|
i0.ɵɵadvance(4);
|
|
383
|
-
i0.ɵɵtwoWayProperty("ngModel",
|
|
384
|
-
i0.ɵɵproperty("disabled",
|
|
382
|
+
i0.ɵɵtwoWayProperty("ngModel", ctx_r1.newSubAgentDescription);
|
|
383
|
+
i0.ɵɵproperty("disabled", ctx_r1.isLoading);
|
|
385
384
|
i0.ɵɵadvance(4);
|
|
386
|
-
i0.ɵɵtextInterpolate1(" ",
|
|
385
|
+
i0.ɵɵtextInterpolate1(" ", ctx_r1.currentAgent == null ? null : ctx_r1.currentAgent.Name, " ");
|
|
387
386
|
i0.ɵɵadvance(2);
|
|
388
|
-
i0.ɵɵproperty("disabled",
|
|
387
|
+
i0.ɵɵproperty("disabled", ctx_r1.isLoading);
|
|
389
388
|
i0.ɵɵadvance(2);
|
|
390
|
-
i0.ɵɵproperty("disabled", !
|
|
389
|
+
i0.ɵɵproperty("disabled", !ctx_r1.newSubAgentName.trim() || ctx_r1.isLoading);
|
|
391
390
|
i0.ɵɵadvance();
|
|
392
|
-
i0.ɵɵconditional(
|
|
391
|
+
i0.ɵɵconditional(ctx_r1.isLoading ? 26 : 27);
|
|
393
392
|
} }
|
|
394
393
|
export class AgentEditorComponent {
|
|
395
|
-
|
|
396
|
-
|
|
397
|
-
|
|
398
|
-
|
|
399
|
-
|
|
400
|
-
|
|
401
|
-
|
|
402
|
-
|
|
403
|
-
|
|
404
|
-
|
|
405
|
-
|
|
406
|
-
|
|
407
|
-
|
|
408
|
-
|
|
409
|
-
|
|
410
|
-
|
|
411
|
-
|
|
412
|
-
|
|
413
|
-
|
|
414
|
-
|
|
415
|
-
|
|
416
|
-
|
|
394
|
+
agentId = null;
|
|
395
|
+
close = new EventEmitter();
|
|
396
|
+
openAgent = new EventEmitter();
|
|
397
|
+
openEntityRecord = new EventEmitter();
|
|
398
|
+
hierarchyChartRef;
|
|
399
|
+
isLoading = false;
|
|
400
|
+
error = null;
|
|
401
|
+
currentAgent = null;
|
|
402
|
+
allAgents = [];
|
|
403
|
+
hierarchyData = null;
|
|
404
|
+
selectedNode = null;
|
|
405
|
+
agentPrompts = [];
|
|
406
|
+
// Tab settings
|
|
407
|
+
activeTab = 'hierarchy';
|
|
408
|
+
// Legacy layout settings (keeping for compatibility)
|
|
409
|
+
showHierarchy = true;
|
|
410
|
+
showPrompts = true;
|
|
411
|
+
showProperties = true;
|
|
412
|
+
// Sub-agent creation
|
|
413
|
+
showCreateSubAgent = false;
|
|
414
|
+
newSubAgentName = '';
|
|
415
|
+
newSubAgentDescription = '';
|
|
416
|
+
// D3 variables
|
|
417
|
+
svg;
|
|
418
|
+
g;
|
|
419
|
+
tree;
|
|
420
|
+
root;
|
|
421
|
+
zoom;
|
|
417
422
|
ngOnInit() {
|
|
418
423
|
if (this.agentId) {
|
|
419
424
|
this.loadAgentData();
|
|
@@ -428,40 +433,38 @@ export class AgentEditorComponent {
|
|
|
428
433
|
this.svg.remove();
|
|
429
434
|
}
|
|
430
435
|
}
|
|
431
|
-
loadAgentData() {
|
|
432
|
-
|
|
433
|
-
|
|
434
|
-
|
|
435
|
-
|
|
436
|
-
|
|
437
|
-
|
|
438
|
-
|
|
439
|
-
|
|
440
|
-
|
|
441
|
-
|
|
442
|
-
|
|
443
|
-
|
|
444
|
-
|
|
445
|
-
|
|
446
|
-
|
|
447
|
-
|
|
448
|
-
|
|
449
|
-
|
|
450
|
-
|
|
451
|
-
|
|
452
|
-
|
|
453
|
-
|
|
454
|
-
}, 100);
|
|
455
|
-
}
|
|
456
|
-
}
|
|
457
|
-
catch (error) {
|
|
458
|
-
console.error('Error loading agent data:', error);
|
|
459
|
-
this.error = 'Failed to load agent data';
|
|
460
|
-
}
|
|
461
|
-
finally {
|
|
462
|
-
this.isLoading = false;
|
|
436
|
+
async loadAgentData() {
|
|
437
|
+
try {
|
|
438
|
+
this.isLoading = true;
|
|
439
|
+
this.error = null;
|
|
440
|
+
// Load all agents to build hierarchy
|
|
441
|
+
const rv = new RunView();
|
|
442
|
+
const result = await rv.RunView({
|
|
443
|
+
EntityName: 'AI Agents',
|
|
444
|
+
ExtraFilter: '',
|
|
445
|
+
OrderBy: 'Name',
|
|
446
|
+
MaxRows: 1000
|
|
447
|
+
});
|
|
448
|
+
this.allAgents = result.Results;
|
|
449
|
+
this.currentAgent = this.allAgents.find(a => a.ID === this.agentId) || null;
|
|
450
|
+
if (this.currentAgent) {
|
|
451
|
+
this.buildHierarchy();
|
|
452
|
+
this.loadAgentPrompts();
|
|
453
|
+
// Initialize chart after data is loaded
|
|
454
|
+
setTimeout(() => {
|
|
455
|
+
if (this.hierarchyChartRef) {
|
|
456
|
+
this.initializeChart();
|
|
457
|
+
}
|
|
458
|
+
}, 100);
|
|
463
459
|
}
|
|
464
|
-
}
|
|
460
|
+
}
|
|
461
|
+
catch (error) {
|
|
462
|
+
console.error('Error loading agent data:', error);
|
|
463
|
+
this.error = 'Failed to load agent data';
|
|
464
|
+
}
|
|
465
|
+
finally {
|
|
466
|
+
this.isLoading = false;
|
|
467
|
+
}
|
|
465
468
|
}
|
|
466
469
|
buildHierarchy() {
|
|
467
470
|
if (!this.currentAgent)
|
|
@@ -514,26 +517,23 @@ export class AgentEditorComponent {
|
|
|
514
517
|
}
|
|
515
518
|
return null;
|
|
516
519
|
}
|
|
517
|
-
loadAgentPrompts() {
|
|
518
|
-
|
|
519
|
-
|
|
520
|
-
|
|
521
|
-
|
|
522
|
-
|
|
523
|
-
|
|
524
|
-
|
|
525
|
-
|
|
526
|
-
|
|
527
|
-
|
|
528
|
-
|
|
529
|
-
|
|
530
|
-
|
|
531
|
-
}
|
|
532
|
-
});
|
|
520
|
+
async loadAgentPrompts() {
|
|
521
|
+
if (!this.currentAgent)
|
|
522
|
+
return;
|
|
523
|
+
try {
|
|
524
|
+
// This would load prompts associated with the agent
|
|
525
|
+
// For now, using mock data structure
|
|
526
|
+
this.agentPrompts = [
|
|
527
|
+
{ id: '1', name: 'System Prompt', content: 'Default system instructions...', type: 'system' },
|
|
528
|
+
{ id: '2', name: 'User Prompt', content: 'User interaction template...', type: 'user' }
|
|
529
|
+
];
|
|
530
|
+
}
|
|
531
|
+
catch (error) {
|
|
532
|
+
console.error('Error loading agent prompts:', error);
|
|
533
|
+
}
|
|
533
534
|
}
|
|
534
535
|
initializeChart() {
|
|
535
|
-
|
|
536
|
-
if (!((_a = this.hierarchyChartRef) === null || _a === void 0 ? void 0 : _a.nativeElement)) {
|
|
536
|
+
if (!this.hierarchyChartRef?.nativeElement) {
|
|
537
537
|
return;
|
|
538
538
|
}
|
|
539
539
|
const container = this.hierarchyChartRef.nativeElement;
|
|
@@ -616,14 +616,14 @@ export class AgentEditorComponent {
|
|
|
616
616
|
.attr('ry', 6)
|
|
617
617
|
.style('fill', (d) => this.getNodeColor(d))
|
|
618
618
|
.style('stroke', (d) => this.getNodeStrokeColor(d))
|
|
619
|
-
.style('stroke-width', (d) =>
|
|
619
|
+
.style('stroke-width', (d) => d.data.id === this.currentAgent?.ID ? '3px' : '2px')
|
|
620
620
|
.style('opacity', 0.9);
|
|
621
621
|
// Add node labels (agent names)
|
|
622
622
|
nodes.append('text')
|
|
623
623
|
.attr('dy', -2)
|
|
624
624
|
.attr('text-anchor', 'middle')
|
|
625
625
|
.style('font-size', '11px')
|
|
626
|
-
.style('font-weight', (d) =>
|
|
626
|
+
.style('font-weight', (d) => d.data.id === this.currentAgent?.ID ? 'bold' : '500')
|
|
627
627
|
.style('fill', '#333')
|
|
628
628
|
.style('pointer-events', 'none')
|
|
629
629
|
.text((d) => {
|
|
@@ -668,9 +668,8 @@ export class AgentEditorComponent {
|
|
|
668
668
|
};
|
|
669
669
|
}
|
|
670
670
|
getNodeColor(d) {
|
|
671
|
-
var _a;
|
|
672
671
|
const level = d.depth;
|
|
673
|
-
const isCurrentAgent = d.data.id ===
|
|
672
|
+
const isCurrentAgent = d.data.id === this.currentAgent?.ID;
|
|
674
673
|
// Level-based color scheme
|
|
675
674
|
const levelColors = [
|
|
676
675
|
'#1976d2', // Level 0 (root) - Blue
|
|
@@ -689,8 +688,7 @@ export class AgentEditorComponent {
|
|
|
689
688
|
return this.lightenColor(baseColor, 0.3);
|
|
690
689
|
}
|
|
691
690
|
getNodeStrokeColor(d) {
|
|
692
|
-
|
|
693
|
-
const isCurrentAgent = d.data.id === ((_a = this.currentAgent) === null || _a === void 0 ? void 0 : _a.ID);
|
|
691
|
+
const isCurrentAgent = d.data.id === this.currentAgent?.ID;
|
|
694
692
|
if (isCurrentAgent) {
|
|
695
693
|
return '#000';
|
|
696
694
|
}
|
|
@@ -708,8 +706,7 @@ export class AgentEditorComponent {
|
|
|
708
706
|
return `rgb(${newR}, ${newG}, ${newB})`;
|
|
709
707
|
}
|
|
710
708
|
onNodeClick(node) {
|
|
711
|
-
|
|
712
|
-
if (node.id !== ((_a = this.currentAgent) === null || _a === void 0 ? void 0 : _a.ID)) {
|
|
709
|
+
if (node.id !== this.currentAgent?.ID) {
|
|
713
710
|
this.openAgent.emit(node.id);
|
|
714
711
|
}
|
|
715
712
|
}
|
|
@@ -755,112 +752,117 @@ export class AgentEditorComponent {
|
|
|
755
752
|
this.newSubAgentName = '';
|
|
756
753
|
this.newSubAgentDescription = '';
|
|
757
754
|
}
|
|
758
|
-
createSubAgent() {
|
|
759
|
-
|
|
760
|
-
|
|
761
|
-
|
|
762
|
-
|
|
763
|
-
|
|
764
|
-
|
|
765
|
-
|
|
766
|
-
|
|
767
|
-
if (!md) {
|
|
768
|
-
throw new Error('Metadata provider not available');
|
|
769
|
-
}
|
|
770
|
-
// Create new AI Agent entity
|
|
771
|
-
const newAgent = yield md.GetEntityObject('AI Agents', md.CurrentUser);
|
|
772
|
-
// Set agent properties
|
|
773
|
-
newAgent.Name = this.newSubAgentName.trim();
|
|
774
|
-
newAgent.Description = this.newSubAgentDescription.trim() || '';
|
|
775
|
-
newAgent.ParentID = this.currentAgent.ID;
|
|
776
|
-
// Set default values based on parent agent
|
|
777
|
-
newAgent.ExecutionMode = this.currentAgent.ExecutionMode || 'Sequential';
|
|
778
|
-
newAgent.ExecutionOrder = 1; // Default to 1, could be made configurable
|
|
779
|
-
newAgent.ExposeAsAction = false; // Default to false for sub-agents
|
|
780
|
-
newAgent.EnableContextCompression = this.currentAgent.EnableContextCompression || false;
|
|
781
|
-
newAgent.ContextCompressionMessageThreshold = this.currentAgent.ContextCompressionMessageThreshold || 10;
|
|
782
|
-
newAgent.ContextCompressionMessageRetentionCount = this.currentAgent.ContextCompressionMessageRetentionCount || 5;
|
|
783
|
-
// Save the new agent
|
|
784
|
-
const result = yield newAgent.Save();
|
|
785
|
-
if (result) {
|
|
786
|
-
LogStatus('Sub-agent created successfully');
|
|
787
|
-
// Close the dialog
|
|
788
|
-
this.closeCreateSubAgent();
|
|
789
|
-
// Reload agent data to show the new hierarchy
|
|
790
|
-
yield this.loadAgentData();
|
|
791
|
-
// Navigate to the newly created agent
|
|
792
|
-
this.openAgent.emit(newAgent.ID);
|
|
793
|
-
}
|
|
794
|
-
else {
|
|
795
|
-
// Handle save failure
|
|
796
|
-
const errorMessage = ((_a = newAgent.LatestResult) === null || _a === void 0 ? void 0 : _a.Message) || 'Unknown error occurred while creating sub-agent';
|
|
797
|
-
this.error = `Failed to create sub-agent: ${errorMessage}`;
|
|
798
|
-
LogError('Sub-agent creation failed', undefined, errorMessage);
|
|
799
|
-
}
|
|
755
|
+
async createSubAgent() {
|
|
756
|
+
if (!this.currentAgent || !this.newSubAgentName.trim())
|
|
757
|
+
return;
|
|
758
|
+
try {
|
|
759
|
+
this.isLoading = true;
|
|
760
|
+
this.error = null;
|
|
761
|
+
const md = Metadata.Provider;
|
|
762
|
+
if (!md) {
|
|
763
|
+
throw new Error('Metadata provider not available');
|
|
800
764
|
}
|
|
801
|
-
|
|
802
|
-
|
|
803
|
-
|
|
804
|
-
|
|
765
|
+
// Create new AI Agent entity
|
|
766
|
+
const newAgent = await md.GetEntityObject('AI Agents', md.CurrentUser);
|
|
767
|
+
// Set agent properties
|
|
768
|
+
newAgent.Name = this.newSubAgentName.trim();
|
|
769
|
+
newAgent.Description = this.newSubAgentDescription.trim() || '';
|
|
770
|
+
newAgent.ParentID = this.currentAgent.ID;
|
|
771
|
+
// Set default values based on parent agent
|
|
772
|
+
newAgent.ExecutionMode = this.currentAgent.ExecutionMode || 'Sequential';
|
|
773
|
+
newAgent.ExecutionOrder = 1; // Default to 1, could be made configurable
|
|
774
|
+
newAgent.ExposeAsAction = false; // Default to false for sub-agents
|
|
775
|
+
newAgent.EnableContextCompression = this.currentAgent.EnableContextCompression || false;
|
|
776
|
+
newAgent.ContextCompressionMessageThreshold = this.currentAgent.ContextCompressionMessageThreshold || 10;
|
|
777
|
+
newAgent.ContextCompressionMessageRetentionCount = this.currentAgent.ContextCompressionMessageRetentionCount || 5;
|
|
778
|
+
// Save the new agent
|
|
779
|
+
const result = await newAgent.Save();
|
|
780
|
+
if (result) {
|
|
781
|
+
LogStatus('Sub-agent created successfully');
|
|
782
|
+
// Close the dialog
|
|
783
|
+
this.closeCreateSubAgent();
|
|
784
|
+
// Reload agent data to show the new hierarchy
|
|
785
|
+
await this.loadAgentData();
|
|
786
|
+
// Navigate to the newly created agent
|
|
787
|
+
this.openAgent.emit(newAgent.ID);
|
|
805
788
|
}
|
|
806
|
-
|
|
807
|
-
|
|
789
|
+
else {
|
|
790
|
+
// Handle save failure
|
|
791
|
+
const errorMessage = newAgent.LatestResult?.Message || 'Unknown error occurred while creating sub-agent';
|
|
792
|
+
this.error = `Failed to create sub-agent: ${errorMessage}`;
|
|
793
|
+
LogError('Sub-agent creation failed', undefined, errorMessage);
|
|
808
794
|
}
|
|
809
|
-
}
|
|
795
|
+
}
|
|
796
|
+
catch (error) {
|
|
797
|
+
const errorMessage = error instanceof Error ? error.message : 'An unexpected error occurred';
|
|
798
|
+
this.error = `Failed to create sub-agent: ${errorMessage}`;
|
|
799
|
+
LogError('Error creating sub-agent', undefined, error);
|
|
800
|
+
}
|
|
801
|
+
finally {
|
|
802
|
+
this.isLoading = false;
|
|
803
|
+
}
|
|
810
804
|
}
|
|
811
805
|
hasChildren() {
|
|
812
|
-
|
|
813
|
-
return ((_a = this.selectedNode) === null || _a === void 0 ? void 0 : _a.children) && this.selectedNode.children.length > 0 || false;
|
|
806
|
+
return this.selectedNode?.children && this.selectedNode.children.length > 0 || false;
|
|
814
807
|
}
|
|
815
808
|
hasParent() {
|
|
816
|
-
|
|
817
|
-
return ((_a = this.selectedNode) === null || _a === void 0 ? void 0 : _a.parent) !== undefined;
|
|
809
|
+
return this.selectedNode?.parent !== undefined;
|
|
818
810
|
}
|
|
819
811
|
getChildCount() {
|
|
820
|
-
|
|
821
|
-
return ((_b = (_a = this.selectedNode) === null || _a === void 0 ? void 0 : _a.children) === null || _b === void 0 ? void 0 : _b.length) || 0;
|
|
812
|
+
return this.selectedNode?.children?.length || 0;
|
|
822
813
|
}
|
|
814
|
+
openCurrentAgentRecord() {
|
|
815
|
+
if (this.currentAgent) {
|
|
816
|
+
this.openEntityRecord.emit({ entityName: 'AI Agents', recordId: this.currentAgent.ID });
|
|
817
|
+
}
|
|
818
|
+
}
|
|
819
|
+
static ɵfac = function AgentEditorComponent_Factory(t) { return new (t || AgentEditorComponent)(); };
|
|
820
|
+
static ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: AgentEditorComponent, selectors: [["mj-agent-editor"]], viewQuery: function AgentEditorComponent_Query(rf, ctx) { if (rf & 1) {
|
|
821
|
+
i0.ɵɵviewQuery(_c0, 5);
|
|
822
|
+
} if (rf & 2) {
|
|
823
|
+
let _t;
|
|
824
|
+
i0.ɵɵqueryRefresh(_t = i0.ɵɵloadQuery()) && (ctx.hierarchyChartRef = _t.first);
|
|
825
|
+
} }, inputs: { agentId: "agentId" }, outputs: { close: "close", openAgent: "openAgent", openEntityRecord: "openEntityRecord" }, decls: 14, vars: 9, consts: [["hierarchyChart", ""], ["mjFillContainer", "", 1, "agent-editor-container", 3, "rightMargin", "bottomMargin"], [1, "editor-header"], [1, "header-info"], [1, "header-actions"], ["type", "button", "title", "Back to Agent List", 1, "back-btn", 3, "click"], [1, "fa-solid", "fa-arrow-left"], ["type", "button", "title", "Open Agent Record", 1, "open-btn"], [1, "agent-breadcrumb"], [1, "tab-navigation"], [1, "loading-container"], [1, "error-container"], ["mjFillContainer", "", 1, "tab-content"], [1, "modal-overlay"], ["type", "button", "title", "Open Agent Record", 1, "open-btn", 3, "click"], [1, "fa-solid", "fa-external-link"], [1, "breadcrumb-item"], [1, "fa-solid", "fa-chevron-right"], ["type", "button", 1, "tab-btn", 3, "click"], [1, "fa-solid", "fa-sitemap"], [1, "fa-solid", "fa-comment-dots"], [1, "fa-solid", "fa-cog"], [1, "loading-content"], [1, "loading-spinner"], [1, "spinner-ring"], [1, "loading-text"], [1, "error-content"], [1, "fa-solid", "fa-exclamation-triangle"], [1, "retry-btn", 3, "click"], [1, "fa-solid", "fa-retry"], ["mjFillContainer", "", 1, "hierarchy-section"], ["mjFillContainer", "", 1, "prompts-section"], ["mjFillContainer", "", 1, "properties-section"], [1, "section-header"], [1, "hierarchy-controls"], [1, "zoom-controls"], ["type", "button", "title", "Zoom In", 1, "zoom-btn", 3, "click"], [1, "fa-solid", "fa-plus"], ["type", "button", "title", "Zoom Out", 1, "zoom-btn", 3, "click"], [1, "fa-solid", "fa-minus"], ["type", "button", "title", "Reset Zoom", 1, "zoom-btn", 3, "click"], [1, "fa-solid", "fa-expand"], [1, "hierarchy-legend"], [1, "legend-item"], [1, "legend-rect", "level-0"], [1, "legend-rect", "level-1"], [1, "legend-rect", "level-2"], ["mjFillContainer", "", 1, "hierarchy-chart"], [1, "chart-help"], [1, "empty-hierarchy"], [1, "fa-solid", "fa-hand-pointer"], [1, "create-subagent-btn", 3, "click"], ["title", "Add New Prompt", 1, "add-prompt-btn"], [1, "prompts-list"], [1, "empty-prompts"], [1, "add-first-prompt-btn"], [1, "prompt-card"], [1, "prompt-header"], [1, "prompt-info"], [1, "prompt-type"], [1, "prompt-actions"], ["title", "Edit Prompt", 1, "action-btn"], [1, "fa-solid", "fa-edit"], ["title", "Delete Prompt", 1, "action-btn", "danger"], [1, "fa-solid", "fa-trash"], [1, "prompt-content"], ["title", "Save Changes", 1, "save-btn"], [1, "fa-solid", "fa-save"], [1, "properties-form"], [1, "form-group"], ["type", "text", "placeholder", "Agent name", 1, "form-input", 3, "value"], ["placeholder", "Agent description", "rows", "3", 1, "form-textarea", 3, "value"], [1, "form-row"], [1, "form-select", 3, "value"], ["value", "Sequential"], ["value", "Parallel"], ["type", "number", "min", "0", 1, "form-input", 3, "value"], [1, "form-group", "checkbox-group"], [1, "checkbox-label"], ["type", "checkbox", 3, "checked"], [1, "checkmark"], ["type", "number", "min", "1", "placeholder", "Number of messages", 1, "form-input", 3, "value"], ["type", "number", "min", "0", "placeholder", "Messages to keep", 1, "form-input", 3, "value"], [1, "modal-overlay", 3, "click"], [1, "create-subagent-modal", 3, "click"], [1, "modal-header"], [1, "close-btn", 3, "click"], [1, "fa-solid", "fa-times"], [1, "modal-body"], [1, "error-message"], ["type", "text", "placeholder", "Enter agent name...", "maxlength", "255", 1, "form-input", 3, "ngModelChange", "ngModel", "disabled"], ["placeholder", "Describe what this sub-agent will do...", "rows", "4", 1, "form-textarea", 3, "ngModelChange", "ngModel", "disabled"], [1, "parent-info"], [1, "modal-footer"], [1, "cancel-btn", 3, "click", "disabled"], [1, "create-btn", 3, "click", "disabled"], [1, "loading-spinner-sm"]], template: function AgentEditorComponent_Template(rf, ctx) { if (rf & 1) {
|
|
826
|
+
i0.ɵɵelementStart(0, "div", 1)(1, "div", 2)(2, "div", 3)(3, "div", 4)(4, "button", 5);
|
|
827
|
+
i0.ɵɵlistener("click", function AgentEditorComponent_Template_button_click_4_listener() { return ctx.closeEditor(); });
|
|
828
|
+
i0.ɵɵelement(5, "i", 6);
|
|
829
|
+
i0.ɵɵtext(6, " Back to Agents ");
|
|
830
|
+
i0.ɵɵelementEnd();
|
|
831
|
+
i0.ɵɵtemplate(7, AgentEditorComponent_Conditional_7_Template, 3, 0, "button", 7);
|
|
832
|
+
i0.ɵɵelementEnd();
|
|
833
|
+
i0.ɵɵtemplate(8, AgentEditorComponent_Conditional_8_Template, 4, 2, "div", 8);
|
|
834
|
+
i0.ɵɵelementEnd()();
|
|
835
|
+
i0.ɵɵtemplate(9, AgentEditorComponent_Conditional_9_Template, 10, 6, "div", 9)(10, AgentEditorComponent_Conditional_10_Template, 8, 0, "div", 10)(11, AgentEditorComponent_Conditional_11_Template, 10, 1, "div", 11)(12, AgentEditorComponent_Conditional_12_Template, 4, 3, "div", 12)(13, AgentEditorComponent_Conditional_13_Template, 28, 9, "div", 13);
|
|
836
|
+
i0.ɵɵelementEnd();
|
|
837
|
+
} if (rf & 2) {
|
|
838
|
+
i0.ɵɵproperty("rightMargin", 8)("bottomMargin", 8);
|
|
839
|
+
i0.ɵɵadvance(7);
|
|
840
|
+
i0.ɵɵconditional(ctx.currentAgent ? 7 : -1);
|
|
841
|
+
i0.ɵɵadvance();
|
|
842
|
+
i0.ɵɵconditional(ctx.currentAgent ? 8 : -1);
|
|
843
|
+
i0.ɵɵadvance();
|
|
844
|
+
i0.ɵɵconditional(!ctx.isLoading && !ctx.error && ctx.currentAgent ? 9 : -1);
|
|
845
|
+
i0.ɵɵadvance();
|
|
846
|
+
i0.ɵɵconditional(ctx.isLoading ? 10 : -1);
|
|
847
|
+
i0.ɵɵadvance();
|
|
848
|
+
i0.ɵɵconditional(ctx.error ? 11 : -1);
|
|
849
|
+
i0.ɵɵadvance();
|
|
850
|
+
i0.ɵɵconditional(!ctx.isLoading && !ctx.error && ctx.currentAgent ? 12 : -1);
|
|
851
|
+
i0.ɵɵadvance();
|
|
852
|
+
i0.ɵɵconditional(ctx.showCreateSubAgent ? 13 : -1);
|
|
853
|
+
} }, dependencies: [i1.NgSelectOption, i1.ɵNgSelectMultipleOption, i1.DefaultValueAccessor, i1.NgControlStatus, i1.MaxLengthValidator, i1.NgModel, i2.FillContainer], styles: ["@use \"../../../../../../../dist/packages/Angular/Explorer/explorer-core/src/generic/generic-browse-list.component\";\n\n.agent-editor-container[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n height: 100%;\n background: #f8f9fa;\n}\n\n.editor-header[_ngcontent-%COMP%] {\n background: white;\n border-bottom: 1px solid #e0e0e0;\n padding: 16px 20px;\n display: flex;\n justify-content: space-between;\n align-items: center;\n flex-shrink: 0;\n \n .header-info {\n display: flex;\n align-items: center;\n gap: 20px;\n \n .header-actions {\n display: flex;\n align-items: center;\n gap: 12px;\n }\n \n .back-btn, .open-btn {\n display: flex;\n align-items: center;\n gap: 8px;\n padding: 8px 16px;\n border: 1px solid #e0e0e0;\n border-radius: 4px;\n text-decoration: none;\n font-size: 14px;\n cursor: pointer;\n transition: all 0.2s;\n \n &:hover {\n border-color: #ccc;\n }\n }\n \n .back-btn {\n background: #f8f9fa;\n color: #666;\n \n &:hover {\n background: #e9ecef;\n color: #333;\n }\n }\n \n .open-btn {\n background: #007bff;\n color: white;\n \n &:hover {\n background: #0056b3;\n }\n }\n \n .agent-breadcrumb {\n h2 {\n margin: 0;\n font-size: 24px;\n font-weight: 600;\n color: #333;\n }\n \n .breadcrumb-item {\n font-size: 14px;\n color: #666;\n display: flex;\n align-items: center;\n gap: 8px;\n margin-top: 4px;\n }\n }\n }\n \n .header-controls {\n display: flex;\n gap: 8px;\n \n .control-btn {\n display: flex;\n align-items: center;\n gap: 6px;\n padding: 8px 12px;\n background: white;\n border: 1px solid #e0e0e0;\n border-radius: 4px;\n color: #666;\n font-size: 12px;\n cursor: pointer;\n transition: all 0.2s;\n \n &:hover {\n background: #f8f9fa;\n border-color: #2196f3;\n color: #2196f3;\n }\n \n &.active {\n background: #2196f3;\n border-color: #2196f3;\n color: white;\n }\n }\n }\n}\n\n//[_ngcontent-%COMP%] Tab[_ngcontent-%COMP%] Navigation\n.tab-navigation[_ngcontent-%COMP%] {\n background: white;\n border-bottom: 1px solid #e0e0e0;\n padding: 0 20px;\n display: flex;\n gap: 2px;\n flex-shrink: 0;\n \n .tab-btn {\n display: flex;\n align-items: center;\n gap: 8px;\n padding: 12px 16px;\n background: none;\n border: none;\n border-bottom: 3px solid transparent;\n color: #666;\n font-size: 14px;\n font-weight: 500;\n cursor: pointer;\n transition: all 0.2s;\n \n &:hover {\n color: #2196f3;\n background: #f8f9fa;\n }\n \n &.active {\n color: #2196f3;\n border-bottom-color: #2196f3;\n background: #f8f9fa;\n }\n \n i {\n font-size: 16px;\n }\n }\n}\n\n.tab-content[_ngcontent-%COMP%] {\n flex: 1;\n overflow: hidden;\n}\n\n.loading-container[_ngcontent-%COMP%], .error-container[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n justify-content: center;\n flex: 1;\n \n .loading-content, .error-content {\n text-align: center;\n \n .loading-spinner {\n position: relative;\n width: 60px;\n height: 60px;\n margin: 0 auto 20px;\n }\n \n .spinner-ring {\n position: absolute;\n width: 100%;\n height: 100%;\n border: 3px solid transparent;\n border-radius: 50%;\n animation: _ngcontent-%COMP%_spin 1.5s linear infinite;\n \n &:nth-child(1) {\n border-top-color: #2196f3;\n animation-delay: 0s;\n }\n \n &:nth-child(2) {\n border-top-color: #9c27b0;\n animation-delay: 0.3s;\n transform: scale(0.8);\n }\n \n &:nth-child(3) {\n border-top-color: #ff6b35;\n animation-delay: 0.6s;\n transform: scale(0.6);\n }\n }\n \n .loading-text {\n font-size: 16px;\n color: #666;\n }\n \n i {\n font-size: 48px;\n color: #dc3545;\n margin-bottom: 16px;\n }\n \n h3 {\n margin: 0 0 8px 0;\n color: #333;\n }\n \n p {\n margin: 0 0 16px 0;\n color: #666;\n }\n \n .retry-btn {\n display: flex;\n align-items: center;\n gap: 8px;\n padding: 8px 16px;\n background: #dc3545;\n border: none;\n border-radius: 4px;\n color: white;\n cursor: pointer;\n \n &:hover {\n background: #c82333;\n }\n }\n }\n}\n\n.editor-content[_ngcontent-%COMP%] {\n flex: 1;\n overflow: hidden;\n}\n\n.main-splitter[_ngcontent-%COMP%], .bottom-splitter[_ngcontent-%COMP%] {\n height: 100%;\n \n .k-pane {\n overflow: hidden;\n }\n}\n\n//[_ngcontent-%COMP%] Hierarchy[_ngcontent-%COMP%] Section\n.hierarchy-section[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n height: 100%;\n background: white;\n \n .section-header {\n padding: 16px 20px;\n border-bottom: 1px solid #f0f0f0;\n display: flex;\n justify-content: space-between;\n align-items: center;\n flex-shrink: 0;\n \n h3 {\n margin: 0;\n font-size: 16px;\n font-weight: 600;\n color: #333;\n display: flex;\n align-items: center;\n gap: 8px;\n }\n \n .hierarchy-controls {\n display: flex;\n align-items: center;\n gap: 20px;\n \n .zoom-controls {\n display: flex;\n gap: 4px;\n \n .zoom-btn {\n display: flex;\n align-items: center;\n justify-content: center;\n width: 32px;\n height: 32px;\n background: white;\n border: 1px solid #e0e0e0;\n border-radius: 4px;\n color: #666;\n cursor: pointer;\n transition: all 0.2s;\n \n &:hover {\n background: #f8f9fa;\n border-color: #2196f3;\n color: #2196f3;\n }\n \n i {\n font-size: 12px;\n }\n }\n }\n \n .hierarchy-legend {\n display: flex;\n gap: 16px;\n \n .legend-item {\n display: flex;\n align-items: center;\n gap: 6px;\n font-size: 12px;\n color: #666;\n \n .legend-rect {\n width: 20px;\n height: 12px;\n border-radius: 2px;\n border: 1px solid;\n \n &.level-0 {\n background: #1976d2;\n border-color: #1565c0;\n }\n \n &.level-1 {\n background: #388e3c;\n border-color: #2e7d32;\n }\n \n &.level-2 {\n background: #f57c00;\n border-color: #ef6c00;\n }\n }\n }\n }\n }\n }\n \n .hierarchy-chart {\n flex: 1;\n min-height: 300px;\n overflow: hidden;\n position: relative;\n \n .chart-help {\n position: absolute;\n bottom: 10px;\n left: 10px;\n background: rgba(255, 255, 255, 0.9);\n padding: 6px 10px;\n border-radius: 4px;\n border: 1px solid #e0e0e0;\n z-index: 10;\n \n small {\n font-size: 11px;\n color: #666;\n display: flex;\n align-items: center;\n gap: 6px;\n \n i {\n color: #2196f3;\n }\n }\n }\n \n .empty-hierarchy {\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: center;\n height: 100%;\n padding: 40px 20px;\n text-align: center;\n color: #666;\n \n i {\n font-size: 64px;\n margin-bottom: 20px;\n opacity: 0.5;\n }\n \n h4 {\n margin: 0 0 12px 0;\n font-size: 18px;\n color: #333;\n }\n \n p {\n margin: 0 0 24px 0;\n font-size: 14px;\n color: #666;\n line-height: 1.5;\n }\n \n .create-subagent-btn {\n display: flex;\n align-items: center;\n gap: 8px;\n padding: 12px 20px;\n background: #2196f3;\n border: none;\n border-radius: 6px;\n color: white;\n font-size: 14px;\n font-weight: 500;\n cursor: pointer;\n transition: background 0.2s;\n \n &:hover {\n background: #1976d2;\n }\n }\n }\n }\n \n}\n\n//[_ngcontent-%COMP%] Prompts[_ngcontent-%COMP%] Section\n.prompts-section[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n height: 100%;\n background: white;\n border-right: 1px solid #f0f0f0;\n \n .section-header {\n padding: 16px 20px;\n border-bottom: 1px solid #f0f0f0;\n display: flex;\n justify-content: space-between;\n align-items: center;\n flex-shrink: 0;\n \n h3 {\n margin: 0;\n font-size: 16px;\n font-weight: 600;\n color: #333;\n display: flex;\n align-items: center;\n gap: 8px;\n }\n \n .add-prompt-btn {\n display: flex;\n align-items: center;\n gap: 6px;\n padding: 6px 12px;\n background: #2196f3;\n border: none;\n border-radius: 4px;\n color: white;\n font-size: 12px;\n cursor: pointer;\n \n &:hover {\n background: #1976d2;\n }\n }\n }\n \n .prompts-list {\n flex: 1;\n overflow-y: auto;\n padding: 16px 20px;\n \n .empty-prompts {\n text-align: center;\n padding: 40px 20px;\n color: #666;\n \n i {\n font-size: 48px;\n margin-bottom: 16px;\n }\n \n p {\n margin: 0 0 20px 0;\n font-size: 14px;\n }\n \n .add-first-prompt-btn {\n display: inline-flex;\n align-items: center;\n gap: 8px;\n padding: 8px 16px;\n background: #2196f3;\n border: none;\n border-radius: 4px;\n color: white;\n cursor: pointer;\n \n &:hover {\n background: #1976d2;\n }\n }\n }\n \n .prompt-card {\n background: #f8f9fa;\n border: 1px solid #e0e0e0;\n border-radius: 4px;\n margin-bottom: 12px;\n \n .prompt-header {\n padding: 12px 16px;\n border-bottom: 1px solid #e9ecef;\n display: flex;\n justify-content: space-between;\n align-items: center;\n \n .prompt-info {\n h4 {\n margin: 0 0 4px 0;\n font-size: 14px;\n font-weight: 600;\n color: #333;\n }\n \n .prompt-type {\n font-size: 11px;\n padding: 2px 6px;\n background: #007bff;\n color: white;\n border-radius: 3px;\n text-transform: uppercase;\n }\n }\n \n .prompt-actions {\n display: flex;\n gap: 4px;\n \n .action-btn {\n padding: 4px 8px;\n background: none;\n border: 1px solid #e0e0e0;\n border-radius: 3px;\n color: #666;\n cursor: pointer;\n font-size: 12px;\n \n &:hover {\n background: #f0f0f0;\n border-color: #ccc;\n }\n \n &.danger:hover {\n background: #dc3545;\n border-color: #dc3545;\n color: white;\n }\n }\n }\n }\n \n .prompt-content {\n padding: 12px 16px;\n \n p {\n margin: 0;\n font-size: 12px;\n color: #666;\n line-height: 1.4;\n }\n }\n }\n }\n}\n\n//[_ngcontent-%COMP%] Properties[_ngcontent-%COMP%] Section\n.properties-section[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n height: 100%;\n background: white;\n \n .section-header {\n padding: 16px 20px;\n border-bottom: 1px solid #f0f0f0;\n display: flex;\n justify-content: space-between;\n align-items: center;\n flex-shrink: 0;\n \n h3 {\n margin: 0;\n font-size: 16px;\n font-weight: 600;\n color: #333;\n display: flex;\n align-items: center;\n gap: 8px;\n }\n \n .save-btn {\n display: flex;\n align-items: center;\n gap: 6px;\n padding: 6px 12px;\n background: #28a745;\n border: none;\n border-radius: 4px;\n color: white;\n font-size: 12px;\n cursor: pointer;\n \n &:hover {\n background: #218838;\n }\n }\n }\n \n .properties-form {\n flex: 1;\n overflow-y: auto;\n padding: 20px;\n \n .form-group {\n margin-bottom: 16px;\n \n label {\n display: block;\n font-size: 12px;\n font-weight: 600;\n color: #333;\n margin-bottom: 4px;\n }\n \n .form-input, .form-select, .form-textarea {\n width: 100%;\n padding: 8px 12px;\n border: 1px solid #ddd;\n border-radius: 4px;\n font-size: 13px;\n background: white;\n box-sizing: border-box;\n \n &:focus {\n outline: none;\n border-color: #2196f3;\n }\n }\n \n .form-textarea {\n resize: vertical;\n min-height: 60px;\n }\n \n &.checkbox-group {\n .checkbox-label {\n display: flex;\n align-items: center;\n gap: 8px;\n cursor: pointer;\n font-size: 13px;\n font-weight: 500;\n \n input[type=\"checkbox\"] {\n width: auto;\n margin: 0;\n }\n }\n \n small {\n display: block;\n font-size: 11px;\n color: #666;\n margin-top: 4px;\n margin-left: 24px;\n }\n }\n }\n \n .form-row {\n display: grid;\n grid-template-columns: 1fr 1fr;\n gap: 16px;\n }\n }\n}\n\n@keyframes _ngcontent-%COMP%_spin {\n 0% { transform: rotate(0deg); }\n 100% { transform: rotate(360deg); }\n}\n\n//[_ngcontent-%COMP%] Sub-Agent[_ngcontent-%COMP%] Creation[_ngcontent-%COMP%] Modal\n.modal-overlay[_ngcontent-%COMP%] {\n position: fixed;\n top: 0;\n left: 0;\n right: 0;\n bottom: 0;\n width: 100vw;\n height: 100vh;\n background: rgba(0, 0, 0, 0.5);\n display: flex;\n align-items: center;\n justify-content: center;\n z-index: 9999;\n padding: 20px;\n box-sizing: border-box;\n}\n\n.create-subagent-modal[_ngcontent-%COMP%] {\n background: white;\n border-radius: 8px;\n width: 100%;\n max-width: 500px;\n max-height: calc(100vh - 40px);\n min-height: 300px;\n display: flex;\n flex-direction: column;\n box-shadow: 0 10px 30px rgba(0, 0, 0, 0.3);\n position: relative;\n \n .modal-header {\n padding: 20px 24px;\n border-bottom: 1px solid #e9ecef;\n display: flex;\n justify-content: space-between;\n align-items: center;\n \n h3 {\n margin: 0;\n font-size: 18px;\n font-weight: 600;\n color: #333;\n display: flex;\n align-items: center;\n gap: 10px;\n }\n \n .close-btn {\n background: none;\n border: none;\n padding: 8px;\n cursor: pointer;\n color: #666;\n border-radius: 4px;\n \n &:hover {\n background: #f8f9fa;\n color: #333;\n }\n }\n }\n \n .modal-body {\n padding: 24px;\n flex: 1;\n overflow-y: auto;\n \n .error-message {\n background: #f8d7da;\n border: 1px solid #f5c6cb;\n border-radius: 6px;\n padding: 12px;\n margin-bottom: 20px;\n color: #721c24;\n font-size: 14px;\n display: flex;\n align-items: center;\n gap: 8px;\n \n i {\n color: #dc3545;\n }\n }\n \n .form-group {\n margin-bottom: 20px;\n \n label {\n display: block;\n font-size: 14px;\n font-weight: 600;\n color: #333;\n margin-bottom: 8px;\n }\n \n .form-input, .form-textarea {\n width: 100%;\n padding: 12px;\n border: 1px solid #ddd;\n border-radius: 6px;\n font-size: 14px;\n background: white;\n box-sizing: border-box;\n transition: border-color 0.2s;\n \n &:focus {\n outline: none;\n border-color: #2196f3;\n }\n \n &::placeholder {\n color: #999;\n }\n }\n \n .form-textarea {\n resize: vertical;\n min-height: 80px;\n font-family: inherit;\n }\n }\n \n .parent-info {\n background: #f8f9fa;\n border: 1px solid #e9ecef;\n border-radius: 6px;\n padding: 12px;\n font-size: 14px;\n color: #666;\n \n strong {\n color: #333;\n }\n }\n }\n \n .modal-footer {\n padding: 20px 24px;\n border-top: 1px solid #e9ecef;\n display: flex;\n justify-content: flex-end;\n gap: 12px;\n \n .cancel-btn, .create-btn {\n padding: 10px 20px;\n border: 1px solid;\n border-radius: 6px;\n font-size: 14px;\n font-weight: 500;\n cursor: pointer;\n transition: all 0.2s;\n \n &:disabled {\n opacity: 0.5;\n cursor: not-allowed;\n }\n }\n \n .cancel-btn {\n background: white;\n border-color: #ddd;\n color: #666;\n \n &:hover:not(:disabled) {\n background: #f8f9fa;\n border-color: #ccc;\n }\n }\n \n .create-btn {\n background: #2196f3;\n border-color: #2196f3;\n color: white;\n display: flex;\n align-items: center;\n gap: 8px;\n \n &:hover:not(:disabled) {\n background: #1976d2;\n border-color: #1976d2;\n }\n \n .loading-spinner-sm {\n width: 14px;\n height: 14px;\n border: 2px solid transparent;\n border-top-color: currentColor;\n border-radius: 50%;\n animation: _ngcontent-%COMP%_spin 1s linear infinite;\n }\n }\n }\n}"] });
|
|
823
854
|
}
|
|
824
|
-
AgentEditorComponent.ɵfac = function AgentEditorComponent_Factory(t) { return new (t || AgentEditorComponent)(); };
|
|
825
|
-
AgentEditorComponent.ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: AgentEditorComponent, selectors: [["mj-agent-editor"]], viewQuery: function AgentEditorComponent_Query(rf, ctx) { if (rf & 1) {
|
|
826
|
-
i0.ɵɵviewQuery(_c0, 5);
|
|
827
|
-
} if (rf & 2) {
|
|
828
|
-
let _t;
|
|
829
|
-
i0.ɵɵqueryRefresh(_t = i0.ɵɵloadQuery()) && (ctx.hierarchyChartRef = _t.first);
|
|
830
|
-
} }, inputs: { agentId: "agentId" }, outputs: { close: "close", openAgent: "openAgent" }, decls: 12, vars: 8, consts: [["hierarchyChart", ""], ["mjFillContainer", "", 1, "agent-editor-container", 3, "rightMargin", "bottomMargin"], [1, "editor-header"], [1, "header-info"], ["type", "button", "title", "Back to Agent List", 1, "back-btn", 3, "click"], [1, "fa-solid", "fa-arrow-left"], [1, "agent-breadcrumb"], [1, "tab-navigation"], [1, "loading-container"], [1, "error-container"], ["mjFillContainer", "", 1, "tab-content"], [1, "modal-overlay"], [1, "breadcrumb-item"], [1, "fa-solid", "fa-chevron-right"], ["type", "button", 1, "tab-btn", 3, "click"], [1, "fa-solid", "fa-sitemap"], [1, "fa-solid", "fa-comment-dots"], [1, "fa-solid", "fa-cog"], [1, "loading-content"], [1, "loading-spinner"], [1, "spinner-ring"], [1, "loading-text"], [1, "error-content"], [1, "fa-solid", "fa-exclamation-triangle"], [1, "retry-btn", 3, "click"], [1, "fa-solid", "fa-retry"], ["mjFillContainer", "", 1, "hierarchy-section"], ["mjFillContainer", "", 1, "prompts-section"], ["mjFillContainer", "", 1, "properties-section"], [1, "section-header"], [1, "hierarchy-controls"], [1, "zoom-controls"], ["type", "button", "title", "Zoom In", 1, "zoom-btn", 3, "click"], [1, "fa-solid", "fa-plus"], ["type", "button", "title", "Zoom Out", 1, "zoom-btn", 3, "click"], [1, "fa-solid", "fa-minus"], ["type", "button", "title", "Reset Zoom", 1, "zoom-btn", 3, "click"], [1, "fa-solid", "fa-expand"], [1, "hierarchy-legend"], [1, "legend-item"], [1, "legend-rect", "level-0"], [1, "legend-rect", "level-1"], [1, "legend-rect", "level-2"], ["mjFillContainer", "", 1, "hierarchy-chart"], [1, "chart-help"], [1, "empty-hierarchy"], [1, "fa-solid", "fa-hand-pointer"], [1, "create-subagent-btn", 3, "click"], ["title", "Add New Prompt", 1, "add-prompt-btn"], [1, "prompts-list"], [1, "empty-prompts"], [1, "add-first-prompt-btn"], [1, "prompt-card"], [1, "prompt-header"], [1, "prompt-info"], [1, "prompt-type"], [1, "prompt-actions"], ["title", "Edit Prompt", 1, "action-btn"], [1, "fa-solid", "fa-edit"], ["title", "Delete Prompt", 1, "action-btn", "danger"], [1, "fa-solid", "fa-trash"], [1, "prompt-content"], ["title", "Save Changes", 1, "save-btn"], [1, "fa-solid", "fa-save"], [1, "properties-form"], [1, "form-group"], ["type", "text", "placeholder", "Agent name", 1, "form-input", 3, "value"], ["placeholder", "Agent description", "rows", "3", 1, "form-textarea", 3, "value"], [1, "form-row"], [1, "form-select", 3, "value"], ["value", "Sequential"], ["value", "Parallel"], ["type", "number", "min", "0", 1, "form-input", 3, "value"], [1, "form-group", "checkbox-group"], [1, "checkbox-label"], ["type", "checkbox", 3, "checked"], [1, "checkmark"], ["type", "number", "min", "1", "placeholder", "Number of messages", 1, "form-input", 3, "value"], ["type", "number", "min", "0", "placeholder", "Messages to keep", 1, "form-input", 3, "value"], [1, "modal-overlay", 3, "click"], [1, "create-subagent-modal", 3, "click"], [1, "modal-header"], [1, "close-btn", 3, "click"], [1, "fa-solid", "fa-times"], [1, "modal-body"], [1, "error-message"], ["type", "text", "placeholder", "Enter agent name...", "maxlength", "255", 1, "form-input", 3, "ngModelChange", "ngModel", "disabled"], ["placeholder", "Describe what this sub-agent will do...", "rows", "4", 1, "form-textarea", 3, "ngModelChange", "ngModel", "disabled"], [1, "parent-info"], [1, "modal-footer"], [1, "cancel-btn", 3, "click", "disabled"], [1, "create-btn", 3, "click", "disabled"], [1, "loading-spinner-sm"]], template: function AgentEditorComponent_Template(rf, ctx) { if (rf & 1) {
|
|
831
|
-
i0.ɵɵelementStart(0, "div", 1)(1, "div", 2)(2, "div", 3)(3, "button", 4);
|
|
832
|
-
i0.ɵɵlistener("click", function AgentEditorComponent_Template_button_click_3_listener() { return ctx.closeEditor(); });
|
|
833
|
-
i0.ɵɵelement(4, "i", 5);
|
|
834
|
-
i0.ɵɵtext(5, " Back to Agents ");
|
|
835
|
-
i0.ɵɵelementEnd();
|
|
836
|
-
i0.ɵɵtemplate(6, AgentEditorComponent_Conditional_6_Template, 4, 2, "div", 6);
|
|
837
|
-
i0.ɵɵelementEnd()();
|
|
838
|
-
i0.ɵɵtemplate(7, AgentEditorComponent_Conditional_7_Template, 10, 6, "div", 7)(8, AgentEditorComponent_Conditional_8_Template, 8, 0, "div", 8)(9, AgentEditorComponent_Conditional_9_Template, 10, 1, "div", 9)(10, AgentEditorComponent_Conditional_10_Template, 4, 3, "div", 10)(11, AgentEditorComponent_Conditional_11_Template, 28, 9, "div", 11);
|
|
839
|
-
i0.ɵɵelementEnd();
|
|
840
|
-
} if (rf & 2) {
|
|
841
|
-
i0.ɵɵproperty("rightMargin", 8)("bottomMargin", 8);
|
|
842
|
-
i0.ɵɵadvance(6);
|
|
843
|
-
i0.ɵɵconditional(ctx.currentAgent ? 6 : -1);
|
|
844
|
-
i0.ɵɵadvance();
|
|
845
|
-
i0.ɵɵconditional(!ctx.isLoading && !ctx.error && ctx.currentAgent ? 7 : -1);
|
|
846
|
-
i0.ɵɵadvance();
|
|
847
|
-
i0.ɵɵconditional(ctx.isLoading ? 8 : -1);
|
|
848
|
-
i0.ɵɵadvance();
|
|
849
|
-
i0.ɵɵconditional(ctx.error ? 9 : -1);
|
|
850
|
-
i0.ɵɵadvance();
|
|
851
|
-
i0.ɵɵconditional(!ctx.isLoading && !ctx.error && ctx.currentAgent ? 10 : -1);
|
|
852
|
-
i0.ɵɵadvance();
|
|
853
|
-
i0.ɵɵconditional(ctx.showCreateSubAgent ? 11 : -1);
|
|
854
|
-
} }, dependencies: [i1.NgSelectOption, i1.ɵNgSelectMultipleOption, i1.DefaultValueAccessor, i1.NgControlStatus, i1.MaxLengthValidator, i1.NgModel, i2.FillContainer], styles: ["@use \"../../../../../../../dist/packages/Angular/Explorer/explorer-core/src/generic/generic-browse-list.component\";\n\n.agent-editor-container[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n height: 100%;\n background: #f8f9fa;\n}\n\n.editor-header[_ngcontent-%COMP%] {\n background: white;\n border-bottom: 1px solid #e0e0e0;\n padding: 16px 20px;\n display: flex;\n justify-content: space-between;\n align-items: center;\n flex-shrink: 0;\n \n .header-info {\n display: flex;\n align-items: center;\n gap: 20px;\n \n .back-btn {\n display: flex;\n align-items: center;\n gap: 8px;\n padding: 8px 16px;\n background: #f8f9fa;\n border: 1px solid #e0e0e0;\n border-radius: 4px;\n color: #666;\n text-decoration: none;\n font-size: 14px;\n cursor: pointer;\n transition: all 0.2s;\n \n &:hover {\n background: #e9ecef;\n border-color: #ccc;\n color: #333;\n }\n }\n \n .agent-breadcrumb {\n h2 {\n margin: 0;\n font-size: 24px;\n font-weight: 600;\n color: #333;\n }\n \n .breadcrumb-item {\n font-size: 14px;\n color: #666;\n display: flex;\n align-items: center;\n gap: 8px;\n margin-top: 4px;\n }\n }\n }\n \n .header-controls {\n display: flex;\n gap: 8px;\n \n .control-btn {\n display: flex;\n align-items: center;\n gap: 6px;\n padding: 8px 12px;\n background: white;\n border: 1px solid #e0e0e0;\n border-radius: 4px;\n color: #666;\n font-size: 12px;\n cursor: pointer;\n transition: all 0.2s;\n \n &:hover {\n background: #f8f9fa;\n border-color: #2196f3;\n color: #2196f3;\n }\n \n &.active {\n background: #2196f3;\n border-color: #2196f3;\n color: white;\n }\n }\n }\n}\n\n//[_ngcontent-%COMP%] Tab[_ngcontent-%COMP%] Navigation\n.tab-navigation[_ngcontent-%COMP%] {\n background: white;\n border-bottom: 1px solid #e0e0e0;\n padding: 0 20px;\n display: flex;\n gap: 2px;\n flex-shrink: 0;\n \n .tab-btn {\n display: flex;\n align-items: center;\n gap: 8px;\n padding: 12px 16px;\n background: none;\n border: none;\n border-bottom: 3px solid transparent;\n color: #666;\n font-size: 14px;\n font-weight: 500;\n cursor: pointer;\n transition: all 0.2s;\n \n &:hover {\n color: #2196f3;\n background: #f8f9fa;\n }\n \n &.active {\n color: #2196f3;\n border-bottom-color: #2196f3;\n background: #f8f9fa;\n }\n \n i {\n font-size: 16px;\n }\n }\n}\n\n.tab-content[_ngcontent-%COMP%] {\n flex: 1;\n overflow: hidden;\n}\n\n.loading-container[_ngcontent-%COMP%], .error-container[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n justify-content: center;\n flex: 1;\n \n .loading-content, .error-content {\n text-align: center;\n \n .loading-spinner {\n position: relative;\n width: 60px;\n height: 60px;\n margin: 0 auto 20px;\n }\n \n .spinner-ring {\n position: absolute;\n width: 100%;\n height: 100%;\n border: 3px solid transparent;\n border-radius: 50%;\n animation: _ngcontent-%COMP%_spin 1.5s linear infinite;\n \n &:nth-child(1) {\n border-top-color: #2196f3;\n animation-delay: 0s;\n }\n \n &:nth-child(2) {\n border-top-color: #9c27b0;\n animation-delay: 0.3s;\n transform: scale(0.8);\n }\n \n &:nth-child(3) {\n border-top-color: #ff6b35;\n animation-delay: 0.6s;\n transform: scale(0.6);\n }\n }\n \n .loading-text {\n font-size: 16px;\n color: #666;\n }\n \n i {\n font-size: 48px;\n color: #dc3545;\n margin-bottom: 16px;\n }\n \n h3 {\n margin: 0 0 8px 0;\n color: #333;\n }\n \n p {\n margin: 0 0 16px 0;\n color: #666;\n }\n \n .retry-btn {\n display: flex;\n align-items: center;\n gap: 8px;\n padding: 8px 16px;\n background: #dc3545;\n border: none;\n border-radius: 4px;\n color: white;\n cursor: pointer;\n \n &:hover {\n background: #c82333;\n }\n }\n }\n}\n\n.editor-content[_ngcontent-%COMP%] {\n flex: 1;\n overflow: hidden;\n}\n\n.main-splitter[_ngcontent-%COMP%], .bottom-splitter[_ngcontent-%COMP%] {\n height: 100%;\n \n .k-pane {\n overflow: hidden;\n }\n}\n\n//[_ngcontent-%COMP%] Hierarchy[_ngcontent-%COMP%] Section\n.hierarchy-section[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n height: 100%;\n background: white;\n \n .section-header {\n padding: 16px 20px;\n border-bottom: 1px solid #f0f0f0;\n display: flex;\n justify-content: space-between;\n align-items: center;\n flex-shrink: 0;\n \n h3 {\n margin: 0;\n font-size: 16px;\n font-weight: 600;\n color: #333;\n display: flex;\n align-items: center;\n gap: 8px;\n }\n \n .hierarchy-controls {\n display: flex;\n align-items: center;\n gap: 20px;\n \n .zoom-controls {\n display: flex;\n gap: 4px;\n \n .zoom-btn {\n display: flex;\n align-items: center;\n justify-content: center;\n width: 32px;\n height: 32px;\n background: white;\n border: 1px solid #e0e0e0;\n border-radius: 4px;\n color: #666;\n cursor: pointer;\n transition: all 0.2s;\n \n &:hover {\n background: #f8f9fa;\n border-color: #2196f3;\n color: #2196f3;\n }\n \n i {\n font-size: 12px;\n }\n }\n }\n \n .hierarchy-legend {\n display: flex;\n gap: 16px;\n \n .legend-item {\n display: flex;\n align-items: center;\n gap: 6px;\n font-size: 12px;\n color: #666;\n \n .legend-rect {\n width: 20px;\n height: 12px;\n border-radius: 2px;\n border: 1px solid;\n \n &.level-0 {\n background: #1976d2;\n border-color: #1565c0;\n }\n \n &.level-1 {\n background: #388e3c;\n border-color: #2e7d32;\n }\n \n &.level-2 {\n background: #f57c00;\n border-color: #ef6c00;\n }\n }\n }\n }\n }\n }\n \n .hierarchy-chart {\n flex: 1;\n min-height: 300px;\n overflow: hidden;\n position: relative;\n \n .chart-help {\n position: absolute;\n bottom: 10px;\n left: 10px;\n background: rgba(255, 255, 255, 0.9);\n padding: 6px 10px;\n border-radius: 4px;\n border: 1px solid #e0e0e0;\n z-index: 10;\n \n small {\n font-size: 11px;\n color: #666;\n display: flex;\n align-items: center;\n gap: 6px;\n \n i {\n color: #2196f3;\n }\n }\n }\n \n .empty-hierarchy {\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: center;\n height: 100%;\n padding: 40px 20px;\n text-align: center;\n color: #666;\n \n i {\n font-size: 64px;\n margin-bottom: 20px;\n opacity: 0.5;\n }\n \n h4 {\n margin: 0 0 12px 0;\n font-size: 18px;\n color: #333;\n }\n \n p {\n margin: 0 0 24px 0;\n font-size: 14px;\n color: #666;\n line-height: 1.5;\n }\n \n .create-subagent-btn {\n display: flex;\n align-items: center;\n gap: 8px;\n padding: 12px 20px;\n background: #2196f3;\n border: none;\n border-radius: 6px;\n color: white;\n font-size: 14px;\n font-weight: 500;\n cursor: pointer;\n transition: background 0.2s;\n \n &:hover {\n background: #1976d2;\n }\n }\n }\n }\n \n}\n\n//[_ngcontent-%COMP%] Prompts[_ngcontent-%COMP%] Section\n.prompts-section[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n height: 100%;\n background: white;\n border-right: 1px solid #f0f0f0;\n \n .section-header {\n padding: 16px 20px;\n border-bottom: 1px solid #f0f0f0;\n display: flex;\n justify-content: space-between;\n align-items: center;\n flex-shrink: 0;\n \n h3 {\n margin: 0;\n font-size: 16px;\n font-weight: 600;\n color: #333;\n display: flex;\n align-items: center;\n gap: 8px;\n }\n \n .add-prompt-btn {\n display: flex;\n align-items: center;\n gap: 6px;\n padding: 6px 12px;\n background: #2196f3;\n border: none;\n border-radius: 4px;\n color: white;\n font-size: 12px;\n cursor: pointer;\n \n &:hover {\n background: #1976d2;\n }\n }\n }\n \n .prompts-list {\n flex: 1;\n overflow-y: auto;\n padding: 16px 20px;\n \n .empty-prompts {\n text-align: center;\n padding: 40px 20px;\n color: #666;\n \n i {\n font-size: 48px;\n margin-bottom: 16px;\n }\n \n p {\n margin: 0 0 20px 0;\n font-size: 14px;\n }\n \n .add-first-prompt-btn {\n display: inline-flex;\n align-items: center;\n gap: 8px;\n padding: 8px 16px;\n background: #2196f3;\n border: none;\n border-radius: 4px;\n color: white;\n cursor: pointer;\n \n &:hover {\n background: #1976d2;\n }\n }\n }\n \n .prompt-card {\n background: #f8f9fa;\n border: 1px solid #e0e0e0;\n border-radius: 4px;\n margin-bottom: 12px;\n \n .prompt-header {\n padding: 12px 16px;\n border-bottom: 1px solid #e9ecef;\n display: flex;\n justify-content: space-between;\n align-items: center;\n \n .prompt-info {\n h4 {\n margin: 0 0 4px 0;\n font-size: 14px;\n font-weight: 600;\n color: #333;\n }\n \n .prompt-type {\n font-size: 11px;\n padding: 2px 6px;\n background: #007bff;\n color: white;\n border-radius: 3px;\n text-transform: uppercase;\n }\n }\n \n .prompt-actions {\n display: flex;\n gap: 4px;\n \n .action-btn {\n padding: 4px 8px;\n background: none;\n border: 1px solid #e0e0e0;\n border-radius: 3px;\n color: #666;\n cursor: pointer;\n font-size: 12px;\n \n &:hover {\n background: #f0f0f0;\n border-color: #ccc;\n }\n \n &.danger:hover {\n background: #dc3545;\n border-color: #dc3545;\n color: white;\n }\n }\n }\n }\n \n .prompt-content {\n padding: 12px 16px;\n \n p {\n margin: 0;\n font-size: 12px;\n color: #666;\n line-height: 1.4;\n }\n }\n }\n }\n}\n\n//[_ngcontent-%COMP%] Properties[_ngcontent-%COMP%] Section\n.properties-section[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n height: 100%;\n background: white;\n \n .section-header {\n padding: 16px 20px;\n border-bottom: 1px solid #f0f0f0;\n display: flex;\n justify-content: space-between;\n align-items: center;\n flex-shrink: 0;\n \n h3 {\n margin: 0;\n font-size: 16px;\n font-weight: 600;\n color: #333;\n display: flex;\n align-items: center;\n gap: 8px;\n }\n \n .save-btn {\n display: flex;\n align-items: center;\n gap: 6px;\n padding: 6px 12px;\n background: #28a745;\n border: none;\n border-radius: 4px;\n color: white;\n font-size: 12px;\n cursor: pointer;\n \n &:hover {\n background: #218838;\n }\n }\n }\n \n .properties-form {\n flex: 1;\n overflow-y: auto;\n padding: 20px;\n \n .form-group {\n margin-bottom: 16px;\n \n label {\n display: block;\n font-size: 12px;\n font-weight: 600;\n color: #333;\n margin-bottom: 4px;\n }\n \n .form-input, .form-select, .form-textarea {\n width: 100%;\n padding: 8px 12px;\n border: 1px solid #ddd;\n border-radius: 4px;\n font-size: 13px;\n background: white;\n box-sizing: border-box;\n \n &:focus {\n outline: none;\n border-color: #2196f3;\n }\n }\n \n .form-textarea {\n resize: vertical;\n min-height: 60px;\n }\n \n &.checkbox-group {\n .checkbox-label {\n display: flex;\n align-items: center;\n gap: 8px;\n cursor: pointer;\n font-size: 13px;\n font-weight: 500;\n \n input[type=\"checkbox\"] {\n width: auto;\n margin: 0;\n }\n }\n \n small {\n display: block;\n font-size: 11px;\n color: #666;\n margin-top: 4px;\n margin-left: 24px;\n }\n }\n }\n \n .form-row {\n display: grid;\n grid-template-columns: 1fr 1fr;\n gap: 16px;\n }\n }\n}\n\n@keyframes _ngcontent-%COMP%_spin {\n 0% { transform: rotate(0deg); }\n 100% { transform: rotate(360deg); }\n}\n\n//[_ngcontent-%COMP%] Sub-Agent[_ngcontent-%COMP%] Creation[_ngcontent-%COMP%] Modal\n.modal-overlay[_ngcontent-%COMP%] {\n position: fixed;\n top: 0;\n left: 0;\n right: 0;\n bottom: 0;\n width: 100vw;\n height: 100vh;\n background: rgba(0, 0, 0, 0.5);\n display: flex;\n align-items: center;\n justify-content: center;\n z-index: 9999;\n padding: 20px;\n box-sizing: border-box;\n}\n\n.create-subagent-modal[_ngcontent-%COMP%] {\n background: white;\n border-radius: 8px;\n width: 100%;\n max-width: 500px;\n max-height: calc(100vh - 40px);\n min-height: 300px;\n display: flex;\n flex-direction: column;\n box-shadow: 0 10px 30px rgba(0, 0, 0, 0.3);\n position: relative;\n \n .modal-header {\n padding: 20px 24px;\n border-bottom: 1px solid #e9ecef;\n display: flex;\n justify-content: space-between;\n align-items: center;\n \n h3 {\n margin: 0;\n font-size: 18px;\n font-weight: 600;\n color: #333;\n display: flex;\n align-items: center;\n gap: 10px;\n }\n \n .close-btn {\n background: none;\n border: none;\n padding: 8px;\n cursor: pointer;\n color: #666;\n border-radius: 4px;\n \n &:hover {\n background: #f8f9fa;\n color: #333;\n }\n }\n }\n \n .modal-body {\n padding: 24px;\n flex: 1;\n overflow-y: auto;\n \n .error-message {\n background: #f8d7da;\n border: 1px solid #f5c6cb;\n border-radius: 6px;\n padding: 12px;\n margin-bottom: 20px;\n color: #721c24;\n font-size: 14px;\n display: flex;\n align-items: center;\n gap: 8px;\n \n i {\n color: #dc3545;\n }\n }\n \n .form-group {\n margin-bottom: 20px;\n \n label {\n display: block;\n font-size: 14px;\n font-weight: 600;\n color: #333;\n margin-bottom: 8px;\n }\n \n .form-input, .form-textarea {\n width: 100%;\n padding: 12px;\n border: 1px solid #ddd;\n border-radius: 6px;\n font-size: 14px;\n background: white;\n box-sizing: border-box;\n transition: border-color 0.2s;\n \n &:focus {\n outline: none;\n border-color: #2196f3;\n }\n \n &::placeholder {\n color: #999;\n }\n }\n \n .form-textarea {\n resize: vertical;\n min-height: 80px;\n font-family: inherit;\n }\n }\n \n .parent-info {\n background: #f8f9fa;\n border: 1px solid #e9ecef;\n border-radius: 6px;\n padding: 12px;\n font-size: 14px;\n color: #666;\n \n strong {\n color: #333;\n }\n }\n }\n \n .modal-footer {\n padding: 20px 24px;\n border-top: 1px solid #e9ecef;\n display: flex;\n justify-content: flex-end;\n gap: 12px;\n \n .cancel-btn, .create-btn {\n padding: 10px 20px;\n border: 1px solid;\n border-radius: 6px;\n font-size: 14px;\n font-weight: 500;\n cursor: pointer;\n transition: all 0.2s;\n \n &:disabled {\n opacity: 0.5;\n cursor: not-allowed;\n }\n }\n \n .cancel-btn {\n background: white;\n border-color: #ddd;\n color: #666;\n \n &:hover:not(:disabled) {\n background: #f8f9fa;\n border-color: #ccc;\n }\n }\n \n .create-btn {\n background: #2196f3;\n border-color: #2196f3;\n color: white;\n display: flex;\n align-items: center;\n gap: 8px;\n \n &:hover:not(:disabled) {\n background: #1976d2;\n border-color: #1976d2;\n }\n \n .loading-spinner-sm {\n width: 14px;\n height: 14px;\n border: 2px solid transparent;\n border-top-color: currentColor;\n border-radius: 50%;\n animation: _ngcontent-%COMP%_spin 1s linear infinite;\n }\n }\n }\n}"] });
|
|
855
855
|
(() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(AgentEditorComponent, [{
|
|
856
856
|
type: Component,
|
|
857
|
-
args: [{ selector: 'mj-agent-editor', template: "<div class=\"agent-editor-container\" mjFillContainer [rightMargin]=\"8\" [bottomMargin]=\"8\">\n <!-- Header -->\n <div class=\"editor-header\">\n <div class=\"header-info\">\n <button \n type=\"button\" \n class=\"back-btn\"\n (click)=\"closeEditor()\"\n title=\"Back to Agent List\">\n <i class=\"fa-solid fa-arrow-left\"></i>\n Back to Agents\n </button>\n \n @if (currentAgent) {\n <div class=\"agent-breadcrumb\">\n <h2>{{ currentAgent.Name }}</h2>\n @if (currentAgent.Parent) {\n <span class=\"breadcrumb-item\">\n <i class=\"fa-solid fa-chevron-right\"></i>\n Child of {{ currentAgent.Parent }}\n </span>\n }\n </div>\n }\n </div>\n </div>\n\n <!-- Tab Navigation -->\n @if (!isLoading && !error && currentAgent) {\n <div class=\"tab-navigation\">\n <button \n type=\"button\" \n class=\"tab-btn\"\n [class.active]=\"activeTab === 'hierarchy'\"\n (click)=\"setActiveTab('hierarchy')\">\n <i class=\"fa-solid fa-sitemap\"></i>\n Hierarchy\n </button>\n \n <button \n type=\"button\" \n class=\"tab-btn\"\n [class.active]=\"activeTab === 'prompts'\"\n (click)=\"setActiveTab('prompts')\">\n <i class=\"fa-solid fa-comment-dots\"></i>\n Prompts\n </button>\n \n <button \n type=\"button\" \n class=\"tab-btn\"\n [class.active]=\"activeTab === 'properties'\"\n (click)=\"setActiveTab('properties')\">\n <i class=\"fa-solid fa-cog\"></i>\n Properties\n </button>\n </div>\n }\n\n <!-- Loading State -->\n @if (isLoading) {\n <div class=\"loading-container\">\n <div class=\"loading-content\">\n <div class=\"loading-spinner\">\n <div class=\"spinner-ring\"></div>\n <div class=\"spinner-ring\"></div>\n <div class=\"spinner-ring\"></div>\n </div>\n <div class=\"loading-text\">Loading agent data...</div>\n </div>\n </div>\n }\n\n <!-- Error State -->\n @if (error) {\n <div class=\"error-container\">\n <div class=\"error-content\">\n <i class=\"fa-solid fa-exclamation-triangle\"></i>\n <h3>Error Loading Agent</h3>\n <p>{{ error }}</p>\n <button class=\"retry-btn\" (click)=\"loadAgentData()\">\n <i class=\"fa-solid fa-retry\"></i>\n Retry\n </button>\n </div>\n </div>\n }\n\n <!-- Tab Content -->\n @if (!isLoading && !error && currentAgent) {\n <div class=\"tab-content\" mjFillContainer>\n \n <!-- Hierarchy Tab -->\n @if (activeTab === 'hierarchy') {\n <div class=\"hierarchy-section\" mjFillContainer>\n <div class=\"section-header\">\n <h3>\n <i class=\"fa-solid fa-sitemap\"></i>\n Agent Hierarchy\n </h3>\n \n <div class=\"hierarchy-controls\">\n <div class=\"zoom-controls\">\n <button \n type=\"button\" \n class=\"zoom-btn\"\n (click)=\"zoomIn()\"\n title=\"Zoom In\">\n <i class=\"fa-solid fa-plus\"></i>\n </button>\n <button \n type=\"button\" \n class=\"zoom-btn\"\n (click)=\"zoomOut()\"\n title=\"Zoom Out\">\n <i class=\"fa-solid fa-minus\"></i>\n </button>\n <button \n type=\"button\" \n class=\"zoom-btn\"\n (click)=\"resetZoom()\"\n title=\"Reset Zoom\">\n <i class=\"fa-solid fa-expand\"></i>\n </button>\n </div>\n \n <div class=\"hierarchy-legend\">\n <div class=\"legend-item\">\n <div class=\"legend-rect level-0\"></div>\n <span>Root</span>\n </div>\n <div class=\"legend-item\">\n <div class=\"legend-rect level-1\"></div>\n <span>Level 1</span>\n </div>\n <div class=\"legend-item\">\n <div class=\"legend-rect level-2\"></div>\n <span>Level 2+</span>\n </div>\n </div>\n </div>\n </div>\n \n <div class=\"hierarchy-chart\" #hierarchyChart mjFillContainer>\n <!-- Help text overlay -->\n @if (hierarchyData && (hasChildren() || hasParent())) {\n <div class=\"chart-help\">\n <small>\n <i class=\"fa-solid fa-hand-pointer\"></i>\n Drag to pan \u2022 Use zoom controls or scroll to zoom \u2022 Click nodes to navigate\n </small>\n </div>\n }\n \n <!-- Empty state for hierarchy -->\n @if (!hierarchyData || (!hasChildren() && !hasParent())) {\n <div class=\"empty-hierarchy\">\n <i class=\"fa-solid fa-sitemap\"></i>\n <h4>No Agent Hierarchy</h4>\n <p>This agent doesn't have any parent or child agents yet.</p>\n <button class=\"create-subagent-btn\" (click)=\"openCreateSubAgent()\">\n <i class=\"fa-solid fa-plus\"></i>\n Create Sub-Agent\n </button>\n </div>\n }\n </div>\n </div>\n }\n \n <!-- Prompts Tab -->\n @if (activeTab === 'prompts') {\n <div class=\"prompts-section\" mjFillContainer>\n <div class=\"section-header\">\n <h3>\n <i class=\"fa-solid fa-comment-dots\"></i>\n Agent Prompts\n </h3>\n <button class=\"add-prompt-btn\" title=\"Add New Prompt\">\n <i class=\"fa-solid fa-plus\"></i>\n Add Prompt\n </button>\n </div>\n \n <div class=\"prompts-list\">\n @if (agentPrompts.length === 0) {\n <div class=\"empty-prompts\">\n <i class=\"fa-solid fa-comment-dots\"></i>\n <p>No prompts configured for this agent</p>\n <button class=\"add-first-prompt-btn\">\n <i class=\"fa-solid fa-plus\"></i>\n Add First Prompt\n </button>\n </div>\n } @else {\n @for (prompt of agentPrompts; track prompt.id) {\n <div class=\"prompt-card\">\n <div class=\"prompt-header\">\n <div class=\"prompt-info\">\n <h4>{{ prompt.name }}</h4>\n <span class=\"prompt-type\">{{ prompt.type }}</span>\n </div>\n <div class=\"prompt-actions\">\n <button class=\"action-btn\" title=\"Edit Prompt\">\n <i class=\"fa-solid fa-edit\"></i>\n </button>\n <button class=\"action-btn danger\" title=\"Delete Prompt\">\n <i class=\"fa-solid fa-trash\"></i>\n </button>\n </div>\n </div>\n <div class=\"prompt-content\">\n <p>{{ prompt.content }}</p>\n </div>\n </div>\n }\n }\n </div>\n </div>\n }\n \n <!-- Properties Tab -->\n @if (activeTab === 'properties') {\n <div class=\"properties-section\" mjFillContainer>\n <div class=\"section-header\">\n <h3>\n <i class=\"fa-solid fa-cog\"></i>\n Agent Properties\n </h3>\n <button class=\"save-btn\" title=\"Save Changes\">\n <i class=\"fa-solid fa-save\"></i>\n Save\n </button>\n </div>\n \n <div class=\"properties-form\">\n <div class=\"form-group\">\n <label>Name</label>\n <input \n type=\"text\" \n class=\"form-input\"\n [value]=\"currentAgent.Name\"\n placeholder=\"Agent name\">\n </div>\n \n <div class=\"form-group\">\n <label>Description</label>\n <textarea \n class=\"form-textarea\"\n [value]=\"currentAgent.Description\"\n placeholder=\"Agent description\"\n rows=\"3\"></textarea>\n </div>\n \n <div class=\"form-row\">\n <div class=\"form-group\">\n <label>Execution Mode</label>\n <select class=\"form-select\" [value]=\"currentAgent.ExecutionMode\">\n <option value=\"Sequential\">Sequential</option>\n <option value=\"Parallel\">Parallel</option>\n </select>\n </div>\n \n <div class=\"form-group\">\n <label>Execution Order</label>\n <input \n type=\"number\" \n class=\"form-input\"\n [value]=\"currentAgent.ExecutionOrder\"\n min=\"0\">\n </div>\n </div>\n \n <div class=\"form-group checkbox-group\">\n <label class=\"checkbox-label\">\n <input \n type=\"checkbox\" \n [checked]=\"currentAgent.ExposeAsAction\">\n <span class=\"checkmark\"></span>\n Expose as Action\n </label>\n <small>Allow this agent to be used as an action by other agents</small>\n </div>\n \n <div class=\"form-group checkbox-group\">\n <label class=\"checkbox-label\">\n <input \n type=\"checkbox\" \n [checked]=\"currentAgent.EnableContextCompression\">\n <span class=\"checkmark\"></span>\n Enable Context Compression\n </label>\n <small>Automatically compress conversation context when threshold is reached</small>\n </div>\n \n @if (currentAgent.EnableContextCompression) {\n <div class=\"form-row\">\n <div class=\"form-group\">\n <label>Message Threshold</label>\n <input \n type=\"number\" \n class=\"form-input\"\n [value]=\"currentAgent.ContextCompressionMessageThreshold\"\n min=\"1\"\n placeholder=\"Number of messages\">\n </div>\n \n <div class=\"form-group\">\n <label>Retention Count</label>\n <input \n type=\"number\" \n class=\"form-input\"\n [value]=\"currentAgent.ContextCompressionMessageRetentionCount\"\n min=\"0\"\n placeholder=\"Messages to keep\">\n </div>\n </div>\n }\n </div>\n </div>\n }\n </div>\n }\n\n <!-- Sub-Agent Creation Modal -->\n @if (showCreateSubAgent) {\n <div class=\"modal-overlay\" (click)=\"closeCreateSubAgent()\">\n <div class=\"create-subagent-modal\" (click)=\"$event.stopPropagation()\">\n <div class=\"modal-header\">\n <h3>\n <i class=\"fa-solid fa-plus\"></i>\n Create Sub-Agent\n </h3>\n <button class=\"close-btn\" (click)=\"closeCreateSubAgent()\">\n <i class=\"fa-solid fa-times\"></i>\n </button>\n </div>\n \n <div class=\"modal-body\">\n @if (error) {\n <div class=\"error-message\">\n <i class=\"fa-solid fa-exclamation-triangle\"></i>\n {{ error }}\n </div>\n }\n \n <div class=\"form-group\">\n <label>Agent Name *</label>\n <input \n type=\"text\" \n class=\"form-input\"\n [(ngModel)]=\"newSubAgentName\"\n placeholder=\"Enter agent name...\"\n maxlength=\"255\"\n [disabled]=\"isLoading\">\n </div>\n \n <div class=\"form-group\">\n <label>Description</label>\n <textarea \n class=\"form-textarea\"\n [(ngModel)]=\"newSubAgentDescription\"\n placeholder=\"Describe what this sub-agent will do...\"\n rows=\"4\"\n [disabled]=\"isLoading\"></textarea>\n </div>\n \n <div class=\"parent-info\">\n <strong>Parent Agent:</strong> {{ currentAgent?.Name }}\n </div>\n </div>\n \n <div class=\"modal-footer\">\n <button \n class=\"cancel-btn\" \n (click)=\"closeCreateSubAgent()\"\n [disabled]=\"isLoading\">\n Cancel\n </button>\n <button \n class=\"create-btn\" \n (click)=\"createSubAgent()\"\n [disabled]=\"!newSubAgentName.trim() || isLoading\">\n @if (isLoading) {\n <span class=\"loading-spinner-sm\"></span>\n Creating...\n } @else {\n <i class=\"fa-solid fa-plus\"></i>\n Create Sub-Agent\n }\n </button>\n </div>\n </div>\n </div>\n }\n</div>", styles: ["@use \"../../../../../../../dist/packages/Angular/Explorer/explorer-core/src/generic/generic-browse-list.component\";\n\n.agent-editor-container {\n display: flex;\n flex-direction: column;\n height: 100%;\n background: #f8f9fa;\n}\n\n.editor-header {\n background: white;\n border-bottom: 1px solid #e0e0e0;\n padding: 16px 20px;\n display: flex;\n justify-content: space-between;\n align-items: center;\n flex-shrink: 0;\n \n .header-info {\n display: flex;\n align-items: center;\n gap: 20px;\n \n .back-btn {\n display: flex;\n align-items: center;\n gap: 8px;\n padding: 8px 16px;\n background: #f8f9fa;\n border: 1px solid #e0e0e0;\n border-radius: 4px;\n color: #666;\n text-decoration: none;\n font-size: 14px;\n cursor: pointer;\n transition: all 0.2s;\n \n &:hover {\n background: #e9ecef;\n border-color: #ccc;\n color: #333;\n }\n }\n \n .agent-breadcrumb {\n h2 {\n margin: 0;\n font-size: 24px;\n font-weight: 600;\n color: #333;\n }\n \n .breadcrumb-item {\n font-size: 14px;\n color: #666;\n display: flex;\n align-items: center;\n gap: 8px;\n margin-top: 4px;\n }\n }\n }\n \n .header-controls {\n display: flex;\n gap: 8px;\n \n .control-btn {\n display: flex;\n align-items: center;\n gap: 6px;\n padding: 8px 12px;\n background: white;\n border: 1px solid #e0e0e0;\n border-radius: 4px;\n color: #666;\n font-size: 12px;\n cursor: pointer;\n transition: all 0.2s;\n \n &:hover {\n background: #f8f9fa;\n border-color: #2196f3;\n color: #2196f3;\n }\n \n &.active {\n background: #2196f3;\n border-color: #2196f3;\n color: white;\n }\n }\n }\n}\n\n// Tab Navigation\n.tab-navigation {\n background: white;\n border-bottom: 1px solid #e0e0e0;\n padding: 0 20px;\n display: flex;\n gap: 2px;\n flex-shrink: 0;\n \n .tab-btn {\n display: flex;\n align-items: center;\n gap: 8px;\n padding: 12px 16px;\n background: none;\n border: none;\n border-bottom: 3px solid transparent;\n color: #666;\n font-size: 14px;\n font-weight: 500;\n cursor: pointer;\n transition: all 0.2s;\n \n &:hover {\n color: #2196f3;\n background: #f8f9fa;\n }\n \n &.active {\n color: #2196f3;\n border-bottom-color: #2196f3;\n background: #f8f9fa;\n }\n \n i {\n font-size: 16px;\n }\n }\n}\n\n.tab-content {\n flex: 1;\n overflow: hidden;\n}\n\n.loading-container, .error-container {\n display: flex;\n align-items: center;\n justify-content: center;\n flex: 1;\n \n .loading-content, .error-content {\n text-align: center;\n \n .loading-spinner {\n position: relative;\n width: 60px;\n height: 60px;\n margin: 0 auto 20px;\n }\n \n .spinner-ring {\n position: absolute;\n width: 100%;\n height: 100%;\n border: 3px solid transparent;\n border-radius: 50%;\n animation: spin 1.5s linear infinite;\n \n &:nth-child(1) {\n border-top-color: #2196f3;\n animation-delay: 0s;\n }\n \n &:nth-child(2) {\n border-top-color: #9c27b0;\n animation-delay: 0.3s;\n transform: scale(0.8);\n }\n \n &:nth-child(3) {\n border-top-color: #ff6b35;\n animation-delay: 0.6s;\n transform: scale(0.6);\n }\n }\n \n .loading-text {\n font-size: 16px;\n color: #666;\n }\n \n i {\n font-size: 48px;\n color: #dc3545;\n margin-bottom: 16px;\n }\n \n h3 {\n margin: 0 0 8px 0;\n color: #333;\n }\n \n p {\n margin: 0 0 16px 0;\n color: #666;\n }\n \n .retry-btn {\n display: flex;\n align-items: center;\n gap: 8px;\n padding: 8px 16px;\n background: #dc3545;\n border: none;\n border-radius: 4px;\n color: white;\n cursor: pointer;\n \n &:hover {\n background: #c82333;\n }\n }\n }\n}\n\n.editor-content {\n flex: 1;\n overflow: hidden;\n}\n\n.main-splitter, .bottom-splitter {\n height: 100%;\n \n .k-pane {\n overflow: hidden;\n }\n}\n\n// Hierarchy Section\n.hierarchy-section {\n display: flex;\n flex-direction: column;\n height: 100%;\n background: white;\n \n .section-header {\n padding: 16px 20px;\n border-bottom: 1px solid #f0f0f0;\n display: flex;\n justify-content: space-between;\n align-items: center;\n flex-shrink: 0;\n \n h3 {\n margin: 0;\n font-size: 16px;\n font-weight: 600;\n color: #333;\n display: flex;\n align-items: center;\n gap: 8px;\n }\n \n .hierarchy-controls {\n display: flex;\n align-items: center;\n gap: 20px;\n \n .zoom-controls {\n display: flex;\n gap: 4px;\n \n .zoom-btn {\n display: flex;\n align-items: center;\n justify-content: center;\n width: 32px;\n height: 32px;\n background: white;\n border: 1px solid #e0e0e0;\n border-radius: 4px;\n color: #666;\n cursor: pointer;\n transition: all 0.2s;\n \n &:hover {\n background: #f8f9fa;\n border-color: #2196f3;\n color: #2196f3;\n }\n \n i {\n font-size: 12px;\n }\n }\n }\n \n .hierarchy-legend {\n display: flex;\n gap: 16px;\n \n .legend-item {\n display: flex;\n align-items: center;\n gap: 6px;\n font-size: 12px;\n color: #666;\n \n .legend-rect {\n width: 20px;\n height: 12px;\n border-radius: 2px;\n border: 1px solid;\n \n &.level-0 {\n background: #1976d2;\n border-color: #1565c0;\n }\n \n &.level-1 {\n background: #388e3c;\n border-color: #2e7d32;\n }\n \n &.level-2 {\n background: #f57c00;\n border-color: #ef6c00;\n }\n }\n }\n }\n }\n }\n \n .hierarchy-chart {\n flex: 1;\n min-height: 300px;\n overflow: hidden;\n position: relative;\n \n .chart-help {\n position: absolute;\n bottom: 10px;\n left: 10px;\n background: rgba(255, 255, 255, 0.9);\n padding: 6px 10px;\n border-radius: 4px;\n border: 1px solid #e0e0e0;\n z-index: 10;\n \n small {\n font-size: 11px;\n color: #666;\n display: flex;\n align-items: center;\n gap: 6px;\n \n i {\n color: #2196f3;\n }\n }\n }\n \n .empty-hierarchy {\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: center;\n height: 100%;\n padding: 40px 20px;\n text-align: center;\n color: #666;\n \n i {\n font-size: 64px;\n margin-bottom: 20px;\n opacity: 0.5;\n }\n \n h4 {\n margin: 0 0 12px 0;\n font-size: 18px;\n color: #333;\n }\n \n p {\n margin: 0 0 24px 0;\n font-size: 14px;\n color: #666;\n line-height: 1.5;\n }\n \n .create-subagent-btn {\n display: flex;\n align-items: center;\n gap: 8px;\n padding: 12px 20px;\n background: #2196f3;\n border: none;\n border-radius: 6px;\n color: white;\n font-size: 14px;\n font-weight: 500;\n cursor: pointer;\n transition: background 0.2s;\n \n &:hover {\n background: #1976d2;\n }\n }\n }\n }\n \n}\n\n// Prompts Section\n.prompts-section {\n display: flex;\n flex-direction: column;\n height: 100%;\n background: white;\n border-right: 1px solid #f0f0f0;\n \n .section-header {\n padding: 16px 20px;\n border-bottom: 1px solid #f0f0f0;\n display: flex;\n justify-content: space-between;\n align-items: center;\n flex-shrink: 0;\n \n h3 {\n margin: 0;\n font-size: 16px;\n font-weight: 600;\n color: #333;\n display: flex;\n align-items: center;\n gap: 8px;\n }\n \n .add-prompt-btn {\n display: flex;\n align-items: center;\n gap: 6px;\n padding: 6px 12px;\n background: #2196f3;\n border: none;\n border-radius: 4px;\n color: white;\n font-size: 12px;\n cursor: pointer;\n \n &:hover {\n background: #1976d2;\n }\n }\n }\n \n .prompts-list {\n flex: 1;\n overflow-y: auto;\n padding: 16px 20px;\n \n .empty-prompts {\n text-align: center;\n padding: 40px 20px;\n color: #666;\n \n i {\n font-size: 48px;\n margin-bottom: 16px;\n }\n \n p {\n margin: 0 0 20px 0;\n font-size: 14px;\n }\n \n .add-first-prompt-btn {\n display: inline-flex;\n align-items: center;\n gap: 8px;\n padding: 8px 16px;\n background: #2196f3;\n border: none;\n border-radius: 4px;\n color: white;\n cursor: pointer;\n \n &:hover {\n background: #1976d2;\n }\n }\n }\n \n .prompt-card {\n background: #f8f9fa;\n border: 1px solid #e0e0e0;\n border-radius: 4px;\n margin-bottom: 12px;\n \n .prompt-header {\n padding: 12px 16px;\n border-bottom: 1px solid #e9ecef;\n display: flex;\n justify-content: space-between;\n align-items: center;\n \n .prompt-info {\n h4 {\n margin: 0 0 4px 0;\n font-size: 14px;\n font-weight: 600;\n color: #333;\n }\n \n .prompt-type {\n font-size: 11px;\n padding: 2px 6px;\n background: #007bff;\n color: white;\n border-radius: 3px;\n text-transform: uppercase;\n }\n }\n \n .prompt-actions {\n display: flex;\n gap: 4px;\n \n .action-btn {\n padding: 4px 8px;\n background: none;\n border: 1px solid #e0e0e0;\n border-radius: 3px;\n color: #666;\n cursor: pointer;\n font-size: 12px;\n \n &:hover {\n background: #f0f0f0;\n border-color: #ccc;\n }\n \n &.danger:hover {\n background: #dc3545;\n border-color: #dc3545;\n color: white;\n }\n }\n }\n }\n \n .prompt-content {\n padding: 12px 16px;\n \n p {\n margin: 0;\n font-size: 12px;\n color: #666;\n line-height: 1.4;\n }\n }\n }\n }\n}\n\n// Properties Section\n.properties-section {\n display: flex;\n flex-direction: column;\n height: 100%;\n background: white;\n \n .section-header {\n padding: 16px 20px;\n border-bottom: 1px solid #f0f0f0;\n display: flex;\n justify-content: space-between;\n align-items: center;\n flex-shrink: 0;\n \n h3 {\n margin: 0;\n font-size: 16px;\n font-weight: 600;\n color: #333;\n display: flex;\n align-items: center;\n gap: 8px;\n }\n \n .save-btn {\n display: flex;\n align-items: center;\n gap: 6px;\n padding: 6px 12px;\n background: #28a745;\n border: none;\n border-radius: 4px;\n color: white;\n font-size: 12px;\n cursor: pointer;\n \n &:hover {\n background: #218838;\n }\n }\n }\n \n .properties-form {\n flex: 1;\n overflow-y: auto;\n padding: 20px;\n \n .form-group {\n margin-bottom: 16px;\n \n label {\n display: block;\n font-size: 12px;\n font-weight: 600;\n color: #333;\n margin-bottom: 4px;\n }\n \n .form-input, .form-select, .form-textarea {\n width: 100%;\n padding: 8px 12px;\n border: 1px solid #ddd;\n border-radius: 4px;\n font-size: 13px;\n background: white;\n box-sizing: border-box;\n \n &:focus {\n outline: none;\n border-color: #2196f3;\n }\n }\n \n .form-textarea {\n resize: vertical;\n min-height: 60px;\n }\n \n &.checkbox-group {\n .checkbox-label {\n display: flex;\n align-items: center;\n gap: 8px;\n cursor: pointer;\n font-size: 13px;\n font-weight: 500;\n \n input[type=\"checkbox\"] {\n width: auto;\n margin: 0;\n }\n }\n \n small {\n display: block;\n font-size: 11px;\n color: #666;\n margin-top: 4px;\n margin-left: 24px;\n }\n }\n }\n \n .form-row {\n display: grid;\n grid-template-columns: 1fr 1fr;\n gap: 16px;\n }\n }\n}\n\n@keyframes spin {\n 0% { transform: rotate(0deg); }\n 100% { transform: rotate(360deg); }\n}\n\n// Sub-Agent Creation Modal\n.modal-overlay {\n position: fixed;\n top: 0;\n left: 0;\n right: 0;\n bottom: 0;\n width: 100vw;\n height: 100vh;\n background: rgba(0, 0, 0, 0.5);\n display: flex;\n align-items: center;\n justify-content: center;\n z-index: 9999;\n padding: 20px;\n box-sizing: border-box;\n}\n\n.create-subagent-modal {\n background: white;\n border-radius: 8px;\n width: 100%;\n max-width: 500px;\n max-height: calc(100vh - 40px);\n min-height: 300px;\n display: flex;\n flex-direction: column;\n box-shadow: 0 10px 30px rgba(0, 0, 0, 0.3);\n position: relative;\n \n .modal-header {\n padding: 20px 24px;\n border-bottom: 1px solid #e9ecef;\n display: flex;\n justify-content: space-between;\n align-items: center;\n \n h3 {\n margin: 0;\n font-size: 18px;\n font-weight: 600;\n color: #333;\n display: flex;\n align-items: center;\n gap: 10px;\n }\n \n .close-btn {\n background: none;\n border: none;\n padding: 8px;\n cursor: pointer;\n color: #666;\n border-radius: 4px;\n \n &:hover {\n background: #f8f9fa;\n color: #333;\n }\n }\n }\n \n .modal-body {\n padding: 24px;\n flex: 1;\n overflow-y: auto;\n \n .error-message {\n background: #f8d7da;\n border: 1px solid #f5c6cb;\n border-radius: 6px;\n padding: 12px;\n margin-bottom: 20px;\n color: #721c24;\n font-size: 14px;\n display: flex;\n align-items: center;\n gap: 8px;\n \n i {\n color: #dc3545;\n }\n }\n \n .form-group {\n margin-bottom: 20px;\n \n label {\n display: block;\n font-size: 14px;\n font-weight: 600;\n color: #333;\n margin-bottom: 8px;\n }\n \n .form-input, .form-textarea {\n width: 100%;\n padding: 12px;\n border: 1px solid #ddd;\n border-radius: 6px;\n font-size: 14px;\n background: white;\n box-sizing: border-box;\n transition: border-color 0.2s;\n \n &:focus {\n outline: none;\n border-color: #2196f3;\n }\n \n &::placeholder {\n color: #999;\n }\n }\n \n .form-textarea {\n resize: vertical;\n min-height: 80px;\n font-family: inherit;\n }\n }\n \n .parent-info {\n background: #f8f9fa;\n border: 1px solid #e9ecef;\n border-radius: 6px;\n padding: 12px;\n font-size: 14px;\n color: #666;\n \n strong {\n color: #333;\n }\n }\n }\n \n .modal-footer {\n padding: 20px 24px;\n border-top: 1px solid #e9ecef;\n display: flex;\n justify-content: flex-end;\n gap: 12px;\n \n .cancel-btn, .create-btn {\n padding: 10px 20px;\n border: 1px solid;\n border-radius: 6px;\n font-size: 14px;\n font-weight: 500;\n cursor: pointer;\n transition: all 0.2s;\n \n &:disabled {\n opacity: 0.5;\n cursor: not-allowed;\n }\n }\n \n .cancel-btn {\n background: white;\n border-color: #ddd;\n color: #666;\n \n &:hover:not(:disabled) {\n background: #f8f9fa;\n border-color: #ccc;\n }\n }\n \n .create-btn {\n background: #2196f3;\n border-color: #2196f3;\n color: white;\n display: flex;\n align-items: center;\n gap: 8px;\n \n &:hover:not(:disabled) {\n background: #1976d2;\n border-color: #1976d2;\n }\n \n .loading-spinner-sm {\n width: 14px;\n height: 14px;\n border: 2px solid transparent;\n border-top-color: currentColor;\n border-radius: 50%;\n animation: spin 1s linear infinite;\n }\n }\n }\n}"] }]
|
|
857
|
+
args: [{ selector: 'mj-agent-editor', template: "<div class=\"agent-editor-container\" mjFillContainer [rightMargin]=\"8\" [bottomMargin]=\"8\">\n <!-- Header -->\n <div class=\"editor-header\">\n <div class=\"header-info\">\n <div class=\"header-actions\">\n <button \n type=\"button\" \n class=\"back-btn\"\n (click)=\"closeEditor()\"\n title=\"Back to Agent List\">\n <i class=\"fa-solid fa-arrow-left\"></i>\n Back to Agents\n </button>\n \n @if (currentAgent) {\n <button \n type=\"button\" \n class=\"open-btn\"\n (click)=\"openCurrentAgentRecord()\"\n title=\"Open Agent Record\">\n <i class=\"fa-solid fa-external-link\"></i>\n Open Record\n </button>\n }\n </div>\n \n @if (currentAgent) {\n <div class=\"agent-breadcrumb\">\n <h2>{{ currentAgent.Name }}</h2>\n @if (currentAgent.Parent) {\n <span class=\"breadcrumb-item\">\n <i class=\"fa-solid fa-chevron-right\"></i>\n Child of {{ currentAgent.Parent }}\n </span>\n }\n </div>\n }\n </div>\n </div>\n\n <!-- Tab Navigation -->\n @if (!isLoading && !error && currentAgent) {\n <div class=\"tab-navigation\">\n <button \n type=\"button\" \n class=\"tab-btn\"\n [class.active]=\"activeTab === 'hierarchy'\"\n (click)=\"setActiveTab('hierarchy')\">\n <i class=\"fa-solid fa-sitemap\"></i>\n Hierarchy\n </button>\n \n <button \n type=\"button\" \n class=\"tab-btn\"\n [class.active]=\"activeTab === 'prompts'\"\n (click)=\"setActiveTab('prompts')\">\n <i class=\"fa-solid fa-comment-dots\"></i>\n Prompts\n </button>\n \n <button \n type=\"button\" \n class=\"tab-btn\"\n [class.active]=\"activeTab === 'properties'\"\n (click)=\"setActiveTab('properties')\">\n <i class=\"fa-solid fa-cog\"></i>\n Properties\n </button>\n </div>\n }\n\n <!-- Loading State -->\n @if (isLoading) {\n <div class=\"loading-container\">\n <div class=\"loading-content\">\n <div class=\"loading-spinner\">\n <div class=\"spinner-ring\"></div>\n <div class=\"spinner-ring\"></div>\n <div class=\"spinner-ring\"></div>\n </div>\n <div class=\"loading-text\">Loading agent data...</div>\n </div>\n </div>\n }\n\n <!-- Error State -->\n @if (error) {\n <div class=\"error-container\">\n <div class=\"error-content\">\n <i class=\"fa-solid fa-exclamation-triangle\"></i>\n <h3>Error Loading Agent</h3>\n <p>{{ error }}</p>\n <button class=\"retry-btn\" (click)=\"loadAgentData()\">\n <i class=\"fa-solid fa-retry\"></i>\n Retry\n </button>\n </div>\n </div>\n }\n\n <!-- Tab Content -->\n @if (!isLoading && !error && currentAgent) {\n <div class=\"tab-content\" mjFillContainer>\n \n <!-- Hierarchy Tab -->\n @if (activeTab === 'hierarchy') {\n <div class=\"hierarchy-section\" mjFillContainer>\n <div class=\"section-header\">\n <h3>\n <i class=\"fa-solid fa-sitemap\"></i>\n Agent Hierarchy\n </h3>\n \n <div class=\"hierarchy-controls\">\n <div class=\"zoom-controls\">\n <button \n type=\"button\" \n class=\"zoom-btn\"\n (click)=\"zoomIn()\"\n title=\"Zoom In\">\n <i class=\"fa-solid fa-plus\"></i>\n </button>\n <button \n type=\"button\" \n class=\"zoom-btn\"\n (click)=\"zoomOut()\"\n title=\"Zoom Out\">\n <i class=\"fa-solid fa-minus\"></i>\n </button>\n <button \n type=\"button\" \n class=\"zoom-btn\"\n (click)=\"resetZoom()\"\n title=\"Reset Zoom\">\n <i class=\"fa-solid fa-expand\"></i>\n </button>\n </div>\n \n <div class=\"hierarchy-legend\">\n <div class=\"legend-item\">\n <div class=\"legend-rect level-0\"></div>\n <span>Root</span>\n </div>\n <div class=\"legend-item\">\n <div class=\"legend-rect level-1\"></div>\n <span>Level 1</span>\n </div>\n <div class=\"legend-item\">\n <div class=\"legend-rect level-2\"></div>\n <span>Level 2+</span>\n </div>\n </div>\n </div>\n </div>\n \n <div class=\"hierarchy-chart\" #hierarchyChart mjFillContainer>\n <!-- Help text overlay -->\n @if (hierarchyData && (hasChildren() || hasParent())) {\n <div class=\"chart-help\">\n <small>\n <i class=\"fa-solid fa-hand-pointer\"></i>\n Drag to pan \u2022 Use zoom controls or scroll to zoom \u2022 Click nodes to navigate\n </small>\n </div>\n }\n \n <!-- Empty state for hierarchy -->\n @if (!hierarchyData || (!hasChildren() && !hasParent())) {\n <div class=\"empty-hierarchy\">\n <i class=\"fa-solid fa-sitemap\"></i>\n <h4>No Agent Hierarchy</h4>\n <p>This agent doesn't have any parent or child agents yet.</p>\n <button class=\"create-subagent-btn\" (click)=\"openCreateSubAgent()\">\n <i class=\"fa-solid fa-plus\"></i>\n Create Sub-Agent\n </button>\n </div>\n }\n </div>\n </div>\n }\n \n <!-- Prompts Tab -->\n @if (activeTab === 'prompts') {\n <div class=\"prompts-section\" mjFillContainer>\n <div class=\"section-header\">\n <h3>\n <i class=\"fa-solid fa-comment-dots\"></i>\n Agent Prompts\n </h3>\n <button class=\"add-prompt-btn\" title=\"Add New Prompt\">\n <i class=\"fa-solid fa-plus\"></i>\n Add Prompt\n </button>\n </div>\n \n <div class=\"prompts-list\">\n @if (agentPrompts.length === 0) {\n <div class=\"empty-prompts\">\n <i class=\"fa-solid fa-comment-dots\"></i>\n <p>No prompts configured for this agent</p>\n <button class=\"add-first-prompt-btn\">\n <i class=\"fa-solid fa-plus\"></i>\n Add First Prompt\n </button>\n </div>\n } @else {\n @for (prompt of agentPrompts; track prompt.id) {\n <div class=\"prompt-card\">\n <div class=\"prompt-header\">\n <div class=\"prompt-info\">\n <h4>{{ prompt.name }}</h4>\n <span class=\"prompt-type\">{{ prompt.type }}</span>\n </div>\n <div class=\"prompt-actions\">\n <button class=\"action-btn\" title=\"Edit Prompt\">\n <i class=\"fa-solid fa-edit\"></i>\n </button>\n <button class=\"action-btn danger\" title=\"Delete Prompt\">\n <i class=\"fa-solid fa-trash\"></i>\n </button>\n </div>\n </div>\n <div class=\"prompt-content\">\n <p>{{ prompt.content }}</p>\n </div>\n </div>\n }\n }\n </div>\n </div>\n }\n \n <!-- Properties Tab -->\n @if (activeTab === 'properties') {\n <div class=\"properties-section\" mjFillContainer>\n <div class=\"section-header\">\n <h3>\n <i class=\"fa-solid fa-cog\"></i>\n Agent Properties\n </h3>\n <button class=\"save-btn\" title=\"Save Changes\">\n <i class=\"fa-solid fa-save\"></i>\n Save\n </button>\n </div>\n \n <div class=\"properties-form\">\n <div class=\"form-group\">\n <label>Name</label>\n <input \n type=\"text\" \n class=\"form-input\"\n [value]=\"currentAgent.Name\"\n placeholder=\"Agent name\">\n </div>\n \n <div class=\"form-group\">\n <label>Description</label>\n <textarea \n class=\"form-textarea\"\n [value]=\"currentAgent.Description\"\n placeholder=\"Agent description\"\n rows=\"3\"></textarea>\n </div>\n \n <div class=\"form-row\">\n <div class=\"form-group\">\n <label>Execution Mode</label>\n <select class=\"form-select\" [value]=\"currentAgent.ExecutionMode\">\n <option value=\"Sequential\">Sequential</option>\n <option value=\"Parallel\">Parallel</option>\n </select>\n </div>\n \n <div class=\"form-group\">\n <label>Execution Order</label>\n <input \n type=\"number\" \n class=\"form-input\"\n [value]=\"currentAgent.ExecutionOrder\"\n min=\"0\">\n </div>\n </div>\n \n <div class=\"form-group checkbox-group\">\n <label class=\"checkbox-label\">\n <input \n type=\"checkbox\" \n [checked]=\"currentAgent.ExposeAsAction\">\n <span class=\"checkmark\"></span>\n Expose as Action\n </label>\n <small>Allow this agent to be used as an action by other agents</small>\n </div>\n \n <div class=\"form-group checkbox-group\">\n <label class=\"checkbox-label\">\n <input \n type=\"checkbox\" \n [checked]=\"currentAgent.EnableContextCompression\">\n <span class=\"checkmark\"></span>\n Enable Context Compression\n </label>\n <small>Automatically compress conversation context when threshold is reached</small>\n </div>\n \n @if (currentAgent.EnableContextCompression) {\n <div class=\"form-row\">\n <div class=\"form-group\">\n <label>Message Threshold</label>\n <input \n type=\"number\" \n class=\"form-input\"\n [value]=\"currentAgent.ContextCompressionMessageThreshold\"\n min=\"1\"\n placeholder=\"Number of messages\">\n </div>\n \n <div class=\"form-group\">\n <label>Retention Count</label>\n <input \n type=\"number\" \n class=\"form-input\"\n [value]=\"currentAgent.ContextCompressionMessageRetentionCount\"\n min=\"0\"\n placeholder=\"Messages to keep\">\n </div>\n </div>\n }\n </div>\n </div>\n }\n </div>\n }\n\n <!-- Sub-Agent Creation Modal -->\n @if (showCreateSubAgent) {\n <div class=\"modal-overlay\" (click)=\"closeCreateSubAgent()\">\n <div class=\"create-subagent-modal\" (click)=\"$event.stopPropagation()\">\n <div class=\"modal-header\">\n <h3>\n <i class=\"fa-solid fa-plus\"></i>\n Create Sub-Agent\n </h3>\n <button class=\"close-btn\" (click)=\"closeCreateSubAgent()\">\n <i class=\"fa-solid fa-times\"></i>\n </button>\n </div>\n \n <div class=\"modal-body\">\n @if (error) {\n <div class=\"error-message\">\n <i class=\"fa-solid fa-exclamation-triangle\"></i>\n {{ error }}\n </div>\n }\n \n <div class=\"form-group\">\n <label>Agent Name *</label>\n <input \n type=\"text\" \n class=\"form-input\"\n [(ngModel)]=\"newSubAgentName\"\n placeholder=\"Enter agent name...\"\n maxlength=\"255\"\n [disabled]=\"isLoading\">\n </div>\n \n <div class=\"form-group\">\n <label>Description</label>\n <textarea \n class=\"form-textarea\"\n [(ngModel)]=\"newSubAgentDescription\"\n placeholder=\"Describe what this sub-agent will do...\"\n rows=\"4\"\n [disabled]=\"isLoading\"></textarea>\n </div>\n \n <div class=\"parent-info\">\n <strong>Parent Agent:</strong> {{ currentAgent?.Name }}\n </div>\n </div>\n \n <div class=\"modal-footer\">\n <button \n class=\"cancel-btn\" \n (click)=\"closeCreateSubAgent()\"\n [disabled]=\"isLoading\">\n Cancel\n </button>\n <button \n class=\"create-btn\" \n (click)=\"createSubAgent()\"\n [disabled]=\"!newSubAgentName.trim() || isLoading\">\n @if (isLoading) {\n <span class=\"loading-spinner-sm\"></span>\n Creating...\n } @else {\n <i class=\"fa-solid fa-plus\"></i>\n Create Sub-Agent\n }\n </button>\n </div>\n </div>\n </div>\n }\n</div>", styles: ["@use \"../../../../../../../dist/packages/Angular/Explorer/explorer-core/src/generic/generic-browse-list.component\";\n\n.agent-editor-container {\n display: flex;\n flex-direction: column;\n height: 100%;\n background: #f8f9fa;\n}\n\n.editor-header {\n background: white;\n border-bottom: 1px solid #e0e0e0;\n padding: 16px 20px;\n display: flex;\n justify-content: space-between;\n align-items: center;\n flex-shrink: 0;\n \n .header-info {\n display: flex;\n align-items: center;\n gap: 20px;\n \n .header-actions {\n display: flex;\n align-items: center;\n gap: 12px;\n }\n \n .back-btn, .open-btn {\n display: flex;\n align-items: center;\n gap: 8px;\n padding: 8px 16px;\n border: 1px solid #e0e0e0;\n border-radius: 4px;\n text-decoration: none;\n font-size: 14px;\n cursor: pointer;\n transition: all 0.2s;\n \n &:hover {\n border-color: #ccc;\n }\n }\n \n .back-btn {\n background: #f8f9fa;\n color: #666;\n \n &:hover {\n background: #e9ecef;\n color: #333;\n }\n }\n \n .open-btn {\n background: #007bff;\n color: white;\n \n &:hover {\n background: #0056b3;\n }\n }\n \n .agent-breadcrumb {\n h2 {\n margin: 0;\n font-size: 24px;\n font-weight: 600;\n color: #333;\n }\n \n .breadcrumb-item {\n font-size: 14px;\n color: #666;\n display: flex;\n align-items: center;\n gap: 8px;\n margin-top: 4px;\n }\n }\n }\n \n .header-controls {\n display: flex;\n gap: 8px;\n \n .control-btn {\n display: flex;\n align-items: center;\n gap: 6px;\n padding: 8px 12px;\n background: white;\n border: 1px solid #e0e0e0;\n border-radius: 4px;\n color: #666;\n font-size: 12px;\n cursor: pointer;\n transition: all 0.2s;\n \n &:hover {\n background: #f8f9fa;\n border-color: #2196f3;\n color: #2196f3;\n }\n \n &.active {\n background: #2196f3;\n border-color: #2196f3;\n color: white;\n }\n }\n }\n}\n\n// Tab Navigation\n.tab-navigation {\n background: white;\n border-bottom: 1px solid #e0e0e0;\n padding: 0 20px;\n display: flex;\n gap: 2px;\n flex-shrink: 0;\n \n .tab-btn {\n display: flex;\n align-items: center;\n gap: 8px;\n padding: 12px 16px;\n background: none;\n border: none;\n border-bottom: 3px solid transparent;\n color: #666;\n font-size: 14px;\n font-weight: 500;\n cursor: pointer;\n transition: all 0.2s;\n \n &:hover {\n color: #2196f3;\n background: #f8f9fa;\n }\n \n &.active {\n color: #2196f3;\n border-bottom-color: #2196f3;\n background: #f8f9fa;\n }\n \n i {\n font-size: 16px;\n }\n }\n}\n\n.tab-content {\n flex: 1;\n overflow: hidden;\n}\n\n.loading-container, .error-container {\n display: flex;\n align-items: center;\n justify-content: center;\n flex: 1;\n \n .loading-content, .error-content {\n text-align: center;\n \n .loading-spinner {\n position: relative;\n width: 60px;\n height: 60px;\n margin: 0 auto 20px;\n }\n \n .spinner-ring {\n position: absolute;\n width: 100%;\n height: 100%;\n border: 3px solid transparent;\n border-radius: 50%;\n animation: spin 1.5s linear infinite;\n \n &:nth-child(1) {\n border-top-color: #2196f3;\n animation-delay: 0s;\n }\n \n &:nth-child(2) {\n border-top-color: #9c27b0;\n animation-delay: 0.3s;\n transform: scale(0.8);\n }\n \n &:nth-child(3) {\n border-top-color: #ff6b35;\n animation-delay: 0.6s;\n transform: scale(0.6);\n }\n }\n \n .loading-text {\n font-size: 16px;\n color: #666;\n }\n \n i {\n font-size: 48px;\n color: #dc3545;\n margin-bottom: 16px;\n }\n \n h3 {\n margin: 0 0 8px 0;\n color: #333;\n }\n \n p {\n margin: 0 0 16px 0;\n color: #666;\n }\n \n .retry-btn {\n display: flex;\n align-items: center;\n gap: 8px;\n padding: 8px 16px;\n background: #dc3545;\n border: none;\n border-radius: 4px;\n color: white;\n cursor: pointer;\n \n &:hover {\n background: #c82333;\n }\n }\n }\n}\n\n.editor-content {\n flex: 1;\n overflow: hidden;\n}\n\n.main-splitter, .bottom-splitter {\n height: 100%;\n \n .k-pane {\n overflow: hidden;\n }\n}\n\n// Hierarchy Section\n.hierarchy-section {\n display: flex;\n flex-direction: column;\n height: 100%;\n background: white;\n \n .section-header {\n padding: 16px 20px;\n border-bottom: 1px solid #f0f0f0;\n display: flex;\n justify-content: space-between;\n align-items: center;\n flex-shrink: 0;\n \n h3 {\n margin: 0;\n font-size: 16px;\n font-weight: 600;\n color: #333;\n display: flex;\n align-items: center;\n gap: 8px;\n }\n \n .hierarchy-controls {\n display: flex;\n align-items: center;\n gap: 20px;\n \n .zoom-controls {\n display: flex;\n gap: 4px;\n \n .zoom-btn {\n display: flex;\n align-items: center;\n justify-content: center;\n width: 32px;\n height: 32px;\n background: white;\n border: 1px solid #e0e0e0;\n border-radius: 4px;\n color: #666;\n cursor: pointer;\n transition: all 0.2s;\n \n &:hover {\n background: #f8f9fa;\n border-color: #2196f3;\n color: #2196f3;\n }\n \n i {\n font-size: 12px;\n }\n }\n }\n \n .hierarchy-legend {\n display: flex;\n gap: 16px;\n \n .legend-item {\n display: flex;\n align-items: center;\n gap: 6px;\n font-size: 12px;\n color: #666;\n \n .legend-rect {\n width: 20px;\n height: 12px;\n border-radius: 2px;\n border: 1px solid;\n \n &.level-0 {\n background: #1976d2;\n border-color: #1565c0;\n }\n \n &.level-1 {\n background: #388e3c;\n border-color: #2e7d32;\n }\n \n &.level-2 {\n background: #f57c00;\n border-color: #ef6c00;\n }\n }\n }\n }\n }\n }\n \n .hierarchy-chart {\n flex: 1;\n min-height: 300px;\n overflow: hidden;\n position: relative;\n \n .chart-help {\n position: absolute;\n bottom: 10px;\n left: 10px;\n background: rgba(255, 255, 255, 0.9);\n padding: 6px 10px;\n border-radius: 4px;\n border: 1px solid #e0e0e0;\n z-index: 10;\n \n small {\n font-size: 11px;\n color: #666;\n display: flex;\n align-items: center;\n gap: 6px;\n \n i {\n color: #2196f3;\n }\n }\n }\n \n .empty-hierarchy {\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: center;\n height: 100%;\n padding: 40px 20px;\n text-align: center;\n color: #666;\n \n i {\n font-size: 64px;\n margin-bottom: 20px;\n opacity: 0.5;\n }\n \n h4 {\n margin: 0 0 12px 0;\n font-size: 18px;\n color: #333;\n }\n \n p {\n margin: 0 0 24px 0;\n font-size: 14px;\n color: #666;\n line-height: 1.5;\n }\n \n .create-subagent-btn {\n display: flex;\n align-items: center;\n gap: 8px;\n padding: 12px 20px;\n background: #2196f3;\n border: none;\n border-radius: 6px;\n color: white;\n font-size: 14px;\n font-weight: 500;\n cursor: pointer;\n transition: background 0.2s;\n \n &:hover {\n background: #1976d2;\n }\n }\n }\n }\n \n}\n\n// Prompts Section\n.prompts-section {\n display: flex;\n flex-direction: column;\n height: 100%;\n background: white;\n border-right: 1px solid #f0f0f0;\n \n .section-header {\n padding: 16px 20px;\n border-bottom: 1px solid #f0f0f0;\n display: flex;\n justify-content: space-between;\n align-items: center;\n flex-shrink: 0;\n \n h3 {\n margin: 0;\n font-size: 16px;\n font-weight: 600;\n color: #333;\n display: flex;\n align-items: center;\n gap: 8px;\n }\n \n .add-prompt-btn {\n display: flex;\n align-items: center;\n gap: 6px;\n padding: 6px 12px;\n background: #2196f3;\n border: none;\n border-radius: 4px;\n color: white;\n font-size: 12px;\n cursor: pointer;\n \n &:hover {\n background: #1976d2;\n }\n }\n }\n \n .prompts-list {\n flex: 1;\n overflow-y: auto;\n padding: 16px 20px;\n \n .empty-prompts {\n text-align: center;\n padding: 40px 20px;\n color: #666;\n \n i {\n font-size: 48px;\n margin-bottom: 16px;\n }\n \n p {\n margin: 0 0 20px 0;\n font-size: 14px;\n }\n \n .add-first-prompt-btn {\n display: inline-flex;\n align-items: center;\n gap: 8px;\n padding: 8px 16px;\n background: #2196f3;\n border: none;\n border-radius: 4px;\n color: white;\n cursor: pointer;\n \n &:hover {\n background: #1976d2;\n }\n }\n }\n \n .prompt-card {\n background: #f8f9fa;\n border: 1px solid #e0e0e0;\n border-radius: 4px;\n margin-bottom: 12px;\n \n .prompt-header {\n padding: 12px 16px;\n border-bottom: 1px solid #e9ecef;\n display: flex;\n justify-content: space-between;\n align-items: center;\n \n .prompt-info {\n h4 {\n margin: 0 0 4px 0;\n font-size: 14px;\n font-weight: 600;\n color: #333;\n }\n \n .prompt-type {\n font-size: 11px;\n padding: 2px 6px;\n background: #007bff;\n color: white;\n border-radius: 3px;\n text-transform: uppercase;\n }\n }\n \n .prompt-actions {\n display: flex;\n gap: 4px;\n \n .action-btn {\n padding: 4px 8px;\n background: none;\n border: 1px solid #e0e0e0;\n border-radius: 3px;\n color: #666;\n cursor: pointer;\n font-size: 12px;\n \n &:hover {\n background: #f0f0f0;\n border-color: #ccc;\n }\n \n &.danger:hover {\n background: #dc3545;\n border-color: #dc3545;\n color: white;\n }\n }\n }\n }\n \n .prompt-content {\n padding: 12px 16px;\n \n p {\n margin: 0;\n font-size: 12px;\n color: #666;\n line-height: 1.4;\n }\n }\n }\n }\n}\n\n// Properties Section\n.properties-section {\n display: flex;\n flex-direction: column;\n height: 100%;\n background: white;\n \n .section-header {\n padding: 16px 20px;\n border-bottom: 1px solid #f0f0f0;\n display: flex;\n justify-content: space-between;\n align-items: center;\n flex-shrink: 0;\n \n h3 {\n margin: 0;\n font-size: 16px;\n font-weight: 600;\n color: #333;\n display: flex;\n align-items: center;\n gap: 8px;\n }\n \n .save-btn {\n display: flex;\n align-items: center;\n gap: 6px;\n padding: 6px 12px;\n background: #28a745;\n border: none;\n border-radius: 4px;\n color: white;\n font-size: 12px;\n cursor: pointer;\n \n &:hover {\n background: #218838;\n }\n }\n }\n \n .properties-form {\n flex: 1;\n overflow-y: auto;\n padding: 20px;\n \n .form-group {\n margin-bottom: 16px;\n \n label {\n display: block;\n font-size: 12px;\n font-weight: 600;\n color: #333;\n margin-bottom: 4px;\n }\n \n .form-input, .form-select, .form-textarea {\n width: 100%;\n padding: 8px 12px;\n border: 1px solid #ddd;\n border-radius: 4px;\n font-size: 13px;\n background: white;\n box-sizing: border-box;\n \n &:focus {\n outline: none;\n border-color: #2196f3;\n }\n }\n \n .form-textarea {\n resize: vertical;\n min-height: 60px;\n }\n \n &.checkbox-group {\n .checkbox-label {\n display: flex;\n align-items: center;\n gap: 8px;\n cursor: pointer;\n font-size: 13px;\n font-weight: 500;\n \n input[type=\"checkbox\"] {\n width: auto;\n margin: 0;\n }\n }\n \n small {\n display: block;\n font-size: 11px;\n color: #666;\n margin-top: 4px;\n margin-left: 24px;\n }\n }\n }\n \n .form-row {\n display: grid;\n grid-template-columns: 1fr 1fr;\n gap: 16px;\n }\n }\n}\n\n@keyframes spin {\n 0% { transform: rotate(0deg); }\n 100% { transform: rotate(360deg); }\n}\n\n// Sub-Agent Creation Modal\n.modal-overlay {\n position: fixed;\n top: 0;\n left: 0;\n right: 0;\n bottom: 0;\n width: 100vw;\n height: 100vh;\n background: rgba(0, 0, 0, 0.5);\n display: flex;\n align-items: center;\n justify-content: center;\n z-index: 9999;\n padding: 20px;\n box-sizing: border-box;\n}\n\n.create-subagent-modal {\n background: white;\n border-radius: 8px;\n width: 100%;\n max-width: 500px;\n max-height: calc(100vh - 40px);\n min-height: 300px;\n display: flex;\n flex-direction: column;\n box-shadow: 0 10px 30px rgba(0, 0, 0, 0.3);\n position: relative;\n \n .modal-header {\n padding: 20px 24px;\n border-bottom: 1px solid #e9ecef;\n display: flex;\n justify-content: space-between;\n align-items: center;\n \n h3 {\n margin: 0;\n font-size: 18px;\n font-weight: 600;\n color: #333;\n display: flex;\n align-items: center;\n gap: 10px;\n }\n \n .close-btn {\n background: none;\n border: none;\n padding: 8px;\n cursor: pointer;\n color: #666;\n border-radius: 4px;\n \n &:hover {\n background: #f8f9fa;\n color: #333;\n }\n }\n }\n \n .modal-body {\n padding: 24px;\n flex: 1;\n overflow-y: auto;\n \n .error-message {\n background: #f8d7da;\n border: 1px solid #f5c6cb;\n border-radius: 6px;\n padding: 12px;\n margin-bottom: 20px;\n color: #721c24;\n font-size: 14px;\n display: flex;\n align-items: center;\n gap: 8px;\n \n i {\n color: #dc3545;\n }\n }\n \n .form-group {\n margin-bottom: 20px;\n \n label {\n display: block;\n font-size: 14px;\n font-weight: 600;\n color: #333;\n margin-bottom: 8px;\n }\n \n .form-input, .form-textarea {\n width: 100%;\n padding: 12px;\n border: 1px solid #ddd;\n border-radius: 6px;\n font-size: 14px;\n background: white;\n box-sizing: border-box;\n transition: border-color 0.2s;\n \n &:focus {\n outline: none;\n border-color: #2196f3;\n }\n \n &::placeholder {\n color: #999;\n }\n }\n \n .form-textarea {\n resize: vertical;\n min-height: 80px;\n font-family: inherit;\n }\n }\n \n .parent-info {\n background: #f8f9fa;\n border: 1px solid #e9ecef;\n border-radius: 6px;\n padding: 12px;\n font-size: 14px;\n color: #666;\n \n strong {\n color: #333;\n }\n }\n }\n \n .modal-footer {\n padding: 20px 24px;\n border-top: 1px solid #e9ecef;\n display: flex;\n justify-content: flex-end;\n gap: 12px;\n \n .cancel-btn, .create-btn {\n padding: 10px 20px;\n border: 1px solid;\n border-radius: 6px;\n font-size: 14px;\n font-weight: 500;\n cursor: pointer;\n transition: all 0.2s;\n \n &:disabled {\n opacity: 0.5;\n cursor: not-allowed;\n }\n }\n \n .cancel-btn {\n background: white;\n border-color: #ddd;\n color: #666;\n \n &:hover:not(:disabled) {\n background: #f8f9fa;\n border-color: #ccc;\n }\n }\n \n .create-btn {\n background: #2196f3;\n border-color: #2196f3;\n color: white;\n display: flex;\n align-items: center;\n gap: 8px;\n \n &:hover:not(:disabled) {\n background: #1976d2;\n border-color: #1976d2;\n }\n \n .loading-spinner-sm {\n width: 14px;\n height: 14px;\n border: 2px solid transparent;\n border-top-color: currentColor;\n border-radius: 50%;\n animation: spin 1s linear infinite;\n }\n }\n }\n}"] }]
|
|
858
858
|
}], null, { agentId: [{
|
|
859
859
|
type: Input
|
|
860
860
|
}], close: [{
|
|
861
861
|
type: Output
|
|
862
862
|
}], openAgent: [{
|
|
863
863
|
type: Output
|
|
864
|
+
}], openEntityRecord: [{
|
|
865
|
+
type: Output
|
|
864
866
|
}], hierarchyChartRef: [{
|
|
865
867
|
type: ViewChild,
|
|
866
868
|
args: ['hierarchyChart', { static: false }]
|