@memberjunction/ng-core-entity-forms 2.73.0 → 2.75.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 (65) hide show
  1. package/dist/lib/custom/AIPromptRuns/ai-prompt-run-form.component.d.ts +11 -6
  2. package/dist/lib/custom/AIPromptRuns/ai-prompt-run-form.component.d.ts.map +1 -1
  3. package/dist/lib/custom/AIPromptRuns/ai-prompt-run-form.component.js +456 -447
  4. package/dist/lib/custom/AIPromptRuns/ai-prompt-run-form.component.js.map +1 -1
  5. package/dist/lib/custom/Queries/query-category-dialog.component.d.ts +33 -0
  6. package/dist/lib/custom/Queries/query-category-dialog.component.d.ts.map +1 -0
  7. package/dist/lib/custom/Queries/query-category-dialog.component.js +241 -0
  8. package/dist/lib/custom/Queries/query-category-dialog.component.js.map +1 -0
  9. package/dist/lib/custom/Queries/query-form.component.d.ts +135 -0
  10. package/dist/lib/custom/Queries/query-form.component.d.ts.map +1 -0
  11. package/dist/lib/custom/Queries/query-form.component.js +1563 -0
  12. package/dist/lib/custom/Queries/query-form.component.js.map +1 -0
  13. package/dist/lib/custom/Queries/query-run-dialog.component.d.ts +66 -0
  14. package/dist/lib/custom/Queries/query-run-dialog.component.d.ts.map +1 -0
  15. package/dist/lib/custom/Queries/query-run-dialog.component.js +788 -0
  16. package/dist/lib/custom/Queries/query-run-dialog.component.js.map +1 -0
  17. package/dist/lib/custom/ai-agent-run/ai-agent-run-analytics.component.d.ts +35 -7
  18. package/dist/lib/custom/ai-agent-run/ai-agent-run-analytics.component.d.ts.map +1 -1
  19. package/dist/lib/custom/ai-agent-run/ai-agent-run-analytics.component.js +75 -61
  20. package/dist/lib/custom/ai-agent-run/ai-agent-run-analytics.component.js.map +1 -1
  21. package/dist/lib/custom/ai-agent-run/ai-agent-run-cost.service.d.ts +37 -0
  22. package/dist/lib/custom/ai-agent-run/ai-agent-run-cost.service.d.ts.map +1 -0
  23. package/dist/lib/custom/ai-agent-run/ai-agent-run-cost.service.js +117 -0
  24. package/dist/lib/custom/ai-agent-run/ai-agent-run-cost.service.js.map +1 -0
  25. package/dist/lib/custom/ai-agent-run/ai-agent-run-step-node.component.d.ts.map +1 -1
  26. package/dist/lib/custom/ai-agent-run/ai-agent-run-step-node.component.js +0 -8
  27. package/dist/lib/custom/ai-agent-run/ai-agent-run-step-node.component.js.map +1 -1
  28. package/dist/lib/custom/ai-agent-run/ai-agent-run-timeline.component.d.ts.map +1 -1
  29. package/dist/lib/custom/ai-agent-run/ai-agent-run-timeline.component.js +0 -26
  30. package/dist/lib/custom/ai-agent-run/ai-agent-run-timeline.component.js.map +1 -1
  31. package/dist/lib/custom/ai-agent-run/ai-agent-run.component.d.ts +5 -1
  32. package/dist/lib/custom/ai-agent-run/ai-agent-run.component.d.ts.map +1 -1
  33. package/dist/lib/custom/ai-agent-run/ai-agent-run.component.js +160 -103
  34. package/dist/lib/custom/ai-agent-run/ai-agent-run.component.js.map +1 -1
  35. package/dist/lib/custom/custom-forms.module.d.ts +25 -22
  36. package/dist/lib/custom/custom-forms.module.d.ts.map +1 -1
  37. package/dist/lib/custom/custom-forms.module.js +18 -3
  38. package/dist/lib/custom/custom-forms.module.js.map +1 -1
  39. package/dist/lib/generated/Entities/AIPromptRun/sections/details.component.d.ts.map +1 -1
  40. package/dist/lib/generated/Entities/AIPromptRun/sections/details.component.js +15 -4
  41. package/dist/lib/generated/Entities/AIPromptRun/sections/details.component.js.map +1 -1
  42. package/dist/lib/generated/Entities/Query/query.form.component.js +14 -4
  43. package/dist/lib/generated/Entities/Query/query.form.component.js.map +1 -1
  44. package/dist/lib/generated/Entities/Query/sections/details.component.d.ts.map +1 -1
  45. package/dist/lib/generated/Entities/Query/sections/details.component.js +13 -4
  46. package/dist/lib/generated/Entities/Query/sections/details.component.js.map +1 -1
  47. package/dist/lib/generated/Entities/QueryEntity/sections/details.component.d.ts.map +1 -1
  48. package/dist/lib/generated/Entities/QueryEntity/sections/details.component.js +22 -4
  49. package/dist/lib/generated/Entities/QueryEntity/sections/details.component.js.map +1 -1
  50. package/dist/lib/generated/Entities/QueryField/sections/details.component.d.ts.map +1 -1
  51. package/dist/lib/generated/Entities/QueryField/sections/details.component.js +22 -4
  52. package/dist/lib/generated/Entities/QueryField/sections/details.component.js.map +1 -1
  53. package/dist/lib/generated/Entities/QueryParameter/queryparameter.form.component.d.ts +10 -0
  54. package/dist/lib/generated/Entities/QueryParameter/queryparameter.form.component.d.ts.map +1 -0
  55. package/dist/lib/generated/Entities/QueryParameter/queryparameter.form.component.js +59 -0
  56. package/dist/lib/generated/Entities/QueryParameter/queryparameter.form.component.js.map +1 -0
  57. package/dist/lib/generated/Entities/QueryParameter/sections/details.component.d.ts +11 -0
  58. package/dist/lib/generated/Entities/QueryParameter/sections/details.component.d.ts.map +1 -0
  59. package/dist/lib/generated/Entities/QueryParameter/sections/details.component.js +172 -0
  60. package/dist/lib/generated/Entities/QueryParameter/sections/details.component.js.map +1 -0
  61. package/dist/lib/generated/generated-forms.module.d.ts +265 -263
  62. package/dist/lib/generated/generated-forms.module.d.ts.map +1 -1
  63. package/dist/lib/generated/generated-forms.module.js +74 -66
  64. package/dist/lib/generated/generated-forms.module.js.map +1 -1
  65. package/package.json +16 -16
@@ -0,0 +1 @@
1
+ {"version":3,"file":"query-run-dialog.component.js","sourceRoot":"","sources":["../../../../src/lib/custom/Queries/query-run-dialog.component.ts","../../../../src/lib/custom/Queries/query-run-dialog.component.html"],"names":[],"mappings":"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"}
@@ -1,5 +1,6 @@
1
1
  import { OnInit, OnDestroy, ElementRef, ChangeDetectorRef, AfterViewInit } from '@angular/core';
2
- import { AIAgentRunEntity, AIPromptRunEntity, ActionExecutionLogEntity, AIAgentRunStepEntity } from '@memberjunction/core-entities';
2
+ import { AIPromptRunEntity } from '@memberjunction/core-entities';
3
+ import { AIAgentRunCostService } from './ai-agent-run-cost.service';
3
4
  import * as i0 from "@angular/core";
4
5
  interface PromptMetrics {
5
6
  totalCount: number;
@@ -71,8 +72,27 @@ interface TimelineMetrics {
71
72
  totalTime: number;
72
73
  };
73
74
  }
75
+ interface SimpleAgentRun {
76
+ ID: string;
77
+ AgentID?: string;
78
+ Status?: string;
79
+ }
80
+ interface SimpleAgentRunStep {
81
+ ID: string;
82
+ StepType: string;
83
+ TargetLogID?: string;
84
+ }
85
+ interface SimpleActionLog {
86
+ ID: string;
87
+ Action: string | null;
88
+ StartedAt: Date | null;
89
+ EndedAt: Date | null;
90
+ ResultCode: string | null;
91
+ Message: string | null;
92
+ }
74
93
  export declare class AIAgentRunAnalyticsComponent implements OnInit, OnDestroy, AfterViewInit {
75
94
  private cdr;
95
+ private costService;
76
96
  agentRunId: string;
77
97
  private destroy$;
78
98
  expandedCharts: {
@@ -81,11 +101,11 @@ export declare class AIAgentRunAnalyticsComponent implements OnInit, OnDestroy,
81
101
  viewMode: 'grid' | 'expanded';
82
102
  isLoading: boolean;
83
103
  error: string | null;
84
- agentRun: AIAgentRunEntity | null;
104
+ agentRun: SimpleAgentRun | null;
85
105
  allPromptRuns: AIPromptRunEntity[];
86
- allActionLogs: ActionExecutionLogEntity[];
87
- allSteps: AIAgentRunStepEntity[];
88
- subAgentRuns: AIAgentRunEntity[];
106
+ allActionLogs: SimpleActionLog[];
107
+ allSteps: SimpleAgentRunStep[];
108
+ subAgentRuns: SimpleAgentRun[];
89
109
  promptMetrics: PromptMetrics;
90
110
  actionMetrics: ActionMetrics;
91
111
  timelineMetrics: TimelineMetrics;
@@ -114,13 +134,12 @@ export declare class AIAgentRunAnalyticsComponent implements OnInit, OnDestroy,
114
134
  promptTokenDistributionChart: ElementRef;
115
135
  promptCostDistributionChart: ElementRef;
116
136
  promptCountByNameChart: ElementRef;
117
- constructor(cdr: ChangeDetectorRef);
137
+ constructor(cdr: ChangeDetectorRef, costService: AIAgentRunCostService);
118
138
  ngOnInit(): void;
119
139
  ngOnDestroy(): void;
120
140
  ngAfterViewInit(): void;
121
141
  loadData(): Promise<void>;
122
142
  private loadAllRunData;
123
- private getAllAgentRunIds;
124
143
  private initializePromptMetrics;
125
144
  private initializeActionMetrics;
126
145
  private initializeTimelineMetrics;
@@ -155,6 +174,15 @@ export declare class AIAgentRunAnalyticsComponent implements OnInit, OnDestroy,
155
174
  private renderPromptTokenDistributionChart;
156
175
  private renderPromptCostDistributionChart;
157
176
  private renderPromptCountByNameChart;
177
+ /**
178
+ * Get all agent run IDs in hierarchy, starting from the root run
179
+ */
180
+ private getAllAgentRunIds;
181
+ /**
182
+ * Load all prompt runs for the given agent run IDs
183
+ * Uses the same approach as the cost calculation: find prompt runs via agent run steps
184
+ */
185
+ private loadAllPromptRuns;
158
186
  static ɵfac: i0.ɵɵFactoryDeclaration<AIAgentRunAnalyticsComponent, never>;
159
187
  static ɵcmp: i0.ɵɵComponentDeclaration<AIAgentRunAnalyticsComponent, "mj-ai-agent-run-analytics", never, { "agentRunId": { "alias": "agentRunId"; "required": false; }; }, {}, never, never, false, never>;
160
188
  }
@@ -1 +1 @@
1
- {"version":3,"file":"ai-agent-run-analytics.component.d.ts","sourceRoot":"","sources":["../../../../src/lib/custom/ai-agent-run/ai-agent-run-analytics.component.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"ai-agent-run-analytics.component.d.ts","sourceRoot":"","sources":["../../../../src/lib/custom/ai-agent-run/ai-agent-run-analytics.component.ts"],"names":[],"mappings":"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"}
@@ -3,9 +3,10 @@ import { Subject } from 'rxjs';
3
3
  import { RunView } from '@memberjunction/core';
4
4
  import * as d3 from 'd3';
5
5
  import * as i0 from "@angular/core";
6
- import * as i1 from "@angular/common";
7
- import * as i2 from "@progress/kendo-angular-layout";
8
- import * as i3 from "@progress/kendo-angular-buttons";
6
+ import * as i1 from "./ai-agent-run-cost.service";
7
+ import * as i2 from "@angular/common";
8
+ import * as i3 from "@progress/kendo-angular-layout";
9
+ import * as i4 from "@progress/kendo-angular-buttons";
9
10
  const _c0 = ["modelDistributionChart"];
10
11
  const _c1 = ["executionTimeChart"];
11
12
  const _c2 = ["costByVendorChart"];
@@ -754,8 +755,9 @@ function AIAgentRunAnalyticsComponent_div_3_Template(rf, ctx) { if (rf & 1) {
754
755
  i0.ɵɵproperty("expanded", true);
755
756
  } }
756
757
  export class AIAgentRunAnalyticsComponent {
757
- constructor(cdr) {
758
+ constructor(cdr, costService) {
758
759
  this.cdr = cdr;
760
+ this.costService = costService;
759
761
  this.destroy$ = new Subject();
760
762
  // Chart expansion states
761
763
  this.expandedCharts = {
@@ -837,11 +839,9 @@ export class AIAgentRunAnalyticsComponent {
837
839
  }
838
840
  async loadAllRunData() {
839
841
  const rv = new RunView();
840
- // Get all agent runs in the hierarchy (including the main run and all sub-agent runs)
842
+ // Get all agent run IDs in hierarchy (including root and children)
841
843
  const agentRunIds = await this.getAllAgentRunIds(this.agentRunId);
842
- console.log('Loading analytics for agent run IDs:', agentRunIds);
843
- console.log('Number of agent run IDs:', agentRunIds.length);
844
- // Batch load all data
844
+ // Batch load all data (except prompt runs which we'll load via shared service)
845
845
  const results = await rv.RunViews([
846
846
  // Main agent run
847
847
  {
@@ -853,49 +853,28 @@ export class AIAgentRunAnalyticsComponent {
853
853
  EntityName: 'MJ: AI Agent Runs',
854
854
  ExtraFilter: agentRunIds.length > 1 ? `ID IN ('${agentRunIds.slice(1).join("','")}')` : `ID = '00000000-0000-0000-0000-000000000000'`,
855
855
  },
856
- // All prompt runs for all agent runs - linked through AI Agent Run Steps
857
- {
858
- EntityName: 'MJ: AI Prompt Runs',
859
- ExtraFilter: `ID IN (SELECT TargetLogID FROM __mj.vwAIAgentRunSteps WHERE AgentRunID IN ('${agentRunIds.join("','")}') AND StepType = 'Prompt')`,
860
- },
861
856
  // All action logs - need to get via steps
862
857
  {
863
858
  EntityName: 'MJ: AI Agent Run Steps',
864
859
  ExtraFilter: `AgentRunID IN ('${agentRunIds.join("','")}') AND StepType = 'Actions'`,
865
860
  },
866
- // All steps for timeline analysis
861
+ // All steps for timeline analysis - only need basic fields like StepType
867
862
  {
868
863
  EntityName: 'MJ: AI Agent Run Steps',
869
864
  ExtraFilter: `AgentRunID IN ('${agentRunIds.join("','")}')`,
870
- ResultType: 'entity_object'
871
865
  }
872
866
  ]);
873
867
  // Process results
874
- console.log('RunViews results:', results.map((r, i) => ({
875
- index: i,
876
- success: r.Success,
877
- count: r.Results?.length || 0,
878
- errorMessage: r.ErrorMessage
879
- })));
880
868
  if (results[0].Success && results[0].Results && results[0].Results.length > 0) {
881
869
  this.agentRun = results[0].Results[0];
882
870
  }
883
871
  if (results[1].Success) {
884
872
  this.subAgentRuns = results[1].Results || [];
885
873
  }
874
+ // Load all prompt runs for the agent run hierarchy
875
+ this.allPromptRuns = await this.loadAllPromptRuns(agentRunIds);
886
876
  if (results[2].Success) {
887
- this.allPromptRuns = results[2].Results || [];
888
- console.log(`Found ${this.allPromptRuns.length} prompt runs for agent run IDs:`, agentRunIds);
889
- console.log('Prompt runs query:', `ID IN (SELECT TargetLogID FROM __mj.vwAIAgentRunSteps WHERE AgentRunID IN ('${agentRunIds.join("','")}') AND StepType = 'Prompts')`);
890
- if (this.allPromptRuns.length > 0) {
891
- console.log('First prompt run sample:', this.allPromptRuns[0]);
892
- }
893
- }
894
- else {
895
- console.error('Failed to load prompt runs:', results[2].ErrorMessage);
896
- }
897
- if (results[3].Success) {
898
- const actionSteps = results[3].Results || [];
877
+ const actionSteps = results[2].Results || [];
899
878
  // Now load the actual action logs
900
879
  if (actionSteps.length > 0) {
901
880
  const actionLogIds = actionSteps
@@ -912,32 +891,10 @@ export class AIAgentRunAnalyticsComponent {
912
891
  }
913
892
  }
914
893
  }
915
- if (results[4].Success) {
916
- this.allSteps = results[4].Results || [];
894
+ if (results[3].Success) {
895
+ this.allSteps = results[3].Results || [];
917
896
  }
918
897
  }
919
- async getAllAgentRunIds(rootRunId) {
920
- const allIds = [rootRunId];
921
- const rv = new RunView();
922
- // Recursively get all sub-agent run IDs
923
- const getSubRunIds = async (parentId, depth = 0) => {
924
- const result = await rv.RunView({
925
- EntityName: 'MJ: AI Agent Runs',
926
- ExtraFilter: `ParentRunID = '${parentId}'`,
927
- ResultType: 'entity_object'
928
- });
929
- if (result.Success && result.Results) {
930
- console.log(`Found ${result.Results.length} sub-agent runs at depth ${depth} for parent ${parentId}`);
931
- for (const subRun of result.Results) {
932
- allIds.push(subRun.ID);
933
- await getSubRunIds(subRun.ID, depth + 1); // Recursive call
934
- }
935
- }
936
- };
937
- await getSubRunIds(rootRunId);
938
- console.log(`Total agent run IDs found: ${allIds.length}`);
939
- return allIds;
940
- }
941
898
  initializePromptMetrics() {
942
899
  return {
943
900
  totalCount: 0,
@@ -2014,7 +1971,64 @@ export class AIAgentRunAnalyticsComponent {
2014
1971
  .style('font-weight', 'bold')
2015
1972
  .text('Prompt Execution Count');
2016
1973
  }
2017
- static { this.ɵfac = function AIAgentRunAnalyticsComponent_Factory(t) { return new (t || AIAgentRunAnalyticsComponent)(i0.ɵɵdirectiveInject(i0.ChangeDetectorRef)); }; }
1974
+ /**
1975
+ * Get all agent run IDs in hierarchy, starting from the root run
1976
+ */
1977
+ async getAllAgentRunIds(rootRunId) {
1978
+ const rv = new RunView();
1979
+ const agentRunIds = [rootRunId];
1980
+ // Simple recursive approach to find all child runs
1981
+ const findChildRuns = async (parentId) => {
1982
+ const result = await rv.RunView({
1983
+ EntityName: 'MJ: AI Agent Runs',
1984
+ ExtraFilter: `ParentRunID = '${parentId}'`,
1985
+ });
1986
+ if (result.Success && result.Results && result.Results.length > 0) {
1987
+ for (const childRun of result.Results) {
1988
+ if (!agentRunIds.includes(childRun.ID)) {
1989
+ agentRunIds.push(childRun.ID);
1990
+ await findChildRuns(childRun.ID); // Recursively find children
1991
+ }
1992
+ }
1993
+ }
1994
+ };
1995
+ await findChildRuns(rootRunId);
1996
+ return agentRunIds;
1997
+ }
1998
+ /**
1999
+ * Load all prompt runs for the given agent run IDs
2000
+ * Uses the same approach as the cost calculation: find prompt runs via agent run steps
2001
+ */
2002
+ async loadAllPromptRuns(agentRunIds) {
2003
+ if (agentRunIds.length === 0)
2004
+ return [];
2005
+ const rv = new RunView();
2006
+ // First, get all the prompt steps for the agent runs
2007
+ const stepsResult = await rv.RunView({
2008
+ EntityName: 'MJ: AI Agent Run Steps',
2009
+ ExtraFilter: `AgentRunID IN ('${agentRunIds.join("','")}') AND StepType = 'Prompt'`,
2010
+ ResultType: 'simple'
2011
+ });
2012
+ if (!stepsResult.Success || !stepsResult.Results || stepsResult.Results.length === 0) {
2013
+ return [];
2014
+ }
2015
+ // Extract the TargetLogID values (these are the prompt run IDs)
2016
+ const promptRunIds = stepsResult.Results
2017
+ .map(step => step.TargetLogID)
2018
+ .filter(id => id); // Remove any null/undefined values
2019
+ if (promptRunIds.length === 0) {
2020
+ return [];
2021
+ }
2022
+ // Now get the actual prompt runs
2023
+ const promptResult = await rv.RunView({
2024
+ EntityName: 'MJ: AI Prompt Runs',
2025
+ ExtraFilter: `ID IN ('${promptRunIds.join("','")}')`,
2026
+ OrderBy: 'RunAt',
2027
+ ResultType: 'simple'
2028
+ });
2029
+ return promptResult.Success ? (promptResult.Results || []) : [];
2030
+ }
2031
+ static { this.ɵfac = function AIAgentRunAnalyticsComponent_Factory(t) { return new (t || AIAgentRunAnalyticsComponent)(i0.ɵɵdirectiveInject(i0.ChangeDetectorRef), i0.ɵɵdirectiveInject(i1.AIAgentRunCostService)); }; }
2018
2032
  static { this.ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: AIAgentRunAnalyticsComponent, selectors: [["mj-ai-agent-run-analytics"]], viewQuery: function AIAgentRunAnalyticsComponent_Query(rf, ctx) { if (rf & 1) {
2019
2033
  i0.ɵɵviewQuery(_c0, 5);
2020
2034
  i0.ɵɵviewQuery(_c1, 5);
@@ -2049,12 +2063,12 @@ export class AIAgentRunAnalyticsComponent {
2049
2063
  i0.ɵɵproperty("ngIf", ctx.error && !ctx.isLoading);
2050
2064
  i0.ɵɵadvance();
2051
2065
  i0.ɵɵproperty("ngIf", !ctx.isLoading && !ctx.error);
2052
- } }, dependencies: [i1.NgClass, i1.NgForOf, i1.NgIf, i2.PanelBarComponent, i2.PanelBarItemComponent, i2.PanelBarContentDirective, i2.PanelBarItemTitleDirective, i3.ButtonComponent, i1.DecimalPipe, i1.KeyValuePipe], styles: [".analytics-container[_ngcontent-%COMP%] {\n padding: 20px;\n height: 100%;\n overflow-y: auto;\n background-color: #f8f9fa;\n}\n\n\n\n.loading-state[_ngcontent-%COMP%], \n.error-state[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: center;\n height: 300px;\n color: #6c757d;\n}\n\n.loading-state[_ngcontent-%COMP%] i[_ngcontent-%COMP%], \n.error-state[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n margin-bottom: 15px;\n}\n\n.error-state[_ngcontent-%COMP%] {\n color: #dc3545;\n}\n\n\n\n.summary-cards[_ngcontent-%COMP%] {\n display: grid;\n grid-template-columns: repeat(auto-fit, minmax(250px, 1fr));\n gap: 20px;\n margin-bottom: 30px;\n}\n\n.summary-card[_ngcontent-%COMP%] {\n background: white;\n border-radius: 8px;\n padding: 20px;\n box-shadow: 0 2px 4px rgba(0, 0, 0, 0.1);\n display: flex;\n align-items: center;\n transition: transform 0.2s, box-shadow 0.2s;\n}\n\n.summary-card[_ngcontent-%COMP%]:hover {\n transform: translateY(-2px);\n box-shadow: 0 4px 8px rgba(0, 0, 0, 0.15);\n}\n\n.card-icon[_ngcontent-%COMP%] {\n width: 60px;\n height: 60px;\n border-radius: 12px;\n display: flex;\n align-items: center;\n justify-content: center;\n margin-right: 20px;\n font-size: 24px;\n color: white;\n}\n\n.card-icon.prompts[_ngcontent-%COMP%] {\n background: linear-gradient(135deg, #667eea 0%, #764ba2 100%);\n}\n\n.card-icon.actions[_ngcontent-%COMP%] {\n background: linear-gradient(135deg, #f093fb 0%, #f5576c 100%);\n}\n\n.card-icon.cost[_ngcontent-%COMP%] {\n background: linear-gradient(135deg, #4facfe 0%, #00f2fe 100%);\n}\n\n.card-icon.time[_ngcontent-%COMP%] {\n background: linear-gradient(135deg, #fa709a 0%, #fee140 100%);\n}\n\n.card-content[_ngcontent-%COMP%] h3[_ngcontent-%COMP%] {\n margin: 0 0 8px 0;\n font-size: 14px;\n font-weight: 500;\n color: #6c757d;\n text-transform: uppercase;\n letter-spacing: 0.5px;\n}\n\n.metric-value[_ngcontent-%COMP%] {\n font-size: 28px;\n font-weight: 700;\n color: #212529;\n margin-bottom: 4px;\n}\n\n.metric-detail[_ngcontent-%COMP%] {\n font-size: 13px;\n color: #6c757d;\n}\n\n.metric-detail[_ngcontent-%COMP%] .success[_ngcontent-%COMP%] {\n color: #28a745;\n margin-right: 10px;\n}\n\n.metric-detail[_ngcontent-%COMP%] .failed[_ngcontent-%COMP%] {\n color: #dc3545;\n}\n\n\n\n.analytics-panel[_ngcontent-%COMP%] {\n padding: 15px;\n}\n\n\n\n .analytics-content .k-panelbar {\n border: none;\n background: transparent;\n}\n\n .analytics-content .k-panelbar > .k-panelbar-item {\n border: none;\n border-radius: 12px;\n margin-bottom: 12px;\n box-shadow: 0 2px 8px rgba(0,0,0,0.06);\n background: white;\n overflow: hidden;\n}\n\n .analytics-content .k-panelbar > .k-panelbar-item > .k-header {\n background: white;\n border: none;\n padding: 16px 20px;\n border-radius: 12px 12px 0 0;\n color: #2c3e50;\n font-weight: 600;\n font-size: 16px;\n transition: all 0.2s ease;\n display: flex;\n align-items: center;\n gap: 12px;\n}\n\n .analytics-content .k-panelbar > .k-panelbar-item > .k-header:hover {\n background: #f8f9fa;\n}\n\n .analytics-content .k-panelbar > .k-panelbar-item.k-panelbar-expanded > .k-header {\n background: #2196f3;\n color: white;\n border-radius: 12px 12px 0 0;\n}\n\n .analytics-content .k-panelbar > .k-panelbar-item > .k-header .k-panelbar-toggle {\n position: absolute;\n right: 24px;\n color: inherit;\n font-size: 14px;\n transition: transform 0.2s ease;\n}\n\n .analytics-content .k-panelbar > .k-panelbar-item.k-panelbar-expanded > .k-header .k-panelbar-toggle {\n transform: rotate(180deg);\n}\n\n .analytics-content .k-panelbar > .k-panelbar-item > .k-header .k-panelbar-toggle::before {\n content: '\\f107';\n font-family: 'Font Awesome 6 Free';\n font-weight: 900;\n}\n\n .analytics-content .k-panelbar > .k-panelbar-item > .k-content {\n padding: 0;\n border: none;\n background: white;\n border-radius: 0 0 12px 12px;\n}\n\n .analytics-content .k-panelbar .k-header .k-panelbar-icon {\n font-size: 18px;\n color: #2196f3;\n margin-right: 8px;\n}\n\n .analytics-content .k-panelbar .k-panelbar-expanded .k-header .k-panelbar-icon {\n color: white;\n}\n\n\n\n.charts-grid[_ngcontent-%COMP%] {\n display: grid;\n grid-template-columns: repeat(auto-fit, minmax(350px, 1fr));\n gap: 20px;\n margin-bottom: 20px;\n}\n\n\n\n.chart-card[_ngcontent-%COMP%] {\n background: white;\n border-radius: 8px;\n box-shadow: 0 2px 4px rgba(0, 0, 0, 0.1);\n overflow: hidden;\n transition: all 0.3s ease;\n}\n\n.chart-card.expanded[_ngcontent-%COMP%] {\n grid-column: 1 / -1;\n}\n\n.chart-card-header[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n justify-content: space-between;\n padding: 12px 16px;\n background-color: #f8f9fa;\n border-bottom: 1px solid #e9ecef;\n cursor: pointer;\n user-select: none;\n}\n\n.chart-card-header[_ngcontent-%COMP%]:hover {\n background-color: #e9ecef;\n}\n\n.chart-card-header[_ngcontent-%COMP%] h3[_ngcontent-%COMP%] {\n margin: 0;\n font-size: 14px;\n font-weight: 600;\n color: #495057;\n display: flex;\n align-items: center;\n gap: 8px;\n}\n\n.chart-card-header[_ngcontent-%COMP%] h3[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n font-size: 16px;\n color: #6c757d;\n}\n\n.expand-btn[_ngcontent-%COMP%] {\n background: none;\n border: none;\n padding: 4px 8px;\n cursor: pointer;\n color: #6c757d;\n transition: color 0.2s;\n}\n\n.expand-btn[_ngcontent-%COMP%]:hover {\n color: #495057;\n}\n\n.chart-card-body[_ngcontent-%COMP%] {\n padding: 16px;\n background: white;\n}\n\n.chart-card.expanded[_ngcontent-%COMP%] .chart-card-body[_ngcontent-%COMP%] {\n padding: 24px;\n}\n\n.chart-card.expanded[_ngcontent-%COMP%] .chart-container[_ngcontent-%COMP%] > div[_ngcontent-%COMP%] {\n min-height: 400px;\n}\n\n\n\n.view-mode-toggle[_ngcontent-%COMP%] {\n display: flex;\n justify-content: flex-end;\n margin-bottom: 16px;\n}\n\n.view-mode-toggle[_ngcontent-%COMP%] button[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 6px;\n}\n\n.chart-container[_ngcontent-%COMP%] {\n position: relative;\n}\n\n.chart-container[_ngcontent-%COMP%] h3[_ngcontent-%COMP%] {\n margin: 0 0 10px 0;\n font-size: 15px;\n font-weight: 500;\n color: #495057;\n}\n\n.chart-container[_ngcontent-%COMP%] > div[_ngcontent-%COMP%] {\n min-height: 220px;\n width: 100%;\n display: flex;\n justify-content: center;\n align-items: center;\n}\n\n\n\n.chart-container[_ngcontent-%COMP%] svg[_ngcontent-%COMP%] {\n display: block;\n margin: 0 auto;\n}\n\n.chart-legend[_ngcontent-%COMP%] {\n margin-top: 10px;\n display: flex;\n flex-wrap: wrap;\n gap: 10px;\n font-size: 12px;\n}\n\n.legend-item[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 8px;\n font-size: 13px;\n}\n\n.legend-color[_ngcontent-%COMP%] {\n width: 16px;\n height: 16px;\n border-radius: 3px;\n}\n\n.chart-total[_ngcontent-%COMP%] {\n text-align: center;\n margin-top: 10px;\n font-size: 14px;\n font-weight: 500;\n color: #495057;\n}\n\n\n\n.detailed-metrics[_ngcontent-%COMP%] {\n margin-top: 20px;\n border-top: 1px solid #e9ecef;\n padding-top: 20px;\n}\n\n.detailed-metrics[_ngcontent-%COMP%] button[_ngcontent-%COMP%] {\n margin-bottom: 15px;\n}\n\n.detailed-metrics[_ngcontent-%COMP%] button[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n margin-right: 8px;\n}\n\n.metrics-table[_ngcontent-%COMP%] {\n overflow-x: auto;\n}\n\n.metrics-table[_ngcontent-%COMP%] table[_ngcontent-%COMP%] {\n width: 100%;\n border-collapse: collapse;\n}\n\n.metrics-table[_ngcontent-%COMP%] th[_ngcontent-%COMP%] {\n background-color: #f8f9fa;\n padding: 12px;\n text-align: left;\n font-weight: 600;\n color: #495057;\n border-bottom: 2px solid #dee2e6;\n}\n\n.metrics-table[_ngcontent-%COMP%] td[_ngcontent-%COMP%] {\n padding: 12px;\n border-bottom: 1px solid #dee2e6;\n}\n\n.metrics-table[_ngcontent-%COMP%] tr[_ngcontent-%COMP%]:hover {\n background-color: #f8f9fa;\n}\n\n.success-rate[_ngcontent-%COMP%] {\n font-weight: 500;\n}\n\n.success-rate.high[_ngcontent-%COMP%] {\n color: #28a745;\n}\n\n.success-rate.medium[_ngcontent-%COMP%] {\n color: #ffc107;\n}\n\n.success-rate.low[_ngcontent-%COMP%] {\n color: #dc3545;\n}\n\n\n\n.error-analysis[_ngcontent-%COMP%] {\n margin-top: 30px;\n padding: 20px;\n background-color: #fff5f5;\n border-radius: 8px;\n border: 1px solid #f5c6cb;\n}\n\n.error-analysis[_ngcontent-%COMP%] h3[_ngcontent-%COMP%] {\n margin: 0 0 15px 0;\n color: #721c24;\n display: flex;\n align-items: center;\n gap: 8px;\n}\n\n.error-analysis-description[_ngcontent-%COMP%] {\n font-size: 14px;\n color: #856404;\n margin-bottom: 20px;\n line-height: 1.5;\n}\n\n.error-list[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n gap: 10px;\n}\n\n.error-item[_ngcontent-%COMP%] {\n display: flex;\n align-items: flex-start;\n gap: 12px;\n padding: 10px;\n background-color: white;\n border-radius: 4px;\n font-size: 14px;\n}\n\n.error-count[_ngcontent-%COMP%] {\n background-color: #dc3545;\n color: white;\n padding: 2px 8px;\n border-radius: 12px;\n font-size: 12px;\n font-weight: 500;\n white-space: nowrap;\n}\n\n.error-message[_ngcontent-%COMP%] {\n flex: 1;\n color: #495057;\n}\n\n\n\n.no-errors[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 12px;\n padding: 20px;\n background-color: #d4edda;\n border-radius: 8px;\n border: 1px solid #c3e6cb;\n color: #155724;\n}\n\n.no-errors[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n font-size: 24px;\n color: #28a745;\n}\n\n.no-errors[_ngcontent-%COMP%] p[_ngcontent-%COMP%] {\n margin: 0;\n font-size: 14px;\n}\n\n\n\n.no-data-message[_ngcontent-%COMP%] {\n text-align: center;\n padding: 60px 20px;\n color: #6c757d;\n}\n\n.no-data-message[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n font-size: 48px;\n margin-bottom: 20px;\n color: #dee2e6;\n}\n\n.no-data-message[_ngcontent-%COMP%] p[_ngcontent-%COMP%] {\n margin: 0 0 10px 0;\n font-size: 16px;\n}\n\n.no-data-message[_ngcontent-%COMP%] p.small[_ngcontent-%COMP%] {\n font-size: 14px;\n color: #adb5bd;\n}\n\n\n\n.model-comparison[_ngcontent-%COMP%] {\n overflow-x: auto;\n}\n\n.model-comparison[_ngcontent-%COMP%] table[_ngcontent-%COMP%] {\n width: 100%;\n border-collapse: collapse;\n}\n\n.model-comparison[_ngcontent-%COMP%] th[_ngcontent-%COMP%] {\n background-color: #f8f9fa;\n padding: 12px;\n text-align: left;\n font-weight: 600;\n color: #495057;\n border-bottom: 2px solid #dee2e6;\n white-space: nowrap;\n}\n\n.model-comparison[_ngcontent-%COMP%] td[_ngcontent-%COMP%] {\n padding: 12px;\n border-bottom: 1px solid #dee2e6;\n}\n\n.model-comparison[_ngcontent-%COMP%] tr[_ngcontent-%COMP%]:hover {\n background-color: #f8f9fa;\n}\n\n\n\n.timeline-stats[_ngcontent-%COMP%] {\n display: grid;\n grid-template-columns: repeat(auto-fit, minmax(200px, 1fr));\n gap: 20px;\n margin-bottom: 30px;\n}\n\n.stat-item[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n align-items: center;\n padding: 20px;\n background-color: #f8f9fa;\n border-radius: 8px;\n}\n\n.stat-label[_ngcontent-%COMP%] {\n font-size: 14px;\n color: #6c757d;\n margin-bottom: 8px;\n}\n\n.stat-value[_ngcontent-%COMP%] {\n font-size: 32px;\n font-weight: 700;\n color: #212529;\n}\n\n.step-breakdown[_ngcontent-%COMP%] h3[_ngcontent-%COMP%] {\n margin: 0 0 15px 0;\n font-size: 16px;\n font-weight: 500;\n color: #495057;\n}\n\n.step-type-list[_ngcontent-%COMP%] {\n display: grid;\n grid-template-columns: repeat(auto-fill, minmax(250px, 1fr));\n gap: 12px;\n}\n\n.step-type-item[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 10px;\n padding: 12px;\n background-color: #f8f9fa;\n border-radius: 6px;\n border: 1px solid #e9ecef;\n}\n\n.step-type-item[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n width: 30px;\n text-align: center;\n color: #6c757d;\n}\n\n.type-name[_ngcontent-%COMP%] {\n flex: 1;\n font-weight: 500;\n}\n\n.type-count[_ngcontent-%COMP%] {\n font-weight: 700;\n color: #212529;\n}\n\n.type-percentage[_ngcontent-%COMP%] {\n font-size: 13px;\n color: #6c757d;\n margin-left: 5px;\n}\n\n\n\n@media (max-width: 768px) {\n .summary-cards[_ngcontent-%COMP%] {\n grid-template-columns: 1fr;\n }\n \n .charts-grid[_ngcontent-%COMP%] {\n grid-template-columns: 1fr;\n }\n \n .timeline-stats[_ngcontent-%COMP%] {\n grid-template-columns: repeat(2, 1fr);\n }\n}"] }); }
2066
+ } }, dependencies: [i2.NgClass, i2.NgForOf, i2.NgIf, i3.PanelBarComponent, i3.PanelBarItemComponent, i3.PanelBarContentDirective, i3.PanelBarItemTitleDirective, i4.ButtonComponent, i2.DecimalPipe, i2.KeyValuePipe], styles: [".analytics-container[_ngcontent-%COMP%] {\n padding: 20px;\n height: 100%;\n overflow-y: auto;\n background-color: #f8f9fa;\n}\n\n\n\n.loading-state[_ngcontent-%COMP%], \n.error-state[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: center;\n height: 300px;\n color: #6c757d;\n}\n\n.loading-state[_ngcontent-%COMP%] i[_ngcontent-%COMP%], \n.error-state[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n margin-bottom: 15px;\n}\n\n.error-state[_ngcontent-%COMP%] {\n color: #dc3545;\n}\n\n\n\n.summary-cards[_ngcontent-%COMP%] {\n display: grid;\n grid-template-columns: repeat(auto-fit, minmax(250px, 1fr));\n gap: 20px;\n margin-bottom: 30px;\n}\n\n.summary-card[_ngcontent-%COMP%] {\n background: white;\n border-radius: 8px;\n padding: 20px;\n box-shadow: 0 2px 4px rgba(0, 0, 0, 0.1);\n display: flex;\n align-items: center;\n transition: transform 0.2s, box-shadow 0.2s;\n}\n\n.summary-card[_ngcontent-%COMP%]:hover {\n transform: translateY(-2px);\n box-shadow: 0 4px 8px rgba(0, 0, 0, 0.15);\n}\n\n.card-icon[_ngcontent-%COMP%] {\n width: 60px;\n height: 60px;\n border-radius: 12px;\n display: flex;\n align-items: center;\n justify-content: center;\n margin-right: 20px;\n font-size: 24px;\n color: white;\n}\n\n.card-icon.prompts[_ngcontent-%COMP%] {\n background: linear-gradient(135deg, #667eea 0%, #764ba2 100%);\n}\n\n.card-icon.actions[_ngcontent-%COMP%] {\n background: linear-gradient(135deg, #f093fb 0%, #f5576c 100%);\n}\n\n.card-icon.cost[_ngcontent-%COMP%] {\n background: linear-gradient(135deg, #4facfe 0%, #00f2fe 100%);\n}\n\n.card-icon.time[_ngcontent-%COMP%] {\n background: linear-gradient(135deg, #fa709a 0%, #fee140 100%);\n}\n\n.card-content[_ngcontent-%COMP%] h3[_ngcontent-%COMP%] {\n margin: 0 0 8px 0;\n font-size: 14px;\n font-weight: 500;\n color: #6c757d;\n text-transform: uppercase;\n letter-spacing: 0.5px;\n}\n\n.metric-value[_ngcontent-%COMP%] {\n font-size: 28px;\n font-weight: 700;\n color: #212529;\n margin-bottom: 4px;\n}\n\n.metric-detail[_ngcontent-%COMP%] {\n font-size: 13px;\n color: #6c757d;\n}\n\n.metric-detail[_ngcontent-%COMP%] .success[_ngcontent-%COMP%] {\n color: #28a745;\n margin-right: 10px;\n}\n\n.metric-detail[_ngcontent-%COMP%] .failed[_ngcontent-%COMP%] {\n color: #dc3545;\n}\n\n\n\n.analytics-panel[_ngcontent-%COMP%] {\n padding: 15px;\n}\n\n\n\n .analytics-content .k-panelbar {\n border: none;\n background: transparent;\n}\n\n .analytics-content .k-panelbar > .k-panelbar-item {\n border: none;\n border-radius: 12px;\n margin-bottom: 12px;\n box-shadow: 0 2px 8px rgba(0,0,0,0.06);\n background: white;\n overflow: hidden;\n}\n\n .analytics-content .k-panelbar > .k-panelbar-item > .k-header {\n background: white;\n border: none;\n padding: 16px 20px;\n border-radius: 12px 12px 0 0;\n color: #2c3e50;\n font-weight: 600;\n font-size: 16px;\n transition: all 0.2s ease;\n display: flex;\n align-items: center;\n gap: 12px;\n}\n\n .analytics-content .k-panelbar > .k-panelbar-item > .k-header:hover {\n background: #f8f9fa;\n}\n\n .analytics-content .k-panelbar > .k-panelbar-item.k-panelbar-expanded > .k-header {\n background: #2196f3;\n color: white;\n border-radius: 12px 12px 0 0;\n}\n\n .analytics-content .k-panelbar > .k-panelbar-item > .k-header .k-panelbar-toggle {\n position: absolute;\n right: 24px;\n color: inherit;\n font-size: 14px;\n transition: transform 0.2s ease;\n}\n\n .analytics-content .k-panelbar > .k-panelbar-item.k-panelbar-expanded > .k-header .k-panelbar-toggle {\n transform: rotate(180deg);\n}\n\n .analytics-content .k-panelbar > .k-panelbar-item > .k-header .k-panelbar-toggle::before {\n content: '\\f107';\n font-family: 'Font Awesome 6 Free';\n font-weight: 900;\n}\n\n .analytics-content .k-panelbar > .k-panelbar-item > .k-content {\n padding: 0;\n border: none;\n background: white;\n border-radius: 0 0 12px 12px;\n}\n\n .analytics-content .k-panelbar .k-header .k-panelbar-icon {\n font-size: 18px;\n color: #2196f3;\n margin-right: 8px;\n}\n\n .analytics-content .k-panelbar .k-panelbar-expanded .k-header .k-panelbar-icon {\n color: white;\n}\n\n\n\n.charts-grid[_ngcontent-%COMP%] {\n display: grid;\n grid-template-columns: repeat(auto-fit, minmax(350px, 1fr));\n gap: 20px;\n margin-bottom: 20px;\n}\n\n\n\n.chart-card[_ngcontent-%COMP%] {\n background: white;\n border-radius: 8px;\n box-shadow: 0 2px 4px rgba(0, 0, 0, 0.1);\n overflow: hidden;\n transition: all 0.3s ease;\n}\n\n.chart-card.expanded[_ngcontent-%COMP%] {\n grid-column: 1 / -1;\n}\n\n.chart-card-header[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n justify-content: space-between;\n padding: 12px 16px;\n background-color: #f8f9fa;\n border-bottom: 1px solid #e9ecef;\n cursor: pointer;\n user-select: none;\n}\n\n.chart-card-header[_ngcontent-%COMP%]:hover {\n background-color: #e9ecef;\n}\n\n.chart-card-header[_ngcontent-%COMP%] h3[_ngcontent-%COMP%] {\n margin: 0;\n font-size: 14px;\n font-weight: 600;\n color: #495057;\n display: flex;\n align-items: center;\n gap: 8px;\n}\n\n.chart-card-header[_ngcontent-%COMP%] h3[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n font-size: 16px;\n color: #6c757d;\n}\n\n.expand-btn[_ngcontent-%COMP%] {\n background: none;\n border: none;\n padding: 4px 8px;\n cursor: pointer;\n color: #6c757d;\n transition: color 0.2s;\n}\n\n.expand-btn[_ngcontent-%COMP%]:hover {\n color: #495057;\n}\n\n.chart-card-body[_ngcontent-%COMP%] {\n padding: 16px;\n background: white;\n}\n\n.chart-card.expanded[_ngcontent-%COMP%] .chart-card-body[_ngcontent-%COMP%] {\n padding: 24px;\n}\n\n.chart-card.expanded[_ngcontent-%COMP%] .chart-container[_ngcontent-%COMP%] > div[_ngcontent-%COMP%] {\n min-height: 400px;\n}\n\n\n\n.view-mode-toggle[_ngcontent-%COMP%] {\n display: flex;\n justify-content: flex-end;\n margin-bottom: 16px;\n}\n\n.view-mode-toggle[_ngcontent-%COMP%] button[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 6px;\n}\n\n.chart-container[_ngcontent-%COMP%] {\n position: relative;\n}\n\n.chart-container[_ngcontent-%COMP%] h3[_ngcontent-%COMP%] {\n margin: 0 0 10px 0;\n font-size: 15px;\n font-weight: 500;\n color: #495057;\n}\n\n.chart-container[_ngcontent-%COMP%] > div[_ngcontent-%COMP%] {\n min-height: 220px;\n width: 100%;\n display: flex;\n justify-content: center;\n align-items: center;\n}\n\n\n\n.chart-container[_ngcontent-%COMP%] svg[_ngcontent-%COMP%] {\n display: block;\n margin: 0 auto;\n}\n\n.chart-legend[_ngcontent-%COMP%] {\n margin-top: 10px;\n display: flex;\n flex-wrap: wrap;\n gap: 10px;\n font-size: 12px;\n}\n\n.legend-item[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 8px;\n font-size: 13px;\n}\n\n.legend-color[_ngcontent-%COMP%] {\n width: 16px;\n height: 16px;\n border-radius: 3px;\n}\n\n.chart-total[_ngcontent-%COMP%] {\n text-align: center;\n margin-top: 10px;\n font-size: 14px;\n font-weight: 500;\n color: #495057;\n}\n\n\n\n.detailed-metrics[_ngcontent-%COMP%] {\n margin-top: 20px;\n border-top: 1px solid #e9ecef;\n padding-top: 20px;\n}\n\n.detailed-metrics[_ngcontent-%COMP%] button[_ngcontent-%COMP%] {\n margin-bottom: 15px;\n}\n\n.detailed-metrics[_ngcontent-%COMP%] button[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n margin-right: 8px;\n}\n\n.metrics-table[_ngcontent-%COMP%] {\n overflow-x: auto;\n}\n\n.metrics-table[_ngcontent-%COMP%] table[_ngcontent-%COMP%] {\n width: 100%;\n border-collapse: collapse;\n}\n\n.metrics-table[_ngcontent-%COMP%] th[_ngcontent-%COMP%] {\n background-color: #f8f9fa;\n padding: 12px;\n text-align: left;\n font-weight: 600;\n color: #495057;\n border-bottom: 2px solid #dee2e6;\n}\n\n.metrics-table[_ngcontent-%COMP%] td[_ngcontent-%COMP%] {\n padding: 12px;\n border-bottom: 1px solid #dee2e6;\n}\n\n.metrics-table[_ngcontent-%COMP%] tr[_ngcontent-%COMP%]:hover {\n background-color: #f8f9fa;\n}\n\n.success-rate[_ngcontent-%COMP%] {\n font-weight: 500;\n}\n\n.success-rate.high[_ngcontent-%COMP%] {\n color: #28a745;\n}\n\n.success-rate.medium[_ngcontent-%COMP%] {\n color: #ffc107;\n}\n\n.success-rate.low[_ngcontent-%COMP%] {\n color: #dc3545;\n}\n\n\n\n.error-analysis[_ngcontent-%COMP%] {\n margin-top: 30px;\n padding: 20px;\n background-color: #fff5f5;\n border-radius: 8px;\n border: 1px solid #f5c6cb;\n}\n\n.error-analysis[_ngcontent-%COMP%] h3[_ngcontent-%COMP%] {\n margin: 0 0 15px 0;\n color: #721c24;\n display: flex;\n align-items: center;\n gap: 8px;\n}\n\n.error-analysis-description[_ngcontent-%COMP%] {\n font-size: 14px;\n color: #856404;\n margin-bottom: 20px;\n line-height: 1.5;\n}\n\n.error-list[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n gap: 10px;\n}\n\n.error-item[_ngcontent-%COMP%] {\n display: flex;\n align-items: flex-start;\n gap: 12px;\n padding: 10px;\n background-color: white;\n border-radius: 4px;\n font-size: 14px;\n}\n\n.error-count[_ngcontent-%COMP%] {\n background-color: #dc3545;\n color: white;\n padding: 2px 8px;\n border-radius: 12px;\n font-size: 12px;\n font-weight: 500;\n white-space: nowrap;\n}\n\n.error-message[_ngcontent-%COMP%] {\n flex: 1;\n color: #495057;\n}\n\n\n\n.no-errors[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 12px;\n padding: 20px;\n background-color: #d4edda;\n border-radius: 8px;\n border: 1px solid #c3e6cb;\n color: #155724;\n}\n\n.no-errors[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n font-size: 24px;\n color: #28a745;\n}\n\n.no-errors[_ngcontent-%COMP%] p[_ngcontent-%COMP%] {\n margin: 0;\n font-size: 14px;\n}\n\n\n\n.no-data-message[_ngcontent-%COMP%] {\n text-align: center;\n padding: 60px 20px;\n color: #6c757d;\n}\n\n.no-data-message[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n font-size: 48px;\n margin-bottom: 20px;\n color: #dee2e6;\n}\n\n.no-data-message[_ngcontent-%COMP%] p[_ngcontent-%COMP%] {\n margin: 0 0 10px 0;\n font-size: 16px;\n}\n\n.no-data-message[_ngcontent-%COMP%] p.small[_ngcontent-%COMP%] {\n font-size: 14px;\n color: #adb5bd;\n}\n\n\n\n.model-comparison[_ngcontent-%COMP%] {\n overflow-x: auto;\n}\n\n.model-comparison[_ngcontent-%COMP%] table[_ngcontent-%COMP%] {\n width: 100%;\n border-collapse: collapse;\n}\n\n.model-comparison[_ngcontent-%COMP%] th[_ngcontent-%COMP%] {\n background-color: #f8f9fa;\n padding: 12px;\n text-align: left;\n font-weight: 600;\n color: #495057;\n border-bottom: 2px solid #dee2e6;\n white-space: nowrap;\n}\n\n.model-comparison[_ngcontent-%COMP%] td[_ngcontent-%COMP%] {\n padding: 12px;\n border-bottom: 1px solid #dee2e6;\n}\n\n.model-comparison[_ngcontent-%COMP%] tr[_ngcontent-%COMP%]:hover {\n background-color: #f8f9fa;\n}\n\n\n\n.timeline-stats[_ngcontent-%COMP%] {\n display: grid;\n grid-template-columns: repeat(auto-fit, minmax(200px, 1fr));\n gap: 20px;\n margin-bottom: 30px;\n}\n\n.stat-item[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n align-items: center;\n padding: 20px;\n background-color: #f8f9fa;\n border-radius: 8px;\n}\n\n.stat-label[_ngcontent-%COMP%] {\n font-size: 14px;\n color: #6c757d;\n margin-bottom: 8px;\n}\n\n.stat-value[_ngcontent-%COMP%] {\n font-size: 32px;\n font-weight: 700;\n color: #212529;\n}\n\n.step-breakdown[_ngcontent-%COMP%] h3[_ngcontent-%COMP%] {\n margin: 0 0 15px 0;\n font-size: 16px;\n font-weight: 500;\n color: #495057;\n}\n\n.step-type-list[_ngcontent-%COMP%] {\n display: grid;\n grid-template-columns: repeat(auto-fill, minmax(250px, 1fr));\n gap: 12px;\n}\n\n.step-type-item[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 10px;\n padding: 12px;\n background-color: #f8f9fa;\n border-radius: 6px;\n border: 1px solid #e9ecef;\n}\n\n.step-type-item[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n width: 30px;\n text-align: center;\n color: #6c757d;\n}\n\n.type-name[_ngcontent-%COMP%] {\n flex: 1;\n font-weight: 500;\n}\n\n.type-count[_ngcontent-%COMP%] {\n font-weight: 700;\n color: #212529;\n}\n\n.type-percentage[_ngcontent-%COMP%] {\n font-size: 13px;\n color: #6c757d;\n margin-left: 5px;\n}\n\n\n\n@media (max-width: 768px) {\n .summary-cards[_ngcontent-%COMP%] {\n grid-template-columns: 1fr;\n }\n \n .charts-grid[_ngcontent-%COMP%] {\n grid-template-columns: 1fr;\n }\n \n .timeline-stats[_ngcontent-%COMP%] {\n grid-template-columns: repeat(2, 1fr);\n }\n}"] }); }
2053
2067
  }
2054
2068
  (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(AIAgentRunAnalyticsComponent, [{
2055
2069
  type: Component,
2056
2070
  args: [{ selector: 'mj-ai-agent-run-analytics', template: "<div class=\"analytics-container\">\n <!-- Loading State -->\n <div class=\"loading-state\" *ngIf=\"isLoading\">\n <i class=\"fas fa-spinner fa-spin fa-2x\"></i>\n <p>Loading analytics data...</p>\n </div>\n\n <!-- Error State -->\n <div class=\"error-state\" *ngIf=\"error && !isLoading\">\n <i class=\"fas fa-exclamation-triangle fa-2x\"></i>\n <p>{{ error }}</p>\n <button kendoButton (click)=\"loadData()\">Retry</button>\n </div>\n\n <!-- Analytics Content -->\n <div class=\"analytics-content\" *ngIf=\"!isLoading && !error\">\n <kendo-panelbar>\n <!-- Summary Cards -->\n <kendo-panelbar-item [expanded]=\"true\">\n <ng-template kendoPanelBarItemTitle>\n <i class=\"fas fa-tachometer-alt\"></i> Overview\n </ng-template>\n <ng-template kendoPanelBarContent>\n <div class=\"summary-cards\">\n <div class=\"summary-card\">\n <div class=\"card-icon prompts\">\n <i class=\"fas fa-microchip\"></i>\n </div>\n <div class=\"card-content\">\n <h3>Total Prompts</h3>\n <div class=\"metric-value\">{{ promptMetrics.totalCount }}</div>\n <div class=\"metric-detail\">\n <span class=\"success\">{{ promptMetrics.statusBreakdown.success }} successful</span>\n <span class=\"failed\" *ngIf=\"promptMetrics.statusBreakdown.failed > 0\">{{ promptMetrics.statusBreakdown.failed }} failed</span>\n </div>\n </div>\n </div>\n\n <div class=\"summary-card\">\n <div class=\"card-icon actions\">\n <i class=\"fas fa-cog\"></i>\n </div>\n <div class=\"card-content\">\n <h3>Total Actions</h3>\n <div class=\"metric-value\">{{ actionMetrics.totalCount }}</div>\n <div class=\"metric-detail\">\n <span class=\"success\">{{ actionMetrics.statusBreakdown.success }} successful</span>\n <span class=\"failed\" *ngIf=\"actionMetrics.statusBreakdown.failed > 0\">{{ actionMetrics.statusBreakdown.failed }} failed</span>\n </div>\n </div>\n </div>\n\n <div class=\"summary-card\">\n <div class=\"card-icon cost\">\n <i class=\"fas fa-dollar-sign\"></i>\n </div>\n <div class=\"card-content\">\n <h3>Total Cost</h3>\n <div class=\"metric-value\">{{ formatCost(promptMetrics.costBreakdown.totalCost) }}</div>\n <div class=\"metric-detail\">\n <span>{{ promptMetrics.tokenUsage.totalInput + promptMetrics.tokenUsage.totalOutput }} tokens</span>\n </div>\n </div>\n </div>\n\n <div class=\"summary-card\">\n <div class=\"card-icon time\">\n <i class=\"fas fa-clock\"></i>\n </div>\n <div class=\"card-content\">\n <h3>Execution Time</h3>\n <div class=\"metric-value\">{{ formatDuration(promptMetrics.totalExecutionTime + actionMetrics.totalExecutionTime) }}</div>\n <div class=\"metric-detail\">\n <span>{{ timelineMetrics.totalSteps }} total steps</span>\n </div>\n </div>\n </div>\n </div>\n </ng-template>\n </kendo-panelbar-item>\n\n <!-- Prompt Analytics -->\n <kendo-panelbar-item [expanded]=\"true\">\n <ng-template kendoPanelBarItemTitle>\n <i class=\"fas fa-microchip\"></i> Prompt Analytics\n </ng-template>\n <ng-template kendoPanelBarContent>\n <div class=\"analytics-panel\">\n <!-- View Mode Toggle -->\n <div class=\"view-mode-toggle\" *ngIf=\"promptMetrics.totalCount > 0\">\n <button kendoButton \n fillMode=\"flat\" \n size=\"small\"\n (click)=\"toggleViewMode()\">\n <i class=\"fas\" [ngClass]=\"viewMode === 'grid' ? 'fa-expand-arrows-alt' : 'fa-compress-arrows-alt'\"></i>\n {{ viewMode === 'grid' ? 'Expand All' : 'Collapse All' }}\n </button>\n </div>\n \n <!-- No prompts message -->\n <div class=\"no-data-message\" *ngIf=\"promptMetrics.totalCount === 0\">\n <i class=\"fas fa-info-circle\"></i>\n <p>No prompt executions found in this agent run.</p>\n <p class=\"small\">This agent run may have only executed actions without any AI prompts.</p>\n </div>\n\n <div class=\"charts-grid\" *ngIf=\"promptMetrics.totalCount > 0\">\n <!-- Model Distribution -->\n <div class=\"chart-card\" [class.expanded]=\"expandedCharts['modelDistribution']\">\n <div class=\"chart-card-header\" (click)=\"toggleChartExpansion('modelDistribution')\">\n <h3><i class=\"fas fa-chart-pie\"></i> Prompts by Model</h3>\n <button class=\"expand-btn\">\n <i class=\"fas\" [ngClass]=\"expandedCharts['modelDistribution'] ? 'fa-compress' : 'fa-expand'\"></i>\n </button>\n </div>\n <div class=\"chart-card-body\">\n <div class=\"chart-container\">\n <div id=\"modelDistributionChart\" #modelDistributionChart></div>\n <div class=\"chart-legend\" *ngIf=\"promptMetrics.byModel.size > 0\">\n <div class=\"legend-item\" *ngFor=\"let item of promptMetrics.byModel | keyvalue\">\n <span class=\"legend-color\" [style.backgroundColor]=\"getModelColor(item.key)\"></span>\n <span class=\"legend-label\">{{ item.key }}: {{ item.value.count }} ({{ (item.value.count / promptMetrics.totalCount * 100).toFixed(1) }}%)</span>\n </div>\n </div>\n </div>\n </div>\n </div>\n\n <!-- Execution Time by Vendor -->\n <div class=\"chart-card\" [class.expanded]=\"expandedCharts['executionTime']\">\n <div class=\"chart-card-header\" (click)=\"toggleChartExpansion('executionTime')\">\n <h3><i class=\"fas fa-clock\"></i> Average Execution Time by Vendor</h3>\n <button class=\"expand-btn\">\n <i class=\"fas\" [ngClass]=\"expandedCharts['executionTime'] ? 'fa-compress' : 'fa-expand'\"></i>\n </button>\n </div>\n <div class=\"chart-card-body\">\n <div class=\"chart-container\">\n <div id=\"executionTimeChart\" #executionTimeChart></div>\n </div>\n </div>\n </div>\n\n <!-- Cost by Vendor -->\n <div class=\"chart-card\" [class.expanded]=\"expandedCharts['costByVendor']\">\n <div class=\"chart-card-header\" (click)=\"toggleChartExpansion('costByVendor')\">\n <h3><i class=\"fas fa-dollar-sign\"></i> Cost Distribution by Vendor</h3>\n <button class=\"expand-btn\">\n <i class=\"fas\" [ngClass]=\"expandedCharts['costByVendor'] ? 'fa-compress' : 'fa-expand'\"></i>\n </button>\n </div>\n <div class=\"chart-card-body\">\n <div class=\"chart-container\">\n <div id=\"costByVendorChart\" #costByVendorChart></div>\n <div class=\"chart-total\">Total: {{ formatCost(promptMetrics.costBreakdown.totalCost) }}</div>\n </div>\n </div>\n </div>\n\n <!-- Token Usage -->\n <div class=\"chart-card\" [class.expanded]=\"expandedCharts['tokenUsage']\">\n <div class=\"chart-card-header\" (click)=\"toggleChartExpansion('tokenUsage')\">\n <h3><i class=\"fas fa-coins\"></i> Token Usage by Model</h3>\n <button class=\"expand-btn\">\n <i class=\"fas\" [ngClass]=\"expandedCharts['tokenUsage'] ? 'fa-compress' : 'fa-expand'\"></i>\n </button>\n </div>\n <div class=\"chart-card-body\">\n <div class=\"chart-container\">\n <div id=\"tokenUsageChart\" #tokenUsageChart></div>\n </div>\n </div>\n </div>\n </div>\n\n <!-- Additional Prompt Analytics Charts -->\n <div class=\"charts-grid\" style=\"margin-top: 20px;\" *ngIf=\"promptMetrics.totalCount > 0\">\n <!-- Prompt Execution Time Distribution -->\n <div class=\"chart-card\" [class.expanded]=\"expandedCharts['promptTime']\">\n <div class=\"chart-card-header\" (click)=\"toggleChartExpansion('promptTime')\">\n <h3><i class=\"fas fa-hourglass-half\"></i> Average Execution Time by Prompt</h3>\n <button class=\"expand-btn\">\n <i class=\"fas\" [ngClass]=\"expandedCharts['promptTime'] ? 'fa-compress' : 'fa-expand'\"></i>\n </button>\n </div>\n <div class=\"chart-card-body\">\n <div class=\"chart-container\">\n <div id=\"promptTimeDistributionChart\" #promptTimeDistributionChart></div>\n </div>\n </div>\n </div>\n\n <!-- Prompt Token Usage -->\n <div class=\"chart-card\" [class.expanded]=\"expandedCharts['promptToken']\">\n <div class=\"chart-card-header\" (click)=\"toggleChartExpansion('promptToken')\">\n <h3><i class=\"fas fa-database\"></i> Token Usage by Prompt</h3>\n <button class=\"expand-btn\">\n <i class=\"fas\" [ngClass]=\"expandedCharts['promptToken'] ? 'fa-compress' : 'fa-expand'\"></i>\n </button>\n </div>\n <div class=\"chart-card-body\">\n <div class=\"chart-container\">\n <div id=\"promptTokenDistributionChart\" #promptTokenDistributionChart></div>\n </div>\n </div>\n </div>\n\n <!-- Prompt Cost Distribution -->\n <div class=\"chart-card\" [class.expanded]=\"expandedCharts['promptCost']\">\n <div class=\"chart-card-header\" (click)=\"toggleChartExpansion('promptCost')\">\n <h3><i class=\"fas fa-chart-pie\"></i> Cost Distribution by Prompt</h3>\n <button class=\"expand-btn\">\n <i class=\"fas\" [ngClass]=\"expandedCharts['promptCost'] ? 'fa-compress' : 'fa-expand'\"></i>\n </button>\n </div>\n <div class=\"chart-card-body\">\n <div class=\"chart-container\">\n <div id=\"promptCostDistributionChart\" #promptCostDistributionChart></div>\n </div>\n </div>\n </div>\n\n <!-- Prompt Count by Name -->\n <div class=\"chart-card\" [class.expanded]=\"expandedCharts['promptCount']\">\n <div class=\"chart-card-header\" (click)=\"toggleChartExpansion('promptCount')\">\n <h3><i class=\"fas fa-list-ol\"></i> Prompt Execution Count</h3>\n <button class=\"expand-btn\">\n <i class=\"fas\" [ngClass]=\"expandedCharts['promptCount'] ? 'fa-compress' : 'fa-expand'\"></i>\n </button>\n </div>\n <div class=\"chart-card-body\">\n <div class=\"chart-container\">\n <div id=\"promptCountByNameChart\" #promptCountByNameChart></div>\n </div>\n </div>\n </div>\n </div>\n\n <!-- Detailed Prompt Metrics -->\n <div class=\"detailed-metrics\">\n <button kendoButton \n fillMode=\"flat\" \n (click)=\"promptDetailsExpanded = !promptDetailsExpanded\">\n <i class=\"fas\" [ngClass]=\"promptDetailsExpanded ? 'fa-chevron-up' : 'fa-chevron-down'\"></i>\n Detailed Prompt Metrics\n </button>\n \n <div class=\"metrics-table\" *ngIf=\"promptDetailsExpanded\">\n <table>\n <thead>\n <tr>\n <th>Prompt Name</th>\n <th>Count</th>\n <th>Avg Time</th>\n <th>Total Time</th>\n <th>Success Rate</th>\n </tr>\n </thead>\n <tbody>\n <tr *ngFor=\"let prompt of promptMetrics.byPrompt | keyvalue\">\n <td>{{ prompt.key }}</td>\n <td>{{ prompt.value.count }}</td>\n <td>{{ formatDuration(prompt.value.avgTime) }}</td>\n <td>{{ formatDuration(prompt.value.totalTime) }}</td>\n <td>\n <span class=\"success-rate\">\n <!-- Calculate success rate for this prompt -->\n {{ calculatePromptSuccessRate(prompt.key) }}%\n </span>\n </td>\n </tr>\n </tbody>\n </table>\n </div>\n </div>\n </div>\n </ng-template>\n </kendo-panelbar-item>\n\n <!-- Action Analytics -->\n <kendo-panelbar-item [expanded]=\"true\">\n <ng-template kendoPanelBarItemTitle>\n <i class=\"fas fa-cog\"></i> Action Analytics\n </ng-template>\n <ng-template kendoPanelBarContent>\n <div class=\"analytics-panel\">\n\n <div class=\"charts-grid\">\n <!-- Action Success Rate -->\n <div class=\"chart-card\" [class.expanded]=\"expandedCharts['actionSuccess']\">\n <div class=\"chart-card-header\" (click)=\"toggleChartExpansion('actionSuccess')\">\n <h3><i class=\"fas fa-chart-bar\"></i> Action Success Rate</h3>\n <button class=\"expand-btn\">\n <i class=\"fas\" [ngClass]=\"expandedCharts['actionSuccess'] ? 'fa-compress' : 'fa-expand'\"></i>\n </button>\n </div>\n <div class=\"chart-card-body\">\n <div class=\"chart-container\">\n <div id=\"actionSuccessRateChart\" #actionSuccessRateChart></div>\n </div>\n </div>\n </div>\n\n <!-- Step Type Distribution -->\n <div class=\"chart-card\" [class.expanded]=\"expandedCharts['stepType']\">\n <div class=\"chart-card-header\" (click)=\"toggleChartExpansion('stepType')\">\n <h3><i class=\"fas fa-layer-group\"></i> Step Type Distribution</h3>\n <button class=\"expand-btn\">\n <i class=\"fas\" [ngClass]=\"expandedCharts['stepType'] ? 'fa-compress' : 'fa-expand'\"></i>\n </button>\n </div>\n <div class=\"chart-card-body\">\n <div class=\"chart-container\">\n <div id=\"stepTypeChart\" #stepTypeChart></div>\n </div>\n </div>\n </div>\n </div>\n\n <!-- Detailed Action Metrics -->\n <div class=\"detailed-metrics\">\n <button kendoButton \n fillMode=\"flat\" \n (click)=\"actionDetailsExpanded = !actionDetailsExpanded\">\n <i class=\"fas\" [ngClass]=\"actionDetailsExpanded ? 'fa-chevron-up' : 'fa-chevron-down'\"></i>\n Detailed Action Metrics\n </button>\n \n <div class=\"metrics-table\" *ngIf=\"actionDetailsExpanded\">\n <table>\n <thead>\n <tr>\n <th>Action Name</th>\n <th>Count</th>\n <th>Avg Time</th>\n <th>Success Rate</th>\n <th>Type</th>\n </tr>\n </thead>\n <tbody>\n <tr *ngFor=\"let action of actionMetrics.byAction | keyvalue\">\n <td>{{ action.key }}</td>\n <td>{{ action.value.count }}</td>\n <td>{{ formatDuration(action.value.avgTime) }}</td>\n <td>\n <span class=\"success-rate\" [class.high]=\"action.value.successRate > 0.9\" \n [class.medium]=\"action.value.successRate > 0.7 && action.value.successRate <= 0.9\"\n [class.low]=\"action.value.successRate <= 0.7\">\n {{ (action.value.successRate * 100).toFixed(1) }}%\n </span>\n </td>\n <td>{{ getActionType(action.key) }}</td>\n </tr>\n </tbody>\n </table>\n </div>\n </div>\n\n <!-- Error Analysis -->\n <div class=\"error-analysis-section\">\n <div class=\"error-analysis\" *ngIf=\"actionMetrics.errorAnalysis.size > 0\">\n <h3>\n <i class=\"fas fa-exclamation-triangle\"></i>\n Common Errors\n </h3>\n <p class=\"error-analysis-description\">\n This section shows the most frequent error messages from failed actions, helping identify systemic issues that may need attention.\n </p>\n <div class=\"error-list\">\n <div class=\"error-item\" *ngFor=\"let error of getTopErrors()\">\n <span class=\"error-count\">{{ error.count }}x</span>\n <span class=\"error-message\">{{ error.message }}</span>\n </div>\n </div>\n </div>\n <div class=\"no-errors\" *ngIf=\"actionMetrics.errorAnalysis.size === 0\">\n <i class=\"fas fa-check-circle\"></i>\n <p>No action errors detected in this run. All actions completed successfully!</p>\n </div>\n </div>\n </div>\n </ng-template>\n </kendo-panelbar-item>\n\n <!-- Model Performance Comparison -->\n <kendo-panelbar-item [expanded]=\"true\">\n <ng-template kendoPanelBarItemTitle>\n <i class=\"fas fa-chart-line\"></i> Model Performance Comparison\n </ng-template>\n <ng-template kendoPanelBarContent>\n <div class=\"analytics-panel\">\n\n <div class=\"model-comparison\">\n <table>\n <thead>\n <tr>\n <th>Model</th>\n <th>Vendor</th>\n <th>Prompts</th>\n <th>Avg Time</th>\n <th>Total Cost</th>\n <th>Avg Cost/Prompt</th>\n <th>Input Tokens</th>\n <th>Output Tokens</th>\n </tr>\n </thead>\n <tbody>\n <tr *ngFor=\"let model of getModelPerformanceData()\">\n <td>{{ model.name }}</td>\n <td>{{ model.vendor }}</td>\n <td>{{ model.count }}</td>\n <td>{{ formatDuration(model.avgTime) }}</td>\n <td>{{ formatCost(model.totalCost) }}</td>\n <td>{{ formatCost(model.avgCost) }}</td>\n <td>{{ model.inputTokens | number:'1.0-0' }}</td>\n <td>{{ model.outputTokens | number:'1.0-0' }}</td>\n </tr>\n </tbody>\n </table>\n </div>\n </div>\n </ng-template>\n </kendo-panelbar-item>\n\n <!-- Timeline Analysis -->\n <kendo-panelbar-item [expanded]=\"true\">\n <ng-template kendoPanelBarItemTitle>\n <i class=\"fas fa-stream\"></i> Execution Timeline Analysis\n </ng-template>\n <ng-template kendoPanelBarContent>\n <div class=\"analytics-panel\">\n\n <div class=\"timeline-stats\">\n <div class=\"stat-item\">\n <span class=\"stat-label\">Total Steps</span>\n <span class=\"stat-value\">{{ timelineMetrics.totalSteps }}</span>\n </div>\n <div class=\"stat-item\">\n <span class=\"stat-label\">Parallel Executions</span>\n <span class=\"stat-value\">{{ timelineMetrics.parallelExecutions }}</span>\n </div>\n <div class=\"stat-item\">\n <span class=\"stat-label\">Max Nesting Depth</span>\n <span class=\"stat-value\">{{ timelineMetrics.deepestNesting }}</span>\n </div>\n <div class=\"stat-item\">\n <span class=\"stat-label\">Sub-Agent Runs</span>\n <span class=\"stat-value\">{{ subAgentRuns.length }}</span>\n </div>\n </div>\n\n <div class=\"step-breakdown\">\n <h3>Steps by Type</h3>\n <div class=\"step-type-list\">\n <div class=\"step-type-item\" *ngFor=\"let type of timelineMetrics.stepsByType | keyvalue\">\n <i class=\"fas\" [ngClass]=\"getStepTypeIcon(type.key)\"></i>\n <span class=\"type-name\">{{ type.key }}</span>\n <span class=\"type-count\">{{ type.value }}</span>\n <span class=\"type-percentage\">({{ (type.value / timelineMetrics.totalSteps * 100).toFixed(1) }}%)</span>\n </div>\n </div>\n </div>\n </div>\n </ng-template>\n </kendo-panelbar-item>\n </kendo-panelbar>\n </div>\n</div>", styles: [".analytics-container {\n padding: 20px;\n height: 100%;\n overflow-y: auto;\n background-color: #f8f9fa;\n}\n\n/* Loading and Error States */\n.loading-state,\n.error-state {\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: center;\n height: 300px;\n color: #6c757d;\n}\n\n.loading-state i,\n.error-state i {\n margin-bottom: 15px;\n}\n\n.error-state {\n color: #dc3545;\n}\n\n/* Summary Cards */\n.summary-cards {\n display: grid;\n grid-template-columns: repeat(auto-fit, minmax(250px, 1fr));\n gap: 20px;\n margin-bottom: 30px;\n}\n\n.summary-card {\n background: white;\n border-radius: 8px;\n padding: 20px;\n box-shadow: 0 2px 4px rgba(0, 0, 0, 0.1);\n display: flex;\n align-items: center;\n transition: transform 0.2s, box-shadow 0.2s;\n}\n\n.summary-card:hover {\n transform: translateY(-2px);\n box-shadow: 0 4px 8px rgba(0, 0, 0, 0.15);\n}\n\n.card-icon {\n width: 60px;\n height: 60px;\n border-radius: 12px;\n display: flex;\n align-items: center;\n justify-content: center;\n margin-right: 20px;\n font-size: 24px;\n color: white;\n}\n\n.card-icon.prompts {\n background: linear-gradient(135deg, #667eea 0%, #764ba2 100%);\n}\n\n.card-icon.actions {\n background: linear-gradient(135deg, #f093fb 0%, #f5576c 100%);\n}\n\n.card-icon.cost {\n background: linear-gradient(135deg, #4facfe 0%, #00f2fe 100%);\n}\n\n.card-icon.time {\n background: linear-gradient(135deg, #fa709a 0%, #fee140 100%);\n}\n\n.card-content h3 {\n margin: 0 0 8px 0;\n font-size: 14px;\n font-weight: 500;\n color: #6c757d;\n text-transform: uppercase;\n letter-spacing: 0.5px;\n}\n\n.metric-value {\n font-size: 28px;\n font-weight: 700;\n color: #212529;\n margin-bottom: 4px;\n}\n\n.metric-detail {\n font-size: 13px;\n color: #6c757d;\n}\n\n.metric-detail .success {\n color: #28a745;\n margin-right: 10px;\n}\n\n.metric-detail .failed {\n color: #dc3545;\n}\n\n/* Analytics Panels */\n.analytics-panel {\n padding: 15px;\n}\n\n/* Kendo PanelBar Styling - Copied from AI Agent Form */\n::ng-deep .analytics-content .k-panelbar {\n border: none;\n background: transparent;\n}\n\n::ng-deep .analytics-content .k-panelbar > .k-panelbar-item {\n border: none;\n border-radius: 12px;\n margin-bottom: 12px;\n box-shadow: 0 2px 8px rgba(0,0,0,0.06);\n background: white;\n overflow: hidden;\n}\n\n::ng-deep .analytics-content .k-panelbar > .k-panelbar-item > .k-header {\n background: white;\n border: none;\n padding: 16px 20px;\n border-radius: 12px 12px 0 0;\n color: #2c3e50;\n font-weight: 600;\n font-size: 16px;\n transition: all 0.2s ease;\n display: flex;\n align-items: center;\n gap: 12px;\n}\n\n::ng-deep .analytics-content .k-panelbar > .k-panelbar-item > .k-header:hover {\n background: #f8f9fa;\n}\n\n::ng-deep .analytics-content .k-panelbar > .k-panelbar-item.k-panelbar-expanded > .k-header {\n background: #2196f3;\n color: white;\n border-radius: 12px 12px 0 0;\n}\n\n::ng-deep .analytics-content .k-panelbar > .k-panelbar-item > .k-header .k-panelbar-toggle {\n position: absolute;\n right: 24px;\n color: inherit;\n font-size: 14px;\n transition: transform 0.2s ease;\n}\n\n::ng-deep .analytics-content .k-panelbar > .k-panelbar-item.k-panelbar-expanded > .k-header .k-panelbar-toggle {\n transform: rotate(180deg);\n}\n\n::ng-deep .analytics-content .k-panelbar > .k-panelbar-item > .k-header .k-panelbar-toggle::before {\n content: '\\f107';\n font-family: 'Font Awesome 6 Free';\n font-weight: 900;\n}\n\n::ng-deep .analytics-content .k-panelbar > .k-panelbar-item > .k-content {\n padding: 0;\n border: none;\n background: white;\n border-radius: 0 0 12px 12px;\n}\n\n::ng-deep .analytics-content .k-panelbar .k-header .k-panelbar-icon {\n font-size: 18px;\n color: #2196f3;\n margin-right: 8px;\n}\n\n::ng-deep .analytics-content .k-panelbar .k-panelbar-expanded .k-header .k-panelbar-icon {\n color: white;\n}\n\n/* Charts */\n.charts-grid {\n display: grid;\n grid-template-columns: repeat(auto-fit, minmax(350px, 1fr));\n gap: 20px;\n margin-bottom: 20px;\n}\n\n/* Chart Cards */\n.chart-card {\n background: white;\n border-radius: 8px;\n box-shadow: 0 2px 4px rgba(0, 0, 0, 0.1);\n overflow: hidden;\n transition: all 0.3s ease;\n}\n\n.chart-card.expanded {\n grid-column: 1 / -1;\n}\n\n.chart-card-header {\n display: flex;\n align-items: center;\n justify-content: space-between;\n padding: 12px 16px;\n background-color: #f8f9fa;\n border-bottom: 1px solid #e9ecef;\n cursor: pointer;\n user-select: none;\n}\n\n.chart-card-header:hover {\n background-color: #e9ecef;\n}\n\n.chart-card-header h3 {\n margin: 0;\n font-size: 14px;\n font-weight: 600;\n color: #495057;\n display: flex;\n align-items: center;\n gap: 8px;\n}\n\n.chart-card-header h3 i {\n font-size: 16px;\n color: #6c757d;\n}\n\n.expand-btn {\n background: none;\n border: none;\n padding: 4px 8px;\n cursor: pointer;\n color: #6c757d;\n transition: color 0.2s;\n}\n\n.expand-btn:hover {\n color: #495057;\n}\n\n.chart-card-body {\n padding: 16px;\n background: white;\n}\n\n.chart-card.expanded .chart-card-body {\n padding: 24px;\n}\n\n.chart-card.expanded .chart-container > div {\n min-height: 400px;\n}\n\n/* View Mode Toggle */\n.view-mode-toggle {\n display: flex;\n justify-content: flex-end;\n margin-bottom: 16px;\n}\n\n.view-mode-toggle button {\n display: flex;\n align-items: center;\n gap: 6px;\n}\n\n.chart-container {\n position: relative;\n}\n\n.chart-container h3 {\n margin: 0 0 10px 0;\n font-size: 15px;\n font-weight: 500;\n color: #495057;\n}\n\n.chart-container > div {\n min-height: 220px;\n width: 100%;\n display: flex;\n justify-content: center;\n align-items: center;\n}\n\n/* Ensure SVG charts are centered */\n.chart-container svg {\n display: block;\n margin: 0 auto;\n}\n\n.chart-legend {\n margin-top: 10px;\n display: flex;\n flex-wrap: wrap;\n gap: 10px;\n font-size: 12px;\n}\n\n.legend-item {\n display: flex;\n align-items: center;\n gap: 8px;\n font-size: 13px;\n}\n\n.legend-color {\n width: 16px;\n height: 16px;\n border-radius: 3px;\n}\n\n.chart-total {\n text-align: center;\n margin-top: 10px;\n font-size: 14px;\n font-weight: 500;\n color: #495057;\n}\n\n/* Detailed Metrics */\n.detailed-metrics {\n margin-top: 20px;\n border-top: 1px solid #e9ecef;\n padding-top: 20px;\n}\n\n.detailed-metrics button {\n margin-bottom: 15px;\n}\n\n.detailed-metrics button i {\n margin-right: 8px;\n}\n\n.metrics-table {\n overflow-x: auto;\n}\n\n.metrics-table table {\n width: 100%;\n border-collapse: collapse;\n}\n\n.metrics-table th {\n background-color: #f8f9fa;\n padding: 12px;\n text-align: left;\n font-weight: 600;\n color: #495057;\n border-bottom: 2px solid #dee2e6;\n}\n\n.metrics-table td {\n padding: 12px;\n border-bottom: 1px solid #dee2e6;\n}\n\n.metrics-table tr:hover {\n background-color: #f8f9fa;\n}\n\n.success-rate {\n font-weight: 500;\n}\n\n.success-rate.high {\n color: #28a745;\n}\n\n.success-rate.medium {\n color: #ffc107;\n}\n\n.success-rate.low {\n color: #dc3545;\n}\n\n/* Error Analysis */\n.error-analysis {\n margin-top: 30px;\n padding: 20px;\n background-color: #fff5f5;\n border-radius: 8px;\n border: 1px solid #f5c6cb;\n}\n\n.error-analysis h3 {\n margin: 0 0 15px 0;\n color: #721c24;\n display: flex;\n align-items: center;\n gap: 8px;\n}\n\n.error-analysis-description {\n font-size: 14px;\n color: #856404;\n margin-bottom: 20px;\n line-height: 1.5;\n}\n\n.error-list {\n display: flex;\n flex-direction: column;\n gap: 10px;\n}\n\n.error-item {\n display: flex;\n align-items: flex-start;\n gap: 12px;\n padding: 10px;\n background-color: white;\n border-radius: 4px;\n font-size: 14px;\n}\n\n.error-count {\n background-color: #dc3545;\n color: white;\n padding: 2px 8px;\n border-radius: 12px;\n font-size: 12px;\n font-weight: 500;\n white-space: nowrap;\n}\n\n.error-message {\n flex: 1;\n color: #495057;\n}\n\n/* No errors state */\n.no-errors {\n display: flex;\n align-items: center;\n gap: 12px;\n padding: 20px;\n background-color: #d4edda;\n border-radius: 8px;\n border: 1px solid #c3e6cb;\n color: #155724;\n}\n\n.no-errors i {\n font-size: 24px;\n color: #28a745;\n}\n\n.no-errors p {\n margin: 0;\n font-size: 14px;\n}\n\n/* No data message */\n.no-data-message {\n text-align: center;\n padding: 60px 20px;\n color: #6c757d;\n}\n\n.no-data-message i {\n font-size: 48px;\n margin-bottom: 20px;\n color: #dee2e6;\n}\n\n.no-data-message p {\n margin: 0 0 10px 0;\n font-size: 16px;\n}\n\n.no-data-message p.small {\n font-size: 14px;\n color: #adb5bd;\n}\n\n/* Model Comparison Table */\n.model-comparison {\n overflow-x: auto;\n}\n\n.model-comparison table {\n width: 100%;\n border-collapse: collapse;\n}\n\n.model-comparison th {\n background-color: #f8f9fa;\n padding: 12px;\n text-align: left;\n font-weight: 600;\n color: #495057;\n border-bottom: 2px solid #dee2e6;\n white-space: nowrap;\n}\n\n.model-comparison td {\n padding: 12px;\n border-bottom: 1px solid #dee2e6;\n}\n\n.model-comparison tr:hover {\n background-color: #f8f9fa;\n}\n\n/* Timeline Analysis */\n.timeline-stats {\n display: grid;\n grid-template-columns: repeat(auto-fit, minmax(200px, 1fr));\n gap: 20px;\n margin-bottom: 30px;\n}\n\n.stat-item {\n display: flex;\n flex-direction: column;\n align-items: center;\n padding: 20px;\n background-color: #f8f9fa;\n border-radius: 8px;\n}\n\n.stat-label {\n font-size: 14px;\n color: #6c757d;\n margin-bottom: 8px;\n}\n\n.stat-value {\n font-size: 32px;\n font-weight: 700;\n color: #212529;\n}\n\n.step-breakdown h3 {\n margin: 0 0 15px 0;\n font-size: 16px;\n font-weight: 500;\n color: #495057;\n}\n\n.step-type-list {\n display: grid;\n grid-template-columns: repeat(auto-fill, minmax(250px, 1fr));\n gap: 12px;\n}\n\n.step-type-item {\n display: flex;\n align-items: center;\n gap: 10px;\n padding: 12px;\n background-color: #f8f9fa;\n border-radius: 6px;\n border: 1px solid #e9ecef;\n}\n\n.step-type-item i {\n width: 30px;\n text-align: center;\n color: #6c757d;\n}\n\n.type-name {\n flex: 1;\n font-weight: 500;\n}\n\n.type-count {\n font-weight: 700;\n color: #212529;\n}\n\n.type-percentage {\n font-size: 13px;\n color: #6c757d;\n margin-left: 5px;\n}\n\n/* Responsive */\n@media (max-width: 768px) {\n .summary-cards {\n grid-template-columns: 1fr;\n }\n \n .charts-grid {\n grid-template-columns: 1fr;\n }\n \n .timeline-stats {\n grid-template-columns: repeat(2, 1fr);\n }\n}"] }]
2057
- }], () => [{ type: i0.ChangeDetectorRef }], { agentRunId: [{
2071
+ }], () => [{ type: i0.ChangeDetectorRef }, { type: i1.AIAgentRunCostService }], { agentRunId: [{
2058
2072
  type: Input
2059
2073
  }], modelDistributionChart: [{
2060
2074
  type: ViewChild,
@@ -2087,5 +2101,5 @@ export class AIAgentRunAnalyticsComponent {
2087
2101
  type: ViewChild,
2088
2102
  args: ['promptCountByNameChart', { static: false }]
2089
2103
  }] }); })();
2090
- (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassDebugInfo(AIAgentRunAnalyticsComponent, { className: "AIAgentRunAnalyticsComponent", filePath: "src/lib/custom/ai-agent-run/ai-agent-run-analytics.component.ts", lineNumber: 43 }); })();
2104
+ (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassDebugInfo(AIAgentRunAnalyticsComponent, { className: "AIAgentRunAnalyticsComponent", filePath: "src/lib/custom/ai-agent-run/ai-agent-run-analytics.component.ts", lineNumber: 68 }); })();
2091
2105
  //# sourceMappingURL=ai-agent-run-analytics.component.js.map