@memberjunction/ng-dashboards 5.21.0 → 5.22.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (99) hide show
  1. package/dist/AI/components/autotagging/autotagging-pipeline-resource.component.d.ts +102 -0
  2. package/dist/AI/components/autotagging/autotagging-pipeline-resource.component.d.ts.map +1 -0
  3. package/dist/AI/components/autotagging/autotagging-pipeline-resource.component.js +583 -0
  4. package/dist/AI/components/autotagging/autotagging-pipeline-resource.component.js.map +1 -0
  5. package/dist/AI/components/duplicates/duplicate-detection-resource.component.d.ts +148 -0
  6. package/dist/AI/components/duplicates/duplicate-detection-resource.component.d.ts.map +1 -0
  7. package/dist/AI/components/duplicates/duplicate-detection-resource.component.js +773 -0
  8. package/dist/AI/components/duplicates/duplicate-detection-resource.component.js.map +1 -0
  9. package/dist/AI/components/vectors/vector-management-resource.component.d.ts +241 -0
  10. package/dist/AI/components/vectors/vector-management-resource.component.d.ts.map +1 -0
  11. package/dist/AI/components/vectors/vector-management-resource.component.js +1782 -0
  12. package/dist/AI/components/vectors/vector-management-resource.component.js.map +1 -0
  13. package/dist/AI/index.d.ts +3 -0
  14. package/dist/AI/index.d.ts.map +1 -1
  15. package/dist/AI/index.js +6 -0
  16. package/dist/AI/index.js.map +1 -1
  17. package/dist/AI/services/ai-instrumentation.service.d.ts +50 -7
  18. package/dist/AI/services/ai-instrumentation.service.d.ts.map +1 -1
  19. package/dist/AI/services/ai-instrumentation.service.js +161 -193
  20. package/dist/AI/services/ai-instrumentation.service.js.map +1 -1
  21. package/dist/DashboardBrowser/dashboard-browser-resource.component.d.ts +11 -0
  22. package/dist/DashboardBrowser/dashboard-browser-resource.component.d.ts.map +1 -1
  23. package/dist/DashboardBrowser/dashboard-browser-resource.component.js +57 -0
  24. package/dist/DashboardBrowser/dashboard-browser-resource.component.js.map +1 -1
  25. package/dist/DataExplorer/components/navigation-panel/navigation-panel.component.d.ts +1 -1
  26. package/dist/DataExplorer/data-explorer-dashboard.component.d.ts +10 -2
  27. package/dist/DataExplorer/data-explorer-dashboard.component.d.ts.map +1 -1
  28. package/dist/DataExplorer/data-explorer-dashboard.component.js +35 -11
  29. package/dist/DataExplorer/data-explorer-dashboard.component.js.map +1 -1
  30. package/dist/DataExplorer/data-explorer-resource.component.d.ts +1 -0
  31. package/dist/DataExplorer/data-explorer-resource.component.d.ts.map +1 -1
  32. package/dist/DataExplorer/data-explorer-resource.component.js +8 -4
  33. package/dist/DataExplorer/data-explorer-resource.component.js.map +1 -1
  34. package/dist/Home/home-dashboard.component.d.ts +181 -1
  35. package/dist/Home/home-dashboard.component.d.ts.map +1 -1
  36. package/dist/Home/home-dashboard.component.js +1704 -182
  37. package/dist/Home/home-dashboard.component.js.map +1 -1
  38. package/dist/KnowledgeHub/components/config/knowledge-config-resource.component.d.ts +121 -0
  39. package/dist/KnowledgeHub/components/config/knowledge-config-resource.component.d.ts.map +1 -0
  40. package/dist/KnowledgeHub/components/config/knowledge-config-resource.component.js +1058 -0
  41. package/dist/KnowledgeHub/components/config/knowledge-config-resource.component.js.map +1 -0
  42. package/dist/KnowledgeHub/components/results-detail/search-result-detail.component.d.ts +56 -0
  43. package/dist/KnowledgeHub/components/results-detail/search-result-detail.component.d.ts.map +1 -0
  44. package/dist/KnowledgeHub/components/results-detail/search-result-detail.component.js +291 -0
  45. package/dist/KnowledgeHub/components/results-detail/search-result-detail.component.js.map +1 -0
  46. package/dist/KnowledgeHub/components/search/knowledge-search-resource.component.d.ts +85 -0
  47. package/dist/KnowledgeHub/components/search/knowledge-search-resource.component.d.ts.map +1 -0
  48. package/dist/KnowledgeHub/components/search/knowledge-search-resource.component.js +461 -0
  49. package/dist/KnowledgeHub/components/search/knowledge-search-resource.component.js.map +1 -0
  50. package/dist/KnowledgeHub/index.d.ts +4 -0
  51. package/dist/KnowledgeHub/index.d.ts.map +1 -0
  52. package/dist/KnowledgeHub/index.js +5 -0
  53. package/dist/KnowledgeHub/index.js.map +1 -0
  54. package/dist/QueryBrowser/query-browser-resource.component.d.ts.map +1 -1
  55. package/dist/QueryBrowser/query-browser-resource.component.js +5 -1
  56. package/dist/QueryBrowser/query-browser-resource.component.js.map +1 -1
  57. package/dist/SystemDiagnostics/system-diagnostics.component.d.ts.map +1 -1
  58. package/dist/SystemDiagnostics/system-diagnostics.component.js +1 -0
  59. package/dist/SystemDiagnostics/system-diagnostics.component.js.map +1 -1
  60. package/dist/Testing/components/testing-dashboard-tab-resource.component.d.ts +7 -1
  61. package/dist/Testing/components/testing-dashboard-tab-resource.component.d.ts.map +1 -1
  62. package/dist/Testing/components/testing-dashboard-tab-resource.component.js +63 -8
  63. package/dist/Testing/components/testing-dashboard-tab-resource.component.js.map +1 -1
  64. package/dist/Testing/components/testing-dashboard-tab.component.d.ts +9 -1
  65. package/dist/Testing/components/testing-dashboard-tab.component.d.ts.map +1 -1
  66. package/dist/Testing/components/testing-dashboard-tab.component.js +109 -62
  67. package/dist/Testing/components/testing-dashboard-tab.component.js.map +1 -1
  68. package/dist/Testing/components/testing-explorer.component.d.ts +2 -1
  69. package/dist/Testing/components/testing-explorer.component.d.ts.map +1 -1
  70. package/dist/Testing/components/testing-explorer.component.js +241 -200
  71. package/dist/Testing/components/testing-explorer.component.js.map +1 -1
  72. package/dist/Testing/components/testing-runs-resource.component.d.ts +7 -1
  73. package/dist/Testing/components/testing-runs-resource.component.d.ts.map +1 -1
  74. package/dist/Testing/components/testing-runs-resource.component.js +63 -8
  75. package/dist/Testing/components/testing-runs-resource.component.js.map +1 -1
  76. package/dist/Testing/components/testing-runs.component.d.ts.map +1 -1
  77. package/dist/Testing/components/testing-runs.component.js +7 -5
  78. package/dist/Testing/components/testing-runs.component.js.map +1 -1
  79. package/dist/Testing/testing-dashboard.component.d.ts +9 -1
  80. package/dist/Testing/testing-dashboard.component.d.ts.map +1 -1
  81. package/dist/Testing/testing-dashboard.component.js +128 -59
  82. package/dist/Testing/testing-dashboard.component.js.map +1 -1
  83. package/dist/ai-dashboards.module.d.ts +26 -19
  84. package/dist/ai-dashboards.module.d.ts.map +1 -1
  85. package/dist/ai-dashboards.module.js +40 -5
  86. package/dist/ai-dashboards.module.js.map +1 -1
  87. package/dist/core-dashboards.module.d.ts +1 -0
  88. package/dist/core-dashboards.module.d.ts.map +1 -1
  89. package/dist/core-dashboards.module.js +3 -0
  90. package/dist/core-dashboards.module.js.map +1 -1
  91. package/dist/public-api.d.ts +4 -1
  92. package/dist/public-api.d.ts.map +1 -1
  93. package/dist/public-api.js +5 -1
  94. package/dist/public-api.js.map +1 -1
  95. package/dist/testing-dashboards.module.d.ts +5 -4
  96. package/dist/testing-dashboards.module.d.ts.map +1 -1
  97. package/dist/testing-dashboards.module.js +4 -0
  98. package/dist/testing-dashboards.module.js.map +1 -1
  99. package/package.json +44 -42
@@ -1 +1 @@
1
- {"version":3,"file":"ai-instrumentation.service.js","sourceRoot":"","sources":["../../../src/AI/services/ai-instrumentation.service.ts"],"names":[],"mappings":"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","sourcesContent":["import { Injectable } from '@angular/core';\nimport { BehaviorSubject, from, combineLatest } from 'rxjs';\nimport { switchMap, shareReplay, tap } from 'rxjs/operators';\nimport { RunView, Metadata } from '@memberjunction/core';\nimport { MJAIPromptRunEntityExtended, MJAIAgentRunEntityExtended } from '@memberjunction/ai-core-plus';\n\nexport interface DashboardKPIs {\n totalExecutions: number;\n activeExecutions: number;\n totalCost: number;\n costCurrency: string;\n avgExecutionTime: number;\n successRate: number;\n totalTokens: number;\n costPerToken: number;\n topModel: string;\n topAgent: string;\n errorRate: number;\n dailyCostBurn: number;\n}\n\nexport interface TrendData {\n timestamp: Date;\n executions: number;\n cost: number;\n tokens: number;\n avgTime: number;\n errors: number;\n}\n\nexport interface LiveExecution {\n id: string;\n type: 'prompt' | 'agent';\n name: string;\n status: 'running' | 'completed' | 'failed';\n startTime: Date;\n duration?: number;\n cost?: number;\n tokens?: number;\n progress?: number;\n}\n\nexport interface ExecutionDetails {\n id: string;\n type: 'prompt' | 'agent';\n name: string;\n status: string;\n startTime: Date;\n endTime?: Date;\n cost: number;\n tokens: number;\n success: boolean;\n errorMessage?: string;\n parentId?: string;\n children: ExecutionDetails[];\n model?: string;\n vendor?: string;\n}\n\nexport interface ChartData {\n executionTrends: TrendData[];\n costByModel: { model: string; cost: number; tokens: number }[];\n performanceMatrix: { agent: string; model: string; avgTime: number; successRate: number }[];\n tokenEfficiency: { inputTokens: number; outputTokens: number; cost: number; model: string }[];\n}\n\n@Injectable({\n providedIn: 'root'\n})\nexport class AIInstrumentationService {\n private readonly _dateRange$ = new BehaviorSubject<{ start: Date; end: Date }>({\n start: new Date(Date.now() - 24 * 60 * 60 * 1000), // Last 24 hours\n end: new Date()\n });\n \n private readonly _refreshTrigger$ = new BehaviorSubject<number>(0);\n private readonly _isLoading$ = new BehaviorSubject<boolean>(false);\n private readonly metadata = new Metadata();\n \n // Expose loading state as observable\n readonly isLoading$ = this._isLoading$.asObservable();\n\n constructor() {}\n\n // Main data streams - trigger on refresh or date range change\n readonly kpis$ = combineLatest([this._refreshTrigger$, this._dateRange$]).pipe(\n tap(() => this._isLoading$.next(true)),\n switchMap(() => from(this.loadKPIs())),\n tap(() => this.checkLoadingComplete()),\n shareReplay(1)\n );\n \n readonly trends$ = combineLatest([this._refreshTrigger$, this._dateRange$]).pipe(\n tap(() => this._isLoading$.next(true)),\n switchMap(() => from(this.loadTrends())),\n tap(() => this.checkLoadingComplete()),\n shareReplay(1)\n );\n \n readonly liveExecutions$ = combineLatest([this._refreshTrigger$, this._dateRange$]).pipe(\n tap(() => this._isLoading$.next(true)),\n switchMap(() => from(this.loadLiveExecutions())),\n tap(() => this.checkLoadingComplete()),\n shareReplay(1)\n );\n \n readonly chartData$ = combineLatest([this._refreshTrigger$, this._dateRange$]).pipe(\n tap(() => this._isLoading$.next(true)),\n switchMap(() => from(this.loadChartData())),\n tap(() => this.checkLoadingComplete()),\n shareReplay(1)\n );\n \n private loadingCount = 0;\n \n private checkLoadingComplete(): void {\n // Simple mechanism to track when all streams have completed\n setTimeout(() => {\n this._isLoading$.next(false);\n }, 100);\n }\n\n setDateRange(start: Date, end: Date): void {\n this._dateRange$.next({ start, end });\n // No need to manually refresh - streams now react to date range changes\n }\n \n refresh(): void {\n this._refreshTrigger$.next(this._refreshTrigger$.value + 1);\n }\n\n private async loadKPIs(): Promise<DashboardKPIs> {\n const { start, end } = this._dateRange$.value;\n const rv = new RunView();\n \n // Use RunViews to batch the queries\n const [promptResults, agentResults] = await rv.RunViews<any>([\n {\n EntityName: 'MJ: AI Prompt Runs',\n ExtraFilter: `RunAt >= '${start.toISOString()}' AND RunAt <= '${end.toISOString()}'` \n },\n {\n EntityName: 'MJ: AI Agent Runs',\n ExtraFilter: `StartedAt >= '${start.toISOString()}' AND StartedAt <= '${end.toISOString()}'` \n }\n ]);\n\n const promptRuns = promptResults.Results as MJAIPromptRunEntityExtended[];\n const agentRuns = agentResults.Results as MJAIAgentRunEntityExtended[];\n\n // Calculate KPIs\n const totalExecutions = promptRuns.length + agentRuns.length;\n const activeExecutions = this.countActiveExecutions(promptRuns, agentRuns);\n \n const totalCost = this.sumCosts(promptRuns, agentRuns);\n const totalTokens = this.sumTokens(promptRuns, agentRuns);\n const avgExecutionTime = this.calculateAverageExecutionTime(promptRuns, agentRuns);\n const successRate = this.calculateSuccessRate(promptRuns, agentRuns);\n const errorRate = 1 - successRate;\n \n const costPerToken = totalTokens > 0 ? totalCost / totalTokens : 0;\n const dailyCostBurn = this.calculateDailyCostBurn(promptRuns, agentRuns);\n \n const topModel = await this.getTopModel(promptRuns);\n const topAgent = await this.getTopAgent(agentRuns);\n\n return {\n totalExecutions,\n activeExecutions,\n totalCost,\n costCurrency: 'USD',\n avgExecutionTime,\n successRate,\n totalTokens,\n costPerToken,\n topModel,\n topAgent,\n errorRate,\n dailyCostBurn\n };\n }\n\n private async loadTrends(): Promise<TrendData[]> {\n const { start, end } = this._dateRange$.value;\n const hourlyBuckets = this.createHourlyBuckets(start, end);\n \n // Calculate bucket size based on the number of buckets\n const duration = end.getTime() - start.getTime();\n const hours = duration / (1000 * 60 * 60);\n let bucketSizeMs: number;\n if (hours <= 24) {\n bucketSizeMs = 60 * 60 * 1000; // 1 hour\n } else if (hours <= 24 * 7) {\n bucketSizeMs = 4 * 60 * 60 * 1000; // 4 hours\n } else {\n bucketSizeMs = 24 * 60 * 60 * 1000; // 24 hours\n }\n \n // Load all data in a single query instead of per-bucket\n const rv = new RunView();\n const [promptResults, agentResults] = await rv.RunViews<any>([\n {\n EntityName: 'MJ: AI Prompt Runs',\n ExtraFilter: `RunAt >= '${start.toISOString()}' AND RunAt <= '${end.toISOString()}'` \n },\n {\n EntityName: 'MJ: AI Agent Runs', \n ExtraFilter: `StartedAt >= '${start.toISOString()}' AND StartedAt <= '${end.toISOString()}'` \n }\n ]);\n\n const allPromptRuns = promptResults.Results as MJAIPromptRunEntityExtended[];\n const allAgentRuns = agentResults.Results as MJAIAgentRunEntityExtended[];\n \n // Now aggregate data into buckets on the client side\n const trends: TrendData[] = [];\n \n for (const bucket of hourlyBuckets) {\n const bucketStart = bucket;\n const bucketEnd = new Date(bucket.getTime() + bucketSizeMs);\n \n // Filter runs for this bucket\n const promptRuns = allPromptRuns.filter(r => {\n const runAt = new Date(r.RunAt);\n return runAt >= bucketStart && runAt < bucketEnd;\n });\n \n const agentRuns = allAgentRuns.filter(r => {\n const startedAt = new Date(r.StartedAt);\n return startedAt >= bucketStart && startedAt < bucketEnd;\n });\n\n trends.push({\n timestamp: bucket,\n executions: promptRuns.length + agentRuns.length,\n cost: this.sumCosts(promptRuns, agentRuns),\n tokens: this.sumTokens(promptRuns, agentRuns),\n avgTime: this.calculateAverageExecutionTime(promptRuns, agentRuns),\n errors: this.countErrors(promptRuns, agentRuns)\n });\n }\n\n return trends;\n }\n\n private async loadLiveExecutions(): Promise<LiveExecution[]> {\n const now = new Date();\n const recentTime = new Date(now.getTime() - 5 * 60 * 1000);\n \n const rv = new RunView();\n const [promptResults, agentResults] = await rv.RunViews<any>([\n {\n EntityName: 'MJ: AI Prompt Runs',\n ExtraFilter: `RunAt >= '${recentTime.toISOString()}'`,\n OrderBy: 'RunAt DESC' \n },\n {\n EntityName: 'MJ: AI Agent Runs',\n ExtraFilter: `StartedAt >= '${recentTime.toISOString()}'`,\n OrderBy: 'StartedAt DESC' \n }\n ]);\n\n const promptRuns = promptResults.Results as MJAIPromptRunEntityExtended[];\n const agentRuns = agentResults.Results as MJAIAgentRunEntityExtended[];\n\n const liveExecutions: LiveExecution[] = [];\n\n // Process prompt runs - they already have the prompt name in the Prompt field\n for (const run of promptRuns) {\n const isRunning = !run.CompletedAt && run.Success !== false;\n const duration = run.CompletedAt ? \n new Date(run.CompletedAt).getTime() - new Date(run.RunAt).getTime() : \n now.getTime() - new Date(run.RunAt).getTime();\n\n liveExecutions.push({\n id: run.ID,\n type: 'prompt',\n name: run.Prompt || 'Unnamed Prompt', // Use the Prompt field directly\n status: isRunning ? 'running' : (run.Success ? 'completed' : 'failed'),\n startTime: new Date(run.RunAt),\n duration: duration,\n cost: run.Cost || 0,\n tokens: run.TokensUsed || 0,\n progress: isRunning ? Math.min(90, (duration / 30000) * 100) : 100\n });\n }\n\n // Process agent runs - they already have the agent name in the Agent field\n for (const run of agentRuns) {\n const isRunning = run.Status === 'Running';\n const duration = run.CompletedAt ? \n new Date(run.CompletedAt).getTime() - new Date(run.StartedAt).getTime() : \n now.getTime() - new Date(run.StartedAt).getTime();\n\n liveExecutions.push({\n id: run.ID,\n type: 'agent',\n name: run.Agent || 'Unnamed Agent', // Use the Agent field directly\n status: run.Status.toLowerCase() as 'running' | 'completed' | 'failed',\n startTime: new Date(run.StartedAt),\n duration: duration,\n cost: run.TotalCost || 0,\n tokens: run.TotalTokensUsed || 0,\n progress: isRunning ? Math.min(90, (duration / 60000) * 100) : 100\n });\n }\n\n return liveExecutions.sort((a, b) => b.startTime.getTime() - a.startTime.getTime());\n }\n\n private async loadChartData(): Promise<ChartData> {\n const { start, end } = this._dateRange$.value;\n const dateFilter = `RunAt >= '${start.toISOString()}' AND RunAt <= '${end.toISOString()}'`;\n\n const promptRv = new RunView();\n const promptResults = await promptRv.RunView<MJAIPromptRunEntityExtended>({\n EntityName: 'MJ: AI Prompt Runs',\n ExtraFilter: dateFilter \n });\n\n const promptRuns = promptResults.Results;\n const executionTrends = await this.loadTrends();\n const costByModel = await this.analyzeCostByModel(promptRuns);\n const performanceMatrix = await this.analyzePerformanceMatrix(promptRuns);\n const tokenEfficiency = await this.analyzeTokenEfficiency(promptRuns);\n\n return {\n executionTrends,\n costByModel,\n performanceMatrix,\n tokenEfficiency\n };\n }\n\n // Helper methods\n private countActiveExecutions(promptRuns: MJAIPromptRunEntityExtended[], agentRuns: MJAIAgentRunEntityExtended[]): number {\n const activePrompts = promptRuns.filter(r => !r.CompletedAt && r.Success !== false).length;\n const activeAgents = agentRuns.filter(r => r.Status === 'Running').length;\n return activePrompts + activeAgents;\n }\n\n private sumCosts(promptRuns: MJAIPromptRunEntityExtended[], agentRuns: MJAIAgentRunEntityExtended[]): number {\n const promptCost = promptRuns.reduce((sum, r) => sum + (r.Cost || 0), 0);\n const agentCost = agentRuns.reduce((sum, r) => sum + (r.TotalCost || 0), 0);\n return promptCost + agentCost;\n }\n\n private sumTokens(promptRuns: MJAIPromptRunEntityExtended[], agentRuns: MJAIAgentRunEntityExtended[]): number {\n const promptTokens = promptRuns.reduce((sum, r) => sum + (r.TokensUsed || 0), 0);\n const agentTokens = agentRuns.reduce((sum, r) => sum + (r.TotalTokensUsed || 0), 0);\n return promptTokens + agentTokens;\n }\n\n private calculateAverageExecutionTime(promptRuns: MJAIPromptRunEntityExtended[], agentRuns: MJAIAgentRunEntityExtended[]): number {\n const promptTimes = promptRuns\n .filter(r => r.ExecutionTimeMS)\n .map(r => r.ExecutionTimeMS!);\n \n const agentTimes = agentRuns\n .filter(r => r.StartedAt && r.CompletedAt)\n .map(r => new Date(r.CompletedAt!).getTime() - new Date(r.StartedAt).getTime());\n\n const allTimes = [...promptTimes, ...agentTimes];\n return allTimes.length > 0 ? allTimes.reduce((sum, time) => sum + time, 0) / allTimes.length : 0;\n }\n\n private calculateSuccessRate(promptRuns: MJAIPromptRunEntityExtended[], agentRuns: MJAIAgentRunEntityExtended[]): number {\n const totalExecutions = promptRuns.length + agentRuns.length;\n if (totalExecutions === 0) return 1;\n\n const successfulPrompts = promptRuns.filter(r => r.Success).length;\n const successfulAgents = agentRuns.filter(r => r.Success).length;\n \n return (successfulPrompts + successfulAgents) / totalExecutions;\n }\n\n private countErrors(promptRuns: MJAIPromptRunEntityExtended[], agentRuns: MJAIAgentRunEntityExtended[]): number {\n const promptErrors = promptRuns.filter(r => !r.Success).length;\n const agentErrors = agentRuns.filter(r => !r.Success).length;\n return promptErrors + agentErrors;\n }\n\n private calculateDailyCostBurn(promptRuns: MJAIPromptRunEntityExtended[], agentRuns: MJAIAgentRunEntityExtended[]): number {\n const now = new Date();\n const dayStart = new Date(now.getFullYear(), now.getMonth(), now.getDate());\n \n const todayPrompts = promptRuns.filter(r => new Date(r.RunAt) >= dayStart);\n const todayAgents = agentRuns.filter(r => new Date(r.StartedAt) >= dayStart);\n \n return this.sumCosts(todayPrompts, todayAgents);\n }\n\n private createHourlyBuckets(start: Date, end: Date): Date[] {\n const buckets: Date[] = [];\n const current = new Date(start);\n const duration = end.getTime() - start.getTime();\n const hours = duration / (1000 * 60 * 60);\n \n // Determine bucket size based on duration\n let bucketSize: number;\n if (hours <= 24) {\n // For up to 24 hours, use hourly buckets\n bucketSize = 1;\n current.setMinutes(0, 0, 0);\n } else if (hours <= 24 * 7) {\n // For up to 7 days, use 4-hour buckets\n bucketSize = 4;\n current.setHours(Math.floor(current.getHours() / 4) * 4, 0, 0, 0);\n } else {\n // For more than 7 days, use daily buckets\n bucketSize = 24;\n current.setHours(0, 0, 0, 0);\n }\n \n while (current < end) {\n buckets.push(new Date(current));\n current.setHours(current.getHours() + bucketSize);\n }\n \n return buckets;\n }\n\n\n\n private async getTopModel(promptRuns: MJAIPromptRunEntityExtended[]): Promise<string> {\n const modelCounts = new Map<string, number>();\n const modelNames = new Map<string, string>();\n \n // Count models and track their names from the Model field\n for (const run of promptRuns) {\n if (run.ModelID && run.Model) {\n const count = modelCounts.get(run.ModelID) || 0;\n modelCounts.set(run.ModelID, count + 1);\n modelNames.set(run.ModelID, run.Model);\n }\n }\n\n if (modelCounts.size === 0) return 'N/A';\n\n const topModelId = Array.from(modelCounts.entries())\n .sort(([,a], [,b]) => b - a)[0][0];\n\n return modelNames.get(topModelId) || 'Unknown Model';\n }\n\n private async getTopAgent(agentRuns: MJAIAgentRunEntityExtended[]): Promise<string> {\n const agentCounts = new Map<string, number>();\n const agentNames = new Map<string, string>();\n \n // Count agents and track their names from the Agent field\n for (const run of agentRuns) {\n if (run.AgentID && run.Agent) {\n const count = agentCounts.get(run.AgentID) || 0;\n agentCounts.set(run.AgentID, count + 1);\n agentNames.set(run.AgentID, run.Agent);\n }\n }\n\n if (agentCounts.size === 0) return 'N/A';\n\n const topAgentId = Array.from(agentCounts.entries())\n .sort(([,a], [,b]) => b - a)[0][0];\n\n return agentNames.get(topAgentId) || 'Unknown Agent';\n }\n\n private async analyzeCostByModel(promptRuns: MJAIPromptRunEntityExtended[]): Promise<{ model: string; cost: number; tokens: number }[]> {\n const modelStats = new Map<string, { cost: number; tokens: number; name: string }>();\n\n for (const run of promptRuns) {\n if (run.ModelID && run.Model) {\n const existing = modelStats.get(run.ModelID) || { cost: 0, tokens: 0, name: run.Model };\n existing.cost += run.Cost || 0;\n existing.tokens += run.TokensUsed || 0;\n modelStats.set(run.ModelID, existing);\n }\n }\n\n const results = [];\n for (const [modelId, stats] of modelStats.entries()) {\n results.push({\n model: stats.name,\n cost: stats.cost,\n tokens: stats.tokens\n });\n }\n\n return results.sort((a, b) => b.cost - a.cost);\n }\n\n private async analyzePerformanceMatrix(promptRuns: MJAIPromptRunEntityExtended[]): Promise<{ agent: string; model: string; avgTime: number; successRate: number }[]> {\n const combinations = new Map<string, { times: number[]; successes: number; total: number; agentName: string; modelName: string }>();\n\n for (const run of promptRuns) {\n if (run.AgentID && run.ModelID && run.ExecutionTimeMS) {\n const key = `${run.AgentID}:${run.ModelID}`;\n const existing = combinations.get(key) || { \n times: [], \n successes: 0, \n total: 0,\n agentName: run.Agent || 'Unknown Agent',\n modelName: run.Model || 'Unknown Model'\n };\n \n existing.times.push(run.ExecutionTimeMS);\n existing.total += 1;\n if (run.Success) existing.successes += 1;\n \n combinations.set(key, existing);\n }\n }\n\n const results = [];\n for (const [key, data] of combinations.entries()) {\n results.push({\n agent: data.agentName,\n model: data.modelName,\n avgTime: data.times.reduce((sum, time) => sum + time, 0) / data.times.length,\n successRate: data.successes / data.total\n });\n }\n\n return results;\n }\n\n private async analyzeTokenEfficiency(promptRuns: MJAIPromptRunEntityExtended[]): Promise<{ inputTokens: number; outputTokens: number; cost: number; model: string }[]> {\n const modelEfficiency = new Map<string, { input: number; output: number; cost: number; name: string }>();\n\n for (const run of promptRuns) {\n if (run.ModelID && run.Model && run.TokensPrompt && run.TokensCompletion) {\n const existing = modelEfficiency.get(run.ModelID) || { input: 0, output: 0, cost: 0, name: run.Model };\n existing.input += run.TokensPrompt;\n existing.output += run.TokensCompletion;\n existing.cost += run.Cost || 0;\n modelEfficiency.set(run.ModelID, existing);\n }\n }\n\n const results = [];\n for (const [modelId, data] of modelEfficiency.entries()) {\n results.push({\n inputTokens: data.input,\n outputTokens: data.output,\n cost: data.cost,\n model: data.name\n });\n }\n\n return results;\n }\n\n\n async getExecutionDetails(executionId: string, type: 'prompt' | 'agent'): Promise<ExecutionDetails | null> {\n try {\n if (type === 'prompt') {\n return await this.getPromptExecutionDetails(executionId);\n } else {\n return await this.getAgentExecutionDetails(executionId);\n }\n } catch (error) {\n console.error('Error loading execution details:', error);\n return null;\n }\n }\n\n private async getPromptExecutionDetails(promptRunId: string): Promise<ExecutionDetails> {\n const rv = new RunView();\n const result = await rv.RunView<MJAIPromptRunEntityExtended>({\n EntityName: 'MJ: AI Prompt Runs',\n ExtraFilter: `ID = '${promptRunId}'` \n });\n\n const run = result.Results[0];\n if (!run) throw new Error('Prompt run not found');\n\n const childrenResult = await rv.RunView<MJAIPromptRunEntityExtended>({\n EntityName: 'MJ: AI Prompt Runs',\n ExtraFilter: `ParentID = '${promptRunId}'` \n });\n\n const children = await Promise.all(\n childrenResult.Results.map(child => this.getPromptExecutionDetails(child.ID))\n );\n\n return {\n id: run.ID,\n type: 'prompt',\n name: run.Prompt || 'Unnamed Prompt',\n status: run.Success ? 'completed' : 'failed',\n startTime: new Date(run.RunAt),\n endTime: run.CompletedAt ? new Date(run.CompletedAt) : undefined,\n cost: run.Cost || 0,\n tokens: run.TokensUsed || 0,\n success: run.Success || false,\n errorMessage: run.ErrorMessage || undefined,\n parentId: run.ParentID || undefined,\n children,\n model: run.Model || undefined\n };\n }\n\n private async getAgentExecutionDetails(agentRunId: string): Promise<ExecutionDetails> {\n const rv = new RunView();\n const result = await rv.RunView<MJAIAgentRunEntityExtended>({\n EntityName: 'MJ: AI Agent Runs',\n ExtraFilter: `ID = '${agentRunId}'` \n });\n\n const run = result.Results[0];\n if (!run) throw new Error('Agent run not found');\n\n const childrenResult = await rv.RunView<MJAIAgentRunEntityExtended>({\n EntityName: 'MJ: AI Agent Runs',\n ExtraFilter: `ParentRunID = '${agentRunId}'` \n });\n\n const children = await Promise.all(\n childrenResult.Results.map(child => this.getAgentExecutionDetails(child.ID))\n );\n\n return {\n id: run.ID,\n type: 'agent',\n name: run.Agent || 'Unnamed Agent',\n status: run.Status.toLowerCase(),\n startTime: new Date(run.StartedAt),\n endTime: run.CompletedAt ? new Date(run.CompletedAt) : undefined,\n cost: run.TotalCost || 0,\n tokens: run.TotalTokensUsed || 0,\n success: run.Success || false,\n errorMessage: run.ErrorMessage || undefined,\n parentId: run.ParentRunID || undefined,\n children\n };\n }\n}"]}
1
+ {"version":3,"file":"ai-instrumentation.service.js","sourceRoot":"","sources":["../../../src/AI/services/ai-instrumentation.service.ts"],"names":[],"mappings":"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","sourcesContent":["import { Injectable } from '@angular/core';\nimport { BehaviorSubject, from, combineLatest } from 'rxjs';\nimport { switchMap, shareReplay, tap, map } from 'rxjs/operators';\nimport { RunView } from '@memberjunction/core';\n\n/**\n * Lightweight record types for dashboard aggregation.\n * We use ResultType: 'simple' with explicit Fields to avoid pulling\n * large text columns (InputData, OutputData, etc.) that can blow up\n * the GraphQL response beyond V8's string limit.\n */\nexport interface PromptRunRecord {\n ID: string;\n RunAt: string;\n CompletedAt: string | null;\n Success: boolean;\n Cost: number | null;\n TokensUsed: number | null;\n TokensPrompt: number | null;\n TokensCompletion: number | null;\n ExecutionTimeMS: number | null;\n ModelID: string | null;\n Model: string | null;\n AgentID: string | null;\n Agent: string | null;\n Prompt: string | null;\n ErrorMessage: string | null;\n}\n\nexport interface AgentRunRecord {\n ID: string;\n StartedAt: string;\n CompletedAt: string | null;\n Status: string;\n Success: boolean;\n TotalCost: number | null;\n TotalTokensUsed: number | null;\n AgentID: string | null;\n Agent: string | null;\n ErrorMessage: string | null;\n}\n\n/** Fields to request for prompt runs — only what the dashboard needs for aggregation */\nconst PROMPT_RUN_FIELDS = [\n 'ID', 'RunAt', 'CompletedAt', 'Success', 'Cost', 'TokensUsed',\n 'TokensPrompt', 'TokensCompletion', 'ExecutionTimeMS',\n 'ModelID', 'Model', 'AgentID', 'Agent', 'Prompt', 'ErrorMessage'\n];\n\n/** Fields to request for agent runs — only what the dashboard needs for aggregation */\nconst AGENT_RUN_FIELDS = [\n 'ID', 'StartedAt', 'CompletedAt', 'Status', 'Success',\n 'TotalCost', 'TotalTokensUsed', 'AgentID', 'Agent', 'ErrorMessage'\n];\n\nexport interface DashboardKPIs {\n totalExecutions: number;\n activeExecutions: number;\n totalCost: number;\n costCurrency: string;\n avgExecutionTime: number;\n successRate: number;\n totalTokens: number;\n costPerToken: number;\n topModel: string;\n topAgent: string;\n errorRate: number;\n dailyCostBurn: number;\n}\n\nexport interface TrendData {\n timestamp: Date;\n executions: number;\n cost: number;\n tokens: number;\n avgTime: number;\n errors: number;\n}\n\nexport interface LiveExecution {\n id: string;\n type: 'prompt' | 'agent';\n name: string;\n status: 'running' | 'completed' | 'failed';\n startTime: Date;\n duration?: number;\n cost?: number;\n tokens?: number;\n progress?: number;\n}\n\nexport interface ExecutionDetails {\n id: string;\n type: 'prompt' | 'agent';\n name: string;\n status: string;\n startTime: Date;\n endTime?: Date;\n cost: number;\n tokens: number;\n success: boolean;\n errorMessage?: string;\n parentId?: string;\n children: ExecutionDetails[];\n model?: string;\n vendor?: string;\n}\n\nexport interface ChartData {\n executionTrends: TrendData[];\n costByModel: { model: string; cost: number; tokens: number }[];\n performanceMatrix: { agent: string; model: string; avgTime: number; successRate: number }[];\n tokenEfficiency: { inputTokens: number; outputTokens: number; cost: number; model: string }[];\n}\n\n/** Internal shape for the single data load that all derived streams share */\ninterface DashboardRawData {\n promptRuns: PromptRunRecord[];\n agentRuns: AgentRunRecord[];\n livePromptRuns: PromptRunRecord[];\n liveAgentRuns: AgentRunRecord[];\n}\n\n@Injectable({\n providedIn: 'root'\n})\nexport class AIInstrumentationService {\n private readonly _dateRange$ = new BehaviorSubject<{ start: Date; end: Date }>({\n start: new Date(Date.now() - 24 * 60 * 60 * 1000), // Last 24 hours\n end: new Date()\n });\n\n private readonly _refreshTrigger$ = new BehaviorSubject<number>(0);\n private readonly _isLoading$ = new BehaviorSubject<boolean>(false);\n\n // Expose loading state as observable\n readonly isLoading$ = this._isLoading$.asObservable();\n\n constructor() {}\n\n /**\n * Single data load: fetches prompt runs and agent runs ONCE per refresh/date-range change.\n * All downstream streams derive from this shared dataset.\n */\n private readonly rawData$ = combineLatest([this._refreshTrigger$, this._dateRange$]).pipe(\n tap(() => this._isLoading$.next(true)),\n switchMap(() => from(this.loadAllData())),\n tap(() => this._isLoading$.next(false)),\n shareReplay(1)\n );\n\n // Derived streams — pure in-memory transforms, no extra DB queries\n readonly kpis$ = this.rawData$.pipe(\n map(data => this.computeKPIs(data.promptRuns, data.agentRuns)),\n shareReplay(1)\n );\n\n readonly trends$ = this.rawData$.pipe(\n map(data => this.computeTrends(data.promptRuns, data.agentRuns)),\n shareReplay(1)\n );\n\n readonly liveExecutions$ = this.rawData$.pipe(\n map(data => this.computeLiveExecutions(data.livePromptRuns, data.liveAgentRuns)),\n shareReplay(1)\n );\n\n readonly chartData$ = combineLatest([this.rawData$, this.trends$]).pipe(\n map(([data, executionTrends]) => this.computeChartData(data.promptRuns, executionTrends)),\n shareReplay(1)\n );\n\n setDateRange(start: Date, end: Date): void {\n this._dateRange$.next({ start, end });\n }\n\n refresh(): void {\n this._refreshTrigger$.next(this._refreshTrigger$.value + 1);\n }\n\n /**\n * Single batch query that loads all data needed by every dashboard widget.\n * Uses ResultType: 'simple' with explicit Fields to minimize payload size.\n */\n private async loadAllData(): Promise<DashboardRawData> {\n const { start, end } = this._dateRange$.value;\n const now = new Date();\n const recentTime = new Date(now.getTime() - 5 * 60 * 1000);\n\n const rv = new RunView();\n const [promptResults, agentResults, livePromptResults, liveAgentResults] = await rv.RunViews<PromptRunRecord | AgentRunRecord>([\n {\n EntityName: 'MJ: AI Prompt Runs',\n ExtraFilter: `RunAt >= '${start.toISOString()}' AND RunAt <= '${end.toISOString()}'`,\n Fields: PROMPT_RUN_FIELDS,\n ResultType: 'simple'\n },\n {\n EntityName: 'MJ: AI Agent Runs',\n ExtraFilter: `StartedAt >= '${start.toISOString()}' AND StartedAt <= '${end.toISOString()}'`,\n Fields: AGENT_RUN_FIELDS,\n ResultType: 'simple'\n },\n {\n EntityName: 'MJ: AI Prompt Runs',\n ExtraFilter: `RunAt >= '${recentTime.toISOString()}'`,\n OrderBy: 'RunAt DESC',\n Fields: PROMPT_RUN_FIELDS,\n ResultType: 'simple'\n },\n {\n EntityName: 'MJ: AI Agent Runs',\n ExtraFilter: `StartedAt >= '${recentTime.toISOString()}'`,\n OrderBy: 'StartedAt DESC',\n Fields: AGENT_RUN_FIELDS,\n ResultType: 'simple'\n }\n ]);\n\n return {\n promptRuns: promptResults.Results as PromptRunRecord[],\n agentRuns: agentResults.Results as AgentRunRecord[],\n livePromptRuns: livePromptResults.Results as PromptRunRecord[],\n liveAgentRuns: liveAgentResults.Results as AgentRunRecord[]\n };\n }\n\n // ─── KPI Computation ─────────────────────────────────────────────\n\n private computeKPIs(promptRuns: PromptRunRecord[], agentRuns: AgentRunRecord[]): DashboardKPIs {\n const totalExecutions = promptRuns.length + agentRuns.length;\n const activeExecutions = this.countActiveExecutions(promptRuns, agentRuns);\n const totalCost = this.sumCosts(promptRuns, agentRuns);\n const totalTokens = this.sumTokens(promptRuns, agentRuns);\n const avgExecutionTime = this.calculateAverageExecutionTime(promptRuns, agentRuns);\n const successRate = this.calculateSuccessRate(promptRuns, agentRuns);\n\n return {\n totalExecutions,\n activeExecutions,\n totalCost,\n costCurrency: 'USD',\n avgExecutionTime,\n successRate,\n totalTokens,\n costPerToken: totalTokens > 0 ? totalCost / totalTokens : 0,\n topModel: this.getTopModel(promptRuns),\n topAgent: this.getTopAgent(agentRuns),\n errorRate: 1 - successRate,\n dailyCostBurn: this.calculateDailyCostBurn(promptRuns, agentRuns)\n };\n }\n\n // ─── Trend Computation ────────────────────────────────────────────\n\n private computeTrends(promptRuns: PromptRunRecord[], agentRuns: AgentRunRecord[]): TrendData[] {\n const { start, end } = this._dateRange$.value;\n const bucketSizeMs = this.getBucketSizeMs(start, end);\n const hourlyBuckets = this.createHourlyBuckets(start, end);\n\n return hourlyBuckets.map(bucket => {\n const bucketEnd = new Date(bucket.getTime() + bucketSizeMs);\n const bucketPrompts = promptRuns.filter(r => {\n const runAt = new Date(r.RunAt);\n return runAt >= bucket && runAt < bucketEnd;\n });\n const bucketAgents = agentRuns.filter(r => {\n const startedAt = new Date(r.StartedAt);\n return startedAt >= bucket && startedAt < bucketEnd;\n });\n\n return {\n timestamp: bucket,\n executions: bucketPrompts.length + bucketAgents.length,\n cost: this.sumCosts(bucketPrompts, bucketAgents),\n tokens: this.sumTokens(bucketPrompts, bucketAgents),\n avgTime: this.calculateAverageExecutionTime(bucketPrompts, bucketAgents),\n errors: this.countErrors(bucketPrompts, bucketAgents)\n };\n });\n }\n\n // ─── Live Executions Computation ──────────────────────────────────\n\n private computeLiveExecutions(promptRuns: PromptRunRecord[], agentRuns: AgentRunRecord[]): LiveExecution[] {\n const now = new Date();\n const liveExecutions: LiveExecution[] = [];\n\n for (const run of promptRuns) {\n const isRunning = !run.CompletedAt && run.Success !== false;\n const duration = run.CompletedAt\n ? new Date(run.CompletedAt).getTime() - new Date(run.RunAt).getTime()\n : now.getTime() - new Date(run.RunAt).getTime();\n\n liveExecutions.push({\n id: run.ID,\n type: 'prompt',\n name: run.Prompt || 'Unnamed Prompt',\n status: isRunning ? 'running' : (run.Success ? 'completed' : 'failed'),\n startTime: new Date(run.RunAt),\n duration,\n cost: run.Cost || 0,\n tokens: run.TokensUsed || 0,\n progress: isRunning ? Math.min(90, (duration / 30000) * 100) : 100\n });\n }\n\n for (const run of agentRuns) {\n const isRunning = run.Status === 'Running';\n const duration = run.CompletedAt\n ? new Date(run.CompletedAt).getTime() - new Date(run.StartedAt).getTime()\n : now.getTime() - new Date(run.StartedAt).getTime();\n\n liveExecutions.push({\n id: run.ID,\n type: 'agent',\n name: run.Agent || 'Unnamed Agent',\n status: run.Status.toLowerCase() as 'running' | 'completed' | 'failed',\n startTime: new Date(run.StartedAt),\n duration,\n cost: run.TotalCost || 0,\n tokens: run.TotalTokensUsed || 0,\n progress: isRunning ? Math.min(90, (duration / 60000) * 100) : 100\n });\n }\n\n return liveExecutions.sort((a, b) => b.startTime.getTime() - a.startTime.getTime());\n }\n\n // ─── Chart Data Computation ───────────────────────────────────────\n\n private computeChartData(promptRuns: PromptRunRecord[], executionTrends: TrendData[]): ChartData {\n return {\n executionTrends,\n costByModel: this.analyzeCostByModel(promptRuns),\n performanceMatrix: this.analyzePerformanceMatrix(promptRuns),\n tokenEfficiency: this.analyzeTokenEfficiency(promptRuns)\n };\n }\n\n // ─── Helper Methods ───────────────────────────────────────────────\n\n private countActiveExecutions(promptRuns: PromptRunRecord[], agentRuns: AgentRunRecord[]): number {\n const activePrompts = promptRuns.filter(r => !r.CompletedAt && r.Success !== false).length;\n const activeAgents = agentRuns.filter(r => r.Status === 'Running').length;\n return activePrompts + activeAgents;\n }\n\n private sumCosts(promptRuns: PromptRunRecord[], agentRuns: AgentRunRecord[]): number {\n const promptCost = promptRuns.reduce((sum, r) => sum + (r.Cost || 0), 0);\n const agentCost = agentRuns.reduce((sum, r) => sum + (r.TotalCost || 0), 0);\n return promptCost + agentCost;\n }\n\n private sumTokens(promptRuns: PromptRunRecord[], agentRuns: AgentRunRecord[]): number {\n const promptTokens = promptRuns.reduce((sum, r) => sum + (r.TokensUsed || 0), 0);\n const agentTokens = agentRuns.reduce((sum, r) => sum + (r.TotalTokensUsed || 0), 0);\n return promptTokens + agentTokens;\n }\n\n private calculateAverageExecutionTime(promptRuns: PromptRunRecord[], agentRuns: AgentRunRecord[]): number {\n const promptTimes = promptRuns\n .filter(r => r.ExecutionTimeMS)\n .map(r => r.ExecutionTimeMS!);\n\n const agentTimes = agentRuns\n .filter(r => r.StartedAt && r.CompletedAt)\n .map(r => new Date(r.CompletedAt!).getTime() - new Date(r.StartedAt).getTime());\n\n const allTimes = [...promptTimes, ...agentTimes];\n return allTimes.length > 0 ? allTimes.reduce((sum, time) => sum + time, 0) / allTimes.length : 0;\n }\n\n private calculateSuccessRate(promptRuns: PromptRunRecord[], agentRuns: AgentRunRecord[]): number {\n const totalExecutions = promptRuns.length + agentRuns.length;\n if (totalExecutions === 0) return 1;\n\n const successfulPrompts = promptRuns.filter(r => r.Success).length;\n const successfulAgents = agentRuns.filter(r => r.Success).length;\n\n return (successfulPrompts + successfulAgents) / totalExecutions;\n }\n\n private countErrors(promptRuns: PromptRunRecord[], agentRuns: AgentRunRecord[]): number {\n const promptErrors = promptRuns.filter(r => !r.Success).length;\n const agentErrors = agentRuns.filter(r => !r.Success).length;\n return promptErrors + agentErrors;\n }\n\n private calculateDailyCostBurn(promptRuns: PromptRunRecord[], agentRuns: AgentRunRecord[]): number {\n const now = new Date();\n const dayStart = new Date(now.getFullYear(), now.getMonth(), now.getDate());\n\n const todayPrompts = promptRuns.filter(r => new Date(r.RunAt) >= dayStart);\n const todayAgents = agentRuns.filter(r => new Date(r.StartedAt) >= dayStart);\n\n return this.sumCosts(todayPrompts, todayAgents);\n }\n\n private getBucketSizeMs(start: Date, end: Date): number {\n const hours = (end.getTime() - start.getTime()) / (1000 * 60 * 60);\n if (hours <= 24) return 60 * 60 * 1000; // 1 hour\n if (hours <= 24 * 7) return 4 * 60 * 60 * 1000; // 4 hours\n return 24 * 60 * 60 * 1000; // 24 hours\n }\n\n private createHourlyBuckets(start: Date, end: Date): Date[] {\n const buckets: Date[] = [];\n const current = new Date(start);\n const hours = (end.getTime() - start.getTime()) / (1000 * 60 * 60);\n\n let bucketSize: number;\n if (hours <= 24) {\n bucketSize = 1;\n current.setMinutes(0, 0, 0);\n } else if (hours <= 24 * 7) {\n bucketSize = 4;\n current.setHours(Math.floor(current.getHours() / 4) * 4, 0, 0, 0);\n } else {\n bucketSize = 24;\n current.setHours(0, 0, 0, 0);\n }\n\n while (current < end) {\n buckets.push(new Date(current));\n current.setHours(current.getHours() + bucketSize);\n }\n\n return buckets;\n }\n\n private getTopModel(promptRuns: PromptRunRecord[]): string {\n const modelCounts = new Map<string, number>();\n const modelNames = new Map<string, string>();\n\n for (const run of promptRuns) {\n if (run.ModelID && run.Model) {\n modelCounts.set(run.ModelID, (modelCounts.get(run.ModelID) || 0) + 1);\n modelNames.set(run.ModelID, run.Model);\n }\n }\n\n if (modelCounts.size === 0) return 'N/A';\n\n const topModelId = Array.from(modelCounts.entries())\n .sort(([,a], [,b]) => b - a)[0][0];\n\n return modelNames.get(topModelId) || 'Unknown Model';\n }\n\n private getTopAgent(agentRuns: AgentRunRecord[]): string {\n const agentCounts = new Map<string, number>();\n const agentNames = new Map<string, string>();\n\n for (const run of agentRuns) {\n if (run.AgentID && run.Agent) {\n agentCounts.set(run.AgentID, (agentCounts.get(run.AgentID) || 0) + 1);\n agentNames.set(run.AgentID, run.Agent);\n }\n }\n\n if (agentCounts.size === 0) return 'N/A';\n\n const topAgentId = Array.from(agentCounts.entries())\n .sort(([,a], [,b]) => b - a)[0][0];\n\n return agentNames.get(topAgentId) || 'Unknown Agent';\n }\n\n private analyzeCostByModel(promptRuns: PromptRunRecord[]): { model: string; cost: number; tokens: number }[] {\n const modelStats = new Map<string, { cost: number; tokens: number; name: string }>();\n\n for (const run of promptRuns) {\n if (run.ModelID && run.Model) {\n const existing = modelStats.get(run.ModelID) || { cost: 0, tokens: 0, name: run.Model };\n existing.cost += run.Cost || 0;\n existing.tokens += run.TokensUsed || 0;\n modelStats.set(run.ModelID, existing);\n }\n }\n\n return Array.from(modelStats.values())\n .map(stats => ({ model: stats.name, cost: stats.cost, tokens: stats.tokens }))\n .sort((a, b) => b.cost - a.cost);\n }\n\n private analyzePerformanceMatrix(promptRuns: PromptRunRecord[]): { agent: string; model: string; avgTime: number; successRate: number }[] {\n const combinations = new Map<string, { times: number[]; successes: number; total: number; agentName: string; modelName: string }>();\n\n for (const run of promptRuns) {\n if (run.AgentID && run.ModelID && run.ExecutionTimeMS) {\n const key = `${run.AgentID}:${run.ModelID}`;\n const existing = combinations.get(key) || {\n times: [], successes: 0, total: 0,\n agentName: run.Agent || 'Unknown Agent',\n modelName: run.Model || 'Unknown Model'\n };\n\n existing.times.push(run.ExecutionTimeMS);\n existing.total += 1;\n if (run.Success) existing.successes += 1;\n combinations.set(key, existing);\n }\n }\n\n return Array.from(combinations.values()).map(data => ({\n agent: data.agentName,\n model: data.modelName,\n avgTime: data.times.reduce((sum, time) => sum + time, 0) / data.times.length,\n successRate: data.successes / data.total\n }));\n }\n\n private analyzeTokenEfficiency(promptRuns: PromptRunRecord[]): { inputTokens: number; outputTokens: number; cost: number; model: string }[] {\n const modelEfficiency = new Map<string, { input: number; output: number; cost: number; name: string }>();\n\n for (const run of promptRuns) {\n if (run.ModelID && run.Model && run.TokensPrompt && run.TokensCompletion) {\n const existing = modelEfficiency.get(run.ModelID) || { input: 0, output: 0, cost: 0, name: run.Model };\n existing.input += run.TokensPrompt;\n existing.output += run.TokensCompletion;\n existing.cost += run.Cost || 0;\n modelEfficiency.set(run.ModelID, existing);\n }\n }\n\n return Array.from(modelEfficiency.values()).map(data => ({\n inputTokens: data.input,\n outputTokens: data.output,\n cost: data.cost,\n model: data.name\n }));\n }\n\n // ─── Execution Details (on-demand, not part of initial load) ──────\n\n async getExecutionDetails(executionId: string, type: 'prompt' | 'agent'): Promise<ExecutionDetails | null> {\n try {\n if (type === 'prompt') {\n return await this.getPromptExecutionDetails(executionId);\n } else {\n return await this.getAgentExecutionDetails(executionId);\n }\n } catch (error) {\n console.error('Error loading execution details:', error);\n return null;\n }\n }\n\n private async getPromptExecutionDetails(promptRunId: string): Promise<ExecutionDetails> {\n const rv = new RunView();\n const [result, childrenResult] = await rv.RunViews<PromptRunRecord>([\n {\n EntityName: 'MJ: AI Prompt Runs',\n ExtraFilter: `ID = '${promptRunId}'`,\n Fields: PROMPT_RUN_FIELDS,\n ResultType: 'simple'\n },\n {\n EntityName: 'MJ: AI Prompt Runs',\n ExtraFilter: `ParentID = '${promptRunId}'`,\n Fields: PROMPT_RUN_FIELDS,\n ResultType: 'simple'\n }\n ]);\n\n const run = result.Results[0];\n if (!run) throw new Error('Prompt run not found');\n\n const children = await Promise.all(\n childrenResult.Results.map(child => this.getPromptExecutionDetails(child.ID))\n );\n\n return {\n id: run.ID,\n type: 'prompt',\n name: run.Prompt || 'Unnamed Prompt',\n status: run.Success ? 'completed' : 'failed',\n startTime: new Date(run.RunAt),\n endTime: run.CompletedAt ? new Date(run.CompletedAt) : undefined,\n cost: run.Cost || 0,\n tokens: run.TokensUsed || 0,\n success: run.Success || false,\n errorMessage: run.ErrorMessage || undefined,\n children,\n model: run.Model || undefined\n };\n }\n\n private async getAgentExecutionDetails(agentRunId: string): Promise<ExecutionDetails> {\n const rv = new RunView();\n const [result, childrenResult] = await rv.RunViews<AgentRunRecord>([\n {\n EntityName: 'MJ: AI Agent Runs',\n ExtraFilter: `ID = '${agentRunId}'`,\n Fields: AGENT_RUN_FIELDS,\n ResultType: 'simple'\n },\n {\n EntityName: 'MJ: AI Agent Runs',\n ExtraFilter: `ParentRunID = '${agentRunId}'`,\n Fields: AGENT_RUN_FIELDS,\n ResultType: 'simple'\n }\n ]);\n\n const run = result.Results[0];\n if (!run) throw new Error('Agent run not found');\n\n const children = await Promise.all(\n childrenResult.Results.map(child => this.getAgentExecutionDetails(child.ID))\n );\n\n return {\n id: run.ID,\n type: 'agent',\n name: run.Agent || 'Unnamed Agent',\n status: run.Status.toLowerCase(),\n startTime: new Date(run.StartedAt),\n endTime: run.CompletedAt ? new Date(run.CompletedAt) : undefined,\n cost: run.TotalCost || 0,\n tokens: run.TotalTokensUsed || 0,\n success: run.Success || false,\n errorMessage: run.ErrorMessage || undefined,\n parentId: undefined,\n children\n };\n }\n}\n"]}
@@ -207,6 +207,17 @@ export declare class DashboardBrowserResourceComponent extends BaseResourceCompo
207
207
  */
208
208
  private closeRemoveConfirmDialog;
209
209
  private loadDashboards;
210
+ /**
211
+ * Apply initial state from resource configuration (handles pin navigation
212
+ * and other deep-link scenarios where ActivatedRoute may not fire).
213
+ */
214
+ private applyConfigurationState;
215
+ /**
216
+ * Check for late-arriving query params (e.g., from pin navigation where
217
+ * UpdateActiveTabQueryParams runs after the component has already loaded).
218
+ * Polls briefly for queryParams to appear in the URL.
219
+ */
220
+ private watchForLateQueryParams;
210
221
  private subscribeToQueryParams;
211
222
  /**
212
223
  * Update the URL query params for the current tab.
@@ -1 +1 @@
1
- {"version":3,"file":"dashboard-browser-resource.component.d.ts","sourceRoot":"","sources":["../../src/DashboardBrowser/dashboard-browser-resource.component.ts"],"names":[],"mappings":"AAAA,OAAO,EAAa,MAAM,EAAE,SAAS,EAAE,iBAAiB,EAAsC,MAAM,eAAe,CAAC;AACpH,OAAO,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAC;AAKjD,OAAO,EAAE,qBAAqB,EAAE,iBAAiB,EAAE,MAAM,2BAA2B,CAAC;AACrF,OAAO,EAAE,YAAY,EAAE,iBAAiB,EAAE,yBAAyB,EAAE,yBAAyB,EAAmB,wBAAwB,EAAiC,MAAM,+BAA+B,CAAC;AAChN,OAAO,EAAE,iBAAiB,EAAE,MAAM,oCAAoC,CAAC;AACvE,OAAO,EACH,wBAAwB,EACxB,wBAAwB,EACxB,qBAAqB,EACrB,cAAc,EAEd,cAAc,EACd,oBAAoB,EAEpB,kBAAkB,EAClB,kBAAkB,EAClB,oBAAoB,EACpB,kBAAkB,EAClB,oBAAoB,EACpB,mBAAmB,EACnB,mBAAmB,EACnB,mBAAmB,EACnB,yBAAyB,EACzB,wBAAwB,EACxB,uBAAuB,EAC1B,MAAM,qCAAqC,CAAC;;AAC7C;;GAEG;AACH,KAAK,WAAW,GAAG,MAAM,GAAG,MAAM,GAAG,MAAM,CAAC;AAE5C;;;;GAIG;AACH,qBAQa,iCAAkC,SAAQ,qBAAsB,YAAW,MAAM,EAAE,SAAS;IA6DjG,OAAO,CAAC,GAAG;IACX,OAAO,CAAC,KAAK;IACb,OAAO,CAAC,iBAAiB;IA1DtB,IAAI,EAAE,WAAW,CAAU;IAC3B,SAAS,UAAS;IAClB,UAAU,EAAE,iBAAiB,EAAE,CAAM;IACrC,UAAU,EAAE,yBAAyB,EAAE,CAAM;IAC7C,iBAAiB,EAAE,iBAAiB,GAAG,IAAI,CAAQ;IACnD,kBAAkB,EAAE,MAAM,GAAG,IAAI,CAAQ;IACzC,QAAQ,EAAE,wBAAwB,CAAW;IAC7C,kBAAkB,UAAS;IAG3B,gBAAgB,UAAS;IACzB,iBAAiB,EAAE,cAAc,GAAG,IAAI,CAAQ;IAChD,oBAAoB,EAAE,yBAAyB,GAAG,IAAI,CAAQ;IAC9D,iBAAiB,EAAE,MAAM,CAAM;IAG/B,iBAAiB,UAAS;IAC1B,cAAc,EAAE,MAAM,CAAM;IAC5B,iBAAiB,EAAE,MAAM,CAAM;IAG/B,eAAe,UAAS;IAGxB,WAAW,SAAM;IACjB,kBAAkB,SAAM;IAC/B,OAAO,CAAC,YAAY,CAAM;IAC1B,OAAO,CAAC,mBAAmB,CAAM;IACjC,OAAO,CAAC,cAAc,CAAM;IAGrB,4BAA4B,EAAE,wBAAwB,CAQ3D;IAGK,uBAAuB,EAAE,GAAG,CAAC,MAAM,EAAE,wBAAwB,CAAC,CAAa;IAG3E,oBAAoB,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC,CAAa;IAEpE,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAuB;IAEnB,eAAe,EAAG,wBAAwB,CAAC;gBAO7D,GAAG,EAAE,iBAAiB,EACtB,KAAK,EAAE,cAAc,EACrB,iBAAiB,EAAE,iBAAiB;IAShD,QAAQ,IAAI,IAAI;IAMhB,WAAW,IAAI,IAAI;IASb,sBAAsB,CAAC,IAAI,EAAE,YAAY,GAAG,OAAO,CAAC,MAAM,CAAC;IAI3D,oBAAoB,CAAC,IAAI,EAAE,YAAY,GAAG,OAAO,CAAC,MAAM,CAAC;IAQ/D;;OAEG;IACI,eAAe,CAAC,KAAK,EAAE,kBAAkB,GAAG,IAAI;IAcvD;;OAEG;IACI,YAAY,IAAI,IAAI;IAU3B;;OAEG;IACI,eAAe,CAAC,KAAK,EAAE,kBAAkB,GAAG,IAAI;IAIvD;;OAEG;IACU,iBAAiB,CAAC,KAAK,EAAE,oBAAoB,GAAG,OAAO,CAAC,IAAI,CAAC;IA2B1E;;;;OAIG;IACU,eAAe,CAAC,KAAK,EAAE,kBAAkB,GAAG,OAAO,CAAC,IAAI,CAAC;IAyCtE;;;;;;OAMG;YACW,0BAA0B;IAgCxC;;OAEG;IACU,iBAAiB,CAAC,KAAK,EAAE,oBAAoB,GAAG,OAAO,CAAC,IAAI,CAAC;IAI1E;;OAEG;IACI,gBAAgB,CAAC,KAAK,EAAE,mBAAmB,GAAG,IAAI;IAKzD;;OAEG;IACI,sBAAsB,CAAC,KAAK,EAAE,yBAAyB,GAAG,IAAI;IAKrE;;;OAGG;IACU,gBAAgB,CAAC,KAAK,EAAE,mBAAmB,GAAG,OAAO,CAAC,IAAI,CAAC;IAmExE;;;OAGG;IACU,gBAAgB,CAAC,KAAK,EAAE,mBAAmB,GAAG,OAAO,CAAC,IAAI,CAAC;IA6CxE;;;OAGG;IACI,oBAAoB,CAAC,KAAK,EAAE,uBAAuB,GAAG,IAAI;IAajE;;OAEG;IACI,aAAa,CAAC,SAAS,EAAE,iBAAiB,GAAG,IAAI;IAexD;;OAEG;IACI,aAAa,CAAC,SAAS,EAAE,iBAAiB,GAAG,IAAI;IA6BxD;;OAEG;IACI,UAAU,IAAI,IAAI;IAOzB;;OAEG;IACI,cAAc,IAAI,IAAI;IAS7B;;OAEG;IACI,eAAe,IAAI,IAAI;IAa9B;;OAEG;IACI,gBAAgB,IAAI,IAAI;IAK/B;;OAEG;IACI,mBAAmB,CAAC,MAAM,EAAE,iBAAiB,GAAG,IAAI;IAmB3D;;OAEG;IACU,eAAe,CAAC,UAAU,CAAC,EAAE,MAAM,GAAG,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC;IAoCvE;;OAEG;IACU,aAAa,IAAI,OAAO,CAAC,IAAI,CAAC;IA8B3C;;OAEG;IACI,UAAU,IAAI,IAAI;IAiBzB;;OAEG;IACI,UAAU,IAAI,IAAI;IAUzB;;OAEG;IACI,iBAAiB,IAAI,IAAI;IAKhC;;OAEG;IACI,kBAAkB,CAAC,KAAK,EAAE,qBAAqB,GAAG,IAAI;IAuB7D;;OAEG;IACI,qBAAqB,CAAC,KAAK,EAAE,wBAAwB,GAAG,IAAI;IA+DnE;;OAEG;IACH,OAAO,CAAC,YAAY;IAMpB;;OAEG;IACI,YAAY,CAAC,MAAM,EAAE,cAAc,GAAG,IAAI;IAajD;;OAEG;IACI,mBAAmB,IAAI,IAAI;IASlC;;OAEG;IACI,gBAAgB,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI;IAkB9C;;OAEG;IACI,mBAAmB,CAAC,MAAM,EAAE,oBAAoB,GAAG,IAAI;IAY9D;;OAEG;IACI,uBAAuB,IAAI,IAAI;IAItC;;OAEG;IACH,OAAO,CAAC,iBAAiB;IAYzB;;OAEG;IACI,uBAAuB,CAAC,OAAO,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,GAAG,IAAI;IAOzE;;OAEG;IACI,iBAAiB,IAAI,IAAI;IAOhC;;OAEG;IACI,iBAAiB,IAAI,IAAI;IAIhC;;OAEG;IACH,OAAO,CAAC,wBAAwB;YAWlB,cAAc;IA0E5B,OAAO,CAAC,sBAAsB;IAiC9B;;;;;OAKG;IACH,OAAO,CAAC,oBAAoB;IA0B5B;;OAEG;IACH,OAAO,CAAC,2BAA2B;IAgBnC,OAAO,CAAC,kBAAkB;IAQ1B,OAAO,CAAC,kBAAkB;yCA5gCjB,iCAAiC;2CAAjC,iCAAiC;CAghC7C"}
1
+ {"version":3,"file":"dashboard-browser-resource.component.d.ts","sourceRoot":"","sources":["../../src/DashboardBrowser/dashboard-browser-resource.component.ts"],"names":[],"mappings":"AAAA,OAAO,EAAa,MAAM,EAAE,SAAS,EAAE,iBAAiB,EAAsC,MAAM,eAAe,CAAC;AACpH,OAAO,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAC;AAKjD,OAAO,EAAE,qBAAqB,EAAE,iBAAiB,EAAE,MAAM,2BAA2B,CAAC;AACrF,OAAO,EAAE,YAAY,EAAE,iBAAiB,EAAE,yBAAyB,EAAE,yBAAyB,EAAmB,wBAAwB,EAAiC,MAAM,+BAA+B,CAAC;AAChN,OAAO,EAAE,iBAAiB,EAAE,MAAM,oCAAoC,CAAC;AACvE,OAAO,EACH,wBAAwB,EACxB,wBAAwB,EACxB,qBAAqB,EACrB,cAAc,EAEd,cAAc,EACd,oBAAoB,EAEpB,kBAAkB,EAClB,kBAAkB,EAClB,oBAAoB,EACpB,kBAAkB,EAClB,oBAAoB,EACpB,mBAAmB,EACnB,mBAAmB,EACnB,mBAAmB,EACnB,yBAAyB,EACzB,wBAAwB,EACxB,uBAAuB,EAC1B,MAAM,qCAAqC,CAAC;;AAC7C;;GAEG;AACH,KAAK,WAAW,GAAG,MAAM,GAAG,MAAM,GAAG,MAAM,CAAC;AAE5C;;;;GAIG;AACH,qBAQa,iCAAkC,SAAQ,qBAAsB,YAAW,MAAM,EAAE,SAAS;IA6DjG,OAAO,CAAC,GAAG;IACX,OAAO,CAAC,KAAK;IACb,OAAO,CAAC,iBAAiB;IA1DtB,IAAI,EAAE,WAAW,CAAU;IAC3B,SAAS,UAAS;IAClB,UAAU,EAAE,iBAAiB,EAAE,CAAM;IACrC,UAAU,EAAE,yBAAyB,EAAE,CAAM;IAC7C,iBAAiB,EAAE,iBAAiB,GAAG,IAAI,CAAQ;IACnD,kBAAkB,EAAE,MAAM,GAAG,IAAI,CAAQ;IACzC,QAAQ,EAAE,wBAAwB,CAAW;IAC7C,kBAAkB,UAAS;IAG3B,gBAAgB,UAAS;IACzB,iBAAiB,EAAE,cAAc,GAAG,IAAI,CAAQ;IAChD,oBAAoB,EAAE,yBAAyB,GAAG,IAAI,CAAQ;IAC9D,iBAAiB,EAAE,MAAM,CAAM;IAG/B,iBAAiB,UAAS;IAC1B,cAAc,EAAE,MAAM,CAAM;IAC5B,iBAAiB,EAAE,MAAM,CAAM;IAG/B,eAAe,UAAS;IAGxB,WAAW,SAAM;IACjB,kBAAkB,SAAM;IAC/B,OAAO,CAAC,YAAY,CAAM;IAC1B,OAAO,CAAC,mBAAmB,CAAM;IACjC,OAAO,CAAC,cAAc,CAAM;IAGrB,4BAA4B,EAAE,wBAAwB,CAQ3D;IAGK,uBAAuB,EAAE,GAAG,CAAC,MAAM,EAAE,wBAAwB,CAAC,CAAa;IAG3E,oBAAoB,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC,CAAa;IAEpE,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAuB;IAEnB,eAAe,EAAG,wBAAwB,CAAC;gBAO7D,GAAG,EAAE,iBAAiB,EACtB,KAAK,EAAE,cAAc,EACrB,iBAAiB,EAAE,iBAAiB;IAShD,QAAQ,IAAI,IAAI;IAMhB,WAAW,IAAI,IAAI;IASb,sBAAsB,CAAC,IAAI,EAAE,YAAY,GAAG,OAAO,CAAC,MAAM,CAAC;IAI3D,oBAAoB,CAAC,IAAI,EAAE,YAAY,GAAG,OAAO,CAAC,MAAM,CAAC;IAQ/D;;OAEG;IACI,eAAe,CAAC,KAAK,EAAE,kBAAkB,GAAG,IAAI;IAcvD;;OAEG;IACI,YAAY,IAAI,IAAI;IAU3B;;OAEG;IACI,eAAe,CAAC,KAAK,EAAE,kBAAkB,GAAG,IAAI;IAIvD;;OAEG;IACU,iBAAiB,CAAC,KAAK,EAAE,oBAAoB,GAAG,OAAO,CAAC,IAAI,CAAC;IA2B1E;;;;OAIG;IACU,eAAe,CAAC,KAAK,EAAE,kBAAkB,GAAG,OAAO,CAAC,IAAI,CAAC;IAyCtE;;;;;;OAMG;YACW,0BAA0B;IAgCxC;;OAEG;IACU,iBAAiB,CAAC,KAAK,EAAE,oBAAoB,GAAG,OAAO,CAAC,IAAI,CAAC;IAI1E;;OAEG;IACI,gBAAgB,CAAC,KAAK,EAAE,mBAAmB,GAAG,IAAI;IAKzD;;OAEG;IACI,sBAAsB,CAAC,KAAK,EAAE,yBAAyB,GAAG,IAAI;IAKrE;;;OAGG;IACU,gBAAgB,CAAC,KAAK,EAAE,mBAAmB,GAAG,OAAO,CAAC,IAAI,CAAC;IAmExE;;;OAGG;IACU,gBAAgB,CAAC,KAAK,EAAE,mBAAmB,GAAG,OAAO,CAAC,IAAI,CAAC;IA6CxE;;;OAGG;IACI,oBAAoB,CAAC,KAAK,EAAE,uBAAuB,GAAG,IAAI;IAajE;;OAEG;IACI,aAAa,CAAC,SAAS,EAAE,iBAAiB,GAAG,IAAI;IAgBxD;;OAEG;IACI,aAAa,CAAC,SAAS,EAAE,iBAAiB,GAAG,IAAI;IA6BxD;;OAEG;IACI,UAAU,IAAI,IAAI;IAQzB;;OAEG;IACI,cAAc,IAAI,IAAI;IAS7B;;OAEG;IACI,eAAe,IAAI,IAAI;IAa9B;;OAEG;IACI,gBAAgB,IAAI,IAAI;IAK/B;;OAEG;IACI,mBAAmB,CAAC,MAAM,EAAE,iBAAiB,GAAG,IAAI;IAmB3D;;OAEG;IACU,eAAe,CAAC,UAAU,CAAC,EAAE,MAAM,GAAG,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC;IAoCvE;;OAEG;IACU,aAAa,IAAI,OAAO,CAAC,IAAI,CAAC;IA8B3C;;OAEG;IACI,UAAU,IAAI,IAAI;IAiBzB;;OAEG;IACI,UAAU,IAAI,IAAI;IAUzB;;OAEG;IACI,iBAAiB,IAAI,IAAI;IAKhC;;OAEG;IACI,kBAAkB,CAAC,KAAK,EAAE,qBAAqB,GAAG,IAAI;IAuB7D;;OAEG;IACI,qBAAqB,CAAC,KAAK,EAAE,wBAAwB,GAAG,IAAI;IA+DnE;;OAEG;IACH,OAAO,CAAC,YAAY;IAMpB;;OAEG;IACI,YAAY,CAAC,MAAM,EAAE,cAAc,GAAG,IAAI;IAajD;;OAEG;IACI,mBAAmB,IAAI,IAAI;IASlC;;OAEG;IACI,gBAAgB,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI;IAkB9C;;OAEG;IACI,mBAAmB,CAAC,MAAM,EAAE,oBAAoB,GAAG,IAAI;IAY9D;;OAEG;IACI,uBAAuB,IAAI,IAAI;IAItC;;OAEG;IACH,OAAO,CAAC,iBAAiB;IAYzB;;OAEG;IACI,uBAAuB,CAAC,OAAO,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,GAAG,IAAI;IAOzE;;OAEG;IACI,iBAAiB,IAAI,IAAI;IAOhC;;OAEG;IACI,iBAAiB,IAAI,IAAI;IAIhC;;OAEG;IACH,OAAO,CAAC,wBAAwB;YAWlB,cAAc;IA6E5B;;;OAGG;IACH,OAAO,CAAC,uBAAuB;IAoB/B;;;;OAIG;IACH,OAAO,CAAC,uBAAuB;IA6B/B,OAAO,CAAC,sBAAsB;IAiC9B;;;;;OAKG;IACH,OAAO,CAAC,oBAAoB;IA0B5B;;OAEG;IACH,OAAO,CAAC,2BAA2B;IAgBnC,OAAO,CAAC,kBAAkB;IAQ1B,OAAO,CAAC,kBAAkB;yCA3kCjB,iCAAiC;2CAAjC,iCAAiC;CA+kC7C"}
@@ -513,6 +513,7 @@ let DashboardBrowserResourceComponent = class DashboardBrowserResourceComponent
513
513
  const md = new Metadata();
514
514
  this.selectedDashboardPermissions = DashboardEngine.Instance.GetDashboardPermissions(dashboard.ID, md.CurrentUser.ID);
515
515
  this.updateUrlQueryParams();
516
+ this.NotifyDisplayNameChanged(dashboard.Name || 'Dashboard');
516
517
  this.cdr.detectChanges();
517
518
  }
518
519
  /**
@@ -545,6 +546,7 @@ let DashboardBrowserResourceComponent = class DashboardBrowserResourceComponent
545
546
  this.selectedDashboard = null;
546
547
  this.mode = 'list';
547
548
  this.updateUrlQueryParams();
549
+ this.NotifyDisplayNameChanged('Dashboards');
548
550
  this.cdr.detectChanges();
549
551
  }
550
552
  /**
@@ -921,6 +923,11 @@ let DashboardBrowserResourceComponent = class DashboardBrowserResourceComponent
921
923
  sharedDashboardsInEffectiveMap: this.effectiveCategoryMap.size,
922
924
  categories: this.categories.map(c => ({ id: c.ID, name: c.Name, parentId: c.ParentID }))
923
925
  });
926
+ // After dashboards are loaded, check for deep-link from configuration
927
+ // (e.g., pin navigation passes dashboard ID via queryParams in config)
928
+ this.applyConfigurationState();
929
+ // Also watch for late-arriving query params from pin navigation
930
+ this.watchForLateQueryParams();
924
931
  this.NotifyLoadComplete();
925
932
  }
926
933
  catch (err) {
@@ -931,6 +938,56 @@ let DashboardBrowserResourceComponent = class DashboardBrowserResourceComponent
931
938
  this.cdr.detectChanges();
932
939
  }
933
940
  }
941
+ /**
942
+ * Apply initial state from resource configuration (handles pin navigation
943
+ * and other deep-link scenarios where ActivatedRoute may not fire).
944
+ */
945
+ applyConfigurationState() {
946
+ const config = this.Data?.Configuration;
947
+ if (!config)
948
+ return;
949
+ const qp = config['queryParams'];
950
+ const dashboardId = qp?.['dashboard'] || config['dashboard'];
951
+ const categoryId = qp?.['category'] || config['category'];
952
+ if (categoryId && categoryId !== this.selectedCategoryId) {
953
+ this.selectedCategoryId = categoryId;
954
+ }
955
+ if (dashboardId && !this.selectedDashboard) {
956
+ const dashboard = this.dashboards.find(d => UUIDsEqual(d.ID, dashboardId));
957
+ if (dashboard) {
958
+ this.openDashboard(dashboard);
959
+ }
960
+ }
961
+ }
962
+ /**
963
+ * Check for late-arriving query params (e.g., from pin navigation where
964
+ * UpdateActiveTabQueryParams runs after the component has already loaded).
965
+ * Polls briefly for queryParams to appear in the URL.
966
+ */
967
+ watchForLateQueryParams() {
968
+ // Check every 200ms for up to 3 seconds for queryParams to appear
969
+ // AND for dashboards to be loaded (both conditions must be met)
970
+ let attempts = 0;
971
+ const interval = setInterval(() => {
972
+ attempts++;
973
+ if (attempts > 15 || this.selectedDashboard) {
974
+ clearInterval(interval);
975
+ return;
976
+ }
977
+ // Re-check the URL directly since ActivatedRoute may not fire
978
+ const url = window.location.href;
979
+ const dashboardMatch = url.match(/[?&]dashboard=([^&]+)/);
980
+ if (dashboardMatch && !this.selectedDashboard && this.dashboards.length > 0) {
981
+ const dashboardId = decodeURIComponent(dashboardMatch[1]);
982
+ const dashboard = this.dashboards.find(d => UUIDsEqual(d.ID, dashboardId));
983
+ if (dashboard) {
984
+ this.openDashboard(dashboard);
985
+ this.cdr.detectChanges();
986
+ clearInterval(interval);
987
+ }
988
+ }
989
+ }, 200);
990
+ }
934
991
  // ========================================
935
992
  // Private Methods - URL Query Params
936
993
  // ========================================