@memberjunction/ng-dashboards 5.38.0 → 5.40.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 (321) hide show
  1. package/README.md +14 -7
  2. package/dist/AI/components/agents/agent-configuration.component.js +199 -198
  3. package/dist/AI/components/agents/agent-configuration.component.js.map +1 -1
  4. package/dist/AI/components/analytics/ai-analytics-resource.component.d.ts.map +1 -1
  5. package/dist/AI/components/analytics/ai-analytics-resource.component.js +20 -17
  6. package/dist/AI/components/analytics/ai-analytics-resource.component.js.map +1 -1
  7. package/dist/AI/components/analytics/cost-budget/cost-budget.component.d.ts +15 -0
  8. package/dist/AI/components/analytics/cost-budget/cost-budget.component.d.ts.map +1 -1
  9. package/dist/AI/components/analytics/cost-budget/cost-budget.component.js +166 -58
  10. package/dist/AI/components/analytics/cost-budget/cost-budget.component.js.map +1 -1
  11. package/dist/AI/components/analytics/executive-summary/executive-summary.component.d.ts.map +1 -1
  12. package/dist/AI/components/analytics/executive-summary/executive-summary.component.js +2 -1
  13. package/dist/AI/components/analytics/executive-summary/executive-summary.component.js.map +1 -1
  14. package/dist/AI/components/analytics/model-performance/model-performance.component.d.ts +1 -0
  15. package/dist/AI/components/analytics/model-performance/model-performance.component.d.ts.map +1 -1
  16. package/dist/AI/components/analytics/model-performance/model-performance.component.js +55 -36
  17. package/dist/AI/components/analytics/model-performance/model-performance.component.js.map +1 -1
  18. package/dist/AI/components/analytics/prompt-runs/prompt-run-analysis.component.d.ts +9 -1
  19. package/dist/AI/components/analytics/prompt-runs/prompt-run-analysis.component.d.ts.map +1 -1
  20. package/dist/AI/components/analytics/prompt-runs/prompt-run-analysis.component.js +158 -117
  21. package/dist/AI/components/analytics/prompt-runs/prompt-run-analysis.component.js.map +1 -1
  22. package/dist/AI/components/analytics/usage-patterns/usage-patterns.component.d.ts +1 -0
  23. package/dist/AI/components/analytics/usage-patterns/usage-patterns.component.d.ts.map +1 -1
  24. package/dist/AI/components/analytics/usage-patterns/usage-patterns.component.js +22 -8
  25. package/dist/AI/components/analytics/usage-patterns/usage-patterns.component.js.map +1 -1
  26. package/dist/AI/components/autotagging/autotagging-pipeline-resource.component.d.ts +217 -860
  27. package/dist/AI/components/autotagging/autotagging-pipeline-resource.component.d.ts.map +1 -1
  28. package/dist/AI/components/autotagging/autotagging-pipeline-resource.component.js +1717 -7802
  29. package/dist/AI/components/autotagging/autotagging-pipeline-resource.component.js.map +1 -1
  30. package/dist/AI/components/autotagging/components/classify-item-drilldown.component.d.ts +56 -0
  31. package/dist/AI/components/autotagging/components/classify-item-drilldown.component.d.ts.map +1 -0
  32. package/dist/AI/components/autotagging/components/classify-item-drilldown.component.js +423 -0
  33. package/dist/AI/components/autotagging/components/classify-item-drilldown.component.js.map +1 -0
  34. package/dist/AI/components/autotagging/components/classify-item-grid.component.d.ts +70 -0
  35. package/dist/AI/components/autotagging/components/classify-item-grid.component.d.ts.map +1 -0
  36. package/dist/AI/components/autotagging/components/classify-item-grid.component.js +308 -0
  37. package/dist/AI/components/autotagging/components/classify-item-grid.component.js.map +1 -0
  38. package/dist/AI/components/autotagging/components/classify-org-context-editor.component.d.ts +29 -0
  39. package/dist/AI/components/autotagging/components/classify-org-context-editor.component.d.ts.map +1 -0
  40. package/dist/AI/components/autotagging/components/classify-org-context-editor.component.js +186 -0
  41. package/dist/AI/components/autotagging/components/classify-org-context-editor.component.js.map +1 -0
  42. package/dist/AI/components/autotagging/components/classify-overview-analytics.component.d.ts +69 -0
  43. package/dist/AI/components/autotagging/components/classify-overview-analytics.component.d.ts.map +1 -0
  44. package/dist/AI/components/autotagging/components/classify-overview-analytics.component.js +278 -0
  45. package/dist/AI/components/autotagging/components/classify-overview-analytics.component.js.map +1 -0
  46. package/dist/AI/components/autotagging/components/classify-seed-taxonomy.component.d.ts +73 -0
  47. package/dist/AI/components/autotagging/components/classify-seed-taxonomy.component.d.ts.map +1 -0
  48. package/dist/AI/components/autotagging/components/classify-seed-taxonomy.component.js +393 -0
  49. package/dist/AI/components/autotagging/components/classify-seed-taxonomy.component.js.map +1 -0
  50. package/dist/AI/components/autotagging/dialogs/classify-setup-wizard.component.d.ts +122 -0
  51. package/dist/AI/components/autotagging/dialogs/classify-setup-wizard.component.d.ts.map +1 -0
  52. package/dist/AI/components/autotagging/dialogs/classify-setup-wizard.component.js +908 -0
  53. package/dist/AI/components/autotagging/dialogs/classify-setup-wizard.component.js.map +1 -0
  54. package/dist/AI/components/autotagging/dialogs/dry-run-preview.dialog.component.d.ts +87 -0
  55. package/dist/AI/components/autotagging/dialogs/dry-run-preview.dialog.component.d.ts.map +1 -0
  56. package/dist/AI/components/autotagging/dialogs/dry-run-preview.dialog.component.js +475 -0
  57. package/dist/AI/components/autotagging/dialogs/dry-run-preview.dialog.component.js.map +1 -0
  58. package/dist/AI/components/autotagging/dialogs/item-detail.dialog.component.d.ts +29 -0
  59. package/dist/AI/components/autotagging/dialogs/item-detail.dialog.component.d.ts.map +1 -0
  60. package/dist/AI/components/autotagging/dialogs/item-detail.dialog.component.js +208 -0
  61. package/dist/AI/components/autotagging/dialogs/item-detail.dialog.component.js.map +1 -0
  62. package/dist/AI/components/autotagging/dialogs/no-content-type-warning.dialog.component.d.ts +21 -0
  63. package/dist/AI/components/autotagging/dialogs/no-content-type-warning.dialog.component.d.ts.map +1 -0
  64. package/dist/AI/components/autotagging/dialogs/no-content-type-warning.dialog.component.js +70 -0
  65. package/dist/AI/components/autotagging/dialogs/no-content-type-warning.dialog.component.js.map +1 -0
  66. package/dist/AI/components/autotagging/dialogs/source-type-form.dialog.component.d.ts +333 -0
  67. package/dist/AI/components/autotagging/dialogs/source-type-form.dialog.component.d.ts.map +1 -0
  68. package/dist/AI/components/autotagging/dialogs/source-type-form.dialog.component.js +2125 -0
  69. package/dist/AI/components/autotagging/dialogs/source-type-form.dialog.component.js.map +1 -0
  70. package/dist/AI/components/autotagging/shared/classify.dryrun.d.ts +61 -0
  71. package/dist/AI/components/autotagging/shared/classify.dryrun.d.ts.map +1 -0
  72. package/dist/AI/components/autotagging/shared/classify.dryrun.js +78 -0
  73. package/dist/AI/components/autotagging/shared/classify.dryrun.js.map +1 -0
  74. package/dist/AI/components/autotagging/shared/classify.format.d.ts +58 -0
  75. package/dist/AI/components/autotagging/shared/classify.format.d.ts.map +1 -0
  76. package/dist/AI/components/autotagging/shared/classify.format.js +260 -0
  77. package/dist/AI/components/autotagging/shared/classify.format.js.map +1 -0
  78. package/dist/AI/components/autotagging/shared/classify.types.d.ts +319 -0
  79. package/dist/AI/components/autotagging/shared/classify.types.d.ts.map +1 -0
  80. package/dist/AI/components/autotagging/shared/classify.types.js +6 -0
  81. package/dist/AI/components/autotagging/shared/classify.types.js.map +1 -0
  82. package/dist/AI/components/autotagging/tabs/health-tab.component.d.ts +103 -0
  83. package/dist/AI/components/autotagging/tabs/health-tab.component.d.ts.map +1 -0
  84. package/dist/AI/components/autotagging/tabs/health-tab.component.js +571 -0
  85. package/dist/AI/components/autotagging/tabs/health-tab.component.js.map +1 -0
  86. package/dist/AI/components/autotagging/tabs/history-tab.component.d.ts +77 -0
  87. package/dist/AI/components/autotagging/tabs/history-tab.component.d.ts.map +1 -0
  88. package/dist/AI/components/autotagging/tabs/history-tab.component.js +519 -0
  89. package/dist/AI/components/autotagging/tabs/history-tab.component.js.map +1 -0
  90. package/dist/AI/components/autotagging/tabs/inbox-tab.component.d.ts +107 -0
  91. package/dist/AI/components/autotagging/tabs/inbox-tab.component.d.ts.map +1 -0
  92. package/dist/AI/components/autotagging/tabs/inbox-tab.component.js +719 -0
  93. package/dist/AI/components/autotagging/tabs/inbox-tab.component.js.map +1 -0
  94. package/dist/AI/components/autotagging/tabs/pipeline-tab.component.d.ts +131 -0
  95. package/dist/AI/components/autotagging/tabs/pipeline-tab.component.d.ts.map +1 -0
  96. package/dist/AI/components/autotagging/tabs/pipeline-tab.component.js +813 -0
  97. package/dist/AI/components/autotagging/tabs/pipeline-tab.component.js.map +1 -0
  98. package/dist/AI/components/autotagging/tabs/sources-tab.component.d.ts +177 -0
  99. package/dist/AI/components/autotagging/tabs/sources-tab.component.d.ts.map +1 -0
  100. package/dist/AI/components/autotagging/tabs/sources-tab.component.js +1465 -0
  101. package/dist/AI/components/autotagging/tabs/sources-tab.component.js.map +1 -0
  102. package/dist/AI/components/autotagging/tabs/tags-tab.component.d.ts +78 -0
  103. package/dist/AI/components/autotagging/tabs/tags-tab.component.d.ts.map +1 -0
  104. package/dist/AI/components/autotagging/tabs/tags-tab.component.js +492 -0
  105. package/dist/AI/components/autotagging/tabs/tags-tab.component.js.map +1 -0
  106. package/dist/AI/components/autotagging/tabs/taxonomy-tab.component.d.ts +397 -0
  107. package/dist/AI/components/autotagging/tabs/taxonomy-tab.component.d.ts.map +1 -0
  108. package/dist/AI/components/autotagging/tabs/taxonomy-tab.component.js +3490 -0
  109. package/dist/AI/components/autotagging/tabs/taxonomy-tab.component.js.map +1 -0
  110. package/dist/AI/components/autotagging/tabs/types-tab.component.d.ts +56 -0
  111. package/dist/AI/components/autotagging/tabs/types-tab.component.d.ts.map +1 -0
  112. package/dist/AI/components/autotagging/tabs/types-tab.component.js +271 -0
  113. package/dist/AI/components/autotagging/tabs/types-tab.component.js.map +1 -0
  114. package/dist/AI/components/duplicates/duplicate-detection-resource.component.d.ts +3 -0
  115. package/dist/AI/components/duplicates/duplicate-detection-resource.component.d.ts.map +1 -1
  116. package/dist/AI/components/duplicates/duplicate-detection-resource.component.js +306 -290
  117. package/dist/AI/components/duplicates/duplicate-detection-resource.component.js.map +1 -1
  118. package/dist/AI/components/execution-monitoring.component.js +1 -1
  119. package/dist/AI/components/execution-monitoring.component.js.map +1 -1
  120. package/dist/AI/components/models/model-management.component.js +209 -208
  121. package/dist/AI/components/models/model-management.component.js.map +1 -1
  122. package/dist/AI/components/prompts/prompt-management.component.js +130 -128
  123. package/dist/AI/components/prompts/prompt-management.component.js.map +1 -1
  124. package/dist/AI/components/requests/agent-requests-resource.component.js +61 -61
  125. package/dist/AI/components/requests/agent-requests-resource.component.js.map +1 -1
  126. package/dist/AI/components/system/system-configuration.component.js +17 -17
  127. package/dist/AI/components/system/system-configuration.component.js.map +1 -1
  128. package/dist/AI/components/tags/tags-resource.component.d.ts +1 -0
  129. package/dist/AI/components/tags/tags-resource.component.d.ts.map +1 -1
  130. package/dist/AI/components/tags/tags-resource.component.js +578 -538
  131. package/dist/AI/components/tags/tags-resource.component.js.map +1 -1
  132. package/dist/AI/components/vectors/vector-management-resource.component.d.ts +3 -0
  133. package/dist/AI/components/vectors/vector-management-resource.component.d.ts.map +1 -1
  134. package/dist/AI/components/vectors/vector-management-resource.component.js +331 -303
  135. package/dist/AI/components/vectors/vector-management-resource.component.js.map +1 -1
  136. package/dist/AI/services/ai-instrumentation.service.d.ts +5 -0
  137. package/dist/AI/services/ai-instrumentation.service.d.ts.map +1 -1
  138. package/dist/AI/services/ai-instrumentation.service.js +14 -2
  139. package/dist/AI/services/ai-instrumentation.service.js.map +1 -1
  140. package/dist/AI/services/cache-metrics.d.ts +50 -0
  141. package/dist/AI/services/cache-metrics.d.ts.map +1 -0
  142. package/dist/AI/services/cache-metrics.js +43 -0
  143. package/dist/AI/services/cache-metrics.js.map +1 -0
  144. package/dist/APIKeys/api-applications-panel.component.js +2 -2
  145. package/dist/APIKeys/api-key-create-dialog.component.js +2 -2
  146. package/dist/APIKeys/api-key-edit-panel.component.js +2 -2
  147. package/dist/APIKeys/api-keys-resource.component.js +132 -131
  148. package/dist/APIKeys/api-keys-resource.component.js.map +1 -1
  149. package/dist/Actions/components/actions-overview.component.js +141 -141
  150. package/dist/Actions/components/actions-overview.component.js.map +1 -1
  151. package/dist/Actions/components/execution-monitoring.component.js +15 -15
  152. package/dist/Actions/components/execution-monitoring.component.js.map +1 -1
  153. package/dist/Actions/components/explorer/action-explorer.component.d.ts +0 -5
  154. package/dist/Actions/components/explorer/action-explorer.component.d.ts.map +1 -1
  155. package/dist/Actions/components/explorer/action-explorer.component.js +139 -212
  156. package/dist/Actions/components/explorer/action-explorer.component.js.map +1 -1
  157. package/dist/Admin/admin-data-schema.component.js +2 -2
  158. package/dist/Admin/admin-data-schema.component.js.map +1 -1
  159. package/dist/Admin/admin-dev-tools-resource.component.js +2 -2
  160. package/dist/Admin/admin-dev-tools-resource.component.js.map +1 -1
  161. package/dist/Admin/admin-identity-access.component.js +2 -2
  162. package/dist/Admin/admin-identity-access.component.js.map +1 -1
  163. package/dist/Admin/admin-monitoring.component.js +2 -2
  164. package/dist/Admin/admin-monitoring.component.js.map +1 -1
  165. package/dist/ApplicationRoles/application-roles-resource.component.js +54 -49
  166. package/dist/ApplicationRoles/application-roles-resource.component.js.map +1 -1
  167. package/dist/Communication/communication-logs-resource.component.d.ts +6 -0
  168. package/dist/Communication/communication-logs-resource.component.d.ts.map +1 -1
  169. package/dist/Communication/communication-logs-resource.component.js +72 -50
  170. package/dist/Communication/communication-logs-resource.component.js.map +1 -1
  171. package/dist/Communication/communication-monitor-resource.component.js +103 -102
  172. package/dist/Communication/communication-monitor-resource.component.js.map +1 -1
  173. package/dist/Communication/communication-providers-resource.component.js +52 -51
  174. package/dist/Communication/communication-providers-resource.component.js.map +1 -1
  175. package/dist/Communication/communication-runs-resource.component.js +39 -38
  176. package/dist/Communication/communication-runs-resource.component.js.map +1 -1
  177. package/dist/Communication/communication-templates-resource.component.d.ts +6 -0
  178. package/dist/Communication/communication-templates-resource.component.d.ts.map +1 -1
  179. package/dist/Communication/communication-templates-resource.component.js +92 -89
  180. package/dist/Communication/communication-templates-resource.component.js.map +1 -1
  181. package/dist/Credentials/components/credentials-audit-resource.component.js +136 -135
  182. package/dist/Credentials/components/credentials-audit-resource.component.js.map +1 -1
  183. package/dist/Credentials/components/credentials-categories-resource.component.js +155 -152
  184. package/dist/Credentials/components/credentials-categories-resource.component.js.map +1 -1
  185. package/dist/Credentials/components/credentials-list-resource.component.js +119 -118
  186. package/dist/Credentials/components/credentials-list-resource.component.js.map +1 -1
  187. package/dist/Credentials/components/credentials-overview-resource.component.js +129 -128
  188. package/dist/Credentials/components/credentials-overview-resource.component.js.map +1 -1
  189. package/dist/Credentials/components/credentials-types-resource.component.js +107 -106
  190. package/dist/Credentials/components/credentials-types-resource.component.js.map +1 -1
  191. package/dist/DataExplorer/data-explorer-dashboard.component.d.ts +31 -340
  192. package/dist/DataExplorer/data-explorer-dashboard.component.d.ts.map +1 -1
  193. package/dist/DataExplorer/data-explorer-dashboard.component.js +468 -1958
  194. package/dist/DataExplorer/data-explorer-dashboard.component.js.map +1 -1
  195. package/dist/DataExplorer/data-explorer-resource.component.d.ts.map +1 -1
  196. package/dist/DataExplorer/data-explorer-resource.component.js +10 -0
  197. package/dist/DataExplorer/data-explorer-resource.component.js.map +1 -1
  198. package/dist/DatabaseDesigner/components/database-designer-dashboard.component.js +1 -1
  199. package/dist/DatabaseDesigner/components/entity-list.component.js +115 -114
  200. package/dist/DatabaseDesigner/components/entity-list.component.js.map +1 -1
  201. package/dist/DatabaseDesigner/database-designer-dashboards.module.d.ts +5 -6
  202. package/dist/DatabaseDesigner/database-designer-dashboards.module.d.ts.map +1 -1
  203. package/dist/DatabaseDesigner/database-designer-dashboards.module.js +4 -5
  204. package/dist/DatabaseDesigner/database-designer-dashboards.module.js.map +1 -1
  205. package/dist/DevTools/app-state-inspector.component.js +18 -17
  206. package/dist/DevTools/app-state-inspector.component.js.map +1 -1
  207. package/dist/DevTools/class-registry.component.js +88 -85
  208. package/dist/DevTools/class-registry.component.js.map +1 -1
  209. package/dist/DevTools/event-monitor.component.js +155 -150
  210. package/dist/DevTools/event-monitor.component.js.map +1 -1
  211. package/dist/DevTools/graphql-console.component.js +245 -243
  212. package/dist/DevTools/graphql-console.component.js.map +1 -1
  213. package/dist/DevTools/layout-inspector.component.js +18 -17
  214. package/dist/DevTools/layout-inspector.component.js.map +1 -1
  215. package/dist/EntityAdmin/entity-admin-dashboard.component.js +20 -19
  216. package/dist/EntityAdmin/entity-admin-dashboard.component.js.map +1 -1
  217. package/dist/Home/home-dashboard.component.js +2 -2
  218. package/dist/Integration/components/activity/activity.component.d.ts.map +1 -1
  219. package/dist/Integration/components/activity/activity.component.js +236 -229
  220. package/dist/Integration/components/activity/activity.component.js.map +1 -1
  221. package/dist/Integration/components/connections/connections.component.js +390 -389
  222. package/dist/Integration/components/connections/connections.component.js.map +1 -1
  223. package/dist/Integration/components/overview/overview.component.js +2 -2
  224. package/dist/KnowledgeHub/components/analytics/analytics-resource.component.d.ts.map +1 -1
  225. package/dist/KnowledgeHub/components/analytics/analytics-resource.component.js +14 -11
  226. package/dist/KnowledgeHub/components/analytics/analytics-resource.component.js.map +1 -1
  227. package/dist/KnowledgeHub/components/clusters/cluster-visualization-resource.component.d.ts +27 -2
  228. package/dist/KnowledgeHub/components/clusters/cluster-visualization-resource.component.d.ts.map +1 -1
  229. package/dist/KnowledgeHub/components/clusters/cluster-visualization-resource.component.js +244 -119
  230. package/dist/KnowledgeHub/components/clusters/cluster-visualization-resource.component.js.map +1 -1
  231. package/dist/KnowledgeHub/components/config/knowledge-config-resource.component.js +293 -291
  232. package/dist/KnowledgeHub/components/config/knowledge-config-resource.component.js.map +1 -1
  233. package/dist/KnowledgeHub/components/scheduling/scheduling-resource.component.js +62 -61
  234. package/dist/KnowledgeHub/components/scheduling/scheduling-resource.component.js.map +1 -1
  235. package/dist/KnowledgeHub/components/visualize/record-drilldown/record-drilldown.component.d.ts +65 -0
  236. package/dist/KnowledgeHub/components/visualize/record-drilldown/record-drilldown.component.d.ts.map +1 -0
  237. package/dist/KnowledgeHub/components/visualize/record-drilldown/record-drilldown.component.js +176 -0
  238. package/dist/KnowledgeHub/components/visualize/record-drilldown/record-drilldown.component.js.map +1 -0
  239. package/dist/KnowledgeHub/components/visualize/tag-cloud/tag-cloud.component.d.ts +81 -0
  240. package/dist/KnowledgeHub/components/visualize/tag-cloud/tag-cloud.component.d.ts.map +1 -0
  241. package/dist/KnowledgeHub/components/visualize/tag-cloud/tag-cloud.component.js +308 -0
  242. package/dist/KnowledgeHub/components/visualize/tag-cloud/tag-cloud.component.js.map +1 -0
  243. package/dist/KnowledgeHub/components/visualize/visualize-resource.component.d.ts +85 -0
  244. package/dist/KnowledgeHub/components/visualize/visualize-resource.component.d.ts.map +1 -0
  245. package/dist/KnowledgeHub/components/visualize/visualize-resource.component.js +362 -0
  246. package/dist/KnowledgeHub/components/visualize/visualize-resource.component.js.map +1 -0
  247. package/dist/KnowledgeHub/index.d.ts +3 -0
  248. package/dist/KnowledgeHub/index.d.ts.map +1 -1
  249. package/dist/KnowledgeHub/index.js +3 -0
  250. package/dist/KnowledgeHub/index.js.map +1 -1
  251. package/dist/Lists/components/lists-browse-resource.component.d.ts +6 -2
  252. package/dist/Lists/components/lists-browse-resource.component.d.ts.map +1 -1
  253. package/dist/Lists/components/lists-browse-resource.component.js +525 -566
  254. package/dist/Lists/components/lists-browse-resource.component.js.map +1 -1
  255. package/dist/Lists/components/lists-categories-resource.component.js +135 -134
  256. package/dist/Lists/components/lists-categories-resource.component.js.map +1 -1
  257. package/dist/Lists/components/lists-my-lists-resource.component.js +199 -198
  258. package/dist/Lists/components/lists-my-lists-resource.component.js.map +1 -1
  259. package/dist/MCP/components/mcp-server-dialog.component.js +2 -2
  260. package/dist/MCP/mcp-dashboard.component.js +443 -438
  261. package/dist/MCP/mcp-dashboard.component.js.map +1 -1
  262. package/dist/QueryBrowser/query-browser-resource.component.js +1 -1
  263. package/dist/QueryBrowser/query-browser-resource.component.js.map +1 -1
  264. package/dist/Scheduling/components/scheduling-activity.component.d.ts.map +1 -1
  265. package/dist/Scheduling/components/scheduling-activity.component.js +146 -147
  266. package/dist/Scheduling/components/scheduling-activity.component.js.map +1 -1
  267. package/dist/Scheduling/components/scheduling-jobs.component.js +76 -75
  268. package/dist/Scheduling/components/scheduling-jobs.component.js.map +1 -1
  269. package/dist/Scheduling/components/scheduling-overview.component.js +97 -96
  270. package/dist/Scheduling/components/scheduling-overview.component.js.map +1 -1
  271. package/dist/Scheduling/scheduling-dashboard.component.js +24 -22
  272. package/dist/Scheduling/scheduling-dashboard.component.js.map +1 -1
  273. package/dist/Scheduling/services/scheduling-instrumentation.service.d.ts +2 -0
  274. package/dist/Scheduling/services/scheduling-instrumentation.service.d.ts.map +1 -1
  275. package/dist/Scheduling/services/scheduling-instrumentation.service.js +1 -0
  276. package/dist/Scheduling/services/scheduling-instrumentation.service.js.map +1 -1
  277. package/dist/Testing/components/testing-dashboard-tab-resource.component.js +1 -1
  278. package/dist/Testing/components/testing-explorer.component.d.ts +14 -4
  279. package/dist/Testing/components/testing-explorer.component.d.ts.map +1 -1
  280. package/dist/Testing/components/testing-explorer.component.js +436 -427
  281. package/dist/Testing/components/testing-explorer.component.js.map +1 -1
  282. package/dist/Testing/components/testing-runs-resource.component.js +1 -1
  283. package/dist/Testing/components/testing-runs.component.js +116 -115
  284. package/dist/Testing/components/testing-runs.component.js.map +1 -1
  285. package/dist/Testing/testing-dashboard.component.js +6 -7
  286. package/dist/Testing/testing-dashboard.component.js.map +1 -1
  287. package/dist/VersionHistory/components/labels-resource.component.js +173 -172
  288. package/dist/VersionHistory/components/labels-resource.component.js.map +1 -1
  289. package/dist/VersionHistory/components/restore-resource.component.d.ts +6 -0
  290. package/dist/VersionHistory/components/restore-resource.component.d.ts.map +1 -1
  291. package/dist/VersionHistory/components/restore-resource.component.js +116 -92
  292. package/dist/VersionHistory/components/restore-resource.component.js.map +1 -1
  293. package/dist/ai-dashboards.module.d.ts +57 -35
  294. package/dist/ai-dashboards.module.d.ts.map +1 -1
  295. package/dist/ai-dashboards.module.js +80 -1
  296. package/dist/ai-dashboards.module.js.map +1 -1
  297. package/dist/communication-dashboards.module.d.ts +1 -1
  298. package/dist/communication-dashboards.module.d.ts.map +1 -1
  299. package/dist/communication-dashboards.module.js +7 -1
  300. package/dist/communication-dashboards.module.js.map +1 -1
  301. package/dist/data-explorer-dashboards.module.d.ts +12 -14
  302. package/dist/data-explorer-dashboards.module.d.ts.map +1 -1
  303. package/dist/data-explorer-dashboards.module.js +5 -14
  304. package/dist/data-explorer-dashboards.module.js.map +1 -1
  305. package/dist/public-api.d.ts +3 -0
  306. package/dist/public-api.d.ts.map +1 -1
  307. package/dist/public-api.js +3 -0
  308. package/dist/public-api.js.map +1 -1
  309. package/dist/testing-dashboards.module.d.ts +4 -5
  310. package/dist/testing-dashboards.module.d.ts.map +1 -1
  311. package/dist/testing-dashboards.module.js +7 -5
  312. package/dist/testing-dashboards.module.js.map +1 -1
  313. package/package.json +57 -54
  314. package/dist/DataExplorer/components/filter-dialog/filter-dialog.component.d.ts +0 -79
  315. package/dist/DataExplorer/components/filter-dialog/filter-dialog.component.d.ts.map +0 -1
  316. package/dist/DataExplorer/components/filter-dialog/filter-dialog.component.js +0 -195
  317. package/dist/DataExplorer/components/filter-dialog/filter-dialog.component.js.map +0 -1
  318. package/dist/DataExplorer/components/view-selector/view-selector.component.d.ts +0 -226
  319. package/dist/DataExplorer/components/view-selector/view-selector.component.d.ts.map +0 -1
  320. package/dist/DataExplorer/components/view-selector/view-selector.component.js +0 -861
  321. package/dist/DataExplorer/components/view-selector/view-selector.component.js.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"file":"ai-analytics-resource.component.js","sourceRoot":"","sources":["../../../../src/AI/components/analytics/ai-analytics-resource.component.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * @fileoverview AI Analytics Shell — Resource Component\n *\n * Main resource component for the AI Analytics dashboard. Provides a left\n * navigation panel and content area that switches between analytics sections:\n * Executive Summary, Prompt Runs, Agent Runs, Model Performance, Cost & Budget,\n * Error Analysis, and Usage Patterns.\n *\n * Persists the active section and filter state via UserInfoEngine settings\n * with debounced writes.\n */\n\nimport { Component, ChangeDetectorRef, OnInit, OnDestroy, ViewChild, inject } from '@angular/core';\nimport { AnalyticsExecutiveSummaryComponent } from './executive-summary/executive-summary.component';\nimport { AnalyticsPromptRunsComponent } from './prompt-runs/prompt-run-analysis.component';\nimport { Subject } from 'rxjs';\nimport { debounceTime, takeUntil } from 'rxjs/operators';\nimport { ResourceData, UserInfoEngine } from '@memberjunction/core-entities';\nimport { RegisterClass } from '@memberjunction/global';\nimport { BaseResourceComponent } from '@memberjunction/ng-shared';\nimport { AIAnalyticsPreferences, GlobalFilterState } from '../../interfaces/analytics-preferences.interface';\nimport { AIEngineBase } from '@memberjunction/ai-engine-base';\nimport { FilterFieldConfig, MJLeftNavItem, MJLeftNavSection } from '@memberjunction/ng-ui-components';\n\ninterface NavItem {\n Label?: string;\n Icon?: string;\n Key: string;\n /**\n * Short prose used as the Subtitle on this section's\n * <mj-page-header-interior> card. Omitted for the `divider` entry.\n */\n Description?: string;\n}\n\n@RegisterClass(BaseResourceComponent, 'AIAnalyticsResource')\n@Component({\n standalone: false,\n selector: 'app-ai-analytics-resource',\n template: `\n <mj-page-layout>\n <!-- Outer chrome — pure identity. Every control (filter-popover,\n TimeRange chips, Compare, Export) lives in the per-section\n <mj-page-header-interior> card below because each section\n configures its own filter fields and time-range options. -->\n <mj-page-header\n Title=\"AI Analytics\"\n Icon=\"fa-solid fa-chart-line\"\n Subtitle=\"Performance, cost, and usage analytics\">\n </mj-page-header>\n <mj-page-body [Padding]=\"false\" class=\"analytics-shell\">\n <mj-left-nav\n [Sections]=\"navSections\"\n [ActiveId]=\"ActiveSection\"\n (ItemClicked)=\"onNavItemClicked($event)\">\n </mj-left-nav>\n\n <mj-left-nav-content>\n <!-- Per-section interior chrome owns the complete control surface\n for the active section: identity + actions + the section's\n own time-range chip strip. Even TimeRange options vary per\n section (Cost & Budget adds MTD / YTD, Model Performance\n drops 1h / 6h, etc.) so it belongs here rather than in the\n outer chrome. -->\n <mj-page-header-interior\n [Title]=\"currentSection?.Label || ''\"\n [Subtitle]=\"currentSection?.Description || ''\">\n <div actions>\n @if (analyticsFilterFields.length > 0) {\n <mj-filter-popover\n [ActiveCount]=\"ActiveFilterCount\"\n [ShowClearAll]=\"ActiveFilterCount > 0\"\n (ClearAllRequested)=\"resetPopoverFilters()\">\n <mj-filter-panel\n [Fields]=\"analyticsFilterFields\"\n [Values]=\"analyticsFilterValues\"\n (ValuesChange)=\"onAnalyticsFilterValuesChange($event)\"\n (Reset)=\"resetPopoverFilters()\">\n </mj-filter-panel>\n </mj-filter-popover>\n }\n @if (FilterBarConfig.ShowCompareToggle) {\n <button mjButton variant=\"secondary\" size=\"sm\" [toggleable]=\"true\" [(selected)]=\"compareActive\" (selectedChange)=\"toggleCompare()\">\n <i class=\"fa-solid fa-code-compare\"></i> Compare\n </button>\n }\n @if (FilterBarConfig.ShowExportButton) {\n <button mjButton variant=\"secondary\" size=\"sm\" (click)=\"OnExportClicked()\">\n <i class=\"fa-solid fa-download\"></i> Export\n </button>\n }\n </div>\n @if (timeRangeChipOptions.length > 0) {\n <div toolbar class=\"time-range-chips\">\n @for (chip of timeRangeChipOptions; track chip.value) {\n <mj-filter-chip\n [Label]=\"chip.text\"\n [Active]=\"CurrentTimeRange === chip.value\"\n (Clicked)=\"OnTimeRangeChange(chip.value)\">\n </mj-filter-chip>\n }\n </div>\n }\n </mj-page-header-interior>\n <mj-page-body-interior [Padding]=\"false\">\n <div class=\"analytics-content\">\n @switch (ActiveSection) {\n @case ('executive-summary') {\n <app-analytics-executive-summary\n #executiveSummary\n [TimeRange]=\"CurrentTimeRange\"\n [Filters]=\"CurrentFilters\"\n (SectionNavigate)=\"OnSectionChange($event)\"\n ></app-analytics-executive-summary>\n }\n @case ('prompt-runs') {\n <app-analytics-prompt-runs\n #promptRuns\n [TimeRange]=\"CurrentTimeRange\"\n [Filters]=\"CurrentFilters\"\n ></app-analytics-prompt-runs>\n }\n @case ('agent-runs') {\n <app-analytics-agent-runs\n [TimeRange]=\"CurrentTimeRange\"\n [Filters]=\"CurrentFilters\"\n ></app-analytics-agent-runs>\n }\n @case ('model-performance') {\n <app-analytics-model-performance\n [TimeRange]=\"CurrentTimeRange\"\n [SortBy]=\"CurrentSortBy\"\n [SelectedVendor]=\"CurrentVendor\"\n ></app-analytics-model-performance>\n }\n @case ('cost-budget') {\n <app-analytics-cost-budget\n [TimeRange]=\"CurrentTimeRange\"\n [Filters]=\"CurrentFilters\"\n ></app-analytics-cost-budget>\n }\n @case ('error-analysis') {\n <app-analytics-error-analysis\n [TimeRange]=\"CurrentTimeRange\"\n [Filters]=\"CurrentFilters\"\n ></app-analytics-error-analysis>\n }\n @case ('usage-patterns') {\n <app-analytics-usage-patterns\n [TimeRange]=\"CurrentTimeRange\"\n ></app-analytics-usage-patterns>\n }\n }\n </div>\n </mj-page-body-interior>\n </mj-left-nav-content>\n </mj-page-body>\n </mj-page-layout>\n `,\n styles: [`\n :host {\n display: block;\n height: 100%;\n }\n\n .analytics-shell {\n display: flex;\n flex: 1;\n min-height: 0;\n background: var(--mj-bg-page);\n }\n\n /* ── Left Navigation ── */\n\n /* Rail width + nav-item styling now owned by <mj-left-nav>; the\n divider is expressed as a new MJLeftNavSection rather than a CSS\n rule. */\n\n /* ── Content Area ── */\n\n .analytics-content {\n flex: 1;\n overflow-y: auto;\n padding: 24px;\n }\n\n /* ── Section Placeholders ── */\n\n .section-placeholder {\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: center;\n text-align: center;\n padding: 80px 24px;\n color: var(--mj-text-muted);\n }\n\n .placeholder-icon {\n font-size: 48px;\n margin-bottom: 20px;\n color: var(--mj-brand-primary);\n opacity: 0.4;\n }\n\n .section-placeholder h2 {\n font-size: 20px;\n font-weight: 600;\n color: var(--mj-text-primary);\n margin: 0 0 8px;\n }\n\n .section-placeholder p {\n font-size: 14px;\n color: var(--mj-text-muted);\n margin: 0;\n max-width: 420px;\n }\n\n /* ── Responsive: collapse nav to horizontal strip ── */\n\n /* Responsive — <mj-left-nav> handles its own collapse-to-row at\n narrow viewports. We only need to tune the content padding. */\n @media (max-width: 768px) {\n .analytics-content {\n padding: 16px;\n }\n }\n `]\n})\nexport class AIAnalyticsResourceComponent extends BaseResourceComponent implements OnInit, OnDestroy {\n private readonly USER_SETTINGS_KEY = 'AI.Analytics.UserPreferences';\n private settingsPersistSubject = new Subject<void>();\n protected override destroy$ = new Subject<void>();\n private settingsLoaded = false;\n private cdr = inject(ChangeDetectorRef);\n\n @ViewChild('executiveSummary') private executiveSummary?: AnalyticsExecutiveSummaryComponent;\n @ViewChild('promptRuns') private promptRuns?: AnalyticsPromptRunsComponent;\n\n public ActiveSection = 'executive-summary';\n public CurrentTimeRange = '24h';\n public CurrentFilters: GlobalFilterState = {\n Models: [],\n Agents: [],\n Prompts: [],\n Statuses: []\n };\n /** Single-value SortBy used by Model Performance (lives on the shared chrome). */\n public CurrentSortBy: string = 'cost-efficiency';\n /** Single-value Vendor filter used by Model Performance (lives on the shared chrome). */\n public CurrentVendor: string = '';\n\n /** SortBy options for Model Performance leaderboard. */\n public readonly sortByOptions = [\n { text: 'By Performance', value: 'cost-efficiency' },\n { text: 'By Cost', value: 'cost' },\n { text: 'By Speed', value: 'speed' },\n { text: 'By Reliability', value: 'reliability' },\n { text: 'By Usage', value: 'usage-volume' }\n ];\n\n /** Vendor options, lazily built from AIEngineBase for Model Performance leaderboard. */\n public get vendorOptions(): { text: string; value: string }[] {\n return AIEngineBase.Instance?.Vendors?.map(v => ({ text: v.Name ?? '', value: v.ID ?? '' }))\n ?.sort((a, b) => a.text.localeCompare(b.text)) ?? [];\n }\n\n /** Per-section filter-bar config — switched on ActiveSection. */\n public get FilterBarConfig() {\n switch (this.ActiveSection) {\n case 'executive-summary':\n return { ShowModelFilter: false, ShowAgentFilter: false, ShowPromptFilter: false, ShowStatusFilter: false, ShowSortBy: false, ShowVendor: false, ShowCompareToggle: true, ShowExportButton: false, TimeRangeOptions: ['1h', '6h', '24h', '7d', '30d'] };\n case 'prompt-runs':\n return { ShowModelFilter: true, ShowAgentFilter: true, ShowPromptFilter: true, ShowStatusFilter: true, ShowSortBy: false, ShowVendor: false, ShowCompareToggle: false, ShowExportButton: true, TimeRangeOptions: ['1h', '6h', '24h', '7d', '30d'] };\n case 'agent-runs':\n return { ShowModelFilter: false, ShowAgentFilter: true, ShowPromptFilter: false, ShowStatusFilter: true, ShowSortBy: false, ShowVendor: false, ShowCompareToggle: false, ShowExportButton: false, TimeRangeOptions: ['1h', '6h', '24h', '7d', '30d'] };\n case 'model-performance':\n return { ShowModelFilter: false, ShowAgentFilter: false, ShowPromptFilter: false, ShowStatusFilter: false, ShowSortBy: true, ShowVendor: true, ShowCompareToggle: false, ShowExportButton: false, TimeRangeOptions: ['24h', '7d', '30d'] };\n case 'cost-budget':\n return { ShowModelFilter: true, ShowAgentFilter: false, ShowPromptFilter: false, ShowStatusFilter: false, ShowSortBy: false, ShowVendor: false, ShowCompareToggle: false, ShowExportButton: false, TimeRangeOptions: ['7d', '30d', '90d', 'MTD', 'YTD'] };\n case 'error-analysis':\n return { ShowModelFilter: true, ShowAgentFilter: false, ShowPromptFilter: true, ShowStatusFilter: false, ShowSortBy: false, ShowVendor: false, ShowCompareToggle: false, ShowExportButton: false, TimeRangeOptions: ['1h', '6h', '24h', '7d', '30d'] };\n case 'usage-patterns':\n return { ShowModelFilter: false, ShowAgentFilter: false, ShowPromptFilter: false, ShowStatusFilter: false, ShowSortBy: false, ShowVendor: false, ShowCompareToggle: false, ShowExportButton: false, TimeRangeOptions: ['1h', '6h', '24h', '7d', '30d'] };\n default:\n return { ShowModelFilter: false, ShowAgentFilter: false, ShowPromptFilter: false, ShowStatusFilter: false, ShowSortBy: false, ShowVendor: false, ShowCompareToggle: false, ShowExportButton: false, TimeRangeOptions: ['1h', '6h', '24h', '7d', '30d'] };\n }\n }\n\n /**\n * Always true now — every section uses the shared chrome filter bar.\n * Kept as a getter for future per-section carve-outs.\n */\n public get ShowSharedFilterBar(): boolean {\n return true;\n }\n\n /** Status options used by the popover dropdown when the section has ShowStatusFilter. */\n public readonly statusOptions = [\n { text: 'Success', value: 'Success' },\n { text: 'Error', value: 'Error' },\n { text: 'Running', value: 'Running' },\n { text: 'Pending', value: 'Pending' },\n { text: 'Canceled', value: 'Canceled' },\n ];\n\n /** Built lazily from AIEngineBase. */\n public get modelOptions(): { text: string; value: string }[] {\n return AIEngineBase.Instance?.Models?.map(m => ({ text: m.Name ?? '', value: m.ID }))\n ?.sort((a, b) => a.text.localeCompare(b.text)) ?? [];\n }\n\n public get agentOptions(): { text: string; value: string }[] {\n return AIEngineBase.Instance?.Agents\n ?.filter(a => a.Status === 'Active')\n ?.map(a => ({ text: a.Name ?? '', value: a.ID }))\n ?.sort((a, b) => a.text.localeCompare(b.text)) ?? [];\n }\n\n public get promptOptions(): { text: string; value: string }[] {\n return AIEngineBase.Instance?.Prompts?.map(p => ({ text: p.Name ?? '', value: p.ID }))\n ?.sort((a, b) => a.text.localeCompare(b.text)) ?? [];\n }\n\n /** Time-range chip options for the toolbar slot. */\n public get timeRangeChipOptions(): { text: string; value: string }[] {\n return this.FilterBarConfig.TimeRangeOptions.map(t => ({ text: t, value: t }));\n }\n\n /** Compare-mode visual state (kept on the shell now that analytics-filter-bar is gone). */\n public compareActive = false;\n\n /** Build the FilterFieldConfig[] for the popover based on the active section. */\n public get analyticsFilterFields(): FilterFieldConfig[] {\n const cfg = this.FilterBarConfig;\n const fields: FilterFieldConfig[] = [];\n if (cfg.ShowModelFilter) {\n fields.push({\n key: 'Models',\n type: 'dropdown',\n label: 'Model',\n icon: 'fa-solid fa-microchip',\n filterable: this.modelOptions.length > 10,\n options: [{ text: 'All Models', value: '' }, ...this.modelOptions],\n });\n }\n if (cfg.ShowAgentFilter) {\n fields.push({\n key: 'Agents',\n type: 'dropdown',\n label: 'Agent',\n icon: 'fa-solid fa-robot',\n filterable: this.agentOptions.length > 10,\n options: [{ text: 'All Agents', value: '' }, ...this.agentOptions],\n });\n }\n if (cfg.ShowPromptFilter) {\n fields.push({\n key: 'Prompts',\n type: 'dropdown',\n label: 'Prompt',\n icon: 'fa-solid fa-comment-dots',\n filterable: this.promptOptions.length > 10,\n options: [{ text: 'All Prompts', value: '' }, ...this.promptOptions],\n });\n }\n if (cfg.ShowStatusFilter) {\n fields.push({\n key: 'Statuses',\n type: 'dropdown',\n label: 'Status',\n icon: 'fa-solid fa-toggle-on',\n options: [{ text: 'All Statuses', value: '' }, ...this.statusOptions],\n });\n }\n if (cfg.ShowSortBy) {\n fields.push({\n key: 'SortBy',\n type: 'dropdown',\n label: 'Sort By',\n icon: 'fa-solid fa-arrow-down-wide-short',\n options: this.sortByOptions,\n });\n }\n if (cfg.ShowVendor) {\n fields.push({\n key: 'Vendor',\n type: 'dropdown',\n label: 'Vendor',\n icon: 'fa-solid fa-building',\n filterable: this.vendorOptions.length > 10,\n options: [{ text: 'All Vendors', value: '' }, ...this.vendorOptions],\n });\n }\n return fields;\n }\n\n /** Single-value flattened state for the centralized panel (the panel takes scalar values; we hold arrays in CurrentFilters). */\n public get analyticsFilterValues(): Record<string, unknown> {\n return {\n Models: this.CurrentFilters.Models?.[0] ?? '',\n Agents: this.CurrentFilters.Agents?.[0] ?? '',\n Prompts: this.CurrentFilters.Prompts?.[0] ?? '',\n Statuses: this.CurrentFilters.Statuses?.[0] ?? '',\n SortBy: this.CurrentSortBy,\n Vendor: this.CurrentVendor,\n };\n }\n\n /** Receive popover updates and translate scalar → array shape used by GlobalFilterState. */\n public onAnalyticsFilterValuesChange(values: Record<string, unknown>): void {\n const next: GlobalFilterState = {\n Models: values['Models'] ? [values['Models'] as string] : [],\n Agents: values['Agents'] ? [values['Agents'] as string] : [],\n Prompts: values['Prompts'] ? [values['Prompts'] as string] : [],\n Statuses: values['Statuses'] ? [values['Statuses'] as string] : [],\n };\n this.OnFiltersChange(next);\n if ('SortBy' in values) {\n this.CurrentSortBy = (values['SortBy'] as string) || 'cost-efficiency';\n }\n if ('Vendor' in values) {\n this.CurrentVendor = (values['Vendor'] as string) || '';\n }\n }\n\n /** Reset only the popover filters — leaves TimeRange and CompareActive alone. */\n public resetPopoverFilters(): void {\n this.OnFiltersChange({ Models: [], Agents: [], Prompts: [], Statuses: [] });\n // SortBy + Vendor reset only when Model Performance is the active section.\n if (this.ActiveSection === 'model-performance') {\n this.CurrentSortBy = 'cost-efficiency';\n this.CurrentVendor = '';\n }\n }\n\n /** Active filter count for the popover badge. */\n public get ActiveFilterCount(): number {\n const f = this.CurrentFilters;\n let count = (f.Models?.length ?? 0) + (f.Agents?.length ?? 0) + (f.Prompts?.length ?? 0) + (f.Statuses?.length ?? 0);\n // SortBy counts as \"active\" when it differs from the default.\n if (this.FilterBarConfig.ShowSortBy && this.CurrentSortBy && this.CurrentSortBy !== 'cost-efficiency') count++;\n if (this.FilterBarConfig.ShowVendor && this.CurrentVendor) count++;\n return count;\n }\n\n /** Toggle Compare mode — the mjButton directive owns the [(selected)] flip, so this handler only forwards the new value. */\n public toggleCompare(): void {\n this.OnCompareToggled(this.compareActive);\n }\n\n readonly NavItems: NavItem[] = [\n { Label: 'Executive Summary', Icon: 'fa-solid fa-gauge-high', Key: 'executive-summary',\n Description: 'High-level KPIs and trends across the platform' },\n { Label: 'Prompt Runs', Icon: 'fa-solid fa-comment-dots', Key: 'prompt-runs',\n Description: 'Detailed analysis of individual prompt executions' },\n { Label: 'Agent Runs', Icon: 'fa-solid fa-robot', Key: 'agent-runs',\n Description: 'Performance breakdown by agent' },\n { Label: 'Model Performance', Icon: 'fa-solid fa-microchip', Key: 'model-performance',\n Description: 'Compare models across cost, speed, and quality' },\n { Key: 'divider' },\n { Label: 'Cost & Budget', Icon: 'fa-solid fa-coins', Key: 'cost-budget',\n Description: 'Spend trends and budget tracking' },\n { Label: 'Error Analysis', Icon: 'fa-solid fa-triangle-exclamation', Key: 'error-analysis',\n Description: 'Failure patterns and root causes' },\n { Label: 'Usage Patterns', Icon: 'fa-solid fa-clock', Key: 'usage-patterns',\n Description: 'Volume, frequency, and concurrency over time' },\n ];\n\n /**\n * Active section metadata — drives <mj-page-header-interior> Title +\n * Subtitle. Mirrors the pattern in KH Configuration / KH Analytics: one\n * source of truth (NavItems) used both to build the rail and to render\n * per-section identity.\n */\n get currentSection(): NavItem | undefined {\n return this.NavItems.find(n => n.Key === this.ActiveSection);\n }\n\n /**\n * Wraps `NavItems` for `<mj-left-nav>`. The `{ Key: 'divider' }` entry\n * splits the items into two `MJLeftNavSection`s (an unlabeled section per\n * group) — the rail's natural section break replaces the bespoke\n * `.nav-divider` line.\n */\n get navSections(): MJLeftNavSection[] {\n const sections: MJLeftNavSection[] = [{ items: [] }];\n for (const item of this.NavItems) {\n if (item.Key === 'divider') {\n sections.push({ items: [] });\n } else {\n sections[sections.length - 1].items.push({\n id: item.Key,\n label: item.Label ?? '',\n icon: item.Icon\n });\n }\n }\n return sections;\n }\n\n /** Adapter for `<mj-left-nav>`'s `(ItemClicked)` output. */\n onNavItemClicked(item: MJLeftNavItem): void {\n this.OnSectionChange(item.id);\n }\n\n async ngOnInit(): Promise<void> {\n super.ngOnInit();\n this.setupSettingsDebounce();\n await this.loadUserSettings();\n this.NotifyLoadComplete();\n }\n\n ngOnDestroy(): void {\n super.ngOnDestroy();\n this.destroy$.next();\n this.destroy$.complete();\n }\n\n async GetResourceDisplayName(data: ResourceData): Promise<string> {\n return 'AI Analytics';\n }\n\n async GetResourceIconClass(data: ResourceData): Promise<string> {\n return 'fa-solid fa-chart-line';\n }\n\n /** Navigate to a different analytics section */\n public OnSectionChange(key: string): void {\n if (key === 'divider' || key === this.ActiveSection) {\n return;\n }\n this.ActiveSection = key;\n this.saveUserSettings();\n this.cdr.detectChanges();\n }\n\n /** Handle time range changes from the filter bar */\n public OnTimeRangeChange(range: string): void {\n this.CurrentTimeRange = range;\n this.saveUserSettings();\n }\n\n /** Handle filter changes from the filter bar */\n public OnFiltersChange(filters: GlobalFilterState): void {\n this.CurrentFilters = filters;\n this.saveUserSettings();\n }\n\n /** Compare-toggle button — only visible on Executive Summary; forwards to that section. */\n public OnCompareToggled(value: boolean): void {\n this.executiveSummary?.OnCompareToggled?.(value);\n }\n\n /** Export button — only visible on Prompt Runs; forwards to that section. */\n public OnExportClicked(): void {\n this.promptRuns?.ExportCSV?.();\n }\n\n // ── Private Helpers ──\n\n private setupSettingsDebounce(): void {\n this.settingsPersistSubject.pipe(\n debounceTime(500),\n takeUntil(this.destroy$)\n ).subscribe(() => this.persistUserSettings());\n }\n\n private async loadUserSettings(): Promise<void> {\n try {\n const raw = UserInfoEngine.Instance.GetSetting(this.USER_SETTINGS_KEY);\n if (raw) {\n const prefs: AIAnalyticsPreferences = JSON.parse(raw);\n if (prefs.ActiveSection) {\n this.ActiveSection = prefs.ActiveSection;\n }\n if (prefs.ExecutiveSummary?.Filters) {\n this.CurrentFilters = { ...this.CurrentFilters, ...prefs.ExecutiveSummary.Filters };\n }\n if (prefs.ExecutiveSummary?.TimeRange) {\n this.CurrentTimeRange = prefs.ExecutiveSummary.TimeRange;\n }\n }\n } catch {\n // Use defaults on parse failure\n }\n this.settingsLoaded = true;\n }\n\n private saveUserSettings(): void {\n if (this.settingsLoaded) {\n this.settingsPersistSubject.next();\n }\n }\n\n private async persistUserSettings(): Promise<void> {\n try {\n const prefs: AIAnalyticsPreferences = {\n ActiveSection: this.ActiveSection,\n ExecutiveSummary: {\n TimeRange: this.CurrentTimeRange,\n ComparisonEnabled: false,\n Filters: this.CurrentFilters\n },\n PromptRuns: {\n TimeRange: this.CurrentTimeRange,\n Filters: this.CurrentFilters,\n ChartMetric: 'count',\n SortField: 'StartedAt',\n SortDirection: 'desc'\n },\n AgentRuns: {\n TimeRange: this.CurrentTimeRange,\n Filters: {\n Agents: this.CurrentFilters.Agents,\n Statuses: this.CurrentFilters.Statuses\n }\n },\n ModelPerformance: {\n TimeRange: this.CurrentTimeRange,\n SortBy: 'latency',\n VendorFilter: []\n },\n CostBudget: {\n TimeRange: this.CurrentTimeRange,\n Filters: this.CurrentFilters\n }\n };\n await UserInfoEngine.Instance.SetSetting(\n this.USER_SETTINGS_KEY,\n JSON.stringify(prefs)\n );\n } catch {\n // Silent failure for settings persistence\n }\n }\n}\n\nexport function LoadAIAnalyticsResource(): void {\n // Prevents tree-shaking of the @RegisterClass decorator\n}\n"]}
1
+ {"version":3,"file":"ai-analytics-resource.component.js","sourceRoot":"","sources":["../../../../src/AI/components/analytics/ai-analytics-resource.component.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * @fileoverview AI Analytics Shell — Resource Component\n *\n * Main resource component for the AI Analytics dashboard. Provides a left\n * navigation panel and content area that switches between analytics sections:\n * Executive Summary, Prompt Runs, Agent Runs, Model Performance, Cost & Budget,\n * Error Analysis, and Usage Patterns.\n *\n * Persists the active section and filter state via UserInfoEngine settings\n * with debounced writes.\n */\n\nimport { Component, ChangeDetectorRef, OnInit, OnDestroy, ViewChild, inject } from '@angular/core';\nimport { AnalyticsExecutiveSummaryComponent } from './executive-summary/executive-summary.component';\nimport { AnalyticsPromptRunsComponent } from './prompt-runs/prompt-run-analysis.component';\nimport { Subject } from 'rxjs';\nimport { debounceTime, takeUntil } from 'rxjs/operators';\nimport { ResourceData, UserInfoEngine } from '@memberjunction/core-entities';\nimport { RegisterClass } from '@memberjunction/global';\nimport { BaseResourceComponent } from '@memberjunction/ng-shared';\nimport { AIAnalyticsPreferences, GlobalFilterState } from '../../interfaces/analytics-preferences.interface';\nimport { AIEngineBase } from '@memberjunction/ai-engine-base';\nimport { FilterFieldConfig, MJLeftNavItem, MJLeftNavSection } from '@memberjunction/ng-ui-components';\n\ninterface NavItem {\n Label?: string;\n Icon?: string;\n Key: string;\n /**\n * Short prose used as the Subtitle on this section's\n * <mj-page-header-interior> card. Omitted for the `divider` entry.\n */\n Description?: string;\n}\n\n@RegisterClass(BaseResourceComponent, 'AIAnalyticsResource')\n@Component({\n standalone: false,\n selector: 'app-ai-analytics-resource',\n template: `\n <mj-page-layout>\n <!-- Outer chrome — pure identity. Every control (filter-popover,\n TimeRange chips, Compare, Export) lives in the per-section\n <mj-page-header-interior> card below because each section\n configures its own filter fields and time-range options. -->\n <mj-page-header\n Title=\"AI Analytics\"\n Icon=\"fa-solid fa-chart-line\"\n Subtitle=\"Performance, cost, and usage analytics\">\n </mj-page-header>\n <mj-page-body [Padding]=\"false\" class=\"analytics-shell\">\n <mj-left-nav\n MobileTitle=\"Analytics\"\n [Sections]=\"navSections\"\n [ActiveId]=\"ActiveSection\"\n (ItemClicked)=\"onNavItemClicked($event)\">\n </mj-left-nav>\n\n <mj-left-nav-content>\n <!-- Per-section interior chrome owns the complete control surface\n for the active section: identity + actions + the section's\n own time-range chip strip. Even TimeRange options vary per\n section (Cost & Budget adds MTD / YTD, Model Performance\n drops 1h / 6h, etc.) so it belongs here rather than in the\n outer chrome. -->\n <mj-page-header-interior\n [Title]=\"currentSection?.Label || ''\"\n [Subtitle]=\"currentSection?.Description || ''\">\n <div actions>\n @if (analyticsFilterFields.length > 0) {\n <mj-filter-popover\n [ActiveCount]=\"ActiveFilterCount\"\n [ShowClearAll]=\"ActiveFilterCount > 0\"\n (ClearAllRequested)=\"resetPopoverFilters()\">\n <mj-filter-panel\n [Fields]=\"analyticsFilterFields\"\n [Values]=\"analyticsFilterValues\"\n (ValuesChange)=\"onAnalyticsFilterValuesChange($event)\"\n (Reset)=\"resetPopoverFilters()\">\n </mj-filter-panel>\n </mj-filter-popover>\n }\n @if (FilterBarConfig.ShowCompareToggle) {\n <button mjButton variant=\"secondary\" size=\"sm\" [toggleable]=\"true\" [(selected)]=\"compareActive\" (selectedChange)=\"toggleCompare()\">\n <i class=\"fa-solid fa-code-compare\"></i> <span class=\"mj-action-label\">Compare</span>\n </button>\n }\n @if (FilterBarConfig.ShowExportButton) {\n <button mjButton variant=\"secondary\" size=\"sm\" (click)=\"OnExportClicked()\">\n <i class=\"fa-solid fa-download\"></i> <span class=\"mj-action-label\">Export</span>\n </button>\n }\n </div>\n @if (timeRangeChipOptions.length > 0) {\n <div toolbar class=\"time-range-chips\">\n @for (chip of timeRangeChipOptions; track chip.value) {\n <mj-filter-chip\n [Label]=\"chip.text\"\n [Active]=\"CurrentTimeRange === chip.value\"\n (Clicked)=\"OnTimeRangeChange(chip.value)\">\n </mj-filter-chip>\n }\n </div>\n }\n </mj-page-header-interior>\n <mj-page-body-interior [Padding]=\"false\">\n <div class=\"analytics-content\">\n @switch (ActiveSection) {\n @case ('executive-summary') {\n <app-analytics-executive-summary\n #executiveSummary\n [TimeRange]=\"CurrentTimeRange\"\n [Filters]=\"CurrentFilters\"\n (SectionNavigate)=\"OnSectionChange($event)\"\n ></app-analytics-executive-summary>\n }\n @case ('prompt-runs') {\n <app-analytics-prompt-runs\n #promptRuns\n [TimeRange]=\"CurrentTimeRange\"\n [Filters]=\"CurrentFilters\"\n ></app-analytics-prompt-runs>\n }\n @case ('agent-runs') {\n <app-analytics-agent-runs\n [TimeRange]=\"CurrentTimeRange\"\n [Filters]=\"CurrentFilters\"\n ></app-analytics-agent-runs>\n }\n @case ('model-performance') {\n <app-analytics-model-performance\n [TimeRange]=\"CurrentTimeRange\"\n [SortBy]=\"CurrentSortBy\"\n [SelectedVendor]=\"CurrentVendor\"\n ></app-analytics-model-performance>\n }\n @case ('cost-budget') {\n <app-analytics-cost-budget\n [TimeRange]=\"CurrentTimeRange\"\n [Filters]=\"CurrentFilters\"\n ></app-analytics-cost-budget>\n }\n @case ('error-analysis') {\n <app-analytics-error-analysis\n [TimeRange]=\"CurrentTimeRange\"\n [Filters]=\"CurrentFilters\"\n ></app-analytics-error-analysis>\n }\n @case ('usage-patterns') {\n <app-analytics-usage-patterns\n [TimeRange]=\"CurrentTimeRange\"\n ></app-analytics-usage-patterns>\n }\n }\n </div>\n </mj-page-body-interior>\n </mj-left-nav-content>\n </mj-page-body>\n </mj-page-layout>\n `,\n styles: [`\n :host {\n display: block;\n height: 100%;\n }\n\n .analytics-shell {\n display: flex;\n flex: 1;\n min-height: 0;\n background: var(--mj-bg-page);\n }\n\n /* ── Left Navigation ── */\n\n /* Rail width + nav-item styling now owned by <mj-left-nav>; the\n divider is expressed as a new MJLeftNavSection rather than a CSS\n rule. */\n\n /* ── Content Area ── */\n\n .analytics-content {\n flex: 1;\n overflow-y: auto;\n padding: 24px;\n }\n\n /* ── Section Placeholders ── */\n\n .section-placeholder {\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: center;\n text-align: center;\n padding: 80px 24px;\n color: var(--mj-text-muted);\n }\n\n .placeholder-icon {\n font-size: 48px;\n margin-bottom: 20px;\n color: var(--mj-brand-primary);\n opacity: 0.4;\n }\n\n .section-placeholder h2 {\n font-size: 20px;\n font-weight: 600;\n color: var(--mj-text-primary);\n margin: 0 0 8px;\n }\n\n .section-placeholder p {\n font-size: 14px;\n color: var(--mj-text-muted);\n margin: 0;\n max-width: 420px;\n }\n\n /* ── Responsive: collapse nav to horizontal strip ── */\n\n /* Responsive — <mj-left-nav> handles its own collapse-to-row at\n narrow viewports. We only need to tune the content padding. */\n @media (max-width: 768px) {\n .analytics-content {\n padding: 16px;\n }\n }\n\n /* <mj-left-nav> collapses to a full-width top bar at ≤700px; stack the\n shell vertically so the content pane sits below it instead of being\n squeezed to zero width in the flex row. */\n @media (max-width: 700px) {\n .analytics-shell {\n flex-direction: column;\n }\n }\n `]\n})\nexport class AIAnalyticsResourceComponent extends BaseResourceComponent implements OnInit, OnDestroy {\n private readonly USER_SETTINGS_KEY = 'AI.Analytics.UserPreferences';\n private settingsPersistSubject = new Subject<void>();\n protected override destroy$ = new Subject<void>();\n private settingsLoaded = false;\n private cdr = inject(ChangeDetectorRef);\n\n @ViewChild('executiveSummary') private executiveSummary?: AnalyticsExecutiveSummaryComponent;\n @ViewChild('promptRuns') private promptRuns?: AnalyticsPromptRunsComponent;\n\n public ActiveSection = 'executive-summary';\n public CurrentTimeRange = '24h';\n public CurrentFilters: GlobalFilterState = {\n Models: [],\n Agents: [],\n Prompts: [],\n Statuses: []\n };\n /** Single-value SortBy used by Model Performance (lives on the shared chrome). */\n public CurrentSortBy: string = 'cost-efficiency';\n /** Single-value Vendor filter used by Model Performance (lives on the shared chrome). */\n public CurrentVendor: string = '';\n\n /** SortBy options for Model Performance leaderboard. */\n public readonly sortByOptions = [\n { text: 'By Performance', value: 'cost-efficiency' },\n { text: 'By Cost', value: 'cost' },\n { text: 'By Speed', value: 'speed' },\n { text: 'By Reliability', value: 'reliability' },\n { text: 'By Usage', value: 'usage-volume' }\n ];\n\n /** Vendor options, lazily built from AIEngineBase for Model Performance leaderboard. */\n public get vendorOptions(): { text: string; value: string }[] {\n return AIEngineBase.Instance?.Vendors?.map(v => ({ text: v.Name ?? '', value: v.ID ?? '' }))\n ?.sort((a, b) => a.text.localeCompare(b.text)) ?? [];\n }\n\n /** Per-section filter-bar config — switched on ActiveSection. */\n public get FilterBarConfig() {\n switch (this.ActiveSection) {\n case 'executive-summary':\n return { ShowModelFilter: false, ShowAgentFilter: false, ShowPromptFilter: false, ShowStatusFilter: false, ShowSortBy: false, ShowVendor: false, ShowCompareToggle: true, ShowExportButton: false, TimeRangeOptions: ['1h', '6h', '24h', '7d', '30d'] };\n case 'prompt-runs':\n return { ShowModelFilter: true, ShowAgentFilter: true, ShowPromptFilter: true, ShowStatusFilter: true, ShowSortBy: false, ShowVendor: false, ShowCompareToggle: false, ShowExportButton: true, TimeRangeOptions: ['1h', '6h', '24h', '7d', '30d'] };\n case 'agent-runs':\n return { ShowModelFilter: false, ShowAgentFilter: true, ShowPromptFilter: false, ShowStatusFilter: true, ShowSortBy: false, ShowVendor: false, ShowCompareToggle: false, ShowExportButton: false, TimeRangeOptions: ['1h', '6h', '24h', '7d', '30d'] };\n case 'model-performance':\n return { ShowModelFilter: false, ShowAgentFilter: false, ShowPromptFilter: false, ShowStatusFilter: false, ShowSortBy: true, ShowVendor: true, ShowCompareToggle: false, ShowExportButton: false, TimeRangeOptions: ['24h', '7d', '30d'] };\n case 'cost-budget':\n return { ShowModelFilter: true, ShowAgentFilter: false, ShowPromptFilter: false, ShowStatusFilter: false, ShowSortBy: false, ShowVendor: false, ShowCompareToggle: false, ShowExportButton: false, TimeRangeOptions: ['7d', '30d', '90d', 'MTD', 'YTD'] };\n case 'error-analysis':\n return { ShowModelFilter: true, ShowAgentFilter: false, ShowPromptFilter: true, ShowStatusFilter: false, ShowSortBy: false, ShowVendor: false, ShowCompareToggle: false, ShowExportButton: false, TimeRangeOptions: ['1h', '6h', '24h', '7d', '30d'] };\n case 'usage-patterns':\n return { ShowModelFilter: false, ShowAgentFilter: false, ShowPromptFilter: false, ShowStatusFilter: false, ShowSortBy: false, ShowVendor: false, ShowCompareToggle: false, ShowExportButton: false, TimeRangeOptions: ['1h', '6h', '24h', '7d', '30d'] };\n default:\n return { ShowModelFilter: false, ShowAgentFilter: false, ShowPromptFilter: false, ShowStatusFilter: false, ShowSortBy: false, ShowVendor: false, ShowCompareToggle: false, ShowExportButton: false, TimeRangeOptions: ['1h', '6h', '24h', '7d', '30d'] };\n }\n }\n\n /**\n * Always true now — every section uses the shared chrome filter bar.\n * Kept as a getter for future per-section carve-outs.\n */\n public get ShowSharedFilterBar(): boolean {\n return true;\n }\n\n /** Status options used by the popover dropdown when the section has ShowStatusFilter. */\n public readonly statusOptions = [\n { text: 'Success', value: 'Success' },\n { text: 'Error', value: 'Error' },\n { text: 'Running', value: 'Running' },\n { text: 'Pending', value: 'Pending' },\n { text: 'Canceled', value: 'Canceled' },\n ];\n\n /** Built lazily from AIEngineBase. */\n public get modelOptions(): { text: string; value: string }[] {\n return AIEngineBase.Instance?.Models?.map(m => ({ text: m.Name ?? '', value: m.ID }))\n ?.sort((a, b) => a.text.localeCompare(b.text)) ?? [];\n }\n\n public get agentOptions(): { text: string; value: string }[] {\n return AIEngineBase.Instance?.Agents\n ?.filter(a => a.Status === 'Active')\n ?.map(a => ({ text: a.Name ?? '', value: a.ID }))\n ?.sort((a, b) => a.text.localeCompare(b.text)) ?? [];\n }\n\n public get promptOptions(): { text: string; value: string }[] {\n return AIEngineBase.Instance?.Prompts?.map(p => ({ text: p.Name ?? '', value: p.ID }))\n ?.sort((a, b) => a.text.localeCompare(b.text)) ?? [];\n }\n\n /** Time-range chip options for the toolbar slot. */\n public get timeRangeChipOptions(): { text: string; value: string }[] {\n return this.FilterBarConfig.TimeRangeOptions.map(t => ({ text: t, value: t }));\n }\n\n /** Compare-mode visual state (kept on the shell now that analytics-filter-bar is gone). */\n public compareActive = false;\n\n /** Build the FilterFieldConfig[] for the popover based on the active section. */\n public get analyticsFilterFields(): FilterFieldConfig[] {\n const cfg = this.FilterBarConfig;\n const fields: FilterFieldConfig[] = [];\n if (cfg.ShowModelFilter) {\n fields.push({\n key: 'Models',\n type: 'dropdown',\n label: 'Model',\n icon: 'fa-solid fa-microchip',\n filterable: this.modelOptions.length > 10,\n options: [{ text: 'All Models', value: '' }, ...this.modelOptions],\n });\n }\n if (cfg.ShowAgentFilter) {\n fields.push({\n key: 'Agents',\n type: 'dropdown',\n label: 'Agent',\n icon: 'fa-solid fa-robot',\n filterable: this.agentOptions.length > 10,\n options: [{ text: 'All Agents', value: '' }, ...this.agentOptions],\n });\n }\n if (cfg.ShowPromptFilter) {\n fields.push({\n key: 'Prompts',\n type: 'dropdown',\n label: 'Prompt',\n icon: 'fa-solid fa-comment-dots',\n filterable: this.promptOptions.length > 10,\n options: [{ text: 'All Prompts', value: '' }, ...this.promptOptions],\n });\n }\n if (cfg.ShowStatusFilter) {\n fields.push({\n key: 'Statuses',\n type: 'dropdown',\n label: 'Status',\n icon: 'fa-solid fa-toggle-on',\n options: [{ text: 'All Statuses', value: '' }, ...this.statusOptions],\n });\n }\n if (cfg.ShowSortBy) {\n fields.push({\n key: 'SortBy',\n type: 'dropdown',\n label: 'Sort By',\n icon: 'fa-solid fa-arrow-down-wide-short',\n options: this.sortByOptions,\n });\n }\n if (cfg.ShowVendor) {\n fields.push({\n key: 'Vendor',\n type: 'dropdown',\n label: 'Vendor',\n icon: 'fa-solid fa-building',\n filterable: this.vendorOptions.length > 10,\n options: [{ text: 'All Vendors', value: '' }, ...this.vendorOptions],\n });\n }\n return fields;\n }\n\n /** Single-value flattened state for the centralized panel (the panel takes scalar values; we hold arrays in CurrentFilters). */\n public get analyticsFilterValues(): Record<string, unknown> {\n return {\n Models: this.CurrentFilters.Models?.[0] ?? '',\n Agents: this.CurrentFilters.Agents?.[0] ?? '',\n Prompts: this.CurrentFilters.Prompts?.[0] ?? '',\n Statuses: this.CurrentFilters.Statuses?.[0] ?? '',\n SortBy: this.CurrentSortBy,\n Vendor: this.CurrentVendor,\n };\n }\n\n /** Receive popover updates and translate scalar → array shape used by GlobalFilterState. */\n public onAnalyticsFilterValuesChange(values: Record<string, unknown>): void {\n const next: GlobalFilterState = {\n Models: values['Models'] ? [values['Models'] as string] : [],\n Agents: values['Agents'] ? [values['Agents'] as string] : [],\n Prompts: values['Prompts'] ? [values['Prompts'] as string] : [],\n Statuses: values['Statuses'] ? [values['Statuses'] as string] : [],\n };\n this.OnFiltersChange(next);\n if ('SortBy' in values) {\n this.CurrentSortBy = (values['SortBy'] as string) || 'cost-efficiency';\n }\n if ('Vendor' in values) {\n this.CurrentVendor = (values['Vendor'] as string) || '';\n }\n }\n\n /** Reset only the popover filters — leaves TimeRange and CompareActive alone. */\n public resetPopoverFilters(): void {\n this.OnFiltersChange({ Models: [], Agents: [], Prompts: [], Statuses: [] });\n // SortBy + Vendor reset only when Model Performance is the active section.\n if (this.ActiveSection === 'model-performance') {\n this.CurrentSortBy = 'cost-efficiency';\n this.CurrentVendor = '';\n }\n }\n\n /** Active filter count for the popover badge. */\n public get ActiveFilterCount(): number {\n const f = this.CurrentFilters;\n let count = (f.Models?.length ?? 0) + (f.Agents?.length ?? 0) + (f.Prompts?.length ?? 0) + (f.Statuses?.length ?? 0);\n // SortBy counts as \"active\" when it differs from the default.\n if (this.FilterBarConfig.ShowSortBy && this.CurrentSortBy && this.CurrentSortBy !== 'cost-efficiency') count++;\n if (this.FilterBarConfig.ShowVendor && this.CurrentVendor) count++;\n return count;\n }\n\n /** Toggle Compare mode — the mjButton directive owns the [(selected)] flip, so this handler only forwards the new value. */\n public toggleCompare(): void {\n this.OnCompareToggled(this.compareActive);\n }\n\n readonly NavItems: NavItem[] = [\n { Label: 'Executive Summary', Icon: 'fa-solid fa-gauge-high', Key: 'executive-summary',\n Description: 'High-level KPIs and trends across the platform' },\n { Label: 'Prompt Runs', Icon: 'fa-solid fa-comment-dots', Key: 'prompt-runs',\n Description: 'Detailed analysis of individual prompt executions' },\n { Label: 'Agent Runs', Icon: 'fa-solid fa-robot', Key: 'agent-runs',\n Description: 'Performance breakdown by agent' },\n { Label: 'Model Performance', Icon: 'fa-solid fa-microchip', Key: 'model-performance',\n Description: 'Compare models across cost, speed, and quality' },\n { Key: 'divider' },\n { Label: 'Cost & Budget', Icon: 'fa-solid fa-coins', Key: 'cost-budget',\n Description: 'Spend trends and budget tracking' },\n { Label: 'Error Analysis', Icon: 'fa-solid fa-triangle-exclamation', Key: 'error-analysis',\n Description: 'Failure patterns and root causes' },\n { Label: 'Usage Patterns', Icon: 'fa-solid fa-clock', Key: 'usage-patterns',\n Description: 'Volume, frequency, and concurrency over time' },\n ];\n\n /**\n * Active section metadata — drives <mj-page-header-interior> Title +\n * Subtitle. Mirrors the pattern in KH Configuration / KH Analytics: one\n * source of truth (NavItems) used both to build the rail and to render\n * per-section identity.\n */\n get currentSection(): NavItem | undefined {\n return this.NavItems.find(n => n.Key === this.ActiveSection);\n }\n\n /**\n * Wraps `NavItems` for `<mj-left-nav>`. The `{ Key: 'divider' }` entry\n * splits the items into two `MJLeftNavSection`s (an unlabeled section per\n * group) — the rail's natural section break replaces the bespoke\n * `.nav-divider` line.\n */\n get navSections(): MJLeftNavSection[] {\n const sections: MJLeftNavSection[] = [{ items: [] }];\n for (const item of this.NavItems) {\n if (item.Key === 'divider') {\n sections.push({ items: [] });\n } else {\n sections[sections.length - 1].items.push({\n id: item.Key,\n label: item.Label ?? '',\n icon: item.Icon\n });\n }\n }\n return sections;\n }\n\n /** Adapter for `<mj-left-nav>`'s `(ItemClicked)` output. */\n onNavItemClicked(item: MJLeftNavItem): void {\n this.OnSectionChange(item.id);\n }\n\n async ngOnInit(): Promise<void> {\n super.ngOnInit();\n this.setupSettingsDebounce();\n await this.loadUserSettings();\n this.NotifyLoadComplete();\n }\n\n ngOnDestroy(): void {\n super.ngOnDestroy();\n this.destroy$.next();\n this.destroy$.complete();\n }\n\n async GetResourceDisplayName(data: ResourceData): Promise<string> {\n return 'AI Analytics';\n }\n\n async GetResourceIconClass(data: ResourceData): Promise<string> {\n return 'fa-solid fa-chart-line';\n }\n\n /** Navigate to a different analytics section */\n public OnSectionChange(key: string): void {\n if (key === 'divider' || key === this.ActiveSection) {\n return;\n }\n this.ActiveSection = key;\n this.saveUserSettings();\n this.cdr.detectChanges();\n }\n\n /** Handle time range changes from the filter bar */\n public OnTimeRangeChange(range: string): void {\n this.CurrentTimeRange = range;\n this.saveUserSettings();\n }\n\n /** Handle filter changes from the filter bar */\n public OnFiltersChange(filters: GlobalFilterState): void {\n this.CurrentFilters = filters;\n this.saveUserSettings();\n }\n\n /** Compare-toggle button — only visible on Executive Summary; forwards to that section. */\n public OnCompareToggled(value: boolean): void {\n this.executiveSummary?.OnCompareToggled?.(value);\n }\n\n /** Export button — only visible on Prompt Runs; forwards to that section. */\n public OnExportClicked(): void {\n this.promptRuns?.ExportCSV?.();\n }\n\n // ── Private Helpers ──\n\n private setupSettingsDebounce(): void {\n this.settingsPersistSubject.pipe(\n debounceTime(500),\n takeUntil(this.destroy$)\n ).subscribe(() => this.persistUserSettings());\n }\n\n private async loadUserSettings(): Promise<void> {\n try {\n const raw = UserInfoEngine.Instance.GetSetting(this.USER_SETTINGS_KEY);\n if (raw) {\n const prefs: AIAnalyticsPreferences = JSON.parse(raw);\n if (prefs.ActiveSection) {\n this.ActiveSection = prefs.ActiveSection;\n }\n if (prefs.ExecutiveSummary?.Filters) {\n this.CurrentFilters = { ...this.CurrentFilters, ...prefs.ExecutiveSummary.Filters };\n }\n if (prefs.ExecutiveSummary?.TimeRange) {\n this.CurrentTimeRange = prefs.ExecutiveSummary.TimeRange;\n }\n }\n } catch {\n // Use defaults on parse failure\n }\n this.settingsLoaded = true;\n }\n\n private saveUserSettings(): void {\n if (this.settingsLoaded) {\n this.settingsPersistSubject.next();\n }\n }\n\n private async persistUserSettings(): Promise<void> {\n try {\n const prefs: AIAnalyticsPreferences = {\n ActiveSection: this.ActiveSection,\n ExecutiveSummary: {\n TimeRange: this.CurrentTimeRange,\n ComparisonEnabled: false,\n Filters: this.CurrentFilters\n },\n PromptRuns: {\n TimeRange: this.CurrentTimeRange,\n Filters: this.CurrentFilters,\n ChartMetric: 'count',\n SortField: 'StartedAt',\n SortDirection: 'desc'\n },\n AgentRuns: {\n TimeRange: this.CurrentTimeRange,\n Filters: {\n Agents: this.CurrentFilters.Agents,\n Statuses: this.CurrentFilters.Statuses\n }\n },\n ModelPerformance: {\n TimeRange: this.CurrentTimeRange,\n SortBy: 'latency',\n VendorFilter: []\n },\n CostBudget: {\n TimeRange: this.CurrentTimeRange,\n Filters: this.CurrentFilters\n }\n };\n await UserInfoEngine.Instance.SetSetting(\n this.USER_SETTINGS_KEY,\n JSON.stringify(prefs)\n );\n } catch {\n // Silent failure for settings persistence\n }\n }\n}\n\nexport function LoadAIAnalyticsResource(): void {\n // Prevents tree-shaking of the @RegisterClass decorator\n}\n"]}
@@ -36,6 +36,10 @@ interface CostByModelRow {
36
36
  Runs: number;
37
37
  InputTokens: number;
38
38
  OutputTokens: number;
39
+ CacheReadTokens: number;
40
+ CacheWriteTokens: number;
41
+ CacheHitRate: number;
42
+ CacheSavings: number;
39
43
  InputCost: number;
40
44
  OutputCost: number;
41
45
  TotalCost: number;
@@ -63,6 +67,7 @@ export declare class AnalyticsCostBudgetComponent extends BaseAngularComponent i
63
67
  CostByModelRows: CostByModelRow[];
64
68
  private allRuns;
65
69
  private previousPeriodRuns;
70
+ private cacheRates;
66
71
  ngOnInit(): void;
67
72
  ngOnDestroy(): void;
68
73
  OnTimeRangeChange(range: string): void;
@@ -70,7 +75,17 @@ export declare class AnalyticsCostBudgetComponent extends BaseAngularComponent i
70
75
  FormatCurrency(value: number, decimals?: number): string;
71
76
  ExportCSV(): void;
72
77
  private LoadData;
78
+ /** Stable map key for a model+vendor pair (UUIDs normalized for case-insensitive matching). */
79
+ private rateKey;
80
+ /** The cache rate for a run's model+vendor, or undefined when no active cost row is configured. */
81
+ private rateFor;
82
+ /** Build the per-model+vendor rate lookup, normalizing each per-unit price to currency-per-token. */
83
+ private buildCacheRateMap;
84
+ /** Sum net cache savings across a set of runs using each run's model+vendor rate. */
85
+ private sumCacheSavings;
73
86
  private computeKpis;
87
+ /** Append the cache hit-rate and cache-savings KPIs (computed from the current-period runs). */
88
+ private appendCacheKpis;
74
89
  private computeDailyBars;
75
90
  private computeTreemap;
76
91
  private computeCostByModel;
@@ -1 +1 @@
1
- {"version":3,"file":"cost-budget.component.d.ts","sourceRoot":"","sources":["../../../../../src/AI/components/analytics/cost-budget/cost-budget.component.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EACuB,YAAY,EACtC,MAAM,EAAE,SAAS,EACpB,MAAM,eAAe,CAAC;AAGvB,OAAO,EAAE,oBAAoB,EAAE,MAAM,+BAA+B,CAAC;AACrE,OAAO,EAAE,iBAAiB,EAAE,MAAM,qDAAqD,CAAC;;AAmBxF,UAAU,OAAO;IACb,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;IACrB,cAAc,EAAE,IAAI,GAAG,MAAM,GAAG,QAAQ,CAAC;IACzC,WAAW,EAAE,OAAO,CAAC;IACrB,IAAI,EAAE,MAAM,CAAC;CAChB;AAED,UAAU,QAAQ;IACd,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,MAAM,CAAC;IACb,aAAa,EAAE,MAAM,CAAC;IACtB,SAAS,EAAE,OAAO,CAAC;CACtB;AAED,UAAU,WAAW;IACjB,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,MAAM,CAAC;CACpB;AAED,UAAU,cAAc;IACpB,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,YAAY,EAAE,MAAM,CAAC;IACrB,SAAS,EAAE,MAAM,CAAC;IAClB,UAAU,EAAE,MAAM,CAAC;IACnB,SAAS,EAAE,MAAM,CAAC;IAClB,cAAc,EAAE,MAAM,CAAC;CAC1B;AAkBD,qBAsfa,4BAA6B,SAAQ,oBAAqB,YAAW,MAAM,EAAE,SAAS;IAC/F,OAAO,CAAC,UAAU,CAAQ;IAC1B,IACI,SAAS,CAAC,KAAK,EAAE,MAAM,EAI1B;IACD,IAAI,SAAS,IAAI,MAAM,CAA4B;IAEnD,OAAO,CAAC,QAAQ,CAA4E;IAC5F,IACI,OAAO,CAAC,KAAK,EAAE,iBAAiB,EAKnC;IACD,IAAI,OAAO,IAAI,iBAAiB,CAA0B;IAE1D,OAAO,CAAC,mBAAmB;IAKjB,eAAe,uBAA8B;IAC7C,aAAa,kCAAyC;IAEhE,OAAO,CAAC,WAAW,CAAS;IAE5B,OAAO,CAAC,GAAG,CAA6B;IACxC,OAAO,CAAC,QAAQ,CAAuB;IAEhC,SAAS,UAAS;IAClB,oBAAoB,WAAsB;IAE1C,QAAQ,EAAE,OAAO,EAAE,CAAM;IACzB,SAAS,EAAE,QAAQ,EAAE,CAAM;IAC3B,cAAc,SAAK;IACnB,YAAY,EAAE,WAAW,EAAE,CAAM;IACjC,eAAe,EAAE,cAAc,EAAE,CAAM;IAE9C,OAAO,CAAC,OAAO,CAAyB;IACxC,OAAO,CAAC,kBAAkB,CAAyB;IAEnD,QAAQ,IAAI,IAAI;IAKhB,WAAW,IAAI,IAAI;IAOZ,iBAAiB,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI;IAMtC,eAAe,CAAC,OAAO,EAAE,iBAAiB,GAAG,IAAI;IAMjD,cAAc,CAAC,KAAK,EAAE,MAAM,EAAE,QAAQ,SAAI,GAAG,MAAM;IAMnD,SAAS,IAAI,IAAI;YAWV,QAAQ;IA8CtB,OAAO,CAAC,WAAW;IAuDnB,OAAO,CAAC,gBAAgB;IA+BxB,OAAO,CAAC,cAAc;IAmBtB,OAAO,CAAC,kBAAkB;IAuC1B,OAAO,CAAC,cAAc;IAStB,OAAO,CAAC,aAAa;IAcrB,OAAO,CAAC,gBAAgB;IAMxB,OAAO,CAAC,yBAAyB;IASjC,OAAO,CAAC,cAAc;IAMtB,OAAO,CAAC,WAAW;yCAhUV,4BAA4B;2CAA5B,4BAA4B;CAyUxC;AAED,wBAAgB,uBAAuB,SAAoC"}
1
+ {"version":3,"file":"cost-budget.component.d.ts","sourceRoot":"","sources":["../../../../../src/AI/components/analytics/cost-budget/cost-budget.component.ts"],"names":[],"mappings":"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"}