@memberjunction/ng-dashboards 5.4.1 → 5.6.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 (123) hide show
  1. package/dist/AI/components/agents/agent-configuration.component.js +4 -4
  2. package/dist/AI/components/agents/agent-configuration.component.js.map +1 -1
  3. package/dist/AI/components/agents/agent-editor.component.d.ts.map +1 -1
  4. package/dist/AI/components/agents/agent-editor.component.js +5 -4
  5. package/dist/AI/components/agents/agent-editor.component.js.map +1 -1
  6. package/dist/AI/components/models/model-management.component.js +3 -3
  7. package/dist/AI/components/models/model-management.component.js.map +1 -1
  8. package/dist/AI/components/prompts/model-prompt-priority-matrix.component.d.ts.map +1 -1
  9. package/dist/AI/components/prompts/model-prompt-priority-matrix.component.js +8 -7
  10. package/dist/AI/components/prompts/model-prompt-priority-matrix.component.js.map +1 -1
  11. package/dist/AI/components/prompts/prompt-management.component.js +3 -3
  12. package/dist/AI/components/prompts/prompt-management.component.js.map +1 -1
  13. package/dist/AI/components/system/system-configuration.component.js +4 -4
  14. package/dist/AI/components/system/system-configuration.component.js.map +1 -1
  15. package/dist/APIKeys/api-applications-panel.component.d.ts.map +1 -1
  16. package/dist/APIKeys/api-applications-panel.component.js +3 -2
  17. package/dist/APIKeys/api-applications-panel.component.js.map +1 -1
  18. package/dist/APIKeys/api-keys-resource.component.js +2 -2
  19. package/dist/APIKeys/api-keys-resource.component.js.map +1 -1
  20. package/dist/APIKeys/api-scopes-panel.component.d.ts.map +1 -1
  21. package/dist/APIKeys/api-scopes-panel.component.js +4 -3
  22. package/dist/APIKeys/api-scopes-panel.component.js.map +1 -1
  23. package/dist/Actions/components/actions-overview.component.js +3 -3
  24. package/dist/Actions/components/actions-overview.component.js.map +1 -1
  25. package/dist/Actions/components/categories-list-view.component.d.ts.map +1 -1
  26. package/dist/Actions/components/categories-list-view.component.js +3 -2
  27. package/dist/Actions/components/categories-list-view.component.js.map +1 -1
  28. package/dist/Actions/components/execution-monitoring.component.js +2 -2
  29. package/dist/Actions/components/execution-monitoring.component.js.map +1 -1
  30. package/dist/Actions/components/explorer/action-explorer.component.js +2 -2
  31. package/dist/Actions/components/explorer/action-explorer.component.js.map +1 -1
  32. package/dist/Actions/components/explorer/new-action-panel.component.d.ts.map +1 -1
  33. package/dist/Actions/components/explorer/new-action-panel.component.js +3 -2
  34. package/dist/Actions/components/explorer/new-action-panel.component.js.map +1 -1
  35. package/dist/Actions/components/explorer/new-category-panel.component.d.ts.map +1 -1
  36. package/dist/Actions/components/explorer/new-category-panel.component.js +3 -2
  37. package/dist/Actions/components/explorer/new-category-panel.component.js.map +1 -1
  38. package/dist/Communication/communication-templates-resource.component.js +2 -2
  39. package/dist/Communication/communication-templates-resource.component.js.map +1 -1
  40. package/dist/ComponentStudio/components/artifact-load-dialog.component.d.ts +6 -0
  41. package/dist/ComponentStudio/components/artifact-load-dialog.component.d.ts.map +1 -1
  42. package/dist/ComponentStudio/components/artifact-load-dialog.component.js +19 -6
  43. package/dist/ComponentStudio/components/artifact-load-dialog.component.js.map +1 -1
  44. package/dist/ComponentStudio/components/artifact-selection-dialog.component.d.ts +4 -0
  45. package/dist/ComponentStudio/components/artifact-selection-dialog.component.d.ts.map +1 -1
  46. package/dist/ComponentStudio/components/artifact-selection-dialog.component.js +13 -4
  47. package/dist/ComponentStudio/components/artifact-selection-dialog.component.js.map +1 -1
  48. package/dist/Credentials/components/credentials-categories-resource.component.d.ts +2 -0
  49. package/dist/Credentials/components/credentials-categories-resource.component.d.ts.map +1 -1
  50. package/dist/Credentials/components/credentials-categories-resource.component.js +13 -9
  51. package/dist/Credentials/components/credentials-categories-resource.component.js.map +1 -1
  52. package/dist/Credentials/components/credentials-list-resource.component.js +11 -11
  53. package/dist/Credentials/components/credentials-list-resource.component.js.map +1 -1
  54. package/dist/Credentials/components/credentials-overview-resource.component.js +3 -3
  55. package/dist/Credentials/components/credentials-overview-resource.component.js.map +1 -1
  56. package/dist/Credentials/components/credentials-types-resource.component.d.ts +2 -0
  57. package/dist/Credentials/components/credentials-types-resource.component.d.ts.map +1 -1
  58. package/dist/Credentials/components/credentials-types-resource.component.js +13 -9
  59. package/dist/Credentials/components/credentials-types-resource.component.js.map +1 -1
  60. package/dist/DashboardBrowser/dashboard-browser-resource.component.js +11 -11
  61. package/dist/DashboardBrowser/dashboard-browser-resource.component.js.map +1 -1
  62. package/dist/DashboardBrowser/dashboard-share-dialog.component.d.ts.map +1 -1
  63. package/dist/DashboardBrowser/dashboard-share-dialog.component.js +4 -3
  64. package/dist/DashboardBrowser/dashboard-share-dialog.component.js.map +1 -1
  65. package/dist/DataExplorer/components/view-selector/view-selector.component.d.ts.map +1 -1
  66. package/dist/DataExplorer/components/view-selector/view-selector.component.js +4 -3
  67. package/dist/DataExplorer/components/view-selector/view-selector.component.js.map +1 -1
  68. package/dist/DataExplorer/data-explorer-dashboard.component.d.ts +11 -0
  69. package/dist/DataExplorer/data-explorer-dashboard.component.d.ts.map +1 -1
  70. package/dist/DataExplorer/data-explorer-dashboard.component.js +140 -108
  71. package/dist/DataExplorer/data-explorer-dashboard.component.js.map +1 -1
  72. package/dist/DataExplorer/data-explorer-resource.component.d.ts.map +1 -1
  73. package/dist/DataExplorer/data-explorer-resource.component.js +4 -1
  74. package/dist/DataExplorer/data-explorer-resource.component.js.map +1 -1
  75. package/dist/DataExplorer/services/explorer-state.service.d.ts.map +1 -1
  76. package/dist/DataExplorer/services/explorer-state.service.js +9 -8
  77. package/dist/DataExplorer/services/explorer-state.service.js.map +1 -1
  78. package/dist/EntityAdmin/entity-admin-dashboard.component.js +2 -2
  79. package/dist/EntityAdmin/entity-admin-dashboard.component.js.map +1 -1
  80. package/dist/Home/home-application.js +2 -2
  81. package/dist/Home/home-application.js.map +1 -1
  82. package/dist/Lists/components/lists-browse-resource.component.js +3 -3
  83. package/dist/Lists/components/lists-browse-resource.component.js.map +1 -1
  84. package/dist/Lists/components/lists-categories-resource.component.d.ts +1 -0
  85. package/dist/Lists/components/lists-categories-resource.component.d.ts.map +1 -1
  86. package/dist/Lists/components/lists-categories-resource.component.js +17 -14
  87. package/dist/Lists/components/lists-categories-resource.component.js.map +1 -1
  88. package/dist/Lists/components/lists-my-lists-resource.component.js +2 -2
  89. package/dist/Lists/components/lists-my-lists-resource.component.js.map +1 -1
  90. package/dist/Lists/components/lists-operations-resource.component.d.ts +1 -0
  91. package/dist/Lists/components/lists-operations-resource.component.d.ts.map +1 -1
  92. package/dist/Lists/components/lists-operations-resource.component.js +15 -12
  93. package/dist/Lists/components/lists-operations-resource.component.js.map +1 -1
  94. package/dist/MCP/components/mcp-connection-dialog.component.d.ts.map +1 -1
  95. package/dist/MCP/components/mcp-connection-dialog.component.js +3 -2
  96. package/dist/MCP/components/mcp-connection-dialog.component.js.map +1 -1
  97. package/dist/MCP/components/mcp-test-tool-dialog.component.d.ts.map +1 -1
  98. package/dist/MCP/components/mcp-test-tool-dialog.component.js +8 -7
  99. package/dist/MCP/components/mcp-test-tool-dialog.component.js.map +1 -1
  100. package/dist/MCP/mcp-dashboard.component.js +22 -22
  101. package/dist/MCP/mcp-dashboard.component.js.map +1 -1
  102. package/dist/QueryBrowser/query-browser-resource.component.d.ts +2 -0
  103. package/dist/QueryBrowser/query-browser-resource.component.d.ts.map +1 -1
  104. package/dist/QueryBrowser/query-browser-resource.component.js +14 -10
  105. package/dist/QueryBrowser/query-browser-resource.component.js.map +1 -1
  106. package/dist/Scheduling/services/scheduling-instrumentation.service.d.ts.map +1 -1
  107. package/dist/Scheduling/services/scheduling-instrumentation.service.js +2 -1
  108. package/dist/Scheduling/services/scheduling-instrumentation.service.js.map +1 -1
  109. package/dist/Testing/components/testing-explorer.component.d.ts +1 -0
  110. package/dist/Testing/components/testing-explorer.component.d.ts.map +1 -1
  111. package/dist/Testing/components/testing-explorer.component.js +22 -18
  112. package/dist/Testing/components/testing-explorer.component.js.map +1 -1
  113. package/dist/Testing/components/testing-review.component.d.ts +1 -0
  114. package/dist/Testing/components/testing-review.component.d.ts.map +1 -1
  115. package/dist/Testing/components/testing-review.component.js +14 -10
  116. package/dist/Testing/components/testing-review.component.js.map +1 -1
  117. package/dist/VersionHistory/components/diff-resource.component.js +6 -6
  118. package/dist/VersionHistory/components/diff-resource.component.js.map +1 -1
  119. package/dist/VersionHistory/components/graph-resource.component.js +2 -2
  120. package/dist/VersionHistory/components/graph-resource.component.js.map +1 -1
  121. package/dist/VersionHistory/components/labels-resource.component.js +3 -3
  122. package/dist/VersionHistory/components/labels-resource.component.js.map +1 -1
  123. package/package.json +38 -38
@@ -11,7 +11,7 @@ import { Metadata, CompositeKey } from '@memberjunction/core';
11
11
  import { UserInfoEngine } from '@memberjunction/core-entities';
12
12
  import { AIEngineBase } from '@memberjunction/ai-engine-base';
13
13
  import { MJNotificationService } from '@memberjunction/ng-notifications';
14
- import { RegisterClass } from '@memberjunction/global';
14
+ import { RegisterClass, UUIDsEqual } from '@memberjunction/global';
15
15
  import { BaseResourceComponent } from '@memberjunction/ng-shared';
16
16
  import * as i0 from "@angular/core";
17
17
  import * as i1 from "@memberjunction/ng-ai-test-harness";
@@ -793,7 +793,7 @@ let AgentConfigurationComponent = class AgentConfigurationComponent extends Base
793
793
  }
794
794
  // Apply agent type filter
795
795
  if (this.currentFilters.agentType !== 'all') {
796
- filtered = filtered.filter(agent => agent.TypeID === this.currentFilters.agentType);
796
+ filtered = filtered.filter(agent => UUIDsEqual(agent.TypeID, this.currentFilters.agentType));
797
797
  }
798
798
  // Apply parent agent filter
799
799
  if (this.currentFilters.parentAgent !== 'all') {
@@ -801,7 +801,7 @@ let AgentConfigurationComponent = class AgentConfigurationComponent extends Base
801
801
  filtered = filtered.filter(agent => !agent.ParentID);
802
802
  }
803
803
  else {
804
- filtered = filtered.filter(agent => agent.ParentID === this.currentFilters.parentAgent);
804
+ filtered = filtered.filter(agent => UUIDsEqual(agent.ParentID, this.currentFilters.parentAgent));
805
805
  }
806
806
  }
807
807
  // Apply status filter
@@ -922,7 +922,7 @@ let AgentConfigurationComponent = class AgentConfigurationComponent extends Base
922
922
  getParentAgentName(agent) {
923
923
  if (!agent.ParentID)
924
924
  return null;
925
- const parent = this.agents.find(a => a.ID === agent.ParentID);
925
+ const parent = this.agents.find(a => UUIDsEqual(a.ID, agent.ParentID));
926
926
  return parent?.Name || 'Unknown Parent';
927
927
  }
928
928
  /**
@@ -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 } 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 } 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}\n\n/**\n * User preferences for the Agent Configuration dashboard\n */\ninterface AgentConfigurationUserPreferences {\n filterPanelVisible: boolean;\n viewMode: 'grid' | 'list';\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' = '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 };\n\n public selectedAgentForTest: MJAIAgentEntityExtended | null = null;\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 // 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 };\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 // force change detection to update the view\n this.cdr.detectChanges();\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 };\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 => 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 => 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 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'): 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 => 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 // === 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 </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 <kendo-splitter \n class=\"main-splitter\"\n orientation=\"horizontal\"\n (layoutChange)=\"onMainSplitterChange($event)\"\n >\n \n <!-- Filter Panel (Left) -->\n <kendo-splitter-pane \n [size]=\"filterPanelVisible ? '320px' : '0px'\"\n [collapsible]=\"false\"\n [resizable]=\"filterPanelVisible\"\n [scrollable]=\"false\"\n [hidden]=\"!filterPanelVisible\">\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 </kendo-splitter-pane>\n \n <!-- Agents List Panel -->\n <kendo-splitter-pane\n [resizable]=\"true\"\n [scrollable]=\"true\">\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 <!-- 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 </kendo-splitter-pane>\n </kendo-splitter>\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 } 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}\n\n/**\n * User preferences for the Agent Configuration dashboard\n */\ninterface AgentConfigurationUserPreferences {\n filterPanelVisible: boolean;\n viewMode: 'grid' | 'list';\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' = '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 };\n\n public selectedAgentForTest: MJAIAgentEntityExtended | null = null;\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 // 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 };\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 // force change detection to update the view\n this.cdr.detectChanges();\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 };\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 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'): 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 // === 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 </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 <kendo-splitter \n class=\"main-splitter\"\n orientation=\"horizontal\"\n (layoutChange)=\"onMainSplitterChange($event)\"\n >\n \n <!-- Filter Panel (Left) -->\n <kendo-splitter-pane \n [size]=\"filterPanelVisible ? '320px' : '0px'\"\n [collapsible]=\"false\"\n [resizable]=\"filterPanelVisible\"\n [scrollable]=\"false\"\n [hidden]=\"!filterPanelVisible\">\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 </kendo-splitter-pane>\n \n <!-- Agents List Panel -->\n <kendo-splitter-pane\n [resizable]=\"true\"\n [scrollable]=\"true\">\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 <!-- 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 </kendo-splitter-pane>\n </kendo-splitter>\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 +1 @@
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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"}
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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"}
@@ -1,6 +1,7 @@
1
1
  import { Component, Input, Output, EventEmitter, ViewChild } from '@angular/core';
2
2
  import { RunView, LogError, LogStatus } from '@memberjunction/core';
3
3
  import * as d3 from 'd3';
4
+ import { UUIDsEqual } from '@memberjunction/global';
4
5
  import * as i0 from "@angular/core";
5
6
  import * as i1 from "@memberjunction/ng-agents";
6
7
  import * as i2 from "@memberjunction/ng-shared";
@@ -372,7 +373,7 @@ export class AgentEditorComponent {
372
373
  MaxRows: 1000
373
374
  });
374
375
  this.allAgents = result.Results;
375
- this.currentAgent = this.allAgents.find(a => a.ID === this.agentId) || null;
376
+ this.currentAgent = this.allAgents.find(a => UUIDsEqual(a.ID, this.agentId)) || null;
376
377
  if (this.currentAgent) {
377
378
  this.buildHierarchy();
378
379
  this.loadAgentPrompts();
@@ -403,7 +404,7 @@ export class AgentEditorComponent {
403
404
  findRootAgent(agent) {
404
405
  let current = agent;
405
406
  while (current.ParentID) {
406
- const parent = this.allAgents.find(a => a.ID === current.ParentID);
407
+ const parent = this.allAgents.find(a => UUIDsEqual(a.ID, current.ParentID));
407
408
  if (!parent)
408
409
  break;
409
410
  current = parent;
@@ -412,7 +413,7 @@ export class AgentEditorComponent {
412
413
  }
413
414
  buildHierarchyTree(agent) {
414
415
  const children = this.allAgents
415
- .filter(a => a.ParentID === agent.ID)
416
+ .filter(a => UUIDsEqual(a.ParentID, agent.ID))
416
417
  .map(child => this.buildHierarchyTree(child));
417
418
  const node = {
418
419
  id: agent.ID,
@@ -796,5 +797,5 @@ export class AgentEditorComponent {
796
797
  type: ViewChild,
797
798
  args: ['hierarchyChart', { static: false }]
798
799
  }] }); })();
799
- (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassDebugInfo(AgentEditorComponent, { className: "AgentEditorComponent", filePath: "src/AI/components/agents/agent-editor.component.ts", lineNumber: 31 }); })();
800
+ (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassDebugInfo(AgentEditorComponent, { className: "AgentEditorComponent", filePath: "src/AI/components/agents/agent-editor.component.ts", lineNumber: 32 }); })();
800
801
  //# sourceMappingURL=agent-editor.component.js.map