@memberjunction/ng-core-entity-forms 5.33.0 → 5.34.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.
- package/dist/lib/custom/AIAgents/ai-agent-form.component.d.ts +30 -0
- package/dist/lib/custom/AIAgents/ai-agent-form.component.d.ts.map +1 -1
- package/dist/lib/custom/AIAgents/ai-agent-form.component.js +944 -645
- package/dist/lib/custom/AIAgents/ai-agent-form.component.js.map +1 -1
- package/dist/lib/custom/SearchScopes/searchscope-form.component.d.ts +137 -0
- package/dist/lib/custom/SearchScopes/searchscope-form.component.d.ts.map +1 -0
- package/dist/lib/custom/SearchScopes/searchscope-form.component.js +888 -0
- package/dist/lib/custom/SearchScopes/searchscope-form.component.js.map +1 -0
- package/dist/lib/custom/SearchScopes/searchscopeprovider-form.component.d.ts +66 -0
- package/dist/lib/custom/SearchScopes/searchscopeprovider-form.component.d.ts.map +1 -0
- package/dist/lib/custom/SearchScopes/searchscopeprovider-form.component.js +253 -0
- package/dist/lib/custom/SearchScopes/searchscopeprovider-form.component.js.map +1 -0
- package/dist/lib/custom/Tests/test-rubric-form.component.js +2 -2
- package/dist/lib/custom/Tests/test-rubric-form.component.js.map +1 -1
- package/dist/lib/custom/Tests/test-suite-form.component.js +2 -2
- package/dist/lib/custom/Tests/test-suite-form.component.js.map +1 -1
- package/dist/lib/custom/custom-forms.module.d.ts +28 -25
- package/dist/lib/custom/custom-forms.module.d.ts.map +1 -1
- package/dist/lib/custom/custom-forms.module.js +18 -4
- package/dist/lib/custom/custom-forms.module.js.map +1 -1
- package/dist/lib/custom/shared/entity-selector-dialog.component.js +2 -2
- package/dist/lib/custom/shared/entity-selector-dialog.component.js.map +1 -1
- package/dist/lib/generated/Entities/MJAIAgent/mjaiagent.form.component.d.ts.map +1 -1
- package/dist/lib/generated/Entities/MJAIAgent/mjaiagent.form.component.js +111 -79
- package/dist/lib/generated/Entities/MJAIAgent/mjaiagent.form.component.js.map +1 -1
- package/dist/lib/generated/Entities/MJAIAgentSearchScope/mjaiagentsearchscope.form.component.d.ts +10 -0
- package/dist/lib/generated/Entities/MJAIAgentSearchScope/mjaiagentsearchscope.form.component.d.ts.map +1 -0
- package/dist/lib/generated/Entities/MJAIAgentSearchScope/mjaiagentsearchscope.form.component.js +93 -0
- package/dist/lib/generated/Entities/MJAIAgentSearchScope/mjaiagentsearchscope.form.component.js.map +1 -0
- package/dist/lib/generated/Entities/MJAIResultCache/mjairesultcache.form.component.js +2 -2
- package/dist/lib/generated/Entities/MJAIResultCache/mjairesultcache.form.component.js.map +1 -1
- package/dist/lib/generated/Entities/MJEntity/mjentity.form.component.d.ts.map +1 -1
- package/dist/lib/generated/Entities/MJEntity/mjentity.form.component.js +89 -71
- package/dist/lib/generated/Entities/MJEntity/mjentity.form.component.js.map +1 -1
- package/dist/lib/generated/Entities/MJEntityField/mjentityfield.form.component.js +23 -21
- package/dist/lib/generated/Entities/MJEntityField/mjentityfield.form.component.js.map +1 -1
- package/dist/lib/generated/Entities/MJFileStorageAccount/mjfilestorageaccount.form.component.d.ts.map +1 -1
- package/dist/lib/generated/Entities/MJFileStorageAccount/mjfilestorageaccount.form.component.js +33 -15
- package/dist/lib/generated/Entities/MJFileStorageAccount/mjfilestorageaccount.form.component.js.map +1 -1
- package/dist/lib/generated/Entities/MJRole/mjrole.form.component.d.ts.map +1 -1
- package/dist/lib/generated/Entities/MJRole/mjrole.form.component.js +31 -13
- package/dist/lib/generated/Entities/MJRole/mjrole.form.component.js.map +1 -1
- package/dist/lib/generated/Entities/MJSearchExecutionLog/mjsearchexecutionlog.form.component.d.ts +10 -0
- package/dist/lib/generated/Entities/MJSearchExecutionLog/mjsearchexecutionlog.form.component.d.ts.map +1 -0
- package/dist/lib/generated/Entities/MJSearchExecutionLog/mjsearchexecutionlog.form.component.js +91 -0
- package/dist/lib/generated/Entities/MJSearchExecutionLog/mjsearchexecutionlog.form.component.js.map +1 -0
- package/dist/lib/generated/Entities/MJSearchProvider/mjsearchprovider.form.component.d.ts.map +1 -1
- package/dist/lib/generated/Entities/MJSearchProvider/mjsearchprovider.form.component.js +23 -5
- package/dist/lib/generated/Entities/MJSearchProvider/mjsearchprovider.form.component.js.map +1 -1
- package/dist/lib/generated/Entities/MJSearchScope/mjsearchscope.form.component.d.ts +10 -0
- package/dist/lib/generated/Entities/MJSearchScope/mjsearchscope.form.component.d.ts.map +1 -0
- package/dist/lib/generated/Entities/MJSearchScope/mjsearchscope.form.component.js +243 -0
- package/dist/lib/generated/Entities/MJSearchScope/mjsearchscope.form.component.js.map +1 -0
- package/dist/lib/generated/Entities/MJSearchScopeEntity/mjsearchscopeentity.form.component.d.ts +10 -0
- package/dist/lib/generated/Entities/MJSearchScopeEntity/mjsearchscopeentity.form.component.d.ts.map +1 -0
- package/dist/lib/generated/Entities/MJSearchScopeEntity/mjsearchscopeentity.form.component.js +71 -0
- package/dist/lib/generated/Entities/MJSearchScopeEntity/mjsearchscopeentity.form.component.js.map +1 -0
- package/dist/lib/generated/Entities/MJSearchScopeExternalIndex/mjsearchscopeexternalindex.form.component.d.ts +10 -0
- package/dist/lib/generated/Entities/MJSearchScopeExternalIndex/mjsearchscopeexternalindex.form.component.d.ts.map +1 -0
- package/dist/lib/generated/Entities/MJSearchScopeExternalIndex/mjsearchscopeexternalindex.form.component.js +75 -0
- package/dist/lib/generated/Entities/MJSearchScopeExternalIndex/mjsearchscopeexternalindex.form.component.js.map +1 -0
- package/dist/lib/generated/Entities/MJSearchScopePermission/mjsearchscopepermission.form.component.d.ts +10 -0
- package/dist/lib/generated/Entities/MJSearchScopePermission/mjsearchscopepermission.form.component.d.ts.map +1 -0
- package/dist/lib/generated/Entities/MJSearchScopePermission/mjsearchscopepermission.form.component.js +65 -0
- package/dist/lib/generated/Entities/MJSearchScopePermission/mjsearchscopepermission.form.component.js.map +1 -0
- package/dist/lib/generated/Entities/MJSearchScopeProvider/mjsearchscopeprovider.form.component.d.ts +10 -0
- package/dist/lib/generated/Entities/MJSearchScopeProvider/mjsearchscopeprovider.form.component.d.ts.map +1 -0
- package/dist/lib/generated/Entities/MJSearchScopeProvider/mjsearchscopeprovider.form.component.js +75 -0
- package/dist/lib/generated/Entities/MJSearchScopeProvider/mjsearchscopeprovider.form.component.js.map +1 -0
- package/dist/lib/generated/Entities/MJSearchScopeStorageAccount/mjsearchscopestorageaccount.form.component.d.ts +10 -0
- package/dist/lib/generated/Entities/MJSearchScopeStorageAccount/mjsearchscopestorageaccount.form.component.d.ts.map +1 -0
- package/dist/lib/generated/Entities/MJSearchScopeStorageAccount/mjsearchscopestorageaccount.form.component.js +63 -0
- package/dist/lib/generated/Entities/MJSearchScopeStorageAccount/mjsearchscopestorageaccount.form.component.js.map +1 -0
- package/dist/lib/generated/Entities/MJSearchScopeTestQuery/mjsearchscopetestquery.form.component.d.ts +10 -0
- package/dist/lib/generated/Entities/MJSearchScopeTestQuery/mjsearchscopetestquery.form.component.d.ts.map +1 -0
- package/dist/lib/generated/Entities/MJSearchScopeTestQuery/mjsearchscopetestquery.form.component.js +75 -0
- package/dist/lib/generated/Entities/MJSearchScopeTestQuery/mjsearchscopetestquery.form.component.js.map +1 -0
- package/dist/lib/generated/Entities/MJTag/mjtag.form.component.js +9 -9
- package/dist/lib/generated/Entities/MJTag/mjtag.form.component.js.map +1 -1
- package/dist/lib/generated/Entities/MJTemplate/mjtemplate.form.component.d.ts.map +1 -1
- package/dist/lib/generated/Entities/MJTemplate/mjtemplate.form.component.js +46 -10
- package/dist/lib/generated/Entities/MJTemplate/mjtemplate.form.component.js.map +1 -1
- package/dist/lib/generated/Entities/MJUser/mjuser.form.component.d.ts.map +1 -1
- package/dist/lib/generated/Entities/MJUser/mjuser.form.component.js +223 -169
- package/dist/lib/generated/Entities/MJUser/mjuser.form.component.js.map +1 -1
- package/dist/lib/generated/Entities/MJVectorIndex/mjvectorindex.form.component.d.ts.map +1 -1
- package/dist/lib/generated/Entities/MJVectorIndex/mjvectorindex.form.component.js +32 -14
- package/dist/lib/generated/Entities/MJVectorIndex/mjvectorindex.form.component.js.map +1 -1
- package/dist/lib/generated/generated-forms.module.d.ts +312 -298
- package/dist/lib/generated/generated-forms.module.d.ts.map +1 -1
- package/dist/lib/generated/generated-forms.module.js +168 -111
- package/dist/lib/generated/generated-forms.module.js.map +1 -1
- package/package.json +36 -35
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ai-agent-form.component.js","sourceRoot":"","sources":["../../../../src/lib/custom/AIAgents/ai-agent-form.component.ts","../../../../src/lib/custom/AIAgents/ai-agent-form.component.html"],"names":[],"mappings":"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","sourcesContent":["import { Component, ViewContainerRef, ViewChild, AfterViewInit, OnDestroy, inject } from '@angular/core';\nimport { MJActionEntity, MJAIAgentActionEntity, MJAIAgentLearningCycleEntity, MJAIAgentNoteEntity, MJAIAgentPromptEntity, MJAIAgentTypeEntity, MJAIAgentRelationshipEntity } from '@memberjunction/core-entities';\nimport { MJAIAgentRunEntityExtended, MJAIPromptEntityExtended, MJAIAgentEntityExtended, } from \"@memberjunction/ai-core-plus\";\nimport { RegisterClass, MJGlobal , UUIDsEqual } from '@memberjunction/global';\nimport { BaseFormComponent, BaseFormSectionComponent, CUSTOM_LAYOUT_TOOLBAR_CONFIG } from '@memberjunction/ng-base-forms';\nimport { CompositeKey, KeyValuePair, Metadata, RunView } from '@memberjunction/core';\nimport { TreeBranchConfig } from '@memberjunction/ng-trees';\nimport { UserInfoEngine } from '@memberjunction/core-entities';\nimport { MJNotificationService } from '@memberjunction/ng-notifications';\nimport { MJAIAgentFormComponent } from '../../generated/Entities/MJAIAgent/mjaiagent.form.component';\nimport { MJDialogService } from '@memberjunction/ng-ui-components';\nimport { SharedService } from '@memberjunction/ng-shared';\nimport { AIAgentManagementService } from './ai-agent-management.service';\nimport { AITestHarnessDialogService } from '@memberjunction/ng-ai-test-harness';\nimport { firstValueFrom, Subject } from 'rxjs';\nimport { takeUntil } from 'rxjs/operators';\nimport { PromptSelectorResult } from './prompt-selector-dialog.component';\nimport { AIEngineBase } from '@memberjunction/ai-engine-base';\nimport { ActionEngineBase } from '@memberjunction/actions-base';\nimport { PromptSelectorDialogComponent } from './prompt-selector-dialog.component';\nimport { CreateAgentService, CreateAgentResult } from '@memberjunction/ng-agents';\n// AgentPermissionsDialogComponent is now from @memberjunction/ng-agents (shown via ShowPermissionsDialog flag)\n\n/**\n * Type for sub-agent filter options\n */\nexport type SubAgentFilterType = 'all' | 'child' | 'related';\n\n/**\n * Interface for unified sub-agent display\n */\nexport interface UnifiedSubAgent {\n agent: MJAIAgentEntityExtended;\n type: 'child' | 'related';\n relationship?: MJAIAgentRelationshipEntity; // Only for related sub-agents\n}\n\n/**\n * Enhanced AI Agent form component that extends the auto-generated base form\n * with comprehensive agent management capabilities including test harness integration,\n * related entity management, and execution history tracking.\n * \n * ## Key Features:\n * - **Integrated Test Harness**: Built-in access to agent testing capabilities\n * - **Related Entity Management**: Display and manage sub-agents, prompts, and actions\n * - **Execution History**: View recent agent runs with status and timing information\n * - **Rich UI Components**: Enhanced cards, badges, and status indicators\n * - **Navigation Support**: Links to related entities and management functions\n * \n * ## Form Sections:\n * - **Agent Details**: Basic agent configuration and settings\n * - **Sub-Agents**: Hierarchical agent relationships\n * - **Prompts**: Associated prompts with priority ordering\n * - **Actions**: Available actions and configurations\n * - **Execution History**: Recent runs with detailed status information\n * \n * ## Usage:\n * This component is automatically loaded when editing AI Agent entities through\n * the MemberJunction form system. It extends the base generated form with\n * additional functionality while maintaining full compatibility.\n * \n * @example\n * ```html\n * <!-- Automatically used by form system -->\n * <mj-ai-agent-form [recordId]=\"agentId\"></mj-ai-agent-form>\n * ```\n */\n@RegisterClass(BaseFormComponent, 'MJ: AI Agents')\n@Component({\n standalone: false,\n selector: 'mj-ai-agent-form',\n templateUrl: './ai-agent-form.component.html',\n styleUrls: ['./ai-agent-form.component.css']\n})\nexport class MJAIAgentFormComponentExtended extends MJAIAgentFormComponent implements OnDestroy {\n /** The AI Agent entity being edited */\n public record!: MJAIAgentEntityExtended;\n\n /** Toolbar config — hide right-hand section controls since this form has a custom layout */\n public readonly toolbarConfig = CUSTOM_LAYOUT_TOOLBAR_CONFIG;\n\n /** Custom-layout AI Agent form looks best full-width on first open. */\n public override getDefaultFormWidthMode(): 'centered' | 'full-width' { return 'full-width'; }\n \n /** Subject for managing component lifecycle and cleaning up subscriptions */\n private destroy$ = new Subject<void>();\n \n /** Track active timeouts for cleanup */\n private activeTimeouts: number[] = [];\n \n /** Helper method to create tracked setTimeout calls */\n private setTrackedTimeout(callback: () => void, delay: number): number {\n const timeoutId = setTimeout(() => {\n // Remove from tracking array when timeout executes\n this.removeTimeoutFromTracking(timeoutId);\n callback();\n }, delay) as any as number;\n \n this.activeTimeouts.push(timeoutId);\n return timeoutId;\n }\n \n /** Remove timeout from tracking array */\n private removeTimeoutFromTracking(timeoutId: number): void {\n const index = this.activeTimeouts.indexOf(timeoutId);\n if (index > -1) {\n this.activeTimeouts.splice(index, 1);\n }\n }\n \n /** ViewChild for dynamic custom section container */\n private _customSectionContainer!: ViewContainerRef;\n @ViewChild('customSectionContainer', { read: ViewContainerRef }) \n set customSectionContainer(container: ViewContainerRef) {\n this._customSectionContainer = container;\n // When the container becomes available, load the custom section if needed\n if (container && this.agentType?.UIFormSectionKey && !this.customSectionLoaded) {\n this.setTrackedTimeout(() => this.loadCustomFormSection(), 0);\n }\n }\n get customSectionContainer(): ViewContainerRef {\n return this._customSectionContainer;\n }\n \n /** The agent type entity for this agent */\n public agentType: MJAIAgentTypeEntity | null = null;\n \n /** Reference to the dynamically loaded custom section component */\n private customSectionComponent: BaseFormSectionComponent | null = null;\n \n /** Track if custom section has been loaded to avoid reloading */\n private customSectionLoaded = false;\n \n /** Track the component reference to check if it still exists */\n private customSectionComponentRef: any = null;\n \n /** Update custom section when EditMode changes */\n ngDoCheck() {\n if (this.customSectionComponent && this.customSectionComponent.EditMode !== this.EditMode) {\n this.customSectionComponent.EditMode = this.EditMode;\n }\n }\n \n \n \n // === Related Entity Counts ===\n /** Number of sub-agents under this agent (for backward compatibility) */\n public get subAgentCount(): number {\n return this.allSubAgents.length;\n }\n\n /** Number of child sub-agents (ParentID-based) */\n public get childSubAgentCount(): number {\n return this.allSubAgents.filter(s => s.type === 'child').length;\n }\n\n /** Number of related sub-agents (Relationship-based) */\n public get relatedSubAgentCount(): number {\n return this.allSubAgents.filter(s => s.type === 'related').length;\n }\n\n /** Total number of sub-agents across both types */\n public get totalSubAgentCount(): number {\n return this.allSubAgents.length;\n }\n\n /** Number of prompts associated with this agent */\n public get promptCount(): number {\n return this.agentPrompts.length;\n }\n\n /** Number of actions configured for this agent */\n public get actionCount(): number {\n return this.agentActions.length;\n }\n\n /** Number of learning cycles for this agent */\n public get learningCycleCount(): number {\n return this.learningCycles.length;\n }\n\n /** Number of notes associated with this agent */\n public get noteCount(): number {\n return this.agentNotes.length;\n }\n\n /** Number of execution history records */\n public get executionHistoryCount(): number {\n return this.recentExecutions.length;\n }\n\n // === Related Entity Data for Display ===\n /** Array of sub-agent entities for card display (DEPRECATED - use allSubAgents) */\n public subAgents: MJAIAgentEntityExtended[] = [];\n\n /** Unified sub-agent data (both child and related) */\n private allSubAgents: UnifiedSubAgent[] = [];\n\n /** Current filter for sub-agents display */\n public subAgentFilter: SubAgentFilterType = 'all';\n\n /** Filtered sub-agents based on current filter */\n public get filteredSubAgents(): UnifiedSubAgent[] {\n switch (this.subAgentFilter) {\n case 'child':\n return this.allSubAgents.filter(s => s.type === 'child');\n case 'related':\n return this.allSubAgents.filter(s => s.type === 'related');\n default:\n return this.allSubAgents;\n }\n }\n \n /** Array of agent prompt entities for card display */\n public agentPrompts: MJAIPromptEntityExtended[] = [];\n \n /** Array of agent action entities for card display */\n public agentActions: MJActionEntity[] = [];\n \n \n /** Array of learning cycle entities for display */\n public learningCycles: MJAIAgentLearningCycleEntity[] = [];\n \n /** Array of agent note entities for display */\n public agentNotes: MJAIAgentNoteEntity[] = [];\n \n /** Array of recent execution records for history display */\n public recentExecutions: MJAIAgentRunEntityExtended[] = [];\n public totalExecutionHistoryCount: number = 0;\n /** Track which execution cards are expanded */\n public expandedExecutions: { [key: string]: boolean } = {};\n\n /** Search functionality for execution history */\n public executionSearchText: string = '';\n public filteredExecutions: MJAIAgentRunEntityExtended[] = [];\n\n /** Pagination state for execution history */\n public executionHistoryPageSize: number = 20;\n public executionHistoryCurrentPage: number = 1;\n public isLoadingPage: boolean = false;\n /** Cache all loaded execution records for pagination */\n private allLoadedExecutions: MJAIAgentRunEntityExtended[] = [];\n \n // === Loading States ===\n /** Main loading state for initial data load */\n public isLoadingData = true;\n \n /** Individual loading states for each section, start off true until loading complete */\n public loadingStates = {\n executionHistory: true,\n subAgents: true,\n prompts: true,\n actions: true,\n learningCycles: true,\n notes: true,\n customSection: true\n };\n\n // === User Preferences ===\n private static readonly PREFS_KEY = 'ai-agent-form/preferences';\n private preferencesLoaded = false;\n\n /** Whether the form header is collapsed to a single compact line */\n public HeaderCollapsed = false;\n\n /** Tracked expanded/collapsed state for each panelbar section */\n public SectionStates: Record<string, boolean> = {};\n\n // === Dropdown Data ===\n /** Model selection mode options for the dropdown */\n public modelSelectionModes = [\n { text: 'Agent Type', value: 'Agent Type' },\n { text: 'Agent', value: 'Agent' }\n ];\n\n /** Agent status options for the dropdown */\n public statusOptions = [\n { text: 'Active', value: 'Active' },\n { text: 'Pending', value: 'Pending' },\n { text: 'Disabled', value: 'Disabled' }\n ];\n\n /** Agent types loaded from the database */\n public agentTypes: any[] = [];\n\n /** TreeDropdown configuration for the agent category field */\n public CategoryBranchConfig: TreeBranchConfig = {\n EntityName: 'MJ: AI Agent Categories',\n DisplayField: 'Name',\n ParentIDField: 'ParentID',\n DefaultIcon: 'fa-solid fa-folder',\n OrderBy: 'Name ASC',\n DescriptionField: 'Description'\n };\n\n /** Current category selection for the TreeDropdown */\n public SelectedCategoryKey: CompositeKey | null = null;\n\n /** Handle category selection change from the TreeDropdown */\n public OnCategoryChange(value: CompositeKey | CompositeKey[] | null): void {\n if (value && !Array.isArray(value)) {\n const idValue = value.KeyValuePairs?.find((kv: KeyValuePair) => kv.FieldName === 'ID')?.Value;\n this.record.CategoryID = idValue ?? null;\n } else {\n this.record.CategoryID = null;\n }\n this.SelectedCategoryKey = Array.isArray(value) ? null : value;\n }\n\n /** Currently selected context compression prompt */\n public selectedContextCompressionPrompt: any = null;\n\n /**\n * Loads agent types from the database for the dropdown\n * @private\n */\n private async loadAgentTypes(): Promise<void> {\n this.agentTypes = AIEngineBase.Instance.AgentTypes\n }\n\n /**\n * Loads the context compression prompt details for display\n * @private\n */\n private async loadContextCompressionPrompt(): Promise<void> {\n if (!this.record?.ContextCompressionPromptID) {\n this.selectedContextCompressionPrompt = null;\n return;\n }\n\n this.selectedContextCompressionPrompt = AIEngineBase.Instance.Prompts.find(p => UUIDsEqual(p.ID, this.record.ContextCompressionPromptID));\n if (!this.selectedContextCompressionPrompt) {\n console.warn('Context compression prompt not found:', this.record.ContextCompressionPromptID);\n }\n }\n\n /**\n * Opens the prompt selector dialog for context compression prompt\n */\n public async openContextCompressionPromptSelector(): Promise<void> {\n try {\n const dialogRef = this.dialogService.open({\n title: 'Select Context Compression Prompt',\n content: PromptSelectorDialogComponent,\n width: 800,\n height: 600\n });\n\n const promptSelector = dialogRef.Content!.instance as unknown as PromptSelectorDialogComponent;\n\n // Configure the prompt selector for single selection\n promptSelector.config = {\n title: 'Select Context Compression Prompt',\n multiSelect: false,\n selectedPromptIds: this.record.ContextCompressionPromptID ? [this.record.ContextCompressionPromptID] : [],\n showCreateNew: false\n };\n\n // Subscribe to the result\n promptSelector.result.subscribe({\n next: (result: PromptSelectorResult | null) => {\n if (result && result.selectedPrompts.length > 0) {\n const selectedPrompt = result.selectedPrompts[0];\n this.record.ContextCompressionPromptID = selectedPrompt.ID;\n this.selectedContextCompressionPrompt = selectedPrompt;\n this.cdr.detectChanges();\n }\n },\n error: (error: any) => {\n console.error('Error in prompt selector dialog:', error);\n }\n });\n } catch (error) {\n console.error('Error opening context compression prompt selector:', error);\n MJNotificationService.Instance.CreateSimpleNotification(\n 'Error opening prompt selector. Please try again.',\n 'error',\n 3000\n );\n }\n }\n\n /**\n * Clears the selected context compression prompt\n */\n public clearContextCompressionPrompt(): void {\n this.record.ContextCompressionPromptID = null;\n this.selectedContextCompressionPrompt = null;\n this.cdr.detectChanges();\n }\n\n // === Permission Checks for Related Entities ===\n /** Cache for permission checks to avoid repeated calculations */\n private _permissionCache = new Map<string, boolean>();\n\n // Main AI Agent permissions inherited from BaseFormComponent:\n // - UserCanEdit (Update permission)\n // - UserCanRead (Read permission) \n // - UserCanCreate (Create permission)\n // - UserCanDelete (Delete permission)\n\n /** Check if user can create AI Agent Actions */\n public get UserCanCreateActions(): boolean {\n return this.checkEntityPermission('MJ: AI Agent Actions', 'Create');\n }\n\n /** Check if user can update AI Agent Actions */\n public get UserCanUpdateActions(): boolean {\n return this.checkEntityPermission('MJ: AI Agent Actions', 'Update');\n }\n\n /** Check if user can delete AI Agent Actions */\n public get UserCanDeleteActions(): boolean {\n return this.checkEntityPermission('MJ: AI Agent Actions', 'Delete');\n }\n\n /** Check if user can create AI Agent Prompts */\n public get UserCanCreatePrompts(): boolean {\n return this.checkEntityPermission('MJ: AI Agent Prompts', 'Create');\n }\n\n /** Check if user can update AI Agent Prompts */\n public get UserCanUpdatePrompts(): boolean {\n return this.checkEntityPermission('MJ: AI Agent Prompts', 'Update');\n }\n\n /** Check if user can delete AI Agent Prompts */\n public get UserCanDeletePrompts(): boolean {\n return this.checkEntityPermission('MJ: AI Agent Prompts', 'Delete');\n }\n\n /** Check if user can create AI Agents (for sub-agents) */\n public get UserCanCreateSubAgents(): boolean {\n return this.checkEntityPermission('MJ: AI Agents', 'Create');\n }\n\n /** Check if user can update AI Agents (for sub-agents) */\n public get UserCanUpdateSubAgents(): boolean {\n return this.checkEntityPermission('MJ: AI Agents', 'Update');\n }\n\n /** Check if user can delete AI Agents (for sub-agents) */\n public get UserCanDeleteSubAgents(): boolean {\n return this.checkEntityPermission('MJ: AI Agents', 'Delete');\n }\n\n /** Check if user can create AI Agent Notes */\n public get UserCanCreateNotes(): boolean {\n return this.checkEntityPermission('MJ: AI Agent Notes', 'Create');\n }\n\n /** Check if user can update AI Agent Notes */\n public get UserCanUpdateNotes(): boolean {\n return this.checkEntityPermission('MJ: AI Agent Notes', 'Update');\n }\n\n /** Check if user can delete AI Agent Notes */\n public get UserCanDeleteNotes(): boolean {\n return this.checkEntityPermission('MJ: AI Agent Notes', 'Delete');\n }\n\n /** Check if user can view AI Agent Learning Cycles */\n public get UserCanViewLearningCycles(): boolean {\n return this.checkEntityPermission('MJ: AI Agent Learning Cycles', 'Read');\n }\n\n /** Check if user can view AI Agent Runs (execution history) */\n public get UserCanViewExecutionHistory(): boolean {\n return this.checkEntityPermission('MJ: AI Agent Runs', 'Read');\n }\n\n /** Check if user can create AI Prompts (needed for creating new prompts) */\n public get UserCanCreateAIPrompts(): boolean {\n return this.checkEntityPermission('MJ: AI Prompts', 'Create');\n }\n\n /** Check if user can create both AI Prompts and AI Agent Prompts (for createNewPrompt functionality) */\n public get UserCanCreateNewPrompts(): boolean {\n return this.UserCanCreateAIPrompts && this.UserCanCreatePrompts;\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 md = this.ProviderToUse;\n const entityInfo = md.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(md.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 // === Transaction-based editing support ===\n /** Now using BaseFormComponent's PendingRecords system exclusively */\n \n /** Flag to indicate if there are unsaved changes */\n public hasUnsavedChanges = false;\n \n // Emergency circuit breaker to prevent infinite loops\n private _changeDetectionCount = 0;\n private static readonly MAX_CHANGE_DETECTIONS = 50;\n\n // === Original State for Cancel/Revert ===\n /** Snapshots of original data for reverting UI changes */\n private originalSnapshots: {\n agentPrompts: MJAIPromptEntityExtended[];\n agentActions: MJActionEntity[];\n subAgents: MJAIAgentEntityExtended[];\n promptCount: number;\n actionCount: number;\n subAgentCount: number;\n learningCycleCount: number;\n noteCount: number;\n executionHistoryCount: number;\n } | null = null;\n\n // Dependency injection using inject() function\n private sharedService = inject(SharedService);\n private dialogService = inject(MJDialogService);\n private viewContainerRef = inject(ViewContainerRef);\n private agentManagementService = inject(AIAgentManagementService);\n private testHarnessService = inject(AITestHarnessDialogService);\n private createAgentService = inject(CreateAgentService);\n \n /**\n * After view initialization, load any custom form section if defined\n */\n async ngOnInit() {\n await super.ngOnInit();\n\n // Restore user preferences (header state, section expand/collapse)\n this.loadUserPreferences();\n\n // Load agent types for dropdown (needed for both new and existing records)\n await AIEngineBase.Instance.Config(false); // in UI context user and provider default to global\n await ActionEngineBase.Instance.Config(false);\n\n await this.loadAgentTypes();\n\n // Initialize category selection from the record's CategoryID\n const categoryId = this.record?.CategoryID;\n if (categoryId) {\n this.SelectedCategoryKey = new CompositeKey([{ FieldName: 'ID', Value: categoryId }]);\n }\n\n // Load context compression prompt if one is set\n if (this.record?.ContextCompressionPromptID) {\n await this.loadContextCompressionPrompt();\n }\n \n if (this.record?.ID) {\n await this.loadRelatedCounts(false); // no need to force refresh on initial load\n await this.loadCurrentAgentType();\n \n // Schedule change detection - safer than manual detectChanges()\n this.cdr.markForCheck();\n \n // Defer custom section loading to next tick after DOM updates\n this.setTrackedTimeout(() => {\n this.loadCustomFormSection();\n }, 0);\n \n // Start background timer for running time updates\n this.startRunningTimeUpdater();\n }\n }\n\n /**\n * Loads counts and preview data for all related entities including sub-agents,\n * prompts, actions, learning cycles, notes, and execution history. \n * This data populates the various expander panels in the enhanced form interface.\n * @private\n */\n private async loadRelatedCounts(forceRefresh: boolean): Promise<void> {\n if (!this.record?.ID) return;\n\n // Reset pagination state on refresh\n if (forceRefresh) {\n this.executionHistoryCurrentPage = 1;\n this.isLoadingPage = false;\n this.allLoadedExecutions = [];\n // Don't clear recentExecutions - keep existing data visible while loading\n }\n\n // Set loading state\n this.isLoadingData = true;\n this.loadingStates = {\n executionHistory: true,\n subAgents: true,\n prompts: true,\n actions: true,\n learningCycles: true,\n notes: true,\n customSection: true\n };\n this.cdr.detectChanges(); // update UI\n\n if (forceRefresh) {\n await AIEngineBase.Instance.Config(true); // force refresh\n }\n\n try {\n // Clear unified sub-agents array\n this.allSubAgents = [];\n\n // Load child sub-agents (ParentID-based)\n const childAgents = AIEngineBase.Instance.Agents.filter(a => UUIDsEqual(a.ParentID, this.record.ID));\n for (const agent of childAgents) {\n this.allSubAgents.push({\n agent,\n type: 'child'\n });\n }\n\n // Also populate the deprecated subAgents array for backward compatibility\n this.subAgents = [...childAgents];\n\n // Load related sub-agents (Relationship-based)\n const rv = RunView.FromMetadataProvider(this.ProviderToUse);\n const relationshipsResult = await rv.RunView<MJAIAgentRelationshipEntity>({\n EntityName: 'MJ: AI Agent Relationships',\n ExtraFilter: `AgentID='${this.record.ID}' AND Status='Active'`,\n ResultType: 'entity_object'\n });\n\n if (relationshipsResult.Success && relationshipsResult.Results) {\n for (const relationship of relationshipsResult.Results) {\n const agent = AIEngineBase.Instance.Agents.find(\n a => UUIDsEqual(a.ID, relationship.SubAgentID)\n );\n\n if (agent) {\n this.allSubAgents.push({\n agent,\n type: 'related',\n relationship\n });\n }\n }\n }\n\n // Sort: child agents first, then by name\n this.allSubAgents.sort((a, b) => {\n if (a.type !== b.type) {\n return a.type === 'child' ? -1 : 1;\n }\n return (a.agent.Name || '').localeCompare(b.agent.Name || '');\n });\n\n this.agentPrompts = AIEngineBase.Instance.Prompts.filter(p => {\n const filteredAgentPrompts = AIEngineBase.Instance.AgentPrompts.filter(ap => UUIDsEqual(ap.AgentID, this.record.ID));\n return filteredAgentPrompts.some(ap => UUIDsEqual(ap.PromptID, p.ID));\n });\n\n this.agentActions = ActionEngineBase.Instance.Actions.filter(a => {\n const filteredAgentActions = AIEngineBase.Instance.AgentActions.filter(aa => UUIDsEqual(aa.AgentID, this.record.ID));\n return filteredAgentActions.some(aa => UUIDsEqual(aa.ActionID, a.ID));\n });\n\n // Execute all queries in a single batch for better performance\n const results = await rv.RunViews([\n // Learning cycles\n {\n EntityName: 'MJ: AI Agent Learning Cycles',\n // limit fields\n Fields: [\"ID\",\"Name\",\"StartedAt\", \"EndedAt\",\"Status\",\"AgentID\"],\n ExtraFilter: `AgentID='${this.record.ID}'`,\n OrderBy: 'StartedAt DESC'\n },\n // Notes\n {\n EntityName: 'MJ: AI Agent Notes',\n // limit fields\n Fields: [\"ID\",\"Name\", \"AgentID\", \"AgentNoteType\",\"AgentNoteTypeID\",\"UserID\"],\n ExtraFilter: `AgentID='${this.record.ID}'`\n },\n // Execution history (initial page)\n {\n EntityName: 'MJ: AI Agent Runs',\n Fields: [ // limit what we take from runs as this is where we can have a LOT come down if we include JSON fields\n \"ID\",\"AgentID\",\"ParentRunID\",\"Status\",\"StartedAt\",\"CompletedAt\",\n \"Success\",\"TotalTokensUsed\",\"TotalCost\",\"TotalCostRollUp\",\"TotalTokensUsedRollUp\",\n \"Configuration\",\"ConversationID\",\"Result\",\"ErrorMessage\",\"__mj_CreatedAt\"\n ],\n ExtraFilter: `AgentID='${this.record.ID}'`,\n OrderBy: '__mj_CreatedAt DESC',\n MaxRows: this.executionHistoryPageSize\n },\n // Agent permissions (to determine open-to-everyone state)\n {\n EntityName: 'MJ: AI Agent Permissions',\n Fields: ['ID'],\n ExtraFilter: `AgentID='${this.record.ID}'`,\n ResultType: 'simple'\n }\n ]);\n\n // Process results in the same order as queries\n if (results && results.length > 0) {\n this.learningCycles = results[0].Results as MJAIAgentLearningCycleEntity[] || [];\n\n this.agentNotes = results[1].Results as MJAIAgentNoteEntity[] || [];\n\n this.recentExecutions = results[2].Results as MJAIAgentRunEntityExtended[] || [];\n this.totalExecutionHistoryCount = results[2].TotalRowCount;\n\n // Initialize cache with first page of results\n this.allLoadedExecutions = [...this.recentExecutions];\n\n // Initialize filtered executions\n this.filteredExecutions = [...this.recentExecutions];\n\n // Determine open-to-everyone state from permissions query\n const permissionRows = results[3]?.Results || [];\n this.IsOpenToEveryone = permissionRows.length === 0;\n }\n\n // Create snapshot for cancel/revert functionality\n this.createOriginalSnapshot();\n } catch (error) {\n console.error('Error loading related data:', error);\n // Set all counts to 0 on error to ensure UI shows proper empty states\n } finally {\n // Clear loading states\n this.isLoadingData = false;\n this.loadingStates = {\n executionHistory: false,\n subAgents: false,\n prompts: false,\n actions: false,\n learningCycles: false,\n notes: false,\n customSection: false\n };\n this.cdr.detectChanges();\n }\n }\n\n /**\n * Creates a snapshot of the current UI state for cancel/revert functionality\n * @private\n */\n private createOriginalSnapshot() {\n this.originalSnapshots = {\n agentPrompts: [...this.agentPrompts], // Deep copy of arrays\n agentActions: [...this.agentActions],\n subAgents: [...this.subAgents],\n promptCount: this.promptCount,\n actionCount: this.actionCount,\n subAgentCount: this.subAgentCount,\n learningCycleCount: this.learningCycleCount,\n noteCount: this.noteCount,\n executionHistoryCount: this.executionHistoryCount\n };\n }\n\n /**\n * Navigates to the next page of execution history\n */\n public async goToNextPage(): Promise<void> {\n if (!this.hasNextPage || this.isLoadingPage || !this.record?.ID) {\n return;\n }\n\n const nextPage = this.executionHistoryCurrentPage + 1;\n await this.loadPage(nextPage);\n }\n\n /**\n * Navigates to the previous page of execution history\n */\n public async goToPreviousPage(): Promise<void> {\n if (!this.hasPreviousPage || this.isLoadingPage) {\n return;\n }\n\n const previousPage = this.executionHistoryCurrentPage - 1;\n await this.loadPage(previousPage);\n }\n\n /**\n * Loads a specific page of execution history, using cache when available\n */\n private async loadPage(pageNumber: number): Promise<void> {\n if (!this.record?.ID) {\n return;\n }\n\n this.isLoadingPage = true;\n this.cdr.detectChanges();\n\n try {\n const startIndex = (pageNumber - 1) * this.executionHistoryPageSize;\n const endIndex = startIndex + this.executionHistoryPageSize;\n\n // Check if we have this page in cache\n const cachedPageData = this.allLoadedExecutions.slice(startIndex, endIndex);\n const hasFullPageInCache = cachedPageData.length === this.executionHistoryPageSize;\n const isLastPage = endIndex >= this.totalExecutionHistoryCount;\n const hasPartialPageInCache = isLastPage && cachedPageData.length > 0 &&\n cachedPageData.length === (this.totalExecutionHistoryCount - startIndex);\n\n if (hasFullPageInCache || hasPartialPageInCache) {\n // We have the page in cache (either full page or complete last page)\n this.executionHistoryCurrentPage = pageNumber;\n this.recentExecutions = cachedPageData;\n await this.applySearchFilter();\n } else {\n // Need to load from database\n const rv = RunView.FromMetadataProvider(this.ProviderToUse);\n const result = await rv.RunView<MJAIAgentRunEntityExtended>({\n EntityName: 'MJ: AI Agent Runs',\n Fields: [\n \"ID\",\"AgentID\",\"ParentRunID\",\"Status\",\"StartedAt\",\"CompletedAt\",\n \"Success\",\"TotalTokensUsed\",\"TotalCost\",\"TotalCostRollUp\",\"TotalTokensUsedRollUp\",\n \"Configuration\",\"ConversationID\",\"Result\",\"ErrorMessage\",\"__mj_CreatedAt\"\n ],\n ExtraFilter: `AgentID='${this.record.ID}'`,\n OrderBy: '__mj_CreatedAt DESC',\n MaxRows: this.executionHistoryPageSize,\n StartRow: startIndex > 0 ? startIndex : undefined,\n ResultType: 'entity_object'\n });\n\n if (result.Success && result.Results) {\n // Update cache - ensure we have enough space\n while (this.allLoadedExecutions.length < startIndex) {\n this.allLoadedExecutions.push(null as any);\n }\n\n // Insert the new results into cache\n this.allLoadedExecutions.splice(startIndex, result.Results.length, ...result.Results);\n\n this.executionHistoryCurrentPage = pageNumber;\n this.recentExecutions = result.Results;\n await this.applySearchFilter();\n }\n }\n } catch (error) {\n console.error('Error loading page:', error);\n } finally {\n this.isLoadingPage = false;\n this.cdr.detectChanges();\n }\n }\n\n /**\n * Checks if there is a next page available\n */\n public get hasNextPage(): boolean {\n const maxPage = Math.ceil(this.totalExecutionHistoryCount / this.executionHistoryPageSize);\n return this.executionHistoryCurrentPage < maxPage;\n }\n\n /**\n * Checks if there is a previous page available\n */\n public get hasPreviousPage(): boolean {\n return this.executionHistoryCurrentPage > 1;\n }\n\n /**\n * Gets the total number of pages\n */\n public get totalPages(): number {\n return Math.ceil(this.totalExecutionHistoryCount / this.executionHistoryPageSize);\n }\n\n /**\n * Loads the agent type entity for this agent\n * @private\n */\n private async loadCurrentAgentType(): Promise<void> {\n if (!this.record?.TypeID) {\n return;\n }\n \n try {\n const md = this.ProviderToUse;\n this.agentType = await md.GetEntityObject<MJAIAgentTypeEntity>('MJ: AI Agent Types');\n if (this.agentType) {\n await this.agentType.Load(this.record.TypeID);\n }\n } catch (error) {\n console.error('Error loading agent type:', error);\n this.agentType = null;\n }\n }\n \n /**\n * Dynamically loads a custom form section if the agent type defines one\n * @private\n */\n private loadCustomFormSection(): void {\n if (!this.agentType?.UIFormSectionKey || !this.customSectionContainer) {\n return;\n }\n\n // Check if component still exists in container\n if (this.customSectionLoaded && this.customSectionContainer.length > 0) {\n return;\n }\n\n this.loadingStates.customSection = true;\n this.cdr.markForCheck();\n\n try {\n // Build the full registration key (Entity.Section pattern)\n const sectionKey = `AI Agents.${this.agentType.UIFormSectionKey}`;\n\n // Get the component registration from the class factory\n const registration = MJGlobal.Instance.ClassFactory.GetRegistration(BaseFormSectionComponent, sectionKey);\n\n if (registration && registration.SubClass) {\n // Clear any existing custom section\n this.customSectionContainer.clear();\n\n // Create the component\n const componentRef = this.customSectionContainer.createComponent(registration.SubClass);\n this.customSectionComponent = componentRef.instance as BaseFormSectionComponent;\n this.customSectionComponentRef = componentRef;\n\n // Pass the record and edit mode to the custom section\n this.customSectionComponent.record = this.record;\n this.customSectionComponent.EditMode = this.EditMode;\n\n // Mark as loaded\n this.customSectionLoaded = true;\n }\n } catch (error) {\n console.error('Error loading custom form section:', error);\n } finally {\n this.loadingStates.customSection = false;\n this.cdr.markForCheck();\n }\n }\n\n /**\n * Handles state change events for the custom section panel\n * @param event The panel bar state change event\n */\n public onCustomSectionStateChange(event: { expanded: boolean }): void {\n // When panel is expanded, check if we need to load or reload the custom section\n if (event.expanded && this.agentType?.UIFormSectionKey) {\n // Always try to load on expand to handle cases where container might have been recreated\n this.setTrackedTimeout(() => {\n this.loadCustomFormSection();\n }, 0);\n }\n }\n\n // === User Preferences (Header & Section State) ===\n\n /** Load saved preferences for header state and section expand/collapse */\n private loadUserPreferences(): void {\n try {\n const raw = UserInfoEngine.Instance.GetSetting(MJAIAgentFormComponentExtended.PREFS_KEY);\n if (raw) {\n const prefs = JSON.parse(raw);\n this.HeaderCollapsed = prefs.headerCollapsed ?? false;\n this.SectionStates = prefs.sectionStates ?? {};\n }\n } catch (error) {\n console.error('Error loading AI Agent form preferences:', error);\n }\n this.preferencesLoaded = true;\n }\n\n /** Persist preferences with debounce */\n private persistPreferences(): void {\n if (!this.preferencesLoaded) return;\n const prefs = {\n headerCollapsed: this.HeaderCollapsed,\n sectionStates: this.SectionStates\n };\n UserInfoEngine.Instance.SetSettingDebounced(\n MJAIAgentFormComponentExtended.PREFS_KEY,\n JSON.stringify(prefs)\n );\n }\n\n /** Toggle the header between expanded and collapsed modes */\n public ToggleHeaderCollapsed(): void {\n this.HeaderCollapsed = !this.HeaderCollapsed;\n this.persistPreferences();\n this.cdr.detectChanges();\n }\n\n /** Get the expanded state for a panelbar section, falling back to a default */\n public GetSectionExpanded(sectionId: string, defaultValue: boolean): boolean {\n if (this.preferencesLoaded && sectionId in this.SectionStates) {\n return this.SectionStates[sectionId];\n }\n return defaultValue;\n }\n\n /** Handle panelbar stateChange — fires when any section expands or collapses */\n public OnPanelBarStateChange(event: { items: Array<{ id: string; expanded: boolean }> }): void {\n if (!event?.items) return;\n for (const item of event.items) {\n if (item.id) {\n this.SectionStates[item.id] = item.expanded;\n\n // Keep existing custom section load logic\n if (item.id === 'custom' && item.expanded) {\n this.onCustomSectionStateChange({ expanded: true });\n }\n }\n }\n this.persistPreferences();\n }\n\n /**\n * Restores the UI to its original state using saved snapshots\n * @private\n */\n private restoreFromSnapshots() {\n if (this.originalSnapshots) {\n // Restore arrays (create new copies to ensure reactivity)\n this.agentPrompts = [...this.originalSnapshots.agentPrompts];\n this.agentActions = [...this.originalSnapshots.agentActions];\n this.subAgents = [...this.originalSnapshots.subAgents];\n \n // Reset other UI state\n this.hasUnsavedChanges = false;\n \n // Mark for check instead of forcing immediate detection\n this.cdr.markForCheck();\n }\n }\n\n /**\n * Override CancelEdit to restore UI state when user cancels changes\n */\n public override CancelEdit(): void {\n \n // Set flag to indicate we're performing a cancel operation\n this.isPerformingCancel = true;\n \n try {\n // CRITICAL: Clear our pending records BEFORE calling parent\n // This ensures that any prompt/action/sub-agent changes we added don't persist\n this.PendingRecords.length = 0;\n \n // Call the parent CancelEdit first (this handles main record revert and pending records)\n super.CancelEdit();\n \n // Restore our UI state after parent cancel\n this.restoreFromSnapshots();\n \n // Reset the unsaved changes flag\n this.hasUnsavedChanges = false;\n } finally {\n // Always reset the flag\n this.isPerformingCancel = false;\n }\n }\n\n /**\n * Opens the integrated test harness for the current agent.\n * Validates that the agent has been saved before allowing testing.\n * Shows a notification if the agent needs to be saved first.\n */\n public openTestHarness() {\n if (!this.record?.ID) {\n MJNotificationService.Instance.CreateSimpleNotification(\n 'Please save the AI agent before testing',\n 'warning',\n 4000\n );\n return;\n }\n\n // Use the new test harness dialog service\n // Don't pass viewContainerRef so window is top-level\n this.testHarnessService.openForAgent(this.record.ID);\n }\n\n /**\n * Opens the permissions management dialog for this agent.\n * Allows viewing and editing user/role-based permissions for the agent.\n */\n /** Controls visibility of the new permissions dialog from @memberjunction/ng-agents */\n public ShowPermissionsDialog = false;\n\n /** True when no explicit permission records exist (agent is open to everyone) */\n public IsOpenToEveryone = true;\n\n public openPermissionsDialog() {\n if (!this.record?.ID) {\n MJNotificationService.Instance.CreateSimpleNotification(\n 'Please save the AI agent before managing permissions',\n 'warning',\n 4000\n );\n return;\n }\n this.ShowPermissionsDialog = true;\n }\n\n public async onPermissionsDialogClosed() {\n this.ShowPermissionsDialog = false;\n // Refresh open-to-everyone state in case permissions were added/removed\n await this.refreshPermissionState();\n }\n\n private async refreshPermissionState(): Promise<void> {\n if (!this.record?.ID) return;\n const rv = RunView.FromMetadataProvider(this.ProviderToUse);\n const result = await rv.RunView<{ID: string}>({\n EntityName: 'MJ: AI Agent Permissions',\n Fields: ['ID'],\n ExtraFilter: `AgentID='${this.record.ID}'`,\n ResultType: 'simple'\n });\n if (result.Success) {\n this.IsOpenToEveryone = (result.Results || []).length === 0;\n this.cdr.markForCheck();\n }\n }\n\n /**\n * Returns the appropriate color for the agent status badge.\n * Uses standard color coding: green for active, yellow for pending, gray for disabled.\n * @returns CSS color value for the status badge\n */\n public getStatusBadgeColor(): string {\n switch (this.record?.Status) {\n case 'Active': return 'var(--mj-status-success)';\n case 'Pending': return 'var(--mj-status-warning)';\n case 'Disabled': return 'var(--mj-text-muted)';\n default: return 'var(--mj-text-muted)';\n }\n }\n\n /**\n * Event handler for test harness visibility changes.\n * Updates the component state when the test harness is opened or closed.\n * @param isVisible - Whether the test harness is currently visible\n */\n\n /**\n * Gets the count of sub-agents\n */\n public getSubAgentCount(): number {\n return this.subAgentCount;\n }\n\n /**\n * Gets the count of prompts\n */\n public getPromptCount(): number {\n return this.promptCount;\n }\n\n /**\n * Gets the count of actions\n */\n public getActionCount(): number {\n return this.actionCount;\n }\n\n /**\n * Gets the icon for the execution mode\n */\n public getExecutionModeIcon(mode: string): string {\n switch (mode) {\n case 'Sequential':\n return 'fa-solid fa-list-ol';\n case 'Parallel':\n return 'fa-solid fa-layer-group';\n default:\n 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(): string {\n if (this.record?.LogoURL) {\n // LogoURL is used in img tag, not here\n return '';\n }\n return this.record?.IconClass || 'fa-solid fa-robot';\n }\n\n /**\n * Checks if the agent has a logo URL (for image display)\n */\n public hasLogoURL(): boolean {\n return !!this.record?.LogoURL;\n }\n\n /**\n * Gets the icon for a sub-agent\n * Prioritizes LogoURL, falls back to IconClass, then default robot icon\n */\n public getSubAgentIcon(subAgent: MJAIAgentEntityExtended): string {\n if (subAgent?.LogoURL) {\n // LogoURL is used in img tag, not here\n return '';\n }\n return subAgent?.IconClass || 'fa-solid fa-robot';\n }\n \n /**\n * Gets the icon class for an action\n * Falls back to default bolt icon if no IconClass is set\n */\n public getActionIcon(action: MJActionEntity): string {\n return action?.IconClass || 'fa-solid fa-bolt';\n }\n\n /**\n * Checks if a sub-agent has a logo URL\n */\n public hasSubAgentLogoURL(subAgent: MJAIAgentEntityExtended): boolean {\n return !!subAgent?.LogoURL;\n }\n\n /**\n * Creates a new sub-agent using the CreateAgentService slide-in panel.\n * Uses the new unified agent creation UI from @memberjunction/ng-agents.\n */\n public async createSubAgent() {\n try {\n this.createAgentService.OpenSubAgentSlideIn(\n this.record.ID,\n this.record.Name || 'Agent'\n ).pipe(takeUntil(this.destroy$)).subscribe({\n next: async (dialogResult) => {\n if (!dialogResult.Cancelled && dialogResult.Result) {\n await this.handleSubAgentCreated(dialogResult.Result);\n }\n },\n error: (error) => {\n console.error('Error in create sub-agent slide-in:', error);\n MJNotificationService.Instance.CreateSimpleNotification(\n 'Error opening sub-agent creation panel. Please try again.',\n 'error',\n 3000\n );\n }\n });\n } catch (error) {\n console.error('Error in createSubAgent:', error);\n MJNotificationService.Instance.CreateSimpleNotification(\n 'Error creating sub-agent. Please try again.',\n 'error',\n 3000\n );\n }\n }\n\n /**\n * Handles the result from the create sub-agent slide-in.\n * Adds entities to PendingRecords for atomic save with parent.\n */\n private async handleSubAgentCreated(result: CreateAgentResult): Promise<void> {\n try {\n const subAgent = result.Agent;\n\n // Handle deferred sub-agent creation if parent is not saved\n if (!this.record.IsSaved) {\n // Store a temporary reference to the parent - will be resolved during save\n subAgent.Set('_tempParentId', this.record.ID);\n }\n\n // Add the sub-agent to pending records\n this.PendingRecords.push({\n entityObject: subAgent,\n action: 'save'\n });\n\n // Add agent prompt links to pending records\n if (result.AgentPrompts) {\n for (const agentPrompt of result.AgentPrompts) {\n this.PendingRecords.push({\n entityObject: agentPrompt,\n action: 'save'\n });\n }\n }\n\n // Add agent action links to pending records\n if (result.AgentActions) {\n for (const agentAction of result.AgentActions) {\n this.PendingRecords.push({\n entityObject: agentAction,\n action: 'save'\n });\n }\n }\n\n // Update UI to show the new sub-agent\n this.subAgents.push(subAgent);\n this.hasUnsavedChanges = true;\n\n // Mark for check instead of forcing immediate detection\n this.cdr.markForCheck();\n\n MJNotificationService.Instance.CreateSimpleNotification(\n `Sub-agent \"${subAgent.Name}\" created and will be saved when you save the parent agent`,\n 'success',\n 4000\n );\n } catch (error) {\n console.error('Error processing created sub-agent:', error);\n MJNotificationService.Instance.CreateSimpleNotification(\n 'Error processing created sub-agent. Please try again.',\n 'error',\n 3000\n );\n }\n }\n\n /**\n * Adds a new prompt to the agent (deferred until save)\n */\n public async addPrompt() {\n // Get currently linked and pending prompt IDs for pre-selection\n const currentPromptIds = this.agentPrompts.map(ap => ap.ID);\n const pendingAddIds = this.PendingRecords\n .filter(p => p.entityObject.EntityInfo.Name === 'MJ: AI Agent Prompts' && p.action === 'save')\n .map(p => p.entityObject.Get('PromptID'));\n const allLinkedIds = [...currentPromptIds, ...pendingAddIds];\n \n try {\n this.agentManagementService.openPromptSelectorDialog({\n title: 'Add Prompts to Agent',\n multiSelect: true,\n selectedPromptIds: [],\n showCreateNew: true,\n linkedPromptIds: allLinkedIds,\n viewContainerRef: this.viewContainerRef\n }).pipe(takeUntil(this.destroy$)).subscribe({\n next: async (result) => {\n if (result && result.selectedPrompts.length > 0) {\n // Filter out already linked or pending prompts\n const newPrompts = result.selectedPrompts.filter(prompt =>\n !allLinkedIds.some(id => UUIDsEqual(id, prompt.ID))\n );\n \n if (newPrompts.length === 0) {\n MJNotificationService.Instance.CreateSimpleNotification(\n 'All selected prompts are already linked to this agent',\n 'info',\n 3000\n );\n return;\n }\n \n // Add to pending changes (defer until save)\n const md = this.ProviderToUse;\n for (const prompt of newPrompts) {\n const agentPrompt = await md.GetEntityObject<MJAIAgentPromptEntity>('MJ: AI Agent Prompts');\n agentPrompt.NewRecord();\n agentPrompt.AgentID = this.record.ID;\n agentPrompt.PromptID = prompt.ID;\n agentPrompt.Status = 'Active';\n agentPrompt.ExecutionOrder = 1;\n \n this.PendingRecords.push({\n entityObject: agentPrompt,\n action: 'save'\n });\n }\n \n this.hasUnsavedChanges = true;\n \n // Update UI to show the new prompts (cast to extended type for display)\n this.agentPrompts.push(...(newPrompts as MJAIPromptEntityExtended[]));\n \n // Mark for check instead of forcing immediate detection\n this.cdr.markForCheck();\n \n // Show success notification\n MJNotificationService.Instance.CreateSimpleNotification(\n `${newPrompts.length} prompt${newPrompts.length === 1 ? '' : 's'} will be added when you save the agent`,\n 'info',\n 4000\n );\n } else if (result && result.createNew) {\n // User wants to create a new prompt\n await this.createNewPrompt();\n }\n },\n error: (error) => {\n console.error('Error opening prompt selector:', error);\n MJNotificationService.Instance.CreateSimpleNotification(\n 'Error opening prompt selector. Please try again.',\n 'error',\n 3000\n );\n }\n });\n } catch (error) {\n console.error('Error in addPrompt:', error);\n MJNotificationService.Instance.CreateSimpleNotification(\n 'Error adding prompts. Please try again.',\n 'error',\n 3000\n );\n }\n }\n\n /**\n * Handle context compression toggle and reset related fields when disabled\n */\n public onContextCompressionToggle(value: any) {\n const enabled = value === true || value === 'true';\n if (!enabled) {\n // Reset context compression related fields to null when disabled\n this.record.ContextCompressionMessageThreshold = null;\n this.record.ContextCompressionPromptID = null;\n this.record.ContextCompressionMessageRetentionCount = null;\n \n // Mark for check instead of forcing immediate detection\n this.cdr.markForCheck();\n }\n }\n\n /**\n * Opens the modern Add Action dialog for selecting actions (deferred until save)\n */\n public async configureActions() {\n // Get currently linked and pending action IDs for pre-selection\n const currentActionIds = this.agentActions.map(aa => aa.ID);\n const pendingAddIds = this.PendingRecords\n .filter(p => p.entityObject.EntityInfo.Name === 'MJ: AI Agent Actions' && p.action === 'save')\n .map(p => p.entityObject.Get('ActionID'));\n const allLinkedIds = [...currentActionIds, ...pendingAddIds];\n \n this.agentManagementService.openAddActionDialog({\n agentId: this.record.ID,\n agentName: this.record.Name || 'Agent',\n existingActionIds: allLinkedIds,\n viewContainerRef: this.viewContainerRef\n }).pipe(takeUntil(this.destroy$)).subscribe({\n next: async (selectedActions) => {\n if (selectedActions && selectedActions.length > 0) {\n // Filter out already linked or pending actions\n const newActions = selectedActions.filter(action =>\n !allLinkedIds.some(id => UUIDsEqual(id, action.ID))\n );\n \n if (newActions.length === 0) {\n MJNotificationService.Instance.CreateSimpleNotification(\n 'All selected actions are already linked to this agent',\n 'info',\n 3000\n );\n return;\n }\n \n // Add to pending changes (defer until save)\n const md = this.ProviderToUse;\n for (const action of newActions) {\n const agentAction = await md.GetEntityObject<MJAIAgentActionEntity>('MJ: AI Agent Actions');\n agentAction.NewRecord();\n agentAction.AgentID = this.record.ID;\n agentAction.ActionID = action.ID;\n agentAction.Status = 'Active';\n \n this.PendingRecords.push({\n entityObject: agentAction,\n action: 'save'\n });\n }\n \n this.hasUnsavedChanges = true;\n \n // Update UI to show the new actions\n this.agentActions.push(...newActions);\n \n // Mark for check instead of forcing immediate detection\n this.cdr.markForCheck();\n \n // Show success notification\n MJNotificationService.Instance.CreateSimpleNotification(\n `${newActions.length} action${newActions.length === 1 ? '' : 's'} will be added when you save the agent`,\n 'info',\n 4000\n );\n }\n },\n error: (error) => {\n console.error('Error in add action dialog:', error);\n MJNotificationService.Instance.CreateSimpleNotification(\n 'Error opening action selection dialog. Please try again.',\n 'error',\n 3000\n );\n }\n });\n }\n\n /**\n * Gets the status icon for execution runs\n */\n public getExecutionStatusIcon(status: string): string {\n switch (status?.toLowerCase()) {\n case 'completed':\n case 'success':\n return 'fa-solid fa-check-circle';\n case 'failed':\n case 'error':\n return 'fa-solid fa-exclamation-triangle';\n case 'running':\n case 'in_progress':\n return 'fa-solid fa-spinner fa-spin';\n case 'pending':\n return 'fa-solid fa-clock';\n default:\n return 'fa-solid fa-question-circle';\n }\n }\n\n /**\n * Gets the status color for execution runs\n */\n public getExecutionStatusColor(status: string): string {\n switch (status?.toLowerCase()) {\n case 'completed':\n case 'success':\n return 'var(--mj-status-success)';\n case 'failed':\n case 'error':\n return 'var(--mj-status-error)';\n case 'running':\n case 'in_progress':\n return 'var(--mj-status-info)';\n case 'pending':\n return 'var(--mj-status-warning)';\n default:\n return 'var(--mj-text-muted)';\n }\n }\n\n public formatExecutionTimeFromDates(startDate: Date, endDate: Date): string {\n if (!startDate || !endDate) return 'N/A';\n\n // check to see if we have dates or timestamps\n let startTime;\n let endTime;\n if (typeof startDate === 'string') {\n startTime = new Date(startDate).getTime();\n }\n else if (typeof startDate === 'number') { \n startTime = startDate;\n }\n else {\n startTime = startDate.getTime();\n }\n if (typeof endDate === 'string') {\n endTime = new Date(endDate).getTime();\n }\n else if (typeof endDate === 'number') {\n endTime = endDate;\n }\n else {\n endTime = endDate.getTime();\n }\n\n if (isNaN(startTime) || isNaN(endTime)) \n return 'N/A'; \n const milliseconds = endTime - startTime;\n return this.formatExecutionTime(milliseconds);\n }\n\n /**\n * Formats execution time\n */\n public formatExecutionTime(milliseconds: number): string {\n if (!milliseconds) return 'N/A';\n \n if (milliseconds >= 60000) {\n const minutes = Math.floor(milliseconds / 60000);\n const seconds = ((milliseconds % 60000) / 1000).toFixed(1);\n return `${minutes}m ${seconds}s`;\n } else if (milliseconds >= 1000) {\n return `${(milliseconds / 1000).toFixed(1)}s`;\n } else {\n return `${milliseconds}ms`;\n }\n }\n\n /**\n * Formats token count with appropriate units (K for thousands, M for millions)\n */\n public formatTokenCount(tokens: number | null): string {\n if (tokens == null || tokens === 0) return '0';\n \n if (tokens >= 1000000) {\n return `${(tokens / 1000000).toFixed(1)}M`;\n } else if (tokens >= 1000) {\n return `${(tokens / 1000).toFixed(1)}K`;\n } else {\n return tokens.toString();\n }\n }\n\n /**\n * Formats cost with appropriate precision\n */\n public formatCost(cost: number | null): string {\n if (cost == null || cost === 0) return '0.00';\n \n if (cost >= 1) {\n return cost.toFixed(2);\n } else if (cost >= 0.01) {\n return cost.toFixed(3);\n } else {\n return cost.toFixed(4);\n }\n }\n\n /**\n * Gets the running time for an execution that hasn't completed yet\n * Uses a cached timestamp to avoid ExpressionChangedAfterItHasBeenCheckedError\n */\n private _runningTimeCache = new Map<string, { time: string, timestamp: number }>();\n private _runningTimeUpdater: any = null;\n \n public getRunningTime(startDate: Date): string {\n if (!startDate) return 'N/A';\n \n const startTime = new Date(startDate).getTime();\n if (isNaN(startTime)) return 'N/A';\n \n const cacheKey = startTime.toString();\n const now = Date.now();\n const cached = this._runningTimeCache.get(cacheKey);\n \n // Update cache every second to avoid constant changes\n if (!cached || now - cached.timestamp > 1000) {\n const milliseconds = now - startTime;\n const timeString = this.formatExecutionTime(milliseconds);\n this._runningTimeCache.set(cacheKey, { time: timeString, timestamp: now });\n \n // Don't trigger change detection here - let the background timer handle it\n return timeString;\n }\n \n return cached.time;\n }\n\n /**\n * Starts the background timer for updating running times\n */\n private startRunningTimeUpdater() {\n if (!this._runningTimeUpdater) {\n this._runningTimeUpdater = setInterval(() => {\n if (!this.destroy$.closed) {\n // Force cache refresh by clearing old entries\n const now = Date.now();\n for (const [key, cached] of this._runningTimeCache.entries()) {\n if (now - cached.timestamp > 500) { // Refresh every 500ms\n this._runningTimeCache.delete(key);\n }\n }\n this.cdr.markForCheck();\n }\n }, 1000); // Update every second\n }\n }\n\n /**\n * Gets the priority badge color\n */\n public getPriorityBadgeColor(priority: number): string {\n if (priority <= 1) return 'var(--mj-status-error)'; // High priority - red\n if (priority <= 5) return 'var(--mj-status-warning)'; // Medium priority - yellow\n return 'var(--mj-status-success)'; // Low priority - green\n }\n\n /**\n * Gets the priority label\n */\n public getPriorityLabel(priority: number): string {\n if (priority <= 1) return 'High';\n if (priority <= 5) return 'Medium';\n return 'Low';\n }\n\n /**\n * Navigates to a related entity\n */\n public navigateToEntity(entityName: string, recordId: string) {\n this.sharedService.OpenEntityRecord(entityName, CompositeKey.FromID(recordId));\n }\n \n /**\n * Toggles the expanded state of an execution card\n */\n public toggleExecutionExpanded(executionId: string) {\n this.expandedExecutions[executionId] = !this.expandedExecutions[executionId];\n }\n\n /**\n * Handles search text changes - debounced to avoid excessive processing\n */\n public onExecutionSearchChange(): void {\n // Debounce search to avoid excessive processing during typing\n if (this._searchDebounceTimer) {\n clearTimeout(this._searchDebounceTimer);\n }\n\n this._searchDebounceTimer = setTimeout(() => {\n this.applySearchFilter();\n }, 300);\n }\n\n private _searchDebounceTimer: any = null;\n\n /**\n * Applies search filter across all cached records and loads from database if needed\n */\n private async applySearchFilter(): Promise<void> {\n if (!this.executionSearchText || this.executionSearchText.trim() === '') {\n // No search text - show current page's executions\n this.filteredExecutions = [...this.recentExecutions];\n return;\n }\n\n const searchLower = this.executionSearchText.toLowerCase().trim();\n\n // First, search across all cached records\n const cachedMatches = this.allLoadedExecutions.filter(execution =>\n execution && execution.ID.toLowerCase().includes(searchLower)\n );\n\n if (cachedMatches.length > 0) {\n // Found matches in cache\n this.filteredExecutions = cachedMatches;\n } else {\n // No matches in cache - search database\n await this.searchExecutionsFromDatabase(searchLower);\n }\n }\n\n /**\n * Searches execution history from database when not found in cache\n */\n private async searchExecutionsFromDatabase(searchText: string): Promise<void> {\n if (!this.record?.ID) {\n return;\n }\n\n try {\n const rv = RunView.FromMetadataProvider(this.ProviderToUse);\n const result = await rv.RunView<MJAIAgentRunEntityExtended>({\n EntityName: 'MJ: AI Agent Runs',\n Fields: [\n \"ID\",\"AgentID\",\"ParentRunID\",\"Status\",\"StartedAt\",\"CompletedAt\",\n \"Success\",\"TotalTokensUsed\",\"TotalCost\",\"TotalCostRollUp\",\"TotalTokensUsedRollUp\",\n \"Configuration\",\"ConversationID\",\"Result\",\"ErrorMessage\",\"__mj_CreatedAt\"\n ],\n ExtraFilter: `AgentID='${this.record.ID}' AND ID LIKE '%${searchText}%'`,\n OrderBy: '__mj_CreatedAt DESC',\n MaxRows: 100, // Limit search results\n ResultType: 'entity_object'\n });\n\n if (result.Success && result.Results) {\n this.filteredExecutions = result.Results;\n } else {\n this.filteredExecutions = [];\n }\n } catch (error) {\n console.error('Error searching executions:', error);\n this.filteredExecutions = [];\n }\n }\n\n /**\n * Opens the full execution record in a new view\n */\n public openExecutionRecord(executionId: string) {\n this.sharedService.OpenEntityRecord('MJ: AI Agent Runs', CompositeKey.FromID(executionId));\n }\n \n /**\n * Gets a preview of the execution result for collapsed view\n */\n public getExecutionResultPreview(execution: MJAIAgentRunEntityExtended, trimLongMessages: boolean): string {\n try {\n if (!execution.Result) return 'No result';\n \n // Try to parse the result as JSON\n const parsed = JSON.parse(execution.Result);\n \n // Extract the user message if it exists\n if (parsed.returnValue?.nextStep?.userMessage) {\n const message = parsed.returnValue.nextStep.userMessage;\n if (trimLongMessages)\n return message.length > 120 ? message.substring(0, 120) + '...' : message;\n else\n return message;\n }\n \n // Otherwise return the stringified result\n const stringified = JSON.stringify(parsed, null, 2);\n if (trimLongMessages)\n return stringified.length > 120 ? stringified.substring(0, 120) + '...' : stringified;\n else\n return stringified;\n } catch {\n // If not JSON, just return the string\n const result = execution.Result || '';\n if (trimLongMessages)\n return result.length > 120 ? result.substring(0, 120) + '...' : result;\n else\n return result;\n }\n }\n \n /**\n * Gets the full execution result message for expanded view\n */\n public getExecutionResultMessage(execution: MJAIAgentRunEntityExtended): string {\n try {\n if (!execution.Result) return 'No result';\n \n // Try to parse the result as JSON\n const parsed = JSON.parse(execution.Result);\n \n // Extract the user message if it exists\n if (parsed.returnValue?.nextStep?.userMessage) {\n return parsed.returnValue.nextStep.userMessage;\n }\n \n // Otherwise return the pretty-printed JSON\n return JSON.stringify(parsed, null, 2);\n } catch {\n // If not JSON, just return the string\n return execution.Result || '';\n }\n }\n\n /**\n * Refreshes the related data and updates snapshots\n */\n public async refreshRelatedData() {\n if (this.record?.ID) {\n await this.loadRelatedCounts(true); // force refresh\n MJNotificationService.Instance.CreateSimpleNotification(\n 'Related data refreshed',\n 'success',\n 2000\n );\n }\n }\n\n /**\n * Manually refreshes the snapshot for cancel/revert functionality\n * Useful when you want to reset the \"original state\" to the current state\n */\n public refreshSnapshot() {\n this.createOriginalSnapshot();\n MJNotificationService.Instance.CreateSimpleNotification(\n 'Current state saved as new baseline',\n 'info',\n 2000\n );\n }\n\n /**\n * Debug method to check current pending records state\n * Useful for troubleshooting cancel/revert issues\n */\n public debugPendingRecords() {\n // Debug method for troubleshooting - console output removed for production\n }\n\n /**\n * Adds a new note to the agent\n */\n public addNote() {\n MJNotificationService.Instance.CreateSimpleNotification(\n 'Opening new note form...',\n 'info',\n 2000\n );\n \n // In a full implementation, this would open a new AI Agent Note form\n // with AgentID pre-populated to this.record.ID\n }\n\n /**\n * Creates a new prompt and links it to the agent\n */\n private async createNewPrompt() {\n try {\n this.agentManagementService.openCreatePromptDialog({\n title: `Create New Prompt for ${this.record.Name || 'Agent'}`,\n initialName: '',\n viewContainerRef: this.viewContainerRef\n }).pipe(takeUntil(this.destroy$)).subscribe({\n next: async (result) => {\n if (result && result.prompt) {\n try {\n // Get current user using proper MJ pattern\n const md = this.ProviderToUse;\n const currentUserId = md.CurrentUser.ID;\n\n // Add the prompt to PendingRecords (will be saved with agent)\n this.PendingRecords.push({\n entityObject: result.prompt,\n action: 'save'\n });\n\n // Add template to PendingRecords if created\n if (result.template) {\n // Set UserID on template (required field)\n result.template.UserID = currentUserId;\n this.PendingRecords.push({\n entityObject: result.template,\n action: 'save'\n });\n }\n\n // Add template contents to PendingRecords if created\n if (result.templateContents && result.templateContents.length > 0) {\n for (const content of result.templateContents) {\n // Template content does not have UserID field, no manual user assignment needed\n this.PendingRecords.push({\n entityObject: content,\n action: 'save'\n });\n }\n }\n\n // Create the AI Agent Prompt link\n const agentPrompt = await md.GetEntityObject<MJAIAgentPromptEntity>('MJ: AI Agent Prompts');\n agentPrompt.NewRecord();\n agentPrompt.AgentID = this.record.ID;\n agentPrompt.PromptID = result.prompt.ID;\n agentPrompt.Status = 'Active';\n agentPrompt.ExecutionOrder = 1;\n \n // AI Agent Prompt does not have UserID field, no manual user assignment needed\n \n this.PendingRecords.push({\n entityObject: agentPrompt,\n action: 'save'\n });\n\n this.hasUnsavedChanges = true;\n\n // Update UI to show the new prompt\n this.agentPrompts.push(result.prompt);\n\n // Trigger change detection to update UI\n this.cdr.detectChanges();\n\n MJNotificationService.Instance.CreateSimpleNotification(\n `New prompt \"${result.prompt.Name}\" will be created and linked when you save the agent`,\n 'success',\n 4000\n );\n } catch (error) {\n console.error('Error processing created prompt:', error);\n MJNotificationService.Instance.CreateSimpleNotification(\n 'Error processing created prompt. Please try again.',\n 'error',\n 3000\n );\n }\n }\n },\n error: (error) => {\n console.error('Error in create prompt dialog:', error);\n MJNotificationService.Instance.CreateSimpleNotification(\n 'Error opening prompt creation dialog. Please try again.',\n 'error',\n 3000\n );\n }\n });\n } catch (error) {\n console.error('Error in createNewPrompt:', error);\n MJNotificationService.Instance.CreateSimpleNotification(\n 'Error creating new prompt. Please try again.',\n 'error',\n 3000\n );\n }\n }\n\n /**\n * Removes a prompt from the agent (deferred until save)\n */\n public async removePrompt(prompt: MJAIPromptEntityExtended, event: Event) {\n event.stopPropagation(); // Prevent navigation\n \n const confirmDialog = this.dialogService.open({\n title: 'Remove Prompt',\n content: `Are you sure you want to remove the prompt \"${prompt.Name}\" from this agent?`,\n actions: [\n { text: 'Cancel' },\n { text: 'Remove', themeColor: 'error' }\n ],\n width: 450,\n height: 200\n });\n\n try {\n const result = await firstValueFrom(confirmDialog.Result);\n if (result && typeof result === 'object' && 'text' in result && (result as Record<string, unknown>)['text'] === 'Remove') {\n try {\n // Check if this is a pending add (not yet in database)\n const pendingAddIndex = this.PendingRecords.findIndex(\n p => p.entityObject.EntityInfo.Name === 'MJ: AI Agent Prompts' && \n p.action === 'save' && \n UUIDsEqual(p.entityObject.Get('PromptID'), prompt.ID)\n );\n\n if (pendingAddIndex >= 0) {\n // Remove from pending adds\n this.PendingRecords.splice(pendingAddIndex, 1);\n } else {\n // Find the existing AI Agent Prompt link record for deferred deletion\n const rv = RunView.FromMetadataProvider(this.ProviderToUse);\n const linkResult = await rv.RunView<MJAIAgentPromptEntity>({\n EntityName: 'MJ: AI Agent Prompts',\n ExtraFilter: `AgentID='${this.record.ID}' AND PromptID='${prompt.ID}'`,\n ResultType: 'entity_object'\n });\n\n if (linkResult.Success && linkResult.Results && linkResult.Results.length > 0) {\n const agentPromptToDelete = linkResult.Results[0];\n \n // Add to pending deletions\n this.PendingRecords.push({\n entityObject: agentPromptToDelete,\n action: 'delete'\n });\n } else {\n throw new Error('AI Agent Prompt link not found');\n }\n }\n\n // Remove from UI immediately\n const promptIndex = this.agentPrompts.findIndex(p => UUIDsEqual(p.ID, prompt.ID));\n if (promptIndex >= 0) {\n this.agentPrompts.splice(promptIndex, 1);\n }\n\n this.hasUnsavedChanges = true;\n\n // Mark for check instead of forcing immediate detection\n this.cdr.markForCheck();\n\n MJNotificationService.Instance.CreateSimpleNotification(\n `Prompt \"${prompt.Name}\" will be removed when you save the agent`,\n 'info',\n 4000\n );\n } catch (error) {\n console.error('Error removing prompt from agent:', error);\n MJNotificationService.Instance.CreateSimpleNotification(\n 'Failed to remove prompt',\n 'error',\n 3000\n );\n }\n }\n } catch (dialogError) {\n console.error('Error with dialog:', dialogError);\n }\n }\n\n /**\n * Updates payload field values from code editor\n */\n public updatePayloadField(fieldName: string, value: any) {\n if (this.record) {\n // Handle the value - it might be a string or an event\n const newValue = typeof value === 'string' ? value : value?.target?.value || value;\n (this.record as any)[fieldName] = newValue;\n }\n }\n\n /** \n * Opens the sub-agent selector dialog for adding sub-agents (deferred until save)\n */\n public async addSubAgents() {\n try {\n // Get list of already pending sub-agent IDs to filter duplicates\n const pendingSubAgentIds = this.PendingRecords\n .filter(p => p.entityObject.EntityInfo.Name === 'MJ: AI Agents' && \n p.action === 'save' && \n p.entityObject.Get('ParentID') === this.record.ID)\n .map(p => p.entityObject.Get('ID'));\n const existingSubAgentIds = this.subAgents.map(agent => agent.ID);\n const allLinkedIds = [...pendingSubAgentIds, ...existingSubAgentIds];\n\n this.agentManagementService.openSubAgentSelectorDialog({\n title: 'Add Sub-Agents',\n multiSelect: true,\n parentAgentId: this.record.ID,\n showCreateNew: true,\n viewContainerRef: this.viewContainerRef\n }).pipe(takeUntil(this.destroy$)).subscribe({\n next: async (result) => {\n if (result && result.selectedAgents && result.selectedAgents.length > 0) {\n // Filter out already linked or pending agents\n const newAgents = result.selectedAgents.filter(agent =>\n !allLinkedIds.some(id => UUIDsEqual(id, agent.ID))\n );\n \n if (newAgents.length === 0) {\n MJNotificationService.Instance.CreateSimpleNotification(\n 'All selected agents are already linked to this agent',\n 'info',\n 3000\n );\n return;\n }\n \n // Add to pending changes (defer until save)\n const md = this.ProviderToUse;\n for (const agent of newAgents) {\n const subAgentToUpdate = await md.GetEntityObject<MJAIAgentEntityExtended>('MJ: AI Agents');\n await subAgentToUpdate.Load(agent.ID);\n subAgentToUpdate.ParentID = this.record.ID;\n // Database constraint requires ExposeAsAction = false for sub-agents\n subAgentToUpdate.ExposeAsAction = false;\n \n this.PendingRecords.push({\n entityObject: subAgentToUpdate,\n action: 'save'\n });\n }\n \n this.hasUnsavedChanges = true;\n \n // Update UI to show the new sub-agents\n this.subAgents.push(...newAgents);\n \n // Mark for check instead of forcing immediate detection\n this.cdr.markForCheck();\n \n // Show success notification\n MJNotificationService.Instance.CreateSimpleNotification(\n `${newAgents.length} agent${newAgents.length === 1 ? '' : 's'} will be converted to sub-agent${newAgents.length === 1 ? '' : 's'} when you save`,\n 'info',\n 4000\n );\n } else if (result && result.createNew) {\n // User wants to create a new sub-agent\n await this.createSubAgent();\n }\n },\n error: (error) => {\n console.error('Error opening sub-agent selector:', error);\n MJNotificationService.Instance.CreateSimpleNotification(\n 'Error opening sub-agent selector. Please try again.',\n 'error',\n 3000\n );\n }\n });\n } catch (error) {\n console.error('Error in addSubAgents:', error);\n MJNotificationService.Instance.CreateSimpleNotification(\n 'Error adding sub-agents. Please try again.',\n 'error',\n 3000\n );\n }\n }\n\n /**\n * Removes a sub-agent from this agent (deferred until save)\n */\n public async removeSubAgent(subAgent: MJAIAgentEntityExtended, event: Event) {\n event.stopPropagation(); // Prevent navigation\n \n const confirmDialog = this.dialogService.open({\n title: 'Remove Sub-Agent',\n content: `Are you sure you want to remove \"${subAgent.Name}\" as a sub-agent? This will make it an independent root agent.`,\n actions: [\n { text: 'Cancel' },\n { text: 'Remove', themeColor: 'error' }\n ],\n width: 450,\n height: 200\n });\n\n try {\n const result = await firstValueFrom(confirmDialog.Result);\n if (result && typeof result === 'object' && 'text' in result && (result as Record<string, unknown>)['text'] === 'Remove') {\n try {\n // Check if this is a pending add (not yet in database)\n const pendingAddIndex = this.PendingRecords.findIndex(\n p => p.entityObject.EntityInfo.Name === 'MJ: AI Agents' && \n p.action === 'save' && \n UUIDsEqual(p.entityObject.Get('ID'), subAgent.ID) &&\n p.entityObject.Get('ParentID') === this.record.ID\n );\n\n if (pendingAddIndex >= 0) {\n // Remove from pending adds\n this.PendingRecords.splice(pendingAddIndex, 1);\n } else {\n // Add to pending removals (will restore to root agent)\n const md = this.ProviderToUse;\n const subAgentToUpdate = await md.GetEntityObject<MJAIAgentEntityExtended>('MJ: AI Agents');\n await subAgentToUpdate.Load(subAgent.ID);\n subAgentToUpdate.ParentID = null; // Will become a root agent\n \n this.PendingRecords.push({\n entityObject: subAgentToUpdate,\n action: 'save'\n });\n }\n\n // Remove from UI immediately\n const subAgentIndex = this.subAgents.findIndex(sa => UUIDsEqual(sa.ID, subAgent.ID));\n if (subAgentIndex >= 0) {\n this.subAgents.splice(subAgentIndex, 1);\n }\n\n this.hasUnsavedChanges = true;\n\n // Mark for check instead of forcing immediate detection\n this.cdr.markForCheck();\n\n MJNotificationService.Instance.CreateSimpleNotification(\n `\"${subAgent.Name}\" will be removed as a sub-agent when you save`,\n 'info',\n 4000\n );\n } catch (error) {\n console.error('Error removing sub-agent:', error);\n MJNotificationService.Instance.CreateSimpleNotification(\n 'Failed to remove sub-agent',\n 'error',\n 3000\n );\n }\n }\n } catch (dialogError) {\n console.error('Error with dialog:', dialogError);\n }\n }\n\n /**\n * Sets the sub-agent filter to show all, child, or related sub-agents\n */\n public setSubAgentFilter(filter: SubAgentFilterType): void {\n this.subAgentFilter = filter;\n }\n\n /**\n * Gets the badge color for a sub-agent based on its type\n */\n public getSubAgentBadgeColor(item: UnifiedSubAgent): string {\n return item.type === 'child' ? 'var(--mj-status-info)' : 'var(--mj-brand-primary)';\n }\n\n /**\n * Gets the badge icon for a sub-agent based on its type\n */\n public getSubAgentBadgeIcon(item: UnifiedSubAgent): string {\n return item.type === 'child' ? 'fa-solid fa-link' : 'fa-solid fa-share-nodes';\n }\n\n /**\n * Gets the badge text for a sub-agent based on its type\n */\n public getSubAgentBadgeText(item: UnifiedSubAgent): string {\n return item.type === 'child' ? 'CHILD' : 'RELATED';\n }\n\n /**\n * Gets the payload information string for display\n */\n public getSubAgentPayloadInfo(item: UnifiedSubAgent): string {\n if (item.type === 'child') {\n return 'Shared Payload';\n } else if (item.relationship?.SubAgentOutputMapping) {\n try {\n const mapping = JSON.parse(item.relationship.SubAgentOutputMapping);\n const entries = Object.entries(mapping);\n if (entries.length === 1 && entries[0][0] === '*') {\n return `Mapped: * → ${entries[0][1]}`;\n }\n return `Mapped: ${entries.length} path${entries.length === 1 ? '' : 's'}`;\n } catch {\n return 'Mapped Payload';\n }\n }\n return 'No Mapping';\n }\n\n /**\n * Opens a dialog to configure the output mapping for a related sub-agent\n */\n public async configureOutputMapping(item: UnifiedSubAgent, event: Event): Promise<void> {\n event.stopPropagation();\n if (item.type !== 'related' || !item.relationship) return;\n\n // TODO: Implement JSON editor dialog for SubAgentOutputMapping\n MJNotificationService.Instance.CreateSimpleNotification(\n 'Output mapping configuration coming soon',\n 'info',\n 3000\n );\n }\n\n /**\n * Unlinks a related sub-agent (removes the relationship)\n */\n public async unlinkRelatedSubAgent(item: UnifiedSubAgent, event: Event): Promise<void> {\n event.stopPropagation();\n if (item.type !== 'related' || !item.relationship) return;\n\n const confirmDialog = this.dialogService.open({\n title: 'Unlink Related Sub-Agent',\n content: `Are you sure you want to unlink \"${item.agent.Name}\"? This will remove the relationship but keep the agent itself.`,\n actions: [\n { text: 'Cancel' },\n { text: 'Unlink', themeColor: 'error' }\n ],\n width: 450,\n height: 200\n });\n\n try {\n const result = await firstValueFrom(confirmDialog.Result);\n if (result && typeof result === 'object' && 'text' in result && (result as Record<string, unknown>)['text'] === 'Unlink') {\n try {\n const success = await item.relationship.Delete();\n if (success) {\n // Remove from unified list\n const index = this.allSubAgents.findIndex(s =>\n s.type === 'related' && UUIDsEqual(s.relationship?.ID, item.relationship!.ID)\n );\n if (index >= 0) {\n this.allSubAgents.splice(index, 1);\n }\n\n this.cdr.markForCheck();\n\n MJNotificationService.Instance.CreateSimpleNotification(\n `Unlinked \"${item.agent.Name}\" successfully`,\n 'success',\n 3000\n );\n } else {\n throw new Error('Delete operation failed');\n }\n } catch (error) {\n console.error('Error unlinking related sub-agent:', error);\n MJNotificationService.Instance.CreateSimpleNotification(\n 'Failed to unlink sub-agent',\n 'error',\n 3000\n );\n }\n }\n } catch (dialogError) {\n console.error('Error with dialog:', dialogError);\n }\n }\n\n /**\n * Removes a child sub-agent (updated to work with UnifiedSubAgent)\n */\n public async removeChildSubAgent(item: UnifiedSubAgent, event: Event): Promise<void> {\n // Delegate to existing removeSubAgent method\n await this.removeSubAgent(item.agent, event);\n }\n\n /**\n * Creates a new child sub-agent (renamed from createSubAgent for clarity)\n */\n public async createChildSubAgent(): Promise<void> {\n await this.createSubAgent();\n }\n\n /**\n * Opens dialog to link an existing agent as a related sub-agent\n */\n public async linkRelatedSubAgent(): Promise<void> {\n // TODO: Implement dialog to select existing agents and create relationship\n MJNotificationService.Instance.CreateSimpleNotification(\n 'Link related sub-agent dialog coming soon',\n 'info',\n 3000\n );\n }\n\n /**\n * Removes an action from the agent (deferred until save)\n */\n public async removeAction(action: MJActionEntity, event: Event) {\n event.stopPropagation(); // Prevent navigation\n \n const confirmDialog = this.dialogService.open({\n title: 'Remove Action',\n content: `Are you sure you want to remove the action \"${action.Name}\" from this agent?`,\n actions: [\n { text: 'Cancel' },\n { text: 'Remove', themeColor: 'error' }\n ],\n width: 450,\n height: 200\n });\n\n try {\n const result = await firstValueFrom(confirmDialog.Result);\n if (result && typeof result === 'object' && 'text' in result && (result as Record<string, unknown>)['text'] === 'Remove') {\n try {\n // Check if this is a pending add (not yet in database)\n const pendingAddIndex = this.PendingRecords.findIndex(\n p => p.entityObject.EntityInfo.Name === 'MJ: AI Agent Actions' && \n p.action === 'save' && \n UUIDsEqual(p.entityObject.Get('ActionID'), action.ID)\n );\n\n if (pendingAddIndex >= 0) {\n // Remove from pending adds\n this.PendingRecords.splice(pendingAddIndex, 1);\n } else {\n // Find the existing AI Agent Action link record for deferred deletion\n const rv = RunView.FromMetadataProvider(this.ProviderToUse);\n const linkResult = await rv.RunView<MJAIAgentActionEntity>({\n EntityName: 'MJ: AI Agent Actions',\n ExtraFilter: `AgentID='${this.record.ID}' AND ActionID='${action.ID}'`,\n ResultType: 'entity_object'\n });\n\n if (linkResult.Success && linkResult.Results && linkResult.Results.length > 0) {\n const agentActionToDelete = linkResult.Results[0];\n \n // Add to pending deletions\n this.PendingRecords.push({\n entityObject: agentActionToDelete,\n action: 'delete'\n });\n } else {\n throw new Error('AI Agent Action link not found');\n }\n }\n\n // Remove from UI immediately\n const actionIndex = this.agentActions.findIndex(a => UUIDsEqual(a.ID, action.ID));\n if (actionIndex >= 0) {\n this.agentActions.splice(actionIndex, 1);\n }\n\n this.hasUnsavedChanges = true;\n\n // Mark for check instead of forcing immediate detection\n this.cdr.markForCheck();\n\n MJNotificationService.Instance.CreateSimpleNotification(\n `Action \"${action.Name}\" will be removed when you save the agent`,\n 'info',\n 4000\n );\n } catch (error) {\n console.error('Error removing action from agent:', error);\n MJNotificationService.Instance.CreateSimpleNotification(\n 'Failed to remove action',\n 'error',\n 3000\n );\n }\n }\n } catch (dialogError) {\n console.error('Error with action dialog:', dialogError);\n }\n }\n\n /**\n * Opens the advanced settings dialog for a prompt\n */\n public async openPromptAdvancedSettings(prompt: MJAIPromptEntityExtended, event: Event) {\n event.stopPropagation(); // Prevent navigation\n \n try {\n // Find the corresponding MJAIAgentPromptEntity for this prompt\n // Get all agent prompts for validation\n\n const allAgentPrompts = AIEngineBase.Instance.AgentPrompts.filter(ap => UUIDsEqual(ap.AgentID, this.record.ID));\n const agentPrompt = allAgentPrompts.find(ap => UUIDsEqual(ap.PromptID, prompt.ID));\n if (!agentPrompt) {\n MJNotificationService.Instance.CreateSimpleNotification(\n 'Unable to find prompt configuration for advanced settings',\n 'error',\n 3000\n );\n return;\n }\n\n this.agentManagementService.openAgentPromptAdvancedSettingsDialog({\n agentPrompt: agentPrompt,\n allAgentPrompts: allAgentPrompts,\n viewContainerRef: this.viewContainerRef\n }).pipe(takeUntil(this.destroy$)).subscribe({\n next: async (formData) => {\n if (formData) {\n try {\n // Update the agent prompt entity with new values\n agentPrompt.ExecutionOrder = formData.executionOrder;\n agentPrompt.Purpose = formData.purpose;\n agentPrompt.ConfigurationID = formData.configurationID;\n agentPrompt.ContextBehavior = formData.contextBehavior;\n agentPrompt.ContextMessageCount = formData.contextMessageCount;\n agentPrompt.Status = formData.status;\n\n // Save immediately to database\n const saveResult = await agentPrompt.Save();\n if (saveResult) {\n MJNotificationService.Instance.CreateSimpleNotification(\n 'Prompt settings updated successfully',\n 'success',\n 3000\n );\n\n // Refresh the related data to reflect changes\n await this.loadRelatedCounts(true);\n } else {\n MJNotificationService.Instance.CreateSimpleNotification(\n 'Failed to save prompt settings. Please try again.',\n 'error',\n 3000\n );\n }\n } catch (error) {\n console.error('Error saving prompt advanced settings:', error);\n MJNotificationService.Instance.CreateSimpleNotification(\n 'Error saving prompt settings. Please try again.',\n 'error',\n 3000\n );\n }\n }\n },\n error: (error) => {\n console.error('Error opening prompt advanced settings dialog:', error);\n MJNotificationService.Instance.CreateSimpleNotification(\n 'Error opening advanced settings. Please try again.',\n 'error',\n 3000\n );\n }\n });\n\n } catch (error) {\n console.error('Error in openPromptAdvancedSettings:', error);\n MJNotificationService.Instance.CreateSimpleNotification(\n 'Error opening prompt advanced settings. Please try again.',\n 'error',\n 3000\n );\n }\n }\n\n /**\n * Opens the advanced settings dialog for a sub-agent\n */\n public async openSubAgentAdvancedSettings(subAgentEntity: MJAIAgentEntityExtended, event: Event) {\n event.stopPropagation(); // Prevent navigation\n \n try {\n // Get all sub-agents under the same parent for validation\n const allSubAgents = AIEngineBase.Instance.Agents.filter(sa => UUIDsEqual(sa.ParentID, subAgentEntity.ParentID));\n\n this.agentManagementService.openSubAgentAdvancedSettingsDialog({\n subAgent: subAgentEntity,\n allSubAgents: allSubAgents,\n viewContainerRef: this.viewContainerRef\n }).pipe(takeUntil(this.destroy$)).subscribe({\n next: async (formData) => {\n if (formData) {\n try {\n // Update the sub-agent entity with new values\n subAgentEntity.ExecutionOrder = formData.executionOrder;\n subAgentEntity.ExecutionMode = formData.executionMode;\n subAgentEntity.Status = formData.status;\n subAgentEntity.TypeID = formData.typeID;\n subAgentEntity.ExposeAsAction = formData.exposeAsAction;\n\n // Save immediately to database\n const saveResult = await subAgentEntity.Save();\n if (saveResult) {\n MJNotificationService.Instance.CreateSimpleNotification(\n 'Sub-agent settings updated successfully',\n 'success',\n 3000\n );\n\n // Update the local sub-agent data to reflect changes\n const localSubAgent = this.subAgents.find(sa => UUIDsEqual(sa.ID, subAgentEntity.ID));\n if (localSubAgent) {\n localSubAgent.ExecutionOrder = formData.executionOrder;\n localSubAgent.ExecutionMode = formData.executionMode;\n localSubAgent.Status = formData.status;\n localSubAgent.TypeID = formData.typeID;\n localSubAgent.ExposeAsAction = formData.exposeAsAction;\n }\n\n // Mark for check instead of forcing immediate detection\n this.cdr.markForCheck();\n } else {\n MJNotificationService.Instance.CreateSimpleNotification(\n 'Failed to save sub-agent settings. Please try again.',\n 'error',\n 3000\n );\n }\n } catch (error) {\n console.error('Error saving sub-agent advanced settings:', error);\n MJNotificationService.Instance.CreateSimpleNotification(\n 'Error saving sub-agent settings. Please try again.',\n 'error',\n 3000\n );\n }\n }\n },\n error: (error) => {\n console.error('Error opening sub-agent advanced settings dialog:', error);\n MJNotificationService.Instance.CreateSimpleNotification(\n 'Error opening advanced settings. Please try again.',\n 'error',\n 3000\n );\n }\n });\n\n } catch (error) {\n console.error('Error in openSubAgentAdvancedSettings:', error);\n MJNotificationService.Instance.CreateSimpleNotification(\n 'Error opening sub-agent advanced settings. Please try again.',\n 'error',\n 3000\n );\n }\n }\n\n /**\n * Override PopulatePendingRecords to preserve our pending records before parent clears them\n * However, during cancel operations, we want to clear all pending records completely\n */\n protected PopulatePendingRecords() {\n // If we're in the middle of a cancel operation, don't preserve pending records\n // The base class CancelEdit will handle reverting pending records appropriately\n if (this.isPerformingCancel) {\n super.PopulatePendingRecords();\n return;\n }\n\n // IMPORTANT: The parent method clears the pending records array, so we need to preserve\n // any records we've added before calling the parent method during normal operations\n const currentPendingRecords = [...this.PendingRecords]; // Make a copy\n \n // Call parent first to get child component pending records (this clears the array)\n super.PopulatePendingRecords();\n \n // Re-add our preserved records (only during normal save operations)\n for (const record of currentPendingRecords) {\n this.PendingRecords.push(record);\n }\n }\n\n /** Flag to track if we're currently performing a cancel operation */\n private isPerformingCancel = false;\n\n /**\n * Override InternalSaveRecord to handle agent-specific transaction logic\n * AI Agent must be saved first since related entities depend on it\n */\n /**\n * The base SaveRecord() method will call this InternalSaveRecord() method\n * after handling validation and pending record population\n */\n\n protected async InternalSaveRecord(): Promise<boolean> {\n if (!this.record) {\n return false;\n }\n\n try {\n // Reset context compression fields if EnableContextCompression is false\n if (!this.record.EnableContextCompression) {\n this.record.ContextCompressionMessageThreshold = null;\n this.record.ContextCompressionPromptID = null;\n this.record.ContextCompressionMessageRetentionCount = null;\n this.selectedContextCompressionPrompt = null;\n }\n\n const md = this.ProviderToUse;\n const transactionGroup = await md.CreateTransactionGroup();\n\n // Set transaction group on main record first\n this.record.TransactionGroup = transactionGroup;\n\n // Save entities in dependency order to avoid foreign key constraint errors\n // We need to save Templates and Template Contents BEFORE the main AI Agent\n // since AI Prompts depend on Templates, and AI Agent Prompts depend on AI Agents\n \n // 1. First save Templates (they have no dependencies)\n const templateRecords = this.PendingRecords.filter(p => \n p.entityObject.EntityInfo.Name === 'MJ: Templates'\n );\n for (const templateRecord of templateRecords) {\n templateRecord.entityObject.TransactionGroup = transactionGroup;\n if (templateRecord.action === 'save') {\n const saveResult = await templateRecord.entityObject.Save();\n if (!saveResult) {\n MJNotificationService.Instance.CreateSimpleNotification(\n `Failed to save Template \"${templateRecord.entityObject.Get('Name')}\". Please check the data and try again.`,\n 'error',\n 4000\n );\n return false;\n }\n } else {\n await templateRecord.entityObject.Delete();\n }\n }\n\n // 2. Save Template Contents (depend on Templates)\n const templateContentRecords = this.PendingRecords.filter(p => \n p.entityObject.EntityInfo.Name === 'MJ: Template Contents'\n );\n for (const contentRecord of templateContentRecords) {\n contentRecord.entityObject.TransactionGroup = transactionGroup;\n if (contentRecord.action === 'save') {\n const saveResult = await contentRecord.entityObject.Save();\n if (!saveResult) {\n MJNotificationService.Instance.CreateSimpleNotification(\n `Failed to save Template Content. Please check the data and try again.`,\n 'error',\n 4000\n );\n return false;\n }\n } else {\n await contentRecord.entityObject.Delete();\n }\n }\n\n // 3. Save AI Prompts (depend on Templates)\n const promptRecords = this.PendingRecords.filter(p => \n p.entityObject.EntityInfo.Name === 'MJ: AI Prompts'\n );\n for (const promptRecord of promptRecords) {\n promptRecord.entityObject.TransactionGroup = transactionGroup;\n if (promptRecord.action === 'save') {\n const saveResult = await promptRecord.entityObject.Save();\n if (!saveResult) {\n MJNotificationService.Instance.CreateSimpleNotification(\n `Failed to save AI Prompt \"${promptRecord.entityObject.Get('Name')}\". Please check the data and try again.`,\n 'error',\n 4000\n );\n return false;\n }\n } else {\n await promptRecord.entityObject.Delete();\n }\n }\n\n // 4. Save the main AI Agent record (other entity links depend on it)\n // The record transaction group was already set above\n const agentSaveResult = await this.record.Save();\n if (!agentSaveResult) {\n MJNotificationService.Instance.CreateSimpleNotification(\n `Failed to save AI agent \"${this.record.Name}\". Please check the data and try again.`,\n 'error',\n 4000\n );\n return false;\n }\n\n // 4.1. Handle deferred sub-agent creation - set ParentID on any sub-agents created before parent was saved\n const subAgentRecords = this.PendingRecords.filter(p => \n p.entityObject.EntityInfo.Name === 'MJ: AI Agents' && \n p.action === 'save' && \n p.entityObject.Get('_tempParentId') === this.record.ID\n );\n \n for (const subAgentRecord of subAgentRecords) {\n // Cast to MJAIAgentEntityExtended to access ParentID property\n const subAgent = subAgentRecord.entityObject as MJAIAgentEntityExtended;\n // Set the proper ParentID now that parent is saved\n subAgent.ParentID = this.record.ID;\n // Clear the temporary reference\n subAgent.Set('_tempParentId', null);\n }\n\n // 5. Save all other pending records (AI Agent Actions, AI Agent Prompts, etc.)\n const otherRecords = this.PendingRecords.filter(p => \n p.entityObject.EntityInfo.Name !== 'MJ: Templates' &&\n p.entityObject.EntityInfo.Name !== 'MJ: Template Contents' &&\n p.entityObject.EntityInfo.Name !== 'MJ: AI Prompts'\n );\n for (const record of otherRecords) {\n record.entityObject.TransactionGroup = transactionGroup;\n if (record.action === 'save') {\n const saveResult = await record.entityObject.Save();\n if (!saveResult) {\n MJNotificationService.Instance.CreateSimpleNotification(\n `Failed to save ${record.entityObject.EntityInfo.Name}. Transaction will be rolled back.`,\n 'error',\n 4000\n );\n return false;\n }\n } else {\n await record.entityObject.Delete();\n }\n }\n\n // Execute all operations atomically\n const success = await transactionGroup.Submit();\n if (success) {\n // Clear our local state since save was successful\n this.hasUnsavedChanges = false;\n \n // Clear pending records since they've been saved\n this.PendingRecords.length = 0;\n \n // Reload related data to reflect database state\n await this.loadRelatedCounts(true);\n\n MJNotificationService.Instance.CreateSimpleNotification(\n 'AI Agent and all related changes saved successfully',\n 'success',\n 3000\n );\n \n return true;\n } else {\n MJNotificationService.Instance.CreateSimpleNotification(\n 'Save failed. Please try again.',\n 'error',\n 4000\n );\n return false;\n }\n } catch (error) {\n MJNotificationService.Instance.CreateSimpleNotification(\n `Save failed: ${error instanceof Error ? error.message : 'Unknown error'}. Please try again.`,\n 'error',\n 5000\n );\n return false;\n }\n }\n\n /**\n * Navigates to the parent agent when the \"Child of...\" badge is clicked\n */\n public navigateToParentAgent(): void {\n if (this.record.ParentID) {\n this.navigateToEntity('MJ: AI Agents', this.record.ParentID);\n }\n }\n\n /**\n * Component cleanup - critical for preventing memory leaks\n */\n ngOnDestroy(): void {\n // Signal all subscriptions to complete\n this.destroy$.next();\n this.destroy$.complete();\n \n // Clear all active timeouts\n this.activeTimeouts.forEach(timeoutId => {\n clearTimeout(timeoutId);\n });\n this.activeTimeouts.length = 0;\n \n // Clear running time updater\n if (this._runningTimeUpdater) {\n clearInterval(this._runningTimeUpdater);\n this._runningTimeUpdater = null;\n }\n \n // Clear all data arrays to release memory\n this.subAgents.length = 0;\n this.agentPrompts.length = 0;\n this.agentActions.length = 0;\n this.recentExecutions.length = 0;\n this.learningCycles.length = 0;\n this.agentNotes.length = 0;\n\n // Reset pagination state\n this.executionHistoryCurrentPage = 1;\n this.totalExecutionHistoryCount = 0;\n this.isLoadingPage = false;\n this.allLoadedExecutions = [];\n\n // Clear maps and objects\n this._permissionCache.clear();\n this._runningTimeCache.clear();\n this.expandedExecutions = {};\n this.originalSnapshots = null as any;\n \n // Clean up component references\n if (this.customSectionComponentRef) {\n this.customSectionComponentRef.destroy();\n this.customSectionComponentRef = null;\n }\n this.customSectionComponent = null;\n this.agentType = null;\n }\n \n}\n","@if (record) {\n<mj-record-form-container [Record]=\"record\" [FormComponent]=\"this\"\n [ToolbarConfig]=\"toolbarConfig\"\n [WidthMode]=\"'full-width'\"\n (Navigate)=\"OnFormNavigate($event)\"\n (DeleteRequested)=\"OnDeleteRequested()\"\n (FavoriteToggled)=\"OnFavoriteToggled()\"\n (HistoryRequested)=\"OnHistoryRequested()\"\n (ListManagementRequested)=\"OnListManagementRequested()\">\n <form class=\"record-form\" #form=\"ngForm\">\n <!-- Agent Header — expanded view -->\n @if (!HeaderCollapsed) {\n <div class=\"agent-header\">\n <div class=\"agent-header-content\">\n <button class=\"agent-header-toggle\" (click)=\"ToggleHeaderCollapsed()\"\n title=\"Minimize header\">\n <i class=\"fa-solid fa-chevron-up\"></i>\n </button>\n <div class=\"agent-overview\">\n <div class=\"agent-icon-wrapper\">\n @if (hasLogoURL()) {\n <img [src]=\"record.LogoURL\" [alt]=\"record.Name + ' logo'\" class=\"agent-logo\">\n } @else {\n <i [class]=\"getAgentIcon()\"></i>\n }\n </div>\n <div class=\"agent-info\">\n @if (EditMode) {\n <input type=\"text\" class=\"mj-input agent-name-input\"\n [(ngModel)]=\"record.Name\"\n name=\"agentName\"\n placeholder=\"Enter agent name...\">\n } @else {\n <h1 class=\"agent-name\">{{ record.Name || 'Untitled AI Agent' }}</h1>\n }\n <div class=\"agent-meta\">\n @if (record.Status) {\n <span class=\"status-badge\" [style.background-color]=\"getStatusBadgeColor()\">\n <i class=\"fa-solid fa-circle\"></i>\n {{ record.Status }}\n </span>\n }\n @if (record.Type) {\n <span class=\"execution-mode\">\n Agent Type: {{ record.Type }}\n </span>\n }\n @if (record.Parent) {\n <span class=\"parent-agent clickable\"\n (click)=\"navigateToParentAgent()\"\n title=\"Open parent agent: {{ record.Parent }}\">\n <i class=\"fa-solid fa-sitemap\"></i>\n Child of {{ record.Parent }}\n <i class=\"fa-solid fa-external-link\" style=\"margin-left: 4px; font-size: 10px;\"></i>\n </span>\n }\n </div>\n </div>\n </div>\n <div class=\"agent-actions\">\n @if (record.ID) {\n <button mjButton variant=\"primary\" size=\"lg\"\n (click)=\"openTestHarness()\"\n [disabled]=\"record.Status !== 'Active'\"\n title=\"Run this AI agent\">\n <i class=\"fa-solid fa-play\"></i> Run\n </button>\n <button mjButton size=\"lg\"\n (click)=\"openPermissionsDialog()\"\n [title]=\"IsOpenToEveryone ? 'Open to everyone — click to manage permissions' : 'Restricted — click to manage permissions'\">\n <i class=\"fa-solid\" [class.fa-lock-open]=\"IsOpenToEveryone\" [class.fa-lock]=\"!IsOpenToEveryone\"\n [style.color]=\"IsOpenToEveryone ? 'var(--mj-status-success)' : null\"></i>\n {{ IsOpenToEveryone ? 'Open' : 'Restricted' }}\n </button>\n }\n <button mjButton variant=\"outline\" size=\"sm\" (click)=\"refreshRelatedData()\" title=\"Refresh all data\">\n <i class=\"fa-solid fa-refresh\"></i>\n </button>\n </div>\n </div>\n </div>\n }\n <!-- Agent Header — minimized floating bar -->\n @if (HeaderCollapsed) {\n <div class=\"agent-header-mini\">\n <button class=\"agent-header-mini-expand\" (click)=\"ToggleHeaderCollapsed()\"\n title=\"Expand header\">\n <i class=\"fa-solid fa-chevron-down\"></i>\n </button>\n <span class=\"agent-header-mini-name\">{{ record.Name || 'Untitled AI Agent' }}</span>\n @if (record.Status) {\n <span class=\"agent-header-mini-status\" [style.background-color]=\"getStatusBadgeColor()\">\n {{ record.Status }}\n </span>\n }\n <div class=\"agent-header-mini-spacer\"></div>\n @if (record.ID) {\n <button class=\"agent-header-mini-btn agent-header-mini-btn--primary\"\n (click)=\"openTestHarness()\"\n [disabled]=\"record.Status !== 'Active'\"\n title=\"Run agent\">\n <i class=\"fa-solid fa-play\"></i>\n </button>\n <button class=\"agent-header-mini-btn\"\n (click)=\"openPermissionsDialog()\"\n [title]=\"IsOpenToEveryone ? 'Open to everyone' : 'Restricted'\">\n <i class=\"fa-solid\" [class.fa-lock-open]=\"IsOpenToEveryone\" [class.fa-lock]=\"!IsOpenToEveryone\"\n [style.color]=\"IsOpenToEveryone ? 'var(--mj-status-success)' : null\"></i>\n </button>\n }\n <button class=\"agent-header-mini-btn\"\n (click)=\"refreshRelatedData()\" title=\"Refresh\">\n <i class=\"fa-solid fa-refresh\"></i>\n </button>\n </div>\n }\n <!-- Single Pane Layout with Expander Panels -->\n <div class=\"form-content\">\n <!-- Custom Agent Type Section (if defined) -->\n @if (record.ID && agentType && agentType.UIFormSectionKey) {\n <mj-accordion-panel id=\"custom\"\n [Expanded]=\"GetSectionExpanded('custom', agentType.UIFormSectionExpandedByDefault)\">\n <ng-template mjAccordionTitle>\n <i class=\"fa-solid fa-puzzle-piece\"></i> {{ agentType.Name }} Configuration\n </ng-template>\n <div class=\"panel-content custom-agent-type-section\" [style.display]=\"'block'\">\n @if (loadingStates.customSection) {\n <mj-loading text=\"Loading {{ agentType.Name }} configuration...\" size=\"medium\"></mj-loading>\n }\n <ng-container #customSectionContainer></ng-container>\n </div>\n </mj-accordion-panel>\n }\n <!-- Requests & History -->\n @if (record.ID) {\n <mj-accordion-panel id=\"history\"\n [Expanded]=\"GetSectionExpanded('history', false)\"\n [Disabled]=\"loadingStates.executionHistory\">\n <ng-template mjAccordionTitle>\n <i class=\"fa-solid fa-history\"></i> Execution History\n @if (loadingStates.executionHistory) {\n <span style=\"margin-left: 8px;\"><i class=\"fa-solid fa-spinner fa-spin\" style=\"font-size: 12px;\"></i></span>\n } @else if (executionHistoryCount > 0) {\n <span> ({{ executionHistoryCount }}@if (executionHistoryCount < totalExecutionHistoryCount) { of {{ totalExecutionHistoryCount }}})</span>\n }\n </ng-template>\n <div class=\"panel-content execution-history-panel\">\n @if (loadingStates.executionHistory) {\n <mj-loading text=\"Loading execution history...\" size=\"medium\"></mj-loading>\n } @else if (executionHistoryCount === 0) {\n <div class=\"empty-state\">\n <i class=\"fa-solid fa-history\"></i>\n <h4>No Execution History</h4>\n <p>This agent hasn't been executed yet. Use the Test Agent button to run the agent and see execution history here.</p>\n </div>\n } @else {\n <!-- Search Bar -->\n <div class=\"execution-search-bar\">\n <div class=\"search-input-wrapper\">\n <i class=\"fa-solid fa-search\"></i>\n <input type=\"text\" class=\"mj-input\"\n [(ngModel)]=\"executionSearchText\"\n (ngModelChange)=\"onExecutionSearchChange()\"\n [ngModelOptions]=\"{standalone: true}\"\n placeholder=\"Search by Run ID...\">\n </div>\n </div>\n <div class=\"execution-history-list\">\n @if (filteredExecutions.length === 0) {\n <div class=\"empty-state\">\n <i class=\"fa-solid fa-search\"></i>\n <h4>No Matching Results</h4>\n <p>No execution history found matching \"{{ executionSearchText }}\"</p>\n </div>\n }\n @for (execution of filteredExecutions; track execution.ID) {\n <div class=\"execution-card\" [class.expanded]=\"expandedExecutions[execution.ID]\">\n <div class=\"execution-header\" (click)=\"toggleExecutionExpanded(execution.ID)\">\n <div class=\"execution-left-section\">\n <div class=\"execution-status\">\n <div class=\"status-indicator\" [style.background-color]=\"getExecutionStatusColor(execution.Status)\">\n <i [class]=\"getExecutionStatusIcon(execution.Status)\"></i>\n </div>\n <div class=\"execution-info\">\n <div class=\"execution-title\">\n <i class=\"fa-solid fa-chevron-right expand-icon\" [class.expanded]=\"expandedExecutions[execution.ID]\"></i>\n Execution #{{ execution.ID.substring(0, 8) }}\n </div>\n <div class=\"execution-date\">{{ execution.__mj_CreatedAt | date:'MMM d, h:mm a' }}</div>\n </div>\n </div>\n <div class=\"execution-metrics\">\n @if (execution.Configuration) {\n <div class=\"metric-item\">\n <i class=\"fa-solid fa-cog\"></i>\n <span class=\"metric-label\">Config:</span>\n <span class=\"metric-value\">{{ execution.Configuration }}</span>\n </div>\n }\n @if (execution.CompletedAt) {\n <div class=\"metric-item\">\n <i class=\"fa-solid fa-stopwatch\"></i>\n <span class=\"metric-label\">Duration:</span>\n <span class=\"metric-value\">{{ formatExecutionTimeFromDates(execution.StartedAt, execution.CompletedAt) }}</span>\n </div>\n } @else if (execution.Status === 'Running') {\n <div class=\"metric-item\">\n <i class=\"fa-solid fa-clock\"></i>\n <span class=\"metric-label\">Running:</span>\n <!-- <span class=\"metric-value\">{{ execution.StartedAt | runningTime }}</span> -->\n </div>\n }\n @if (execution.TotalTokensUsedRollup || execution.TotalTokensUsed) {\n <div class=\"metric-item\">\n <i class=\"fa-solid fa-microchip\"></i>\n <span class=\"metric-label\">Tokens:</span>\n <span class=\"metric-value\">{{ formatTokenCount(execution.TotalTokensUsedRollup || execution.TotalTokensUsed) }}</span>\n </div>\n }\n @if (execution.TotalCostRollup || execution.TotalCost) {\n <div class=\"metric-item\">\n <i class=\"fa-solid fa-dollar-sign\"></i>\n <span class=\"metric-label\">Cost:</span>\n <span class=\"metric-value\">${{ formatCost(execution.TotalCostRollup || execution.TotalCost) }}</span>\n </div>\n }\n </div>\n </div>\n <div class=\"execution-actions\">\n <button class=\"action-btn\" (click)=\"openExecutionRecord(execution.ID); $event.stopPropagation()\" title=\"View details\">\n <i class=\"fa-solid fa-external-link-alt\"></i>\n </button>\n </div>\n </div>\n @if (expandedExecutions[execution.ID]) {\n <div class=\"execution-expanded-content\">\n <!-- Detailed Metrics -->\n <div class=\"detailed-metrics\">\n <div class=\"metrics-grid\">\n <div class=\"metric-detail\">\n <i class=\"fa-solid fa-clock\"></i>\n <div class=\"metric-info\">\n <span class=\"metric-title\">Started</span>\n <span class=\"metric-data\">{{ execution.StartedAt | date:'medium' }}</span>\n </div>\n </div>\n @if (execution.CompletedAt) {\n <div class=\"metric-detail\">\n <i class=\"fa-solid fa-check-circle\"></i>\n <div class=\"metric-info\">\n <span class=\"metric-title\">Completed</span>\n <span class=\"metric-data\">{{ execution.CompletedAt | date:'medium' }}</span>\n </div>\n </div>\n }\n @if (execution.TotalTokensUsed) {\n <div class=\"metric-detail\">\n <i class=\"fa-solid fa-microchip\"></i>\n <div class=\"metric-info\">\n <span class=\"metric-title\">Direct Tokens</span>\n <span class=\"metric-data\">{{ formatTokenCount(execution.TotalTokensUsed) }}</span>\n </div>\n </div>\n }\n @if (execution.TotalTokensUsedRollup && execution.TotalTokensUsedRollup !== execution.TotalTokensUsed) {\n <div class=\"metric-detail\">\n <i class=\"fa-solid fa-sitemap\"></i>\n <div class=\"metric-info\">\n <span class=\"metric-title\">Total + Sub-agents</span>\n <span class=\"metric-data\">{{ formatTokenCount(execution.TotalTokensUsedRollup) }}</span>\n </div>\n </div>\n }\n @if (execution.TotalCost) {\n <div class=\"metric-detail\">\n <i class=\"fa-solid fa-dollar-sign\"></i>\n <div class=\"metric-info\">\n <span class=\"metric-title\">Direct Cost</span>\n <span class=\"metric-data\">${{ formatCost(execution.TotalCost) }}</span>\n </div>\n </div>\n }\n @if (execution.TotalCostRollup && execution.TotalCostRollup !== execution.TotalCost) {\n <div class=\"metric-detail\">\n <i class=\"fa-solid fa-calculator\"></i>\n <div class=\"metric-info\">\n <span class=\"metric-title\">Total + Sub-agents</span>\n <span class=\"metric-data\">${{ formatCost(execution.TotalCostRollup) }}</span>\n </div>\n </div>\n }\n @if (execution.ConversationID) {\n <div class=\"metric-detail\">\n <i class=\"fa-solid fa-comments\"></i>\n <div class=\"metric-info\">\n <span class=\"metric-title\">Conversation</span>\n <span class=\"metric-data\">{{ execution.ConversationID.substring(0, 8) }}...</span>\n </div>\n </div>\n }\n </div>\n </div>\n @if (execution.Result) {\n <div class=\"result-section\">\n <h5><i class=\"fa-solid fa-file-text\"></i> Result</h5>\n <mj-code-editor\n [value]=\"getExecutionResultPreview(execution, false)\"\n [readonly]=\"true\"\n language=\"json\"\n [lineWrapping]=\"true\"\n style=\"max-height: 200px; width: 100%;\">\n </mj-code-editor>\n </div>\n }\n @if (execution.ErrorMessage) {\n <div class=\"error-section\">\n <h5><i class=\"fa-solid fa-exclamation-triangle\"></i> Error</h5>\n <div class=\"error-content\">{{ execution.ErrorMessage }}</div>\n </div>\n }\n </div>\n }\n </div>\n }\n <!-- Pagination Controls -->\n @if (totalPages > 1) {\n <div class=\"pagination-controls\">\n <button mjButton\n variant=\"outline\"\n (click)=\"goToPreviousPage()\"\n [disabled]=\"!hasPreviousPage || isLoadingPage\"\n class=\"page-nav-btn\">\n <i class=\"fa-solid fa-chevron-left\"></i>\n Previous\n </button>\n <div class=\"page-info\">\n @if (isLoadingPage) {\n <i class=\"fa-solid fa-spinner fa-spin\"></i>\n Loading...\n } @else {\n Page {{ executionHistoryCurrentPage }} of {{ totalPages }}\n <span class=\"record-count\">({{ totalExecutionHistoryCount }} total)</span>\n }\n </div>\n <button mjButton\n variant=\"outline\"\n (click)=\"goToNextPage()\"\n [disabled]=\"!hasNextPage || isLoadingPage\"\n class=\"page-nav-btn\">\n Next\n <i class=\"fa-solid fa-chevron-right\"></i>\n </button>\n <button mjButton\n variant=\"flat\"\n size=\"sm\"\n (click)=\"navigateToEntity('MJ: AI Agent Runs', '')\"\n class=\"view-all-btn\">\n <i class=\"fa-solid fa-external-link\"></i>\n View All in Grid\n </button>\n </div>\n }\n </div>\n }\n </div>\n </mj-accordion-panel>\n }\n <!-- Actions -->\n @if (record.ID) {\n <mj-accordion-panel id=\"actions\"\n [Expanded]=\"GetSectionExpanded('actions', false)\"\n [Disabled]=\"loadingStates.actions\">\n <ng-template mjAccordionTitle>\n <i class=\"fa-solid fa-bolt\"></i> Actions\n @if (loadingStates.actions) {\n <span style=\"margin-left: 8px;\"><i class=\"fa-solid fa-spinner fa-spin\" style=\"font-size: 12px;\"></i></span>\n } @else if (actionCount > 0) {\n <span> ({{ actionCount }})</span>\n }\n </ng-template>\n <div class=\"panel-content\">\n @if (loadingStates.actions) {\n <div class=\"loading-state\">\n <i class=\"fa-solid fa-spinner fa-spin\"></i>\n <p>Loading actions...</p>\n </div>\n } @else {\n <div class=\"section-header\">\n <div class=\"header-actions\">\n @if (EditMode && UserCanCreateActions) {\n <button mjButton variant=\"primary\" size=\"sm\" (click)=\"configureActions()\">\n <i class=\"fa-solid fa-plus\"></i> Add Action\n </button>\n }\n </div>\n </div>\n @if (actionCount === 0) {\n <div class=\"empty-state\">\n <i class=\"fa-solid fa-bolt\"></i>\n <h4>No Actions Configured</h4>\n <p>Add actions to enable this agent to perform specific tasks and operations.</p>\n @if (EditMode && UserCanCreateActions) {\n <button mjButton variant=\"primary\" (click)=\"configureActions()\">\n <i class=\"fa-solid fa-plus\"></i> Configure First Action\n </button>\n }\n </div>\n } @else {\n <div class=\"entity-list\">\n @for (action of agentActions; track action.ID) {\n <div class=\"entity-item action-item\" (click)=\"navigateToEntity('MJ: Actions', action.ID)\">\n <div class=\"item-icon\">\n <i [class]=\"getActionIcon(action)\"></i>\n </div>\n <div class=\"item-content\">\n <div class=\"item-title\">{{ action.Name || 'Untitled Action' }}</div>\n @if (action.Description) {\n <div class=\"item-preview\">{{ action.Description }}</div>\n }\n <div class=\"item-meta\">\n @if (action.Type) {\n <span class=\"meta-tag\">{{ action.Type }}</span>\n }\n <span class=\"status-tag\" [class.active]=\"action.Status==='Active'\" [class.inactive]=\"action.Status!=='Active'\">\n <i class=\"fa-solid\" [class.fa-check-circle]=\"action.Status==='Active'\" [class.fa-times-circle]=\"action.Status!=='Active'\"></i>\n {{ action.Status }}\n </span>\n </div>\n </div>\n <div class=\"item-actions\">\n @if (EditMode && UserCanDeleteActions) {\n <button mjButton\n variant=\"flat\"\n size=\"sm\"\n (click)=\"removeAction(action, $event)\"\n title=\"Remove action\"\n class=\"error-action\">\n <i class=\"fa-solid fa-trash\"></i>\n </button>\n }\n <i class=\"fa-solid fa-external-link\"></i>\n </div>\n </div>\n }\n @if (actionCount > agentActions.length) {\n <div class=\"view-more-item\" (click)=\"navigateToEntity('MJ: AI Agent Actions', '')\">\n <span>View all {{ actionCount }} actions...</span>\n </div>\n }\n </div>\n }\n }\n </div>\n </mj-accordion-panel>\n }\n <!-- Sub-Agents (Unified View with Filter) -->\n @if (record.ID) {\n <mj-accordion-panel id=\"subagents\"\n [Expanded]=\"GetSectionExpanded('subagents', false)\"\n [Disabled]=\"loadingStates.subAgents\">\n <ng-template mjAccordionTitle>\n <i class=\"fa-solid fa-sitemap\"></i> Sub-Agents\n @if (loadingStates.subAgents) {\n <span style=\"margin-left: 8px;\"><i class=\"fa-solid fa-spinner fa-spin\" style=\"font-size: 12px;\"></i></span>\n } @else if (totalSubAgentCount > 0) {\n <span> ({{ totalSubAgentCount }})</span>\n }\n </ng-template>\n <div class=\"panel-content\">\n <!-- Filter Controls -->\n <div class=\"section-header sub-agent-filter-header\">\n <div class=\"filter-controls\">\n <div class=\"mj-button-group\">\n <button mjButton\n size=\"sm\"\n [class.active]=\"subAgentFilter === 'all'\"\n (click)=\"setSubAgentFilter('all')\">\n <i class=\"fa-solid fa-layer-group\"></i>\n All ({{ totalSubAgentCount }})\n </button>\n <button mjButton\n size=\"sm\"\n [class.active]=\"subAgentFilter === 'child'\"\n (click)=\"setSubAgentFilter('child')\">\n <i class=\"fa-solid fa-link\"></i>\n Child ({{ childSubAgentCount }})\n </button>\n <button mjButton\n size=\"sm\"\n [class.active]=\"subAgentFilter === 'related'\"\n (click)=\"setSubAgentFilter('related')\">\n <i class=\"fa-solid fa-share-nodes\"></i>\n Related ({{ relatedSubAgentCount }})\n </button>\n </div>\n </div>\n <div class=\"header-actions\">\n @if (EditMode && UserCanCreateSubAgents) {\n <button mjButton\n variant=\"primary\"\n size=\"sm\"\n (click)=\"createChildSubAgent()\"\n title=\"Create a new child sub-agent that shares this agent's payload\">\n <i class=\"fa-solid fa-link\"></i>\n Create Child\n </button>\n <button mjButton\n size=\"sm\"\n (click)=\"linkRelatedSubAgent()\"\n title=\"Link an existing agent as a related sub-agent with payload mapping\">\n <i class=\"fa-solid fa-share-nodes\"></i>\n Link Related\n </button>\n }\n </div>\n </div>\n <!-- Empty State -->\n @if (totalSubAgentCount === 0) {\n <div class=\"empty-state\">\n <i class=\"fa-solid fa-sitemap\"></i>\n <h4>No Sub-Agents</h4>\n <p>Sub-agents help build complex workflows through hierarchical orchestration.</p>\n <div class=\"empty-state-info\">\n <div class=\"info-card\">\n <i class=\"fa-solid fa-link\" style=\"color: var(--mj-status-info);\"></i>\n <strong>Child Sub-Agents</strong>\n <p>Share payload structure, dedicated to parent</p>\n </div>\n <div class=\"info-card\">\n <i class=\"fa-solid fa-share-nodes\" style=\"color: var(--mj-brand-primary);\"></i>\n <strong>Related Sub-Agents</strong>\n <p>Reusable agents with payload mapping</p>\n </div>\n </div>\n </div>\n } @else {\n <!-- Unified Sub-Agent List -->\n <div class=\"entity-list\">\n @for (item of filteredSubAgents; track item.agent.ID) {\n <div class=\"entity-item sub-agent-item\"\n [class.child-sub-agent]=\"item.type === 'child'\"\n [class.related-sub-agent]=\"item.type === 'related'\"\n (click)=\"navigateToEntity('MJ: AI Agents', item.agent.ID)\">\n <!-- Type Badge -->\n <div class=\"sub-agent-type-badge\"\n [style.background-color]=\"getSubAgentBadgeColor(item)\">\n <i [class]=\"getSubAgentBadgeIcon(item)\"></i>\n {{ getSubAgentBadgeText(item) }}\n </div>\n <!-- Agent Icon -->\n <div class=\"item-icon\">\n @if (hasSubAgentLogoURL(item.agent)) {\n <img [src]=\"item.agent.LogoURL\"\n [alt]=\"item.agent.Name + ' logo'\"\n class=\"sub-agent-logo\">\n } @else {\n <i [class]=\"getSubAgentIcon(item.agent)\"></i>\n }\n </div>\n <!-- Agent Content -->\n <div class=\"item-content\">\n <div class=\"item-title\">{{ item.agent.Name || 'Untitled Sub-Agent' }}</div>\n @if (item.agent.Description) {\n <div class=\"item-preview\">{{ item.agent.Description }}</div>\n }\n <div class=\"item-meta\">\n <!-- Payload Info -->\n <span class=\"meta-tag payload-info\">\n <i class=\"fa-solid fa-database\"></i>\n {{ getSubAgentPayloadInfo(item) }}\n </span>\n <!-- Status -->\n @if (item.agent.Status) {\n <span class=\"status-tag\"\n [style.background-color]=\"getStatusBadgeColor()\">\n {{ item.agent.Status }}\n </span>\n }\n <!-- Agent Type -->\n @if (item.agent.Type) {\n <span class=\"meta-tag\">{{ item.agent.Type }}</span>\n }\n </div>\n </div>\n <!-- Actions -->\n <div class=\"item-actions\">\n @if (EditMode) {\n <!-- Output Mapping Config (Related only) -->\n @if (item.type === 'related') {\n <button mjButton\n variant=\"flat\"\n size=\"sm\"\n (click)=\"configureOutputMapping(item, $event)\"\n title=\"Configure output mapping\">\n <i class=\"fa-solid fa-exchange-alt\"></i>\n </button>\n }\n <!-- Advanced Settings (Child only) -->\n @if (item.type === 'child' && UserCanCreateSubAgents) {\n <button mjButton\n variant=\"flat\"\n size=\"sm\"\n (click)=\"openSubAgentAdvancedSettings(item.agent, $event)\"\n title=\"Advanced settings\">\n <i class=\"fa-solid fa-cog\"></i>\n </button>\n }\n <!-- Remove/Unlink -->\n @if (UserCanDeleteSubAgents) {\n <button mjButton\n variant=\"flat\"\n size=\"sm\"\n (click)=\"item.type === 'child' ? removeChildSubAgent(item, $event) : unlinkRelatedSubAgent(item, $event)\"\n [title]=\"item.type === 'child' ? 'Delete child sub-agent' : 'Unlink related sub-agent'\"\n class=\"error-action\">\n <i [class]=\"item.type === 'child' ? 'fa-solid fa-trash' : 'fa-solid fa-unlink'\"></i>\n </button>\n }\n }\n <i class=\"fa-solid fa-external-link\"></i>\n </div>\n </div>\n }\n </div>\n }\n </div>\n </mj-accordion-panel>\n }\n <!-- Prompts (With Model Selection) -->\n @if (record.ID) {\n <mj-accordion-panel id=\"prompts\"\n [Expanded]=\"GetSectionExpanded('prompts', false)\"\n [Disabled]=\"loadingStates.prompts\">\n <ng-template mjAccordionTitle>\n <i class=\"fa-solid fa-comments\"></i> Prompts\n @if (loadingStates.prompts) {\n <span style=\"margin-left: 8px;\"><i class=\"fa-solid fa-spinner fa-spin\" style=\"font-size: 12px;\"></i></span>\n } @else if (promptCount > 0) {\n <span> ({{ promptCount }})</span>\n }\n </ng-template>\n <div class=\"panel-content\">\n <div class=\"section-header\">\n <div class=\"prompt-controls\">\n <!-- Model Selection Mode Control -->\n <div class=\"model-selection-mode\">\n <label class=\"model-selection-label\">\n <i class=\"fa-solid fa-sliders\"></i>\n Model Selection:\n </label>\n @if (EditMode) {\n <mj-dropdown\n [(ngModel)]=\"record.ModelSelectionMode\"\n name=\"modelSelectionMode\"\n [Data]=\"modelSelectionModes\"\n TextField=\"text\"\n ValueField=\"value\"\n [ValuePrimitive]=\"true\"\n class=\"model-selection-dropdown\">\n </mj-dropdown>\n } @else {\n <span class=\"model-selection-value\">{{ record.ModelSelectionMode || 'Agent Type' }}</span>\n }\n </div>\n </div>\n <div class=\"header-actions\">\n @if (EditMode && UserCanCreateNewPrompts) {\n <button mjButton variant=\"primary\" size=\"sm\" (click)=\"addPrompt()\">\n <i class=\"fa-solid fa-plus\"></i> Add Prompt\n </button>\n }\n </div>\n </div>\n @if (promptCount === 0) {\n <div class=\"empty-state\">\n <i class=\"fa-solid fa-comments\"></i>\n <h4>No Prompts Configured</h4>\n <p>Add prompts to define how this agent processes requests and generates responses.</p>\n @if (EditMode && UserCanCreateNewPrompts) {\n <button mjButton variant=\"primary\" (click)=\"addPrompt()\">\n <i class=\"fa-solid fa-plus\"></i> Create First Prompt\n </button>\n }\n </div>\n } @else {\n <div class=\"entity-list\">\n @for (prompt of agentPrompts; track prompt.ID) {\n <div class=\"entity-item prompt-item\" (click)=\"navigateToEntity('MJ: AI Prompts', prompt.ID)\">\n <div class=\"item-icon\">\n <i class=\"fa-solid fa-comment-dots\"></i>\n </div>\n <div class=\"item-content\">\n <div class=\"item-title\">{{ prompt.Name }}</div>\n @if (prompt.TemplateText) {\n <div class=\"item-preview\">{{ prompt.TemplateText.substring(0, 120) }}{{ prompt.TemplateText.length > 120 ? '...' : '' }}</div>\n }\n <div class=\"item-meta\">\n @if (prompt.PromptRole) {\n <span class=\"meta-tag\">{{ prompt.PromptRole }}</span>\n }\n </div>\n </div>\n <div class=\"item-actions\">\n @if (EditMode && UserCanCreatePrompts) {\n <button mjButton\n variant=\"flat\"\n size=\"sm\"\n (click)=\"openPromptAdvancedSettings(prompt, $event)\"\n title=\"Advanced settings\">\n <i class=\"fa-solid fa-cog\"></i>\n </button>\n }\n @if (EditMode && UserCanDeletePrompts) {\n <button mjButton\n variant=\"flat\"\n size=\"sm\"\n (click)=\"removePrompt(prompt, $event)\"\n title=\"Remove prompt\"\n class=\"error-action\">\n <i class=\"fa-solid fa-trash\"></i>\n </button>\n }\n <i class=\"fa-solid fa-external-link\"></i>\n </div>\n </div>\n }\n @if (promptCount > agentPrompts.length) {\n <div class=\"view-more-item\" (click)=\"navigateToEntity('MJ: AI Prompts', '')\">\n <span>View all {{ promptCount }} prompts...</span>\n </div>\n }\n </div>\n }\n </div>\n </mj-accordion-panel>\n }\n <!-- Learning & Analytics -->\n @if (record.ID) {\n <mj-accordion-panel id=\"learning\"\n [Expanded]=\"GetSectionExpanded('learning', false)\"\n [Disabled]=\"loadingStates.learningCycles\">\n <ng-template mjAccordionTitle>\n <i class=\"fa-solid fa-brain\"></i> Learning Cycles\n @if (loadingStates.learningCycles) {\n <span style=\"margin-left: 8px;\"><i class=\"fa-solid fa-spinner fa-spin\" style=\"font-size: 12px;\"></i></span>\n } @else if (learningCycleCount > 0) {\n <span> ({{ learningCycleCount }})</span>\n }\n </ng-template>\n <div class=\"panel-content\">\n <div class=\"section-header\">\n <div class=\"section-description\">\n Monitor and manage learning cycles, training sessions, and performance analytics.\n </div>\n </div>\n @if (learningCycleCount === 0) {\n <div class=\"empty-state\">\n <i class=\"fa-solid fa-brain\"></i>\n <h4>No Learning Cycles</h4>\n <p>Learning cycles will appear here as the agent processes requests and improves over time.</p>\n </div>\n } @else {\n <div class=\"entity-list\">\n @for (cycle of learningCycles; track cycle.ID) {\n <div class=\"entity-item learning-item\" (click)=\"navigateToEntity('MJ: AI Agent Learning Cycles', cycle.ID)\">\n <div class=\"item-icon\">\n <i class=\"fa-solid fa-brain\"></i>\n </div>\n <div class=\"item-content\">\n <div class=\"item-title\">Learning Cycle {{ cycle.ID.substring(0, 8) }}</div>\n <div class=\"item-meta\">\n @if (cycle.StartedAt) {\n <span class=\"meta-tag\">\n <i class=\"fa-solid fa-calendar\"></i>\n {{ cycle.StartedAt | date:'short' }}\n </span>\n }\n @if (cycle.Status) {\n <span class=\"status-tag\">{{ cycle.Status }}</span>\n }\n </div>\n </div>\n <div class=\"item-actions\">\n <i class=\"fa-solid fa-external-link\"></i>\n </div>\n </div>\n }\n @if (learningCycleCount > learningCycles.length) {\n <div class=\"view-more-item\" (click)=\"navigateToEntity('MJ: AI Agent Learning Cycles', '')\">\n <span>View all {{ learningCycleCount }} cycles...</span>\n </div>\n }\n </div>\n }\n </div>\n </mj-accordion-panel>\n }\n <!-- Notes & Documentation -->\n @if (record.ID) {\n <mj-accordion-panel id=\"notes\"\n [Expanded]=\"GetSectionExpanded('notes', false)\"\n [Disabled]=\"loadingStates.notes\">\n <ng-template mjAccordionTitle>\n <i class=\"fa-solid fa-sticky-note\"></i> Notes\n @if (loadingStates.notes) {\n <span style=\"margin-left: 8px;\"><i class=\"fa-solid fa-spinner fa-spin\" style=\"font-size: 12px;\"></i></span>\n } @else if (noteCount > 0) {\n <span> ({{ noteCount }})</span>\n }\n </ng-template>\n <div class=\"panel-content\">\n <div class=\"section-header\">\n <div class=\"section-description\">\n Manage notes, documentation, and annotations for this agent.\n </div>\n <div class=\"header-actions\">\n @if (EditMode && UserCanCreateNotes) {\n <button mjButton variant=\"primary\" size=\"sm\" (click)=\"addNote()\">\n <i class=\"fa-solid fa-plus\"></i> Add Note\n </button>\n }\n </div>\n </div>\n @if (noteCount === 0) {\n <div class=\"empty-state\">\n <i class=\"fa-solid fa-sticky-note\"></i>\n <h4>No Notes</h4>\n <p>Add notes to document important information, observations, or instructions for this agent.</p>\n @if (EditMode && UserCanCreateNotes) {\n <button mjButton variant=\"primary\" (click)=\"addNote()\">\n <i class=\"fa-solid fa-plus\"></i> Create First Note\n </button>\n }\n </div>\n } @else {\n <div class=\"entity-list\">\n @for (note of agentNotes; track note.ID) {\n <div class=\"entity-item note-item\" (click)=\"navigateToEntity('MJ: AI Agent Notes', note.ID)\">\n <div class=\"item-icon\">\n <i class=\"fa-solid fa-sticky-note\"></i>\n </div>\n <div class=\"item-content\">\n <div class=\"item-title\">{{ note.Type || 'Note' }}</div>\n @if (note.Note) {\n <div class=\"item-preview\">{{ note.Note.substring(0, 100) }}{{ note.Note.length > 100 ? '...' : '' }}</div>\n }\n <div class=\"item-meta\">\n @if (note.__mj_CreatedAt) {\n <span class=\"meta-tag\">\n <i class=\"fa-solid fa-calendar\"></i>\n {{ note.__mj_CreatedAt | date:'short' }}\n </span>\n }\n </div>\n </div>\n <div class=\"item-actions\">\n <i class=\"fa-solid fa-external-link\"></i>\n </div>\n </div>\n }\n @if (noteCount > agentNotes.length) {\n <div class=\"view-more-item\" (click)=\"navigateToEntity('MJ: AI Agent Notes', '')\">\n <span>View all {{ noteCount }} notes...</span>\n </div>\n }\n </div>\n }\n </div>\n </mj-accordion-panel>\n }\n <!-- Payload -->\n <mj-accordion-panel id=\"payload\"\n [Expanded]=\"GetSectionExpanded('payload', false)\">\n <ng-template mjAccordionTitle>\n <i class=\"fa-solid fa-exchange-alt\"></i> Payload Management\n </ng-template>\n <div class=\"panel-content\">\n <div class=\"section-header\">\n <div class=\"section-description\">\n Configure how this agent handles data payloads, path routing, and validation between parent and child agents.\n </div>\n </div>\n <!-- Payload Scope Section -->\n <div class=\"payload-section\">\n <h3 class=\"payload-section-title\">\n <i class=\"fa-solid fa-target\"></i>\n Payload Scope\n </h3>\n <div class=\"payload-field-container\">\n <div class=\"payload-field-info\">\n <label class=\"payload-field-label\">Payload Scope Path</label>\n <p class=\"payload-field-description\">\n Specify a path within the parent payload that this sub-agent should operate on.\n Leave empty to receive the entire payload.\n </p>\n </div>\n <div class=\"payload-field-input\">\n <mj-form-field\n FieldName=\"PayloadScope\"\n Type=\"textbox\"\n Caption=\"\"\n [EditMode]=\"EditMode\"\n [Record]=\"record\"\n style=\"width: 100%;\">\n </mj-form-field>\n <div class=\"payload-field-example\">\n <i class=\"fa-solid fa-lightbulb\"></i>\n <span>Example: <code>/customer/profile</code> or <code>/analysis/results</code></span>\n </div>\n </div>\n </div>\n </div>\n <!-- Path Configuration Section -->\n <div class=\"payload-section\">\n <h3 class=\"payload-section-title\">\n <i class=\"fa-solid fa-route\"></i>\n Path Configuration\n </h3>\n <div class=\"payload-paths-grid\">\n <!-- Downstream Paths -->\n <div class=\"payload-path-card\">\n <div class=\"payload-path-header\">\n <div class=\"payload-path-icon downstream\">\n <i class=\"fa-solid fa-arrow-down\"></i>\n </div>\n <div class=\"payload-path-info\">\n <h4>Downstream Paths</h4>\n <p>JSON array of paths to pass to sub-agents</p>\n </div>\n </div>\n <div class=\"payload-path-content\">\n <div class=\"json-editor-container\">\n <mj-code-editor\n [value]=\"record.PayloadDownstreamPaths || '["*"]'\"\n [readonly]=\"!EditMode\"\n language=\"json\"\n [lineWrapping]=\"true\"\n style=\"height: 100px; width: 100%;\"\n (valueChange)=\"updatePayloadField('PayloadDownstreamPaths', $event)\">\n </mj-code-editor>\n </div>\n <div class=\"payload-path-hint\">\n <i class=\"fa-solid fa-info-circle\"></i>\n Use <code>[\"*\"]</code> to pass entire payload or specify paths like <code>[\"user.id\", \"order.*\"]</code>\n </div>\n </div>\n </div>\n <!-- Upstream Paths -->\n <div class=\"payload-path-card\">\n <div class=\"payload-path-header\">\n <div class=\"payload-path-icon upstream\">\n <i class=\"fa-solid fa-arrow-up\"></i>\n </div>\n <div class=\"payload-path-info\">\n <h4>Upstream Paths</h4>\n <p>JSON array of paths sub-agents can write back</p>\n </div>\n </div>\n <div class=\"payload-path-content\">\n <div class=\"json-editor-container\">\n <mj-code-editor\n [value]=\"record.PayloadUpstreamPaths || '["*"]'\"\n [readonly]=\"!EditMode\"\n language=\"json\"\n [lineWrapping]=\"true\"\n style=\"height: 100px; width: 100%;\"\n (valueChange)=\"updatePayloadField('PayloadUpstreamPaths', $event)\">\n </mj-code-editor>\n </div>\n <div class=\"payload-path-hint\">\n <i class=\"fa-solid fa-info-circle\"></i>\n Use <code>[\"*\"]</code> to allow all writes or limit to specific paths\n </div>\n </div>\n </div>\n <!-- Self Read Paths -->\n <div class=\"payload-path-card\">\n <div class=\"payload-path-header\">\n <div class=\"payload-path-icon self-read\">\n <i class=\"fa-solid fa-eye\"></i>\n </div>\n <div class=\"payload-path-info\">\n <h4>Self Read Paths</h4>\n <p>JSON array of paths this agent can read</p>\n </div>\n </div>\n <div class=\"payload-path-content\">\n <div class=\"json-editor-container\">\n <mj-code-editor\n [value]=\"record.PayloadSelfReadPaths || '[]'\"\n [readonly]=\"!EditMode\"\n language=\"json\"\n [lineWrapping]=\"true\"\n style=\"height: 100px; width: 100%;\"\n (valueChange)=\"updatePayloadField('PayloadSelfReadPaths', $event)\">\n </mj-code-editor>\n </div>\n <div class=\"payload-path-hint\">\n <i class=\"fa-solid fa-info-circle\"></i>\n Paths this agent's prompts can read from the payload\n </div>\n </div>\n </div>\n <!-- Self Write Paths -->\n <div class=\"payload-path-card\">\n <div class=\"payload-path-header\">\n <div class=\"payload-path-icon self-write\">\n <i class=\"fa-solid fa-pen\"></i>\n </div>\n <div class=\"payload-path-info\">\n <h4>Self Write Paths</h4>\n <p>JSON array of paths this agent can write to</p>\n </div>\n </div>\n <div class=\"payload-path-content\">\n <div class=\"json-editor-container\">\n <mj-code-editor\n [value]=\"record.PayloadSelfWritePaths || '[]'\"\n [readonly]=\"!EditMode\"\n language=\"json\"\n [lineWrapping]=\"true\"\n style=\"height: 100px; width: 100%;\"\n (valueChange)=\"updatePayloadField('PayloadSelfWritePaths', $event)\">\n </mj-code-editor>\n </div>\n <div class=\"payload-path-hint\">\n <i class=\"fa-solid fa-info-circle\"></i>\n Paths this agent's prompts can write back to the payload\n </div>\n </div>\n </div>\n </div>\n </div>\n <!-- Validation Section -->\n <div class=\"payload-section\">\n <h3 class=\"payload-section-title\">\n <i class=\"fa-solid fa-shield-check\"></i>\n Final Payload Validation\n </h3>\n <div class=\"payload-validation-container\">\n <div class=\"payload-validation-settings\">\n <div class=\"validation-field-group\">\n <label class=\"validation-field-label\">Validation Mode</label>\n <p class=\"validation-field-description\">How to handle validation failures</p>\n <mj-form-field\n FieldName=\"FinalPayloadValidationMode\"\n Type=\"dropdownlist\"\n Caption=\"\"\n [EditMode]=\"EditMode\"\n [Record]=\"record\"\n style=\"width: 100%;\">\n </mj-form-field>\n </div>\n <div class=\"validation-field-group\">\n <label class=\"validation-field-label\">Max Retries</label>\n <p class=\"validation-field-description\">Maximum validation retry attempts</p>\n <mj-form-field\n FieldName=\"FinalPayloadValidationMaxRetries\"\n Type=\"numerictextbox\"\n Caption=\"\"\n [EditMode]=\"EditMode\"\n [Record]=\"record\"\n style=\"width: 100%;\">\n </mj-form-field>\n </div>\n </div>\n <div class=\"payload-validation-schema\">\n <label class=\"validation-schema-label\">\n <i class=\"fa-solid fa-code\"></i>\n Validation Schema\n </label>\n <p class=\"validation-schema-description\">\n JSON schema or validation rules for the final payload structure\n </p>\n <div class=\"validation-schema-editor\">\n <mj-code-editor\n [value]=\"record.FinalPayloadValidation || '{}'\"\n [readonly]=\"!EditMode\"\n language=\"json\"\n [lineWrapping]=\"true\"\n style=\"height: 200px; width: 100%;\"\n (valueChange)=\"updatePayloadField('FinalPayloadValidation', $event)\">\n </mj-code-editor>\n </div>\n </div>\n </div>\n </div>\n </div>\n </mj-accordion-panel>\n <!-- Execution Guardrails (New Separate Panel) -->\n <mj-accordion-panel id=\"guardrails\"\n [Expanded]=\"GetSectionExpanded('guardrails', false)\">\n <ng-template mjAccordionTitle>\n <i class=\"fa-solid fa-shield-halved\"></i> Execution Guardrails\n </ng-template>\n <div class=\"panel-content\">\n <div class=\"section-header\">\n <div class=\"section-description\">\n Set limits to prevent runaway agent executions and control resource usage.\n </div>\n </div>\n <div class=\"form-fields-grid\">\n <mj-form-field\n FieldName=\"MaxCostPerRun\"\n Type=\"numerictextbox\"\n Caption=\"Max Cost ($)\"\n Description=\"Maximum cost per run\"\n [EditMode]=\"EditMode\"\n [Record]=\"record\">\n </mj-form-field>\n <mj-form-field\n FieldName=\"MaxTokensPerRun\"\n Type=\"numerictextbox\"\n Caption=\"Max Tokens\"\n Description=\"Maximum tokens per run\"\n [EditMode]=\"EditMode\"\n [Record]=\"record\">\n </mj-form-field>\n <mj-form-field\n FieldName=\"MaxIterationsPerRun\"\n Type=\"numerictextbox\"\n Caption=\"Max Iterations\"\n Description=\"Maximum prompt iterations\"\n [EditMode]=\"EditMode\"\n [Record]=\"record\">\n </mj-form-field>\n <mj-form-field\n FieldName=\"MaxTimePerRun\"\n Type=\"numerictextbox\"\n Caption=\"Max Time (seconds)\"\n Description=\"Maximum execution time\"\n [EditMode]=\"EditMode\"\n [Record]=\"record\">\n </mj-form-field>\n </div>\n </div>\n </mj-accordion-panel>\n <!-- Configuration (Settings Panel) -->\n <mj-accordion-panel id=\"config\"\n [Expanded]=\"GetSectionExpanded('config', false)\">\n <ng-template mjAccordionTitle>\n <i class=\"fa-solid fa-cogs\"></i> Configuration\n </ng-template>\n <div class=\"panel-content\">\n <div class=\"section-header\">\n <div class=\"section-description\">\n Configure agent behavior, execution settings, and advanced features.\n </div>\n </div>\n <!-- Identity & Behavior Section -->\n <div class=\"config-section\">\n <h3 class=\"config-section-title\">\n <i class=\"fa-solid fa-id-card\"></i>\n Identity & Behavior\n </h3>\n <div class=\"config-grid\">\n <div class=\"config-card\">\n <div class=\"config-card-header\">\n <div class=\"config-card-icon\">\n <i class=\"fa-solid fa-toggle-on\"></i>\n </div>\n <div class=\"config-card-info\">\n <h4>Agent Status</h4>\n <p>Current availability and operational status</p>\n </div>\n </div>\n <div class=\"config-card-content\">\n @if (EditMode) {\n <mj-dropdown\n [(ngModel)]=\"record.Status\"\n [Data]=\"statusOptions\"\n TextField=\"text\"\n ValueField=\"value\"\n [ValuePrimitive]=\"true\"\n name=\"agentStatus\"\n class=\"config-field-input\">\n </mj-dropdown>\n } @else {\n <span class=\"config-field-display\">{{ record.Status || 'Not Set' }}</span>\n }\n </div>\n </div>\n <div class=\"config-card\">\n <div class=\"config-card-header\">\n <div class=\"config-card-icon\">\n <i class=\"fa-solid fa-sitemap\"></i>\n </div>\n <div class=\"config-card-info\">\n <h4>Agent Type</h4>\n <p>Category and system-level behavior</p>\n </div>\n </div>\n <div class=\"config-card-content\">\n @if (EditMode) {\n <mj-dropdown\n [(ngModel)]=\"record.TypeID\"\n [Data]=\"agentTypes\"\n TextField=\"Name\"\n ValueField=\"ID\"\n [ValuePrimitive]=\"true\"\n name=\"agentTypeID\"\n class=\"config-field-input\">\n </mj-dropdown>\n } @else {\n <span class=\"config-field-display\">{{ record.Type || 'Not Set' }}</span>\n }\n </div>\n </div>\n <div class=\"config-card\">\n <div class=\"config-card-header\">\n <div class=\"config-card-icon\">\n <i class=\"fa-solid fa-folder-tree\"></i>\n </div>\n <div class=\"config-card-info\">\n <h4>Category</h4>\n <p>Organizational category for this agent</p>\n </div>\n </div>\n <div class=\"config-card-content\">\n @if (EditMode) {\n <mj-tree-dropdown\n [BranchConfig]=\"CategoryBranchConfig\"\n [Value]=\"SelectedCategoryKey\"\n SelectionMode=\"single\"\n SelectableTypes=\"branch\"\n Placeholder=\"Select a category...\"\n [Clearable]=\"true\"\n [EnableSearch]=\"true\"\n (ValueChange)=\"OnCategoryChange($event)\">\n </mj-tree-dropdown>\n } @else {\n <span class=\"config-field-display\">{{ record.Category || 'Not Set' }}</span>\n }\n </div>\n </div>\n <div class=\"config-card\">\n <div class=\"config-card-header\">\n <div class=\"config-card-icon\">\n <i class=\"fa-solid fa-bolt\"></i>\n </div>\n <div class=\"config-card-info\">\n <h4>Expose as Action</h4>\n <p>Make available as an action for other agents</p>\n </div>\n </div>\n <div class=\"config-card-content\">\n <mj-form-field\n FieldName=\"ExposeAsAction\"\n Type=\"checkbox\"\n Caption=\"\"\n [EditMode]=\"EditMode\"\n [Record]=\"record\">\n </mj-form-field>\n </div>\n </div>\n <div class=\"config-card full-width\">\n <div class=\"config-card-header\">\n <div class=\"config-card-icon\">\n <i class=\"fa-solid fa-align-left\"></i>\n </div>\n <div class=\"config-card-info\">\n <h4>Description</h4>\n <p>Detailed agent description and purpose</p>\n </div>\n </div>\n <div class=\"config-card-content\">\n <mj-form-field\n FieldName=\"Description\"\n Type=\"textarea\"\n Caption=\"\"\n [EditMode]=\"EditMode\"\n [Record]=\"record\"\n style=\"width: 100%;\">\n </mj-form-field>\n </div>\n </div>\n </div>\n </div>\n <!-- Execution Settings Section -->\n <div class=\"config-section\">\n <h3 class=\"config-section-title\">\n <i class=\"fa-solid fa-play\"></i>\n Execution Settings\n </h3>\n <div class=\"config-grid\">\n <div class=\"config-card\">\n <div class=\"config-card-header\">\n <div class=\"config-card-icon\">\n <i class=\"fa-solid fa-layer-group\"></i>\n </div>\n <div class=\"config-card-info\">\n <h4>Execution Mode</h4>\n <p>How sub-agents are executed</p>\n </div>\n </div>\n <div class=\"config-card-content\">\n <mj-form-field\n FieldName=\"ExecutionMode\"\n Type=\"dropdownlist\"\n Caption=\"\"\n [EditMode]=\"EditMode\"\n [Record]=\"record\">\n </mj-form-field>\n </div>\n </div>\n <div class=\"config-card\">\n <div class=\"config-card-header\">\n <div class=\"config-card-icon\">\n <i class=\"fa-solid fa-sort-numeric-down\"></i>\n </div>\n <div class=\"config-card-info\">\n <h4>Execution Order</h4>\n <p>Order when run with siblings</p>\n </div>\n </div>\n <div class=\"config-card-content\">\n <mj-form-field\n FieldName=\"ExecutionOrder\"\n Type=\"numerictextbox\"\n Caption=\"\"\n [EditMode]=\"EditMode\"\n [Record]=\"record\">\n </mj-form-field>\n </div>\n </div>\n <div class=\"config-card\">\n <div class=\"config-card-header\">\n <div class=\"config-card-icon\">\n <i class=\"fa-solid fa-tachometer-alt\"></i>\n </div>\n <div class=\"config-card-info\">\n <h4>Default Effort Level</h4>\n <p>Default effort level for all prompts (1-100)</p>\n </div>\n </div>\n <div class=\"config-card-content\">\n <mj-form-field\n FieldName=\"DefaultPromptEffortLevel\"\n Type=\"numerictextbox\"\n Caption=\"\"\n [EditMode]=\"EditMode\"\n [Record]=\"record\">\n </mj-form-field>\n <div class=\"config-card-hint\">\n <i class=\"fa-solid fa-info-circle\"></i>\n Higher values request more thorough reasoning (1=minimal, 100=maximum)\n </div>\n </div>\n </div>\n <div class=\"config-card\">\n <div class=\"config-card-header\">\n <div class=\"config-card-icon\">\n <i class=\"fa-solid fa-code\"></i>\n </div>\n <div class=\"config-card-info\">\n <h4>Driver Class</h4>\n <p>Custom implementation class</p>\n </div>\n </div>\n <div class=\"config-card-content\">\n <mj-form-field\n FieldName=\"DriverClass\"\n Type=\"textbox\"\n Caption=\"\"\n [EditMode]=\"EditMode\"\n [Record]=\"record\">\n </mj-form-field>\n </div>\n </div>\n </div>\n </div>\n <!-- Visual Identity Section -->\n <div class=\"config-section\">\n <h3 class=\"config-section-title\">\n <i class=\"fa-solid fa-palette\"></i>\n Visual Identity\n </h3>\n <div class=\"config-grid\">\n <div class=\"config-card\">\n <div class=\"config-card-header\">\n <div class=\"config-card-icon\">\n <i class=\"fa-solid fa-icons\"></i>\n </div>\n <div class=\"config-card-info\">\n <h4>Icon Class</h4>\n <p>Font Awesome icon class</p>\n </div>\n </div>\n <div class=\"config-card-content\">\n <mj-form-field\n FieldName=\"IconClass\"\n Type=\"textbox\"\n Caption=\"\"\n [EditMode]=\"EditMode\"\n [Record]=\"record\">\n </mj-form-field>\n <div class=\"config-card-hint\">\n <i class=\"fa-solid fa-info-circle\"></i>\n Example: <code>fa-solid fa-robot</code>\n </div>\n </div>\n </div>\n <div class=\"config-card\">\n <div class=\"config-card-header\">\n <div class=\"config-card-icon\">\n <i class=\"fa-solid fa-image\"></i>\n </div>\n <div class=\"config-card-info\">\n <h4>Logo URL</h4>\n <p>URL for agent logo image</p>\n </div>\n </div>\n <div class=\"config-card-content\">\n <mj-form-field\n FieldName=\"LogoURL\"\n Type=\"textbox\"\n Caption=\"\"\n [EditMode]=\"EditMode\"\n [Record]=\"record\">\n </mj-form-field>\n <div class=\"config-card-hint\">\n <i class=\"fa-solid fa-info-circle\"></i>\n Takes precedence over Icon Class\n </div>\n </div>\n </div>\n </div>\n </div>\n <!-- Context Compression Section -->\n <div class=\"config-section\">\n <h3 class=\"config-section-title\">\n <i class=\"fa-solid fa-compress\"></i>\n Context Compression\n </h3>\n <div class=\"config-grid\">\n <div class=\"config-card full-width\">\n <div class=\"config-card-header\">\n <div class=\"config-card-icon\">\n <i class=\"fa-solid fa-toggle-on\"></i>\n </div>\n <div class=\"config-card-info\">\n <h4>Enable Context Compression</h4>\n <p>Automatically compress conversation context when message threshold is reached</p>\n </div>\n </div>\n <div class=\"config-card-content\">\n <mj-form-field\n FieldName=\"EnableContextCompression\"\n Type=\"checkbox\"\n Caption=\"\"\n [EditMode]=\"EditMode\"\n [Record]=\"record\"\n (valueChange)=\"onContextCompressionToggle($event)\">\n </mj-form-field>\n </div>\n </div>\n @if (record.EnableContextCompression) {\n <div class=\"config-card\">\n <div class=\"config-card-header\">\n <div class=\"config-card-icon\">\n <i class=\"fa-solid fa-hashtag\"></i>\n </div>\n <div class=\"config-card-info\">\n <h4>Message Threshold</h4>\n <p>Messages before compression triggers</p>\n </div>\n </div>\n <div class=\"config-card-content\">\n <mj-form-field\n FieldName=\"ContextCompressionMessageThreshold\"\n Type=\"numerictextbox\"\n Caption=\"\"\n [EditMode]=\"EditMode\"\n [Record]=\"record\">\n </mj-form-field>\n </div>\n </div>\n <div class=\"config-card\">\n <div class=\"config-card-header\">\n <div class=\"config-card-icon\">\n <i class=\"fa-solid fa-save\"></i>\n </div>\n <div class=\"config-card-info\">\n <h4>Messages to Keep</h4>\n <p>Recent messages to retain uncompressed</p>\n </div>\n </div>\n <div class=\"config-card-content\">\n <mj-form-field\n FieldName=\"ContextCompressionMessageRetentionCount\"\n Type=\"numerictextbox\"\n Caption=\"\"\n [EditMode]=\"EditMode\"\n [Record]=\"record\">\n </mj-form-field>\n </div>\n </div>\n <div class=\"config-card\">\n <div class=\"config-card-header\">\n <div class=\"config-card-icon\">\n <i class=\"fa-solid fa-comment-dots\"></i>\n </div>\n <div class=\"config-card-info\">\n <h4>Compression Prompt</h4>\n <p>Prompt used for summarization</p>\n </div>\n </div>\n <div class=\"config-card-content\">\n @if (EditMode) {\n <div class=\"prompt-selector-container\">\n <div class=\"prompt-display\">\n @if (selectedContextCompressionPrompt) {\n <span class=\"prompt-name\">{{ selectedContextCompressionPrompt.Name }}</span>\n } @else {\n <span class=\"no-prompt\">No prompt selected</span>\n }\n </div>\n <div class=\"prompt-actions\">\n <button type=\"button\"\n mjButton\n variant=\"outline\"\n size=\"sm\"\n (click)=\"openContextCompressionPromptSelector()\"\n class=\"prompt-select-btn\">\n <i class=\"fa-solid fa-search\"></i>\n {{ selectedContextCompressionPrompt ? 'Change' : 'Select' }} Prompt\n </button>\n @if (selectedContextCompressionPrompt) {\n <button type=\"button\"\n mjButton\n variant=\"flat\"\n size=\"sm\"\n (click)=\"clearContextCompressionPrompt()\"\n class=\"prompt-clear-btn\"\n title=\"Clear selection\">\n <i class=\"fa-solid fa-times\"></i>\n </button>\n }\n </div>\n </div>\n } @else {\n <span class=\"config-field-display\">{{ selectedContextCompressionPrompt?.Name || record.ContextCompressionPrompt || 'Not Set' }}</span>\n }\n </div>\n </div>\n }\n </div>\n </div>\n </div>\n </mj-accordion-panel>\n </div>\n </form>\n</mj-record-form-container>\n}\n\n<!-- Permissions Dialog (from @memberjunction/ng-agents) -->\n@if (ShowPermissionsDialog) {\n <mj-agent-permissions-dialog\n [Agent]=\"record\"\n (Closed)=\"onPermissionsDialogClosed()\"\n (PermissionsChanged)=\"refreshRelatedData()\">\n </mj-agent-permissions-dialog>\n}"]}
|
|
1
|
+
{"version":3,"file":"ai-agent-form.component.js","sourceRoot":"","sources":["../../../../src/lib/custom/AIAgents/ai-agent-form.component.ts","../../../../src/lib/custom/AIAgents/ai-agent-form.component.html"],"names":[],"mappings":"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","sourcesContent":["import { Component, ViewContainerRef, ViewChild, AfterViewInit, OnDestroy, inject } from '@angular/core';\nimport { MJActionEntity, MJAIAgentActionEntity, MJAIAgentLearningCycleEntity, MJAIAgentNoteEntity, MJAIAgentPromptEntity, MJAIAgentTypeEntity, MJAIAgentRelationshipEntity } from '@memberjunction/core-entities';\nimport { MJAIAgentRunEntityExtended, MJAIPromptEntityExtended, MJAIAgentEntityExtended, } from \"@memberjunction/ai-core-plus\";\nimport { RegisterClass, MJGlobal , UUIDsEqual, NormalizeUUID } from '@memberjunction/global';\nimport { BaseFormComponent, BaseFormSectionComponent, CUSTOM_LAYOUT_TOOLBAR_CONFIG } from '@memberjunction/ng-base-forms';\nimport { CompositeKey, KeyValuePair, Metadata, RunView } from '@memberjunction/core';\nimport { TreeBranchConfig } from '@memberjunction/ng-trees';\nimport { UserInfoEngine } from '@memberjunction/core-entities';\nimport { MJNotificationService } from '@memberjunction/ng-notifications';\nimport { MJAIAgentFormComponent } from '../../generated/Entities/MJAIAgent/mjaiagent.form.component';\nimport { MJDialogService } from '@memberjunction/ng-ui-components';\nimport { SharedService } from '@memberjunction/ng-shared';\nimport { AIAgentManagementService } from './ai-agent-management.service';\nimport { AITestHarnessDialogService } from '@memberjunction/ng-ai-test-harness';\nimport { firstValueFrom, Subject } from 'rxjs';\nimport { takeUntil } from 'rxjs/operators';\nimport { PromptSelectorResult } from './prompt-selector-dialog.component';\nimport { AIEngineBase } from '@memberjunction/ai-engine-base';\nimport { ActionEngineBase } from '@memberjunction/actions-base';\nimport { PromptSelectorDialogComponent } from './prompt-selector-dialog.component';\nimport { CreateAgentService, CreateAgentResult } from '@memberjunction/ng-agents';\nimport { SearchScopeChildGridColumn } from '@memberjunction/ng-search';\n// AgentPermissionsDialogComponent is now from @memberjunction/ng-agents (shown via ShowPermissionsDialog flag)\n\n/**\n * Type for sub-agent filter options\n */\nexport type SubAgentFilterType = 'all' | 'child' | 'related';\n\n/**\n * Interface for unified sub-agent display\n */\nexport interface UnifiedSubAgent {\n agent: MJAIAgentEntityExtended;\n type: 'child' | 'related';\n relationship?: MJAIAgentRelationshipEntity; // Only for related sub-agents\n}\n\n/**\n * Enhanced AI Agent form component that extends the auto-generated base form\n * with comprehensive agent management capabilities including test harness integration,\n * related entity management, and execution history tracking.\n * \n * ## Key Features:\n * - **Integrated Test Harness**: Built-in access to agent testing capabilities\n * - **Related Entity Management**: Display and manage sub-agents, prompts, and actions\n * - **Execution History**: View recent agent runs with status and timing information\n * - **Rich UI Components**: Enhanced cards, badges, and status indicators\n * - **Navigation Support**: Links to related entities and management functions\n * \n * ## Form Sections:\n * - **Agent Details**: Basic agent configuration and settings\n * - **Sub-Agents**: Hierarchical agent relationships\n * - **Prompts**: Associated prompts with priority ordering\n * - **Actions**: Available actions and configurations\n * - **Execution History**: Recent runs with detailed status information\n * \n * ## Usage:\n * This component is automatically loaded when editing AI Agent entities through\n * the MemberJunction form system. It extends the base generated form with\n * additional functionality while maintaining full compatibility.\n * \n * @example\n * ```html\n * <!-- Automatically used by form system -->\n * <mj-ai-agent-form [recordId]=\"agentId\"></mj-ai-agent-form>\n * ```\n */\n@RegisterClass(BaseFormComponent, 'MJ: AI Agents')\n@Component({\n standalone: false,\n selector: 'mj-ai-agent-form',\n templateUrl: './ai-agent-form.component.html',\n styleUrls: ['./ai-agent-form.component.css']\n})\nexport class MJAIAgentFormComponentExtended extends MJAIAgentFormComponent implements OnDestroy {\n /** The AI Agent entity being edited */\n public record!: MJAIAgentEntityExtended;\n\n /** Toolbar config — hide right-hand section controls since this form has a custom layout */\n public readonly toolbarConfig = CUSTOM_LAYOUT_TOOLBAR_CONFIG;\n\n /** Custom-layout AI Agent form looks best full-width on first open. */\n public override getDefaultFormWidthMode(): 'centered' | 'full-width' { return 'full-width'; }\n \n /** Subject for managing component lifecycle and cleaning up subscriptions */\n private destroy$ = new Subject<void>();\n \n /** Track active timeouts for cleanup */\n private activeTimeouts: number[] = [];\n \n /** Helper method to create tracked setTimeout calls */\n private setTrackedTimeout(callback: () => void, delay: number): number {\n const timeoutId = setTimeout(() => {\n // Remove from tracking array when timeout executes\n this.removeTimeoutFromTracking(timeoutId);\n callback();\n }, delay) as any as number;\n \n this.activeTimeouts.push(timeoutId);\n return timeoutId;\n }\n \n /** Remove timeout from tracking array */\n private removeTimeoutFromTracking(timeoutId: number): void {\n const index = this.activeTimeouts.indexOf(timeoutId);\n if (index > -1) {\n this.activeTimeouts.splice(index, 1);\n }\n }\n \n /** ViewChild for dynamic custom section container */\n private _customSectionContainer!: ViewContainerRef;\n @ViewChild('customSectionContainer', { read: ViewContainerRef }) \n set customSectionContainer(container: ViewContainerRef) {\n this._customSectionContainer = container;\n // When the container becomes available, load the custom section if needed\n if (container && this.agentType?.UIFormSectionKey && !this.customSectionLoaded) {\n this.setTrackedTimeout(() => this.loadCustomFormSection(), 0);\n }\n }\n get customSectionContainer(): ViewContainerRef {\n return this._customSectionContainer;\n }\n \n /** The agent type entity for this agent */\n public agentType: MJAIAgentTypeEntity | null = null;\n \n /** Reference to the dynamically loaded custom section component */\n private customSectionComponent: BaseFormSectionComponent | null = null;\n \n /** Track if custom section has been loaded to avoid reloading */\n private customSectionLoaded = false;\n \n /** Track the component reference to check if it still exists */\n private customSectionComponentRef: any = null;\n \n /** Update custom section when EditMode changes */\n ngDoCheck() {\n if (this.customSectionComponent && this.customSectionComponent.EditMode !== this.EditMode) {\n this.customSectionComponent.EditMode = this.EditMode;\n }\n }\n \n \n \n // === Related Entity Counts ===\n /** Number of sub-agents under this agent (for backward compatibility) */\n public get subAgentCount(): number {\n return this.allSubAgents.length;\n }\n\n /** Number of child sub-agents (ParentID-based) */\n public get childSubAgentCount(): number {\n return this.allSubAgents.filter(s => s.type === 'child').length;\n }\n\n /** Number of related sub-agents (Relationship-based) */\n public get relatedSubAgentCount(): number {\n return this.allSubAgents.filter(s => s.type === 'related').length;\n }\n\n /** Total number of sub-agents across both types */\n public get totalSubAgentCount(): number {\n return this.allSubAgents.length;\n }\n\n /** Number of prompts associated with this agent */\n public get promptCount(): number {\n return this.agentPrompts.length;\n }\n\n /** Number of actions configured for this agent */\n public get actionCount(): number {\n return this.agentActions.length;\n }\n\n /** Number of learning cycles for this agent */\n public get learningCycleCount(): number {\n return this.learningCycles.length;\n }\n\n /** Number of notes associated with this agent */\n public get noteCount(): number {\n return this.agentNotes.length;\n }\n\n /** Number of execution history records */\n public get executionHistoryCount(): number {\n return this.recentExecutions.length;\n }\n\n // === Related Entity Data for Display ===\n /** Array of sub-agent entities for card display (DEPRECATED - use allSubAgents) */\n public subAgents: MJAIAgentEntityExtended[] = [];\n\n /** Unified sub-agent data (both child and related) */\n private allSubAgents: UnifiedSubAgent[] = [];\n\n /** Current filter for sub-agents display */\n public subAgentFilter: SubAgentFilterType = 'all';\n\n /** Filtered sub-agents based on current filter */\n public get filteredSubAgents(): UnifiedSubAgent[] {\n switch (this.subAgentFilter) {\n case 'child':\n return this.allSubAgents.filter(s => s.type === 'child');\n case 'related':\n return this.allSubAgents.filter(s => s.type === 'related');\n default:\n return this.allSubAgents;\n }\n }\n \n /** Array of agent prompt entities for card display */\n public agentPrompts: MJAIPromptEntityExtended[] = [];\n \n /** Array of agent action entities for card display */\n public agentActions: MJActionEntity[] = [];\n \n \n /** Array of learning cycle entities for display */\n public learningCycles: MJAIAgentLearningCycleEntity[] = [];\n \n /** Array of agent note entities for display */\n public agentNotes: MJAIAgentNoteEntity[] = [];\n \n /** Array of recent execution records for history display */\n public recentExecutions: MJAIAgentRunEntityExtended[] = [];\n public totalExecutionHistoryCount: number = 0;\n /** Track which execution cards are expanded */\n public expandedExecutions: { [key: string]: boolean } = {};\n\n /** Search functionality for execution history */\n public executionSearchText: string = '';\n public filteredExecutions: MJAIAgentRunEntityExtended[] = [];\n\n /** Pagination state for execution history */\n public executionHistoryPageSize: number = 20;\n public executionHistoryCurrentPage: number = 1;\n public isLoadingPage: boolean = false;\n /** Cache all loaded execution records for pagination */\n private allLoadedExecutions: MJAIAgentRunEntityExtended[] = [];\n \n // === Loading States ===\n /** Main loading state for initial data load */\n public isLoadingData = true;\n \n /** Individual loading states for each section, start off true until loading complete */\n public loadingStates = {\n executionHistory: true,\n subAgents: true,\n prompts: true,\n actions: true,\n learningCycles: true,\n notes: true,\n customSection: true,\n searchScopes: false\n };\n\n /** Column spec for the AIAgentSearchScope child grid (mockup #5). */\n public readonly AgentSearchScopeColumns: SearchScopeChildGridColumn[] = [\n { Field: 'SearchScopeID', Label: 'Scope', Type: 'lookup', LookupEntityName: 'MJ: Search Scopes', LookupFilter: \"Status='Active'\", Width: '200px' },\n { Field: 'Phase', Label: 'Phase', Type: 'select', Options: [\n { Label: 'Pre-Execution (injected before LLM)', Value: 'PreExecution' },\n { Label: 'Agent-Invoked (tool-callable)', Value: 'AgentInvoked' },\n { Label: 'Both', Value: 'Both' },\n ], Width: '220px' },\n { Field: 'Priority', Label: 'Priority', Type: 'number', Placeholder: 'e.g. 10', Width: '90px' },\n { Field: 'MaxResults', Label: 'Max Results', Type: 'number', Placeholder: '10', Width: '110px' },\n { Field: 'MinScore', Label: 'Min Score', Type: 'number', Placeholder: '0.35', Width: '110px' },\n { Field: 'QueryTemplateID', Label: 'Query Template', Type: 'lookup', LookupEntityName: 'Templates', Width: '180px' },\n { Field: 'FusionWeightsOverride', Label: 'Fusion Weights Override', Type: 'code', Placeholder: '{ \"vector\": 2.0, \"fulltext\": 1.0 }' },\n { Field: 'IsDefault', Label: 'Default', Type: 'checkbox', Width: '80px' },\n ];\n\n /**\n * Read-only summary of SearchScopePermission rows that apply to the\n * scopes this agent is assigned to. Drives a small audit table inside\n * the agent form's Search section so an agent owner can see at a glance\n * who has access to the scopes their agent uses, without navigating\n * away to the Knowledge Hub Config dashboard's full audit surface.\n *\n * Each entry pairs a scope name with a list of permission rows\n * (principal type + name + level). Rebuilt whenever the agent's\n * AIAgentSearchScope assignments change.\n */\n public PermissionSummary: Array<{\n ScopeName: string;\n ScopeID: string;\n Permissions: Array<{\n Principal: string;\n PrincipalType: 'User' | 'Role';\n Level: string;\n }>;\n }> = [];\n\n public IsLoadingPermissions = false;\n\n /**\n * Loads the permission summary for the scopes currently assigned to\n * this agent. Called on agent load and after AIAgentSearchScope edits.\n */\n public async LoadPermissionSummary(): Promise<void> {\n if (!this.record?.ID) {\n this.PermissionSummary = [];\n return;\n }\n this.IsLoadingPermissions = true;\n try {\n const rv = new RunView();\n // 1. Fetch the agent's assigned scope IDs.\n const assigned = await rv.RunView<{ SearchScopeID: string; SearchScope?: string }>({\n EntityName: 'MJ: AI Agent Search Scopes',\n ExtraFilter: `AgentID='${this.record.ID}'`,\n Fields: ['SearchScopeID', 'SearchScope'],\n ResultType: 'simple',\n });\n if (!assigned.Success || !assigned.Results?.length) {\n this.PermissionSummary = [];\n return;\n }\n const scopeIds = assigned.Results.map(r => r.SearchScopeID);\n const scopeNames = new Map<string, string>(\n assigned.Results.map(r => [r.SearchScopeID, r.SearchScope ?? r.SearchScopeID])\n );\n\n // 2. Fetch all permission rows for those scopes in one batch.\n const idList = scopeIds.map(id => `'${id}'`).join(',');\n const perms = await rv.RunView<{\n SearchScopeID: string;\n UserID: string | null;\n RoleID: string | null;\n User?: string;\n Role?: string;\n PermissionLevel: string;\n }>({\n EntityName: 'MJ: Search Scope Permissions',\n ExtraFilter: `SearchScopeID IN (${idList})`,\n Fields: ['SearchScopeID', 'UserID', 'RoleID', 'User', 'Role', 'PermissionLevel'],\n ResultType: 'simple',\n });\n const rows = perms.Success ? (perms.Results ?? []) : [];\n\n // 3. Group by scope.\n this.PermissionSummary = scopeIds.map(scopeId => ({\n ScopeID: scopeId,\n ScopeName: scopeNames.get(scopeId) ?? scopeId,\n Permissions: rows\n .filter(r => UUIDsEqual(r.SearchScopeID, scopeId))\n .map(r => ({\n Principal: r.UserID ? (r.User ?? 'unknown user') : (r.Role ?? 'unknown role'),\n PrincipalType: (r.UserID ? 'User' : 'Role') as 'User' | 'Role',\n Level: r.PermissionLevel,\n })),\n }));\n } finally {\n this.IsLoadingPermissions = false;\n }\n }\n\n // === User Preferences ===\n private static readonly PREFS_KEY = 'ai-agent-form/preferences';\n private preferencesLoaded = false;\n\n /** Whether the form header is collapsed to a single compact line */\n public HeaderCollapsed = false;\n\n /** Tracked expanded/collapsed state for each panelbar section */\n public SectionStates: Record<string, boolean> = {};\n\n // === Dropdown Data ===\n /** Model selection mode options for the dropdown */\n public modelSelectionModes = [\n { text: 'Agent Type', value: 'Agent Type' },\n { text: 'Agent', value: 'Agent' }\n ];\n\n /** Agent status options for the dropdown */\n public statusOptions = [\n { text: 'Active', value: 'Active' },\n { text: 'Pending', value: 'Pending' },\n { text: 'Disabled', value: 'Disabled' }\n ];\n\n /** Agent types loaded from the database */\n public agentTypes: any[] = [];\n\n /** TreeDropdown configuration for the agent category field */\n public CategoryBranchConfig: TreeBranchConfig = {\n EntityName: 'MJ: AI Agent Categories',\n DisplayField: 'Name',\n ParentIDField: 'ParentID',\n DefaultIcon: 'fa-solid fa-folder',\n OrderBy: 'Name ASC',\n DescriptionField: 'Description'\n };\n\n /** Current category selection for the TreeDropdown */\n public SelectedCategoryKey: CompositeKey | null = null;\n\n /** Handle category selection change from the TreeDropdown */\n public OnCategoryChange(value: CompositeKey | CompositeKey[] | null): void {\n if (value && !Array.isArray(value)) {\n const idValue = value.KeyValuePairs?.find((kv: KeyValuePair) => kv.FieldName === 'ID')?.Value;\n this.record.CategoryID = idValue ?? null;\n } else {\n this.record.CategoryID = null;\n }\n this.SelectedCategoryKey = Array.isArray(value) ? null : value;\n }\n\n /** Currently selected context compression prompt */\n public selectedContextCompressionPrompt: any = null;\n\n /**\n * Loads agent types from the database for the dropdown\n * @private\n */\n private async loadAgentTypes(): Promise<void> {\n this.agentTypes = AIEngineBase.Instance.AgentTypes\n }\n\n /**\n * Loads the context compression prompt details for display\n * @private\n */\n private async loadContextCompressionPrompt(): Promise<void> {\n if (!this.record?.ContextCompressionPromptID) {\n this.selectedContextCompressionPrompt = null;\n return;\n }\n\n this.selectedContextCompressionPrompt = AIEngineBase.Instance.Prompts.find(p => UUIDsEqual(p.ID, this.record.ContextCompressionPromptID));\n if (!this.selectedContextCompressionPrompt) {\n console.warn('Context compression prompt not found:', this.record.ContextCompressionPromptID);\n }\n }\n\n /**\n * Opens the prompt selector dialog for context compression prompt\n */\n public async openContextCompressionPromptSelector(): Promise<void> {\n try {\n const dialogRef = this.dialogService.open({\n title: 'Select Context Compression Prompt',\n content: PromptSelectorDialogComponent,\n width: 800,\n height: 600\n });\n\n const promptSelector = dialogRef.Content!.instance as unknown as PromptSelectorDialogComponent;\n\n // Configure the prompt selector for single selection\n promptSelector.config = {\n title: 'Select Context Compression Prompt',\n multiSelect: false,\n selectedPromptIds: this.record.ContextCompressionPromptID ? [this.record.ContextCompressionPromptID] : [],\n showCreateNew: false\n };\n\n // Subscribe to the result\n promptSelector.result.subscribe({\n next: (result: PromptSelectorResult | null) => {\n if (result && result.selectedPrompts.length > 0) {\n const selectedPrompt = result.selectedPrompts[0];\n this.record.ContextCompressionPromptID = selectedPrompt.ID;\n this.selectedContextCompressionPrompt = selectedPrompt;\n this.cdr.detectChanges();\n }\n },\n error: (error: any) => {\n console.error('Error in prompt selector dialog:', error);\n }\n });\n } catch (error) {\n console.error('Error opening context compression prompt selector:', error);\n MJNotificationService.Instance.CreateSimpleNotification(\n 'Error opening prompt selector. Please try again.',\n 'error',\n 3000\n );\n }\n }\n\n /**\n * Clears the selected context compression prompt\n */\n public clearContextCompressionPrompt(): void {\n this.record.ContextCompressionPromptID = null;\n this.selectedContextCompressionPrompt = null;\n this.cdr.detectChanges();\n }\n\n // === Permission Checks for Related Entities ===\n /** Cache for permission checks to avoid repeated calculations */\n private _permissionCache = new Map<string, boolean>();\n\n // Main AI Agent permissions inherited from BaseFormComponent:\n // - UserCanEdit (Update permission)\n // - UserCanRead (Read permission) \n // - UserCanCreate (Create permission)\n // - UserCanDelete (Delete permission)\n\n /** Check if user can create AI Agent Actions */\n public get UserCanCreateActions(): boolean {\n return this.checkEntityPermission('MJ: AI Agent Actions', 'Create');\n }\n\n /** Check if user can update AI Agent Actions */\n public get UserCanUpdateActions(): boolean {\n return this.checkEntityPermission('MJ: AI Agent Actions', 'Update');\n }\n\n /** Check if user can delete AI Agent Actions */\n public get UserCanDeleteActions(): boolean {\n return this.checkEntityPermission('MJ: AI Agent Actions', 'Delete');\n }\n\n /** Check if user can create AI Agent Prompts */\n public get UserCanCreatePrompts(): boolean {\n return this.checkEntityPermission('MJ: AI Agent Prompts', 'Create');\n }\n\n /** Check if user can update AI Agent Prompts */\n public get UserCanUpdatePrompts(): boolean {\n return this.checkEntityPermission('MJ: AI Agent Prompts', 'Update');\n }\n\n /** Check if user can delete AI Agent Prompts */\n public get UserCanDeletePrompts(): boolean {\n return this.checkEntityPermission('MJ: AI Agent Prompts', 'Delete');\n }\n\n /** Check if user can create AI Agents (for sub-agents) */\n public get UserCanCreateSubAgents(): boolean {\n return this.checkEntityPermission('MJ: AI Agents', 'Create');\n }\n\n /** Check if user can update AI Agents (for sub-agents) */\n public get UserCanUpdateSubAgents(): boolean {\n return this.checkEntityPermission('MJ: AI Agents', 'Update');\n }\n\n /** Check if user can delete AI Agents (for sub-agents) */\n public get UserCanDeleteSubAgents(): boolean {\n return this.checkEntityPermission('MJ: AI Agents', 'Delete');\n }\n\n /** Check if user can create AI Agent Notes */\n public get UserCanCreateNotes(): boolean {\n return this.checkEntityPermission('MJ: AI Agent Notes', 'Create');\n }\n\n /** Check if user can update AI Agent Notes */\n public get UserCanUpdateNotes(): boolean {\n return this.checkEntityPermission('MJ: AI Agent Notes', 'Update');\n }\n\n /** Check if user can delete AI Agent Notes */\n public get UserCanDeleteNotes(): boolean {\n return this.checkEntityPermission('MJ: AI Agent Notes', 'Delete');\n }\n\n /** Check if user can view AI Agent Learning Cycles */\n public get UserCanViewLearningCycles(): boolean {\n return this.checkEntityPermission('MJ: AI Agent Learning Cycles', 'Read');\n }\n\n /** Check if user can view AI Agent Runs (execution history) */\n public get UserCanViewExecutionHistory(): boolean {\n return this.checkEntityPermission('MJ: AI Agent Runs', 'Read');\n }\n\n /** Check if user can create AI Prompts (needed for creating new prompts) */\n public get UserCanCreateAIPrompts(): boolean {\n return this.checkEntityPermission('MJ: AI Prompts', 'Create');\n }\n\n /** Check if user can create both AI Prompts and AI Agent Prompts (for createNewPrompt functionality) */\n public get UserCanCreateNewPrompts(): boolean {\n return this.UserCanCreateAIPrompts && this.UserCanCreatePrompts;\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 md = this.ProviderToUse;\n const entityInfo = md.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(md.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 // === Transaction-based editing support ===\n /** Now using BaseFormComponent's PendingRecords system exclusively */\n \n /** Flag to indicate if there are unsaved changes */\n public hasUnsavedChanges = false;\n \n // Emergency circuit breaker to prevent infinite loops\n private _changeDetectionCount = 0;\n private static readonly MAX_CHANGE_DETECTIONS = 50;\n\n // === Original State for Cancel/Revert ===\n /** Snapshots of original data for reverting UI changes */\n private originalSnapshots: {\n agentPrompts: MJAIPromptEntityExtended[];\n agentActions: MJActionEntity[];\n subAgents: MJAIAgentEntityExtended[];\n promptCount: number;\n actionCount: number;\n subAgentCount: number;\n learningCycleCount: number;\n noteCount: number;\n executionHistoryCount: number;\n } | null = null;\n\n // Dependency injection using inject() function\n private sharedService = inject(SharedService);\n private dialogService = inject(MJDialogService);\n private viewContainerRef = inject(ViewContainerRef);\n private agentManagementService = inject(AIAgentManagementService);\n private testHarnessService = inject(AITestHarnessDialogService);\n private createAgentService = inject(CreateAgentService);\n \n /**\n * After view initialization, load any custom form section if defined\n */\n async ngOnInit() {\n await super.ngOnInit();\n\n // Restore user preferences (header state, section expand/collapse)\n this.loadUserPreferences();\n\n // Load agent types for dropdown (needed for both new and existing records)\n await AIEngineBase.Instance.Config(false); // in UI context user and provider default to global\n await ActionEngineBase.Instance.Config(false);\n\n await this.loadAgentTypes();\n\n // Initialize category selection from the record's CategoryID\n const categoryId = this.record?.CategoryID;\n if (categoryId) {\n this.SelectedCategoryKey = new CompositeKey([{ FieldName: 'ID', Value: categoryId }]);\n }\n\n // Load context compression prompt if one is set\n if (this.record?.ContextCompressionPromptID) {\n await this.loadContextCompressionPrompt();\n }\n \n if (this.record?.ID) {\n await this.loadRelatedCounts(false); // no need to force refresh on initial load\n await this.loadCurrentAgentType();\n\n // Phase 2A: load the permission summary for the scopes this\n // agent is assigned to. Fire-and-forget — the panel renders an\n // IsLoadingPermissions skeleton while it resolves.\n void this.LoadPermissionSummary();\n\n // Schedule change detection - safer than manual detectChanges()\n this.cdr.markForCheck();\n\n // Defer custom section loading to next tick after DOM updates\n this.setTrackedTimeout(() => {\n this.loadCustomFormSection();\n }, 0);\n\n // Start background timer for running time updates\n this.startRunningTimeUpdater();\n }\n }\n\n /**\n * Loads counts and preview data for all related entities including sub-agents,\n * prompts, actions, learning cycles, notes, and execution history. \n * This data populates the various expander panels in the enhanced form interface.\n * @private\n */\n private async loadRelatedCounts(forceRefresh: boolean): Promise<void> {\n if (!this.record?.ID) return;\n\n // Reset pagination state on refresh\n if (forceRefresh) {\n this.executionHistoryCurrentPage = 1;\n this.isLoadingPage = false;\n this.allLoadedExecutions = [];\n // Don't clear recentExecutions - keep existing data visible while loading\n }\n\n // Set loading state\n this.isLoadingData = true;\n this.loadingStates = {\n executionHistory: true,\n subAgents: true,\n prompts: true,\n actions: true,\n learningCycles: true,\n notes: true,\n customSection: true,\n searchScopes: false\n };\n // markForCheck (not detectChanges) — we're invoked from inside ngOnInit's\n // await chain, which still sits within the host's CD pass. A synchronous\n // detectChanges() here forces a check whose results dev-mode checkNoChanges\n // re-verifies against state that further awaits below mutate (totalSubAgentCount\n // 0→1 etc.), producing NG0100. markForCheck schedules a future CD pass that\n // runs against fully-settled state.\n this.cdr.markForCheck();\n\n if (forceRefresh) {\n await AIEngineBase.Instance.Config(true); // force refresh\n }\n\n try {\n // Clear unified sub-agents array\n this.allSubAgents = [];\n\n // Track agent IDs we've already added so the same agent doesn't appear twice\n // when it's both a structural child (ParentID) AND has an entry in the\n // AI Agent Relationships table. Without this dedup, `filteredSubAgents`\n // emits two items with the same `agent.ID`, the @for(track item.agent.ID)\n // trips NG0955 (\"duplicated keys\") on every CD pass, and `totalSubAgentCount`\n // becomes inconsistent with the visible list. Normalize the UUID for the\n // Set key — see guides/UUID_COMPARISON_GUIDE.md.\n const seenSubAgentIds = new Set<string>();\n\n // Load child sub-agents (ParentID-based) — these take precedence over\n // relationship-based entries since ParentID is a structural relationship.\n const childAgents = AIEngineBase.Instance.Agents.filter(a => UUIDsEqual(a.ParentID, this.record.ID));\n for (const agent of childAgents) {\n const key = NormalizeUUID(agent.ID);\n if (seenSubAgentIds.has(key)) continue;\n seenSubAgentIds.add(key);\n this.allSubAgents.push({\n agent,\n type: 'child'\n });\n }\n\n // Also populate the deprecated subAgents array for backward compatibility\n this.subAgents = [...childAgents];\n\n // Load related sub-agents (Relationship-based)\n const rv = RunView.FromMetadataProvider(this.ProviderToUse);\n const relationshipsResult = await rv.RunView<MJAIAgentRelationshipEntity>({\n EntityName: 'MJ: AI Agent Relationships',\n ExtraFilter: `AgentID='${this.record.ID}' AND Status='Active'`,\n ResultType: 'entity_object'\n });\n\n if (relationshipsResult.Success && relationshipsResult.Results) {\n for (const relationship of relationshipsResult.Results) {\n const agent = AIEngineBase.Instance.Agents.find(\n a => UUIDsEqual(a.ID, relationship.SubAgentID)\n );\n\n if (!agent) continue;\n const key = NormalizeUUID(agent.ID);\n // Skip if the agent is already in the list as a child OR as another\n // active Relationship row pointing to the same SubAgentID.\n if (seenSubAgentIds.has(key)) continue;\n seenSubAgentIds.add(key);\n this.allSubAgents.push({\n agent,\n type: 'related',\n relationship\n });\n }\n }\n\n // Sort: child agents first, then by name\n this.allSubAgents.sort((a, b) => {\n if (a.type !== b.type) {\n return a.type === 'child' ? -1 : 1;\n }\n return (a.agent.Name || '').localeCompare(b.agent.Name || '');\n });\n\n this.agentPrompts = AIEngineBase.Instance.Prompts.filter(p => {\n const filteredAgentPrompts = AIEngineBase.Instance.AgentPrompts.filter(ap => UUIDsEqual(ap.AgentID, this.record.ID));\n return filteredAgentPrompts.some(ap => UUIDsEqual(ap.PromptID, p.ID));\n });\n\n this.agentActions = ActionEngineBase.Instance.Actions.filter(a => {\n const filteredAgentActions = AIEngineBase.Instance.AgentActions.filter(aa => UUIDsEqual(aa.AgentID, this.record.ID));\n return filteredAgentActions.some(aa => UUIDsEqual(aa.ActionID, a.ID));\n });\n\n // Execute all queries in a single batch for better performance\n const results = await rv.RunViews([\n // Learning cycles\n {\n EntityName: 'MJ: AI Agent Learning Cycles',\n // limit fields\n Fields: [\"ID\",\"Name\",\"StartedAt\", \"EndedAt\",\"Status\",\"AgentID\"],\n ExtraFilter: `AgentID='${this.record.ID}'`,\n OrderBy: 'StartedAt DESC'\n },\n // Notes\n {\n EntityName: 'MJ: AI Agent Notes',\n // limit fields\n Fields: [\"ID\",\"Name\", \"AgentID\", \"AgentNoteType\",\"AgentNoteTypeID\",\"UserID\"],\n ExtraFilter: `AgentID='${this.record.ID}'`\n },\n // Execution history (initial page)\n {\n EntityName: 'MJ: AI Agent Runs',\n Fields: [ // limit what we take from runs as this is where we can have a LOT come down if we include JSON fields\n \"ID\",\"AgentID\",\"ParentRunID\",\"Status\",\"StartedAt\",\"CompletedAt\",\n \"Success\",\"TotalTokensUsed\",\"TotalCost\",\"TotalCostRollUp\",\"TotalTokensUsedRollUp\",\n \"Configuration\",\"ConversationID\",\"Result\",\"ErrorMessage\",\"__mj_CreatedAt\"\n ],\n ExtraFilter: `AgentID='${this.record.ID}'`,\n OrderBy: '__mj_CreatedAt DESC',\n MaxRows: this.executionHistoryPageSize\n },\n // Agent permissions (to determine open-to-everyone state)\n {\n EntityName: 'MJ: AI Agent Permissions',\n Fields: ['ID'],\n ExtraFilter: `AgentID='${this.record.ID}'`,\n ResultType: 'simple'\n }\n ]);\n\n // Process results in the same order as queries\n if (results && results.length > 0) {\n this.learningCycles = results[0].Results as MJAIAgentLearningCycleEntity[] || [];\n\n this.agentNotes = results[1].Results as MJAIAgentNoteEntity[] || [];\n\n this.recentExecutions = results[2].Results as MJAIAgentRunEntityExtended[] || [];\n this.totalExecutionHistoryCount = results[2].TotalRowCount;\n\n // Initialize cache with first page of results\n this.allLoadedExecutions = [...this.recentExecutions];\n\n // Initialize filtered executions\n this.filteredExecutions = [...this.recentExecutions];\n\n // Determine open-to-everyone state from permissions query\n const permissionRows = results[3]?.Results || [];\n this.IsOpenToEveryone = permissionRows.length === 0;\n }\n\n // Create snapshot for cancel/revert functionality\n this.createOriginalSnapshot();\n } catch (error) {\n console.error('Error loading related data:', error);\n // Set all counts to 0 on error to ensure UI shows proper empty states\n } finally {\n // Clear loading states\n this.isLoadingData = false;\n this.loadingStates = {\n executionHistory: false,\n subAgents: false,\n prompts: false,\n actions: false,\n learningCycles: false,\n notes: false,\n customSection: false,\n searchScopes: false\n };\n // See the comment on the matching call at the top of this method:\n // markForCheck instead of detectChanges so we don't fight the parent\n // CD pass (this method runs inside ngOnInit's await chain).\n this.cdr.markForCheck();\n }\n }\n\n /**\n * Creates a snapshot of the current UI state for cancel/revert functionality\n * @private\n */\n private createOriginalSnapshot() {\n this.originalSnapshots = {\n agentPrompts: [...this.agentPrompts], // Deep copy of arrays\n agentActions: [...this.agentActions],\n subAgents: [...this.subAgents],\n promptCount: this.promptCount,\n actionCount: this.actionCount,\n subAgentCount: this.subAgentCount,\n learningCycleCount: this.learningCycleCount,\n noteCount: this.noteCount,\n executionHistoryCount: this.executionHistoryCount\n };\n }\n\n /**\n * Navigates to the next page of execution history\n */\n public async goToNextPage(): Promise<void> {\n if (!this.hasNextPage || this.isLoadingPage || !this.record?.ID) {\n return;\n }\n\n const nextPage = this.executionHistoryCurrentPage + 1;\n await this.loadPage(nextPage);\n }\n\n /**\n * Navigates to the previous page of execution history\n */\n public async goToPreviousPage(): Promise<void> {\n if (!this.hasPreviousPage || this.isLoadingPage) {\n return;\n }\n\n const previousPage = this.executionHistoryCurrentPage - 1;\n await this.loadPage(previousPage);\n }\n\n /**\n * Loads a specific page of execution history, using cache when available\n */\n private async loadPage(pageNumber: number): Promise<void> {\n if (!this.record?.ID) {\n return;\n }\n\n this.isLoadingPage = true;\n this.cdr.detectChanges();\n\n try {\n const startIndex = (pageNumber - 1) * this.executionHistoryPageSize;\n const endIndex = startIndex + this.executionHistoryPageSize;\n\n // Check if we have this page in cache\n const cachedPageData = this.allLoadedExecutions.slice(startIndex, endIndex);\n const hasFullPageInCache = cachedPageData.length === this.executionHistoryPageSize;\n const isLastPage = endIndex >= this.totalExecutionHistoryCount;\n const hasPartialPageInCache = isLastPage && cachedPageData.length > 0 &&\n cachedPageData.length === (this.totalExecutionHistoryCount - startIndex);\n\n if (hasFullPageInCache || hasPartialPageInCache) {\n // We have the page in cache (either full page or complete last page)\n this.executionHistoryCurrentPage = pageNumber;\n this.recentExecutions = cachedPageData;\n await this.applySearchFilter();\n } else {\n // Need to load from database\n const rv = RunView.FromMetadataProvider(this.ProviderToUse);\n const result = await rv.RunView<MJAIAgentRunEntityExtended>({\n EntityName: 'MJ: AI Agent Runs',\n Fields: [\n \"ID\",\"AgentID\",\"ParentRunID\",\"Status\",\"StartedAt\",\"CompletedAt\",\n \"Success\",\"TotalTokensUsed\",\"TotalCost\",\"TotalCostRollUp\",\"TotalTokensUsedRollUp\",\n \"Configuration\",\"ConversationID\",\"Result\",\"ErrorMessage\",\"__mj_CreatedAt\"\n ],\n ExtraFilter: `AgentID='${this.record.ID}'`,\n OrderBy: '__mj_CreatedAt DESC',\n MaxRows: this.executionHistoryPageSize,\n StartRow: startIndex > 0 ? startIndex : undefined,\n ResultType: 'entity_object'\n });\n\n if (result.Success && result.Results) {\n // Update cache - ensure we have enough space\n while (this.allLoadedExecutions.length < startIndex) {\n this.allLoadedExecutions.push(null as any);\n }\n\n // Insert the new results into cache\n this.allLoadedExecutions.splice(startIndex, result.Results.length, ...result.Results);\n\n this.executionHistoryCurrentPage = pageNumber;\n this.recentExecutions = result.Results;\n await this.applySearchFilter();\n }\n }\n } catch (error) {\n console.error('Error loading page:', error);\n } finally {\n this.isLoadingPage = false;\n this.cdr.detectChanges();\n }\n }\n\n /**\n * Checks if there is a next page available\n */\n public get hasNextPage(): boolean {\n const maxPage = Math.ceil(this.totalExecutionHistoryCount / this.executionHistoryPageSize);\n return this.executionHistoryCurrentPage < maxPage;\n }\n\n /**\n * Checks if there is a previous page available\n */\n public get hasPreviousPage(): boolean {\n return this.executionHistoryCurrentPage > 1;\n }\n\n /**\n * Gets the total number of pages\n */\n public get totalPages(): number {\n return Math.ceil(this.totalExecutionHistoryCount / this.executionHistoryPageSize);\n }\n\n /**\n * Loads the agent type entity for this agent\n * @private\n */\n private async loadCurrentAgentType(): Promise<void> {\n if (!this.record?.TypeID) {\n return;\n }\n \n try {\n const md = this.ProviderToUse;\n this.agentType = await md.GetEntityObject<MJAIAgentTypeEntity>('MJ: AI Agent Types');\n if (this.agentType) {\n await this.agentType.Load(this.record.TypeID);\n }\n } catch (error) {\n console.error('Error loading agent type:', error);\n this.agentType = null;\n }\n }\n \n /**\n * Dynamically loads a custom form section if the agent type defines one\n * @private\n */\n private loadCustomFormSection(): void {\n if (!this.agentType?.UIFormSectionKey || !this.customSectionContainer) {\n return;\n }\n\n // Check if component still exists in container\n if (this.customSectionLoaded && this.customSectionContainer.length > 0) {\n return;\n }\n\n this.loadingStates.customSection = true;\n this.cdr.markForCheck();\n\n try {\n // Build the full registration key (Entity.Section pattern)\n const sectionKey = `AI Agents.${this.agentType.UIFormSectionKey}`;\n\n // Get the component registration from the class factory\n const registration = MJGlobal.Instance.ClassFactory.GetRegistration(BaseFormSectionComponent, sectionKey);\n\n if (registration && registration.SubClass) {\n // Clear any existing custom section\n this.customSectionContainer.clear();\n\n // Create the component\n const componentRef = this.customSectionContainer.createComponent(registration.SubClass);\n this.customSectionComponent = componentRef.instance as BaseFormSectionComponent;\n this.customSectionComponentRef = componentRef;\n\n // Pass the record and edit mode to the custom section\n this.customSectionComponent.record = this.record;\n this.customSectionComponent.EditMode = this.EditMode;\n\n // Mark as loaded\n this.customSectionLoaded = true;\n }\n } catch (error) {\n console.error('Error loading custom form section:', error);\n } finally {\n this.loadingStates.customSection = false;\n this.cdr.markForCheck();\n }\n }\n\n /**\n * Handles state change events for the custom section panel\n * @param event The panel bar state change event\n */\n public onCustomSectionStateChange(event: { expanded: boolean }): void {\n // When panel is expanded, check if we need to load or reload the custom section\n if (event.expanded && this.agentType?.UIFormSectionKey) {\n // Always try to load on expand to handle cases where container might have been recreated\n this.setTrackedTimeout(() => {\n this.loadCustomFormSection();\n }, 0);\n }\n }\n\n // === User Preferences (Header & Section State) ===\n\n /** Load saved preferences for header state and section expand/collapse */\n private loadUserPreferences(): void {\n try {\n const raw = UserInfoEngine.Instance.GetSetting(MJAIAgentFormComponentExtended.PREFS_KEY);\n if (raw) {\n const prefs = JSON.parse(raw);\n this.HeaderCollapsed = prefs.headerCollapsed ?? false;\n this.SectionStates = prefs.sectionStates ?? {};\n }\n } catch (error) {\n console.error('Error loading AI Agent form preferences:', error);\n }\n this.preferencesLoaded = true;\n }\n\n /** Persist preferences with debounce */\n private persistPreferences(): void {\n if (!this.preferencesLoaded) return;\n const prefs = {\n headerCollapsed: this.HeaderCollapsed,\n sectionStates: this.SectionStates\n };\n UserInfoEngine.Instance.SetSettingDebounced(\n MJAIAgentFormComponentExtended.PREFS_KEY,\n JSON.stringify(prefs)\n );\n }\n\n /** Toggle the header between expanded and collapsed modes */\n public ToggleHeaderCollapsed(): void {\n this.HeaderCollapsed = !this.HeaderCollapsed;\n this.persistPreferences();\n this.cdr.detectChanges();\n }\n\n /** Get the expanded state for a panelbar section, falling back to a default */\n public GetSectionExpanded(sectionId: string, defaultValue: boolean): boolean {\n if (this.preferencesLoaded && sectionId in this.SectionStates) {\n return this.SectionStates[sectionId];\n }\n return defaultValue;\n }\n\n /** Handle panelbar stateChange — fires when any section expands or collapses */\n public OnPanelBarStateChange(event: { items: Array<{ id: string; expanded: boolean }> }): void {\n if (!event?.items) return;\n for (const item of event.items) {\n if (item.id) {\n this.SectionStates[item.id] = item.expanded;\n\n // Keep existing custom section load logic\n if (item.id === 'custom' && item.expanded) {\n this.onCustomSectionStateChange({ expanded: true });\n }\n }\n }\n this.persistPreferences();\n }\n\n /**\n * Restores the UI to its original state using saved snapshots\n * @private\n */\n private restoreFromSnapshots() {\n if (this.originalSnapshots) {\n // Restore arrays (create new copies to ensure reactivity)\n this.agentPrompts = [...this.originalSnapshots.agentPrompts];\n this.agentActions = [...this.originalSnapshots.agentActions];\n this.subAgents = [...this.originalSnapshots.subAgents];\n \n // Reset other UI state\n this.hasUnsavedChanges = false;\n \n // Mark for check instead of forcing immediate detection\n this.cdr.markForCheck();\n }\n }\n\n /**\n * Override CancelEdit to restore UI state when user cancels changes\n */\n public override CancelEdit(): void {\n \n // Set flag to indicate we're performing a cancel operation\n this.isPerformingCancel = true;\n \n try {\n // CRITICAL: Clear our pending records BEFORE calling parent\n // This ensures that any prompt/action/sub-agent changes we added don't persist\n this.PendingRecords.length = 0;\n \n // Call the parent CancelEdit first (this handles main record revert and pending records)\n super.CancelEdit();\n \n // Restore our UI state after parent cancel\n this.restoreFromSnapshots();\n \n // Reset the unsaved changes flag\n this.hasUnsavedChanges = false;\n } finally {\n // Always reset the flag\n this.isPerformingCancel = false;\n }\n }\n\n /**\n * Opens the integrated test harness for the current agent.\n * Validates that the agent has been saved before allowing testing.\n * Shows a notification if the agent needs to be saved first.\n */\n public openTestHarness() {\n if (!this.record?.ID) {\n MJNotificationService.Instance.CreateSimpleNotification(\n 'Please save the AI agent before testing',\n 'warning',\n 4000\n );\n return;\n }\n\n // Use the new test harness dialog service\n // Don't pass viewContainerRef so window is top-level\n this.testHarnessService.openForAgent(this.record.ID);\n }\n\n /**\n * Opens the permissions management dialog for this agent.\n * Allows viewing and editing user/role-based permissions for the agent.\n */\n /** Controls visibility of the new permissions dialog from @memberjunction/ng-agents */\n public ShowPermissionsDialog = false;\n\n /** True when no explicit permission records exist (agent is open to everyone) */\n public IsOpenToEveryone = true;\n\n public openPermissionsDialog() {\n if (!this.record?.ID) {\n MJNotificationService.Instance.CreateSimpleNotification(\n 'Please save the AI agent before managing permissions',\n 'warning',\n 4000\n );\n return;\n }\n this.ShowPermissionsDialog = true;\n }\n\n public async onPermissionsDialogClosed() {\n this.ShowPermissionsDialog = false;\n // Refresh open-to-everyone state in case permissions were added/removed\n await this.refreshPermissionState();\n }\n\n private async refreshPermissionState(): Promise<void> {\n if (!this.record?.ID) return;\n const rv = RunView.FromMetadataProvider(this.ProviderToUse);\n const result = await rv.RunView<{ID: string}>({\n EntityName: 'MJ: AI Agent Permissions',\n Fields: ['ID'],\n ExtraFilter: `AgentID='${this.record.ID}'`,\n ResultType: 'simple'\n });\n if (result.Success) {\n this.IsOpenToEveryone = (result.Results || []).length === 0;\n this.cdr.markForCheck();\n }\n }\n\n /**\n * Returns the appropriate color for the agent status badge.\n * Uses standard color coding: green for active, yellow for pending, gray for disabled.\n * @returns CSS color value for the status badge\n */\n public getStatusBadgeColor(): string {\n switch (this.record?.Status) {\n case 'Active': return 'var(--mj-status-success)';\n case 'Pending': return 'var(--mj-status-warning)';\n case 'Disabled': return 'var(--mj-text-muted)';\n default: return 'var(--mj-text-muted)';\n }\n }\n\n /**\n * Event handler for test harness visibility changes.\n * Updates the component state when the test harness is opened or closed.\n * @param isVisible - Whether the test harness is currently visible\n */\n\n /**\n * Gets the count of sub-agents\n */\n public getSubAgentCount(): number {\n return this.subAgentCount;\n }\n\n /**\n * Gets the count of prompts\n */\n public getPromptCount(): number {\n return this.promptCount;\n }\n\n /**\n * Gets the count of actions\n */\n public getActionCount(): number {\n return this.actionCount;\n }\n\n /**\n * Gets the icon for the execution mode\n */\n public getExecutionModeIcon(mode: string): string {\n switch (mode) {\n case 'Sequential':\n return 'fa-solid fa-list-ol';\n case 'Parallel':\n return 'fa-solid fa-layer-group';\n default:\n 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(): string {\n if (this.record?.LogoURL) {\n // LogoURL is used in img tag, not here\n return '';\n }\n return this.record?.IconClass || 'fa-solid fa-robot';\n }\n\n /**\n * Checks if the agent has a logo URL (for image display)\n */\n public hasLogoURL(): boolean {\n return !!this.record?.LogoURL;\n }\n\n /**\n * Gets the icon for a sub-agent\n * Prioritizes LogoURL, falls back to IconClass, then default robot icon\n */\n public getSubAgentIcon(subAgent: MJAIAgentEntityExtended): string {\n if (subAgent?.LogoURL) {\n // LogoURL is used in img tag, not here\n return '';\n }\n return subAgent?.IconClass || 'fa-solid fa-robot';\n }\n \n /**\n * Gets the icon class for an action\n * Falls back to default bolt icon if no IconClass is set\n */\n public getActionIcon(action: MJActionEntity): string {\n return action?.IconClass || 'fa-solid fa-bolt';\n }\n\n /**\n * Checks if a sub-agent has a logo URL\n */\n public hasSubAgentLogoURL(subAgent: MJAIAgentEntityExtended): boolean {\n return !!subAgent?.LogoURL;\n }\n\n /**\n * Creates a new sub-agent using the CreateAgentService slide-in panel.\n * Uses the new unified agent creation UI from @memberjunction/ng-agents.\n */\n public async createSubAgent() {\n try {\n this.createAgentService.OpenSubAgentSlideIn(\n this.record.ID,\n this.record.Name || 'Agent'\n ).pipe(takeUntil(this.destroy$)).subscribe({\n next: async (dialogResult) => {\n if (!dialogResult.Cancelled && dialogResult.Result) {\n await this.handleSubAgentCreated(dialogResult.Result);\n }\n },\n error: (error) => {\n console.error('Error in create sub-agent slide-in:', error);\n MJNotificationService.Instance.CreateSimpleNotification(\n 'Error opening sub-agent creation panel. Please try again.',\n 'error',\n 3000\n );\n }\n });\n } catch (error) {\n console.error('Error in createSubAgent:', error);\n MJNotificationService.Instance.CreateSimpleNotification(\n 'Error creating sub-agent. Please try again.',\n 'error',\n 3000\n );\n }\n }\n\n /**\n * Handles the result from the create sub-agent slide-in.\n * Adds entities to PendingRecords for atomic save with parent.\n */\n private async handleSubAgentCreated(result: CreateAgentResult): Promise<void> {\n try {\n const subAgent = result.Agent;\n\n // Handle deferred sub-agent creation if parent is not saved\n if (!this.record.IsSaved) {\n // Store a temporary reference to the parent - will be resolved during save\n subAgent.Set('_tempParentId', this.record.ID);\n }\n\n // Add the sub-agent to pending records\n this.PendingRecords.push({\n entityObject: subAgent,\n action: 'save'\n });\n\n // Add agent prompt links to pending records\n if (result.AgentPrompts) {\n for (const agentPrompt of result.AgentPrompts) {\n this.PendingRecords.push({\n entityObject: agentPrompt,\n action: 'save'\n });\n }\n }\n\n // Add agent action links to pending records\n if (result.AgentActions) {\n for (const agentAction of result.AgentActions) {\n this.PendingRecords.push({\n entityObject: agentAction,\n action: 'save'\n });\n }\n }\n\n // Update UI to show the new sub-agent\n this.subAgents.push(subAgent);\n this.hasUnsavedChanges = true;\n\n // Mark for check instead of forcing immediate detection\n this.cdr.markForCheck();\n\n MJNotificationService.Instance.CreateSimpleNotification(\n `Sub-agent \"${subAgent.Name}\" created and will be saved when you save the parent agent`,\n 'success',\n 4000\n );\n } catch (error) {\n console.error('Error processing created sub-agent:', error);\n MJNotificationService.Instance.CreateSimpleNotification(\n 'Error processing created sub-agent. Please try again.',\n 'error',\n 3000\n );\n }\n }\n\n /**\n * Adds a new prompt to the agent (deferred until save)\n */\n public async addPrompt() {\n // Get currently linked and pending prompt IDs for pre-selection\n const currentPromptIds = this.agentPrompts.map(ap => ap.ID);\n const pendingAddIds = this.PendingRecords\n .filter(p => p.entityObject.EntityInfo.Name === 'MJ: AI Agent Prompts' && p.action === 'save')\n .map(p => p.entityObject.Get('PromptID'));\n const allLinkedIds = [...currentPromptIds, ...pendingAddIds];\n \n try {\n this.agentManagementService.openPromptSelectorDialog({\n title: 'Add Prompts to Agent',\n multiSelect: true,\n selectedPromptIds: [],\n showCreateNew: true,\n linkedPromptIds: allLinkedIds,\n viewContainerRef: this.viewContainerRef\n }).pipe(takeUntil(this.destroy$)).subscribe({\n next: async (result) => {\n if (result && result.selectedPrompts.length > 0) {\n // Filter out already linked or pending prompts\n const newPrompts = result.selectedPrompts.filter(prompt =>\n !allLinkedIds.some(id => UUIDsEqual(id, prompt.ID))\n );\n \n if (newPrompts.length === 0) {\n MJNotificationService.Instance.CreateSimpleNotification(\n 'All selected prompts are already linked to this agent',\n 'info',\n 3000\n );\n return;\n }\n \n // Add to pending changes (defer until save)\n const md = this.ProviderToUse;\n for (const prompt of newPrompts) {\n const agentPrompt = await md.GetEntityObject<MJAIAgentPromptEntity>('MJ: AI Agent Prompts');\n agentPrompt.NewRecord();\n agentPrompt.AgentID = this.record.ID;\n agentPrompt.PromptID = prompt.ID;\n agentPrompt.Status = 'Active';\n agentPrompt.ExecutionOrder = 1;\n \n this.PendingRecords.push({\n entityObject: agentPrompt,\n action: 'save'\n });\n }\n \n this.hasUnsavedChanges = true;\n \n // Update UI to show the new prompts (cast to extended type for display)\n this.agentPrompts.push(...(newPrompts as MJAIPromptEntityExtended[]));\n \n // Mark for check instead of forcing immediate detection\n this.cdr.markForCheck();\n \n // Show success notification\n MJNotificationService.Instance.CreateSimpleNotification(\n `${newPrompts.length} prompt${newPrompts.length === 1 ? '' : 's'} will be added when you save the agent`,\n 'info',\n 4000\n );\n } else if (result && result.createNew) {\n // User wants to create a new prompt\n await this.createNewPrompt();\n }\n },\n error: (error) => {\n console.error('Error opening prompt selector:', error);\n MJNotificationService.Instance.CreateSimpleNotification(\n 'Error opening prompt selector. Please try again.',\n 'error',\n 3000\n );\n }\n });\n } catch (error) {\n console.error('Error in addPrompt:', error);\n MJNotificationService.Instance.CreateSimpleNotification(\n 'Error adding prompts. Please try again.',\n 'error',\n 3000\n );\n }\n }\n\n /**\n * Handle context compression toggle and reset related fields when disabled\n */\n public onContextCompressionToggle(value: any) {\n const enabled = value === true || value === 'true';\n if (!enabled) {\n // Reset context compression related fields to null when disabled\n this.record.ContextCompressionMessageThreshold = null;\n this.record.ContextCompressionPromptID = null;\n this.record.ContextCompressionMessageRetentionCount = null;\n \n // Mark for check instead of forcing immediate detection\n this.cdr.markForCheck();\n }\n }\n\n /**\n * Opens the modern Add Action dialog for selecting actions (deferred until save)\n */\n public async configureActions() {\n // Get currently linked and pending action IDs for pre-selection\n const currentActionIds = this.agentActions.map(aa => aa.ID);\n const pendingAddIds = this.PendingRecords\n .filter(p => p.entityObject.EntityInfo.Name === 'MJ: AI Agent Actions' && p.action === 'save')\n .map(p => p.entityObject.Get('ActionID'));\n const allLinkedIds = [...currentActionIds, ...pendingAddIds];\n \n this.agentManagementService.openAddActionDialog({\n agentId: this.record.ID,\n agentName: this.record.Name || 'Agent',\n existingActionIds: allLinkedIds,\n viewContainerRef: this.viewContainerRef\n }).pipe(takeUntil(this.destroy$)).subscribe({\n next: async (selectedActions) => {\n if (selectedActions && selectedActions.length > 0) {\n // Filter out already linked or pending actions\n const newActions = selectedActions.filter(action =>\n !allLinkedIds.some(id => UUIDsEqual(id, action.ID))\n );\n \n if (newActions.length === 0) {\n MJNotificationService.Instance.CreateSimpleNotification(\n 'All selected actions are already linked to this agent',\n 'info',\n 3000\n );\n return;\n }\n \n // Add to pending changes (defer until save)\n const md = this.ProviderToUse;\n for (const action of newActions) {\n const agentAction = await md.GetEntityObject<MJAIAgentActionEntity>('MJ: AI Agent Actions');\n agentAction.NewRecord();\n agentAction.AgentID = this.record.ID;\n agentAction.ActionID = action.ID;\n agentAction.Status = 'Active';\n \n this.PendingRecords.push({\n entityObject: agentAction,\n action: 'save'\n });\n }\n \n this.hasUnsavedChanges = true;\n \n // Update UI to show the new actions\n this.agentActions.push(...newActions);\n \n // Mark for check instead of forcing immediate detection\n this.cdr.markForCheck();\n \n // Show success notification\n MJNotificationService.Instance.CreateSimpleNotification(\n `${newActions.length} action${newActions.length === 1 ? '' : 's'} will be added when you save the agent`,\n 'info',\n 4000\n );\n }\n },\n error: (error) => {\n console.error('Error in add action dialog:', error);\n MJNotificationService.Instance.CreateSimpleNotification(\n 'Error opening action selection dialog. Please try again.',\n 'error',\n 3000\n );\n }\n });\n }\n\n /**\n * Gets the status icon for execution runs\n */\n public getExecutionStatusIcon(status: string): string {\n switch (status?.toLowerCase()) {\n case 'completed':\n case 'success':\n return 'fa-solid fa-check-circle';\n case 'failed':\n case 'error':\n return 'fa-solid fa-exclamation-triangle';\n case 'running':\n case 'in_progress':\n return 'fa-solid fa-spinner fa-spin';\n case 'pending':\n return 'fa-solid fa-clock';\n default:\n return 'fa-solid fa-question-circle';\n }\n }\n\n /**\n * Gets the status color for execution runs\n */\n public getExecutionStatusColor(status: string): string {\n switch (status?.toLowerCase()) {\n case 'completed':\n case 'success':\n return 'var(--mj-status-success)';\n case 'failed':\n case 'error':\n return 'var(--mj-status-error)';\n case 'running':\n case 'in_progress':\n return 'var(--mj-status-info)';\n case 'pending':\n return 'var(--mj-status-warning)';\n default:\n return 'var(--mj-text-muted)';\n }\n }\n\n public formatExecutionTimeFromDates(startDate: Date, endDate: Date): string {\n if (!startDate || !endDate) return 'N/A';\n\n // check to see if we have dates or timestamps\n let startTime;\n let endTime;\n if (typeof startDate === 'string') {\n startTime = new Date(startDate).getTime();\n }\n else if (typeof startDate === 'number') { \n startTime = startDate;\n }\n else {\n startTime = startDate.getTime();\n }\n if (typeof endDate === 'string') {\n endTime = new Date(endDate).getTime();\n }\n else if (typeof endDate === 'number') {\n endTime = endDate;\n }\n else {\n endTime = endDate.getTime();\n }\n\n if (isNaN(startTime) || isNaN(endTime)) \n return 'N/A'; \n const milliseconds = endTime - startTime;\n return this.formatExecutionTime(milliseconds);\n }\n\n /**\n * Formats execution time\n */\n public formatExecutionTime(milliseconds: number): string {\n if (!milliseconds) return 'N/A';\n \n if (milliseconds >= 60000) {\n const minutes = Math.floor(milliseconds / 60000);\n const seconds = ((milliseconds % 60000) / 1000).toFixed(1);\n return `${minutes}m ${seconds}s`;\n } else if (milliseconds >= 1000) {\n return `${(milliseconds / 1000).toFixed(1)}s`;\n } else {\n return `${milliseconds}ms`;\n }\n }\n\n /**\n * Formats token count with appropriate units (K for thousands, M for millions)\n */\n public formatTokenCount(tokens: number | null): string {\n if (tokens == null || tokens === 0) return '0';\n \n if (tokens >= 1000000) {\n return `${(tokens / 1000000).toFixed(1)}M`;\n } else if (tokens >= 1000) {\n return `${(tokens / 1000).toFixed(1)}K`;\n } else {\n return tokens.toString();\n }\n }\n\n /**\n * Formats cost with appropriate precision\n */\n public formatCost(cost: number | null): string {\n if (cost == null || cost === 0) return '0.00';\n \n if (cost >= 1) {\n return cost.toFixed(2);\n } else if (cost >= 0.01) {\n return cost.toFixed(3);\n } else {\n return cost.toFixed(4);\n }\n }\n\n /**\n * Gets the running time for an execution that hasn't completed yet\n * Uses a cached timestamp to avoid ExpressionChangedAfterItHasBeenCheckedError\n */\n private _runningTimeCache = new Map<string, { time: string, timestamp: number }>();\n private _runningTimeUpdater: any = null;\n \n public getRunningTime(startDate: Date): string {\n if (!startDate) return 'N/A';\n \n const startTime = new Date(startDate).getTime();\n if (isNaN(startTime)) return 'N/A';\n \n const cacheKey = startTime.toString();\n const now = Date.now();\n const cached = this._runningTimeCache.get(cacheKey);\n \n // Update cache every second to avoid constant changes\n if (!cached || now - cached.timestamp > 1000) {\n const milliseconds = now - startTime;\n const timeString = this.formatExecutionTime(milliseconds);\n this._runningTimeCache.set(cacheKey, { time: timeString, timestamp: now });\n \n // Don't trigger change detection here - let the background timer handle it\n return timeString;\n }\n \n return cached.time;\n }\n\n /**\n * Starts the background timer for updating running times\n */\n private startRunningTimeUpdater() {\n if (!this._runningTimeUpdater) {\n this._runningTimeUpdater = setInterval(() => {\n if (!this.destroy$.closed) {\n // Force cache refresh by clearing old entries\n const now = Date.now();\n for (const [key, cached] of this._runningTimeCache.entries()) {\n if (now - cached.timestamp > 500) { // Refresh every 500ms\n this._runningTimeCache.delete(key);\n }\n }\n this.cdr.markForCheck();\n }\n }, 1000); // Update every second\n }\n }\n\n /**\n * Gets the priority badge color\n */\n public getPriorityBadgeColor(priority: number): string {\n if (priority <= 1) return 'var(--mj-status-error)'; // High priority - red\n if (priority <= 5) return 'var(--mj-status-warning)'; // Medium priority - yellow\n return 'var(--mj-status-success)'; // Low priority - green\n }\n\n /**\n * Gets the priority label\n */\n public getPriorityLabel(priority: number): string {\n if (priority <= 1) return 'High';\n if (priority <= 5) return 'Medium';\n return 'Low';\n }\n\n /**\n * Navigates to a related entity\n */\n public navigateToEntity(entityName: string, recordId: string) {\n this.sharedService.OpenEntityRecord(entityName, CompositeKey.FromID(recordId));\n }\n \n /**\n * Toggles the expanded state of an execution card\n */\n public toggleExecutionExpanded(executionId: string) {\n this.expandedExecutions[executionId] = !this.expandedExecutions[executionId];\n }\n\n /**\n * Handles search text changes - debounced to avoid excessive processing\n */\n public onExecutionSearchChange(): void {\n // Debounce search to avoid excessive processing during typing\n if (this._searchDebounceTimer) {\n clearTimeout(this._searchDebounceTimer);\n }\n\n this._searchDebounceTimer = setTimeout(() => {\n this.applySearchFilter();\n }, 300);\n }\n\n private _searchDebounceTimer: any = null;\n\n /**\n * Applies search filter across all cached records and loads from database if needed\n */\n private async applySearchFilter(): Promise<void> {\n if (!this.executionSearchText || this.executionSearchText.trim() === '') {\n // No search text - show current page's executions\n this.filteredExecutions = [...this.recentExecutions];\n return;\n }\n\n const searchLower = this.executionSearchText.toLowerCase().trim();\n\n // First, search across all cached records\n const cachedMatches = this.allLoadedExecutions.filter(execution =>\n execution && execution.ID.toLowerCase().includes(searchLower)\n );\n\n if (cachedMatches.length > 0) {\n // Found matches in cache\n this.filteredExecutions = cachedMatches;\n } else {\n // No matches in cache - search database\n await this.searchExecutionsFromDatabase(searchLower);\n }\n }\n\n /**\n * Searches execution history from database when not found in cache\n */\n private async searchExecutionsFromDatabase(searchText: string): Promise<void> {\n if (!this.record?.ID) {\n return;\n }\n\n try {\n const rv = RunView.FromMetadataProvider(this.ProviderToUse);\n const result = await rv.RunView<MJAIAgentRunEntityExtended>({\n EntityName: 'MJ: AI Agent Runs',\n Fields: [\n \"ID\",\"AgentID\",\"ParentRunID\",\"Status\",\"StartedAt\",\"CompletedAt\",\n \"Success\",\"TotalTokensUsed\",\"TotalCost\",\"TotalCostRollUp\",\"TotalTokensUsedRollUp\",\n \"Configuration\",\"ConversationID\",\"Result\",\"ErrorMessage\",\"__mj_CreatedAt\"\n ],\n ExtraFilter: `AgentID='${this.record.ID}' AND ID LIKE '%${searchText}%'`,\n OrderBy: '__mj_CreatedAt DESC',\n MaxRows: 100, // Limit search results\n ResultType: 'entity_object'\n });\n\n if (result.Success && result.Results) {\n this.filteredExecutions = result.Results;\n } else {\n this.filteredExecutions = [];\n }\n } catch (error) {\n console.error('Error searching executions:', error);\n this.filteredExecutions = [];\n }\n }\n\n /**\n * Opens the full execution record in a new view\n */\n public openExecutionRecord(executionId: string) {\n this.sharedService.OpenEntityRecord('MJ: AI Agent Runs', CompositeKey.FromID(executionId));\n }\n \n /**\n * Gets a preview of the execution result for collapsed view\n */\n public getExecutionResultPreview(execution: MJAIAgentRunEntityExtended, trimLongMessages: boolean): string {\n try {\n if (!execution.Result) return 'No result';\n \n // Try to parse the result as JSON\n const parsed = JSON.parse(execution.Result);\n \n // Extract the user message if it exists\n if (parsed.returnValue?.nextStep?.userMessage) {\n const message = parsed.returnValue.nextStep.userMessage;\n if (trimLongMessages)\n return message.length > 120 ? message.substring(0, 120) + '...' : message;\n else\n return message;\n }\n \n // Otherwise return the stringified result\n const stringified = JSON.stringify(parsed, null, 2);\n if (trimLongMessages)\n return stringified.length > 120 ? stringified.substring(0, 120) + '...' : stringified;\n else\n return stringified;\n } catch {\n // If not JSON, just return the string\n const result = execution.Result || '';\n if (trimLongMessages)\n return result.length > 120 ? result.substring(0, 120) + '...' : result;\n else\n return result;\n }\n }\n \n /**\n * Gets the full execution result message for expanded view\n */\n public getExecutionResultMessage(execution: MJAIAgentRunEntityExtended): string {\n try {\n if (!execution.Result) return 'No result';\n \n // Try to parse the result as JSON\n const parsed = JSON.parse(execution.Result);\n \n // Extract the user message if it exists\n if (parsed.returnValue?.nextStep?.userMessage) {\n return parsed.returnValue.nextStep.userMessage;\n }\n \n // Otherwise return the pretty-printed JSON\n return JSON.stringify(parsed, null, 2);\n } catch {\n // If not JSON, just return the string\n return execution.Result || '';\n }\n }\n\n /**\n * Refreshes the related data and updates snapshots\n */\n public async refreshRelatedData() {\n if (this.record?.ID) {\n await this.loadRelatedCounts(true); // force refresh\n MJNotificationService.Instance.CreateSimpleNotification(\n 'Related data refreshed',\n 'success',\n 2000\n );\n }\n }\n\n /**\n * Manually refreshes the snapshot for cancel/revert functionality\n * Useful when you want to reset the \"original state\" to the current state\n */\n public refreshSnapshot() {\n this.createOriginalSnapshot();\n MJNotificationService.Instance.CreateSimpleNotification(\n 'Current state saved as new baseline',\n 'info',\n 2000\n );\n }\n\n /**\n * Debug method to check current pending records state\n * Useful for troubleshooting cancel/revert issues\n */\n public debugPendingRecords() {\n // Debug method for troubleshooting - console output removed for production\n }\n\n /**\n * Adds a new note to the agent\n */\n public addNote() {\n MJNotificationService.Instance.CreateSimpleNotification(\n 'Opening new note form...',\n 'info',\n 2000\n );\n \n // In a full implementation, this would open a new AI Agent Note form\n // with AgentID pre-populated to this.record.ID\n }\n\n /**\n * Creates a new prompt and links it to the agent\n */\n private async createNewPrompt() {\n try {\n this.agentManagementService.openCreatePromptDialog({\n title: `Create New Prompt for ${this.record.Name || 'Agent'}`,\n initialName: '',\n viewContainerRef: this.viewContainerRef\n }).pipe(takeUntil(this.destroy$)).subscribe({\n next: async (result) => {\n if (result && result.prompt) {\n try {\n // Get current user using proper MJ pattern\n const md = this.ProviderToUse;\n const currentUserId = md.CurrentUser.ID;\n\n // Add the prompt to PendingRecords (will be saved with agent)\n this.PendingRecords.push({\n entityObject: result.prompt,\n action: 'save'\n });\n\n // Add template to PendingRecords if created\n if (result.template) {\n // Set UserID on template (required field)\n result.template.UserID = currentUserId;\n this.PendingRecords.push({\n entityObject: result.template,\n action: 'save'\n });\n }\n\n // Add template contents to PendingRecords if created\n if (result.templateContents && result.templateContents.length > 0) {\n for (const content of result.templateContents) {\n // Template content does not have UserID field, no manual user assignment needed\n this.PendingRecords.push({\n entityObject: content,\n action: 'save'\n });\n }\n }\n\n // Create the AI Agent Prompt link\n const agentPrompt = await md.GetEntityObject<MJAIAgentPromptEntity>('MJ: AI Agent Prompts');\n agentPrompt.NewRecord();\n agentPrompt.AgentID = this.record.ID;\n agentPrompt.PromptID = result.prompt.ID;\n agentPrompt.Status = 'Active';\n agentPrompt.ExecutionOrder = 1;\n \n // AI Agent Prompt does not have UserID field, no manual user assignment needed\n \n this.PendingRecords.push({\n entityObject: agentPrompt,\n action: 'save'\n });\n\n this.hasUnsavedChanges = true;\n\n // Update UI to show the new prompt\n this.agentPrompts.push(result.prompt);\n\n // Trigger change detection to update UI\n this.cdr.detectChanges();\n\n MJNotificationService.Instance.CreateSimpleNotification(\n `New prompt \"${result.prompt.Name}\" will be created and linked when you save the agent`,\n 'success',\n 4000\n );\n } catch (error) {\n console.error('Error processing created prompt:', error);\n MJNotificationService.Instance.CreateSimpleNotification(\n 'Error processing created prompt. Please try again.',\n 'error',\n 3000\n );\n }\n }\n },\n error: (error) => {\n console.error('Error in create prompt dialog:', error);\n MJNotificationService.Instance.CreateSimpleNotification(\n 'Error opening prompt creation dialog. Please try again.',\n 'error',\n 3000\n );\n }\n });\n } catch (error) {\n console.error('Error in createNewPrompt:', error);\n MJNotificationService.Instance.CreateSimpleNotification(\n 'Error creating new prompt. Please try again.',\n 'error',\n 3000\n );\n }\n }\n\n /**\n * Removes a prompt from the agent (deferred until save)\n */\n public async removePrompt(prompt: MJAIPromptEntityExtended, event: Event) {\n event.stopPropagation(); // Prevent navigation\n \n const confirmDialog = this.dialogService.open({\n title: 'Remove Prompt',\n content: `Are you sure you want to remove the prompt \"${prompt.Name}\" from this agent?`,\n actions: [\n { text: 'Cancel' },\n { text: 'Remove', themeColor: 'error' }\n ],\n width: 450,\n height: 200\n });\n\n try {\n const result = await firstValueFrom(confirmDialog.Result);\n if (result && typeof result === 'object' && 'text' in result && (result as Record<string, unknown>)['text'] === 'Remove') {\n try {\n // Check if this is a pending add (not yet in database)\n const pendingAddIndex = this.PendingRecords.findIndex(\n p => p.entityObject.EntityInfo.Name === 'MJ: AI Agent Prompts' && \n p.action === 'save' && \n UUIDsEqual(p.entityObject.Get('PromptID'), prompt.ID)\n );\n\n if (pendingAddIndex >= 0) {\n // Remove from pending adds\n this.PendingRecords.splice(pendingAddIndex, 1);\n } else {\n // Find the existing AI Agent Prompt link record for deferred deletion\n const rv = RunView.FromMetadataProvider(this.ProviderToUse);\n const linkResult = await rv.RunView<MJAIAgentPromptEntity>({\n EntityName: 'MJ: AI Agent Prompts',\n ExtraFilter: `AgentID='${this.record.ID}' AND PromptID='${prompt.ID}'`,\n ResultType: 'entity_object'\n });\n\n if (linkResult.Success && linkResult.Results && linkResult.Results.length > 0) {\n const agentPromptToDelete = linkResult.Results[0];\n \n // Add to pending deletions\n this.PendingRecords.push({\n entityObject: agentPromptToDelete,\n action: 'delete'\n });\n } else {\n throw new Error('AI Agent Prompt link not found');\n }\n }\n\n // Remove from UI immediately\n const promptIndex = this.agentPrompts.findIndex(p => UUIDsEqual(p.ID, prompt.ID));\n if (promptIndex >= 0) {\n this.agentPrompts.splice(promptIndex, 1);\n }\n\n this.hasUnsavedChanges = true;\n\n // Mark for check instead of forcing immediate detection\n this.cdr.markForCheck();\n\n MJNotificationService.Instance.CreateSimpleNotification(\n `Prompt \"${prompt.Name}\" will be removed when you save the agent`,\n 'info',\n 4000\n );\n } catch (error) {\n console.error('Error removing prompt from agent:', error);\n MJNotificationService.Instance.CreateSimpleNotification(\n 'Failed to remove prompt',\n 'error',\n 3000\n );\n }\n }\n } catch (dialogError) {\n console.error('Error with dialog:', dialogError);\n }\n }\n\n /**\n * Updates payload field values from code editor\n */\n public updatePayloadField(fieldName: string, value: any) {\n if (this.record) {\n // Handle the value - it might be a string or an event\n const newValue = typeof value === 'string' ? value : value?.target?.value || value;\n (this.record as any)[fieldName] = newValue;\n }\n }\n\n /** \n * Opens the sub-agent selector dialog for adding sub-agents (deferred until save)\n */\n public async addSubAgents() {\n try {\n // Get list of already pending sub-agent IDs to filter duplicates\n const pendingSubAgentIds = this.PendingRecords\n .filter(p => p.entityObject.EntityInfo.Name === 'MJ: AI Agents' && \n p.action === 'save' && \n p.entityObject.Get('ParentID') === this.record.ID)\n .map(p => p.entityObject.Get('ID'));\n const existingSubAgentIds = this.subAgents.map(agent => agent.ID);\n const allLinkedIds = [...pendingSubAgentIds, ...existingSubAgentIds];\n\n this.agentManagementService.openSubAgentSelectorDialog({\n title: 'Add Sub-Agents',\n multiSelect: true,\n parentAgentId: this.record.ID,\n showCreateNew: true,\n viewContainerRef: this.viewContainerRef\n }).pipe(takeUntil(this.destroy$)).subscribe({\n next: async (result) => {\n if (result && result.selectedAgents && result.selectedAgents.length > 0) {\n // Filter out already linked or pending agents\n const newAgents = result.selectedAgents.filter(agent =>\n !allLinkedIds.some(id => UUIDsEqual(id, agent.ID))\n );\n \n if (newAgents.length === 0) {\n MJNotificationService.Instance.CreateSimpleNotification(\n 'All selected agents are already linked to this agent',\n 'info',\n 3000\n );\n return;\n }\n \n // Add to pending changes (defer until save)\n const md = this.ProviderToUse;\n for (const agent of newAgents) {\n const subAgentToUpdate = await md.GetEntityObject<MJAIAgentEntityExtended>('MJ: AI Agents');\n await subAgentToUpdate.Load(agent.ID);\n subAgentToUpdate.ParentID = this.record.ID;\n // Database constraint requires ExposeAsAction = false for sub-agents\n subAgentToUpdate.ExposeAsAction = false;\n \n this.PendingRecords.push({\n entityObject: subAgentToUpdate,\n action: 'save'\n });\n }\n \n this.hasUnsavedChanges = true;\n \n // Update UI to show the new sub-agents\n this.subAgents.push(...newAgents);\n \n // Mark for check instead of forcing immediate detection\n this.cdr.markForCheck();\n \n // Show success notification\n MJNotificationService.Instance.CreateSimpleNotification(\n `${newAgents.length} agent${newAgents.length === 1 ? '' : 's'} will be converted to sub-agent${newAgents.length === 1 ? '' : 's'} when you save`,\n 'info',\n 4000\n );\n } else if (result && result.createNew) {\n // User wants to create a new sub-agent\n await this.createSubAgent();\n }\n },\n error: (error) => {\n console.error('Error opening sub-agent selector:', error);\n MJNotificationService.Instance.CreateSimpleNotification(\n 'Error opening sub-agent selector. Please try again.',\n 'error',\n 3000\n );\n }\n });\n } catch (error) {\n console.error('Error in addSubAgents:', error);\n MJNotificationService.Instance.CreateSimpleNotification(\n 'Error adding sub-agents. Please try again.',\n 'error',\n 3000\n );\n }\n }\n\n /**\n * Removes a sub-agent from this agent (deferred until save)\n */\n public async removeSubAgent(subAgent: MJAIAgentEntityExtended, event: Event) {\n event.stopPropagation(); // Prevent navigation\n \n const confirmDialog = this.dialogService.open({\n title: 'Remove Sub-Agent',\n content: `Are you sure you want to remove \"${subAgent.Name}\" as a sub-agent? This will make it an independent root agent.`,\n actions: [\n { text: 'Cancel' },\n { text: 'Remove', themeColor: 'error' }\n ],\n width: 450,\n height: 200\n });\n\n try {\n const result = await firstValueFrom(confirmDialog.Result);\n if (result && typeof result === 'object' && 'text' in result && (result as Record<string, unknown>)['text'] === 'Remove') {\n try {\n // Check if this is a pending add (not yet in database)\n const pendingAddIndex = this.PendingRecords.findIndex(\n p => p.entityObject.EntityInfo.Name === 'MJ: AI Agents' && \n p.action === 'save' && \n UUIDsEqual(p.entityObject.Get('ID'), subAgent.ID) &&\n p.entityObject.Get('ParentID') === this.record.ID\n );\n\n if (pendingAddIndex >= 0) {\n // Remove from pending adds\n this.PendingRecords.splice(pendingAddIndex, 1);\n } else {\n // Add to pending removals (will restore to root agent)\n const md = this.ProviderToUse;\n const subAgentToUpdate = await md.GetEntityObject<MJAIAgentEntityExtended>('MJ: AI Agents');\n await subAgentToUpdate.Load(subAgent.ID);\n subAgentToUpdate.ParentID = null; // Will become a root agent\n \n this.PendingRecords.push({\n entityObject: subAgentToUpdate,\n action: 'save'\n });\n }\n\n // Remove from UI immediately\n const subAgentIndex = this.subAgents.findIndex(sa => UUIDsEqual(sa.ID, subAgent.ID));\n if (subAgentIndex >= 0) {\n this.subAgents.splice(subAgentIndex, 1);\n }\n\n this.hasUnsavedChanges = true;\n\n // Mark for check instead of forcing immediate detection\n this.cdr.markForCheck();\n\n MJNotificationService.Instance.CreateSimpleNotification(\n `\"${subAgent.Name}\" will be removed as a sub-agent when you save`,\n 'info',\n 4000\n );\n } catch (error) {\n console.error('Error removing sub-agent:', error);\n MJNotificationService.Instance.CreateSimpleNotification(\n 'Failed to remove sub-agent',\n 'error',\n 3000\n );\n }\n }\n } catch (dialogError) {\n console.error('Error with dialog:', dialogError);\n }\n }\n\n /**\n * Sets the sub-agent filter to show all, child, or related sub-agents\n */\n public setSubAgentFilter(filter: SubAgentFilterType): void {\n this.subAgentFilter = filter;\n }\n\n /**\n * Gets the badge color for a sub-agent based on its type\n */\n public getSubAgentBadgeColor(item: UnifiedSubAgent): string {\n return item.type === 'child' ? 'var(--mj-status-info)' : 'var(--mj-brand-primary)';\n }\n\n /**\n * Gets the badge icon for a sub-agent based on its type\n */\n public getSubAgentBadgeIcon(item: UnifiedSubAgent): string {\n return item.type === 'child' ? 'fa-solid fa-link' : 'fa-solid fa-share-nodes';\n }\n\n /**\n * Gets the badge text for a sub-agent based on its type\n */\n public getSubAgentBadgeText(item: UnifiedSubAgent): string {\n return item.type === 'child' ? 'CHILD' : 'RELATED';\n }\n\n /**\n * Gets the payload information string for display\n */\n public getSubAgentPayloadInfo(item: UnifiedSubAgent): string {\n if (item.type === 'child') {\n return 'Shared Payload';\n } else if (item.relationship?.SubAgentOutputMapping) {\n try {\n const mapping = JSON.parse(item.relationship.SubAgentOutputMapping);\n const entries = Object.entries(mapping);\n if (entries.length === 1 && entries[0][0] === '*') {\n return `Mapped: * → ${entries[0][1]}`;\n }\n return `Mapped: ${entries.length} path${entries.length === 1 ? '' : 's'}`;\n } catch {\n return 'Mapped Payload';\n }\n }\n return 'No Mapping';\n }\n\n /**\n * Opens a dialog to configure the output mapping for a related sub-agent\n */\n public async configureOutputMapping(item: UnifiedSubAgent, event: Event): Promise<void> {\n event.stopPropagation();\n if (item.type !== 'related' || !item.relationship) return;\n\n // TODO: Implement JSON editor dialog for SubAgentOutputMapping\n MJNotificationService.Instance.CreateSimpleNotification(\n 'Output mapping configuration coming soon',\n 'info',\n 3000\n );\n }\n\n /**\n * Unlinks a related sub-agent (removes the relationship)\n */\n public async unlinkRelatedSubAgent(item: UnifiedSubAgent, event: Event): Promise<void> {\n event.stopPropagation();\n if (item.type !== 'related' || !item.relationship) return;\n\n const confirmDialog = this.dialogService.open({\n title: 'Unlink Related Sub-Agent',\n content: `Are you sure you want to unlink \"${item.agent.Name}\"? This will remove the relationship but keep the agent itself.`,\n actions: [\n { text: 'Cancel' },\n { text: 'Unlink', themeColor: 'error' }\n ],\n width: 450,\n height: 200\n });\n\n try {\n const result = await firstValueFrom(confirmDialog.Result);\n if (result && typeof result === 'object' && 'text' in result && (result as Record<string, unknown>)['text'] === 'Unlink') {\n try {\n const success = await item.relationship.Delete();\n if (success) {\n // Remove from unified list\n const index = this.allSubAgents.findIndex(s =>\n s.type === 'related' && UUIDsEqual(s.relationship?.ID, item.relationship!.ID)\n );\n if (index >= 0) {\n this.allSubAgents.splice(index, 1);\n }\n\n this.cdr.markForCheck();\n\n MJNotificationService.Instance.CreateSimpleNotification(\n `Unlinked \"${item.agent.Name}\" successfully`,\n 'success',\n 3000\n );\n } else {\n throw new Error('Delete operation failed');\n }\n } catch (error) {\n console.error('Error unlinking related sub-agent:', error);\n MJNotificationService.Instance.CreateSimpleNotification(\n 'Failed to unlink sub-agent',\n 'error',\n 3000\n );\n }\n }\n } catch (dialogError) {\n console.error('Error with dialog:', dialogError);\n }\n }\n\n /**\n * Removes a child sub-agent (updated to work with UnifiedSubAgent)\n */\n public async removeChildSubAgent(item: UnifiedSubAgent, event: Event): Promise<void> {\n // Delegate to existing removeSubAgent method\n await this.removeSubAgent(item.agent, event);\n }\n\n /**\n * Creates a new child sub-agent (renamed from createSubAgent for clarity)\n */\n public async createChildSubAgent(): Promise<void> {\n await this.createSubAgent();\n }\n\n /**\n * Opens dialog to link an existing agent as a related sub-agent\n */\n public async linkRelatedSubAgent(): Promise<void> {\n // TODO: Implement dialog to select existing agents and create relationship\n MJNotificationService.Instance.CreateSimpleNotification(\n 'Link related sub-agent dialog coming soon',\n 'info',\n 3000\n );\n }\n\n /**\n * Removes an action from the agent (deferred until save)\n */\n public async removeAction(action: MJActionEntity, event: Event) {\n event.stopPropagation(); // Prevent navigation\n \n const confirmDialog = this.dialogService.open({\n title: 'Remove Action',\n content: `Are you sure you want to remove the action \"${action.Name}\" from this agent?`,\n actions: [\n { text: 'Cancel' },\n { text: 'Remove', themeColor: 'error' }\n ],\n width: 450,\n height: 200\n });\n\n try {\n const result = await firstValueFrom(confirmDialog.Result);\n if (result && typeof result === 'object' && 'text' in result && (result as Record<string, unknown>)['text'] === 'Remove') {\n try {\n // Check if this is a pending add (not yet in database)\n const pendingAddIndex = this.PendingRecords.findIndex(\n p => p.entityObject.EntityInfo.Name === 'MJ: AI Agent Actions' && \n p.action === 'save' && \n UUIDsEqual(p.entityObject.Get('ActionID'), action.ID)\n );\n\n if (pendingAddIndex >= 0) {\n // Remove from pending adds\n this.PendingRecords.splice(pendingAddIndex, 1);\n } else {\n // Find the existing AI Agent Action link record for deferred deletion\n const rv = RunView.FromMetadataProvider(this.ProviderToUse);\n const linkResult = await rv.RunView<MJAIAgentActionEntity>({\n EntityName: 'MJ: AI Agent Actions',\n ExtraFilter: `AgentID='${this.record.ID}' AND ActionID='${action.ID}'`,\n ResultType: 'entity_object'\n });\n\n if (linkResult.Success && linkResult.Results && linkResult.Results.length > 0) {\n const agentActionToDelete = linkResult.Results[0];\n \n // Add to pending deletions\n this.PendingRecords.push({\n entityObject: agentActionToDelete,\n action: 'delete'\n });\n } else {\n throw new Error('AI Agent Action link not found');\n }\n }\n\n // Remove from UI immediately\n const actionIndex = this.agentActions.findIndex(a => UUIDsEqual(a.ID, action.ID));\n if (actionIndex >= 0) {\n this.agentActions.splice(actionIndex, 1);\n }\n\n this.hasUnsavedChanges = true;\n\n // Mark for check instead of forcing immediate detection\n this.cdr.markForCheck();\n\n MJNotificationService.Instance.CreateSimpleNotification(\n `Action \"${action.Name}\" will be removed when you save the agent`,\n 'info',\n 4000\n );\n } catch (error) {\n console.error('Error removing action from agent:', error);\n MJNotificationService.Instance.CreateSimpleNotification(\n 'Failed to remove action',\n 'error',\n 3000\n );\n }\n }\n } catch (dialogError) {\n console.error('Error with action dialog:', dialogError);\n }\n }\n\n /**\n * Opens the advanced settings dialog for a prompt\n */\n public async openPromptAdvancedSettings(prompt: MJAIPromptEntityExtended, event: Event) {\n event.stopPropagation(); // Prevent navigation\n \n try {\n // Find the corresponding MJAIAgentPromptEntity for this prompt\n // Get all agent prompts for validation\n\n const allAgentPrompts = AIEngineBase.Instance.AgentPrompts.filter(ap => UUIDsEqual(ap.AgentID, this.record.ID));\n const agentPrompt = allAgentPrompts.find(ap => UUIDsEqual(ap.PromptID, prompt.ID));\n if (!agentPrompt) {\n MJNotificationService.Instance.CreateSimpleNotification(\n 'Unable to find prompt configuration for advanced settings',\n 'error',\n 3000\n );\n return;\n }\n\n this.agentManagementService.openAgentPromptAdvancedSettingsDialog({\n agentPrompt: agentPrompt,\n allAgentPrompts: allAgentPrompts,\n viewContainerRef: this.viewContainerRef\n }).pipe(takeUntil(this.destroy$)).subscribe({\n next: async (formData) => {\n if (formData) {\n try {\n // Update the agent prompt entity with new values\n agentPrompt.ExecutionOrder = formData.executionOrder;\n agentPrompt.Purpose = formData.purpose;\n agentPrompt.ConfigurationID = formData.configurationID;\n agentPrompt.ContextBehavior = formData.contextBehavior;\n agentPrompt.ContextMessageCount = formData.contextMessageCount;\n agentPrompt.Status = formData.status;\n\n // Save immediately to database\n const saveResult = await agentPrompt.Save();\n if (saveResult) {\n MJNotificationService.Instance.CreateSimpleNotification(\n 'Prompt settings updated successfully',\n 'success',\n 3000\n );\n\n // Refresh the related data to reflect changes\n await this.loadRelatedCounts(true);\n } else {\n MJNotificationService.Instance.CreateSimpleNotification(\n 'Failed to save prompt settings. Please try again.',\n 'error',\n 3000\n );\n }\n } catch (error) {\n console.error('Error saving prompt advanced settings:', error);\n MJNotificationService.Instance.CreateSimpleNotification(\n 'Error saving prompt settings. Please try again.',\n 'error',\n 3000\n );\n }\n }\n },\n error: (error) => {\n console.error('Error opening prompt advanced settings dialog:', error);\n MJNotificationService.Instance.CreateSimpleNotification(\n 'Error opening advanced settings. Please try again.',\n 'error',\n 3000\n );\n }\n });\n\n } catch (error) {\n console.error('Error in openPromptAdvancedSettings:', error);\n MJNotificationService.Instance.CreateSimpleNotification(\n 'Error opening prompt advanced settings. Please try again.',\n 'error',\n 3000\n );\n }\n }\n\n /**\n * Opens the advanced settings dialog for a sub-agent\n */\n public async openSubAgentAdvancedSettings(subAgentEntity: MJAIAgentEntityExtended, event: Event) {\n event.stopPropagation(); // Prevent navigation\n \n try {\n // Get all sub-agents under the same parent for validation\n const allSubAgents = AIEngineBase.Instance.Agents.filter(sa => UUIDsEqual(sa.ParentID, subAgentEntity.ParentID));\n\n this.agentManagementService.openSubAgentAdvancedSettingsDialog({\n subAgent: subAgentEntity,\n allSubAgents: allSubAgents,\n viewContainerRef: this.viewContainerRef\n }).pipe(takeUntil(this.destroy$)).subscribe({\n next: async (formData) => {\n if (formData) {\n try {\n // Update the sub-agent entity with new values\n subAgentEntity.ExecutionOrder = formData.executionOrder;\n subAgentEntity.ExecutionMode = formData.executionMode;\n subAgentEntity.Status = formData.status;\n subAgentEntity.TypeID = formData.typeID;\n subAgentEntity.ExposeAsAction = formData.exposeAsAction;\n\n // Save immediately to database\n const saveResult = await subAgentEntity.Save();\n if (saveResult) {\n MJNotificationService.Instance.CreateSimpleNotification(\n 'Sub-agent settings updated successfully',\n 'success',\n 3000\n );\n\n // Update the local sub-agent data to reflect changes\n const localSubAgent = this.subAgents.find(sa => UUIDsEqual(sa.ID, subAgentEntity.ID));\n if (localSubAgent) {\n localSubAgent.ExecutionOrder = formData.executionOrder;\n localSubAgent.ExecutionMode = formData.executionMode;\n localSubAgent.Status = formData.status;\n localSubAgent.TypeID = formData.typeID;\n localSubAgent.ExposeAsAction = formData.exposeAsAction;\n }\n\n // Mark for check instead of forcing immediate detection\n this.cdr.markForCheck();\n } else {\n MJNotificationService.Instance.CreateSimpleNotification(\n 'Failed to save sub-agent settings. Please try again.',\n 'error',\n 3000\n );\n }\n } catch (error) {\n console.error('Error saving sub-agent advanced settings:', error);\n MJNotificationService.Instance.CreateSimpleNotification(\n 'Error saving sub-agent settings. Please try again.',\n 'error',\n 3000\n );\n }\n }\n },\n error: (error) => {\n console.error('Error opening sub-agent advanced settings dialog:', error);\n MJNotificationService.Instance.CreateSimpleNotification(\n 'Error opening advanced settings. Please try again.',\n 'error',\n 3000\n );\n }\n });\n\n } catch (error) {\n console.error('Error in openSubAgentAdvancedSettings:', error);\n MJNotificationService.Instance.CreateSimpleNotification(\n 'Error opening sub-agent advanced settings. Please try again.',\n 'error',\n 3000\n );\n }\n }\n\n /**\n * Override PopulatePendingRecords to preserve our pending records before parent clears them\n * However, during cancel operations, we want to clear all pending records completely\n */\n protected PopulatePendingRecords() {\n // If we're in the middle of a cancel operation, don't preserve pending records\n // The base class CancelEdit will handle reverting pending records appropriately\n if (this.isPerformingCancel) {\n super.PopulatePendingRecords();\n return;\n }\n\n // IMPORTANT: The parent method clears the pending records array, so we need to preserve\n // any records we've added before calling the parent method during normal operations\n const currentPendingRecords = [...this.PendingRecords]; // Make a copy\n \n // Call parent first to get child component pending records (this clears the array)\n super.PopulatePendingRecords();\n \n // Re-add our preserved records (only during normal save operations)\n for (const record of currentPendingRecords) {\n this.PendingRecords.push(record);\n }\n }\n\n /** Flag to track if we're currently performing a cancel operation */\n private isPerformingCancel = false;\n\n /**\n * Override InternalSaveRecord to handle agent-specific transaction logic\n * AI Agent must be saved first since related entities depend on it\n */\n /**\n * The base SaveRecord() method will call this InternalSaveRecord() method\n * after handling validation and pending record population\n */\n\n protected async InternalSaveRecord(): Promise<boolean> {\n if (!this.record) {\n return false;\n }\n\n try {\n // Reset context compression fields if EnableContextCompression is false\n if (!this.record.EnableContextCompression) {\n this.record.ContextCompressionMessageThreshold = null;\n this.record.ContextCompressionPromptID = null;\n this.record.ContextCompressionMessageRetentionCount = null;\n this.selectedContextCompressionPrompt = null;\n }\n\n const md = this.ProviderToUse;\n const transactionGroup = await md.CreateTransactionGroup();\n\n // Set transaction group on main record first\n this.record.TransactionGroup = transactionGroup;\n\n // Save entities in dependency order to avoid foreign key constraint errors\n // We need to save Templates and Template Contents BEFORE the main AI Agent\n // since AI Prompts depend on Templates, and AI Agent Prompts depend on AI Agents\n \n // 1. First save Templates (they have no dependencies)\n const templateRecords = this.PendingRecords.filter(p => \n p.entityObject.EntityInfo.Name === 'MJ: Templates'\n );\n for (const templateRecord of templateRecords) {\n templateRecord.entityObject.TransactionGroup = transactionGroup;\n if (templateRecord.action === 'save') {\n const saveResult = await templateRecord.entityObject.Save();\n if (!saveResult) {\n MJNotificationService.Instance.CreateSimpleNotification(\n `Failed to save Template \"${templateRecord.entityObject.Get('Name')}\". Please check the data and try again.`,\n 'error',\n 4000\n );\n return false;\n }\n } else {\n await templateRecord.entityObject.Delete();\n }\n }\n\n // 2. Save Template Contents (depend on Templates)\n const templateContentRecords = this.PendingRecords.filter(p => \n p.entityObject.EntityInfo.Name === 'MJ: Template Contents'\n );\n for (const contentRecord of templateContentRecords) {\n contentRecord.entityObject.TransactionGroup = transactionGroup;\n if (contentRecord.action === 'save') {\n const saveResult = await contentRecord.entityObject.Save();\n if (!saveResult) {\n MJNotificationService.Instance.CreateSimpleNotification(\n `Failed to save Template Content. Please check the data and try again.`,\n 'error',\n 4000\n );\n return false;\n }\n } else {\n await contentRecord.entityObject.Delete();\n }\n }\n\n // 3. Save AI Prompts (depend on Templates)\n const promptRecords = this.PendingRecords.filter(p => \n p.entityObject.EntityInfo.Name === 'MJ: AI Prompts'\n );\n for (const promptRecord of promptRecords) {\n promptRecord.entityObject.TransactionGroup = transactionGroup;\n if (promptRecord.action === 'save') {\n const saveResult = await promptRecord.entityObject.Save();\n if (!saveResult) {\n MJNotificationService.Instance.CreateSimpleNotification(\n `Failed to save AI Prompt \"${promptRecord.entityObject.Get('Name')}\". Please check the data and try again.`,\n 'error',\n 4000\n );\n return false;\n }\n } else {\n await promptRecord.entityObject.Delete();\n }\n }\n\n // 4. Save the main AI Agent record (other entity links depend on it)\n // The record transaction group was already set above\n const agentSaveResult = await this.record.Save();\n if (!agentSaveResult) {\n MJNotificationService.Instance.CreateSimpleNotification(\n `Failed to save AI agent \"${this.record.Name}\". Please check the data and try again.`,\n 'error',\n 4000\n );\n return false;\n }\n\n // 4.1. Handle deferred sub-agent creation - set ParentID on any sub-agents created before parent was saved\n const subAgentRecords = this.PendingRecords.filter(p => \n p.entityObject.EntityInfo.Name === 'MJ: AI Agents' && \n p.action === 'save' && \n p.entityObject.Get('_tempParentId') === this.record.ID\n );\n \n for (const subAgentRecord of subAgentRecords) {\n // Cast to MJAIAgentEntityExtended to access ParentID property\n const subAgent = subAgentRecord.entityObject as MJAIAgentEntityExtended;\n // Set the proper ParentID now that parent is saved\n subAgent.ParentID = this.record.ID;\n // Clear the temporary reference\n subAgent.Set('_tempParentId', null);\n }\n\n // 5. Save all other pending records (AI Agent Actions, AI Agent Prompts, etc.)\n const otherRecords = this.PendingRecords.filter(p => \n p.entityObject.EntityInfo.Name !== 'MJ: Templates' &&\n p.entityObject.EntityInfo.Name !== 'MJ: Template Contents' &&\n p.entityObject.EntityInfo.Name !== 'MJ: AI Prompts'\n );\n for (const record of otherRecords) {\n record.entityObject.TransactionGroup = transactionGroup;\n if (record.action === 'save') {\n const saveResult = await record.entityObject.Save();\n if (!saveResult) {\n MJNotificationService.Instance.CreateSimpleNotification(\n `Failed to save ${record.entityObject.EntityInfo.Name}. Transaction will be rolled back.`,\n 'error',\n 4000\n );\n return false;\n }\n } else {\n await record.entityObject.Delete();\n }\n }\n\n // Execute all operations atomically\n const success = await transactionGroup.Submit();\n if (success) {\n // Clear our local state since save was successful\n this.hasUnsavedChanges = false;\n \n // Clear pending records since they've been saved\n this.PendingRecords.length = 0;\n \n // Reload related data to reflect database state\n await this.loadRelatedCounts(true);\n\n MJNotificationService.Instance.CreateSimpleNotification(\n 'AI Agent and all related changes saved successfully',\n 'success',\n 3000\n );\n \n return true;\n } else {\n MJNotificationService.Instance.CreateSimpleNotification(\n 'Save failed. Please try again.',\n 'error',\n 4000\n );\n return false;\n }\n } catch (error) {\n MJNotificationService.Instance.CreateSimpleNotification(\n `Save failed: ${error instanceof Error ? error.message : 'Unknown error'}. Please try again.`,\n 'error',\n 5000\n );\n return false;\n }\n }\n\n /**\n * Navigates to the parent agent when the \"Child of...\" badge is clicked\n */\n public navigateToParentAgent(): void {\n if (this.record.ParentID) {\n this.navigateToEntity('MJ: AI Agents', this.record.ParentID);\n }\n }\n\n /**\n * Component cleanup - critical for preventing memory leaks\n */\n ngOnDestroy(): void {\n // Signal all subscriptions to complete\n this.destroy$.next();\n this.destroy$.complete();\n \n // Clear all active timeouts\n this.activeTimeouts.forEach(timeoutId => {\n clearTimeout(timeoutId);\n });\n this.activeTimeouts.length = 0;\n \n // Clear running time updater\n if (this._runningTimeUpdater) {\n clearInterval(this._runningTimeUpdater);\n this._runningTimeUpdater = null;\n }\n \n // Clear all data arrays to release memory\n this.subAgents.length = 0;\n this.agentPrompts.length = 0;\n this.agentActions.length = 0;\n this.recentExecutions.length = 0;\n this.learningCycles.length = 0;\n this.agentNotes.length = 0;\n\n // Reset pagination state\n this.executionHistoryCurrentPage = 1;\n this.totalExecutionHistoryCount = 0;\n this.isLoadingPage = false;\n this.allLoadedExecutions = [];\n\n // Clear maps and objects\n this._permissionCache.clear();\n this._runningTimeCache.clear();\n this.expandedExecutions = {};\n this.originalSnapshots = null as any;\n \n // Clean up component references\n if (this.customSectionComponentRef) {\n this.customSectionComponentRef.destroy();\n this.customSectionComponentRef = null;\n }\n this.customSectionComponent = null;\n this.agentType = null;\n }\n \n}\n","@if (record) {\n<mj-record-form-container [Record]=\"record\" [FormComponent]=\"this\"\n [ToolbarConfig]=\"toolbarConfig\"\n [WidthMode]=\"'full-width'\"\n (Navigate)=\"OnFormNavigate($event)\"\n (DeleteRequested)=\"OnDeleteRequested()\"\n (FavoriteToggled)=\"OnFavoriteToggled()\"\n (HistoryRequested)=\"OnHistoryRequested()\"\n (ListManagementRequested)=\"OnListManagementRequested()\">\n <form class=\"record-form\" #form=\"ngForm\">\n <!-- Agent Header — expanded view -->\n @if (!HeaderCollapsed) {\n <div class=\"agent-header\">\n <div class=\"agent-header-content\">\n <button class=\"agent-header-toggle\" (click)=\"ToggleHeaderCollapsed()\"\n title=\"Minimize header\">\n <i class=\"fa-solid fa-chevron-up\"></i>\n </button>\n <div class=\"agent-overview\">\n <div class=\"agent-icon-wrapper\">\n @if (hasLogoURL()) {\n <img [src]=\"record.LogoURL\" [alt]=\"record.Name + ' logo'\" class=\"agent-logo\">\n } @else {\n <i [class]=\"getAgentIcon()\"></i>\n }\n </div>\n <div class=\"agent-info\">\n @if (EditMode) {\n <input type=\"text\" class=\"mj-input agent-name-input\"\n [(ngModel)]=\"record.Name\"\n name=\"agentName\"\n placeholder=\"Enter agent name...\">\n } @else {\n <h1 class=\"agent-name\">{{ record.Name || 'Untitled AI Agent' }}</h1>\n }\n <div class=\"agent-meta\">\n @if (record.Status) {\n <span class=\"status-badge\" [style.background-color]=\"getStatusBadgeColor()\">\n <i class=\"fa-solid fa-circle\"></i>\n {{ record.Status }}\n </span>\n }\n @if (record.Type) {\n <span class=\"execution-mode\">\n Agent Type: {{ record.Type }}\n </span>\n }\n @if (record.Parent) {\n <span class=\"parent-agent clickable\"\n (click)=\"navigateToParentAgent()\"\n title=\"Open parent agent: {{ record.Parent }}\">\n <i class=\"fa-solid fa-sitemap\"></i>\n Child of {{ record.Parent }}\n <i class=\"fa-solid fa-external-link\" style=\"margin-left: 4px; font-size: 10px;\"></i>\n </span>\n }\n </div>\n </div>\n </div>\n <div class=\"agent-actions\">\n @if (record.ID) {\n <button mjButton variant=\"primary\" size=\"lg\"\n (click)=\"openTestHarness()\"\n [disabled]=\"record.Status !== 'Active'\"\n title=\"Run this AI agent\">\n <i class=\"fa-solid fa-play\"></i> Run\n </button>\n <button mjButton size=\"lg\"\n (click)=\"openPermissionsDialog()\"\n [title]=\"IsOpenToEveryone ? 'Open to everyone — click to manage permissions' : 'Restricted — click to manage permissions'\">\n <i class=\"fa-solid\" [class.fa-lock-open]=\"IsOpenToEveryone\" [class.fa-lock]=\"!IsOpenToEveryone\"\n [style.color]=\"IsOpenToEveryone ? 'var(--mj-status-success)' : null\"></i>\n {{ IsOpenToEveryone ? 'Open' : 'Restricted' }}\n </button>\n }\n <button mjButton variant=\"outline\" size=\"sm\" (click)=\"refreshRelatedData()\" title=\"Refresh all data\">\n <i class=\"fa-solid fa-refresh\"></i>\n </button>\n </div>\n </div>\n </div>\n }\n <!-- Agent Header — minimized floating bar -->\n @if (HeaderCollapsed) {\n <div class=\"agent-header-mini\">\n <button class=\"agent-header-mini-expand\" (click)=\"ToggleHeaderCollapsed()\"\n title=\"Expand header\">\n <i class=\"fa-solid fa-chevron-down\"></i>\n </button>\n <span class=\"agent-header-mini-name\">{{ record.Name || 'Untitled AI Agent' }}</span>\n @if (record.Status) {\n <span class=\"agent-header-mini-status\" [style.background-color]=\"getStatusBadgeColor()\">\n {{ record.Status }}\n </span>\n }\n <div class=\"agent-header-mini-spacer\"></div>\n @if (record.ID) {\n <button class=\"agent-header-mini-btn agent-header-mini-btn--primary\"\n (click)=\"openTestHarness()\"\n [disabled]=\"record.Status !== 'Active'\"\n title=\"Run agent\">\n <i class=\"fa-solid fa-play\"></i>\n </button>\n <button class=\"agent-header-mini-btn\"\n (click)=\"openPermissionsDialog()\"\n [title]=\"IsOpenToEveryone ? 'Open to everyone' : 'Restricted'\">\n <i class=\"fa-solid\" [class.fa-lock-open]=\"IsOpenToEveryone\" [class.fa-lock]=\"!IsOpenToEveryone\"\n [style.color]=\"IsOpenToEveryone ? 'var(--mj-status-success)' : null\"></i>\n </button>\n }\n <button class=\"agent-header-mini-btn\"\n (click)=\"refreshRelatedData()\" title=\"Refresh\">\n <i class=\"fa-solid fa-refresh\"></i>\n </button>\n </div>\n }\n <!-- Single Pane Layout with Expander Panels -->\n <div class=\"form-content\">\n <!-- Custom Agent Type Section (if defined) -->\n @if (record.ID && agentType && agentType.UIFormSectionKey) {\n <mj-accordion-panel id=\"custom\"\n [Expanded]=\"GetSectionExpanded('custom', agentType.UIFormSectionExpandedByDefault)\">\n <ng-template mjAccordionTitle>\n <i class=\"fa-solid fa-puzzle-piece\"></i> {{ agentType.Name }} Configuration\n </ng-template>\n <div class=\"panel-content custom-agent-type-section\" [style.display]=\"'block'\">\n @if (loadingStates.customSection) {\n <mj-loading text=\"Loading {{ agentType.Name }} configuration...\" size=\"medium\"></mj-loading>\n }\n <ng-container #customSectionContainer></ng-container>\n </div>\n </mj-accordion-panel>\n }\n <!-- Requests & History -->\n @if (record.ID) {\n <mj-accordion-panel id=\"history\"\n [Expanded]=\"GetSectionExpanded('history', false)\"\n [Disabled]=\"loadingStates.executionHistory\">\n <ng-template mjAccordionTitle>\n <i class=\"fa-solid fa-history\"></i> Execution History\n @if (loadingStates.executionHistory) {\n <span style=\"margin-left: 8px;\"><i class=\"fa-solid fa-spinner fa-spin\" style=\"font-size: 12px;\"></i></span>\n } @else if (executionHistoryCount > 0) {\n <span> ({{ executionHistoryCount }}@if (executionHistoryCount < totalExecutionHistoryCount) { of {{ totalExecutionHistoryCount }}})</span>\n }\n </ng-template>\n <div class=\"panel-content execution-history-panel\">\n @if (loadingStates.executionHistory) {\n <mj-loading text=\"Loading execution history...\" size=\"medium\"></mj-loading>\n } @else if (executionHistoryCount === 0) {\n <div class=\"empty-state\">\n <i class=\"fa-solid fa-history\"></i>\n <h4>No Execution History</h4>\n <p>This agent hasn't been executed yet. Use the Test Agent button to run the agent and see execution history here.</p>\n </div>\n } @else {\n <!-- Search Bar -->\n <div class=\"execution-search-bar\">\n <div class=\"search-input-wrapper\">\n <i class=\"fa-solid fa-search\"></i>\n <input type=\"text\" class=\"mj-input\"\n [(ngModel)]=\"executionSearchText\"\n (ngModelChange)=\"onExecutionSearchChange()\"\n [ngModelOptions]=\"{standalone: true}\"\n placeholder=\"Search by Run ID...\">\n </div>\n </div>\n <div class=\"execution-history-list\">\n @if (filteredExecutions.length === 0) {\n <div class=\"empty-state\">\n <i class=\"fa-solid fa-search\"></i>\n <h4>No Matching Results</h4>\n <p>No execution history found matching \"{{ executionSearchText }}\"</p>\n </div>\n }\n @for (execution of filteredExecutions; track execution.ID) {\n <div class=\"execution-card\" [class.expanded]=\"expandedExecutions[execution.ID]\">\n <div class=\"execution-header\" (click)=\"toggleExecutionExpanded(execution.ID)\">\n <div class=\"execution-left-section\">\n <div class=\"execution-status\">\n <div class=\"status-indicator\" [style.background-color]=\"getExecutionStatusColor(execution.Status)\">\n <i [class]=\"getExecutionStatusIcon(execution.Status)\"></i>\n </div>\n <div class=\"execution-info\">\n <div class=\"execution-title\">\n <i class=\"fa-solid fa-chevron-right expand-icon\" [class.expanded]=\"expandedExecutions[execution.ID]\"></i>\n Execution #{{ execution.ID.substring(0, 8) }}\n </div>\n <div class=\"execution-date\">{{ execution.__mj_CreatedAt | date:'MMM d, h:mm a' }}</div>\n </div>\n </div>\n <div class=\"execution-metrics\">\n @if (execution.Configuration) {\n <div class=\"metric-item\">\n <i class=\"fa-solid fa-cog\"></i>\n <span class=\"metric-label\">Config:</span>\n <span class=\"metric-value\">{{ execution.Configuration }}</span>\n </div>\n }\n @if (execution.CompletedAt) {\n <div class=\"metric-item\">\n <i class=\"fa-solid fa-stopwatch\"></i>\n <span class=\"metric-label\">Duration:</span>\n <span class=\"metric-value\">{{ formatExecutionTimeFromDates(execution.StartedAt, execution.CompletedAt) }}</span>\n </div>\n } @else if (execution.Status === 'Running') {\n <div class=\"metric-item\">\n <i class=\"fa-solid fa-clock\"></i>\n <span class=\"metric-label\">Running:</span>\n <!-- <span class=\"metric-value\">{{ execution.StartedAt | runningTime }}</span> -->\n </div>\n }\n @if (execution.TotalTokensUsedRollup || execution.TotalTokensUsed) {\n <div class=\"metric-item\">\n <i class=\"fa-solid fa-microchip\"></i>\n <span class=\"metric-label\">Tokens:</span>\n <span class=\"metric-value\">{{ formatTokenCount(execution.TotalTokensUsedRollup || execution.TotalTokensUsed) }}</span>\n </div>\n }\n @if (execution.TotalCostRollup || execution.TotalCost) {\n <div class=\"metric-item\">\n <i class=\"fa-solid fa-dollar-sign\"></i>\n <span class=\"metric-label\">Cost:</span>\n <span class=\"metric-value\">${{ formatCost(execution.TotalCostRollup || execution.TotalCost) }}</span>\n </div>\n }\n </div>\n </div>\n <div class=\"execution-actions\">\n <button class=\"action-btn\" (click)=\"openExecutionRecord(execution.ID); $event.stopPropagation()\" title=\"View details\">\n <i class=\"fa-solid fa-external-link-alt\"></i>\n </button>\n </div>\n </div>\n @if (expandedExecutions[execution.ID]) {\n <div class=\"execution-expanded-content\">\n <!-- Detailed Metrics -->\n <div class=\"detailed-metrics\">\n <div class=\"metrics-grid\">\n <div class=\"metric-detail\">\n <i class=\"fa-solid fa-clock\"></i>\n <div class=\"metric-info\">\n <span class=\"metric-title\">Started</span>\n <span class=\"metric-data\">{{ execution.StartedAt | date:'medium' }}</span>\n </div>\n </div>\n @if (execution.CompletedAt) {\n <div class=\"metric-detail\">\n <i class=\"fa-solid fa-check-circle\"></i>\n <div class=\"metric-info\">\n <span class=\"metric-title\">Completed</span>\n <span class=\"metric-data\">{{ execution.CompletedAt | date:'medium' }}</span>\n </div>\n </div>\n }\n @if (execution.TotalTokensUsed) {\n <div class=\"metric-detail\">\n <i class=\"fa-solid fa-microchip\"></i>\n <div class=\"metric-info\">\n <span class=\"metric-title\">Direct Tokens</span>\n <span class=\"metric-data\">{{ formatTokenCount(execution.TotalTokensUsed) }}</span>\n </div>\n </div>\n }\n @if (execution.TotalTokensUsedRollup && execution.TotalTokensUsedRollup !== execution.TotalTokensUsed) {\n <div class=\"metric-detail\">\n <i class=\"fa-solid fa-sitemap\"></i>\n <div class=\"metric-info\">\n <span class=\"metric-title\">Total + Sub-agents</span>\n <span class=\"metric-data\">{{ formatTokenCount(execution.TotalTokensUsedRollup) }}</span>\n </div>\n </div>\n }\n @if (execution.TotalCost) {\n <div class=\"metric-detail\">\n <i class=\"fa-solid fa-dollar-sign\"></i>\n <div class=\"metric-info\">\n <span class=\"metric-title\">Direct Cost</span>\n <span class=\"metric-data\">${{ formatCost(execution.TotalCost) }}</span>\n </div>\n </div>\n }\n @if (execution.TotalCostRollup && execution.TotalCostRollup !== execution.TotalCost) {\n <div class=\"metric-detail\">\n <i class=\"fa-solid fa-calculator\"></i>\n <div class=\"metric-info\">\n <span class=\"metric-title\">Total + Sub-agents</span>\n <span class=\"metric-data\">${{ formatCost(execution.TotalCostRollup) }}</span>\n </div>\n </div>\n }\n @if (execution.ConversationID) {\n <div class=\"metric-detail\">\n <i class=\"fa-solid fa-comments\"></i>\n <div class=\"metric-info\">\n <span class=\"metric-title\">Conversation</span>\n <span class=\"metric-data\">{{ execution.ConversationID.substring(0, 8) }}...</span>\n </div>\n </div>\n }\n </div>\n </div>\n @if (execution.Result) {\n <div class=\"result-section\">\n <h5><i class=\"fa-solid fa-file-text\"></i> Result</h5>\n <mj-code-editor\n [value]=\"getExecutionResultPreview(execution, false)\"\n [readonly]=\"true\"\n language=\"json\"\n [lineWrapping]=\"true\"\n style=\"max-height: 200px; width: 100%;\">\n </mj-code-editor>\n </div>\n }\n @if (execution.ErrorMessage) {\n <div class=\"error-section\">\n <h5><i class=\"fa-solid fa-exclamation-triangle\"></i> Error</h5>\n <div class=\"error-content\">{{ execution.ErrorMessage }}</div>\n </div>\n }\n </div>\n }\n </div>\n }\n <!-- Pagination Controls -->\n @if (totalPages > 1) {\n <div class=\"pagination-controls\">\n <button mjButton\n variant=\"outline\"\n (click)=\"goToPreviousPage()\"\n [disabled]=\"!hasPreviousPage || isLoadingPage\"\n class=\"page-nav-btn\">\n <i class=\"fa-solid fa-chevron-left\"></i>\n Previous\n </button>\n <div class=\"page-info\">\n @if (isLoadingPage) {\n <i class=\"fa-solid fa-spinner fa-spin\"></i>\n Loading...\n } @else {\n Page {{ executionHistoryCurrentPage }} of {{ totalPages }}\n <span class=\"record-count\">({{ totalExecutionHistoryCount }} total)</span>\n }\n </div>\n <button mjButton\n variant=\"outline\"\n (click)=\"goToNextPage()\"\n [disabled]=\"!hasNextPage || isLoadingPage\"\n class=\"page-nav-btn\">\n Next\n <i class=\"fa-solid fa-chevron-right\"></i>\n </button>\n <button mjButton\n variant=\"flat\"\n size=\"sm\"\n (click)=\"navigateToEntity('MJ: AI Agent Runs', '')\"\n class=\"view-all-btn\">\n <i class=\"fa-solid fa-external-link\"></i>\n View All in Grid\n </button>\n </div>\n }\n </div>\n }\n </div>\n </mj-accordion-panel>\n }\n <!-- Actions -->\n @if (record.ID) {\n <mj-accordion-panel id=\"actions\"\n [Expanded]=\"GetSectionExpanded('actions', false)\"\n [Disabled]=\"loadingStates.actions\">\n <ng-template mjAccordionTitle>\n <i class=\"fa-solid fa-bolt\"></i> Actions\n @if (loadingStates.actions) {\n <span style=\"margin-left: 8px;\"><i class=\"fa-solid fa-spinner fa-spin\" style=\"font-size: 12px;\"></i></span>\n } @else if (actionCount > 0) {\n <span> ({{ actionCount }})</span>\n }\n </ng-template>\n <div class=\"panel-content\">\n @if (loadingStates.actions) {\n <div class=\"loading-state\">\n <i class=\"fa-solid fa-spinner fa-spin\"></i>\n <p>Loading actions...</p>\n </div>\n } @else {\n <div class=\"section-header\">\n <div class=\"header-actions\">\n @if (EditMode && UserCanCreateActions) {\n <button mjButton variant=\"primary\" size=\"sm\" (click)=\"configureActions()\">\n <i class=\"fa-solid fa-plus\"></i> Add Action\n </button>\n }\n </div>\n </div>\n @if (actionCount === 0) {\n <div class=\"empty-state\">\n <i class=\"fa-solid fa-bolt\"></i>\n <h4>No Actions Configured</h4>\n <p>Add actions to enable this agent to perform specific tasks and operations.</p>\n @if (EditMode && UserCanCreateActions) {\n <button mjButton variant=\"primary\" (click)=\"configureActions()\">\n <i class=\"fa-solid fa-plus\"></i> Configure First Action\n </button>\n }\n </div>\n } @else {\n <div class=\"entity-list\">\n @for (action of agentActions; track action.ID) {\n <div class=\"entity-item action-item\" (click)=\"navigateToEntity('MJ: Actions', action.ID)\">\n <div class=\"item-icon\">\n <i [class]=\"getActionIcon(action)\"></i>\n </div>\n <div class=\"item-content\">\n <div class=\"item-title\">{{ action.Name || 'Untitled Action' }}</div>\n @if (action.Description) {\n <div class=\"item-preview\">{{ action.Description }}</div>\n }\n <div class=\"item-meta\">\n @if (action.Type) {\n <span class=\"meta-tag\">{{ action.Type }}</span>\n }\n <span class=\"status-tag\" [class.active]=\"action.Status==='Active'\" [class.inactive]=\"action.Status!=='Active'\">\n <i class=\"fa-solid\" [class.fa-check-circle]=\"action.Status==='Active'\" [class.fa-times-circle]=\"action.Status!=='Active'\"></i>\n {{ action.Status }}\n </span>\n </div>\n </div>\n <div class=\"item-actions\">\n @if (EditMode && UserCanDeleteActions) {\n <button mjButton\n variant=\"flat\"\n size=\"sm\"\n (click)=\"removeAction(action, $event)\"\n title=\"Remove action\"\n class=\"error-action\">\n <i class=\"fa-solid fa-trash\"></i>\n </button>\n }\n <i class=\"fa-solid fa-external-link\"></i>\n </div>\n </div>\n }\n @if (actionCount > agentActions.length) {\n <div class=\"view-more-item\" (click)=\"navigateToEntity('MJ: AI Agent Actions', '')\">\n <span>View all {{ actionCount }} actions...</span>\n </div>\n }\n </div>\n }\n }\n </div>\n </mj-accordion-panel>\n }\n <!-- Sub-Agents (Unified View with Filter) -->\n @if (record.ID) {\n <mj-accordion-panel id=\"subagents\"\n [Expanded]=\"GetSectionExpanded('subagents', false)\"\n [Disabled]=\"loadingStates.subAgents\">\n <ng-template mjAccordionTitle>\n <i class=\"fa-solid fa-sitemap\"></i> Sub-Agents\n @if (loadingStates.subAgents) {\n <span style=\"margin-left: 8px;\"><i class=\"fa-solid fa-spinner fa-spin\" style=\"font-size: 12px;\"></i></span>\n } @else if (totalSubAgentCount > 0) {\n <span> ({{ totalSubAgentCount }})</span>\n }\n </ng-template>\n <div class=\"panel-content\">\n <!-- Filter Controls -->\n <div class=\"section-header sub-agent-filter-header\">\n <div class=\"filter-controls\">\n <div class=\"mj-button-group\">\n <button mjButton\n size=\"sm\"\n [class.active]=\"subAgentFilter === 'all'\"\n (click)=\"setSubAgentFilter('all')\">\n <i class=\"fa-solid fa-layer-group\"></i>\n All ({{ totalSubAgentCount }})\n </button>\n <button mjButton\n size=\"sm\"\n [class.active]=\"subAgentFilter === 'child'\"\n (click)=\"setSubAgentFilter('child')\">\n <i class=\"fa-solid fa-link\"></i>\n Child ({{ childSubAgentCount }})\n </button>\n <button mjButton\n size=\"sm\"\n [class.active]=\"subAgentFilter === 'related'\"\n (click)=\"setSubAgentFilter('related')\">\n <i class=\"fa-solid fa-share-nodes\"></i>\n Related ({{ relatedSubAgentCount }})\n </button>\n </div>\n </div>\n <div class=\"header-actions\">\n @if (EditMode && UserCanCreateSubAgents) {\n <button mjButton\n variant=\"primary\"\n size=\"sm\"\n (click)=\"createChildSubAgent()\"\n title=\"Create a new child sub-agent that shares this agent's payload\">\n <i class=\"fa-solid fa-link\"></i>\n Create Child\n </button>\n <button mjButton\n size=\"sm\"\n (click)=\"linkRelatedSubAgent()\"\n title=\"Link an existing agent as a related sub-agent with payload mapping\">\n <i class=\"fa-solid fa-share-nodes\"></i>\n Link Related\n </button>\n }\n </div>\n </div>\n <!-- Empty State -->\n @if (totalSubAgentCount === 0) {\n <div class=\"empty-state\">\n <i class=\"fa-solid fa-sitemap\"></i>\n <h4>No Sub-Agents</h4>\n <p>Sub-agents help build complex workflows through hierarchical orchestration.</p>\n <div class=\"empty-state-info\">\n <div class=\"info-card\">\n <i class=\"fa-solid fa-link\" style=\"color: var(--mj-status-info);\"></i>\n <strong>Child Sub-Agents</strong>\n <p>Share payload structure, dedicated to parent</p>\n </div>\n <div class=\"info-card\">\n <i class=\"fa-solid fa-share-nodes\" style=\"color: var(--mj-brand-primary);\"></i>\n <strong>Related Sub-Agents</strong>\n <p>Reusable agents with payload mapping</p>\n </div>\n </div>\n </div>\n } @else {\n <!-- Unified Sub-Agent List -->\n <div class=\"entity-list\">\n @for (item of filteredSubAgents; track item.agent.ID) {\n <div class=\"entity-item sub-agent-item\"\n [class.child-sub-agent]=\"item.type === 'child'\"\n [class.related-sub-agent]=\"item.type === 'related'\"\n (click)=\"navigateToEntity('MJ: AI Agents', item.agent.ID)\">\n <!-- Type Badge -->\n <div class=\"sub-agent-type-badge\"\n [style.background-color]=\"getSubAgentBadgeColor(item)\">\n <i [class]=\"getSubAgentBadgeIcon(item)\"></i>\n {{ getSubAgentBadgeText(item) }}\n </div>\n <!-- Agent Icon -->\n <div class=\"item-icon\">\n @if (hasSubAgentLogoURL(item.agent)) {\n <img [src]=\"item.agent.LogoURL\"\n [alt]=\"item.agent.Name + ' logo'\"\n class=\"sub-agent-logo\">\n } @else {\n <i [class]=\"getSubAgentIcon(item.agent)\"></i>\n }\n </div>\n <!-- Agent Content -->\n <div class=\"item-content\">\n <div class=\"item-title\">{{ item.agent.Name || 'Untitled Sub-Agent' }}</div>\n @if (item.agent.Description) {\n <div class=\"item-preview\">{{ item.agent.Description }}</div>\n }\n <div class=\"item-meta\">\n <!-- Payload Info -->\n <span class=\"meta-tag payload-info\">\n <i class=\"fa-solid fa-database\"></i>\n {{ getSubAgentPayloadInfo(item) }}\n </span>\n <!-- Status -->\n @if (item.agent.Status) {\n <span class=\"status-tag\"\n [style.background-color]=\"getStatusBadgeColor()\">\n {{ item.agent.Status }}\n </span>\n }\n <!-- Agent Type -->\n @if (item.agent.Type) {\n <span class=\"meta-tag\">{{ item.agent.Type }}</span>\n }\n </div>\n </div>\n <!-- Actions -->\n <div class=\"item-actions\">\n @if (EditMode) {\n <!-- Output Mapping Config (Related only) -->\n @if (item.type === 'related') {\n <button mjButton\n variant=\"flat\"\n size=\"sm\"\n (click)=\"configureOutputMapping(item, $event)\"\n title=\"Configure output mapping\">\n <i class=\"fa-solid fa-exchange-alt\"></i>\n </button>\n }\n <!-- Advanced Settings (Child only) -->\n @if (item.type === 'child' && UserCanCreateSubAgents) {\n <button mjButton\n variant=\"flat\"\n size=\"sm\"\n (click)=\"openSubAgentAdvancedSettings(item.agent, $event)\"\n title=\"Advanced settings\">\n <i class=\"fa-solid fa-cog\"></i>\n </button>\n }\n <!-- Remove/Unlink -->\n @if (UserCanDeleteSubAgents) {\n <button mjButton\n variant=\"flat\"\n size=\"sm\"\n (click)=\"item.type === 'child' ? removeChildSubAgent(item, $event) : unlinkRelatedSubAgent(item, $event)\"\n [title]=\"item.type === 'child' ? 'Delete child sub-agent' : 'Unlink related sub-agent'\"\n class=\"error-action\">\n <i [class]=\"item.type === 'child' ? 'fa-solid fa-trash' : 'fa-solid fa-unlink'\"></i>\n </button>\n }\n }\n <i class=\"fa-solid fa-external-link\"></i>\n </div>\n </div>\n }\n </div>\n }\n </div>\n </mj-accordion-panel>\n }\n <!-- Prompts (With Model Selection) -->\n @if (record.ID) {\n <mj-accordion-panel id=\"prompts\"\n [Expanded]=\"GetSectionExpanded('prompts', false)\"\n [Disabled]=\"loadingStates.prompts\">\n <ng-template mjAccordionTitle>\n <i class=\"fa-solid fa-comments\"></i> Prompts\n @if (loadingStates.prompts) {\n <span style=\"margin-left: 8px;\"><i class=\"fa-solid fa-spinner fa-spin\" style=\"font-size: 12px;\"></i></span>\n } @else if (promptCount > 0) {\n <span> ({{ promptCount }})</span>\n }\n </ng-template>\n <div class=\"panel-content\">\n <div class=\"section-header\">\n <div class=\"prompt-controls\">\n <!-- Model Selection Mode Control -->\n <div class=\"model-selection-mode\">\n <label class=\"model-selection-label\">\n <i class=\"fa-solid fa-sliders\"></i>\n Model Selection:\n </label>\n @if (EditMode) {\n <mj-dropdown\n [(ngModel)]=\"record.ModelSelectionMode\"\n name=\"modelSelectionMode\"\n [Data]=\"modelSelectionModes\"\n TextField=\"text\"\n ValueField=\"value\"\n [ValuePrimitive]=\"true\"\n class=\"model-selection-dropdown\">\n </mj-dropdown>\n } @else {\n <span class=\"model-selection-value\">{{ record.ModelSelectionMode || 'Agent Type' }}</span>\n }\n </div>\n </div>\n <div class=\"header-actions\">\n @if (EditMode && UserCanCreateNewPrompts) {\n <button mjButton variant=\"primary\" size=\"sm\" (click)=\"addPrompt()\">\n <i class=\"fa-solid fa-plus\"></i> Add Prompt\n </button>\n }\n </div>\n </div>\n @if (promptCount === 0) {\n <div class=\"empty-state\">\n <i class=\"fa-solid fa-comments\"></i>\n <h4>No Prompts Configured</h4>\n <p>Add prompts to define how this agent processes requests and generates responses.</p>\n @if (EditMode && UserCanCreateNewPrompts) {\n <button mjButton variant=\"primary\" (click)=\"addPrompt()\">\n <i class=\"fa-solid fa-plus\"></i> Create First Prompt\n </button>\n }\n </div>\n } @else {\n <div class=\"entity-list\">\n @for (prompt of agentPrompts; track prompt.ID) {\n <div class=\"entity-item prompt-item\" (click)=\"navigateToEntity('MJ: AI Prompts', prompt.ID)\">\n <div class=\"item-icon\">\n <i class=\"fa-solid fa-comment-dots\"></i>\n </div>\n <div class=\"item-content\">\n <div class=\"item-title\">{{ prompt.Name }}</div>\n @if (prompt.TemplateText) {\n <div class=\"item-preview\">{{ prompt.TemplateText.substring(0, 120) }}{{ prompt.TemplateText.length > 120 ? '...' : '' }}</div>\n }\n <div class=\"item-meta\">\n @if (prompt.PromptRole) {\n <span class=\"meta-tag\">{{ prompt.PromptRole }}</span>\n }\n </div>\n </div>\n <div class=\"item-actions\">\n @if (EditMode && UserCanCreatePrompts) {\n <button mjButton\n variant=\"flat\"\n size=\"sm\"\n (click)=\"openPromptAdvancedSettings(prompt, $event)\"\n title=\"Advanced settings\">\n <i class=\"fa-solid fa-cog\"></i>\n </button>\n }\n @if (EditMode && UserCanDeletePrompts) {\n <button mjButton\n variant=\"flat\"\n size=\"sm\"\n (click)=\"removePrompt(prompt, $event)\"\n title=\"Remove prompt\"\n class=\"error-action\">\n <i class=\"fa-solid fa-trash\"></i>\n </button>\n }\n <i class=\"fa-solid fa-external-link\"></i>\n </div>\n </div>\n }\n @if (promptCount > agentPrompts.length) {\n <div class=\"view-more-item\" (click)=\"navigateToEntity('MJ: AI Prompts', '')\">\n <span>View all {{ promptCount }} prompts...</span>\n </div>\n }\n </div>\n }\n </div>\n </mj-accordion-panel>\n }\n <!-- Learning & Analytics -->\n @if (record.ID) {\n <mj-accordion-panel id=\"learning\"\n [Expanded]=\"GetSectionExpanded('learning', false)\"\n [Disabled]=\"loadingStates.learningCycles\">\n <ng-template mjAccordionTitle>\n <i class=\"fa-solid fa-brain\"></i> Learning Cycles\n @if (loadingStates.learningCycles) {\n <span style=\"margin-left: 8px;\"><i class=\"fa-solid fa-spinner fa-spin\" style=\"font-size: 12px;\"></i></span>\n } @else if (learningCycleCount > 0) {\n <span> ({{ learningCycleCount }})</span>\n }\n </ng-template>\n <div class=\"panel-content\">\n <div class=\"section-header\">\n <div class=\"section-description\">\n Monitor and manage learning cycles, training sessions, and performance analytics.\n </div>\n </div>\n @if (learningCycleCount === 0) {\n <div class=\"empty-state\">\n <i class=\"fa-solid fa-brain\"></i>\n <h4>No Learning Cycles</h4>\n <p>Learning cycles will appear here as the agent processes requests and improves over time.</p>\n </div>\n } @else {\n <div class=\"entity-list\">\n @for (cycle of learningCycles; track cycle.ID) {\n <div class=\"entity-item learning-item\" (click)=\"navigateToEntity('MJ: AI Agent Learning Cycles', cycle.ID)\">\n <div class=\"item-icon\">\n <i class=\"fa-solid fa-brain\"></i>\n </div>\n <div class=\"item-content\">\n <div class=\"item-title\">Learning Cycle {{ cycle.ID.substring(0, 8) }}</div>\n <div class=\"item-meta\">\n @if (cycle.StartedAt) {\n <span class=\"meta-tag\">\n <i class=\"fa-solid fa-calendar\"></i>\n {{ cycle.StartedAt | date:'short' }}\n </span>\n }\n @if (cycle.Status) {\n <span class=\"status-tag\">{{ cycle.Status }}</span>\n }\n </div>\n </div>\n <div class=\"item-actions\">\n <i class=\"fa-solid fa-external-link\"></i>\n </div>\n </div>\n }\n @if (learningCycleCount > learningCycles.length) {\n <div class=\"view-more-item\" (click)=\"navigateToEntity('MJ: AI Agent Learning Cycles', '')\">\n <span>View all {{ learningCycleCount }} cycles...</span>\n </div>\n }\n </div>\n }\n </div>\n </mj-accordion-panel>\n }\n <!-- Notes & Documentation -->\n @if (record.ID) {\n <mj-accordion-panel id=\"notes\"\n [Expanded]=\"GetSectionExpanded('notes', false)\"\n [Disabled]=\"loadingStates.notes\">\n <ng-template mjAccordionTitle>\n <i class=\"fa-solid fa-sticky-note\"></i> Notes\n @if (loadingStates.notes) {\n <span style=\"margin-left: 8px;\"><i class=\"fa-solid fa-spinner fa-spin\" style=\"font-size: 12px;\"></i></span>\n } @else if (noteCount > 0) {\n <span> ({{ noteCount }})</span>\n }\n </ng-template>\n <div class=\"panel-content\">\n <div class=\"section-header\">\n <div class=\"section-description\">\n Manage notes, documentation, and annotations for this agent.\n </div>\n <div class=\"header-actions\">\n @if (EditMode && UserCanCreateNotes) {\n <button mjButton variant=\"primary\" size=\"sm\" (click)=\"addNote()\">\n <i class=\"fa-solid fa-plus\"></i> Add Note\n </button>\n }\n </div>\n </div>\n @if (noteCount === 0) {\n <div class=\"empty-state\">\n <i class=\"fa-solid fa-sticky-note\"></i>\n <h4>No Notes</h4>\n <p>Add notes to document important information, observations, or instructions for this agent.</p>\n @if (EditMode && UserCanCreateNotes) {\n <button mjButton variant=\"primary\" (click)=\"addNote()\">\n <i class=\"fa-solid fa-plus\"></i> Create First Note\n </button>\n }\n </div>\n } @else {\n <div class=\"entity-list\">\n @for (note of agentNotes; track note.ID) {\n <div class=\"entity-item note-item\" (click)=\"navigateToEntity('MJ: AI Agent Notes', note.ID)\">\n <div class=\"item-icon\">\n <i class=\"fa-solid fa-sticky-note\"></i>\n </div>\n <div class=\"item-content\">\n <div class=\"item-title\">{{ note.Type || 'Note' }}</div>\n @if (note.Note) {\n <div class=\"item-preview\">{{ note.Note.substring(0, 100) }}{{ note.Note.length > 100 ? '...' : '' }}</div>\n }\n <div class=\"item-meta\">\n @if (note.__mj_CreatedAt) {\n <span class=\"meta-tag\">\n <i class=\"fa-solid fa-calendar\"></i>\n {{ note.__mj_CreatedAt | date:'short' }}\n </span>\n }\n </div>\n </div>\n <div class=\"item-actions\">\n <i class=\"fa-solid fa-external-link\"></i>\n </div>\n </div>\n }\n @if (noteCount > agentNotes.length) {\n <div class=\"view-more-item\" (click)=\"navigateToEntity('MJ: AI Agent Notes', '')\">\n <span>View all {{ noteCount }} notes...</span>\n </div>\n }\n </div>\n }\n </div>\n </mj-accordion-panel>\n }\n <!-- Search -->\n @if (record.ID) {\n <mj-accordion-panel id=\"search\"\n [Expanded]=\"GetSectionExpanded('search', false)\">\n <ng-template mjAccordionTitle>\n <i class=\"fa-solid fa-magnifying-glass\"></i> Search\n </ng-template>\n <div class=\"panel-content\">\n <div class=\"section-header\">\n <div class=\"section-description\">\n Control this agent's access to <strong>Scoped Search</strong> and assign the scopes it can use for pre-execution RAG or agent-invoked search.\n </div>\n </div>\n\n <!-- Scope Access mode -->\n <div class=\"agent-search-access\">\n <label class=\"agent-search-access-option\" [class.active]=\"record.SearchScopeAccess === 'All'\">\n <input type=\"radio\" name=\"SearchScopeAccess\" value=\"All\" [checked]=\"record.SearchScopeAccess === 'All'\" [disabled]=\"!EditMode\" (change)=\"record.SearchScopeAccess = 'All'\">\n <i class=\"fa-solid fa-globe\"></i>\n <div class=\"agent-search-access-text\">\n <div class=\"agent-search-access-title\">All</div>\n <div class=\"agent-search-access-desc\">Can use any scope including Global. No scope restriction.</div>\n </div>\n </label>\n <label class=\"agent-search-access-option\" [class.active]=\"record.SearchScopeAccess === 'Assigned'\">\n <input type=\"radio\" name=\"SearchScopeAccess\" value=\"Assigned\" [checked]=\"record.SearchScopeAccess === 'Assigned'\" [disabled]=\"!EditMode\" (change)=\"record.SearchScopeAccess = 'Assigned'\">\n <i class=\"fa-solid fa-user-check\"></i>\n <div class=\"agent-search-access-text\">\n <div class=\"agent-search-access-title\">Assigned</div>\n <div class=\"agent-search-access-desc\">Can use ONLY scopes listed below. Other scopes are rejected with ACCESS_DENIED.</div>\n </div>\n </label>\n <label class=\"agent-search-access-option\" [class.active]=\"record.SearchScopeAccess === 'None'\">\n <input type=\"radio\" name=\"SearchScopeAccess\" value=\"None\" [checked]=\"record.SearchScopeAccess === 'None'\" [disabled]=\"!EditMode\" (change)=\"record.SearchScopeAccess = 'None'\">\n <i class=\"fa-solid fa-ban\"></i>\n <div class=\"agent-search-access-text\">\n <div class=\"agent-search-access-title\">None</div>\n <div class=\"agent-search-access-desc\">No search capability. The Scoped Search action is disabled for this agent.</div>\n </div>\n </label>\n </div>\n\n <!-- Assigned scopes grid -->\n @if (record.SearchScopeAccess !== 'None') {\n <div class=\"agent-search-grid-header\">\n <h4>Assigned Scopes</h4>\n <p class=\"section-description\">\n <strong>Pre-Execution</strong> scopes are injected automatically before the first LLM call.\n <strong>Agent-Invoked</strong> scopes are callable via the Scoped Search tool during execution.\n <strong>Both</strong> covers both paths.\n </p>\n </div>\n <mj-search-scope-child-grid\n [ParentID]=\"record.ID\"\n ChildEntityName=\"MJ: AI Agent Search Scopes\"\n ParentFieldName=\"AgentID\"\n [Columns]=\"AgentSearchScopeColumns\"\n [Disabled]=\"!EditMode\"\n AddButtonLabel=\"+ Assign another scope\"\n EmptyMessage=\"No scopes assigned yet. Assign at least one if this agent will use Scoped Search.\"\n (RowsChanged)=\"LoadPermissionSummary()\">\n </mj-search-scope-child-grid>\n\n <!-- Phase 2A: read-only audit summary of who has\n permission on each of this agent's assigned scopes.\n Editing happens in the Knowledge Hub Config dashboard\n (see \"Permissions\" subtab under Search Scopes). -->\n <div class=\"agent-search-section\" style=\"margin-top: 16px;\">\n <h4 style=\"margin: 0 0 8px 0;\">\n <i class=\"fa-solid fa-shield-halved\"></i> Effective scope permissions\n </h4>\n <p class=\"section-description\" style=\"margin-bottom: 8px;\">\n Per-user / per-role grants on the scopes assigned above. Edit grants in\n <strong>Knowledge Hub Config → Search Scopes → Permissions</strong>.\n </p>\n @if (IsLoadingPermissions) {\n <div style=\"color: var(--mj-text-muted);\">Loading permissions…</div>\n } @else if (PermissionSummary.length === 0) {\n <div style=\"color: var(--mj-text-muted); font-style: italic;\">\n No scopes assigned yet — permissions will appear here once you add scopes above.\n </div>\n } @else {\n @for (s of PermissionSummary; track s.ScopeID) {\n <div style=\"margin-bottom: 12px; padding: 8px 12px; background: var(--mj-bg-surface-card); border: 1px solid var(--mj-border-subtle); border-radius: 4px;\">\n <div style=\"font-weight: 600; margin-bottom: 4px;\">{{ s.ScopeName }}</div>\n @if (s.Permissions.length === 0) {\n <div style=\"color: var(--mj-text-muted); font-size: 0.9em;\">\n No explicit permissions. Access falls back to this agent's <code>SearchScopeAccess</code> setting.\n </div>\n } @else {\n <ul style=\"margin: 4px 0 0 16px; padding: 0;\">\n @for (p of s.Permissions; track p.Principal + p.Level) {\n <li style=\"font-size: 0.9em; padding: 2px 0;\">\n <i class=\"fa-solid\" [class.fa-user]=\"p.PrincipalType === 'User'\" [class.fa-users]=\"p.PrincipalType === 'Role'\"></i>\n <strong>{{ p.Principal }}</strong>\n <span style=\"color: var(--mj-text-muted);\">({{ p.PrincipalType }})</span>\n — <span [style.color]=\"p.Level === 'None' ? 'var(--mj-status-error-text)' : 'var(--mj-text-primary)'\">{{ p.Level }}</span>\n </li>\n }\n </ul>\n }\n </div>\n }\n }\n </div>\n }\n </div>\n </mj-accordion-panel>\n }\n <!-- Payload -->\n <mj-accordion-panel id=\"payload\"\n [Expanded]=\"GetSectionExpanded('payload', false)\">\n <ng-template mjAccordionTitle>\n <i class=\"fa-solid fa-exchange-alt\"></i> Payload Management\n </ng-template>\n <div class=\"panel-content\">\n <div class=\"section-header\">\n <div class=\"section-description\">\n Configure how this agent handles data payloads, path routing, and validation between parent and child agents.\n </div>\n </div>\n <!-- Payload Scope Section -->\n <div class=\"payload-section\">\n <h3 class=\"payload-section-title\">\n <i class=\"fa-solid fa-target\"></i>\n Payload Scope\n </h3>\n <div class=\"payload-field-container\">\n <div class=\"payload-field-info\">\n <label class=\"payload-field-label\">Payload Scope Path</label>\n <p class=\"payload-field-description\">\n Specify a path within the parent payload that this sub-agent should operate on.\n Leave empty to receive the entire payload.\n </p>\n </div>\n <div class=\"payload-field-input\">\n <mj-form-field\n FieldName=\"PayloadScope\"\n Type=\"textbox\"\n Caption=\"\"\n [EditMode]=\"EditMode\"\n [Record]=\"record\"\n style=\"width: 100%;\">\n </mj-form-field>\n <div class=\"payload-field-example\">\n <i class=\"fa-solid fa-lightbulb\"></i>\n <span>Example: <code>/customer/profile</code> or <code>/analysis/results</code></span>\n </div>\n </div>\n </div>\n </div>\n <!-- Path Configuration Section -->\n <div class=\"payload-section\">\n <h3 class=\"payload-section-title\">\n <i class=\"fa-solid fa-route\"></i>\n Path Configuration\n </h3>\n <div class=\"payload-paths-grid\">\n <!-- Downstream Paths -->\n <div class=\"payload-path-card\">\n <div class=\"payload-path-header\">\n <div class=\"payload-path-icon downstream\">\n <i class=\"fa-solid fa-arrow-down\"></i>\n </div>\n <div class=\"payload-path-info\">\n <h4>Downstream Paths</h4>\n <p>JSON array of paths to pass to sub-agents</p>\n </div>\n </div>\n <div class=\"payload-path-content\">\n <div class=\"json-editor-container\">\n <mj-code-editor\n [value]=\"record.PayloadDownstreamPaths || '["*"]'\"\n [readonly]=\"!EditMode\"\n language=\"json\"\n [lineWrapping]=\"true\"\n style=\"height: 100px; width: 100%;\"\n (valueChange)=\"updatePayloadField('PayloadDownstreamPaths', $event)\">\n </mj-code-editor>\n </div>\n <div class=\"payload-path-hint\">\n <i class=\"fa-solid fa-info-circle\"></i>\n Use <code>[\"*\"]</code> to pass entire payload or specify paths like <code>[\"user.id\", \"order.*\"]</code>\n </div>\n </div>\n </div>\n <!-- Upstream Paths -->\n <div class=\"payload-path-card\">\n <div class=\"payload-path-header\">\n <div class=\"payload-path-icon upstream\">\n <i class=\"fa-solid fa-arrow-up\"></i>\n </div>\n <div class=\"payload-path-info\">\n <h4>Upstream Paths</h4>\n <p>JSON array of paths sub-agents can write back</p>\n </div>\n </div>\n <div class=\"payload-path-content\">\n <div class=\"json-editor-container\">\n <mj-code-editor\n [value]=\"record.PayloadUpstreamPaths || '["*"]'\"\n [readonly]=\"!EditMode\"\n language=\"json\"\n [lineWrapping]=\"true\"\n style=\"height: 100px; width: 100%;\"\n (valueChange)=\"updatePayloadField('PayloadUpstreamPaths', $event)\">\n </mj-code-editor>\n </div>\n <div class=\"payload-path-hint\">\n <i class=\"fa-solid fa-info-circle\"></i>\n Use <code>[\"*\"]</code> to allow all writes or limit to specific paths\n </div>\n </div>\n </div>\n <!-- Self Read Paths -->\n <div class=\"payload-path-card\">\n <div class=\"payload-path-header\">\n <div class=\"payload-path-icon self-read\">\n <i class=\"fa-solid fa-eye\"></i>\n </div>\n <div class=\"payload-path-info\">\n <h4>Self Read Paths</h4>\n <p>JSON array of paths this agent can read</p>\n </div>\n </div>\n <div class=\"payload-path-content\">\n <div class=\"json-editor-container\">\n <mj-code-editor\n [value]=\"record.PayloadSelfReadPaths || '[]'\"\n [readonly]=\"!EditMode\"\n language=\"json\"\n [lineWrapping]=\"true\"\n style=\"height: 100px; width: 100%;\"\n (valueChange)=\"updatePayloadField('PayloadSelfReadPaths', $event)\">\n </mj-code-editor>\n </div>\n <div class=\"payload-path-hint\">\n <i class=\"fa-solid fa-info-circle\"></i>\n Paths this agent's prompts can read from the payload\n </div>\n </div>\n </div>\n <!-- Self Write Paths -->\n <div class=\"payload-path-card\">\n <div class=\"payload-path-header\">\n <div class=\"payload-path-icon self-write\">\n <i class=\"fa-solid fa-pen\"></i>\n </div>\n <div class=\"payload-path-info\">\n <h4>Self Write Paths</h4>\n <p>JSON array of paths this agent can write to</p>\n </div>\n </div>\n <div class=\"payload-path-content\">\n <div class=\"json-editor-container\">\n <mj-code-editor\n [value]=\"record.PayloadSelfWritePaths || '[]'\"\n [readonly]=\"!EditMode\"\n language=\"json\"\n [lineWrapping]=\"true\"\n style=\"height: 100px; width: 100%;\"\n (valueChange)=\"updatePayloadField('PayloadSelfWritePaths', $event)\">\n </mj-code-editor>\n </div>\n <div class=\"payload-path-hint\">\n <i class=\"fa-solid fa-info-circle\"></i>\n Paths this agent's prompts can write back to the payload\n </div>\n </div>\n </div>\n </div>\n </div>\n <!-- Validation Section -->\n <div class=\"payload-section\">\n <h3 class=\"payload-section-title\">\n <i class=\"fa-solid fa-shield-check\"></i>\n Final Payload Validation\n </h3>\n <div class=\"payload-validation-container\">\n <div class=\"payload-validation-settings\">\n <div class=\"validation-field-group\">\n <label class=\"validation-field-label\">Validation Mode</label>\n <p class=\"validation-field-description\">How to handle validation failures</p>\n <mj-form-field\n FieldName=\"FinalPayloadValidationMode\"\n Type=\"dropdownlist\"\n Caption=\"\"\n [EditMode]=\"EditMode\"\n [Record]=\"record\"\n style=\"width: 100%;\">\n </mj-form-field>\n </div>\n <div class=\"validation-field-group\">\n <label class=\"validation-field-label\">Max Retries</label>\n <p class=\"validation-field-description\">Maximum validation retry attempts</p>\n <mj-form-field\n FieldName=\"FinalPayloadValidationMaxRetries\"\n Type=\"numerictextbox\"\n Caption=\"\"\n [EditMode]=\"EditMode\"\n [Record]=\"record\"\n style=\"width: 100%;\">\n </mj-form-field>\n </div>\n </div>\n <div class=\"payload-validation-schema\">\n <label class=\"validation-schema-label\">\n <i class=\"fa-solid fa-code\"></i>\n Validation Schema\n </label>\n <p class=\"validation-schema-description\">\n JSON schema or validation rules for the final payload structure\n </p>\n <div class=\"validation-schema-editor\">\n <mj-code-editor\n [value]=\"record.FinalPayloadValidation || '{}'\"\n [readonly]=\"!EditMode\"\n language=\"json\"\n [lineWrapping]=\"true\"\n style=\"height: 200px; width: 100%;\"\n (valueChange)=\"updatePayloadField('FinalPayloadValidation', $event)\">\n </mj-code-editor>\n </div>\n </div>\n </div>\n </div>\n </div>\n </mj-accordion-panel>\n <!-- Execution Guardrails (New Separate Panel) -->\n <mj-accordion-panel id=\"guardrails\"\n [Expanded]=\"GetSectionExpanded('guardrails', false)\">\n <ng-template mjAccordionTitle>\n <i class=\"fa-solid fa-shield-halved\"></i> Execution Guardrails\n </ng-template>\n <div class=\"panel-content\">\n <div class=\"section-header\">\n <div class=\"section-description\">\n Set limits to prevent runaway agent executions and control resource usage.\n </div>\n </div>\n <div class=\"form-fields-grid\">\n <mj-form-field\n FieldName=\"MaxCostPerRun\"\n Type=\"numerictextbox\"\n Caption=\"Max Cost ($)\"\n Description=\"Maximum cost per run\"\n [EditMode]=\"EditMode\"\n [Record]=\"record\">\n </mj-form-field>\n <mj-form-field\n FieldName=\"MaxTokensPerRun\"\n Type=\"numerictextbox\"\n Caption=\"Max Tokens\"\n Description=\"Maximum tokens per run\"\n [EditMode]=\"EditMode\"\n [Record]=\"record\">\n </mj-form-field>\n <mj-form-field\n FieldName=\"MaxIterationsPerRun\"\n Type=\"numerictextbox\"\n Caption=\"Max Iterations\"\n Description=\"Maximum prompt iterations\"\n [EditMode]=\"EditMode\"\n [Record]=\"record\">\n </mj-form-field>\n <mj-form-field\n FieldName=\"MaxTimePerRun\"\n Type=\"numerictextbox\"\n Caption=\"Max Time (seconds)\"\n Description=\"Maximum execution time\"\n [EditMode]=\"EditMode\"\n [Record]=\"record\">\n </mj-form-field>\n </div>\n </div>\n </mj-accordion-panel>\n <!-- Configuration (Settings Panel) -->\n <mj-accordion-panel id=\"config\"\n [Expanded]=\"GetSectionExpanded('config', false)\">\n <ng-template mjAccordionTitle>\n <i class=\"fa-solid fa-cogs\"></i> Configuration\n </ng-template>\n <div class=\"panel-content\">\n <div class=\"section-header\">\n <div class=\"section-description\">\n Configure agent behavior, execution settings, and advanced features.\n </div>\n </div>\n <!-- Identity & Behavior Section -->\n <div class=\"config-section\">\n <h3 class=\"config-section-title\">\n <i class=\"fa-solid fa-id-card\"></i>\n Identity & Behavior\n </h3>\n <div class=\"config-grid\">\n <div class=\"config-card\">\n <div class=\"config-card-header\">\n <div class=\"config-card-icon\">\n <i class=\"fa-solid fa-toggle-on\"></i>\n </div>\n <div class=\"config-card-info\">\n <h4>Agent Status</h4>\n <p>Current availability and operational status</p>\n </div>\n </div>\n <div class=\"config-card-content\">\n @if (EditMode) {\n <mj-dropdown\n [(ngModel)]=\"record.Status\"\n [Data]=\"statusOptions\"\n TextField=\"text\"\n ValueField=\"value\"\n [ValuePrimitive]=\"true\"\n name=\"agentStatus\"\n class=\"config-field-input\">\n </mj-dropdown>\n } @else {\n <span class=\"config-field-display\">{{ record.Status || 'Not Set' }}</span>\n }\n </div>\n </div>\n <div class=\"config-card\">\n <div class=\"config-card-header\">\n <div class=\"config-card-icon\">\n <i class=\"fa-solid fa-sitemap\"></i>\n </div>\n <div class=\"config-card-info\">\n <h4>Agent Type</h4>\n <p>Category and system-level behavior</p>\n </div>\n </div>\n <div class=\"config-card-content\">\n @if (EditMode) {\n <mj-dropdown\n [(ngModel)]=\"record.TypeID\"\n [Data]=\"agentTypes\"\n TextField=\"Name\"\n ValueField=\"ID\"\n [ValuePrimitive]=\"true\"\n name=\"agentTypeID\"\n class=\"config-field-input\">\n </mj-dropdown>\n } @else {\n <span class=\"config-field-display\">{{ record.Type || 'Not Set' }}</span>\n }\n </div>\n </div>\n <div class=\"config-card\">\n <div class=\"config-card-header\">\n <div class=\"config-card-icon\">\n <i class=\"fa-solid fa-folder-tree\"></i>\n </div>\n <div class=\"config-card-info\">\n <h4>Category</h4>\n <p>Organizational category for this agent</p>\n </div>\n </div>\n <div class=\"config-card-content\">\n @if (EditMode) {\n <mj-tree-dropdown\n [BranchConfig]=\"CategoryBranchConfig\"\n [Value]=\"SelectedCategoryKey\"\n SelectionMode=\"single\"\n SelectableTypes=\"branch\"\n Placeholder=\"Select a category...\"\n [Clearable]=\"true\"\n [EnableSearch]=\"true\"\n (ValueChange)=\"OnCategoryChange($event)\">\n </mj-tree-dropdown>\n } @else {\n <span class=\"config-field-display\">{{ record.Category || 'Not Set' }}</span>\n }\n </div>\n </div>\n <div class=\"config-card\">\n <div class=\"config-card-header\">\n <div class=\"config-card-icon\">\n <i class=\"fa-solid fa-bolt\"></i>\n </div>\n <div class=\"config-card-info\">\n <h4>Expose as Action</h4>\n <p>Make available as an action for other agents</p>\n </div>\n </div>\n <div class=\"config-card-content\">\n <mj-form-field\n FieldName=\"ExposeAsAction\"\n Type=\"checkbox\"\n Caption=\"\"\n [EditMode]=\"EditMode\"\n [Record]=\"record\">\n </mj-form-field>\n </div>\n </div>\n <div class=\"config-card full-width\">\n <div class=\"config-card-header\">\n <div class=\"config-card-icon\">\n <i class=\"fa-solid fa-align-left\"></i>\n </div>\n <div class=\"config-card-info\">\n <h4>Description</h4>\n <p>Detailed agent description and purpose</p>\n </div>\n </div>\n <div class=\"config-card-content\">\n <mj-form-field\n FieldName=\"Description\"\n Type=\"textarea\"\n Caption=\"\"\n [EditMode]=\"EditMode\"\n [Record]=\"record\"\n style=\"width: 100%;\">\n </mj-form-field>\n </div>\n </div>\n </div>\n </div>\n <!-- Execution Settings Section -->\n <div class=\"config-section\">\n <h3 class=\"config-section-title\">\n <i class=\"fa-solid fa-play\"></i>\n Execution Settings\n </h3>\n <div class=\"config-grid\">\n <div class=\"config-card\">\n <div class=\"config-card-header\">\n <div class=\"config-card-icon\">\n <i class=\"fa-solid fa-layer-group\"></i>\n </div>\n <div class=\"config-card-info\">\n <h4>Execution Mode</h4>\n <p>How sub-agents are executed</p>\n </div>\n </div>\n <div class=\"config-card-content\">\n <mj-form-field\n FieldName=\"ExecutionMode\"\n Type=\"dropdownlist\"\n Caption=\"\"\n [EditMode]=\"EditMode\"\n [Record]=\"record\">\n </mj-form-field>\n </div>\n </div>\n <div class=\"config-card\">\n <div class=\"config-card-header\">\n <div class=\"config-card-icon\">\n <i class=\"fa-solid fa-sort-numeric-down\"></i>\n </div>\n <div class=\"config-card-info\">\n <h4>Execution Order</h4>\n <p>Order when run with siblings</p>\n </div>\n </div>\n <div class=\"config-card-content\">\n <mj-form-field\n FieldName=\"ExecutionOrder\"\n Type=\"numerictextbox\"\n Caption=\"\"\n [EditMode]=\"EditMode\"\n [Record]=\"record\">\n </mj-form-field>\n </div>\n </div>\n <div class=\"config-card\">\n <div class=\"config-card-header\">\n <div class=\"config-card-icon\">\n <i class=\"fa-solid fa-tachometer-alt\"></i>\n </div>\n <div class=\"config-card-info\">\n <h4>Default Effort Level</h4>\n <p>Default effort level for all prompts (1-100)</p>\n </div>\n </div>\n <div class=\"config-card-content\">\n <mj-form-field\n FieldName=\"DefaultPromptEffortLevel\"\n Type=\"numerictextbox\"\n Caption=\"\"\n [EditMode]=\"EditMode\"\n [Record]=\"record\">\n </mj-form-field>\n <div class=\"config-card-hint\">\n <i class=\"fa-solid fa-info-circle\"></i>\n Higher values request more thorough reasoning (1=minimal, 100=maximum)\n </div>\n </div>\n </div>\n <div class=\"config-card\">\n <div class=\"config-card-header\">\n <div class=\"config-card-icon\">\n <i class=\"fa-solid fa-code\"></i>\n </div>\n <div class=\"config-card-info\">\n <h4>Driver Class</h4>\n <p>Custom implementation class</p>\n </div>\n </div>\n <div class=\"config-card-content\">\n <mj-form-field\n FieldName=\"DriverClass\"\n Type=\"textbox\"\n Caption=\"\"\n [EditMode]=\"EditMode\"\n [Record]=\"record\">\n </mj-form-field>\n </div>\n </div>\n </div>\n </div>\n <!-- Visual Identity Section -->\n <div class=\"config-section\">\n <h3 class=\"config-section-title\">\n <i class=\"fa-solid fa-palette\"></i>\n Visual Identity\n </h3>\n <div class=\"config-grid\">\n <div class=\"config-card\">\n <div class=\"config-card-header\">\n <div class=\"config-card-icon\">\n <i class=\"fa-solid fa-icons\"></i>\n </div>\n <div class=\"config-card-info\">\n <h4>Icon Class</h4>\n <p>Font Awesome icon class</p>\n </div>\n </div>\n <div class=\"config-card-content\">\n <mj-form-field\n FieldName=\"IconClass\"\n Type=\"textbox\"\n Caption=\"\"\n [EditMode]=\"EditMode\"\n [Record]=\"record\">\n </mj-form-field>\n <div class=\"config-card-hint\">\n <i class=\"fa-solid fa-info-circle\"></i>\n Example: <code>fa-solid fa-robot</code>\n </div>\n </div>\n </div>\n <div class=\"config-card\">\n <div class=\"config-card-header\">\n <div class=\"config-card-icon\">\n <i class=\"fa-solid fa-image\"></i>\n </div>\n <div class=\"config-card-info\">\n <h4>Logo URL</h4>\n <p>URL for agent logo image</p>\n </div>\n </div>\n <div class=\"config-card-content\">\n <mj-form-field\n FieldName=\"LogoURL\"\n Type=\"textbox\"\n Caption=\"\"\n [EditMode]=\"EditMode\"\n [Record]=\"record\">\n </mj-form-field>\n <div class=\"config-card-hint\">\n <i class=\"fa-solid fa-info-circle\"></i>\n Takes precedence over Icon Class\n </div>\n </div>\n </div>\n </div>\n </div>\n <!-- Context Compression Section -->\n <div class=\"config-section\">\n <h3 class=\"config-section-title\">\n <i class=\"fa-solid fa-compress\"></i>\n Context Compression\n </h3>\n <div class=\"config-grid\">\n <div class=\"config-card full-width\">\n <div class=\"config-card-header\">\n <div class=\"config-card-icon\">\n <i class=\"fa-solid fa-toggle-on\"></i>\n </div>\n <div class=\"config-card-info\">\n <h4>Enable Context Compression</h4>\n <p>Automatically compress conversation context when message threshold is reached</p>\n </div>\n </div>\n <div class=\"config-card-content\">\n <mj-form-field\n FieldName=\"EnableContextCompression\"\n Type=\"checkbox\"\n Caption=\"\"\n [EditMode]=\"EditMode\"\n [Record]=\"record\"\n (valueChange)=\"onContextCompressionToggle($event)\">\n </mj-form-field>\n </div>\n </div>\n @if (record.EnableContextCompression) {\n <div class=\"config-card\">\n <div class=\"config-card-header\">\n <div class=\"config-card-icon\">\n <i class=\"fa-solid fa-hashtag\"></i>\n </div>\n <div class=\"config-card-info\">\n <h4>Message Threshold</h4>\n <p>Messages before compression triggers</p>\n </div>\n </div>\n <div class=\"config-card-content\">\n <mj-form-field\n FieldName=\"ContextCompressionMessageThreshold\"\n Type=\"numerictextbox\"\n Caption=\"\"\n [EditMode]=\"EditMode\"\n [Record]=\"record\">\n </mj-form-field>\n </div>\n </div>\n <div class=\"config-card\">\n <div class=\"config-card-header\">\n <div class=\"config-card-icon\">\n <i class=\"fa-solid fa-save\"></i>\n </div>\n <div class=\"config-card-info\">\n <h4>Messages to Keep</h4>\n <p>Recent messages to retain uncompressed</p>\n </div>\n </div>\n <div class=\"config-card-content\">\n <mj-form-field\n FieldName=\"ContextCompressionMessageRetentionCount\"\n Type=\"numerictextbox\"\n Caption=\"\"\n [EditMode]=\"EditMode\"\n [Record]=\"record\">\n </mj-form-field>\n </div>\n </div>\n <div class=\"config-card\">\n <div class=\"config-card-header\">\n <div class=\"config-card-icon\">\n <i class=\"fa-solid fa-comment-dots\"></i>\n </div>\n <div class=\"config-card-info\">\n <h4>Compression Prompt</h4>\n <p>Prompt used for summarization</p>\n </div>\n </div>\n <div class=\"config-card-content\">\n @if (EditMode) {\n <div class=\"prompt-selector-container\">\n <div class=\"prompt-display\">\n @if (selectedContextCompressionPrompt) {\n <span class=\"prompt-name\">{{ selectedContextCompressionPrompt.Name }}</span>\n } @else {\n <span class=\"no-prompt\">No prompt selected</span>\n }\n </div>\n <div class=\"prompt-actions\">\n <button type=\"button\"\n mjButton\n variant=\"outline\"\n size=\"sm\"\n (click)=\"openContextCompressionPromptSelector()\"\n class=\"prompt-select-btn\">\n <i class=\"fa-solid fa-search\"></i>\n {{ selectedContextCompressionPrompt ? 'Change' : 'Select' }} Prompt\n </button>\n @if (selectedContextCompressionPrompt) {\n <button type=\"button\"\n mjButton\n variant=\"flat\"\n size=\"sm\"\n (click)=\"clearContextCompressionPrompt()\"\n class=\"prompt-clear-btn\"\n title=\"Clear selection\">\n <i class=\"fa-solid fa-times\"></i>\n </button>\n }\n </div>\n </div>\n } @else {\n <span class=\"config-field-display\">{{ selectedContextCompressionPrompt?.Name || record.ContextCompressionPrompt || 'Not Set' }}</span>\n }\n </div>\n </div>\n }\n </div>\n </div>\n </div>\n </mj-accordion-panel>\n </div>\n </form>\n</mj-record-form-container>\n}\n\n<!-- Permissions Dialog (from @memberjunction/ng-agents) -->\n@if (ShowPermissionsDialog) {\n <mj-agent-permissions-dialog\n [Agent]=\"record\"\n (Closed)=\"onPermissionsDialogClosed()\"\n (PermissionsChanged)=\"refreshRelatedData()\">\n </mj-agent-permissions-dialog>\n}"]}
|