@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.
Files changed (92) hide show
  1. package/README.md +105 -2
  2. package/dist/AI/ai-dashboard.component.d.ts +2 -0
  3. package/dist/AI/ai-dashboard.component.d.ts.map +1 -1
  4. package/dist/AI/ai-dashboard.component.js +66 -43
  5. package/dist/AI/ai-dashboard.component.js.map +1 -1
  6. package/dist/AI/components/agents/agent-configuration.component.js +45 -58
  7. package/dist/AI/components/agents/agent-configuration.component.js.map +1 -1
  8. package/dist/AI/components/agents/agent-editor.component.d.ts +6 -1
  9. package/dist/AI/components/agents/agent-editor.component.d.ts.map +1 -1
  10. package/dist/AI/components/agents/agent-editor.component.js +368 -366
  11. package/dist/AI/components/agents/agent-editor.component.js.map +1 -1
  12. package/dist/AI/components/agents/agent-filter-panel.component.js +83 -85
  13. package/dist/AI/components/agents/agent-filter-panel.component.js.map +1 -1
  14. package/dist/AI/components/charts/performance-heatmap.component.d.ts +66 -0
  15. package/dist/AI/components/charts/performance-heatmap.component.d.ts.map +1 -0
  16. package/dist/AI/components/charts/performance-heatmap.component.js +428 -0
  17. package/dist/AI/components/charts/performance-heatmap.component.js.map +1 -0
  18. package/dist/AI/components/charts/time-series-chart.component.d.ts +66 -0
  19. package/dist/AI/components/charts/time-series-chart.component.d.ts.map +1 -0
  20. package/dist/AI/components/charts/time-series-chart.component.js +547 -0
  21. package/dist/AI/components/charts/time-series-chart.component.js.map +1 -0
  22. package/dist/AI/components/execution-monitoring.component.d.ts +157 -5
  23. package/dist/AI/components/execution-monitoring.component.d.ts.map +1 -1
  24. package/dist/AI/components/execution-monitoring.component.js +2032 -20
  25. package/dist/AI/components/execution-monitoring.component.js.map +1 -1
  26. package/dist/AI/components/models/model-management.component.js +211 -237
  27. package/dist/AI/components/models/model-management.component.js.map +1 -1
  28. package/dist/AI/components/prompts/model-prompt-priority-matrix.component.js +208 -226
  29. package/dist/AI/components/prompts/model-prompt-priority-matrix.component.js.map +1 -1
  30. package/dist/AI/components/prompts/prompt-filter-panel.component.js +97 -99
  31. package/dist/AI/components/prompts/prompt-filter-panel.component.js.map +1 -1
  32. package/dist/AI/components/prompts/prompt-management.component.js +381 -424
  33. package/dist/AI/components/prompts/prompt-management.component.js.map +1 -1
  34. package/dist/AI/components/prompts/prompt-version-control.component.js +173 -191
  35. package/dist/AI/components/prompts/prompt-version-control.component.js.map +1 -1
  36. package/dist/AI/components/system/system-config-filter-panel.component.js +85 -87
  37. package/dist/AI/components/system/system-config-filter-panel.component.js.map +1 -1
  38. package/dist/AI/components/system/system-configuration.component.js +86 -99
  39. package/dist/AI/components/system/system-configuration.component.js.map +1 -1
  40. package/dist/AI/components/widgets/kpi-card.component.d.ts +25 -0
  41. package/dist/AI/components/widgets/kpi-card.component.d.ts.map +1 -0
  42. package/dist/AI/components/widgets/kpi-card.component.js +163 -0
  43. package/dist/AI/components/widgets/kpi-card.component.js.map +1 -0
  44. package/dist/AI/components/widgets/live-execution-widget.component.d.ts +25 -0
  45. package/dist/AI/components/widgets/live-execution-widget.component.d.ts.map +1 -0
  46. package/dist/AI/components/widgets/live-execution-widget.component.js +298 -0
  47. package/dist/AI/components/widgets/live-execution-widget.component.js.map +1 -0
  48. package/dist/AI/index.d.ts +7 -0
  49. package/dist/AI/index.d.ts.map +1 -0
  50. package/dist/AI/index.js +9 -0
  51. package/dist/AI/index.js.map +1 -0
  52. package/dist/AI/services/ai-instrumentation.service.d.ts +109 -0
  53. package/dist/AI/services/ai-instrumentation.service.d.ts.map +1 -0
  54. package/dist/AI/services/ai-instrumentation.service.js +490 -0
  55. package/dist/AI/services/ai-instrumentation.service.js.map +1 -0
  56. package/dist/Actions/actions-management-dashboard.component.js +40 -41
  57. package/dist/Actions/actions-management-dashboard.component.js.map +1 -1
  58. package/dist/Actions/components/actions-list-view.component.js +117 -134
  59. package/dist/Actions/components/actions-list-view.component.js.map +1 -1
  60. package/dist/Actions/components/actions-overview.component.js +274 -296
  61. package/dist/Actions/components/actions-overview.component.js.map +1 -1
  62. package/dist/Actions/components/categories-list-view.component.js +12 -14
  63. package/dist/Actions/components/categories-list-view.component.js.map +1 -1
  64. package/dist/Actions/components/code-management.component.js +12 -14
  65. package/dist/Actions/components/code-management.component.js.map +1 -1
  66. package/dist/Actions/components/entity-integration.component.js +12 -14
  67. package/dist/Actions/components/entity-integration.component.js.map +1 -1
  68. package/dist/Actions/components/execution-monitoring.component.js +238 -256
  69. package/dist/Actions/components/execution-monitoring.component.js.map +1 -1
  70. package/dist/Actions/components/executions-list-view.component.js +12 -14
  71. package/dist/Actions/components/executions-list-view.component.js.map +1 -1
  72. package/dist/Actions/components/scheduled-actions.component.js +12 -14
  73. package/dist/Actions/components/scheduled-actions.component.js.map +1 -1
  74. package/dist/Actions/components/security-permissions.component.js +12 -14
  75. package/dist/Actions/components/security-permissions.component.js.map +1 -1
  76. package/dist/EntityAdmin/components/entity-details.component.js +105 -107
  77. package/dist/EntityAdmin/components/entity-details.component.js.map +1 -1
  78. package/dist/EntityAdmin/components/entity-filter-panel.component.js +100 -102
  79. package/dist/EntityAdmin/components/entity-filter-panel.component.js.map +1 -1
  80. package/dist/EntityAdmin/components/erd-composite.component.js +84 -100
  81. package/dist/EntityAdmin/components/erd-composite.component.js.map +1 -1
  82. package/dist/EntityAdmin/components/erd-diagram.component.js +50 -50
  83. package/dist/EntityAdmin/components/erd-diagram.component.js.map +1 -1
  84. package/dist/EntityAdmin/entity-admin-dashboard.component.js +45 -49
  85. package/dist/EntityAdmin/entity-admin-dashboard.component.js.map +1 -1
  86. package/dist/generic/base-dashboard.js +28 -40
  87. package/dist/generic/base-dashboard.js.map +1 -1
  88. package/dist/module.d.ts +16 -12
  89. package/dist/module.d.ts.map +1 -1
  90. package/dist/module.js +36 -15
  91. package/dist/module.js.map +1 -1
  92. 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 AgentEditorComponent_Conditional_6_Conditional_3_Template(rf, ctx) { if (rf & 1) {
19
- i0.ɵɵelementStart(0, "span", 12);
20
- i0.ɵɵelement(1, "i", 13);
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 ctx_r0 = i0.ɵɵnextContext(2);
23
+ const ctx_r1 = i0.ɵɵnextContext(2);
25
24
  i0.ɵɵadvance(2);
26
- i0.ɵɵtextInterpolate1(" Child of ", ctx_r0.currentAgent.Parent, " ");
25
+ i0.ɵɵtextInterpolate1(" Child of ", ctx_r1.currentAgent.Parent, " ");
27
26
  } }
28
- function AgentEditorComponent_Conditional_6_Template(rf, ctx) { if (rf & 1) {
29
- i0.ɵɵelementStart(0, "div", 6)(1, "h2");
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, AgentEditorComponent_Conditional_6_Conditional_3_Template, 3, 1, "span", 12);
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 ctx_r0 = i0.ɵɵnextContext();
34
+ const ctx_r1 = i0.ɵɵnextContext();
36
35
  i0.ɵɵadvance(2);
37
- i0.ɵɵtextInterpolate(ctx_r0.currentAgent.Name);
36
+ i0.ɵɵtextInterpolate(ctx_r1.currentAgent.Name);
38
37
  i0.ɵɵadvance();
39
- i0.ɵɵconditional(ctx_r0.currentAgent.Parent ? 3 : -1);
38
+ i0.ɵɵconditional(ctx_r1.currentAgent.Parent ? 3 : -1);
40
39
  } }
41
- function AgentEditorComponent_Conditional_7_Template(rf, ctx) { if (rf & 1) {
42
- const _r2 = i0.ɵɵgetCurrentView();
43
- i0.ɵɵelementStart(0, "div", 7)(1, "button", 14);
44
- i0.ɵɵlistener("click", function AgentEditorComponent_Conditional_7_Template_button_click_1_listener() { i0.ɵɵrestoreView(_r2); const ctx_r0 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r0.setActiveTab("hierarchy")); });
45
- i0.ɵɵelement(2, "i", 15);
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", 14);
49
- i0.ɵɵlistener("click", function AgentEditorComponent_Conditional_7_Template_button_click_4_listener() { i0.ɵɵrestoreView(_r2); const ctx_r0 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r0.setActiveTab("prompts")); });
50
- i0.ɵɵelement(5, "i", 16);
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", 14);
54
- i0.ɵɵlistener("click", function AgentEditorComponent_Conditional_7_Template_button_click_7_listener() { i0.ɵɵrestoreView(_r2); const ctx_r0 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r0.setActiveTab("properties")); });
55
- i0.ɵɵelement(8, "i", 17);
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 ctx_r0 = i0.ɵɵnextContext();
58
+ const ctx_r1 = i0.ɵɵnextContext();
60
59
  i0.ɵɵadvance();
61
- i0.ɵɵclassProp("active", ctx_r0.activeTab === "hierarchy");
60
+ i0.ɵɵclassProp("active", ctx_r1.activeTab === "hierarchy");
62
61
  i0.ɵɵadvance(3);
63
- i0.ɵɵclassProp("active", ctx_r0.activeTab === "prompts");
62
+ i0.ɵɵclassProp("active", ctx_r1.activeTab === "prompts");
64
63
  i0.ɵɵadvance(3);
65
- i0.ɵɵclassProp("active", ctx_r0.activeTab === "properties");
64
+ i0.ɵɵclassProp("active", ctx_r1.activeTab === "properties");
66
65
  } }
67
- function AgentEditorComponent_Conditional_8_Template(rf, ctx) { if (rf & 1) {
68
- i0.ɵɵelementStart(0, "div", 8)(1, "div", 18)(2, "div", 19);
69
- i0.ɵɵelement(3, "div", 20)(4, "div", 20)(5, "div", 20);
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", 21);
70
+ i0.ɵɵelementStart(6, "div", 25);
72
71
  i0.ɵɵtext(7, "Loading agent data...");
73
72
  i0.ɵɵelementEnd()()();
74
73
  } }
75
- function AgentEditorComponent_Conditional_9_Template(rf, ctx) { if (rf & 1) {
76
- const _r3 = i0.ɵɵgetCurrentView();
77
- i0.ɵɵelementStart(0, "div", 9)(1, "div", 22);
78
- i0.ɵɵelement(2, "i", 23);
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", 24);
86
- i0.ɵɵlistener("click", function AgentEditorComponent_Conditional_9_Template_button_click_7_listener() { i0.ɵɵrestoreView(_r3); const ctx_r0 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r0.loadAgentData()); });
87
- i0.ɵɵelement(8, "i", 25);
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 ctx_r0 = i0.ɵɵnextContext();
90
+ const ctx_r1 = i0.ɵɵnextContext();
92
91
  i0.ɵɵadvance(6);
93
- i0.ɵɵtextInterpolate(ctx_r0.error);
92
+ i0.ɵɵtextInterpolate(ctx_r1.error);
94
93
  } }
95
- function AgentEditorComponent_Conditional_10_Conditional_1_Conditional_28_Template(rf, ctx) { if (rf & 1) {
96
- i0.ɵɵelementStart(0, "div", 44)(1, "small");
97
- i0.ɵɵelement(2, "i", 46);
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 AgentEditorComponent_Conditional_10_Conditional_1_Conditional_29_Template(rf, ctx) { if (rf & 1) {
102
- const _r5 = i0.ɵɵgetCurrentView();
103
- i0.ɵɵelementStart(0, "div", 45);
104
- i0.ɵɵelement(1, "i", 15);
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", 47);
112
- i0.ɵɵlistener("click", function AgentEditorComponent_Conditional_10_Conditional_1_Conditional_29_Template_button_click_6_listener() { i0.ɵɵrestoreView(_r5); const ctx_r0 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r0.openCreateSubAgent()); });
113
- i0.ɵɵelement(7, "i", 33);
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 AgentEditorComponent_Conditional_10_Conditional_1_Template(rf, ctx) { if (rf & 1) {
118
- const _r4 = i0.ɵɵgetCurrentView();
119
- i0.ɵɵelementStart(0, "div", 26)(1, "div", 29)(2, "h3");
120
- i0.ɵɵelement(3, "i", 15);
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", 30)(6, "div", 31)(7, "button", 32);
124
- i0.ɵɵlistener("click", function AgentEditorComponent_Conditional_10_Conditional_1_Template_button_click_7_listener() { i0.ɵɵrestoreView(_r4); const ctx_r0 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r0.zoomIn()); });
125
- i0.ɵɵelement(8, "i", 33);
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", 34);
128
- i0.ɵɵlistener("click", function AgentEditorComponent_Conditional_10_Conditional_1_Template_button_click_9_listener() { i0.ɵɵrestoreView(_r4); const ctx_r0 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r0.zoomOut()); });
129
- i0.ɵɵelement(10, "i", 35);
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", 36);
132
- i0.ɵɵlistener("click", function AgentEditorComponent_Conditional_10_Conditional_1_Template_button_click_11_listener() { i0.ɵɵrestoreView(_r4); const ctx_r0 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r0.resetZoom()); });
133
- i0.ɵɵelement(12, "i", 37);
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", 38)(14, "div", 39);
136
- i0.ɵɵelement(15, "div", 40);
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", 39);
141
- i0.ɵɵelement(19, "div", 41);
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", 39);
146
- i0.ɵɵelement(23, "div", 42);
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", 43, 0);
151
- i0.ɵɵtemplate(28, AgentEditorComponent_Conditional_10_Conditional_1_Conditional_28_Template, 4, 0, "div", 44)(29, AgentEditorComponent_Conditional_10_Conditional_1_Conditional_29_Template, 9, 0, "div", 45);
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 ctx_r0 = i0.ɵɵnextContext(2);
153
+ const ctx_r1 = i0.ɵɵnextContext(2);
155
154
  i0.ɵɵadvance(28);
156
- i0.ɵɵconditional(ctx_r0.hierarchyData && (ctx_r0.hasChildren() || ctx_r0.hasParent()) ? 28 : -1);
155
+ i0.ɵɵconditional(ctx_r1.hierarchyData && (ctx_r1.hasChildren() || ctx_r1.hasParent()) ? 28 : -1);
157
156
  i0.ɵɵadvance();
158
- i0.ɵɵconditional(!ctx_r0.hierarchyData || !ctx_r0.hasChildren() && !ctx_r0.hasParent() ? 29 : -1);
157
+ i0.ɵɵconditional(!ctx_r1.hierarchyData || !ctx_r1.hasChildren() && !ctx_r1.hasParent() ? 29 : -1);
159
158
  } }
160
- function AgentEditorComponent_Conditional_10_Conditional_2_Conditional_9_Template(rf, ctx) { if (rf & 1) {
161
- i0.ɵɵelementStart(0, "div", 50);
162
- i0.ɵɵelement(1, "i", 16);
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", 51);
167
- i0.ɵɵelement(5, "i", 33);
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 AgentEditorComponent_Conditional_10_Conditional_2_Conditional_10_For_1_Template(rf, ctx) { if (rf & 1) {
172
- i0.ɵɵelementStart(0, "div", 52)(1, "div", 53)(2, "div", 54)(3, "h4");
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", 55);
174
+ i0.ɵɵelementStart(5, "span", 59);
176
175
  i0.ɵɵtext(6);
177
176
  i0.ɵɵelementEnd()();
178
- i0.ɵɵelementStart(7, "div", 56)(8, "button", 57);
179
- i0.ɵɵelement(9, "i", 58);
177
+ i0.ɵɵelementStart(7, "div", 60)(8, "button", 61);
178
+ i0.ɵɵelement(9, "i", 62);
180
179
  i0.ɵɵelementEnd();
181
- i0.ɵɵelementStart(10, "button", 59);
182
- i0.ɵɵelement(11, "i", 60);
180
+ i0.ɵɵelementStart(10, "button", 63);
181
+ i0.ɵɵelement(11, "i", 64);
183
182
  i0.ɵɵelementEnd()()();
184
- i0.ɵɵelementStart(12, "div", 61)(13, "p");
183
+ i0.ɵɵelementStart(12, "div", 65)(13, "p");
185
184
  i0.ɵɵtext(14);
186
185
  i0.ɵɵelementEnd()()();
187
186
  } if (rf & 2) {
188
- const prompt_r6 = ctx.$implicit;
187
+ const prompt_r7 = ctx.$implicit;
189
188
  i0.ɵɵadvance(4);
190
- i0.ɵɵtextInterpolate(prompt_r6.name);
189
+ i0.ɵɵtextInterpolate(prompt_r7.name);
191
190
  i0.ɵɵadvance(2);
192
- i0.ɵɵtextInterpolate(prompt_r6.type);
191
+ i0.ɵɵtextInterpolate(prompt_r7.type);
193
192
  i0.ɵɵadvance(8);
194
- i0.ɵɵtextInterpolate(prompt_r6.content);
193
+ i0.ɵɵtextInterpolate(prompt_r7.content);
195
194
  } }
196
- function AgentEditorComponent_Conditional_10_Conditional_2_Conditional_10_Template(rf, ctx) { if (rf & 1) {
197
- i0.ɵɵrepeaterCreate(0, AgentEditorComponent_Conditional_10_Conditional_2_Conditional_10_For_1_Template, 15, 3, "div", 52, _forTrack0);
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 ctx_r0 = i0.ɵɵnextContext(3);
200
- i0.ɵɵrepeater(ctx_r0.agentPrompts);
198
+ const ctx_r1 = i0.ɵɵnextContext(3);
199
+ i0.ɵɵrepeater(ctx_r1.agentPrompts);
201
200
  } }
202
- function AgentEditorComponent_Conditional_10_Conditional_2_Template(rf, ctx) { if (rf & 1) {
203
- i0.ɵɵelementStart(0, "div", 27)(1, "div", 29)(2, "h3");
204
- i0.ɵɵelement(3, "i", 16);
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", 48);
208
- i0.ɵɵelement(6, "i", 33);
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", 49);
212
- i0.ɵɵtemplate(9, AgentEditorComponent_Conditional_10_Conditional_2_Conditional_9_Template, 7, 0, "div", 50)(10, AgentEditorComponent_Conditional_10_Conditional_2_Conditional_10_Template, 2, 0);
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 ctx_r0 = i0.ɵɵnextContext(2);
214
+ const ctx_r1 = i0.ɵɵnextContext(2);
216
215
  i0.ɵɵadvance(9);
217
- i0.ɵɵconditional(ctx_r0.agentPrompts.length === 0 ? 9 : 10);
216
+ i0.ɵɵconditional(ctx_r1.agentPrompts.length === 0 ? 9 : 10);
218
217
  } }
219
- function AgentEditorComponent_Conditional_10_Conditional_3_Conditional_44_Template(rf, ctx) { if (rf & 1) {
220
- i0.ɵɵelementStart(0, "div", 68)(1, "div", 65)(2, "label");
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", 77);
222
+ i0.ɵɵelement(4, "input", 81);
224
223
  i0.ɵɵelementEnd();
225
- i0.ɵɵelementStart(5, "div", 65)(6, "label");
224
+ i0.ɵɵelementStart(5, "div", 69)(6, "label");
226
225
  i0.ɵɵtext(7, "Retention Count");
227
226
  i0.ɵɵelementEnd();
228
- i0.ɵɵelement(8, "input", 78);
227
+ i0.ɵɵelement(8, "input", 82);
229
228
  i0.ɵɵelementEnd()();
230
229
  } if (rf & 2) {
231
- const ctx_r0 = i0.ɵɵnextContext(3);
230
+ const ctx_r1 = i0.ɵɵnextContext(3);
232
231
  i0.ɵɵadvance(4);
233
- i0.ɵɵproperty("value", ctx_r0.currentAgent.ContextCompressionMessageThreshold);
232
+ i0.ɵɵproperty("value", ctx_r1.currentAgent.ContextCompressionMessageThreshold);
234
233
  i0.ɵɵadvance(4);
235
- i0.ɵɵproperty("value", ctx_r0.currentAgent.ContextCompressionMessageRetentionCount);
234
+ i0.ɵɵproperty("value", ctx_r1.currentAgent.ContextCompressionMessageRetentionCount);
236
235
  } }
237
- function AgentEditorComponent_Conditional_10_Conditional_3_Template(rf, ctx) { if (rf & 1) {
238
- i0.ɵɵelementStart(0, "div", 28)(1, "div", 29)(2, "h3");
239
- i0.ɵɵelement(3, "i", 17);
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", 62);
243
- i0.ɵɵelement(6, "i", 63);
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", 64)(9, "div", 65)(10, "label");
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", 66);
248
+ i0.ɵɵelement(12, "input", 70);
250
249
  i0.ɵɵelementEnd();
251
- i0.ɵɵelementStart(13, "div", 65)(14, "label");
250
+ i0.ɵɵelementStart(13, "div", 69)(14, "label");
252
251
  i0.ɵɵtext(15, "Description");
253
252
  i0.ɵɵelementEnd();
254
- i0.ɵɵelement(16, "textarea", 67);
253
+ i0.ɵɵelement(16, "textarea", 71);
255
254
  i0.ɵɵelementEnd();
256
- i0.ɵɵelementStart(17, "div", 68)(18, "div", 65)(19, "label");
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", 69)(22, "option", 70);
258
+ i0.ɵɵelementStart(21, "select", 73)(22, "option", 74);
260
259
  i0.ɵɵtext(23, "Sequential");
261
260
  i0.ɵɵelementEnd();
262
- i0.ɵɵelementStart(24, "option", 71);
261
+ i0.ɵɵelementStart(24, "option", 75);
263
262
  i0.ɵɵtext(25, "Parallel");
264
263
  i0.ɵɵelementEnd()()();
265
- i0.ɵɵelementStart(26, "div", 65)(27, "label");
264
+ i0.ɵɵelementStart(26, "div", 69)(27, "label");
266
265
  i0.ɵɵtext(28, "Execution Order");
267
266
  i0.ɵɵelementEnd();
268
- i0.ɵɵelement(29, "input", 72);
267
+ i0.ɵɵelement(29, "input", 76);
269
268
  i0.ɵɵelementEnd()();
270
- i0.ɵɵelementStart(30, "div", 73)(31, "label", 74);
271
- i0.ɵɵelement(32, "input", 75)(33, "span", 76);
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", 73)(38, "label", 74);
278
- i0.ɵɵelement(39, "input", 75)(40, "span", 76);
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, AgentEditorComponent_Conditional_10_Conditional_3_Conditional_44_Template, 9, 2, "div", 68);
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 ctx_r0 = i0.ɵɵnextContext(2);
286
+ const ctx_r1 = i0.ɵɵnextContext(2);
288
287
  i0.ɵɵadvance(12);
289
- i0.ɵɵproperty("value", ctx_r0.currentAgent.Name);
288
+ i0.ɵɵproperty("value", ctx_r1.currentAgent.Name);
290
289
  i0.ɵɵadvance(4);
291
- i0.ɵɵproperty("value", ctx_r0.currentAgent.Description);
290
+ i0.ɵɵproperty("value", ctx_r1.currentAgent.Description);
292
291
  i0.ɵɵadvance(5);
293
- i0.ɵɵproperty("value", ctx_r0.currentAgent.ExecutionMode);
292
+ i0.ɵɵproperty("value", ctx_r1.currentAgent.ExecutionMode);
294
293
  i0.ɵɵadvance(8);
295
- i0.ɵɵproperty("value", ctx_r0.currentAgent.ExecutionOrder);
294
+ i0.ɵɵproperty("value", ctx_r1.currentAgent.ExecutionOrder);
296
295
  i0.ɵɵadvance(3);
297
- i0.ɵɵproperty("checked", ctx_r0.currentAgent.ExposeAsAction);
296
+ i0.ɵɵproperty("checked", ctx_r1.currentAgent.ExposeAsAction);
298
297
  i0.ɵɵadvance(7);
299
- i0.ɵɵproperty("checked", ctx_r0.currentAgent.EnableContextCompression);
298
+ i0.ɵɵproperty("checked", ctx_r1.currentAgent.EnableContextCompression);
300
299
  i0.ɵɵadvance(5);
301
- i0.ɵɵconditional(ctx_r0.currentAgent.EnableContextCompression ? 44 : -1);
300
+ i0.ɵɵconditional(ctx_r1.currentAgent.EnableContextCompression ? 44 : -1);
302
301
  } }
303
- function AgentEditorComponent_Conditional_10_Template(rf, ctx) { if (rf & 1) {
304
- i0.ɵɵelementStart(0, "div", 10);
305
- i0.ɵɵtemplate(1, AgentEditorComponent_Conditional_10_Conditional_1_Template, 30, 2, "div", 26)(2, AgentEditorComponent_Conditional_10_Conditional_2_Template, 11, 1, "div", 27)(3, AgentEditorComponent_Conditional_10_Conditional_3_Template, 45, 7, "div", 28);
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 ctx_r0 = i0.ɵɵnextContext();
307
+ const ctx_r1 = i0.ɵɵnextContext();
309
308
  i0.ɵɵadvance();
310
- i0.ɵɵconditional(ctx_r0.activeTab === "hierarchy" ? 1 : -1);
309
+ i0.ɵɵconditional(ctx_r1.activeTab === "hierarchy" ? 1 : -1);
311
310
  i0.ɵɵadvance();
312
- i0.ɵɵconditional(ctx_r0.activeTab === "prompts" ? 2 : -1);
311
+ i0.ɵɵconditional(ctx_r1.activeTab === "prompts" ? 2 : -1);
313
312
  i0.ɵɵadvance();
314
- i0.ɵɵconditional(ctx_r0.activeTab === "properties" ? 3 : -1);
313
+ i0.ɵɵconditional(ctx_r1.activeTab === "properties" ? 3 : -1);
315
314
  } }
316
- function AgentEditorComponent_Conditional_11_Conditional_9_Template(rf, ctx) { if (rf & 1) {
317
- i0.ɵɵelementStart(0, "div", 85);
318
- i0.ɵɵelement(1, "i", 23);
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 ctx_r0 = i0.ɵɵnextContext(2);
321
+ const ctx_r1 = i0.ɵɵnextContext(2);
323
322
  i0.ɵɵadvance(2);
324
- i0.ɵɵtextInterpolate1(" ", ctx_r0.error, " ");
323
+ i0.ɵɵtextInterpolate1(" ", ctx_r1.error, " ");
325
324
  } }
326
- function AgentEditorComponent_Conditional_11_Conditional_26_Template(rf, ctx) { if (rf & 1) {
327
- i0.ɵɵelement(0, "span", 92);
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 AgentEditorComponent_Conditional_11_Conditional_27_Template(rf, ctx) { if (rf & 1) {
331
- i0.ɵɵelement(0, "i", 33);
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 AgentEditorComponent_Conditional_11_Template(rf, ctx) { if (rf & 1) {
335
- const _r7 = i0.ɵɵgetCurrentView();
336
- i0.ɵɵelementStart(0, "div", 79);
337
- i0.ɵɵlistener("click", function AgentEditorComponent_Conditional_11_Template_div_click_0_listener() { i0.ɵɵrestoreView(_r7); const ctx_r0 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r0.closeCreateSubAgent()); });
338
- i0.ɵɵelementStart(1, "div", 80);
339
- i0.ɵɵlistener("click", function AgentEditorComponent_Conditional_11_Template_div_click_1_listener($event) { i0.ɵɵrestoreView(_r7); return i0.ɵɵresetView($event.stopPropagation()); });
340
- i0.ɵɵelementStart(2, "div", 81)(3, "h3");
341
- i0.ɵɵelement(4, "i", 33);
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", 82);
345
- i0.ɵɵlistener("click", function AgentEditorComponent_Conditional_11_Template_button_click_6_listener() { i0.ɵɵrestoreView(_r7); const ctx_r0 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r0.closeCreateSubAgent()); });
346
- i0.ɵɵelement(7, "i", 83);
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", 84);
349
- i0.ɵɵtemplate(9, AgentEditorComponent_Conditional_11_Conditional_9_Template, 3, 1, "div", 85);
350
- i0.ɵɵelementStart(10, "div", 65)(11, "label");
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", 86);
354
- i0.ɵɵtwoWayListener("ngModelChange", function AgentEditorComponent_Conditional_11_Template_input_ngModelChange_13_listener($event) { i0.ɵɵrestoreView(_r7); const ctx_r0 = i0.ɵɵnextContext(); i0.ɵɵtwoWayBindingSet(ctx_r0.newSubAgentName, $event) || (ctx_r0.newSubAgentName = $event); return i0.ɵɵresetView($event); });
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", 65)(15, "label");
355
+ i0.ɵɵelementStart(14, "div", 69)(15, "label");
357
356
  i0.ɵɵtext(16, "Description");
358
357
  i0.ɵɵelementEnd();
359
- i0.ɵɵelementStart(17, "textarea", 87);
360
- i0.ɵɵtwoWayListener("ngModelChange", function AgentEditorComponent_Conditional_11_Template_textarea_ngModelChange_17_listener($event) { i0.ɵɵrestoreView(_r7); const ctx_r0 = i0.ɵɵnextContext(); i0.ɵɵtwoWayBindingSet(ctx_r0.newSubAgentDescription, $event) || (ctx_r0.newSubAgentDescription = $event); return i0.ɵɵresetView($event); });
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", 88)(19, "strong");
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", 89)(23, "button", 90);
368
- i0.ɵɵlistener("click", function AgentEditorComponent_Conditional_11_Template_button_click_23_listener() { i0.ɵɵrestoreView(_r7); const ctx_r0 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r0.closeCreateSubAgent()); });
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", 91);
372
- i0.ɵɵlistener("click", function AgentEditorComponent_Conditional_11_Template_button_click_25_listener() { i0.ɵɵrestoreView(_r7); const ctx_r0 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r0.createSubAgent()); });
373
- i0.ɵɵtemplate(26, AgentEditorComponent_Conditional_11_Conditional_26_Template, 2, 0)(27, AgentEditorComponent_Conditional_11_Conditional_27_Template, 2, 0);
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 ctx_r0 = i0.ɵɵnextContext();
375
+ const ctx_r1 = i0.ɵɵnextContext();
377
376
  i0.ɵɵadvance(9);
378
- i0.ɵɵconditional(ctx_r0.error ? 9 : -1);
377
+ i0.ɵɵconditional(ctx_r1.error ? 9 : -1);
379
378
  i0.ɵɵadvance(4);
380
- i0.ɵɵtwoWayProperty("ngModel", ctx_r0.newSubAgentName);
381
- i0.ɵɵproperty("disabled", ctx_r0.isLoading);
379
+ i0.ɵɵtwoWayProperty("ngModel", ctx_r1.newSubAgentName);
380
+ i0.ɵɵproperty("disabled", ctx_r1.isLoading);
382
381
  i0.ɵɵadvance(4);
383
- i0.ɵɵtwoWayProperty("ngModel", ctx_r0.newSubAgentDescription);
384
- i0.ɵɵproperty("disabled", ctx_r0.isLoading);
382
+ i0.ɵɵtwoWayProperty("ngModel", ctx_r1.newSubAgentDescription);
383
+ i0.ɵɵproperty("disabled", ctx_r1.isLoading);
385
384
  i0.ɵɵadvance(4);
386
- i0.ɵɵtextInterpolate1(" ", ctx_r0.currentAgent == null ? null : ctx_r0.currentAgent.Name, " ");
385
+ i0.ɵɵtextInterpolate1(" ", ctx_r1.currentAgent == null ? null : ctx_r1.currentAgent.Name, " ");
387
386
  i0.ɵɵadvance(2);
388
- i0.ɵɵproperty("disabled", ctx_r0.isLoading);
387
+ i0.ɵɵproperty("disabled", ctx_r1.isLoading);
389
388
  i0.ɵɵadvance(2);
390
- i0.ɵɵproperty("disabled", !ctx_r0.newSubAgentName.trim() || ctx_r0.isLoading);
389
+ i0.ɵɵproperty("disabled", !ctx_r1.newSubAgentName.trim() || ctx_r1.isLoading);
391
390
  i0.ɵɵadvance();
392
- i0.ɵɵconditional(ctx_r0.isLoading ? 26 : 27);
391
+ i0.ɵɵconditional(ctx_r1.isLoading ? 26 : 27);
393
392
  } }
394
393
  export class AgentEditorComponent {
395
- constructor() {
396
- this.agentId = null;
397
- this.close = new EventEmitter();
398
- this.openAgent = new EventEmitter();
399
- this.isLoading = false;
400
- this.error = null;
401
- this.currentAgent = null;
402
- this.allAgents = [];
403
- this.hierarchyData = null;
404
- this.selectedNode = null;
405
- this.agentPrompts = [];
406
- // Tab settings
407
- this.activeTab = 'hierarchy';
408
- // Legacy layout settings (keeping for compatibility)
409
- this.showHierarchy = true;
410
- this.showPrompts = true;
411
- this.showProperties = true;
412
- // Sub-agent creation
413
- this.showCreateSubAgent = false;
414
- this.newSubAgentName = '';
415
- this.newSubAgentDescription = '';
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
- return __awaiter(this, void 0, void 0, function* () {
433
- try {
434
- this.isLoading = true;
435
- this.error = null;
436
- // Load all agents to build hierarchy
437
- const rv = new RunView();
438
- const result = yield rv.RunView({
439
- EntityName: 'AI Agents',
440
- ExtraFilter: '',
441
- OrderBy: 'Name',
442
- MaxRows: 1000
443
- });
444
- this.allAgents = result.Results;
445
- this.currentAgent = this.allAgents.find(a => a.ID === this.agentId) || null;
446
- if (this.currentAgent) {
447
- this.buildHierarchy();
448
- this.loadAgentPrompts();
449
- // Initialize chart after data is loaded
450
- setTimeout(() => {
451
- if (this.hierarchyChartRef) {
452
- this.initializeChart();
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
- return __awaiter(this, void 0, void 0, function* () {
519
- if (!this.currentAgent)
520
- return;
521
- try {
522
- // This would load prompts associated with the agent
523
- // For now, using mock data structure
524
- this.agentPrompts = [
525
- { id: '1', name: 'System Prompt', content: 'Default system instructions...', type: 'system' },
526
- { id: '2', name: 'User Prompt', content: 'User interaction template...', type: 'user' }
527
- ];
528
- }
529
- catch (error) {
530
- console.error('Error loading agent prompts:', error);
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
- var _a;
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) => { var _a; return d.data.id === ((_a = this.currentAgent) === null || _a === void 0 ? void 0 : _a.ID) ? '3px' : '2px'; })
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) => { var _a; return d.data.id === ((_a = this.currentAgent) === null || _a === void 0 ? void 0 : _a.ID) ? 'bold' : '500'; })
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 === ((_a = this.currentAgent) === null || _a === void 0 ? void 0 : _a.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
- var _a;
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
- var _a;
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
- return __awaiter(this, void 0, void 0, function* () {
760
- var _a;
761
- if (!this.currentAgent || !this.newSubAgentName.trim())
762
- return;
763
- try {
764
- this.isLoading = true;
765
- this.error = null;
766
- const md = Metadata.Provider;
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
- catch (error) {
802
- const errorMessage = error instanceof Error ? error.message : 'An unexpected error occurred';
803
- this.error = `Failed to create sub-agent: ${errorMessage}`;
804
- LogError('Error creating sub-agent', undefined, error);
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
- finally {
807
- this.isLoading = false;
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
- var _a;
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
- var _a;
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
- var _a, _b;
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 }]