@memberjunction/ng-core-entity-forms 5.22.0 → 5.23.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 (153) hide show
  1. package/dist/lib/custom/AIAgents/add-action-dialog.component.d.ts +4 -5
  2. package/dist/lib/custom/AIAgents/add-action-dialog.component.d.ts.map +1 -1
  3. package/dist/lib/custom/AIAgents/add-action-dialog.component.js +55 -59
  4. package/dist/lib/custom/AIAgents/add-action-dialog.component.js.map +1 -1
  5. package/dist/lib/custom/AIAgents/agent-advanced-settings-dialog.component.js +0 -1
  6. package/dist/lib/custom/AIAgents/agent-advanced-settings-dialog.component.js.map +1 -1
  7. package/dist/lib/custom/AIAgents/agent-prompt-advanced-settings-dialog.component.d.ts +4 -5
  8. package/dist/lib/custom/AIAgents/agent-prompt-advanced-settings-dialog.component.d.ts.map +1 -1
  9. package/dist/lib/custom/AIAgents/agent-prompt-advanced-settings-dialog.component.js +54 -71
  10. package/dist/lib/custom/AIAgents/agent-prompt-advanced-settings-dialog.component.js.map +1 -1
  11. package/dist/lib/custom/AIAgents/ai-agent-form.component.d.ts.map +1 -1
  12. package/dist/lib/custom/AIAgents/ai-agent-form.component.js +1053 -1096
  13. package/dist/lib/custom/AIAgents/ai-agent-form.component.js.map +1 -1
  14. package/dist/lib/custom/AIAgents/ai-agent-management.service.d.ts +2 -3
  15. package/dist/lib/custom/AIAgents/ai-agent-management.service.d.ts.map +1 -1
  16. package/dist/lib/custom/AIAgents/ai-agent-management.service.js +39 -82
  17. package/dist/lib/custom/AIAgents/ai-agent-management.service.js.map +1 -1
  18. package/dist/lib/custom/AIAgents/create-prompt-dialog.component.d.ts +4 -5
  19. package/dist/lib/custom/AIAgents/create-prompt-dialog.component.d.ts.map +1 -1
  20. package/dist/lib/custom/AIAgents/create-prompt-dialog.component.js +28 -31
  21. package/dist/lib/custom/AIAgents/create-prompt-dialog.component.js.map +1 -1
  22. package/dist/lib/custom/AIAgents/create-sub-agent-dialog.component.d.ts +4 -5
  23. package/dist/lib/custom/AIAgents/create-sub-agent-dialog.component.d.ts.map +1 -1
  24. package/dist/lib/custom/AIAgents/create-sub-agent-dialog.component.js +15 -14
  25. package/dist/lib/custom/AIAgents/create-sub-agent-dialog.component.js.map +1 -1
  26. package/dist/lib/custom/AIAgents/new-agent-dialog.component.d.ts +4 -7
  27. package/dist/lib/custom/AIAgents/new-agent-dialog.component.d.ts.map +1 -1
  28. package/dist/lib/custom/AIAgents/new-agent-dialog.component.js +77 -124
  29. package/dist/lib/custom/AIAgents/new-agent-dialog.component.js.map +1 -1
  30. package/dist/lib/custom/AIAgents/new-agent-dialog.service.d.ts +2 -2
  31. package/dist/lib/custom/AIAgents/new-agent-dialog.service.d.ts.map +1 -1
  32. package/dist/lib/custom/AIAgents/new-agent-dialog.service.js +10 -11
  33. package/dist/lib/custom/AIAgents/new-agent-dialog.service.js.map +1 -1
  34. package/dist/lib/custom/AIAgents/prompt-selector-dialog.component.d.ts +4 -5
  35. package/dist/lib/custom/AIAgents/prompt-selector-dialog.component.d.ts.map +1 -1
  36. package/dist/lib/custom/AIAgents/prompt-selector-dialog.component.js +18 -18
  37. package/dist/lib/custom/AIAgents/prompt-selector-dialog.component.js.map +1 -1
  38. package/dist/lib/custom/AIAgents/sub-agent-advanced-settings-dialog.component.d.ts +4 -5
  39. package/dist/lib/custom/AIAgents/sub-agent-advanced-settings-dialog.component.d.ts.map +1 -1
  40. package/dist/lib/custom/AIAgents/sub-agent-advanced-settings-dialog.component.js +59 -80
  41. package/dist/lib/custom/AIAgents/sub-agent-advanced-settings-dialog.component.js.map +1 -1
  42. package/dist/lib/custom/AIAgents/sub-agent-selector-dialog.component.d.ts +4 -5
  43. package/dist/lib/custom/AIAgents/sub-agent-selector-dialog.component.d.ts.map +1 -1
  44. package/dist/lib/custom/AIAgents/sub-agent-selector-dialog.component.js +23 -24
  45. package/dist/lib/custom/AIAgents/sub-agent-selector-dialog.component.js.map +1 -1
  46. package/dist/lib/custom/AIPromptRuns/ai-prompt-run-form.component.d.ts.map +1 -1
  47. package/dist/lib/custom/AIPromptRuns/ai-prompt-run-form.component.js +862 -906
  48. package/dist/lib/custom/AIPromptRuns/ai-prompt-run-form.component.js.map +1 -1
  49. package/dist/lib/custom/AIPromptRuns/chat-message-viewer.component.js +4 -5
  50. package/dist/lib/custom/AIPromptRuns/chat-message-viewer.component.js.map +1 -1
  51. package/dist/lib/custom/AIPrompts/ai-prompt-form.component.js +448 -499
  52. package/dist/lib/custom/AIPrompts/ai-prompt-form.component.js.map +1 -1
  53. package/dist/lib/custom/AIPrompts/ai-prompt-management.service.d.ts +2 -2
  54. package/dist/lib/custom/AIPrompts/ai-prompt-management.service.d.ts.map +1 -1
  55. package/dist/lib/custom/AIPrompts/ai-prompt-management.service.js +6 -11
  56. package/dist/lib/custom/AIPrompts/ai-prompt-management.service.js.map +1 -1
  57. package/dist/lib/custom/AIPrompts/template-selector-dialog.component.d.ts +4 -5
  58. package/dist/lib/custom/AIPrompts/template-selector-dialog.component.d.ts.map +1 -1
  59. package/dist/lib/custom/AIPrompts/template-selector-dialog.component.js +16 -15
  60. package/dist/lib/custom/AIPrompts/template-selector-dialog.component.js.map +1 -1
  61. package/dist/lib/custom/Actions/action-execution-log-form.component.js +160 -166
  62. package/dist/lib/custom/Actions/action-execution-log-form.component.js.map +1 -1
  63. package/dist/lib/custom/Actions/action-form.component.d.ts.map +1 -1
  64. package/dist/lib/custom/Actions/action-form.component.js +93 -94
  65. package/dist/lib/custom/Actions/action-form.component.js.map +1 -1
  66. package/dist/lib/custom/Entities/entity-form.component.js +2 -2
  67. package/dist/lib/custom/Lists/list-form.component.js +61 -63
  68. package/dist/lib/custom/Lists/list-form.component.js.map +1 -1
  69. package/dist/lib/custom/Queries/query-category-dialog.component.js +33 -59
  70. package/dist/lib/custom/Queries/query-category-dialog.component.js.map +1 -1
  71. package/dist/lib/custom/Queries/query-form.component.js +354 -360
  72. package/dist/lib/custom/Queries/query-form.component.js.map +1 -1
  73. package/dist/lib/custom/Queries/query-run-dialog.component.js +62 -71
  74. package/dist/lib/custom/Queries/query-run-dialog.component.js.map +1 -1
  75. package/dist/lib/custom/Templates/template-param-dialog.component.js +128 -124
  76. package/dist/lib/custom/Templates/template-param-dialog.component.js.map +1 -1
  77. package/dist/lib/custom/Templates/template-params-grid.component.d.ts +45 -22
  78. package/dist/lib/custom/Templates/template-params-grid.component.d.ts.map +1 -1
  79. package/dist/lib/custom/Templates/template-params-grid.component.js +380 -384
  80. package/dist/lib/custom/Templates/template-params-grid.component.js.map +1 -1
  81. package/dist/lib/custom/Templates/templates-form.component.js +34 -36
  82. package/dist/lib/custom/Templates/templates-form.component.js.map +1 -1
  83. package/dist/lib/custom/Tests/test-form.component.js +8 -9
  84. package/dist/lib/custom/Tests/test-form.component.js.map +1 -1
  85. package/dist/lib/custom/Tests/test-run-feedback-form.component.js +4 -4
  86. package/dist/lib/custom/Tests/test-run-feedback-form.component.js.map +1 -1
  87. package/dist/lib/custom/Tests/test-run-form.component.js +7 -7
  88. package/dist/lib/custom/Tests/test-run-form.component.js.map +1 -1
  89. package/dist/lib/custom/Tests/test-suite-form.component.js +6 -7
  90. package/dist/lib/custom/Tests/test-suite-form.component.js.map +1 -1
  91. package/dist/lib/custom/Tests/test-suite-run-form.component.js +6 -7
  92. package/dist/lib/custom/Tests/test-suite-run-form.component.js.map +1 -1
  93. package/dist/lib/custom/ai-agent-run/ai-agent-run-analytics.component.js +381 -409
  94. package/dist/lib/custom/ai-agent-run/ai-agent-run-analytics.component.js.map +1 -1
  95. package/dist/lib/custom/ai-agent-run/ai-agent-run-data.service.d.ts.map +1 -1
  96. package/dist/lib/custom/ai-agent-run/ai-agent-run-data.service.js +1 -1
  97. package/dist/lib/custom/ai-agent-run/ai-agent-run-data.service.js.map +1 -1
  98. package/dist/lib/custom/ai-agent-run/ai-agent-run-timeline.component.d.ts.map +1 -1
  99. package/dist/lib/custom/ai-agent-run/ai-agent-run-timeline.component.js +74 -63
  100. package/dist/lib/custom/ai-agent-run/ai-agent-run-timeline.component.js.map +1 -1
  101. package/dist/lib/custom/ai-agent-run/ai-agent-run-visualization.component.js +10 -10
  102. package/dist/lib/custom/ai-agent-run/ai-agent-run-visualization.component.js.map +1 -1
  103. package/dist/lib/custom/ai-agent-run/ai-agent-run.component.d.ts.map +1 -1
  104. package/dist/lib/custom/ai-agent-run/ai-agent-run.component.js +352 -332
  105. package/dist/lib/custom/ai-agent-run/ai-agent-run.component.js.map +1 -1
  106. package/dist/lib/custom/custom-forms.module.d.ts +22 -27
  107. package/dist/lib/custom/custom-forms.module.d.ts.map +1 -1
  108. package/dist/lib/custom/custom-forms.module.js +51 -81
  109. package/dist/lib/custom/custom-forms.module.js.map +1 -1
  110. package/dist/lib/custom/shared/entity-selector-dialog.component.d.ts +4 -5
  111. package/dist/lib/custom/shared/entity-selector-dialog.component.d.ts.map +1 -1
  112. package/dist/lib/custom/shared/entity-selector-dialog.component.js +59 -66
  113. package/dist/lib/custom/shared/entity-selector-dialog.component.js.map +1 -1
  114. package/dist/lib/generated/Entities/MJAIAgent/mjaiagent.form.component.d.ts.map +1 -1
  115. package/dist/lib/generated/Entities/MJAIAgent/mjaiagent.form.component.js +176 -156
  116. package/dist/lib/generated/Entities/MJAIAgent/mjaiagent.form.component.js.map +1 -1
  117. package/dist/lib/generated/Entities/MJAIAgentClientTool/mjaiagentclienttool.form.component.d.ts +10 -0
  118. package/dist/lib/generated/Entities/MJAIAgentClientTool/mjaiagentclienttool.form.component.d.ts.map +1 -0
  119. package/dist/lib/generated/Entities/MJAIAgentClientTool/mjaiagentclienttool.form.component.js +65 -0
  120. package/dist/lib/generated/Entities/MJAIAgentClientTool/mjaiagentclienttool.form.component.js.map +1 -0
  121. package/dist/lib/generated/Entities/MJAIClientToolDefinition/mjaiclienttooldefinition.form.component.d.ts +10 -0
  122. package/dist/lib/generated/Entities/MJAIClientToolDefinition/mjaiclienttooldefinition.form.component.d.ts.map +1 -0
  123. package/dist/lib/generated/Entities/MJAIClientToolDefinition/mjaiclienttooldefinition.form.component.js +89 -0
  124. package/dist/lib/generated/Entities/MJAIClientToolDefinition/mjaiclienttooldefinition.form.component.js.map +1 -0
  125. package/dist/lib/generated/Entities/MJAIModel/mjaimodel.form.component.d.ts.map +1 -1
  126. package/dist/lib/generated/Entities/MJAIModel/mjaimodel.form.component.js +80 -44
  127. package/dist/lib/generated/Entities/MJAIModel/mjaimodel.form.component.js.map +1 -1
  128. package/dist/lib/generated/Entities/MJContentItemTag/mjcontentitemtag.form.component.js +11 -8
  129. package/dist/lib/generated/Entities/MJContentItemTag/mjcontentitemtag.form.component.js.map +1 -1
  130. package/dist/lib/generated/Entities/MJContentSource/mjcontentsource.form.component.d.ts.map +1 -1
  131. package/dist/lib/generated/Entities/MJContentSource/mjcontentsource.form.component.js +39 -24
  132. package/dist/lib/generated/Entities/MJContentSource/mjcontentsource.form.component.js.map +1 -1
  133. package/dist/lib/generated/Entities/MJContentType/mjcontenttype.form.component.d.ts.map +1 -1
  134. package/dist/lib/generated/Entities/MJContentType/mjcontenttype.form.component.js +35 -17
  135. package/dist/lib/generated/Entities/MJContentType/mjcontenttype.form.component.js.map +1 -1
  136. package/dist/lib/generated/Entities/MJDuplicateRunDetail/mjduplicaterundetail.form.component.js +15 -13
  137. package/dist/lib/generated/Entities/MJDuplicateRunDetail/mjduplicaterundetail.form.component.js.map +1 -1
  138. package/dist/lib/generated/Entities/MJDuplicateRunDetailMatch/mjduplicaterundetailmatch.form.component.d.ts.map +1 -1
  139. package/dist/lib/generated/Entities/MJDuplicateRunDetailMatch/mjduplicaterundetailmatch.form.component.js +7 -9
  140. package/dist/lib/generated/Entities/MJDuplicateRunDetailMatch/mjduplicaterundetailmatch.form.component.js.map +1 -1
  141. package/dist/lib/generated/Entities/MJEntityField/mjentityfield.form.component.d.ts.map +1 -1
  142. package/dist/lib/generated/Entities/MJEntityField/mjentityfield.form.component.js +21 -9
  143. package/dist/lib/generated/Entities/MJEntityField/mjentityfield.form.component.js.map +1 -1
  144. package/dist/lib/generated/Entities/MJVectorIndex/mjvectorindex.form.component.d.ts.map +1 -1
  145. package/dist/lib/generated/Entities/MJVectorIndex/mjvectorindex.form.component.js +41 -5
  146. package/dist/lib/generated/Entities/MJVectorIndex/mjvectorindex.form.component.js.map +1 -1
  147. package/dist/lib/generated/generated-forms.module.d.ts +280 -279
  148. package/dist/lib/generated/generated-forms.module.d.ts.map +1 -1
  149. package/dist/lib/generated/generated-forms.module.js +102 -142
  150. package/dist/lib/generated/generated-forms.module.js.map +1 -1
  151. package/dist/lib/shared/components/template-editor.component.js +14 -15
  152. package/dist/lib/shared/components/template-editor.component.js.map +1 -1
  153. package/package.json +34 -41
@@ -1,20 +1,17 @@
1
1
  import { Component, Input } from '@angular/core';
2
2
  import { Validators } from '@angular/forms';
3
3
  import { Metadata } from '@memberjunction/core';
4
+ import { MJNotificationService } from '@memberjunction/ng-notifications';
4
5
  import { BehaviorSubject } from 'rxjs';
5
6
  import { AIEngineBase } from '@memberjunction/ai-engine-base';
6
7
  import * as i0 from "@angular/core";
7
8
  import * as i1 from "@angular/forms";
8
- import * as i2 from "@progress/kendo-angular-dialog";
9
- import * as i3 from "@memberjunction/ng-shared";
10
- import * as i4 from "@progress/kendo-angular-notification";
11
- import * as i5 from "@progress/kendo-angular-inputs";
12
- import * as i6 from "@progress/kendo-angular-dropdowns";
13
- import * as i7 from "@progress/kendo-angular-buttons";
14
- import * as i8 from "@angular/common";
9
+ import * as i2 from "@memberjunction/ng-shared";
10
+ import * as i3 from "@memberjunction/ng-ui-components";
11
+ import * as i4 from "@angular/common";
15
12
  function NewAgentDialogComponent_Conditional_2_Template(rf, ctx) { if (rf & 1) {
16
13
  i0.ɵɵelementStart(0, "div", 2);
17
- i0.ɵɵelement(1, "i", 29);
14
+ i0.ɵɵelement(1, "i", 28);
18
15
  i0.ɵɵelementStart(2, "span");
19
16
  i0.ɵɵtext(3, "Creating sub-agent for: ");
20
17
  i0.ɵɵelementStart(4, "strong");
@@ -26,57 +23,38 @@ function NewAgentDialogComponent_Conditional_2_Template(rf, ctx) { if (rf & 1) {
26
23
  i0.ɵɵtextInterpolate(ctx_r0.config.parentAgentName || "Parent Agent");
27
24
  } }
28
25
  function NewAgentDialogComponent_Conditional_3_Template(rf, ctx) { if (rf & 1) {
29
- i0.ɵɵelementStart(0, "div", 3)(1, "div", 30);
26
+ i0.ɵɵelementStart(0, "div", 3)(1, "div", 29);
30
27
  i0.ɵɵtext(2, "Loading...");
31
28
  i0.ɵɵelementEnd()();
32
29
  } }
33
30
  function NewAgentDialogComponent_Conditional_10_Template(rf, ctx) { if (rf & 1) {
34
31
  i0.ɵɵelementStart(0, "div", 8);
35
- i0.ɵɵelement(1, "i", 31);
32
+ i0.ɵɵelement(1, "i", 30);
36
33
  i0.ɵɵtext(2, " Agent name is required ");
37
34
  i0.ɵɵelementEnd();
38
35
  } }
39
- function NewAgentDialogComponent_ng_template_20_Template(rf, ctx) { if (rf & 1) {
40
- i0.ɵɵelementStart(0, "div", 32)(1, "div", 33);
41
- i0.ɵɵelement(2, "i", 34);
42
- i0.ɵɵelementEnd();
43
- i0.ɵɵelementStart(3, "div", 35)(4, "span", 36);
44
- i0.ɵɵtext(5);
45
- i0.ɵɵelementEnd();
46
- i0.ɵɵelementStart(6, "span", 37);
47
- i0.ɵɵtext(7);
48
- i0.ɵɵelementEnd()()();
49
- } if (rf & 2) {
50
- const dataItem_r2 = ctx.$implicit;
51
- i0.ɵɵadvance(5);
52
- i0.ɵɵtextInterpolate(dataItem_r2.Name);
53
- i0.ɵɵadvance(2);
54
- i0.ɵɵtextInterpolate(dataItem_r2.Vendor);
55
- } }
56
- function NewAgentDialogComponent_Conditional_21_Template(rf, ctx) { if (rf & 1) {
36
+ function NewAgentDialogComponent_Conditional_20_Template(rf, ctx) { if (rf & 1) {
57
37
  i0.ɵɵelementStart(0, "div", 8);
58
- i0.ɵɵelement(1, "i", 31);
38
+ i0.ɵɵelement(1, "i", 30);
59
39
  i0.ɵɵtext(2, " Please select an AI model ");
60
40
  i0.ɵɵelementEnd();
61
41
  } }
62
- function NewAgentDialogComponent_Conditional_60_Template(rf, ctx) { if (rf & 1) {
63
- i0.ɵɵelement(0, "span", 38);
42
+ function NewAgentDialogComponent_Conditional_59_Template(rf, ctx) { if (rf & 1) {
43
+ i0.ɵɵelement(0, "span", 31);
64
44
  i0.ɵɵelementStart(1, "span");
65
45
  i0.ɵɵtext(2, "Creating...");
66
46
  i0.ɵɵelementEnd();
67
47
  } }
68
- function NewAgentDialogComponent_Conditional_61_Template(rf, ctx) { if (rf & 1) {
69
- i0.ɵɵelement(0, "i", 39);
48
+ function NewAgentDialogComponent_Conditional_60_Template(rf, ctx) { if (rf & 1) {
49
+ i0.ɵɵelement(0, "i", 32);
70
50
  i0.ɵɵelementStart(1, "span");
71
51
  i0.ɵɵtext(2, "Create Agent");
72
52
  i0.ɵɵelementEnd();
73
53
  } }
74
54
  export class NewAgentDialogComponent {
75
- constructor(fb, dialog, navigationService, notificationService) {
55
+ constructor(fb, navigationService) {
76
56
  this.fb = fb;
77
- this.dialog = dialog;
78
57
  this.navigationService = navigationService;
79
- this.notificationService = notificationService;
80
58
  this.config = {
81
59
  redirectToForm: true
82
60
  };
@@ -84,6 +62,8 @@ export class NewAgentDialogComponent {
84
62
  this.models$ = new BehaviorSubject([]);
85
63
  this.agentTypes$ = new BehaviorSubject([]);
86
64
  this.isSubmitting = false;
65
+ /** Set by NewAgentDialogService after creation */
66
+ this.dialogRef = null;
87
67
  }
88
68
  ngOnInit() {
89
69
  this.initializeForm();
@@ -120,7 +100,7 @@ export class NewAgentDialogComponent {
120
100
  }
121
101
  catch (error) {
122
102
  console.error('Error loading data:', error);
123
- this.showError('Failed to load required data');
103
+ console.error('Failed to load required data');
124
104
  }
125
105
  finally {
126
106
  this.isLoading$.next(false);
@@ -151,9 +131,9 @@ export class NewAgentDialogComponent {
151
131
  // Save the agent
152
132
  const saveResult = await agent.Save();
153
133
  if (saveResult) {
154
- this.showSuccess('Agent created successfully!');
134
+ MJNotificationService.Instance.CreateSimpleNotification('Agent created successfully!', 'success', 3000);
155
135
  // Close dialog with the new agent
156
- this.dialog.close({ agent, action: 'created' });
136
+ this.dialogRef?.Close({ agent, action: 'created' });
157
137
  // Redirect to form if configured
158
138
  if (this.config.redirectToForm && !this.config.parentAgentId) {
159
139
  // Only redirect for top-level agents - use NavigationService to open the record
@@ -167,36 +147,19 @@ export class NewAgentDialogComponent {
167
147
  }
168
148
  }
169
149
  catch (error) {
150
+ const errorMessage = error instanceof Error ? error.message : 'Unknown error';
170
151
  console.error('Error creating agent:', error);
171
- this.showError('Failed to create agent: ' + (error.message || 'Unknown error'));
152
+ MJNotificationService.Instance.CreateSimpleNotification('Failed to create agent: ' + errorMessage, 'error', 5000);
172
153
  }
173
154
  finally {
174
155
  this.isSubmitting = false;
175
156
  }
176
157
  }
177
158
  onCancel() {
178
- this.dialog.close({ action: 'cancelled' });
179
- }
180
- showSuccess(message) {
181
- this.notificationService.show({
182
- content: message,
183
- type: { style: 'success', icon: true },
184
- position: { horizontal: 'right', vertical: 'top' },
185
- animation: { type: 'slide', duration: 300 },
186
- hideAfter: 3000
187
- });
188
- }
189
- showError(message) {
190
- this.notificationService.show({
191
- content: message,
192
- type: { style: 'error', icon: true },
193
- position: { horizontal: 'right', vertical: 'top' },
194
- animation: { type: 'slide', duration: 300 },
195
- hideAfter: 5000
196
- });
159
+ this.dialogRef?.Close({ action: 'cancelled' });
197
160
  }
198
- static { this.ɵfac = function NewAgentDialogComponent_Factory(__ngFactoryType__) { return new (__ngFactoryType__ || NewAgentDialogComponent)(i0.ɵɵdirectiveInject(i1.FormBuilder), i0.ɵɵdirectiveInject(i2.DialogRef), i0.ɵɵdirectiveInject(i3.NavigationService), i0.ɵɵdirectiveInject(i4.NotificationService)); }; }
199
- static { this.ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: NewAgentDialogComponent, selectors: [["mj-new-agent-dialog"]], inputs: { config: "config" }, standalone: false, decls: 62, vars: 25, consts: [[1, "new-agent-dialog"], [3, "ngSubmit", "formGroup"], [1, "parent-info"], [1, "loading-overlay"], [1, "form-fields"], [1, "form-group"], [1, "required"], ["formControlName", "name", "placeholder", "Enter a descriptive name for your agent", 1, "full-width", 3, "clearButton"], [1, "error-message"], ["formControlName", "description", "placeholder", "Describe what this agent does...", 1, "full-width", 3, "rows"], ["formControlName", "modelId", "textField", "Name", "valueField", "ID", "placeholder", "Select an AI model...", 1, "full-width", 3, "data"], ["kendoDropDownListItemTemplate", ""], ["formControlName", "systemPrompt", "placeholder", "Define the agent's behavior and personality...", 1, "full-width", 3, "rows"], [1, "field-hint"], [1, "fa-solid", "fa-info-circle"], [1, "advanced-settings"], [1, "section-header"], [1, "fa-solid", "fa-cog"], [1, "advanced-grid"], [1, "setting-group"], [1, "slider-container"], ["formControlName", "temperature", 1, "temperature-slider", 3, "min", "max", "smallStep", "showButtons"], [1, "slider-value"], ["formControlName", "maxTokens", 1, "full-width", 3, "min", "max", "step", "format"], [1, "setting-group", "checkbox-group"], ["type", "checkbox", "formControlName", "enableStreaming", "kendoCheckBox", ""], [1, "dialog-actions"], ["type", "button", "kendoButton", "", 3, "click", "disabled"], ["type", "submit", "kendoButton", "", "themeColor", "primary", 3, "disabled"], [1, "fa-solid", "fa-robot"], [1, "spinner"], [1, "fa-solid", "fa-exclamation-circle"], [1, "model-item"], [1, "model-icon"], [1, "fa-solid", "fa-microchip"], [1, "model-details"], [1, "model-name"], [1, "model-vendor"], [1, "spinner-small"], [1, "fa-solid", "fa-plus-circle"]], template: function NewAgentDialogComponent_Template(rf, ctx) { if (rf & 1) {
161
+ static { this.ɵfac = function NewAgentDialogComponent_Factory(__ngFactoryType__) { return new (__ngFactoryType__ || NewAgentDialogComponent)(i0.ɵɵdirectiveInject(i1.FormBuilder), i0.ɵɵdirectiveInject(i2.NavigationService)); }; }
162
+ static { this.ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: NewAgentDialogComponent, selectors: [["mj-new-agent-dialog"]], inputs: { config: "config" }, standalone: false, decls: 61, vars: 17, consts: [[1, "new-agent-dialog"], [3, "ngSubmit", "formGroup"], [1, "parent-info"], [1, "loading-overlay"], [1, "form-fields"], [1, "form-group"], [1, "required"], ["formControlName", "name", "placeholder", "Enter a descriptive name for your agent", 1, "mj-input", "full-width"], [1, "error-message"], ["formControlName", "description", "placeholder", "Describe what this agent does...", "rows", "3", 1, "mj-textarea", "full-width"], ["formControlName", "modelId", "TextField", "Name", "ValueField", "ID", "Placeholder", "Select an AI model...", 1, "full-width", 3, "Data"], ["formControlName", "systemPrompt", "placeholder", "Define the agent's behavior and personality...", "rows", "4", 1, "mj-textarea", "full-width"], [1, "field-hint"], [1, "fa-solid", "fa-info-circle"], [1, "advanced-settings"], [1, "section-header"], [1, "fa-solid", "fa-cog"], [1, "advanced-grid"], [1, "setting-group"], [1, "slider-container"], ["type", "range", "formControlName", "temperature", "min", "0", "max", "2", "step", "0.1", 1, "mj-input", "temperature-slider"], [1, "slider-value"], ["formControlName", "maxTokens", "Format", "n0", 1, "full-width", 3, "Min", "Max", "Step"], [1, "setting-group", "checkbox-group"], ["type", "checkbox", "formControlName", "enableStreaming", 1, "mj-checkbox"], [1, "dialog-actions"], ["type", "button", "mjButton", "", 3, "click", "disabled"], ["type", "submit", "mjButton", "", "variant", "primary", 3, "disabled"], [1, "fa-solid", "fa-robot"], [1, "spinner"], [1, "fa-solid", "fa-exclamation-circle"], [1, "spinner-small"], [1, "fa-solid", "fa-plus-circle"]], template: function NewAgentDialogComponent_Template(rf, ctx) { if (rf & 1) {
200
163
  i0.ɵɵelementStart(0, "div", 0)(1, "form", 1);
201
164
  i0.ɵɵlistener("ngSubmit", function NewAgentDialogComponent_Template_form_ngSubmit_1_listener() { return ctx.onSubmit(); });
202
165
  i0.ɵɵconditionalCreate(2, NewAgentDialogComponent_Conditional_2_Template, 6, 1, "div", 2);
@@ -205,108 +168,98 @@ export class NewAgentDialogComponent {
205
168
  i0.ɵɵelementStart(5, "div", 4)(6, "div", 5)(7, "label", 6);
206
169
  i0.ɵɵtext(8, "Agent Name");
207
170
  i0.ɵɵelementEnd();
208
- i0.ɵɵelement(9, "kendo-textbox", 7);
171
+ i0.ɵɵelement(9, "input", 7);
209
172
  i0.ɵɵconditionalCreate(10, NewAgentDialogComponent_Conditional_10_Template, 3, 0, "div", 8);
210
173
  i0.ɵɵelementEnd();
211
174
  i0.ɵɵelementStart(11, "div", 5)(12, "label");
212
175
  i0.ɵɵtext(13, "Description");
213
176
  i0.ɵɵelementEnd();
214
- i0.ɵɵelement(14, "kendo-textarea", 9);
177
+ i0.ɵɵelement(14, "textarea", 9);
215
178
  i0.ɵɵelementEnd();
216
179
  i0.ɵɵelementStart(15, "div", 5)(16, "label", 6);
217
180
  i0.ɵɵtext(17, "AI Model");
218
181
  i0.ɵɵelementEnd();
219
- i0.ɵɵelementStart(18, "kendo-dropdownlist", 10);
182
+ i0.ɵɵelement(18, "mj-dropdown", 10);
220
183
  i0.ɵɵpipe(19, "async");
221
- i0.ɵɵtemplate(20, NewAgentDialogComponent_ng_template_20_Template, 8, 2, "ng-template", 11);
222
- i0.ɵɵelementEnd();
223
- i0.ɵɵconditionalCreate(21, NewAgentDialogComponent_Conditional_21_Template, 3, 0, "div", 8);
184
+ i0.ɵɵconditionalCreate(20, NewAgentDialogComponent_Conditional_20_Template, 3, 0, "div", 8);
224
185
  i0.ɵɵelementEnd();
225
- i0.ɵɵelementStart(22, "div", 5)(23, "label");
226
- i0.ɵɵtext(24, "System Prompt");
186
+ i0.ɵɵelementStart(21, "div", 5)(22, "label");
187
+ i0.ɵɵtext(23, "System Prompt");
227
188
  i0.ɵɵelementEnd();
228
- i0.ɵɵelement(25, "kendo-textarea", 12);
229
- i0.ɵɵelementStart(26, "div", 13);
230
- i0.ɵɵelement(27, "i", 14);
231
- i0.ɵɵtext(28, " This sets the agent's context and behavior ");
189
+ i0.ɵɵelement(24, "textarea", 11);
190
+ i0.ɵɵelementStart(25, "div", 12);
191
+ i0.ɵɵelement(26, "i", 13);
192
+ i0.ɵɵtext(27, " This sets the agent's context and behavior ");
232
193
  i0.ɵɵelementEnd()();
233
- i0.ɵɵelementStart(29, "div", 15)(30, "div", 16);
234
- i0.ɵɵelement(31, "i", 17);
235
- i0.ɵɵtext(32, " Advanced Settings ");
194
+ i0.ɵɵelementStart(28, "div", 14)(29, "div", 15);
195
+ i0.ɵɵelement(30, "i", 16);
196
+ i0.ɵɵtext(31, " Advanced Settings ");
236
197
  i0.ɵɵelementEnd();
237
- i0.ɵɵelementStart(33, "div", 18)(34, "div", 19)(35, "label");
238
- i0.ɵɵtext(36, "Temperature");
198
+ i0.ɵɵelementStart(32, "div", 17)(33, "div", 18)(34, "label");
199
+ i0.ɵɵtext(35, "Temperature");
239
200
  i0.ɵɵelementEnd();
240
- i0.ɵɵelementStart(37, "div", 20);
241
- i0.ɵɵelement(38, "kendo-slider", 21);
242
- i0.ɵɵelementStart(39, "span", 22);
243
- i0.ɵɵtext(40);
201
+ i0.ɵɵelementStart(36, "div", 19);
202
+ i0.ɵɵelement(37, "input", 20);
203
+ i0.ɵɵelementStart(38, "span", 21);
204
+ i0.ɵɵtext(39);
244
205
  i0.ɵɵelementEnd()();
245
- i0.ɵɵelementStart(41, "div", 13);
246
- i0.ɵɵtext(42, "Higher values make output more creative");
206
+ i0.ɵɵelementStart(40, "div", 12);
207
+ i0.ɵɵtext(41, "Higher values make output more creative");
247
208
  i0.ɵɵelementEnd()();
248
- i0.ɵɵelementStart(43, "div", 19)(44, "label");
249
- i0.ɵɵtext(45, "Max Tokens");
209
+ i0.ɵɵelementStart(42, "div", 18)(43, "label");
210
+ i0.ɵɵtext(44, "Max Tokens");
250
211
  i0.ɵɵelementEnd();
251
- i0.ɵɵelement(46, "kendo-numerictextbox", 23);
252
- i0.ɵɵelementStart(47, "div", 13);
253
- i0.ɵɵtext(48, "Maximum response length");
212
+ i0.ɵɵelement(45, "mj-numeric-input", 22);
213
+ i0.ɵɵelementStart(46, "div", 12);
214
+ i0.ɵɵtext(47, "Maximum response length");
254
215
  i0.ɵɵelementEnd()();
255
- i0.ɵɵelementStart(49, "div", 24)(50, "label");
256
- i0.ɵɵelement(51, "input", 25);
257
- i0.ɵɵelementStart(52, "span");
258
- i0.ɵɵtext(53, "Enable Response Streaming");
216
+ i0.ɵɵelementStart(48, "div", 23)(49, "label");
217
+ i0.ɵɵelement(50, "input", 24);
218
+ i0.ɵɵelementStart(51, "span");
219
+ i0.ɵɵtext(52, "Enable Response Streaming");
259
220
  i0.ɵɵelementEnd()();
260
- i0.ɵɵelementStart(54, "div", 13);
261
- i0.ɵɵtext(55, "Stream responses in real-time");
221
+ i0.ɵɵelementStart(53, "div", 12);
222
+ i0.ɵɵtext(54, "Stream responses in real-time");
262
223
  i0.ɵɵelementEnd()()()()();
263
- i0.ɵɵelementStart(56, "div", 26)(57, "button", 27);
264
- i0.ɵɵlistener("click", function NewAgentDialogComponent_Template_button_click_57_listener() { return ctx.onCancel(); });
265
- i0.ɵɵtext(58, " Cancel ");
224
+ i0.ɵɵelementStart(55, "div", 25)(56, "button", 26);
225
+ i0.ɵɵlistener("click", function NewAgentDialogComponent_Template_button_click_56_listener() { return ctx.onCancel(); });
226
+ i0.ɵɵtext(57, " Cancel ");
266
227
  i0.ɵɵelementEnd();
267
- i0.ɵɵelementStart(59, "button", 28);
268
- i0.ɵɵconditionalCreate(60, NewAgentDialogComponent_Conditional_60_Template, 3, 0)(61, NewAgentDialogComponent_Conditional_61_Template, 3, 0);
228
+ i0.ɵɵelementStart(58, "button", 27);
229
+ i0.ɵɵconditionalCreate(59, NewAgentDialogComponent_Conditional_59_Template, 3, 0)(60, NewAgentDialogComponent_Conditional_60_Template, 3, 0);
269
230
  i0.ɵɵelementEnd()()()();
270
231
  } if (rf & 2) {
271
- let tmp_4_0;
272
- let tmp_7_0;
273
- let tmp_13_0;
232
+ let tmp_3_0;
233
+ let tmp_5_0;
234
+ let tmp_6_0;
274
235
  i0.ɵɵadvance();
275
236
  i0.ɵɵproperty("formGroup", ctx.form);
276
237
  i0.ɵɵadvance();
277
238
  i0.ɵɵconditional(ctx.config.parentAgentId ? 2 : -1);
278
239
  i0.ɵɵadvance();
279
- i0.ɵɵconditional(i0.ɵɵpipeBind1(4, 21, ctx.isLoading$) ? 3 : -1);
280
- i0.ɵɵadvance(6);
281
- i0.ɵɵproperty("clearButton", true);
282
- i0.ɵɵadvance();
283
- i0.ɵɵconditional(((tmp_4_0 = ctx.form.get("name")) == null ? null : tmp_4_0.invalid) && ((tmp_4_0 = ctx.form.get("name")) == null ? null : tmp_4_0.touched) ? 10 : -1);
284
- i0.ɵɵadvance(4);
285
- i0.ɵɵproperty("rows", 3);
286
- i0.ɵɵadvance(4);
287
- i0.ɵɵproperty("data", i0.ɵɵpipeBind1(19, 23, ctx.models$));
288
- i0.ɵɵadvance(3);
289
- i0.ɵɵconditional(((tmp_7_0 = ctx.form.get("modelId")) == null ? null : tmp_7_0.invalid) && ((tmp_7_0 = ctx.form.get("modelId")) == null ? null : tmp_7_0.touched) ? 21 : -1);
290
- i0.ɵɵadvance(4);
291
- i0.ɵɵproperty("rows", 4);
292
- i0.ɵɵadvance(13);
293
- i0.ɵɵproperty("min", 0)("max", 2)("smallStep", 0.1)("showButtons", true);
240
+ i0.ɵɵconditional(i0.ɵɵpipeBind1(4, 13, ctx.isLoading$) ? 3 : -1);
241
+ i0.ɵɵadvance(7);
242
+ i0.ɵɵconditional(((tmp_3_0 = ctx.form.get("name")) == null ? null : tmp_3_0.invalid) && ((tmp_3_0 = ctx.form.get("name")) == null ? null : tmp_3_0.touched) ? 10 : -1);
243
+ i0.ɵɵadvance(8);
244
+ i0.ɵɵproperty("Data", i0.ɵɵpipeBind1(19, 15, ctx.models$));
294
245
  i0.ɵɵadvance(2);
295
- i0.ɵɵtextInterpolate((tmp_13_0 = ctx.form.get("temperature")) == null ? null : tmp_13_0.value);
246
+ i0.ɵɵconditional(((tmp_5_0 = ctx.form.get("modelId")) == null ? null : tmp_5_0.invalid) && ((tmp_5_0 = ctx.form.get("modelId")) == null ? null : tmp_5_0.touched) ? 20 : -1);
247
+ i0.ɵɵadvance(19);
248
+ i0.ɵɵtextInterpolate((tmp_6_0 = ctx.form.get("temperature")) == null ? null : tmp_6_0.value);
296
249
  i0.ɵɵadvance(6);
297
- i0.ɵɵproperty("min", 1)("max", 8000)("step", 100)("format", "n0");
250
+ i0.ɵɵproperty("Min", 1)("Max", 8000)("Step", 100);
298
251
  i0.ɵɵadvance(11);
299
252
  i0.ɵɵproperty("disabled", ctx.isSubmitting);
300
253
  i0.ɵɵadvance(2);
301
254
  i0.ɵɵproperty("disabled", ctx.form.invalid || ctx.isSubmitting);
302
255
  i0.ɵɵadvance();
303
- i0.ɵɵconditional(ctx.isSubmitting ? 60 : 61);
304
- } }, dependencies: [i1.ɵNgNoValidate, i1.CheckboxControlValueAccessor, i1.NgControlStatus, i1.NgControlStatusGroup, i1.FormGroupDirective, i1.FormControlName, i5.TextBoxComponent, i5.NumericTextBoxComponent, i5.TextAreaComponent, i5.CheckBoxDirective, i5.SliderComponent, i6.ItemTemplateDirective, i6.DropDownListComponent, i7.ButtonComponent, i8.AsyncPipe], styles: [".new-agent-dialog[_ngcontent-%COMP%] {\n padding: 1.5rem;\n min-width: 500px;\n position: relative;\n}\n\n.new-agent-dialog[_ngcontent-%COMP%] .parent-info[_ngcontent-%COMP%] {\n background: color-mix(in srgb, var(--mj-brand-primary) 8%, var(--mj-bg-surface));\n border: 1px solid color-mix(in srgb, var(--mj-brand-primary) 25%, var(--mj-bg-surface));\n border-radius: 8px;\n padding: 0.75rem 1rem;\n margin-bottom: 1.5rem;\n display: flex;\n align-items: center;\n gap: 0.5rem;\n}\n\n.new-agent-dialog[_ngcontent-%COMP%] .parent-info[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n color: var(--mj-brand-primary);\n font-size: 1.1rem;\n}\n\n.new-agent-dialog[_ngcontent-%COMP%] .parent-info[_ngcontent-%COMP%] strong[_ngcontent-%COMP%] {\n color: var(--mj-brand-primary);\n}\n\n.new-agent-dialog[_ngcontent-%COMP%] .loading-overlay[_ngcontent-%COMP%] {\n position: absolute;\n top: 0;\n left: 0;\n right: 0;\n bottom: 0;\n background: color-mix(in srgb, var(--mj-bg-surface) 90%, transparent);\n display: flex;\n align-items: center;\n justify-content: center;\n z-index: 100;\n border-radius: 8px;\n}\n\n.new-agent-dialog[_ngcontent-%COMP%] .form-fields[_ngcontent-%COMP%] .form-group[_ngcontent-%COMP%] {\n margin-bottom: 1.5rem;\n}\n\n.new-agent-dialog[_ngcontent-%COMP%] .form-fields[_ngcontent-%COMP%] .form-group[_ngcontent-%COMP%] label[_ngcontent-%COMP%] {\n display: block;\n font-weight: 500;\n margin-bottom: 0.5rem;\n color: var(--mj-text-secondary);\n}\n\n.new-agent-dialog[_ngcontent-%COMP%] .form-fields[_ngcontent-%COMP%] .form-group[_ngcontent-%COMP%] label.required[_ngcontent-%COMP%]::after {\n content: ' *';\n color: var(--mj-status-error);\n}\n\n.new-agent-dialog[_ngcontent-%COMP%] .form-fields[_ngcontent-%COMP%] .form-group[_ngcontent-%COMP%] .full-width[_ngcontent-%COMP%] {\n width: 100%;\n}\n\n.new-agent-dialog[_ngcontent-%COMP%] .form-fields[_ngcontent-%COMP%] .form-group[_ngcontent-%COMP%] .error-message[_ngcontent-%COMP%] {\n color: var(--mj-status-error);\n font-size: 0.875rem;\n margin-top: 0.25rem;\n display: flex;\n align-items: center;\n gap: 0.25rem;\n}\n\n.new-agent-dialog[_ngcontent-%COMP%] .form-fields[_ngcontent-%COMP%] .form-group[_ngcontent-%COMP%] .error-message[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n font-size: 0.75rem;\n}\n\n.new-agent-dialog[_ngcontent-%COMP%] .form-fields[_ngcontent-%COMP%] .form-group[_ngcontent-%COMP%] .field-hint[_ngcontent-%COMP%] {\n font-size: 0.875rem;\n color: var(--mj-text-muted);\n margin-top: 0.25rem;\n display: flex;\n align-items: center;\n gap: 0.25rem;\n}\n\n.new-agent-dialog[_ngcontent-%COMP%] .form-fields[_ngcontent-%COMP%] .form-group[_ngcontent-%COMP%] .field-hint[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n font-size: 0.75rem;\n}\n\n.new-agent-dialog[_ngcontent-%COMP%] .form-fields[_ngcontent-%COMP%] .model-item[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 0.75rem;\n padding: 0.5rem 0;\n}\n\n.new-agent-dialog[_ngcontent-%COMP%] .form-fields[_ngcontent-%COMP%] .model-item[_ngcontent-%COMP%] .model-icon[_ngcontent-%COMP%] {\n width: 36px;\n height: 36px;\n border-radius: 6px;\n background: var(--mj-brand-primary);\n display: flex;\n align-items: center;\n justify-content: center;\n color: var(--mj-text-inverse);\n}\n\n.new-agent-dialog[_ngcontent-%COMP%] .form-fields[_ngcontent-%COMP%] .model-item[_ngcontent-%COMP%] .model-icon[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n font-size: 1rem;\n}\n\n.new-agent-dialog[_ngcontent-%COMP%] .form-fields[_ngcontent-%COMP%] .model-item[_ngcontent-%COMP%] .model-details[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n}\n\n.new-agent-dialog[_ngcontent-%COMP%] .form-fields[_ngcontent-%COMP%] .model-item[_ngcontent-%COMP%] .model-details[_ngcontent-%COMP%] .model-name[_ngcontent-%COMP%] {\n font-weight: 500;\n}\n\n.new-agent-dialog[_ngcontent-%COMP%] .form-fields[_ngcontent-%COMP%] .model-item[_ngcontent-%COMP%] .model-details[_ngcontent-%COMP%] .model-vendor[_ngcontent-%COMP%] {\n font-size: 0.75rem;\n color: var(--mj-text-muted);\n}\n\n.new-agent-dialog[_ngcontent-%COMP%] .form-fields[_ngcontent-%COMP%] .k-textbox[_ngcontent-%COMP%], \n.new-agent-dialog[_ngcontent-%COMP%] .form-fields[_ngcontent-%COMP%] .k-textarea[_ngcontent-%COMP%], \n.new-agent-dialog[_ngcontent-%COMP%] .form-fields[_ngcontent-%COMP%] .k-dropdown[_ngcontent-%COMP%], \n.new-agent-dialog[_ngcontent-%COMP%] .form-fields[_ngcontent-%COMP%] .k-numerictextbox[_ngcontent-%COMP%] {\n border-radius: 6px;\n}\n\n.new-agent-dialog[_ngcontent-%COMP%] .advanced-settings[_ngcontent-%COMP%] {\n margin-top: 1.5rem;\n border-radius: 8px;\n overflow: hidden;\n}\n\n.new-agent-dialog[_ngcontent-%COMP%] .advanced-settings[_ngcontent-%COMP%] .k-expander-header[_ngcontent-%COMP%] {\n background: var(--mj-bg-surface-card);\n padding: 1rem;\n}\n\n.new-agent-dialog[_ngcontent-%COMP%] .advanced-settings[_ngcontent-%COMP%] .k-expander-header[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n margin-right: 0.5rem;\n color: var(--mj-brand-primary);\n}\n\n.new-agent-dialog[_ngcontent-%COMP%] .advanced-settings[_ngcontent-%COMP%] .advanced-grid[_ngcontent-%COMP%] {\n padding: 1rem;\n display: grid;\n gap: 1.5rem;\n}\n\n.new-agent-dialog[_ngcontent-%COMP%] .advanced-settings[_ngcontent-%COMP%] .advanced-grid[_ngcontent-%COMP%] .setting-group[_ngcontent-%COMP%] label[_ngcontent-%COMP%] {\n display: block;\n font-weight: 500;\n margin-bottom: 0.5rem;\n color: var(--mj-text-secondary);\n}\n\n.new-agent-dialog[_ngcontent-%COMP%] .advanced-settings[_ngcontent-%COMP%] .advanced-grid[_ngcontent-%COMP%] .setting-group[_ngcontent-%COMP%] .slider-container[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 1rem;\n}\n\n.new-agent-dialog[_ngcontent-%COMP%] .advanced-settings[_ngcontent-%COMP%] .advanced-grid[_ngcontent-%COMP%] .setting-group[_ngcontent-%COMP%] .slider-container[_ngcontent-%COMP%] .temperature-slider[_ngcontent-%COMP%] {\n flex: 1;\n}\n\n.new-agent-dialog[_ngcontent-%COMP%] .advanced-settings[_ngcontent-%COMP%] .advanced-grid[_ngcontent-%COMP%] .setting-group[_ngcontent-%COMP%] .slider-container[_ngcontent-%COMP%] .slider-value[_ngcontent-%COMP%] {\n min-width: 3rem;\n text-align: right;\n font-weight: 600;\n color: var(--mj-brand-primary);\n}\n\n.new-agent-dialog[_ngcontent-%COMP%] .advanced-settings[_ngcontent-%COMP%] .advanced-grid[_ngcontent-%COMP%] .setting-group.checkbox-group[_ngcontent-%COMP%] label[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 0.5rem;\n cursor: pointer;\n font-weight: normal;\n}\n\n.new-agent-dialog[_ngcontent-%COMP%] .advanced-settings[_ngcontent-%COMP%] .advanced-grid[_ngcontent-%COMP%] .setting-group.checkbox-group[_ngcontent-%COMP%] label[_ngcontent-%COMP%] input[type=\"checkbox\"][_ngcontent-%COMP%] {\n cursor: pointer;\n}\n\n.new-agent-dialog[_ngcontent-%COMP%] .dialog-actions[_ngcontent-%COMP%] {\n display: flex;\n justify-content: flex-end;\n gap: 0.75rem;\n margin-top: 2rem;\n padding-top: 1.5rem;\n border-top: 1px solid var(--mj-border-default);\n}\n\n.new-agent-dialog[_ngcontent-%COMP%] .dialog-actions[_ngcontent-%COMP%] button[_ngcontent-%COMP%] {\n min-width: 120px;\n}\n\n.new-agent-dialog[_ngcontent-%COMP%] .dialog-actions[_ngcontent-%COMP%] button[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n margin-right: 0.5rem;\n}"] }); }
256
+ i0.ɵɵconditional(ctx.isSubmitting ? 59 : 60);
257
+ } }, dependencies: [i1.ɵNgNoValidate, i1.DefaultValueAccessor, i1.RangeValueAccessor, i1.CheckboxControlValueAccessor, i1.NgControlStatus, i1.NgControlStatusGroup, i1.FormGroupDirective, i1.FormControlName, i3.MJButtonDirective, i3.MJDropdownComponent, i3.MJNumericInputComponent, i4.AsyncPipe], styles: [".new-agent-dialog[_ngcontent-%COMP%] {\n padding: 1.5rem;\n min-width: 500px;\n position: relative;\n}\n\n.new-agent-dialog[_ngcontent-%COMP%] .parent-info[_ngcontent-%COMP%] {\n background: color-mix(in srgb, var(--mj-brand-primary) 8%, var(--mj-bg-surface));\n border: 1px solid color-mix(in srgb, var(--mj-brand-primary) 25%, var(--mj-bg-surface));\n border-radius: 8px;\n padding: 0.75rem 1rem;\n margin-bottom: 1.5rem;\n display: flex;\n align-items: center;\n gap: 0.5rem;\n}\n\n.new-agent-dialog[_ngcontent-%COMP%] .parent-info[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n color: var(--mj-brand-primary);\n font-size: 1.1rem;\n}\n\n.new-agent-dialog[_ngcontent-%COMP%] .parent-info[_ngcontent-%COMP%] strong[_ngcontent-%COMP%] {\n color: var(--mj-brand-primary);\n}\n\n.new-agent-dialog[_ngcontent-%COMP%] .loading-overlay[_ngcontent-%COMP%] {\n position: absolute;\n top: 0;\n left: 0;\n right: 0;\n bottom: 0;\n background: color-mix(in srgb, var(--mj-bg-surface) 90%, transparent);\n display: flex;\n align-items: center;\n justify-content: center;\n z-index: 100;\n border-radius: 8px;\n}\n\n.new-agent-dialog[_ngcontent-%COMP%] .form-fields[_ngcontent-%COMP%] .form-group[_ngcontent-%COMP%] {\n margin-bottom: 1.5rem;\n}\n\n.new-agent-dialog[_ngcontent-%COMP%] .form-fields[_ngcontent-%COMP%] .form-group[_ngcontent-%COMP%] label[_ngcontent-%COMP%] {\n display: block;\n font-weight: 500;\n margin-bottom: 0.5rem;\n color: var(--mj-text-secondary);\n}\n\n.new-agent-dialog[_ngcontent-%COMP%] .form-fields[_ngcontent-%COMP%] .form-group[_ngcontent-%COMP%] label.required[_ngcontent-%COMP%]::after {\n content: ' *';\n color: var(--mj-status-error);\n}\n\n.new-agent-dialog[_ngcontent-%COMP%] .form-fields[_ngcontent-%COMP%] .form-group[_ngcontent-%COMP%] .full-width[_ngcontent-%COMP%] {\n width: 100%;\n}\n\n.new-agent-dialog[_ngcontent-%COMP%] .form-fields[_ngcontent-%COMP%] .form-group[_ngcontent-%COMP%] .error-message[_ngcontent-%COMP%] {\n color: var(--mj-status-error);\n font-size: 0.875rem;\n margin-top: 0.25rem;\n display: flex;\n align-items: center;\n gap: 0.25rem;\n}\n\n.new-agent-dialog[_ngcontent-%COMP%] .form-fields[_ngcontent-%COMP%] .form-group[_ngcontent-%COMP%] .error-message[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n font-size: 0.75rem;\n}\n\n.new-agent-dialog[_ngcontent-%COMP%] .form-fields[_ngcontent-%COMP%] .form-group[_ngcontent-%COMP%] .field-hint[_ngcontent-%COMP%] {\n font-size: 0.875rem;\n color: var(--mj-text-muted);\n margin-top: 0.25rem;\n display: flex;\n align-items: center;\n gap: 0.25rem;\n}\n\n.new-agent-dialog[_ngcontent-%COMP%] .form-fields[_ngcontent-%COMP%] .form-group[_ngcontent-%COMP%] .field-hint[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n font-size: 0.75rem;\n}\n\n.new-agent-dialog[_ngcontent-%COMP%] .form-fields[_ngcontent-%COMP%] .model-item[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 0.75rem;\n padding: 0.5rem 0;\n}\n\n.new-agent-dialog[_ngcontent-%COMP%] .form-fields[_ngcontent-%COMP%] .model-item[_ngcontent-%COMP%] .model-icon[_ngcontent-%COMP%] {\n width: 36px;\n height: 36px;\n border-radius: 6px;\n background: var(--mj-brand-primary);\n display: flex;\n align-items: center;\n justify-content: center;\n color: var(--mj-text-inverse);\n}\n\n.new-agent-dialog[_ngcontent-%COMP%] .form-fields[_ngcontent-%COMP%] .model-item[_ngcontent-%COMP%] .model-icon[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n font-size: 1rem;\n}\n\n.new-agent-dialog[_ngcontent-%COMP%] .form-fields[_ngcontent-%COMP%] .model-item[_ngcontent-%COMP%] .model-details[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n}\n\n.new-agent-dialog[_ngcontent-%COMP%] .form-fields[_ngcontent-%COMP%] .model-item[_ngcontent-%COMP%] .model-details[_ngcontent-%COMP%] .model-name[_ngcontent-%COMP%] {\n font-weight: 500;\n}\n\n.new-agent-dialog[_ngcontent-%COMP%] .form-fields[_ngcontent-%COMP%] .model-item[_ngcontent-%COMP%] .model-details[_ngcontent-%COMP%] .model-vendor[_ngcontent-%COMP%] {\n font-size: 0.75rem;\n color: var(--mj-text-muted);\n}\n\n.new-agent-dialog[_ngcontent-%COMP%] .form-fields[_ngcontent-%COMP%] .k-textbox[_ngcontent-%COMP%], \n.new-agent-dialog[_ngcontent-%COMP%] .form-fields[_ngcontent-%COMP%] .k-textarea[_ngcontent-%COMP%], \n.new-agent-dialog[_ngcontent-%COMP%] .form-fields[_ngcontent-%COMP%] .k-dropdown[_ngcontent-%COMP%], \n.new-agent-dialog[_ngcontent-%COMP%] .form-fields[_ngcontent-%COMP%] .k-numerictextbox[_ngcontent-%COMP%] {\n border-radius: 6px;\n}\n\n.new-agent-dialog[_ngcontent-%COMP%] .advanced-settings[_ngcontent-%COMP%] {\n margin-top: 1.5rem;\n border-radius: 8px;\n overflow: hidden;\n}\n\n.new-agent-dialog[_ngcontent-%COMP%] .advanced-settings[_ngcontent-%COMP%] .k-expander-header[_ngcontent-%COMP%] {\n background: var(--mj-bg-surface-card);\n padding: 1rem;\n}\n\n.new-agent-dialog[_ngcontent-%COMP%] .advanced-settings[_ngcontent-%COMP%] .k-expander-header[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n margin-right: 0.5rem;\n color: var(--mj-brand-primary);\n}\n\n.new-agent-dialog[_ngcontent-%COMP%] .advanced-settings[_ngcontent-%COMP%] .advanced-grid[_ngcontent-%COMP%] {\n padding: 1rem;\n display: grid;\n gap: 1.5rem;\n}\n\n.new-agent-dialog[_ngcontent-%COMP%] .advanced-settings[_ngcontent-%COMP%] .advanced-grid[_ngcontent-%COMP%] .setting-group[_ngcontent-%COMP%] label[_ngcontent-%COMP%] {\n display: block;\n font-weight: 500;\n margin-bottom: 0.5rem;\n color: var(--mj-text-secondary);\n}\n\n.new-agent-dialog[_ngcontent-%COMP%] .advanced-settings[_ngcontent-%COMP%] .advanced-grid[_ngcontent-%COMP%] .setting-group[_ngcontent-%COMP%] .slider-container[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 1rem;\n}\n\n.new-agent-dialog[_ngcontent-%COMP%] .advanced-settings[_ngcontent-%COMP%] .advanced-grid[_ngcontent-%COMP%] .setting-group[_ngcontent-%COMP%] .slider-container[_ngcontent-%COMP%] .temperature-slider[_ngcontent-%COMP%] {\n flex: 1;\n}\n\n.new-agent-dialog[_ngcontent-%COMP%] .advanced-settings[_ngcontent-%COMP%] .advanced-grid[_ngcontent-%COMP%] .setting-group[_ngcontent-%COMP%] .slider-container[_ngcontent-%COMP%] .slider-value[_ngcontent-%COMP%] {\n min-width: 3rem;\n text-align: right;\n font-weight: 600;\n color: var(--mj-brand-primary);\n}\n\n.new-agent-dialog[_ngcontent-%COMP%] .advanced-settings[_ngcontent-%COMP%] .advanced-grid[_ngcontent-%COMP%] .setting-group.checkbox-group[_ngcontent-%COMP%] label[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 0.5rem;\n cursor: pointer;\n font-weight: normal;\n}\n\n.new-agent-dialog[_ngcontent-%COMP%] .advanced-settings[_ngcontent-%COMP%] .advanced-grid[_ngcontent-%COMP%] .setting-group.checkbox-group[_ngcontent-%COMP%] label[_ngcontent-%COMP%] input[type=\"checkbox\"][_ngcontent-%COMP%] {\n cursor: pointer;\n}\n\n.new-agent-dialog[_ngcontent-%COMP%] .dialog-actions[_ngcontent-%COMP%] {\n display: flex;\n justify-content: flex-end;\n gap: 0.75rem;\n margin-top: 2rem;\n padding-top: 1.5rem;\n border-top: 1px solid var(--mj-border-default);\n}\n\n.new-agent-dialog[_ngcontent-%COMP%] .dialog-actions[_ngcontent-%COMP%] button[_ngcontent-%COMP%] {\n min-width: 120px;\n}\n\n.new-agent-dialog[_ngcontent-%COMP%] .dialog-actions[_ngcontent-%COMP%] button[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n margin-right: 0.5rem;\n}"] }); }
305
258
  }
306
259
  (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(NewAgentDialogComponent, [{
307
260
  type: Component,
308
- args: [{ standalone: false, selector: 'mj-new-agent-dialog', template: "<div class=\"new-agent-dialog\">\n <form [formGroup]=\"form\" (ngSubmit)=\"onSubmit()\">\n <!-- Parent Agent Info (if creating sub-agent) -->\n @if (config.parentAgentId) {\n <div class=\"parent-info\">\n <i class=\"fa-solid fa-robot\"></i>\n <span>Creating sub-agent for: <strong>{{ config.parentAgentName || 'Parent Agent' }}</strong></span>\n </div>\n }\n \n <!-- Loading State -->\n @if (isLoading$ | async) {\n <div class=\"loading-overlay\">\n <div class=\"spinner\">Loading...</div>\n </div>\n }\n \n <!-- Form Fields -->\n <div class=\"form-fields\">\n <!-- Agent Name -->\n <div class=\"form-group\">\n <label class=\"required\">Agent Name</label>\n <kendo-textbox \n formControlName=\"name\" \n placeholder=\"Enter a descriptive name for your agent\"\n [clearButton]=\"true\"\n class=\"full-width\">\n </kendo-textbox>\n @if (form.get('name')?.invalid && form.get('name')?.touched) {\n <div class=\"error-message\">\n <i class=\"fa-solid fa-exclamation-circle\"></i>\n Agent name is required\n </div>\n }\n </div>\n \n <!-- Description -->\n <div class=\"form-group\">\n <label>Description</label>\n <kendo-textarea \n formControlName=\"description\" \n placeholder=\"Describe what this agent does...\"\n [rows]=\"3\"\n class=\"full-width\">\n </kendo-textarea>\n </div>\n \n <!-- AI Model Selection -->\n <div class=\"form-group\">\n <label class=\"required\">AI Model</label>\n <kendo-dropdownlist \n formControlName=\"modelId\"\n [data]=\"models$ | async\"\n textField=\"Name\"\n valueField=\"ID\"\n placeholder=\"Select an AI model...\"\n class=\"full-width\">\n <ng-template kendoDropDownListItemTemplate let-dataItem>\n <div class=\"model-item\">\n <div class=\"model-icon\">\n <i class=\"fa-solid fa-microchip\"></i>\n </div>\n <div class=\"model-details\">\n <span class=\"model-name\">{{ dataItem.Name }}</span>\n <span class=\"model-vendor\">{{ dataItem.Vendor }}</span>\n </div>\n </div>\n </ng-template>\n </kendo-dropdownlist>\n @if (form.get('modelId')?.invalid && form.get('modelId')?.touched) {\n <div class=\"error-message\">\n <i class=\"fa-solid fa-exclamation-circle\"></i>\n Please select an AI model\n </div>\n }\n </div>\n \n <!-- System Prompt -->\n <div class=\"form-group\">\n <label>System Prompt</label>\n <kendo-textarea \n formControlName=\"systemPrompt\" \n placeholder=\"Define the agent's behavior and personality...\"\n [rows]=\"4\"\n class=\"full-width\">\n </kendo-textarea>\n <div class=\"field-hint\">\n <i class=\"fa-solid fa-info-circle\"></i>\n This sets the agent's context and behavior\n </div>\n </div>\n \n <!-- Advanced Settings -->\n <div class=\"advanced-settings\">\n <div class=\"section-header\">\n <i class=\"fa-solid fa-cog\"></i>\n Advanced Settings\n </div>\n \n <div class=\"advanced-grid\">\n <!-- Temperature -->\n <div class=\"setting-group\">\n <label>Temperature</label>\n <div class=\"slider-container\">\n <kendo-slider \n formControlName=\"temperature\"\n [min]=\"0\"\n [max]=\"2\"\n [smallStep]=\"0.1\"\n [showButtons]=\"true\"\n class=\"temperature-slider\">\n </kendo-slider>\n <span class=\"slider-value\">{{ form.get('temperature')?.value }}</span>\n </div>\n <div class=\"field-hint\">Higher values make output more creative</div>\n </div>\n \n <!-- Max Tokens -->\n <div class=\"setting-group\">\n <label>Max Tokens</label>\n <kendo-numerictextbox \n formControlName=\"maxTokens\"\n [min]=\"1\"\n [max]=\"8000\"\n [step]=\"100\"\n [format]=\"'n0'\"\n class=\"full-width\">\n </kendo-numerictextbox>\n <div class=\"field-hint\">Maximum response length</div>\n </div>\n \n <!-- Enable Streaming -->\n <div class=\"setting-group checkbox-group\">\n <label>\n <input type=\"checkbox\" formControlName=\"enableStreaming\" kendoCheckBox />\n <span>Enable Response Streaming</span>\n </label>\n <div class=\"field-hint\">Stream responses in real-time</div>\n </div>\n </div>\n </div>\n </div>\n \n <!-- Dialog Actions -->\n <div class=\"dialog-actions\">\n <button \n type=\"button\" \n kendoButton \n (click)=\"onCancel()\"\n [disabled]=\"isSubmitting\">\n Cancel\n </button>\n <button \n type=\"submit\" \n kendoButton \n themeColor=\"primary\"\n [disabled]=\"form.invalid || isSubmitting\">\n @if (isSubmitting) {\n <span class=\"spinner-small\"></span>\n <span>Creating...</span>\n } @else {\n <i class=\"fa-solid fa-plus-circle\"></i>\n <span>Create Agent</span>\n }\n </button>\n </div>\n </form>\n</div>", styles: [".new-agent-dialog {\n padding: 1.5rem;\n min-width: 500px;\n position: relative;\n}\n\n.new-agent-dialog .parent-info {\n background: color-mix(in srgb, var(--mj-brand-primary) 8%, var(--mj-bg-surface));\n border: 1px solid color-mix(in srgb, var(--mj-brand-primary) 25%, var(--mj-bg-surface));\n border-radius: 8px;\n padding: 0.75rem 1rem;\n margin-bottom: 1.5rem;\n display: flex;\n align-items: center;\n gap: 0.5rem;\n}\n\n.new-agent-dialog .parent-info i {\n color: var(--mj-brand-primary);\n font-size: 1.1rem;\n}\n\n.new-agent-dialog .parent-info strong {\n color: var(--mj-brand-primary);\n}\n\n.new-agent-dialog .loading-overlay {\n position: absolute;\n top: 0;\n left: 0;\n right: 0;\n bottom: 0;\n background: color-mix(in srgb, var(--mj-bg-surface) 90%, transparent);\n display: flex;\n align-items: center;\n justify-content: center;\n z-index: 100;\n border-radius: 8px;\n}\n\n.new-agent-dialog .form-fields .form-group {\n margin-bottom: 1.5rem;\n}\n\n.new-agent-dialog .form-fields .form-group label {\n display: block;\n font-weight: 500;\n margin-bottom: 0.5rem;\n color: var(--mj-text-secondary);\n}\n\n.new-agent-dialog .form-fields .form-group label.required::after {\n content: ' *';\n color: var(--mj-status-error);\n}\n\n.new-agent-dialog .form-fields .form-group .full-width {\n width: 100%;\n}\n\n.new-agent-dialog .form-fields .form-group .error-message {\n color: var(--mj-status-error);\n font-size: 0.875rem;\n margin-top: 0.25rem;\n display: flex;\n align-items: center;\n gap: 0.25rem;\n}\n\n.new-agent-dialog .form-fields .form-group .error-message i {\n font-size: 0.75rem;\n}\n\n.new-agent-dialog .form-fields .form-group .field-hint {\n font-size: 0.875rem;\n color: var(--mj-text-muted);\n margin-top: 0.25rem;\n display: flex;\n align-items: center;\n gap: 0.25rem;\n}\n\n.new-agent-dialog .form-fields .form-group .field-hint i {\n font-size: 0.75rem;\n}\n\n.new-agent-dialog .form-fields .model-item {\n display: flex;\n align-items: center;\n gap: 0.75rem;\n padding: 0.5rem 0;\n}\n\n.new-agent-dialog .form-fields .model-item .model-icon {\n width: 36px;\n height: 36px;\n border-radius: 6px;\n background: var(--mj-brand-primary);\n display: flex;\n align-items: center;\n justify-content: center;\n color: var(--mj-text-inverse);\n}\n\n.new-agent-dialog .form-fields .model-item .model-icon i {\n font-size: 1rem;\n}\n\n.new-agent-dialog .form-fields .model-item .model-details {\n display: flex;\n flex-direction: column;\n}\n\n.new-agent-dialog .form-fields .model-item .model-details .model-name {\n font-weight: 500;\n}\n\n.new-agent-dialog .form-fields .model-item .model-details .model-vendor {\n font-size: 0.75rem;\n color: var(--mj-text-muted);\n}\n\n.new-agent-dialog .form-fields .k-textbox,\n.new-agent-dialog .form-fields .k-textarea,\n.new-agent-dialog .form-fields .k-dropdown,\n.new-agent-dialog .form-fields .k-numerictextbox {\n border-radius: 6px;\n}\n\n.new-agent-dialog .advanced-settings {\n margin-top: 1.5rem;\n border-radius: 8px;\n overflow: hidden;\n}\n\n.new-agent-dialog .advanced-settings .k-expander-header {\n background: var(--mj-bg-surface-card);\n padding: 1rem;\n}\n\n.new-agent-dialog .advanced-settings .k-expander-header i {\n margin-right: 0.5rem;\n color: var(--mj-brand-primary);\n}\n\n.new-agent-dialog .advanced-settings .advanced-grid {\n padding: 1rem;\n display: grid;\n gap: 1.5rem;\n}\n\n.new-agent-dialog .advanced-settings .advanced-grid .setting-group label {\n display: block;\n font-weight: 500;\n margin-bottom: 0.5rem;\n color: var(--mj-text-secondary);\n}\n\n.new-agent-dialog .advanced-settings .advanced-grid .setting-group .slider-container {\n display: flex;\n align-items: center;\n gap: 1rem;\n}\n\n.new-agent-dialog .advanced-settings .advanced-grid .setting-group .slider-container .temperature-slider {\n flex: 1;\n}\n\n.new-agent-dialog .advanced-settings .advanced-grid .setting-group .slider-container .slider-value {\n min-width: 3rem;\n text-align: right;\n font-weight: 600;\n color: var(--mj-brand-primary);\n}\n\n.new-agent-dialog .advanced-settings .advanced-grid .setting-group.checkbox-group label {\n display: flex;\n align-items: center;\n gap: 0.5rem;\n cursor: pointer;\n font-weight: normal;\n}\n\n.new-agent-dialog .advanced-settings .advanced-grid .setting-group.checkbox-group label input[type=\"checkbox\"] {\n cursor: pointer;\n}\n\n.new-agent-dialog .dialog-actions {\n display: flex;\n justify-content: flex-end;\n gap: 0.75rem;\n margin-top: 2rem;\n padding-top: 1.5rem;\n border-top: 1px solid var(--mj-border-default);\n}\n\n.new-agent-dialog .dialog-actions button {\n min-width: 120px;\n}\n\n.new-agent-dialog .dialog-actions button i {\n margin-right: 0.5rem;\n}\n"] }]
309
- }], () => [{ type: i1.FormBuilder }, { type: i2.DialogRef }, { type: i3.NavigationService }, { type: i4.NotificationService }], { config: [{
261
+ args: [{ standalone: false, selector: 'mj-new-agent-dialog', template: "<div class=\"new-agent-dialog\">\n <form [formGroup]=\"form\" (ngSubmit)=\"onSubmit()\">\n <!-- Parent Agent Info (if creating sub-agent) -->\n @if (config.parentAgentId) {\n <div class=\"parent-info\">\n <i class=\"fa-solid fa-robot\"></i>\n <span>Creating sub-agent for: <strong>{{ config.parentAgentName || 'Parent Agent' }}</strong></span>\n </div>\n }\n \n <!-- Loading State -->\n @if (isLoading$ | async) {\n <div class=\"loading-overlay\">\n <div class=\"spinner\">Loading...</div>\n </div>\n }\n \n <!-- Form Fields -->\n <div class=\"form-fields\">\n <!-- Agent Name -->\n <div class=\"form-group\">\n <label class=\"required\">Agent Name</label>\n <input\n class=\"mj-input full-width\"\n formControlName=\"name\"\n placeholder=\"Enter a descriptive name for your agent\">\n @if (form.get('name')?.invalid && form.get('name')?.touched) {\n <div class=\"error-message\">\n <i class=\"fa-solid fa-exclamation-circle\"></i>\n Agent name is required\n </div>\n }\n </div>\n \n <!-- Description -->\n <div class=\"form-group\">\n <label>Description</label>\n <textarea\n class=\"mj-textarea full-width\"\n formControlName=\"description\"\n placeholder=\"Describe what this agent does...\"\n rows=\"3\"></textarea>\n </div>\n \n <!-- AI Model Selection -->\n <div class=\"form-group\">\n <label class=\"required\">AI Model</label>\n <mj-dropdown\n formControlName=\"modelId\"\n [Data]=\"models$ | async\"\n TextField=\"Name\"\n ValueField=\"ID\"\n Placeholder=\"Select an AI model...\"\n class=\"full-width\">\n </mj-dropdown>\n @if (form.get('modelId')?.invalid && form.get('modelId')?.touched) {\n <div class=\"error-message\">\n <i class=\"fa-solid fa-exclamation-circle\"></i>\n Please select an AI model\n </div>\n }\n </div>\n \n <!-- System Prompt -->\n <div class=\"form-group\">\n <label>System Prompt</label>\n <textarea\n class=\"mj-textarea full-width\"\n formControlName=\"systemPrompt\"\n placeholder=\"Define the agent's behavior and personality...\"\n rows=\"4\"></textarea>\n <div class=\"field-hint\">\n <i class=\"fa-solid fa-info-circle\"></i>\n This sets the agent's context and behavior\n </div>\n </div>\n \n <!-- Advanced Settings -->\n <div class=\"advanced-settings\">\n <div class=\"section-header\">\n <i class=\"fa-solid fa-cog\"></i>\n Advanced Settings\n </div>\n \n <div class=\"advanced-grid\">\n <!-- Temperature -->\n <div class=\"setting-group\">\n <label>Temperature</label>\n <div class=\"slider-container\">\n <input\n type=\"range\"\n class=\"mj-input temperature-slider\"\n formControlName=\"temperature\"\n min=\"0\"\n max=\"2\"\n step=\"0.1\">\n <span class=\"slider-value\">{{ form.get('temperature')?.value }}</span>\n </div>\n <div class=\"field-hint\">Higher values make output more creative</div>\n </div>\n \n <!-- Max Tokens -->\n <div class=\"setting-group\">\n <label>Max Tokens</label>\n <mj-numeric-input\n formControlName=\"maxTokens\"\n [Min]=\"1\"\n [Max]=\"8000\"\n [Step]=\"100\"\n Format=\"n0\"\n class=\"full-width\">\n </mj-numeric-input>\n <div class=\"field-hint\">Maximum response length</div>\n </div>\n \n <!-- Enable Streaming -->\n <div class=\"setting-group checkbox-group\">\n <label>\n <input type=\"checkbox\" formControlName=\"enableStreaming\" class=\"mj-checkbox\" />\n <span>Enable Response Streaming</span>\n </label>\n <div class=\"field-hint\">Stream responses in real-time</div>\n </div>\n </div>\n </div>\n </div>\n \n <!-- Dialog Actions -->\n <div class=\"dialog-actions\">\n <button\n type=\"button\"\n mjButton\n (click)=\"onCancel()\"\n [disabled]=\"isSubmitting\">\n Cancel\n </button>\n <button\n type=\"submit\"\n mjButton\n variant=\"primary\"\n [disabled]=\"form.invalid || isSubmitting\">\n @if (isSubmitting) {\n <span class=\"spinner-small\"></span>\n <span>Creating...</span>\n } @else {\n <i class=\"fa-solid fa-plus-circle\"></i>\n <span>Create Agent</span>\n }\n </button>\n </div>\n </form>\n</div>", styles: [".new-agent-dialog {\n padding: 1.5rem;\n min-width: 500px;\n position: relative;\n}\n\n.new-agent-dialog .parent-info {\n background: color-mix(in srgb, var(--mj-brand-primary) 8%, var(--mj-bg-surface));\n border: 1px solid color-mix(in srgb, var(--mj-brand-primary) 25%, var(--mj-bg-surface));\n border-radius: 8px;\n padding: 0.75rem 1rem;\n margin-bottom: 1.5rem;\n display: flex;\n align-items: center;\n gap: 0.5rem;\n}\n\n.new-agent-dialog .parent-info i {\n color: var(--mj-brand-primary);\n font-size: 1.1rem;\n}\n\n.new-agent-dialog .parent-info strong {\n color: var(--mj-brand-primary);\n}\n\n.new-agent-dialog .loading-overlay {\n position: absolute;\n top: 0;\n left: 0;\n right: 0;\n bottom: 0;\n background: color-mix(in srgb, var(--mj-bg-surface) 90%, transparent);\n display: flex;\n align-items: center;\n justify-content: center;\n z-index: 100;\n border-radius: 8px;\n}\n\n.new-agent-dialog .form-fields .form-group {\n margin-bottom: 1.5rem;\n}\n\n.new-agent-dialog .form-fields .form-group label {\n display: block;\n font-weight: 500;\n margin-bottom: 0.5rem;\n color: var(--mj-text-secondary);\n}\n\n.new-agent-dialog .form-fields .form-group label.required::after {\n content: ' *';\n color: var(--mj-status-error);\n}\n\n.new-agent-dialog .form-fields .form-group .full-width {\n width: 100%;\n}\n\n.new-agent-dialog .form-fields .form-group .error-message {\n color: var(--mj-status-error);\n font-size: 0.875rem;\n margin-top: 0.25rem;\n display: flex;\n align-items: center;\n gap: 0.25rem;\n}\n\n.new-agent-dialog .form-fields .form-group .error-message i {\n font-size: 0.75rem;\n}\n\n.new-agent-dialog .form-fields .form-group .field-hint {\n font-size: 0.875rem;\n color: var(--mj-text-muted);\n margin-top: 0.25rem;\n display: flex;\n align-items: center;\n gap: 0.25rem;\n}\n\n.new-agent-dialog .form-fields .form-group .field-hint i {\n font-size: 0.75rem;\n}\n\n.new-agent-dialog .form-fields .model-item {\n display: flex;\n align-items: center;\n gap: 0.75rem;\n padding: 0.5rem 0;\n}\n\n.new-agent-dialog .form-fields .model-item .model-icon {\n width: 36px;\n height: 36px;\n border-radius: 6px;\n background: var(--mj-brand-primary);\n display: flex;\n align-items: center;\n justify-content: center;\n color: var(--mj-text-inverse);\n}\n\n.new-agent-dialog .form-fields .model-item .model-icon i {\n font-size: 1rem;\n}\n\n.new-agent-dialog .form-fields .model-item .model-details {\n display: flex;\n flex-direction: column;\n}\n\n.new-agent-dialog .form-fields .model-item .model-details .model-name {\n font-weight: 500;\n}\n\n.new-agent-dialog .form-fields .model-item .model-details .model-vendor {\n font-size: 0.75rem;\n color: var(--mj-text-muted);\n}\n\n.new-agent-dialog .form-fields .k-textbox,\n.new-agent-dialog .form-fields .k-textarea,\n.new-agent-dialog .form-fields .k-dropdown,\n.new-agent-dialog .form-fields .k-numerictextbox {\n border-radius: 6px;\n}\n\n.new-agent-dialog .advanced-settings {\n margin-top: 1.5rem;\n border-radius: 8px;\n overflow: hidden;\n}\n\n.new-agent-dialog .advanced-settings .k-expander-header {\n background: var(--mj-bg-surface-card);\n padding: 1rem;\n}\n\n.new-agent-dialog .advanced-settings .k-expander-header i {\n margin-right: 0.5rem;\n color: var(--mj-brand-primary);\n}\n\n.new-agent-dialog .advanced-settings .advanced-grid {\n padding: 1rem;\n display: grid;\n gap: 1.5rem;\n}\n\n.new-agent-dialog .advanced-settings .advanced-grid .setting-group label {\n display: block;\n font-weight: 500;\n margin-bottom: 0.5rem;\n color: var(--mj-text-secondary);\n}\n\n.new-agent-dialog .advanced-settings .advanced-grid .setting-group .slider-container {\n display: flex;\n align-items: center;\n gap: 1rem;\n}\n\n.new-agent-dialog .advanced-settings .advanced-grid .setting-group .slider-container .temperature-slider {\n flex: 1;\n}\n\n.new-agent-dialog .advanced-settings .advanced-grid .setting-group .slider-container .slider-value {\n min-width: 3rem;\n text-align: right;\n font-weight: 600;\n color: var(--mj-brand-primary);\n}\n\n.new-agent-dialog .advanced-settings .advanced-grid .setting-group.checkbox-group label {\n display: flex;\n align-items: center;\n gap: 0.5rem;\n cursor: pointer;\n font-weight: normal;\n}\n\n.new-agent-dialog .advanced-settings .advanced-grid .setting-group.checkbox-group label input[type=\"checkbox\"] {\n cursor: pointer;\n}\n\n.new-agent-dialog .dialog-actions {\n display: flex;\n justify-content: flex-end;\n gap: 0.75rem;\n margin-top: 2rem;\n padding-top: 1.5rem;\n border-top: 1px solid var(--mj-border-default);\n}\n\n.new-agent-dialog .dialog-actions button {\n min-width: 120px;\n}\n\n.new-agent-dialog .dialog-actions button i {\n margin-right: 0.5rem;\n}\n"] }]
262
+ }], () => [{ type: i1.FormBuilder }, { type: i2.NavigationService }], { config: [{
310
263
  type: Input
311
264
  }] }); })();
312
265
  (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassDebugInfo(NewAgentDialogComponent, { className: "NewAgentDialogComponent", filePath: "src/lib/custom/AIAgents/new-agent-dialog.component.ts", lineNumber: 24 }); })();
@@ -1 +1 @@
1
- {"version":3,"file":"new-agent-dialog.component.js","sourceRoot":"","sources":["../../../../src/lib/custom/AIAgents/new-agent-dialog.component.ts","../../../../src/lib/custom/AIAgents/new-agent-dialog.component.html"],"names":[],"mappings":"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","sourcesContent":["import { Component, Input, OnInit } from '@angular/core';\nimport { FormBuilder, FormGroup, Validators } from '@angular/forms';\nimport { DialogRef } from '@progress/kendo-angular-dialog';\nimport { NotificationService } from '@progress/kendo-angular-notification';\nimport { Metadata } from '@memberjunction/core';\nimport { MJAIAgentTypeEntity } from '@memberjunction/core-entities';\nimport { MJAIAgentEntityExtended, MJAIModelEntityExtended } from \"@memberjunction/ai-core-plus\";\nimport { NavigationService } from '@memberjunction/ng-shared';\nimport { BehaviorSubject } from 'rxjs';\nimport { AIEngineBase } from '@memberjunction/ai-engine-base';\n\nexport interface NewAgentConfig {\n parentAgentId?: string;\n parentAgentName?: string;\n redirectToForm?: boolean;\n}\n\n@Component({\n standalone: false,\n selector: 'mj-new-agent-dialog',\n templateUrl: './new-agent-dialog.component.html',\n styleUrls: ['./new-agent-dialog.component.css']\n})\nexport class NewAgentDialogComponent implements OnInit {\n @Input() config: NewAgentConfig = {\n redirectToForm: true\n };\n \n form!: FormGroup;\n isLoading$ = new BehaviorSubject<boolean>(false);\n models$ = new BehaviorSubject<MJAIModelEntityExtended[]>([]);\n agentTypes$ = new BehaviorSubject<MJAIAgentTypeEntity[]>([]);\n isSubmitting = false;\n \n constructor(\n private fb: FormBuilder,\n private dialog: DialogRef,\n private navigationService: NavigationService,\n private notificationService: NotificationService\n ) {}\n \n ngOnInit() {\n this.initializeForm();\n this.loadData();\n }\n \n private initializeForm() {\n this.form = this.fb.group({\n name: ['', [Validators.required, Validators.maxLength(255)]],\n description: [''],\n modelId: ['', Validators.required],\n agentType: ['standard', Validators.required],\n systemPrompt: ['You are a helpful AI assistant.'],\n enableStreaming: [true],\n temperature: [0.7, [Validators.min(0), Validators.max(2)]],\n maxTokens: [2000, [Validators.min(1), Validators.max(8000)]]\n });\n }\n \n private async loadData() {\n this.isLoading$.next(true);\n \n try {\n const engine = AIEngineBase.Instance;\n await engine.Config(false);\n const models = engine.Models;\n models.sort ((a, b) => { \n return a.Name.localeCompare(b.Name);\n });\n \n this.models$.next(models || []);\n \n // Pre-select first model if available\n if (models && models.length > 0) {\n this.form.patchValue({ modelId: models[0].ID });\n }\n \n const agentTypes = engine.AgentTypes;\n this.agentTypes$.next(agentTypes as MJAIAgentTypeEntity[] || []);\n } catch (error) {\n console.error('Error loading data:', error);\n this.showError('Failed to load required data');\n } finally {\n this.isLoading$.next(false);\n }\n }\n \n async onSubmit() {\n if (this.form.invalid || this.isSubmitting) {\n return;\n }\n \n this.isSubmitting = true;\n \n try {\n const md = new Metadata();\n const agent = await md.GetEntityObject<MJAIAgentEntityExtended>('MJ: AI Agents');\n \n if (!agent) {\n throw new Error('Failed to create agent entity');\n }\n \n // Set agent properties\n agent.Name = this.form.value.name;\n agent.Description = this.form.value.description;\n \n // Set parent agent if provided\n if (this.config.parentAgentId) {\n agent.ParentID = this.config.parentAgentId;\n }\n \n // Set execution mode\n agent.ExecutionMode = 'Sequential';\n agent.ExecutionOrder = 0;\n agent.ExposeAsAction = false;\n \n // Save the agent\n const saveResult = await agent.Save();\n \n if (saveResult) {\n this.showSuccess('Agent created successfully!');\n \n // Close dialog with the new agent\n this.dialog.close({ agent, action: 'created' });\n \n // Redirect to form if configured\n if (this.config.redirectToForm && !this.config.parentAgentId) {\n // Only redirect for top-level agents - use NavigationService to open the record\n setTimeout(() => {\n this.navigationService.OpenEntityRecord('MJ: AI Agents', agent.PrimaryKey);\n }, 100);\n }\n } else {\n throw new Error('Failed to save agent');\n }\n } catch (error: any) {\n console.error('Error creating agent:', error);\n this.showError('Failed to create agent: ' + (error.message || 'Unknown error'));\n } finally {\n this.isSubmitting = false;\n }\n }\n \n onCancel() {\n this.dialog.close({ action: 'cancelled' });\n }\n \n private showSuccess(message: string) {\n this.notificationService.show({\n content: message,\n type: { style: 'success', icon: true },\n position: { horizontal: 'right', vertical: 'top' },\n animation: { type: 'slide', duration: 300 },\n hideAfter: 3000\n });\n }\n \n private showError(message: string) {\n this.notificationService.show({\n content: message,\n type: { style: 'error', icon: true },\n position: { horizontal: 'right', vertical: 'top' },\n animation: { type: 'slide', duration: 300 },\n hideAfter: 5000\n });\n }\n}","<div class=\"new-agent-dialog\">\n <form [formGroup]=\"form\" (ngSubmit)=\"onSubmit()\">\n <!-- Parent Agent Info (if creating sub-agent) -->\n @if (config.parentAgentId) {\n <div class=\"parent-info\">\n <i class=\"fa-solid fa-robot\"></i>\n <span>Creating sub-agent for: <strong>{{ config.parentAgentName || 'Parent Agent' }}</strong></span>\n </div>\n }\n \n <!-- Loading State -->\n @if (isLoading$ | async) {\n <div class=\"loading-overlay\">\n <div class=\"spinner\">Loading...</div>\n </div>\n }\n \n <!-- Form Fields -->\n <div class=\"form-fields\">\n <!-- Agent Name -->\n <div class=\"form-group\">\n <label class=\"required\">Agent Name</label>\n <kendo-textbox \n formControlName=\"name\" \n placeholder=\"Enter a descriptive name for your agent\"\n [clearButton]=\"true\"\n class=\"full-width\">\n </kendo-textbox>\n @if (form.get('name')?.invalid && form.get('name')?.touched) {\n <div class=\"error-message\">\n <i class=\"fa-solid fa-exclamation-circle\"></i>\n Agent name is required\n </div>\n }\n </div>\n \n <!-- Description -->\n <div class=\"form-group\">\n <label>Description</label>\n <kendo-textarea \n formControlName=\"description\" \n placeholder=\"Describe what this agent does...\"\n [rows]=\"3\"\n class=\"full-width\">\n </kendo-textarea>\n </div>\n \n <!-- AI Model Selection -->\n <div class=\"form-group\">\n <label class=\"required\">AI Model</label>\n <kendo-dropdownlist \n formControlName=\"modelId\"\n [data]=\"models$ | async\"\n textField=\"Name\"\n valueField=\"ID\"\n placeholder=\"Select an AI model...\"\n class=\"full-width\">\n <ng-template kendoDropDownListItemTemplate let-dataItem>\n <div class=\"model-item\">\n <div class=\"model-icon\">\n <i class=\"fa-solid fa-microchip\"></i>\n </div>\n <div class=\"model-details\">\n <span class=\"model-name\">{{ dataItem.Name }}</span>\n <span class=\"model-vendor\">{{ dataItem.Vendor }}</span>\n </div>\n </div>\n </ng-template>\n </kendo-dropdownlist>\n @if (form.get('modelId')?.invalid && form.get('modelId')?.touched) {\n <div class=\"error-message\">\n <i class=\"fa-solid fa-exclamation-circle\"></i>\n Please select an AI model\n </div>\n }\n </div>\n \n <!-- System Prompt -->\n <div class=\"form-group\">\n <label>System Prompt</label>\n <kendo-textarea \n formControlName=\"systemPrompt\" \n placeholder=\"Define the agent's behavior and personality...\"\n [rows]=\"4\"\n class=\"full-width\">\n </kendo-textarea>\n <div class=\"field-hint\">\n <i class=\"fa-solid fa-info-circle\"></i>\n This sets the agent's context and behavior\n </div>\n </div>\n \n <!-- Advanced Settings -->\n <div class=\"advanced-settings\">\n <div class=\"section-header\">\n <i class=\"fa-solid fa-cog\"></i>\n Advanced Settings\n </div>\n \n <div class=\"advanced-grid\">\n <!-- Temperature -->\n <div class=\"setting-group\">\n <label>Temperature</label>\n <div class=\"slider-container\">\n <kendo-slider \n formControlName=\"temperature\"\n [min]=\"0\"\n [max]=\"2\"\n [smallStep]=\"0.1\"\n [showButtons]=\"true\"\n class=\"temperature-slider\">\n </kendo-slider>\n <span class=\"slider-value\">{{ form.get('temperature')?.value }}</span>\n </div>\n <div class=\"field-hint\">Higher values make output more creative</div>\n </div>\n \n <!-- Max Tokens -->\n <div class=\"setting-group\">\n <label>Max Tokens</label>\n <kendo-numerictextbox \n formControlName=\"maxTokens\"\n [min]=\"1\"\n [max]=\"8000\"\n [step]=\"100\"\n [format]=\"'n0'\"\n class=\"full-width\">\n </kendo-numerictextbox>\n <div class=\"field-hint\">Maximum response length</div>\n </div>\n \n <!-- Enable Streaming -->\n <div class=\"setting-group checkbox-group\">\n <label>\n <input type=\"checkbox\" formControlName=\"enableStreaming\" kendoCheckBox />\n <span>Enable Response Streaming</span>\n </label>\n <div class=\"field-hint\">Stream responses in real-time</div>\n </div>\n </div>\n </div>\n </div>\n \n <!-- Dialog Actions -->\n <div class=\"dialog-actions\">\n <button \n type=\"button\" \n kendoButton \n (click)=\"onCancel()\"\n [disabled]=\"isSubmitting\">\n Cancel\n </button>\n <button \n type=\"submit\" \n kendoButton \n themeColor=\"primary\"\n [disabled]=\"form.invalid || isSubmitting\">\n @if (isSubmitting) {\n <span class=\"spinner-small\"></span>\n <span>Creating...</span>\n } @else {\n <i class=\"fa-solid fa-plus-circle\"></i>\n <span>Create Agent</span>\n }\n </button>\n </div>\n </form>\n</div>"]}
1
+ {"version":3,"file":"new-agent-dialog.component.js","sourceRoot":"","sources":["../../../../src/lib/custom/AIAgents/new-agent-dialog.component.ts","../../../../src/lib/custom/AIAgents/new-agent-dialog.component.html"],"names":[],"mappings":"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","sourcesContent":["import { Component, Input, OnInit } from '@angular/core';\nimport { FormBuilder, FormGroup, Validators } from '@angular/forms';\nimport { Metadata } from '@memberjunction/core';\nimport { MJAIAgentTypeEntity } from '@memberjunction/core-entities';\nimport { MJAIAgentEntityExtended, MJAIModelEntityExtended } from \"@memberjunction/ai-core-plus\";\nimport { NavigationService } from '@memberjunction/ng-shared';\nimport { MJNotificationService } from '@memberjunction/ng-notifications';\nimport { MJDialogRef } from '@memberjunction/ng-ui-components';\nimport { BehaviorSubject } from 'rxjs';\nimport { AIEngineBase } from '@memberjunction/ai-engine-base';\n\nexport interface NewAgentConfig {\n parentAgentId?: string;\n parentAgentName?: string;\n redirectToForm?: boolean;\n}\n\n@Component({\n standalone: false,\n selector: 'mj-new-agent-dialog',\n templateUrl: './new-agent-dialog.component.html',\n styleUrls: ['./new-agent-dialog.component.css']\n})\nexport class NewAgentDialogComponent implements OnInit {\n @Input() config: NewAgentConfig = {\n redirectToForm: true\n };\n \n form!: FormGroup;\n isLoading$ = new BehaviorSubject<boolean>(false);\n models$ = new BehaviorSubject<MJAIModelEntityExtended[]>([]);\n agentTypes$ = new BehaviorSubject<MJAIAgentTypeEntity[]>([]);\n isSubmitting = false;\n \n /** Set by NewAgentDialogService after creation */\n public dialogRef: MJDialogRef | null = null;\n\n constructor(\n private fb: FormBuilder,\n private navigationService: NavigationService\n ) {}\n \n ngOnInit() {\n this.initializeForm();\n this.loadData();\n }\n \n private initializeForm() {\n this.form = this.fb.group({\n name: ['', [Validators.required, Validators.maxLength(255)]],\n description: [''],\n modelId: ['', Validators.required],\n agentType: ['standard', Validators.required],\n systemPrompt: ['You are a helpful AI assistant.'],\n enableStreaming: [true],\n temperature: [0.7, [Validators.min(0), Validators.max(2)]],\n maxTokens: [2000, [Validators.min(1), Validators.max(8000)]]\n });\n }\n \n private async loadData() {\n this.isLoading$.next(true);\n \n try {\n const engine = AIEngineBase.Instance;\n await engine.Config(false);\n const models = engine.Models;\n models.sort ((a, b) => { \n return a.Name.localeCompare(b.Name);\n });\n \n this.models$.next(models || []);\n \n // Pre-select first model if available\n if (models && models.length > 0) {\n this.form.patchValue({ modelId: models[0].ID });\n }\n \n const agentTypes = engine.AgentTypes;\n this.agentTypes$.next(agentTypes as MJAIAgentTypeEntity[] || []);\n } catch (error) {\n console.error('Error loading data:', error);\n console.error('Failed to load required data');\n } finally {\n this.isLoading$.next(false);\n }\n }\n \n async onSubmit() {\n if (this.form.invalid || this.isSubmitting) {\n return;\n }\n \n this.isSubmitting = true;\n \n try {\n const md = new Metadata();\n const agent = await md.GetEntityObject<MJAIAgentEntityExtended>('MJ: AI Agents');\n \n if (!agent) {\n throw new Error('Failed to create agent entity');\n }\n \n // Set agent properties\n agent.Name = this.form.value.name;\n agent.Description = this.form.value.description;\n \n // Set parent agent if provided\n if (this.config.parentAgentId) {\n agent.ParentID = this.config.parentAgentId;\n }\n \n // Set execution mode\n agent.ExecutionMode = 'Sequential';\n agent.ExecutionOrder = 0;\n agent.ExposeAsAction = false;\n \n // Save the agent\n const saveResult = await agent.Save();\n \n if (saveResult) {\n MJNotificationService.Instance.CreateSimpleNotification('Agent created successfully!', 'success', 3000);\n\n // Close dialog with the new agent\n this.dialogRef?.Close({ agent, action: 'created' });\n\n // Redirect to form if configured\n if (this.config.redirectToForm && !this.config.parentAgentId) {\n // Only redirect for top-level agents - use NavigationService to open the record\n setTimeout(() => {\n this.navigationService.OpenEntityRecord('MJ: AI Agents', agent.PrimaryKey);\n }, 100);\n }\n } else {\n throw new Error('Failed to save agent');\n }\n } catch (error: unknown) {\n const errorMessage = error instanceof Error ? error.message : 'Unknown error';\n console.error('Error creating agent:', error);\n MJNotificationService.Instance.CreateSimpleNotification('Failed to create agent: ' + errorMessage, 'error', 5000);\n } finally {\n this.isSubmitting = false;\n }\n }\n\n onCancel() {\n this.dialogRef?.Close({ action: 'cancelled' });\n }\n}","<div class=\"new-agent-dialog\">\n <form [formGroup]=\"form\" (ngSubmit)=\"onSubmit()\">\n <!-- Parent Agent Info (if creating sub-agent) -->\n @if (config.parentAgentId) {\n <div class=\"parent-info\">\n <i class=\"fa-solid fa-robot\"></i>\n <span>Creating sub-agent for: <strong>{{ config.parentAgentName || 'Parent Agent' }}</strong></span>\n </div>\n }\n \n <!-- Loading State -->\n @if (isLoading$ | async) {\n <div class=\"loading-overlay\">\n <div class=\"spinner\">Loading...</div>\n </div>\n }\n \n <!-- Form Fields -->\n <div class=\"form-fields\">\n <!-- Agent Name -->\n <div class=\"form-group\">\n <label class=\"required\">Agent Name</label>\n <input\n class=\"mj-input full-width\"\n formControlName=\"name\"\n placeholder=\"Enter a descriptive name for your agent\">\n @if (form.get('name')?.invalid && form.get('name')?.touched) {\n <div class=\"error-message\">\n <i class=\"fa-solid fa-exclamation-circle\"></i>\n Agent name is required\n </div>\n }\n </div>\n \n <!-- Description -->\n <div class=\"form-group\">\n <label>Description</label>\n <textarea\n class=\"mj-textarea full-width\"\n formControlName=\"description\"\n placeholder=\"Describe what this agent does...\"\n rows=\"3\"></textarea>\n </div>\n \n <!-- AI Model Selection -->\n <div class=\"form-group\">\n <label class=\"required\">AI Model</label>\n <mj-dropdown\n formControlName=\"modelId\"\n [Data]=\"models$ | async\"\n TextField=\"Name\"\n ValueField=\"ID\"\n Placeholder=\"Select an AI model...\"\n class=\"full-width\">\n </mj-dropdown>\n @if (form.get('modelId')?.invalid && form.get('modelId')?.touched) {\n <div class=\"error-message\">\n <i class=\"fa-solid fa-exclamation-circle\"></i>\n Please select an AI model\n </div>\n }\n </div>\n \n <!-- System Prompt -->\n <div class=\"form-group\">\n <label>System Prompt</label>\n <textarea\n class=\"mj-textarea full-width\"\n formControlName=\"systemPrompt\"\n placeholder=\"Define the agent's behavior and personality...\"\n rows=\"4\"></textarea>\n <div class=\"field-hint\">\n <i class=\"fa-solid fa-info-circle\"></i>\n This sets the agent's context and behavior\n </div>\n </div>\n \n <!-- Advanced Settings -->\n <div class=\"advanced-settings\">\n <div class=\"section-header\">\n <i class=\"fa-solid fa-cog\"></i>\n Advanced Settings\n </div>\n \n <div class=\"advanced-grid\">\n <!-- Temperature -->\n <div class=\"setting-group\">\n <label>Temperature</label>\n <div class=\"slider-container\">\n <input\n type=\"range\"\n class=\"mj-input temperature-slider\"\n formControlName=\"temperature\"\n min=\"0\"\n max=\"2\"\n step=\"0.1\">\n <span class=\"slider-value\">{{ form.get('temperature')?.value }}</span>\n </div>\n <div class=\"field-hint\">Higher values make output more creative</div>\n </div>\n \n <!-- Max Tokens -->\n <div class=\"setting-group\">\n <label>Max Tokens</label>\n <mj-numeric-input\n formControlName=\"maxTokens\"\n [Min]=\"1\"\n [Max]=\"8000\"\n [Step]=\"100\"\n Format=\"n0\"\n class=\"full-width\">\n </mj-numeric-input>\n <div class=\"field-hint\">Maximum response length</div>\n </div>\n \n <!-- Enable Streaming -->\n <div class=\"setting-group checkbox-group\">\n <label>\n <input type=\"checkbox\" formControlName=\"enableStreaming\" class=\"mj-checkbox\" />\n <span>Enable Response Streaming</span>\n </label>\n <div class=\"field-hint\">Stream responses in real-time</div>\n </div>\n </div>\n </div>\n </div>\n \n <!-- Dialog Actions -->\n <div class=\"dialog-actions\">\n <button\n type=\"button\"\n mjButton\n (click)=\"onCancel()\"\n [disabled]=\"isSubmitting\">\n Cancel\n </button>\n <button\n type=\"submit\"\n mjButton\n variant=\"primary\"\n [disabled]=\"form.invalid || isSubmitting\">\n @if (isSubmitting) {\n <span class=\"spinner-small\"></span>\n <span>Creating...</span>\n } @else {\n <i class=\"fa-solid fa-plus-circle\"></i>\n <span>Create Agent</span>\n }\n </button>\n </div>\n </form>\n</div>"]}
@@ -1,5 +1,5 @@
1
1
  import { ViewContainerRef } from '@angular/core';
2
- import { DialogService } from '@progress/kendo-angular-dialog';
2
+ import { MJDialogService } from '@memberjunction/ng-ui-components';
3
3
  import { NewAgentConfig } from './new-agent-dialog.component';
4
4
  import { MJAIAgentEntityExtended } from '@memberjunction/ai-core-plus';
5
5
  import { Observable } from 'rxjs';
@@ -11,7 +11,7 @@ export interface NewAgentDialogResult {
11
11
  export declare class NewAgentDialogService {
12
12
  private dialogService;
13
13
  private dialogRef;
14
- constructor(dialogService: DialogService);
14
+ constructor(dialogService: MJDialogService);
15
15
  /**
16
16
  * Opens the New Agent dialog
17
17
  * @param config Configuration for the dialog
@@ -1 +1 @@
1
- {"version":3,"file":"new-agent-dialog.service.d.ts","sourceRoot":"","sources":["../../../../src/lib/custom/AIAgents/new-agent-dialog.service.ts"],"names":[],"mappings":"AAAA,OAAO,EAAc,gBAAgB,EAAE,MAAM,eAAe,CAAC;AAC7D,OAAO,EAAE,aAAa,EAA6B,MAAM,gCAAgC,CAAC;AAC1F,OAAO,EAA2B,cAAc,EAAE,MAAM,8BAA8B,CAAC;AACvF,OAAO,EAAE,uBAAuB,EAAE,MAAM,8BAA8B,CAAC;AACvE,OAAO,EAAE,UAAU,EAAW,MAAM,MAAM,CAAC;;AAE3C,MAAM,WAAW,oBAAoB;IACnC,KAAK,CAAC,EAAE,uBAAuB,CAAC;IAChC,MAAM,EAAE,SAAS,GAAG,WAAW,CAAC;CACjC;AAED,qBAGa,qBAAqB;IAGpB,OAAO,CAAC,aAAa;IAFjC,OAAO,CAAC,SAAS,CAA0B;gBAEvB,aAAa,EAAE,aAAa;IAEhD;;;;;OAKG;IACH,IAAI,CAAC,MAAM,GAAE,cAAmB,EAAE,gBAAgB,CAAC,EAAE,gBAAgB,GAAG,UAAU,CAAC,oBAAoB,CAAC;IAiCxG;;OAEG;IACH,eAAe,CAAC,gBAAgB,CAAC,EAAE,gBAAgB,GAAG,UAAU,CAAC,oBAAoB,CAAC;IAMtF;;OAEG;IACH,eAAe,CAAC,aAAa,EAAE,MAAM,EAAE,eAAe,EAAE,MAAM,EAAE,gBAAgB,CAAC,EAAE,gBAAgB,GAAG,UAAU,CAAC,oBAAoB,CAAC;IAQtI;;OAEG;IACH,KAAK,IAAI,IAAI;IAOb;;OAEG;IACH,MAAM,IAAI,OAAO;yCA7EN,qBAAqB;6CAArB,qBAAqB;CAgFjC"}
1
+ {"version":3,"file":"new-agent-dialog.service.d.ts","sourceRoot":"","sources":["../../../../src/lib/custom/AIAgents/new-agent-dialog.service.ts"],"names":[],"mappings":"AAAA,OAAO,EAAc,gBAAgB,EAAE,MAAM,eAAe,CAAC;AAC7D,OAAO,EAAE,eAAe,EAAiC,MAAM,kCAAkC,CAAC;AAClG,OAAO,EAA2B,cAAc,EAAE,MAAM,8BAA8B,CAAC;AACvF,OAAO,EAAE,uBAAuB,EAAE,MAAM,8BAA8B,CAAC;AACvE,OAAO,EAAE,UAAU,EAAW,MAAM,MAAM,CAAC;;AAE3C,MAAM,WAAW,oBAAoB;IACnC,KAAK,CAAC,EAAE,uBAAuB,CAAC;IAChC,MAAM,EAAE,SAAS,GAAG,WAAW,CAAC;CACjC;AAED,qBAGa,qBAAqB;IAGpB,OAAO,CAAC,aAAa;IAFjC,OAAO,CAAC,SAAS,CAA4B;gBAEzB,aAAa,EAAE,eAAe;IAElD;;;;;OAKG;IACH,IAAI,CAAC,MAAM,GAAE,cAAmB,EAAE,gBAAgB,CAAC,EAAE,gBAAgB,GAAG,UAAU,CAAC,oBAAoB,CAAC;IAgCxG;;OAEG;IACH,eAAe,CAAC,gBAAgB,CAAC,EAAE,gBAAgB,GAAG,UAAU,CAAC,oBAAoB,CAAC;IAMtF;;OAEG;IACH,eAAe,CAAC,aAAa,EAAE,MAAM,EAAE,eAAe,EAAE,MAAM,EAAE,gBAAgB,CAAC,EAAE,gBAAgB,GAAG,UAAU,CAAC,oBAAoB,CAAC;IAQtI;;OAEG;IACH,KAAK,IAAI,IAAI;IAOb;;OAEG;IACH,MAAM,IAAI,OAAO;yCA5EN,qBAAqB;6CAArB,qBAAqB;CA+EjC"}
@@ -2,7 +2,7 @@ import { Injectable } from '@angular/core';
2
2
  import { NewAgentDialogComponent } from './new-agent-dialog.component';
3
3
  import { Subject } from 'rxjs';
4
4
  import * as i0 from "@angular/core";
5
- import * as i1 from "@progress/kendo-angular-dialog";
5
+ import * as i1 from "@memberjunction/ng-ui-components";
6
6
  export class NewAgentDialogService {
7
7
  constructor(dialogService) {
8
8
  this.dialogService = dialogService;
@@ -21,18 +21,17 @@ export class NewAgentDialogService {
21
21
  content: NewAgentDialogComponent,
22
22
  width: 600,
23
23
  height: 600,
24
- minWidth: 500,
25
- minHeight: 500,
26
- preventAction: () => false
24
+ minWidth: 500
27
25
  };
28
26
  this.dialogRef = this.dialogService.open(dialogSettings);
29
27
  // Configure the component
30
- const component = this.dialogRef.content.instance;
28
+ const component = this.dialogRef.Content.instance;
31
29
  component.config = config;
30
+ component.dialogRef = this.dialogRef;
32
31
  // Handle dialog result
33
- this.dialogRef.result.subscribe((result) => {
34
- if (result && result.agent) {
35
- resultSubject.next({ agent: result.agent, action: 'created' });
32
+ this.dialogRef.Result.subscribe((result) => {
33
+ if (result && typeof result === 'object' && 'agent' in result) {
34
+ resultSubject.next({ agent: result['agent'], action: 'created' });
36
35
  }
37
36
  else {
38
37
  resultSubject.next({ action: 'cancelled' });
@@ -65,7 +64,7 @@ export class NewAgentDialogService {
65
64
  */
66
65
  close() {
67
66
  if (this.dialogRef) {
68
- this.dialogRef.close();
67
+ this.dialogRef.Close();
69
68
  this.dialogRef = null;
70
69
  }
71
70
  }
@@ -75,7 +74,7 @@ export class NewAgentDialogService {
75
74
  isOpen() {
76
75
  return this.dialogRef !== null;
77
76
  }
78
- static { this.ɵfac = function NewAgentDialogService_Factory(__ngFactoryType__) { return new (__ngFactoryType__ || NewAgentDialogService)(i0.ɵɵinject(i1.DialogService)); }; }
77
+ static { this.ɵfac = function NewAgentDialogService_Factory(__ngFactoryType__) { return new (__ngFactoryType__ || NewAgentDialogService)(i0.ɵɵinject(i1.MJDialogService)); }; }
79
78
  static { this.ɵprov = /*@__PURE__*/ i0.ɵɵdefineInjectable({ token: NewAgentDialogService, factory: NewAgentDialogService.ɵfac, providedIn: 'root' }); }
80
79
  }
81
80
  (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(NewAgentDialogService, [{
@@ -83,5 +82,5 @@ export class NewAgentDialogService {
83
82
  args: [{
84
83
  providedIn: 'root'
85
84
  }]
86
- }], () => [{ type: i1.DialogService }], null); })();
85
+ }], () => [{ type: i1.MJDialogService }], null); })();
87
86
  //# sourceMappingURL=new-agent-dialog.service.js.map