@memberjunction/ng-dashboards 5.24.0 → 5.26.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 (284) hide show
  1. package/dist/AI/components/agents/agent-configuration.component.d.ts +15 -33
  2. package/dist/AI/components/agents/agent-configuration.component.d.ts.map +1 -1
  3. package/dist/AI/components/agents/agent-configuration.component.js +233 -493
  4. package/dist/AI/components/agents/agent-configuration.component.js.map +1 -1
  5. package/dist/AI/components/agents/agent-editor.component.d.ts +2 -2
  6. package/dist/AI/components/agents/agent-editor.component.d.ts.map +1 -1
  7. package/dist/AI/components/agents/agent-editor.component.js +7 -7
  8. package/dist/AI/components/agents/agent-editor.component.js.map +1 -1
  9. package/dist/AI/components/autotagging/autotagging-pipeline-resource.component.d.ts +43 -6
  10. package/dist/AI/components/autotagging/autotagging-pipeline-resource.component.d.ts.map +1 -1
  11. package/dist/AI/components/autotagging/autotagging-pipeline-resource.component.js +1135 -864
  12. package/dist/AI/components/autotagging/autotagging-pipeline-resource.component.js.map +1 -1
  13. package/dist/AI/components/duplicates/duplicate-detection-resource.component.d.ts +4 -3
  14. package/dist/AI/components/duplicates/duplicate-detection-resource.component.d.ts.map +1 -1
  15. package/dist/AI/components/duplicates/duplicate-detection-resource.component.js +1 -0
  16. package/dist/AI/components/duplicates/duplicate-detection-resource.component.js.map +1 -1
  17. package/dist/AI/components/execution-monitoring.component.d.ts +4 -5
  18. package/dist/AI/components/execution-monitoring.component.d.ts.map +1 -1
  19. package/dist/AI/components/execution-monitoring.component.js +14 -15
  20. package/dist/AI/components/execution-monitoring.component.js.map +1 -1
  21. package/dist/AI/components/models/model-management.component.d.ts +4 -4
  22. package/dist/AI/components/models/model-management.component.d.ts.map +1 -1
  23. package/dist/AI/components/models/model-management.component.js +5 -5
  24. package/dist/AI/components/models/model-management.component.js.map +1 -1
  25. package/dist/AI/components/prompts/prompt-management.component.d.ts +4 -4
  26. package/dist/AI/components/prompts/prompt-management.component.d.ts.map +1 -1
  27. package/dist/AI/components/prompts/prompt-management.component.js +5 -5
  28. package/dist/AI/components/prompts/prompt-management.component.js.map +1 -1
  29. package/dist/AI/components/requests/agent-requests-resource.component.d.ts +2 -1
  30. package/dist/AI/components/requests/agent-requests-resource.component.d.ts.map +1 -1
  31. package/dist/AI/components/requests/agent-requests-resource.component.js +1 -0
  32. package/dist/AI/components/requests/agent-requests-resource.component.js.map +1 -1
  33. package/dist/AI/components/system/system-configuration.component.d.ts +2 -3
  34. package/dist/AI/components/system/system-configuration.component.d.ts.map +1 -1
  35. package/dist/AI/components/system/system-configuration.component.js +9 -11
  36. package/dist/AI/components/system/system-configuration.component.js.map +1 -1
  37. package/dist/AI/components/vectors/vector-management-resource.component.d.ts +44 -8
  38. package/dist/AI/components/vectors/vector-management-resource.component.d.ts.map +1 -1
  39. package/dist/AI/components/vectors/vector-management-resource.component.js +648 -384
  40. package/dist/AI/components/vectors/vector-management-resource.component.js.map +1 -1
  41. package/dist/APIKeys/api-keys-resource.component.d.ts +2 -1
  42. package/dist/APIKeys/api-keys-resource.component.d.ts.map +1 -1
  43. package/dist/APIKeys/api-keys-resource.component.js +2 -0
  44. package/dist/APIKeys/api-keys-resource.component.js.map +1 -1
  45. package/dist/Actions/components/actions-overview.component.d.ts +4 -5
  46. package/dist/Actions/components/actions-overview.component.d.ts.map +1 -1
  47. package/dist/Actions/components/actions-overview.component.js +11 -12
  48. package/dist/Actions/components/actions-overview.component.js.map +1 -1
  49. package/dist/Actions/components/code-management.component.d.ts +2 -3
  50. package/dist/Actions/components/code-management.component.d.ts.map +1 -1
  51. package/dist/Actions/components/code-management.component.js +4 -6
  52. package/dist/Actions/components/code-management.component.js.map +1 -1
  53. package/dist/Actions/components/entity-integration.component.d.ts +2 -3
  54. package/dist/Actions/components/entity-integration.component.d.ts.map +1 -1
  55. package/dist/Actions/components/entity-integration.component.js +4 -6
  56. package/dist/Actions/components/entity-integration.component.js.map +1 -1
  57. package/dist/Actions/components/execution-monitoring.component.d.ts +4 -5
  58. package/dist/Actions/components/execution-monitoring.component.d.ts.map +1 -1
  59. package/dist/Actions/components/execution-monitoring.component.js +10 -11
  60. package/dist/Actions/components/execution-monitoring.component.js.map +1 -1
  61. package/dist/Actions/components/explorer/action-explorer.component.d.ts +13 -12
  62. package/dist/Actions/components/explorer/action-explorer.component.d.ts.map +1 -1
  63. package/dist/Actions/components/explorer/action-explorer.component.js +39 -66
  64. package/dist/Actions/components/explorer/action-explorer.component.js.map +1 -1
  65. package/dist/Actions/components/scheduled-actions.component.d.ts +2 -3
  66. package/dist/Actions/components/scheduled-actions.component.d.ts.map +1 -1
  67. package/dist/Actions/components/scheduled-actions.component.js +4 -6
  68. package/dist/Actions/components/scheduled-actions.component.js.map +1 -1
  69. package/dist/Actions/components/security-permissions.component.d.ts +2 -3
  70. package/dist/Actions/components/security-permissions.component.d.ts.map +1 -1
  71. package/dist/Actions/components/security-permissions.component.js +4 -6
  72. package/dist/Actions/components/security-permissions.component.js.map +1 -1
  73. package/dist/ApplicationRoles/application-roles-resource.component.d.ts +112 -0
  74. package/dist/ApplicationRoles/application-roles-resource.component.d.ts.map +1 -0
  75. package/dist/ApplicationRoles/application-roles-resource.component.js +532 -0
  76. package/dist/ApplicationRoles/application-roles-resource.component.js.map +1 -0
  77. package/dist/Communication/communication-dashboard.component.d.ts.map +1 -1
  78. package/dist/Communication/communication-dashboard.component.js +1 -0
  79. package/dist/Communication/communication-dashboard.component.js.map +1 -1
  80. package/dist/Communication/communication-logs-resource.component.d.ts.map +1 -1
  81. package/dist/Communication/communication-logs-resource.component.js +4 -1
  82. package/dist/Communication/communication-logs-resource.component.js.map +1 -1
  83. package/dist/Communication/communication-monitor-resource.component.d.ts.map +1 -1
  84. package/dist/Communication/communication-monitor-resource.component.js +4 -1
  85. package/dist/Communication/communication-monitor-resource.component.js.map +1 -1
  86. package/dist/Communication/communication-providers-resource.component.d.ts.map +1 -1
  87. package/dist/Communication/communication-providers-resource.component.js +4 -1
  88. package/dist/Communication/communication-providers-resource.component.js.map +1 -1
  89. package/dist/Communication/communication-runs-resource.component.d.ts.map +1 -1
  90. package/dist/Communication/communication-runs-resource.component.js +4 -1
  91. package/dist/Communication/communication-runs-resource.component.js.map +1 -1
  92. package/dist/Communication/communication-templates-resource.component.d.ts.map +1 -1
  93. package/dist/Communication/communication-templates-resource.component.js +4 -1
  94. package/dist/Communication/communication-templates-resource.component.js.map +1 -1
  95. package/dist/ComponentStudio/component-studio-dashboard.component.d.ts +2 -1
  96. package/dist/ComponentStudio/component-studio-dashboard.component.d.ts.map +1 -1
  97. package/dist/ComponentStudio/component-studio-dashboard.component.js +1 -0
  98. package/dist/ComponentStudio/component-studio-dashboard.component.js.map +1 -1
  99. package/dist/Credentials/components/credentials-audit-resource.component.d.ts.map +1 -1
  100. package/dist/Credentials/components/credentials-audit-resource.component.js +2 -0
  101. package/dist/Credentials/components/credentials-audit-resource.component.js.map +1 -1
  102. package/dist/Credentials/components/credentials-categories-resource.component.d.ts +2 -3
  103. package/dist/Credentials/components/credentials-categories-resource.component.d.ts.map +1 -1
  104. package/dist/Credentials/components/credentials-categories-resource.component.js +10 -11
  105. package/dist/Credentials/components/credentials-categories-resource.component.js.map +1 -1
  106. package/dist/Credentials/components/credentials-list-resource.component.d.ts +2 -1
  107. package/dist/Credentials/components/credentials-list-resource.component.d.ts.map +1 -1
  108. package/dist/Credentials/components/credentials-list-resource.component.js +2 -0
  109. package/dist/Credentials/components/credentials-list-resource.component.js.map +1 -1
  110. package/dist/Credentials/components/credentials-overview-resource.component.d.ts +4 -4
  111. package/dist/Credentials/components/credentials-overview-resource.component.d.ts.map +1 -1
  112. package/dist/Credentials/components/credentials-overview-resource.component.js +8 -9
  113. package/dist/Credentials/components/credentials-overview-resource.component.js.map +1 -1
  114. package/dist/Credentials/components/credentials-types-resource.component.d.ts +2 -3
  115. package/dist/Credentials/components/credentials-types-resource.component.d.ts.map +1 -1
  116. package/dist/Credentials/components/credentials-types-resource.component.js +11 -12
  117. package/dist/Credentials/components/credentials-types-resource.component.js.map +1 -1
  118. package/dist/Credentials/credentials-dashboard.component.d.ts.map +1 -1
  119. package/dist/Credentials/credentials-dashboard.component.js +1 -0
  120. package/dist/Credentials/credentials-dashboard.component.js.map +1 -1
  121. package/dist/DashboardBrowser/dashboard-browser-resource.component.d.ts +2 -3
  122. package/dist/DashboardBrowser/dashboard-browser-resource.component.d.ts.map +1 -1
  123. package/dist/DashboardBrowser/dashboard-browser-resource.component.js +9 -10
  124. package/dist/DashboardBrowser/dashboard-browser-resource.component.js.map +1 -1
  125. package/dist/DataExplorer/components/filter-dialog/filter-dialog.component.js +2 -2
  126. package/dist/DataExplorer/components/navigation-panel/navigation-panel.component.d.ts +23 -15
  127. package/dist/DataExplorer/components/navigation-panel/navigation-panel.component.d.ts.map +1 -1
  128. package/dist/DataExplorer/components/navigation-panel/navigation-panel.component.js +167 -213
  129. package/dist/DataExplorer/components/navigation-panel/navigation-panel.component.js.map +1 -1
  130. package/dist/DataExplorer/data-explorer-dashboard.component.d.ts +68 -32
  131. package/dist/DataExplorer/data-explorer-dashboard.component.d.ts.map +1 -1
  132. package/dist/DataExplorer/data-explorer-dashboard.component.js +453 -420
  133. package/dist/DataExplorer/data-explorer-dashboard.component.js.map +1 -1
  134. package/dist/DataExplorer/data-explorer-resource.component.d.ts +10 -3
  135. package/dist/DataExplorer/data-explorer-resource.component.d.ts.map +1 -1
  136. package/dist/DataExplorer/data-explorer-resource.component.js +35 -11
  137. package/dist/DataExplorer/data-explorer-resource.component.js.map +1 -1
  138. package/dist/DataExplorer/models/explorer-state.interface.d.ts +12 -3
  139. package/dist/DataExplorer/models/explorer-state.interface.d.ts.map +1 -1
  140. package/dist/DataExplorer/models/explorer-state.interface.js +5 -1
  141. package/dist/DataExplorer/models/explorer-state.interface.js.map +1 -1
  142. package/dist/Home/home-dashboard.component.d.ts +4 -4
  143. package/dist/Home/home-dashboard.component.d.ts.map +1 -1
  144. package/dist/Home/home-dashboard.component.js +4 -5
  145. package/dist/Home/home-dashboard.component.js.map +1 -1
  146. package/dist/Integration/components/activity/activity.component.d.ts.map +1 -1
  147. package/dist/Integration/components/activity/activity.component.js +1 -0
  148. package/dist/Integration/components/activity/activity.component.js.map +1 -1
  149. package/dist/Integration/components/connections/connections.component.d.ts.map +1 -1
  150. package/dist/Integration/components/connections/connections.component.js +2 -0
  151. package/dist/Integration/components/connections/connections.component.js.map +1 -1
  152. package/dist/Integration/components/mapping-workspace/mapping-workspace.component.d.ts.map +1 -1
  153. package/dist/Integration/components/mapping-workspace/mapping-workspace.component.js +1 -0
  154. package/dist/Integration/components/mapping-workspace/mapping-workspace.component.js.map +1 -1
  155. package/dist/Integration/components/overview/overview.component.d.ts.map +1 -1
  156. package/dist/Integration/components/overview/overview.component.js +2 -0
  157. package/dist/Integration/components/overview/overview.component.js.map +1 -1
  158. package/dist/Integration/components/pipelines/pipelines.component.d.ts.map +1 -1
  159. package/dist/Integration/components/pipelines/pipelines.component.js +2 -0
  160. package/dist/Integration/components/pipelines/pipelines.component.js.map +1 -1
  161. package/dist/Integration/components/schedules/schedules.component.d.ts.map +1 -1
  162. package/dist/Integration/components/schedules/schedules.component.js +2 -0
  163. package/dist/Integration/components/schedules/schedules.component.js.map +1 -1
  164. package/dist/KnowledgeHub/components/analytics/analytics-resource.component.d.ts +4 -3
  165. package/dist/KnowledgeHub/components/analytics/analytics-resource.component.d.ts.map +1 -1
  166. package/dist/KnowledgeHub/components/analytics/analytics-resource.component.js +1 -0
  167. package/dist/KnowledgeHub/components/analytics/analytics-resource.component.js.map +1 -1
  168. package/dist/KnowledgeHub/components/clusters/cluster-visualization-resource.component.d.ts +4 -3
  169. package/dist/KnowledgeHub/components/clusters/cluster-visualization-resource.component.d.ts.map +1 -1
  170. package/dist/KnowledgeHub/components/clusters/cluster-visualization-resource.component.js +1 -0
  171. package/dist/KnowledgeHub/components/clusters/cluster-visualization-resource.component.js.map +1 -1
  172. package/dist/KnowledgeHub/components/config/knowledge-config-resource.component.d.ts +13 -3
  173. package/dist/KnowledgeHub/components/config/knowledge-config-resource.component.d.ts.map +1 -1
  174. package/dist/KnowledgeHub/components/config/knowledge-config-resource.component.js +220 -138
  175. package/dist/KnowledgeHub/components/config/knowledge-config-resource.component.js.map +1 -1
  176. package/dist/KnowledgeHub/components/scheduling/scheduling-resource.component.d.ts +4 -3
  177. package/dist/KnowledgeHub/components/scheduling/scheduling-resource.component.d.ts.map +1 -1
  178. package/dist/KnowledgeHub/components/scheduling/scheduling-resource.component.js +1 -0
  179. package/dist/KnowledgeHub/components/scheduling/scheduling-resource.component.js.map +1 -1
  180. package/dist/KnowledgeHub/index.d.ts +0 -1
  181. package/dist/KnowledgeHub/index.d.ts.map +1 -1
  182. package/dist/KnowledgeHub/index.js +0 -1
  183. package/dist/KnowledgeHub/index.js.map +1 -1
  184. package/dist/Lists/components/lists-browse-resource.component.d.ts +2 -1
  185. package/dist/Lists/components/lists-browse-resource.component.d.ts.map +1 -1
  186. package/dist/Lists/components/lists-browse-resource.component.js +2 -0
  187. package/dist/Lists/components/lists-browse-resource.component.js.map +1 -1
  188. package/dist/Lists/components/lists-categories-resource.component.d.ts +2 -1
  189. package/dist/Lists/components/lists-categories-resource.component.d.ts.map +1 -1
  190. package/dist/Lists/components/lists-categories-resource.component.js +2 -0
  191. package/dist/Lists/components/lists-categories-resource.component.js.map +1 -1
  192. package/dist/Lists/components/lists-my-lists-resource.component.d.ts +2 -1
  193. package/dist/Lists/components/lists-my-lists-resource.component.d.ts.map +1 -1
  194. package/dist/Lists/components/lists-my-lists-resource.component.js +2 -0
  195. package/dist/Lists/components/lists-my-lists-resource.component.js.map +1 -1
  196. package/dist/Lists/components/lists-operations-resource.component.d.ts +2 -1
  197. package/dist/Lists/components/lists-operations-resource.component.d.ts.map +1 -1
  198. package/dist/Lists/components/lists-operations-resource.component.js +2 -0
  199. package/dist/Lists/components/lists-operations-resource.component.js.map +1 -1
  200. package/dist/MCP/mcp-dashboard.component.d.ts +7 -28
  201. package/dist/MCP/mcp-dashboard.component.d.ts.map +1 -1
  202. package/dist/MCP/mcp-dashboard.component.js +25 -107
  203. package/dist/MCP/mcp-dashboard.component.js.map +1 -1
  204. package/dist/MCP/mcp-resource.component.d.ts.map +1 -1
  205. package/dist/MCP/mcp-resource.component.js +1 -0
  206. package/dist/MCP/mcp-resource.component.js.map +1 -1
  207. package/dist/QueryBrowser/query-browser-resource.component.d.ts +10 -23
  208. package/dist/QueryBrowser/query-browser-resource.component.d.ts.map +1 -1
  209. package/dist/QueryBrowser/query-browser-resource.component.js +41 -103
  210. package/dist/QueryBrowser/query-browser-resource.component.js.map +1 -1
  211. package/dist/Scheduling/components/scheduling-activity-resource.component.d.ts.map +1 -1
  212. package/dist/Scheduling/components/scheduling-activity-resource.component.js +1 -0
  213. package/dist/Scheduling/components/scheduling-activity-resource.component.js.map +1 -1
  214. package/dist/Scheduling/components/scheduling-jobs-resource.component.d.ts.map +1 -1
  215. package/dist/Scheduling/components/scheduling-jobs-resource.component.js +1 -0
  216. package/dist/Scheduling/components/scheduling-jobs-resource.component.js.map +1 -1
  217. package/dist/Scheduling/components/scheduling-overview-resource.component.d.ts.map +1 -1
  218. package/dist/Scheduling/components/scheduling-overview-resource.component.js +1 -0
  219. package/dist/Scheduling/components/scheduling-overview-resource.component.js.map +1 -1
  220. package/dist/Scheduling/scheduling-dashboard.component.d.ts.map +1 -1
  221. package/dist/Scheduling/scheduling-dashboard.component.js +1 -0
  222. package/dist/Scheduling/scheduling-dashboard.component.js.map +1 -1
  223. package/dist/SystemDiagnostics/system-diagnostics.component.d.ts +4 -4
  224. package/dist/SystemDiagnostics/system-diagnostics.component.d.ts.map +1 -1
  225. package/dist/SystemDiagnostics/system-diagnostics.component.js +9 -10
  226. package/dist/SystemDiagnostics/system-diagnostics.component.js.map +1 -1
  227. package/dist/Testing/components/testing-analytics-resource.component.d.ts.map +1 -1
  228. package/dist/Testing/components/testing-analytics-resource.component.js +2 -0
  229. package/dist/Testing/components/testing-analytics-resource.component.js.map +1 -1
  230. package/dist/Testing/components/testing-dashboard-tab-resource.component.d.ts +2 -1
  231. package/dist/Testing/components/testing-dashboard-tab-resource.component.d.ts.map +1 -1
  232. package/dist/Testing/components/testing-dashboard-tab-resource.component.js +2 -0
  233. package/dist/Testing/components/testing-dashboard-tab-resource.component.js.map +1 -1
  234. package/dist/Testing/components/testing-explorer-resource.component.d.ts.map +1 -1
  235. package/dist/Testing/components/testing-explorer-resource.component.js +2 -0
  236. package/dist/Testing/components/testing-explorer-resource.component.js.map +1 -1
  237. package/dist/Testing/components/testing-review-resource.component.d.ts.map +1 -1
  238. package/dist/Testing/components/testing-review-resource.component.js +2 -0
  239. package/dist/Testing/components/testing-review-resource.component.js.map +1 -1
  240. package/dist/Testing/components/testing-runs-resource.component.d.ts +2 -1
  241. package/dist/Testing/components/testing-runs-resource.component.d.ts.map +1 -1
  242. package/dist/Testing/components/testing-runs-resource.component.js +2 -0
  243. package/dist/Testing/components/testing-runs-resource.component.js.map +1 -1
  244. package/dist/Testing/testing-dashboard.component.d.ts +2 -1
  245. package/dist/Testing/testing-dashboard.component.d.ts.map +1 -1
  246. package/dist/Testing/testing-dashboard.component.js +1 -0
  247. package/dist/Testing/testing-dashboard.component.js.map +1 -1
  248. package/dist/VersionHistory/components/diff-resource.component.d.ts +4 -4
  249. package/dist/VersionHistory/components/diff-resource.component.d.ts.map +1 -1
  250. package/dist/VersionHistory/components/diff-resource.component.js +9 -10
  251. package/dist/VersionHistory/components/diff-resource.component.js.map +1 -1
  252. package/dist/VersionHistory/components/graph-resource.component.d.ts +2 -1
  253. package/dist/VersionHistory/components/graph-resource.component.d.ts.map +1 -1
  254. package/dist/VersionHistory/components/graph-resource.component.js +2 -0
  255. package/dist/VersionHistory/components/graph-resource.component.js.map +1 -1
  256. package/dist/VersionHistory/components/labels-resource.component.d.ts +4 -4
  257. package/dist/VersionHistory/components/labels-resource.component.d.ts.map +1 -1
  258. package/dist/VersionHistory/components/labels-resource.component.js +10 -11
  259. package/dist/VersionHistory/components/labels-resource.component.js.map +1 -1
  260. package/dist/VersionHistory/components/restore-resource.component.d.ts +2 -1
  261. package/dist/VersionHistory/components/restore-resource.component.d.ts.map +1 -1
  262. package/dist/VersionHistory/components/restore-resource.component.js +2 -0
  263. package/dist/VersionHistory/components/restore-resource.component.js.map +1 -1
  264. package/dist/ai-dashboards.module.d.ts +19 -19
  265. package/dist/ai-dashboards.module.d.ts.map +1 -1
  266. package/dist/ai-dashboards.module.js +4 -5
  267. package/dist/ai-dashboards.module.js.map +1 -1
  268. package/dist/core-dashboards.module.d.ts +19 -18
  269. package/dist/core-dashboards.module.d.ts.map +1 -1
  270. package/dist/core-dashboards.module.js +8 -0
  271. package/dist/core-dashboards.module.js.map +1 -1
  272. package/dist/data-explorer-dashboards.module.d.ts +2 -1
  273. package/dist/data-explorer-dashboards.module.d.ts.map +1 -1
  274. package/dist/data-explorer-dashboards.module.js +7 -3
  275. package/dist/data-explorer-dashboards.module.js.map +1 -1
  276. package/dist/public-api.d.ts +1 -1
  277. package/dist/public-api.d.ts.map +1 -1
  278. package/dist/public-api.js +2 -1
  279. package/dist/public-api.js.map +1 -1
  280. package/package.json +49 -48
  281. package/dist/KnowledgeHub/components/search/knowledge-search-resource.component.d.ts +0 -166
  282. package/dist/KnowledgeHub/components/search/knowledge-search-resource.component.d.ts.map +0 -1
  283. package/dist/KnowledgeHub/components/search/knowledge-search-resource.component.js +0 -991
  284. package/dist/KnowledgeHub/components/search/knowledge-search-resource.component.js.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"file":"agent-configuration.component.js","sourceRoot":"","sources":["../../../../src/AI/components/agents/agent-configuration.component.ts","../../../../src/AI/components/agents/agent-configuration.component.html"],"names":[],"mappings":"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","sourcesContent":["import { Component, OnDestroy, AfterViewInit, ChangeDetectorRef } from '@angular/core';\nimport { Subject } from 'rxjs';\nimport { debounceTime, takeUntil } from 'rxjs/operators';\nimport { Metadata, CompositeKey, RunView } from '@memberjunction/core';\nimport { ResourceData, UserInfoEngine } from '@memberjunction/core-entities';\nimport { AIEngineBase } from '@memberjunction/ai-engine-base';\nimport { AITestHarnessDialogService } from '@memberjunction/ng-ai-test-harness';\nimport { CreateAgentService, CreateAgentDialogResult, CreateAgentResult } from '@memberjunction/ng-agents';\nimport { MJNotificationService } from '@memberjunction/ng-notifications';\nimport { RegisterClass , UUIDsEqual } from '@memberjunction/global';\nimport { BaseResourceComponent, NavigationService } from '@memberjunction/ng-shared';\nimport { MJAIAgentEntityExtended } from '@memberjunction/ai-core-plus';\n\ninterface AgentFilter {\n searchTerm: string;\n agentType: string;\n parentAgent: string;\n status: string;\n executionMode: string;\n exposeAsAction: string;\n categoryId: string;\n}\n\n/** Lightweight category row for tree-view grouping */\ninterface CategoryInfo {\n ID: string;\n Name: string;\n ParentID: string | null;\n Description: string | null;\n}\n\n/** A category node with nested agents and child categories for tree rendering */\nexport interface CategoryTreeNode {\n Category: CategoryInfo;\n Agents: MJAIAgentEntityExtended[];\n Children: CategoryTreeNode[];\n Expanded: boolean;\n}\n\n/**\n * User preferences for the Agent Configuration dashboard\n */\ninterface AgentConfigurationUserPreferences {\n filterPanelVisible: boolean;\n viewMode: 'grid' | 'list' | 'tree';\n sortColumn: string;\n sortDirection: 'asc' | 'desc';\n filters: AgentFilter;\n}\n/**\n * AI Agents Resource - displays AI agent configuration and management\n * Extends BaseResourceComponent to work with the resource type system\n */\n@RegisterClass(BaseResourceComponent, 'AIAgentsResource')\n@Component({\n standalone: false,\n selector: 'app-agent-configuration',\n templateUrl: './agent-configuration.component.html',\n styleUrls: ['./agent-configuration.component.css']\n})\nexport class AgentConfigurationComponent extends BaseResourceComponent implements AfterViewInit, OnDestroy {\n // Settings persistence\n private readonly USER_SETTINGS_KEY = 'AI.Agents.UserPreferences';\n private settingsPersistSubject = new Subject<void>();\n private destroy$ = new Subject<void>();\n private settingsLoaded = false;\n\n public isLoading = false;\n public filterPanelVisible = true;\n public viewMode: 'grid' | 'list' | 'tree' = 'grid';\n public expandedAgentId: string | null = null;\n\n public agents: MJAIAgentEntityExtended[] = [];\n public filteredAgents: MJAIAgentEntityExtended[] = [];\n\n // Detail panel\n public selectedAgent: MJAIAgentEntityExtended | null = null;\n public detailPanelVisible = false;\n\n // Sorting state\n public sortColumn: string = 'Name';\n public sortDirection: 'asc' | 'desc' = 'asc';\n\n public currentFilters: AgentFilter = {\n searchTerm: '',\n agentType: 'all',\n parentAgent: 'all',\n status: 'all',\n executionMode: 'all',\n exposeAsAction: 'all',\n categoryId: 'all'\n };\n\n public selectedAgentForTest: MJAIAgentEntityExtended | null = null;\n\n // Category tree view data\n public categoryTree: CategoryTreeNode[] = [];\n public uncategorizedAgents: MJAIAgentEntityExtended[] = [];\n private categories: CategoryInfo[] = [];\n\n // === Permission Checks ===\n /** Cache for permission checks to avoid repeated calculations */\n private _permissionCache = new Map<string, boolean>();\n private _metadata = new Metadata();\n\n /** Check if user can create AI Agents */\n public get UserCanCreateAgents(): boolean {\n return this.checkEntityPermission('MJ: AI Agents', 'Create');\n }\n\n /** Check if user can read AI Agents */\n public get UserCanReadAgents(): boolean {\n return this.checkEntityPermission('MJ: AI Agents', 'Read');\n }\n\n /** Check if user can update AI Agents */\n public get UserCanUpdateAgents(): boolean {\n return this.checkEntityPermission('MJ: AI Agents', 'Update');\n }\n\n /** Check if user can delete AI Agents */\n public get UserCanDeleteAgents(): boolean {\n return this.checkEntityPermission('MJ: AI Agents', 'Delete');\n }\n\n /**\n * Helper method to check entity permissions with caching\n * @param entityName - The name of the entity to check permissions for\n * @param permissionType - The type of permission to check (Create, Read, Update, Delete)\n * @returns boolean indicating if user has the permission\n */\n private checkEntityPermission(entityName: string, permissionType: 'Create' | 'Read' | 'Update' | 'Delete'): boolean {\n const cacheKey = `${entityName}_${permissionType}`;\n \n if (this._permissionCache.has(cacheKey)) {\n return this._permissionCache.get(cacheKey)!;\n }\n\n try {\n const entityInfo = this._metadata.Entities.find(e => e.Name === entityName);\n \n if (!entityInfo) {\n console.warn(`Entity '${entityName}' not found for permission check`);\n this._permissionCache.set(cacheKey, false);\n return false;\n }\n\n const userPermissions = entityInfo.GetUserPermisions(this._metadata.CurrentUser);\n let hasPermission = false;\n\n switch (permissionType) {\n case 'Create':\n hasPermission = userPermissions.CanCreate;\n break;\n case 'Read':\n hasPermission = userPermissions.CanRead;\n break;\n case 'Update':\n hasPermission = userPermissions.CanUpdate;\n break;\n case 'Delete':\n hasPermission = userPermissions.CanDelete;\n break;\n }\n\n this._permissionCache.set(cacheKey, hasPermission);\n return hasPermission;\n } catch (error) {\n console.error(`Error checking ${permissionType} permission for ${entityName}:`, error);\n this._permissionCache.set(cacheKey, false);\n return false;\n }\n }\n\n /**\n * Clears the permission cache. Call this when user context changes or permissions are updated.\n */\n public clearPermissionCache(): void {\n this._permissionCache.clear();\n }\n\n constructor(\n private testHarnessService: AITestHarnessDialogService,\n private createAgentService: CreateAgentService,\n private navigationService: NavigationService,\n private cdr: ChangeDetectorRef\n ) {\n super();\n\n // Set up debounced settings persistence\n this.settingsPersistSubject.pipe(\n debounceTime(500),\n takeUntil(this.destroy$)\n ).subscribe(() => {\n this.persistUserPreferences();\n });\n }\n\n async ngAfterViewInit() {\n // Load saved user preferences first\n this.loadUserPreferences();\n\n // Apply initial state from resource configuration if provided (overrides saved prefs)\n if (this.Data?.Configuration) {\n this.applyInitialState(this.Data.Configuration);\n }\n await this.loadAgents();\n\n // Apply filters after data is loaded (uses saved preferences)\n this.applyFilters();\n\n // If tree view mode is active, load categories for the tree\n if (this.viewMode === 'tree') {\n this.loadCategoriesAndBuildTree();\n }\n\n // Notify that the resource has finished loading\n this.NotifyLoadComplete();\n }\n\n ngOnDestroy(): void {\n this.destroy$.next();\n this.destroy$.complete();\n }\n\n // ========================================\n // User Settings Persistence\n // ========================================\n\n /**\n * Load saved user preferences from the UserInfoEngine\n */\n private loadUserPreferences(): void {\n try {\n const savedPrefs = UserInfoEngine.Instance.GetSetting(this.USER_SETTINGS_KEY);\n if (savedPrefs) {\n const prefs = JSON.parse(savedPrefs) as AgentConfigurationUserPreferences;\n this.applyUserPreferences(prefs);\n }\n } catch (error) {\n console.warn('[AgentConfiguration] Failed to load user preferences:', error);\n } finally {\n this.settingsLoaded = true;\n }\n }\n\n /**\n * Apply loaded preferences to component state\n */\n private applyUserPreferences(prefs: AgentConfigurationUserPreferences): void {\n if (prefs.filterPanelVisible !== undefined) {\n this.filterPanelVisible = prefs.filterPanelVisible;\n }\n if (prefs.viewMode) {\n this.viewMode = prefs.viewMode;\n }\n if (prefs.sortColumn) {\n this.sortColumn = prefs.sortColumn;\n }\n if (prefs.sortDirection) {\n this.sortDirection = prefs.sortDirection;\n }\n if (prefs.filters) {\n this.currentFilters = {\n searchTerm: prefs.filters.searchTerm || '',\n agentType: prefs.filters.agentType || 'all',\n parentAgent: prefs.filters.parentAgent || 'all',\n status: prefs.filters.status || 'all',\n executionMode: prefs.filters.executionMode || 'all',\n exposeAsAction: prefs.filters.exposeAsAction || 'all',\n categoryId: prefs.filters.categoryId || 'all'\n };\n }\n }\n\n /**\n * Get current preferences as an object for saving\n */\n private getCurrentPreferences(): AgentConfigurationUserPreferences {\n return {\n filterPanelVisible: this.filterPanelVisible,\n viewMode: this.viewMode,\n sortColumn: this.sortColumn,\n sortDirection: this.sortDirection,\n filters: {\n ...this.currentFilters\n }\n };\n }\n\n /**\n * Persist user preferences to storage (debounced)\n */\n private saveUserPreferencesDebounced(): void {\n if (!this.settingsLoaded) return; // Don't save during initial load\n this.settingsPersistSubject.next();\n }\n\n /**\n * Actually persist user preferences to the UserInfoEngine\n */\n private async persistUserPreferences(): Promise<void> {\n try {\n const prefs = this.getCurrentPreferences();\n await UserInfoEngine.Instance.SetSetting(this.USER_SETTINGS_KEY, JSON.stringify(prefs));\n } catch (error) {\n console.warn('[AgentConfiguration] Failed to persist user preferences:', error);\n }\n }\n\n private applyInitialState(state: any): void {\n if (state.filterPanelVisible !== undefined) {\n this.filterPanelVisible = state.filterPanelVisible;\n }\n if (state.viewMode) {\n this.viewMode = state.viewMode;\n }\n if (state.expandedAgentId) {\n this.expandedAgentId = state.expandedAgentId;\n }\n if (state.currentFilters) {\n this.currentFilters = { ...this.currentFilters, ...state.currentFilters };\n }\n }\n\n private async loadAgents(): Promise<void> {\n try {\n this.isLoading = true;\n\n // Ensure AIEngineBase is configured (no-op if already loaded)\n await AIEngineBase.Instance.Config(false);\n\n // Get cached agents from AIEngineBase\n this.agents = AIEngineBase.Instance.Agents;\n this.filteredAgents = [...this.agents];\n } catch (error) {\n console.error('Error loading AI agents:', error);\n } finally {\n this.isLoading = false;\n }\n }\n\n public toggleFilterPanel(): void {\n this.filterPanelVisible = !this.filterPanelVisible;\n this.emitStateChange();\n this.saveUserPreferencesDebounced();\n }\n\n public onMainSplitterChange(_event: any): void {\n this.emitStateChange();\n }\n\n public onFiltersChange(filters: AgentFilter): void {\n this.currentFilters = { ...filters };\n this.applyFilters();\n this.saveUserPreferencesDebounced();\n }\n\n public onFilterChange(): void {\n this.applyFilters();\n }\n\n public onResetFilters(): void {\n this.currentFilters = {\n searchTerm: '',\n agentType: 'all',\n parentAgent: 'all',\n status: 'all',\n executionMode: 'all',\n exposeAsAction: 'all',\n categoryId: 'all'\n };\n this.applyFilters();\n this.saveUserPreferencesDebounced();\n }\n\n private applyFilters(): void {\n let filtered = [...this.agents];\n\n // Apply search filter (name contains)\n if (this.currentFilters.searchTerm) {\n const searchTerm = this.currentFilters.searchTerm.toLowerCase();\n filtered = filtered.filter(agent =>\n (agent.Name || '').toLowerCase().includes(searchTerm) ||\n (agent.Description || '').toLowerCase().includes(searchTerm)\n );\n }\n\n // Apply agent type filter\n if (this.currentFilters.agentType !== 'all') {\n filtered = filtered.filter(agent => UUIDsEqual(agent.TypeID, this.currentFilters.agentType));\n }\n\n // Apply parent agent filter\n if (this.currentFilters.parentAgent !== 'all') {\n if (this.currentFilters.parentAgent === 'none') {\n filtered = filtered.filter(agent => !agent.ParentID);\n } else {\n filtered = filtered.filter(agent => UUIDsEqual(agent.ParentID, this.currentFilters.parentAgent));\n }\n }\n\n // Apply status filter\n if (this.currentFilters.status !== 'all') {\n const wantActive = this.currentFilters.status === 'active';\n if (wantActive) {\n filtered = filtered.filter(agent => agent.Status === 'Active');\n } else {\n filtered = filtered.filter(agent => agent.Status !== 'Active');\n }\n }\n\n // Apply execution mode filter\n if (this.currentFilters.executionMode !== 'all') {\n filtered = filtered.filter(agent => agent.ExecutionMode === this.currentFilters.executionMode);\n }\n\n // Apply expose as action filter\n if (this.currentFilters.exposeAsAction !== 'all') {\n const isExposed = this.currentFilters.exposeAsAction === 'true';\n filtered = filtered.filter(agent => agent.ExposeAsAction === isExposed);\n }\n\n // Apply category filter — match the selected category or any of its descendants\n if (this.currentFilters.categoryId !== 'all') {\n const matchingIds = this.getCategoryAndDescendantIds(this.currentFilters.categoryId);\n filtered = filtered.filter(agent => {\n const agentCatId = agent.CategoryID;\n return agentCatId != null && matchingIds.some(id => UUIDsEqual(id, agentCatId));\n });\n }\n\n // Apply sorting\n filtered = this.applySorting(filtered);\n\n this.filteredAgents = filtered;\n\n // Rebuild tree view data when filters change\n if (this.viewMode === 'tree') {\n this.buildCategoryTree();\n }\n }\n\n /**\n * Sort the agents by the specified column\n */\n public sortBy(column: string): void {\n if (this.sortColumn === column) {\n // Toggle direction if same column\n this.sortDirection = this.sortDirection === 'asc' ? 'desc' : 'asc';\n } else {\n // New column, default to ascending\n this.sortColumn = column;\n this.sortDirection = 'asc';\n }\n this.applyFilters();\n this.saveUserPreferencesDebounced();\n }\n\n /**\n * Apply sorting to the filtered list\n */\n private applySorting(agents: MJAIAgentEntityExtended[]): MJAIAgentEntityExtended[] {\n return agents.sort((a, b) => {\n let valueA: string | boolean | null | undefined;\n let valueB: string | boolean | null | undefined;\n\n switch (this.sortColumn) {\n case 'Name':\n valueA = a.Name;\n valueB = b.Name;\n break;\n case 'Status':\n valueA = a.Status;\n valueB = b.Status;\n break;\n case 'ExecutionMode':\n valueA = a.ExecutionMode;\n valueB = b.ExecutionMode;\n break;\n default:\n valueA = a.Name;\n valueB = b.Name;\n }\n\n // Handle null/undefined values\n const strA = (valueA ?? '').toString().toLowerCase();\n const strB = (valueB ?? '').toString().toLowerCase();\n\n let comparison = strA.localeCompare(strB);\n return this.sortDirection === 'desc' ? -comparison : comparison;\n });\n }\n\n private emitStateChange(): void {\n // State change handling - could be used for persisting user preferences in the future\n // For now, just a placeholder for tracking state changes\n }\n\n public setViewMode(mode: 'grid' | 'list' | 'tree'): void {\n this.viewMode = mode;\n if (mode === 'tree' && this.categories.length === 0) {\n this.loadCategoriesAndBuildTree();\n } else if (mode === 'tree') {\n this.buildCategoryTree();\n }\n this.emitStateChange();\n this.saveUserPreferencesDebounced();\n }\n\n public toggleAgentExpansion(agentId: string): void {\n this.expandedAgentId = this.expandedAgentId === agentId ? null : agentId;\n }\n\n /**\n * Show the detail panel for an agent\n */\n public showAgentDetails(agent: MJAIAgentEntityExtended, event?: Event): void {\n if (event) {\n event.stopPropagation();\n }\n this.selectedAgent = agent;\n this.detailPanelVisible = true;\n }\n\n /**\n * Close the detail panel\n */\n public closeDetailPanel(): void {\n this.detailPanelVisible = false;\n // Delay clearing selectedAgent for smoother animation\n setTimeout(() => {\n if (!this.detailPanelVisible) {\n this.selectedAgent = null;\n }\n }, 300);\n }\n\n /**\n * Open the full entity record from the detail panel\n */\n public openAgentFromPanel(): void {\n if (this.selectedAgent) {\n this.openAgentRecord(this.selectedAgent.ID);\n }\n }\n\n /**\n * Get the parent agent name if it exists\n */\n public getParentAgentName(agent: MJAIAgentEntityExtended): string | null {\n if (!agent.ParentID) return null;\n const parent = this.agents.find(a => UUIDsEqual(a.ID, agent.ParentID));\n return parent?.Name || 'Unknown Parent';\n }\n\n /**\n * Get agent type name\n */\n public getAgentTypeName(agent: MJAIAgentEntityExtended): string {\n return agent.Type || 'Standard Agent';\n }\n\n public openAgentRecord(agentId: string): void {\n const compositeKey = new CompositeKey([{ FieldName: 'ID', Value: agentId }]);\n this.navigationService.OpenEntityRecord('MJ: AI Agents', compositeKey);\n }\n\n /**\n * Opens the create agent slide-in panel. Upon successful creation,\n * saves the agent and navigates to the new record.\n */\n public createNewAgent(): void {\n this.createAgentService.OpenSlideIn({\n Title: 'Create New Agent'\n }).pipe(takeUntil(this.destroy$)).subscribe({\n next: async (dialogResult: CreateAgentDialogResult) => {\n if (!dialogResult.Cancelled && dialogResult.Result) {\n await this.handleAgentCreated(dialogResult.Result);\n }\n },\n error: (error) => {\n console.error('Error in create agent slide-in:', error);\n MJNotificationService.Instance.CreateSimpleNotification(\n 'Error opening agent creation panel. Please try again.',\n 'error',\n 3000\n );\n }\n });\n }\n\n /**\n * Handles the result from the create agent slide-in.\n * Saves the agent and navigates to the new record.\n */\n private async handleAgentCreated(result: CreateAgentResult): Promise<void> {\n try {\n const agent = result.Agent;\n\n // Save the agent\n const saveResult = await agent.Save();\n if (!saveResult) {\n throw new Error('Failed to save agent');\n }\n\n // Save linked prompts if any\n if (result.AgentPrompts && result.AgentPrompts.length > 0) {\n for (const agentPrompt of result.AgentPrompts) {\n // Update the AgentID to the saved agent's ID\n agentPrompt.AgentID = agent.ID;\n await agentPrompt.Save();\n }\n }\n\n // Save linked actions if any\n if (result.AgentActions && result.AgentActions.length > 0) {\n for (const agentAction of result.AgentActions) {\n // Update the AgentID to the saved agent's ID\n agentAction.AgentID = agent.ID;\n await agentAction.Save();\n }\n }\n\n // Refresh the agent list\n await AIEngineBase.Instance.Config(true); // Force refresh\n await this.loadAgents();\n this.applyFilters();\n\n // Navigate to the new agent record\n const compositeKey = new CompositeKey([{ FieldName: 'ID', Value: agent.ID }]);\n this.navigationService.OpenEntityRecord('MJ: AI Agents', compositeKey);\n\n MJNotificationService.Instance.CreateSimpleNotification(\n `Agent \"${agent.Name}\" created successfully`,\n 'success',\n 3000\n );\n } catch (error) {\n console.error('Error saving created agent:', error);\n MJNotificationService.Instance.CreateSimpleNotification(\n 'Error saving agent. Please try again.',\n 'error',\n 3000\n );\n }\n }\n\n public runAgent(agent: MJAIAgentEntityExtended): void {\n // Use the test harness service for window management features\n this.testHarnessService.openForAgent(agent.ID);\n }\n\n public closeTestHarness(): void {\n // No longer needed - window manages its own closure\n this.selectedAgentForTest = null;\n }\n\n public getAgentIconColor(agent: MJAIAgentEntityExtended): string {\n // Generate a consistent color based on agent properties\n const colors = ['#17a2b8', '#28a745', '#ffc107', '#dc3545', '#6c757d', '#007bff'];\n const index = (agent.Name?.charCodeAt(0) || 0) % colors.length;\n return colors[index];\n }\n\n public onOpenRecord(entityName: string, recordId: string): void {\n const compositeKey = new CompositeKey([{ FieldName: 'ID', Value: recordId }]);\n this.navigationService.OpenEntityRecord(entityName, compositeKey);\n }\n\n public getExecutionModeColor(mode: string): string {\n switch (mode) {\n case 'Sequential': return 'info';\n case 'Parallel': return 'success';\n default: return 'info';\n }\n }\n\n public getExecutionModeIcon(mode: string): string {\n switch (mode) {\n case 'Sequential': return 'fa-solid fa-list-ol';\n case 'Parallel': return 'fa-solid fa-layer-group';\n default: return 'fa-solid fa-robot';\n }\n }\n\n /**\n * Gets the agent's display icon\n * Prioritizes LogoURL, falls back to IconClass, then default robot icon\n */\n public getAgentIcon(agent: MJAIAgentEntityExtended): string {\n if (agent?.LogoURL) {\n // LogoURL is used in img tag, not here\n return '';\n }\n return agent?.IconClass || 'fa-solid fa-robot';\n }\n\n /**\n * Checks if the agent has a logo URL (for image display)\n */\n public hasLogoURL(agent: MJAIAgentEntityExtended): boolean {\n return !!agent?.LogoURL;\n }\n\n // ========================================\n // Category Tree View\n // ========================================\n\n /** Load categories from the database and build the tree structure */\n private async loadCategoriesAndBuildTree(): Promise<void> {\n try {\n const rv = new RunView();\n const result = await rv.RunView<CategoryInfo>({\n EntityName: 'MJ: AI Agent Categories',\n Fields: ['ID', 'Name', 'ParentID', 'Description'],\n ExtraFilter: \"Status='Active'\",\n OrderBy: 'Name ASC',\n ResultType: 'simple'\n });\n if (result.Success) {\n this.categories = result.Results;\n this.buildCategoryTree();\n this.cdr.detectChanges();\n }\n } catch (error) {\n console.error('[AgentConfiguration] Error loading categories:', error);\n }\n }\n\n /** Build tree nodes from flat categories + filtered agents */\n private buildCategoryTree(): void {\n const agentsByCategory = new Map<string, MJAIAgentEntityExtended[]>();\n const uncategorized: MJAIAgentEntityExtended[] = [];\n\n for (const agent of this.filteredAgents) {\n const catId = agent.CategoryID;\n if (catId) {\n const normalizedId = catId.toUpperCase();\n if (!agentsByCategory.has(normalizedId)) {\n agentsByCategory.set(normalizedId, []);\n }\n agentsByCategory.get(normalizedId)!.push(agent);\n } else {\n uncategorized.push(agent);\n }\n }\n\n // Build tree from root categories (ParentID is null)\n const rootCategories = this.categories.filter(c => !c.ParentID);\n this.categoryTree = rootCategories.map(c => this.buildTreeNode(c, agentsByCategory));\n this.uncategorizedAgents = uncategorized;\n }\n\n /** Recursively build a CategoryTreeNode */\n private buildTreeNode(\n category: CategoryInfo,\n agentsByCategory: Map<string, MJAIAgentEntityExtended[]>\n ): CategoryTreeNode {\n const children = this.categories\n .filter(c => c.ParentID && UUIDsEqual(c.ParentID, category.ID))\n .map(c => this.buildTreeNode(c, agentsByCategory));\n\n const normalizedId = category.ID.toUpperCase();\n return {\n Category: category,\n Agents: agentsByCategory.get(normalizedId) || [],\n Children: children,\n Expanded: true // default expanded\n };\n }\n\n /** Get a category and all its descendant IDs (for inclusive filtering) */\n private getCategoryAndDescendantIds(categoryId: string): string[] {\n const ids = [categoryId];\n const children = this.categories.filter(c => c.ParentID && UUIDsEqual(c.ParentID, categoryId));\n for (const child of children) {\n ids.push(...this.getCategoryAndDescendantIds(child.ID));\n }\n return ids;\n }\n\n /** Toggle a category node's expanded state in the tree view */\n public toggleCategoryNode(node: CategoryTreeNode): void {\n node.Expanded = !node.Expanded;\n }\n\n /** Check if a tree node has any visible content (agents or children with content) */\n public hasVisibleContent(node: CategoryTreeNode): boolean {\n if (node.Agents.length > 0) return true;\n return node.Children.some(child => this.hasVisibleContent(child));\n }\n\n /** Get the total agent count for a category including all descendants */\n public getAgentCount(node: CategoryTreeNode): number {\n let count = node.Agents.length;\n for (const child of node.Children) {\n count += this.getAgentCount(child);\n }\n return count;\n }\n\n // === BaseResourceComponent Required Methods ===\n\n /**\n * Get the display name for this resource\n */\n async GetResourceDisplayName(data: ResourceData): Promise<string> {\n return 'Agents';\n }\n\n /**\n * Get the icon class for this resource\n */\n async GetResourceIconClass(data: ResourceData): Promise<string> {\n return 'fa-solid fa-robot';\n }\n}","<div class=\"agent-configuration-container\">\n <!-- Header -->\n <div class=\"dashboard-header\">\n <div class=\"header-info\">\n <h2 class=\"dashboard-title\">\n <i class=\"fa-solid fa-robot\"></i>\n Agent Configuration\n </h2>\n <button \n type=\"button\" \n class=\"filter-toggle-btn\"\n (click)=\"toggleFilterPanel()\"\n title=\"Toggle Filters\">\n <i class=\"fa-solid fa-filter\"></i>\n @if (filterPanelVisible) {\n Hide Filters\n } @else {\n Show Filters\n }\n </button>\n <span class=\"item-count\">{{ filteredAgents.length }} agents</span>\n </div>\n \n <div class=\"header-controls\">\n <div class=\"view-toggle\">\n <button\n type=\"button\"\n class=\"view-btn\"\n [class.active]=\"viewMode === 'grid'\"\n (click)=\"setViewMode('grid')\"\n title=\"Grid View\">\n <i class=\"fa-solid fa-grip\"></i>\n </button>\n <button\n type=\"button\"\n class=\"view-btn\"\n [class.active]=\"viewMode === 'list'\"\n (click)=\"setViewMode('list')\"\n title=\"List View\">\n <i class=\"fa-solid fa-list\"></i>\n </button>\n <button\n type=\"button\"\n class=\"view-btn\"\n [class.active]=\"viewMode === 'tree'\"\n (click)=\"setViewMode('tree')\"\n title=\"Category Tree View\">\n <i class=\"fa-solid fa-folder-tree\"></i>\n </button>\n </div>\n \n <button \n type=\"button\" \n class=\"control-btn primary\"\n (click)=\"createNewAgent()\"\n title=\"Create New Agent\">\n <i class=\"fa-solid fa-plus\"></i>\n New Agent\n </button>\n </div>\n </div>\n\n <!-- Main Content with Splitter -->\n <div class=\"main-content\" >\n <as-split direction=\"horizontal\" class=\"main-splitter\">\n\n <!-- Filter Panel (Left) -->\n @if (filterPanelVisible) {\n <as-split-area [size]=\"20\" [minSize]=\"15\" [maxSize]=\"30\">\n <mj-agent-filter-panel\n [agents]=\"agents\"\n [filteredAgents]=\"filteredAgents\"\n [filters]=\"currentFilters\"\n (filtersChange)=\"onFiltersChange($event)\"\n (filterChange)=\"onFilterChange()\"\n (resetFilters)=\"onResetFilters()\"\n (closePanel)=\"toggleFilterPanel()\">\n </mj-agent-filter-panel>\n </as-split-area>\n }\n\n <!-- Agents List Panel -->\n <as-split-area>\n <div class=\"agents-content\">\n <!-- Loading State -->\n @if (isLoading) {\n <div class=\"loading-container\">\n <mj-loading text=\"Loading agents...\" size=\"large\"></mj-loading>\n </div>\n }\n\n <!-- Agents Display -->\n @if (!isLoading) {\n @if (filteredAgents.length === 0) {\n <div class=\"empty-state\">\n <i class=\"fa-solid fa-robot\"></i>\n <h3>No agents found</h3>\n <p>No agents match your current filters. Try adjusting your search criteria or create a new agent.</p>\n <button \n type=\"button\" \n class=\"empty-state-btn\"\n (click)=\"createNewAgent()\">\n <i class=\"fa-solid fa-plus\"></i>\n Create New Agent\n </button>\n </div>\n } @else {\n <!-- Grid View -->\n @if (viewMode === 'grid') {\n <div class=\"agents-grid\">\n @for (agent of filteredAgents; track agent.ID) {\n <div class=\"agent-card\" [class.expanded]=\"expandedAgentId === agent.ID\">\n <!-- Card Header -->\n <div class=\"card-header\" (click)=\"toggleAgentExpansion(agent.ID)\">\n <div class=\"agent-info\">\n <div class=\"agent-icon\" [style.background-color]=\"getAgentIconColor(agent)\">\n @if (hasLogoURL(agent)) {\n <img [src]=\"agent.LogoURL\" [alt]=\"agent.Name + ' logo'\" class=\"agent-logo\">\n } @else {\n <i [class]=\"getAgentIcon(agent)\"></i>\n }\n </div>\n <div class=\"agent-details\">\n <h4 class=\"agent-name\" [innerHTML]=\"agent.Name | highlightSearch:currentFilters.searchTerm\"></h4>\n <div class=\"agent-meta\">\n <span class=\"meta-item type-badge\">\n <i class=\"fa-solid fa-tag\"></i>\n {{ getAgentTypeName(agent) }}\n </span>\n @if (agent.Status) {\n <span class=\"meta-item\" [class]=\"'status-' + agent.Status.toLowerCase()\">\n <i class=\"fa-solid fa-circle\" style=\"font-size: 8px;\"></i>\n {{ agent.Status }}\n </span>\n }\n </div>\n </div>\n </div>\n \n <i class=\"fa-solid fa-chevron-down expand-icon\" \n [class.rotated]=\"expandedAgentId === agent.ID\"></i>\n </div>\n\n <!-- Card Body -->\n <div class=\"card-body\">\n @if (agent.Description) {\n <p class=\"agent-description\" [innerHTML]=\"agent.Description | highlightSearch:currentFilters.searchTerm\"></p>\n } @else {\n <p class=\"agent-description text-muted\">No description provided</p>\n }\n \n <!-- Expandable Content -->\n @if (expandedAgentId === agent.ID) {\n <div class=\"expanded-content\">\n <div class=\"agent-stats\">\n @if (agent.Parent) {\n <div class=\"stat-item\">\n <span class=\"stat-label\">Parent</span>\n <span class=\"stat-value\">{{ agent.Parent }}</span>\n </div>\n }\n <div class=\"stat-item\">\n <span class=\"stat-label\">Context Compression</span>\n <span class=\"stat-value\">\n @if (agent.EnableContextCompression) {\n <i class=\"fa-solid fa-check\" style=\"color: #28a745;\"></i> Enabled\n } @else {\n <i class=\"fa-solid fa-times\" style=\"color: #dc3545;\"></i> Disabled\n }\n </span>\n </div>\n </div>\n </div>\n }\n </div>\n\n <!-- Card Actions -->\n <div class=\"card-actions\">\n @if (UserCanReadAgents) {\n <button\n type=\"button\"\n class=\"action-btn\"\n (click)=\"showAgentDetails(agent, $event)\"\n title=\"View Details\">\n <i class=\"fa-solid fa-eye\"></i>\n Details\n </button>\n }\n\n @if (agent.Status === 'Active' && UserCanReadAgents) {\n <button\n type=\"button\"\n class=\"action-btn action-btn-primary\"\n (click)=\"runAgent(agent); $event.stopPropagation()\"\n title=\"Run Agent\">\n <i class=\"fa-solid fa-play\"></i>\n Run\n </button>\n }\n </div>\n </div>\n }\n </div>\n }\n \n <!-- Tree View (Mac Finder style) -->\n @if (viewMode === 'tree') {\n <div class=\"agents-tree\">\n @for (node of categoryTree; track node.Category.ID) {\n @if (hasVisibleContent(node)) {\n <ng-container *ngTemplateOutlet=\"categoryNodeTpl; context: { $implicit: node, depth: 0 }\"></ng-container>\n }\n }\n\n <!-- Uncategorized agents -->\n @if (uncategorizedAgents.length > 0) {\n <div class=\"tree-category-group\">\n <div class=\"tree-category-header depth-0\">\n <i class=\"fa-solid fa-folder-open tree-folder-icon\"></i>\n <span class=\"tree-category-name\">Uncategorized</span>\n <span class=\"tree-category-count\">{{ uncategorizedAgents.length }}</span>\n </div>\n <div class=\"tree-agent-list\">\n @for (agent of uncategorizedAgents; track agent.ID) {\n <div class=\"tree-agent-row\" (click)=\"showAgentDetails(agent)\">\n <div class=\"tree-agent-icon\" [style.background-color]=\"getAgentIconColor(agent)\">\n @if (hasLogoURL(agent)) {\n <img [src]=\"agent.LogoURL\" [alt]=\"agent.Name + ' logo'\" class=\"tree-agent-logo\">\n } @else {\n <i [class]=\"getAgentIcon(agent)\"></i>\n }\n </div>\n <div class=\"tree-agent-info\">\n <span class=\"tree-agent-name\">{{ agent.Name }}</span>\n <span class=\"tree-agent-type\">{{ getAgentTypeName(agent) }}</span>\n </div>\n <span class=\"tree-agent-status\" [class]=\"'status-' + (agent.Status || 'unknown').toLowerCase()\">\n {{ agent.Status }}\n </span>\n @if (agent.Status === 'Active' && UserCanReadAgents) {\n <button\n type=\"button\"\n class=\"action-btn-small primary\"\n (click)=\"runAgent(agent); $event.stopPropagation()\"\n title=\"Run Agent\">\n <i class=\"fa-solid fa-play\"></i>\n </button>\n }\n </div>\n }\n </div>\n </div>\n }\n </div>\n }\n\n <!-- Recursive category node template -->\n <ng-template #categoryNodeTpl let-node let-depth=\"depth\">\n <div class=\"tree-category-group\">\n <div class=\"tree-category-header\" [class]=\"'depth-' + depth\" (click)=\"toggleCategoryNode(node)\">\n <i class=\"fa-solid tree-chevron\"\n [class.fa-chevron-right]=\"!node.Expanded\"\n [class.fa-chevron-down]=\"node.Expanded\"></i>\n <i class=\"fa-solid tree-folder-icon\"\n [class.fa-folder]=\"!node.Expanded\"\n [class.fa-folder-open]=\"node.Expanded\"></i>\n <span class=\"tree-category-name\">{{ node.Category.Name }}</span>\n <span class=\"tree-category-count\">{{ getAgentCount(node) }}</span>\n </div>\n\n @if (node.Expanded) {\n <!-- Agents directly in this category -->\n @if (node.Agents.length > 0) {\n <div class=\"tree-agent-list\" [style.padding-left.px]=\"(depth + 1) * 24\">\n @for (agent of node.Agents; track agent.ID) {\n <div class=\"tree-agent-row\" (click)=\"showAgentDetails(agent)\">\n <div class=\"tree-agent-icon\" [style.background-color]=\"getAgentIconColor(agent)\">\n @if (hasLogoURL(agent)) {\n <img [src]=\"agent.LogoURL\" [alt]=\"agent.Name + ' logo'\" class=\"tree-agent-logo\">\n } @else {\n <i [class]=\"getAgentIcon(agent)\"></i>\n }\n </div>\n <div class=\"tree-agent-info\">\n <span class=\"tree-agent-name\">{{ agent.Name }}</span>\n <span class=\"tree-agent-type\">{{ getAgentTypeName(agent) }}</span>\n </div>\n <span class=\"tree-agent-status\" [class]=\"'status-' + (agent.Status || 'unknown').toLowerCase()\">\n {{ agent.Status }}\n </span>\n @if (agent.Status === 'Active' && UserCanReadAgents) {\n <button\n type=\"button\"\n class=\"action-btn-small primary\"\n (click)=\"runAgent(agent); $event.stopPropagation()\"\n title=\"Run Agent\">\n <i class=\"fa-solid fa-play\"></i>\n </button>\n }\n </div>\n }\n </div>\n }\n\n <!-- Child categories -->\n @for (child of node.Children; track child.Category.ID) {\n @if (hasVisibleContent(child)) {\n <div [style.padding-left.px]=\"(depth + 1) * 24\">\n <ng-container *ngTemplateOutlet=\"categoryNodeTpl; context: { $implicit: child, depth: depth + 1 }\"></ng-container>\n </div>\n }\n }\n }\n </div>\n </ng-template>\n\n <!-- List View -->\n @if (viewMode === 'list') {\n <div class=\"agents-list\">\n <table class=\"agents-table\">\n <thead>\n <tr>\n <th (click)=\"sortBy('Name')\"\n [class.sorted]=\"sortColumn === 'Name'\"\n [class.desc]=\"sortColumn === 'Name' && sortDirection === 'desc'\">\n <span class=\"sort-header\">\n Name\n <i class=\"fa-solid fa-chevron-up sort-icon\"></i>\n </span>\n </th>\n <th>Type</th>\n <th (click)=\"sortBy('Status')\"\n [class.sorted]=\"sortColumn === 'Status'\"\n [class.desc]=\"sortColumn === 'Status' && sortDirection === 'desc'\">\n <span class=\"sort-header\">\n Status\n <i class=\"fa-solid fa-chevron-up sort-icon\"></i>\n </span>\n </th>\n <th>Actions</th>\n </tr>\n </thead>\n <tbody>\n @for (agent of filteredAgents; track agent.ID) {\n <tr>\n <td>\n <div class=\"agent-name-cell\">\n <div class=\"agent-icon-small\" [style.background-color]=\"getAgentIconColor(agent)\">\n @if (hasLogoURL(agent)) {\n <img [src]=\"agent.LogoURL\" [alt]=\"agent.Name + ' logo'\" class=\"agent-logo-small\">\n } @else {\n <i [class]=\"getAgentIcon(agent)\"></i>\n }\n </div>\n <div>\n <div class=\"agent-name\" [innerHTML]=\"agent.Name | highlightSearch:currentFilters.searchTerm\"></div>\n @if (agent.Description) {\n <div class=\"agent-description-small\" [innerHTML]=\"agent.Description | highlightSearch:currentFilters.searchTerm\"></div>\n }\n </div>\n </div>\n </td>\n <td>\n <span class=\"type-badge\">\n {{ getAgentTypeName(agent) }}\n </span>\n </td>\n <td>\n <span class=\"status-badge\" [class]=\"'status-' + (agent.Status || 'unknown').toLowerCase()\">\n {{ agent.Status || 'Unknown' }}\n </span>\n </td>\n <td>\n <div class=\"table-actions\">\n @if (UserCanReadAgents) {\n <button\n type=\"button\"\n class=\"action-btn-small\"\n (click)=\"showAgentDetails(agent)\"\n title=\"View Details\">\n <i class=\"fa-solid fa-eye\"></i>\n </button>\n }\n @if (agent.Status === 'Active' && UserCanReadAgents) {\n <button\n type=\"button\"\n class=\"action-btn-small primary\"\n (click)=\"runAgent(agent)\"\n title=\"Run Agent\">\n <i class=\"fa-solid fa-play\"></i>\n </button>\n }\n </div>\n </td>\n </tr>\n }\n </tbody>\n </table>\n </div>\n }\n }\n }\n </div>\n </as-split-area>\n </as-split>\n </div>\n\n <!-- Detail Panel Overlay -->\n @if (detailPanelVisible) {\n <div class=\"detail-panel-overlay\" (click)=\"closeDetailPanel()\"></div>\n }\n\n <!-- Detail Panel -->\n <div class=\"detail-panel\" [class.visible]=\"detailPanelVisible\">\n @if (selectedAgent) {\n <!-- Panel Header -->\n <div class=\"detail-panel-header\">\n <div class=\"detail-panel-title\">\n <div class=\"detail-icon\" [style.background-color]=\"getAgentIconColor(selectedAgent)\">\n @if (hasLogoURL(selectedAgent)) {\n <img [src]=\"selectedAgent.LogoURL\" [alt]=\"selectedAgent.Name + ' logo'\" class=\"detail-logo\">\n } @else {\n <i [class]=\"getAgentIcon(selectedAgent)\"></i>\n }\n </div>\n <div class=\"detail-title-info\">\n <h3>{{ selectedAgent.Name }}</h3>\n <span class=\"detail-subtitle\">{{ getAgentTypeName(selectedAgent) }}</span>\n </div>\n </div>\n <button class=\"detail-panel-close\" (click)=\"closeDetailPanel()\">\n <i class=\"fa-solid fa-times\"></i>\n </button>\n </div>\n\n <!-- Panel Content -->\n <div class=\"detail-panel-content\">\n <!-- Status and Type Section -->\n <div class=\"detail-section\">\n <div class=\"detail-badges\">\n <span class=\"status-badge\" [class]=\"'status-' + (selectedAgent.Status || 'unknown').toLowerCase()\">\n <i class=\"fa-solid fa-circle\" style=\"font-size: 8px;\"></i>\n {{ selectedAgent.Status || 'Unknown' }}\n </span>\n @if (selectedAgent.ExposeAsAction) {\n <span class=\"feature-badge\">\n <i class=\"fa-solid fa-bolt\"></i>\n Exposed as Action\n </span>\n }\n </div>\n </div>\n\n <!-- Description -->\n @if (selectedAgent.Description) {\n <div class=\"detail-section\">\n <h4 class=\"detail-section-title\">\n <i class=\"fa-solid fa-align-left\"></i>\n Description\n </h4>\n <p class=\"detail-description\">{{ selectedAgent.Description }}</p>\n </div>\n }\n\n <!-- Configuration Details -->\n <div class=\"detail-section\">\n <h4 class=\"detail-section-title\">\n <i class=\"fa-solid fa-cog\"></i>\n Configuration\n </h4>\n <div class=\"detail-grid\">\n <div class=\"detail-item\">\n <span class=\"detail-label\">Execution Mode</span>\n <span class=\"detail-value\">\n <i [class]=\"getExecutionModeIcon(selectedAgent.ExecutionMode)\"></i>\n {{ selectedAgent.ExecutionMode }}\n </span>\n </div>\n @if (getParentAgentName(selectedAgent)) {\n <div class=\"detail-item\">\n <span class=\"detail-label\">Parent Agent</span>\n <span class=\"detail-value\">{{ getParentAgentName(selectedAgent) }}</span>\n </div>\n }\n <div class=\"detail-item\">\n <span class=\"detail-label\">Context Compression</span>\n <span class=\"detail-value\">\n @if (selectedAgent.EnableContextCompression) {\n <i class=\"fa-solid fa-check\" style=\"color: #10b981;\"></i> Enabled\n } @else {\n <i class=\"fa-solid fa-times\" style=\"color: #ef4444;\"></i> Disabled\n }\n </span>\n </div>\n <div class=\"detail-item\">\n <span class=\"detail-label\">Exposed as Action</span>\n <span class=\"detail-value\">\n @if (selectedAgent.ExposeAsAction) {\n <i class=\"fa-solid fa-check\" style=\"color: #10b981;\"></i> Yes\n } @else {\n <i class=\"fa-solid fa-times\" style=\"color: #ef4444;\"></i> No\n }\n </span>\n </div>\n <div class=\"detail-item\">\n <span class=\"detail-label\">Model Selection</span>\n <span class=\"detail-value\">{{ selectedAgent.ModelSelectionMode }}</span>\n </div>\n </div>\n </div>\n\n <!-- Timestamps -->\n <div class=\"detail-section\">\n <h4 class=\"detail-section-title\">\n <i class=\"fa-solid fa-clock\"></i>\n Timestamps\n </h4>\n <div class=\"detail-grid\">\n <div class=\"detail-item\">\n <span class=\"detail-label\">Created</span>\n <span class=\"detail-value\">{{ selectedAgent.__mj_CreatedAt | date:'medium' }}</span>\n </div>\n <div class=\"detail-item\">\n <span class=\"detail-label\">Updated</span>\n <span class=\"detail-value\">{{ selectedAgent.__mj_UpdatedAt | date:'medium' }}</span>\n </div>\n </div>\n </div>\n </div>\n\n <!-- Panel Actions -->\n <div class=\"detail-panel-actions\">\n @if (selectedAgent.Status === 'Active') {\n <button\n type=\"button\"\n class=\"detail-action-btn secondary\"\n (click)=\"runAgent(selectedAgent)\">\n <i class=\"fa-solid fa-play\"></i>\n Run Agent\n </button>\n }\n <button\n type=\"button\"\n class=\"detail-action-btn primary\"\n (click)=\"openAgentFromPanel()\">\n <i class=\"fa-solid fa-external-link-alt\"></i>\n Open Full Record\n </button>\n </div>\n }\n </div>\n</div>\n\n<!-- AI Agent Test Harness - Now handled by service with minimize support -->"]}
1
+ {"version":3,"file":"agent-configuration.component.js","sourceRoot":"","sources":["../../../../src/AI/components/agents/agent-configuration.component.ts","../../../../src/AI/components/agents/agent-configuration.component.html"],"names":[],"mappings":"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","sourcesContent":["import { Component, OnDestroy, AfterViewInit, ChangeDetectorRef } from '@angular/core';\nimport { Subject } from 'rxjs';\nimport { debounceTime, takeUntil } from 'rxjs/operators';\nimport { Metadata, CompositeKey, RunView } from '@memberjunction/core';\nimport { ResourceData, UserInfoEngine } from '@memberjunction/core-entities';\nimport { AIEngineBase } from '@memberjunction/ai-engine-base';\nimport { AITestHarnessDialogService } from '@memberjunction/ng-ai-test-harness';\nimport { CreateAgentService, CreateAgentDialogResult, CreateAgentResult } from '@memberjunction/ng-agents';\nimport { MJNotificationService } from '@memberjunction/ng-notifications';\nimport { RegisterClass , UUIDsEqual } from '@memberjunction/global';\nimport { BaseResourceComponent, NavigationService } from '@memberjunction/ng-shared';\nimport { MJAIAgentEntityExtended } from '@memberjunction/ai-core-plus';\nimport { TreeBranchConfig, TreeLeafConfig, AfterNodeClickEventArgs, AfterNodeDoubleClickEventArgs } from '@memberjunction/ng-trees';\n\ninterface AgentFilter {\n searchTerm: string;\n agentType: string;\n parentAgent: string;\n status: string;\n executionMode: string;\n exposeAsAction: string;\n categoryId: string;\n}\n\n\n/**\n * User preferences for the Agent Configuration dashboard\n */\ninterface AgentConfigurationUserPreferences {\n filterPanelVisible: boolean;\n viewMode: 'grid' | 'list' | 'tree';\n sortColumn: string;\n sortDirection: 'asc' | 'desc';\n filters: AgentFilter;\n}\n/**\n * AI Agents Resource - displays AI agent configuration and management\n * Extends BaseResourceComponent to work with the resource type system\n */\n@RegisterClass(BaseResourceComponent, 'AIAgentsResource')\n@Component({\n standalone: false,\n selector: 'app-agent-configuration',\n templateUrl: './agent-configuration.component.html',\n styleUrls: ['./agent-configuration.component.css']\n})\nexport class AgentConfigurationComponent extends BaseResourceComponent implements AfterViewInit, OnDestroy {\n // Settings persistence\n private readonly USER_SETTINGS_KEY = 'AI.Agents.UserPreferences';\n private settingsPersistSubject = new Subject<void>();\n protected override destroy$ = new Subject<void>();\n private settingsLoaded = false;\n\n public isLoading = false;\n public filterPanelVisible = true;\n public viewMode: 'grid' | 'list' | 'tree' = 'grid';\n public expandedAgentId: string | null = null;\n\n public agents: MJAIAgentEntityExtended[] = [];\n public filteredAgents: MJAIAgentEntityExtended[] = [];\n\n // Detail panel\n public selectedAgent: MJAIAgentEntityExtended | null = null;\n public detailPanelVisible = false;\n\n // Sorting state\n public sortColumn: string = 'Name';\n public sortDirection: 'asc' | 'desc' = 'asc';\n\n public currentFilters: AgentFilter = {\n searchTerm: '',\n agentType: 'all',\n parentAgent: 'all',\n status: 'all',\n executionMode: 'all',\n exposeAsAction: 'all',\n categoryId: 'all'\n };\n\n public selectedAgentForTest: MJAIAgentEntityExtended | null = null;\n\n // mj-tree configuration for category tree view\n public CategoryBranchConfig: TreeBranchConfig = {\n EntityName: 'MJ: AI Agent Categories',\n DisplayField: 'Name',\n ParentIDField: 'ParentID',\n DefaultIcon: 'fa-solid fa-folder',\n DescriptionField: 'Description',\n ExtraFilter: \"Status='Active'\",\n OrderBy: 'Name ASC'\n };\n\n public AgentLeafConfig: TreeLeafConfig = {\n EntityName: 'MJ: AI Agents',\n ParentField: 'CategoryID',\n DisplayField: 'Name',\n DefaultIcon: 'fa-solid fa-robot',\n IconField: 'IconClass',\n DescriptionField: 'Type',\n BadgeField: 'Status',\n OrderBy: 'Name ASC'\n };\n\n // === Permission Checks ===\n /** Cache for permission checks to avoid repeated calculations */\n private _permissionCache = new Map<string, boolean>();\n private _metadata = new Metadata();\n\n /** Check if user can create AI Agents */\n public get UserCanCreateAgents(): boolean {\n return this.checkEntityPermission('MJ: AI Agents', 'Create');\n }\n\n /** Check if user can read AI Agents */\n public get UserCanReadAgents(): boolean {\n return this.checkEntityPermission('MJ: AI Agents', 'Read');\n }\n\n /** Check if user can update AI Agents */\n public get UserCanUpdateAgents(): boolean {\n return this.checkEntityPermission('MJ: AI Agents', 'Update');\n }\n\n /** Check if user can delete AI Agents */\n public get UserCanDeleteAgents(): boolean {\n return this.checkEntityPermission('MJ: AI Agents', 'Delete');\n }\n\n /**\n * Helper method to check entity permissions with caching\n * @param entityName - The name of the entity to check permissions for\n * @param permissionType - The type of permission to check (Create, Read, Update, Delete)\n * @returns boolean indicating if user has the permission\n */\n private checkEntityPermission(entityName: string, permissionType: 'Create' | 'Read' | 'Update' | 'Delete'): boolean {\n const cacheKey = `${entityName}_${permissionType}`;\n \n if (this._permissionCache.has(cacheKey)) {\n return this._permissionCache.get(cacheKey)!;\n }\n\n try {\n const entityInfo = this._metadata.Entities.find(e => e.Name === entityName);\n \n if (!entityInfo) {\n console.warn(`Entity '${entityName}' not found for permission check`);\n this._permissionCache.set(cacheKey, false);\n return false;\n }\n\n const userPermissions = entityInfo.GetUserPermisions(this._metadata.CurrentUser);\n let hasPermission = false;\n\n switch (permissionType) {\n case 'Create':\n hasPermission = userPermissions.CanCreate;\n break;\n case 'Read':\n hasPermission = userPermissions.CanRead;\n break;\n case 'Update':\n hasPermission = userPermissions.CanUpdate;\n break;\n case 'Delete':\n hasPermission = userPermissions.CanDelete;\n break;\n }\n\n this._permissionCache.set(cacheKey, hasPermission);\n return hasPermission;\n } catch (error) {\n console.error(`Error checking ${permissionType} permission for ${entityName}:`, error);\n this._permissionCache.set(cacheKey, false);\n return false;\n }\n }\n\n /**\n * Clears the permission cache. Call this when user context changes or permissions are updated.\n */\n public clearPermissionCache(): void {\n this._permissionCache.clear();\n }\n\n constructor(\n private testHarnessService: AITestHarnessDialogService,\n private createAgentService: CreateAgentService,\n private cdr: ChangeDetectorRef\n ) {\n super();\n\n // Set up debounced settings persistence\n this.settingsPersistSubject.pipe(\n debounceTime(500),\n takeUntil(this.destroy$)\n ).subscribe(() => {\n this.persistUserPreferences();\n });\n }\n\n async ngAfterViewInit() {\n // Load saved user preferences first\n this.loadUserPreferences();\n\n // Apply initial state from resource configuration if provided (overrides saved prefs)\n if (this.Data?.Configuration) {\n this.applyInitialState(this.Data.Configuration);\n }\n\n // Load agents and categories in parallel\n await Promise.all([\n this.loadAgents(),\n this.loadCategories()\n ]);\n\n // Apply filters after data is loaded (uses saved preferences)\n this.applyFilters();\n this.cdr.detectChanges();\n\n // Notify that the resource has finished loading\n this.NotifyLoadComplete();\n }\n\n ngOnDestroy(): void {\n super.ngOnDestroy();\n this.destroy$.next();\n this.destroy$.complete();\n }\n\n // ========================================\n // User Settings Persistence\n // ========================================\n\n /**\n * Load saved user preferences from the UserInfoEngine\n */\n private loadUserPreferences(): void {\n try {\n const savedPrefs = UserInfoEngine.Instance.GetSetting(this.USER_SETTINGS_KEY);\n if (savedPrefs) {\n const prefs = JSON.parse(savedPrefs) as AgentConfigurationUserPreferences;\n this.applyUserPreferences(prefs);\n }\n } catch (error) {\n console.warn('[AgentConfiguration] Failed to load user preferences:', error);\n } finally {\n this.settingsLoaded = true;\n }\n }\n\n /**\n * Apply loaded preferences to component state\n */\n private applyUserPreferences(prefs: AgentConfigurationUserPreferences): void {\n if (prefs.filterPanelVisible !== undefined) {\n this.filterPanelVisible = prefs.filterPanelVisible;\n }\n if (prefs.viewMode) {\n this.viewMode = prefs.viewMode;\n }\n if (prefs.sortColumn) {\n this.sortColumn = prefs.sortColumn;\n }\n if (prefs.sortDirection) {\n this.sortDirection = prefs.sortDirection;\n }\n if (prefs.filters) {\n this.currentFilters = {\n searchTerm: prefs.filters.searchTerm || '',\n agentType: prefs.filters.agentType || 'all',\n parentAgent: prefs.filters.parentAgent || 'all',\n status: prefs.filters.status || 'all',\n executionMode: prefs.filters.executionMode || 'all',\n exposeAsAction: prefs.filters.exposeAsAction || 'all',\n categoryId: prefs.filters.categoryId || 'all'\n };\n }\n }\n\n /**\n * Get current preferences as an object for saving\n */\n private getCurrentPreferences(): AgentConfigurationUserPreferences {\n return {\n filterPanelVisible: this.filterPanelVisible,\n viewMode: this.viewMode,\n sortColumn: this.sortColumn,\n sortDirection: this.sortDirection,\n filters: {\n ...this.currentFilters\n }\n };\n }\n\n /**\n * Persist user preferences to storage (debounced)\n */\n private saveUserPreferencesDebounced(): void {\n if (!this.settingsLoaded) return; // Don't save during initial load\n this.settingsPersistSubject.next();\n }\n\n /**\n * Actually persist user preferences to the UserInfoEngine\n */\n private async persistUserPreferences(): Promise<void> {\n try {\n const prefs = this.getCurrentPreferences();\n await UserInfoEngine.Instance.SetSetting(this.USER_SETTINGS_KEY, JSON.stringify(prefs));\n } catch (error) {\n console.warn('[AgentConfiguration] Failed to persist user preferences:', error);\n }\n }\n\n private applyInitialState(state: any): void {\n if (state.filterPanelVisible !== undefined) {\n this.filterPanelVisible = state.filterPanelVisible;\n }\n if (state.viewMode) {\n this.viewMode = state.viewMode;\n }\n if (state.expandedAgentId) {\n this.expandedAgentId = state.expandedAgentId;\n }\n if (state.currentFilters) {\n this.currentFilters = { ...this.currentFilters, ...state.currentFilters };\n }\n }\n\n private async loadAgents(): Promise<void> {\n try {\n this.isLoading = true;\n\n // Ensure AIEngineBase is configured (no-op if already loaded)\n await AIEngineBase.Instance.Config(false);\n\n // Get cached agents from AIEngineBase\n this.agents = AIEngineBase.Instance.Agents;\n this.filteredAgents = [...this.agents];\n } catch (error) {\n console.error('Error loading AI agents:', error);\n } finally {\n this.isLoading = false;\n }\n }\n\n public toggleFilterPanel(): void {\n this.filterPanelVisible = !this.filterPanelVisible;\n this.emitStateChange();\n this.saveUserPreferencesDebounced();\n }\n\n public onMainSplitterChange(_event: any): void {\n this.emitStateChange();\n }\n\n public onFiltersChange(filters: AgentFilter): void {\n this.currentFilters = { ...filters };\n this.applyFilters();\n this.saveUserPreferencesDebounced();\n }\n\n public onFilterChange(): void {\n this.applyFilters();\n }\n\n public onResetFilters(): void {\n this.currentFilters = {\n searchTerm: '',\n agentType: 'all',\n parentAgent: 'all',\n status: 'all',\n executionMode: 'all',\n exposeAsAction: 'all',\n categoryId: 'all'\n };\n this.applyFilters();\n this.saveUserPreferencesDebounced();\n }\n\n private applyFilters(): void {\n let filtered = [...this.agents];\n\n // Apply search filter (name contains)\n if (this.currentFilters.searchTerm) {\n const searchTerm = this.currentFilters.searchTerm.toLowerCase();\n filtered = filtered.filter(agent =>\n (agent.Name || '').toLowerCase().includes(searchTerm) ||\n (agent.Description || '').toLowerCase().includes(searchTerm)\n );\n }\n\n // Apply agent type filter\n if (this.currentFilters.agentType !== 'all') {\n filtered = filtered.filter(agent => UUIDsEqual(agent.TypeID, this.currentFilters.agentType));\n }\n\n // Apply parent agent filter\n if (this.currentFilters.parentAgent !== 'all') {\n if (this.currentFilters.parentAgent === 'none') {\n filtered = filtered.filter(agent => !agent.ParentID);\n } else {\n filtered = filtered.filter(agent => UUIDsEqual(agent.ParentID, this.currentFilters.parentAgent));\n }\n }\n\n // Apply status filter\n if (this.currentFilters.status !== 'all') {\n const wantActive = this.currentFilters.status === 'active';\n if (wantActive) {\n filtered = filtered.filter(agent => agent.Status === 'Active');\n } else {\n filtered = filtered.filter(agent => agent.Status !== 'Active');\n }\n }\n\n // Apply execution mode filter\n if (this.currentFilters.executionMode !== 'all') {\n filtered = filtered.filter(agent => agent.ExecutionMode === this.currentFilters.executionMode);\n }\n\n // Apply expose as action filter\n if (this.currentFilters.exposeAsAction !== 'all') {\n const isExposed = this.currentFilters.exposeAsAction === 'true';\n filtered = filtered.filter(agent => agent.ExposeAsAction === isExposed);\n }\n\n // Apply category filter — match the selected category or any of its descendants\n if (this.currentFilters.categoryId !== 'all') {\n const matchingIds = this.getCategoryAndDescendantIds(this.currentFilters.categoryId);\n filtered = filtered.filter(agent => {\n const agentCatId = agent.CategoryID;\n return agentCatId != null && matchingIds.some(id => UUIDsEqual(id, agentCatId));\n });\n }\n\n // Apply sorting\n filtered = this.applySorting(filtered);\n\n this.filteredAgents = filtered;\n }\n\n /**\n * Sort the agents by the specified column\n */\n public sortBy(column: string): void {\n if (this.sortColumn === column) {\n // Toggle direction if same column\n this.sortDirection = this.sortDirection === 'asc' ? 'desc' : 'asc';\n } else {\n // New column, default to ascending\n this.sortColumn = column;\n this.sortDirection = 'asc';\n }\n this.applyFilters();\n this.saveUserPreferencesDebounced();\n }\n\n /**\n * Apply sorting to the filtered list\n */\n private applySorting(agents: MJAIAgentEntityExtended[]): MJAIAgentEntityExtended[] {\n return agents.sort((a, b) => {\n let valueA: string | boolean | null | undefined;\n let valueB: string | boolean | null | undefined;\n\n switch (this.sortColumn) {\n case 'Name':\n valueA = a.Name;\n valueB = b.Name;\n break;\n case 'Status':\n valueA = a.Status;\n valueB = b.Status;\n break;\n case 'ExecutionMode':\n valueA = a.ExecutionMode;\n valueB = b.ExecutionMode;\n break;\n default:\n valueA = a.Name;\n valueB = b.Name;\n }\n\n // Handle null/undefined values\n const strA = (valueA ?? '').toString().toLowerCase();\n const strB = (valueB ?? '').toString().toLowerCase();\n\n let comparison = strA.localeCompare(strB);\n return this.sortDirection === 'desc' ? -comparison : comparison;\n });\n }\n\n private emitStateChange(): void {\n // State change handling - could be used for persisting user preferences in the future\n // For now, just a placeholder for tracking state changes\n }\n\n public setViewMode(mode: 'grid' | 'list' | 'tree'): void {\n this.viewMode = mode;\n this.emitStateChange();\n this.saveUserPreferencesDebounced();\n }\n\n public toggleAgentExpansion(agentId: string): void {\n this.expandedAgentId = this.expandedAgentId === agentId ? null : agentId;\n }\n\n /**\n * Show the detail panel for an agent\n */\n public showAgentDetails(agent: MJAIAgentEntityExtended, event?: Event): void {\n if (event) {\n event.stopPropagation();\n }\n this.selectedAgent = agent;\n this.detailPanelVisible = true;\n }\n\n /**\n * Close the detail panel\n */\n public closeDetailPanel(): void {\n this.detailPanelVisible = false;\n // Delay clearing selectedAgent for smoother animation\n setTimeout(() => {\n if (!this.detailPanelVisible) {\n this.selectedAgent = null;\n }\n }, 300);\n }\n\n /**\n * Open the full entity record from the detail panel\n */\n public openAgentFromPanel(): void {\n if (this.selectedAgent) {\n this.openAgentRecord(this.selectedAgent.ID);\n }\n }\n\n /**\n * Get the parent agent name if it exists\n */\n public getParentAgentName(agent: MJAIAgentEntityExtended): string | null {\n if (!agent.ParentID) return null;\n const parent = this.agents.find(a => UUIDsEqual(a.ID, agent.ParentID));\n return parent?.Name || 'Unknown Parent';\n }\n\n /**\n * Get agent type name\n */\n public getAgentTypeName(agent: MJAIAgentEntityExtended): string {\n return agent.Type || 'Standard Agent';\n }\n\n public openAgentRecord(agentId: string): void {\n const compositeKey = new CompositeKey([{ FieldName: 'ID', Value: agentId }]);\n this.navigationService.OpenEntityRecord('MJ: AI Agents', compositeKey);\n }\n\n /**\n * Opens the create agent slide-in panel. Upon successful creation,\n * saves the agent and navigates to the new record.\n */\n public createNewAgent(): void {\n this.createAgentService.OpenSlideIn({\n Title: 'Create New Agent'\n }).pipe(takeUntil(this.destroy$)).subscribe({\n next: async (dialogResult: CreateAgentDialogResult) => {\n if (!dialogResult.Cancelled && dialogResult.Result) {\n await this.handleAgentCreated(dialogResult.Result);\n }\n },\n error: (error) => {\n console.error('Error in create agent slide-in:', error);\n MJNotificationService.Instance.CreateSimpleNotification(\n 'Error opening agent creation panel. Please try again.',\n 'error',\n 3000\n );\n }\n });\n }\n\n /**\n * Handles the result from the create agent slide-in.\n * Saves the agent and navigates to the new record.\n */\n private async handleAgentCreated(result: CreateAgentResult): Promise<void> {\n try {\n const agent = result.Agent;\n\n // Save the agent\n const saveResult = await agent.Save();\n if (!saveResult) {\n throw new Error('Failed to save agent');\n }\n\n // Save linked prompts if any\n if (result.AgentPrompts && result.AgentPrompts.length > 0) {\n for (const agentPrompt of result.AgentPrompts) {\n // Update the AgentID to the saved agent's ID\n agentPrompt.AgentID = agent.ID;\n await agentPrompt.Save();\n }\n }\n\n // Save linked actions if any\n if (result.AgentActions && result.AgentActions.length > 0) {\n for (const agentAction of result.AgentActions) {\n // Update the AgentID to the saved agent's ID\n agentAction.AgentID = agent.ID;\n await agentAction.Save();\n }\n }\n\n // Refresh the agent list\n await AIEngineBase.Instance.Config(true); // Force refresh\n await this.loadAgents();\n this.applyFilters();\n\n // Navigate to the new agent record\n const compositeKey = new CompositeKey([{ FieldName: 'ID', Value: agent.ID }]);\n this.navigationService.OpenEntityRecord('MJ: AI Agents', compositeKey);\n\n MJNotificationService.Instance.CreateSimpleNotification(\n `Agent \"${agent.Name}\" created successfully`,\n 'success',\n 3000\n );\n } catch (error) {\n console.error('Error saving created agent:', error);\n MJNotificationService.Instance.CreateSimpleNotification(\n 'Error saving agent. Please try again.',\n 'error',\n 3000\n );\n }\n }\n\n public runAgent(agent: MJAIAgentEntityExtended): void {\n // Use the test harness service for window management features\n this.testHarnessService.openForAgent(agent.ID);\n }\n\n public closeTestHarness(): void {\n // No longer needed - window manages its own closure\n this.selectedAgentForTest = null;\n }\n\n public getAgentIconColor(agent: MJAIAgentEntityExtended): string {\n // Generate a consistent color based on agent properties\n const colors = ['#17a2b8', '#28a745', '#ffc107', '#dc3545', '#6c757d', '#007bff'];\n const index = (agent.Name?.charCodeAt(0) || 0) % colors.length;\n return colors[index];\n }\n\n public onOpenRecord(entityName: string, recordId: string): void {\n const compositeKey = new CompositeKey([{ FieldName: 'ID', Value: recordId }]);\n this.navigationService.OpenEntityRecord(entityName, compositeKey);\n }\n\n public getExecutionModeColor(mode: string): string {\n switch (mode) {\n case 'Sequential': return 'info';\n case 'Parallel': return 'success';\n default: return 'info';\n }\n }\n\n public getExecutionModeIcon(mode: string): string {\n switch (mode) {\n case 'Sequential': return 'fa-solid fa-list-ol';\n case 'Parallel': return 'fa-solid fa-layer-group';\n default: return 'fa-solid fa-robot';\n }\n }\n\n /**\n * Gets the agent's display icon\n * Prioritizes LogoURL, falls back to IconClass, then default robot icon\n */\n public getAgentIcon(agent: MJAIAgentEntityExtended): string {\n if (agent?.LogoURL) {\n // LogoURL is used in img tag, not here\n return '';\n }\n return agent?.IconClass || 'fa-solid fa-robot';\n }\n\n /**\n * Checks if the agent has a logo URL (for image display)\n */\n public hasLogoURL(agent: MJAIAgentEntityExtended): boolean {\n return !!agent?.LogoURL;\n }\n\n // ========================================\n // Category Tree View (mj-tree)\n // ========================================\n\n /** Lightweight category row for descendant filtering */\n private categories: { ID: string; ParentID: string | null }[] = [];\n\n /** Load categories for descendant-based filter matching */\n private async loadCategories(): Promise<void> {\n try {\n const rv = new RunView();\n const result = await rv.RunView<{ ID: string; ParentID: string | null }>({\n EntityName: 'MJ: AI Agent Categories',\n Fields: ['ID', 'ParentID'],\n ExtraFilter: \"Status='Active'\",\n ResultType: 'simple'\n });\n if (result.Success) {\n this.categories = result.Results;\n }\n } catch (error) {\n console.error('[AgentConfiguration] Error loading categories:', error);\n }\n }\n\n /** Get a category and all its descendant IDs (for inclusive filtering) */\n private getCategoryAndDescendantIds(categoryId: string): string[] {\n const ids = [categoryId];\n const children = this.categories.filter(c => c.ParentID && UUIDsEqual(c.ParentID, categoryId));\n for (const child of children) {\n ids.push(...this.getCategoryAndDescendantIds(child.ID));\n }\n return ids;\n }\n\n /** Handle click on a tree node — open detail panel for agents */\n public onTreeNodeClick(event: AfterNodeClickEventArgs): void {\n const node = event.Node;\n if (node.Type === 'leaf') {\n const agent = this.agents.find(a => UUIDsEqual(a.ID, node.ID));\n if (agent) {\n this.showAgentDetails(agent);\n }\n }\n }\n\n /** Handle double-click on a tree node — open full record for agents */\n public onTreeNodeDoubleClick(event: AfterNodeDoubleClickEventArgs): void {\n const node = event.Node;\n if (node.Type === 'leaf') {\n this.openAgentRecord(node.ID);\n }\n }\n\n // === BaseResourceComponent Required Methods ===\n\n /**\n * Get the display name for this resource\n */\n async GetResourceDisplayName(data: ResourceData): Promise<string> {\n return 'Agents';\n }\n\n /**\n * Get the icon class for this resource\n */\n async GetResourceIconClass(data: ResourceData): Promise<string> {\n return 'fa-solid fa-robot';\n }\n}","<div class=\"agent-configuration-container\">\n <!-- Header -->\n <div class=\"dashboard-header\">\n <div class=\"header-info\">\n <h2 class=\"dashboard-title\">\n <i class=\"fa-solid fa-robot\"></i>\n Agent Configuration\n </h2>\n <button \n type=\"button\" \n class=\"filter-toggle-btn\"\n (click)=\"toggleFilterPanel()\"\n title=\"Toggle Filters\">\n <i class=\"fa-solid fa-filter\"></i>\n @if (filterPanelVisible) {\n Hide Filters\n } @else {\n Show Filters\n }\n </button>\n <span class=\"item-count\">{{ filteredAgents.length }} agents</span>\n </div>\n \n <div class=\"header-controls\">\n <div class=\"view-toggle\">\n <button\n type=\"button\"\n class=\"view-btn\"\n [class.active]=\"viewMode === 'grid'\"\n (click)=\"setViewMode('grid')\"\n title=\"Grid View\">\n <i class=\"fa-solid fa-grip\"></i>\n </button>\n <button\n type=\"button\"\n class=\"view-btn\"\n [class.active]=\"viewMode === 'list'\"\n (click)=\"setViewMode('list')\"\n title=\"List View\">\n <i class=\"fa-solid fa-list\"></i>\n </button>\n <button\n type=\"button\"\n class=\"view-btn\"\n [class.active]=\"viewMode === 'tree'\"\n (click)=\"setViewMode('tree')\"\n title=\"Category Tree View\">\n <i class=\"fa-solid fa-folder-tree\"></i>\n </button>\n </div>\n \n <button \n type=\"button\" \n class=\"control-btn primary\"\n (click)=\"createNewAgent()\"\n title=\"Create New Agent\">\n <i class=\"fa-solid fa-plus\"></i>\n New Agent\n </button>\n </div>\n </div>\n\n <!-- Main Content with Splitter -->\n <div class=\"main-content\" >\n <as-split direction=\"horizontal\" class=\"main-splitter\">\n\n <!-- Filter Panel (Left) -->\n @if (filterPanelVisible) {\n <as-split-area [size]=\"20\" [minSize]=\"15\" [maxSize]=\"30\">\n <mj-agent-filter-panel\n [agents]=\"agents\"\n [filteredAgents]=\"filteredAgents\"\n [filters]=\"currentFilters\"\n (filtersChange)=\"onFiltersChange($event)\"\n (filterChange)=\"onFilterChange()\"\n (resetFilters)=\"onResetFilters()\"\n (closePanel)=\"toggleFilterPanel()\">\n </mj-agent-filter-panel>\n </as-split-area>\n }\n\n <!-- Agents List Panel -->\n <as-split-area>\n <div class=\"agents-content\">\n <!-- Loading State -->\n @if (isLoading) {\n <div class=\"loading-container\">\n <mj-loading text=\"Loading agents...\" size=\"large\"></mj-loading>\n </div>\n }\n\n <!-- Agents Display -->\n @if (!isLoading) {\n @if (filteredAgents.length === 0) {\n <div class=\"empty-state\">\n <i class=\"fa-solid fa-robot\"></i>\n <h3>No agents found</h3>\n <p>No agents match your current filters. Try adjusting your search criteria or create a new agent.</p>\n <button \n type=\"button\" \n class=\"empty-state-btn\"\n (click)=\"createNewAgent()\">\n <i class=\"fa-solid fa-plus\"></i>\n Create New Agent\n </button>\n </div>\n } @else {\n <!-- Grid View -->\n @if (viewMode === 'grid') {\n <div class=\"agents-grid\">\n @for (agent of filteredAgents; track agent.ID) {\n <div class=\"agent-card\" [class.expanded]=\"expandedAgentId === agent.ID\">\n <!-- Card Header -->\n <div class=\"card-header\" (click)=\"toggleAgentExpansion(agent.ID)\">\n <div class=\"agent-info\">\n <div class=\"agent-icon\" [style.background-color]=\"getAgentIconColor(agent)\">\n @if (hasLogoURL(agent)) {\n <img [src]=\"agent.LogoURL\" [alt]=\"agent.Name + ' logo'\" class=\"agent-logo\">\n } @else {\n <i [class]=\"getAgentIcon(agent)\"></i>\n }\n </div>\n <div class=\"agent-details\">\n <h4 class=\"agent-name\" [innerHTML]=\"agent.Name | highlightSearch:currentFilters.searchTerm\"></h4>\n <div class=\"agent-meta\">\n <span class=\"meta-item type-badge\">\n <i class=\"fa-solid fa-tag\"></i>\n {{ getAgentTypeName(agent) }}\n </span>\n @if (agent.Status) {\n <span class=\"meta-item\" [class]=\"'status-' + agent.Status.toLowerCase()\">\n <i class=\"fa-solid fa-circle\" style=\"font-size: 8px;\"></i>\n {{ agent.Status }}\n </span>\n }\n </div>\n </div>\n </div>\n \n <i class=\"fa-solid fa-chevron-down expand-icon\" \n [class.rotated]=\"expandedAgentId === agent.ID\"></i>\n </div>\n\n <!-- Card Body -->\n <div class=\"card-body\">\n @if (agent.Description) {\n <p class=\"agent-description\" [innerHTML]=\"agent.Description | highlightSearch:currentFilters.searchTerm\"></p>\n } @else {\n <p class=\"agent-description text-muted\">No description provided</p>\n }\n \n <!-- Expandable Content -->\n @if (expandedAgentId === agent.ID) {\n <div class=\"expanded-content\">\n <div class=\"agent-stats\">\n @if (agent.Parent) {\n <div class=\"stat-item\">\n <span class=\"stat-label\">Parent</span>\n <span class=\"stat-value\">{{ agent.Parent }}</span>\n </div>\n }\n <div class=\"stat-item\">\n <span class=\"stat-label\">Context Compression</span>\n <span class=\"stat-value\">\n @if (agent.EnableContextCompression) {\n <i class=\"fa-solid fa-check\" style=\"color: #28a745;\"></i> Enabled\n } @else {\n <i class=\"fa-solid fa-times\" style=\"color: #dc3545;\"></i> Disabled\n }\n </span>\n </div>\n </div>\n </div>\n }\n </div>\n\n <!-- Card Actions -->\n <div class=\"card-actions\">\n @if (UserCanReadAgents) {\n <button\n type=\"button\"\n class=\"action-btn\"\n (click)=\"showAgentDetails(agent, $event)\"\n title=\"View Details\">\n <i class=\"fa-solid fa-eye\"></i>\n Details\n </button>\n }\n\n @if (agent.Status === 'Active' && UserCanReadAgents) {\n <button\n type=\"button\"\n class=\"action-btn action-btn-primary\"\n (click)=\"runAgent(agent); $event.stopPropagation()\"\n title=\"Run Agent\">\n <i class=\"fa-solid fa-play\"></i>\n Run\n </button>\n }\n </div>\n </div>\n }\n </div>\n }\n \n <!-- Tree View (mj-tree component) -->\n @if (viewMode === 'tree') {\n <div class=\"agents-tree\">\n <mj-tree\n [BranchConfig]=\"CategoryBranchConfig\"\n [LeafConfig]=\"AgentLeafConfig\"\n [SelectionMode]=\"'single'\"\n [SelectableTypes]=\"'leaf'\"\n [ShowDescriptions]=\"true\"\n [ShowBadges]=\"true\"\n [ShowExpandCollapseAll]=\"true\"\n [EmptyMessage]=\"'No agents found'\"\n [EmptyIcon]=\"'fa-solid fa-robot'\"\n (AfterNodeClick)=\"onTreeNodeClick($event)\"\n (AfterNodeDoubleClick)=\"onTreeNodeDoubleClick($event)\">\n </mj-tree>\n </div>\n }\n\n <!-- List View -->\n @if (viewMode === 'list') {\n <div class=\"agents-list\">\n <table class=\"agents-table\">\n <thead>\n <tr>\n <th (click)=\"sortBy('Name')\"\n [class.sorted]=\"sortColumn === 'Name'\"\n [class.desc]=\"sortColumn === 'Name' && sortDirection === 'desc'\">\n <span class=\"sort-header\">\n Name\n <i class=\"fa-solid fa-chevron-up sort-icon\"></i>\n </span>\n </th>\n <th>Type</th>\n <th (click)=\"sortBy('Status')\"\n [class.sorted]=\"sortColumn === 'Status'\"\n [class.desc]=\"sortColumn === 'Status' && sortDirection === 'desc'\">\n <span class=\"sort-header\">\n Status\n <i class=\"fa-solid fa-chevron-up sort-icon\"></i>\n </span>\n </th>\n <th>Actions</th>\n </tr>\n </thead>\n <tbody>\n @for (agent of filteredAgents; track agent.ID) {\n <tr>\n <td>\n <div class=\"agent-name-cell\">\n <div class=\"agent-icon-small\" [style.background-color]=\"getAgentIconColor(agent)\">\n @if (hasLogoURL(agent)) {\n <img [src]=\"agent.LogoURL\" [alt]=\"agent.Name + ' logo'\" class=\"agent-logo-small\">\n } @else {\n <i [class]=\"getAgentIcon(agent)\"></i>\n }\n </div>\n <div>\n <div class=\"agent-name\" [innerHTML]=\"agent.Name | highlightSearch:currentFilters.searchTerm\"></div>\n @if (agent.Description) {\n <div class=\"agent-description-small\" [innerHTML]=\"agent.Description | highlightSearch:currentFilters.searchTerm\"></div>\n }\n </div>\n </div>\n </td>\n <td>\n <span class=\"type-badge\">\n {{ getAgentTypeName(agent) }}\n </span>\n </td>\n <td>\n <span class=\"status-badge\" [class]=\"'status-' + (agent.Status || 'unknown').toLowerCase()\">\n {{ agent.Status || 'Unknown' }}\n </span>\n </td>\n <td>\n <div class=\"table-actions\">\n @if (UserCanReadAgents) {\n <button\n type=\"button\"\n class=\"action-btn-small\"\n (click)=\"showAgentDetails(agent)\"\n title=\"View Details\">\n <i class=\"fa-solid fa-eye\"></i>\n </button>\n }\n @if (agent.Status === 'Active' && UserCanReadAgents) {\n <button\n type=\"button\"\n class=\"action-btn-small primary\"\n (click)=\"runAgent(agent)\"\n title=\"Run Agent\">\n <i class=\"fa-solid fa-play\"></i>\n </button>\n }\n </div>\n </td>\n </tr>\n }\n </tbody>\n </table>\n </div>\n }\n }\n }\n </div>\n </as-split-area>\n </as-split>\n </div>\n\n <!-- Detail Panel Overlay -->\n @if (detailPanelVisible) {\n <div class=\"detail-panel-overlay\" (click)=\"closeDetailPanel()\"></div>\n }\n\n <!-- Detail Panel -->\n <div class=\"detail-panel\" [class.visible]=\"detailPanelVisible\">\n @if (selectedAgent) {\n <!-- Panel Header -->\n <div class=\"detail-panel-header\">\n <div class=\"detail-panel-title\">\n <div class=\"detail-icon\" [style.background-color]=\"getAgentIconColor(selectedAgent)\">\n @if (hasLogoURL(selectedAgent)) {\n <img [src]=\"selectedAgent.LogoURL\" [alt]=\"selectedAgent.Name + ' logo'\" class=\"detail-logo\">\n } @else {\n <i [class]=\"getAgentIcon(selectedAgent)\"></i>\n }\n </div>\n <div class=\"detail-title-info\">\n <h3>{{ selectedAgent.Name }}</h3>\n <span class=\"detail-subtitle\">{{ getAgentTypeName(selectedAgent) }}</span>\n </div>\n </div>\n <button class=\"detail-panel-close\" (click)=\"closeDetailPanel()\">\n <i class=\"fa-solid fa-times\"></i>\n </button>\n </div>\n\n <!-- Panel Content -->\n <div class=\"detail-panel-content\">\n <!-- Status and Type Section -->\n <div class=\"detail-section\">\n <div class=\"detail-badges\">\n <span class=\"status-badge\" [class]=\"'status-' + (selectedAgent.Status || 'unknown').toLowerCase()\">\n <i class=\"fa-solid fa-circle\" style=\"font-size: 8px;\"></i>\n {{ selectedAgent.Status || 'Unknown' }}\n </span>\n @if (selectedAgent.ExposeAsAction) {\n <span class=\"feature-badge\">\n <i class=\"fa-solid fa-bolt\"></i>\n Exposed as Action\n </span>\n }\n </div>\n </div>\n\n <!-- Description -->\n @if (selectedAgent.Description) {\n <div class=\"detail-section\">\n <h4 class=\"detail-section-title\">\n <i class=\"fa-solid fa-align-left\"></i>\n Description\n </h4>\n <p class=\"detail-description\">{{ selectedAgent.Description }}</p>\n </div>\n }\n\n <!-- Configuration Details -->\n <div class=\"detail-section\">\n <h4 class=\"detail-section-title\">\n <i class=\"fa-solid fa-cog\"></i>\n Configuration\n </h4>\n <div class=\"detail-grid\">\n <div class=\"detail-item\">\n <span class=\"detail-label\">Execution Mode</span>\n <span class=\"detail-value\">\n <i [class]=\"getExecutionModeIcon(selectedAgent.ExecutionMode)\"></i>\n {{ selectedAgent.ExecutionMode }}\n </span>\n </div>\n @if (getParentAgentName(selectedAgent)) {\n <div class=\"detail-item\">\n <span class=\"detail-label\">Parent Agent</span>\n <span class=\"detail-value\">{{ getParentAgentName(selectedAgent) }}</span>\n </div>\n }\n <div class=\"detail-item\">\n <span class=\"detail-label\">Context Compression</span>\n <span class=\"detail-value\">\n @if (selectedAgent.EnableContextCompression) {\n <i class=\"fa-solid fa-check\" style=\"color: #10b981;\"></i> Enabled\n } @else {\n <i class=\"fa-solid fa-times\" style=\"color: #ef4444;\"></i> Disabled\n }\n </span>\n </div>\n <div class=\"detail-item\">\n <span class=\"detail-label\">Exposed as Action</span>\n <span class=\"detail-value\">\n @if (selectedAgent.ExposeAsAction) {\n <i class=\"fa-solid fa-check\" style=\"color: #10b981;\"></i> Yes\n } @else {\n <i class=\"fa-solid fa-times\" style=\"color: #ef4444;\"></i> No\n }\n </span>\n </div>\n <div class=\"detail-item\">\n <span class=\"detail-label\">Model Selection</span>\n <span class=\"detail-value\">{{ selectedAgent.ModelSelectionMode }}</span>\n </div>\n </div>\n </div>\n\n <!-- Timestamps -->\n <div class=\"detail-section\">\n <h4 class=\"detail-section-title\">\n <i class=\"fa-solid fa-clock\"></i>\n Timestamps\n </h4>\n <div class=\"detail-grid\">\n <div class=\"detail-item\">\n <span class=\"detail-label\">Created</span>\n <span class=\"detail-value\">{{ selectedAgent.__mj_CreatedAt | date:'medium' }}</span>\n </div>\n <div class=\"detail-item\">\n <span class=\"detail-label\">Updated</span>\n <span class=\"detail-value\">{{ selectedAgent.__mj_UpdatedAt | date:'medium' }}</span>\n </div>\n </div>\n </div>\n </div>\n\n <!-- Panel Actions -->\n <div class=\"detail-panel-actions\">\n @if (selectedAgent.Status === 'Active') {\n <button\n type=\"button\"\n class=\"detail-action-btn secondary\"\n (click)=\"runAgent(selectedAgent)\">\n <i class=\"fa-solid fa-play\"></i>\n Run Agent\n </button>\n }\n <button\n type=\"button\"\n class=\"detail-action-btn primary\"\n (click)=\"openAgentFromPanel()\">\n <i class=\"fa-solid fa-external-link-alt\"></i>\n Open Full Record\n </button>\n </div>\n }\n </div>\n</div>\n\n<!-- AI Agent Test Harness - Now handled by service with minimize support -->"]}
@@ -19,8 +19,8 @@ interface AgentPrompt {
19
19
  type: string;
20
20
  }
21
21
  export declare class AgentEditorComponent implements OnInit, OnDestroy, AfterViewInit {
22
- private createAgentService;
23
22
  private navigationService;
23
+ private createAgentService;
24
24
  agentId: string | null;
25
25
  close: EventEmitter<void>;
26
26
  openAgent: EventEmitter<string>;
@@ -45,7 +45,7 @@ export declare class AgentEditorComponent implements OnInit, OnDestroy, AfterVie
45
45
  private tree;
46
46
  private root;
47
47
  private zoom;
48
- constructor(createAgentService: CreateAgentService, navigationService: NavigationService);
48
+ constructor(navigationService: NavigationService, createAgentService: CreateAgentService);
49
49
  ngOnInit(): void;
50
50
  ngAfterViewInit(): void;
51
51
  ngOnDestroy(): void;
@@ -1 +1 @@
1
- {"version":3,"file":"agent-editor.component.d.ts","sourceRoot":"","sources":["../../../../src/AI/components/agents/agent-editor.component.ts"],"names":[],"mappings":"AAAA,OAAO,EAA4B,YAAY,EAAE,MAAM,EAAE,SAAS,EAAa,UAAU,EAAE,aAAa,EAAE,MAAM,eAAe,CAAC;AAEhI,OAAO,EAAE,uBAAuB,EAAE,MAAM,8BAA8B,CAAC;AACvE,OAAO,EAAE,kBAAkB,EAAqB,MAAM,2BAA2B,CAAC;AAClF,OAAO,EAAE,iBAAiB,EAAE,MAAM,2BAA2B,CAAC;;AAI9D,UAAU,kBAAkB;IAC1B,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,uBAAuB,CAAC;IAC/B,QAAQ,CAAC,EAAE,kBAAkB,EAAE,CAAC;IAChC,MAAM,CAAC,EAAE,kBAAkB,CAAC;IAC5B,CAAC,CAAC,EAAE,MAAM,CAAC;IACX,CAAC,CAAC,EAAE,MAAM,CAAC;CACZ;AAED,UAAU,WAAW;IACnB,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,MAAM,CAAC;CACd;AAED,qBAMa,oBAAqB,YAAW,MAAM,EAAE,SAAS,EAAE,aAAa;IAgCzE,OAAO,CAAC,kBAAkB;IAC1B,OAAO,CAAC,iBAAiB;IAhClB,OAAO,EAAE,MAAM,GAAG,IAAI,CAAQ;IAC7B,KAAK,qBAA4B;IACjC,SAAS,uBAA8B;IACvC,gBAAgB;oBAAiC,MAAM;kBAAY,MAAM;OAAK;IAExC,iBAAiB,EAAG,UAAU,CAAC;IAExE,SAAS,UAAS;IAClB,KAAK,EAAE,MAAM,GAAG,IAAI,CAAQ;IAC5B,YAAY,EAAE,uBAAuB,GAAG,IAAI,CAAQ;IACpD,SAAS,EAAE,uBAAuB,EAAE,CAAM;IAC1C,aAAa,EAAE,kBAAkB,GAAG,IAAI,CAAQ;IAChD,YAAY,EAAE,kBAAkB,GAAG,IAAI,CAAQ;IAC/C,YAAY,EAAE,WAAW,EAAE,CAAM;IAGjC,SAAS,EAAE,WAAW,GAAG,SAAS,GAAG,YAAY,CAAe;IAGhE,aAAa,UAAQ;IACrB,WAAW,UAAQ;IACnB,cAAc,UAAQ;IAG7B,OAAO,CAAC,GAAG,CAAM;IACjB,OAAO,CAAC,CAAC,CAAM;IACf,OAAO,CAAC,IAAI,CAAM;IAClB,OAAO,CAAC,IAAI,CAAM;IAClB,OAAO,CAAC,IAAI,CAAM;gBAGR,kBAAkB,EAAE,kBAAkB,EACtC,iBAAiB,EAAE,iBAAiB;IAG9C,QAAQ,IAAI,IAAI;IAMhB,eAAe,IAAI,IAAI;IAIvB,WAAW,IAAI,IAAI;IAON,aAAa,IAAI,OAAO,CAAC,IAAI,CAAC;IAoC3C,OAAO,CAAC,cAAc;IAUtB,OAAO,CAAC,aAAa;IAUrB,OAAO,CAAC,kBAAkB;IAoB1B,OAAO,CAAC,mBAAmB;YAab,gBAAgB;IAe9B,OAAO,CAAC,eAAe;IA0CvB,OAAO,CAAC,eAAe;IAkGvB,OAAO,CAAC,aAAa;IAqBrB,OAAO,CAAC,YAAY;IAyBpB,OAAO,CAAC,kBAAkB;IAQ1B,OAAO,CAAC,YAAY;IAcb,WAAW,CAAC,IAAI,EAAE,kBAAkB,GAAG,IAAI;IAM3C,MAAM,IAAI,IAAI;IAQd,OAAO,IAAI,IAAI;IAQf,SAAS,IAAI,IAAI;IAUjB,eAAe,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI;IAItC,WAAW,IAAI,IAAI;IAInB,YAAY,CAAC,GAAG,EAAE,WAAW,GAAG,SAAS,GAAG,YAAY,GAAG,IAAI;IAI/D,qBAAqB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM;IAI3C,oBAAoB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM;IAIjD;;;OAGG;IACI,kBAAkB,IAAI,IAAI;IAqBjC;;;OAGG;YACW,kBAAkB;IAkDzB,WAAW,IAAI,OAAO;IAItB,SAAS,IAAI,OAAO;IAIpB,aAAa,IAAI,MAAM;IAIvB,sBAAsB,IAAI,IAAI;yCA5f1B,oBAAoB;2CAApB,oBAAoB;CAigBhC"}
1
+ {"version":3,"file":"agent-editor.component.d.ts","sourceRoot":"","sources":["../../../../src/AI/components/agents/agent-editor.component.ts"],"names":[],"mappings":"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"}
@@ -3,8 +3,8 @@ import { RunView, LogError, LogStatus } from '@memberjunction/core';
3
3
  import * as d3 from 'd3';
4
4
  import { UUIDsEqual } from '@memberjunction/global';
5
5
  import * as i0 from "@angular/core";
6
- import * as i1 from "@memberjunction/ng-agents";
7
- import * as i2 from "@memberjunction/ng-shared";
6
+ import * as i1 from "@memberjunction/ng-shared";
7
+ import * as i2 from "@memberjunction/ng-agents";
8
8
  import * as i3 from "@angular/forms";
9
9
  import * as i4 from "@memberjunction/ng-shared-generic";
10
10
  const _c0 = ["hierarchyChart"];
@@ -316,8 +316,8 @@ function AgentEditorComponent_Conditional_12_Template(rf, ctx) { if (rf & 1) {
316
316
  i0.ɵɵconditional(ctx_r1.activeTab === "properties" ? 3 : -1);
317
317
  } }
318
318
  export class AgentEditorComponent {
319
- createAgentService;
320
319
  navigationService;
320
+ createAgentService;
321
321
  agentId = null;
322
322
  close = new EventEmitter();
323
323
  openAgent = new EventEmitter();
@@ -342,9 +342,9 @@ export class AgentEditorComponent {
342
342
  tree;
343
343
  root;
344
344
  zoom;
345
- constructor(createAgentService, navigationService) {
346
- this.createAgentService = createAgentService;
345
+ constructor(navigationService, createAgentService) {
347
346
  this.navigationService = navigationService;
347
+ this.createAgentService = createAgentService;
348
348
  }
349
349
  ngOnInit() {
350
350
  if (this.agentId) {
@@ -746,7 +746,7 @@ export class AgentEditorComponent {
746
746
  this.openEntityRecord.emit({ entityName: 'MJ: AI Agents', recordId: this.currentAgent.ID });
747
747
  }
748
748
  }
749
- static ɵfac = function AgentEditorComponent_Factory(__ngFactoryType__) { return new (__ngFactoryType__ || AgentEditorComponent)(i0.ɵɵdirectiveInject(i1.CreateAgentService), i0.ɵɵdirectiveInject(i2.NavigationService)); };
749
+ static ɵfac = function AgentEditorComponent_Factory(__ngFactoryType__) { return new (__ngFactoryType__ || AgentEditorComponent)(i0.ɵɵdirectiveInject(i1.NavigationService), i0.ɵɵdirectiveInject(i2.CreateAgentService)); };
750
750
  static ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: AgentEditorComponent, selectors: [["mj-agent-editor"]], viewQuery: function AgentEditorComponent_Query(rf, ctx) { if (rf & 1) {
751
751
  i0.ɵɵviewQuery(_c0, 5);
752
752
  } if (rf & 2) {
@@ -785,7 +785,7 @@ export class AgentEditorComponent {
785
785
  (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(AgentEditorComponent, [{
786
786
  type: Component,
787
787
  args: [{ standalone: false, selector: 'mj-agent-editor', template: "<div class=\"agent-editor-container\">\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 <mj-loading text=\"Loading agent data...\" size=\"large\"></mj-loading>\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\" >\n \n <!-- Hierarchy Tab -->\n @if (activeTab === 'hierarchy') {\n <div class=\"hierarchy-section\" >\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 >\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\" >\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\" >\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 now uses CreateAgentService slide-in panel -->\n</div>", styles: [".agent-editor-container {\n display: flex;\n flex-direction: column;\n height: 100%;\n background: var(--mj-bg-surface-card);\n}\n\n.editor-header {\n background: var(--mj-bg-surface);\n border-bottom: 1px solid var(--mj-border-default);\n padding: 16px 20px;\n display: flex;\n justify-content: space-between;\n align-items: center;\n flex-shrink: 0;\n}\n.editor-header .header-info {\n display: flex;\n align-items: center;\n gap: 20px;\n}\n.editor-header .header-info .header-actions {\n display: flex;\n align-items: center;\n gap: 12px;\n}\n.editor-header .header-info .back-btn, .editor-header .header-info .open-btn {\n display: flex;\n align-items: center;\n gap: 8px;\n padding: 8px 16px;\n border: 1px solid var(--mj-border-default);\n border-radius: 4px;\n text-decoration: none;\n font-size: 14px;\n cursor: pointer;\n transition: all 0.2s;\n}\n.editor-header .header-info .back-btn:hover, .editor-header .header-info .open-btn:hover {\n border-color: var(--mj-border-strong);\n}\n.editor-header .header-info .back-btn {\n background: var(--mj-bg-surface-card);\n color: var(--mj-text-muted);\n}\n.editor-header .header-info .back-btn:hover {\n background: var(--mj-border-default);\n color: var(--mj-text-primary);\n}\n.editor-header .header-info .open-btn {\n background: var(--mj-brand-primary);\n color: var(--mj-text-inverse);\n}\n.editor-header .header-info .open-btn:hover {\n background: var(--mj-brand-primary-hover);\n}\n.editor-header .header-info .agent-breadcrumb h2 {\n margin: 0;\n font-size: 24px;\n font-weight: 600;\n color: var(--mj-text-primary);\n}\n.editor-header .header-info .agent-breadcrumb .breadcrumb-item {\n font-size: 14px;\n color: var(--mj-text-muted);\n display: flex;\n align-items: center;\n gap: 8px;\n margin-top: 4px;\n}\n.editor-header .header-controls {\n display: flex;\n gap: 8px;\n}\n.editor-header .header-controls .control-btn {\n display: flex;\n align-items: center;\n gap: 6px;\n padding: 8px 12px;\n background: var(--mj-bg-surface);\n border: 1px solid var(--mj-border-default);\n border-radius: 4px;\n color: var(--mj-text-muted);\n font-size: 12px;\n cursor: pointer;\n transition: all 0.2s;\n}\n.editor-header .header-controls .control-btn:hover {\n background: var(--mj-bg-surface-card);\n border-color: var(--mj-brand-primary);\n color: var(--mj-brand-primary);\n}\n.editor-header .header-controls .control-btn.active {\n background: var(--mj-brand-primary);\n border-color: var(--mj-brand-primary);\n color: var(--mj-text-inverse);\n}\n\n.tab-navigation {\n background: var(--mj-bg-surface);\n border-bottom: 1px solid var(--mj-border-default);\n padding: 0 20px;\n display: flex;\n gap: 2px;\n flex-shrink: 0;\n}\n.tab-navigation .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: var(--mj-text-muted);\n font-size: 14px;\n font-weight: 500;\n cursor: pointer;\n transition: all 0.2s;\n}\n.tab-navigation .tab-btn:hover {\n color: var(--mj-brand-primary);\n background: var(--mj-bg-surface-card);\n}\n.tab-navigation .tab-btn.active {\n color: var(--mj-brand-primary);\n border-bottom-color: var(--mj-brand-primary);\n background: var(--mj-bg-surface-card);\n}\n.tab-navigation .tab-btn i {\n font-size: 16px;\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-container .loading-content, .loading-container .error-content, .error-container .loading-content, .error-container .error-content {\n text-align: center;\n}\n.loading-container .loading-content .loading-spinner, .loading-container .error-content .loading-spinner, .error-container .loading-content .loading-spinner, .error-container .error-content .loading-spinner {\n position: relative;\n width: 60px;\n height: 60px;\n margin: 0 auto 20px;\n}\n.loading-container .loading-content .spinner-ring, .loading-container .error-content .spinner-ring, .error-container .loading-content .spinner-ring, .error-container .error-content .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.loading-container .loading-content .spinner-ring:nth-child(1), .loading-container .error-content .spinner-ring:nth-child(1), .error-container .loading-content .spinner-ring:nth-child(1), .error-container .error-content .spinner-ring:nth-child(1) {\n border-top-color: var(--mj-brand-primary);\n animation-delay: 0s;\n}\n.loading-container .loading-content .spinner-ring:nth-child(2), .loading-container .error-content .spinner-ring:nth-child(2), .error-container .loading-content .spinner-ring:nth-child(2), .error-container .error-content .spinner-ring:nth-child(2) {\n border-top-color: var(--mj-brand-primary);\n animation-delay: 0.3s;\n transform: scale(0.8);\n}\n.loading-container .loading-content .spinner-ring:nth-child(3), .loading-container .error-content .spinner-ring:nth-child(3), .error-container .loading-content .spinner-ring:nth-child(3), .error-container .error-content .spinner-ring:nth-child(3) {\n border-top-color: var(--mj-status-warning);\n animation-delay: 0.6s;\n transform: scale(0.6);\n}\n.loading-container .loading-content .loading-text, .loading-container .error-content .loading-text, .error-container .loading-content .loading-text, .error-container .error-content .loading-text {\n font-size: 16px;\n color: var(--mj-text-muted);\n}\n.loading-container .loading-content i, .loading-container .error-content i, .error-container .loading-content i, .error-container .error-content i {\n font-size: 48px;\n color: var(--mj-status-error);\n margin-bottom: 16px;\n}\n.loading-container .loading-content h3, .loading-container .error-content h3, .error-container .loading-content h3, .error-container .error-content h3 {\n margin: 0 0 8px 0;\n color: var(--mj-text-primary);\n}\n.loading-container .loading-content p, .loading-container .error-content p, .error-container .loading-content p, .error-container .error-content p {\n margin: 0 0 16px 0;\n color: var(--mj-text-muted);\n}\n.loading-container .loading-content .retry-btn, .loading-container .error-content .retry-btn, .error-container .loading-content .retry-btn, .error-container .error-content .retry-btn {\n display: flex;\n align-items: center;\n gap: 8px;\n padding: 8px 16px;\n background: var(--mj-status-error);\n border: none;\n border-radius: 4px;\n color: var(--mj-text-inverse);\n cursor: pointer;\n}\n.loading-container .loading-content .retry-btn:hover, .loading-container .error-content .retry-btn:hover, .error-container .loading-content .retry-btn:hover, .error-container .error-content .retry-btn:hover {\n background: var(--mj-status-error);\n}\n\n.editor-content {\n flex: 1;\n overflow: hidden;\n}\n\n.main-splitter, .bottom-splitter {\n height: 100%;\n}\n.main-splitter ::ng-deep .as-split-area-content, .bottom-splitter ::ng-deep .as-split-area-content {\n overflow: hidden;\n}\n\n.hierarchy-section {\n display: flex;\n flex-direction: column;\n height: 100%;\n background: var(--mj-bg-surface);\n}\n.hierarchy-section .section-header {\n padding: 16px 20px;\n border-bottom: 1px solid var(--mj-bg-surface-sunken);\n display: flex;\n justify-content: space-between;\n align-items: center;\n flex-shrink: 0;\n}\n.hierarchy-section .section-header h3 {\n margin: 0;\n font-size: 16px;\n font-weight: 600;\n color: var(--mj-text-primary);\n display: flex;\n align-items: center;\n gap: 8px;\n}\n.hierarchy-section .section-header .hierarchy-controls {\n display: flex;\n align-items: center;\n gap: 20px;\n}\n.hierarchy-section .section-header .hierarchy-controls .zoom-controls {\n display: flex;\n gap: 4px;\n}\n.hierarchy-section .section-header .hierarchy-controls .zoom-controls .zoom-btn {\n display: flex;\n align-items: center;\n justify-content: center;\n width: 32px;\n height: 32px;\n background: var(--mj-bg-surface);\n border: 1px solid var(--mj-border-default);\n border-radius: 4px;\n color: var(--mj-text-muted);\n cursor: pointer;\n transition: all 0.2s;\n}\n.hierarchy-section .section-header .hierarchy-controls .zoom-controls .zoom-btn:hover {\n background: var(--mj-bg-surface-card);\n border-color: var(--mj-brand-primary);\n color: var(--mj-brand-primary);\n}\n.hierarchy-section .section-header .hierarchy-controls .zoom-controls .zoom-btn i {\n font-size: 12px;\n}\n.hierarchy-section .section-header .hierarchy-controls .hierarchy-legend {\n display: flex;\n gap: 16px;\n}\n.hierarchy-section .section-header .hierarchy-controls .hierarchy-legend .legend-item {\n display: flex;\n align-items: center;\n gap: 6px;\n font-size: 12px;\n color: var(--mj-text-muted);\n}\n.hierarchy-section .section-header .hierarchy-controls .hierarchy-legend .legend-item .legend-rect {\n width: 20px;\n height: 12px;\n border-radius: 2px;\n border: 1px solid;\n}\n.hierarchy-section .section-header .hierarchy-controls .hierarchy-legend .legend-item .legend-rect.level-0 {\n background: var(--mj-brand-primary);\n border-color: var(--mj-brand-primary-hover);\n}\n.hierarchy-section .section-header .hierarchy-controls .hierarchy-legend .legend-item .legend-rect.level-1 {\n background: var(--mj-status-success);\n border-color: var(--mj-color-success-700);\n}\n.hierarchy-section .section-header .hierarchy-controls .hierarchy-legend .legend-item .legend-rect.level-2 {\n background: var(--mj-status-warning);\n border-color: var(--mj-status-warning);\n}\n.hierarchy-section .hierarchy-chart {\n flex: 1;\n min-height: 300px;\n overflow: hidden;\n position: relative;\n}\n.hierarchy-section .hierarchy-chart .chart-help {\n position: absolute;\n bottom: 10px;\n left: 10px;\n background: color-mix(in srgb, var(--mj-bg-surface) 90%, transparent);\n padding: 6px 10px;\n border-radius: 4px;\n border: 1px solid var(--mj-border-default);\n z-index: 10;\n}\n.hierarchy-section .hierarchy-chart .chart-help small {\n font-size: 11px;\n color: var(--mj-text-muted);\n display: flex;\n align-items: center;\n gap: 6px;\n}\n.hierarchy-section .hierarchy-chart .chart-help small i {\n color: var(--mj-brand-primary);\n}\n.hierarchy-section .hierarchy-chart .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: var(--mj-text-muted);\n}\n.hierarchy-section .hierarchy-chart .empty-hierarchy i {\n font-size: 64px;\n margin-bottom: 20px;\n opacity: 0.5;\n}\n.hierarchy-section .hierarchy-chart .empty-hierarchy h4 {\n margin: 0 0 12px 0;\n font-size: 18px;\n color: var(--mj-text-primary);\n}\n.hierarchy-section .hierarchy-chart .empty-hierarchy p {\n margin: 0 0 24px 0;\n font-size: 14px;\n color: var(--mj-text-muted);\n line-height: 1.5;\n}\n.hierarchy-section .hierarchy-chart .empty-hierarchy .create-subagent-btn {\n display: flex;\n align-items: center;\n gap: 8px;\n padding: 12px 20px;\n background: var(--mj-brand-primary);\n border: none;\n border-radius: 6px;\n color: var(--mj-text-inverse);\n font-size: 14px;\n font-weight: 500;\n cursor: pointer;\n transition: background 0.2s;\n}\n.hierarchy-section .hierarchy-chart .empty-hierarchy .create-subagent-btn:hover {\n background: var(--mj-brand-primary);\n}\n\n.prompts-section {\n display: flex;\n flex-direction: column;\n height: 100%;\n background: var(--mj-bg-surface);\n border-right: 1px solid var(--mj-bg-surface-sunken);\n}\n.prompts-section .section-header {\n padding: 16px 20px;\n border-bottom: 1px solid var(--mj-bg-surface-sunken);\n display: flex;\n justify-content: space-between;\n align-items: center;\n flex-shrink: 0;\n}\n.prompts-section .section-header h3 {\n margin: 0;\n font-size: 16px;\n font-weight: 600;\n color: var(--mj-text-primary);\n display: flex;\n align-items: center;\n gap: 8px;\n}\n.prompts-section .section-header .add-prompt-btn {\n display: flex;\n align-items: center;\n gap: 6px;\n padding: 6px 12px;\n background: var(--mj-brand-primary);\n border: none;\n border-radius: 4px;\n color: var(--mj-text-inverse);\n font-size: 12px;\n cursor: pointer;\n}\n.prompts-section .section-header .add-prompt-btn:hover {\n background: var(--mj-brand-primary);\n}\n.prompts-section .prompts-list {\n flex: 1;\n overflow-y: auto;\n padding: 16px 20px;\n}\n.prompts-section .prompts-list .empty-prompts {\n text-align: center;\n padding: 40px 20px;\n color: var(--mj-text-muted);\n}\n.prompts-section .prompts-list .empty-prompts i {\n font-size: 48px;\n margin-bottom: 16px;\n}\n.prompts-section .prompts-list .empty-prompts p {\n margin: 0 0 20px 0;\n font-size: 14px;\n}\n.prompts-section .prompts-list .empty-prompts .add-first-prompt-btn {\n display: inline-flex;\n align-items: center;\n gap: 8px;\n padding: 8px 16px;\n background: var(--mj-brand-primary);\n border: none;\n border-radius: 4px;\n color: var(--mj-text-inverse);\n cursor: pointer;\n}\n.prompts-section .prompts-list .empty-prompts .add-first-prompt-btn:hover {\n background: var(--mj-brand-primary);\n}\n.prompts-section .prompts-list .prompt-card {\n background: var(--mj-bg-surface-card);\n border: 1px solid var(--mj-border-default);\n border-radius: 4px;\n margin-bottom: 12px;\n}\n.prompts-section .prompts-list .prompt-card .prompt-header {\n padding: 12px 16px;\n border-bottom: 1px solid var(--mj-border-default);\n display: flex;\n justify-content: space-between;\n align-items: center;\n}\n.prompts-section .prompts-list .prompt-card .prompt-header .prompt-info h4 {\n margin: 0 0 4px 0;\n font-size: 14px;\n font-weight: 600;\n color: var(--mj-text-primary);\n}\n.prompts-section .prompts-list .prompt-card .prompt-header .prompt-info .prompt-type {\n font-size: 11px;\n padding: 2px 6px;\n background: var(--mj-brand-primary);\n color: var(--mj-text-inverse);\n border-radius: 3px;\n text-transform: uppercase;\n}\n.prompts-section .prompts-list .prompt-card .prompt-header .prompt-actions {\n display: flex;\n gap: 4px;\n}\n.prompts-section .prompts-list .prompt-card .prompt-header .prompt-actions .action-btn {\n padding: 4px 8px;\n background: none;\n border: 1px solid var(--mj-border-default);\n border-radius: 3px;\n color: var(--mj-text-muted);\n cursor: pointer;\n font-size: 12px;\n}\n.prompts-section .prompts-list .prompt-card .prompt-header .prompt-actions .action-btn:hover {\n background: var(--mj-bg-surface-sunken);\n border-color: var(--mj-border-strong);\n}\n.prompts-section .prompts-list .prompt-card .prompt-header .prompt-actions .action-btn.danger:hover {\n background: var(--mj-status-error);\n border-color: var(--mj-status-error);\n color: var(--mj-text-inverse);\n}\n.prompts-section .prompts-list .prompt-card .prompt-content {\n padding: 12px 16px;\n}\n.prompts-section .prompts-list .prompt-card .prompt-content p {\n margin: 0;\n font-size: 12px;\n color: var(--mj-text-muted);\n line-height: 1.4;\n}\n\n.properties-section {\n display: flex;\n flex-direction: column;\n height: 100%;\n background: var(--mj-bg-surface);\n}\n.properties-section .section-header {\n padding: 16px 20px;\n border-bottom: 1px solid var(--mj-bg-surface-sunken);\n display: flex;\n justify-content: space-between;\n align-items: center;\n flex-shrink: 0;\n}\n.properties-section .section-header h3 {\n margin: 0;\n font-size: 16px;\n font-weight: 600;\n color: var(--mj-text-primary);\n display: flex;\n align-items: center;\n gap: 8px;\n}\n.properties-section .section-header .save-btn {\n display: flex;\n align-items: center;\n gap: 6px;\n padding: 6px 12px;\n background: var(--mj-status-success);\n border: none;\n border-radius: 4px;\n color: var(--mj-text-inverse);\n font-size: 12px;\n cursor: pointer;\n}\n.properties-section .section-header .save-btn:hover {\n background: var(--mj-color-success-700);\n}\n.properties-section .properties-form {\n flex: 1;\n overflow-y: auto;\n padding: 20px;\n}\n.properties-section .properties-form .form-group {\n margin-bottom: 16px;\n}\n.properties-section .properties-form .form-group label {\n display: block;\n font-size: 12px;\n font-weight: 600;\n color: var(--mj-text-primary);\n margin-bottom: 4px;\n}\n.properties-section .properties-form .form-group .form-input, .properties-section .properties-form .form-group .form-select, .properties-section .properties-form .form-group .form-textarea {\n width: 100%;\n padding: 8px 12px;\n border: 1px solid var(--mj-border-default);\n border-radius: 4px;\n font-size: 13px;\n background: var(--mj-bg-surface);\n box-sizing: border-box;\n}\n.properties-section .properties-form .form-group .form-input:focus, .properties-section .properties-form .form-group .form-select:focus, .properties-section .properties-form .form-group .form-textarea:focus {\n outline: none;\n border-color: var(--mj-brand-primary);\n}\n.properties-section .properties-form .form-group .form-textarea {\n resize: vertical;\n min-height: 60px;\n}\n.properties-section .properties-form .form-group.checkbox-group .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.properties-section .properties-form .form-group.checkbox-group .checkbox-label input[type=checkbox] {\n width: auto;\n margin: 0;\n}\n.properties-section .properties-form .form-group.checkbox-group small {\n display: block;\n font-size: 11px;\n color: var(--mj-text-muted);\n margin-top: 4px;\n margin-left: 24px;\n}\n.properties-section .properties-form .form-row {\n display: grid;\n grid-template-columns: 1fr 1fr;\n gap: 16px;\n}\n\n@keyframes spin {\n 0% {\n transform: rotate(0deg);\n }\n 100% {\n transform: rotate(360deg);\n }\n}\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: var(--mj-bg-surface);\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.create-subagent-modal .modal-header {\n padding: 20px 24px;\n border-bottom: 1px solid var(--mj-border-default);\n display: flex;\n justify-content: space-between;\n align-items: center;\n}\n.create-subagent-modal .modal-header h3 {\n margin: 0;\n font-size: 18px;\n font-weight: 600;\n color: var(--mj-text-primary);\n display: flex;\n align-items: center;\n gap: 10px;\n}\n.create-subagent-modal .modal-header .close-btn {\n background: none;\n border: none;\n padding: 8px;\n cursor: pointer;\n color: var(--mj-text-muted);\n border-radius: 4px;\n}\n.create-subagent-modal .modal-header .close-btn:hover {\n background: var(--mj-bg-surface-card);\n color: var(--mj-text-primary);\n}\n.create-subagent-modal .modal-body {\n padding: 24px;\n flex: 1;\n overflow-y: auto;\n}\n.create-subagent-modal .modal-body .error-message {\n background: color-mix(in srgb, var(--mj-status-error) 10%, var(--mj-bg-surface));\n border: 1px solid color-mix(in srgb, var(--mj-status-error) 20%, var(--mj-bg-surface));\n border-radius: 6px;\n padding: 12px;\n margin-bottom: 20px;\n color: var(--mj-status-error);\n font-size: 14px;\n display: flex;\n align-items: center;\n gap: 8px;\n}\n.create-subagent-modal .modal-body .error-message i {\n color: var(--mj-status-error);\n}\n.create-subagent-modal .modal-body .form-group {\n margin-bottom: 20px;\n}\n.create-subagent-modal .modal-body .form-group label {\n display: block;\n font-size: 14px;\n font-weight: 600;\n color: var(--mj-text-primary);\n margin-bottom: 8px;\n}\n.create-subagent-modal .modal-body .form-group .form-input, .create-subagent-modal .modal-body .form-group .form-textarea {\n width: 100%;\n padding: 12px;\n border: 1px solid var(--mj-border-default);\n border-radius: 6px;\n font-size: 14px;\n background: var(--mj-bg-surface);\n box-sizing: border-box;\n transition: border-color 0.2s;\n}\n.create-subagent-modal .modal-body .form-group .form-input:focus, .create-subagent-modal .modal-body .form-group .form-textarea:focus {\n outline: none;\n border-color: var(--mj-brand-primary);\n}\n.create-subagent-modal .modal-body .form-group .form-input::placeholder, .create-subagent-modal .modal-body .form-group .form-textarea::placeholder {\n color: var(--mj-text-disabled);\n}\n.create-subagent-modal .modal-body .form-group .form-textarea {\n resize: vertical;\n min-height: 80px;\n font-family: inherit;\n}\n.create-subagent-modal .modal-body .parent-info {\n background: var(--mj-bg-surface-card);\n border: 1px solid var(--mj-border-default);\n border-radius: 6px;\n padding: 12px;\n font-size: 14px;\n color: var(--mj-text-muted);\n}\n.create-subagent-modal .modal-body .parent-info strong {\n color: var(--mj-text-primary);\n}\n.create-subagent-modal .modal-footer {\n padding: 20px 24px;\n border-top: 1px solid var(--mj-border-default);\n display: flex;\n justify-content: flex-end;\n gap: 12px;\n}\n.create-subagent-modal .modal-footer .cancel-btn, .create-subagent-modal .modal-footer .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.create-subagent-modal .modal-footer .cancel-btn:disabled, .create-subagent-modal .modal-footer .create-btn:disabled {\n opacity: 0.5;\n cursor: not-allowed;\n}\n.create-subagent-modal .modal-footer .cancel-btn {\n background: var(--mj-bg-surface);\n border-color: var(--mj-border-default);\n color: var(--mj-text-muted);\n}\n.create-subagent-modal .modal-footer .cancel-btn:hover:not(:disabled) {\n background: var(--mj-bg-surface-card);\n border-color: var(--mj-border-strong);\n}\n.create-subagent-modal .modal-footer .create-btn {\n background: var(--mj-brand-primary);\n border-color: var(--mj-brand-primary);\n color: var(--mj-text-inverse);\n display: flex;\n align-items: center;\n gap: 8px;\n}\n.create-subagent-modal .modal-footer .create-btn:hover:not(:disabled) {\n background: var(--mj-brand-primary);\n border-color: var(--mj-brand-primary);\n}\n.create-subagent-modal .modal-footer .create-btn .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"] }]
788
- }], () => [{ type: i1.CreateAgentService }, { type: i2.NavigationService }], { agentId: [{
788
+ }], () => [{ type: i1.NavigationService }, { type: i2.CreateAgentService }], { agentId: [{
789
789
  type: Input
790
790
  }], close: [{
791
791
  type: Output