@memberjunction/ng-core-entity-forms 5.30.1 → 5.31.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/__tests__/content-source-form.test.d.ts +2 -0
- package/dist/lib/__tests__/content-source-form.test.d.ts.map +1 -0
- package/dist/lib/__tests__/content-source-form.test.js +183 -0
- package/dist/lib/__tests__/content-source-form.test.js.map +1 -0
- package/dist/lib/custom/AIAgents/add-action-dialog.component.d.ts +2 -1
- package/dist/lib/custom/AIAgents/add-action-dialog.component.d.ts.map +1 -1
- package/dist/lib/custom/AIAgents/add-action-dialog.component.js +6 -4
- package/dist/lib/custom/AIAgents/add-action-dialog.component.js.map +1 -1
- package/dist/lib/custom/AIAgents/agent-advanced-settings-dialog.component.js +2 -2
- package/dist/lib/custom/AIAgents/agent-advanced-settings-dialog.component.js.map +1 -1
- package/dist/lib/custom/AIAgents/agent-prompt-advanced-settings-dialog.component.d.ts +2 -1
- package/dist/lib/custom/AIAgents/agent-prompt-advanced-settings-dialog.component.d.ts.map +1 -1
- package/dist/lib/custom/AIAgents/agent-prompt-advanced-settings-dialog.component.js +6 -4
- package/dist/lib/custom/AIAgents/agent-prompt-advanced-settings-dialog.component.js.map +1 -1
- package/dist/lib/custom/AIAgents/ai-agent-form.component.js +15 -15
- package/dist/lib/custom/AIAgents/ai-agent-form.component.js.map +1 -1
- package/dist/lib/custom/AIAgents/create-prompt-dialog.component.d.ts +2 -1
- package/dist/lib/custom/AIAgents/create-prompt-dialog.component.d.ts.map +1 -1
- package/dist/lib/custom/AIAgents/create-prompt-dialog.component.js +9 -7
- package/dist/lib/custom/AIAgents/create-prompt-dialog.component.js.map +1 -1
- package/dist/lib/custom/AIAgents/create-sub-agent-dialog.component.d.ts +2 -1
- package/dist/lib/custom/AIAgents/create-sub-agent-dialog.component.d.ts.map +1 -1
- package/dist/lib/custom/AIAgents/create-sub-agent-dialog.component.js +11 -9
- package/dist/lib/custom/AIAgents/create-sub-agent-dialog.component.js.map +1 -1
- package/dist/lib/custom/AIAgents/new-agent-dialog.component.d.ts +2 -1
- package/dist/lib/custom/AIAgents/new-agent-dialog.component.d.ts.map +1 -1
- package/dist/lib/custom/AIAgents/new-agent-dialog.component.js +6 -5
- package/dist/lib/custom/AIAgents/new-agent-dialog.component.js.map +1 -1
- package/dist/lib/custom/AIAgents/prompt-selector-dialog.component.d.ts +2 -1
- package/dist/lib/custom/AIAgents/prompt-selector-dialog.component.d.ts.map +1 -1
- package/dist/lib/custom/AIAgents/prompt-selector-dialog.component.js +6 -4
- package/dist/lib/custom/AIAgents/prompt-selector-dialog.component.js.map +1 -1
- package/dist/lib/custom/AIAgents/sub-agent-advanced-settings-dialog.component.d.ts +2 -1
- package/dist/lib/custom/AIAgents/sub-agent-advanced-settings-dialog.component.d.ts.map +1 -1
- package/dist/lib/custom/AIAgents/sub-agent-advanced-settings-dialog.component.js +6 -4
- package/dist/lib/custom/AIAgents/sub-agent-advanced-settings-dialog.component.js.map +1 -1
- package/dist/lib/custom/AIAgents/sub-agent-selector-dialog.component.d.ts +2 -1
- package/dist/lib/custom/AIAgents/sub-agent-selector-dialog.component.d.ts.map +1 -1
- package/dist/lib/custom/AIAgents/sub-agent-selector-dialog.component.js +6 -4
- package/dist/lib/custom/AIAgents/sub-agent-selector-dialog.component.js.map +1 -1
- package/dist/lib/custom/AIPromptRuns/ai-prompt-run-form.component.js +3 -3
- package/dist/lib/custom/AIPromptRuns/ai-prompt-run-form.component.js.map +1 -1
- package/dist/lib/custom/AIPrompts/ai-prompt-form.component.d.ts +1 -1
- package/dist/lib/custom/AIPrompts/ai-prompt-form.component.d.ts.map +1 -1
- package/dist/lib/custom/AIPrompts/ai-prompt-form.component.js +6 -6
- package/dist/lib/custom/AIPrompts/ai-prompt-form.component.js.map +1 -1
- package/dist/lib/custom/AIPrompts/template-selector-dialog.component.d.ts +2 -1
- package/dist/lib/custom/AIPrompts/template-selector-dialog.component.d.ts.map +1 -1
- package/dist/lib/custom/AIPrompts/template-selector-dialog.component.js +7 -5
- package/dist/lib/custom/AIPrompts/template-selector-dialog.component.js.map +1 -1
- package/dist/lib/custom/Actions/action-execution-log-form.component.js +3 -3
- package/dist/lib/custom/Actions/action-execution-log-form.component.js.map +1 -1
- package/dist/lib/custom/Actions/action-form.component.js +12 -12
- package/dist/lib/custom/Actions/action-form.component.js.map +1 -1
- package/dist/lib/custom/ContentSources/content-source-form.component.d.ts +59 -5
- package/dist/lib/custom/ContentSources/content-source-form.component.d.ts.map +1 -1
- package/dist/lib/custom/ContentSources/content-source-form.component.js +379 -34
- package/dist/lib/custom/ContentSources/content-source-form.component.js.map +1 -1
- package/dist/lib/custom/Entities/entity-form.component.d.ts +1 -1
- package/dist/lib/custom/Entities/entity-form.component.d.ts.map +1 -1
- package/dist/lib/custom/Entities/entity-form.component.js +5 -5
- package/dist/lib/custom/Entities/entity-form.component.js.map +1 -1
- package/dist/lib/custom/Lists/list-form.component.d.ts +1 -1
- package/dist/lib/custom/Lists/list-form.component.d.ts.map +1 -1
- package/dist/lib/custom/Lists/list-form.component.js +10 -10
- package/dist/lib/custom/Lists/list-form.component.js.map +1 -1
- package/dist/lib/custom/Queries/query-category-dialog.component.d.ts +2 -1
- package/dist/lib/custom/Queries/query-category-dialog.component.d.ts.map +1 -1
- package/dist/lib/custom/Queries/query-category-dialog.component.js +9 -7
- package/dist/lib/custom/Queries/query-category-dialog.component.js.map +1 -1
- package/dist/lib/custom/Queries/query-form.component.js +17 -17
- package/dist/lib/custom/Queries/query-form.component.js.map +1 -1
- package/dist/lib/custom/Queries/query-run-dialog.component.d.ts +2 -1
- package/dist/lib/custom/Queries/query-run-dialog.component.d.ts.map +1 -1
- package/dist/lib/custom/Queries/query-run-dialog.component.js +7 -6
- package/dist/lib/custom/Queries/query-run-dialog.component.js.map +1 -1
- package/dist/lib/custom/Templates/template-param-dialog.component.d.ts +2 -1
- package/dist/lib/custom/Templates/template-param-dialog.component.d.ts.map +1 -1
- package/dist/lib/custom/Templates/template-param-dialog.component.js +10 -8
- package/dist/lib/custom/Templates/template-param-dialog.component.js.map +1 -1
- package/dist/lib/custom/Templates/template-params-grid.component.d.ts +2 -1
- package/dist/lib/custom/Templates/template-params-grid.component.d.ts.map +1 -1
- package/dist/lib/custom/Templates/template-params-grid.component.js +9 -7
- package/dist/lib/custom/Templates/template-params-grid.component.js.map +1 -1
- package/dist/lib/custom/Templates/templates-form.component.js +8 -8
- package/dist/lib/custom/Templates/templates-form.component.js.map +1 -1
- package/dist/lib/custom/Tests/entity-link-pill.component.d.ts +3 -2
- package/dist/lib/custom/Tests/entity-link-pill.component.d.ts.map +1 -1
- package/dist/lib/custom/Tests/entity-link-pill.component.js +8 -6
- package/dist/lib/custom/Tests/entity-link-pill.component.js.map +1 -1
- package/dist/lib/custom/Tests/test-form.component.d.ts +1 -1
- package/dist/lib/custom/Tests/test-form.component.d.ts.map +1 -1
- package/dist/lib/custom/Tests/test-form.component.js +7 -7
- package/dist/lib/custom/Tests/test-form.component.js.map +1 -1
- package/dist/lib/custom/Tests/test-run-form.component.js +5 -5
- package/dist/lib/custom/Tests/test-run-form.component.js.map +1 -1
- package/dist/lib/custom/Tests/test-suite-form.component.d.ts +1 -1
- package/dist/lib/custom/Tests/test-suite-form.component.d.ts.map +1 -1
- package/dist/lib/custom/Tests/test-suite-form.component.js +8 -8
- package/dist/lib/custom/Tests/test-suite-form.component.js.map +1 -1
- package/dist/lib/custom/Tests/test-suite-run-form.component.d.ts +1 -1
- package/dist/lib/custom/Tests/test-suite-run-form.component.d.ts.map +1 -1
- package/dist/lib/custom/Tests/test-suite-run-form.component.js +6 -6
- package/dist/lib/custom/Tests/test-suite-run-form.component.js.map +1 -1
- package/dist/lib/custom/ai-agent-run/ai-agent-run-analytics.component.d.ts +2 -1
- package/dist/lib/custom/ai-agent-run/ai-agent-run-analytics.component.d.ts.map +1 -1
- package/dist/lib/custom/ai-agent-run/ai-agent-run-analytics.component.js +8 -6
- package/dist/lib/custom/ai-agent-run/ai-agent-run-analytics.component.js.map +1 -1
- package/dist/lib/custom/ai-agent-run/ai-agent-run-data.service.d.ts +9 -0
- package/dist/lib/custom/ai-agent-run/ai-agent-run-data.service.d.ts.map +1 -1
- package/dist/lib/custom/ai-agent-run/ai-agent-run-data.service.js +15 -3
- package/dist/lib/custom/ai-agent-run/ai-agent-run-data.service.js.map +1 -1
- package/dist/lib/custom/ai-agent-run/ai-agent-run-timeline.component.d.ts +3 -2
- package/dist/lib/custom/ai-agent-run/ai-agent-run-timeline.component.d.ts.map +1 -1
- package/dist/lib/custom/ai-agent-run/ai-agent-run-timeline.component.js +10 -5
- package/dist/lib/custom/ai-agent-run/ai-agent-run-timeline.component.js.map +1 -1
- package/dist/lib/custom/ai-agent-run/ai-agent-run.component.js +2 -2
- package/dist/lib/custom/ai-agent-run/ai-agent-run.component.js.map +1 -1
- package/dist/lib/custom/shared/entity-selector-dialog.component.d.ts +2 -1
- package/dist/lib/custom/shared/entity-selector-dialog.component.d.ts.map +1 -1
- package/dist/lib/custom/shared/entity-selector-dialog.component.js +6 -4
- package/dist/lib/custom/shared/entity-selector-dialog.component.js.map +1 -1
- package/dist/lib/generated/Entities/MJAIModel/mjaimodel.form.component.d.ts.map +1 -1
- package/dist/lib/generated/Entities/MJAIModel/mjaimodel.form.component.js +46 -28
- package/dist/lib/generated/Entities/MJAIModel/mjaimodel.form.component.js.map +1 -1
- package/dist/lib/generated/Entities/MJCompanyIntegrationEntityMap/mjcompanyintegrationentitymap.form.component.js +10 -10
- package/dist/lib/generated/Entities/MJCompanyIntegrationEntityMap/mjcompanyintegrationentitymap.form.component.js.map +1 -1
- package/dist/lib/generated/Entities/MJContentItem/mjcontentitem.form.component.d.ts.map +1 -1
- package/dist/lib/generated/Entities/MJContentItem/mjcontentitem.form.component.js +25 -7
- package/dist/lib/generated/Entities/MJContentItem/mjcontentitem.form.component.js.map +1 -1
- package/dist/lib/generated/Entities/MJContentSource/mjcontentsource.form.component.d.ts.map +1 -1
- package/dist/lib/generated/Entities/MJContentSource/mjcontentsource.form.component.js +25 -7
- package/dist/lib/generated/Entities/MJContentSource/mjcontentsource.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 +106 -88
- package/dist/lib/generated/Entities/MJEntity/mjentity.form.component.js.map +1 -1
- package/dist/lib/generated/Entities/MJTag/mjtag.form.component.d.ts.map +1 -1
- package/dist/lib/generated/Entities/MJTag/mjtag.form.component.js +181 -61
- package/dist/lib/generated/Entities/MJTag/mjtag.form.component.js.map +1 -1
- package/dist/lib/generated/Entities/MJTagScope/mjtagscope.form.component.d.ts +10 -0
- package/dist/lib/generated/Entities/MJTagScope/mjtagscope.form.component.d.ts.map +1 -0
- package/dist/lib/generated/Entities/MJTagScope/mjtagscope.form.component.js +63 -0
- package/dist/lib/generated/Entities/MJTagScope/mjtagscope.form.component.js.map +1 -0
- package/dist/lib/generated/Entities/MJTagSuggestion/mjtagsuggestion.form.component.d.ts +10 -0
- package/dist/lib/generated/Entities/MJTagSuggestion/mjtagsuggestion.form.component.d.ts.map +1 -0
- package/dist/lib/generated/Entities/MJTagSuggestion/mjtagsuggestion.form.component.js +95 -0
- package/dist/lib/generated/Entities/MJTagSuggestion/mjtagsuggestion.form.component.js.map +1 -0
- package/dist/lib/generated/Entities/MJTagSynonym/mjtagsynonym.form.component.d.ts +10 -0
- package/dist/lib/generated/Entities/MJTagSynonym/mjtagsynonym.form.component.d.ts.map +1 -0
- package/dist/lib/generated/Entities/MJTagSynonym/mjtagsynonym.form.component.js +63 -0
- package/dist/lib/generated/Entities/MJTagSynonym/mjtagsynonym.form.component.js.map +1 -0
- package/dist/lib/generated/Entities/MJUser/mjuser.form.component.d.ts.map +1 -1
- package/dist/lib/generated/Entities/MJUser/mjuser.form.component.js +199 -181
- package/dist/lib/generated/Entities/MJUser/mjuser.form.component.js.map +1 -1
- package/dist/lib/generated/generated-forms.module.d.ts +51 -48
- package/dist/lib/generated/generated-forms.module.d.ts.map +1 -1
- package/dist/lib/generated/generated-forms.module.js +27 -18
- package/dist/lib/generated/generated-forms.module.js.map +1 -1
- package/dist/lib/shared/components/template-editor.component.d.ts +3 -2
- package/dist/lib/shared/components/template-editor.component.d.ts.map +1 -1
- package/dist/lib/shared/components/template-editor.component.js +8 -6
- package/dist/lib/shared/components/template-editor.component.js.map +1 -1
- package/package.json +37 -35
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"prompt-selector-dialog.component.js","sourceRoot":"","sources":["../../../../src/lib/custom/AIAgents/prompt-selector-dialog.component.ts","../../../../src/lib/custom/AIAgents/prompt-selector-dialog.component.html"],"names":[],"mappings":"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","sourcesContent":["import { Component, OnInit, OnDestroy, ChangeDetectorRef, Output, EventEmitter } from '@angular/core';\nimport { Subject, BehaviorSubject, debounceTime, distinctUntilChanged, takeUntil } from 'rxjs';\nimport { FormControl } from '@angular/forms';\nimport { RunView } from '@memberjunction/core';\nimport { MJAIPromptEntityExtended } from '@memberjunction/ai-core-plus';\nimport { MJNotificationService } from '@memberjunction/ng-notifications';\n\nexport interface PromptSelectorConfig {\n /** Title for the dialog */\n title: string;\n /** Whether to show the \"Create New\" option */\n showCreateNew?: boolean;\n /** Filter criteria for prompts */\n extraFilter?: string;\n /** Allow multiple selection */\n multiSelect?: boolean;\n /** Pre-selected prompt IDs */\n selectedPromptIds?: string[];\n /** Already linked prompt IDs (will be grayed out and not selectable) */\n linkedPromptIds?: string[];\n}\n\nexport interface PromptSelectorResult {\n /** Selected prompts */\n selectedPrompts: MJAIPromptEntityExtended[];\n /** Whether user chose to create new */\n createNew?: boolean;\n}\n\n/**\n * Unified prompt selector dialog that can be used for:\n * - Selecting context compression prompts (single select)\n * - Adding general prompts to agents (multi-select)\n * - Any other prompt selection scenario\n */\n@Component({\n standalone: false,\n selector: 'mj-prompt-selector-dialog',\n templateUrl: './prompt-selector-dialog.component.html',\n styleUrls: ['./prompt-selector-dialog.component.css']\n})\nexport class PromptSelectorDialogComponent implements OnInit, OnDestroy {\n \n // Input configuration\n config: PromptSelectorConfig = { title: 'Select Prompts' };\n \n // State management\n private destroy$ = new Subject<void>();\n public result = new Subject<PromptSelectorResult | null>();\n \n // Data and UI state\n isLoading$ = new BehaviorSubject<boolean>(false);\n prompts$ = new BehaviorSubject<MJAIPromptEntityExtended[]>([]);\n filteredPrompts$ = new BehaviorSubject<MJAIPromptEntityExtended[]>([]);\n \n // Search and selection\n searchControl = new FormControl('');\n selectedPrompts: Set<string> = new Set();\n linkedPrompts: Set<string> = new Set();\n \n // View mode\n viewMode: 'grid' | 'list' = 'list';\n\n @Output() DialogClose = new EventEmitter<void>();\n\n constructor(\n private cdr: ChangeDetectorRef\n ) {}\n\n ngOnInit() {\n this.setupSearch();\n this.loadPrompts();\n \n // Initialize selected prompts if provided\n if (this.config.selectedPromptIds) {\n this.selectedPrompts = new Set(this.config.selectedPromptIds);\n }\n \n // Initialize linked prompts if provided\n if (this.config.linkedPromptIds) {\n this.linkedPrompts = new Set(this.config.linkedPromptIds);\n }\n }\n\n ngOnDestroy() {\n this.destroy$.next();\n this.destroy$.complete();\n }\n\n private setupSearch() {\n this.searchControl.valueChanges\n .pipe(\n debounceTime(300),\n distinctUntilChanged(),\n takeUntil(this.destroy$)\n )\n .subscribe(searchTerm => {\n this.filterPrompts(searchTerm || '');\n });\n }\n\n private async loadPrompts() {\n this.isLoading$.next(true);\n \n try {\n const rv = new RunView();\n \n // Build filter - default to active prompts\n let filter = \"Status = 'Active'\";\n if (this.config.extraFilter) {\n filter += ` AND ${this.config.extraFilter}`;\n }\n \n const result = await rv.RunView<MJAIPromptEntityExtended>({\n EntityName: 'MJ: AI Prompts',\n ExtraFilter: filter,\n OrderBy: 'Name ASC',\n ResultType: 'entity_object',\n MaxRows: 1000\n });\n\n if (result.Success) {\n const prompts = result.Results || [];\n this.prompts$.next(prompts);\n this.filteredPrompts$.next(prompts);\n } else {\n throw new Error(result.ErrorMessage || 'Failed to load prompts');\n }\n } catch (error) {\n console.error('Error loading prompts:', error);\n MJNotificationService.Instance.CreateSimpleNotification(\n 'Error loading prompts. Please try again.',\n 'error',\n 3000\n );\n this.prompts$.next([]);\n this.filteredPrompts$.next([]);\n } finally {\n this.isLoading$.next(false);\n }\n }\n\n private filterPrompts(searchTerm: string) {\n const allPrompts = this.prompts$.value;\n \n if (!searchTerm.trim()) {\n this.filteredPrompts$.next(allPrompts);\n return;\n }\n\n const filtered = allPrompts.filter(prompt => \n prompt.Name?.toLowerCase().includes(searchTerm.toLowerCase()) ||\n prompt.Description?.toLowerCase().includes(searchTerm.toLowerCase())\n );\n \n this.filteredPrompts$.next(filtered);\n }\n\n // === Selection Management ===\n\n togglePromptSelection(prompt: MJAIPromptEntityExtended) {\n // Prevent selection of already linked prompts\n if (this.isPromptLinked(prompt)) {\n MJNotificationService.Instance.CreateSimpleNotification(\n `\"${prompt.Name}\" is already linked to this agent`,\n 'info',\n 2000\n );\n return;\n }\n \n if (this.config.multiSelect) {\n if (this.selectedPrompts.has(prompt.ID)) {\n this.selectedPrompts.delete(prompt.ID);\n } else {\n this.selectedPrompts.add(prompt.ID);\n }\n } else {\n // Single select - replace current selection\n this.selectedPrompts.clear();\n this.selectedPrompts.add(prompt.ID);\n }\n }\n\n isPromptSelected(prompt: MJAIPromptEntityExtended): boolean {\n return this.selectedPrompts.has(prompt.ID);\n }\n\n isPromptLinked(prompt: MJAIPromptEntityExtended): boolean {\n return this.linkedPrompts.has(prompt.ID);\n }\n\n getSelectedPromptObjects(): MJAIPromptEntityExtended[] {\n const allPrompts = this.prompts$.value;\n return allPrompts.filter(prompt => this.selectedPrompts.has(prompt.ID));\n }\n\n // === UI Helpers ===\n\n toggleViewMode() {\n this.viewMode = this.viewMode === 'grid' ? 'list' : 'grid';\n }\n\n getPromptStatusColor(prompt: MJAIPromptEntityExtended): string {\n switch (prompt.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 getPromptStatusText(prompt: MJAIPromptEntityExtended): string {\n return prompt.Status || 'Unknown';\n }\n\n // === Dialog Actions ===\n\n selectPrompts() {\n const selectedPromptObjects = this.getSelectedPromptObjects();\n \n if (selectedPromptObjects.length === 0) {\n MJNotificationService.Instance.CreateSimpleNotification(\n 'Please select at least one prompt',\n 'warning',\n 2000\n );\n return;\n }\n\n const result: PromptSelectorResult = {\n selectedPrompts: selectedPromptObjects\n };\n\n this.result.next(result);\n this.DialogClose.emit();\n }\n\n createNew() {\n const result: PromptSelectorResult = {\n selectedPrompts: [],\n createNew: true\n };\n\n this.result.next(result);\n this.DialogClose.emit();\n }\n\n cancel() {\n this.result.next(null);\n this.DialogClose.emit();\n }\n}","<!-- Prompt Selector Dialog -->\n<div class=\"prompt-selector-dialog\">\n \n <!-- Loading State -->\n @if (isLoading$ | async) {\n <div class=\"loading-state\">\n <div class=\"loading-spinner\">\n <i class=\"fa-solid fa-spinner fa-spin fa-2x\"></i>\n </div>\n <p>Loading prompts...</p>\n </div>\n } @else {\n \n <!-- Search and Controls Header -->\n <div class=\"dialog-header\">\n <div class=\"search-section\">\n <div class=\"search-box\">\n <i class=\"fa-solid fa-search search-icon\"></i>\n <input\n class=\"mj-input search-input\"\n [formControl]=\"searchControl\"\n placeholder=\"Search prompts by name or description...\">\n </div>\n \n <div class=\"view-controls\">\n <button mjButton\n variant=\"flat\"\n [class.active]=\"viewMode === 'list'\"\n (click)=\"toggleViewMode()\"\n title=\"Toggle between list and grid view\">\n <i class=\"fa-solid\" [class.fa-list]=\"viewMode === 'grid'\" [class.fa-th]=\"viewMode === 'list'\"></i>\n </button>\n </div>\n </div>\n </div>\n\n <!-- Results Summary -->\n <div class=\"results-summary\">\n <span class=\"results-count\">\n <i class=\"fa-solid fa-comment-dots\"></i>\n {{ (filteredPrompts$ | async)?.length || 0 }} prompt(s)\n </span>\n @if (config.multiSelect && selectedPrompts.size > 0) {\n <span class=\"selected-count\">\n <i class=\"fa-solid fa-check-circle\"></i>\n {{ selectedPrompts.size }} selected\n </span>\n }\n </div>\n\n <!-- Prompts List/Grid -->\n <div class=\"prompts-container\" [class.grid-view]=\"viewMode === 'grid'\" [class.list-view]=\"viewMode === 'list'\">\n @if ((filteredPrompts$ | async)?.length === 0) {\n <div class=\"no-results\">\n <i class=\"fa-solid fa-search fa-2x\"></i>\n <h4>No prompts found</h4>\n <p>Try adjusting your search criteria or check that prompts are properly configured.</p>\n </div>\n } @else {\n @for (prompt of filteredPrompts$ | async; track prompt.ID) {\n <div class=\"prompt-card\" \n [class.selected]=\"isPromptSelected(prompt)\"\n [class.linked]=\"isPromptLinked(prompt)\"\n (click)=\"togglePromptSelection(prompt)\">\n \n <!-- Selection indicator -->\n <div class=\"selection-indicator\">\n @if (isPromptLinked(prompt)) {\n <i class=\"fa-solid fa-link linked-icon\" title=\"Already linked to this agent\"></i>\n } @else if (isPromptSelected(prompt)) {\n <i class=\"fa-solid fa-check-circle selected-icon\"></i>\n } @else {\n <i class=\"fa-regular fa-circle unselected-icon\"></i>\n }\n </div>\n\n <!-- Prompt Content -->\n <div class=\"prompt-content\">\n <div class=\"prompt-header\">\n <h4 class=\"prompt-name\">{{ prompt.Name }}</h4>\n <div class=\"prompt-badges\">\n @if (isPromptLinked(prompt)) {\n <span class=\"linked-badge\">\n <i class=\"fa-solid fa-link\"></i>\n Linked\n </span>\n }\n <span class=\"status-badge\" \n [style.background-color]=\"getPromptStatusColor(prompt)\">\n {{ getPromptStatusText(prompt) }}\n </span>\n </div>\n </div>\n\n @if (prompt.Description) {\n <p class=\"prompt-description\">{{ prompt.Description }}</p>\n }\n\n <!-- Prompt Metadata -->\n <div class=\"prompt-metadata\">\n @if (prompt.__mj_CreatedAt) {\n <span class=\"metadata-item\">\n <i class=\"fa-solid fa-calendar\"></i>\n Created {{ prompt.__mj_CreatedAt | date:'short' }}\n </span>\n }\n </div>\n </div>\n </div>\n }\n }\n </div>\n }\n\n <!-- Dialog Footer -->\n <div class=\"dialog-footer\">\n <div class=\"footer-left\">\n @if (config.showCreateNew) {\n <button mjButton\n variant=\"flat\"\n (click)=\"createNew()\">\n <i class=\"fa-solid fa-plus\"></i>\n Create New Prompt\n </button>\n }\n </div>\n \n <div class=\"footer-right\">\n <button mjButton\n variant=\"flat\"\n (click)=\"cancel()\">\n Cancel\n </button>\n\n <button mjButton\n variant=\"primary\"\n (click)=\"selectPrompts()\"\n [disabled]=\"selectedPrompts.size === 0\">\n @if (config.multiSelect) {\n <i class=\"fa-solid fa-check\"></i>\n Add {{ selectedPrompts.size }} Prompt{{ selectedPrompts.size === 1 ? '' : 's' }}\n } @else {\n <i class=\"fa-solid fa-check\"></i>\n Select Prompt\n }\n </button>\n </div>\n </div>\n</div>"]}
|
|
1
|
+
{"version":3,"file":"prompt-selector-dialog.component.js","sourceRoot":"","sources":["../../../../src/lib/custom/AIAgents/prompt-selector-dialog.component.ts","../../../../src/lib/custom/AIAgents/prompt-selector-dialog.component.html"],"names":[],"mappings":"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","sourcesContent":["import { Component, OnInit, OnDestroy, ChangeDetectorRef, Output, EventEmitter } from '@angular/core';\nimport { Subject, BehaviorSubject, debounceTime, distinctUntilChanged, takeUntil } from 'rxjs';\nimport { FormControl } from '@angular/forms';\nimport { RunView } from '@memberjunction/core';\nimport { MJAIPromptEntityExtended } from '@memberjunction/ai-core-plus';\nimport { MJNotificationService } from '@memberjunction/ng-notifications';\n\nimport { BaseAngularComponent } from '@memberjunction/ng-base-types';\nexport interface PromptSelectorConfig {\n /** Title for the dialog */\n title: string;\n /** Whether to show the \"Create New\" option */\n showCreateNew?: boolean;\n /** Filter criteria for prompts */\n extraFilter?: string;\n /** Allow multiple selection */\n multiSelect?: boolean;\n /** Pre-selected prompt IDs */\n selectedPromptIds?: string[];\n /** Already linked prompt IDs (will be grayed out and not selectable) */\n linkedPromptIds?: string[];\n}\n\nexport interface PromptSelectorResult {\n /** Selected prompts */\n selectedPrompts: MJAIPromptEntityExtended[];\n /** Whether user chose to create new */\n createNew?: boolean;\n}\n\n/**\n * Unified prompt selector dialog that can be used for:\n * - Selecting context compression prompts (single select)\n * - Adding general prompts to agents (multi-select)\n * - Any other prompt selection scenario\n */\n@Component({\n standalone: false,\n selector: 'mj-prompt-selector-dialog',\n templateUrl: './prompt-selector-dialog.component.html',\n styleUrls: ['./prompt-selector-dialog.component.css']\n})\nexport class PromptSelectorDialogComponent extends BaseAngularComponent implements OnInit, OnDestroy {\n \n // Input configuration\n config: PromptSelectorConfig = { title: 'Select Prompts' };\n \n // State management\n private destroy$ = new Subject<void>();\n public result = new Subject<PromptSelectorResult | null>();\n \n // Data and UI state\n isLoading$ = new BehaviorSubject<boolean>(false);\n prompts$ = new BehaviorSubject<MJAIPromptEntityExtended[]>([]);\n filteredPrompts$ = new BehaviorSubject<MJAIPromptEntityExtended[]>([]);\n \n // Search and selection\n searchControl = new FormControl('');\n selectedPrompts: Set<string> = new Set();\n linkedPrompts: Set<string> = new Set();\n \n // View mode\n viewMode: 'grid' | 'list' = 'list';\n\n @Output() DialogClose = new EventEmitter<void>();\n\n constructor(\n private cdr: ChangeDetectorRef\n ) {\n super();}\n\n ngOnInit() {\n this.setupSearch();\n this.loadPrompts();\n \n // Initialize selected prompts if provided\n if (this.config.selectedPromptIds) {\n this.selectedPrompts = new Set(this.config.selectedPromptIds);\n }\n \n // Initialize linked prompts if provided\n if (this.config.linkedPromptIds) {\n this.linkedPrompts = new Set(this.config.linkedPromptIds);\n }\n }\n\n ngOnDestroy() {\n this.destroy$.next();\n this.destroy$.complete();\n }\n\n private setupSearch() {\n this.searchControl.valueChanges\n .pipe(\n debounceTime(300),\n distinctUntilChanged(),\n takeUntil(this.destroy$)\n )\n .subscribe(searchTerm => {\n this.filterPrompts(searchTerm || '');\n });\n }\n\n private async loadPrompts() {\n this.isLoading$.next(true);\n \n try {\n const rv = RunView.FromMetadataProvider(this.ProviderToUse);\n \n // Build filter - default to active prompts\n let filter = \"Status = 'Active'\";\n if (this.config.extraFilter) {\n filter += ` AND ${this.config.extraFilter}`;\n }\n \n const result = await rv.RunView<MJAIPromptEntityExtended>({\n EntityName: 'MJ: AI Prompts',\n ExtraFilter: filter,\n OrderBy: 'Name ASC',\n ResultType: 'entity_object',\n MaxRows: 1000\n });\n\n if (result.Success) {\n const prompts = result.Results || [];\n this.prompts$.next(prompts);\n this.filteredPrompts$.next(prompts);\n } else {\n throw new Error(result.ErrorMessage || 'Failed to load prompts');\n }\n } catch (error) {\n console.error('Error loading prompts:', error);\n MJNotificationService.Instance.CreateSimpleNotification(\n 'Error loading prompts. Please try again.',\n 'error',\n 3000\n );\n this.prompts$.next([]);\n this.filteredPrompts$.next([]);\n } finally {\n this.isLoading$.next(false);\n }\n }\n\n private filterPrompts(searchTerm: string) {\n const allPrompts = this.prompts$.value;\n \n if (!searchTerm.trim()) {\n this.filteredPrompts$.next(allPrompts);\n return;\n }\n\n const filtered = allPrompts.filter(prompt => \n prompt.Name?.toLowerCase().includes(searchTerm.toLowerCase()) ||\n prompt.Description?.toLowerCase().includes(searchTerm.toLowerCase())\n );\n \n this.filteredPrompts$.next(filtered);\n }\n\n // === Selection Management ===\n\n togglePromptSelection(prompt: MJAIPromptEntityExtended) {\n // Prevent selection of already linked prompts\n if (this.isPromptLinked(prompt)) {\n MJNotificationService.Instance.CreateSimpleNotification(\n `\"${prompt.Name}\" is already linked to this agent`,\n 'info',\n 2000\n );\n return;\n }\n \n if (this.config.multiSelect) {\n if (this.selectedPrompts.has(prompt.ID)) {\n this.selectedPrompts.delete(prompt.ID);\n } else {\n this.selectedPrompts.add(prompt.ID);\n }\n } else {\n // Single select - replace current selection\n this.selectedPrompts.clear();\n this.selectedPrompts.add(prompt.ID);\n }\n }\n\n isPromptSelected(prompt: MJAIPromptEntityExtended): boolean {\n return this.selectedPrompts.has(prompt.ID);\n }\n\n isPromptLinked(prompt: MJAIPromptEntityExtended): boolean {\n return this.linkedPrompts.has(prompt.ID);\n }\n\n getSelectedPromptObjects(): MJAIPromptEntityExtended[] {\n const allPrompts = this.prompts$.value;\n return allPrompts.filter(prompt => this.selectedPrompts.has(prompt.ID));\n }\n\n // === UI Helpers ===\n\n toggleViewMode() {\n this.viewMode = this.viewMode === 'grid' ? 'list' : 'grid';\n }\n\n getPromptStatusColor(prompt: MJAIPromptEntityExtended): string {\n switch (prompt.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 getPromptStatusText(prompt: MJAIPromptEntityExtended): string {\n return prompt.Status || 'Unknown';\n }\n\n // === Dialog Actions ===\n\n selectPrompts() {\n const selectedPromptObjects = this.getSelectedPromptObjects();\n \n if (selectedPromptObjects.length === 0) {\n MJNotificationService.Instance.CreateSimpleNotification(\n 'Please select at least one prompt',\n 'warning',\n 2000\n );\n return;\n }\n\n const result: PromptSelectorResult = {\n selectedPrompts: selectedPromptObjects\n };\n\n this.result.next(result);\n this.DialogClose.emit();\n }\n\n createNew() {\n const result: PromptSelectorResult = {\n selectedPrompts: [],\n createNew: true\n };\n\n this.result.next(result);\n this.DialogClose.emit();\n }\n\n cancel() {\n this.result.next(null);\n this.DialogClose.emit();\n }\n}","<!-- Prompt Selector Dialog -->\n<div class=\"prompt-selector-dialog\">\n \n <!-- Loading State -->\n @if (isLoading$ | async) {\n <div class=\"loading-state\">\n <div class=\"loading-spinner\">\n <i class=\"fa-solid fa-spinner fa-spin fa-2x\"></i>\n </div>\n <p>Loading prompts...</p>\n </div>\n } @else {\n \n <!-- Search and Controls Header -->\n <div class=\"dialog-header\">\n <div class=\"search-section\">\n <div class=\"search-box\">\n <i class=\"fa-solid fa-search search-icon\"></i>\n <input\n class=\"mj-input search-input\"\n [formControl]=\"searchControl\"\n placeholder=\"Search prompts by name or description...\">\n </div>\n \n <div class=\"view-controls\">\n <button mjButton\n variant=\"flat\"\n [class.active]=\"viewMode === 'list'\"\n (click)=\"toggleViewMode()\"\n title=\"Toggle between list and grid view\">\n <i class=\"fa-solid\" [class.fa-list]=\"viewMode === 'grid'\" [class.fa-th]=\"viewMode === 'list'\"></i>\n </button>\n </div>\n </div>\n </div>\n\n <!-- Results Summary -->\n <div class=\"results-summary\">\n <span class=\"results-count\">\n <i class=\"fa-solid fa-comment-dots\"></i>\n {{ (filteredPrompts$ | async)?.length || 0 }} prompt(s)\n </span>\n @if (config.multiSelect && selectedPrompts.size > 0) {\n <span class=\"selected-count\">\n <i class=\"fa-solid fa-check-circle\"></i>\n {{ selectedPrompts.size }} selected\n </span>\n }\n </div>\n\n <!-- Prompts List/Grid -->\n <div class=\"prompts-container\" [class.grid-view]=\"viewMode === 'grid'\" [class.list-view]=\"viewMode === 'list'\">\n @if ((filteredPrompts$ | async)?.length === 0) {\n <div class=\"no-results\">\n <i class=\"fa-solid fa-search fa-2x\"></i>\n <h4>No prompts found</h4>\n <p>Try adjusting your search criteria or check that prompts are properly configured.</p>\n </div>\n } @else {\n @for (prompt of filteredPrompts$ | async; track prompt.ID) {\n <div class=\"prompt-card\" \n [class.selected]=\"isPromptSelected(prompt)\"\n [class.linked]=\"isPromptLinked(prompt)\"\n (click)=\"togglePromptSelection(prompt)\">\n \n <!-- Selection indicator -->\n <div class=\"selection-indicator\">\n @if (isPromptLinked(prompt)) {\n <i class=\"fa-solid fa-link linked-icon\" title=\"Already linked to this agent\"></i>\n } @else if (isPromptSelected(prompt)) {\n <i class=\"fa-solid fa-check-circle selected-icon\"></i>\n } @else {\n <i class=\"fa-regular fa-circle unselected-icon\"></i>\n }\n </div>\n\n <!-- Prompt Content -->\n <div class=\"prompt-content\">\n <div class=\"prompt-header\">\n <h4 class=\"prompt-name\">{{ prompt.Name }}</h4>\n <div class=\"prompt-badges\">\n @if (isPromptLinked(prompt)) {\n <span class=\"linked-badge\">\n <i class=\"fa-solid fa-link\"></i>\n Linked\n </span>\n }\n <span class=\"status-badge\" \n [style.background-color]=\"getPromptStatusColor(prompt)\">\n {{ getPromptStatusText(prompt) }}\n </span>\n </div>\n </div>\n\n @if (prompt.Description) {\n <p class=\"prompt-description\">{{ prompt.Description }}</p>\n }\n\n <!-- Prompt Metadata -->\n <div class=\"prompt-metadata\">\n @if (prompt.__mj_CreatedAt) {\n <span class=\"metadata-item\">\n <i class=\"fa-solid fa-calendar\"></i>\n Created {{ prompt.__mj_CreatedAt | date:'short' }}\n </span>\n }\n </div>\n </div>\n </div>\n }\n }\n </div>\n }\n\n <!-- Dialog Footer -->\n <div class=\"dialog-footer\">\n <div class=\"footer-left\">\n @if (config.showCreateNew) {\n <button mjButton\n variant=\"flat\"\n (click)=\"createNew()\">\n <i class=\"fa-solid fa-plus\"></i>\n Create New Prompt\n </button>\n }\n </div>\n \n <div class=\"footer-right\">\n <button mjButton\n variant=\"flat\"\n (click)=\"cancel()\">\n Cancel\n </button>\n\n <button mjButton\n variant=\"primary\"\n (click)=\"selectPrompts()\"\n [disabled]=\"selectedPrompts.size === 0\">\n @if (config.multiSelect) {\n <i class=\"fa-solid fa-check\"></i>\n Add {{ selectedPrompts.size }} Prompt{{ selectedPrompts.size === 1 ? '' : 's' }}\n } @else {\n <i class=\"fa-solid fa-check\"></i>\n Select Prompt\n }\n </button>\n </div>\n </div>\n</div>"]}
|
|
@@ -3,6 +3,7 @@ import { FormGroup, FormBuilder } from '@angular/forms';
|
|
|
3
3
|
import { Subject, BehaviorSubject } from 'rxjs';
|
|
4
4
|
import { MJAIAgentTypeEntity } from '@memberjunction/core-entities';
|
|
5
5
|
import { MJAIAgentEntityExtended } from '@memberjunction/ai-core-plus';
|
|
6
|
+
import { BaseAngularComponent } from '@memberjunction/ng-base-types';
|
|
6
7
|
import * as i0 from "@angular/core";
|
|
7
8
|
export interface SubAgentAdvancedSettingsFormData {
|
|
8
9
|
executionOrder: number;
|
|
@@ -15,7 +16,7 @@ export interface SubAgentAdvancedSettingsFormData {
|
|
|
15
16
|
* Advanced Settings dialog for Sub-Agents.
|
|
16
17
|
* Manages execution order, execution mode, and other advanced sub-agent configurations.
|
|
17
18
|
*/
|
|
18
|
-
export declare class SubAgentAdvancedSettingsDialogComponent implements OnInit, OnDestroy {
|
|
19
|
+
export declare class SubAgentAdvancedSettingsDialogComponent extends BaseAngularComponent implements OnInit, OnDestroy {
|
|
19
20
|
private fb;
|
|
20
21
|
private cdr;
|
|
21
22
|
subAgent: MJAIAgentEntityExtended;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sub-agent-advanced-settings-dialog.component.d.ts","sourceRoot":"","sources":["../../../../src/lib/custom/AIAgents/sub-agent-advanced-settings-dialog.component.ts"],"names":[],"mappings":"AAAA,OAAO,EAAa,MAAM,EAAE,SAAS,EAAE,iBAAiB,EAAU,YAAY,EAAE,MAAM,eAAe,CAAC;AACtG,OAAO,EAAE,SAAS,EAAE,WAAW,EAAc,MAAM,gBAAgB,CAAC;AACpE,OAAO,EAAE,OAAO,EAAE,eAAe,EAAa,MAAM,MAAM,CAAC;AAE3D,OAAO,EAAE,mBAAmB,EAAE,MAAM,+BAA+B,CAAC;AAEpE,OAAO,EAAE,uBAAuB,EAAE,MAAM,8BAA8B,CAAC
|
|
1
|
+
{"version":3,"file":"sub-agent-advanced-settings-dialog.component.d.ts","sourceRoot":"","sources":["../../../../src/lib/custom/AIAgents/sub-agent-advanced-settings-dialog.component.ts"],"names":[],"mappings":"AAAA,OAAO,EAAa,MAAM,EAAE,SAAS,EAAE,iBAAiB,EAAU,YAAY,EAAE,MAAM,eAAe,CAAC;AACtG,OAAO,EAAE,SAAS,EAAE,WAAW,EAAc,MAAM,gBAAgB,CAAC;AACpE,OAAO,EAAE,OAAO,EAAE,eAAe,EAAa,MAAM,MAAM,CAAC;AAE3D,OAAO,EAAE,mBAAmB,EAAE,MAAM,+BAA+B,CAAC;AAEpE,OAAO,EAAE,uBAAuB,EAAE,MAAM,8BAA8B,CAAC;AAGvE,OAAO,EAAE,oBAAoB,EAAE,MAAM,+BAA+B,CAAC;;AACrE,MAAM,WAAW,gCAAgC;IAC/C,cAAc,EAAE,MAAM,CAAC;IACvB,aAAa,EAAE,YAAY,GAAG,UAAU,CAAC;IACzC,MAAM,EAAE,QAAQ,GAAG,UAAU,GAAG,SAAS,CAAC;IAC1C,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;IACtB,cAAc,EAAE,OAAO,CAAC;CACzB;AAED;;;GAGG;AACH,qBAMa,uCAAwC,SAAQ,oBAAqB,YAAW,MAAM,EAAE,SAAS;IA8C1G,OAAO,CAAC,EAAE;IACV,OAAO,CAAC,GAAG;IA5Cb,QAAQ,EAAG,uBAAuB,CAAC;IACnC,YAAY,EAAE,uBAAuB,EAAE,CAAM;IAG7C,OAAO,CAAC,QAAQ,CAAuB;IAChC,MAAM,mDAA0D;IAGvE,YAAY,EAAG,SAAS,CAAC;IACzB,UAAU,2BAAuC;IACjD,SAAS,2BAAuC;IAGhD,WAAW,yCAAkD;IAG7D,oBAAoB;;;;;QAalB;IAEF,aAAa;;;QAIX;IAGF,mBAAmB,EAAE,MAAM,GAAG,IAAI,CAAQ;IAEhC,WAAW,qBAA4B;gBAGvC,EAAE,EAAE,WAAW,EACf,GAAG,EAAE,iBAAiB;IAIhC,QAAQ;IAKR,WAAW;IAKX,OAAO,CAAC,cAAc;IAYtB,OAAO,CAAC,oBAAoB;IA0B5B,OAAO,CAAC,sBAAsB;YAsBhB,gBAAgB;IAiC9B,cAAc,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO;IAK1C,aAAa,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM;IASxC,sBAAsB,IAAI,OAAO;IAMjC,oBAAoB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM;IAK1C,2BAA2B,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM;IAOjD,MAAM;IAKA,IAAI;yCA/LC,uCAAuC;2CAAvC,uCAAuC;CAmOnD"}
|
|
@@ -4,6 +4,7 @@ import { Subject, BehaviorSubject, takeUntil } from 'rxjs';
|
|
|
4
4
|
import { RunView } from '@memberjunction/core';
|
|
5
5
|
import { MJNotificationService } from '@memberjunction/ng-notifications';
|
|
6
6
|
import { UUIDsEqual } from '@memberjunction/global';
|
|
7
|
+
import { BaseAngularComponent } from '@memberjunction/ng-base-types';
|
|
7
8
|
import * as i0 from "@angular/core";
|
|
8
9
|
import * as i1 from "@angular/forms";
|
|
9
10
|
import * as i2 from "@memberjunction/ng-ui-components";
|
|
@@ -145,8 +146,9 @@ function SubAgentAdvancedSettingsDialogComponent_Conditional_13_Template(rf, ctx
|
|
|
145
146
|
* Advanced Settings dialog for Sub-Agents.
|
|
146
147
|
* Manages execution order, execution mode, and other advanced sub-agent configurations.
|
|
147
148
|
*/
|
|
148
|
-
export class SubAgentAdvancedSettingsDialogComponent {
|
|
149
|
+
export class SubAgentAdvancedSettingsDialogComponent extends BaseAngularComponent {
|
|
149
150
|
constructor(fb, cdr) {
|
|
151
|
+
super();
|
|
150
152
|
this.fb = fb;
|
|
151
153
|
this.cdr = cdr;
|
|
152
154
|
this.allSubAgents = []; // For execution order validation
|
|
@@ -235,7 +237,7 @@ export class SubAgentAdvancedSettingsDialogComponent {
|
|
|
235
237
|
async loadDropdownData() {
|
|
236
238
|
this.isLoading$.next(true);
|
|
237
239
|
try {
|
|
238
|
-
const rv =
|
|
240
|
+
const rv = RunView.FromMetadataProvider(this.ProviderToUse);
|
|
239
241
|
// Load AI Agent Types
|
|
240
242
|
const agentTypesResult = await rv.RunView({
|
|
241
243
|
EntityName: 'MJ: AI Agent Types',
|
|
@@ -315,7 +317,7 @@ export class SubAgentAdvancedSettingsDialogComponent {
|
|
|
315
317
|
}
|
|
316
318
|
}
|
|
317
319
|
static { this.ɵfac = function SubAgentAdvancedSettingsDialogComponent_Factory(__ngFactoryType__) { return new (__ngFactoryType__ || SubAgentAdvancedSettingsDialogComponent)(i0.ɵɵdirectiveInject(i1.FormBuilder), i0.ɵɵdirectiveInject(i0.ChangeDetectorRef)); }; }
|
|
318
|
-
static { this.ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: SubAgentAdvancedSettingsDialogComponent, selectors: [["mj-sub-agent-advanced-settings-dialog"]], outputs: { DialogClose: "DialogClose" }, standalone: false, decls: 14, vars: 14, consts: [[1, "sub-agent-advanced-settings-dialog"], [1, "loading-state"], [1, "advanced-form", 3, "formGroup"], [1, "dialog-footer"], ["mjButton", "", "variant", "flat", 3, "click", "disabled"], ["mjButton", "", "variant", "primary", 3, "click", "disabled"], [1, "loading-spinner"], [1, "fa-solid", "fa-spinner", "fa-spin", "fa-2x"], [1, "form-section"], [1, "section-title"], [1, "fa-solid", "fa-play"], [1, "form-grid"], [1, "form-field"], ["for", "executionOrder"], ["formControlName", "executionOrder", "Format", "0", 1, "form-control", 3, "Min"], [1, "field-error"], [1, "field-hint"], ["for", "executionMode"], ["formControlName", "executionMode", "TextField", "text", "ValueField", "value", 1, "form-control", 3, "Data", "ValuePrimitive"], [1, "fa-solid", "fa-robot"], ["for", "typeID"], ["formControlName", "typeID", "TextField", "Name", "ValueField", "ID", 1, "form-control", 3, "Data", "ValuePrimitive", "DefaultItem"], ["for", "status"], ["formControlName", "status", "TextField", "text", "ValueField", "value", 1, "form-control", 3, "Data", "ValuePrimitive"], [1, "fa-solid", "fa-shield-alt"], [1, "form-field", "full-width"], [1, "checkbox-label", "disabled"], ["type", "checkbox", "formControlName", "exposeAsAction", 1, "mj-checkbox", 3, "disabled"], [1, "field-hint", "disabled-hint"], [1, "fa-solid", "fa-info-circle"], [1, "fa-solid", "fa-spinner", "fa-spin"], [1, "fa-solid", "fa-save"]], template: function SubAgentAdvancedSettingsDialogComponent_Template(rf, ctx) { if (rf & 1) {
|
|
320
|
+
static { this.ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: SubAgentAdvancedSettingsDialogComponent, selectors: [["mj-sub-agent-advanced-settings-dialog"]], outputs: { DialogClose: "DialogClose" }, standalone: false, features: [i0.ɵɵInheritDefinitionFeature], decls: 14, vars: 14, consts: [[1, "sub-agent-advanced-settings-dialog"], [1, "loading-state"], [1, "advanced-form", 3, "formGroup"], [1, "dialog-footer"], ["mjButton", "", "variant", "flat", 3, "click", "disabled"], ["mjButton", "", "variant", "primary", 3, "click", "disabled"], [1, "loading-spinner"], [1, "fa-solid", "fa-spinner", "fa-spin", "fa-2x"], [1, "form-section"], [1, "section-title"], [1, "fa-solid", "fa-play"], [1, "form-grid"], [1, "form-field"], ["for", "executionOrder"], ["formControlName", "executionOrder", "Format", "0", 1, "form-control", 3, "Min"], [1, "field-error"], [1, "field-hint"], ["for", "executionMode"], ["formControlName", "executionMode", "TextField", "text", "ValueField", "value", 1, "form-control", 3, "Data", "ValuePrimitive"], [1, "fa-solid", "fa-robot"], ["for", "typeID"], ["formControlName", "typeID", "TextField", "Name", "ValueField", "ID", 1, "form-control", 3, "Data", "ValuePrimitive", "DefaultItem"], ["for", "status"], ["formControlName", "status", "TextField", "text", "ValueField", "value", 1, "form-control", 3, "Data", "ValuePrimitive"], [1, "fa-solid", "fa-shield-alt"], [1, "form-field", "full-width"], [1, "checkbox-label", "disabled"], ["type", "checkbox", "formControlName", "exposeAsAction", 1, "mj-checkbox", 3, "disabled"], [1, "field-hint", "disabled-hint"], [1, "fa-solid", "fa-info-circle"], [1, "fa-solid", "fa-spinner", "fa-spin"], [1, "fa-solid", "fa-save"]], template: function SubAgentAdvancedSettingsDialogComponent_Template(rf, ctx) { if (rf & 1) {
|
|
319
321
|
i0.ɵɵelementStart(0, "div", 0);
|
|
320
322
|
i0.ɵɵconditionalCreate(1, SubAgentAdvancedSettingsDialogComponent_Conditional_1_Template, 5, 0, "div", 1);
|
|
321
323
|
i0.ɵɵpipe(2, "async");
|
|
@@ -350,5 +352,5 @@ export class SubAgentAdvancedSettingsDialogComponent {
|
|
|
350
352
|
}], () => [{ type: i1.FormBuilder }, { type: i0.ChangeDetectorRef }], { DialogClose: [{
|
|
351
353
|
type: Output
|
|
352
354
|
}] }); })();
|
|
353
|
-
(() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassDebugInfo(SubAgentAdvancedSettingsDialogComponent, { className: "SubAgentAdvancedSettingsDialogComponent", filePath: "src/lib/custom/AIAgents/sub-agent-advanced-settings-dialog.component.ts", lineNumber:
|
|
355
|
+
(() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassDebugInfo(SubAgentAdvancedSettingsDialogComponent, { className: "SubAgentAdvancedSettingsDialogComponent", filePath: "src/lib/custom/AIAgents/sub-agent-advanced-settings-dialog.component.ts", lineNumber: 29 }); })();
|
|
354
356
|
//# sourceMappingURL=sub-agent-advanced-settings-dialog.component.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sub-agent-advanced-settings-dialog.component.js","sourceRoot":"","sources":["../../../../src/lib/custom/AIAgents/sub-agent-advanced-settings-dialog.component.ts","../../../../src/lib/custom/AIAgents/sub-agent-advanced-settings-dialog.component.html"],"names":[],"mappings":"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","sourcesContent":["import { Component, OnInit, OnDestroy, ChangeDetectorRef, Output, EventEmitter } from '@angular/core';\nimport { FormGroup, FormBuilder, Validators } from '@angular/forms';\nimport { Subject, BehaviorSubject, takeUntil } from 'rxjs';\nimport { RunView } from '@memberjunction/core';\nimport { MJAIAgentTypeEntity } from '@memberjunction/core-entities';\nimport { MJNotificationService } from '@memberjunction/ng-notifications';\nimport { MJAIAgentEntityExtended } from '@memberjunction/ai-core-plus';\nimport { UUIDsEqual } from '@memberjunction/global';\n\nexport interface SubAgentAdvancedSettingsFormData {\n executionOrder: number;\n executionMode: 'Sequential' | 'Parallel';\n status: 'Active' | 'Disabled' | 'Pending';\n typeID: string | null;\n exposeAsAction: boolean;\n}\n\n/**\n * Advanced Settings dialog for Sub-Agents.\n * Manages execution order, execution mode, and other advanced sub-agent configurations.\n */\n@Component({\n standalone: false,\n selector: 'mj-sub-agent-advanced-settings-dialog',\n templateUrl: './sub-agent-advanced-settings-dialog.component.html',\n styleUrls: ['./sub-agent-advanced-settings-dialog.component.css']\n})\nexport class SubAgentAdvancedSettingsDialogComponent implements OnInit, OnDestroy {\n \n // Input properties set by service\n subAgent!: MJAIAgentEntityExtended;\n allSubAgents: MJAIAgentEntityExtended[] = []; // For execution order validation\n \n // Reactive state management\n private destroy$ = new Subject<void>();\n public result = new Subject<SubAgentAdvancedSettingsFormData | null>();\n \n // Form and data\n advancedForm!: FormGroup;\n isLoading$ = new BehaviorSubject<boolean>(false);\n isSaving$ = new BehaviorSubject<boolean>(false);\n \n // Dropdown data\n agentTypes$ = new BehaviorSubject<MJAIAgentTypeEntity[]>([]);\n \n // Available options\n executionModeOptions = [\n { \n text: 'Sequential', \n value: 'Sequential', \n description: 'Child agents execute one after another in order',\n icon: 'fa-list-ol'\n },\n { \n text: 'Parallel', \n value: 'Parallel', \n description: 'Child agents execute simultaneously for faster processing',\n icon: 'fa-layer-group'\n }\n ];\n\n statusOptions = [\n { text: 'Active', value: 'Active' },\n { text: 'Disabled', value: 'Disabled' },\n { text: 'Pending', value: 'Pending' }\n ];\n\n // Execution order validation\n executionOrderError: string | null = null;\n\n @Output() DialogClose = new EventEmitter<void>();\n\n constructor(\n private fb: FormBuilder,\n private cdr: ChangeDetectorRef\n ) {}\n\n ngOnInit() {\n this.initializeForm();\n this.loadDropdownData();\n }\n\n ngOnDestroy() {\n this.destroy$.next();\n this.destroy$.complete();\n }\n\n private initializeForm() {\n this.advancedForm = this.fb.group({\n executionOrder: [this.subAgent.ExecutionOrder || 0, [Validators.required, Validators.min(0)]],\n executionMode: [this.subAgent.ExecutionMode || 'Sequential', [Validators.required]],\n status: [this.subAgent.Status || 'Active', [Validators.required]],\n typeID: [this.subAgent.TypeID],\n exposeAsAction: [this.subAgent.ExposeAsAction || false]\n });\n\n this.setupValidationLogic();\n }\n\n private setupValidationLogic() {\n // Execution order validation\n const executionOrderControl = this.advancedForm.get('executionOrder');\n executionOrderControl?.valueChanges.pipe(\n takeUntil(this.destroy$)\n ).subscribe(order => {\n this.validateExecutionOrder(order);\n });\n\n // ExposeAsAction validation (sub-agents cannot be exposed as actions)\n const exposeAsActionControl = this.advancedForm.get('exposeAsAction');\n exposeAsActionControl?.valueChanges.pipe(\n takeUntil(this.destroy$)\n ).subscribe(expose => {\n if (expose && this.subAgent.ParentID) {\n // Sub-agents cannot be exposed as actions\n exposeAsActionControl.setValue(false);\n MJNotificationService.Instance.CreateSimpleNotification(\n 'Sub-agents cannot be exposed as actions. Only root agents can be exposed.',\n 'warning',\n 4000\n );\n }\n });\n }\n\n private validateExecutionOrder(order: number) {\n if (order == null) {\n this.executionOrderError = null;\n return;\n }\n\n // Check for conflicts with other sub-agents under the same parent (excluding current one)\n const conflictingAgent = this.allSubAgents.find(agent => \n !UUIDsEqual(agent.ID, this.subAgent.ID) && \n UUIDsEqual(agent.ParentID, this.subAgent.ParentID) &&\n agent.ExecutionOrder === order\n );\n\n if (conflictingAgent) {\n this.executionOrderError = `Execution order ${order} is already used by \"${conflictingAgent.Name}\". Please choose a different order.`;\n } else {\n this.executionOrderError = null;\n }\n\n this.cdr.detectChanges();\n }\n\n private async loadDropdownData() {\n this.isLoading$.next(true);\n \n try {\n const rv = new RunView();\n \n // Load AI Agent Types\n const agentTypesResult = await rv.RunView<MJAIAgentTypeEntity>({\n EntityName: 'MJ: AI Agent Types',\n ExtraFilter: 'IsActive = 1',\n OrderBy: 'Name',\n ResultType: 'entity_object',\n MaxRows: 1000\n });\n\n if (agentTypesResult.Success) {\n this.agentTypes$.next(agentTypesResult.Results || []);\n }\n\n } catch (error) {\n console.error('Error loading dropdown data:', error);\n MJNotificationService.Instance.CreateSimpleNotification(\n 'Error loading form data. Please try again.',\n 'error',\n 3000\n );\n } finally {\n this.isLoading$.next(false);\n }\n }\n\n // === Validation Helpers ===\n\n isFieldInvalid(fieldName: string): boolean {\n const field = this.advancedForm.get(fieldName);\n return !!(field && field.invalid && (field.dirty || field.touched));\n }\n\n getFieldError(fieldName: string): string {\n const field = this.advancedForm.get(fieldName);\n if (field?.errors) {\n if (field.errors['required']) return `${fieldName} is required`;\n if (field.errors['min']) return `${fieldName} must be greater than or equal to ${field.errors['min'].min}`;\n }\n return '';\n }\n\n hasExecutionOrderError(): boolean {\n return !!this.executionOrderError;\n }\n\n // === Execution Mode Helpers ===\n\n getExecutionModeIcon(mode: string): string {\n const option = this.executionModeOptions.find(opt => opt.value === mode);\n return option?.icon || 'fa-robot';\n }\n\n getExecutionModeDescription(mode: string): string {\n const option = this.executionModeOptions.find(opt => opt.value === mode);\n return option?.description || '';\n }\n\n // === Dialog Actions ===\n\n cancel() {\n this.result.next(null);\n this.DialogClose.emit();\n }\n\n async save() {\n if (this.advancedForm.invalid || this.hasExecutionOrderError()) {\n this.advancedForm.markAllAsTouched();\n MJNotificationService.Instance.CreateSimpleNotification(\n 'Please fix validation errors before saving',\n 'error',\n 3000\n );\n return;\n }\n\n this.isSaving$.next(true);\n \n try {\n const formData: SubAgentAdvancedSettingsFormData = {\n executionOrder: this.advancedForm.get('executionOrder')?.value,\n executionMode: this.advancedForm.get('executionMode')?.value,\n status: this.advancedForm.get('status')?.value,\n typeID: this.advancedForm.get('typeID')?.value || null,\n exposeAsAction: false // Sub-agents cannot be exposed as actions\n };\n\n this.result.next(formData);\n this.DialogClose.emit();\n \n } catch (error) {\n console.error('Error saving advanced settings:', error);\n MJNotificationService.Instance.CreateSimpleNotification(\n 'Error saving settings. Please try again.',\n 'error',\n 3000\n );\n } finally {\n this.isSaving$.next(false);\n }\n }\n}","<!-- Sub-Agent Advanced Settings Dialog -->\n<div class=\"sub-agent-advanced-settings-dialog\">\n \n <!-- Loading State -->\n @if (isLoading$ | async) {\n <div class=\"loading-state\">\n <div class=\"loading-spinner\">\n <i class=\"fa-solid fa-spinner fa-spin fa-2x\"></i>\n </div>\n <p>Loading sub-agent settings...</p>\n </div>\n } @else {\n \n <!-- Form Content -->\n <form [formGroup]=\"advancedForm\" class=\"advanced-form\">\n \n <!-- Execution Configuration Section -->\n <div class=\"form-section\">\n <h3 class=\"section-title\">\n <i class=\"fa-solid fa-play\"></i>\n Execution Configuration\n </h3>\n \n <div class=\"form-grid\">\n <!-- Execution Order -->\n <div class=\"form-field\">\n <label for=\"executionOrder\">Execution Order *</label>\n <mj-numeric-input\n formControlName=\"executionOrder\"\n [Min]=\"0\"\n Format=\"0\"\n [class.error-border]=\"hasExecutionOrderError()\"\n class=\"form-control\">\n </mj-numeric-input>\n @if (isFieldInvalid('executionOrder')) {\n <div class=\"field-error\">{{ getFieldError('executionOrder') }}</div>\n }\n @if (hasExecutionOrderError()) {\n <div class=\"field-error\">{{ executionOrderError }}</div>\n }\n <small class=\"field-hint\">Order in which this sub-agent executes among siblings (0 = first). Must be unique among sibling agents.</small>\n </div>\n \n <!-- Execution Mode -->\n <div class=\"form-field\">\n <label for=\"executionMode\">Execution Mode *</label>\n <mj-dropdown\n formControlName=\"executionMode\"\n [Data]=\"executionModeOptions\"\n TextField=\"text\"\n ValueField=\"value\"\n [ValuePrimitive]=\"true\"\n class=\"form-control\">\n </mj-dropdown>\n @if (isFieldInvalid('executionMode')) {\n <div class=\"field-error\">{{ getFieldError('executionMode') }}</div>\n }\n <small class=\"field-hint\">{{ getExecutionModeDescription(advancedForm.get('executionMode')?.value) }}</small>\n </div>\n </div>\n </div>\n\n <!-- Agent Configuration Section -->\n <div class=\"form-section\">\n <h3 class=\"section-title\">\n <i class=\"fa-solid fa-robot\"></i>\n Agent Configuration\n </h3>\n \n <div class=\"form-grid\">\n <!-- Agent Type -->\n <div class=\"form-field\">\n <label for=\"typeID\">Agent Type</label>\n <mj-dropdown\n formControlName=\"typeID\"\n [Data]=\"agentTypes$ | async\"\n TextField=\"Name\"\n ValueField=\"ID\"\n [ValuePrimitive]=\"true\"\n [DefaultItem]=\"{ Name: 'Default Type', ID: null }\"\n class=\"form-control\">\n </mj-dropdown>\n <small class=\"field-hint\">Specialized agent type that defines behavior and capabilities</small>\n </div>\n \n <!-- Status -->\n <div class=\"form-field\">\n <label for=\"status\">Status *</label>\n <mj-dropdown\n formControlName=\"status\"\n [Data]=\"statusOptions\"\n TextField=\"text\"\n ValueField=\"value\"\n [ValuePrimitive]=\"true\"\n class=\"form-control\">\n </mj-dropdown>\n @if (isFieldInvalid('status')) {\n <div class=\"field-error\">{{ getFieldError('status') }}</div>\n }\n <small class=\"field-hint\">Current operational status of this sub-agent</small>\n </div>\n </div>\n </div>\n\n <!-- Capability Restrictions Section -->\n <div class=\"form-section\">\n <h3 class=\"section-title\">\n <i class=\"fa-solid fa-shield-alt\"></i>\n Capability Restrictions\n </h3>\n \n <div class=\"form-grid\">\n <!-- Expose As Action (Disabled for Sub-Agents) -->\n <div class=\"form-field full-width\">\n <label class=\"checkbox-label disabled\">\n <input type=\"checkbox\"\n class=\"mj-checkbox\"\n formControlName=\"exposeAsAction\"\n [disabled]=\"true\">\n Expose As Action\n </label>\n <small class=\"field-hint disabled-hint\">\n <i class=\"fa-solid fa-info-circle\"></i>\n Sub-agents cannot be exposed as actions. Only root agents (without parents) can be exposed as actions for use by other agents.\n </small>\n </div>\n </div>\n </div>\n </form>\n }\n\n <!-- Dialog Footer -->\n <div class=\"dialog-footer\">\n <button mjButton\n variant=\"flat\"\n (click)=\"cancel()\"\n [disabled]=\"(isSaving$ | async) || false\">\n Cancel\n </button>\n\n <button mjButton\n variant=\"primary\"\n (click)=\"save()\"\n [disabled]=\"((isSaving$ | async) || false) || ((isLoading$ | async) || false) || hasExecutionOrderError()\">\n @if (isSaving$ | async) {\n <i class=\"fa-solid fa-spinner fa-spin\"></i>\n Saving...\n } @else {\n <i class=\"fa-solid fa-save\"></i>\n Save Settings\n }\n </button>\n </div>\n</div>"]}
|
|
1
|
+
{"version":3,"file":"sub-agent-advanced-settings-dialog.component.js","sourceRoot":"","sources":["../../../../src/lib/custom/AIAgents/sub-agent-advanced-settings-dialog.component.ts","../../../../src/lib/custom/AIAgents/sub-agent-advanced-settings-dialog.component.html"],"names":[],"mappings":"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","sourcesContent":["import { Component, OnInit, OnDestroy, ChangeDetectorRef, Output, EventEmitter } from '@angular/core';\nimport { FormGroup, FormBuilder, Validators } from '@angular/forms';\nimport { Subject, BehaviorSubject, takeUntil } from 'rxjs';\nimport { RunView } from '@memberjunction/core';\nimport { MJAIAgentTypeEntity } from '@memberjunction/core-entities';\nimport { MJNotificationService } from '@memberjunction/ng-notifications';\nimport { MJAIAgentEntityExtended } from '@memberjunction/ai-core-plus';\nimport { UUIDsEqual } from '@memberjunction/global';\n\nimport { BaseAngularComponent } from '@memberjunction/ng-base-types';\nexport interface SubAgentAdvancedSettingsFormData {\n executionOrder: number;\n executionMode: 'Sequential' | 'Parallel';\n status: 'Active' | 'Disabled' | 'Pending';\n typeID: string | null;\n exposeAsAction: boolean;\n}\n\n/**\n * Advanced Settings dialog for Sub-Agents.\n * Manages execution order, execution mode, and other advanced sub-agent configurations.\n */\n@Component({\n standalone: false,\n selector: 'mj-sub-agent-advanced-settings-dialog',\n templateUrl: './sub-agent-advanced-settings-dialog.component.html',\n styleUrls: ['./sub-agent-advanced-settings-dialog.component.css']\n})\nexport class SubAgentAdvancedSettingsDialogComponent extends BaseAngularComponent implements OnInit, OnDestroy {\n \n // Input properties set by service\n subAgent!: MJAIAgentEntityExtended;\n allSubAgents: MJAIAgentEntityExtended[] = []; // For execution order validation\n \n // Reactive state management\n private destroy$ = new Subject<void>();\n public result = new Subject<SubAgentAdvancedSettingsFormData | null>();\n \n // Form and data\n advancedForm!: FormGroup;\n isLoading$ = new BehaviorSubject<boolean>(false);\n isSaving$ = new BehaviorSubject<boolean>(false);\n \n // Dropdown data\n agentTypes$ = new BehaviorSubject<MJAIAgentTypeEntity[]>([]);\n \n // Available options\n executionModeOptions = [\n { \n text: 'Sequential', \n value: 'Sequential', \n description: 'Child agents execute one after another in order',\n icon: 'fa-list-ol'\n },\n { \n text: 'Parallel', \n value: 'Parallel', \n description: 'Child agents execute simultaneously for faster processing',\n icon: 'fa-layer-group'\n }\n ];\n\n statusOptions = [\n { text: 'Active', value: 'Active' },\n { text: 'Disabled', value: 'Disabled' },\n { text: 'Pending', value: 'Pending' }\n ];\n\n // Execution order validation\n executionOrderError: string | null = null;\n\n @Output() DialogClose = new EventEmitter<void>();\n\n constructor(\n private fb: FormBuilder,\n private cdr: ChangeDetectorRef\n ) {\n super();}\n\n ngOnInit() {\n this.initializeForm();\n this.loadDropdownData();\n }\n\n ngOnDestroy() {\n this.destroy$.next();\n this.destroy$.complete();\n }\n\n private initializeForm() {\n this.advancedForm = this.fb.group({\n executionOrder: [this.subAgent.ExecutionOrder || 0, [Validators.required, Validators.min(0)]],\n executionMode: [this.subAgent.ExecutionMode || 'Sequential', [Validators.required]],\n status: [this.subAgent.Status || 'Active', [Validators.required]],\n typeID: [this.subAgent.TypeID],\n exposeAsAction: [this.subAgent.ExposeAsAction || false]\n });\n\n this.setupValidationLogic();\n }\n\n private setupValidationLogic() {\n // Execution order validation\n const executionOrderControl = this.advancedForm.get('executionOrder');\n executionOrderControl?.valueChanges.pipe(\n takeUntil(this.destroy$)\n ).subscribe(order => {\n this.validateExecutionOrder(order);\n });\n\n // ExposeAsAction validation (sub-agents cannot be exposed as actions)\n const exposeAsActionControl = this.advancedForm.get('exposeAsAction');\n exposeAsActionControl?.valueChanges.pipe(\n takeUntil(this.destroy$)\n ).subscribe(expose => {\n if (expose && this.subAgent.ParentID) {\n // Sub-agents cannot be exposed as actions\n exposeAsActionControl.setValue(false);\n MJNotificationService.Instance.CreateSimpleNotification(\n 'Sub-agents cannot be exposed as actions. Only root agents can be exposed.',\n 'warning',\n 4000\n );\n }\n });\n }\n\n private validateExecutionOrder(order: number) {\n if (order == null) {\n this.executionOrderError = null;\n return;\n }\n\n // Check for conflicts with other sub-agents under the same parent (excluding current one)\n const conflictingAgent = this.allSubAgents.find(agent => \n !UUIDsEqual(agent.ID, this.subAgent.ID) && \n UUIDsEqual(agent.ParentID, this.subAgent.ParentID) &&\n agent.ExecutionOrder === order\n );\n\n if (conflictingAgent) {\n this.executionOrderError = `Execution order ${order} is already used by \"${conflictingAgent.Name}\". Please choose a different order.`;\n } else {\n this.executionOrderError = null;\n }\n\n this.cdr.detectChanges();\n }\n\n private async loadDropdownData() {\n this.isLoading$.next(true);\n \n try {\n const rv = RunView.FromMetadataProvider(this.ProviderToUse);\n \n // Load AI Agent Types\n const agentTypesResult = await rv.RunView<MJAIAgentTypeEntity>({\n EntityName: 'MJ: AI Agent Types',\n ExtraFilter: 'IsActive = 1',\n OrderBy: 'Name',\n ResultType: 'entity_object',\n MaxRows: 1000\n });\n\n if (agentTypesResult.Success) {\n this.agentTypes$.next(agentTypesResult.Results || []);\n }\n\n } catch (error) {\n console.error('Error loading dropdown data:', error);\n MJNotificationService.Instance.CreateSimpleNotification(\n 'Error loading form data. Please try again.',\n 'error',\n 3000\n );\n } finally {\n this.isLoading$.next(false);\n }\n }\n\n // === Validation Helpers ===\n\n isFieldInvalid(fieldName: string): boolean {\n const field = this.advancedForm.get(fieldName);\n return !!(field && field.invalid && (field.dirty || field.touched));\n }\n\n getFieldError(fieldName: string): string {\n const field = this.advancedForm.get(fieldName);\n if (field?.errors) {\n if (field.errors['required']) return `${fieldName} is required`;\n if (field.errors['min']) return `${fieldName} must be greater than or equal to ${field.errors['min'].min}`;\n }\n return '';\n }\n\n hasExecutionOrderError(): boolean {\n return !!this.executionOrderError;\n }\n\n // === Execution Mode Helpers ===\n\n getExecutionModeIcon(mode: string): string {\n const option = this.executionModeOptions.find(opt => opt.value === mode);\n return option?.icon || 'fa-robot';\n }\n\n getExecutionModeDescription(mode: string): string {\n const option = this.executionModeOptions.find(opt => opt.value === mode);\n return option?.description || '';\n }\n\n // === Dialog Actions ===\n\n cancel() {\n this.result.next(null);\n this.DialogClose.emit();\n }\n\n async save() {\n if (this.advancedForm.invalid || this.hasExecutionOrderError()) {\n this.advancedForm.markAllAsTouched();\n MJNotificationService.Instance.CreateSimpleNotification(\n 'Please fix validation errors before saving',\n 'error',\n 3000\n );\n return;\n }\n\n this.isSaving$.next(true);\n \n try {\n const formData: SubAgentAdvancedSettingsFormData = {\n executionOrder: this.advancedForm.get('executionOrder')?.value,\n executionMode: this.advancedForm.get('executionMode')?.value,\n status: this.advancedForm.get('status')?.value,\n typeID: this.advancedForm.get('typeID')?.value || null,\n exposeAsAction: false // Sub-agents cannot be exposed as actions\n };\n\n this.result.next(formData);\n this.DialogClose.emit();\n \n } catch (error) {\n console.error('Error saving advanced settings:', error);\n MJNotificationService.Instance.CreateSimpleNotification(\n 'Error saving settings. Please try again.',\n 'error',\n 3000\n );\n } finally {\n this.isSaving$.next(false);\n }\n }\n}","<!-- Sub-Agent Advanced Settings Dialog -->\n<div class=\"sub-agent-advanced-settings-dialog\">\n \n <!-- Loading State -->\n @if (isLoading$ | async) {\n <div class=\"loading-state\">\n <div class=\"loading-spinner\">\n <i class=\"fa-solid fa-spinner fa-spin fa-2x\"></i>\n </div>\n <p>Loading sub-agent settings...</p>\n </div>\n } @else {\n \n <!-- Form Content -->\n <form [formGroup]=\"advancedForm\" class=\"advanced-form\">\n \n <!-- Execution Configuration Section -->\n <div class=\"form-section\">\n <h3 class=\"section-title\">\n <i class=\"fa-solid fa-play\"></i>\n Execution Configuration\n </h3>\n \n <div class=\"form-grid\">\n <!-- Execution Order -->\n <div class=\"form-field\">\n <label for=\"executionOrder\">Execution Order *</label>\n <mj-numeric-input\n formControlName=\"executionOrder\"\n [Min]=\"0\"\n Format=\"0\"\n [class.error-border]=\"hasExecutionOrderError()\"\n class=\"form-control\">\n </mj-numeric-input>\n @if (isFieldInvalid('executionOrder')) {\n <div class=\"field-error\">{{ getFieldError('executionOrder') }}</div>\n }\n @if (hasExecutionOrderError()) {\n <div class=\"field-error\">{{ executionOrderError }}</div>\n }\n <small class=\"field-hint\">Order in which this sub-agent executes among siblings (0 = first). Must be unique among sibling agents.</small>\n </div>\n \n <!-- Execution Mode -->\n <div class=\"form-field\">\n <label for=\"executionMode\">Execution Mode *</label>\n <mj-dropdown\n formControlName=\"executionMode\"\n [Data]=\"executionModeOptions\"\n TextField=\"text\"\n ValueField=\"value\"\n [ValuePrimitive]=\"true\"\n class=\"form-control\">\n </mj-dropdown>\n @if (isFieldInvalid('executionMode')) {\n <div class=\"field-error\">{{ getFieldError('executionMode') }}</div>\n }\n <small class=\"field-hint\">{{ getExecutionModeDescription(advancedForm.get('executionMode')?.value) }}</small>\n </div>\n </div>\n </div>\n\n <!-- Agent Configuration Section -->\n <div class=\"form-section\">\n <h3 class=\"section-title\">\n <i class=\"fa-solid fa-robot\"></i>\n Agent Configuration\n </h3>\n \n <div class=\"form-grid\">\n <!-- Agent Type -->\n <div class=\"form-field\">\n <label for=\"typeID\">Agent Type</label>\n <mj-dropdown\n formControlName=\"typeID\"\n [Data]=\"agentTypes$ | async\"\n TextField=\"Name\"\n ValueField=\"ID\"\n [ValuePrimitive]=\"true\"\n [DefaultItem]=\"{ Name: 'Default Type', ID: null }\"\n class=\"form-control\">\n </mj-dropdown>\n <small class=\"field-hint\">Specialized agent type that defines behavior and capabilities</small>\n </div>\n \n <!-- Status -->\n <div class=\"form-field\">\n <label for=\"status\">Status *</label>\n <mj-dropdown\n formControlName=\"status\"\n [Data]=\"statusOptions\"\n TextField=\"text\"\n ValueField=\"value\"\n [ValuePrimitive]=\"true\"\n class=\"form-control\">\n </mj-dropdown>\n @if (isFieldInvalid('status')) {\n <div class=\"field-error\">{{ getFieldError('status') }}</div>\n }\n <small class=\"field-hint\">Current operational status of this sub-agent</small>\n </div>\n </div>\n </div>\n\n <!-- Capability Restrictions Section -->\n <div class=\"form-section\">\n <h3 class=\"section-title\">\n <i class=\"fa-solid fa-shield-alt\"></i>\n Capability Restrictions\n </h3>\n \n <div class=\"form-grid\">\n <!-- Expose As Action (Disabled for Sub-Agents) -->\n <div class=\"form-field full-width\">\n <label class=\"checkbox-label disabled\">\n <input type=\"checkbox\"\n class=\"mj-checkbox\"\n formControlName=\"exposeAsAction\"\n [disabled]=\"true\">\n Expose As Action\n </label>\n <small class=\"field-hint disabled-hint\">\n <i class=\"fa-solid fa-info-circle\"></i>\n Sub-agents cannot be exposed as actions. Only root agents (without parents) can be exposed as actions for use by other agents.\n </small>\n </div>\n </div>\n </div>\n </form>\n }\n\n <!-- Dialog Footer -->\n <div class=\"dialog-footer\">\n <button mjButton\n variant=\"flat\"\n (click)=\"cancel()\"\n [disabled]=\"(isSaving$ | async) || false\">\n Cancel\n </button>\n\n <button mjButton\n variant=\"primary\"\n (click)=\"save()\"\n [disabled]=\"((isSaving$ | async) || false) || ((isLoading$ | async) || false) || hasExecutionOrderError()\">\n @if (isSaving$ | async) {\n <i class=\"fa-solid fa-spinner fa-spin\"></i>\n Saving...\n } @else {\n <i class=\"fa-solid fa-save\"></i>\n Save Settings\n }\n </button>\n </div>\n</div>"]}
|
|
@@ -3,6 +3,7 @@ import { FormControl } from '@angular/forms';
|
|
|
3
3
|
import { Subject, BehaviorSubject } from 'rxjs';
|
|
4
4
|
import { MJAIAgentTypeEntity } from '@memberjunction/core-entities';
|
|
5
5
|
import { MJAIAgentEntityExtended } from "@memberjunction/ai-core-plus";
|
|
6
|
+
import { BaseAngularComponent } from '@memberjunction/ng-base-types';
|
|
6
7
|
import * as i0 from "@angular/core";
|
|
7
8
|
export interface SubAgentSelectorResult {
|
|
8
9
|
selectedAgents: MJAIAgentEntityExtended[];
|
|
@@ -23,7 +24,7 @@ export interface AgentDisplayItem extends MJAIAgentEntityExtended {
|
|
|
23
24
|
* Sub-Agent Selector Dialog for selecting agents to convert to sub-agents.
|
|
24
25
|
* Only shows agents with NULL ParentID (root agents) that can become sub-agents.
|
|
25
26
|
*/
|
|
26
|
-
export declare class SubAgentSelectorDialogComponent implements OnInit, OnDestroy {
|
|
27
|
+
export declare class SubAgentSelectorDialogComponent extends BaseAngularComponent implements OnInit, OnDestroy {
|
|
27
28
|
private cdr;
|
|
28
29
|
config: SubAgentSelectorConfig;
|
|
29
30
|
private destroy$;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sub-agent-selector-dialog.component.d.ts","sourceRoot":"","sources":["../../../../src/lib/custom/AIAgents/sub-agent-selector-dialog.component.ts"],"names":[],"mappings":"AAAA,OAAO,EAAa,MAAM,EAAE,SAAS,EAAE,iBAAiB,EAAU,YAAY,EAAE,MAAM,eAAe,CAAC;AACtG,OAAO,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAC7C,OAAO,EAAE,OAAO,EAAE,eAAe,EAA2E,MAAM,MAAM,CAAC;AAEzH,OAAO,EAAE,mBAAmB,EAAE,MAAM,+BAA+B,CAAC;AACpE,OAAO,EAAE,uBAAuB,EAAE,MAAM,8BAA8B,CAAC
|
|
1
|
+
{"version":3,"file":"sub-agent-selector-dialog.component.d.ts","sourceRoot":"","sources":["../../../../src/lib/custom/AIAgents/sub-agent-selector-dialog.component.ts"],"names":[],"mappings":"AAAA,OAAO,EAAa,MAAM,EAAE,SAAS,EAAE,iBAAiB,EAAU,YAAY,EAAE,MAAM,eAAe,CAAC;AACtG,OAAO,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAC7C,OAAO,EAAE,OAAO,EAAE,eAAe,EAA2E,MAAM,MAAM,CAAC;AAEzH,OAAO,EAAE,mBAAmB,EAAE,MAAM,+BAA+B,CAAC;AACpE,OAAO,EAAE,uBAAuB,EAAE,MAAM,8BAA8B,CAAC;AAGvE,OAAO,EAAE,oBAAoB,EAAE,MAAM,+BAA+B,CAAC;;AACrE,MAAM,WAAW,sBAAsB;IACrC,cAAc,EAAE,uBAAuB,EAAE,CAAC;IAC1C,SAAS,EAAE,OAAO,CAAC;CACpB;AAED,MAAM,WAAW,sBAAsB;IACrC,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,EAAE,OAAO,CAAC;IACrB,gBAAgB,EAAE,MAAM,EAAE,CAAC;IAC3B,aAAa,EAAE,OAAO,CAAC;IACvB,aAAa,EAAE,MAAM,CAAC;CACvB;AAED,MAAM,WAAW,gBAAiB,SAAQ,uBAAuB;IAC/D,QAAQ,EAAE,OAAO,CAAC;IAClB,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED;;;GAGG;AACH,qBAMa,+BAAgC,SAAQ,oBAAqB,YAAW,MAAM,EAAE,SAAS;IAoClG,OAAO,CAAC,GAAG;IAjCb,MAAM,EAAG,sBAAsB,CAAC;IAGhC,OAAO,CAAC,QAAQ,CAAuB;IAChC,MAAM,yCAAgD;IAG7D,UAAU,sCAA+C;IACzD,WAAW,yCAAkD;IAC7D,eAAe,sCAA+C;IAC9D,eAAe,+BAA+C;IAC9D,UAAU,2BAAuC;IAGjD,aAAa,6BAAuB;IACpC,eAAe,0BAAsC;IAGrD,IAAI,aAAa,IAAI,MAAM,CAE1B;IAED,IAAI,eAAe,IAAI,MAAM,CAE5B;IAED,IAAI,aAAa,IAAI,MAAM,CAE1B;IAES,WAAW,qBAA4B;gBAGvC,GAAG,EAAE,iBAAiB;IAIhC,QAAQ;IAMR,WAAW;YAKG,cAAc;YAYd,kBAAkB;IAwChC,OAAO,CAAC,cAAc;IAgBtB,OAAO,CAAC,YAAY;IAqBpB,OAAO,CAAC,uBAAuB;IAgB/B,UAAU,CAAC,MAAM,EAAE,MAAM;IAIzB,oBAAoB,CAAC,KAAK,EAAE,gBAAgB;IAqC5C,WAAW;IAIX,YAAY,CAAC,KAAK,EAAE,gBAAgB,GAAG,MAAM;IAO7C,mBAAmB,CAAC,KAAK,EAAE,gBAAgB,GAAG,MAAM;IAWpD,MAAM;IAKN,SAAS;IAQH,iBAAiB;yCAxOZ,+BAA+B;2CAA/B,+BAA+B;CAyP3C"}
|
|
@@ -3,6 +3,7 @@ import { FormControl } from '@angular/forms';
|
|
|
3
3
|
import { Subject, BehaviorSubject, combineLatest, debounceTime, distinctUntilChanged, takeUntil, startWith } from 'rxjs';
|
|
4
4
|
import { RunView } from '@memberjunction/core';
|
|
5
5
|
import { UUIDsEqual } from '@memberjunction/global';
|
|
6
|
+
import { BaseAngularComponent } from '@memberjunction/ng-base-types';
|
|
6
7
|
import * as i0 from "@angular/core";
|
|
7
8
|
import * as i1 from "@angular/forms";
|
|
8
9
|
import * as i2 from "@memberjunction/ng-ui-components";
|
|
@@ -194,7 +195,7 @@ function SubAgentSelectorDialogComponent_Conditional_35_Template(rf, ctx) { if (
|
|
|
194
195
|
* Sub-Agent Selector Dialog for selecting agents to convert to sub-agents.
|
|
195
196
|
* Only shows agents with NULL ParentID (root agents) that can become sub-agents.
|
|
196
197
|
*/
|
|
197
|
-
export class SubAgentSelectorDialogComponent {
|
|
198
|
+
export class SubAgentSelectorDialogComponent extends BaseAngularComponent {
|
|
198
199
|
// Computed values
|
|
199
200
|
get selectedCount() {
|
|
200
201
|
return this.selectedAgents$.value.size;
|
|
@@ -206,6 +207,7 @@ export class SubAgentSelectorDialogComponent {
|
|
|
206
207
|
return this.filteredAgents$.value.length;
|
|
207
208
|
}
|
|
208
209
|
constructor(cdr) {
|
|
210
|
+
super();
|
|
209
211
|
this.cdr = cdr;
|
|
210
212
|
// Reactive state management
|
|
211
213
|
this.destroy$ = new Subject();
|
|
@@ -243,7 +245,7 @@ export class SubAgentSelectorDialogComponent {
|
|
|
243
245
|
}
|
|
244
246
|
}
|
|
245
247
|
async loadAgentsAndTypes() {
|
|
246
|
-
const rv =
|
|
248
|
+
const rv = RunView.FromMetadataProvider(this.ProviderToUse);
|
|
247
249
|
// Load both agents and types in a single batch for better performance
|
|
248
250
|
const results = await rv.RunViews([
|
|
249
251
|
// Root agents (index 0)
|
|
@@ -394,7 +396,7 @@ export class SubAgentSelectorDialogComponent {
|
|
|
394
396
|
this.DialogClose.emit();
|
|
395
397
|
}
|
|
396
398
|
static { this.ɵfac = function SubAgentSelectorDialogComponent_Factory(__ngFactoryType__) { return new (__ngFactoryType__ || SubAgentSelectorDialogComponent)(i0.ɵɵdirectiveInject(i0.ChangeDetectorRef)); }; }
|
|
397
|
-
static { this.ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: SubAgentSelectorDialogComponent, selectors: [["mj-sub-agent-selector-dialog"]], outputs: { DialogClose: "DialogClose" }, standalone: false, decls: 36, vars: 21, consts: [[1, "sub-agent-selector-dialog"], [1, "dialog-header"], [1, "header-info"], [1, "header-description"], [1, "header-stats"], [1, "selection-count"], [1, "total-count"], [1, "controls-section"], [1, "search-controls"], [1, "search-input"], [1, "fa-solid", "fa-search", "search-icon"], ["placeholder", "Search agents by name, description, or type...", 1, "mj-input", "search-field", 3, "formControl"], ["mjButton", "", "variant", "flat", 1, "clear-search"], [1, "filter-controls"], [1, "type-filter"], ["TextField", "Name", "ValueField", "ID", 1, "type-dropdown", 3, "ngModelChange", "ngModel", "ValuePrimitive", "DefaultItem", "Data"], [1, "loading-state"], [1, "content-area"], [1, "dialog-footer"], [1, "footer-left"], ["mjButton", "", "variant", "primary"], [1, "footer-right"], ["mjButton", "", "variant", "flat", 3, "click"], ["mjButton", "", "variant", "primary", 3, "click", "disabled"], ["mjButton", "", "variant", "flat", 1, "clear-search", 3, "click"], [1, "fa-solid", "fa-times"], [1, "fa-solid", "fa-spinner", "fa-spin", "fa-2x"], [1, "empty-state"], [1, "agents-grid"], [1, "fa-solid", "fa-robot"], ["mjButton", "", "variant", "primary", 3, "click"], [1, "agent-card", 3, "selected"], [1, "agent-card", 3, "click"], [1, "selection-indicator"], [1, "fa-solid", "fa-check-circle"], [1, "fa-regular", "fa-circle"], [1, "agent-icon"], [1, "agent-logo", 3, "src", "alt"], [3, "class"], [1, "agent-info"], [1, "agent-name"], [1, "agent-description"], [1, "agent-meta"], [1, "status-badge", 3, "background-color"], [1, "type-badge"], [1, "execution-badge"], [1, "status-badge"], [1, "fa-solid", "fa-plus"]], template: function SubAgentSelectorDialogComponent_Template(rf, ctx) { if (rf & 1) {
|
|
399
|
+
static { this.ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: SubAgentSelectorDialogComponent, selectors: [["mj-sub-agent-selector-dialog"]], outputs: { DialogClose: "DialogClose" }, standalone: false, features: [i0.ɵɵInheritDefinitionFeature], decls: 36, vars: 21, consts: [[1, "sub-agent-selector-dialog"], [1, "dialog-header"], [1, "header-info"], [1, "header-description"], [1, "header-stats"], [1, "selection-count"], [1, "total-count"], [1, "controls-section"], [1, "search-controls"], [1, "search-input"], [1, "fa-solid", "fa-search", "search-icon"], ["placeholder", "Search agents by name, description, or type...", 1, "mj-input", "search-field", 3, "formControl"], ["mjButton", "", "variant", "flat", 1, "clear-search"], [1, "filter-controls"], [1, "type-filter"], ["TextField", "Name", "ValueField", "ID", 1, "type-dropdown", 3, "ngModelChange", "ngModel", "ValuePrimitive", "DefaultItem", "Data"], [1, "loading-state"], [1, "content-area"], [1, "dialog-footer"], [1, "footer-left"], ["mjButton", "", "variant", "primary"], [1, "footer-right"], ["mjButton", "", "variant", "flat", 3, "click"], ["mjButton", "", "variant", "primary", 3, "click", "disabled"], ["mjButton", "", "variant", "flat", 1, "clear-search", 3, "click"], [1, "fa-solid", "fa-times"], [1, "fa-solid", "fa-spinner", "fa-spin", "fa-2x"], [1, "empty-state"], [1, "agents-grid"], [1, "fa-solid", "fa-robot"], ["mjButton", "", "variant", "primary", 3, "click"], [1, "agent-card", 3, "selected"], [1, "agent-card", 3, "click"], [1, "selection-indicator"], [1, "fa-solid", "fa-check-circle"], [1, "fa-regular", "fa-circle"], [1, "agent-icon"], [1, "agent-logo", 3, "src", "alt"], [3, "class"], [1, "agent-info"], [1, "agent-name"], [1, "agent-description"], [1, "agent-meta"], [1, "status-badge", 3, "background-color"], [1, "type-badge"], [1, "execution-badge"], [1, "status-badge"], [1, "fa-solid", "fa-plus"]], template: function SubAgentSelectorDialogComponent_Template(rf, ctx) { if (rf & 1) {
|
|
398
400
|
i0.ɵɵelementStart(0, "div", 0)(1, "div", 1)(2, "div", 2)(3, "h3");
|
|
399
401
|
i0.ɵɵtext(4);
|
|
400
402
|
i0.ɵɵelementEnd();
|
|
@@ -461,5 +463,5 @@ export class SubAgentSelectorDialogComponent {
|
|
|
461
463
|
}], () => [{ type: i0.ChangeDetectorRef }], { DialogClose: [{
|
|
462
464
|
type: Output
|
|
463
465
|
}] }); })();
|
|
464
|
-
(() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassDebugInfo(SubAgentSelectorDialogComponent, { className: "SubAgentSelectorDialogComponent", filePath: "src/lib/custom/AIAgents/sub-agent-selector-dialog.component.ts", lineNumber:
|
|
466
|
+
(() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassDebugInfo(SubAgentSelectorDialogComponent, { className: "SubAgentSelectorDialogComponent", filePath: "src/lib/custom/AIAgents/sub-agent-selector-dialog.component.ts", lineNumber: 38 }); })();
|
|
465
467
|
//# sourceMappingURL=sub-agent-selector-dialog.component.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sub-agent-selector-dialog.component.js","sourceRoot":"","sources":["../../../../src/lib/custom/AIAgents/sub-agent-selector-dialog.component.ts","../../../../src/lib/custom/AIAgents/sub-agent-selector-dialog.component.html"],"names":[],"mappings":"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","sourcesContent":["import { Component, OnInit, OnDestroy, ChangeDetectorRef, Output, EventEmitter } from '@angular/core';\nimport { FormControl } from '@angular/forms';\nimport { Subject, BehaviorSubject, combineLatest, debounceTime, distinctUntilChanged, takeUntil, startWith } from 'rxjs';\nimport { RunView } from '@memberjunction/core';\nimport { MJAIAgentTypeEntity } from '@memberjunction/core-entities';\nimport { MJAIAgentEntityExtended } from \"@memberjunction/ai-core-plus\";\nimport { UUIDsEqual } from '@memberjunction/global';\n\nexport interface SubAgentSelectorResult {\n selectedAgents: MJAIAgentEntityExtended[];\n createNew: boolean;\n}\n\nexport interface SubAgentSelectorConfig {\n title: string;\n multiSelect: boolean;\n selectedAgentIds: string[];\n showCreateNew: boolean;\n parentAgentId: string; // To exclude from selection\n}\n\nexport interface AgentDisplayItem extends MJAIAgentEntityExtended {\n selected: boolean;\n typeName?: string;\n}\n\n/**\n * Sub-Agent Selector Dialog for selecting agents to convert to sub-agents.\n * Only shows agents with NULL ParentID (root agents) that can become sub-agents.\n */\n@Component({\n standalone: false,\n selector: 'mj-sub-agent-selector-dialog',\n templateUrl: './sub-agent-selector-dialog.component.html',\n styleUrls: ['./sub-agent-selector-dialog.component.css']\n})\nexport class SubAgentSelectorDialogComponent implements OnInit, OnDestroy {\n \n // Input properties set by service\n config!: SubAgentSelectorConfig;\n \n // Reactive state management\n private destroy$ = new Subject<void>();\n public result = new Subject<SubAgentSelectorResult | null>();\n \n // Data streams\n allAgents$ = new BehaviorSubject<AgentDisplayItem[]>([]);\n agentTypes$ = new BehaviorSubject<MJAIAgentTypeEntity[]>([]);\n filteredAgents$ = new BehaviorSubject<AgentDisplayItem[]>([]);\n selectedAgents$ = new BehaviorSubject<Set<string>>(new Set());\n isLoading$ = new BehaviorSubject<boolean>(false);\n \n // UI state\n searchControl = new FormControl('');\n selectedTypeId$ = new BehaviorSubject<string>('all');\n \n // Computed values\n get selectedCount(): number {\n return this.selectedAgents$.value.size;\n }\n\n get totalAgentCount(): number {\n return this.allAgents$.value.length;\n }\n\n get filteredCount(): number {\n return this.filteredAgents$.value.length;\n }\n\n @Output() DialogClose = new EventEmitter<void>();\n\n constructor(\n private cdr: ChangeDetectorRef\n ) {}\n\n ngOnInit() {\n this.initializeData();\n this.setupFiltering();\n this.preselectExistingAgents();\n }\n\n ngOnDestroy() {\n this.destroy$.next();\n this.destroy$.complete();\n }\n\n private async initializeData() {\n this.isLoading$.next(true);\n \n try {\n await this.loadAgentsAndTypes();\n } catch (error) {\n console.error('Error loading dialog data:', error);\n } finally {\n this.isLoading$.next(false);\n }\n }\n\n private async loadAgentsAndTypes() {\n const rv = new RunView();\n \n // Load both agents and types in a single batch for better performance\n const results = await rv.RunViews([\n // Root agents (index 0)\n {\n EntityName: 'MJ: AI Agents',\n ExtraFilter: `ParentID IS NULL AND ID != '${this.config.parentAgentId}' AND Status = 'Active' AND (ExposeAsAction = 0 OR ExposeAsAction IS NULL)`,\n OrderBy: 'Name',\n ResultType: 'entity_object',\n MaxRows: 1000\n },\n // Agent types (index 1)\n {\n EntityName: 'MJ: AI Agent Types',\n ExtraFilter: 'IsActive = 1',\n OrderBy: 'Name',\n ResultType: 'entity_object',\n MaxRows: 1000\n }\n ]);\n\n // Process root agents (index 0)\n if (results[0].Success) {\n const agents: AgentDisplayItem[] = (results[0].Results || []).map(agent => ({\n ...agent.GetAll(),\n selected: false,\n typeName: agent.Type || 'Default'\n } as AgentDisplayItem));\n \n this.allAgents$.next(agents);\n }\n\n // Process agent types (index 1)\n if (results[1].Success) {\n this.agentTypes$.next(results[1].Results || []);\n }\n }\n\n private setupFiltering() {\n combineLatest([\n this.allAgents$,\n this.searchControl.valueChanges.pipe(\n debounceTime(300),\n distinctUntilChanged(),\n startWith('')\n ),\n this.selectedTypeId$\n ]).pipe(\n takeUntil(this.destroy$)\n ).subscribe(([agents, searchTerm, typeId]) => {\n this.filterAgents(agents, searchTerm || '', typeId);\n });\n }\n\n private filterAgents(agents: AgentDisplayItem[], searchTerm: string, typeId: string) {\n let filtered = [...agents];\n\n // Type filter\n if (typeId !== 'all') {\n filtered = filtered.filter(agent => UUIDsEqual(agent.TypeID, typeId));\n }\n\n // Search filter\n if (searchTerm) {\n const term = searchTerm.toLowerCase();\n filtered = filtered.filter(agent =>\n (agent.Name && agent.Name.toLowerCase().includes(term)) ||\n (agent.Description && agent.Description.toLowerCase().includes(term)) ||\n (agent.typeName && agent.typeName.toLowerCase().includes(term))\n );\n }\n\n this.filteredAgents$.next(filtered);\n }\n\n private preselectExistingAgents() {\n if (this.config.selectedAgentIds.length > 0) {\n const selected = new Set(this.config.selectedAgentIds);\n this.selectedAgents$.next(selected);\n \n // Update agent selection state\n const agents = this.allAgents$.value;\n agents.forEach(agent => {\n agent.selected = selected.has(agent.ID);\n });\n this.allAgents$.next(agents);\n }\n }\n\n // === UI Event Handlers ===\n\n selectType(typeId: string) {\n this.selectedTypeId$.next(typeId);\n }\n\n toggleAgentSelection(agent: AgentDisplayItem) {\n const selected = this.selectedAgents$.value;\n const agents = this.allAgents$.value;\n \n // Find the agent and toggle its selection\n const agentToUpdate = agents.find(a => UUIDsEqual(a.ID, agent.ID));\n if (agentToUpdate) {\n agentToUpdate.selected = !agentToUpdate.selected;\n \n if (agentToUpdate.selected) {\n if (!this.config.multiSelect) {\n // Single select mode - clear other selections\n selected.clear();\n agents.forEach(a => {\n if (!UUIDsEqual(a.ID, agent.ID)) {\n a.selected = false;\n }\n });\n }\n selected.add(agent.ID);\n } else {\n selected.delete(agent.ID);\n }\n \n this.selectedAgents$.next(new Set(selected));\n this.allAgents$.next(agents);\n \n // Update filtered agents to reflect selection state\n const filtered = this.filteredAgents$.value;\n const filteredAgent = filtered.find(a => UUIDsEqual(a.ID, agent.ID));\n if (filteredAgent) {\n filteredAgent.selected = agentToUpdate.selected;\n this.filteredAgents$.next(filtered);\n }\n }\n }\n\n clearSearch() {\n this.searchControl.reset();\n }\n\n getAgentIcon(agent: AgentDisplayItem): string {\n if (agent.IconClass) {\n return agent.IconClass;\n }\n return 'fa-solid fa-robot';\n }\n\n getAgentStatusColor(agent: AgentDisplayItem): string {\n switch (agent.Status) {\n case 'Active': return 'var(--mj-status-success)';\n case 'Disabled': return 'var(--mj-text-muted)';\n case 'Pending': return 'var(--mj-status-warning)';\n default: return 'var(--mj-text-muted)';\n }\n }\n\n // === Dialog Actions ===\n\n cancel() {\n this.result.next(null);\n this.DialogClose.emit();\n }\n\n createNew() {\n this.result.next({\n selectedAgents: [],\n createNew: true\n });\n this.DialogClose.emit();\n }\n\n async addSelectedAgents() {\n const selectedIds = this.selectedAgents$.value;\n const allAgents = this.allAgents$.value;\n \n // Get the selected agent display items\n const selectedDisplayItems = allAgents\n .filter(agent => selectedIds.has(agent.ID));\n \n // Convert AgentDisplayItem to MJAIAgentEntityExtended by casting (they have the same structure)\n const selectedAgents: MJAIAgentEntityExtended[] = selectedDisplayItems.map(item => item as MJAIAgentEntityExtended);\n \n this.result.next({\n selectedAgents,\n createNew: false\n });\n this.DialogClose.emit();\n }\n}","<!-- Sub-Agent Selector Dialog -->\n<div class=\"sub-agent-selector-dialog\">\n \n <!-- Dialog Header -->\n <div class=\"dialog-header\">\n <div class=\"header-info\">\n <h3>{{ config.title || 'Select Sub-Agents' }}</h3>\n <p class=\"header-description\">\n Choose existing root agents to convert into sub-agents. Only active agents without parents and not exposed as actions can be selected.\n </p>\n </div>\n <div class=\"header-stats\">\n @if (selectedCount > 0) {\n <span class=\"selection-count\">{{ selectedCount }} selected</span>\n }\n <span class=\"total-count\">{{ filteredCount }} of {{ totalAgentCount }} agents</span>\n </div>\n </div>\n\n <!-- Search and Filter Controls -->\n <div class=\"controls-section\">\n <div class=\"search-controls\">\n <div class=\"search-input\">\n <i class=\"fa-solid fa-search search-icon\"></i>\n <input\n class=\"mj-input search-field\"\n [formControl]=\"searchControl\"\n placeholder=\"Search agents by name, description, or type...\">\n @if (searchControl.value) {\n <button mjButton\n variant=\"flat\"\n (click)=\"clearSearch()\"\n class=\"clear-search\">\n <i class=\"fa-solid fa-times\"></i>\n </button>\n }\n </div>\n </div>\n\n <div class=\"filter-controls\">\n <div class=\"type-filter\">\n <label>Agent Type:</label>\n <mj-dropdown\n [ngModel]=\"selectedTypeId$ | async\"\n (ngModelChange)=\"selectType($any($event))\"\n TextField=\"Name\"\n ValueField=\"ID\"\n [ValuePrimitive]=\"true\"\n [DefaultItem]=\"{ Name: 'All Types', ID: 'all' }\"\n [Data]=\"agentTypes$ | async\"\n class=\"type-dropdown\">\n </mj-dropdown>\n </div>\n </div>\n </div>\n\n <!-- Loading State -->\n @if (isLoading$ | async) {\n <div class=\"loading-state\">\n <i class=\"fa-solid fa-spinner fa-spin fa-2x\"></i>\n <p>Loading available agents...</p>\n </div>\n } @else {\n \n <!-- Content Area -->\n <div class=\"content-area\">\n @if (filteredCount === 0) {\n <div class=\"empty-state\">\n <i class=\"fa-solid fa-robot\"></i>\n <h4>No agents found</h4>\n @if (totalAgentCount === 0) {\n <p>No eligible root agents are available to become sub-agents.</p>\n } @else {\n <p>Try adjusting your search criteria or selecting a different agent type.</p>\n <button mjButton (click)=\"clearSearch()\" variant=\"primary\">\n Clear Search\n </button>\n }\n </div>\n } @else {\n \n <!-- Agents Grid -->\n <div class=\"agents-grid\">\n @for (agent of (filteredAgents$ | async); track agent.ID) {\n <div class=\"agent-card\" \n [class.selected]=\"agent.selected\"\n (click)=\"toggleAgentSelection(agent)\">\n \n <!-- Selection Indicator -->\n <div class=\"selection-indicator\">\n @if (agent.selected) {\n <i class=\"fa-solid fa-check-circle\"></i>\n } @else {\n <i class=\"fa-regular fa-circle\"></i>\n }\n </div>\n \n <!-- Agent Icon/Logo -->\n <div class=\"agent-icon\">\n @if (agent.LogoURL) {\n <img [src]=\"agent.LogoURL\" [alt]=\"agent.Name + ' logo'\" class=\"agent-logo\">\n } @else {\n <i [class]=\"getAgentIcon(agent)\"></i>\n }\n </div>\n \n <!-- Agent Info -->\n <div class=\"agent-info\">\n <div class=\"agent-name\">{{ agent.Name }}</div>\n @if (agent.Description) {\n <div class=\"agent-description\">{{ agent.Description }}</div>\n }\n <div class=\"agent-meta\">\n @if (agent.Status) {\n <span class=\"status-badge\" [style.background-color]=\"getAgentStatusColor(agent)\">\n {{ agent.Status }}\n </span>\n }\n @if (agent.typeName) {\n <span class=\"type-badge\">{{ agent.typeName }}</span>\n }\n @if (agent.ExecutionMode) {\n <span class=\"execution-badge\">{{ agent.ExecutionMode }}</span>\n }\n </div>\n </div>\n </div>\n }\n </div>\n }\n </div>\n }\n\n <!-- Dialog Footer -->\n <div class=\"dialog-footer\">\n <div class=\"footer-left\">\n @if (config.showCreateNew) {\n <button mjButton\n variant=\"primary\"\n (click)=\"createNew()\">\n <i class=\"fa-solid fa-plus\"></i>\n Create Sub-Agent\n </button>\n }\n </div>\n \n <div class=\"footer-right\">\n <button mjButton\n variant=\"flat\"\n (click)=\"cancel()\">\n Cancel\n </button>\n\n <button mjButton\n variant=\"primary\"\n (click)=\"addSelectedAgents()\"\n [disabled]=\"selectedCount === 0\">\n @if (config.multiSelect) {\n Add {{ selectedCount > 0 ? selectedCount + ' ' : '' }}Sub-Agent{{ selectedCount !== 1 ? 's' : '' }}\n } @else {\n Add Sub-Agent\n }\n </button>\n </div>\n </div>\n</div>"]}
|
|
1
|
+
{"version":3,"file":"sub-agent-selector-dialog.component.js","sourceRoot":"","sources":["../../../../src/lib/custom/AIAgents/sub-agent-selector-dialog.component.ts","../../../../src/lib/custom/AIAgents/sub-agent-selector-dialog.component.html"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAwC,MAAM,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC;AACtG,OAAO,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAC7C,OAAO,EAAE,OAAO,EAAE,eAAe,EAAE,aAAa,EAAE,YAAY,EAAE,oBAAoB,EAAE,SAAS,EAAE,SAAS,EAAE,MAAM,MAAM,CAAC;AACzH,OAAO,EAAE,OAAO,EAAE,MAAM,sBAAsB,CAAC;AAG/C,OAAO,EAAE,UAAU,EAAE,MAAM,wBAAwB,CAAC;AAEpD,OAAO,EAAE,oBAAoB,EAAE,MAAM,+BAA+B,CAAC;;;;;;;;ICK7D,+BAA8B;IAAA,YAA4B;IAAA,iBAAO;;;IAAnC,cAA4B;IAA5B,4DAA4B;;;;IAgBxD,kCAG6B;IADrB,oMAAS,oBAAa,KAAC;IAE7B,wBAAiC;IACnC,iBAAS;;;IAwBf,+BAA2B;IACzB,wBAAiD;IACjD,yBAAG;IAAA,2CAA2B;IAChC,AADgC,iBAAI,EAC9B;;;IAUE,yBAAG;IAAA,2EAA2D;IAAA,iBAAI;;;;IAElE,yBAAG;IAAA,uFAAuE;IAAA,iBAAI;IAC9E,kCAA2D;IAA1C,iOAAS,oBAAa,KAAC;IACtC,8BACF;IAAA,iBAAS;;;IATb,+BAAyB;IACvB,wBAAiC;IACjC,0BAAI;IAAA,+BAAe;IAAA,iBAAK;IAGtB,AAFF,yHAA6B,8FAEpB;IAMX,iBAAM;;;IARJ,eAOC;IAPD,sDAOC;;;IAcO,wBAAwC;;;IAExC,wBAAoC;;;IAOpC,0BAA2E;;;IAAhD,AAAtB,wDAAqB,gCAA6B;;;IAEvD,oBAAqC;;;;IAAlC,4CAA6B;;;IAQhC,+BAA+B;IAAA,YAAuB;IAAA,iBAAM;;;IAA7B,cAAuB;IAAvB,0CAAuB;;;IAIpD,gCAAiF;IAC/E,YACF;IAAA,iBAAO;;;;IAFoB,wEAAqD;IAC9E,cACF;IADE,gDACF;;;IAGA,gCAAyB;IAAA,YAAoB;IAAA,iBAAO;;;IAA3B,cAAoB;IAApB,uCAAoB;;;IAG7C,gCAA8B;IAAA,YAAyB;IAAA,iBAAO;;;IAAhC,cAAyB;IAAzB,4CAAyB;;;;IAtC/D,+BAE2C;IAAtC,iPAAS,qCAA2B,KAAC;IAGxC,+BAAiC;IAG7B,AAFF,mIAAsB,6GAEb;IAGX,iBAAM;IAGN,+BAAwB;IAGpB,AAFF,qIAAqB,6GAEZ;IAGX,iBAAM;IAIJ,AADF,+BAAwB,cACE;IAAA,YAAgB;IAAA,iBAAM;IAC9C,uIAAyB;IAGzB,gCAAwB;IACtB,wIAAoB;IAKpB,wIAAsB;IAGtB,wIAA2B;IAKjC,AADE,AADE,iBAAM,EACF,EACF;;;IAzCD,6CAAiC;IAKlC,eAIC;IAJD,2CAIC;IAKD,eAIC;IAJD,0CAIC;IAKuB,eAAgB;IAAhB,mCAAgB;IACxC,cAEC;IAFD,gDAEC;IAEC,eAIC;IAJD,2CAIC;IACD,cAEC;IAFD,6CAEC;IACD,cAEC;IAFD,kDAEC;;;IAzCX,+BAAyB;IACvB,iIA4CC;;IACH,iBAAM;;;IA7CJ,cA4CC;IA5CD,2DA4CC;;;IA9DP,+BAA0B;IActB,AAbF,iHAA2B,2FAalB;IAmDX,iBAAM;;;IAhEJ,cA+DC;IA/DD,oDA+DC;;;;IAQC,kCAE8B;IAAtB,oMAAS,kBAAW,KAAC;IAC3B,wBAAgC;IAChC,kCACF;IAAA,iBAAS;;;IAgBP,YACF;;;IADE,mJACF;;;IACE,+BACF;;ADtIR;;;GAGG;AAOH,MAAM,OAAO,+BAAgC,SAAQ,oBAAoB;IAoBvE,kBAAkB;IAClB,IAAI,aAAa;QACf,OAAO,IAAI,CAAC,eAAe,CAAC,KAAK,CAAC,IAAI,CAAC;IACzC,CAAC;IAED,IAAI,eAAe;QACjB,OAAO,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,MAAM,CAAC;IACtC,CAAC;IAED,IAAI,aAAa;QACf,OAAO,IAAI,CAAC,eAAe,CAAC,KAAK,CAAC,MAAM,CAAC;IAC3C,CAAC;IAID,YACU,GAAsB;QAE9B,KAAK,EAAE,CAAC;QAFA,QAAG,GAAH,GAAG,CAAmB;QA/BhC,4BAA4B;QACpB,aAAQ,GAAG,IAAI,OAAO,EAAQ,CAAC;QAChC,WAAM,GAAG,IAAI,OAAO,EAAiC,CAAC;QAE7D,eAAe;QACf,eAAU,GAAG,IAAI,eAAe,CAAqB,EAAE,CAAC,CAAC;QACzD,gBAAW,GAAG,IAAI,eAAe,CAAwB,EAAE,CAAC,CAAC;QAC7D,oBAAe,GAAG,IAAI,eAAe,CAAqB,EAAE,CAAC,CAAC;QAC9D,oBAAe,GAAG,IAAI,eAAe,CAAc,IAAI,GAAG,EAAE,CAAC,CAAC;QAC9D,eAAU,GAAG,IAAI,eAAe,CAAU,KAAK,CAAC,CAAC;QAEjD,WAAW;QACX,kBAAa,GAAG,IAAI,WAAW,CAAC,EAAE,CAAC,CAAC;QACpC,oBAAe,GAAG,IAAI,eAAe,CAAS,KAAK,CAAC,CAAC;QAe3C,gBAAW,GAAG,IAAI,YAAY,EAAQ,CAAC;IAKvC,CAAC;IAEX,QAAQ;QACN,IAAI,CAAC,cAAc,EAAE,CAAC;QACtB,IAAI,CAAC,cAAc,EAAE,CAAC;QACtB,IAAI,CAAC,uBAAuB,EAAE,CAAC;IACjC,CAAC;IAED,WAAW;QACT,IAAI,CAAC,QAAQ,CAAC,IAAI,EAAE,CAAC;QACrB,IAAI,CAAC,QAAQ,CAAC,QAAQ,EAAE,CAAC;IAC3B,CAAC;IAEO,KAAK,CAAC,cAAc;QAC1B,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAE3B,IAAI,CAAC;YACH,MAAM,IAAI,CAAC,kBAAkB,EAAE,CAAC;QAClC,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,OAAO,CAAC,KAAK,CAAC,4BAA4B,EAAE,KAAK,CAAC,CAAC;QACrD,CAAC;gBAAS,CAAC;YACT,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QAC9B,CAAC;IACH,CAAC;IAEO,KAAK,CAAC,kBAAkB;QAC9B,MAAM,EAAE,GAAG,OAAO,CAAC,oBAAoB,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;QAE5D,sEAAsE;QACtE,MAAM,OAAO,GAAG,MAAM,EAAE,CAAC,QAAQ,CAAC;YAChC,wBAAwB;YACxB;gBACE,UAAU,EAAE,eAAe;gBAC3B,WAAW,EAAE,+BAA+B,IAAI,CAAC,MAAM,CAAC,aAAa,4EAA4E;gBACjJ,OAAO,EAAE,MAAM;gBACf,UAAU,EAAE,eAAe;gBAC3B,OAAO,EAAE,IAAI;aACd;YACD,wBAAwB;YACxB;gBACE,UAAU,EAAE,oBAAoB;gBAChC,WAAW,EAAE,cAAc;gBAC3B,OAAO,EAAE,MAAM;gBACf,UAAU,EAAE,eAAe;gBAC3B,OAAO,EAAE,IAAI;aACd;SACF,CAAC,CAAC;QAEH,gCAAgC;QAChC,IAAI,OAAO,CAAC,CAAC,CAAC,CAAC,OAAO,EAAE,CAAC;YACvB,MAAM,MAAM,GAAuB,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,OAAO,IAAI,EAAE,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;gBAC1E,GAAG,KAAK,CAAC,MAAM,EAAE;gBACjB,QAAQ,EAAE,KAAK;gBACf,QAAQ,EAAE,KAAK,CAAC,IAAI,IAAI,SAAS;aACb,CAAA,CAAC,CAAC;YAExB,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QAC/B,CAAC;QAED,gCAAgC;QAChC,IAAI,OAAO,CAAC,CAAC,CAAC,CAAC,OAAO,EAAE,CAAC;YACvB,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,OAAO,IAAI,EAAE,CAAC,CAAC;QAClD,CAAC;IACH,CAAC;IAEO,cAAc;QACpB,aAAa,CAAC;YACZ,IAAI,CAAC,UAAU;YACf,IAAI,CAAC,aAAa,CAAC,YAAY,CAAC,IAAI,CAClC,YAAY,CAAC,GAAG,CAAC,EACjB,oBAAoB,EAAE,EACtB,SAAS,CAAC,EAAE,CAAC,CACd;YACD,IAAI,CAAC,eAAe;SACrB,CAAC,CAAC,IAAI,CACL,SAAS,CAAC,IAAI,CAAC,QAAQ,CAAC,CACzB,CAAC,SAAS,CAAC,CAAC,CAAC,MAAM,EAAE,UAAU,EAAE,MAAM,CAAC,EAAE,EAAE;YAC3C,IAAI,CAAC,YAAY,CAAC,MAAM,EAAE,UAAU,IAAI,EAAE,EAAE,MAAM,CAAC,CAAC;QACtD,CAAC,CAAC,CAAC;IACL,CAAC;IAEO,YAAY,CAAC,MAA0B,EAAE,UAAkB,EAAE,MAAc;QACjF,IAAI,QAAQ,GAAG,CAAC,GAAG,MAAM,CAAC,CAAC;QAE3B,cAAc;QACd,IAAI,MAAM,KAAK,KAAK,EAAE,CAAC;YACrB,QAAQ,GAAG,QAAQ,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC,UAAU,CAAC,KAAK,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC;QACxE,CAAC;QAED,gBAAgB;QAChB,IAAI,UAAU,EAAE,CAAC;YACf,MAAM,IAAI,GAAG,UAAU,CAAC,WAAW,EAAE,CAAC;YACtC,QAAQ,GAAG,QAAQ,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,CACjC,CAAC,KAAK,CAAC,IAAI,IAAI,KAAK,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;gBACvD,CAAC,KAAK,CAAC,WAAW,IAAI,KAAK,CAAC,WAAW,CAAC,WAAW,EAAE,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;gBACrE,CAAC,KAAK,CAAC,QAAQ,IAAI,KAAK,CAAC,QAAQ,CAAC,WAAW,EAAE,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAChE,CAAC;QACJ,CAAC;QAED,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;IACtC,CAAC;IAEO,uBAAuB;QAC7B,IAAI,IAAI,CAAC,MAAM,CAAC,gBAAgB,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAC5C,MAAM,QAAQ,GAAG,IAAI,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,gBAAgB,CAAC,CAAC;YACvD,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;YAEpC,+BAA+B;YAC/B,MAAM,MAAM,GAAG,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC;YACrC,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE;gBACrB,KAAK,CAAC,QAAQ,GAAG,QAAQ,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;YAC1C,CAAC,CAAC,CAAC;YACH,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QAC/B,CAAC;IACH,CAAC;IAED,4BAA4B;IAE5B,UAAU,CAAC,MAAc;QACvB,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;IACpC,CAAC;IAED,oBAAoB,CAAC,KAAuB;QAC1C,MAAM,QAAQ,GAAG,IAAI,CAAC,eAAe,CAAC,KAAK,CAAC;QAC5C,MAAM,MAAM,GAAG,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC;QAErC,0CAA0C;QAC1C,MAAM,aAAa,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,UAAU,CAAC,CAAC,CAAC,EAAE,EAAE,KAAK,CAAC,EAAE,CAAC,CAAC,CAAC;QACnE,IAAI,aAAa,EAAE,CAAC;YAClB,aAAa,CAAC,QAAQ,GAAG,CAAC,aAAa,CAAC,QAAQ,CAAC;YAEjD,IAAI,aAAa,CAAC,QAAQ,EAAE,CAAC;gBAC3B,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,WAAW,EAAE,CAAC;oBAC7B,8CAA8C;oBAC9C,QAAQ,CAAC,KAAK,EAAE,CAAC;oBACjB,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE;wBACjB,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,EAAE,EAAE,KAAK,CAAC,EAAE,CAAC,EAAE,CAAC;4BAChC,CAAC,CAAC,QAAQ,GAAG,KAAK,CAAC;wBACrB,CAAC;oBACH,CAAC,CAAC,CAAC;gBACL,CAAC;gBACD,QAAQ,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;YACzB,CAAC;iBAAM,CAAC;gBACN,QAAQ,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;YAC5B,CAAC;YAED,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,IAAI,GAAG,CAAC,QAAQ,CAAC,CAAC,CAAC;YAC7C,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;YAE7B,oDAAoD;YACpD,MAAM,QAAQ,GAAG,IAAI,CAAC,eAAe,CAAC,KAAK,CAAC;YAC5C,MAAM,aAAa,GAAG,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,UAAU,CAAC,CAAC,CAAC,EAAE,EAAE,KAAK,CAAC,EAAE,CAAC,CAAC,CAAC;YACrE,IAAI,aAAa,EAAE,CAAC;gBAClB,aAAa,CAAC,QAAQ,GAAG,aAAa,CAAC,QAAQ,CAAC;gBAChD,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;YACtC,CAAC;QACH,CAAC;IACH,CAAC;IAED,WAAW;QACT,IAAI,CAAC,aAAa,CAAC,KAAK,EAAE,CAAC;IAC7B,CAAC;IAED,YAAY,CAAC,KAAuB;QAClC,IAAI,KAAK,CAAC,SAAS,EAAE,CAAC;YACpB,OAAO,KAAK,CAAC,SAAS,CAAC;QACzB,CAAC;QACD,OAAO,mBAAmB,CAAC;IAC7B,CAAC;IAED,mBAAmB,CAAC,KAAuB;QACzC,QAAQ,KAAK,CAAC,MAAM,EAAE,CAAC;YACrB,KAAK,QAAQ,CAAC,CAAC,OAAO,0BAA0B,CAAC;YACjD,KAAK,UAAU,CAAC,CAAC,OAAO,sBAAsB,CAAC;YAC/C,KAAK,SAAS,CAAC,CAAC,OAAO,0BAA0B,CAAC;YAClD,OAAO,CAAC,CAAC,OAAO,sBAAsB,CAAC;QACzC,CAAC;IACH,CAAC;IAED,yBAAyB;IAEzB,MAAM;QACJ,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACvB,IAAI,CAAC,WAAW,CAAC,IAAI,EAAE,CAAC;IAC1B,CAAC;IAED,SAAS;QACP,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC;YACf,cAAc,EAAE,EAAE;YAClB,SAAS,EAAE,IAAI;SAChB,CAAC,CAAC;QACH,IAAI,CAAC,WAAW,CAAC,IAAI,EAAE,CAAC;IAC1B,CAAC;IAED,KAAK,CAAC,iBAAiB;QACrB,MAAM,WAAW,GAAG,IAAI,CAAC,eAAe,CAAC,KAAK,CAAC;QAC/C,MAAM,SAAS,GAAG,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC;QAExC,uCAAuC;QACvC,MAAM,oBAAoB,GAAG,SAAS;aACnC,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC,WAAW,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,CAAC;QAE9C,gGAAgG;QAChG,MAAM,cAAc,GAA8B,oBAAoB,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,IAA+B,CAAC,CAAC;QAEpH,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC;YACf,cAAc;YACd,SAAS,EAAE,KAAK;SACjB,CAAC,CAAC;QACH,IAAI,CAAC,WAAW,CAAC,IAAI,EAAE,CAAC;IAC1B,CAAC;gIAxPU,+BAA+B;oEAA/B,+BAA+B;YC/BtC,AADF,AADF,AAHF,8BAAuC,aAGV,aACA,SACnB;YAAA,YAAyC;YAAA,iBAAK;YAClD,4BAA8B;YAC5B,wJACF;YACF,AADE,iBAAI,EACA;YACN,8BAA0B;YACxB,kGAAyB;YAGzB,+BAA0B;YAAA,aAAmD;YAEjF,AADE,AAD+E,iBAAO,EAChF,EACF;YAKF,AADF,AADF,+BAA8B,cACC,cACD;YAExB,AADA,yBAA8C,iBAIiB;YAC/D,uGAA2B;YAS/B,AADE,iBAAM,EACF;YAIF,AADF,AADF,gCAA6B,eACF,aAChB;YAAA,4BAAW;YAAA,iBAAQ;YAC1B,wCAQwB;;;YANtB,wIAAiB,sBAAwB,IAAC;YAUlD,AADE,AADE,AADE,iBAAc,EACV,EACF,EACF;YAGN,oGAA0B;;YAKxB,0GAAO;YAyEP,AADF,gCAA2B,eACA;YACvB,uGAA4B;YAQ9B,iBAAM;YAGJ,AADF,gCAA0B,kBAGG;YAAnB,6GAAS,YAAQ,IAAC;YACxB,yBACF;YAAA,iBAAS;YAET,mCAGyC;YADjC,6GAAS,uBAAmB,IAAC;YAIjC,AAFF,yFAA0B,mEAEjB;YAMjB,AADE,AADE,AADE,iBAAS,EACL,EACF,EACF;;YA/JI,eAAyC;YAAzC,6DAAyC;YAM7C,eAEC;YAFD,gDAEC;YACyB,eAAmD;YAAnD,oFAAmD;YAWzE,eAA6B;YAA7B,+CAA6B;YAE/B,cAOC;YAPD,mDAOC;YAQC,eAAmC;YAMnC,AADA,AADA,AAJA,qEAAmC,wBAIZ,4CACyB,iDACpB;YAQpC,eA0EC;YA1ED,kEA0EC;YAKG,eAOC;YAPD,oDAOC;YAaO,eAAgC;YAAhC,kDAAgC;YACtC,cAIC;YAJD,kDAIC;;;iFD5HI,+BAA+B;cAN3C,SAAS;6BACI,KAAK,YACP,8BAA8B;;kBAqCvC,MAAM;;kFAjCI,+BAA+B","sourcesContent":["import { Component, OnInit, OnDestroy, ChangeDetectorRef, Output, EventEmitter } from '@angular/core';\nimport { FormControl } from '@angular/forms';\nimport { Subject, BehaviorSubject, combineLatest, debounceTime, distinctUntilChanged, takeUntil, startWith } from 'rxjs';\nimport { RunView } from '@memberjunction/core';\nimport { MJAIAgentTypeEntity } from '@memberjunction/core-entities';\nimport { MJAIAgentEntityExtended } from \"@memberjunction/ai-core-plus\";\nimport { UUIDsEqual } from '@memberjunction/global';\n\nimport { BaseAngularComponent } from '@memberjunction/ng-base-types';\nexport interface SubAgentSelectorResult {\n selectedAgents: MJAIAgentEntityExtended[];\n createNew: boolean;\n}\n\nexport interface SubAgentSelectorConfig {\n title: string;\n multiSelect: boolean;\n selectedAgentIds: string[];\n showCreateNew: boolean;\n parentAgentId: string; // To exclude from selection\n}\n\nexport interface AgentDisplayItem extends MJAIAgentEntityExtended {\n selected: boolean;\n typeName?: string;\n}\n\n/**\n * Sub-Agent Selector Dialog for selecting agents to convert to sub-agents.\n * Only shows agents with NULL ParentID (root agents) that can become sub-agents.\n */\n@Component({\n standalone: false,\n selector: 'mj-sub-agent-selector-dialog',\n templateUrl: './sub-agent-selector-dialog.component.html',\n styleUrls: ['./sub-agent-selector-dialog.component.css']\n})\nexport class SubAgentSelectorDialogComponent extends BaseAngularComponent implements OnInit, OnDestroy {\n \n // Input properties set by service\n config!: SubAgentSelectorConfig;\n \n // Reactive state management\n private destroy$ = new Subject<void>();\n public result = new Subject<SubAgentSelectorResult | null>();\n \n // Data streams\n allAgents$ = new BehaviorSubject<AgentDisplayItem[]>([]);\n agentTypes$ = new BehaviorSubject<MJAIAgentTypeEntity[]>([]);\n filteredAgents$ = new BehaviorSubject<AgentDisplayItem[]>([]);\n selectedAgents$ = new BehaviorSubject<Set<string>>(new Set());\n isLoading$ = new BehaviorSubject<boolean>(false);\n \n // UI state\n searchControl = new FormControl('');\n selectedTypeId$ = new BehaviorSubject<string>('all');\n \n // Computed values\n get selectedCount(): number {\n return this.selectedAgents$.value.size;\n }\n\n get totalAgentCount(): number {\n return this.allAgents$.value.length;\n }\n\n get filteredCount(): number {\n return this.filteredAgents$.value.length;\n }\n\n @Output() DialogClose = new EventEmitter<void>();\n\n constructor(\n private cdr: ChangeDetectorRef\n ) {\n super();}\n\n ngOnInit() {\n this.initializeData();\n this.setupFiltering();\n this.preselectExistingAgents();\n }\n\n ngOnDestroy() {\n this.destroy$.next();\n this.destroy$.complete();\n }\n\n private async initializeData() {\n this.isLoading$.next(true);\n \n try {\n await this.loadAgentsAndTypes();\n } catch (error) {\n console.error('Error loading dialog data:', error);\n } finally {\n this.isLoading$.next(false);\n }\n }\n\n private async loadAgentsAndTypes() {\n const rv = RunView.FromMetadataProvider(this.ProviderToUse);\n \n // Load both agents and types in a single batch for better performance\n const results = await rv.RunViews([\n // Root agents (index 0)\n {\n EntityName: 'MJ: AI Agents',\n ExtraFilter: `ParentID IS NULL AND ID != '${this.config.parentAgentId}' AND Status = 'Active' AND (ExposeAsAction = 0 OR ExposeAsAction IS NULL)`,\n OrderBy: 'Name',\n ResultType: 'entity_object',\n MaxRows: 1000\n },\n // Agent types (index 1)\n {\n EntityName: 'MJ: AI Agent Types',\n ExtraFilter: 'IsActive = 1',\n OrderBy: 'Name',\n ResultType: 'entity_object',\n MaxRows: 1000\n }\n ]);\n\n // Process root agents (index 0)\n if (results[0].Success) {\n const agents: AgentDisplayItem[] = (results[0].Results || []).map(agent => ({\n ...agent.GetAll(),\n selected: false,\n typeName: agent.Type || 'Default'\n } as AgentDisplayItem));\n \n this.allAgents$.next(agents);\n }\n\n // Process agent types (index 1)\n if (results[1].Success) {\n this.agentTypes$.next(results[1].Results || []);\n }\n }\n\n private setupFiltering() {\n combineLatest([\n this.allAgents$,\n this.searchControl.valueChanges.pipe(\n debounceTime(300),\n distinctUntilChanged(),\n startWith('')\n ),\n this.selectedTypeId$\n ]).pipe(\n takeUntil(this.destroy$)\n ).subscribe(([agents, searchTerm, typeId]) => {\n this.filterAgents(agents, searchTerm || '', typeId);\n });\n }\n\n private filterAgents(agents: AgentDisplayItem[], searchTerm: string, typeId: string) {\n let filtered = [...agents];\n\n // Type filter\n if (typeId !== 'all') {\n filtered = filtered.filter(agent => UUIDsEqual(agent.TypeID, typeId));\n }\n\n // Search filter\n if (searchTerm) {\n const term = searchTerm.toLowerCase();\n filtered = filtered.filter(agent =>\n (agent.Name && agent.Name.toLowerCase().includes(term)) ||\n (agent.Description && agent.Description.toLowerCase().includes(term)) ||\n (agent.typeName && agent.typeName.toLowerCase().includes(term))\n );\n }\n\n this.filteredAgents$.next(filtered);\n }\n\n private preselectExistingAgents() {\n if (this.config.selectedAgentIds.length > 0) {\n const selected = new Set(this.config.selectedAgentIds);\n this.selectedAgents$.next(selected);\n \n // Update agent selection state\n const agents = this.allAgents$.value;\n agents.forEach(agent => {\n agent.selected = selected.has(agent.ID);\n });\n this.allAgents$.next(agents);\n }\n }\n\n // === UI Event Handlers ===\n\n selectType(typeId: string) {\n this.selectedTypeId$.next(typeId);\n }\n\n toggleAgentSelection(agent: AgentDisplayItem) {\n const selected = this.selectedAgents$.value;\n const agents = this.allAgents$.value;\n \n // Find the agent and toggle its selection\n const agentToUpdate = agents.find(a => UUIDsEqual(a.ID, agent.ID));\n if (agentToUpdate) {\n agentToUpdate.selected = !agentToUpdate.selected;\n \n if (agentToUpdate.selected) {\n if (!this.config.multiSelect) {\n // Single select mode - clear other selections\n selected.clear();\n agents.forEach(a => {\n if (!UUIDsEqual(a.ID, agent.ID)) {\n a.selected = false;\n }\n });\n }\n selected.add(agent.ID);\n } else {\n selected.delete(agent.ID);\n }\n \n this.selectedAgents$.next(new Set(selected));\n this.allAgents$.next(agents);\n \n // Update filtered agents to reflect selection state\n const filtered = this.filteredAgents$.value;\n const filteredAgent = filtered.find(a => UUIDsEqual(a.ID, agent.ID));\n if (filteredAgent) {\n filteredAgent.selected = agentToUpdate.selected;\n this.filteredAgents$.next(filtered);\n }\n }\n }\n\n clearSearch() {\n this.searchControl.reset();\n }\n\n getAgentIcon(agent: AgentDisplayItem): string {\n if (agent.IconClass) {\n return agent.IconClass;\n }\n return 'fa-solid fa-robot';\n }\n\n getAgentStatusColor(agent: AgentDisplayItem): string {\n switch (agent.Status) {\n case 'Active': return 'var(--mj-status-success)';\n case 'Disabled': return 'var(--mj-text-muted)';\n case 'Pending': return 'var(--mj-status-warning)';\n default: return 'var(--mj-text-muted)';\n }\n }\n\n // === Dialog Actions ===\n\n cancel() {\n this.result.next(null);\n this.DialogClose.emit();\n }\n\n createNew() {\n this.result.next({\n selectedAgents: [],\n createNew: true\n });\n this.DialogClose.emit();\n }\n\n async addSelectedAgents() {\n const selectedIds = this.selectedAgents$.value;\n const allAgents = this.allAgents$.value;\n \n // Get the selected agent display items\n const selectedDisplayItems = allAgents\n .filter(agent => selectedIds.has(agent.ID));\n \n // Convert AgentDisplayItem to MJAIAgentEntityExtended by casting (they have the same structure)\n const selectedAgents: MJAIAgentEntityExtended[] = selectedDisplayItems.map(item => item as MJAIAgentEntityExtended);\n \n this.result.next({\n selectedAgents,\n createNew: false\n });\n this.DialogClose.emit();\n }\n}","<!-- Sub-Agent Selector Dialog -->\n<div class=\"sub-agent-selector-dialog\">\n \n <!-- Dialog Header -->\n <div class=\"dialog-header\">\n <div class=\"header-info\">\n <h3>{{ config.title || 'Select Sub-Agents' }}</h3>\n <p class=\"header-description\">\n Choose existing root agents to convert into sub-agents. Only active agents without parents and not exposed as actions can be selected.\n </p>\n </div>\n <div class=\"header-stats\">\n @if (selectedCount > 0) {\n <span class=\"selection-count\">{{ selectedCount }} selected</span>\n }\n <span class=\"total-count\">{{ filteredCount }} of {{ totalAgentCount }} agents</span>\n </div>\n </div>\n\n <!-- Search and Filter Controls -->\n <div class=\"controls-section\">\n <div class=\"search-controls\">\n <div class=\"search-input\">\n <i class=\"fa-solid fa-search search-icon\"></i>\n <input\n class=\"mj-input search-field\"\n [formControl]=\"searchControl\"\n placeholder=\"Search agents by name, description, or type...\">\n @if (searchControl.value) {\n <button mjButton\n variant=\"flat\"\n (click)=\"clearSearch()\"\n class=\"clear-search\">\n <i class=\"fa-solid fa-times\"></i>\n </button>\n }\n </div>\n </div>\n\n <div class=\"filter-controls\">\n <div class=\"type-filter\">\n <label>Agent Type:</label>\n <mj-dropdown\n [ngModel]=\"selectedTypeId$ | async\"\n (ngModelChange)=\"selectType($any($event))\"\n TextField=\"Name\"\n ValueField=\"ID\"\n [ValuePrimitive]=\"true\"\n [DefaultItem]=\"{ Name: 'All Types', ID: 'all' }\"\n [Data]=\"agentTypes$ | async\"\n class=\"type-dropdown\">\n </mj-dropdown>\n </div>\n </div>\n </div>\n\n <!-- Loading State -->\n @if (isLoading$ | async) {\n <div class=\"loading-state\">\n <i class=\"fa-solid fa-spinner fa-spin fa-2x\"></i>\n <p>Loading available agents...</p>\n </div>\n } @else {\n \n <!-- Content Area -->\n <div class=\"content-area\">\n @if (filteredCount === 0) {\n <div class=\"empty-state\">\n <i class=\"fa-solid fa-robot\"></i>\n <h4>No agents found</h4>\n @if (totalAgentCount === 0) {\n <p>No eligible root agents are available to become sub-agents.</p>\n } @else {\n <p>Try adjusting your search criteria or selecting a different agent type.</p>\n <button mjButton (click)=\"clearSearch()\" variant=\"primary\">\n Clear Search\n </button>\n }\n </div>\n } @else {\n \n <!-- Agents Grid -->\n <div class=\"agents-grid\">\n @for (agent of (filteredAgents$ | async); track agent.ID) {\n <div class=\"agent-card\" \n [class.selected]=\"agent.selected\"\n (click)=\"toggleAgentSelection(agent)\">\n \n <!-- Selection Indicator -->\n <div class=\"selection-indicator\">\n @if (agent.selected) {\n <i class=\"fa-solid fa-check-circle\"></i>\n } @else {\n <i class=\"fa-regular fa-circle\"></i>\n }\n </div>\n \n <!-- Agent Icon/Logo -->\n <div class=\"agent-icon\">\n @if (agent.LogoURL) {\n <img [src]=\"agent.LogoURL\" [alt]=\"agent.Name + ' logo'\" class=\"agent-logo\">\n } @else {\n <i [class]=\"getAgentIcon(agent)\"></i>\n }\n </div>\n \n <!-- Agent Info -->\n <div class=\"agent-info\">\n <div class=\"agent-name\">{{ agent.Name }}</div>\n @if (agent.Description) {\n <div class=\"agent-description\">{{ agent.Description }}</div>\n }\n <div class=\"agent-meta\">\n @if (agent.Status) {\n <span class=\"status-badge\" [style.background-color]=\"getAgentStatusColor(agent)\">\n {{ agent.Status }}\n </span>\n }\n @if (agent.typeName) {\n <span class=\"type-badge\">{{ agent.typeName }}</span>\n }\n @if (agent.ExecutionMode) {\n <span class=\"execution-badge\">{{ agent.ExecutionMode }}</span>\n }\n </div>\n </div>\n </div>\n }\n </div>\n }\n </div>\n }\n\n <!-- Dialog Footer -->\n <div class=\"dialog-footer\">\n <div class=\"footer-left\">\n @if (config.showCreateNew) {\n <button mjButton\n variant=\"primary\"\n (click)=\"createNew()\">\n <i class=\"fa-solid fa-plus\"></i>\n Create Sub-Agent\n </button>\n }\n </div>\n \n <div class=\"footer-right\">\n <button mjButton\n variant=\"flat\"\n (click)=\"cancel()\">\n Cancel\n </button>\n\n <button mjButton\n variant=\"primary\"\n (click)=\"addSelectedAgents()\"\n [disabled]=\"selectedCount === 0\">\n @if (config.multiSelect) {\n Add {{ selectedCount > 0 ? selectedCount + ' ' : '' }}Sub-Agent{{ selectedCount !== 1 ? 's' : '' }}\n } @else {\n Add Sub-Agent\n }\n </button>\n </div>\n </div>\n</div>"]}
|
|
@@ -7,7 +7,7 @@ var __decorate = (this && this.__decorate) || function (decorators, target, key,
|
|
|
7
7
|
import { Component, ViewContainerRef, ChangeDetectionStrategy, inject } from '@angular/core';
|
|
8
8
|
import { RegisterClass } from '@memberjunction/global';
|
|
9
9
|
import { BaseFormComponent, CUSTOM_LAYOUT_TOOLBAR_CONFIG } from '@memberjunction/ng-base-forms';
|
|
10
|
-
import {
|
|
10
|
+
import { RunView, CompositeKey } from '@memberjunction/core';
|
|
11
11
|
import { MJAIPromptRunFormComponent } from '../../generated/Entities/MJAIPromptRun/mjaipromptrun.form.component';
|
|
12
12
|
import { SharedService } from '@memberjunction/ng-shared';
|
|
13
13
|
import { TestHarnessWindowManagerService } from '@memberjunction/ng-ai-test-harness';
|
|
@@ -1953,7 +1953,7 @@ let MJAIPromptRunFormComponentExtended = class MJAIPromptRunFormComponentExtende
|
|
|
1953
1953
|
async loadRelatedData() {
|
|
1954
1954
|
this.isLoadingRelatedData = true;
|
|
1955
1955
|
try {
|
|
1956
|
-
const md =
|
|
1956
|
+
const md = this.ProviderToUse;
|
|
1957
1957
|
// Load prompt
|
|
1958
1958
|
if (this.record.PromptID) {
|
|
1959
1959
|
this.prompt = await md.GetEntityObject('MJ: AI Prompts');
|
|
@@ -1988,7 +1988,7 @@ let MJAIPromptRunFormComponentExtended = class MJAIPromptRunFormComponentExtende
|
|
|
1988
1988
|
async loadChildRuns() {
|
|
1989
1989
|
if (!this.record.ID)
|
|
1990
1990
|
return;
|
|
1991
|
-
const rv =
|
|
1991
|
+
const rv = RunView.FromMetadataProvider(this.ProviderToUse);
|
|
1992
1992
|
const result = await rv.RunView({
|
|
1993
1993
|
EntityName: 'MJ: AI Prompt Runs',
|
|
1994
1994
|
ExtraFilter: `ParentID='${this.record.ID}'`,
|