@memberjunction/ng-dashboards 5.30.0 → 5.31.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (424) hide show
  1. package/dist/AI/components/agents/agent-configuration.component.d.ts.map +1 -1
  2. package/dist/AI/components/agents/agent-configuration.component.js +4 -4
  3. package/dist/AI/components/agents/agent-configuration.component.js.map +1 -1
  4. package/dist/AI/components/agents/agent-editor.component.d.ts +2 -1
  5. package/dist/AI/components/agents/agent-editor.component.d.ts.map +1 -1
  6. package/dist/AI/components/agents/agent-editor.component.js +8 -6
  7. package/dist/AI/components/agents/agent-editor.component.js.map +1 -1
  8. package/dist/AI/components/analytics/agent-runs/agent-run-analysis.component.d.ts +2 -1
  9. package/dist/AI/components/analytics/agent-runs/agent-run-analysis.component.d.ts.map +1 -1
  10. package/dist/AI/components/analytics/agent-runs/agent-run-analysis.component.js +6 -5
  11. package/dist/AI/components/analytics/agent-runs/agent-run-analysis.component.js.map +1 -1
  12. package/dist/AI/components/analytics/cost-budget/cost-budget.component.d.ts +2 -1
  13. package/dist/AI/components/analytics/cost-budget/cost-budget.component.d.ts.map +1 -1
  14. package/dist/AI/components/analytics/cost-budget/cost-budget.component.js +6 -5
  15. package/dist/AI/components/analytics/cost-budget/cost-budget.component.js.map +1 -1
  16. package/dist/AI/components/analytics/error-analysis/error-analysis.component.d.ts +2 -1
  17. package/dist/AI/components/analytics/error-analysis/error-analysis.component.d.ts.map +1 -1
  18. package/dist/AI/components/analytics/error-analysis/error-analysis.component.js +6 -5
  19. package/dist/AI/components/analytics/error-analysis/error-analysis.component.js.map +1 -1
  20. package/dist/AI/components/analytics/executive-summary/executive-summary.component.d.ts +2 -1
  21. package/dist/AI/components/analytics/executive-summary/executive-summary.component.d.ts.map +1 -1
  22. package/dist/AI/components/analytics/executive-summary/executive-summary.component.js +7 -4
  23. package/dist/AI/components/analytics/executive-summary/executive-summary.component.js.map +1 -1
  24. package/dist/AI/components/analytics/model-performance/model-performance.component.d.ts +3 -2
  25. package/dist/AI/components/analytics/model-performance/model-performance.component.d.ts.map +1 -1
  26. package/dist/AI/components/analytics/model-performance/model-performance.component.js +10 -6
  27. package/dist/AI/components/analytics/model-performance/model-performance.component.js.map +1 -1
  28. package/dist/AI/components/analytics/prompt-runs/prompt-run-analysis.component.d.ts +2 -1
  29. package/dist/AI/components/analytics/prompt-runs/prompt-run-analysis.component.d.ts.map +1 -1
  30. package/dist/AI/components/analytics/prompt-runs/prompt-run-analysis.component.js +6 -5
  31. package/dist/AI/components/analytics/prompt-runs/prompt-run-analysis.component.js.map +1 -1
  32. package/dist/AI/components/analytics/usage-patterns/usage-patterns.component.d.ts +2 -1
  33. package/dist/AI/components/analytics/usage-patterns/usage-patterns.component.d.ts.map +1 -1
  34. package/dist/AI/components/analytics/usage-patterns/usage-patterns.component.js +6 -5
  35. package/dist/AI/components/analytics/usage-patterns/usage-patterns.component.js.map +1 -1
  36. package/dist/AI/components/autotagging/autotagging-pipeline-resource.component.d.ts.map +1 -1
  37. package/dist/AI/components/autotagging/autotagging-pipeline-resource.component.js +55 -52
  38. package/dist/AI/components/autotagging/autotagging-pipeline-resource.component.js.map +1 -1
  39. package/dist/AI/components/duplicates/duplicate-detection-resource.component.js +15 -15
  40. package/dist/AI/components/duplicates/duplicate-detection-resource.component.js.map +1 -1
  41. package/dist/AI/components/execution-monitoring.component.d.ts.map +1 -1
  42. package/dist/AI/components/execution-monitoring.component.js +4 -3
  43. package/dist/AI/components/execution-monitoring.component.js.map +1 -1
  44. package/dist/AI/components/models/model-management.component.js +2 -2
  45. package/dist/AI/components/models/model-management.component.js.map +1 -1
  46. package/dist/AI/components/prompts/model-prompt-priority-matrix.component.d.ts +2 -1
  47. package/dist/AI/components/prompts/model-prompt-priority-matrix.component.d.ts.map +1 -1
  48. package/dist/AI/components/prompts/model-prompt-priority-matrix.component.js +10 -8
  49. package/dist/AI/components/prompts/model-prompt-priority-matrix.component.js.map +1 -1
  50. package/dist/AI/components/prompts/prompt-management.component.d.ts.map +1 -1
  51. package/dist/AI/components/prompts/prompt-management.component.js +2 -2
  52. package/dist/AI/components/prompts/prompt-management.component.js.map +1 -1
  53. package/dist/AI/components/prompts/prompt-version-control.component.d.ts +2 -1
  54. package/dist/AI/components/prompts/prompt-version-control.component.d.ts.map +1 -1
  55. package/dist/AI/components/prompts/prompt-version-control.component.js +13 -10
  56. package/dist/AI/components/prompts/prompt-version-control.component.js.map +1 -1
  57. package/dist/AI/components/requests/agent-requests-resource.component.js +1 -1
  58. package/dist/AI/components/requests/agent-requests-resource.component.js.map +1 -1
  59. package/dist/AI/components/tags/tags-resource.component.d.ts +1181 -0
  60. package/dist/AI/components/tags/tags-resource.component.d.ts.map +1 -0
  61. package/dist/AI/components/tags/tags-resource.component.js +7487 -0
  62. package/dist/AI/components/tags/tags-resource.component.js.map +1 -0
  63. package/dist/AI/components/vectors/vector-management-resource.component.d.ts.map +1 -1
  64. package/dist/AI/components/vectors/vector-management-resource.component.js +25 -21
  65. package/dist/AI/components/vectors/vector-management-resource.component.js.map +1 -1
  66. package/dist/AI/index.d.ts +1 -0
  67. package/dist/AI/index.d.ts.map +1 -1
  68. package/dist/AI/index.js +5 -0
  69. package/dist/AI/index.js.map +1 -1
  70. package/dist/AI/services/ai-instrumentation.service.d.ts +5 -0
  71. package/dist/AI/services/ai-instrumentation.service.d.ts.map +1 -1
  72. package/dist/AI/services/ai-instrumentation.service.js +12 -4
  73. package/dist/AI/services/ai-instrumentation.service.js.map +1 -1
  74. package/dist/APIKeys/api-applications-panel.component.d.ts +3 -2
  75. package/dist/APIKeys/api-applications-panel.component.d.ts.map +1 -1
  76. package/dist/APIKeys/api-applications-panel.component.js +5 -4
  77. package/dist/APIKeys/api-applications-panel.component.js.map +1 -1
  78. package/dist/APIKeys/api-key-create-dialog.component.d.ts +2 -1
  79. package/dist/APIKeys/api-key-create-dialog.component.d.ts.map +1 -1
  80. package/dist/APIKeys/api-key-create-dialog.component.js +5 -5
  81. package/dist/APIKeys/api-key-create-dialog.component.js.map +1 -1
  82. package/dist/APIKeys/api-key-edit-panel.component.d.ts +3 -2
  83. package/dist/APIKeys/api-key-edit-panel.component.d.ts.map +1 -1
  84. package/dist/APIKeys/api-key-edit-panel.component.js +11 -10
  85. package/dist/APIKeys/api-key-edit-panel.component.js.map +1 -1
  86. package/dist/APIKeys/api-key-list.component.d.ts +2 -1
  87. package/dist/APIKeys/api-key-list.component.d.ts.map +1 -1
  88. package/dist/APIKeys/api-key-list.component.js +6 -5
  89. package/dist/APIKeys/api-key-list.component.js.map +1 -1
  90. package/dist/APIKeys/api-keys-resource.component.d.ts.map +1 -1
  91. package/dist/APIKeys/api-keys-resource.component.js +4 -4
  92. package/dist/APIKeys/api-keys-resource.component.js.map +1 -1
  93. package/dist/APIKeys/api-scopes-panel.component.d.ts +3 -2
  94. package/dist/APIKeys/api-scopes-panel.component.d.ts.map +1 -1
  95. package/dist/APIKeys/api-scopes-panel.component.js +8 -6
  96. package/dist/APIKeys/api-scopes-panel.component.js.map +1 -1
  97. package/dist/APIKeys/api-usage-panel.component.d.ts +3 -2
  98. package/dist/APIKeys/api-usage-panel.component.d.ts.map +1 -1
  99. package/dist/APIKeys/api-usage-panel.component.js +10 -8
  100. package/dist/APIKeys/api-usage-panel.component.js.map +1 -1
  101. package/dist/Actions/components/actions-list-view.component.d.ts +2 -1
  102. package/dist/Actions/components/actions-list-view.component.d.ts.map +1 -1
  103. package/dist/Actions/components/actions-list-view.component.js +6 -5
  104. package/dist/Actions/components/actions-list-view.component.js.map +1 -1
  105. package/dist/Actions/components/actions-overview.component.js +2 -2
  106. package/dist/Actions/components/actions-overview.component.js.map +1 -1
  107. package/dist/Actions/components/categories-list-view.component.d.ts +2 -1
  108. package/dist/Actions/components/categories-list-view.component.d.ts.map +1 -1
  109. package/dist/Actions/components/categories-list-view.component.js +6 -5
  110. package/dist/Actions/components/categories-list-view.component.js.map +1 -1
  111. package/dist/Actions/components/execution-monitoring.component.js +1 -1
  112. package/dist/Actions/components/execution-monitoring.component.js.map +1 -1
  113. package/dist/Actions/components/explorer/action-card.component.d.ts +2 -1
  114. package/dist/Actions/components/explorer/action-card.component.d.ts.map +1 -1
  115. package/dist/Actions/components/explorer/action-card.component.js +6 -4
  116. package/dist/Actions/components/explorer/action-card.component.js.map +1 -1
  117. package/dist/Actions/components/explorer/action-explorer.component.js +1 -1
  118. package/dist/Actions/components/explorer/action-explorer.component.js.map +1 -1
  119. package/dist/Actions/components/explorer/new-action-panel.component.d.ts +2 -1
  120. package/dist/Actions/components/explorer/new-action-panel.component.d.ts.map +1 -1
  121. package/dist/Actions/components/explorer/new-action-panel.component.js +7 -5
  122. package/dist/Actions/components/explorer/new-action-panel.component.js.map +1 -1
  123. package/dist/Actions/components/explorer/new-category-panel.component.d.ts +2 -1
  124. package/dist/Actions/components/explorer/new-category-panel.component.d.ts.map +1 -1
  125. package/dist/Actions/components/explorer/new-category-panel.component.js +7 -5
  126. package/dist/Actions/components/explorer/new-category-panel.component.js.map +1 -1
  127. package/dist/ApplicationRoles/application-roles-resource.component.js +4 -4
  128. package/dist/ApplicationRoles/application-roles-resource.component.js.map +1 -1
  129. package/dist/Communication/communication-logs-resource.component.js +1 -1
  130. package/dist/Communication/communication-logs-resource.component.js.map +1 -1
  131. package/dist/Communication/communication-monitor-resource.component.js +1 -1
  132. package/dist/Communication/communication-monitor-resource.component.js.map +1 -1
  133. package/dist/Communication/communication-providers-resource.component.js +3 -3
  134. package/dist/Communication/communication-providers-resource.component.js.map +1 -1
  135. package/dist/Communication/communication-runs-resource.component.js +1 -1
  136. package/dist/Communication/communication-runs-resource.component.js.map +1 -1
  137. package/dist/Communication/communication-templates-resource.component.js +3 -3
  138. package/dist/Communication/communication-templates-resource.component.js.map +1 -1
  139. package/dist/ComponentStudio/component-studio-dashboard.component.d.ts +1 -1
  140. package/dist/ComponentStudio/component-studio-dashboard.component.d.ts.map +1 -1
  141. package/dist/ComponentStudio/component-studio-dashboard.component.js +5 -4
  142. package/dist/ComponentStudio/component-studio-dashboard.component.js.map +1 -1
  143. package/dist/ComponentStudio/components/ai-assistant/ai-assistant-panel.component.d.ts +2 -1
  144. package/dist/ComponentStudio/components/ai-assistant/ai-assistant-panel.component.d.ts.map +1 -1
  145. package/dist/ComponentStudio/components/ai-assistant/ai-assistant-panel.component.js +6 -4
  146. package/dist/ComponentStudio/components/ai-assistant/ai-assistant-panel.component.js.map +1 -1
  147. package/dist/ComponentStudio/components/artifact-load-dialog.component.d.ts +11 -2
  148. package/dist/ComponentStudio/components/artifact-load-dialog.component.d.ts.map +1 -1
  149. package/dist/ComponentStudio/components/artifact-load-dialog.component.js +61 -27
  150. package/dist/ComponentStudio/components/artifact-load-dialog.component.js.map +1 -1
  151. package/dist/ComponentStudio/components/artifact-selection-dialog.component.d.ts +4 -2
  152. package/dist/ComponentStudio/components/artifact-selection-dialog.component.d.ts.map +1 -1
  153. package/dist/ComponentStudio/components/artifact-selection-dialog.component.js +19 -11
  154. package/dist/ComponentStudio/components/artifact-selection-dialog.component.js.map +1 -1
  155. package/dist/ComponentStudio/components/editors/data-requirements-editor.component.d.ts +4 -2
  156. package/dist/ComponentStudio/components/editors/data-requirements-editor.component.d.ts.map +1 -1
  157. package/dist/ComponentStudio/components/editors/data-requirements-editor.component.js +11 -3
  158. package/dist/ComponentStudio/components/editors/data-requirements-editor.component.js.map +1 -1
  159. package/dist/ComponentStudio/components/workspace/component-preview.component.d.ts +10 -1
  160. package/dist/ComponentStudio/components/workspace/component-preview.component.d.ts.map +1 -1
  161. package/dist/ComponentStudio/components/workspace/component-preview.component.js +18 -9
  162. package/dist/ComponentStudio/components/workspace/component-preview.component.js.map +1 -1
  163. package/dist/ComponentStudio/services/component-studio-state.service.d.ts +11 -1
  164. package/dist/ComponentStudio/services/component-studio-state.service.d.ts.map +1 -1
  165. package/dist/ComponentStudio/services/component-studio-state.service.js +23 -3
  166. package/dist/ComponentStudio/services/component-studio-state.service.js.map +1 -1
  167. package/dist/ComponentStudio/services/component-version.service.d.ts +6 -1
  168. package/dist/ComponentStudio/services/component-version.service.d.ts.map +1 -1
  169. package/dist/ComponentStudio/services/component-version.service.js +16 -6
  170. package/dist/ComponentStudio/services/component-version.service.js.map +1 -1
  171. package/dist/Credentials/components/credentials-audit-resource.component.js +1 -1
  172. package/dist/Credentials/components/credentials-audit-resource.component.js.map +1 -1
  173. package/dist/Credentials/components/credentials-categories-resource.component.d.ts.map +1 -1
  174. package/dist/Credentials/components/credentials-categories-resource.component.js +3 -3
  175. package/dist/Credentials/components/credentials-categories-resource.component.js.map +1 -1
  176. package/dist/Credentials/components/credentials-list-resource.component.d.ts.map +1 -1
  177. package/dist/Credentials/components/credentials-list-resource.component.js +3 -3
  178. package/dist/Credentials/components/credentials-list-resource.component.js.map +1 -1
  179. package/dist/Credentials/components/credentials-overview-resource.component.d.ts.map +1 -1
  180. package/dist/Credentials/components/credentials-overview-resource.component.js +3 -3
  181. package/dist/Credentials/components/credentials-overview-resource.component.js.map +1 -1
  182. package/dist/Credentials/components/credentials-types-resource.component.d.ts.map +1 -1
  183. package/dist/Credentials/components/credentials-types-resource.component.js +3 -3
  184. package/dist/Credentials/components/credentials-types-resource.component.js.map +1 -1
  185. package/dist/Credentials/credentials-dashboard.component.js +1 -1
  186. package/dist/Credentials/credentials-dashboard.component.js.map +1 -1
  187. package/dist/DashboardBrowser/dashboard-browser-resource.component.js +13 -13
  188. package/dist/DashboardBrowser/dashboard-browser-resource.component.js.map +1 -1
  189. package/dist/DashboardBrowser/dashboard-share-adapter.d.ts +4 -0
  190. package/dist/DashboardBrowser/dashboard-share-adapter.d.ts.map +1 -1
  191. package/dist/DashboardBrowser/dashboard-share-adapter.js +5 -2
  192. package/dist/DashboardBrowser/dashboard-share-adapter.js.map +1 -1
  193. package/dist/DashboardBrowser/dashboard-share-dialog.component.d.ts +3 -1
  194. package/dist/DashboardBrowser/dashboard-share-dialog.component.d.ts.map +1 -1
  195. package/dist/DashboardBrowser/dashboard-share-dialog.component.js +9 -4
  196. package/dist/DashboardBrowser/dashboard-share-dialog.component.js.map +1 -1
  197. package/dist/DataExplorer/components/navigation-panel/navigation-panel.component.d.ts +3 -2
  198. package/dist/DataExplorer/components/navigation-panel/navigation-panel.component.d.ts.map +1 -1
  199. package/dist/DataExplorer/components/navigation-panel/navigation-panel.component.js +7 -6
  200. package/dist/DataExplorer/components/navigation-panel/navigation-panel.component.js.map +1 -1
  201. package/dist/DataExplorer/components/view-selector/view-selector.component.d.ts +3 -2
  202. package/dist/DataExplorer/components/view-selector/view-selector.component.d.ts.map +1 -1
  203. package/dist/DataExplorer/components/view-selector/view-selector.component.js +6 -5
  204. package/dist/DataExplorer/components/view-selector/view-selector.component.js.map +1 -1
  205. package/dist/DataExplorer/data-explorer-dashboard.component.d.ts.map +1 -1
  206. package/dist/DataExplorer/data-explorer-dashboard.component.js +10 -9
  207. package/dist/DataExplorer/data-explorer-dashboard.component.js.map +1 -1
  208. package/dist/DataExplorer/services/explorer-state.service.d.ts +6 -1
  209. package/dist/DataExplorer/services/explorer-state.service.d.ts.map +1 -1
  210. package/dist/DataExplorer/services/explorer-state.service.js +15 -5
  211. package/dist/DataExplorer/services/explorer-state.service.js.map +1 -1
  212. package/dist/DatabaseDesigner/components/create-wizard/database-create-wizard.component.d.ts +64 -0
  213. package/dist/DatabaseDesigner/components/create-wizard/database-create-wizard.component.d.ts.map +1 -0
  214. package/dist/DatabaseDesigner/components/create-wizard/database-create-wizard.component.js +400 -0
  215. package/dist/DatabaseDesigner/components/create-wizard/database-create-wizard.component.js.map +1 -0
  216. package/dist/DatabaseDesigner/components/create-wizard/steps/step-basics.component.d.ts +42 -0
  217. package/dist/DatabaseDesigner/components/create-wizard/steps/step-basics.component.d.ts.map +1 -0
  218. package/dist/DatabaseDesigner/components/create-wizard/steps/step-basics.component.js +232 -0
  219. package/dist/DatabaseDesigner/components/create-wizard/steps/step-basics.component.js.map +1 -0
  220. package/dist/DatabaseDesigner/components/create-wizard/steps/step-fields.component.d.ts +14 -0
  221. package/dist/DatabaseDesigner/components/create-wizard/steps/step-fields.component.d.ts.map +1 -0
  222. package/dist/DatabaseDesigner/components/create-wizard/steps/step-fields.component.js +38 -0
  223. package/dist/DatabaseDesigner/components/create-wizard/steps/step-fields.component.js.map +1 -0
  224. package/dist/DatabaseDesigner/components/create-wizard/steps/step-pipeline.component.d.ts +24 -0
  225. package/dist/DatabaseDesigner/components/create-wizard/steps/step-pipeline.component.d.ts.map +1 -0
  226. package/dist/DatabaseDesigner/components/create-wizard/steps/step-pipeline.component.js +77 -0
  227. package/dist/DatabaseDesigner/components/create-wizard/steps/step-pipeline.component.js.map +1 -0
  228. package/dist/DatabaseDesigner/components/create-wizard/steps/step-relationships.component.d.ts +88 -0
  229. package/dist/DatabaseDesigner/components/create-wizard/steps/step-relationships.component.d.ts.map +1 -0
  230. package/dist/DatabaseDesigner/components/create-wizard/steps/step-relationships.component.js +404 -0
  231. package/dist/DatabaseDesigner/components/create-wizard/steps/step-relationships.component.js.map +1 -0
  232. package/dist/DatabaseDesigner/components/create-wizard/steps/step-review.component.d.ts +12 -0
  233. package/dist/DatabaseDesigner/components/create-wizard/steps/step-review.component.d.ts.map +1 -0
  234. package/dist/DatabaseDesigner/components/create-wizard/steps/step-review.component.js +116 -0
  235. package/dist/DatabaseDesigner/components/create-wizard/steps/step-review.component.js.map +1 -0
  236. package/dist/DatabaseDesigner/components/database-designer-dashboard.component.d.ts +55 -0
  237. package/dist/DatabaseDesigner/components/database-designer-dashboard.component.d.ts.map +1 -0
  238. package/dist/DatabaseDesigner/components/database-designer-dashboard.component.js +204 -0
  239. package/dist/DatabaseDesigner/components/database-designer-dashboard.component.js.map +1 -0
  240. package/dist/DatabaseDesigner/components/entity-list.component.d.ts +61 -0
  241. package/dist/DatabaseDesigner/components/entity-list.component.d.ts.map +1 -0
  242. package/dist/DatabaseDesigner/components/entity-list.component.js +485 -0
  243. package/dist/DatabaseDesigner/components/entity-list.component.js.map +1 -0
  244. package/dist/DatabaseDesigner/components/modify/database-modify.component.d.ts +52 -0
  245. package/dist/DatabaseDesigner/components/modify/database-modify.component.d.ts.map +1 -0
  246. package/dist/DatabaseDesigner/components/modify/database-modify.component.js +320 -0
  247. package/dist/DatabaseDesigner/components/modify/database-modify.component.js.map +1 -0
  248. package/dist/DatabaseDesigner/components/shared/database-preview-pane.component.d.ts +79 -0
  249. package/dist/DatabaseDesigner/components/shared/database-preview-pane.component.d.ts.map +1 -0
  250. package/dist/DatabaseDesigner/components/shared/database-preview-pane.component.js +378 -0
  251. package/dist/DatabaseDesigner/components/shared/database-preview-pane.component.js.map +1 -0
  252. package/dist/DatabaseDesigner/components/shared/entity-fields-grid.component.d.ts +85 -0
  253. package/dist/DatabaseDesigner/components/shared/entity-fields-grid.component.d.ts.map +1 -0
  254. package/dist/DatabaseDesigner/components/shared/entity-fields-grid.component.js +429 -0
  255. package/dist/DatabaseDesigner/components/shared/entity-fields-grid.component.js.map +1 -0
  256. package/dist/DatabaseDesigner/components/shared/entity-pipeline-panel.component.d.ts +58 -0
  257. package/dist/DatabaseDesigner/components/shared/entity-pipeline-panel.component.d.ts.map +1 -0
  258. package/dist/DatabaseDesigner/components/shared/entity-pipeline-panel.component.js +333 -0
  259. package/dist/DatabaseDesigner/components/shared/entity-pipeline-panel.component.js.map +1 -0
  260. package/dist/DatabaseDesigner/components/shared/entity-review-panel.component.d.ts +36 -0
  261. package/dist/DatabaseDesigner/components/shared/entity-review-panel.component.d.ts.map +1 -0
  262. package/dist/DatabaseDesigner/components/shared/entity-review-panel.component.js +345 -0
  263. package/dist/DatabaseDesigner/components/shared/entity-review-panel.component.js.map +1 -0
  264. package/dist/DatabaseDesigner/components/shared/wizard-step-indicator.component.d.ts +13 -0
  265. package/dist/DatabaseDesigner/components/shared/wizard-step-indicator.component.d.ts.map +1 -0
  266. package/dist/DatabaseDesigner/components/shared/wizard-step-indicator.component.js +81 -0
  267. package/dist/DatabaseDesigner/components/shared/wizard-step-indicator.component.js.map +1 -0
  268. package/dist/DatabaseDesigner/database-designer-dashboards.module.d.ts +30 -0
  269. package/dist/DatabaseDesigner/database-designer-dashboards.module.d.ts.map +1 -0
  270. package/dist/DatabaseDesigner/database-designer-dashboards.module.js +131 -0
  271. package/dist/DatabaseDesigner/database-designer-dashboards.module.js.map +1 -0
  272. package/dist/DatabaseDesigner/database-designer-erd.d.ts +19 -0
  273. package/dist/DatabaseDesigner/database-designer-erd.d.ts.map +1 -0
  274. package/dist/DatabaseDesigner/database-designer-erd.js +84 -0
  275. package/dist/DatabaseDesigner/database-designer-erd.js.map +1 -0
  276. package/dist/DatabaseDesigner/database-designer.types.d.ts +167 -0
  277. package/dist/DatabaseDesigner/database-designer.types.d.ts.map +1 -0
  278. package/dist/DatabaseDesigner/database-designer.types.js +26 -0
  279. package/dist/DatabaseDesigner/database-designer.types.js.map +1 -0
  280. package/dist/DatabaseDesigner/services/database-designer.engine.d.ts +94 -0
  281. package/dist/DatabaseDesigner/services/database-designer.engine.d.ts.map +1 -0
  282. package/dist/DatabaseDesigner/services/database-designer.engine.js +392 -0
  283. package/dist/DatabaseDesigner/services/database-designer.engine.js.map +1 -0
  284. package/dist/DatabaseDesigner/services/database-designer.service.d.ts +78 -0
  285. package/dist/DatabaseDesigner/services/database-designer.service.d.ts.map +1 -0
  286. package/dist/DatabaseDesigner/services/database-designer.service.js +273 -0
  287. package/dist/DatabaseDesigner/services/database-designer.service.js.map +1 -0
  288. package/dist/DatabaseDesigner/services/entity-wizard-state.service.d.ts +79 -0
  289. package/dist/DatabaseDesigner/services/entity-wizard-state.service.d.ts.map +1 -0
  290. package/dist/DatabaseDesigner/services/entity-wizard-state.service.js +204 -0
  291. package/dist/DatabaseDesigner/services/entity-wizard-state.service.js.map +1 -0
  292. package/dist/EntityAdmin/entity-admin-dashboard.component.d.ts.map +1 -1
  293. package/dist/EntityAdmin/entity-admin-dashboard.component.js +2 -2
  294. package/dist/EntityAdmin/entity-admin-dashboard.component.js.map +1 -1
  295. package/dist/Home/action-pin-config-dialog.component.d.ts +2 -1
  296. package/dist/Home/action-pin-config-dialog.component.d.ts.map +1 -1
  297. package/dist/Home/action-pin-config-dialog.component.js +6 -4
  298. package/dist/Home/action-pin-config-dialog.component.js.map +1 -1
  299. package/dist/Home/action-pin-runner-dialog.component.d.ts +2 -1
  300. package/dist/Home/action-pin-runner-dialog.component.d.ts.map +1 -1
  301. package/dist/Home/action-pin-runner-dialog.component.js +5 -4
  302. package/dist/Home/action-pin-runner-dialog.component.js.map +1 -1
  303. package/dist/Home/home-application.d.ts.map +1 -1
  304. package/dist/Home/home-application.js +10 -12
  305. package/dist/Home/home-application.js.map +1 -1
  306. package/dist/Home/home-dashboard.component.d.ts.map +1 -1
  307. package/dist/Home/home-dashboard.component.js +3 -3
  308. package/dist/Home/home-dashboard.component.js.map +1 -1
  309. package/dist/Integration/components/activity/activity.component.d.ts.map +1 -1
  310. package/dist/Integration/components/activity/activity.component.js +1 -0
  311. package/dist/Integration/components/activity/activity.component.js.map +1 -1
  312. package/dist/Integration/components/connections/connections.component.d.ts.map +1 -1
  313. package/dist/Integration/components/connections/connections.component.js +11 -10
  314. package/dist/Integration/components/connections/connections.component.js.map +1 -1
  315. package/dist/Integration/components/mapping-workspace/mapping-workspace.component.d.ts.map +1 -1
  316. package/dist/Integration/components/mapping-workspace/mapping-workspace.component.js +2 -2
  317. package/dist/Integration/components/mapping-workspace/mapping-workspace.component.js.map +1 -1
  318. package/dist/Integration/components/overview/overview.component.d.ts.map +1 -1
  319. package/dist/Integration/components/overview/overview.component.js +1 -0
  320. package/dist/Integration/components/overview/overview.component.js.map +1 -1
  321. package/dist/Integration/components/pipelines/pipelines.component.d.ts.map +1 -1
  322. package/dist/Integration/components/pipelines/pipelines.component.js +1 -0
  323. package/dist/Integration/components/pipelines/pipelines.component.js.map +1 -1
  324. package/dist/Integration/components/schedules/schedules.component.d.ts.map +1 -1
  325. package/dist/Integration/components/schedules/schedules.component.js +5 -4
  326. package/dist/Integration/components/schedules/schedules.component.js.map +1 -1
  327. package/dist/Integration/services/integration-data.service.d.ts +5 -1
  328. package/dist/Integration/services/integration-data.service.d.ts.map +1 -1
  329. package/dist/Integration/services/integration-data.service.js +27 -19
  330. package/dist/Integration/services/integration-data.service.js.map +1 -1
  331. package/dist/KnowledgeHub/components/analytics/analytics-resource.component.js +6 -6
  332. package/dist/KnowledgeHub/components/analytics/analytics-resource.component.js.map +1 -1
  333. package/dist/KnowledgeHub/components/clusters/cluster-visualization-resource.component.d.ts.map +1 -1
  334. package/dist/KnowledgeHub/components/clusters/cluster-visualization-resource.component.js +8 -6
  335. package/dist/KnowledgeHub/components/clusters/cluster-visualization-resource.component.js.map +1 -1
  336. package/dist/KnowledgeHub/components/config/knowledge-config-resource.component.js +6 -6
  337. package/dist/KnowledgeHub/components/config/knowledge-config-resource.component.js.map +1 -1
  338. package/dist/KnowledgeHub/components/scheduling/scheduling-resource.component.js +3 -3
  339. package/dist/KnowledgeHub/components/scheduling/scheduling-resource.component.js.map +1 -1
  340. package/dist/Lists/components/lists-browse-resource.component.js +6 -6
  341. package/dist/Lists/components/lists-browse-resource.component.js.map +1 -1
  342. package/dist/Lists/components/lists-categories-resource.component.js +4 -4
  343. package/dist/Lists/components/lists-categories-resource.component.js.map +1 -1
  344. package/dist/Lists/components/lists-my-lists-resource.component.js +6 -6
  345. package/dist/Lists/components/lists-my-lists-resource.component.js.map +1 -1
  346. package/dist/Lists/components/lists-operations-resource.component.d.ts.map +1 -1
  347. package/dist/Lists/components/lists-operations-resource.component.js +11 -10
  348. package/dist/Lists/components/lists-operations-resource.component.js.map +1 -1
  349. package/dist/Lists/services/list-set-operations.service.d.ts +5 -0
  350. package/dist/Lists/services/list-set-operations.service.d.ts.map +1 -1
  351. package/dist/Lists/services/list-set-operations.service.js +11 -3
  352. package/dist/Lists/services/list-set-operations.service.js.map +1 -1
  353. package/dist/MCP/components/mcp-connection-dialog.component.d.ts +2 -1
  354. package/dist/MCP/components/mcp-connection-dialog.component.d.ts.map +1 -1
  355. package/dist/MCP/components/mcp-connection-dialog.component.js +8 -6
  356. package/dist/MCP/components/mcp-connection-dialog.component.js.map +1 -1
  357. package/dist/MCP/components/mcp-server-dialog.component.d.ts +2 -1
  358. package/dist/MCP/components/mcp-server-dialog.component.d.ts.map +1 -1
  359. package/dist/MCP/components/mcp-server-dialog.component.js +7 -5
  360. package/dist/MCP/components/mcp-server-dialog.component.js.map +1 -1
  361. package/dist/MCP/mcp-dashboard.component.d.ts.map +1 -1
  362. package/dist/MCP/mcp-dashboard.component.js +12 -12
  363. package/dist/MCP/mcp-dashboard.component.js.map +1 -1
  364. package/dist/Permissions/permissions-shared.d.ts +3 -3
  365. package/dist/Permissions/permissions-shared.d.ts.map +1 -1
  366. package/dist/Permissions/permissions-shared.js +5 -5
  367. package/dist/Permissions/permissions-shared.js.map +1 -1
  368. package/dist/Permissions/resource-access-resource.component.js +1 -1
  369. package/dist/Permissions/resource-access-resource.component.js.map +1 -1
  370. package/dist/Permissions/user-access-resource.component.js +1 -2
  371. package/dist/Permissions/user-access-resource.component.js.map +1 -1
  372. package/dist/QueryBrowser/query-browser-resource.component.d.ts.map +1 -1
  373. package/dist/QueryBrowser/query-browser-resource.component.js +2 -2
  374. package/dist/QueryBrowser/query-browser-resource.component.js.map +1 -1
  375. package/dist/Scheduling/scheduling-dashboard.component.d.ts.map +1 -1
  376. package/dist/Scheduling/scheduling-dashboard.component.js +1 -0
  377. package/dist/Scheduling/scheduling-dashboard.component.js.map +1 -1
  378. package/dist/Scheduling/services/scheduling-instrumentation.service.d.ts +5 -0
  379. package/dist/Scheduling/services/scheduling-instrumentation.service.d.ts.map +1 -1
  380. package/dist/Scheduling/services/scheduling-instrumentation.service.js +21 -13
  381. package/dist/Scheduling/services/scheduling-instrumentation.service.js.map +1 -1
  382. package/dist/SystemDiagnostics/system-diagnostics.component.d.ts.map +1 -1
  383. package/dist/SystemDiagnostics/system-diagnostics.component.js +2 -2
  384. package/dist/SystemDiagnostics/system-diagnostics.component.js.map +1 -1
  385. package/dist/Testing/components/testing-explorer.component.d.ts +2 -1
  386. package/dist/Testing/components/testing-explorer.component.d.ts.map +1 -1
  387. package/dist/Testing/components/testing-explorer.component.js +9 -7
  388. package/dist/Testing/components/testing-explorer.component.js.map +1 -1
  389. package/dist/Testing/services/testing-instrumentation.service.d.ts +6 -1
  390. package/dist/Testing/services/testing-instrumentation.service.d.ts.map +1 -1
  391. package/dist/Testing/services/testing-instrumentation.service.js +21 -11
  392. package/dist/Testing/services/testing-instrumentation.service.js.map +1 -1
  393. package/dist/Testing/testing-dashboard.component.d.ts +3 -1
  394. package/dist/Testing/testing-dashboard.component.d.ts.map +1 -1
  395. package/dist/Testing/testing-dashboard.component.js +15 -11
  396. package/dist/Testing/testing-dashboard.component.js.map +1 -1
  397. package/dist/VersionHistory/components/diff-resource.component.d.ts.map +1 -1
  398. package/dist/VersionHistory/components/diff-resource.component.js +5 -5
  399. package/dist/VersionHistory/components/diff-resource.component.js.map +1 -1
  400. package/dist/VersionHistory/components/graph-resource.component.d.ts.map +1 -1
  401. package/dist/VersionHistory/components/graph-resource.component.js +1 -2
  402. package/dist/VersionHistory/components/graph-resource.component.js.map +1 -1
  403. package/dist/VersionHistory/components/labels-resource.component.d.ts.map +1 -1
  404. package/dist/VersionHistory/components/labels-resource.component.js +3 -3
  405. package/dist/VersionHistory/components/labels-resource.component.js.map +1 -1
  406. package/dist/VersionHistory/components/restore-resource.component.js +1 -1
  407. package/dist/VersionHistory/components/restore-resource.component.js.map +1 -1
  408. package/dist/ai-dashboards.module.d.ts +35 -34
  409. package/dist/ai-dashboards.module.d.ts.map +1 -1
  410. package/dist/ai-dashboards.module.js +6 -0
  411. package/dist/ai-dashboards.module.js.map +1 -1
  412. package/dist/module.d.ts +13 -12
  413. package/dist/module.d.ts.map +1 -1
  414. package/dist/module.js +7 -0
  415. package/dist/module.js.map +1 -1
  416. package/dist/public-api.d.ts +3 -1
  417. package/dist/public-api.d.ts.map +1 -1
  418. package/dist/public-api.js +3 -1
  419. package/dist/public-api.js.map +1 -1
  420. package/dist/shared/entity-field-display.d.ts +4 -3
  421. package/dist/shared/entity-field-display.d.ts.map +1 -1
  422. package/dist/shared/entity-field-display.js +9 -9
  423. package/dist/shared/entity-field-display.js.map +1 -1
  424. package/package.json +52 -51
@@ -10,6 +10,7 @@ export * from './components/charts/time-series-chart.component';
10
10
  export * from './components/charts/performance-heatmap.component';
11
11
  export * from './components/requests/agent-requests-resource.component';
12
12
  export * from './components/autotagging/autotagging-pipeline-resource.component';
13
+ export { TagsResourceComponent, LoadTagsResource } from './components/tags/tags-resource.component';
13
14
  export * from './components/vectors/vector-management-resource.component';
14
15
  export * from './components/duplicates/duplicate-detection-resource.component';
15
16
  export * from './interfaces/analytics-preferences.interface';
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/AI/index.ts"],"names":[],"mappings":"AACA,cAAc,uCAAuC,CAAC;AAGtD,cAAc,6CAA6C,CAAC;AAC5D,cAAc,kDAAkD,CAAC;AACjE,cAAc,mDAAmD,CAAC;AAClE,cAAc,gDAAgD,CAAC;AAC/D,cAAc,oDAAoD,CAAC;AAGnE,cAAc,yCAAyC,CAAC;AACxD,cAAc,sDAAsD,CAAC;AACrE,cAAc,iDAAiD,CAAC;AAChE,cAAc,mDAAmD,CAAC;AAGlE,cAAc,yDAAyD,CAAC;AAGxE,cAAc,kEAAkE,CAAC;AAGjF,cAAc,2DAA2D,CAAC;AAG1E,cAAc,gEAAgE,CAAC;AAG/E,cAAc,8CAA8C,CAAC;AAC7D,cAAc,uDAAuD,CAAC;AACtE,cAAc,wDAAwD,CAAC;AACvE,cAAc,sEAAsE,CAAC;AACrF,cAAc,kEAAkE,CAAC;AACjF,cAAc,gEAAgE,CAAC;AAC/E,cAAc,sEAAsE,CAAC;AACrF,cAAc,0DAA0D,CAAC;AACzE,cAAc,gEAAgE,CAAC;AAC/E,cAAc,gEAAgE,CAAC;AAG/E,cAAc,iDAAiD,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/AI/index.ts"],"names":[],"mappings":"AACA,cAAc,uCAAuC,CAAC;AAGtD,cAAc,6CAA6C,CAAC;AAC5D,cAAc,kDAAkD,CAAC;AACjE,cAAc,mDAAmD,CAAC;AAClE,cAAc,gDAAgD,CAAC;AAC/D,cAAc,oDAAoD,CAAC;AAGnE,cAAc,yCAAyC,CAAC;AACxD,cAAc,sDAAsD,CAAC;AACrE,cAAc,iDAAiD,CAAC;AAChE,cAAc,mDAAmD,CAAC;AAGlE,cAAc,yDAAyD,CAAC;AAGxE,cAAc,kEAAkE,CAAC;AAMjF,OAAO,EAAE,qBAAqB,EAAE,gBAAgB,EAAE,MAAM,2CAA2C,CAAC;AAGpG,cAAc,2DAA2D,CAAC;AAG1E,cAAc,gEAAgE,CAAC;AAG/E,cAAc,8CAA8C,CAAC;AAC7D,cAAc,uDAAuD,CAAC;AACtE,cAAc,wDAAwD,CAAC;AACvE,cAAc,sEAAsE,CAAC;AACrF,cAAc,kEAAkE,CAAC;AACjF,cAAc,gEAAgE,CAAC;AAC/E,cAAc,sEAAsE,CAAC;AACrF,cAAc,0DAA0D,CAAC;AACzE,cAAc,gEAAgE,CAAC;AAC/E,cAAc,gEAAgE,CAAC;AAG/E,cAAc,iDAAiD,CAAC"}
package/dist/AI/index.js CHANGED
@@ -15,6 +15,11 @@ export * from './components/charts/performance-heatmap.component';
15
15
  export * from './components/requests/agent-requests-resource.component';
16
16
  // Autotagging Pipeline
17
17
  export * from './components/autotagging/autotagging-pipeline-resource.component';
18
+ // Tags — canonical Knowledge Hub dashboard for everything tag-related
19
+ // (Library + Taxonomy moved from Classify, plus Suggestions + Health).
20
+ // Re-exported explicitly because the file is a clone of the autotag pipeline
21
+ // and shares cron-helper module-level exports we don't want to re-export twice.
22
+ export { TagsResourceComponent, LoadTagsResource } from './components/tags/tags-resource.component';
18
23
  // Vector Management
19
24
  export * from './components/vectors/vector-management-resource.component';
20
25
  // Duplicate Detection
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/AI/index.ts"],"names":[],"mappings":"AAAA,WAAW;AACX,cAAc,uCAAuC,CAAC;AAEtD,kBAAkB;AAClB,cAAc,6CAA6C,CAAC;AAC5D,cAAc,kDAAkD,CAAC;AACjE,cAAc,mDAAmD,CAAC;AAClE,cAAc,gDAAgD,CAAC;AAC/D,cAAc,oDAAoD,CAAC;AAEnE,oBAAoB;AACpB,cAAc,yCAAyC,CAAC;AACxD,cAAc,sDAAsD,CAAC;AACrE,cAAc,iDAAiD,CAAC;AAChE,cAAc,mDAAmD,CAAC;AAElE,iBAAiB;AACjB,cAAc,yDAAyD,CAAC;AAExE,uBAAuB;AACvB,cAAc,kEAAkE,CAAC;AAEjF,oBAAoB;AACpB,cAAc,2DAA2D,CAAC;AAE1E,sBAAsB;AACtB,cAAc,gEAAgE,CAAC;AAE/E,eAAe;AACf,cAAc,8CAA8C,CAAC;AAC7D,cAAc,uDAAuD,CAAC;AACtE,cAAc,wDAAwD,CAAC;AACvE,cAAc,sEAAsE,CAAC;AACrF,cAAc,kEAAkE,CAAC;AACjF,cAAc,gEAAgE,CAAC;AAC/E,cAAc,sEAAsE,CAAC;AACrF,cAAc,0DAA0D,CAAC;AACzE,cAAc,gEAAgE,CAAC;AAC/E,cAAc,gEAAgE,CAAC;AAE/E,eAAe;AACf,cAAc,iDAAiD,CAAC","sourcesContent":["// Services\nexport * from './services/ai-instrumentation.service';\n\n// Main Components\nexport * from './components/execution-monitoring.component';\nexport * from './components/prompts/prompt-management.component';\nexport * from './components/agents/agent-configuration.component';\nexport * from './components/models/model-management.component';\nexport * from './components/system/system-configuration.component';\n\n// Widget Components\nexport * from './components/widgets/kpi-card.component';\nexport * from './components/widgets/live-execution-widget.component';\nexport * from './components/charts/time-series-chart.component';\nexport * from './components/charts/performance-heatmap.component';\n\n// Agent Requests\nexport * from './components/requests/agent-requests-resource.component';\n\n// Autotagging Pipeline\nexport * from './components/autotagging/autotagging-pipeline-resource.component';\n\n// Vector Management\nexport * from './components/vectors/vector-management-resource.component';\n\n// Duplicate Detection\nexport * from './components/duplicates/duplicate-detection-resource.component';\n\n// AI Analytics\nexport * from './interfaces/analytics-preferences.interface';\nexport * from './components/analytics/analytics-filter-bar.component';\nexport * from './components/analytics/ai-analytics-resource.component';\nexport * from './components/analytics/executive-summary/executive-summary.component';\nexport * from './components/analytics/prompt-runs/prompt-run-analysis.component';\nexport * from './components/analytics/agent-runs/agent-run-analysis.component';\nexport * from './components/analytics/model-performance/model-performance.component';\nexport * from './components/analytics/cost-budget/cost-budget.component';\nexport * from './components/analytics/error-analysis/error-analysis.component';\nexport * from './components/analytics/usage-patterns/usage-patterns.component';\n\n// Overview Hub\nexport * from './components/overview/ai-overview-hub.component';"]}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/AI/index.ts"],"names":[],"mappings":"AAAA,WAAW;AACX,cAAc,uCAAuC,CAAC;AAEtD,kBAAkB;AAClB,cAAc,6CAA6C,CAAC;AAC5D,cAAc,kDAAkD,CAAC;AACjE,cAAc,mDAAmD,CAAC;AAClE,cAAc,gDAAgD,CAAC;AAC/D,cAAc,oDAAoD,CAAC;AAEnE,oBAAoB;AACpB,cAAc,yCAAyC,CAAC;AACxD,cAAc,sDAAsD,CAAC;AACrE,cAAc,iDAAiD,CAAC;AAChE,cAAc,mDAAmD,CAAC;AAElE,iBAAiB;AACjB,cAAc,yDAAyD,CAAC;AAExE,uBAAuB;AACvB,cAAc,kEAAkE,CAAC;AAEjF,sEAAsE;AACtE,uEAAuE;AACvE,6EAA6E;AAC7E,gFAAgF;AAChF,OAAO,EAAE,qBAAqB,EAAE,gBAAgB,EAAE,MAAM,2CAA2C,CAAC;AAEpG,oBAAoB;AACpB,cAAc,2DAA2D,CAAC;AAE1E,sBAAsB;AACtB,cAAc,gEAAgE,CAAC;AAE/E,eAAe;AACf,cAAc,8CAA8C,CAAC;AAC7D,cAAc,uDAAuD,CAAC;AACtE,cAAc,wDAAwD,CAAC;AACvE,cAAc,sEAAsE,CAAC;AACrF,cAAc,kEAAkE,CAAC;AACjF,cAAc,gEAAgE,CAAC;AAC/E,cAAc,sEAAsE,CAAC;AACrF,cAAc,0DAA0D,CAAC;AACzE,cAAc,gEAAgE,CAAC;AAC/E,cAAc,gEAAgE,CAAC;AAE/E,eAAe;AACf,cAAc,iDAAiD,CAAC","sourcesContent":["// Services\nexport * from './services/ai-instrumentation.service';\n\n// Main Components\nexport * from './components/execution-monitoring.component';\nexport * from './components/prompts/prompt-management.component';\nexport * from './components/agents/agent-configuration.component';\nexport * from './components/models/model-management.component';\nexport * from './components/system/system-configuration.component';\n\n// Widget Components\nexport * from './components/widgets/kpi-card.component';\nexport * from './components/widgets/live-execution-widget.component';\nexport * from './components/charts/time-series-chart.component';\nexport * from './components/charts/performance-heatmap.component';\n\n// Agent Requests\nexport * from './components/requests/agent-requests-resource.component';\n\n// Autotagging Pipeline\nexport * from './components/autotagging/autotagging-pipeline-resource.component';\n\n// Tags — canonical Knowledge Hub dashboard for everything tag-related\n// (Library + Taxonomy moved from Classify, plus Suggestions + Health).\n// Re-exported explicitly because the file is a clone of the autotag pipeline\n// and shares cron-helper module-level exports we don't want to re-export twice.\nexport { TagsResourceComponent, LoadTagsResource } from './components/tags/tags-resource.component';\n\n// Vector Management\nexport * from './components/vectors/vector-management-resource.component';\n\n// Duplicate Detection\nexport * from './components/duplicates/duplicate-detection-resource.component';\n\n// AI Analytics\nexport * from './interfaces/analytics-preferences.interface';\nexport * from './components/analytics/analytics-filter-bar.component';\nexport * from './components/analytics/ai-analytics-resource.component';\nexport * from './components/analytics/executive-summary/executive-summary.component';\nexport * from './components/analytics/prompt-runs/prompt-run-analysis.component';\nexport * from './components/analytics/agent-runs/agent-run-analysis.component';\nexport * from './components/analytics/model-performance/model-performance.component';\nexport * from './components/analytics/cost-budget/cost-budget.component';\nexport * from './components/analytics/error-analysis/error-analysis.component';\nexport * from './components/analytics/usage-patterns/usage-patterns.component';\n\n// Overview Hub\nexport * from './components/overview/ai-overview-hub.component';"]}
@@ -1,3 +1,4 @@
1
+ import { IMetadataProvider } from '@memberjunction/core';
1
2
  import * as i0 from "@angular/core";
2
3
  /**
3
4
  * Lightweight record types for dashboard aggregation.
@@ -104,6 +105,10 @@ export interface ChartData {
104
105
  }[];
105
106
  }
106
107
  export declare class AIInstrumentationService {
108
+ private _provider;
109
+ /** Set the metadata provider this service should use. Components should call this after injection. */
110
+ set Provider(value: IMetadataProvider | null);
111
+ get Provider(): IMetadataProvider;
107
112
  private readonly _dateRange$;
108
113
  private readonly _refreshTrigger$;
109
114
  private readonly _isLoading$;
@@ -1 +1 @@
1
- {"version":3,"file":"ai-instrumentation.service.d.ts","sourceRoot":"","sources":["../../../src/AI/services/ai-instrumentation.service.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"ai-instrumentation.service.d.ts","sourceRoot":"","sources":["../../../src/AI/services/ai-instrumentation.service.ts"],"names":[],"mappings":"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"}
@@ -1,7 +1,7 @@
1
1
  import { Injectable } from '@angular/core';
2
2
  import { BehaviorSubject, from, combineLatest } from 'rxjs';
3
3
  import { switchMap, shareReplay, tap, map } from 'rxjs/operators';
4
- import { RunView } from '@memberjunction/core';
4
+ import { RunView, Metadata } from '@memberjunction/core';
5
5
  import * as i0 from "@angular/core";
6
6
  /** Fields to request for prompt runs — only what the dashboard needs for aggregation */
7
7
  const PROMPT_RUN_FIELDS = [
@@ -15,6 +15,14 @@ const AGENT_RUN_FIELDS = [
15
15
  'TotalCost', 'TotalTokensUsed', 'AgentID', 'Agent', 'ErrorMessage'
16
16
  ];
17
17
  export class AIInstrumentationService {
18
+ _provider = null;
19
+ /** Set the metadata provider this service should use. Components should call this after injection. */
20
+ set Provider(value) {
21
+ this._provider = value;
22
+ }
23
+ get Provider() {
24
+ return this._provider ?? Metadata.Provider;
25
+ }
18
26
  _dateRange$ = new BehaviorSubject({
19
27
  start: new Date(Date.now() - 24 * 60 * 60 * 1000), // Last 24 hours
20
28
  end: new Date()
@@ -48,7 +56,7 @@ export class AIInstrumentationService {
48
56
  const { start, end } = this._dateRange$.value;
49
57
  const now = new Date();
50
58
  const recentTime = new Date(now.getTime() - 5 * 60 * 1000);
51
- const rv = new RunView();
59
+ const rv = RunView.FromMetadataProvider(this.Provider);
52
60
  const [promptResults, agentResults, livePromptResults, liveAgentResults] = await rv.RunViews([
53
61
  {
54
62
  EntityName: 'MJ: AI Prompt Runs',
@@ -360,7 +368,7 @@ export class AIInstrumentationService {
360
368
  }
361
369
  }
362
370
  async getPromptExecutionDetails(promptRunId) {
363
- const rv = new RunView();
371
+ const rv = RunView.FromMetadataProvider(this.Provider);
364
372
  const [result, childrenResult] = await rv.RunViews([
365
373
  {
366
374
  EntityName: 'MJ: AI Prompt Runs',
@@ -395,7 +403,7 @@ export class AIInstrumentationService {
395
403
  };
396
404
  }
397
405
  async getAgentExecutionDetails(agentRunId) {
398
- const rv = new RunView();
406
+ const rv = RunView.FromMetadataProvider(this.Provider);
399
407
  const [result, childrenResult] = await rv.RunViews([
400
408
  {
401
409
  EntityName: 'MJ: AI Agent Runs',
@@ -1 +1 @@
1
- {"version":3,"file":"ai-instrumentation.service.js","sourceRoot":"","sources":["../../../src/AI/services/ai-instrumentation.service.ts"],"names":[],"mappings":"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","sourcesContent":["import { Injectable } from '@angular/core';\nimport { BehaviorSubject, from, combineLatest } from 'rxjs';\nimport { switchMap, shareReplay, tap, map } from 'rxjs/operators';\nimport { RunView } from '@memberjunction/core';\n\n/**\n * Lightweight record types for dashboard aggregation.\n * We use ResultType: 'simple' with explicit Fields to avoid pulling\n * large text columns (InputData, OutputData, etc.) that can blow up\n * the GraphQL response beyond V8's string limit.\n */\nexport interface PromptRunRecord {\n ID: string;\n RunAt: string;\n CompletedAt: string | null;\n Success: boolean;\n Cost: number | null;\n TokensUsed: number | null;\n TokensPrompt: number | null;\n TokensCompletion: number | null;\n ExecutionTimeMS: number | null;\n ModelID: string | null;\n Model: string | null;\n AgentID: string | null;\n Agent: string | null;\n Prompt: string | null;\n ErrorMessage: string | null;\n}\n\nexport interface AgentRunRecord {\n ID: string;\n StartedAt: string;\n CompletedAt: string | null;\n Status: string;\n Success: boolean;\n TotalCost: number | null;\n TotalTokensUsed: number | null;\n AgentID: string | null;\n Agent: string | null;\n ErrorMessage: string | null;\n}\n\n/** Fields to request for prompt runs — only what the dashboard needs for aggregation */\nconst PROMPT_RUN_FIELDS = [\n 'ID', 'RunAt', 'CompletedAt', 'Success', 'Cost', 'TokensUsed',\n 'TokensPrompt', 'TokensCompletion', 'ExecutionTimeMS',\n 'ModelID', 'Model', 'AgentID', 'Agent', 'Prompt', 'ErrorMessage'\n];\n\n/** Fields to request for agent runs — only what the dashboard needs for aggregation */\nconst AGENT_RUN_FIELDS = [\n 'ID', 'StartedAt', 'CompletedAt', 'Status', 'Success',\n 'TotalCost', 'TotalTokensUsed', 'AgentID', 'Agent', 'ErrorMessage'\n];\n\nexport interface DashboardKPIs {\n totalExecutions: number;\n activeExecutions: number;\n totalCost: number;\n costCurrency: string;\n avgExecutionTime: number;\n successRate: number;\n totalTokens: number;\n costPerToken: number;\n topModel: string;\n topAgent: string;\n errorRate: number;\n dailyCostBurn: number;\n}\n\nexport interface TrendData {\n timestamp: Date;\n executions: number;\n cost: number;\n tokens: number;\n avgTime: number;\n errors: number;\n}\n\nexport interface LiveExecution {\n id: string;\n type: 'prompt' | 'agent';\n name: string;\n status: 'running' | 'completed' | 'failed';\n startTime: Date;\n duration?: number;\n cost?: number;\n tokens?: number;\n progress?: number;\n}\n\nexport interface ExecutionDetails {\n id: string;\n type: 'prompt' | 'agent';\n name: string;\n status: string;\n startTime: Date;\n endTime?: Date;\n cost: number;\n tokens: number;\n success: boolean;\n errorMessage?: string;\n parentId?: string;\n children: ExecutionDetails[];\n model?: string;\n vendor?: string;\n}\n\nexport interface ChartData {\n executionTrends: TrendData[];\n costByModel: { model: string; cost: number; tokens: number }[];\n performanceMatrix: { agent: string; model: string; avgTime: number; successRate: number }[];\n tokenEfficiency: { inputTokens: number; outputTokens: number; cost: number; model: string }[];\n}\n\n/** Internal shape for the single data load that all derived streams share */\ninterface DashboardRawData {\n promptRuns: PromptRunRecord[];\n agentRuns: AgentRunRecord[];\n livePromptRuns: PromptRunRecord[];\n liveAgentRuns: AgentRunRecord[];\n}\n\n@Injectable({\n providedIn: 'root'\n})\nexport class AIInstrumentationService {\n private readonly _dateRange$ = new BehaviorSubject<{ start: Date; end: Date }>({\n start: new Date(Date.now() - 24 * 60 * 60 * 1000), // Last 24 hours\n end: new Date()\n });\n\n private readonly _refreshTrigger$ = new BehaviorSubject<number>(0);\n private readonly _isLoading$ = new BehaviorSubject<boolean>(false);\n\n // Expose loading state as observable\n readonly isLoading$ = this._isLoading$.asObservable();\n\n constructor() {}\n\n /**\n * Single data load: fetches prompt runs and agent runs ONCE per refresh/date-range change.\n * All downstream streams derive from this shared dataset.\n */\n private readonly rawData$ = combineLatest([this._refreshTrigger$, this._dateRange$]).pipe(\n tap(() => this._isLoading$.next(true)),\n switchMap(() => from(this.loadAllData())),\n tap(() => this._isLoading$.next(false)),\n shareReplay(1)\n );\n\n // Derived streams — pure in-memory transforms, no extra DB queries\n readonly kpis$ = this.rawData$.pipe(\n map(data => this.computeKPIs(data.promptRuns, data.agentRuns)),\n shareReplay(1)\n );\n\n readonly trends$ = this.rawData$.pipe(\n map(data => this.computeTrends(data.promptRuns, data.agentRuns)),\n shareReplay(1)\n );\n\n readonly liveExecutions$ = this.rawData$.pipe(\n map(data => this.computeLiveExecutions(data.livePromptRuns, data.liveAgentRuns)),\n shareReplay(1)\n );\n\n readonly chartData$ = combineLatest([this.rawData$, this.trends$]).pipe(\n map(([data, executionTrends]) => this.computeChartData(data.promptRuns, executionTrends)),\n shareReplay(1)\n );\n\n setDateRange(start: Date, end: Date): void {\n this._dateRange$.next({ start, end });\n }\n\n refresh(): void {\n this._refreshTrigger$.next(this._refreshTrigger$.value + 1);\n }\n\n /**\n * Single batch query that loads all data needed by every dashboard widget.\n * Uses ResultType: 'simple' with explicit Fields to minimize payload size.\n */\n private async loadAllData(): Promise<DashboardRawData> {\n const { start, end } = this._dateRange$.value;\n const now = new Date();\n const recentTime = new Date(now.getTime() - 5 * 60 * 1000);\n\n const rv = new RunView();\n const [promptResults, agentResults, livePromptResults, liveAgentResults] = await rv.RunViews<PromptRunRecord | AgentRunRecord>([\n {\n EntityName: 'MJ: AI Prompt Runs',\n ExtraFilter: `RunAt >= '${start.toISOString()}' AND RunAt <= '${end.toISOString()}'`,\n Fields: PROMPT_RUN_FIELDS,\n ResultType: 'simple'\n },\n {\n EntityName: 'MJ: AI Agent Runs',\n ExtraFilter: `StartedAt >= '${start.toISOString()}' AND StartedAt <= '${end.toISOString()}'`,\n Fields: AGENT_RUN_FIELDS,\n ResultType: 'simple'\n },\n {\n EntityName: 'MJ: AI Prompt Runs',\n ExtraFilter: `RunAt >= '${recentTime.toISOString()}'`,\n OrderBy: 'RunAt DESC',\n Fields: PROMPT_RUN_FIELDS,\n ResultType: 'simple'\n },\n {\n EntityName: 'MJ: AI Agent Runs',\n ExtraFilter: `StartedAt >= '${recentTime.toISOString()}'`,\n OrderBy: 'StartedAt DESC',\n Fields: AGENT_RUN_FIELDS,\n ResultType: 'simple'\n }\n ]);\n\n return {\n promptRuns: promptResults.Results as PromptRunRecord[],\n agentRuns: agentResults.Results as AgentRunRecord[],\n livePromptRuns: livePromptResults.Results as PromptRunRecord[],\n liveAgentRuns: liveAgentResults.Results as AgentRunRecord[]\n };\n }\n\n // ─── KPI Computation ─────────────────────────────────────────────\n\n private computeKPIs(promptRuns: PromptRunRecord[], agentRuns: AgentRunRecord[]): DashboardKPIs {\n const totalExecutions = promptRuns.length + agentRuns.length;\n const activeExecutions = this.countActiveExecutions(promptRuns, agentRuns);\n const totalCost = this.sumCosts(promptRuns, agentRuns);\n const totalTokens = this.sumTokens(promptRuns, agentRuns);\n const avgExecutionTime = this.calculateAverageExecutionTime(promptRuns, agentRuns);\n const successRate = this.calculateSuccessRate(promptRuns, agentRuns);\n\n return {\n totalExecutions,\n activeExecutions,\n totalCost,\n costCurrency: 'USD',\n avgExecutionTime,\n successRate,\n totalTokens,\n costPerToken: totalTokens > 0 ? totalCost / totalTokens : 0,\n topModel: this.getTopModel(promptRuns),\n topAgent: this.getTopAgent(agentRuns),\n errorRate: 1 - successRate,\n dailyCostBurn: this.calculateDailyCostBurn(promptRuns, agentRuns)\n };\n }\n\n // ─── Trend Computation ────────────────────────────────────────────\n\n private computeTrends(promptRuns: PromptRunRecord[], agentRuns: AgentRunRecord[]): TrendData[] {\n const { start, end } = this._dateRange$.value;\n const bucketSizeMs = this.getBucketSizeMs(start, end);\n const hourlyBuckets = this.createHourlyBuckets(start, end);\n\n return hourlyBuckets.map(bucket => {\n const bucketEnd = new Date(bucket.getTime() + bucketSizeMs);\n const bucketPrompts = promptRuns.filter(r => {\n const runAt = new Date(r.RunAt);\n return runAt >= bucket && runAt < bucketEnd;\n });\n const bucketAgents = agentRuns.filter(r => {\n const startedAt = new Date(r.StartedAt);\n return startedAt >= bucket && startedAt < bucketEnd;\n });\n\n return {\n timestamp: bucket,\n executions: bucketPrompts.length + bucketAgents.length,\n cost: this.sumCosts(bucketPrompts, bucketAgents),\n tokens: this.sumTokens(bucketPrompts, bucketAgents),\n avgTime: this.calculateAverageExecutionTime(bucketPrompts, bucketAgents),\n errors: this.countErrors(bucketPrompts, bucketAgents)\n };\n });\n }\n\n // ─── Live Executions Computation ──────────────────────────────────\n\n private computeLiveExecutions(promptRuns: PromptRunRecord[], agentRuns: AgentRunRecord[]): LiveExecution[] {\n const now = new Date();\n const liveExecutions: LiveExecution[] = [];\n\n for (const run of promptRuns) {\n const isRunning = !run.CompletedAt && run.Success !== false;\n const duration = run.CompletedAt\n ? new Date(run.CompletedAt).getTime() - new Date(run.RunAt).getTime()\n : now.getTime() - new Date(run.RunAt).getTime();\n\n liveExecutions.push({\n id: run.ID,\n type: 'prompt',\n name: run.Prompt || 'Unnamed Prompt',\n status: isRunning ? 'running' : (run.Success ? 'completed' : 'failed'),\n startTime: new Date(run.RunAt),\n duration,\n cost: run.Cost || 0,\n tokens: run.TokensUsed || 0,\n progress: isRunning ? Math.min(90, (duration / 30000) * 100) : 100\n });\n }\n\n for (const run of agentRuns) {\n const isRunning = run.Status === 'Running';\n const duration = run.CompletedAt\n ? new Date(run.CompletedAt).getTime() - new Date(run.StartedAt).getTime()\n : now.getTime() - new Date(run.StartedAt).getTime();\n\n liveExecutions.push({\n id: run.ID,\n type: 'agent',\n name: run.Agent || 'Unnamed Agent',\n status: run.Status.toLowerCase() as 'running' | 'completed' | 'failed',\n startTime: new Date(run.StartedAt),\n duration,\n cost: run.TotalCost || 0,\n tokens: run.TotalTokensUsed || 0,\n progress: isRunning ? Math.min(90, (duration / 60000) * 100) : 100\n });\n }\n\n return liveExecutions.sort((a, b) => b.startTime.getTime() - a.startTime.getTime());\n }\n\n // ─── Chart Data Computation ───────────────────────────────────────\n\n private computeChartData(promptRuns: PromptRunRecord[], executionTrends: TrendData[]): ChartData {\n return {\n executionTrends,\n costByModel: this.analyzeCostByModel(promptRuns),\n performanceMatrix: this.analyzePerformanceMatrix(promptRuns),\n tokenEfficiency: this.analyzeTokenEfficiency(promptRuns)\n };\n }\n\n // ─── Helper Methods ───────────────────────────────────────────────\n\n private countActiveExecutions(promptRuns: PromptRunRecord[], agentRuns: AgentRunRecord[]): number {\n const activePrompts = promptRuns.filter(r => !r.CompletedAt && r.Success !== false).length;\n const activeAgents = agentRuns.filter(r => r.Status === 'Running').length;\n return activePrompts + activeAgents;\n }\n\n private sumCosts(promptRuns: PromptRunRecord[], agentRuns: AgentRunRecord[]): number {\n const promptCost = promptRuns.reduce((sum, r) => sum + (r.Cost || 0), 0);\n const agentCost = agentRuns.reduce((sum, r) => sum + (r.TotalCost || 0), 0);\n return promptCost + agentCost;\n }\n\n private sumTokens(promptRuns: PromptRunRecord[], agentRuns: AgentRunRecord[]): number {\n const promptTokens = promptRuns.reduce((sum, r) => sum + (r.TokensUsed || 0), 0);\n const agentTokens = agentRuns.reduce((sum, r) => sum + (r.TotalTokensUsed || 0), 0);\n return promptTokens + agentTokens;\n }\n\n private calculateAverageExecutionTime(promptRuns: PromptRunRecord[], agentRuns: AgentRunRecord[]): number {\n const promptTimes = promptRuns\n .filter(r => r.ExecutionTimeMS)\n .map(r => r.ExecutionTimeMS!);\n\n const agentTimes = agentRuns\n .filter(r => r.StartedAt && r.CompletedAt)\n .map(r => new Date(r.CompletedAt!).getTime() - new Date(r.StartedAt).getTime());\n\n const allTimes = [...promptTimes, ...agentTimes];\n return allTimes.length > 0 ? allTimes.reduce((sum, time) => sum + time, 0) / allTimes.length : 0;\n }\n\n private calculateSuccessRate(promptRuns: PromptRunRecord[], agentRuns: AgentRunRecord[]): number {\n const totalExecutions = promptRuns.length + agentRuns.length;\n if (totalExecutions === 0) return 1;\n\n const successfulPrompts = promptRuns.filter(r => r.Success).length;\n const successfulAgents = agentRuns.filter(r => r.Success).length;\n\n return (successfulPrompts + successfulAgents) / totalExecutions;\n }\n\n private countErrors(promptRuns: PromptRunRecord[], agentRuns: AgentRunRecord[]): number {\n const promptErrors = promptRuns.filter(r => !r.Success).length;\n const agentErrors = agentRuns.filter(r => !r.Success).length;\n return promptErrors + agentErrors;\n }\n\n private calculateDailyCostBurn(promptRuns: PromptRunRecord[], agentRuns: AgentRunRecord[]): number {\n const now = new Date();\n const dayStart = new Date(now.getFullYear(), now.getMonth(), now.getDate());\n\n const todayPrompts = promptRuns.filter(r => new Date(r.RunAt) >= dayStart);\n const todayAgents = agentRuns.filter(r => new Date(r.StartedAt) >= dayStart);\n\n return this.sumCosts(todayPrompts, todayAgents);\n }\n\n private getBucketSizeMs(start: Date, end: Date): number {\n const hours = (end.getTime() - start.getTime()) / (1000 * 60 * 60);\n if (hours <= 24) return 60 * 60 * 1000; // 1 hour\n if (hours <= 24 * 7) return 4 * 60 * 60 * 1000; // 4 hours\n return 24 * 60 * 60 * 1000; // 24 hours\n }\n\n private createHourlyBuckets(start: Date, end: Date): Date[] {\n const buckets: Date[] = [];\n const current = new Date(start);\n const hours = (end.getTime() - start.getTime()) / (1000 * 60 * 60);\n\n let bucketSize: number;\n if (hours <= 24) {\n bucketSize = 1;\n current.setMinutes(0, 0, 0);\n } else if (hours <= 24 * 7) {\n bucketSize = 4;\n current.setHours(Math.floor(current.getHours() / 4) * 4, 0, 0, 0);\n } else {\n bucketSize = 24;\n current.setHours(0, 0, 0, 0);\n }\n\n while (current < end) {\n buckets.push(new Date(current));\n current.setHours(current.getHours() + bucketSize);\n }\n\n return buckets;\n }\n\n private getTopModel(promptRuns: PromptRunRecord[]): string {\n const modelCounts = new Map<string, number>();\n const modelNames = new Map<string, string>();\n\n for (const run of promptRuns) {\n if (run.ModelID && run.Model) {\n modelCounts.set(run.ModelID, (modelCounts.get(run.ModelID) || 0) + 1);\n modelNames.set(run.ModelID, run.Model);\n }\n }\n\n if (modelCounts.size === 0) return 'N/A';\n\n const topModelId = Array.from(modelCounts.entries())\n .sort(([,a], [,b]) => b - a)[0][0];\n\n return modelNames.get(topModelId) || 'Unknown Model';\n }\n\n private getTopAgent(agentRuns: AgentRunRecord[]): string {\n const agentCounts = new Map<string, number>();\n const agentNames = new Map<string, string>();\n\n for (const run of agentRuns) {\n if (run.AgentID && run.Agent) {\n agentCounts.set(run.AgentID, (agentCounts.get(run.AgentID) || 0) + 1);\n agentNames.set(run.AgentID, run.Agent);\n }\n }\n\n if (agentCounts.size === 0) return 'N/A';\n\n const topAgentId = Array.from(agentCounts.entries())\n .sort(([,a], [,b]) => b - a)[0][0];\n\n return agentNames.get(topAgentId) || 'Unknown Agent';\n }\n\n private analyzeCostByModel(promptRuns: PromptRunRecord[]): { model: string; cost: number; tokens: number }[] {\n const modelStats = new Map<string, { cost: number; tokens: number; name: string }>();\n\n for (const run of promptRuns) {\n if (run.ModelID && run.Model) {\n const existing = modelStats.get(run.ModelID) || { cost: 0, tokens: 0, name: run.Model };\n existing.cost += run.Cost || 0;\n existing.tokens += run.TokensUsed || 0;\n modelStats.set(run.ModelID, existing);\n }\n }\n\n return Array.from(modelStats.values())\n .map(stats => ({ model: stats.name, cost: stats.cost, tokens: stats.tokens }))\n .sort((a, b) => b.cost - a.cost);\n }\n\n private analyzePerformanceMatrix(promptRuns: PromptRunRecord[]): { agent: string; model: string; avgTime: number; successRate: number }[] {\n const combinations = new Map<string, { times: number[]; successes: number; total: number; agentName: string; modelName: string }>();\n\n for (const run of promptRuns) {\n if (run.AgentID && run.ModelID && run.ExecutionTimeMS) {\n const key = `${run.AgentID}:${run.ModelID}`;\n const existing = combinations.get(key) || {\n times: [], successes: 0, total: 0,\n agentName: run.Agent || 'Unknown Agent',\n modelName: run.Model || 'Unknown Model'\n };\n\n existing.times.push(run.ExecutionTimeMS);\n existing.total += 1;\n if (run.Success) existing.successes += 1;\n combinations.set(key, existing);\n }\n }\n\n return Array.from(combinations.values()).map(data => ({\n agent: data.agentName,\n model: data.modelName,\n avgTime: data.times.reduce((sum, time) => sum + time, 0) / data.times.length,\n successRate: data.successes / data.total\n }));\n }\n\n private analyzeTokenEfficiency(promptRuns: PromptRunRecord[]): { inputTokens: number; outputTokens: number; cost: number; model: string }[] {\n const modelEfficiency = new Map<string, { input: number; output: number; cost: number; name: string }>();\n\n for (const run of promptRuns) {\n if (run.ModelID && run.Model && run.TokensPrompt && run.TokensCompletion) {\n const existing = modelEfficiency.get(run.ModelID) || { input: 0, output: 0, cost: 0, name: run.Model };\n existing.input += run.TokensPrompt;\n existing.output += run.TokensCompletion;\n existing.cost += run.Cost || 0;\n modelEfficiency.set(run.ModelID, existing);\n }\n }\n\n return Array.from(modelEfficiency.values()).map(data => ({\n inputTokens: data.input,\n outputTokens: data.output,\n cost: data.cost,\n model: data.name\n }));\n }\n\n // ─── Execution Details (on-demand, not part of initial load) ──────\n\n async getExecutionDetails(executionId: string, type: 'prompt' | 'agent'): Promise<ExecutionDetails | null> {\n try {\n if (type === 'prompt') {\n return await this.getPromptExecutionDetails(executionId);\n } else {\n return await this.getAgentExecutionDetails(executionId);\n }\n } catch (error) {\n console.error('Error loading execution details:', error);\n return null;\n }\n }\n\n private async getPromptExecutionDetails(promptRunId: string): Promise<ExecutionDetails> {\n const rv = new RunView();\n const [result, childrenResult] = await rv.RunViews<PromptRunRecord>([\n {\n EntityName: 'MJ: AI Prompt Runs',\n ExtraFilter: `ID = '${promptRunId}'`,\n Fields: PROMPT_RUN_FIELDS,\n ResultType: 'simple'\n },\n {\n EntityName: 'MJ: AI Prompt Runs',\n ExtraFilter: `ParentID = '${promptRunId}'`,\n Fields: PROMPT_RUN_FIELDS,\n ResultType: 'simple'\n }\n ]);\n\n const run = result.Results[0];\n if (!run) throw new Error('Prompt run not found');\n\n const children = await Promise.all(\n childrenResult.Results.map(child => this.getPromptExecutionDetails(child.ID))\n );\n\n return {\n id: run.ID,\n type: 'prompt',\n name: run.Prompt || 'Unnamed Prompt',\n status: run.Success ? 'completed' : 'failed',\n startTime: new Date(run.RunAt),\n endTime: run.CompletedAt ? new Date(run.CompletedAt) : undefined,\n cost: run.Cost || 0,\n tokens: run.TokensUsed || 0,\n success: run.Success || false,\n errorMessage: run.ErrorMessage || undefined,\n children,\n model: run.Model || undefined\n };\n }\n\n private async getAgentExecutionDetails(agentRunId: string): Promise<ExecutionDetails> {\n const rv = new RunView();\n const [result, childrenResult] = await rv.RunViews<AgentRunRecord>([\n {\n EntityName: 'MJ: AI Agent Runs',\n ExtraFilter: `ID = '${agentRunId}'`,\n Fields: AGENT_RUN_FIELDS,\n ResultType: 'simple'\n },\n {\n EntityName: 'MJ: AI Agent Runs',\n ExtraFilter: `ParentRunID = '${agentRunId}'`,\n Fields: AGENT_RUN_FIELDS,\n ResultType: 'simple'\n }\n ]);\n\n const run = result.Results[0];\n if (!run) throw new Error('Agent run not found');\n\n const children = await Promise.all(\n childrenResult.Results.map(child => this.getAgentExecutionDetails(child.ID))\n );\n\n return {\n id: run.ID,\n type: 'agent',\n name: run.Agent || 'Unnamed Agent',\n status: run.Status.toLowerCase(),\n startTime: new Date(run.StartedAt),\n endTime: run.CompletedAt ? new Date(run.CompletedAt) : undefined,\n cost: run.TotalCost || 0,\n tokens: run.TotalTokensUsed || 0,\n success: run.Success || false,\n errorMessage: run.ErrorMessage || undefined,\n parentId: undefined,\n children\n };\n }\n}\n"]}
1
+ {"version":3,"file":"ai-instrumentation.service.js","sourceRoot":"","sources":["../../../src/AI/services/ai-instrumentation.service.ts"],"names":[],"mappings":"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","sourcesContent":["import { Injectable } from '@angular/core';\nimport { BehaviorSubject, from, combineLatest } from 'rxjs';\nimport { switchMap, shareReplay, tap, map } from 'rxjs/operators';\nimport { RunView, Metadata, IMetadataProvider } from '@memberjunction/core';\n\n/**\n * Lightweight record types for dashboard aggregation.\n * We use ResultType: 'simple' with explicit Fields to avoid pulling\n * large text columns (InputData, OutputData, etc.) that can blow up\n * the GraphQL response beyond V8's string limit.\n */\nexport interface PromptRunRecord {\n ID: string;\n RunAt: string;\n CompletedAt: string | null;\n Success: boolean;\n Cost: number | null;\n TokensUsed: number | null;\n TokensPrompt: number | null;\n TokensCompletion: number | null;\n ExecutionTimeMS: number | null;\n ModelID: string | null;\n Model: string | null;\n AgentID: string | null;\n Agent: string | null;\n Prompt: string | null;\n ErrorMessage: string | null;\n}\n\nexport interface AgentRunRecord {\n ID: string;\n StartedAt: string;\n CompletedAt: string | null;\n Status: string;\n Success: boolean;\n TotalCost: number | null;\n TotalTokensUsed: number | null;\n AgentID: string | null;\n Agent: string | null;\n ErrorMessage: string | null;\n}\n\n/** Fields to request for prompt runs — only what the dashboard needs for aggregation */\nconst PROMPT_RUN_FIELDS = [\n 'ID', 'RunAt', 'CompletedAt', 'Success', 'Cost', 'TokensUsed',\n 'TokensPrompt', 'TokensCompletion', 'ExecutionTimeMS',\n 'ModelID', 'Model', 'AgentID', 'Agent', 'Prompt', 'ErrorMessage'\n];\n\n/** Fields to request for agent runs — only what the dashboard needs for aggregation */\nconst AGENT_RUN_FIELDS = [\n 'ID', 'StartedAt', 'CompletedAt', 'Status', 'Success',\n 'TotalCost', 'TotalTokensUsed', 'AgentID', 'Agent', 'ErrorMessage'\n];\n\nexport interface DashboardKPIs {\n totalExecutions: number;\n activeExecutions: number;\n totalCost: number;\n costCurrency: string;\n avgExecutionTime: number;\n successRate: number;\n totalTokens: number;\n costPerToken: number;\n topModel: string;\n topAgent: string;\n errorRate: number;\n dailyCostBurn: number;\n}\n\nexport interface TrendData {\n timestamp: Date;\n executions: number;\n cost: number;\n tokens: number;\n avgTime: number;\n errors: number;\n}\n\nexport interface LiveExecution {\n id: string;\n type: 'prompt' | 'agent';\n name: string;\n status: 'running' | 'completed' | 'failed';\n startTime: Date;\n duration?: number;\n cost?: number;\n tokens?: number;\n progress?: number;\n}\n\nexport interface ExecutionDetails {\n id: string;\n type: 'prompt' | 'agent';\n name: string;\n status: string;\n startTime: Date;\n endTime?: Date;\n cost: number;\n tokens: number;\n success: boolean;\n errorMessage?: string;\n parentId?: string;\n children: ExecutionDetails[];\n model?: string;\n vendor?: string;\n}\n\nexport interface ChartData {\n executionTrends: TrendData[];\n costByModel: { model: string; cost: number; tokens: number }[];\n performanceMatrix: { agent: string; model: string; avgTime: number; successRate: number }[];\n tokenEfficiency: { inputTokens: number; outputTokens: number; cost: number; model: string }[];\n}\n\n/** Internal shape for the single data load that all derived streams share */\ninterface DashboardRawData {\n promptRuns: PromptRunRecord[];\n agentRuns: AgentRunRecord[];\n livePromptRuns: PromptRunRecord[];\n liveAgentRuns: AgentRunRecord[];\n}\n\n@Injectable({\n providedIn: 'root'\n})\nexport class AIInstrumentationService {\n private _provider: IMetadataProvider | null = null;\n\n /** Set the metadata provider this service should use. Components should call this after injection. */\n public set Provider(value: IMetadataProvider | null) {\n this._provider = value;\n }\n\n public get Provider(): IMetadataProvider {\n return this._provider ?? Metadata.Provider;\n }\n\n private readonly _dateRange$ = new BehaviorSubject<{ start: Date; end: Date }>({\n start: new Date(Date.now() - 24 * 60 * 60 * 1000), // Last 24 hours\n end: new Date()\n });\n\n private readonly _refreshTrigger$ = new BehaviorSubject<number>(0);\n private readonly _isLoading$ = new BehaviorSubject<boolean>(false);\n\n // Expose loading state as observable\n readonly isLoading$ = this._isLoading$.asObservable();\n\n constructor() {}\n\n /**\n * Single data load: fetches prompt runs and agent runs ONCE per refresh/date-range change.\n * All downstream streams derive from this shared dataset.\n */\n private readonly rawData$ = combineLatest([this._refreshTrigger$, this._dateRange$]).pipe(\n tap(() => this._isLoading$.next(true)),\n switchMap(() => from(this.loadAllData())),\n tap(() => this._isLoading$.next(false)),\n shareReplay(1)\n );\n\n // Derived streams — pure in-memory transforms, no extra DB queries\n readonly kpis$ = this.rawData$.pipe(\n map(data => this.computeKPIs(data.promptRuns, data.agentRuns)),\n shareReplay(1)\n );\n\n readonly trends$ = this.rawData$.pipe(\n map(data => this.computeTrends(data.promptRuns, data.agentRuns)),\n shareReplay(1)\n );\n\n readonly liveExecutions$ = this.rawData$.pipe(\n map(data => this.computeLiveExecutions(data.livePromptRuns, data.liveAgentRuns)),\n shareReplay(1)\n );\n\n readonly chartData$ = combineLatest([this.rawData$, this.trends$]).pipe(\n map(([data, executionTrends]) => this.computeChartData(data.promptRuns, executionTrends)),\n shareReplay(1)\n );\n\n setDateRange(start: Date, end: Date): void {\n this._dateRange$.next({ start, end });\n }\n\n refresh(): void {\n this._refreshTrigger$.next(this._refreshTrigger$.value + 1);\n }\n\n /**\n * Single batch query that loads all data needed by every dashboard widget.\n * Uses ResultType: 'simple' with explicit Fields to minimize payload size.\n */\n private async loadAllData(): Promise<DashboardRawData> {\n const { start, end } = this._dateRange$.value;\n const now = new Date();\n const recentTime = new Date(now.getTime() - 5 * 60 * 1000);\n\n const rv = RunView.FromMetadataProvider(this.Provider);\n const [promptResults, agentResults, livePromptResults, liveAgentResults] = await rv.RunViews<PromptRunRecord | AgentRunRecord>([\n {\n EntityName: 'MJ: AI Prompt Runs',\n ExtraFilter: `RunAt >= '${start.toISOString()}' AND RunAt <= '${end.toISOString()}'`,\n Fields: PROMPT_RUN_FIELDS,\n ResultType: 'simple'\n },\n {\n EntityName: 'MJ: AI Agent Runs',\n ExtraFilter: `StartedAt >= '${start.toISOString()}' AND StartedAt <= '${end.toISOString()}'`,\n Fields: AGENT_RUN_FIELDS,\n ResultType: 'simple'\n },\n {\n EntityName: 'MJ: AI Prompt Runs',\n ExtraFilter: `RunAt >= '${recentTime.toISOString()}'`,\n OrderBy: 'RunAt DESC',\n Fields: PROMPT_RUN_FIELDS,\n ResultType: 'simple'\n },\n {\n EntityName: 'MJ: AI Agent Runs',\n ExtraFilter: `StartedAt >= '${recentTime.toISOString()}'`,\n OrderBy: 'StartedAt DESC',\n Fields: AGENT_RUN_FIELDS,\n ResultType: 'simple'\n }\n ]);\n\n return {\n promptRuns: promptResults.Results as PromptRunRecord[],\n agentRuns: agentResults.Results as AgentRunRecord[],\n livePromptRuns: livePromptResults.Results as PromptRunRecord[],\n liveAgentRuns: liveAgentResults.Results as AgentRunRecord[]\n };\n }\n\n // ─── KPI Computation ─────────────────────────────────────────────\n\n private computeKPIs(promptRuns: PromptRunRecord[], agentRuns: AgentRunRecord[]): DashboardKPIs {\n const totalExecutions = promptRuns.length + agentRuns.length;\n const activeExecutions = this.countActiveExecutions(promptRuns, agentRuns);\n const totalCost = this.sumCosts(promptRuns, agentRuns);\n const totalTokens = this.sumTokens(promptRuns, agentRuns);\n const avgExecutionTime = this.calculateAverageExecutionTime(promptRuns, agentRuns);\n const successRate = this.calculateSuccessRate(promptRuns, agentRuns);\n\n return {\n totalExecutions,\n activeExecutions,\n totalCost,\n costCurrency: 'USD',\n avgExecutionTime,\n successRate,\n totalTokens,\n costPerToken: totalTokens > 0 ? totalCost / totalTokens : 0,\n topModel: this.getTopModel(promptRuns),\n topAgent: this.getTopAgent(agentRuns),\n errorRate: 1 - successRate,\n dailyCostBurn: this.calculateDailyCostBurn(promptRuns, agentRuns)\n };\n }\n\n // ─── Trend Computation ────────────────────────────────────────────\n\n private computeTrends(promptRuns: PromptRunRecord[], agentRuns: AgentRunRecord[]): TrendData[] {\n const { start, end } = this._dateRange$.value;\n const bucketSizeMs = this.getBucketSizeMs(start, end);\n const hourlyBuckets = this.createHourlyBuckets(start, end);\n\n return hourlyBuckets.map(bucket => {\n const bucketEnd = new Date(bucket.getTime() + bucketSizeMs);\n const bucketPrompts = promptRuns.filter(r => {\n const runAt = new Date(r.RunAt);\n return runAt >= bucket && runAt < bucketEnd;\n });\n const bucketAgents = agentRuns.filter(r => {\n const startedAt = new Date(r.StartedAt);\n return startedAt >= bucket && startedAt < bucketEnd;\n });\n\n return {\n timestamp: bucket,\n executions: bucketPrompts.length + bucketAgents.length,\n cost: this.sumCosts(bucketPrompts, bucketAgents),\n tokens: this.sumTokens(bucketPrompts, bucketAgents),\n avgTime: this.calculateAverageExecutionTime(bucketPrompts, bucketAgents),\n errors: this.countErrors(bucketPrompts, bucketAgents)\n };\n });\n }\n\n // ─── Live Executions Computation ──────────────────────────────────\n\n private computeLiveExecutions(promptRuns: PromptRunRecord[], agentRuns: AgentRunRecord[]): LiveExecution[] {\n const now = new Date();\n const liveExecutions: LiveExecution[] = [];\n\n for (const run of promptRuns) {\n const isRunning = !run.CompletedAt && run.Success !== false;\n const duration = run.CompletedAt\n ? new Date(run.CompletedAt).getTime() - new Date(run.RunAt).getTime()\n : now.getTime() - new Date(run.RunAt).getTime();\n\n liveExecutions.push({\n id: run.ID,\n type: 'prompt',\n name: run.Prompt || 'Unnamed Prompt',\n status: isRunning ? 'running' : (run.Success ? 'completed' : 'failed'),\n startTime: new Date(run.RunAt),\n duration,\n cost: run.Cost || 0,\n tokens: run.TokensUsed || 0,\n progress: isRunning ? Math.min(90, (duration / 30000) * 100) : 100\n });\n }\n\n for (const run of agentRuns) {\n const isRunning = run.Status === 'Running';\n const duration = run.CompletedAt\n ? new Date(run.CompletedAt).getTime() - new Date(run.StartedAt).getTime()\n : now.getTime() - new Date(run.StartedAt).getTime();\n\n liveExecutions.push({\n id: run.ID,\n type: 'agent',\n name: run.Agent || 'Unnamed Agent',\n status: run.Status.toLowerCase() as 'running' | 'completed' | 'failed',\n startTime: new Date(run.StartedAt),\n duration,\n cost: run.TotalCost || 0,\n tokens: run.TotalTokensUsed || 0,\n progress: isRunning ? Math.min(90, (duration / 60000) * 100) : 100\n });\n }\n\n return liveExecutions.sort((a, b) => b.startTime.getTime() - a.startTime.getTime());\n }\n\n // ─── Chart Data Computation ───────────────────────────────────────\n\n private computeChartData(promptRuns: PromptRunRecord[], executionTrends: TrendData[]): ChartData {\n return {\n executionTrends,\n costByModel: this.analyzeCostByModel(promptRuns),\n performanceMatrix: this.analyzePerformanceMatrix(promptRuns),\n tokenEfficiency: this.analyzeTokenEfficiency(promptRuns)\n };\n }\n\n // ─── Helper Methods ───────────────────────────────────────────────\n\n private countActiveExecutions(promptRuns: PromptRunRecord[], agentRuns: AgentRunRecord[]): number {\n const activePrompts = promptRuns.filter(r => !r.CompletedAt && r.Success !== false).length;\n const activeAgents = agentRuns.filter(r => r.Status === 'Running').length;\n return activePrompts + activeAgents;\n }\n\n private sumCosts(promptRuns: PromptRunRecord[], agentRuns: AgentRunRecord[]): number {\n const promptCost = promptRuns.reduce((sum, r) => sum + (r.Cost || 0), 0);\n const agentCost = agentRuns.reduce((sum, r) => sum + (r.TotalCost || 0), 0);\n return promptCost + agentCost;\n }\n\n private sumTokens(promptRuns: PromptRunRecord[], agentRuns: AgentRunRecord[]): number {\n const promptTokens = promptRuns.reduce((sum, r) => sum + (r.TokensUsed || 0), 0);\n const agentTokens = agentRuns.reduce((sum, r) => sum + (r.TotalTokensUsed || 0), 0);\n return promptTokens + agentTokens;\n }\n\n private calculateAverageExecutionTime(promptRuns: PromptRunRecord[], agentRuns: AgentRunRecord[]): number {\n const promptTimes = promptRuns\n .filter(r => r.ExecutionTimeMS)\n .map(r => r.ExecutionTimeMS!);\n\n const agentTimes = agentRuns\n .filter(r => r.StartedAt && r.CompletedAt)\n .map(r => new Date(r.CompletedAt!).getTime() - new Date(r.StartedAt).getTime());\n\n const allTimes = [...promptTimes, ...agentTimes];\n return allTimes.length > 0 ? allTimes.reduce((sum, time) => sum + time, 0) / allTimes.length : 0;\n }\n\n private calculateSuccessRate(promptRuns: PromptRunRecord[], agentRuns: AgentRunRecord[]): number {\n const totalExecutions = promptRuns.length + agentRuns.length;\n if (totalExecutions === 0) return 1;\n\n const successfulPrompts = promptRuns.filter(r => r.Success).length;\n const successfulAgents = agentRuns.filter(r => r.Success).length;\n\n return (successfulPrompts + successfulAgents) / totalExecutions;\n }\n\n private countErrors(promptRuns: PromptRunRecord[], agentRuns: AgentRunRecord[]): number {\n const promptErrors = promptRuns.filter(r => !r.Success).length;\n const agentErrors = agentRuns.filter(r => !r.Success).length;\n return promptErrors + agentErrors;\n }\n\n private calculateDailyCostBurn(promptRuns: PromptRunRecord[], agentRuns: AgentRunRecord[]): number {\n const now = new Date();\n const dayStart = new Date(now.getFullYear(), now.getMonth(), now.getDate());\n\n const todayPrompts = promptRuns.filter(r => new Date(r.RunAt) >= dayStart);\n const todayAgents = agentRuns.filter(r => new Date(r.StartedAt) >= dayStart);\n\n return this.sumCosts(todayPrompts, todayAgents);\n }\n\n private getBucketSizeMs(start: Date, end: Date): number {\n const hours = (end.getTime() - start.getTime()) / (1000 * 60 * 60);\n if (hours <= 24) return 60 * 60 * 1000; // 1 hour\n if (hours <= 24 * 7) return 4 * 60 * 60 * 1000; // 4 hours\n return 24 * 60 * 60 * 1000; // 24 hours\n }\n\n private createHourlyBuckets(start: Date, end: Date): Date[] {\n const buckets: Date[] = [];\n const current = new Date(start);\n const hours = (end.getTime() - start.getTime()) / (1000 * 60 * 60);\n\n let bucketSize: number;\n if (hours <= 24) {\n bucketSize = 1;\n current.setMinutes(0, 0, 0);\n } else if (hours <= 24 * 7) {\n bucketSize = 4;\n current.setHours(Math.floor(current.getHours() / 4) * 4, 0, 0, 0);\n } else {\n bucketSize = 24;\n current.setHours(0, 0, 0, 0);\n }\n\n while (current < end) {\n buckets.push(new Date(current));\n current.setHours(current.getHours() + bucketSize);\n }\n\n return buckets;\n }\n\n private getTopModel(promptRuns: PromptRunRecord[]): string {\n const modelCounts = new Map<string, number>();\n const modelNames = new Map<string, string>();\n\n for (const run of promptRuns) {\n if (run.ModelID && run.Model) {\n modelCounts.set(run.ModelID, (modelCounts.get(run.ModelID) || 0) + 1);\n modelNames.set(run.ModelID, run.Model);\n }\n }\n\n if (modelCounts.size === 0) return 'N/A';\n\n const topModelId = Array.from(modelCounts.entries())\n .sort(([,a], [,b]) => b - a)[0][0];\n\n return modelNames.get(topModelId) || 'Unknown Model';\n }\n\n private getTopAgent(agentRuns: AgentRunRecord[]): string {\n const agentCounts = new Map<string, number>();\n const agentNames = new Map<string, string>();\n\n for (const run of agentRuns) {\n if (run.AgentID && run.Agent) {\n agentCounts.set(run.AgentID, (agentCounts.get(run.AgentID) || 0) + 1);\n agentNames.set(run.AgentID, run.Agent);\n }\n }\n\n if (agentCounts.size === 0) return 'N/A';\n\n const topAgentId = Array.from(agentCounts.entries())\n .sort(([,a], [,b]) => b - a)[0][0];\n\n return agentNames.get(topAgentId) || 'Unknown Agent';\n }\n\n private analyzeCostByModel(promptRuns: PromptRunRecord[]): { model: string; cost: number; tokens: number }[] {\n const modelStats = new Map<string, { cost: number; tokens: number; name: string }>();\n\n for (const run of promptRuns) {\n if (run.ModelID && run.Model) {\n const existing = modelStats.get(run.ModelID) || { cost: 0, tokens: 0, name: run.Model };\n existing.cost += run.Cost || 0;\n existing.tokens += run.TokensUsed || 0;\n modelStats.set(run.ModelID, existing);\n }\n }\n\n return Array.from(modelStats.values())\n .map(stats => ({ model: stats.name, cost: stats.cost, tokens: stats.tokens }))\n .sort((a, b) => b.cost - a.cost);\n }\n\n private analyzePerformanceMatrix(promptRuns: PromptRunRecord[]): { agent: string; model: string; avgTime: number; successRate: number }[] {\n const combinations = new Map<string, { times: number[]; successes: number; total: number; agentName: string; modelName: string }>();\n\n for (const run of promptRuns) {\n if (run.AgentID && run.ModelID && run.ExecutionTimeMS) {\n const key = `${run.AgentID}:${run.ModelID}`;\n const existing = combinations.get(key) || {\n times: [], successes: 0, total: 0,\n agentName: run.Agent || 'Unknown Agent',\n modelName: run.Model || 'Unknown Model'\n };\n\n existing.times.push(run.ExecutionTimeMS);\n existing.total += 1;\n if (run.Success) existing.successes += 1;\n combinations.set(key, existing);\n }\n }\n\n return Array.from(combinations.values()).map(data => ({\n agent: data.agentName,\n model: data.modelName,\n avgTime: data.times.reduce((sum, time) => sum + time, 0) / data.times.length,\n successRate: data.successes / data.total\n }));\n }\n\n private analyzeTokenEfficiency(promptRuns: PromptRunRecord[]): { inputTokens: number; outputTokens: number; cost: number; model: string }[] {\n const modelEfficiency = new Map<string, { input: number; output: number; cost: number; name: string }>();\n\n for (const run of promptRuns) {\n if (run.ModelID && run.Model && run.TokensPrompt && run.TokensCompletion) {\n const existing = modelEfficiency.get(run.ModelID) || { input: 0, output: 0, cost: 0, name: run.Model };\n existing.input += run.TokensPrompt;\n existing.output += run.TokensCompletion;\n existing.cost += run.Cost || 0;\n modelEfficiency.set(run.ModelID, existing);\n }\n }\n\n return Array.from(modelEfficiency.values()).map(data => ({\n inputTokens: data.input,\n outputTokens: data.output,\n cost: data.cost,\n model: data.name\n }));\n }\n\n // ─── Execution Details (on-demand, not part of initial load) ──────\n\n async getExecutionDetails(executionId: string, type: 'prompt' | 'agent'): Promise<ExecutionDetails | null> {\n try {\n if (type === 'prompt') {\n return await this.getPromptExecutionDetails(executionId);\n } else {\n return await this.getAgentExecutionDetails(executionId);\n }\n } catch (error) {\n console.error('Error loading execution details:', error);\n return null;\n }\n }\n\n private async getPromptExecutionDetails(promptRunId: string): Promise<ExecutionDetails> {\n const rv = RunView.FromMetadataProvider(this.Provider);\n const [result, childrenResult] = await rv.RunViews<PromptRunRecord>([\n {\n EntityName: 'MJ: AI Prompt Runs',\n ExtraFilter: `ID = '${promptRunId}'`,\n Fields: PROMPT_RUN_FIELDS,\n ResultType: 'simple'\n },\n {\n EntityName: 'MJ: AI Prompt Runs',\n ExtraFilter: `ParentID = '${promptRunId}'`,\n Fields: PROMPT_RUN_FIELDS,\n ResultType: 'simple'\n }\n ]);\n\n const run = result.Results[0];\n if (!run) throw new Error('Prompt run not found');\n\n const children = await Promise.all(\n childrenResult.Results.map(child => this.getPromptExecutionDetails(child.ID))\n );\n\n return {\n id: run.ID,\n type: 'prompt',\n name: run.Prompt || 'Unnamed Prompt',\n status: run.Success ? 'completed' : 'failed',\n startTime: new Date(run.RunAt),\n endTime: run.CompletedAt ? new Date(run.CompletedAt) : undefined,\n cost: run.Cost || 0,\n tokens: run.TokensUsed || 0,\n success: run.Success || false,\n errorMessage: run.ErrorMessage || undefined,\n children,\n model: run.Model || undefined\n };\n }\n\n private async getAgentExecutionDetails(agentRunId: string): Promise<ExecutionDetails> {\n const rv = RunView.FromMetadataProvider(this.Provider);\n const [result, childrenResult] = await rv.RunViews<AgentRunRecord>([\n {\n EntityName: 'MJ: AI Agent Runs',\n ExtraFilter: `ID = '${agentRunId}'`,\n Fields: AGENT_RUN_FIELDS,\n ResultType: 'simple'\n },\n {\n EntityName: 'MJ: AI Agent Runs',\n ExtraFilter: `ParentRunID = '${agentRunId}'`,\n Fields: AGENT_RUN_FIELDS,\n ResultType: 'simple'\n }\n ]);\n\n const run = result.Results[0];\n if (!run) throw new Error('Agent run not found');\n\n const children = await Promise.all(\n childrenResult.Results.map(child => this.getAgentExecutionDetails(child.ID))\n );\n\n return {\n id: run.ID,\n type: 'agent',\n name: run.Agent || 'Unnamed Agent',\n status: run.Status.toLowerCase(),\n startTime: new Date(run.StartedAt),\n endTime: run.CompletedAt ? new Date(run.CompletedAt) : undefined,\n cost: run.TotalCost || 0,\n tokens: run.TotalTokensUsed || 0,\n success: run.Success || false,\n errorMessage: run.ErrorMessage || undefined,\n parentId: undefined,\n children\n };\n }\n}\n"]}
@@ -1,5 +1,6 @@
1
1
  import { OnInit, OnDestroy, EventEmitter, ChangeDetectorRef } from '@angular/core';
2
2
  import { MJAPIApplicationEntity, MJAPIApplicationScopeEntity, MJAPIScopeEntity } from '@memberjunction/core-entities';
3
+ import { BaseAngularComponent } from '@memberjunction/ng-base-types';
3
4
  import * as i0 from "@angular/core";
4
5
  /** Application with scope count */
5
6
  interface ApplicationWithScopes {
@@ -31,9 +32,9 @@ interface ScopeCategory {
31
32
  * API Applications Panel Component
32
33
  * Manages API Applications and their scope assignments
33
34
  */
34
- export declare class APIApplicationsPanelComponent implements OnInit, OnDestroy {
35
+ export declare class APIApplicationsPanelComponent extends BaseAngularComponent implements OnInit, OnDestroy {
35
36
  ApplicationUpdated: EventEmitter<void>;
36
- private md;
37
+ private get md();
37
38
  private cdr;
38
39
  IsLoading: boolean;
39
40
  IsSaving: boolean;
@@ -1 +1 @@
1
- {"version":3,"file":"api-applications-panel.component.d.ts","sourceRoot":"","sources":["../../src/APIKeys/api-applications-panel.component.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"api-applications-panel.component.d.ts","sourceRoot":"","sources":["../../src/APIKeys/api-applications-panel.component.ts"],"names":[],"mappings":"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"}
@@ -1,6 +1,6 @@
1
1
  import { Component, EventEmitter, Output, HostListener } from '@angular/core';
2
- import { Metadata } from '@memberjunction/core';
3
2
  import { UserInfoEngine } from '@memberjunction/core-entities';
3
+ import { BaseAngularComponent } from '@memberjunction/ng-base-types';
4
4
  import { APIKeysEngineBase, parseAPIScopeUIConfig } from '@memberjunction/api-keys-base';
5
5
  import { UUIDsEqual } from '@memberjunction/global';
6
6
  import * as i0 from "@angular/core";
@@ -406,9 +406,9 @@ const MAX_PANEL_WIDTH = 800;
406
406
  * API Applications Panel Component
407
407
  * Manages API Applications and their scope assignments
408
408
  */
409
- export class APIApplicationsPanelComponent {
409
+ export class APIApplicationsPanelComponent extends BaseAngularComponent {
410
410
  ApplicationUpdated = new EventEmitter();
411
- md = new Metadata();
411
+ get md() { return this.ProviderToUse; }
412
412
  cdr;
413
413
  // Loading states
414
414
  IsLoading = true;
@@ -447,6 +447,7 @@ export class APIApplicationsPanelComponent {
447
447
  color: 'var(--mj-text-muted)'
448
448
  };
449
449
  constructor(cdr) {
450
+ super();
450
451
  this.cdr = cdr;
451
452
  }
452
453
  async ngOnInit() {
@@ -922,7 +923,7 @@ export class APIApplicationsPanelComponent {
922
923
  static ɵfac = function APIApplicationsPanelComponent_Factory(__ngFactoryType__) { return new (__ngFactoryType__ || APIApplicationsPanelComponent)(i0.ɵɵdirectiveInject(i0.ChangeDetectorRef)); };
923
924
  static ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: APIApplicationsPanelComponent, selectors: [["mj-api-applications-panel"]], hostBindings: function APIApplicationsPanelComponent_HostBindings(rf, ctx) { if (rf & 1) {
924
925
  i0.ɵɵlistener("mousemove", function APIApplicationsPanelComponent_mousemove_HostBindingHandler($event) { return ctx.onMouseMove($event); }, i0.ɵɵresolveDocument)("mouseup", function APIApplicationsPanelComponent_mouseup_HostBindingHandler() { return ctx.onMouseUp(); }, i0.ɵɵresolveDocument);
925
- } }, outputs: { ApplicationUpdated: "ApplicationUpdated" }, standalone: false, decls: 65, vars: 34, consts: [[1, "applications-panel"], ["text", "Loading applications..."], [1, "slideout-backdrop"], [1, "slideout-panel"], [1, "slideout-header"], [1, "slideout-title"], [1, "fa-solid", "fa-plus-circle"], ["title", "Close", 1, "slideout-close", 3, "click"], [1, "fa-solid", "fa-times"], [1, "slideout-content"], [1, "form-section"], [1, "form-field"], ["placeholder", "e.g., MJAPI, MCP Server, Portal", 1, "form-input", 3, "ngModelChange", "ngModel"], ["placeholder", "Describe the application's purpose...", 1, "form-textarea", 3, "ngModelChange", "ngModel", "rows"], [1, "checkbox-label"], ["type", "checkbox", 1, "mj-checkbox", 3, "ngModelChange", "ngModel"], [1, "checkbox-hint"], [1, "slideout-footer"], ["mjButton", "", "variant", "primary", 3, "click", "disabled"], ["size", "small", 3, "showText"], ["mjButton", "", 3, "click"], [1, "slideout-resize-handle", 3, "mousedown"], [1, "fa-solid", "fa-cube"], [1, "status-pill"], [1, "slideout-tabs"], [1, "slideout-tab", 3, "click"], [1, "fa-solid", "fa-info-circle"], [1, "fa-solid", "fa-shield-halved"], [1, "tab-badge"], [1, "tab-panel"], [1, "tab-panel", "scopes-panel"], [1, "panel-header"], [1, "header-left"], [1, "panel-title"], [1, "panel-subtitle"], [1, "btn-create", 3, "click"], [1, "fa-solid", "fa-plus"], [1, "message", "success"], [1, "message", "error"], [1, "applications-grid"], [1, "app-card", 3, "inactive", "expanded"], [1, "empty-state"], [1, "fa-solid", "fa-check-circle"], [1, "fa-solid", "fa-circle-exclamation"], [1, "app-card"], [1, "app-header"], [1, "app-header-main", 3, "click"], [1, "app-icon"], [1, "app-info"], [1, "app-name"], [1, "status-badge"], [1, "app-description"], [1, "app-stats"], [1, "scope-count"], [1, "fa-solid", "expand-icon"], ["title", "Edit Application", 1, "app-edit-btn", 3, "click"], [1, "fa-solid", "fa-pencil"], [1, "app-details"], [1, "details-section"], [1, "scope-rules"], [1, "empty-scopes"], [1, "scope-rule"], [1, "rule-icon", 3, "ngClass"], [1, "rule-info"], [1, "rule-scope"], [1, "rule-pattern"], [1, "pattern-type"], [1, "priority"], [1, "fa-solid", "fa-shield-xmark"], [1, "slideout-backdrop", 3, "click"], [1, "fa-solid", "fa-save"], [1, "scopes-intro"], [1, "scope-categories-list"], [1, "scope-category-card"], [1, "empty-scopes-message"], [1, "category-header", 3, "click"], [1, "category-left"], [1, "category-name"], [1, "category-count-badge"], [1, "category-right"], [1, "category-all-toggle", 3, "click"], ["type", "checkbox", 1, "mj-checkbox", 3, "change", "checked"], [1, "fa-solid", "category-chevron"], [1, "category-scopes-list"], [1, "scope-row", 3, "selected"], [1, "scope-row"], [1, "scope-select"], ["type", "checkbox", 1, "mj-checkbox", 3, "ngModelChange", "change", "ngModel"], [1, "scope-label"], [1, "scope-path"], [1, "scope-description"], [1, "scope-pattern-display"], [1, "scope-pattern-config"], [1, "pattern-tag"], [1, "fa-solid"], ["placeholder", "*", "title", "Resource Pattern", 1, "pattern-field", 3, "ngModelChange", "ngModel"], ["title", "Pattern Type", 1, "type-field", 3, "ngModelChange", "ngModel", "Data", "ValuePrimitive"]], template: function APIApplicationsPanelComponent_Template(rf, ctx) { if (rf & 1) {
926
+ } }, outputs: { ApplicationUpdated: "ApplicationUpdated" }, standalone: false, features: [i0.ɵɵInheritDefinitionFeature], decls: 65, vars: 34, consts: [[1, "applications-panel"], ["text", "Loading applications..."], [1, "slideout-backdrop"], [1, "slideout-panel"], [1, "slideout-header"], [1, "slideout-title"], [1, "fa-solid", "fa-plus-circle"], ["title", "Close", 1, "slideout-close", 3, "click"], [1, "fa-solid", "fa-times"], [1, "slideout-content"], [1, "form-section"], [1, "form-field"], ["placeholder", "e.g., MJAPI, MCP Server, Portal", 1, "form-input", 3, "ngModelChange", "ngModel"], ["placeholder", "Describe the application's purpose...", 1, "form-textarea", 3, "ngModelChange", "ngModel", "rows"], [1, "checkbox-label"], ["type", "checkbox", 1, "mj-checkbox", 3, "ngModelChange", "ngModel"], [1, "checkbox-hint"], [1, "slideout-footer"], ["mjButton", "", "variant", "primary", 3, "click", "disabled"], ["size", "small", 3, "showText"], ["mjButton", "", 3, "click"], [1, "slideout-resize-handle", 3, "mousedown"], [1, "fa-solid", "fa-cube"], [1, "status-pill"], [1, "slideout-tabs"], [1, "slideout-tab", 3, "click"], [1, "fa-solid", "fa-info-circle"], [1, "fa-solid", "fa-shield-halved"], [1, "tab-badge"], [1, "tab-panel"], [1, "tab-panel", "scopes-panel"], [1, "panel-header"], [1, "header-left"], [1, "panel-title"], [1, "panel-subtitle"], [1, "btn-create", 3, "click"], [1, "fa-solid", "fa-plus"], [1, "message", "success"], [1, "message", "error"], [1, "applications-grid"], [1, "app-card", 3, "inactive", "expanded"], [1, "empty-state"], [1, "fa-solid", "fa-check-circle"], [1, "fa-solid", "fa-circle-exclamation"], [1, "app-card"], [1, "app-header"], [1, "app-header-main", 3, "click"], [1, "app-icon"], [1, "app-info"], [1, "app-name"], [1, "status-badge"], [1, "app-description"], [1, "app-stats"], [1, "scope-count"], [1, "fa-solid", "expand-icon"], ["title", "Edit Application", 1, "app-edit-btn", 3, "click"], [1, "fa-solid", "fa-pencil"], [1, "app-details"], [1, "details-section"], [1, "scope-rules"], [1, "empty-scopes"], [1, "scope-rule"], [1, "rule-icon", 3, "ngClass"], [1, "rule-info"], [1, "rule-scope"], [1, "rule-pattern"], [1, "pattern-type"], [1, "priority"], [1, "fa-solid", "fa-shield-xmark"], [1, "slideout-backdrop", 3, "click"], [1, "fa-solid", "fa-save"], [1, "scopes-intro"], [1, "scope-categories-list"], [1, "scope-category-card"], [1, "empty-scopes-message"], [1, "category-header", 3, "click"], [1, "category-left"], [1, "category-name"], [1, "category-count-badge"], [1, "category-right"], [1, "category-all-toggle", 3, "click"], ["type", "checkbox", 1, "mj-checkbox", 3, "change", "checked"], [1, "fa-solid", "category-chevron"], [1, "category-scopes-list"], [1, "scope-row", 3, "selected"], [1, "scope-row"], [1, "scope-select"], ["type", "checkbox", 1, "mj-checkbox", 3, "ngModelChange", "change", "ngModel"], [1, "scope-label"], [1, "scope-path"], [1, "scope-description"], [1, "scope-pattern-display"], [1, "scope-pattern-config"], [1, "pattern-tag"], [1, "fa-solid"], ["placeholder", "*", "title", "Resource Pattern", 1, "pattern-field", 3, "ngModelChange", "ngModel"], ["title", "Pattern Type", 1, "type-field", 3, "ngModelChange", "ngModel", "Data", "ValuePrimitive"]], template: function APIApplicationsPanelComponent_Template(rf, ctx) { if (rf & 1) {
926
927
  i0.ɵɵelementStart(0, "div", 0);
927
928
  i0.ɵɵconditionalCreate(1, APIApplicationsPanelComponent_Conditional_1_Template, 1, 0, "mj-loading", 1);
928
929
  i0.ɵɵconditionalCreate(2, APIApplicationsPanelComponent_Conditional_2_Template, 16, 3);