@memberjunction/ng-dashboards 5.38.0 → 5.40.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (321) hide show
  1. package/README.md +14 -7
  2. package/dist/AI/components/agents/agent-configuration.component.js +199 -198
  3. package/dist/AI/components/agents/agent-configuration.component.js.map +1 -1
  4. package/dist/AI/components/analytics/ai-analytics-resource.component.d.ts.map +1 -1
  5. package/dist/AI/components/analytics/ai-analytics-resource.component.js +20 -17
  6. package/dist/AI/components/analytics/ai-analytics-resource.component.js.map +1 -1
  7. package/dist/AI/components/analytics/cost-budget/cost-budget.component.d.ts +15 -0
  8. package/dist/AI/components/analytics/cost-budget/cost-budget.component.d.ts.map +1 -1
  9. package/dist/AI/components/analytics/cost-budget/cost-budget.component.js +166 -58
  10. package/dist/AI/components/analytics/cost-budget/cost-budget.component.js.map +1 -1
  11. package/dist/AI/components/analytics/executive-summary/executive-summary.component.d.ts.map +1 -1
  12. package/dist/AI/components/analytics/executive-summary/executive-summary.component.js +2 -1
  13. package/dist/AI/components/analytics/executive-summary/executive-summary.component.js.map +1 -1
  14. package/dist/AI/components/analytics/model-performance/model-performance.component.d.ts +1 -0
  15. package/dist/AI/components/analytics/model-performance/model-performance.component.d.ts.map +1 -1
  16. package/dist/AI/components/analytics/model-performance/model-performance.component.js +55 -36
  17. package/dist/AI/components/analytics/model-performance/model-performance.component.js.map +1 -1
  18. package/dist/AI/components/analytics/prompt-runs/prompt-run-analysis.component.d.ts +9 -1
  19. package/dist/AI/components/analytics/prompt-runs/prompt-run-analysis.component.d.ts.map +1 -1
  20. package/dist/AI/components/analytics/prompt-runs/prompt-run-analysis.component.js +158 -117
  21. package/dist/AI/components/analytics/prompt-runs/prompt-run-analysis.component.js.map +1 -1
  22. package/dist/AI/components/analytics/usage-patterns/usage-patterns.component.d.ts +1 -0
  23. package/dist/AI/components/analytics/usage-patterns/usage-patterns.component.d.ts.map +1 -1
  24. package/dist/AI/components/analytics/usage-patterns/usage-patterns.component.js +22 -8
  25. package/dist/AI/components/analytics/usage-patterns/usage-patterns.component.js.map +1 -1
  26. package/dist/AI/components/autotagging/autotagging-pipeline-resource.component.d.ts +217 -860
  27. package/dist/AI/components/autotagging/autotagging-pipeline-resource.component.d.ts.map +1 -1
  28. package/dist/AI/components/autotagging/autotagging-pipeline-resource.component.js +1717 -7802
  29. package/dist/AI/components/autotagging/autotagging-pipeline-resource.component.js.map +1 -1
  30. package/dist/AI/components/autotagging/components/classify-item-drilldown.component.d.ts +56 -0
  31. package/dist/AI/components/autotagging/components/classify-item-drilldown.component.d.ts.map +1 -0
  32. package/dist/AI/components/autotagging/components/classify-item-drilldown.component.js +423 -0
  33. package/dist/AI/components/autotagging/components/classify-item-drilldown.component.js.map +1 -0
  34. package/dist/AI/components/autotagging/components/classify-item-grid.component.d.ts +70 -0
  35. package/dist/AI/components/autotagging/components/classify-item-grid.component.d.ts.map +1 -0
  36. package/dist/AI/components/autotagging/components/classify-item-grid.component.js +308 -0
  37. package/dist/AI/components/autotagging/components/classify-item-grid.component.js.map +1 -0
  38. package/dist/AI/components/autotagging/components/classify-org-context-editor.component.d.ts +29 -0
  39. package/dist/AI/components/autotagging/components/classify-org-context-editor.component.d.ts.map +1 -0
  40. package/dist/AI/components/autotagging/components/classify-org-context-editor.component.js +186 -0
  41. package/dist/AI/components/autotagging/components/classify-org-context-editor.component.js.map +1 -0
  42. package/dist/AI/components/autotagging/components/classify-overview-analytics.component.d.ts +69 -0
  43. package/dist/AI/components/autotagging/components/classify-overview-analytics.component.d.ts.map +1 -0
  44. package/dist/AI/components/autotagging/components/classify-overview-analytics.component.js +278 -0
  45. package/dist/AI/components/autotagging/components/classify-overview-analytics.component.js.map +1 -0
  46. package/dist/AI/components/autotagging/components/classify-seed-taxonomy.component.d.ts +73 -0
  47. package/dist/AI/components/autotagging/components/classify-seed-taxonomy.component.d.ts.map +1 -0
  48. package/dist/AI/components/autotagging/components/classify-seed-taxonomy.component.js +393 -0
  49. package/dist/AI/components/autotagging/components/classify-seed-taxonomy.component.js.map +1 -0
  50. package/dist/AI/components/autotagging/dialogs/classify-setup-wizard.component.d.ts +122 -0
  51. package/dist/AI/components/autotagging/dialogs/classify-setup-wizard.component.d.ts.map +1 -0
  52. package/dist/AI/components/autotagging/dialogs/classify-setup-wizard.component.js +908 -0
  53. package/dist/AI/components/autotagging/dialogs/classify-setup-wizard.component.js.map +1 -0
  54. package/dist/AI/components/autotagging/dialogs/dry-run-preview.dialog.component.d.ts +87 -0
  55. package/dist/AI/components/autotagging/dialogs/dry-run-preview.dialog.component.d.ts.map +1 -0
  56. package/dist/AI/components/autotagging/dialogs/dry-run-preview.dialog.component.js +475 -0
  57. package/dist/AI/components/autotagging/dialogs/dry-run-preview.dialog.component.js.map +1 -0
  58. package/dist/AI/components/autotagging/dialogs/item-detail.dialog.component.d.ts +29 -0
  59. package/dist/AI/components/autotagging/dialogs/item-detail.dialog.component.d.ts.map +1 -0
  60. package/dist/AI/components/autotagging/dialogs/item-detail.dialog.component.js +208 -0
  61. package/dist/AI/components/autotagging/dialogs/item-detail.dialog.component.js.map +1 -0
  62. package/dist/AI/components/autotagging/dialogs/no-content-type-warning.dialog.component.d.ts +21 -0
  63. package/dist/AI/components/autotagging/dialogs/no-content-type-warning.dialog.component.d.ts.map +1 -0
  64. package/dist/AI/components/autotagging/dialogs/no-content-type-warning.dialog.component.js +70 -0
  65. package/dist/AI/components/autotagging/dialogs/no-content-type-warning.dialog.component.js.map +1 -0
  66. package/dist/AI/components/autotagging/dialogs/source-type-form.dialog.component.d.ts +333 -0
  67. package/dist/AI/components/autotagging/dialogs/source-type-form.dialog.component.d.ts.map +1 -0
  68. package/dist/AI/components/autotagging/dialogs/source-type-form.dialog.component.js +2125 -0
  69. package/dist/AI/components/autotagging/dialogs/source-type-form.dialog.component.js.map +1 -0
  70. package/dist/AI/components/autotagging/shared/classify.dryrun.d.ts +61 -0
  71. package/dist/AI/components/autotagging/shared/classify.dryrun.d.ts.map +1 -0
  72. package/dist/AI/components/autotagging/shared/classify.dryrun.js +78 -0
  73. package/dist/AI/components/autotagging/shared/classify.dryrun.js.map +1 -0
  74. package/dist/AI/components/autotagging/shared/classify.format.d.ts +58 -0
  75. package/dist/AI/components/autotagging/shared/classify.format.d.ts.map +1 -0
  76. package/dist/AI/components/autotagging/shared/classify.format.js +260 -0
  77. package/dist/AI/components/autotagging/shared/classify.format.js.map +1 -0
  78. package/dist/AI/components/autotagging/shared/classify.types.d.ts +319 -0
  79. package/dist/AI/components/autotagging/shared/classify.types.d.ts.map +1 -0
  80. package/dist/AI/components/autotagging/shared/classify.types.js +6 -0
  81. package/dist/AI/components/autotagging/shared/classify.types.js.map +1 -0
  82. package/dist/AI/components/autotagging/tabs/health-tab.component.d.ts +103 -0
  83. package/dist/AI/components/autotagging/tabs/health-tab.component.d.ts.map +1 -0
  84. package/dist/AI/components/autotagging/tabs/health-tab.component.js +571 -0
  85. package/dist/AI/components/autotagging/tabs/health-tab.component.js.map +1 -0
  86. package/dist/AI/components/autotagging/tabs/history-tab.component.d.ts +77 -0
  87. package/dist/AI/components/autotagging/tabs/history-tab.component.d.ts.map +1 -0
  88. package/dist/AI/components/autotagging/tabs/history-tab.component.js +519 -0
  89. package/dist/AI/components/autotagging/tabs/history-tab.component.js.map +1 -0
  90. package/dist/AI/components/autotagging/tabs/inbox-tab.component.d.ts +107 -0
  91. package/dist/AI/components/autotagging/tabs/inbox-tab.component.d.ts.map +1 -0
  92. package/dist/AI/components/autotagging/tabs/inbox-tab.component.js +719 -0
  93. package/dist/AI/components/autotagging/tabs/inbox-tab.component.js.map +1 -0
  94. package/dist/AI/components/autotagging/tabs/pipeline-tab.component.d.ts +131 -0
  95. package/dist/AI/components/autotagging/tabs/pipeline-tab.component.d.ts.map +1 -0
  96. package/dist/AI/components/autotagging/tabs/pipeline-tab.component.js +813 -0
  97. package/dist/AI/components/autotagging/tabs/pipeline-tab.component.js.map +1 -0
  98. package/dist/AI/components/autotagging/tabs/sources-tab.component.d.ts +177 -0
  99. package/dist/AI/components/autotagging/tabs/sources-tab.component.d.ts.map +1 -0
  100. package/dist/AI/components/autotagging/tabs/sources-tab.component.js +1465 -0
  101. package/dist/AI/components/autotagging/tabs/sources-tab.component.js.map +1 -0
  102. package/dist/AI/components/autotagging/tabs/tags-tab.component.d.ts +78 -0
  103. package/dist/AI/components/autotagging/tabs/tags-tab.component.d.ts.map +1 -0
  104. package/dist/AI/components/autotagging/tabs/tags-tab.component.js +492 -0
  105. package/dist/AI/components/autotagging/tabs/tags-tab.component.js.map +1 -0
  106. package/dist/AI/components/autotagging/tabs/taxonomy-tab.component.d.ts +397 -0
  107. package/dist/AI/components/autotagging/tabs/taxonomy-tab.component.d.ts.map +1 -0
  108. package/dist/AI/components/autotagging/tabs/taxonomy-tab.component.js +3490 -0
  109. package/dist/AI/components/autotagging/tabs/taxonomy-tab.component.js.map +1 -0
  110. package/dist/AI/components/autotagging/tabs/types-tab.component.d.ts +56 -0
  111. package/dist/AI/components/autotagging/tabs/types-tab.component.d.ts.map +1 -0
  112. package/dist/AI/components/autotagging/tabs/types-tab.component.js +271 -0
  113. package/dist/AI/components/autotagging/tabs/types-tab.component.js.map +1 -0
  114. package/dist/AI/components/duplicates/duplicate-detection-resource.component.d.ts +3 -0
  115. package/dist/AI/components/duplicates/duplicate-detection-resource.component.d.ts.map +1 -1
  116. package/dist/AI/components/duplicates/duplicate-detection-resource.component.js +306 -290
  117. package/dist/AI/components/duplicates/duplicate-detection-resource.component.js.map +1 -1
  118. package/dist/AI/components/execution-monitoring.component.js +1 -1
  119. package/dist/AI/components/execution-monitoring.component.js.map +1 -1
  120. package/dist/AI/components/models/model-management.component.js +209 -208
  121. package/dist/AI/components/models/model-management.component.js.map +1 -1
  122. package/dist/AI/components/prompts/prompt-management.component.js +130 -128
  123. package/dist/AI/components/prompts/prompt-management.component.js.map +1 -1
  124. package/dist/AI/components/requests/agent-requests-resource.component.js +61 -61
  125. package/dist/AI/components/requests/agent-requests-resource.component.js.map +1 -1
  126. package/dist/AI/components/system/system-configuration.component.js +17 -17
  127. package/dist/AI/components/system/system-configuration.component.js.map +1 -1
  128. package/dist/AI/components/tags/tags-resource.component.d.ts +1 -0
  129. package/dist/AI/components/tags/tags-resource.component.d.ts.map +1 -1
  130. package/dist/AI/components/tags/tags-resource.component.js +578 -538
  131. package/dist/AI/components/tags/tags-resource.component.js.map +1 -1
  132. package/dist/AI/components/vectors/vector-management-resource.component.d.ts +3 -0
  133. package/dist/AI/components/vectors/vector-management-resource.component.d.ts.map +1 -1
  134. package/dist/AI/components/vectors/vector-management-resource.component.js +331 -303
  135. package/dist/AI/components/vectors/vector-management-resource.component.js.map +1 -1
  136. package/dist/AI/services/ai-instrumentation.service.d.ts +5 -0
  137. package/dist/AI/services/ai-instrumentation.service.d.ts.map +1 -1
  138. package/dist/AI/services/ai-instrumentation.service.js +14 -2
  139. package/dist/AI/services/ai-instrumentation.service.js.map +1 -1
  140. package/dist/AI/services/cache-metrics.d.ts +50 -0
  141. package/dist/AI/services/cache-metrics.d.ts.map +1 -0
  142. package/dist/AI/services/cache-metrics.js +43 -0
  143. package/dist/AI/services/cache-metrics.js.map +1 -0
  144. package/dist/APIKeys/api-applications-panel.component.js +2 -2
  145. package/dist/APIKeys/api-key-create-dialog.component.js +2 -2
  146. package/dist/APIKeys/api-key-edit-panel.component.js +2 -2
  147. package/dist/APIKeys/api-keys-resource.component.js +132 -131
  148. package/dist/APIKeys/api-keys-resource.component.js.map +1 -1
  149. package/dist/Actions/components/actions-overview.component.js +141 -141
  150. package/dist/Actions/components/actions-overview.component.js.map +1 -1
  151. package/dist/Actions/components/execution-monitoring.component.js +15 -15
  152. package/dist/Actions/components/execution-monitoring.component.js.map +1 -1
  153. package/dist/Actions/components/explorer/action-explorer.component.d.ts +0 -5
  154. package/dist/Actions/components/explorer/action-explorer.component.d.ts.map +1 -1
  155. package/dist/Actions/components/explorer/action-explorer.component.js +139 -212
  156. package/dist/Actions/components/explorer/action-explorer.component.js.map +1 -1
  157. package/dist/Admin/admin-data-schema.component.js +2 -2
  158. package/dist/Admin/admin-data-schema.component.js.map +1 -1
  159. package/dist/Admin/admin-dev-tools-resource.component.js +2 -2
  160. package/dist/Admin/admin-dev-tools-resource.component.js.map +1 -1
  161. package/dist/Admin/admin-identity-access.component.js +2 -2
  162. package/dist/Admin/admin-identity-access.component.js.map +1 -1
  163. package/dist/Admin/admin-monitoring.component.js +2 -2
  164. package/dist/Admin/admin-monitoring.component.js.map +1 -1
  165. package/dist/ApplicationRoles/application-roles-resource.component.js +54 -49
  166. package/dist/ApplicationRoles/application-roles-resource.component.js.map +1 -1
  167. package/dist/Communication/communication-logs-resource.component.d.ts +6 -0
  168. package/dist/Communication/communication-logs-resource.component.d.ts.map +1 -1
  169. package/dist/Communication/communication-logs-resource.component.js +72 -50
  170. package/dist/Communication/communication-logs-resource.component.js.map +1 -1
  171. package/dist/Communication/communication-monitor-resource.component.js +103 -102
  172. package/dist/Communication/communication-monitor-resource.component.js.map +1 -1
  173. package/dist/Communication/communication-providers-resource.component.js +52 -51
  174. package/dist/Communication/communication-providers-resource.component.js.map +1 -1
  175. package/dist/Communication/communication-runs-resource.component.js +39 -38
  176. package/dist/Communication/communication-runs-resource.component.js.map +1 -1
  177. package/dist/Communication/communication-templates-resource.component.d.ts +6 -0
  178. package/dist/Communication/communication-templates-resource.component.d.ts.map +1 -1
  179. package/dist/Communication/communication-templates-resource.component.js +92 -89
  180. package/dist/Communication/communication-templates-resource.component.js.map +1 -1
  181. package/dist/Credentials/components/credentials-audit-resource.component.js +136 -135
  182. package/dist/Credentials/components/credentials-audit-resource.component.js.map +1 -1
  183. package/dist/Credentials/components/credentials-categories-resource.component.js +155 -152
  184. package/dist/Credentials/components/credentials-categories-resource.component.js.map +1 -1
  185. package/dist/Credentials/components/credentials-list-resource.component.js +119 -118
  186. package/dist/Credentials/components/credentials-list-resource.component.js.map +1 -1
  187. package/dist/Credentials/components/credentials-overview-resource.component.js +129 -128
  188. package/dist/Credentials/components/credentials-overview-resource.component.js.map +1 -1
  189. package/dist/Credentials/components/credentials-types-resource.component.js +107 -106
  190. package/dist/Credentials/components/credentials-types-resource.component.js.map +1 -1
  191. package/dist/DataExplorer/data-explorer-dashboard.component.d.ts +31 -340
  192. package/dist/DataExplorer/data-explorer-dashboard.component.d.ts.map +1 -1
  193. package/dist/DataExplorer/data-explorer-dashboard.component.js +468 -1958
  194. package/dist/DataExplorer/data-explorer-dashboard.component.js.map +1 -1
  195. package/dist/DataExplorer/data-explorer-resource.component.d.ts.map +1 -1
  196. package/dist/DataExplorer/data-explorer-resource.component.js +10 -0
  197. package/dist/DataExplorer/data-explorer-resource.component.js.map +1 -1
  198. package/dist/DatabaseDesigner/components/database-designer-dashboard.component.js +1 -1
  199. package/dist/DatabaseDesigner/components/entity-list.component.js +115 -114
  200. package/dist/DatabaseDesigner/components/entity-list.component.js.map +1 -1
  201. package/dist/DatabaseDesigner/database-designer-dashboards.module.d.ts +5 -6
  202. package/dist/DatabaseDesigner/database-designer-dashboards.module.d.ts.map +1 -1
  203. package/dist/DatabaseDesigner/database-designer-dashboards.module.js +4 -5
  204. package/dist/DatabaseDesigner/database-designer-dashboards.module.js.map +1 -1
  205. package/dist/DevTools/app-state-inspector.component.js +18 -17
  206. package/dist/DevTools/app-state-inspector.component.js.map +1 -1
  207. package/dist/DevTools/class-registry.component.js +88 -85
  208. package/dist/DevTools/class-registry.component.js.map +1 -1
  209. package/dist/DevTools/event-monitor.component.js +155 -150
  210. package/dist/DevTools/event-monitor.component.js.map +1 -1
  211. package/dist/DevTools/graphql-console.component.js +245 -243
  212. package/dist/DevTools/graphql-console.component.js.map +1 -1
  213. package/dist/DevTools/layout-inspector.component.js +18 -17
  214. package/dist/DevTools/layout-inspector.component.js.map +1 -1
  215. package/dist/EntityAdmin/entity-admin-dashboard.component.js +20 -19
  216. package/dist/EntityAdmin/entity-admin-dashboard.component.js.map +1 -1
  217. package/dist/Home/home-dashboard.component.js +2 -2
  218. package/dist/Integration/components/activity/activity.component.d.ts.map +1 -1
  219. package/dist/Integration/components/activity/activity.component.js +236 -229
  220. package/dist/Integration/components/activity/activity.component.js.map +1 -1
  221. package/dist/Integration/components/connections/connections.component.js +390 -389
  222. package/dist/Integration/components/connections/connections.component.js.map +1 -1
  223. package/dist/Integration/components/overview/overview.component.js +2 -2
  224. package/dist/KnowledgeHub/components/analytics/analytics-resource.component.d.ts.map +1 -1
  225. package/dist/KnowledgeHub/components/analytics/analytics-resource.component.js +14 -11
  226. package/dist/KnowledgeHub/components/analytics/analytics-resource.component.js.map +1 -1
  227. package/dist/KnowledgeHub/components/clusters/cluster-visualization-resource.component.d.ts +27 -2
  228. package/dist/KnowledgeHub/components/clusters/cluster-visualization-resource.component.d.ts.map +1 -1
  229. package/dist/KnowledgeHub/components/clusters/cluster-visualization-resource.component.js +244 -119
  230. package/dist/KnowledgeHub/components/clusters/cluster-visualization-resource.component.js.map +1 -1
  231. package/dist/KnowledgeHub/components/config/knowledge-config-resource.component.js +293 -291
  232. package/dist/KnowledgeHub/components/config/knowledge-config-resource.component.js.map +1 -1
  233. package/dist/KnowledgeHub/components/scheduling/scheduling-resource.component.js +62 -61
  234. package/dist/KnowledgeHub/components/scheduling/scheduling-resource.component.js.map +1 -1
  235. package/dist/KnowledgeHub/components/visualize/record-drilldown/record-drilldown.component.d.ts +65 -0
  236. package/dist/KnowledgeHub/components/visualize/record-drilldown/record-drilldown.component.d.ts.map +1 -0
  237. package/dist/KnowledgeHub/components/visualize/record-drilldown/record-drilldown.component.js +176 -0
  238. package/dist/KnowledgeHub/components/visualize/record-drilldown/record-drilldown.component.js.map +1 -0
  239. package/dist/KnowledgeHub/components/visualize/tag-cloud/tag-cloud.component.d.ts +81 -0
  240. package/dist/KnowledgeHub/components/visualize/tag-cloud/tag-cloud.component.d.ts.map +1 -0
  241. package/dist/KnowledgeHub/components/visualize/tag-cloud/tag-cloud.component.js +308 -0
  242. package/dist/KnowledgeHub/components/visualize/tag-cloud/tag-cloud.component.js.map +1 -0
  243. package/dist/KnowledgeHub/components/visualize/visualize-resource.component.d.ts +85 -0
  244. package/dist/KnowledgeHub/components/visualize/visualize-resource.component.d.ts.map +1 -0
  245. package/dist/KnowledgeHub/components/visualize/visualize-resource.component.js +362 -0
  246. package/dist/KnowledgeHub/components/visualize/visualize-resource.component.js.map +1 -0
  247. package/dist/KnowledgeHub/index.d.ts +3 -0
  248. package/dist/KnowledgeHub/index.d.ts.map +1 -1
  249. package/dist/KnowledgeHub/index.js +3 -0
  250. package/dist/KnowledgeHub/index.js.map +1 -1
  251. package/dist/Lists/components/lists-browse-resource.component.d.ts +6 -2
  252. package/dist/Lists/components/lists-browse-resource.component.d.ts.map +1 -1
  253. package/dist/Lists/components/lists-browse-resource.component.js +525 -566
  254. package/dist/Lists/components/lists-browse-resource.component.js.map +1 -1
  255. package/dist/Lists/components/lists-categories-resource.component.js +135 -134
  256. package/dist/Lists/components/lists-categories-resource.component.js.map +1 -1
  257. package/dist/Lists/components/lists-my-lists-resource.component.js +199 -198
  258. package/dist/Lists/components/lists-my-lists-resource.component.js.map +1 -1
  259. package/dist/MCP/components/mcp-server-dialog.component.js +2 -2
  260. package/dist/MCP/mcp-dashboard.component.js +443 -438
  261. package/dist/MCP/mcp-dashboard.component.js.map +1 -1
  262. package/dist/QueryBrowser/query-browser-resource.component.js +1 -1
  263. package/dist/QueryBrowser/query-browser-resource.component.js.map +1 -1
  264. package/dist/Scheduling/components/scheduling-activity.component.d.ts.map +1 -1
  265. package/dist/Scheduling/components/scheduling-activity.component.js +146 -147
  266. package/dist/Scheduling/components/scheduling-activity.component.js.map +1 -1
  267. package/dist/Scheduling/components/scheduling-jobs.component.js +76 -75
  268. package/dist/Scheduling/components/scheduling-jobs.component.js.map +1 -1
  269. package/dist/Scheduling/components/scheduling-overview.component.js +97 -96
  270. package/dist/Scheduling/components/scheduling-overview.component.js.map +1 -1
  271. package/dist/Scheduling/scheduling-dashboard.component.js +24 -22
  272. package/dist/Scheduling/scheduling-dashboard.component.js.map +1 -1
  273. package/dist/Scheduling/services/scheduling-instrumentation.service.d.ts +2 -0
  274. package/dist/Scheduling/services/scheduling-instrumentation.service.d.ts.map +1 -1
  275. package/dist/Scheduling/services/scheduling-instrumentation.service.js +1 -0
  276. package/dist/Scheduling/services/scheduling-instrumentation.service.js.map +1 -1
  277. package/dist/Testing/components/testing-dashboard-tab-resource.component.js +1 -1
  278. package/dist/Testing/components/testing-explorer.component.d.ts +14 -4
  279. package/dist/Testing/components/testing-explorer.component.d.ts.map +1 -1
  280. package/dist/Testing/components/testing-explorer.component.js +436 -427
  281. package/dist/Testing/components/testing-explorer.component.js.map +1 -1
  282. package/dist/Testing/components/testing-runs-resource.component.js +1 -1
  283. package/dist/Testing/components/testing-runs.component.js +116 -115
  284. package/dist/Testing/components/testing-runs.component.js.map +1 -1
  285. package/dist/Testing/testing-dashboard.component.js +6 -7
  286. package/dist/Testing/testing-dashboard.component.js.map +1 -1
  287. package/dist/VersionHistory/components/labels-resource.component.js +173 -172
  288. package/dist/VersionHistory/components/labels-resource.component.js.map +1 -1
  289. package/dist/VersionHistory/components/restore-resource.component.d.ts +6 -0
  290. package/dist/VersionHistory/components/restore-resource.component.d.ts.map +1 -1
  291. package/dist/VersionHistory/components/restore-resource.component.js +116 -92
  292. package/dist/VersionHistory/components/restore-resource.component.js.map +1 -1
  293. package/dist/ai-dashboards.module.d.ts +57 -35
  294. package/dist/ai-dashboards.module.d.ts.map +1 -1
  295. package/dist/ai-dashboards.module.js +80 -1
  296. package/dist/ai-dashboards.module.js.map +1 -1
  297. package/dist/communication-dashboards.module.d.ts +1 -1
  298. package/dist/communication-dashboards.module.d.ts.map +1 -1
  299. package/dist/communication-dashboards.module.js +7 -1
  300. package/dist/communication-dashboards.module.js.map +1 -1
  301. package/dist/data-explorer-dashboards.module.d.ts +12 -14
  302. package/dist/data-explorer-dashboards.module.d.ts.map +1 -1
  303. package/dist/data-explorer-dashboards.module.js +5 -14
  304. package/dist/data-explorer-dashboards.module.js.map +1 -1
  305. package/dist/public-api.d.ts +3 -0
  306. package/dist/public-api.d.ts.map +1 -1
  307. package/dist/public-api.js +3 -0
  308. package/dist/public-api.js.map +1 -1
  309. package/dist/testing-dashboards.module.d.ts +4 -5
  310. package/dist/testing-dashboards.module.d.ts.map +1 -1
  311. package/dist/testing-dashboards.module.js +7 -5
  312. package/dist/testing-dashboards.module.js.map +1 -1
  313. package/package.json +57 -54
  314. package/dist/DataExplorer/components/filter-dialog/filter-dialog.component.d.ts +0 -79
  315. package/dist/DataExplorer/components/filter-dialog/filter-dialog.component.d.ts.map +0 -1
  316. package/dist/DataExplorer/components/filter-dialog/filter-dialog.component.js +0 -195
  317. package/dist/DataExplorer/components/filter-dialog/filter-dialog.component.js.map +0 -1
  318. package/dist/DataExplorer/components/view-selector/view-selector.component.d.ts +0 -226
  319. package/dist/DataExplorer/components/view-selector/view-selector.component.d.ts.map +0 -1
  320. package/dist/DataExplorer/components/view-selector/view-selector.component.js +0 -861
  321. package/dist/DataExplorer/components/view-selector/view-selector.component.js.map +0 -1
@@ -0,0 +1,260 @@
1
+ /** Locale-formatted integer (e.g. 12345 → "12,345"). */
2
+ export function formatNumber(n) {
3
+ return n.toLocaleString();
4
+ }
5
+ /**
6
+ * Derive a human-meaningful display name for a content item.
7
+ *
8
+ * Entity-sourced content items now carry a real per-record `Name` (the source
9
+ * entity's name field — e.g. "GPT-4"), so we prefer `Name` directly. Only when a
10
+ * Name is missing (or is a generic source-name placeholder) do we fall back to
11
+ * the first meaningful line of the LLM-generated `Description` to keep rows
12
+ * distinguishable, then to a placeholder.
13
+ *
14
+ * Pure/stateless — safe to call from any render site.
15
+ */
16
+ export function deriveDisplayName(item) {
17
+ const name = item?.Name?.trim();
18
+ if (name) {
19
+ return name.length > DISPLAY_NAME_MAX_LEN
20
+ ? `${name.slice(0, DISPLAY_NAME_MAX_LEN).trimEnd()}…`
21
+ : name;
22
+ }
23
+ const fromDescription = firstMeaningfulLine(item?.Description);
24
+ if (fromDescription)
25
+ return fromDescription;
26
+ return '(Untitled)';
27
+ }
28
+ /** Max length of a derived display name before it is truncated with an ellipsis. */
29
+ const DISPLAY_NAME_MAX_LEN = 80;
30
+ /**
31
+ * Returns the first non-empty, markdown-stripped line of a description, clamped
32
+ * to DISPLAY_NAME_MAX_LEN characters. Returns null when nothing meaningful remains.
33
+ */
34
+ function firstMeaningfulLine(description) {
35
+ if (!description)
36
+ return null;
37
+ for (const rawLine of description.split(/\r?\n/)) {
38
+ const cleaned = stripMarkdown(rawLine);
39
+ if (cleaned.length === 0)
40
+ continue;
41
+ return cleaned.length > DISPLAY_NAME_MAX_LEN
42
+ ? `${cleaned.slice(0, DISPLAY_NAME_MAX_LEN).trimEnd()}…`
43
+ : cleaned;
44
+ }
45
+ return null;
46
+ }
47
+ /** Strip leading markdown markers (#, *, -, >, backticks) and collapse whitespace. */
48
+ function stripMarkdown(line) {
49
+ return line
50
+ .replace(/^[#>\s]*/g, '') // leading heading / blockquote markers + space
51
+ .replace(/^[-*+]\s+/, '') // leading bullet markers
52
+ .replace(/[`*_~]/g, '') // inline emphasis / code markers
53
+ .replace(/\s+/g, ' ') // collapse runs of whitespace
54
+ .trim();
55
+ }
56
+ /** Compact token count (e.g. 1500 → "2K", 2_400_000 → "2.4M"). */
57
+ export function formatTokenCount(tokens) {
58
+ if (tokens >= 1000000)
59
+ return `${(tokens / 1000000).toFixed(1)}M`;
60
+ if (tokens >= 1000)
61
+ return `${(tokens / 1000).toFixed(0)}K`;
62
+ return String(tokens);
63
+ }
64
+ /** Weight (0.0–1.0) as a percentage string (e.g. 0.42 → "42%"). */
65
+ export function formatWeight(weight) {
66
+ return `${Math.round(weight * 100)}%`;
67
+ }
68
+ /** Font size in rem for a tag chip based on weight (0.0–1.0), clamped to 0.7–1.0rem. */
69
+ export function tagFontSize(weight) {
70
+ const min = 0.7;
71
+ const max = 1.0;
72
+ return `${min + (max - min) * Math.min(1, Math.max(0, weight))}rem`;
73
+ }
74
+ /** Short date (e.g. "Mar 5"). Returns '' on parse failure. */
75
+ export function formatShortDate(dateStr) {
76
+ try {
77
+ return new Date(dateStr).toLocaleDateString('en-US', { month: 'short', day: 'numeric' });
78
+ }
79
+ catch {
80
+ return '';
81
+ }
82
+ }
83
+ /** Date + time (e.g. "Mar 5, 2:05 PM"). Echoes the input on parse failure. */
84
+ export function formatDate(dateStr) {
85
+ try {
86
+ return new Date(dateStr).toLocaleDateString('en-US', { month: 'short', day: 'numeric', hour: 'numeric', minute: '2-digit' });
87
+ }
88
+ catch {
89
+ return dateStr;
90
+ }
91
+ }
92
+ /** Human-friendly elapsed duration between two ISO timestamps; open-ended if `end` is null. */
93
+ export function computeDuration(start, end) {
94
+ if (!start)
95
+ return '—';
96
+ const s = new Date(start);
97
+ const e = end ? new Date(end) : new Date();
98
+ const ms = e.getTime() - s.getTime();
99
+ if (ms < 1000)
100
+ return `${ms}ms`;
101
+ if (ms < 60000)
102
+ return `${Math.round(ms / 1000)}s`;
103
+ const mins = Math.floor(ms / 60000);
104
+ const secs = Math.round((ms % 60000) / 1000);
105
+ return `${mins}m ${secs}s`;
106
+ }
107
+ /** Normalize a raw run status to one of the canonical display labels. */
108
+ export function displayStatus(status) {
109
+ const lower = status.toLowerCase();
110
+ if (lower === 'complete' || lower === 'completed' || lower === 'done')
111
+ return 'Complete';
112
+ if (lower === 'error' || lower === 'failed')
113
+ return 'Failed';
114
+ if (lower === 'running' || lower === 'processing')
115
+ return 'Running';
116
+ return status;
117
+ }
118
+ /** Font Awesome icon class for a content source type name. */
119
+ export function getSourceTypeIcon(typeName) {
120
+ const iconMap = {
121
+ 'Web': 'fa-solid fa-globe', 'Web Crawler': 'fa-solid fa-globe',
122
+ 'API': 'fa-solid fa-plug', 'Database': 'fa-solid fa-database',
123
+ 'File': 'fa-solid fa-file-alt', 'Email': 'fa-solid fa-envelope',
124
+ 'RSS': 'fa-solid fa-rss', 'RSS Feed': 'fa-solid fa-rss',
125
+ 'CMS': 'fa-solid fa-newspaper', 'PDF': 'fa-solid fa-file-pdf'
126
+ };
127
+ return iconMap[typeName] ?? 'fa-solid fa-folder';
128
+ }
129
+ /** Map raw `MJ: Content Process Run Details` rows to typed RunDetailRow view models. */
130
+ export function mapRunDetailRecords(records) {
131
+ return records.map(d => {
132
+ const status = String(d['Status'] || 'Pending');
133
+ const statusLower = status.toLowerCase();
134
+ const isFailed = statusLower === 'failed' || statusLower === 'error';
135
+ const isRunning = statusLower === 'running' || statusLower === 'processing';
136
+ const startTime = d['StartTime'] ? new Date(String(d['StartTime'])) : null;
137
+ const endTime = d['EndTime'] ? new Date(String(d['EndTime'])) : null;
138
+ const durationMs = startTime && endTime ? endTime.getTime() - startTime.getTime() : 0;
139
+ const durationStr = durationMs > 60000 ? `${Math.round(durationMs / 60000)}m` : `${Math.round(durationMs / 1000)}s`;
140
+ return {
141
+ SourceName: String(d['ContentSource'] || 'Unknown'),
142
+ SourceType: String(d['ContentSourceType'] || ''),
143
+ Status: displayStatus(status),
144
+ StatusClass: isFailed ? 'failed' : isRunning ? 'running' : 'complete',
145
+ ItemsProcessed: Number(d['ItemsProcessed'] || 0),
146
+ ItemsTagged: Number(d['ItemsTagged'] || 0),
147
+ ItemsVectorized: Number(d['ItemsVectorized'] || 0),
148
+ ErrorCount: Number(d['ErrorCount'] || 0),
149
+ TotalTokens: Number(d['TotalTokensUsed'] || 0),
150
+ TotalCost: Number(d['TotalCost'] || 0),
151
+ Duration: durationStr,
152
+ };
153
+ });
154
+ }
155
+ // ================================================================
156
+ // Cron-to-Human-Readable Utility
157
+ // ================================================================
158
+ /**
159
+ * Converts a 5-part or 6-part cron expression to a human-readable English string.
160
+ *
161
+ * Handles common patterns:
162
+ * `0 * * * *` -> "Every hour"
163
+ * `0 2 * * *` -> "Daily at 2:00 AM"
164
+ * `0 2 * * 1` -> "Weekly on Monday at 2:00 AM"
165
+ * `star/15 * * * *` -> "Every 15 minutes" (where star = asterisk)
166
+ * `0 0 1 * *` -> "Monthly on day 1 at 12:00 AM"
167
+ *
168
+ * Falls back to returning the raw cron string for unrecognized patterns.
169
+ *
170
+ * @param cron A cron expression string (5 or 6 parts)
171
+ * @returns A human-readable description or the raw cron if unrecognized
172
+ */
173
+ export function CronToHumanReadable(cron) {
174
+ if (!cron)
175
+ return 'No schedule';
176
+ const parts = cron.trim().split(/\s+/);
177
+ const p = parseCronParts(parts);
178
+ if (!p)
179
+ return cron;
180
+ return formatCronParts(p) ?? cron;
181
+ }
182
+ /**
183
+ * Parses 5-part or 6-part cron expressions into normalized fields.
184
+ * 6-part expressions have a leading seconds field that is discarded.
185
+ */
186
+ function parseCronParts(parts) {
187
+ if (parts.length === 5) {
188
+ return { Minute: parts[0], Hour: parts[1], DayOfMonth: parts[2], Month: parts[3], DayOfWeek: parts[4] };
189
+ }
190
+ if (parts.length === 6) {
191
+ return { Minute: parts[1], Hour: parts[2], DayOfMonth: parts[3], Month: parts[4], DayOfWeek: parts[5] };
192
+ }
193
+ return null;
194
+ }
195
+ /**
196
+ * Attempts to map parsed cron fields to a human-readable string.
197
+ * Returns null when the pattern is not recognized.
198
+ */
199
+ function formatCronParts(p) {
200
+ // Every N minutes: */N * * * *
201
+ if (p.Minute.startsWith('*/') && p.Hour === '*' && p.DayOfMonth === '*' && p.Month === '*' && p.DayOfWeek === '*') {
202
+ const interval = parseInt(p.Minute.slice(2), 10);
203
+ if (interval === 1)
204
+ return 'Every minute';
205
+ return `Every ${interval} minutes`;
206
+ }
207
+ // Every hour at minute M: M * * * *
208
+ if (!p.Minute.includes('*') && !p.Minute.includes('/') && p.Hour === '*' && p.DayOfMonth === '*' && p.Month === '*' && p.DayOfWeek === '*') {
209
+ return 'Every hour';
210
+ }
211
+ // Every N hours: 0 */N * * *
212
+ if (!p.Minute.includes('*') && !p.Minute.includes('/') && p.Hour.startsWith('*/') && p.DayOfMonth === '*') {
213
+ const interval = parseInt(p.Hour.slice(2), 10);
214
+ if (interval === 1)
215
+ return 'Every hour';
216
+ return `Every ${interval} hours`;
217
+ }
218
+ // Specific hour + minute with wildcard or specific day fields
219
+ if (!p.Minute.includes('*') && !p.Minute.includes('/') &&
220
+ !p.Hour.includes('*') && !p.Hour.includes('/') &&
221
+ p.Month === '*') {
222
+ const hour = parseInt(p.Hour, 10);
223
+ const minute = parseInt(p.Minute, 10);
224
+ const timeStr = formatTimeOfDay(hour, minute);
225
+ // Weekly: specific day of week
226
+ if (p.DayOfWeek !== '*' && p.DayOfMonth === '*') {
227
+ const dayName = dayOfWeekToName(p.DayOfWeek);
228
+ return `Weekly on ${dayName} at ${timeStr}`;
229
+ }
230
+ // Monthly: specific day of month
231
+ if (p.DayOfMonth !== '*' && p.DayOfWeek === '*') {
232
+ return `Monthly on day ${p.DayOfMonth} at ${timeStr}`;
233
+ }
234
+ // Daily
235
+ if (p.DayOfMonth === '*' && p.DayOfWeek === '*') {
236
+ return `Daily at ${timeStr}`;
237
+ }
238
+ }
239
+ return null;
240
+ }
241
+ /** Formats hour and minute to 12-hour AM/PM time string */
242
+ function formatTimeOfDay(hour, minute) {
243
+ const ampm = hour >= 12 ? 'PM' : 'AM';
244
+ const h = hour === 0 ? 12 : hour > 12 ? hour - 12 : hour;
245
+ const m = minute.toString().padStart(2, '0');
246
+ return `${h}:${m} ${ampm}`;
247
+ }
248
+ /** Maps day-of-week cron values (0-7 or SUN-SAT) to English names */
249
+ function dayOfWeekToName(dow) {
250
+ const names = {
251
+ '0': 'Sunday', '1': 'Monday', '2': 'Tuesday',
252
+ '3': 'Wednesday', '4': 'Thursday', '5': 'Friday',
253
+ '6': 'Saturday', '7': 'Sunday',
254
+ 'SUN': 'Sunday', 'MON': 'Monday', 'TUE': 'Tuesday',
255
+ 'WED': 'Wednesday', 'THU': 'Thursday', 'FRI': 'Friday',
256
+ 'SAT': 'Saturday',
257
+ };
258
+ return names[dow.toUpperCase()] ?? dow;
259
+ }
260
+ //# sourceMappingURL=classify.format.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"classify.format.js","sourceRoot":"","sources":["../../../../../src/AI/components/autotagging/shared/classify.format.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * @fileoverview Pure formatting/mapping helpers for the Classify (autotagging) sub-app.\n * Extracted from the former monolith so host + tabs share one implementation (DRY).\n * All functions are stateless — no `this`, no DI — so they're safe to import anywhere.\n */\nimport { RunDetailRow } from './classify.types';\n\n/** Locale-formatted integer (e.g. 12345 → \"12,345\"). */\nexport function formatNumber(n: number): string {\n return n.toLocaleString();\n}\n\n/**\n * Derive a human-meaningful display name for a content item.\n *\n * Entity-sourced content items now carry a real per-record `Name` (the source\n * entity's name field — e.g. \"GPT-4\"), so we prefer `Name` directly. Only when a\n * Name is missing (or is a generic source-name placeholder) do we fall back to\n * the first meaningful line of the LLM-generated `Description` to keep rows\n * distinguishable, then to a placeholder.\n *\n * Pure/stateless — safe to call from any render site.\n */\nexport function deriveDisplayName(item: { Name?: string | null; Description?: string | null }): string {\n const name = item?.Name?.trim();\n if (name) {\n return name.length > DISPLAY_NAME_MAX_LEN\n ? `${name.slice(0, DISPLAY_NAME_MAX_LEN).trimEnd()}…`\n : name;\n }\n\n const fromDescription = firstMeaningfulLine(item?.Description);\n if (fromDescription) return fromDescription;\n\n return '(Untitled)';\n}\n\n/** Max length of a derived display name before it is truncated with an ellipsis. */\nconst DISPLAY_NAME_MAX_LEN = 80;\n\n/**\n * Returns the first non-empty, markdown-stripped line of a description, clamped\n * to DISPLAY_NAME_MAX_LEN characters. Returns null when nothing meaningful remains.\n */\nfunction firstMeaningfulLine(description: string | null | undefined): string | null {\n if (!description) return null;\n\n for (const rawLine of description.split(/\\r?\\n/)) {\n const cleaned = stripMarkdown(rawLine);\n if (cleaned.length === 0) continue;\n return cleaned.length > DISPLAY_NAME_MAX_LEN\n ? `${cleaned.slice(0, DISPLAY_NAME_MAX_LEN).trimEnd()}…`\n : cleaned;\n }\n return null;\n}\n\n/** Strip leading markdown markers (#, *, -, >, backticks) and collapse whitespace. */\nfunction stripMarkdown(line: string): string {\n return line\n .replace(/^[#>\\s]*/g, '') // leading heading / blockquote markers + space\n .replace(/^[-*+]\\s+/, '') // leading bullet markers\n .replace(/[`*_~]/g, '') // inline emphasis / code markers\n .replace(/\\s+/g, ' ') // collapse runs of whitespace\n .trim();\n}\n\n/** Compact token count (e.g. 1500 → \"2K\", 2_400_000 → \"2.4M\"). */\nexport function formatTokenCount(tokens: number): string {\n if (tokens >= 1000000) return `${(tokens / 1000000).toFixed(1)}M`;\n if (tokens >= 1000) return `${(tokens / 1000).toFixed(0)}K`;\n return String(tokens);\n}\n\n/** Weight (0.0–1.0) as a percentage string (e.g. 0.42 → \"42%\"). */\nexport function formatWeight(weight: number): string {\n return `${Math.round(weight * 100)}%`;\n}\n\n/** Font size in rem for a tag chip based on weight (0.0–1.0), clamped to 0.7–1.0rem. */\nexport function tagFontSize(weight: number): string {\n const min = 0.7;\n const max = 1.0;\n return `${min + (max - min) * Math.min(1, Math.max(0, weight))}rem`;\n}\n\n/** Short date (e.g. \"Mar 5\"). Returns '' on parse failure. */\nexport function formatShortDate(dateStr: string): string {\n try {\n return new Date(dateStr).toLocaleDateString('en-US', { month: 'short', day: 'numeric' });\n } catch {\n return '';\n }\n}\n\n/** Date + time (e.g. \"Mar 5, 2:05 PM\"). Echoes the input on parse failure. */\nexport function formatDate(dateStr: string): string {\n try {\n return new Date(dateStr).toLocaleDateString('en-US', { month: 'short', day: 'numeric', hour: 'numeric', minute: '2-digit' });\n } catch {\n return dateStr;\n }\n}\n\n/** Human-friendly elapsed duration between two ISO timestamps; open-ended if `end` is null. */\nexport function computeDuration(start: string | null, end: string | null): string {\n if (!start) return '—';\n const s = new Date(start);\n const e = end ? new Date(end) : new Date();\n const ms = e.getTime() - s.getTime();\n if (ms < 1000) return `${ms}ms`;\n if (ms < 60000) return `${Math.round(ms / 1000)}s`;\n const mins = Math.floor(ms / 60000);\n const secs = Math.round((ms % 60000) / 1000);\n return `${mins}m ${secs}s`;\n}\n\n/** Normalize a raw run status to one of the canonical display labels. */\nexport function displayStatus(status: string): string {\n const lower = status.toLowerCase();\n if (lower === 'complete' || lower === 'completed' || lower === 'done') return 'Complete';\n if (lower === 'error' || lower === 'failed') return 'Failed';\n if (lower === 'running' || lower === 'processing') return 'Running';\n return status;\n}\n\n/** Font Awesome icon class for a content source type name. */\nexport function getSourceTypeIcon(typeName: string): string {\n const iconMap: Record<string, string> = {\n 'Web': 'fa-solid fa-globe', 'Web Crawler': 'fa-solid fa-globe',\n 'API': 'fa-solid fa-plug', 'Database': 'fa-solid fa-database',\n 'File': 'fa-solid fa-file-alt', 'Email': 'fa-solid fa-envelope',\n 'RSS': 'fa-solid fa-rss', 'RSS Feed': 'fa-solid fa-rss',\n 'CMS': 'fa-solid fa-newspaper', 'PDF': 'fa-solid fa-file-pdf'\n };\n return iconMap[typeName] ?? 'fa-solid fa-folder';\n}\n\n/** Map raw `MJ: Content Process Run Details` rows to typed RunDetailRow view models. */\nexport function mapRunDetailRecords(records: Record<string, unknown>[]): RunDetailRow[] {\n return records.map(d => {\n const status = String(d['Status'] || 'Pending');\n const statusLower = status.toLowerCase();\n const isFailed = statusLower === 'failed' || statusLower === 'error';\n const isRunning = statusLower === 'running' || statusLower === 'processing';\n const startTime = d['StartTime'] ? new Date(String(d['StartTime'])) : null;\n const endTime = d['EndTime'] ? new Date(String(d['EndTime'])) : null;\n const durationMs = startTime && endTime ? endTime.getTime() - startTime.getTime() : 0;\n const durationStr = durationMs > 60000 ? `${Math.round(durationMs / 60000)}m` : `${Math.round(durationMs / 1000)}s`;\n\n return {\n SourceName: String(d['ContentSource'] || 'Unknown'),\n SourceType: String(d['ContentSourceType'] || ''),\n Status: displayStatus(status),\n StatusClass: isFailed ? 'failed' : isRunning ? 'running' : 'complete',\n ItemsProcessed: Number(d['ItemsProcessed'] || 0),\n ItemsTagged: Number(d['ItemsTagged'] || 0),\n ItemsVectorized: Number(d['ItemsVectorized'] || 0),\n ErrorCount: Number(d['ErrorCount'] || 0),\n TotalTokens: Number(d['TotalTokensUsed'] || 0),\n TotalCost: Number(d['TotalCost'] || 0),\n Duration: durationStr,\n };\n });\n}\n\n// ================================================================\n// Cron-to-Human-Readable Utility\n// ================================================================\n\n/**\n * Converts a 5-part or 6-part cron expression to a human-readable English string.\n *\n * Handles common patterns:\n * `0 * * * *` -> \"Every hour\"\n * `0 2 * * *` -> \"Daily at 2:00 AM\"\n * `0 2 * * 1` -> \"Weekly on Monday at 2:00 AM\"\n * `star/15 * * * *` -> \"Every 15 minutes\" (where star = asterisk)\n * `0 0 1 * *` -> \"Monthly on day 1 at 12:00 AM\"\n *\n * Falls back to returning the raw cron string for unrecognized patterns.\n *\n * @param cron A cron expression string (5 or 6 parts)\n * @returns A human-readable description or the raw cron if unrecognized\n */\nexport function CronToHumanReadable(cron: string): string {\n if (!cron) return 'No schedule';\n\n const parts = cron.trim().split(/\\s+/);\n const p = parseCronParts(parts);\n if (!p) return cron;\n\n return formatCronParts(p) ?? cron;\n}\n\n/** Internal cron field tuple */\ninterface CronFields {\n Minute: string;\n Hour: string;\n DayOfMonth: string;\n Month: string;\n DayOfWeek: string;\n}\n\n/**\n * Parses 5-part or 6-part cron expressions into normalized fields.\n * 6-part expressions have a leading seconds field that is discarded.\n */\nfunction parseCronParts(parts: string[]): CronFields | null {\n if (parts.length === 5) {\n return { Minute: parts[0], Hour: parts[1], DayOfMonth: parts[2], Month: parts[3], DayOfWeek: parts[4] };\n }\n if (parts.length === 6) {\n return { Minute: parts[1], Hour: parts[2], DayOfMonth: parts[3], Month: parts[4], DayOfWeek: parts[5] };\n }\n return null;\n}\n\n/**\n * Attempts to map parsed cron fields to a human-readable string.\n * Returns null when the pattern is not recognized.\n */\nfunction formatCronParts(p: CronFields): string | null {\n // Every N minutes: */N * * * *\n if (p.Minute.startsWith('*/') && p.Hour === '*' && p.DayOfMonth === '*' && p.Month === '*' && p.DayOfWeek === '*') {\n const interval = parseInt(p.Minute.slice(2), 10);\n if (interval === 1) return 'Every minute';\n return `Every ${interval} minutes`;\n }\n\n // Every hour at minute M: M * * * *\n if (!p.Minute.includes('*') && !p.Minute.includes('/') && p.Hour === '*' && p.DayOfMonth === '*' && p.Month === '*' && p.DayOfWeek === '*') {\n return 'Every hour';\n }\n\n // Every N hours: 0 */N * * *\n if (!p.Minute.includes('*') && !p.Minute.includes('/') && p.Hour.startsWith('*/') && p.DayOfMonth === '*') {\n const interval = parseInt(p.Hour.slice(2), 10);\n if (interval === 1) return 'Every hour';\n return `Every ${interval} hours`;\n }\n\n // Specific hour + minute with wildcard or specific day fields\n if (!p.Minute.includes('*') && !p.Minute.includes('/') &&\n !p.Hour.includes('*') && !p.Hour.includes('/') &&\n p.Month === '*') {\n\n const hour = parseInt(p.Hour, 10);\n const minute = parseInt(p.Minute, 10);\n const timeStr = formatTimeOfDay(hour, minute);\n\n // Weekly: specific day of week\n if (p.DayOfWeek !== '*' && p.DayOfMonth === '*') {\n const dayName = dayOfWeekToName(p.DayOfWeek);\n return `Weekly on ${dayName} at ${timeStr}`;\n }\n\n // Monthly: specific day of month\n if (p.DayOfMonth !== '*' && p.DayOfWeek === '*') {\n return `Monthly on day ${p.DayOfMonth} at ${timeStr}`;\n }\n\n // Daily\n if (p.DayOfMonth === '*' && p.DayOfWeek === '*') {\n return `Daily at ${timeStr}`;\n }\n }\n\n return null;\n}\n\n/** Formats hour and minute to 12-hour AM/PM time string */\nfunction formatTimeOfDay(hour: number, minute: number): string {\n const ampm = hour >= 12 ? 'PM' : 'AM';\n const h = hour === 0 ? 12 : hour > 12 ? hour - 12 : hour;\n const m = minute.toString().padStart(2, '0');\n return `${h}:${m} ${ampm}`;\n}\n\n/** Maps day-of-week cron values (0-7 or SUN-SAT) to English names */\nfunction dayOfWeekToName(dow: string): string {\n const names: Record<string, string> = {\n '0': 'Sunday', '1': 'Monday', '2': 'Tuesday',\n '3': 'Wednesday', '4': 'Thursday', '5': 'Friday',\n '6': 'Saturday', '7': 'Sunday',\n 'SUN': 'Sunday', 'MON': 'Monday', 'TUE': 'Tuesday',\n 'WED': 'Wednesday', 'THU': 'Thursday', 'FRI': 'Friday',\n 'SAT': 'Saturday',\n };\n return names[dow.toUpperCase()] ?? dow;\n}\n"]}
@@ -0,0 +1,319 @@
1
+ /**
2
+ * @fileoverview Shared types & interfaces for the Classify (autotagging) sub-app.
3
+ * Extracted verbatim from the former monolith so host, tabs, and dialogs share one contract.
4
+ */
5
+ export type TabName = 'pipeline' | 'sources' | 'types' | 'tags' | 'taxonomy' | 'inbox' | 'health' | 'history';
6
+ export interface NavItem {
7
+ Tab: TabName;
8
+ Icon: string;
9
+ Label: string;
10
+ BadgeText: string;
11
+ BadgeClass: string;
12
+ }
13
+ export interface KPIMetric {
14
+ Label: string;
15
+ Value: number;
16
+ Icon: string;
17
+ Trend: string;
18
+ TrendUp: boolean;
19
+ }
20
+ export interface PipelineStageInfo {
21
+ Name: string;
22
+ Icon: string;
23
+ Status: 'idle' | 'active' | 'complete';
24
+ Count: string;
25
+ }
26
+ export interface FeedItem {
27
+ Name: string;
28
+ SourceName: string;
29
+ Tags: string[];
30
+ TimeAgo: string;
31
+ Status: 'complete' | 'processing' | 'error';
32
+ }
33
+ export interface SourceMini {
34
+ ID: string;
35
+ Name: string;
36
+ Icon: string;
37
+ Meta: string;
38
+ StatusClass: 'active' | 'error' | 'inactive';
39
+ }
40
+ export interface SourceCard {
41
+ ID: string;
42
+ Name: string;
43
+ SourceTypeName: string;
44
+ ContentTypeName: string;
45
+ FileTypeName: string;
46
+ Icon: string;
47
+ StatusClass: 'active' | 'error' | 'inactive';
48
+ StatusLabel: string;
49
+ URL: string;
50
+ ItemCount: number;
51
+ TagCount: number;
52
+ AvgTags: string;
53
+ LastRunAgo: string;
54
+ ContentSourceTypeID: string;
55
+ ContentTypeID: string;
56
+ ContentFileTypeID: string;
57
+ EmbeddingModelID: string;
58
+ VectorIndexID: string;
59
+ EntityID: string;
60
+ EntityDocumentID: string;
61
+ RequiresFileType: boolean;
62
+ /** FK to ScheduledAction entity, null if no schedule configured */
63
+ ScheduledActionID: string | null;
64
+ /** Denormalized name of the linked ScheduledAction */
65
+ ScheduledActionName: string | null;
66
+ /** Human-readable schedule description (parsed from cron) */
67
+ ScheduleDescription: string | null;
68
+ }
69
+ export interface ContentTypeCard {
70
+ ID: string;
71
+ Name: string;
72
+ Description: string;
73
+ AIModelName: string;
74
+ AIModelID: string;
75
+ MinTags: number;
76
+ MaxTags: number;
77
+ SourcesUsing: number;
78
+ ItemsTagged: number;
79
+ RangeLeftPct: number;
80
+ RangeRightPct: number;
81
+ EmbeddingModelID: string;
82
+ VectorIndexID: string;
83
+ }
84
+ export interface TagRow {
85
+ Tag: string;
86
+ UsageCount: number;
87
+ AvgWeight: number;
88
+ BarWidthPct: number;
89
+ TopSource: string;
90
+ FirstSeen: string;
91
+ }
92
+ export interface TagCloudItem {
93
+ Tag: string;
94
+ AvgWeight: number;
95
+ SizeClass: 'large' | '' | 'small';
96
+ }
97
+ export interface TagBySource {
98
+ SourceName: string;
99
+ Count: number;
100
+ }
101
+ export interface RunHistoryRow {
102
+ ID: string;
103
+ Status: string;
104
+ StatusClass: string;
105
+ SourceName: string;
106
+ StartedDisplay: string;
107
+ Duration: string;
108
+ Items: string;
109
+ Tags: string;
110
+ Errors: string;
111
+ ErrorClass: string;
112
+ }
113
+ export interface DropdownOption {
114
+ ID: string;
115
+ Name: string;
116
+ }
117
+ /** G3: Content item duplicate pair for review */
118
+ export interface ContentDuplicateRow {
119
+ ID: string;
120
+ ItemAName: string;
121
+ ItemASource: string;
122
+ ItemBName: string;
123
+ ItemBSource: string;
124
+ SimilarityScore: number;
125
+ DetectionMethod: string;
126
+ Status: 'Pending' | 'Confirmed' | 'Dismissed' | 'Merged';
127
+ }
128
+ /** D2/D3/D8: Per-source detail row for a specific pipeline run */
129
+ export interface RunDetailRow {
130
+ SourceName: string;
131
+ SourceType: string;
132
+ Status: string;
133
+ StatusClass: string;
134
+ ItemsProcessed: number;
135
+ ItemsTagged: number;
136
+ ItemsVectorized: number;
137
+ ErrorCount: number;
138
+ TotalTokens: number;
139
+ TotalCost: number;
140
+ Duration: string;
141
+ }
142
+ export type TaxonomySubTab = 'tree' | 'duplicates' | 'orphans' | 'treemap' | 'audit';
143
+ export interface TaxTreeNode {
144
+ ID: string;
145
+ Name: string;
146
+ DisplayName: string;
147
+ Description: string;
148
+ ParentID: string | null;
149
+ Depth: number;
150
+ Children: TaxTreeNode[];
151
+ ItemCount: number;
152
+ AvgWeight: number;
153
+ HealthColor: 'green' | 'yellow' | 'red';
154
+ IsExpanded: boolean;
155
+ IsSelected: boolean;
156
+ FirstSeen: string;
157
+ }
158
+ export interface TaxDuplicatePair {
159
+ TagA: string;
160
+ TagB: string;
161
+ TagAID: string;
162
+ TagBID: string;
163
+ Similarity: number;
164
+ SeverityClass: 'high' | 'moderate';
165
+ /** True when multiple Tag records share the same name (case-insensitive) */
166
+ IsExactDuplicate: boolean;
167
+ /** How many Tag records share this exact name (only set when IsExactDuplicate) */
168
+ ExactDuplicateCount: number;
169
+ /** All Tag IDs sharing the exact name (only set when IsExactDuplicate) */
170
+ AllIDs: string[];
171
+ }
172
+ export interface TaxOrphanCard {
173
+ ID: string;
174
+ Name: string;
175
+ UsageCount: number;
176
+ AvgWeight: number;
177
+ FirstSeen: string;
178
+ LastSeen: string;
179
+ IsSelected: boolean;
180
+ }
181
+ export interface TaxTreemapCell {
182
+ ID: string;
183
+ Name: string;
184
+ ItemCount: number;
185
+ ColorClass: string;
186
+ RowSpan: number;
187
+ }
188
+ /** Supported audit action types — matches DB Action values (lowercased) */
189
+ export type TaxAuditAction = 'created' | 'merged' | 'moved' | 'deleted' | 'renamed' | 'deprecated' | 'descriptionchanged' | 'reactivated' | 'split';
190
+ export interface TaxAuditEvent {
191
+ Type: TaxAuditAction;
192
+ Description: string;
193
+ TagRef: string;
194
+ User: string;
195
+ Timestamp: string;
196
+ DayHeader: string;
197
+ }
198
+ export interface TaxHealthStat {
199
+ Total: number;
200
+ Healthy: number;
201
+ NeedAttention: number;
202
+ Orphaned: number;
203
+ Duplicates: number;
204
+ }
205
+ export interface WeightedTag {
206
+ Tag: string;
207
+ Weight: number;
208
+ }
209
+ /** Status value for embedding or tagging pipeline phases */
210
+ export type ItemPipelineStatus = 'Complete' | 'Processing' | 'Failed' | 'Pending';
211
+ export interface ContentItemDetail {
212
+ ID: string;
213
+ Name: string;
214
+ SourceName: string;
215
+ SourceTypeName: string;
216
+ ContentTypeName: string;
217
+ FileTypeName: string;
218
+ URL: string;
219
+ TextContent: string;
220
+ Checksum: string;
221
+ Tags: WeightedTag[];
222
+ CreatedAt: string;
223
+ UpdatedAt: string;
224
+ ContentSourceID: string;
225
+ ContentSourceTypeID: string;
226
+ StatusDot: 'complete' | 'processing' | 'error';
227
+ TagCount: number;
228
+ /** Whether this source type uses content/file type (false for Entity sources) */
229
+ RequiresContentType: boolean;
230
+ /** Entity record ID if source is entity type (for direct entity navigation) */
231
+ EntityRecordID: string | null;
232
+ /** Entity name if source is entity type */
233
+ EntityName: string | null;
234
+ /** Embedding pipeline status for this content item */
235
+ EmbeddingStatus: ItemPipelineStatus;
236
+ /** Tagging pipeline status for this content item */
237
+ TaggingStatus: ItemPipelineStatus;
238
+ }
239
+ export interface SourceDetailInfo {
240
+ ID: string;
241
+ Name: string;
242
+ SourceTypeName: string;
243
+ FileTypeName: string;
244
+ ContentTypeName: string;
245
+ RequiresFileType: boolean;
246
+ StatusClass: 'active' | 'error' | 'inactive';
247
+ StatusLabel: string;
248
+ Icon: string;
249
+ URL: string;
250
+ EmbeddingModelName: string;
251
+ VectorIndexName: string;
252
+ ItemCount: number;
253
+ TagCount: number;
254
+ AvgTags: string;
255
+ LastRunAgo: string;
256
+ ErrorCount: number;
257
+ ContentItems: ContentItemDetail[];
258
+ RunHistory: RunHistoryRow[];
259
+ }
260
+ /**
261
+ * A single content-item row shown in {@link ClassifyItemGridComponent}. Built from
262
+ * a narrow `ResultType:'simple'` projection of `MJ: Content Items` — no BaseEntity.
263
+ */
264
+ export interface ClassifyItemGridRow {
265
+ ID: string;
266
+ DisplayName: string;
267
+ SourceName: string;
268
+ TagCount: number;
269
+ EmbeddingStatus: string;
270
+ TaggingStatus: string;
271
+ UpdatedAt: string;
272
+ /** Raw ISO timestamp used for sorting (the grid renders UpdatedAt formatted). */
273
+ UpdatedAtRaw: string;
274
+ }
275
+ /**
276
+ * A single tag on a content item, enriched with the LLM provenance fields
277
+ * (Reasoning + AIPromptRunID) surfaced in {@link ClassifyItemDrilldownComponent}.
278
+ */
279
+ export interface ClassifyDrilldownTag {
280
+ Tag: string;
281
+ Weight: number;
282
+ /** The LLM's justification for this tag, when captured at extraction time. */
283
+ Reasoning: string | null;
284
+ /** FK to the AI Prompt Run that produced this tag (provenance link). */
285
+ AIPromptRunID: string | null;
286
+ CreatedAt: string;
287
+ }
288
+ /** A single provenance fact shown in the drilldown's Provenance section. */
289
+ export interface ClassifyProvenanceFact {
290
+ Label: string;
291
+ Value: string;
292
+ Icon: string;
293
+ /** Optional record reference the user can open (entity + id). */
294
+ RecordEntity?: string;
295
+ RecordID?: string;
296
+ }
297
+ /** A single audit-trail entry shown in the drilldown's Audit section. */
298
+ export interface ClassifyAuditEntry {
299
+ Label: string;
300
+ Timestamp: string;
301
+ Icon: string;
302
+ }
303
+ export type FormMode = 'none' | 'add-source' | 'edit-source' | 'add-type' | 'edit-type';
304
+ /** Per-disposition tally for the dry-run summary line. */
305
+ export interface DryRunDispositionCount {
306
+ AutoApply: number;
307
+ RouteToInbox: number;
308
+ CreateNew: number;
309
+ Reject: number;
310
+ }
311
+ /** Illustrative token/cost estimate shown on the dry-run preview banner. */
312
+ export interface DryRunEstimate {
313
+ ItemsSampled: number;
314
+ /** Rough total token estimate (clearly marked illustrative in the UI). */
315
+ EstimatedTokens: number;
316
+ /** Rough dollar cost estimate derived from EstimatedTokens. */
317
+ EstimatedCost: number;
318
+ }
319
+ //# sourceMappingURL=classify.types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"classify.types.d.ts","sourceRoot":"","sources":["../../../../../src/AI/components/autotagging/shared/classify.types.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,6 @@
1
+ /**
2
+ * @fileoverview Shared types & interfaces for the Classify (autotagging) sub-app.
3
+ * Extracted verbatim from the former monolith so host, tabs, and dialogs share one contract.
4
+ */
5
+ export {};
6
+ //# sourceMappingURL=classify.types.js.map