@memberjunction/ng-dashboards 5.29.0 → 5.30.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/AI/components/agents/agent-configuration.component.d.ts.map +1 -1
- package/dist/AI/components/agents/agent-configuration.component.js +11 -9
- package/dist/AI/components/agents/agent-configuration.component.js.map +1 -1
- package/dist/AI/components/agents/agent-editor.component.d.ts.map +1 -1
- package/dist/AI/components/agents/agent-editor.component.js +21 -19
- package/dist/AI/components/agents/agent-editor.component.js.map +1 -1
- package/dist/AI/components/autotagging/autotagging-pipeline-resource.component.js +154 -154
- package/dist/AI/components/autotagging/autotagging-pipeline-resource.component.js.map +1 -1
- package/dist/AI/components/duplicates/duplicate-detection-resource.component.d.ts.map +1 -1
- package/dist/AI/components/duplicates/duplicate-detection-resource.component.js +8 -0
- package/dist/AI/components/duplicates/duplicate-detection-resource.component.js.map +1 -1
- package/dist/AI/components/vectors/vector-management-resource.component.d.ts +1 -1
- package/dist/AI/components/vectors/vector-management-resource.component.d.ts.map +1 -1
- package/dist/AI/components/vectors/vector-management-resource.component.js +2 -2
- package/dist/AI/components/vectors/vector-management-resource.component.js.map +1 -1
- package/dist/APIKeys/api-applications-panel.component.d.ts +1 -1
- package/dist/APIKeys/api-applications-panel.component.d.ts.map +1 -1
- package/dist/APIKeys/api-applications-panel.component.js +15 -2
- package/dist/APIKeys/api-applications-panel.component.js.map +1 -1
- package/dist/APIKeys/api-key-edit-panel.component.d.ts.map +1 -1
- package/dist/APIKeys/api-key-edit-panel.component.js +17 -5
- package/dist/APIKeys/api-key-edit-panel.component.js.map +1 -1
- package/dist/Credentials/components/credentials-list-resource.component.d.ts.map +1 -1
- package/dist/Credentials/components/credentials-list-resource.component.js +56 -71
- package/dist/Credentials/components/credentials-list-resource.component.js.map +1 -1
- package/dist/DashboardBrowser/dashboard-browser-resource.component.d.ts +0 -8
- package/dist/DashboardBrowser/dashboard-browser-resource.component.d.ts.map +1 -1
- package/dist/DashboardBrowser/dashboard-browser-resource.component.js +73 -74
- package/dist/DashboardBrowser/dashboard-browser-resource.component.js.map +1 -1
- package/dist/DashboardBrowser/dashboard-share-adapter.d.ts +25 -0
- package/dist/DashboardBrowser/dashboard-share-adapter.d.ts.map +1 -0
- package/dist/DashboardBrowser/dashboard-share-adapter.js +99 -0
- package/dist/DashboardBrowser/dashboard-share-adapter.js.map +1 -0
- package/dist/DashboardBrowser/dashboard-share-dialog.component.d.ts +21 -104
- package/dist/DashboardBrowser/dashboard-share-dialog.component.d.ts.map +1 -1
- package/dist/DashboardBrowser/dashboard-share-dialog.component.js +48 -530
- package/dist/DashboardBrowser/dashboard-share-dialog.component.js.map +1 -1
- package/dist/DataExplorer/data-explorer-dashboard.component.d.ts +5 -0
- package/dist/DataExplorer/data-explorer-dashboard.component.d.ts.map +1 -1
- package/dist/DataExplorer/data-explorer-dashboard.component.js +17 -0
- package/dist/DataExplorer/data-explorer-dashboard.component.js.map +1 -1
- package/dist/Integration/components/connections/connections.component.d.ts +18 -1
- package/dist/Integration/components/connections/connections.component.d.ts.map +1 -1
- package/dist/Integration/components/connections/connections.component.js +251 -199
- package/dist/Integration/components/connections/connections.component.js.map +1 -1
- package/dist/Integration/services/integration-data.service.d.ts +7 -2
- package/dist/Integration/services/integration-data.service.d.ts.map +1 -1
- package/dist/Integration/services/integration-data.service.js +10 -2
- package/dist/Integration/services/integration-data.service.js.map +1 -1
- package/dist/KnowledgeHub/components/analytics/analytics-resource.component.js +144 -144
- package/dist/KnowledgeHub/components/analytics/analytics-resource.component.js.map +1 -1
- package/dist/Lists/components/lists-operations-resource.component.d.ts.map +1 -1
- package/dist/Lists/components/lists-operations-resource.component.js +12 -14
- package/dist/Lists/components/lists-operations-resource.component.js.map +1 -1
- package/dist/MCP/mcp-dashboard.component.d.ts.map +1 -1
- package/dist/MCP/mcp-dashboard.component.js +28 -57
- package/dist/MCP/mcp-dashboard.component.js.map +1 -1
- package/dist/Permissions/audit-log-resource.component.d.ts +38 -0
- package/dist/Permissions/audit-log-resource.component.d.ts.map +1 -0
- package/dist/Permissions/audit-log-resource.component.js +380 -0
- package/dist/Permissions/audit-log-resource.component.js.map +1 -0
- package/dist/Permissions/permissions-shared.d.ts +51 -0
- package/dist/Permissions/permissions-shared.d.ts.map +1 -0
- package/dist/Permissions/permissions-shared.js +91 -0
- package/dist/Permissions/permissions-shared.js.map +1 -0
- package/dist/Permissions/resource-access-resource.component.d.ts +45 -0
- package/dist/Permissions/resource-access-resource.component.d.ts.map +1 -0
- package/dist/Permissions/resource-access-resource.component.js +342 -0
- package/dist/Permissions/resource-access-resource.component.js.map +1 -0
- package/dist/Permissions/user-access-resource.component.d.ts +39 -0
- package/dist/Permissions/user-access-resource.component.d.ts.map +1 -0
- package/dist/Permissions/user-access-resource.component.js +346 -0
- package/dist/Permissions/user-access-resource.component.js.map +1 -0
- package/dist/component-studio-dashboards.module.d.ts +1 -0
- package/dist/component-studio-dashboards.module.d.ts.map +1 -1
- package/dist/component-studio-dashboards.module.js +7 -0
- package/dist/component-studio-dashboards.module.js.map +1 -1
- package/dist/core-dashboards.module.d.ts +24 -20
- package/dist/core-dashboards.module.d.ts.map +1 -1
- package/dist/core-dashboards.module.js +26 -1
- package/dist/core-dashboards.module.js.map +1 -1
- package/dist/public-api.d.ts +4 -1
- package/dist/public-api.d.ts.map +1 -1
- package/dist/public-api.js +4 -0
- package/dist/public-api.js.map +1 -1
- package/dist/shared/pipes/highlight-search.pipe.d.ts +1 -1
- package/dist/shared/pipes/highlight-search.pipe.d.ts.map +1 -1
- package/dist/shared/pipes/highlight-search.pipe.js +14 -4
- package/dist/shared/pipes/highlight-search.pipe.js.map +1 -1
- package/package.json +51 -50
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"agent-configuration.component.d.ts","sourceRoot":"","sources":["../../../../src/AI/components/agents/agent-configuration.component.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"agent-configuration.component.d.ts","sourceRoot":"","sources":["../../../../src/AI/components/agents/agent-configuration.component.ts"],"names":[],"mappings":"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"}
|
|
@@ -1018,27 +1018,29 @@ let AgentConfigurationComponent = class AgentConfigurationComponent extends Base
|
|
|
1018
1018
|
async handleAgentCreated(result) {
|
|
1019
1019
|
try {
|
|
1020
1020
|
const agent = result.Agent;
|
|
1021
|
-
//
|
|
1022
|
-
|
|
1023
|
-
|
|
1024
|
-
|
|
1025
|
-
|
|
1026
|
-
|
|
1021
|
+
// Create agent + linked prompts + linked actions in one atomic transaction.
|
|
1022
|
+
// agent.ID is assigned client-side by NewRecord() so we can use it on child records before submit.
|
|
1023
|
+
const md = new Metadata();
|
|
1024
|
+
const tg = await md.CreateTransactionGroup();
|
|
1025
|
+
agent.TransactionGroup = tg;
|
|
1026
|
+
await agent.Save();
|
|
1027
1027
|
if (result.AgentPrompts && result.AgentPrompts.length > 0) {
|
|
1028
1028
|
for (const agentPrompt of result.AgentPrompts) {
|
|
1029
|
-
// Update the AgentID to the saved agent's ID
|
|
1030
1029
|
agentPrompt.AgentID = agent.ID;
|
|
1030
|
+
agentPrompt.TransactionGroup = tg;
|
|
1031
1031
|
await agentPrompt.Save();
|
|
1032
1032
|
}
|
|
1033
1033
|
}
|
|
1034
|
-
// Save linked actions if any
|
|
1035
1034
|
if (result.AgentActions && result.AgentActions.length > 0) {
|
|
1036
1035
|
for (const agentAction of result.AgentActions) {
|
|
1037
|
-
// Update the AgentID to the saved agent's ID
|
|
1038
1036
|
agentAction.AgentID = agent.ID;
|
|
1037
|
+
agentAction.TransactionGroup = tg;
|
|
1039
1038
|
await agentAction.Save();
|
|
1040
1039
|
}
|
|
1041
1040
|
}
|
|
1041
|
+
if (!await tg.Submit()) {
|
|
1042
|
+
throw new Error('Failed to save agent — all changes have been rolled back');
|
|
1043
|
+
}
|
|
1042
1044
|
// Refresh the agent list
|
|
1043
1045
|
await AIEngineBase.Instance.Config(true); // Force refresh
|
|
1044
1046
|
await this.loadAgents();
|
|
@@ -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';\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 -->"]}
|
|
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 // Create agent + linked prompts + linked actions in one atomic transaction.\n // agent.ID is assigned client-side by NewRecord() so we can use it on child records before submit.\n const md = new Metadata();\n const tg = await md.CreateTransactionGroup();\n\n agent.TransactionGroup = tg;\n await agent.Save();\n\n if (result.AgentPrompts && result.AgentPrompts.length > 0) {\n for (const agentPrompt of result.AgentPrompts) {\n agentPrompt.AgentID = agent.ID;\n agentPrompt.TransactionGroup = tg;\n await agentPrompt.Save();\n }\n }\n\n if (result.AgentActions && result.AgentActions.length > 0) {\n for (const agentAction of result.AgentActions) {\n agentAction.AgentID = agent.ID;\n agentAction.TransactionGroup = tg;\n await agentAction.Save();\n }\n }\n\n if (!await tg.Submit()) {\n throw new Error('Failed to save agent — all changes have been rolled back');\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 -->"]}
|
|
@@ -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,5 +1,5 @@
|
|
|
1
1
|
import { Component, Input, Output, EventEmitter, ViewChild } from '@angular/core';
|
|
2
|
-
import { RunView, LogError, LogStatus } from '@memberjunction/core';
|
|
2
|
+
import { RunView, Metadata, 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";
|
|
@@ -692,26 +692,28 @@ export class AgentEditorComponent {
|
|
|
692
692
|
this.isLoading = true;
|
|
693
693
|
this.error = null;
|
|
694
694
|
const agent = result.Agent;
|
|
695
|
-
//
|
|
696
|
-
|
|
697
|
-
|
|
698
|
-
|
|
699
|
-
|
|
700
|
-
|
|
701
|
-
|
|
702
|
-
|
|
703
|
-
|
|
704
|
-
|
|
705
|
-
|
|
695
|
+
// Create the agent and all of its linked prompts/actions in one atomic transaction.
|
|
696
|
+
// agent.ID is assigned client-side by NewRecord() so we can use it on child records before submit.
|
|
697
|
+
const md = new Metadata();
|
|
698
|
+
const tg = await md.CreateTransactionGroup();
|
|
699
|
+
agent.TransactionGroup = tg;
|
|
700
|
+
await agent.Save();
|
|
701
|
+
if (result.AgentPrompts && result.AgentPrompts.length > 0) {
|
|
702
|
+
for (const agentPrompt of result.AgentPrompts) {
|
|
703
|
+
agentPrompt.AgentID = agent.ID;
|
|
704
|
+
agentPrompt.TransactionGroup = tg;
|
|
705
|
+
await agentPrompt.Save();
|
|
706
706
|
}
|
|
707
|
-
|
|
708
|
-
|
|
709
|
-
|
|
710
|
-
|
|
711
|
-
|
|
712
|
-
|
|
713
|
-
}
|
|
707
|
+
}
|
|
708
|
+
if (result.AgentActions && result.AgentActions.length > 0) {
|
|
709
|
+
for (const agentAction of result.AgentActions) {
|
|
710
|
+
agentAction.AgentID = agent.ID;
|
|
711
|
+
agentAction.TransactionGroup = tg;
|
|
712
|
+
await agentAction.Save();
|
|
714
713
|
}
|
|
714
|
+
}
|
|
715
|
+
if (await tg.Submit()) {
|
|
716
|
+
LogStatus('Sub-agent created successfully');
|
|
715
717
|
// Reload agent data to show the new hierarchy
|
|
716
718
|
await this.loadAgentData();
|
|
717
719
|
// Navigate to the newly created agent record
|