@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":"ai-agent-run.component.js","sourceRoot":"","sources":["../../../../src/lib/custom/ai-agent-run/ai-agent-run.component.ts","../../../../src/lib/custom/ai-agent-run/ai-agent-run.component.html"],"names":[],"mappings":"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","sourcesContent":["import { Component, OnInit, OnDestroy, ViewChild, inject } from '@angular/core';\nimport { Subject } from 'rxjs';\nimport { CompositeKey, Metadata } from '@memberjunction/core';\nimport { MJAIAgentRunEntityExtended, MJAIAgentEntityExtended } from '@memberjunction/ai-core-plus';\nimport { BaseFormComponent } from '@memberjunction/ng-base-forms';\nimport { RegisterClass } from '@memberjunction/global';\nimport { SharedService, NavigationService } from '@memberjunction/ng-shared';\nimport { TimelineItem, AIAgentRunTimelineComponent } from './ai-agent-run-timeline.component';\nimport { MJAIAgentRunFormComponent } from '../../generated/Entities/MJAIAgentRun/mjaiagentrun.form.component';\nimport { ParseJSONRecursive, ParseJSONOptions } from '@memberjunction/global';\nimport { AIAgentRunAnalyticsComponent } from './ai-agent-run-analytics.component';\nimport { AIAgentRunVisualizationComponent } from './ai-agent-run-visualization.component';\nimport { AIAgentRunCostService, AgentRunCostMetrics } from './ai-agent-run-cost.service';\nimport { AIAgentRunDataHelper } from './ai-agent-run-data.service';\nimport { ApplicationManager } from '@memberjunction/ng-base-application';\n\n@RegisterClass(BaseFormComponent, 'MJ: AI Agent Runs') \n@Component({\n standalone: false,\n selector: 'mj-ai-agent-run-form',\n templateUrl: './ai-agent-run.component.html',\n styleUrls: ['./ai-agent-run.component.css']\n})\nexport class MJAIAgentRunFormComponentExtended extends MJAIAgentRunFormComponent implements OnInit, OnDestroy {\n public record!: MJAIAgentRunEntityExtended;\n \n private destroy$ = new Subject<void>();\n \n // UI state\n activeTab = 'timeline';\n selectedTimelineItem: TimelineItem | null = null;\n jsonPanelExpanded = false;\n loading = false;\n error: string | null = null;\n analyticsLoaded = false;\n visualizationLoaded = false;\n \n agent: MJAIAgentEntityExtended | null = null;\n \n // Cost metrics using shared service\n costMetrics: AgentRunCostMetrics | null = null;\n \n // Cached parsed results to prevent redundant JSON parsing\n private _cachedParsedResult: string | null = null;\n private _cachedParsedStartingPayload: string | null = null;\n private _cachedParsedFinalPayload: string | null = null;\n private _cachedParsedData: string | null = null;\n \n // Simple parsing state - true when all parsing is complete\n private _allParsingComplete = false;\n \n @ViewChild(AIAgentRunTimelineComponent) timelineComponent?: AIAgentRunTimelineComponent;\n @ViewChild(AIAgentRunAnalyticsComponent) analyticsComponent?: AIAgentRunAnalyticsComponent;\n @ViewChild(AIAgentRunVisualizationComponent) visualizationComponent?: AIAgentRunVisualizationComponent;\n\n // Field injections\n private navigationService = inject(NavigationService);\n private costService = inject(AIAgentRunCostService);\n private appManager = inject(ApplicationManager);\n\n // Instance of data helper per component\n public dataHelper = new AIAgentRunDataHelper();\n \n async ngOnInit() {\n await super.ngOnInit();\n \n if (this.record && this.record.ID) {\n await this.dataHelper.loadAgentRunData(this.record.ID);\n await this.loadAgent();\n await this.loadCostMetrics();\n \n // Parse all JSON fields on form load for instant access later\n this.parseAllFields();\n }\n }\n \n ngOnDestroy() {\n this.destroy$.next();\n this.destroy$.complete();\n this.clearParsedCache();\n this.dataHelper.clearData();\n this.costMetrics = null;\n this.agent = null;\n }\n \n private async loadAgent() {\n if (!this.record?.AgentID) return;\n \n try {\n const md = new Metadata();\n const agent = await md.GetEntityObject<MJAIAgentEntityExtended>('MJ: AI Agents');\n if (agent && await agent.Load(this.record.AgentID)) {\n this.agent = agent;\n this.cdr.detectChanges();\n }\n } catch (error) {\n console.error('Error loading agent:', error);\n }\n }\n\n private async loadCostMetrics() {\n if (!this.record?.ID) return;\n \n try {\n this.costMetrics = await this.costService.getAgentRunCostMetrics(this.record.ID);\n this.cdr.markForCheck();\n } catch (error) {\n console.error('Error loading cost metrics:', error);\n this.costMetrics = {\n totalCost: 0,\n totalPrompts: 0,\n totalTokensInput: 0,\n totalTokensOutput: 0,\n isLoading: false,\n error: 'Failed to load cost data'\n };\n }\n }\n \n changeTab(tab: string) {\n this.activeTab = tab;\n \n // Lazy load visualization when the tab is first accessed\n if (tab === 'visualization' && !this.visualizationLoaded) {\n this.visualizationLoaded = true;\n this.cdr.markForCheck();\n }\n \n // Lazy load analytics when the tab is first accessed\n if (tab === 'analytics' && !this.analyticsLoaded) {\n this.analyticsLoaded = true;\n this.cdr.markForCheck();\n }\n }\n \n \n calculateDuration(start: Date, end?: Date | null): string {\n if (!end) return 'Running...';\n \n const ms = end.getTime() - start.getTime();\n if (ms < 1000) return `${ms}ms`;\n if (ms < 60000) return `${(ms / 1000).toFixed(1)}s`;\n if (ms < 3600000) return `${Math.floor(ms / 60000)}m ${Math.floor((ms % 60000) / 1000)}s`;\n return `${Math.floor(ms / 3600000)}h ${Math.floor((ms % 3600000) / 60000)}m`;\n }\n \n selectTimelineItem(item: TimelineItem) {\n this.selectedTimelineItem = item;\n this.jsonPanelExpanded = true;\n this.cdr.markForCheck();\n }\n \n closeJsonPanel() {\n this.selectedTimelineItem = null;\n this.cdr.markForCheck();\n }\n \n navigateToSubRun(runId: string) {\n SharedService.Instance.OpenEntityRecord(\"MJ: AI Agent Runs\", CompositeKey.FromID(runId));\n }\n\n navigateToParentRun() {\n if (this.record.ParentRunID) {\n SharedService.Instance.OpenEntityRecord(\"MJ: AI Agent Runs\", CompositeKey.FromID(this.record.ParentRunID));\n }\n }\n \n navigateToActionLog(logId: string) {\n SharedService.Instance.OpenEntityRecord(\"MJ: Action Execution Logs\", CompositeKey.FromID(logId));\n }\n \n openEntityRecord(entityName: string, recordId: string | null) {\n if (recordId) {\n SharedService.Instance.OpenEntityRecord(entityName, CompositeKey.FromID(recordId));\n }\n }\n \n navigateToEntityRecord(event: { entityName: string; recordId: string }) {\n SharedService.Instance.OpenEntityRecord(event.entityName, CompositeKey.FromID(event.recordId));\n }\n\n /**\n * Navigate to the conversation in the Chat application\n */\n navigateToConversation() {\n if (!this.record?.ConversationID) return;\n\n // Find the Chat app\n const chatApp = this.appManager.GetAllApps().find(app => app.Name === 'Chat');\n if (!chatApp) {\n console.warn('Chat application not found');\n return;\n }\n\n // Navigate to the Conversations nav item with the conversationId parameter\n this.navigationService.OpenNavItemByName(\n 'Conversations',\n { conversationId: this.record.ConversationID },\n chatApp.ID\n );\n }\n \n refreshData() {\n // Reload the agent run record to get latest status\n if (this.record?.ID) {\n // Clear parsed cache when refreshing data\n this.clearParsedCache();\n \n // No panel states to reset in simplified approach\n \n this.record.Load(this.record.ID).then(() => {\n // Clear cost cache and reload\n this.costService.clearCache(this.record.ID);\n this.loadCostMetrics();\n \n // Reload data through helper - this will update all components (force reload for refresh)\n this.dataHelper.loadAgentRunData(this.record.ID, true);\n \n // Trigger analytics refresh\n if (this.analyticsComponent) {\n this.analyticsComponent.loadData();\n }\n });\n }\n }\n \n \n getStatusIcon(status: string): string {\n const iconMap: Record<string, string> = {\n 'Running': 'fa-circle-notch fa-spin',\n 'Completed': 'fa-check-circle',\n 'Failed': 'fa-times-circle',\n 'Cancelled': 'fa-ban',\n 'Paused': 'fa-pause-circle'\n };\n return iconMap[status] || 'fa-question-circle';\n }\n \n async copyToClipboard(text: string) {\n try {\n await navigator.clipboard.writeText(text);\n // Could show a toast notification here\n } catch (err) {\n console.error('Failed to copy to clipboard:', err);\n }\n }\n \n onAgentRunCompleted(status: string) {\n // Update the record status\n this.record.Status = status as 'Running' | 'Completed' | 'Failed' | 'Cancelled' | 'Paused';\n this.cdr.markForCheck();\n \n // Reload the full record to get updated data\n this.refreshData();\n }\n \n /**\n * Get the Result field with recursive JSON parsing applied\n */\n get parsedResult(): string {\n if (!this.record?.Result) {\n return '';\n }\n \n // Return cached result if available\n if (this._cachedParsedResult !== null) {\n return this._cachedParsedResult;\n }\n \n \n try {\n // First, check if Result is a JSON string that needs to be parsed\n let resultData = this.record.Result;\n try {\n // If Result is a JSON string, parse it first\n resultData = JSON.parse(this.record.Result);\n } catch {\n // If it's not valid JSON, use it as-is\n resultData = this.record.Result;\n }\n \n const parseOptions: ParseJSONOptions = {\n extractInlineJson: true,\n maxDepth: 100,\n debug: false // Disable debug logging - regex issue fixed\n };\n // Re-enabled ParseJSONRecursive with performance optimizations\n const parsed = ParseJSONRecursive(resultData, parseOptions);\n const result = JSON.stringify(parsed, null, 2);\n \n // Cache the result\n this._cachedParsedResult = result;\n \n return result;\n } catch (e) {\n const fallbackResult = this.record.Result;\n this._cachedParsedResult = fallbackResult;\n return fallbackResult;\n }\n }\n \n /**\n * Get the Starting Payload field with recursive JSON parsing applied\n */\n get parsedStartingPayload(): string {\n if (!this.record?.StartingPayload) {\n return '';\n }\n \n // Return cached result if available\n if (this._cachedParsedStartingPayload !== null) {\n return this._cachedParsedStartingPayload;\n }\n \n \n try {\n // First, check if StartingPayload is a JSON string that needs to be parsed\n let payloadData = this.record.StartingPayload;\n try {\n // If StartingPayload is a JSON string, parse it first\n payloadData = JSON.parse(this.record.StartingPayload);\n } catch {\n // If it's not valid JSON, use it as-is\n payloadData = this.record.StartingPayload;\n }\n \n const parseOptions: ParseJSONOptions = {\n extractInlineJson: true,\n maxDepth: 100,\n debug: false\n };\n // Re-enabled ParseJSONRecursive with performance optimizations\n const parsed = ParseJSONRecursive(payloadData, parseOptions);\n const result = JSON.stringify(parsed, null, 2);\n \n // Cache the result\n this._cachedParsedStartingPayload = result;\n \n return result;\n } catch (e) {\n const fallbackResult = this.record.StartingPayload;\n this._cachedParsedStartingPayload = fallbackResult;\n return fallbackResult;\n }\n }\n\n /**\n * Get the Final Payload (state) field with recursive JSON parsing applied\n */\n get parsedFinalPayload(): string {\n if (!this.record?.FinalPayload) return '';\n \n // Return cached result if available\n if (this._cachedParsedFinalPayload !== null) {\n return this._cachedParsedFinalPayload;\n }\n \n try {\n // First, check if FinalPayload is a JSON string that needs to be parsed\n let payloadData = this.record.FinalPayload;\n try {\n // If FinalPayload is a JSON string, parse it first\n payloadData = JSON.parse(this.record.FinalPayload);\n } catch {\n // If it's not valid JSON, use it as-is\n payloadData = this.record.FinalPayload;\n }\n \n const parseOptions: ParseJSONOptions = {\n extractInlineJson: true,\n maxDepth: 100,\n debug: false // Disable debug logging - regex issue fixed\n };\n // Re-enabled ParseJSONRecursive with performance optimizations\n const parsed = ParseJSONRecursive(payloadData, parseOptions);\n const result = JSON.stringify(parsed, null, 2);\n \n // Cache the result\n this._cachedParsedFinalPayload = result;\n \n return result;\n } catch (e) {\n const fallbackResult = this.record.FinalPayload;\n this._cachedParsedFinalPayload = fallbackResult;\n return fallbackResult;\n }\n }\n\n /**\n * Get the Data field with recursive JSON parsing applied\n */\n get parsedData(): string {\n if (!this.record?.Data) return '';\n \n // Return cached result if available\n if (this._cachedParsedData !== null) {\n return this._cachedParsedData;\n }\n \n try {\n // First, check if Data is a JSON string that needs to be parsed\n let data = this.record.Data;\n try {\n // If Data is a JSON string, parse it first\n data = JSON.parse(this.record.Data);\n } catch {\n // If it's not valid JSON, use it as-is\n data = this.record.Data;\n }\n \n const parseOptions: ParseJSONOptions = {\n extractInlineJson: true,\n maxDepth: 100,\n debug: false\n };\n // Re-enabled ParseJSONRecursive with performance optimizations\n const parsed = ParseJSONRecursive(data, parseOptions);\n const result = JSON.stringify(parsed, null, 2);\n \n // Cache the result\n this._cachedParsedData = result;\n \n return result;\n } catch (e) {\n const fallbackResult = this.record.Data;\n this._cachedParsedData = fallbackResult;\n return fallbackResult;\n }\n }\n \n /**\n * Get parsed Starting Payload as an object for deep diff\n */\n get startingPayloadObject(): any {\n if (!this.record?.StartingPayload) return null;\n \n try {\n // First, check if StartingPayload is a JSON string that needs to be parsed\n let payloadData = this.record.StartingPayload;\n try {\n // If StartingPayload is a JSON string, parse it first\n payloadData = JSON.parse(this.record.StartingPayload);\n } catch {\n // If it's not valid JSON, use it as-is\n payloadData = this.record.StartingPayload;\n }\n \n const parseOptions: ParseJSONOptions = {\n extractInlineJson: true,\n maxDepth: 100,\n debug: false\n };\n // Re-enabled ParseJSONRecursive with performance optimizations\n return ParseJSONRecursive(payloadData, parseOptions);\n } catch (e) {\n return null;\n }\n }\n\n /**\n * Get parsed Final Payload as an object for deep diff\n */\n get finalPayloadObject(): any {\n if (!this.record?.FinalPayload) return null;\n \n try {\n // First, check if FinalPayload is a JSON string that needs to be parsed\n let payloadData = this.record.FinalPayload;\n try {\n // If FinalPayload is a JSON string, parse it first\n payloadData = JSON.parse(this.record.FinalPayload);\n } catch {\n // If it's not valid JSON, use it as-is\n payloadData = this.record.FinalPayload;\n }\n \n const parseOptions: ParseJSONOptions = {\n extractInlineJson: true,\n maxDepth: 100,\n debug: false\n };\n // Re-enabled ParseJSONRecursive with performance optimizations\n return ParseJSONRecursive(payloadData, parseOptions);\n } catch (e) {\n return null;\n }\n }\n\n /**\n * Clear all cached parsed results\n */\n private clearParsedCache(): void {\n this._cachedParsedResult = null;\n this._cachedParsedStartingPayload = null;\n this._cachedParsedFinalPayload = null;\n this._cachedParsedData = null;\n this._allParsingComplete = false;\n }\n \n /**\n * Parse all JSON fields at once and cache results\n */\n private parseAllFields(): void {\n try {\n let parsedCount = 0;\n \n // Parse all fields that exist\n if (this.record?.Result) {\n this.parsedResult; // Triggers parsing and caching\n parsedCount++;\n }\n \n if (this.record?.StartingPayload) {\n this.parsedStartingPayload; // Triggers parsing and caching\n parsedCount++;\n }\n \n if (this.record?.FinalPayload) {\n this.parsedFinalPayload; // Triggers parsing and caching\n parsedCount++;\n }\n \n if (this.record?.Data) {\n this.parsedData; // Triggers parsing and caching\n parsedCount++;\n }\n \n this._allParsingComplete = true;\n \n } catch (error) {\n console.error('Error during JSON parsing:', error);\n }\n }\n \n /**\n * Check if all parsing is complete - used by template\n */\n get isParsingComplete(): boolean {\n return this._allParsingComplete;\n }\n\n /**\n * Check if we have both payloads to show diff\n */\n get showPayloadDiff(): boolean {\n return !!(this.record?.StartingPayload && this.record?.FinalPayload);\n }\n\n /**\n * Check if selected timeline item is a step with payload changes\n */\n get showStepPayloadDiff(): boolean {\n if (!this.selectedTimelineItem || this.selectedTimelineItem.type !== 'step') {\n return false;\n }\n \n const stepData = this.selectedTimelineItem.data;\n if (stepData && (stepData.PayloadAtStart?.trim().length > 0 \n || stepData.PayloadAtEnd?.trim().length > 0)) {\n return stepData.PayloadAtStart !== stepData.PayloadAtEnd;\n }\n else {\n return false;\n }\n }\n\n /**\n * Get parsed PayloadAtStart for the selected step\n */\n get stepPayloadAtStartObject(): any {\n if (!this.selectedTimelineItem || this.selectedTimelineItem.type !== 'step') {\n return null;\n }\n \n const stepData = this.selectedTimelineItem.data;\n if (!stepData || !stepData.PayloadAtStart) {\n return null;\n }\n \n try {\n let payloadData = stepData.PayloadAtStart;\n try {\n payloadData = JSON.parse(stepData.PayloadAtStart);\n } catch {\n payloadData = stepData.PayloadAtStart;\n }\n \n const parseOptions: ParseJSONOptions = {\n extractInlineJson: true,\n maxDepth: 100,\n debug: false\n };\n // Re-enabled ParseJSONRecursive with performance optimizations\n return ParseJSONRecursive(payloadData, parseOptions);\n } catch (e) {\n return null;\n }\n }\n\n /**\n * Get parsed PayloadAtEnd for the selected step\n */\n get stepPayloadAtEndObject(): any {\n if (!this.selectedTimelineItem || this.selectedTimelineItem.type !== 'step') {\n return null;\n }\n \n const stepData = this.selectedTimelineItem.data;\n if (!stepData || !stepData.PayloadAtEnd) {\n return null;\n }\n \n try {\n let payloadData = stepData.PayloadAtEnd;\n try {\n payloadData = JSON.parse(stepData.PayloadAtEnd);\n } catch {\n payloadData = stepData.PayloadAtEnd;\n }\n \n const parseOptions: ParseJSONOptions = {\n extractInlineJson: true,\n maxDepth: 100,\n debug: false\n };\n // Re-enabled ParseJSONRecursive with performance optimizations\n return ParseJSONRecursive(payloadData, parseOptions);\n } catch (e) {\n return null;\n }\n }\n}\n","<div class=\"record-form-container ai-agent-run-form\">\n <div class=\"record-form\">\n <!-- Header -->\n <div class=\"header\">\n <div class=\"header-content\">\n <div class=\"header-left\">\n <div class=\"icon-wrapper\">\n @if (agent && agent.LogoURL) {\n <img [src]=\"agent.LogoURL\" [alt]=\"agent.Name || 'Agent'\" class=\"agent-logo\" />\n }\n @if (agent && !agent.LogoURL && agent.IconClass) {\n <i class=\"fas\" [ngClass]=\"agent.IconClass\"></i>\n }\n @if (!agent || (!agent.LogoURL && !agent.IconClass)) {\n <i class=\"fas fa-robot\"></i>\n }\n </div>\n <div class=\"header-info\">\n <h2>AI Agent Run</h2>\n <div class=\"meta-info\">\n @if (agent) {\n <span class=\"agent-name\">\n <a href=\"javascript:void(0)\" class=\"entity-link\" (click)=\"openEntityRecord('MJ: AI Agents', record.AgentID)\">\n {{ agent.Name }}\n </a>\n </span>\n }\n <span class=\"run-id\">{{ record.ID }}</span>\n @if (record.ParentRunID) {\n <span class=\"parent-run\">\n <i class=\"fas fa-level-up-alt\"></i>\n <a (click)=\"navigateToParentRun()\" class=\"parent-link\">Parent Run</a>\n </span>\n }\n <!-- Conversation Link Pill -->\n @if (record.ConversationID) {\n <span class=\"conversation-pill\" (click)=\"navigateToConversation()\" title=\"Open conversation in Chat app\">\n <i class=\"fas fa-comments\"></i>\n <span>Conversation</span>\n <i class=\"fas fa-external-link-alt pill-action\"></i>\n </span>\n }\n </div>\n </div>\n </div>\n <div class=\"header-right\">\n <div class=\"status-badge\" [attr.data-status]=\"record.Status\">\n <i class=\"fas\" [ngClass]=\"getStatusIcon(record.Status || '')\"></i>\n {{ record.Status }}\n </div>\n <div class=\"header-actions\">\n <button class=\"btn-icon\" (click)=\"refreshData()\" title=\"Refresh\">\n <i class=\"fas fa-sync-alt\"></i>\n </button>\n </div>\n </div>\n </div>\n <div class=\"header-stats\">\n <div class=\"stat\">\n <span class=\"label\">Started</span>\n <span class=\"value\">{{ record.StartedAt | date:'medium' }}</span>\n </div>\n @if (record.CompletedAt) {\n <div class=\"stat\">\n <span class=\"label\">Completed</span>\n <span class=\"value\">{{ record.CompletedAt | date:'medium' }}</span>\n </div>\n }\n @if (record.CompletedAt) {\n <div class=\"stat\">\n <span class=\"label\">Duration</span>\n <span class=\"value\">{{ calculateDuration(record.StartedAt, record.CompletedAt) }}</span>\n </div>\n }\n @if (record.Success !== null && record.CompletedAt !== null) {\n <div class=\"stat\">\n <span class=\"label\">Result</span>\n <span class=\"value\" [class.success]=\"record.Success\" [class.error]=\"!record.Success\">\n {{ record.Success ? 'Success' : 'Failed' }}\n </span>\n </div>\n }\n @if (costMetrics && (costMetrics.totalTokensInput + costMetrics.totalTokensOutput) > 0) {\n <div class=\"stat\">\n <span class=\"label\">Tokens</span>\n @if (!costMetrics.isLoading) {\n <span class=\"value\">{{ (costMetrics.totalTokensInput + costMetrics.totalTokensOutput) | number:'1.0-0' }}</span>\n }\n @if (costMetrics.isLoading) {\n <span class=\"value loading\"><i class=\"fas fa-spinner fa-spin\"></i></span>\n }\n </div>\n }\n @if (costMetrics && costMetrics.totalCost > 0) {\n <div class=\"stat\">\n <span class=\"label\">Cost</span>\n @if (!costMetrics.isLoading) {\n <span class=\"value\">${{ costMetrics.totalCost | number:'1.2-4' }}</span>\n }\n @if (costMetrics.isLoading) {\n <span class=\"value loading\"><i class=\"fas fa-spinner fa-spin\"></i></span>\n }\n </div>\n }\n @if (record.EffortLevel) {\n <div class=\"stat\">\n <span class=\"label\">Effort Level</span>\n <span class=\"value\">{{ record.EffortLevel }}</span>\n </div>\n }\n </div>\n\n <!-- Configuration Bar (shown below header stats when ConfigurationID exists) -->\n @if (record.ConfigurationID) {\n <div class=\"configuration-bar\">\n <div class=\"config-item\">\n <i class=\"fas fa-cog\"></i>\n <div class=\"config-content\">\n <div class=\"config-label\">Configuration</div>\n <div class=\"config-value\">\n <a href=\"javascript:void(0)\" class=\"entity-link\" (click)=\"openEntityRecord('MJ: AI Configurations', record.ConfigurationID)\">\n {{ record.Configuration || 'Unknown' }}\n </a>\n </div>\n </div>\n </div>\n </div>\n }\n </div>\n\n <!-- Tabs -->\n <div class=\"tabs\">\n <button class=\"tab\" [class.active]=\"activeTab === 'timeline'\" (click)=\"changeTab('timeline')\">\n <i class=\"fas fa-stream\"></i> Timeline\n </button>\n <button class=\"tab\" [class.active]=\"activeTab === 'visualization'\" (click)=\"changeTab('visualization')\">\n <i class=\"fas fa-diagram-project\"></i> Visualization\n </button>\n <button class=\"tab\" [class.active]=\"activeTab === 'analytics'\" (click)=\"changeTab('analytics')\">\n <i class=\"fas fa-chart-line\"></i> Analytics\n </button>\n <button class=\"tab\" [class.active]=\"activeTab === 'details'\" (click)=\"changeTab('details')\">\n <i class=\"fas fa-info-circle\"></i> Details\n </button>\n </div>\n\n <!-- Content -->\n <div class=\"content-area\">\n <!-- Timeline Tab -->\n @if (activeTab === 'timeline') {\n <div class=\"tab-content\" style=\"height: 100%;\">\n <as-split direction=\"horizontal\" style=\"height: 100%;\">\n <!-- Timeline Pane -->\n <as-split-area [size]=\"selectedTimelineItem ? 55 : 100\">\n <mj-ai-agent-run-timeline\n [aiAgentRunId]=\"record.ID\"\n [dataHelper]=\"dataHelper\"\n [autoRefresh]=\"record.Status === 'Running'\"\n [refreshInterval]=\"30000\"\n (itemSelected)=\"selectTimelineItem($event)\"\n (navigateToEntity)=\"navigateToEntityRecord($event)\"\n (agentRunCompleted)=\"onAgentRunCompleted($event)\">\n </mj-ai-agent-run-timeline>\n </as-split-area>\n <!-- JSON Detail Pane -->\n @if (selectedTimelineItem) {\n <as-split-area [size]=\"45\">\n <mj-ai-agent-run-step-detail\n [selectedTimelineItem]=\"selectedTimelineItem\"\n (closePanel)=\"closeJsonPanel()\"\n (navigateToActionLog)=\"navigateToActionLog($event)\"\n (copyToClipboard)=\"copyToClipboard($event)\">\n </mj-ai-agent-run-step-detail>\n </as-split-area>\n }\n </as-split>\n </div>\n }\n\n <!-- Visualization Tab -->\n @if (activeTab === 'visualization') {\n <div class=\"tab-content\" style=\"height: 100%;\">\n @if (visualizationLoaded) {\n <mj-ai-agent-run-visualization\n #visualizationComponent\n [aiAgentRunId]=\"record.ID\"\n [dataHelper]=\"dataHelper\"\n >\n </mj-ai-agent-run-visualization>\n }\n </div>\n }\n\n <!-- Analytics Tab -->\n @if (activeTab === 'analytics') {\n <div class=\"tab-content\" style=\"height: 100%;\">\n @if (analyticsLoaded) {\n <mj-ai-agent-run-analytics\n #analyticsComponent\n [agentRunId]=\"record.ID\"\n >\n </mj-ai-agent-run-analytics>\n }\n </div>\n }\n\n <!-- Details Tab -->\n @if (activeTab === 'details') {\n <div class=\"tab-content\">\n <mj-accordion-panel [Expanded]=\"true\">\n <ng-template mjAccordionTitle>\n <i class=\"fas fa-info-circle\"></i> General Information\n </ng-template>\n <div class=\"details-grid\">\n <div class=\"detail-item\">\n <label>Agent</label>\n <span>\n <a href=\"javascript:void(0)\" class=\"entity-link\" (click)=\"openEntityRecord('MJ: AI Agents', record.AgentID)\">\n {{ agent?.Name || 'N/A' }}\n </a>\n </span>\n </div>\n <div class=\"detail-item\">\n <label>Parent Run ID</label>\n <span>\n @if (record.ParentRunID) {\n <a href=\"javascript:void(0)\" class=\"entity-link\" (click)=\"openEntityRecord('MJ: AI Agent Runs', record.ParentRunID)\">\n {{ record.ParentRunID }}\n </a>\n }\n @if (!record.ParentRunID) {\n <span>None (Root)</span>\n }\n </span>\n </div>\n <div class=\"detail-item\">\n <label>Last Run ID</label>\n <span>\n @if (record.LastRunID) {\n <a href=\"javascript:void(0)\" class=\"entity-link\" (click)=\"openEntityRecord('MJ: AI Agent Runs', record.LastRunID)\">\n {{ record.LastRunID }}\n </a>\n }\n @if (!record.LastRunID) {\n <span>None</span>\n }\n </span>\n </div>\n <div class=\"detail-item\">\n <label>Conversation ID</label>\n <span>\n @if (record.ConversationID) {\n <a href=\"javascript:void(0)\" class=\"entity-link\" (click)=\"openEntityRecord('MJ: Conversations', record.ConversationID)\">\n {{ record.ConversationID }}\n </a>\n }\n @if (!record.ConversationID) {\n <span>N/A</span>\n }\n </span>\n </div>\n <div class=\"detail-item\">\n <label>User</label>\n <span>\n @if (record.UserID) {\n <a href=\"javascript:void(0)\" class=\"entity-link\" (click)=\"openEntityRecord('MJ: Users', record.UserID)\">\n {{ record.User || 'N/A' }}\n </a>\n }\n @if (!record.UserID) {\n <span>N/A</span>\n }\n </span>\n </div>\n </div>\n </mj-accordion-panel>\n <mj-accordion-panel [Expanded]=\"false\">\n <ng-template mjAccordionTitle>\n <i class=\"fas fa-cogs\"></i> Execution Settings\n </ng-template>\n <div class=\"details-grid\">\n <div class=\"detail-item\">\n <label>Override Model</label>\n <span>\n @if (record.OverrideModelID) {\n <a href=\"javascript:void(0)\" class=\"entity-link\" (click)=\"openEntityRecord('MJ: AI Models', record.OverrideModelID)\">\n {{ record.OverrideModel || 'N/A' }}\n </a>\n }\n @if (!record.OverrideModelID) {\n <span>N/A</span>\n }\n </span>\n </div>\n <div class=\"detail-item\">\n <label>Override Vendor</label>\n <span>\n @if (record.OverrideVendorID) {\n <a href=\"javascript:void(0)\" class=\"entity-link\" (click)=\"openEntityRecord('MJ: AI Vendors', record.OverrideVendorID)\">\n {{ record.OverrideVendor || 'N/A' }}\n </a>\n }\n @if (!record.OverrideVendorID) {\n <span>N/A</span>\n }\n </span>\n </div>\n <div class=\"detail-item\">\n <label>Verbose Logging</label>\n <span>{{ record.Verbose ? 'Yes' : 'No' }}</span>\n </div>\n </div>\n </mj-accordion-panel>\n <mj-accordion-panel [Expanded]=\"false\">\n <ng-template mjAccordionTitle>\n <i class=\"fas fa-tasks\"></i> Execution Status\n </ng-template>\n <div class=\"details-grid\">\n <div class=\"detail-item\">\n <label>Status</label>\n <span class=\"status-badge\" [attr.data-status]=\"record.Status\">\n {{ record.Status }}\n </span>\n </div>\n <div class=\"detail-item\">\n <label>Success</label>\n @if (record.Success === null) {\n <span>In Progress</span>\n }\n @else if (record.Success) {\n <span class=\"success\">Yes</span>\n }\n @else {\n <span class=\"error-message\">No</span>\n }\n </div>\n @if (record.Message) {\n <div class=\"detail-item full-width\">\n <label>Message</label>\n <div class=\"message\">{{ record.Message }}</div>\n </div>\n }\n @if (record.ErrorMessage) {\n <div class=\"detail-item full-width\">\n <label>Error Message</label>\n <div class=\"error-message\">{{ record.ErrorMessage }}</div>\n </div>\n }\n </div>\n </mj-accordion-panel>\n <mj-accordion-panel [Expanded]=\"false\">\n <ng-template mjAccordionTitle>\n <i class=\"fas fa-dollar-sign\"></i> Usage & Cost\n </ng-template>\n <div class=\"details-grid\">\n <div class=\"detail-item\">\n <label>Total Tokens Used</label>\n <span>{{ record.TotalTokensUsed ? (record.TotalTokensUsed | number:'1.0-0') : 'N/A' }}</span>\n </div>\n <div class=\"detail-item\">\n <label>Prompt Tokens</label>\n <span>{{ record.TotalPromptTokensUsed ? (record.TotalPromptTokensUsed | number:'1.0-0') : 'N/A' }}</span>\n </div>\n <div class=\"detail-item\">\n <label>Completion Tokens</label>\n <span>{{ record.TotalCompletionTokensUsed ? (record.TotalCompletionTokensUsed | number:'1.0-0') : 'N/A' }}</span>\n </div>\n <div class=\"detail-item\">\n <label>Total Cost</label>\n <span>{{ record.TotalCost != null ? ('$' + (record.TotalCost | number:'1.2-4')) : 'N/A' }}</span>\n </div>\n <div class=\"detail-item\">\n <label>Total Prompt Iterations</label>\n <span>{{ record.TotalPromptIterations != null ? (record.TotalPromptIterations | number:'1.0-0') : 'N/A' }}</span>\n </div>\n </div>\n </mj-accordion-panel>\n @if (record.Result) {\n <mj-accordion-panel [Expanded]=\"false\">\n <ng-template mjAccordionTitle>\n <i class=\"fas fa-code\"></i> Result\n </ng-template>\n <div class=\"result-viewer\">\n @if (isParsingComplete) {\n <mj-code-editor\n [ngModel]=\"parsedResult\"\n [language]=\"'json'\"\n [readonly]=\"true\"\n style=\"height: 300px; width: 100%;\">\n </mj-code-editor>\n } @else {\n <div style=\"padding: 20px; text-align: center; color: var(--mj-text-muted);\">\n <i class=\"fas fa-spinner fa-spin\"></i> Loading result data...\n </div>\n }\n </div>\n </mj-accordion-panel>\n }\n @if (record.StartingPayload) {\n <mj-accordion-panel [Expanded]=\"false\">\n <ng-template mjAccordionTitle>\n <i class=\"fas fa-upload\"></i> Starting Payload\n </ng-template>\n <div class=\"result-viewer\">\n @if (isParsingComplete) {\n <mj-code-editor\n [ngModel]=\"parsedStartingPayload\"\n [language]=\"'json'\"\n [readonly]=\"true\"\n style=\"height: 300px; width: 100%;\">\n </mj-code-editor>\n } @else {\n <div style=\"padding: 20px; text-align: center; color: var(--mj-text-muted);\">\n <i class=\"fas fa-spinner fa-spin\"></i> Loading payload data...\n </div>\n }\n </div>\n </mj-accordion-panel>\n }\n @if (record.Data) {\n <mj-accordion-panel [Expanded]=\"false\">\n <ng-template mjAccordionTitle>\n <i class=\"fas fa-database\"></i> Execution Data\n </ng-template>\n <div class=\"result-viewer\">\n @if (isParsingComplete) {\n <mj-code-editor\n [ngModel]=\"parsedData\"\n [language]=\"'json'\"\n [readonly]=\"true\"\n style=\"height: 300px; width: 100%;\">\n </mj-code-editor>\n } @else {\n <div style=\"padding: 20px; text-align: center; color: var(--mj-text-muted);\">\n <i class=\"fas fa-spinner fa-spin\"></i> Loading execution data...\n </div>\n }\n </div>\n </mj-accordion-panel>\n }\n @if (record.FinalPayload) {\n <mj-accordion-panel [Expanded]=\"false\">\n <ng-template mjAccordionTitle>\n <i class=\"fas fa-download\"></i> Final Payload\n </ng-template>\n <div class=\"result-viewer\">\n @if (isParsingComplete) {\n <mj-code-editor\n [ngModel]=\"parsedFinalPayload\"\n [language]=\"'json'\"\n [readonly]=\"true\"\n style=\"height: 300px; width: 100%;\">\n </mj-code-editor>\n } @else {\n <div style=\"padding: 20px; text-align: center; color: var(--mj-text-muted);\">\n <i class=\"fas fa-spinner fa-spin\"></i> Loading final payload data...\n </div>\n }\n </div>\n </mj-accordion-panel>\n }\n @if (showPayloadDiff) {\n <mj-accordion-panel [Expanded]=\"false\">\n <ng-template mjAccordionTitle>\n <i class=\"fas fa-code-compare\"></i> Payload Diff\n </ng-template>\n <div style=\"padding: 20px; background: var(--mj-bg-surface-card);\">\n @if (isParsingComplete) {\n <mj-deep-diff\n [oldValue]=\"startingPayloadObject\"\n [newValue]=\"finalPayloadObject\"\n [title]=\"''\"\n [showSummary]=\"true\"\n [showUnchanged]=\"false\"\n [expandAll]=\"false\"\n [maxDepth]=\"10\"\n [maxStringLength]=\"200\"\n [treatNullAsUndefined]=\"true\">\n </mj-deep-diff>\n } @else {\n <div style=\"padding: 20px; text-align: center; color: var(--mj-text-muted);\">\n <i class=\"fas fa-spinner fa-spin\"></i> Loading payload diff...\n </div>\n }\n </div>\n </mj-accordion-panel>\n }\n </div>\n }\n</div>\n</div>\n</div>"]}
|
|
1
|
+
{"version":3,"file":"ai-agent-run.component.js","sourceRoot":"","sources":["../../../../src/lib/custom/ai-agent-run/ai-agent-run.component.ts","../../../../src/lib/custom/ai-agent-run/ai-agent-run.component.html"],"names":[],"mappings":"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","sourcesContent":["import { Component, OnInit, OnDestroy, ViewChild, inject } from '@angular/core';\nimport { Subject } from 'rxjs';\nimport { CompositeKey, Metadata } from '@memberjunction/core';\nimport { MJAIAgentRunEntityExtended, MJAIAgentEntityExtended } from '@memberjunction/ai-core-plus';\nimport { BaseFormComponent } from '@memberjunction/ng-base-forms';\nimport { RegisterClass } from '@memberjunction/global';\nimport { SharedService, NavigationService } from '@memberjunction/ng-shared';\nimport { TimelineItem, AIAgentRunTimelineComponent } from './ai-agent-run-timeline.component';\nimport { MJAIAgentRunFormComponent } from '../../generated/Entities/MJAIAgentRun/mjaiagentrun.form.component';\nimport { ParseJSONRecursive, ParseJSONOptions } from '@memberjunction/global';\nimport { AIAgentRunAnalyticsComponent } from './ai-agent-run-analytics.component';\nimport { AIAgentRunVisualizationComponent } from './ai-agent-run-visualization.component';\nimport { AIAgentRunCostService, AgentRunCostMetrics } from './ai-agent-run-cost.service';\nimport { AIAgentRunDataHelper } from './ai-agent-run-data.service';\nimport { ApplicationManager } from '@memberjunction/ng-base-application';\n\n@RegisterClass(BaseFormComponent, 'MJ: AI Agent Runs') \n@Component({\n standalone: false,\n selector: 'mj-ai-agent-run-form',\n templateUrl: './ai-agent-run.component.html',\n styleUrls: ['./ai-agent-run.component.css']\n})\nexport class MJAIAgentRunFormComponentExtended extends MJAIAgentRunFormComponent implements OnInit, OnDestroy {\n public record!: MJAIAgentRunEntityExtended;\n \n private destroy$ = new Subject<void>();\n \n // UI state\n activeTab = 'timeline';\n selectedTimelineItem: TimelineItem | null = null;\n jsonPanelExpanded = false;\n loading = false;\n error: string | null = null;\n analyticsLoaded = false;\n visualizationLoaded = false;\n \n agent: MJAIAgentEntityExtended | null = null;\n \n // Cost metrics using shared service\n costMetrics: AgentRunCostMetrics | null = null;\n \n // Cached parsed results to prevent redundant JSON parsing\n private _cachedParsedResult: string | null = null;\n private _cachedParsedStartingPayload: string | null = null;\n private _cachedParsedFinalPayload: string | null = null;\n private _cachedParsedData: string | null = null;\n \n // Simple parsing state - true when all parsing is complete\n private _allParsingComplete = false;\n \n @ViewChild(AIAgentRunTimelineComponent) timelineComponent?: AIAgentRunTimelineComponent;\n @ViewChild(AIAgentRunAnalyticsComponent) analyticsComponent?: AIAgentRunAnalyticsComponent;\n @ViewChild(AIAgentRunVisualizationComponent) visualizationComponent?: AIAgentRunVisualizationComponent;\n\n // Field injections\n private navigationService = inject(NavigationService);\n private costService = inject(AIAgentRunCostService);\n private appManager = inject(ApplicationManager);\n\n // Instance of data helper per component\n public dataHelper = new AIAgentRunDataHelper();\n \n async ngOnInit() {\n await super.ngOnInit();\n \n if (this.record && this.record.ID) {\n await this.dataHelper.loadAgentRunData(this.record.ID);\n await this.loadAgent();\n await this.loadCostMetrics();\n \n // Parse all JSON fields on form load for instant access later\n this.parseAllFields();\n }\n }\n \n ngOnDestroy() {\n this.destroy$.next();\n this.destroy$.complete();\n this.clearParsedCache();\n this.dataHelper.clearData();\n this.costMetrics = null;\n this.agent = null;\n }\n \n private async loadAgent() {\n if (!this.record?.AgentID) return;\n \n try {\n const md = this.ProviderToUse;\n const agent = await md.GetEntityObject<MJAIAgentEntityExtended>('MJ: AI Agents');\n if (agent && await agent.Load(this.record.AgentID)) {\n this.agent = agent;\n this.cdr.detectChanges();\n }\n } catch (error) {\n console.error('Error loading agent:', error);\n }\n }\n\n private async loadCostMetrics() {\n if (!this.record?.ID) return;\n \n try {\n this.costMetrics = await this.costService.getAgentRunCostMetrics(this.record.ID);\n this.cdr.markForCheck();\n } catch (error) {\n console.error('Error loading cost metrics:', error);\n this.costMetrics = {\n totalCost: 0,\n totalPrompts: 0,\n totalTokensInput: 0,\n totalTokensOutput: 0,\n isLoading: false,\n error: 'Failed to load cost data'\n };\n }\n }\n \n changeTab(tab: string) {\n this.activeTab = tab;\n \n // Lazy load visualization when the tab is first accessed\n if (tab === 'visualization' && !this.visualizationLoaded) {\n this.visualizationLoaded = true;\n this.cdr.markForCheck();\n }\n \n // Lazy load analytics when the tab is first accessed\n if (tab === 'analytics' && !this.analyticsLoaded) {\n this.analyticsLoaded = true;\n this.cdr.markForCheck();\n }\n }\n \n \n calculateDuration(start: Date, end?: Date | null): string {\n if (!end) return 'Running...';\n \n const ms = end.getTime() - start.getTime();\n if (ms < 1000) return `${ms}ms`;\n if (ms < 60000) return `${(ms / 1000).toFixed(1)}s`;\n if (ms < 3600000) return `${Math.floor(ms / 60000)}m ${Math.floor((ms % 60000) / 1000)}s`;\n return `${Math.floor(ms / 3600000)}h ${Math.floor((ms % 3600000) / 60000)}m`;\n }\n \n selectTimelineItem(item: TimelineItem) {\n this.selectedTimelineItem = item;\n this.jsonPanelExpanded = true;\n this.cdr.markForCheck();\n }\n \n closeJsonPanel() {\n this.selectedTimelineItem = null;\n this.cdr.markForCheck();\n }\n \n navigateToSubRun(runId: string) {\n SharedService.Instance.OpenEntityRecord(\"MJ: AI Agent Runs\", CompositeKey.FromID(runId));\n }\n\n navigateToParentRun() {\n if (this.record.ParentRunID) {\n SharedService.Instance.OpenEntityRecord(\"MJ: AI Agent Runs\", CompositeKey.FromID(this.record.ParentRunID));\n }\n }\n \n navigateToActionLog(logId: string) {\n SharedService.Instance.OpenEntityRecord(\"MJ: Action Execution Logs\", CompositeKey.FromID(logId));\n }\n \n openEntityRecord(entityName: string, recordId: string | null) {\n if (recordId) {\n SharedService.Instance.OpenEntityRecord(entityName, CompositeKey.FromID(recordId));\n }\n }\n \n navigateToEntityRecord(event: { entityName: string; recordId: string }) {\n SharedService.Instance.OpenEntityRecord(event.entityName, CompositeKey.FromID(event.recordId));\n }\n\n /**\n * Navigate to the conversation in the Chat application\n */\n navigateToConversation() {\n if (!this.record?.ConversationID) return;\n\n // Find the Chat app\n const chatApp = this.appManager.GetAllApps().find(app => app.Name === 'Chat');\n if (!chatApp) {\n console.warn('Chat application not found');\n return;\n }\n\n // Navigate to the Conversations nav item with the conversationId parameter\n this.navigationService.OpenNavItemByName(\n 'Conversations',\n { conversationId: this.record.ConversationID },\n chatApp.ID\n );\n }\n \n refreshData() {\n // Reload the agent run record to get latest status\n if (this.record?.ID) {\n // Clear parsed cache when refreshing data\n this.clearParsedCache();\n \n // No panel states to reset in simplified approach\n \n this.record.Load(this.record.ID).then(() => {\n // Clear cost cache and reload\n this.costService.clearCache(this.record.ID);\n this.loadCostMetrics();\n \n // Reload data through helper - this will update all components (force reload for refresh)\n this.dataHelper.loadAgentRunData(this.record.ID, true);\n \n // Trigger analytics refresh\n if (this.analyticsComponent) {\n this.analyticsComponent.loadData();\n }\n });\n }\n }\n \n \n getStatusIcon(status: string): string {\n const iconMap: Record<string, string> = {\n 'Running': 'fa-circle-notch fa-spin',\n 'Completed': 'fa-check-circle',\n 'Failed': 'fa-times-circle',\n 'Cancelled': 'fa-ban',\n 'Paused': 'fa-pause-circle'\n };\n return iconMap[status] || 'fa-question-circle';\n }\n \n async copyToClipboard(text: string) {\n try {\n await navigator.clipboard.writeText(text);\n // Could show a toast notification here\n } catch (err) {\n console.error('Failed to copy to clipboard:', err);\n }\n }\n \n onAgentRunCompleted(status: string) {\n // Update the record status\n this.record.Status = status as 'Running' | 'Completed' | 'Failed' | 'Cancelled' | 'Paused';\n this.cdr.markForCheck();\n \n // Reload the full record to get updated data\n this.refreshData();\n }\n \n /**\n * Get the Result field with recursive JSON parsing applied\n */\n get parsedResult(): string {\n if (!this.record?.Result) {\n return '';\n }\n \n // Return cached result if available\n if (this._cachedParsedResult !== null) {\n return this._cachedParsedResult;\n }\n \n \n try {\n // First, check if Result is a JSON string that needs to be parsed\n let resultData = this.record.Result;\n try {\n // If Result is a JSON string, parse it first\n resultData = JSON.parse(this.record.Result);\n } catch {\n // If it's not valid JSON, use it as-is\n resultData = this.record.Result;\n }\n \n const parseOptions: ParseJSONOptions = {\n extractInlineJson: true,\n maxDepth: 100,\n debug: false // Disable debug logging - regex issue fixed\n };\n // Re-enabled ParseJSONRecursive with performance optimizations\n const parsed = ParseJSONRecursive(resultData, parseOptions);\n const result = JSON.stringify(parsed, null, 2);\n \n // Cache the result\n this._cachedParsedResult = result;\n \n return result;\n } catch (e) {\n const fallbackResult = this.record.Result;\n this._cachedParsedResult = fallbackResult;\n return fallbackResult;\n }\n }\n \n /**\n * Get the Starting Payload field with recursive JSON parsing applied\n */\n get parsedStartingPayload(): string {\n if (!this.record?.StartingPayload) {\n return '';\n }\n \n // Return cached result if available\n if (this._cachedParsedStartingPayload !== null) {\n return this._cachedParsedStartingPayload;\n }\n \n \n try {\n // First, check if StartingPayload is a JSON string that needs to be parsed\n let payloadData = this.record.StartingPayload;\n try {\n // If StartingPayload is a JSON string, parse it first\n payloadData = JSON.parse(this.record.StartingPayload);\n } catch {\n // If it's not valid JSON, use it as-is\n payloadData = this.record.StartingPayload;\n }\n \n const parseOptions: ParseJSONOptions = {\n extractInlineJson: true,\n maxDepth: 100,\n debug: false\n };\n // Re-enabled ParseJSONRecursive with performance optimizations\n const parsed = ParseJSONRecursive(payloadData, parseOptions);\n const result = JSON.stringify(parsed, null, 2);\n \n // Cache the result\n this._cachedParsedStartingPayload = result;\n \n return result;\n } catch (e) {\n const fallbackResult = this.record.StartingPayload;\n this._cachedParsedStartingPayload = fallbackResult;\n return fallbackResult;\n }\n }\n\n /**\n * Get the Final Payload (state) field with recursive JSON parsing applied\n */\n get parsedFinalPayload(): string {\n if (!this.record?.FinalPayload) return '';\n \n // Return cached result if available\n if (this._cachedParsedFinalPayload !== null) {\n return this._cachedParsedFinalPayload;\n }\n \n try {\n // First, check if FinalPayload is a JSON string that needs to be parsed\n let payloadData = this.record.FinalPayload;\n try {\n // If FinalPayload is a JSON string, parse it first\n payloadData = JSON.parse(this.record.FinalPayload);\n } catch {\n // If it's not valid JSON, use it as-is\n payloadData = this.record.FinalPayload;\n }\n \n const parseOptions: ParseJSONOptions = {\n extractInlineJson: true,\n maxDepth: 100,\n debug: false // Disable debug logging - regex issue fixed\n };\n // Re-enabled ParseJSONRecursive with performance optimizations\n const parsed = ParseJSONRecursive(payloadData, parseOptions);\n const result = JSON.stringify(parsed, null, 2);\n \n // Cache the result\n this._cachedParsedFinalPayload = result;\n \n return result;\n } catch (e) {\n const fallbackResult = this.record.FinalPayload;\n this._cachedParsedFinalPayload = fallbackResult;\n return fallbackResult;\n }\n }\n\n /**\n * Get the Data field with recursive JSON parsing applied\n */\n get parsedData(): string {\n if (!this.record?.Data) return '';\n \n // Return cached result if available\n if (this._cachedParsedData !== null) {\n return this._cachedParsedData;\n }\n \n try {\n // First, check if Data is a JSON string that needs to be parsed\n let data = this.record.Data;\n try {\n // If Data is a JSON string, parse it first\n data = JSON.parse(this.record.Data);\n } catch {\n // If it's not valid JSON, use it as-is\n data = this.record.Data;\n }\n \n const parseOptions: ParseJSONOptions = {\n extractInlineJson: true,\n maxDepth: 100,\n debug: false\n };\n // Re-enabled ParseJSONRecursive with performance optimizations\n const parsed = ParseJSONRecursive(data, parseOptions);\n const result = JSON.stringify(parsed, null, 2);\n \n // Cache the result\n this._cachedParsedData = result;\n \n return result;\n } catch (e) {\n const fallbackResult = this.record.Data;\n this._cachedParsedData = fallbackResult;\n return fallbackResult;\n }\n }\n \n /**\n * Get parsed Starting Payload as an object for deep diff\n */\n get startingPayloadObject(): any {\n if (!this.record?.StartingPayload) return null;\n \n try {\n // First, check if StartingPayload is a JSON string that needs to be parsed\n let payloadData = this.record.StartingPayload;\n try {\n // If StartingPayload is a JSON string, parse it first\n payloadData = JSON.parse(this.record.StartingPayload);\n } catch {\n // If it's not valid JSON, use it as-is\n payloadData = this.record.StartingPayload;\n }\n \n const parseOptions: ParseJSONOptions = {\n extractInlineJson: true,\n maxDepth: 100,\n debug: false\n };\n // Re-enabled ParseJSONRecursive with performance optimizations\n return ParseJSONRecursive(payloadData, parseOptions);\n } catch (e) {\n return null;\n }\n }\n\n /**\n * Get parsed Final Payload as an object for deep diff\n */\n get finalPayloadObject(): any {\n if (!this.record?.FinalPayload) return null;\n \n try {\n // First, check if FinalPayload is a JSON string that needs to be parsed\n let payloadData = this.record.FinalPayload;\n try {\n // If FinalPayload is a JSON string, parse it first\n payloadData = JSON.parse(this.record.FinalPayload);\n } catch {\n // If it's not valid JSON, use it as-is\n payloadData = this.record.FinalPayload;\n }\n \n const parseOptions: ParseJSONOptions = {\n extractInlineJson: true,\n maxDepth: 100,\n debug: false\n };\n // Re-enabled ParseJSONRecursive with performance optimizations\n return ParseJSONRecursive(payloadData, parseOptions);\n } catch (e) {\n return null;\n }\n }\n\n /**\n * Clear all cached parsed results\n */\n private clearParsedCache(): void {\n this._cachedParsedResult = null;\n this._cachedParsedStartingPayload = null;\n this._cachedParsedFinalPayload = null;\n this._cachedParsedData = null;\n this._allParsingComplete = false;\n }\n \n /**\n * Parse all JSON fields at once and cache results\n */\n private parseAllFields(): void {\n try {\n let parsedCount = 0;\n \n // Parse all fields that exist\n if (this.record?.Result) {\n this.parsedResult; // Triggers parsing and caching\n parsedCount++;\n }\n \n if (this.record?.StartingPayload) {\n this.parsedStartingPayload; // Triggers parsing and caching\n parsedCount++;\n }\n \n if (this.record?.FinalPayload) {\n this.parsedFinalPayload; // Triggers parsing and caching\n parsedCount++;\n }\n \n if (this.record?.Data) {\n this.parsedData; // Triggers parsing and caching\n parsedCount++;\n }\n \n this._allParsingComplete = true;\n \n } catch (error) {\n console.error('Error during JSON parsing:', error);\n }\n }\n \n /**\n * Check if all parsing is complete - used by template\n */\n get isParsingComplete(): boolean {\n return this._allParsingComplete;\n }\n\n /**\n * Check if we have both payloads to show diff\n */\n get showPayloadDiff(): boolean {\n return !!(this.record?.StartingPayload && this.record?.FinalPayload);\n }\n\n /**\n * Check if selected timeline item is a step with payload changes\n */\n get showStepPayloadDiff(): boolean {\n if (!this.selectedTimelineItem || this.selectedTimelineItem.type !== 'step') {\n return false;\n }\n \n const stepData = this.selectedTimelineItem.data;\n if (stepData && (stepData.PayloadAtStart?.trim().length > 0 \n || stepData.PayloadAtEnd?.trim().length > 0)) {\n return stepData.PayloadAtStart !== stepData.PayloadAtEnd;\n }\n else {\n return false;\n }\n }\n\n /**\n * Get parsed PayloadAtStart for the selected step\n */\n get stepPayloadAtStartObject(): any {\n if (!this.selectedTimelineItem || this.selectedTimelineItem.type !== 'step') {\n return null;\n }\n \n const stepData = this.selectedTimelineItem.data;\n if (!stepData || !stepData.PayloadAtStart) {\n return null;\n }\n \n try {\n let payloadData = stepData.PayloadAtStart;\n try {\n payloadData = JSON.parse(stepData.PayloadAtStart);\n } catch {\n payloadData = stepData.PayloadAtStart;\n }\n \n const parseOptions: ParseJSONOptions = {\n extractInlineJson: true,\n maxDepth: 100,\n debug: false\n };\n // Re-enabled ParseJSONRecursive with performance optimizations\n return ParseJSONRecursive(payloadData, parseOptions);\n } catch (e) {\n return null;\n }\n }\n\n /**\n * Get parsed PayloadAtEnd for the selected step\n */\n get stepPayloadAtEndObject(): any {\n if (!this.selectedTimelineItem || this.selectedTimelineItem.type !== 'step') {\n return null;\n }\n \n const stepData = this.selectedTimelineItem.data;\n if (!stepData || !stepData.PayloadAtEnd) {\n return null;\n }\n \n try {\n let payloadData = stepData.PayloadAtEnd;\n try {\n payloadData = JSON.parse(stepData.PayloadAtEnd);\n } catch {\n payloadData = stepData.PayloadAtEnd;\n }\n \n const parseOptions: ParseJSONOptions = {\n extractInlineJson: true,\n maxDepth: 100,\n debug: false\n };\n // Re-enabled ParseJSONRecursive with performance optimizations\n return ParseJSONRecursive(payloadData, parseOptions);\n } catch (e) {\n return null;\n }\n }\n}\n","<div class=\"record-form-container ai-agent-run-form\">\n <div class=\"record-form\">\n <!-- Header -->\n <div class=\"header\">\n <div class=\"header-content\">\n <div class=\"header-left\">\n <div class=\"icon-wrapper\">\n @if (agent && agent.LogoURL) {\n <img [src]=\"agent.LogoURL\" [alt]=\"agent.Name || 'Agent'\" class=\"agent-logo\" />\n }\n @if (agent && !agent.LogoURL && agent.IconClass) {\n <i class=\"fas\" [ngClass]=\"agent.IconClass\"></i>\n }\n @if (!agent || (!agent.LogoURL && !agent.IconClass)) {\n <i class=\"fas fa-robot\"></i>\n }\n </div>\n <div class=\"header-info\">\n <h2>AI Agent Run</h2>\n <div class=\"meta-info\">\n @if (agent) {\n <span class=\"agent-name\">\n <a href=\"javascript:void(0)\" class=\"entity-link\" (click)=\"openEntityRecord('MJ: AI Agents', record.AgentID)\">\n {{ agent.Name }}\n </a>\n </span>\n }\n <span class=\"run-id\">{{ record.ID }}</span>\n @if (record.ParentRunID) {\n <span class=\"parent-run\">\n <i class=\"fas fa-level-up-alt\"></i>\n <a (click)=\"navigateToParentRun()\" class=\"parent-link\">Parent Run</a>\n </span>\n }\n <!-- Conversation Link Pill -->\n @if (record.ConversationID) {\n <span class=\"conversation-pill\" (click)=\"navigateToConversation()\" title=\"Open conversation in Chat app\">\n <i class=\"fas fa-comments\"></i>\n <span>Conversation</span>\n <i class=\"fas fa-external-link-alt pill-action\"></i>\n </span>\n }\n </div>\n </div>\n </div>\n <div class=\"header-right\">\n <div class=\"status-badge\" [attr.data-status]=\"record.Status\">\n <i class=\"fas\" [ngClass]=\"getStatusIcon(record.Status || '')\"></i>\n {{ record.Status }}\n </div>\n <div class=\"header-actions\">\n <button class=\"btn-icon\" (click)=\"refreshData()\" title=\"Refresh\">\n <i class=\"fas fa-sync-alt\"></i>\n </button>\n </div>\n </div>\n </div>\n <div class=\"header-stats\">\n <div class=\"stat\">\n <span class=\"label\">Started</span>\n <span class=\"value\">{{ record.StartedAt | date:'medium' }}</span>\n </div>\n @if (record.CompletedAt) {\n <div class=\"stat\">\n <span class=\"label\">Completed</span>\n <span class=\"value\">{{ record.CompletedAt | date:'medium' }}</span>\n </div>\n }\n @if (record.CompletedAt) {\n <div class=\"stat\">\n <span class=\"label\">Duration</span>\n <span class=\"value\">{{ calculateDuration(record.StartedAt, record.CompletedAt) }}</span>\n </div>\n }\n @if (record.Success !== null && record.CompletedAt !== null) {\n <div class=\"stat\">\n <span class=\"label\">Result</span>\n <span class=\"value\" [class.success]=\"record.Success\" [class.error]=\"!record.Success\">\n {{ record.Success ? 'Success' : 'Failed' }}\n </span>\n </div>\n }\n @if (costMetrics && (costMetrics.totalTokensInput + costMetrics.totalTokensOutput) > 0) {\n <div class=\"stat\">\n <span class=\"label\">Tokens</span>\n @if (!costMetrics.isLoading) {\n <span class=\"value\">{{ (costMetrics.totalTokensInput + costMetrics.totalTokensOutput) | number:'1.0-0' }}</span>\n }\n @if (costMetrics.isLoading) {\n <span class=\"value loading\"><i class=\"fas fa-spinner fa-spin\"></i></span>\n }\n </div>\n }\n @if (costMetrics && costMetrics.totalCost > 0) {\n <div class=\"stat\">\n <span class=\"label\">Cost</span>\n @if (!costMetrics.isLoading) {\n <span class=\"value\">${{ costMetrics.totalCost | number:'1.2-4' }}</span>\n }\n @if (costMetrics.isLoading) {\n <span class=\"value loading\"><i class=\"fas fa-spinner fa-spin\"></i></span>\n }\n </div>\n }\n @if (record.EffortLevel) {\n <div class=\"stat\">\n <span class=\"label\">Effort Level</span>\n <span class=\"value\">{{ record.EffortLevel }}</span>\n </div>\n }\n </div>\n\n <!-- Configuration Bar (shown below header stats when ConfigurationID exists) -->\n @if (record.ConfigurationID) {\n <div class=\"configuration-bar\">\n <div class=\"config-item\">\n <i class=\"fas fa-cog\"></i>\n <div class=\"config-content\">\n <div class=\"config-label\">Configuration</div>\n <div class=\"config-value\">\n <a href=\"javascript:void(0)\" class=\"entity-link\" (click)=\"openEntityRecord('MJ: AI Configurations', record.ConfigurationID)\">\n {{ record.Configuration || 'Unknown' }}\n </a>\n </div>\n </div>\n </div>\n </div>\n }\n </div>\n\n <!-- Tabs -->\n <div class=\"tabs\">\n <button class=\"tab\" [class.active]=\"activeTab === 'timeline'\" (click)=\"changeTab('timeline')\">\n <i class=\"fas fa-stream\"></i> Timeline\n </button>\n <button class=\"tab\" [class.active]=\"activeTab === 'visualization'\" (click)=\"changeTab('visualization')\">\n <i class=\"fas fa-diagram-project\"></i> Visualization\n </button>\n <button class=\"tab\" [class.active]=\"activeTab === 'analytics'\" (click)=\"changeTab('analytics')\">\n <i class=\"fas fa-chart-line\"></i> Analytics\n </button>\n <button class=\"tab\" [class.active]=\"activeTab === 'details'\" (click)=\"changeTab('details')\">\n <i class=\"fas fa-info-circle\"></i> Details\n </button>\n </div>\n\n <!-- Content -->\n <div class=\"content-area\">\n <!-- Timeline Tab -->\n @if (activeTab === 'timeline') {\n <div class=\"tab-content\" style=\"height: 100%;\">\n <as-split direction=\"horizontal\" style=\"height: 100%;\">\n <!-- Timeline Pane -->\n <as-split-area [size]=\"selectedTimelineItem ? 55 : 100\">\n <mj-ai-agent-run-timeline\n [aiAgentRunId]=\"record.ID\"\n [dataHelper]=\"dataHelper\"\n [autoRefresh]=\"record.Status === 'Running'\"\n [refreshInterval]=\"30000\"\n (itemSelected)=\"selectTimelineItem($event)\"\n (navigateToEntity)=\"navigateToEntityRecord($event)\"\n (agentRunCompleted)=\"onAgentRunCompleted($event)\">\n </mj-ai-agent-run-timeline>\n </as-split-area>\n <!-- JSON Detail Pane -->\n @if (selectedTimelineItem) {\n <as-split-area [size]=\"45\">\n <mj-ai-agent-run-step-detail\n [selectedTimelineItem]=\"selectedTimelineItem\"\n (closePanel)=\"closeJsonPanel()\"\n (navigateToActionLog)=\"navigateToActionLog($event)\"\n (copyToClipboard)=\"copyToClipboard($event)\">\n </mj-ai-agent-run-step-detail>\n </as-split-area>\n }\n </as-split>\n </div>\n }\n\n <!-- Visualization Tab -->\n @if (activeTab === 'visualization') {\n <div class=\"tab-content\" style=\"height: 100%;\">\n @if (visualizationLoaded) {\n <mj-ai-agent-run-visualization\n #visualizationComponent\n [aiAgentRunId]=\"record.ID\"\n [dataHelper]=\"dataHelper\"\n >\n </mj-ai-agent-run-visualization>\n }\n </div>\n }\n\n <!-- Analytics Tab -->\n @if (activeTab === 'analytics') {\n <div class=\"tab-content\" style=\"height: 100%;\">\n @if (analyticsLoaded) {\n <mj-ai-agent-run-analytics\n #analyticsComponent\n [agentRunId]=\"record.ID\"\n >\n </mj-ai-agent-run-analytics>\n }\n </div>\n }\n\n <!-- Details Tab -->\n @if (activeTab === 'details') {\n <div class=\"tab-content\">\n <mj-accordion-panel [Expanded]=\"true\">\n <ng-template mjAccordionTitle>\n <i class=\"fas fa-info-circle\"></i> General Information\n </ng-template>\n <div class=\"details-grid\">\n <div class=\"detail-item\">\n <label>Agent</label>\n <span>\n <a href=\"javascript:void(0)\" class=\"entity-link\" (click)=\"openEntityRecord('MJ: AI Agents', record.AgentID)\">\n {{ agent?.Name || 'N/A' }}\n </a>\n </span>\n </div>\n <div class=\"detail-item\">\n <label>Parent Run ID</label>\n <span>\n @if (record.ParentRunID) {\n <a href=\"javascript:void(0)\" class=\"entity-link\" (click)=\"openEntityRecord('MJ: AI Agent Runs', record.ParentRunID)\">\n {{ record.ParentRunID }}\n </a>\n }\n @if (!record.ParentRunID) {\n <span>None (Root)</span>\n }\n </span>\n </div>\n <div class=\"detail-item\">\n <label>Last Run ID</label>\n <span>\n @if (record.LastRunID) {\n <a href=\"javascript:void(0)\" class=\"entity-link\" (click)=\"openEntityRecord('MJ: AI Agent Runs', record.LastRunID)\">\n {{ record.LastRunID }}\n </a>\n }\n @if (!record.LastRunID) {\n <span>None</span>\n }\n </span>\n </div>\n <div class=\"detail-item\">\n <label>Conversation ID</label>\n <span>\n @if (record.ConversationID) {\n <a href=\"javascript:void(0)\" class=\"entity-link\" (click)=\"openEntityRecord('MJ: Conversations', record.ConversationID)\">\n {{ record.ConversationID }}\n </a>\n }\n @if (!record.ConversationID) {\n <span>N/A</span>\n }\n </span>\n </div>\n <div class=\"detail-item\">\n <label>User</label>\n <span>\n @if (record.UserID) {\n <a href=\"javascript:void(0)\" class=\"entity-link\" (click)=\"openEntityRecord('MJ: Users', record.UserID)\">\n {{ record.User || 'N/A' }}\n </a>\n }\n @if (!record.UserID) {\n <span>N/A</span>\n }\n </span>\n </div>\n </div>\n </mj-accordion-panel>\n <mj-accordion-panel [Expanded]=\"false\">\n <ng-template mjAccordionTitle>\n <i class=\"fas fa-cogs\"></i> Execution Settings\n </ng-template>\n <div class=\"details-grid\">\n <div class=\"detail-item\">\n <label>Override Model</label>\n <span>\n @if (record.OverrideModelID) {\n <a href=\"javascript:void(0)\" class=\"entity-link\" (click)=\"openEntityRecord('MJ: AI Models', record.OverrideModelID)\">\n {{ record.OverrideModel || 'N/A' }}\n </a>\n }\n @if (!record.OverrideModelID) {\n <span>N/A</span>\n }\n </span>\n </div>\n <div class=\"detail-item\">\n <label>Override Vendor</label>\n <span>\n @if (record.OverrideVendorID) {\n <a href=\"javascript:void(0)\" class=\"entity-link\" (click)=\"openEntityRecord('MJ: AI Vendors', record.OverrideVendorID)\">\n {{ record.OverrideVendor || 'N/A' }}\n </a>\n }\n @if (!record.OverrideVendorID) {\n <span>N/A</span>\n }\n </span>\n </div>\n <div class=\"detail-item\">\n <label>Verbose Logging</label>\n <span>{{ record.Verbose ? 'Yes' : 'No' }}</span>\n </div>\n </div>\n </mj-accordion-panel>\n <mj-accordion-panel [Expanded]=\"false\">\n <ng-template mjAccordionTitle>\n <i class=\"fas fa-tasks\"></i> Execution Status\n </ng-template>\n <div class=\"details-grid\">\n <div class=\"detail-item\">\n <label>Status</label>\n <span class=\"status-badge\" [attr.data-status]=\"record.Status\">\n {{ record.Status }}\n </span>\n </div>\n <div class=\"detail-item\">\n <label>Success</label>\n @if (record.Success === null) {\n <span>In Progress</span>\n }\n @else if (record.Success) {\n <span class=\"success\">Yes</span>\n }\n @else {\n <span class=\"error-message\">No</span>\n }\n </div>\n @if (record.Message) {\n <div class=\"detail-item full-width\">\n <label>Message</label>\n <div class=\"message\">{{ record.Message }}</div>\n </div>\n }\n @if (record.ErrorMessage) {\n <div class=\"detail-item full-width\">\n <label>Error Message</label>\n <div class=\"error-message\">{{ record.ErrorMessage }}</div>\n </div>\n }\n </div>\n </mj-accordion-panel>\n <mj-accordion-panel [Expanded]=\"false\">\n <ng-template mjAccordionTitle>\n <i class=\"fas fa-dollar-sign\"></i> Usage & Cost\n </ng-template>\n <div class=\"details-grid\">\n <div class=\"detail-item\">\n <label>Total Tokens Used</label>\n <span>{{ record.TotalTokensUsed ? (record.TotalTokensUsed | number:'1.0-0') : 'N/A' }}</span>\n </div>\n <div class=\"detail-item\">\n <label>Prompt Tokens</label>\n <span>{{ record.TotalPromptTokensUsed ? (record.TotalPromptTokensUsed | number:'1.0-0') : 'N/A' }}</span>\n </div>\n <div class=\"detail-item\">\n <label>Completion Tokens</label>\n <span>{{ record.TotalCompletionTokensUsed ? (record.TotalCompletionTokensUsed | number:'1.0-0') : 'N/A' }}</span>\n </div>\n <div class=\"detail-item\">\n <label>Total Cost</label>\n <span>{{ record.TotalCost != null ? ('$' + (record.TotalCost | number:'1.2-4')) : 'N/A' }}</span>\n </div>\n <div class=\"detail-item\">\n <label>Total Prompt Iterations</label>\n <span>{{ record.TotalPromptIterations != null ? (record.TotalPromptIterations | number:'1.0-0') : 'N/A' }}</span>\n </div>\n </div>\n </mj-accordion-panel>\n @if (record.Result) {\n <mj-accordion-panel [Expanded]=\"false\">\n <ng-template mjAccordionTitle>\n <i class=\"fas fa-code\"></i> Result\n </ng-template>\n <div class=\"result-viewer\">\n @if (isParsingComplete) {\n <mj-code-editor\n [ngModel]=\"parsedResult\"\n [language]=\"'json'\"\n [readonly]=\"true\"\n style=\"height: 300px; width: 100%;\">\n </mj-code-editor>\n } @else {\n <div style=\"padding: 20px; text-align: center; color: var(--mj-text-muted);\">\n <i class=\"fas fa-spinner fa-spin\"></i> Loading result data...\n </div>\n }\n </div>\n </mj-accordion-panel>\n }\n @if (record.StartingPayload) {\n <mj-accordion-panel [Expanded]=\"false\">\n <ng-template mjAccordionTitle>\n <i class=\"fas fa-upload\"></i> Starting Payload\n </ng-template>\n <div class=\"result-viewer\">\n @if (isParsingComplete) {\n <mj-code-editor\n [ngModel]=\"parsedStartingPayload\"\n [language]=\"'json'\"\n [readonly]=\"true\"\n style=\"height: 300px; width: 100%;\">\n </mj-code-editor>\n } @else {\n <div style=\"padding: 20px; text-align: center; color: var(--mj-text-muted);\">\n <i class=\"fas fa-spinner fa-spin\"></i> Loading payload data...\n </div>\n }\n </div>\n </mj-accordion-panel>\n }\n @if (record.Data) {\n <mj-accordion-panel [Expanded]=\"false\">\n <ng-template mjAccordionTitle>\n <i class=\"fas fa-database\"></i> Execution Data\n </ng-template>\n <div class=\"result-viewer\">\n @if (isParsingComplete) {\n <mj-code-editor\n [ngModel]=\"parsedData\"\n [language]=\"'json'\"\n [readonly]=\"true\"\n style=\"height: 300px; width: 100%;\">\n </mj-code-editor>\n } @else {\n <div style=\"padding: 20px; text-align: center; color: var(--mj-text-muted);\">\n <i class=\"fas fa-spinner fa-spin\"></i> Loading execution data...\n </div>\n }\n </div>\n </mj-accordion-panel>\n }\n @if (record.FinalPayload) {\n <mj-accordion-panel [Expanded]=\"false\">\n <ng-template mjAccordionTitle>\n <i class=\"fas fa-download\"></i> Final Payload\n </ng-template>\n <div class=\"result-viewer\">\n @if (isParsingComplete) {\n <mj-code-editor\n [ngModel]=\"parsedFinalPayload\"\n [language]=\"'json'\"\n [readonly]=\"true\"\n style=\"height: 300px; width: 100%;\">\n </mj-code-editor>\n } @else {\n <div style=\"padding: 20px; text-align: center; color: var(--mj-text-muted);\">\n <i class=\"fas fa-spinner fa-spin\"></i> Loading final payload data...\n </div>\n }\n </div>\n </mj-accordion-panel>\n }\n @if (showPayloadDiff) {\n <mj-accordion-panel [Expanded]=\"false\">\n <ng-template mjAccordionTitle>\n <i class=\"fas fa-code-compare\"></i> Payload Diff\n </ng-template>\n <div style=\"padding: 20px; background: var(--mj-bg-surface-card);\">\n @if (isParsingComplete) {\n <mj-deep-diff\n [oldValue]=\"startingPayloadObject\"\n [newValue]=\"finalPayloadObject\"\n [title]=\"''\"\n [showSummary]=\"true\"\n [showUnchanged]=\"false\"\n [expandAll]=\"false\"\n [maxDepth]=\"10\"\n [maxStringLength]=\"200\"\n [treatNullAsUndefined]=\"true\">\n </mj-deep-diff>\n } @else {\n <div style=\"padding: 20px; text-align: center; color: var(--mj-text-muted);\">\n <i class=\"fas fa-spinner fa-spin\"></i> Loading payload diff...\n </div>\n }\n </div>\n </mj-accordion-panel>\n }\n </div>\n }\n</div>\n</div>\n</div>"]}
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import { EventEmitter, OnInit } from '@angular/core';
|
|
2
2
|
import { SharedService } from '@memberjunction/ng-shared';
|
|
3
|
+
import { BaseAngularComponent } from '@memberjunction/ng-base-types';
|
|
3
4
|
import * as i0 from "@angular/core";
|
|
4
5
|
export interface EntitySelectorConfig {
|
|
5
6
|
entityName: string;
|
|
@@ -11,7 +12,7 @@ export interface EntitySelectorConfig {
|
|
|
11
12
|
orderBy?: string;
|
|
12
13
|
icon?: string;
|
|
13
14
|
}
|
|
14
|
-
export declare class EntitySelectorDialogComponent implements OnInit {
|
|
15
|
+
export declare class EntitySelectorDialogComponent extends BaseAngularComponent implements OnInit {
|
|
15
16
|
private sharedService;
|
|
16
17
|
config: EntitySelectorConfig;
|
|
17
18
|
entities: any[];
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"entity-selector-dialog.component.d.ts","sourceRoot":"","sources":["../../../../src/lib/custom/shared/entity-selector-dialog.component.ts"],"names":[],"mappings":"AAAA,OAAO,EAA4B,YAAY,EAAE,MAAM,EAAE,MAAM,eAAe,CAAC;AAC/E,OAAO,EAAE,aAAa,EAAE,MAAM,2BAA2B,CAAC
|
|
1
|
+
{"version":3,"file":"entity-selector-dialog.component.d.ts","sourceRoot":"","sources":["../../../../src/lib/custom/shared/entity-selector-dialog.component.ts"],"names":[],"mappings":"AAAA,OAAO,EAA4B,YAAY,EAAE,MAAM,EAAE,MAAM,eAAe,CAAC;AAC/E,OAAO,EAAE,aAAa,EAAE,MAAM,2BAA2B,CAAC;AAI1D,OAAO,EAAE,oBAAoB,EAAE,MAAM,+BAA+B,CAAC;;AACrE,MAAM,WAAW,oBAAoB;IACjC,UAAU,EAAE,MAAM,CAAC;IACnB,KAAK,EAAE,MAAM,CAAC;IACd,YAAY,EAAE,MAAM,CAAC;IACrB,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,IAAI,CAAC,EAAE,MAAM,CAAC;CACjB;AAED,qBAkPa,6BAA8B,SAAQ,oBAAqB,YAAW,MAAM;IAYjF,OAAO,CAAC,aAAa;IAXhB,MAAM,EAAG,oBAAoB,CAAC;IAEhC,QAAQ,EAAE,GAAG,EAAE,CAAM;IACrB,gBAAgB,EAAE,GAAG,EAAE,CAAM;IAC7B,cAAc,EAAE,GAAG,CAAQ;IAC3B,UAAU,EAAE,MAAM,CAAM;IACxB,SAAS,EAAE,OAAO,CAAQ;IAEvB,YAAY,+CAAsD;gBAGhE,aAAa,EAAE,aAAa;IAIlC,QAAQ;IAIR,YAAY;IAqBlB,cAAc;IAcd,YAAY,CAAC,MAAM,EAAE,GAAG;IAIxB,QAAQ;IAMR,SAAS;IAIT,gBAAgB,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,OAAO;IAI1D,QAAQ;yCAzEC,6BAA6B;2CAA7B,6BAA6B;CA4EzC"}
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import { Component, Input, Output, EventEmitter } from '@angular/core';
|
|
2
2
|
import { RunView } from '@memberjunction/core';
|
|
3
3
|
import { UUIDsEqual } from '@memberjunction/global';
|
|
4
|
+
import { BaseAngularComponent } from '@memberjunction/ng-base-types';
|
|
4
5
|
import * as i0 from "@angular/core";
|
|
5
6
|
import * as i1 from "@memberjunction/ng-shared";
|
|
6
7
|
import * as i2 from "@angular/forms";
|
|
@@ -100,8 +101,9 @@ function EntitySelectorDialogComponent_Conditional_11_Template(rf, ctx) { if (rf
|
|
|
100
101
|
i0.ɵɵadvance();
|
|
101
102
|
i0.ɵɵconditional(ctx_r0.filteredEntities.length === 0 ? 1 : 2);
|
|
102
103
|
} }
|
|
103
|
-
export class EntitySelectorDialogComponent {
|
|
104
|
+
export class EntitySelectorDialogComponent extends BaseAngularComponent {
|
|
104
105
|
constructor(sharedService) {
|
|
106
|
+
super();
|
|
105
107
|
this.sharedService = sharedService;
|
|
106
108
|
this.entities = [];
|
|
107
109
|
this.filteredEntities = [];
|
|
@@ -116,7 +118,7 @@ export class EntitySelectorDialogComponent {
|
|
|
116
118
|
async loadEntities() {
|
|
117
119
|
this.isLoading = true;
|
|
118
120
|
try {
|
|
119
|
-
const rv =
|
|
121
|
+
const rv = RunView.FromMetadataProvider(this.ProviderToUse);
|
|
120
122
|
const result = await rv.RunView({
|
|
121
123
|
EntityName: this.config.entityName,
|
|
122
124
|
ExtraFilter: this.config.filters,
|
|
@@ -166,7 +168,7 @@ export class EntitySelectorDialogComponent {
|
|
|
166
168
|
this.DialogClosed.emit(null);
|
|
167
169
|
}
|
|
168
170
|
static { this.ɵfac = function EntitySelectorDialogComponent_Factory(__ngFactoryType__) { return new (__ngFactoryType__ || EntitySelectorDialogComponent)(i0.ɵɵdirectiveInject(i1.SharedService)); }; }
|
|
169
|
-
static { this.ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: EntitySelectorDialogComponent, selectors: [["mj-entity-selector-dialog"]], inputs: { config: "config" }, outputs: { DialogClosed: "DialogClosed" }, standalone: false, decls: 20, vars: 6, consts: [[1, "dialog-wrapper"], [1, "dialog-header"], [3, "class"], [1, "dialog-content"], [1, "search-bar"], [1, "search-input-wrapper"], [1, "fa-solid", "fa-search", "search-icon"], ["placeholder", "Search...", 1, "mj-input", "search-input", 3, "ngModelChange", "ngModel"], [1, "loading-state"], [1, "entity-list-container"], [1, "dialog-actions"], ["mjButton", "", "variant", "primary", 3, "click"], [1, "fa-solid", "fa-plus"], ["mjButton", "", 3, "click"], ["mjButton", "", "variant", "primary", 3, "click", "disabled"], [1, "fa-solid", "fa-spinner", "fa-spin"], [1, "empty-state"], [1, "entity-list"], [1, "fa-solid", "fa-inbox"], [1, "entity-item", 3, "selected"], [1, "entity-item", 3, "click"], [1, "item-icon"], [1, "item-content"], [1, "item-title"], [1, "item-description"], [1, "item-status"], [1, "status-badge"]], template: function EntitySelectorDialogComponent_Template(rf, ctx) { if (rf & 1) {
|
|
171
|
+
static { this.ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: EntitySelectorDialogComponent, selectors: [["mj-entity-selector-dialog"]], inputs: { config: "config" }, outputs: { DialogClosed: "DialogClosed" }, standalone: false, features: [i0.ɵɵInheritDefinitionFeature], decls: 20, vars: 6, consts: [[1, "dialog-wrapper"], [1, "dialog-header"], [3, "class"], [1, "dialog-content"], [1, "search-bar"], [1, "search-input-wrapper"], [1, "fa-solid", "fa-search", "search-icon"], ["placeholder", "Search...", 1, "mj-input", "search-input", 3, "ngModelChange", "ngModel"], [1, "loading-state"], [1, "entity-list-container"], [1, "dialog-actions"], ["mjButton", "", "variant", "primary", 3, "click"], [1, "fa-solid", "fa-plus"], ["mjButton", "", 3, "click"], ["mjButton", "", "variant", "primary", 3, "click", "disabled"], [1, "fa-solid", "fa-spinner", "fa-spin"], [1, "empty-state"], [1, "entity-list"], [1, "fa-solid", "fa-inbox"], [1, "entity-item", 3, "selected"], [1, "entity-item", 3, "click"], [1, "item-icon"], [1, "item-content"], [1, "item-title"], [1, "item-description"], [1, "item-status"], [1, "status-badge"]], template: function EntitySelectorDialogComponent_Template(rf, ctx) { if (rf & 1) {
|
|
170
172
|
i0.ɵɵelementStart(0, "div", 0)(1, "div", 1)(2, "h3");
|
|
171
173
|
i0.ɵɵconditionalCreate(3, EntitySelectorDialogComponent_Conditional_3_Template, 1, 2, "i", 2);
|
|
172
174
|
i0.ɵɵtext(4);
|
|
@@ -285,5 +287,5 @@ export class EntitySelectorDialogComponent {
|
|
|
285
287
|
}], DialogClosed: [{
|
|
286
288
|
type: Output
|
|
287
289
|
}] }); })();
|
|
288
|
-
(() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassDebugInfo(EntitySelectorDialogComponent, { className: "EntitySelectorDialogComponent", filePath: "src/lib/custom/shared/entity-selector-dialog.component.ts", lineNumber:
|
|
290
|
+
(() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassDebugInfo(EntitySelectorDialogComponent, { className: "EntitySelectorDialogComponent", filePath: "src/lib/custom/shared/entity-selector-dialog.component.ts", lineNumber: 260 }); })();
|
|
289
291
|
//# sourceMappingURL=entity-selector-dialog.component.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"entity-selector-dialog.component.js","sourceRoot":"","sources":["../../../../src/lib/custom/shared/entity-selector-dialog.component.ts"],"names":[],"mappings":"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","sourcesContent":["import { Component, Input, Output, EventEmitter, OnInit } from '@angular/core';\nimport { SharedService } from '@memberjunction/ng-shared';\nimport { RunView } from '@memberjunction/core';\nimport { UUIDsEqual } from '@memberjunction/global';\n\nexport interface EntitySelectorConfig {\n entityName: string;\n title: string;\n displayField: string;\n descriptionField?: string;\n statusField?: string;\n filters?: string;\n orderBy?: string;\n icon?: string;\n}\n\n@Component({\n standalone: false,\n selector: 'mj-entity-selector-dialog',\n template: `\n <div class=\"dialog-wrapper\">\n <div class=\"dialog-header\">\n <h3>@if (config.icon) {\n <i [class]=\"config.icon\"></i>\n } {{ config.title }}</h3>\n </div>\n <div class=\"dialog-content\">\n <!-- Search Bar -->\n <div class=\"search-bar\">\n <div class=\"search-input-wrapper\">\n <i class=\"fa-solid fa-search search-icon\"></i>\n <input class=\"mj-input search-input\" [(ngModel)]=\"searchText\" placeholder=\"Search...\" (ngModelChange)=\"onSearchChange()\" />\n </div>\n </div>\n \n <!-- Loading State -->\n @if (isLoading) {\n <div class=\"loading-state\">\n <i class=\"fa-solid fa-spinner fa-spin\"></i>\n <p>Loading {{ config.entityName }}...</p>\n </div>\n }\n \n <!-- Entity List -->\n @if (!isLoading) {\n <div class=\"entity-list-container\">\n @if (filteredEntities.length === 0) {\n <div class=\"empty-state\">\n <i class=\"fa-solid fa-inbox\"></i>\n <p>No {{ config.entityName }} found</p>\n </div>\n } @else {\n <div class=\"entity-list\">\n @for (entity of filteredEntities; track entity.ID) {\n <div class=\"entity-item\"\n [class.selected]=\"IsEntitySelected(entity)\"\n (click)=\"selectEntity(entity)\">\n <div class=\"item-icon\">\n <i [class]=\"config.icon || 'fa-solid fa-file'\"></i>\n </div>\n <div class=\"item-content\">\n <div class=\"item-title\">{{ entity[config.displayField] || 'Untitled' }}</div>\n @if (config.descriptionField && entity[config.descriptionField]) {\n <div class=\"item-description\">{{ entity[config.descriptionField] }}</div>\n }\n @if (config.statusField && entity[config.statusField]) {\n <div class=\"item-status\">\n <span class=\"status-badge\" [class.active]=\"entity[config.statusField] === 'Active'\">\n {{ entity[config.statusField] }}\n </span>\n </div>\n }\n </div>\n </div>\n }\n </div>\n }\n </div>\n }\n </div>\n <div class=\"dialog-actions\">\n <button mjButton variant=\"primary\" (click)=\"createNew()\">\n <i class=\"fa-solid fa-plus\"></i> Create New\n </button>\n <button mjButton (click)=\"onCancel()\">Cancel</button>\n <button mjButton variant=\"primary\" [disabled]=\"!selectedEntity\" (click)=\"onSelect()\">Select</button>\n </div>\n </div>\n `,\n styles: [`\n .dialog-wrapper {\n display: flex;\n flex-direction: column;\n height: 600px;\n width: 800px;\n }\n\n .dialog-header {\n padding: 16px;\n border-bottom: 1px solid var(--mj-border-default);\n }\n\n .dialog-header h3 {\n margin: 0;\n display: flex;\n align-items: center;\n gap: 8px;\n }\n\n .dialog-content {\n display: flex;\n flex-direction: column;\n flex: 1;\n padding: 16px;\n gap: 16px;\n overflow: hidden;\n }\n\n .dialog-actions {\n padding: 16px;\n border-top: 1px solid var(--mj-border-default);\n display: flex;\n gap: 8px;\n justify-content: flex-end;\n }\n\n .search-bar {\n display: flex;\n gap: 12px;\n }\n\n .search-input-wrapper {\n flex: 1;\n position: relative;\n display: flex;\n align-items: center;\n }\n\n .search-icon {\n position: absolute;\n left: 10px;\n color: var(--mj-text-muted);\n pointer-events: none;\n }\n\n .search-input {\n flex: 1;\n padding-left: 32px;\n }\n\n .loading-state,\n .empty-state {\n flex: 1;\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: center;\n color: var(--mj-text-muted);\n gap: 12px;\n }\n\n .loading-state i,\n .empty-state i {\n font-size: 48px;\n color: var(--mj-border-default);\n }\n\n .entity-list-container {\n flex: 1;\n overflow-y: auto;\n border: 1px solid var(--mj-border-default);\n border-radius: 8px;\n background: var(--mj-bg-surface-sunken);\n }\n\n .entity-list {\n padding: 8px;\n }\n\n .entity-item {\n display: flex;\n align-items: center;\n gap: 12px;\n padding: 12px;\n margin-bottom: 8px;\n background: var(--mj-bg-surface-card);\n border: 1px solid var(--mj-border-default);\n border-radius: 8px;\n cursor: pointer;\n transition: all 0.2s ease;\n }\n\n .entity-item:hover {\n border-color: var(--mj-brand-primary);\n box-shadow: 0 2px 8px rgba(0,0,0,0.08);\n }\n\n .entity-item.selected {\n background: color-mix(in srgb, var(--mj-brand-primary) 10%, var(--mj-bg-surface));\n border-color: var(--mj-brand-primary);\n }\n\n .item-icon {\n width: 36px;\n height: 36px;\n background: var(--mj-bg-surface-sunken);\n border-radius: 8px;\n display: flex;\n align-items: center;\n justify-content: center;\n flex-shrink: 0;\n }\n\n .item-icon i {\n color: var(--mj-brand-primary);\n font-size: 16px;\n }\n\n .item-content {\n flex: 1;\n min-width: 0;\n }\n\n .item-title {\n font-weight: 600;\n color: var(--mj-text-primary);\n margin-bottom: 4px;\n }\n\n .item-description {\n font-size: 13px;\n color: var(--mj-text-muted);\n line-height: 1.4;\n display: -webkit-box;\n -webkit-line-clamp: 2;\n -webkit-box-orient: vertical;\n overflow: hidden;\n }\n\n .item-status {\n margin-top: 4px;\n }\n\n .status-badge {\n font-size: 11px;\n padding: 2px 8px;\n border-radius: 12px;\n background: var(--mj-bg-surface-sunken);\n color: var(--mj-text-secondary);\n font-weight: 500;\n }\n\n .status-badge.active {\n background: #d4edda;\n color: #28a745;\n }\n `]\n})\nexport class EntitySelectorDialogComponent implements OnInit {\n @Input() config!: EntitySelectorConfig;\n\n public entities: any[] = [];\n public filteredEntities: any[] = [];\n public selectedEntity: any = null;\n public searchText: string = '';\n public isLoading: boolean = true;\n\n @Output() DialogClosed = new EventEmitter<Record<string, unknown> | null>();\n\n constructor(\n private sharedService: SharedService\n ) {}\n\n async ngOnInit() {\n await this.loadEntities();\n }\n\n async loadEntities() {\n this.isLoading = true;\n try {\n const rv = new RunView();\n const result = await rv.RunView({\n EntityName: this.config.entityName,\n ExtraFilter: this.config.filters,\n OrderBy: this.config.orderBy \n });\n\n this.entities = result.Results;\n this.filteredEntities = [...this.entities];\n } catch (error) {\n console.error('Error loading entities:', error);\n this.entities = [];\n this.filteredEntities = [];\n } finally {\n this.isLoading = false;\n }\n }\n\n onSearchChange() {\n if (!this.searchText) {\n this.filteredEntities = [...this.entities];\n } else {\n const searchLower = this.searchText.toLowerCase();\n this.filteredEntities = this.entities.filter(entity => {\n const displayValue = entity[this.config.displayField] || '';\n const descriptionValue = this.config.descriptionField ? (entity[this.config.descriptionField] || '') : '';\n return displayValue.toLowerCase().includes(searchLower) || \n descriptionValue.toLowerCase().includes(searchLower);\n });\n }\n }\n\n selectEntity(entity: any) {\n this.selectedEntity = entity;\n }\n\n onSelect() {\n if (this.selectedEntity) {\n this.DialogClosed.emit({ entity: this.selectedEntity });\n }\n }\n\n createNew() {\n this.DialogClosed.emit({ createNew: true });\n }\n\n IsEntitySelected(entity: Record<string, unknown>): boolean {\n return UUIDsEqual(this.selectedEntity?.ID, entity.ID as string);\n }\n\n onCancel() {\n this.DialogClosed.emit(null);\n }\n}"]}
|
|
1
|
+
{"version":3,"file":"entity-selector-dialog.component.js","sourceRoot":"","sources":["../../../../src/lib/custom/shared/entity-selector-dialog.component.ts"],"names":[],"mappings":"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","sourcesContent":["import { Component, Input, Output, EventEmitter, OnInit } from '@angular/core';\nimport { SharedService } from '@memberjunction/ng-shared';\nimport { RunView } from '@memberjunction/core';\nimport { UUIDsEqual } from '@memberjunction/global';\n\nimport { BaseAngularComponent } from '@memberjunction/ng-base-types';\nexport interface EntitySelectorConfig {\n entityName: string;\n title: string;\n displayField: string;\n descriptionField?: string;\n statusField?: string;\n filters?: string;\n orderBy?: string;\n icon?: string;\n}\n\n@Component({\n standalone: false,\n selector: 'mj-entity-selector-dialog',\n template: `\n <div class=\"dialog-wrapper\">\n <div class=\"dialog-header\">\n <h3>@if (config.icon) {\n <i [class]=\"config.icon\"></i>\n } {{ config.title }}</h3>\n </div>\n <div class=\"dialog-content\">\n <!-- Search Bar -->\n <div class=\"search-bar\">\n <div class=\"search-input-wrapper\">\n <i class=\"fa-solid fa-search search-icon\"></i>\n <input class=\"mj-input search-input\" [(ngModel)]=\"searchText\" placeholder=\"Search...\" (ngModelChange)=\"onSearchChange()\" />\n </div>\n </div>\n \n <!-- Loading State -->\n @if (isLoading) {\n <div class=\"loading-state\">\n <i class=\"fa-solid fa-spinner fa-spin\"></i>\n <p>Loading {{ config.entityName }}...</p>\n </div>\n }\n \n <!-- Entity List -->\n @if (!isLoading) {\n <div class=\"entity-list-container\">\n @if (filteredEntities.length === 0) {\n <div class=\"empty-state\">\n <i class=\"fa-solid fa-inbox\"></i>\n <p>No {{ config.entityName }} found</p>\n </div>\n } @else {\n <div class=\"entity-list\">\n @for (entity of filteredEntities; track entity.ID) {\n <div class=\"entity-item\"\n [class.selected]=\"IsEntitySelected(entity)\"\n (click)=\"selectEntity(entity)\">\n <div class=\"item-icon\">\n <i [class]=\"config.icon || 'fa-solid fa-file'\"></i>\n </div>\n <div class=\"item-content\">\n <div class=\"item-title\">{{ entity[config.displayField] || 'Untitled' }}</div>\n @if (config.descriptionField && entity[config.descriptionField]) {\n <div class=\"item-description\">{{ entity[config.descriptionField] }}</div>\n }\n @if (config.statusField && entity[config.statusField]) {\n <div class=\"item-status\">\n <span class=\"status-badge\" [class.active]=\"entity[config.statusField] === 'Active'\">\n {{ entity[config.statusField] }}\n </span>\n </div>\n }\n </div>\n </div>\n }\n </div>\n }\n </div>\n }\n </div>\n <div class=\"dialog-actions\">\n <button mjButton variant=\"primary\" (click)=\"createNew()\">\n <i class=\"fa-solid fa-plus\"></i> Create New\n </button>\n <button mjButton (click)=\"onCancel()\">Cancel</button>\n <button mjButton variant=\"primary\" [disabled]=\"!selectedEntity\" (click)=\"onSelect()\">Select</button>\n </div>\n </div>\n `,\n styles: [`\n .dialog-wrapper {\n display: flex;\n flex-direction: column;\n height: 600px;\n width: 800px;\n }\n\n .dialog-header {\n padding: 16px;\n border-bottom: 1px solid var(--mj-border-default);\n }\n\n .dialog-header h3 {\n margin: 0;\n display: flex;\n align-items: center;\n gap: 8px;\n }\n\n .dialog-content {\n display: flex;\n flex-direction: column;\n flex: 1;\n padding: 16px;\n gap: 16px;\n overflow: hidden;\n }\n\n .dialog-actions {\n padding: 16px;\n border-top: 1px solid var(--mj-border-default);\n display: flex;\n gap: 8px;\n justify-content: flex-end;\n }\n\n .search-bar {\n display: flex;\n gap: 12px;\n }\n\n .search-input-wrapper {\n flex: 1;\n position: relative;\n display: flex;\n align-items: center;\n }\n\n .search-icon {\n position: absolute;\n left: 10px;\n color: var(--mj-text-muted);\n pointer-events: none;\n }\n\n .search-input {\n flex: 1;\n padding-left: 32px;\n }\n\n .loading-state,\n .empty-state {\n flex: 1;\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: center;\n color: var(--mj-text-muted);\n gap: 12px;\n }\n\n .loading-state i,\n .empty-state i {\n font-size: 48px;\n color: var(--mj-border-default);\n }\n\n .entity-list-container {\n flex: 1;\n overflow-y: auto;\n border: 1px solid var(--mj-border-default);\n border-radius: 8px;\n background: var(--mj-bg-surface-sunken);\n }\n\n .entity-list {\n padding: 8px;\n }\n\n .entity-item {\n display: flex;\n align-items: center;\n gap: 12px;\n padding: 12px;\n margin-bottom: 8px;\n background: var(--mj-bg-surface-card);\n border: 1px solid var(--mj-border-default);\n border-radius: 8px;\n cursor: pointer;\n transition: all 0.2s ease;\n }\n\n .entity-item:hover {\n border-color: var(--mj-brand-primary);\n box-shadow: 0 2px 8px rgba(0,0,0,0.08);\n }\n\n .entity-item.selected {\n background: color-mix(in srgb, var(--mj-brand-primary) 10%, var(--mj-bg-surface));\n border-color: var(--mj-brand-primary);\n }\n\n .item-icon {\n width: 36px;\n height: 36px;\n background: var(--mj-bg-surface-sunken);\n border-radius: 8px;\n display: flex;\n align-items: center;\n justify-content: center;\n flex-shrink: 0;\n }\n\n .item-icon i {\n color: var(--mj-brand-primary);\n font-size: 16px;\n }\n\n .item-content {\n flex: 1;\n min-width: 0;\n }\n\n .item-title {\n font-weight: 600;\n color: var(--mj-text-primary);\n margin-bottom: 4px;\n }\n\n .item-description {\n font-size: 13px;\n color: var(--mj-text-muted);\n line-height: 1.4;\n display: -webkit-box;\n -webkit-line-clamp: 2;\n -webkit-box-orient: vertical;\n overflow: hidden;\n }\n\n .item-status {\n margin-top: 4px;\n }\n\n .status-badge {\n font-size: 11px;\n padding: 2px 8px;\n border-radius: 12px;\n background: var(--mj-bg-surface-sunken);\n color: var(--mj-text-secondary);\n font-weight: 500;\n }\n\n .status-badge.active {\n background: #d4edda;\n color: #28a745;\n }\n `]\n})\nexport class EntitySelectorDialogComponent extends BaseAngularComponent implements OnInit {\n @Input() config!: EntitySelectorConfig;\n\n public entities: any[] = [];\n public filteredEntities: any[] = [];\n public selectedEntity: any = null;\n public searchText: string = '';\n public isLoading: boolean = true;\n\n @Output() DialogClosed = new EventEmitter<Record<string, unknown> | null>();\n\n constructor(\n private sharedService: SharedService\n ) {\n super();}\n\n async ngOnInit() {\n await this.loadEntities();\n }\n\n async loadEntities() {\n this.isLoading = true;\n try {\n const rv = RunView.FromMetadataProvider(this.ProviderToUse);\n const result = await rv.RunView({\n EntityName: this.config.entityName,\n ExtraFilter: this.config.filters,\n OrderBy: this.config.orderBy \n });\n\n this.entities = result.Results;\n this.filteredEntities = [...this.entities];\n } catch (error) {\n console.error('Error loading entities:', error);\n this.entities = [];\n this.filteredEntities = [];\n } finally {\n this.isLoading = false;\n }\n }\n\n onSearchChange() {\n if (!this.searchText) {\n this.filteredEntities = [...this.entities];\n } else {\n const searchLower = this.searchText.toLowerCase();\n this.filteredEntities = this.entities.filter(entity => {\n const displayValue = entity[this.config.displayField] || '';\n const descriptionValue = this.config.descriptionField ? (entity[this.config.descriptionField] || '') : '';\n return displayValue.toLowerCase().includes(searchLower) || \n descriptionValue.toLowerCase().includes(searchLower);\n });\n }\n }\n\n selectEntity(entity: any) {\n this.selectedEntity = entity;\n }\n\n onSelect() {\n if (this.selectedEntity) {\n this.DialogClosed.emit({ entity: this.selectedEntity });\n }\n }\n\n createNew() {\n this.DialogClosed.emit({ createNew: true });\n }\n\n IsEntitySelected(entity: Record<string, unknown>): boolean {\n return UUIDsEqual(this.selectedEntity?.ID, entity.ID as string);\n }\n\n onCancel() {\n this.DialogClosed.emit(null);\n }\n}"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"mjaimodel.form.component.d.ts","sourceRoot":"","sources":["../../../../../src/lib/generated/Entities/MJAIModel/mjaimodel.form.component.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,eAAe,EAAE,MAAM,+BAA+B,CAAC;AAEhE,OAAO,EAAE,iBAAiB,EAAE,MAAM,+BAA+B,CAAC;;AAGlE,qBAMa,sBAAuB,SAAQ,iBAAiB;IAClD,MAAM,EAAG,eAAe,CAAC;IAEjB,QAAQ;yCAHd,sBAAsB;2CAAtB,sBAAsB;
|
|
1
|
+
{"version":3,"file":"mjaimodel.form.component.d.ts","sourceRoot":"","sources":["../../../../../src/lib/generated/Entities/MJAIModel/mjaimodel.form.component.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,eAAe,EAAE,MAAM,+BAA+B,CAAC;AAEhE,OAAO,EAAE,iBAAiB,EAAE,MAAM,+BAA+B,CAAC;;AAGlE,qBAMa,sBAAuB,SAAQ,iBAAiB;IAClD,MAAM,EAAG,eAAe,CAAC;IAEjB,QAAQ;yCAHd,sBAAsB;2CAAtB,sBAAsB;CAqClC"}
|