@memberjunction/ng-core-entity-forms 6.1.0-edge.2 → 6.1.0-edge.3

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 (489) hide show
  1. package/LICENSE +180 -4
  2. package/dist/lib/custom/AIAgentCategories/ai-agent-category-header.panel.d.ts +12 -0
  3. package/dist/lib/custom/AIAgentCategories/ai-agent-category-header.panel.d.ts.map +1 -0
  4. package/dist/lib/custom/AIAgentCategories/ai-agent-category-header.panel.js +138 -0
  5. package/dist/lib/custom/AIAgentCategories/ai-agent-category-header.panel.js.map +1 -0
  6. package/dist/lib/custom/AIAgentCategories/ai-agent-category-overview.panel.d.ts +20 -0
  7. package/dist/lib/custom/AIAgentCategories/ai-agent-category-overview.panel.d.ts.map +1 -0
  8. package/dist/lib/custom/AIAgentCategories/ai-agent-category-overview.panel.js +173 -0
  9. package/dist/lib/custom/AIAgentCategories/ai-agent-category-overview.panel.js.map +1 -0
  10. package/dist/lib/custom/Actions/action-execution-log-form.component.js +193 -182
  11. package/dist/lib/custom/Actions/action-execution-log-form.component.js.map +1 -1
  12. package/dist/lib/custom/Companies/company-header.panel.d.ts +12 -0
  13. package/dist/lib/custom/Companies/company-header.panel.d.ts.map +1 -0
  14. package/dist/lib/custom/Companies/company-header.panel.js +190 -0
  15. package/dist/lib/custom/Companies/company-header.panel.js.map +1 -0
  16. package/dist/lib/custom/Companies/company-overview.panel.d.ts +21 -0
  17. package/dist/lib/custom/Companies/company-overview.panel.d.ts.map +1 -0
  18. package/dist/lib/custom/Companies/company-overview.panel.js +180 -0
  19. package/dist/lib/custom/Companies/company-overview.panel.js.map +1 -0
  20. package/dist/lib/custom/Conversations/conversation-header.panel.d.ts +12 -0
  21. package/dist/lib/custom/Conversations/conversation-header.panel.d.ts.map +1 -0
  22. package/dist/lib/custom/Conversations/conversation-header.panel.js +150 -0
  23. package/dist/lib/custom/Conversations/conversation-header.panel.js.map +1 -0
  24. package/dist/lib/custom/Conversations/conversation-overview.panel.d.ts +23 -0
  25. package/dist/lib/custom/Conversations/conversation-overview.panel.d.ts.map +1 -0
  26. package/dist/lib/custom/Conversations/conversation-overview.panel.js +199 -0
  27. package/dist/lib/custom/Conversations/conversation-overview.panel.js.map +1 -0
  28. package/dist/lib/custom/Employees/employee-header.panel.d.ts +12 -0
  29. package/dist/lib/custom/Employees/employee-header.panel.d.ts.map +1 -0
  30. package/dist/lib/custom/Employees/employee-header.panel.js +180 -0
  31. package/dist/lib/custom/Employees/employee-header.panel.js.map +1 -0
  32. package/dist/lib/custom/Employees/employee-overview.panel.d.ts +21 -0
  33. package/dist/lib/custom/Employees/employee-overview.panel.d.ts.map +1 -0
  34. package/dist/lib/custom/Employees/employee-overview.panel.js +180 -0
  35. package/dist/lib/custom/Employees/employee-overview.panel.js.map +1 -0
  36. package/dist/lib/custom/Entities/entity-form.component.d.ts +4 -1
  37. package/dist/lib/custom/Entities/entity-form.component.d.ts.map +1 -1
  38. package/dist/lib/custom/Entities/entity-form.component.js +216 -173
  39. package/dist/lib/custom/Entities/entity-form.component.js.map +1 -1
  40. package/dist/lib/custom/Files/file-form.component.d.ts +40 -0
  41. package/dist/lib/custom/Files/file-form.component.d.ts.map +1 -0
  42. package/dist/lib/custom/Files/file-form.component.js +654 -0
  43. package/dist/lib/custom/Files/file-form.component.js.map +1 -0
  44. package/dist/lib/custom/HierarchyPanels/hierarchy-form-panels.d.ts +101 -0
  45. package/dist/lib/custom/HierarchyPanels/hierarchy-form-panels.d.ts.map +1 -0
  46. package/dist/lib/custom/HierarchyPanels/hierarchy-form-panels.js +1202 -0
  47. package/dist/lib/custom/HierarchyPanels/hierarchy-form-panels.js.map +1 -0
  48. package/dist/lib/custom/Users/user-header.panel.d.ts +12 -0
  49. package/dist/lib/custom/Users/user-header.panel.d.ts.map +1 -0
  50. package/dist/lib/custom/Users/user-header.panel.js +164 -0
  51. package/dist/lib/custom/Users/user-header.panel.js.map +1 -0
  52. package/dist/lib/custom/Users/user-overview.panel.d.ts +19 -0
  53. package/dist/lib/custom/Users/user-overview.panel.d.ts.map +1 -0
  54. package/dist/lib/custom/Users/user-overview.panel.js +172 -0
  55. package/dist/lib/custom/Users/user-overview.panel.js.map +1 -0
  56. package/dist/lib/custom/ai-agent-run/ai-agent-run-step-detail.component.d.ts +18 -1
  57. package/dist/lib/custom/ai-agent-run/ai-agent-run-step-detail.component.d.ts.map +1 -1
  58. package/dist/lib/custom/ai-agent-run/ai-agent-run-step-detail.component.js +118 -75
  59. package/dist/lib/custom/ai-agent-run/ai-agent-run-step-detail.component.js.map +1 -1
  60. package/dist/lib/custom/ai-agent-run/ai-agent-run-timeline.component.d.ts +46 -1
  61. package/dist/lib/custom/ai-agent-run/ai-agent-run-timeline.component.d.ts.map +1 -1
  62. package/dist/lib/custom/ai-agent-run/ai-agent-run-timeline.component.js +141 -18
  63. package/dist/lib/custom/ai-agent-run/ai-agent-run-timeline.component.js.map +1 -1
  64. package/dist/lib/custom/ai-agent-run/ai-agent-run.component.js +4 -4
  65. package/dist/lib/custom/ai-agent-run/ai-agent-run.component.js.map +1 -1
  66. package/dist/lib/custom/ai-agent-run/run-tree-timeline-projection.d.ts +9 -1
  67. package/dist/lib/custom/ai-agent-run/run-tree-timeline-projection.d.ts.map +1 -1
  68. package/dist/lib/custom/ai-agent-run/run-tree-timeline-projection.js +85 -8
  69. package/dist/lib/custom/ai-agent-run/run-tree-timeline-projection.js.map +1 -1
  70. package/dist/lib/custom/custom-forms.module.d.ts +33 -29
  71. package/dist/lib/custom/custom-forms.module.d.ts.map +1 -1
  72. package/dist/lib/custom/custom-forms.module.js +23 -8
  73. package/dist/lib/custom/custom-forms.module.js.map +1 -1
  74. package/dist/lib/generated/Entities/MJAIAction/mjaiaction.form.component.js +3 -3
  75. package/dist/lib/generated/Entities/MJAIAction/mjaiaction.form.component.js.map +1 -1
  76. package/dist/lib/generated/Entities/MJAIAgent/mjaiagent.form.component.js +300 -294
  77. package/dist/lib/generated/Entities/MJAIAgent/mjaiagent.form.component.js.map +1 -1
  78. package/dist/lib/generated/Entities/MJAIAgentCategory/mjaiagentcategory.form.component.js +31 -23
  79. package/dist/lib/generated/Entities/MJAIAgentCategory/mjaiagentcategory.form.component.js.map +1 -1
  80. package/dist/lib/generated/Entities/MJAIAgentChannel/mjaiagentchannel.form.component.js +3 -3
  81. package/dist/lib/generated/Entities/MJAIAgentChannel/mjaiagentchannel.form.component.js.map +1 -1
  82. package/dist/lib/generated/Entities/MJAIAgentNote/mjaiagentnote.form.component.js +14 -16
  83. package/dist/lib/generated/Entities/MJAIAgentNote/mjaiagentnote.form.component.js.map +1 -1
  84. package/dist/lib/generated/Entities/MJAIAgentNoteType/mjaiagentnotetype.form.component.js +2 -2
  85. package/dist/lib/generated/Entities/MJAIAgentNoteType/mjaiagentnotetype.form.component.js.map +1 -1
  86. package/dist/lib/generated/Entities/MJAIAgentRequestType/mjaiagentrequesttype.form.component.js +2 -2
  87. package/dist/lib/generated/Entities/MJAIAgentRequestType/mjaiagentrequesttype.form.component.js.map +1 -1
  88. package/dist/lib/generated/Entities/MJAIAgentRun/mjaiagentrun.form.component.js +123 -117
  89. package/dist/lib/generated/Entities/MJAIAgentRun/mjaiagentrun.form.component.js.map +1 -1
  90. package/dist/lib/generated/Entities/MJAIAgentRunStep/mjaiagentrunstep.form.component.js +35 -27
  91. package/dist/lib/generated/Entities/MJAIAgentRunStep/mjaiagentrunstep.form.component.js.map +1 -1
  92. package/dist/lib/generated/Entities/MJAIAgentSession/mjaiagentsession.form.component.js +47 -49
  93. package/dist/lib/generated/Entities/MJAIAgentSession/mjaiagentsession.form.component.js.map +1 -1
  94. package/dist/lib/generated/Entities/MJAIAgentSessionBridge/mjaiagentsessionbridge.form.component.js +2 -2
  95. package/dist/lib/generated/Entities/MJAIAgentSessionBridge/mjaiagentsessionbridge.form.component.js.map +1 -1
  96. package/dist/lib/generated/Entities/MJAIAgentStep/mjaiagentstep.form.component.js +3 -3
  97. package/dist/lib/generated/Entities/MJAIAgentStep/mjaiagentstep.form.component.js.map +1 -1
  98. package/dist/lib/generated/Entities/MJAIAgentType/mjaiagenttype.form.component.js +3 -3
  99. package/dist/lib/generated/Entities/MJAIAgentType/mjaiagenttype.form.component.js.map +1 -1
  100. package/dist/lib/generated/Entities/MJAIArchitecture/mjaiarchitecture.form.component.js +30 -22
  101. package/dist/lib/generated/Entities/MJAIArchitecture/mjaiarchitecture.form.component.js.map +1 -1
  102. package/dist/lib/generated/Entities/MJAIBridgeProvider/mjaibridgeprovider.form.component.js +4 -4
  103. package/dist/lib/generated/Entities/MJAIBridgeProvider/mjaibridgeprovider.form.component.js.map +1 -1
  104. package/dist/lib/generated/Entities/MJAIClientToolDefinition/mjaiclienttooldefinition.form.component.js +2 -2
  105. package/dist/lib/generated/Entities/MJAIClientToolDefinition/mjaiclienttooldefinition.form.component.js.map +1 -1
  106. package/dist/lib/generated/Entities/MJAIConfiguration/mjaiconfiguration.form.component.js +72 -64
  107. package/dist/lib/generated/Entities/MJAIConfiguration/mjaiconfiguration.form.component.js.map +1 -1
  108. package/dist/lib/generated/Entities/MJAIModality/mjaimodality.form.component.js +8 -8
  109. package/dist/lib/generated/Entities/MJAIModality/mjaimodality.form.component.js.map +1 -1
  110. package/dist/lib/generated/Entities/MJAIModel/mjaimodel.form.component.js +28 -28
  111. package/dist/lib/generated/Entities/MJAIModel/mjaimodel.form.component.js.map +1 -1
  112. package/dist/lib/generated/Entities/MJAIModelPriceType/mjaimodelpricetype.form.component.js +2 -2
  113. package/dist/lib/generated/Entities/MJAIModelPriceType/mjaimodelpricetype.form.component.js.map +1 -1
  114. package/dist/lib/generated/Entities/MJAIModelPriceUnitType/mjaimodelpriceunittype.form.component.js +2 -2
  115. package/dist/lib/generated/Entities/MJAIModelPriceUnitType/mjaimodelpriceunittype.form.component.js.map +1 -1
  116. package/dist/lib/generated/Entities/MJAIModelType/mjaimodeltype.form.component.js +3 -3
  117. package/dist/lib/generated/Entities/MJAIModelType/mjaimodeltype.form.component.js.map +1 -1
  118. package/dist/lib/generated/Entities/MJAIModelVendor/mjaimodelvendor.form.component.js +2 -2
  119. package/dist/lib/generated/Entities/MJAIModelVendor/mjaimodelvendor.form.component.js.map +1 -1
  120. package/dist/lib/generated/Entities/MJAIPrompt/mjaiprompt.form.component.js +171 -173
  121. package/dist/lib/generated/Entities/MJAIPrompt/mjaiprompt.form.component.js.map +1 -1
  122. package/dist/lib/generated/Entities/MJAIPromptCategory/mjaipromptcategory.form.component.d.ts.map +1 -1
  123. package/dist/lib/generated/Entities/MJAIPromptCategory/mjaipromptcategory.form.component.js +33 -19
  124. package/dist/lib/generated/Entities/MJAIPromptCategory/mjaipromptcategory.form.component.js.map +1 -1
  125. package/dist/lib/generated/Entities/MJAIPromptModel/mjaipromptmodel.form.component.js +2 -2
  126. package/dist/lib/generated/Entities/MJAIPromptModel/mjaipromptmodel.form.component.js.map +1 -1
  127. package/dist/lib/generated/Entities/MJAIPromptRun/mjaipromptrun.form.component.js +85 -79
  128. package/dist/lib/generated/Entities/MJAIPromptRun/mjaipromptrun.form.component.js.map +1 -1
  129. package/dist/lib/generated/Entities/MJAIPromptRunMedia/mjaipromptrunmedia.form.component.js +2 -2
  130. package/dist/lib/generated/Entities/MJAIPromptRunMedia/mjaipromptrunmedia.form.component.js.map +1 -1
  131. package/dist/lib/generated/Entities/MJAIPromptType/mjaiprompttype.form.component.js +2 -2
  132. package/dist/lib/generated/Entities/MJAIPromptType/mjaiprompttype.form.component.js.map +1 -1
  133. package/dist/lib/generated/Entities/MJAISkill/mjaiskill.form.component.js +7 -7
  134. package/dist/lib/generated/Entities/MJAISkill/mjaiskill.form.component.js.map +1 -1
  135. package/dist/lib/generated/Entities/MJAIVendor/mjaivendor.form.component.js +11 -11
  136. package/dist/lib/generated/Entities/MJAIVendor/mjaivendor.form.component.js.map +1 -1
  137. package/dist/lib/generated/Entities/MJAIVendorTypeDefinition/mjaivendortypedefinition.form.component.js +3 -3
  138. package/dist/lib/generated/Entities/MJAIVendorTypeDefinition/mjaivendortypedefinition.form.component.js.map +1 -1
  139. package/dist/lib/generated/Entities/MJAPIApplication/mjapiapplication.form.component.js +4 -4
  140. package/dist/lib/generated/Entities/MJAPIApplication/mjapiapplication.form.component.js.map +1 -1
  141. package/dist/lib/generated/Entities/MJAPIKey/mjapikey.form.component.js +4 -4
  142. package/dist/lib/generated/Entities/MJAPIKey/mjapikey.form.component.js.map +1 -1
  143. package/dist/lib/generated/Entities/MJAPIScope/mjapiscope.form.component.js +36 -28
  144. package/dist/lib/generated/Entities/MJAPIScope/mjapiscope.form.component.js.map +1 -1
  145. package/dist/lib/generated/Entities/MJAction/mjaction.form.component.js +108 -100
  146. package/dist/lib/generated/Entities/MJAction/mjaction.form.component.js.map +1 -1
  147. package/dist/lib/generated/Entities/MJActionCategory/mjactioncategory.form.component.js +36 -28
  148. package/dist/lib/generated/Entities/MJActionCategory/mjactioncategory.form.component.js.map +1 -1
  149. package/dist/lib/generated/Entities/MJActionContextType/mjactioncontexttype.form.component.js +2 -2
  150. package/dist/lib/generated/Entities/MJActionContextType/mjactioncontexttype.form.component.js.map +1 -1
  151. package/dist/lib/generated/Entities/MJActionExecutionLog/mjactionexecutionlog.form.component.js +3 -3
  152. package/dist/lib/generated/Entities/MJActionExecutionLog/mjactionexecutionlog.form.component.js.map +1 -1
  153. package/dist/lib/generated/Entities/MJActionFilter/mjactionfilter.form.component.js +2 -2
  154. package/dist/lib/generated/Entities/MJActionFilter/mjactionfilter.form.component.js.map +1 -1
  155. package/dist/lib/generated/Entities/MJActionParam/mjactionparam.form.component.js +2 -2
  156. package/dist/lib/generated/Entities/MJActionParam/mjactionparam.form.component.js.map +1 -1
  157. package/dist/lib/generated/Entities/MJApplication/mjapplication.form.component.js +11 -11
  158. package/dist/lib/generated/Entities/MJApplication/mjapplication.form.component.js.map +1 -1
  159. package/dist/lib/generated/Entities/MJArchiveConfiguration/mjarchiveconfiguration.form.component.js +3 -3
  160. package/dist/lib/generated/Entities/MJArchiveConfiguration/mjarchiveconfiguration.form.component.js.map +1 -1
  161. package/dist/lib/generated/Entities/MJArchiveRun/mjarchiverun.form.component.js +2 -2
  162. package/dist/lib/generated/Entities/MJArchiveRun/mjarchiverun.form.component.js.map +1 -1
  163. package/dist/lib/generated/Entities/MJArtifact/mjartifact.form.component.js +4 -4
  164. package/dist/lib/generated/Entities/MJArtifact/mjartifact.form.component.js.map +1 -1
  165. package/dist/lib/generated/Entities/MJArtifactType/mjartifacttype.form.component.js +48 -40
  166. package/dist/lib/generated/Entities/MJArtifactType/mjartifacttype.form.component.js.map +1 -1
  167. package/dist/lib/generated/Entities/MJArtifactVersion/mjartifactversion.form.component.js +7 -7
  168. package/dist/lib/generated/Entities/MJArtifactVersion/mjartifactversion.form.component.js.map +1 -1
  169. package/dist/lib/generated/Entities/MJAuditLogType/mjauditlogtype.form.component.js +29 -21
  170. package/dist/lib/generated/Entities/MJAuditLogType/mjauditlogtype.form.component.js.map +1 -1
  171. package/dist/lib/generated/Entities/MJAuthenticationProvider/mjauthenticationprovider.form.component.d.ts +10 -0
  172. package/dist/lib/generated/Entities/MJAuthenticationProvider/mjauthenticationprovider.form.component.d.ts.map +1 -0
  173. package/dist/lib/generated/Entities/MJAuthenticationProvider/mjauthenticationprovider.form.component.js +108 -0
  174. package/dist/lib/generated/Entities/MJAuthenticationProvider/mjauthenticationprovider.form.component.js.map +1 -0
  175. package/dist/lib/generated/Entities/MJAuthorization/mjauthorization.form.component.js +50 -42
  176. package/dist/lib/generated/Entities/MJAuthorization/mjauthorization.form.component.js.map +1 -1
  177. package/dist/lib/generated/Entities/MJClusterAnalysis/mjclusteranalysis.form.component.js +2 -2
  178. package/dist/lib/generated/Entities/MJClusterAnalysis/mjclusteranalysis.form.component.js.map +1 -1
  179. package/dist/lib/generated/Entities/MJCollection/mjcollection.form.component.js +44 -36
  180. package/dist/lib/generated/Entities/MJCollection/mjcollection.form.component.js.map +1 -1
  181. package/dist/lib/generated/Entities/MJCommunicationBaseMessageType/mjcommunicationbasemessagetype.form.component.js +3 -3
  182. package/dist/lib/generated/Entities/MJCommunicationBaseMessageType/mjcommunicationbasemessagetype.form.component.js.map +1 -1
  183. package/dist/lib/generated/Entities/MJCommunicationProvider/mjcommunicationprovider.form.component.js +2 -2
  184. package/dist/lib/generated/Entities/MJCommunicationProvider/mjcommunicationprovider.form.component.js.map +1 -1
  185. package/dist/lib/generated/Entities/MJCommunicationProviderMessageType/mjcommunicationprovidermessagetype.form.component.js +2 -2
  186. package/dist/lib/generated/Entities/MJCommunicationProviderMessageType/mjcommunicationprovidermessagetype.form.component.js.map +1 -1
  187. package/dist/lib/generated/Entities/MJCommunicationRun/mjcommunicationrun.form.component.js +2 -2
  188. package/dist/lib/generated/Entities/MJCommunicationRun/mjcommunicationrun.form.component.js.map +1 -1
  189. package/dist/lib/generated/Entities/MJCompany/mjcompany.form.component.js +7 -7
  190. package/dist/lib/generated/Entities/MJCompany/mjcompany.form.component.js.map +1 -1
  191. package/dist/lib/generated/Entities/MJCompanyIntegration/mjcompanyintegration.form.component.d.ts.map +1 -1
  192. package/dist/lib/generated/Entities/MJCompanyIntegration/mjcompanyintegration.form.component.js +32 -14
  193. package/dist/lib/generated/Entities/MJCompanyIntegration/mjcompanyintegration.form.component.js.map +1 -1
  194. package/dist/lib/generated/Entities/MJCompanyIntegrationEntityMap/mjcompanyintegrationentitymap.form.component.js +3 -3
  195. package/dist/lib/generated/Entities/MJCompanyIntegrationEntityMap/mjcompanyintegrationentitymap.form.component.js.map +1 -1
  196. package/dist/lib/generated/Entities/MJCompanyIntegrationRun/mjcompanyintegrationrun.form.component.d.ts.map +1 -1
  197. package/dist/lib/generated/Entities/MJCompanyIntegrationRun/mjcompanyintegrationrun.form.component.js +44 -26
  198. package/dist/lib/generated/Entities/MJCompanyIntegrationRun/mjcompanyintegrationrun.form.component.js.map +1 -1
  199. package/dist/lib/generated/Entities/MJCompanyIntegrationRunDetail/mjcompanyintegrationrundetail.form.component.js +2 -2
  200. package/dist/lib/generated/Entities/MJCompanyIntegrationRunDetail/mjcompanyintegrationrundetail.form.component.js.map +1 -1
  201. package/dist/lib/generated/Entities/MJComponent/mjcomponent.form.component.js +5 -5
  202. package/dist/lib/generated/Entities/MJComponent/mjcomponent.form.component.js.map +1 -1
  203. package/dist/lib/generated/Entities/MJComponentLibrary/mjcomponentlibrary.form.component.js +2 -2
  204. package/dist/lib/generated/Entities/MJComponentLibrary/mjcomponentlibrary.form.component.js.map +1 -1
  205. package/dist/lib/generated/Entities/MJComponentRegistry/mjcomponentregistry.form.component.js +2 -2
  206. package/dist/lib/generated/Entities/MJComponentRegistry/mjcomponentregistry.form.component.js.map +1 -1
  207. package/dist/lib/generated/Entities/MJContentFileType/mjcontentfiletype.form.component.js +3 -3
  208. package/dist/lib/generated/Entities/MJContentFileType/mjcontentfiletype.form.component.js.map +1 -1
  209. package/dist/lib/generated/Entities/MJContentItem/mjcontentitem.form.component.js +60 -52
  210. package/dist/lib/generated/Entities/MJContentItem/mjcontentitem.form.component.js.map +1 -1
  211. package/dist/lib/generated/Entities/MJContentItemChunk/mjcontentitemchunk.form.component.js +28 -20
  212. package/dist/lib/generated/Entities/MJContentItemChunk/mjcontentitemchunk.form.component.js.map +1 -1
  213. package/dist/lib/generated/Entities/MJContentProcessRun/mjcontentprocessrun.form.component.js +2 -2
  214. package/dist/lib/generated/Entities/MJContentProcessRun/mjcontentprocessrun.form.component.js.map +1 -1
  215. package/dist/lib/generated/Entities/MJContentProcessRunDetail/mjcontentprocessrundetail.form.component.js +2 -2
  216. package/dist/lib/generated/Entities/MJContentProcessRunDetail/mjcontentprocessrundetail.form.component.js.map +1 -1
  217. package/dist/lib/generated/Entities/MJContentSource/mjcontentsource.form.component.js +6 -6
  218. package/dist/lib/generated/Entities/MJContentSource/mjcontentsource.form.component.js.map +1 -1
  219. package/dist/lib/generated/Entities/MJContentSourceType/mjcontentsourcetype.form.component.js +4 -4
  220. package/dist/lib/generated/Entities/MJContentSourceType/mjcontentsourcetype.form.component.js.map +1 -1
  221. package/dist/lib/generated/Entities/MJContentType/mjcontenttype.form.component.js +3 -3
  222. package/dist/lib/generated/Entities/MJContentType/mjcontenttype.form.component.js.map +1 -1
  223. package/dist/lib/generated/Entities/MJConversation/mjconversation.form.component.js +77 -79
  224. package/dist/lib/generated/Entities/MJConversation/mjconversation.form.component.js.map +1 -1
  225. package/dist/lib/generated/Entities/MJConversationArtifact/mjconversationartifact.form.component.js +4 -4
  226. package/dist/lib/generated/Entities/MJConversationArtifact/mjconversationartifact.form.component.js.map +1 -1
  227. package/dist/lib/generated/Entities/MJConversationArtifactVersion/mjconversationartifactversion.form.component.js +2 -2
  228. package/dist/lib/generated/Entities/MJConversationArtifactVersion/mjconversationartifactversion.form.component.js.map +1 -1
  229. package/dist/lib/generated/Entities/MJConversationDetail/mjconversationdetail.form.component.js +76 -68
  230. package/dist/lib/generated/Entities/MJConversationDetail/mjconversationdetail.form.component.js.map +1 -1
  231. package/dist/lib/generated/Entities/MJCountry/mjcountry.form.component.js +3 -3
  232. package/dist/lib/generated/Entities/MJCountry/mjcountry.form.component.js.map +1 -1
  233. package/dist/lib/generated/Entities/MJCredential/mjcredential.form.component.d.ts.map +1 -1
  234. package/dist/lib/generated/Entities/MJCredential/mjcredential.form.component.js +42 -24
  235. package/dist/lib/generated/Entities/MJCredential/mjcredential.form.component.js.map +1 -1
  236. package/dist/lib/generated/Entities/MJCredentialCategory/mjcredentialcategory.form.component.d.ts.map +1 -1
  237. package/dist/lib/generated/Entities/MJCredentialCategory/mjcredentialcategory.form.component.js +33 -19
  238. package/dist/lib/generated/Entities/MJCredentialCategory/mjcredentialcategory.form.component.js.map +1 -1
  239. package/dist/lib/generated/Entities/MJCredentialType/mjcredentialtype.form.component.js +6 -6
  240. package/dist/lib/generated/Entities/MJCredentialType/mjcredentialtype.form.component.js.map +1 -1
  241. package/dist/lib/generated/Entities/MJDashboard/mjdashboard.form.component.js +5 -5
  242. package/dist/lib/generated/Entities/MJDashboard/mjdashboard.form.component.js.map +1 -1
  243. package/dist/lib/generated/Entities/MJDashboardCategory/mjdashboardcategory.form.component.d.ts.map +1 -1
  244. package/dist/lib/generated/Entities/MJDashboardCategory/mjdashboardcategory.form.component.js +47 -33
  245. package/dist/lib/generated/Entities/MJDashboardCategory/mjdashboardcategory.form.component.js.map +1 -1
  246. package/dist/lib/generated/Entities/MJDataContext/mjdatacontext.form.component.js +3 -3
  247. package/dist/lib/generated/Entities/MJDataContext/mjdatacontext.form.component.js.map +1 -1
  248. package/dist/lib/generated/Entities/MJDataset/mjdataset.form.component.js +2 -2
  249. package/dist/lib/generated/Entities/MJDataset/mjdataset.form.component.js.map +1 -1
  250. package/dist/lib/generated/Entities/MJDuplicateRun/mjduplicaterun.form.component.js +2 -2
  251. package/dist/lib/generated/Entities/MJDuplicateRun/mjduplicaterun.form.component.js.map +1 -1
  252. package/dist/lib/generated/Entities/MJDuplicateRunDetail/mjduplicaterundetail.form.component.js +2 -2
  253. package/dist/lib/generated/Entities/MJDuplicateRunDetail/mjduplicaterundetail.form.component.js.map +1 -1
  254. package/dist/lib/generated/Entities/MJEmployee/mjemployee.form.component.js +6 -6
  255. package/dist/lib/generated/Entities/MJEmployee/mjemployee.form.component.js.map +1 -1
  256. package/dist/lib/generated/Entities/MJEncryptionAlgorithm/mjencryptionalgorithm.form.component.js +2 -2
  257. package/dist/lib/generated/Entities/MJEncryptionAlgorithm/mjencryptionalgorithm.form.component.js.map +1 -1
  258. package/dist/lib/generated/Entities/MJEncryptionKey/mjencryptionkey.form.component.js +2 -2
  259. package/dist/lib/generated/Entities/MJEncryptionKey/mjencryptionkey.form.component.js.map +1 -1
  260. package/dist/lib/generated/Entities/MJEncryptionKeySource/mjencryptionkeysource.form.component.js +2 -2
  261. package/dist/lib/generated/Entities/MJEncryptionKeySource/mjencryptionkeysource.form.component.js.map +1 -1
  262. package/dist/lib/generated/Entities/MJEntity/mjentity.form.component.d.ts.map +1 -1
  263. package/dist/lib/generated/Entities/MJEntity/mjentity.form.component.js +604 -530
  264. package/dist/lib/generated/Entities/MJEntity/mjentity.form.component.js.map +1 -1
  265. package/dist/lib/generated/Entities/MJEntityAction/mjentityaction.form.component.js +5 -5
  266. package/dist/lib/generated/Entities/MJEntityAction/mjentityaction.form.component.js.map +1 -1
  267. package/dist/lib/generated/Entities/MJEntityActionInvocationType/mjentityactioninvocationtype.form.component.js +3 -3
  268. package/dist/lib/generated/Entities/MJEntityActionInvocationType/mjentityactioninvocationtype.form.component.js.map +1 -1
  269. package/dist/lib/generated/Entities/MJEntityCommunicationMessageType/mjentitycommunicationmessagetype.form.component.js +2 -2
  270. package/dist/lib/generated/Entities/MJEntityCommunicationMessageType/mjentitycommunicationmessagetype.form.component.js.map +1 -1
  271. package/dist/lib/generated/Entities/MJEntityDocument/mjentitydocument.form.component.js +5 -5
  272. package/dist/lib/generated/Entities/MJEntityDocument/mjentitydocument.form.component.js.map +1 -1
  273. package/dist/lib/generated/Entities/MJEntityDocumentType/mjentitydocumenttype.form.component.js +2 -2
  274. package/dist/lib/generated/Entities/MJEntityDocumentType/mjentitydocumenttype.form.component.js.map +1 -1
  275. package/dist/lib/generated/Entities/MJEntityField/mjentityfield.form.component.d.ts.map +1 -1
  276. package/dist/lib/generated/Entities/MJEntityField/mjentityfield.form.component.js +28 -18
  277. package/dist/lib/generated/Entities/MJEntityField/mjentityfield.form.component.js.map +1 -1
  278. package/dist/lib/generated/Entities/MJEntityOrganicKey/mjentityorganickey.form.component.js +2 -2
  279. package/dist/lib/generated/Entities/MJEntityOrganicKey/mjentityorganickey.form.component.js.map +1 -1
  280. package/dist/lib/generated/Entities/MJEntityRecordDocument/mjentityrecorddocument.form.component.js +2 -2
  281. package/dist/lib/generated/Entities/MJEntityRecordDocument/mjentityrecorddocument.form.component.js.map +1 -1
  282. package/dist/lib/generated/Entities/MJEntityRelationship/mjentityrelationship.form.component.js +10 -8
  283. package/dist/lib/generated/Entities/MJEntityRelationship/mjentityrelationship.form.component.js.map +1 -1
  284. package/dist/lib/generated/Entities/MJEntityRelationshipDisplayComponent/mjentityrelationshipdisplaycomponent.form.component.js +2 -2
  285. package/dist/lib/generated/Entities/MJEntityRelationshipDisplayComponent/mjentityrelationshipdisplaycomponent.form.component.js.map +1 -1
  286. package/dist/lib/generated/Entities/MJEnvironment/mjenvironment.form.component.js +8 -8
  287. package/dist/lib/generated/Entities/MJEnvironment/mjenvironment.form.component.js.map +1 -1
  288. package/dist/lib/generated/Entities/MJExperiment/mjexperiment.form.component.js +2 -2
  289. package/dist/lib/generated/Entities/MJExperiment/mjexperiment.form.component.js.map +1 -1
  290. package/dist/lib/generated/Entities/MJExperimentSession/mjexperimentsession.form.component.js +2 -2
  291. package/dist/lib/generated/Entities/MJExperimentSession/mjexperimentsession.form.component.js.map +1 -1
  292. package/dist/lib/generated/Entities/MJExperimentSessionIteration/mjexperimentsessioniteration.form.component.js +2 -2
  293. package/dist/lib/generated/Entities/MJExperimentSessionIteration/mjexperimentsessioniteration.form.component.js.map +1 -1
  294. package/dist/lib/generated/Entities/MJExternalDataSource/mjexternaldatasource.form.component.js +3 -3
  295. package/dist/lib/generated/Entities/MJExternalDataSource/mjexternaldatasource.form.component.js.map +1 -1
  296. package/dist/lib/generated/Entities/MJExternalDataSourceType/mjexternaldatasourcetype.form.component.js +2 -2
  297. package/dist/lib/generated/Entities/MJExternalDataSourceType/mjexternaldatasourcetype.form.component.js.map +1 -1
  298. package/dist/lib/generated/Entities/MJFile/mjfile.form.component.js +9 -9
  299. package/dist/lib/generated/Entities/MJFile/mjfile.form.component.js.map +1 -1
  300. package/dist/lib/generated/Entities/MJFileCategory/mjfilecategory.form.component.d.ts.map +1 -1
  301. package/dist/lib/generated/Entities/MJFileCategory/mjfilecategory.form.component.js +33 -19
  302. package/dist/lib/generated/Entities/MJFileCategory/mjfilecategory.form.component.js.map +1 -1
  303. package/dist/lib/generated/Entities/MJFileStorageAccount/mjfilestorageaccount.form.component.js +7 -7
  304. package/dist/lib/generated/Entities/MJFileStorageAccount/mjfilestorageaccount.form.component.js.map +1 -1
  305. package/dist/lib/generated/Entities/MJFileStorageProvider/mjfilestorageprovider.form.component.js +6 -6
  306. package/dist/lib/generated/Entities/MJFileStorageProvider/mjfilestorageprovider.form.component.js.map +1 -1
  307. package/dist/lib/generated/Entities/MJFormChromeRule/mjformchromerule.form.component.d.ts +10 -0
  308. package/dist/lib/generated/Entities/MJFormChromeRule/mjformchromerule.form.component.d.ts.map +1 -0
  309. package/dist/lib/generated/Entities/MJFormChromeRule/mjformchromerule.form.component.js +82 -0
  310. package/dist/lib/generated/Entities/MJFormChromeRule/mjformchromerule.form.component.js.map +1 -0
  311. package/dist/lib/generated/Entities/MJGeneratedCodeCategory/mjgeneratedcodecategory.form.component.d.ts.map +1 -1
  312. package/dist/lib/generated/Entities/MJGeneratedCodeCategory/mjgeneratedcodecategory.form.component.js +33 -19
  313. package/dist/lib/generated/Entities/MJGeneratedCodeCategory/mjgeneratedcodecategory.form.component.js.map +1 -1
  314. package/dist/lib/generated/Entities/MJIntegration/mjintegration.form.component.js +5 -5
  315. package/dist/lib/generated/Entities/MJIntegration/mjintegration.form.component.js.map +1 -1
  316. package/dist/lib/generated/Entities/MJIntegrationObject/mjintegrationobject.form.component.js +3 -3
  317. package/dist/lib/generated/Entities/MJIntegrationObject/mjintegrationobject.form.component.js.map +1 -1
  318. package/dist/lib/generated/Entities/MJIntegrationSourceType/mjintegrationsourcetype.form.component.js +2 -2
  319. package/dist/lib/generated/Entities/MJIntegrationSourceType/mjintegrationsourcetype.form.component.js.map +1 -1
  320. package/dist/lib/generated/Entities/MJLibrary/mjlibrary.form.component.js +3 -3
  321. package/dist/lib/generated/Entities/MJLibrary/mjlibrary.form.component.js.map +1 -1
  322. package/dist/lib/generated/Entities/MJList/mjlist.form.component.js +6 -6
  323. package/dist/lib/generated/Entities/MJList/mjlist.form.component.js.map +1 -1
  324. package/dist/lib/generated/Entities/MJListCategory/mjlistcategory.form.component.d.ts.map +1 -1
  325. package/dist/lib/generated/Entities/MJListCategory/mjlistcategory.form.component.js +33 -19
  326. package/dist/lib/generated/Entities/MJListCategory/mjlistcategory.form.component.js.map +1 -1
  327. package/dist/lib/generated/Entities/MJMCPServer/mjmcpserver.form.component.js +4 -4
  328. package/dist/lib/generated/Entities/MJMCPServer/mjmcpserver.form.component.js.map +1 -1
  329. package/dist/lib/generated/Entities/MJMCPServerConnection/mjmcpserverconnection.form.component.js +7 -7
  330. package/dist/lib/generated/Entities/MJMCPServerConnection/mjmcpserverconnection.form.component.js.map +1 -1
  331. package/dist/lib/generated/Entities/MJMCPServerTool/mjmcpservertool.form.component.js +4 -4
  332. package/dist/lib/generated/Entities/MJMCPServerTool/mjmcpservertool.form.component.js.map +1 -1
  333. package/dist/lib/generated/Entities/MJMLAlgorithm/mjmlalgorithm.form.component.js +5 -5
  334. package/dist/lib/generated/Entities/MJMLAlgorithm/mjmlalgorithm.form.component.js.map +1 -1
  335. package/dist/lib/generated/Entities/MJMLAlgorithmUseCase/mjmlalgorithmusecase.form.component.js +2 -2
  336. package/dist/lib/generated/Entities/MJMLAlgorithmUseCase/mjmlalgorithmusecase.form.component.js.map +1 -1
  337. package/dist/lib/generated/Entities/MJMLModel/mjmlmodel.form.component.js +3 -3
  338. package/dist/lib/generated/Entities/MJMLModel/mjmlmodel.form.component.js.map +1 -1
  339. package/dist/lib/generated/Entities/MJMLTrainingPipeline/mjmltrainingpipeline.form.component.js +3 -3
  340. package/dist/lib/generated/Entities/MJMLTrainingPipeline/mjmltrainingpipeline.form.component.js.map +1 -1
  341. package/dist/lib/generated/Entities/MJMagicLinkInvite/mjmagiclinkinvite.form.component.js +6 -6
  342. package/dist/lib/generated/Entities/MJMagicLinkInvite/mjmagiclinkinvite.form.component.js.map +1 -1
  343. package/dist/lib/generated/Entities/MJMaterializedResult/mjmaterializedresult.form.component.d.ts +10 -0
  344. package/dist/lib/generated/Entities/MJMaterializedResult/mjmaterializedresult.form.component.d.ts.map +1 -0
  345. package/dist/lib/generated/Entities/MJMaterializedResult/mjmaterializedresult.form.component.js +117 -0
  346. package/dist/lib/generated/Entities/MJMaterializedResult/mjmaterializedresult.form.component.js.map +1 -0
  347. package/dist/lib/generated/Entities/MJMaterializedResultQuery/mjmaterializedresultquery.form.component.d.ts +10 -0
  348. package/dist/lib/generated/Entities/MJMaterializedResultQuery/mjmaterializedresultquery.form.component.d.ts.map +1 -0
  349. package/dist/lib/generated/Entities/MJMaterializedResultQuery/mjmaterializedresultquery.form.component.js +58 -0
  350. package/dist/lib/generated/Entities/MJMaterializedResultQuery/mjmaterializedresultquery.form.component.js.map +1 -0
  351. package/dist/lib/generated/Entities/MJOpenApp/mjopenapp.form.component.js +4 -4
  352. package/dist/lib/generated/Entities/MJOpenApp/mjopenapp.form.component.js.map +1 -1
  353. package/dist/lib/generated/Entities/MJProcessRun/mjprocessrun.form.component.js +2 -2
  354. package/dist/lib/generated/Entities/MJProcessRun/mjprocessrun.form.component.js.map +1 -1
  355. package/dist/lib/generated/Entities/MJProject/mjproject.form.component.js +38 -30
  356. package/dist/lib/generated/Entities/MJProject/mjproject.form.component.js.map +1 -1
  357. package/dist/lib/generated/Entities/MJQuery/mjquery.form.component.d.ts.map +1 -1
  358. package/dist/lib/generated/Entities/MJQuery/mjquery.form.component.js +85 -65
  359. package/dist/lib/generated/Entities/MJQuery/mjquery.form.component.js.map +1 -1
  360. package/dist/lib/generated/Entities/MJQueryCategory/mjquerycategory.form.component.d.ts.map +1 -1
  361. package/dist/lib/generated/Entities/MJQueryCategory/mjquerycategory.form.component.js +33 -19
  362. package/dist/lib/generated/Entities/MJQueryCategory/mjquerycategory.form.component.js.map +1 -1
  363. package/dist/lib/generated/Entities/MJQueue/mjqueue.form.component.js +2 -2
  364. package/dist/lib/generated/Entities/MJQueue/mjqueue.form.component.js.map +1 -1
  365. package/dist/lib/generated/Entities/MJQueueType/mjqueuetype.form.component.js +2 -2
  366. package/dist/lib/generated/Entities/MJQueueType/mjqueuetype.form.component.js.map +1 -1
  367. package/dist/lib/generated/Entities/MJRSUPendingWork/mjrsupendingwork.form.component.d.ts +10 -0
  368. package/dist/lib/generated/Entities/MJRSUPendingWork/mjrsupendingwork.form.component.d.ts.map +1 -0
  369. package/dist/lib/generated/Entities/MJRSUPendingWork/mjrsupendingwork.form.component.js +64 -0
  370. package/dist/lib/generated/Entities/MJRSUPendingWork/mjrsupendingwork.form.component.js.map +1 -0
  371. package/dist/lib/generated/Entities/MJRecommendation/mjrecommendation.form.component.js +2 -2
  372. package/dist/lib/generated/Entities/MJRecommendation/mjrecommendation.form.component.js.map +1 -1
  373. package/dist/lib/generated/Entities/MJRecommendationProvider/mjrecommendationprovider.form.component.js +2 -2
  374. package/dist/lib/generated/Entities/MJRecommendationProvider/mjrecommendationprovider.form.component.js.map +1 -1
  375. package/dist/lib/generated/Entities/MJRecommendationRun/mjrecommendationrun.form.component.js +2 -2
  376. package/dist/lib/generated/Entities/MJRecommendationRun/mjrecommendationrun.form.component.js.map +1 -1
  377. package/dist/lib/generated/Entities/MJRecordChange/mjrecordchange.form.component.js +21 -23
  378. package/dist/lib/generated/Entities/MJRecordChange/mjrecordchange.form.component.js.map +1 -1
  379. package/dist/lib/generated/Entities/MJRecordChangeReplayRun/mjrecordchangereplayrun.form.component.js +2 -2
  380. package/dist/lib/generated/Entities/MJRecordChangeReplayRun/mjrecordchangereplayrun.form.component.js.map +1 -1
  381. package/dist/lib/generated/Entities/MJRecordMergeLog/mjrecordmergelog.form.component.js +3 -3
  382. package/dist/lib/generated/Entities/MJRecordMergeLog/mjrecordmergelog.form.component.js.map +1 -1
  383. package/dist/lib/generated/Entities/MJRecordProcess/mjrecordprocess.form.component.js +4 -4
  384. package/dist/lib/generated/Entities/MJRecordProcess/mjrecordprocess.form.component.js.map +1 -1
  385. package/dist/lib/generated/Entities/MJRecordProcessCategory/mjrecordprocesscategory.form.component.d.ts.map +1 -1
  386. package/dist/lib/generated/Entities/MJRecordProcessCategory/mjrecordprocesscategory.form.component.js +33 -19
  387. package/dist/lib/generated/Entities/MJRecordProcessCategory/mjrecordprocesscategory.form.component.js.map +1 -1
  388. package/dist/lib/generated/Entities/MJRemoteOperationCategory/mjremoteoperationcategory.form.component.d.ts.map +1 -1
  389. package/dist/lib/generated/Entities/MJRemoteOperationCategory/mjremoteoperationcategory.form.component.js +33 -19
  390. package/dist/lib/generated/Entities/MJRemoteOperationCategory/mjremoteoperationcategory.form.component.js.map +1 -1
  391. package/dist/lib/generated/Entities/MJResourceType/mjresourcetype.form.component.js +6 -6
  392. package/dist/lib/generated/Entities/MJResourceType/mjresourcetype.form.component.js.map +1 -1
  393. package/dist/lib/generated/Entities/MJRole/mjrole.form.component.js +17 -17
  394. package/dist/lib/generated/Entities/MJRole/mjrole.form.component.js.map +1 -1
  395. package/dist/lib/generated/Entities/MJRowLevelSecurityFilter/mjrowlevelsecurityfilter.form.component.js +7 -7
  396. package/dist/lib/generated/Entities/MJRowLevelSecurityFilter/mjrowlevelsecurityfilter.form.component.js.map +1 -1
  397. package/dist/lib/generated/Entities/MJSQLDialect/mjsqldialect.form.component.js +3 -3
  398. package/dist/lib/generated/Entities/MJSQLDialect/mjsqldialect.form.component.js.map +1 -1
  399. package/dist/lib/generated/Entities/MJScheduledJob/mjscheduledjob.form.component.js +4 -4
  400. package/dist/lib/generated/Entities/MJScheduledJob/mjscheduledjob.form.component.js.map +1 -1
  401. package/dist/lib/generated/Entities/MJScheduledJobRun/mjscheduledjobrun.form.component.js +4 -4
  402. package/dist/lib/generated/Entities/MJScheduledJobRun/mjscheduledjobrun.form.component.js.map +1 -1
  403. package/dist/lib/generated/Entities/MJScheduledJobType/mjscheduledjobtype.form.component.js +2 -2
  404. package/dist/lib/generated/Entities/MJScheduledJobType/mjscheduledjobtype.form.component.js.map +1 -1
  405. package/dist/lib/generated/Entities/MJSearchProvider/mjsearchprovider.form.component.js +2 -2
  406. package/dist/lib/generated/Entities/MJSearchProvider/mjsearchprovider.form.component.js.map +1 -1
  407. package/dist/lib/generated/Entities/MJSearchScope/mjsearchscope.form.component.js +10 -10
  408. package/dist/lib/generated/Entities/MJSearchScope/mjsearchscope.form.component.js.map +1 -1
  409. package/dist/lib/generated/Entities/MJSignatureAccount/mjsignatureaccount.form.component.js +2 -2
  410. package/dist/lib/generated/Entities/MJSignatureAccount/mjsignatureaccount.form.component.js.map +1 -1
  411. package/dist/lib/generated/Entities/MJSignatureProvider/mjsignatureprovider.form.component.js +2 -2
  412. package/dist/lib/generated/Entities/MJSignatureProvider/mjsignatureprovider.form.component.js.map +1 -1
  413. package/dist/lib/generated/Entities/MJSignatureRequest/mjsignaturerequest.form.component.js +4 -4
  414. package/dist/lib/generated/Entities/MJSignatureRequest/mjsignaturerequest.form.component.js.map +1 -1
  415. package/dist/lib/generated/Entities/MJSkill/mjskill.form.component.js +29 -21
  416. package/dist/lib/generated/Entities/MJSkill/mjskill.form.component.js.map +1 -1
  417. package/dist/lib/generated/Entities/MJStateProvince/mjstateprovince.form.component.js +2 -2
  418. package/dist/lib/generated/Entities/MJStateProvince/mjstateprovince.form.component.js.map +1 -1
  419. package/dist/lib/generated/Entities/MJTag/mjtag.form.component.d.ts.map +1 -1
  420. package/dist/lib/generated/Entities/MJTag/mjtag.form.component.js +104 -92
  421. package/dist/lib/generated/Entities/MJTag/mjtag.form.component.js.map +1 -1
  422. package/dist/lib/generated/Entities/MJTask/mjtask.form.component.d.ts.map +1 -1
  423. package/dist/lib/generated/Entities/MJTask/mjtask.form.component.js +47 -33
  424. package/dist/lib/generated/Entities/MJTask/mjtask.form.component.js.map +1 -1
  425. package/dist/lib/generated/Entities/MJTaskType/mjtasktype.form.component.js +2 -2
  426. package/dist/lib/generated/Entities/MJTaskType/mjtasktype.form.component.js.map +1 -1
  427. package/dist/lib/generated/Entities/MJTemplate/mjtemplate.form.component.js +10 -10
  428. package/dist/lib/generated/Entities/MJTemplate/mjtemplate.form.component.js.map +1 -1
  429. package/dist/lib/generated/Entities/MJTemplateCategory/mjtemplatecategory.form.component.d.ts.map +1 -1
  430. package/dist/lib/generated/Entities/MJTemplateCategory/mjtemplatecategory.form.component.js +33 -19
  431. package/dist/lib/generated/Entities/MJTemplateCategory/mjtemplatecategory.form.component.js.map +1 -1
  432. package/dist/lib/generated/Entities/MJTemplateContent/mjtemplatecontent.form.component.js +2 -2
  433. package/dist/lib/generated/Entities/MJTemplateContent/mjtemplatecontent.form.component.js.map +1 -1
  434. package/dist/lib/generated/Entities/MJTemplateContentType/mjtemplatecontenttype.form.component.js +2 -2
  435. package/dist/lib/generated/Entities/MJTemplateContentType/mjtemplatecontenttype.form.component.js.map +1 -1
  436. package/dist/lib/generated/Entities/MJTest/mjtest.form.component.js +3 -3
  437. package/dist/lib/generated/Entities/MJTest/mjtest.form.component.js.map +1 -1
  438. package/dist/lib/generated/Entities/MJTestRun/mjtestrun.form.component.js +7 -7
  439. package/dist/lib/generated/Entities/MJTestRun/mjtestrun.form.component.js.map +1 -1
  440. package/dist/lib/generated/Entities/MJTestRunOutputType/mjtestrunoutputtype.form.component.js +2 -2
  441. package/dist/lib/generated/Entities/MJTestRunOutputType/mjtestrunoutputtype.form.component.js.map +1 -1
  442. package/dist/lib/generated/Entities/MJTestSuite/mjtestsuite.form.component.js +39 -31
  443. package/dist/lib/generated/Entities/MJTestSuite/mjtestsuite.form.component.js.map +1 -1
  444. package/dist/lib/generated/Entities/MJTestSuiteRun/mjtestsuiterun.form.component.js +2 -2
  445. package/dist/lib/generated/Entities/MJTestSuiteRun/mjtestsuiterun.form.component.js.map +1 -1
  446. package/dist/lib/generated/Entities/MJTestType/mjtesttype.form.component.js +3 -3
  447. package/dist/lib/generated/Entities/MJTestType/mjtesttype.form.component.js.map +1 -1
  448. package/dist/lib/generated/Entities/MJUser/mjuser.form.component.js +105 -105
  449. package/dist/lib/generated/Entities/MJUser/mjuser.form.component.js.map +1 -1
  450. package/dist/lib/generated/Entities/MJUserApplication/mjuserapplication.form.component.js +2 -2
  451. package/dist/lib/generated/Entities/MJUserApplication/mjuserapplication.form.component.js.map +1 -1
  452. package/dist/lib/generated/Entities/MJUserNotificationType/mjusernotificationtype.form.component.js +3 -3
  453. package/dist/lib/generated/Entities/MJUserNotificationType/mjusernotificationtype.form.component.js.map +1 -1
  454. package/dist/lib/generated/Entities/MJUserRoutine/mjuserroutine.form.component.js +3 -3
  455. package/dist/lib/generated/Entities/MJUserRoutine/mjuserroutine.form.component.js.map +1 -1
  456. package/dist/lib/generated/Entities/MJUserView/mjuserview.form.component.js +6 -6
  457. package/dist/lib/generated/Entities/MJUserView/mjuserview.form.component.js.map +1 -1
  458. package/dist/lib/generated/Entities/MJUserViewCategory/mjuserviewcategory.form.component.d.ts.map +1 -1
  459. package/dist/lib/generated/Entities/MJUserViewCategory/mjuserviewcategory.form.component.js +33 -19
  460. package/dist/lib/generated/Entities/MJUserViewCategory/mjuserviewcategory.form.component.js.map +1 -1
  461. package/dist/lib/generated/Entities/MJUserViewRun/mjuserviewrun.form.component.js +2 -2
  462. package/dist/lib/generated/Entities/MJUserViewRun/mjuserviewrun.form.component.js.map +1 -1
  463. package/dist/lib/generated/Entities/MJVectorDatabase/mjvectordatabase.form.component.js +3 -3
  464. package/dist/lib/generated/Entities/MJVectorDatabase/mjvectordatabase.form.component.js.map +1 -1
  465. package/dist/lib/generated/Entities/MJVectorIndex/mjvectorindex.form.component.js +6 -6
  466. package/dist/lib/generated/Entities/MJVectorIndex/mjvectorindex.form.component.js.map +1 -1
  467. package/dist/lib/generated/Entities/MJVersionLabel/mjversionlabel.form.component.js +44 -36
  468. package/dist/lib/generated/Entities/MJVersionLabel/mjversionlabel.form.component.js.map +1 -1
  469. package/dist/lib/generated/Entities/MJViewType/mjviewtype.form.component.js +2 -2
  470. package/dist/lib/generated/Entities/MJViewType/mjviewtype.form.component.js.map +1 -1
  471. package/dist/lib/generated/Entities/MJWorkspace/mjworkspace.form.component.js +2 -2
  472. package/dist/lib/generated/Entities/MJWorkspace/mjworkspace.form.component.js.map +1 -1
  473. package/dist/lib/generated/generated-forms.module.d.ts +290 -285
  474. package/dist/lib/generated/generated-forms.module.d.ts.map +1 -1
  475. package/dist/lib/generated/generated-forms.module.js +126 -111
  476. package/dist/lib/generated/generated-forms.module.js.map +1 -1
  477. package/dist/lib/panels/form-chrome/entity-form-chrome-editor.component.d.ts +37 -0
  478. package/dist/lib/panels/form-chrome/entity-form-chrome-editor.component.d.ts.map +1 -0
  479. package/dist/lib/panels/form-chrome/entity-form-chrome-editor.component.js +185 -0
  480. package/dist/lib/panels/form-chrome/entity-form-chrome-editor.component.js.map +1 -0
  481. package/dist/lib/panels/form-chrome/entity-relationship-form-role.panel.d.ts +20 -0
  482. package/dist/lib/panels/form-chrome/entity-relationship-form-role.panel.d.ts.map +1 -0
  483. package/dist/lib/panels/form-chrome/entity-relationship-form-role.panel.js +87 -0
  484. package/dist/lib/panels/form-chrome/entity-relationship-form-role.panel.js.map +1 -0
  485. package/dist/public-api.d.ts +12 -0
  486. package/dist/public-api.d.ts.map +1 -1
  487. package/dist/public-api.js +14 -2
  488. package/dist/public-api.js.map +1 -1
  489. package/package.json +44 -42
@@ -1 +1 @@
1
- {"version":3,"file":"ai-agent-run.component.js","sourceRoot":"","sources":["../../../../src/lib/custom/ai-agent-run/ai-agent-run.component.ts","../../../../src/lib/custom/ai-agent-run/ai-agent-run.component.html"],"names":[],"mappings":"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","sourcesContent":["import { Component, OnInit, OnDestroy, ViewChild, inject } from '@angular/core';\nimport { Subject, Subscription } from 'rxjs';\nimport { BaseEntity, BaseEntityEvent, CompositeKey, Metadata } from '@memberjunction/core';\nimport {\n LoadAgentRunTree,\n MAX_AGENT_RUN_TREE_DEPTH,\n MJAIAgentRunEntityExtended,\n MJAIAgentEntityExtended,\n WalkAgentRunTree,\n type AgentRunTreeNode,\n} from '@memberjunction/ai-core-plus';\nimport { BaseFormComponent } from '@memberjunction/ng-base-forms';\nimport { MJGlobal, MJEvent, MJEventType, RegisterClass, UUIDsEqual } from '@memberjunction/global';\nimport { SharedService, NavigationService } from '@memberjunction/ng-shared';\nimport { TimelineItem, AIAgentRunTimelineComponent } from './ai-agent-run-timeline.component';\nimport { MJAIAgentRunFormComponent } from '../../generated/Entities/MJAIAgentRun/mjaiagentrun.form.component';\nimport { ParseJSONRecursive, ParseJSONOptions } from '@memberjunction/global';\nimport { AIAgentRunAnalyticsComponent } from './ai-agent-run-analytics.component';\nimport { AIAgentRunCostService, AgentRunCostMetrics } from './ai-agent-run-cost.service';\nimport { AIAgentRunDataHelper } from './ai-agent-run-data.service';\nimport { ApplicationManager } from '@memberjunction/ng-base-application';\n\n/**\n * Task statuses that mean the step is finished with. Anything else means the workflow is still\n * moving — see `WorkflowStillRunning`.\n */\nconst TERMINAL_TASK_STATUSES = new Set(['Complete', 'Failed', 'Cancelled', 'Skipped', 'Blocked']);\n\n/**\n * How often to re-read the tree while a detached workflow runs.\n *\n * Human-scale rather than aggressive: a workflow step takes seconds at least, and the query walks\n * the whole tree. Fast enough that a watcher sees progress, slow enough that leaving the tab open on\n * a long workflow is not a load problem.\n */\nconst WORKFLOW_POLL_INTERVAL_MS = 4000;\n\n@RegisterClass(BaseFormComponent, 'MJ: AI Agent Runs')\n@Component({\n standalone: false,\n selector: 'mj-ai-agent-run-form',\n templateUrl: './ai-agent-run.component.html',\n styleUrls: ['./ai-agent-run.component.css']\n})\nexport class MJAIAgentRunFormComponentExtended extends MJAIAgentRunFormComponent implements OnInit, OnDestroy {\n public record!: MJAIAgentRunEntityExtended;\n \n private destroy$ = new Subject<void>();\n\n // MJGlobal BaseEntity event subscription — fires on both local Save()\n // and server-side remote-invalidate events. While the run is Running,\n // this is how we hear about new steps and status changes without\n // polling the DB on a timer. Only attached when Status === 'Running'.\n private entityEventSubscription: Subscription | null = null;\n private refreshInFlight = false;\n\n /** Pending re-read of the run tree while a detached workflow is still running. */\n private workflowPollTimer: ReturnType<typeof setTimeout> | null = null;\n\n // UI state\n activeTab = 'timeline';\n selectedTimelineItem: TimelineItem | null = null;\n jsonPanelExpanded = false;\n loading = false;\n error: string | null = null;\n analyticsLoaded = false;\n visualizationLoaded = false;\n \n agent: MJAIAgentEntityExtended | null = null;\n \n // Cost metrics using shared service\n costMetrics: AgentRunCostMetrics | null = null;\n \n // Cached parsed results to prevent redundant JSON parsing\n private _cachedParsedResult: string | null = null;\n private _cachedParsedStartingPayload: string | null = null;\n private _cachedParsedFinalPayload: string | null = null;\n private _cachedParsedData: string | null = null;\n \n // Simple parsing state - true when all parsing is complete\n private _allParsingComplete = false;\n \n @ViewChild(AIAgentRunTimelineComponent) timelineComponent?: AIAgentRunTimelineComponent;\n @ViewChild(AIAgentRunAnalyticsComponent) analyticsComponent?: AIAgentRunAnalyticsComponent;\n\n // Field injections\n private navigationService = inject(NavigationService);\n private costService = inject(AIAgentRunCostService);\n private appManager = inject(ApplicationManager);\n\n // Instance of data helper per component\n public dataHelper = new AIAgentRunDataHelper();\n\n /**\n * The run's complete execution tree — loaded ONCE here and shared with every tab.\n *\n * **One load, one shape, one refresh.** The timeline, the three flow renderers and analytics all\n * need the same structure; letting each fetch its own would issue the same recursive query three\n * times, and — worse — let the tabs disagree, because a tab that loaded a second earlier shows a\n * different run than the one beside it. Sharing it also means a refresh updates all three at once\n * rather than whichever one the user happens to open next.\n */\n public runTree: AgentRunTreeNode | null = null;\n\n /** True while the tree is loading, so a tab can say so rather than render an empty run. */\n public runTreeLoading = false;\n\n /** Why the tree could not be loaded, or null. Surfaced rather than swallowed. */\n public runTreeError: string | null = null;\n\n /**\n * Loads (or reloads) the shared run tree.\n *\n * Errors are held rather than thrown: a run whose tree cannot be read still has fields worth\n * looking at, and taking the whole form down over one query would hide them.\n */\n private async loadRunTree(): Promise<void> {\n if (!this.record?.ID) return;\n this.runTreeLoading = true;\n this.runTreeError = null;\n try {\n const result = await LoadAgentRunTree(this.record.ID, this.RunQueryToUse);\n this.runTree = result.Root;\n this.runTreeError = result.ErrorMessage;\n if (result.Truncated) {\n this.runTreeError =\n `This run nests deeper than ${MAX_AGENT_RUN_TREE_DEPTH} levels; what is shown is truncated.`;\n }\n } catch (e) {\n this.runTreeError = e instanceof Error ? e.message : String(e);\n this.runTree = null;\n } finally {\n this.runTreeLoading = false;\n this.scheduleWorkflowPoll();\n }\n }\n\n /**\n * True when this run submitted a workflow that has not finished.\n *\n * **The run being \"Completed\" says nothing about this.** A task graph is submit-and-detach: the\n * step that submits it completes as soon as the graph is persisted, and the run completes with it\n * — while the dispatcher goes on executing for seconds or minutes afterwards. One observed run\n * finished in 225ms and its workflow ran for a further eighteen seconds.\n *\n * Without this the form showed a green COMPLETED header above steps sitting at Pending, and the\n * only available reading was that something had failed. Nothing had; the page was simply a\n * snapshot of a moving thing, with nothing saying so.\n */\n public get WorkflowStillRunning(): boolean {\n if (!this.runTree) return false;\n for (const node of WalkAgentRunTree(this.runTree)) {\n if (node.NodeType !== 'Task' && node.NodeType !== 'TaskGraph') continue;\n if (!TERMINAL_TASK_STATUSES.has(node.Status)) return true;\n }\n return false;\n }\n\n /**\n * Re-reads the tree while a detached workflow is still moving, and stops when it settles.\n *\n * Polling rather than the BaseEntity event subscription this form already has, because that\n * subscription cannot see this work for two independent reasons: it is only attached while the RUN\n * is `Running` (a detached graph outlives that), and the dispatcher advances tasks through the\n * claim protocol's direct SQL, which fires no entity events at all.\n *\n * Self-cancelling: each load reschedules only if work remains, so a settled run costs nothing.\n */\n private scheduleWorkflowPoll(): void {\n this.clearWorkflowPoll();\n if (!this.WorkflowStillRunning) return;\n this.workflowPollTimer = setTimeout(() => {\n this.workflowPollTimer = null;\n void this.loadRunTree();\n }, WORKFLOW_POLL_INTERVAL_MS);\n }\n\n private clearWorkflowPoll(): void {\n if (this.workflowPollTimer !== null) {\n clearTimeout(this.workflowPollTimer);\n this.workflowPollTimer = null;\n }\n }\n \n async ngOnInit() {\n await super.ngOnInit();\n \n if (this.record && this.record.ID) {\n await this.dataHelper.loadAgentRunData(this.record.ID);\n await this.loadRunTree();\n await this.loadAgent();\n await this.loadCostMetrics();\n\n // Parse all JSON fields on form load for instant access later\n this.parseAllFields();\n\n // If the run is in progress, subscribe to BaseEntity events so we\n // pick up new steps / status changes the moment AgentRunner saves\n // them — no 30s polling timer. Same pattern used by the Form\n // Builder cockpit. See `handleEntityEvent` below for filtering.\n if (this.record.Status === 'Running') {\n this.subscribeToRunEvents();\n }\n }\n }\n\n ngOnDestroy() {\n this.destroy$.next();\n this.destroy$.complete();\n this.clearWorkflowPoll();\n this.entityEventSubscription?.unsubscribe();\n this.entityEventSubscription = null;\n this.clearParsedCache();\n this.dataHelper.clearData();\n this.costMetrics = null;\n this.agent = null;\n }\n\n private subscribeToRunEvents(): void {\n if (this.entityEventSubscription) return;\n this.entityEventSubscription = MJGlobal.Instance.GetEventListener(false)\n .subscribe(mjEvent => this.handleEntityEvent(mjEvent));\n }\n\n private unsubscribeFromRunEvents(): void {\n this.entityEventSubscription?.unsubscribe();\n this.entityEventSubscription = null;\n }\n\n /**\n * Filter the global BaseEntity event firehose down to saves on the\n * current Agent Run row, its Steps, or its Prompt Runs — and only when\n * AgentRunID matches `this.record.ID`. Local `save` events come from\n * the in-process AgentRunner (dev/same-tab case, which is the primary\n * use case here); `remote-invalidate` covers writes from a separate\n * server process if GraphQL cache-invalidation is wired up.\n */\n private handleEntityEvent(mjEvent: MJEvent): void {\n if (mjEvent.event !== MJEventType.ComponentEvent) return;\n if (mjEvent.eventCode !== BaseEntity.BaseEventCode) return;\n const evt = mjEvent.args as BaseEntityEvent | undefined;\n if (!evt) return;\n if (evt.type !== 'save' && evt.type !== 'remote-invalidate') return;\n\n const entityName = evt.entityName ?? evt.baseEntity?.EntityInfo?.Name;\n if (!entityName) return;\n\n const runId = this.record?.ID;\n if (!runId) return;\n\n if (entityName === 'MJ: AI Agent Runs') {\n // Status change on THIS run row.\n const savedID = this.resolveEventID(evt);\n if (savedID && UUIDsEqual(savedID, runId)) {\n this.refreshData();\n // If the run completed, drop the subscription — no further\n // writes are expected and we don't want to hold the listener.\n const newStatus = this.resolveEventField<string>(evt, 'Status');\n if (newStatus && newStatus !== 'Running') {\n this.unsubscribeFromRunEvents();\n }\n }\n return;\n }\n\n // Steps still carry AgentRunID, so a step write can be correlated exactly to this run.\n if (entityName === 'MJ: AI Agent Run Steps') {\n const childAgentRunId = this.resolveEventField<string>(evt, 'AgentRunID');\n if (childAgentRunId && UUIDsEqual(childAgentRunId, runId)) {\n this.refreshRunDataDebounced();\n }\n return;\n }\n\n // Prompt runs and action logs expose no AgentRunID to correlate on: AIPromptRun.AgentRunID was\n // dropped in v5.50 (Break_CodeGen_Cycle_Remove_PromptRun_AgentRunID) and ActionExecutionLog never\n // had one. Correlating on it made this branch dead for action logs from the start, and for prompt\n // runs from v5.50 — the form simply stopped live-refreshing. Refresh unconditionally instead,\n // which is what the original comment described: the reload is debounced and re-reads only THIS\n // run, and the subscription is dropped once the run leaves 'Running', so a foreign write costs at\n // most one collapsed reload while a run is open on screen.\n if (entityName === 'MJ: AI Prompt Runs' || entityName === 'MJ: Action Execution Logs') {\n this.refreshRunDataDebounced();\n }\n }\n\n private resolveEventID(evt: BaseEntityEvent): string | null {\n if (evt.baseEntity) {\n return evt.baseEntity.PrimaryKey?.ToConcatenatedString() ?? null;\n }\n const payload = evt.payload as { primaryKeyValues?: string | null; recordData?: string | null } | undefined;\n if (!payload) return null;\n try {\n if (payload.primaryKeyValues) {\n const pk = JSON.parse(payload.primaryKeyValues) as Record<string, unknown> | unknown[];\n if (Array.isArray(pk)) {\n const idPair = pk.find(p => (p as { FieldName?: string }).FieldName === 'ID') as { Value?: unknown } | undefined;\n if (idPair?.Value != null) return String(idPair.Value);\n } else if (pk && typeof pk === 'object' && 'ID' in pk) {\n const v = (pk as { ID?: unknown }).ID;\n if (v != null) return String(v);\n }\n }\n } catch {\n // bad JSON — fall through to recordData\n }\n try {\n if (payload.recordData) {\n const row = JSON.parse(payload.recordData) as Record<string, unknown>;\n if (typeof row?.ID === 'string') return row.ID;\n }\n } catch {\n // ignore\n }\n return null;\n }\n\n private resolveEventField<T>(evt: BaseEntityEvent, fieldName: string): T | null {\n if (evt.baseEntity) {\n const val = evt.baseEntity.Get?.(fieldName) as T | undefined;\n return val ?? null;\n }\n const payload = evt.payload as { recordData?: string | null } | undefined;\n if (!payload?.recordData) return null;\n try {\n const row = JSON.parse(payload.recordData) as Record<string, unknown>;\n const v = row?.[fieldName];\n return (v ?? null) as T | null;\n } catch {\n return null;\n }\n }\n\n /**\n * Collapse rapid bursts of step/prompt/action events into a single\n * reload — AgentRunner often saves several rows in quick succession.\n */\n private refreshRunDataDebounced(): void {\n if (this.refreshInFlight) return;\n this.refreshInFlight = true;\n queueMicrotask(() => {\n this.refreshInFlight = false;\n if (!this.record?.ID) return;\n this.dataHelper.loadAgentRunData(this.record.ID, true);\n });\n }\n \n private async loadAgent() {\n if (!this.record?.AgentID) return;\n \n try {\n const md = this.ProviderToUse;\n const agent = await md.GetEntityObject<MJAIAgentEntityExtended>('MJ: AI Agents');\n if (agent && await agent.Load(this.record.AgentID)) {\n this.agent = agent;\n this.cdr.detectChanges();\n }\n } catch (error) {\n console.error('Error loading agent:', error);\n }\n }\n\n private async loadCostMetrics() {\n if (!this.record?.ID) return;\n \n try {\n this.costMetrics = await this.costService.getAgentRunCostMetrics(this.record.ID);\n this.cdr.markForCheck();\n } catch (error) {\n console.error('Error loading cost metrics:', error);\n this.costMetrics = {\n totalCost: 0,\n totalPrompts: 0,\n totalTokensInput: 0,\n totalTokensOutput: 0,\n isLoading: false,\n error: 'Failed to load cost data'\n };\n }\n }\n \n changeTab(tab: string) {\n this.activeTab = tab;\n \n // Lazy load the Visualization (playable + static flow) view on first access\n if (tab === 'visualization' && !this.visualizationLoaded) {\n this.visualizationLoaded = true;\n this.cdr.markForCheck();\n }\n \n // Lazy load analytics when the tab is first accessed\n if (tab === 'analytics' && !this.analyticsLoaded) {\n this.analyticsLoaded = true;\n this.cdr.markForCheck();\n }\n }\n \n \n calculateDuration(start: Date, end?: Date | null): string {\n if (!end) return 'Running...';\n \n const ms = end.getTime() - start.getTime();\n if (ms < 1000) return `${ms}ms`;\n if (ms < 60000) return `${(ms / 1000).toFixed(1)}s`;\n if (ms < 3600000) return `${Math.floor(ms / 60000)}m ${Math.floor((ms % 60000) / 1000)}s`;\n return `${Math.floor(ms / 3600000)}h ${Math.floor((ms % 3600000) / 60000)}m`;\n }\n \n selectTimelineItem(item: TimelineItem) {\n this.selectedTimelineItem = item;\n this.jsonPanelExpanded = true;\n this.cdr.markForCheck();\n }\n \n closeJsonPanel() {\n this.selectedTimelineItem = null;\n this.cdr.markForCheck();\n }\n \n navigateToSubRun(runId: string) {\n SharedService.Instance.OpenEntityRecord(\"MJ: AI Agent Runs\", CompositeKey.FromID(runId));\n }\n\n navigateToParentRun() {\n if (this.record.ParentRunID) {\n SharedService.Instance.OpenEntityRecord(\"MJ: AI Agent Runs\", CompositeKey.FromID(this.record.ParentRunID));\n }\n }\n \n navigateToActionLog(logId: string) {\n SharedService.Instance.OpenEntityRecord(\"MJ: Action Execution Logs\", CompositeKey.FromID(logId));\n }\n \n openEntityRecord(entityName: string, recordId: string | null) {\n if (recordId) {\n SharedService.Instance.OpenEntityRecord(entityName, CompositeKey.FromID(recordId));\n }\n }\n \n navigateToEntityRecord(event: { entityName: string; recordId: string }) {\n SharedService.Instance.OpenEntityRecord(event.entityName, CompositeKey.FromID(event.recordId));\n }\n\n /**\n * Navigate to the conversation in the Chat application\n */\n navigateToConversation() {\n if (!this.record?.ConversationID) return;\n\n // Find the Chat app\n const chatApp = this.appManager.GetAllApps().find(app => app.Name === 'Chat');\n if (!chatApp) {\n console.warn('Chat application not found');\n return;\n }\n\n // Navigate to the Conversations nav item with the conversationId parameter\n this.navigationService.OpenNavItemByName(\n 'Conversations',\n { conversationId: this.record.ConversationID },\n chatApp.ID\n );\n }\n \n refreshData() {\n // Reload the agent run record to get latest status\n if (this.record?.ID) {\n // Clear parsed cache when refreshing data\n this.clearParsedCache();\n \n // No panel states to reset in simplified approach\n \n this.record.Load(this.record.ID).then(() => {\n // Clear cost cache and reload\n this.costService.clearCache(this.record.ID);\n this.loadCostMetrics();\n \n // Reload data through helper - this will update all components (force reload for refresh)\n this.dataHelper.loadAgentRunData(this.record.ID, true);\n void this.loadRunTree();\n \n // Trigger analytics refresh\n if (this.analyticsComponent) {\n this.analyticsComponent.loadData();\n }\n });\n }\n }\n \n \n getStatusIcon(status: string): string {\n const iconMap: Record<string, string> = {\n 'Running': 'fa-circle-notch fa-spin',\n 'Completed': 'fa-check-circle',\n 'Failed': 'fa-times-circle',\n 'Cancelled': 'fa-ban',\n 'Paused': 'fa-pause-circle'\n };\n return iconMap[status] || 'fa-question-circle';\n }\n \n async copyToClipboard(text: string) {\n try {\n await navigator.clipboard.writeText(text);\n // Could show a toast notification here\n } catch (err) {\n console.error('Failed to copy to clipboard:', err);\n }\n }\n \n /**\n * Get the Result field with recursive JSON parsing applied\n */\n get parsedResult(): string {\n if (!this.record?.Result) {\n return '';\n }\n \n // Return cached result if available\n if (this._cachedParsedResult !== null) {\n return this._cachedParsedResult;\n }\n \n \n try {\n // First, check if Result is a JSON string that needs to be parsed\n let resultData = this.record.Result;\n try {\n // If Result is a JSON string, parse it first\n resultData = JSON.parse(this.record.Result);\n } catch {\n // If it's not valid JSON, use it as-is\n resultData = this.record.Result;\n }\n \n const parseOptions: ParseJSONOptions = {\n extractInlineJson: true,\n maxDepth: 100,\n debug: false // Disable debug logging - regex issue fixed\n };\n // Re-enabled ParseJSONRecursive with performance optimizations\n const parsed = ParseJSONRecursive(resultData, parseOptions);\n const result = JSON.stringify(parsed, null, 2);\n \n // Cache the result\n this._cachedParsedResult = result;\n \n return result;\n } catch (e) {\n const fallbackResult = this.record.Result;\n this._cachedParsedResult = fallbackResult;\n return fallbackResult;\n }\n }\n \n /**\n * Get the Starting Payload field with recursive JSON parsing applied\n */\n get parsedStartingPayload(): string {\n if (!this.record?.StartingPayload) {\n return '';\n }\n \n // Return cached result if available\n if (this._cachedParsedStartingPayload !== null) {\n return this._cachedParsedStartingPayload;\n }\n \n \n try {\n // First, check if StartingPayload is a JSON string that needs to be parsed\n let payloadData = this.record.StartingPayload;\n try {\n // If StartingPayload is a JSON string, parse it first\n payloadData = JSON.parse(this.record.StartingPayload);\n } catch {\n // If it's not valid JSON, use it as-is\n payloadData = this.record.StartingPayload;\n }\n \n const parseOptions: ParseJSONOptions = {\n extractInlineJson: true,\n maxDepth: 100,\n debug: false\n };\n // Re-enabled ParseJSONRecursive with performance optimizations\n const parsed = ParseJSONRecursive(payloadData, parseOptions);\n const result = JSON.stringify(parsed, null, 2);\n \n // Cache the result\n this._cachedParsedStartingPayload = result;\n \n return result;\n } catch (e) {\n const fallbackResult = this.record.StartingPayload;\n this._cachedParsedStartingPayload = fallbackResult;\n return fallbackResult;\n }\n }\n\n /**\n * Get the Final Payload (state) field with recursive JSON parsing applied\n */\n get parsedFinalPayload(): string {\n if (!this.record?.FinalPayload) return '';\n \n // Return cached result if available\n if (this._cachedParsedFinalPayload !== null) {\n return this._cachedParsedFinalPayload;\n }\n \n try {\n // First, check if FinalPayload is a JSON string that needs to be parsed\n let payloadData = this.record.FinalPayload;\n try {\n // If FinalPayload is a JSON string, parse it first\n payloadData = JSON.parse(this.record.FinalPayload);\n } catch {\n // If it's not valid JSON, use it as-is\n payloadData = this.record.FinalPayload;\n }\n \n const parseOptions: ParseJSONOptions = {\n extractInlineJson: true,\n maxDepth: 100,\n debug: false // Disable debug logging - regex issue fixed\n };\n // Re-enabled ParseJSONRecursive with performance optimizations\n const parsed = ParseJSONRecursive(payloadData, parseOptions);\n const result = JSON.stringify(parsed, null, 2);\n \n // Cache the result\n this._cachedParsedFinalPayload = result;\n \n return result;\n } catch (e) {\n const fallbackResult = this.record.FinalPayload;\n this._cachedParsedFinalPayload = fallbackResult;\n return fallbackResult;\n }\n }\n\n /**\n * Get the Data field with recursive JSON parsing applied\n */\n get parsedData(): string {\n if (!this.record?.Data) return '';\n \n // Return cached result if available\n if (this._cachedParsedData !== null) {\n return this._cachedParsedData;\n }\n \n try {\n // First, check if Data is a JSON string that needs to be parsed\n let data = this.record.Data;\n try {\n // If Data is a JSON string, parse it first\n data = JSON.parse(this.record.Data);\n } catch {\n // If it's not valid JSON, use it as-is\n data = this.record.Data;\n }\n \n const parseOptions: ParseJSONOptions = {\n extractInlineJson: true,\n maxDepth: 100,\n debug: false\n };\n // Re-enabled ParseJSONRecursive with performance optimizations\n const parsed = ParseJSONRecursive(data, parseOptions);\n const result = JSON.stringify(parsed, null, 2);\n \n // Cache the result\n this._cachedParsedData = result;\n \n return result;\n } catch (e) {\n const fallbackResult = this.record.Data;\n this._cachedParsedData = fallbackResult;\n return fallbackResult;\n }\n }\n \n /**\n * Get parsed Starting Payload as an object for deep diff\n */\n get startingPayloadObject(): any {\n if (!this.record?.StartingPayload) return null;\n \n try {\n // First, check if StartingPayload is a JSON string that needs to be parsed\n let payloadData = this.record.StartingPayload;\n try {\n // If StartingPayload is a JSON string, parse it first\n payloadData = JSON.parse(this.record.StartingPayload);\n } catch {\n // If it's not valid JSON, use it as-is\n payloadData = this.record.StartingPayload;\n }\n \n const parseOptions: ParseJSONOptions = {\n extractInlineJson: true,\n maxDepth: 100,\n debug: false\n };\n // Re-enabled ParseJSONRecursive with performance optimizations\n return ParseJSONRecursive(payloadData, parseOptions);\n } catch (e) {\n return null;\n }\n }\n\n /**\n * Get parsed Final Payload as an object for deep diff\n */\n get finalPayloadObject(): any {\n if (!this.record?.FinalPayload) return null;\n \n try {\n // First, check if FinalPayload is a JSON string that needs to be parsed\n let payloadData = this.record.FinalPayload;\n try {\n // If FinalPayload is a JSON string, parse it first\n payloadData = JSON.parse(this.record.FinalPayload);\n } catch {\n // If it's not valid JSON, use it as-is\n payloadData = this.record.FinalPayload;\n }\n \n const parseOptions: ParseJSONOptions = {\n extractInlineJson: true,\n maxDepth: 100,\n debug: false\n };\n // Re-enabled ParseJSONRecursive with performance optimizations\n return ParseJSONRecursive(payloadData, parseOptions);\n } catch (e) {\n return null;\n }\n }\n\n /**\n * Clear all cached parsed results\n */\n private clearParsedCache(): void {\n this._cachedParsedResult = null;\n this._cachedParsedStartingPayload = null;\n this._cachedParsedFinalPayload = null;\n this._cachedParsedData = null;\n this._allParsingComplete = false;\n }\n \n /**\n * Parse all JSON fields at once and cache results\n */\n private parseAllFields(): void {\n try {\n let parsedCount = 0;\n \n // Parse all fields that exist\n if (this.record?.Result) {\n this.parsedResult; // Triggers parsing and caching\n parsedCount++;\n }\n \n if (this.record?.StartingPayload) {\n this.parsedStartingPayload; // Triggers parsing and caching\n parsedCount++;\n }\n \n if (this.record?.FinalPayload) {\n this.parsedFinalPayload; // Triggers parsing and caching\n parsedCount++;\n }\n \n if (this.record?.Data) {\n this.parsedData; // Triggers parsing and caching\n parsedCount++;\n }\n \n this._allParsingComplete = true;\n \n } catch (error) {\n console.error('Error during JSON parsing:', error);\n }\n }\n \n /**\n * Check if all parsing is complete - used by template\n */\n get isParsingComplete(): boolean {\n return this._allParsingComplete;\n }\n\n /**\n * Check if we have both payloads to show diff\n */\n get showPayloadDiff(): boolean {\n return !!(this.record?.StartingPayload && this.record?.FinalPayload);\n }\n\n /**\n * Check if selected timeline item is a step with payload changes\n */\n get showStepPayloadDiff(): boolean {\n if (!this.selectedTimelineItem || this.selectedTimelineItem.type !== 'step') {\n return false;\n }\n \n const stepData = this.selectedTimelineItem.data;\n if (stepData && (stepData.PayloadAtStart?.trim().length > 0 \n || stepData.PayloadAtEnd?.trim().length > 0)) {\n return stepData.PayloadAtStart !== stepData.PayloadAtEnd;\n }\n else {\n return false;\n }\n }\n\n /**\n * Get parsed PayloadAtStart for the selected step\n */\n get stepPayloadAtStartObject(): any {\n if (!this.selectedTimelineItem || this.selectedTimelineItem.type !== 'step') {\n return null;\n }\n \n const stepData = this.selectedTimelineItem.data;\n if (!stepData || !stepData.PayloadAtStart) {\n return null;\n }\n \n try {\n let payloadData = stepData.PayloadAtStart;\n try {\n payloadData = JSON.parse(stepData.PayloadAtStart);\n } catch {\n payloadData = stepData.PayloadAtStart;\n }\n \n const parseOptions: ParseJSONOptions = {\n extractInlineJson: true,\n maxDepth: 100,\n debug: false\n };\n // Re-enabled ParseJSONRecursive with performance optimizations\n return ParseJSONRecursive(payloadData, parseOptions);\n } catch (e) {\n return null;\n }\n }\n\n /**\n * Get parsed PayloadAtEnd for the selected step\n */\n get stepPayloadAtEndObject(): any {\n if (!this.selectedTimelineItem || this.selectedTimelineItem.type !== 'step') {\n return null;\n }\n \n const stepData = this.selectedTimelineItem.data;\n if (!stepData || !stepData.PayloadAtEnd) {\n return null;\n }\n \n try {\n let payloadData = stepData.PayloadAtEnd;\n try {\n payloadData = JSON.parse(stepData.PayloadAtEnd);\n } catch {\n payloadData = stepData.PayloadAtEnd;\n }\n \n const parseOptions: ParseJSONOptions = {\n extractInlineJson: true,\n maxDepth: 100,\n debug: false\n };\n // Re-enabled ParseJSONRecursive with performance optimizations\n return ParseJSONRecursive(payloadData, parseOptions);\n } catch (e) {\n return null;\n }\n }\n}\n","<div class=\"record-form-container ai-agent-run-form\">\n <div class=\"record-form\">\n <!-- Header -->\n <div class=\"header\">\n <div class=\"header-content\">\n <div class=\"header-left\">\n <div class=\"icon-wrapper\">\n @if (agent && agent.LogoURL) {\n <img [src]=\"agent.LogoURL\" [alt]=\"agent.Name || 'Agent'\" class=\"agent-logo\" />\n }\n @if (agent && !agent.LogoURL && agent.IconClass) {\n <i class=\"fas\" [ngClass]=\"agent.IconClass\"></i>\n }\n @if (!agent || (!agent.LogoURL && !agent.IconClass)) {\n <i class=\"fas fa-robot\"></i>\n }\n </div>\n <div class=\"header-info\">\n <h2>AI Agent Run</h2>\n <div class=\"meta-info\">\n @if (agent) {\n <span class=\"agent-name\">\n <a href=\"javascript:void(0)\" class=\"entity-link\" (click)=\"openEntityRecord('MJ: AI Agents', record.AgentID)\">\n {{ agent.Name }}\n </a>\n </span>\n }\n <span class=\"run-id\">{{ record.ID }}</span>\n @if (record.ParentRunID) {\n <span class=\"parent-run\">\n <i class=\"fas fa-level-up-alt\"></i>\n <a (click)=\"navigateToParentRun()\" class=\"parent-link\">Parent Run</a>\n </span>\n }\n <!-- Conversation Link Pill -->\n @if (record.ConversationID) {\n <span class=\"conversation-pill\" (click)=\"navigateToConversation()\" title=\"Open conversation in Chat app\">\n <i class=\"fas fa-comments\"></i>\n <span>Conversation</span>\n <i class=\"fas fa-external-link-alt pill-action\"></i>\n </span>\n }\n </div>\n </div>\n </div>\n <div class=\"header-right\">\n @if (record.PlanMode) {\n <div class=\"plan-mode-badge\" title=\"This run executed in Plan Mode — the agent presented a plan for human approval before executing actions or sub-agents\">\n <i class=\"fas fa-clipboard-check\"></i>\n Plan Mode\n </div>\n }\n <div class=\"status-badge\" [attr.data-status]=\"record.Status\">\n <i class=\"fas\" [ngClass]=\"getStatusIcon(record.Status || '')\"></i>\n {{ record.Status }}\n </div>\n <!-- A workflow outlives the run that submitted it, so a Completed run can still have work\n in flight. Said beside the status rather than instead of it — both are true. -->\n @if (WorkflowStillRunning) {\n <div class=\"workflow-running-badge\"\n title=\"This run submitted a workflow that runs on the dispatcher. The run finished when the workflow was submitted; the workflow itself is still going. This view refreshes on its own.\">\n <i class=\"fas fa-circle-notch fa-spin\"></i>\n Workflow still running\n </div>\n }\n <div class=\"header-actions\">\n <button class=\"btn-icon\" (click)=\"refreshData()\" title=\"Refresh\">\n <i class=\"fas fa-sync-alt\"></i>\n </button>\n </div>\n </div>\n </div>\n <div class=\"header-stats\">\n <div class=\"stat\">\n <span class=\"label\">Started</span>\n <span class=\"value\">{{ record.StartedAt | date:'medium' }}</span>\n </div>\n @if (record.CompletedAt) {\n <div class=\"stat\">\n <span class=\"label\">Completed</span>\n <span class=\"value\">{{ record.CompletedAt | date:'medium' }}</span>\n </div>\n }\n @if (record.CompletedAt) {\n <div class=\"stat\">\n <span class=\"label\">Duration</span>\n <span class=\"value\">{{ calculateDuration(record.StartedAt, record.CompletedAt) }}</span>\n </div>\n }\n @if (record.Success !== null && record.CompletedAt !== null) {\n <div class=\"stat\">\n <span class=\"label\">Result</span>\n <span class=\"value\" [class.success]=\"record.Success\" [class.error]=\"!record.Success\">\n {{ record.Success ? 'Success' : 'Failed' }}\n </span>\n </div>\n }\n @if (costMetrics && (costMetrics.totalTokensInput + costMetrics.totalTokensOutput) > 0) {\n <div class=\"stat\">\n <span class=\"label\">Tokens</span>\n @if (!costMetrics.isLoading) {\n <span class=\"value\">{{ (costMetrics.totalTokensInput + costMetrics.totalTokensOutput) | number:'1.0-0' }}</span>\n }\n @if (costMetrics.isLoading) {\n <span class=\"value loading\"><i class=\"fas fa-spinner fa-spin\"></i></span>\n }\n </div>\n }\n @if (costMetrics && costMetrics.totalCost > 0) {\n <div class=\"stat\">\n <span class=\"label\">Cost</span>\n @if (!costMetrics.isLoading) {\n <span class=\"value\">${{ costMetrics.totalCost | number:'1.2-4' }}</span>\n }\n @if (costMetrics.isLoading) {\n <span class=\"value loading\"><i class=\"fas fa-spinner fa-spin\"></i></span>\n }\n </div>\n }\n @if (record.EffortLevel) {\n <div class=\"stat\">\n <span class=\"label\">Effort Level</span>\n <span class=\"value\">{{ record.EffortLevel }}</span>\n </div>\n }\n </div>\n\n <!-- Configuration Bar (shown below header stats when ConfigurationID exists) -->\n @if (record.ConfigurationID) {\n <div class=\"configuration-bar\">\n <div class=\"config-item\">\n <i class=\"fas fa-cog\"></i>\n <div class=\"config-content\">\n <div class=\"config-label\">Configuration</div>\n <div class=\"config-value\">\n <a href=\"javascript:void(0)\" class=\"entity-link\" (click)=\"openEntityRecord('MJ: AI Configurations', record.ConfigurationID)\">\n {{ record.Configuration || 'Unknown' }}\n </a>\n </div>\n </div>\n </div>\n </div>\n }\n </div>\n\n <!-- Tabs -->\n <div class=\"tabs\">\n <button class=\"tab\" [class.active]=\"activeTab === 'timeline'\" (click)=\"changeTab('timeline')\">\n <i class=\"fas fa-stream\"></i> Timeline\n </button>\n <button class=\"tab\" [class.active]=\"activeTab === 'visualization'\" (click)=\"changeTab('visualization')\">\n <i class=\"fas fa-diagram-project\"></i> Visualization\n </button>\n <button class=\"tab\" [class.active]=\"activeTab === 'analytics'\" (click)=\"changeTab('analytics')\">\n <i class=\"fas fa-chart-line\"></i> Analytics\n </button>\n <button class=\"tab\" [class.active]=\"activeTab === 'details'\" (click)=\"changeTab('details')\">\n <i class=\"fas fa-info-circle\"></i> Details\n </button>\n </div>\n\n <!-- Content -->\n <div class=\"content-area\">\n <!-- Timeline Tab -->\n @if (activeTab === 'timeline') {\n <div class=\"tab-content\" style=\"height: 100%;\">\n <as-split direction=\"horizontal\" style=\"height: 100%;\">\n <!-- Timeline Pane -->\n <as-split-area [size]=\"selectedTimelineItem ? 55 : 100\">\n <mj-ai-agent-run-timeline\n [aiAgentRunId]=\"record.ID\"\n [dataHelper]=\"dataHelper\"\n [RunTree]=\"runTree\"\n (itemSelected)=\"selectTimelineItem($event)\"\n (navigateToEntity)=\"navigateToEntityRecord($event)\">\n </mj-ai-agent-run-timeline>\n </as-split-area>\n <!-- JSON Detail Pane -->\n @if (selectedTimelineItem) {\n <as-split-area [size]=\"45\">\n <mj-ai-agent-run-step-detail\n [selectedTimelineItem]=\"selectedTimelineItem\"\n (closePanel)=\"closeJsonPanel()\"\n (navigateToActionLog)=\"navigateToActionLog($event)\"\n (copyToClipboard)=\"copyToClipboard($event)\">\n </mj-ai-agent-run-step-detail>\n </as-split-area>\n }\n </as-split>\n </div>\n }\n\n <!-- Visualization Tab (animated flow views + static flowchart) -->\n @if (activeTab === 'visualization') {\n <div class=\"tab-content\" style=\"height: 100%;\">\n @if (visualizationLoaded) {\n <mj-ai-agent-run-flow\n [aiAgentRunId]=\"record.ID\"\n [dataHelper]=\"dataHelper\"\n [agentName]=\"agent?.Name || null\"\n [runStatus]=\"record.Status || ''\"\n [agentIconClass]=\"agent?.IconClass || null\"\n [agentLogoUrl]=\"agent?.LogoURL || null\"\n [RunTree]=\"runTree\">\n </mj-ai-agent-run-flow>\n }\n </div>\n }\n\n <!-- Analytics Tab -->\n @if (activeTab === 'analytics') {\n <div class=\"tab-content\" style=\"height: 100%;\">\n @if (analyticsLoaded) {\n <mj-ai-agent-run-analytics\n #analyticsComponent\n [agentRunId]=\"record.ID\"\n [RunTree]=\"runTree\"\n >\n </mj-ai-agent-run-analytics>\n }\n </div>\n }\n\n <!-- Details Tab -->\n @if (activeTab === 'details') {\n <div class=\"tab-content\">\n <mj-accordion-panel [Expanded]=\"true\">\n <ng-template mjAccordionTitle>\n <i class=\"fas fa-info-circle\"></i> General Information\n </ng-template>\n <div class=\"details-grid\">\n <div class=\"detail-item\">\n <label>Agent</label>\n <span>\n <a href=\"javascript:void(0)\" class=\"entity-link\" (click)=\"openEntityRecord('MJ: AI Agents', record.AgentID)\">\n {{ agent?.Name || 'N/A' }}\n </a>\n </span>\n </div>\n <div class=\"detail-item\">\n <label>Parent Run ID</label>\n <span>\n @if (record.ParentRunID) {\n <a href=\"javascript:void(0)\" class=\"entity-link\" (click)=\"openEntityRecord('MJ: AI Agent Runs', record.ParentRunID)\">\n {{ record.ParentRunID }}\n </a>\n }\n @if (!record.ParentRunID) {\n <span>None (Root)</span>\n }\n </span>\n </div>\n <div class=\"detail-item\">\n <label>Last Run ID</label>\n <span>\n @if (record.LastRunID) {\n <a href=\"javascript:void(0)\" class=\"entity-link\" (click)=\"openEntityRecord('MJ: AI Agent Runs', record.LastRunID)\">\n {{ record.LastRunID }}\n </a>\n }\n @if (!record.LastRunID) {\n <span>None</span>\n }\n </span>\n </div>\n <div class=\"detail-item\">\n <label>Conversation ID</label>\n <span>\n @if (record.ConversationID) {\n <a href=\"javascript:void(0)\" class=\"entity-link\" (click)=\"openEntityRecord('MJ: Conversations', record.ConversationID)\">\n {{ record.ConversationID }}\n </a>\n }\n @if (!record.ConversationID) {\n <span>N/A</span>\n }\n </span>\n </div>\n <div class=\"detail-item\">\n <label>User</label>\n <span>\n @if (record.UserID) {\n <a href=\"javascript:void(0)\" class=\"entity-link\" (click)=\"openEntityRecord('MJ: Users', record.UserID)\">\n {{ record.User || 'N/A' }}\n </a>\n }\n @if (!record.UserID) {\n <span>N/A</span>\n }\n </span>\n </div>\n </div>\n </mj-accordion-panel>\n <mj-accordion-panel [Expanded]=\"false\">\n <ng-template mjAccordionTitle>\n <i class=\"fas fa-cogs\"></i> Execution Settings\n </ng-template>\n <div class=\"details-grid\">\n <div class=\"detail-item\">\n <label>Override Model</label>\n <span>\n @if (record.OverrideModelID) {\n <a href=\"javascript:void(0)\" class=\"entity-link\" (click)=\"openEntityRecord('MJ: AI Models', record.OverrideModelID)\">\n {{ record.OverrideModel || 'N/A' }}\n </a>\n }\n @if (!record.OverrideModelID) {\n <span>N/A</span>\n }\n </span>\n </div>\n <div class=\"detail-item\">\n <label>Override Vendor</label>\n <span>\n @if (record.OverrideVendorID) {\n <a href=\"javascript:void(0)\" class=\"entity-link\" (click)=\"openEntityRecord('MJ: AI Vendors', record.OverrideVendorID)\">\n {{ record.OverrideVendor || 'N/A' }}\n </a>\n }\n @if (!record.OverrideVendorID) {\n <span>N/A</span>\n }\n </span>\n </div>\n <div class=\"detail-item\">\n <label>Verbose Logging</label>\n <span>{{ record.Verbose ? 'Yes' : 'No' }}</span>\n </div>\n </div>\n </mj-accordion-panel>\n <mj-accordion-panel [Expanded]=\"false\">\n <ng-template mjAccordionTitle>\n <i class=\"fas fa-tasks\"></i> Execution Status\n </ng-template>\n <div class=\"details-grid\">\n <div class=\"detail-item\">\n <label>Status</label>\n <span class=\"status-badge\" [attr.data-status]=\"record.Status\">\n {{ record.Status }}\n </span>\n </div>\n <div class=\"detail-item\">\n <label>Success</label>\n @if (record.Success === null) {\n <span>In Progress</span>\n }\n @else if (record.Success) {\n <span class=\"success\">Yes</span>\n }\n @else {\n <span class=\"error-message\">No</span>\n }\n </div>\n @if (record.Message) {\n <div class=\"detail-item full-width\">\n <label>Message</label>\n <div class=\"message\">{{ record.Message }}</div>\n </div>\n }\n @if (record.ErrorMessage) {\n <div class=\"detail-item full-width\">\n <label>Error Message</label>\n <div class=\"error-message\">{{ record.ErrorMessage }}</div>\n </div>\n }\n </div>\n </mj-accordion-panel>\n <mj-accordion-panel [Expanded]=\"false\">\n <ng-template mjAccordionTitle>\n <i class=\"fas fa-dollar-sign\"></i> Usage &amp; Cost\n </ng-template>\n <div class=\"details-grid\">\n <div class=\"detail-item\">\n <label>Total Tokens Used</label>\n <span>{{ record.TotalTokensUsed ? (record.TotalTokensUsed | number:'1.0-0') : 'N/A' }}</span>\n </div>\n <div class=\"detail-item\">\n <label>Prompt Tokens</label>\n <span>{{ record.TotalPromptTokensUsed ? (record.TotalPromptTokensUsed | number:'1.0-0') : 'N/A' }}</span>\n </div>\n <div class=\"detail-item\">\n <label>Completion Tokens</label>\n <span>{{ record.TotalCompletionTokensUsed ? (record.TotalCompletionTokensUsed | number:'1.0-0') : 'N/A' }}</span>\n </div>\n <div class=\"detail-item\">\n <label>Total Cost</label>\n <span>{{ record.TotalCost != null ? ('$' + (record.TotalCost | number:'1.2-4')) : 'N/A' }}</span>\n </div>\n <div class=\"detail-item\">\n <label>Total Prompt Iterations</label>\n <span>{{ record.TotalPromptIterations != null ? (record.TotalPromptIterations | number:'1.0-0') : 'N/A' }}</span>\n </div>\n </div>\n </mj-accordion-panel>\n @if (record.Result) {\n <mj-accordion-panel [Expanded]=\"false\">\n <ng-template mjAccordionTitle>\n <i class=\"fas fa-code\"></i> Result\n </ng-template>\n <div class=\"result-viewer\">\n @if (isParsingComplete) {\n <mj-code-editor\n [ngModel]=\"parsedResult\"\n [language]=\"'json'\"\n [readonly]=\"true\"\n style=\"height: 300px; width: 100%;\">\n </mj-code-editor>\n } @else {\n <div style=\"padding: 20px; text-align: center; color: var(--mj-text-muted);\">\n <i class=\"fas fa-spinner fa-spin\"></i> Loading result data...\n </div>\n }\n </div>\n </mj-accordion-panel>\n }\n @if (record.StartingPayload) {\n <mj-accordion-panel [Expanded]=\"false\">\n <ng-template mjAccordionTitle>\n <i class=\"fas fa-upload\"></i> Starting Payload\n </ng-template>\n <div class=\"result-viewer\">\n @if (isParsingComplete) {\n <mj-code-editor\n [ngModel]=\"parsedStartingPayload\"\n [language]=\"'json'\"\n [readonly]=\"true\"\n style=\"height: 300px; width: 100%;\">\n </mj-code-editor>\n } @else {\n <div style=\"padding: 20px; text-align: center; color: var(--mj-text-muted);\">\n <i class=\"fas fa-spinner fa-spin\"></i> Loading payload data...\n </div>\n }\n </div>\n </mj-accordion-panel>\n }\n @if (record.Data) {\n <mj-accordion-panel [Expanded]=\"false\">\n <ng-template mjAccordionTitle>\n <i class=\"fas fa-database\"></i> Execution Data\n </ng-template>\n <div class=\"result-viewer\">\n @if (isParsingComplete) {\n <mj-code-editor\n [ngModel]=\"parsedData\"\n [language]=\"'json'\"\n [readonly]=\"true\"\n style=\"height: 300px; width: 100%;\">\n </mj-code-editor>\n } @else {\n <div style=\"padding: 20px; text-align: center; color: var(--mj-text-muted);\">\n <i class=\"fas fa-spinner fa-spin\"></i> Loading execution data...\n </div>\n }\n </div>\n </mj-accordion-panel>\n }\n @if (record.FinalPayload) {\n <mj-accordion-panel [Expanded]=\"false\">\n <ng-template mjAccordionTitle>\n <i class=\"fas fa-download\"></i> Final Payload\n </ng-template>\n <div class=\"result-viewer\">\n @if (isParsingComplete) {\n <mj-code-editor\n [ngModel]=\"parsedFinalPayload\"\n [language]=\"'json'\"\n [readonly]=\"true\"\n style=\"height: 300px; width: 100%;\">\n </mj-code-editor>\n } @else {\n <div style=\"padding: 20px; text-align: center; color: var(--mj-text-muted);\">\n <i class=\"fas fa-spinner fa-spin\"></i> Loading final payload data...\n </div>\n }\n </div>\n </mj-accordion-panel>\n }\n @if (showPayloadDiff) {\n <mj-accordion-panel [Expanded]=\"false\">\n <ng-template mjAccordionTitle>\n <i class=\"fas fa-code-compare\"></i> Payload Diff\n </ng-template>\n <div style=\"padding: 20px; background: var(--mj-bg-surface-card);\">\n @if (isParsingComplete) {\n <mj-deep-diff\n [oldValue]=\"startingPayloadObject\"\n [newValue]=\"finalPayloadObject\"\n [title]=\"''\"\n [showSummary]=\"true\"\n [showUnchanged]=\"false\"\n [expandAll]=\"false\"\n [maxDepth]=\"10\"\n [maxStringLength]=\"200\"\n [treatNullAsUndefined]=\"true\">\n </mj-deep-diff>\n } @else {\n <div style=\"padding: 20px; text-align: center; color: var(--mj-text-muted);\">\n <i class=\"fas fa-spinner fa-spin\"></i> Loading payload diff...\n </div>\n }\n </div>\n </mj-accordion-panel>\n }\n </div>\n }\n</div>\n</div>\n</div>"]}
1
+ {"version":3,"file":"ai-agent-run.component.js","sourceRoot":"","sources":["../../../../src/lib/custom/ai-agent-run/ai-agent-run.component.ts","../../../../src/lib/custom/ai-agent-run/ai-agent-run.component.html"],"names":[],"mappings":"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","sourcesContent":["import { Component, OnInit, OnDestroy, ViewChild, inject } from '@angular/core';\nimport { Subject, Subscription } from 'rxjs';\nimport { BaseEntity, BaseEntityEvent, CompositeKey, Metadata } from '@memberjunction/core';\nimport {\n LoadAgentRunTree,\n MAX_AGENT_RUN_TREE_DEPTH,\n MJAIAgentRunEntityExtended,\n MJAIAgentEntityExtended,\n WalkAgentRunTree,\n type AgentRunTreeNode,\n} from '@memberjunction/ai-core-plus';\nimport { BaseFormComponent } from '@memberjunction/ng-base-forms';\nimport { MJGlobal, MJEvent, MJEventType, RegisterClass, UUIDsEqual } from '@memberjunction/global';\nimport { SharedService, NavigationService } from '@memberjunction/ng-shared';\nimport { TimelineItem, AIAgentRunTimelineComponent } from './ai-agent-run-timeline.component';\nimport { MJAIAgentRunFormComponent } from '../../generated/Entities/MJAIAgentRun/mjaiagentrun.form.component';\nimport { ParseJSONRecursive, ParseJSONOptions } from '@memberjunction/global';\nimport { AIAgentRunAnalyticsComponent } from './ai-agent-run-analytics.component';\nimport { AIAgentRunCostService, AgentRunCostMetrics } from './ai-agent-run-cost.service';\nimport { AIAgentRunDataHelper } from './ai-agent-run-data.service';\nimport { ApplicationManager } from '@memberjunction/ng-base-application';\n\n/**\n * Task statuses that mean the step is finished with. Anything else means the workflow is still\n * moving — see `WorkflowStillRunning`.\n */\nconst TERMINAL_TASK_STATUSES = new Set(['Complete', 'Failed', 'Cancelled', 'Skipped', 'Blocked']);\n\n/**\n * How often to re-read the tree while a detached workflow runs.\n *\n * Human-scale rather than aggressive: a workflow step takes seconds at least, and the query walks\n * the whole tree. Fast enough that a watcher sees progress, slow enough that leaving the tab open on\n * a long workflow is not a load problem.\n */\nconst WORKFLOW_POLL_INTERVAL_MS = 4000;\n\n@RegisterClass(BaseFormComponent, 'MJ: AI Agent Runs')\n@Component({\n standalone: false,\n selector: 'mj-ai-agent-run-form',\n templateUrl: './ai-agent-run.component.html',\n styleUrls: ['./ai-agent-run.component.css']\n})\nexport class MJAIAgentRunFormComponentExtended extends MJAIAgentRunFormComponent implements OnInit, OnDestroy {\n public record!: MJAIAgentRunEntityExtended;\n \n private destroy$ = new Subject<void>();\n\n // MJGlobal BaseEntity event subscription — fires on both local Save()\n // and server-side remote-invalidate events. While the run is Running,\n // this is how we hear about new steps and status changes without\n // polling the DB on a timer. Only attached when Status === 'Running'.\n private entityEventSubscription: Subscription | null = null;\n private refreshInFlight = false;\n\n /** Pending re-read of the run tree while a detached workflow is still running. */\n private workflowPollTimer: ReturnType<typeof setTimeout> | null = null;\n\n // UI state\n activeTab = 'timeline';\n selectedTimelineItem: TimelineItem | null = null;\n jsonPanelExpanded = false;\n loading = false;\n error: string | null = null;\n analyticsLoaded = false;\n visualizationLoaded = false;\n \n agent: MJAIAgentEntityExtended | null = null;\n \n // Cost metrics using shared service\n costMetrics: AgentRunCostMetrics | null = null;\n \n // Cached parsed results to prevent redundant JSON parsing\n private _cachedParsedResult: string | null = null;\n private _cachedParsedStartingPayload: string | null = null;\n private _cachedParsedFinalPayload: string | null = null;\n private _cachedParsedData: string | null = null;\n \n // Simple parsing state - true when all parsing is complete\n private _allParsingComplete = false;\n \n @ViewChild(AIAgentRunTimelineComponent) timelineComponent?: AIAgentRunTimelineComponent;\n @ViewChild(AIAgentRunAnalyticsComponent) analyticsComponent?: AIAgentRunAnalyticsComponent;\n\n // Field injections\n private navigationService = inject(NavigationService);\n private costService = inject(AIAgentRunCostService);\n private appManager = inject(ApplicationManager);\n\n // Instance of data helper per component\n public dataHelper = new AIAgentRunDataHelper();\n\n /**\n * The run's complete execution tree — loaded ONCE here and shared with every tab.\n *\n * **One load, one shape, one refresh.** The timeline, the three flow renderers and analytics all\n * need the same structure; letting each fetch its own would issue the same recursive query three\n * times, and — worse — let the tabs disagree, because a tab that loaded a second earlier shows a\n * different run than the one beside it. Sharing it also means a refresh updates all three at once\n * rather than whichever one the user happens to open next.\n */\n public runTree: AgentRunTreeNode | null = null;\n\n /** True while the tree is loading, so a tab can say so rather than render an empty run. */\n public runTreeLoading = false;\n\n /** Why the tree could not be loaded, or null. Surfaced rather than swallowed. */\n public runTreeError: string | null = null;\n\n /**\n * Loads (or reloads) the shared run tree.\n *\n * Errors are held rather than thrown: a run whose tree cannot be read still has fields worth\n * looking at, and taking the whole form down over one query would hide them.\n */\n private async loadRunTree(): Promise<void> {\n if (!this.record?.ID) return;\n this.runTreeLoading = true;\n this.runTreeError = null;\n try {\n const result = await LoadAgentRunTree(this.record.ID, this.RunQueryToUse);\n this.runTree = result.Root;\n this.runTreeError = result.ErrorMessage;\n if (result.Truncated) {\n this.runTreeError =\n `This run nests deeper than ${MAX_AGENT_RUN_TREE_DEPTH} levels; what is shown is truncated.`;\n }\n } catch (e) {\n this.runTreeError = e instanceof Error ? e.message : String(e);\n this.runTree = null;\n } finally {\n this.runTreeLoading = false;\n this.scheduleWorkflowPoll();\n }\n }\n\n /**\n * True when this run submitted a workflow that has not finished.\n *\n * **The run being \"Completed\" says nothing about this.** A task graph is submit-and-detach: the\n * step that submits it completes as soon as the graph is persisted, and the run completes with it\n * — while the dispatcher goes on executing for seconds or minutes afterwards. One observed run\n * finished in 225ms and its workflow ran for a further eighteen seconds.\n *\n * Without this the form showed a green COMPLETED header above steps sitting at Pending, and the\n * only available reading was that something had failed. Nothing had; the page was simply a\n * snapshot of a moving thing, with nothing saying so.\n */\n public get WorkflowStillRunning(): boolean {\n if (!this.runTree) return false;\n for (const node of WalkAgentRunTree(this.runTree)) {\n if (node.NodeType !== 'Task' && node.NodeType !== 'TaskGraph') continue;\n if (!TERMINAL_TASK_STATUSES.has(node.Status)) return true;\n }\n return false;\n }\n\n /**\n * Re-reads the tree while a detached workflow is still moving, and stops when it settles.\n *\n * Polling rather than the BaseEntity event subscription this form already has, because that\n * subscription cannot see this work for two independent reasons: it is only attached while the RUN\n * is `Running` (a detached graph outlives that), and the dispatcher advances tasks through the\n * claim protocol's direct SQL, which fires no entity events at all.\n *\n * Self-cancelling: each load reschedules only if work remains, so a settled run costs nothing.\n */\n private scheduleWorkflowPoll(): void {\n this.clearWorkflowPoll();\n if (!this.WorkflowStillRunning) return;\n this.workflowPollTimer = setTimeout(() => {\n this.workflowPollTimer = null;\n void this.loadRunTree();\n }, WORKFLOW_POLL_INTERVAL_MS);\n }\n\n private clearWorkflowPoll(): void {\n if (this.workflowPollTimer !== null) {\n clearTimeout(this.workflowPollTimer);\n this.workflowPollTimer = null;\n }\n }\n \n async ngOnInit() {\n await super.ngOnInit();\n \n if (this.record && this.record.ID) {\n await this.dataHelper.loadAgentRunData(this.record.ID);\n await this.loadRunTree();\n await this.loadAgent();\n await this.loadCostMetrics();\n\n // Parse all JSON fields on form load for instant access later\n this.parseAllFields();\n\n // If the run is in progress, subscribe to BaseEntity events so we\n // pick up new steps / status changes the moment AgentRunner saves\n // them — no 30s polling timer. Same pattern used by the Form\n // Builder cockpit. See `handleEntityEvent` below for filtering.\n if (this.record.Status === 'Running') {\n this.subscribeToRunEvents();\n }\n }\n }\n\n ngOnDestroy() {\n this.destroy$.next();\n this.destroy$.complete();\n this.clearWorkflowPoll();\n this.entityEventSubscription?.unsubscribe();\n this.entityEventSubscription = null;\n this.clearParsedCache();\n this.dataHelper.clearData();\n this.costMetrics = null;\n this.agent = null;\n }\n\n private subscribeToRunEvents(): void {\n if (this.entityEventSubscription) return;\n this.entityEventSubscription = MJGlobal.Instance.GetEventListener(false)\n .subscribe(mjEvent => this.handleEntityEvent(mjEvent));\n }\n\n private unsubscribeFromRunEvents(): void {\n this.entityEventSubscription?.unsubscribe();\n this.entityEventSubscription = null;\n }\n\n /**\n * Filter the global BaseEntity event firehose down to saves on the\n * current Agent Run row, its Steps, or its Prompt Runs — and only when\n * AgentRunID matches `this.record.ID`. Local `save` events come from\n * the in-process AgentRunner (dev/same-tab case, which is the primary\n * use case here); `remote-invalidate` covers writes from a separate\n * server process if GraphQL cache-invalidation is wired up.\n */\n private handleEntityEvent(mjEvent: MJEvent): void {\n if (mjEvent.event !== MJEventType.ComponentEvent) return;\n if (mjEvent.eventCode !== BaseEntity.BaseEventCode) return;\n const evt = mjEvent.args as BaseEntityEvent | undefined;\n if (!evt) return;\n if (evt.type !== 'save' && evt.type !== 'remote-invalidate') return;\n\n const entityName = evt.entityName ?? evt.baseEntity?.EntityInfo?.Name;\n if (!entityName) return;\n\n const runId = this.record?.ID;\n if (!runId) return;\n\n if (entityName === 'MJ: AI Agent Runs') {\n // Status change on THIS run row.\n const savedID = this.resolveEventID(evt);\n if (savedID && UUIDsEqual(savedID, runId)) {\n this.refreshData();\n // If the run completed, drop the subscription — no further\n // writes are expected and we don't want to hold the listener.\n const newStatus = this.resolveEventField<string>(evt, 'Status');\n if (newStatus && newStatus !== 'Running') {\n this.unsubscribeFromRunEvents();\n }\n }\n return;\n }\n\n // Steps still carry AgentRunID, so a step write can be correlated exactly to this run.\n if (entityName === 'MJ: AI Agent Run Steps') {\n const childAgentRunId = this.resolveEventField<string>(evt, 'AgentRunID');\n if (childAgentRunId && UUIDsEqual(childAgentRunId, runId)) {\n this.refreshRunDataDebounced();\n }\n return;\n }\n\n // Prompt runs and action logs expose no AgentRunID to correlate on: AIPromptRun.AgentRunID was\n // dropped in v5.50 (Break_CodeGen_Cycle_Remove_PromptRun_AgentRunID) and ActionExecutionLog never\n // had one. Correlating on it made this branch dead for action logs from the start, and for prompt\n // runs from v5.50 — the form simply stopped live-refreshing. Refresh unconditionally instead,\n // which is what the original comment described: the reload is debounced and re-reads only THIS\n // run, and the subscription is dropped once the run leaves 'Running', so a foreign write costs at\n // most one collapsed reload while a run is open on screen.\n if (entityName === 'MJ: AI Prompt Runs' || entityName === 'MJ: Action Execution Logs') {\n this.refreshRunDataDebounced();\n }\n }\n\n private resolveEventID(evt: BaseEntityEvent): string | null {\n if (evt.baseEntity) {\n return evt.baseEntity.PrimaryKey?.ToConcatenatedString() ?? null;\n }\n const payload = evt.payload as { primaryKeyValues?: string | null; recordData?: string | null } | undefined;\n if (!payload) return null;\n try {\n if (payload.primaryKeyValues) {\n const pk = JSON.parse(payload.primaryKeyValues) as Record<string, unknown> | unknown[];\n if (Array.isArray(pk)) {\n const idPair = pk.find(p => (p as { FieldName?: string }).FieldName === 'ID') as { Value?: unknown } | undefined;\n if (idPair?.Value != null) return String(idPair.Value);\n } else if (pk && typeof pk === 'object' && 'ID' in pk) {\n const v = (pk as { ID?: unknown }).ID;\n if (v != null) return String(v);\n }\n }\n } catch {\n // bad JSON — fall through to recordData\n }\n try {\n if (payload.recordData) {\n const row = JSON.parse(payload.recordData) as Record<string, unknown>;\n if (typeof row?.ID === 'string') return row.ID;\n }\n } catch {\n // ignore\n }\n return null;\n }\n\n private resolveEventField<T>(evt: BaseEntityEvent, fieldName: string): T | null {\n if (evt.baseEntity) {\n const val = evt.baseEntity.Get?.(fieldName) as T | undefined;\n return val ?? null;\n }\n const payload = evt.payload as { recordData?: string | null } | undefined;\n if (!payload?.recordData) return null;\n try {\n const row = JSON.parse(payload.recordData) as Record<string, unknown>;\n const v = row?.[fieldName];\n return (v ?? null) as T | null;\n } catch {\n return null;\n }\n }\n\n /**\n * Collapse rapid bursts of step/prompt/action events into a single\n * reload — AgentRunner often saves several rows in quick succession.\n */\n private refreshRunDataDebounced(): void {\n if (this.refreshInFlight) return;\n this.refreshInFlight = true;\n queueMicrotask(() => {\n this.refreshInFlight = false;\n if (!this.record?.ID) return;\n this.dataHelper.loadAgentRunData(this.record.ID, true);\n });\n }\n \n private async loadAgent() {\n if (!this.record?.AgentID) return;\n \n try {\n const md = this.ProviderToUse;\n const agent = await md.GetEntityObject<MJAIAgentEntityExtended>('MJ: AI Agents');\n if (agent && await agent.Load(this.record.AgentID)) {\n this.agent = agent;\n this.cdr.detectChanges();\n }\n } catch (error) {\n console.error('Error loading agent:', error);\n }\n }\n\n private async loadCostMetrics() {\n if (!this.record?.ID) return;\n \n try {\n this.costMetrics = await this.costService.getAgentRunCostMetrics(this.record.ID);\n this.cdr.markForCheck();\n } catch (error) {\n console.error('Error loading cost metrics:', error);\n this.costMetrics = {\n totalCost: 0,\n totalPrompts: 0,\n totalTokensInput: 0,\n totalTokensOutput: 0,\n isLoading: false,\n error: 'Failed to load cost data'\n };\n }\n }\n \n changeTab(tab: string) {\n this.activeTab = tab;\n \n // Lazy load the Visualization (playable + static flow) view on first access\n if (tab === 'visualization' && !this.visualizationLoaded) {\n this.visualizationLoaded = true;\n this.cdr.markForCheck();\n }\n \n // Lazy load analytics when the tab is first accessed\n if (tab === 'analytics' && !this.analyticsLoaded) {\n this.analyticsLoaded = true;\n this.cdr.markForCheck();\n }\n }\n \n \n calculateDuration(start: Date, end?: Date | null): string {\n if (!end) return 'Running...';\n \n const ms = end.getTime() - start.getTime();\n if (ms < 1000) return `${ms}ms`;\n if (ms < 60000) return `${(ms / 1000).toFixed(1)}s`;\n if (ms < 3600000) return `${Math.floor(ms / 60000)}m ${Math.floor((ms % 60000) / 1000)}s`;\n return `${Math.floor(ms / 3600000)}h ${Math.floor((ms % 3600000) / 60000)}m`;\n }\n \n selectTimelineItem(item: TimelineItem) {\n this.selectedTimelineItem = item;\n this.jsonPanelExpanded = true;\n this.cdr.markForCheck();\n }\n \n closeJsonPanel() {\n this.selectedTimelineItem = null;\n this.cdr.markForCheck();\n }\n \n navigateToSubRun(runId: string) {\n SharedService.Instance.OpenEntityRecord(\"MJ: AI Agent Runs\", CompositeKey.FromID(runId));\n }\n\n navigateToParentRun() {\n if (this.record.ParentRunID) {\n SharedService.Instance.OpenEntityRecord(\"MJ: AI Agent Runs\", CompositeKey.FromID(this.record.ParentRunID));\n }\n }\n \n navigateToActionLog(logId: string) {\n SharedService.Instance.OpenEntityRecord(\"MJ: Action Execution Logs\", CompositeKey.FromID(logId));\n }\n \n openEntityRecord(entityName: string, recordId: string | null) {\n if (recordId) {\n SharedService.Instance.OpenEntityRecord(entityName, CompositeKey.FromID(recordId));\n }\n }\n \n navigateToEntityRecord(event: { entityName: string; recordId: string }) {\n SharedService.Instance.OpenEntityRecord(event.entityName, CompositeKey.FromID(event.recordId));\n }\n\n /**\n * Navigate to the conversation in the Chat application\n */\n navigateToConversation() {\n if (!this.record?.ConversationID) return;\n\n // Find the Chat app\n const chatApp = this.appManager.GetAllApps().find(app => app.Name === 'Chat');\n if (!chatApp) {\n console.warn('Chat application not found');\n return;\n }\n\n // Navigate to the Conversations nav item with the conversationId parameter\n this.navigationService.OpenNavItemByName(\n 'Conversations',\n { conversationId: this.record.ConversationID },\n chatApp.ID\n );\n }\n \n refreshData() {\n // Reload the agent run record to get latest status\n if (this.record?.ID) {\n // Clear parsed cache when refreshing data\n this.clearParsedCache();\n \n // No panel states to reset in simplified approach\n \n this.record.Load(this.record.ID).then(() => {\n // Clear cost cache and reload\n this.costService.clearCache(this.record.ID);\n this.loadCostMetrics();\n \n // Reload data through helper - this will update all components (force reload for refresh)\n this.dataHelper.loadAgentRunData(this.record.ID, true);\n void this.loadRunTree();\n \n // Trigger analytics refresh\n if (this.analyticsComponent) {\n this.analyticsComponent.loadData();\n }\n });\n }\n }\n \n \n getStatusIcon(status: string): string {\n const iconMap: Record<string, string> = {\n 'Running': 'fa-circle-notch fa-spin',\n 'Completed': 'fa-check-circle',\n 'Failed': 'fa-times-circle',\n 'Cancelled': 'fa-ban',\n 'Paused': 'fa-pause-circle'\n };\n return iconMap[status] || 'fa-question-circle';\n }\n \n async copyToClipboard(text: string) {\n try {\n await navigator.clipboard.writeText(text);\n // Could show a toast notification here\n } catch (err) {\n console.error('Failed to copy to clipboard:', err);\n }\n }\n \n /**\n * Get the Result field with recursive JSON parsing applied\n */\n get parsedResult(): string {\n if (!this.record?.Result) {\n return '';\n }\n \n // Return cached result if available\n if (this._cachedParsedResult !== null) {\n return this._cachedParsedResult;\n }\n \n \n try {\n // First, check if Result is a JSON string that needs to be parsed\n let resultData = this.record.Result;\n try {\n // If Result is a JSON string, parse it first\n resultData = JSON.parse(this.record.Result);\n } catch {\n // If it's not valid JSON, use it as-is\n resultData = this.record.Result;\n }\n \n const parseOptions: ParseJSONOptions = {\n extractInlineJson: true,\n maxDepth: 100,\n debug: false // Disable debug logging - regex issue fixed\n };\n // Re-enabled ParseJSONRecursive with performance optimizations\n const parsed = ParseJSONRecursive(resultData, parseOptions);\n const result = JSON.stringify(parsed, null, 2);\n \n // Cache the result\n this._cachedParsedResult = result;\n \n return result;\n } catch (e) {\n const fallbackResult = this.record.Result;\n this._cachedParsedResult = fallbackResult;\n return fallbackResult;\n }\n }\n \n /**\n * Get the Starting Payload field with recursive JSON parsing applied\n */\n get parsedStartingPayload(): string {\n if (!this.record?.StartingPayload) {\n return '';\n }\n \n // Return cached result if available\n if (this._cachedParsedStartingPayload !== null) {\n return this._cachedParsedStartingPayload;\n }\n \n \n try {\n // First, check if StartingPayload is a JSON string that needs to be parsed\n let payloadData = this.record.StartingPayload;\n try {\n // If StartingPayload is a JSON string, parse it first\n payloadData = JSON.parse(this.record.StartingPayload);\n } catch {\n // If it's not valid JSON, use it as-is\n payloadData = this.record.StartingPayload;\n }\n \n const parseOptions: ParseJSONOptions = {\n extractInlineJson: true,\n maxDepth: 100,\n debug: false\n };\n // Re-enabled ParseJSONRecursive with performance optimizations\n const parsed = ParseJSONRecursive(payloadData, parseOptions);\n const result = JSON.stringify(parsed, null, 2);\n \n // Cache the result\n this._cachedParsedStartingPayload = result;\n \n return result;\n } catch (e) {\n const fallbackResult = this.record.StartingPayload;\n this._cachedParsedStartingPayload = fallbackResult;\n return fallbackResult;\n }\n }\n\n /**\n * Get the Final Payload (state) field with recursive JSON parsing applied\n */\n get parsedFinalPayload(): string {\n if (!this.record?.FinalPayload) return '';\n \n // Return cached result if available\n if (this._cachedParsedFinalPayload !== null) {\n return this._cachedParsedFinalPayload;\n }\n \n try {\n // First, check if FinalPayload is a JSON string that needs to be parsed\n let payloadData = this.record.FinalPayload;\n try {\n // If FinalPayload is a JSON string, parse it first\n payloadData = JSON.parse(this.record.FinalPayload);\n } catch {\n // If it's not valid JSON, use it as-is\n payloadData = this.record.FinalPayload;\n }\n \n const parseOptions: ParseJSONOptions = {\n extractInlineJson: true,\n maxDepth: 100,\n debug: false // Disable debug logging - regex issue fixed\n };\n // Re-enabled ParseJSONRecursive with performance optimizations\n const parsed = ParseJSONRecursive(payloadData, parseOptions);\n const result = JSON.stringify(parsed, null, 2);\n \n // Cache the result\n this._cachedParsedFinalPayload = result;\n \n return result;\n } catch (e) {\n const fallbackResult = this.record.FinalPayload;\n this._cachedParsedFinalPayload = fallbackResult;\n return fallbackResult;\n }\n }\n\n /**\n * Get the Data field with recursive JSON parsing applied\n */\n get parsedData(): string {\n if (!this.record?.Data) return '';\n \n // Return cached result if available\n if (this._cachedParsedData !== null) {\n return this._cachedParsedData;\n }\n \n try {\n // First, check if Data is a JSON string that needs to be parsed\n let data = this.record.Data;\n try {\n // If Data is a JSON string, parse it first\n data = JSON.parse(this.record.Data);\n } catch {\n // If it's not valid JSON, use it as-is\n data = this.record.Data;\n }\n \n const parseOptions: ParseJSONOptions = {\n extractInlineJson: true,\n maxDepth: 100,\n debug: false\n };\n // Re-enabled ParseJSONRecursive with performance optimizations\n const parsed = ParseJSONRecursive(data, parseOptions);\n const result = JSON.stringify(parsed, null, 2);\n \n // Cache the result\n this._cachedParsedData = result;\n \n return result;\n } catch (e) {\n const fallbackResult = this.record.Data;\n this._cachedParsedData = fallbackResult;\n return fallbackResult;\n }\n }\n \n /**\n * Get parsed Starting Payload as an object for deep diff\n */\n get startingPayloadObject(): any {\n if (!this.record?.StartingPayload) return null;\n \n try {\n // First, check if StartingPayload is a JSON string that needs to be parsed\n let payloadData = this.record.StartingPayload;\n try {\n // If StartingPayload is a JSON string, parse it first\n payloadData = JSON.parse(this.record.StartingPayload);\n } catch {\n // If it's not valid JSON, use it as-is\n payloadData = this.record.StartingPayload;\n }\n \n const parseOptions: ParseJSONOptions = {\n extractInlineJson: true,\n maxDepth: 100,\n debug: false\n };\n // Re-enabled ParseJSONRecursive with performance optimizations\n return ParseJSONRecursive(payloadData, parseOptions);\n } catch (e) {\n return null;\n }\n }\n\n /**\n * Get parsed Final Payload as an object for deep diff\n */\n get finalPayloadObject(): any {\n if (!this.record?.FinalPayload) return null;\n \n try {\n // First, check if FinalPayload is a JSON string that needs to be parsed\n let payloadData = this.record.FinalPayload;\n try {\n // If FinalPayload is a JSON string, parse it first\n payloadData = JSON.parse(this.record.FinalPayload);\n } catch {\n // If it's not valid JSON, use it as-is\n payloadData = this.record.FinalPayload;\n }\n \n const parseOptions: ParseJSONOptions = {\n extractInlineJson: true,\n maxDepth: 100,\n debug: false\n };\n // Re-enabled ParseJSONRecursive with performance optimizations\n return ParseJSONRecursive(payloadData, parseOptions);\n } catch (e) {\n return null;\n }\n }\n\n /**\n * Clear all cached parsed results\n */\n private clearParsedCache(): void {\n this._cachedParsedResult = null;\n this._cachedParsedStartingPayload = null;\n this._cachedParsedFinalPayload = null;\n this._cachedParsedData = null;\n this._allParsingComplete = false;\n }\n \n /**\n * Parse all JSON fields at once and cache results\n */\n private parseAllFields(): void {\n try {\n let parsedCount = 0;\n \n // Parse all fields that exist\n if (this.record?.Result) {\n this.parsedResult; // Triggers parsing and caching\n parsedCount++;\n }\n \n if (this.record?.StartingPayload) {\n this.parsedStartingPayload; // Triggers parsing and caching\n parsedCount++;\n }\n \n if (this.record?.FinalPayload) {\n this.parsedFinalPayload; // Triggers parsing and caching\n parsedCount++;\n }\n \n if (this.record?.Data) {\n this.parsedData; // Triggers parsing and caching\n parsedCount++;\n }\n \n this._allParsingComplete = true;\n \n } catch (error) {\n console.error('Error during JSON parsing:', error);\n }\n }\n \n /**\n * Check if all parsing is complete - used by template\n */\n get isParsingComplete(): boolean {\n return this._allParsingComplete;\n }\n\n /**\n * Check if we have both payloads to show diff\n */\n get showPayloadDiff(): boolean {\n return !!(this.record?.StartingPayload && this.record?.FinalPayload);\n }\n\n /**\n * Check if selected timeline item is a step with payload changes\n */\n get showStepPayloadDiff(): boolean {\n if (!this.selectedTimelineItem || this.selectedTimelineItem.type !== 'step') {\n return false;\n }\n \n const stepData = this.selectedTimelineItem.data;\n if (stepData && (stepData.PayloadAtStart?.trim().length > 0 \n || stepData.PayloadAtEnd?.trim().length > 0)) {\n return stepData.PayloadAtStart !== stepData.PayloadAtEnd;\n }\n else {\n return false;\n }\n }\n\n /**\n * Get parsed PayloadAtStart for the selected step\n */\n get stepPayloadAtStartObject(): any {\n if (!this.selectedTimelineItem || this.selectedTimelineItem.type !== 'step') {\n return null;\n }\n \n const stepData = this.selectedTimelineItem.data;\n if (!stepData || !stepData.PayloadAtStart) {\n return null;\n }\n \n try {\n let payloadData = stepData.PayloadAtStart;\n try {\n payloadData = JSON.parse(stepData.PayloadAtStart);\n } catch {\n payloadData = stepData.PayloadAtStart;\n }\n \n const parseOptions: ParseJSONOptions = {\n extractInlineJson: true,\n maxDepth: 100,\n debug: false\n };\n // Re-enabled ParseJSONRecursive with performance optimizations\n return ParseJSONRecursive(payloadData, parseOptions);\n } catch (e) {\n return null;\n }\n }\n\n /**\n * Get parsed PayloadAtEnd for the selected step\n */\n get stepPayloadAtEndObject(): any {\n if (!this.selectedTimelineItem || this.selectedTimelineItem.type !== 'step') {\n return null;\n }\n \n const stepData = this.selectedTimelineItem.data;\n if (!stepData || !stepData.PayloadAtEnd) {\n return null;\n }\n \n try {\n let payloadData = stepData.PayloadAtEnd;\n try {\n payloadData = JSON.parse(stepData.PayloadAtEnd);\n } catch {\n payloadData = stepData.PayloadAtEnd;\n }\n \n const parseOptions: ParseJSONOptions = {\n extractInlineJson: true,\n maxDepth: 100,\n debug: false\n };\n // Re-enabled ParseJSONRecursive with performance optimizations\n return ParseJSONRecursive(payloadData, parseOptions);\n } catch (e) {\n return null;\n }\n }\n}\n","<div class=\"record-form-container ai-agent-run-form\">\n <div class=\"record-form\">\n <!-- Header -->\n <div class=\"header\">\n <div class=\"header-content\">\n <div class=\"header-left\">\n <div class=\"icon-wrapper\">\n @if (agent && agent.LogoURL) {\n <img [src]=\"agent.LogoURL\" [alt]=\"agent.Name || 'Agent'\" class=\"agent-logo\" />\n }\n @if (agent && !agent.LogoURL && agent.IconClass) {\n <i class=\"fas\" [ngClass]=\"agent.IconClass\"></i>\n }\n @if (!agent || (!agent.LogoURL && !agent.IconClass)) {\n <i class=\"fas fa-robot\"></i>\n }\n </div>\n <div class=\"header-info\">\n <h2>AI Agent Run</h2>\n <div class=\"meta-info\">\n @if (agent) {\n <span class=\"agent-name\">\n <a href=\"javascript:void(0)\" class=\"entity-link\" (click)=\"openEntityRecord('MJ: AI Agents', record.AgentID)\">\n {{ agent.Name }}\n </a>\n </span>\n }\n <span class=\"run-id\">{{ record.ID }}</span>\n @if (record.ParentRunID) {\n <span class=\"parent-run\">\n <i class=\"fas fa-level-up-alt\"></i>\n <a (click)=\"navigateToParentRun()\" class=\"parent-link\">Parent Run</a>\n </span>\n }\n <!-- Conversation Link Pill -->\n @if (record.ConversationID) {\n <span class=\"conversation-pill\" (click)=\"navigateToConversation()\" title=\"Open conversation in Chat app\">\n <i class=\"fas fa-comments\"></i>\n <span>Conversation</span>\n <i class=\"fas fa-external-link-alt pill-action\"></i>\n </span>\n }\n </div>\n </div>\n </div>\n <div class=\"header-right\">\n @if (record.PlanMode) {\n <div class=\"plan-mode-badge\" title=\"This run executed in Plan Mode — the agent presented a plan for human approval before executing actions or sub-agents\">\n <i class=\"fas fa-clipboard-check\"></i>\n Plan Mode\n </div>\n }\n <div class=\"status-badge\" [attr.data-status]=\"record.Status\">\n <i class=\"fas\" [ngClass]=\"getStatusIcon(record.Status || '')\"></i>\n {{ record.Status }}\n </div>\n <!-- A workflow outlives the run that submitted it, so a Completed run can still have work\n in flight. Said beside the status rather than instead of it — both are true. -->\n @if (WorkflowStillRunning) {\n <div class=\"workflow-running-badge\"\n title=\"This run submitted a workflow that runs on the dispatcher. The run finished when the workflow was submitted; the workflow itself is still going. This view refreshes on its own.\">\n <i class=\"fas fa-circle-notch fa-spin\"></i>\n Workflow still running\n </div>\n }\n <div class=\"header-actions\">\n <button class=\"btn-icon\" (click)=\"refreshData()\" title=\"Refresh\">\n <i class=\"fas fa-sync-alt\"></i>\n </button>\n </div>\n </div>\n </div>\n <div class=\"header-stats\">\n <div class=\"stat\">\n <span class=\"label\">Started</span>\n <span class=\"value\">{{ record.StartedAt | date:'medium' }}</span>\n </div>\n @if (record.CompletedAt) {\n <div class=\"stat\">\n <span class=\"label\">Completed</span>\n <span class=\"value\">{{ record.CompletedAt | date:'medium' }}</span>\n </div>\n }\n @if (record.CompletedAt) {\n <div class=\"stat\">\n <span class=\"label\">Duration</span>\n <span class=\"value\">{{ calculateDuration(record.StartedAt, record.CompletedAt) }}</span>\n </div>\n }\n @if (record.Success !== null && record.CompletedAt !== null) {\n <div class=\"stat\">\n <span class=\"label\">Result</span>\n <span class=\"value\" [class.success]=\"record.Success\" [class.error]=\"!record.Success\">\n {{ record.Success ? 'Success' : 'Failed' }}\n </span>\n </div>\n }\n @if (costMetrics && (costMetrics.totalTokensInput + costMetrics.totalTokensOutput) > 0) {\n <div class=\"stat\">\n <span class=\"label\">Tokens</span>\n @if (!costMetrics.isLoading) {\n <span class=\"value\">{{ (costMetrics.totalTokensInput + costMetrics.totalTokensOutput) | number:'1.0-0' }}</span>\n }\n @if (costMetrics.isLoading) {\n <span class=\"value loading\"><i class=\"fas fa-spinner fa-spin\"></i></span>\n }\n </div>\n }\n @if (costMetrics && costMetrics.totalCost > 0) {\n <div class=\"stat\">\n <span class=\"label\">Cost</span>\n @if (!costMetrics.isLoading) {\n <span class=\"value\">${{ costMetrics.totalCost | number:'1.2-4' }}</span>\n }\n @if (costMetrics.isLoading) {\n <span class=\"value loading\"><i class=\"fas fa-spinner fa-spin\"></i></span>\n }\n </div>\n }\n @if (record.EffortLevel) {\n <div class=\"stat\">\n <span class=\"label\">Effort Level</span>\n <span class=\"value\">{{ record.EffortLevel }}</span>\n </div>\n }\n </div>\n\n <!-- Configuration Bar (shown below header stats when ConfigurationID exists) -->\n @if (record.ConfigurationID) {\n <div class=\"configuration-bar\">\n <div class=\"config-item\">\n <i class=\"fas fa-cog\"></i>\n <div class=\"config-content\">\n <div class=\"config-label\">Configuration</div>\n <div class=\"config-value\">\n <a href=\"javascript:void(0)\" class=\"entity-link\" (click)=\"openEntityRecord('MJ: AI Configurations', record.ConfigurationID)\">\n {{ record.Configuration || 'Unknown' }}\n </a>\n </div>\n </div>\n </div>\n </div>\n }\n </div>\n\n <!-- Tabs -->\n <div class=\"tabs\">\n <button class=\"tab\" [class.active]=\"activeTab === 'timeline'\" (click)=\"changeTab('timeline')\">\n <i class=\"fas fa-stream\"></i> Timeline\n </button>\n <button class=\"tab\" [class.active]=\"activeTab === 'visualization'\" (click)=\"changeTab('visualization')\">\n <i class=\"fas fa-diagram-project\"></i> Visualization\n </button>\n <button class=\"tab\" [class.active]=\"activeTab === 'analytics'\" (click)=\"changeTab('analytics')\">\n <i class=\"fas fa-chart-line\"></i> Analytics\n </button>\n <button class=\"tab\" [class.active]=\"activeTab === 'details'\" (click)=\"changeTab('details')\">\n <i class=\"fas fa-info-circle\"></i> Details\n </button>\n </div>\n\n <!-- Content -->\n <div class=\"content-area\">\n <!-- Timeline Tab -->\n @if (activeTab === 'timeline') {\n <div class=\"tab-content\" style=\"height: 100%;\">\n <as-split direction=\"horizontal\" style=\"height: 100%;\">\n <!-- Timeline Pane -->\n <as-split-area [size]=\"selectedTimelineItem ? 55 : 100\">\n <mj-ai-agent-run-timeline\n [aiAgentRunId]=\"record.ID\"\n [dataHelper]=\"dataHelper\"\n [RunTree]=\"runTree\"\n (itemSelected)=\"selectTimelineItem($event)\"\n (navigateToEntity)=\"navigateToEntityRecord($event)\">\n </mj-ai-agent-run-timeline>\n </as-split-area>\n <!-- JSON Detail Pane -->\n @if (selectedTimelineItem) {\n <as-split-area [size]=\"45\">\n <mj-ai-agent-run-step-detail\n [selectedTimelineItem]=\"selectedTimelineItem\"\n [Provider]=\"ProviderToUse\"\n (closePanel)=\"closeJsonPanel()\"\n (navigateToActionLog)=\"navigateToActionLog($event)\"\n (copyToClipboard)=\"copyToClipboard($event)\">\n </mj-ai-agent-run-step-detail>\n </as-split-area>\n }\n </as-split>\n </div>\n }\n\n <!-- Visualization Tab (animated flow views + static flowchart) -->\n @if (activeTab === 'visualization') {\n <div class=\"tab-content\" style=\"height: 100%;\">\n @if (visualizationLoaded) {\n <mj-ai-agent-run-flow\n [aiAgentRunId]=\"record.ID\"\n [dataHelper]=\"dataHelper\"\n [agentName]=\"agent?.Name || null\"\n [runStatus]=\"record.Status || ''\"\n [agentIconClass]=\"agent?.IconClass || null\"\n [agentLogoUrl]=\"agent?.LogoURL || null\"\n [RunTree]=\"runTree\">\n </mj-ai-agent-run-flow>\n }\n </div>\n }\n\n <!-- Analytics Tab -->\n @if (activeTab === 'analytics') {\n <div class=\"tab-content\" style=\"height: 100%;\">\n @if (analyticsLoaded) {\n <mj-ai-agent-run-analytics\n #analyticsComponent\n [agentRunId]=\"record.ID\"\n [RunTree]=\"runTree\"\n >\n </mj-ai-agent-run-analytics>\n }\n </div>\n }\n\n <!-- Details Tab -->\n @if (activeTab === 'details') {\n <div class=\"tab-content\">\n <mj-accordion-panel [Expanded]=\"true\">\n <ng-template mjAccordionTitle>\n <i class=\"fas fa-info-circle\"></i> General Information\n </ng-template>\n <div class=\"details-grid\">\n <div class=\"detail-item\">\n <label>Agent</label>\n <span>\n <a href=\"javascript:void(0)\" class=\"entity-link\" (click)=\"openEntityRecord('MJ: AI Agents', record.AgentID)\">\n {{ agent?.Name || 'N/A' }}\n </a>\n </span>\n </div>\n <div class=\"detail-item\">\n <label>Parent Run ID</label>\n <span>\n @if (record.ParentRunID) {\n <a href=\"javascript:void(0)\" class=\"entity-link\" (click)=\"openEntityRecord('MJ: AI Agent Runs', record.ParentRunID)\">\n {{ record.ParentRunID }}\n </a>\n }\n @if (!record.ParentRunID) {\n <span>None (Root)</span>\n }\n </span>\n </div>\n <div class=\"detail-item\">\n <label>Last Run ID</label>\n <span>\n @if (record.LastRunID) {\n <a href=\"javascript:void(0)\" class=\"entity-link\" (click)=\"openEntityRecord('MJ: AI Agent Runs', record.LastRunID)\">\n {{ record.LastRunID }}\n </a>\n }\n @if (!record.LastRunID) {\n <span>None</span>\n }\n </span>\n </div>\n <div class=\"detail-item\">\n <label>Conversation ID</label>\n <span>\n @if (record.ConversationID) {\n <a href=\"javascript:void(0)\" class=\"entity-link\" (click)=\"openEntityRecord('MJ: Conversations', record.ConversationID)\">\n {{ record.ConversationID }}\n </a>\n }\n @if (!record.ConversationID) {\n <span>N/A</span>\n }\n </span>\n </div>\n <div class=\"detail-item\">\n <label>User</label>\n <span>\n @if (record.UserID) {\n <a href=\"javascript:void(0)\" class=\"entity-link\" (click)=\"openEntityRecord('MJ: Users', record.UserID)\">\n {{ record.User || 'N/A' }}\n </a>\n }\n @if (!record.UserID) {\n <span>N/A</span>\n }\n </span>\n </div>\n </div>\n </mj-accordion-panel>\n <mj-accordion-panel [Expanded]=\"false\">\n <ng-template mjAccordionTitle>\n <i class=\"fas fa-cogs\"></i> Execution Settings\n </ng-template>\n <div class=\"details-grid\">\n <div class=\"detail-item\">\n <label>Override Model</label>\n <span>\n @if (record.OverrideModelID) {\n <a href=\"javascript:void(0)\" class=\"entity-link\" (click)=\"openEntityRecord('MJ: AI Models', record.OverrideModelID)\">\n {{ record.OverrideModel || 'N/A' }}\n </a>\n }\n @if (!record.OverrideModelID) {\n <span>N/A</span>\n }\n </span>\n </div>\n <div class=\"detail-item\">\n <label>Override Vendor</label>\n <span>\n @if (record.OverrideVendorID) {\n <a href=\"javascript:void(0)\" class=\"entity-link\" (click)=\"openEntityRecord('MJ: AI Vendors', record.OverrideVendorID)\">\n {{ record.OverrideVendor || 'N/A' }}\n </a>\n }\n @if (!record.OverrideVendorID) {\n <span>N/A</span>\n }\n </span>\n </div>\n <div class=\"detail-item\">\n <label>Verbose Logging</label>\n <span>{{ record.Verbose ? 'Yes' : 'No' }}</span>\n </div>\n </div>\n </mj-accordion-panel>\n <mj-accordion-panel [Expanded]=\"false\">\n <ng-template mjAccordionTitle>\n <i class=\"fas fa-tasks\"></i> Execution Status\n </ng-template>\n <div class=\"details-grid\">\n <div class=\"detail-item\">\n <label>Status</label>\n <span class=\"status-badge\" [attr.data-status]=\"record.Status\">\n {{ record.Status }}\n </span>\n </div>\n <div class=\"detail-item\">\n <label>Success</label>\n @if (record.Success === null) {\n <span>In Progress</span>\n }\n @else if (record.Success) {\n <span class=\"success\">Yes</span>\n }\n @else {\n <span class=\"error-message\">No</span>\n }\n </div>\n @if (record.Message) {\n <div class=\"detail-item full-width\">\n <label>Message</label>\n <div class=\"message\">{{ record.Message }}</div>\n </div>\n }\n @if (record.ErrorMessage) {\n <div class=\"detail-item full-width\">\n <label>Error Message</label>\n <div class=\"error-message\">{{ record.ErrorMessage }}</div>\n </div>\n }\n </div>\n </mj-accordion-panel>\n <mj-accordion-panel [Expanded]=\"false\">\n <ng-template mjAccordionTitle>\n <i class=\"fas fa-dollar-sign\"></i> Usage &amp; Cost\n </ng-template>\n <div class=\"details-grid\">\n <div class=\"detail-item\">\n <label>Total Tokens Used</label>\n <span>{{ record.TotalTokensUsed ? (record.TotalTokensUsed | number:'1.0-0') : 'N/A' }}</span>\n </div>\n <div class=\"detail-item\">\n <label>Prompt Tokens</label>\n <span>{{ record.TotalPromptTokensUsed ? (record.TotalPromptTokensUsed | number:'1.0-0') : 'N/A' }}</span>\n </div>\n <div class=\"detail-item\">\n <label>Completion Tokens</label>\n <span>{{ record.TotalCompletionTokensUsed ? (record.TotalCompletionTokensUsed | number:'1.0-0') : 'N/A' }}</span>\n </div>\n <div class=\"detail-item\">\n <label>Total Cost</label>\n <span>{{ record.TotalCost != null ? ('$' + (record.TotalCost | number:'1.2-4')) : 'N/A' }}</span>\n </div>\n <div class=\"detail-item\">\n <label>Total Prompt Iterations</label>\n <span>{{ record.TotalPromptIterations != null ? (record.TotalPromptIterations | number:'1.0-0') : 'N/A' }}</span>\n </div>\n </div>\n </mj-accordion-panel>\n @if (record.Result) {\n <mj-accordion-panel [Expanded]=\"false\">\n <ng-template mjAccordionTitle>\n <i class=\"fas fa-code\"></i> Result\n </ng-template>\n <div class=\"result-viewer\">\n @if (isParsingComplete) {\n <mj-code-editor\n [ngModel]=\"parsedResult\"\n [language]=\"'json'\"\n [readonly]=\"true\"\n style=\"height: 300px; width: 100%;\">\n </mj-code-editor>\n } @else {\n <div style=\"padding: 20px; text-align: center; color: var(--mj-text-muted);\">\n <i class=\"fas fa-spinner fa-spin\"></i> Loading result data...\n </div>\n }\n </div>\n </mj-accordion-panel>\n }\n @if (record.StartingPayload) {\n <mj-accordion-panel [Expanded]=\"false\">\n <ng-template mjAccordionTitle>\n <i class=\"fas fa-upload\"></i> Starting Payload\n </ng-template>\n <div class=\"result-viewer\">\n @if (isParsingComplete) {\n <mj-code-editor\n [ngModel]=\"parsedStartingPayload\"\n [language]=\"'json'\"\n [readonly]=\"true\"\n style=\"height: 300px; width: 100%;\">\n </mj-code-editor>\n } @else {\n <div style=\"padding: 20px; text-align: center; color: var(--mj-text-muted);\">\n <i class=\"fas fa-spinner fa-spin\"></i> Loading payload data...\n </div>\n }\n </div>\n </mj-accordion-panel>\n }\n @if (record.Data) {\n <mj-accordion-panel [Expanded]=\"false\">\n <ng-template mjAccordionTitle>\n <i class=\"fas fa-database\"></i> Execution Data\n </ng-template>\n <div class=\"result-viewer\">\n @if (isParsingComplete) {\n <mj-code-editor\n [ngModel]=\"parsedData\"\n [language]=\"'json'\"\n [readonly]=\"true\"\n style=\"height: 300px; width: 100%;\">\n </mj-code-editor>\n } @else {\n <div style=\"padding: 20px; text-align: center; color: var(--mj-text-muted);\">\n <i class=\"fas fa-spinner fa-spin\"></i> Loading execution data...\n </div>\n }\n </div>\n </mj-accordion-panel>\n }\n @if (record.FinalPayload) {\n <mj-accordion-panel [Expanded]=\"false\">\n <ng-template mjAccordionTitle>\n <i class=\"fas fa-download\"></i> Final Payload\n </ng-template>\n <div class=\"result-viewer\">\n @if (isParsingComplete) {\n <mj-code-editor\n [ngModel]=\"parsedFinalPayload\"\n [language]=\"'json'\"\n [readonly]=\"true\"\n style=\"height: 300px; width: 100%;\">\n </mj-code-editor>\n } @else {\n <div style=\"padding: 20px; text-align: center; color: var(--mj-text-muted);\">\n <i class=\"fas fa-spinner fa-spin\"></i> Loading final payload data...\n </div>\n }\n </div>\n </mj-accordion-panel>\n }\n @if (showPayloadDiff) {\n <mj-accordion-panel [Expanded]=\"false\">\n <ng-template mjAccordionTitle>\n <i class=\"fas fa-code-compare\"></i> Payload Diff\n </ng-template>\n <div style=\"padding: 20px; background: var(--mj-bg-surface-card);\">\n @if (isParsingComplete) {\n <mj-deep-diff\n [oldValue]=\"startingPayloadObject\"\n [newValue]=\"finalPayloadObject\"\n [title]=\"''\"\n [showSummary]=\"true\"\n [showUnchanged]=\"false\"\n [expandAll]=\"false\"\n [maxDepth]=\"10\"\n [maxStringLength]=\"200\"\n [treatNullAsUndefined]=\"true\">\n </mj-deep-diff>\n } @else {\n <div style=\"padding: 20px; text-align: center; color: var(--mj-text-muted);\">\n <i class=\"fas fa-spinner fa-spin\"></i> Loading payload diff...\n </div>\n }\n </div>\n </mj-accordion-panel>\n }\n </div>\n }\n</div>\n</div>\n</div>"]}
@@ -86,5 +86,13 @@ export declare function ProjectTaskToStepView(node: AgentRunTreeNode, stepNumber
86
86
  * @param skipRoot omit the root itself — used when the row that owns this subtree is already on
87
87
  * screen and the tree is being expanded underneath it
88
88
  */
89
- export declare function ProjectRunTreeToTimeline(root: AgentRunTreeNode | null, baseLevel?: number, skipRoot?: boolean): TimelineItem[];
89
+ export declare function ProjectRunTreeToTimeline(root: AgentRunTreeNode | null, baseLevel?: number, skipRoot?: boolean, resolveIcon?: TimelineIconResolver): TimelineItem[];
90
+ /**
91
+ * How a host offers a better icon for a row than the row's own kind implies.
92
+ *
93
+ * Returns a Font Awesome class, or null/undefined to keep the kind's default. The host resolves it
94
+ * — for an action that means the execution log the node points at, plus `ActionEngineBase`'s cache —
95
+ * so this file needs neither a data provider nor an engine to stay unit-testable.
96
+ */
97
+ export type TimelineIconResolver = (node: AgentRunTreeNode) => string | null | undefined;
90
98
  //# sourceMappingURL=run-tree-timeline-projection.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"run-tree-timeline-projection.d.ts","sourceRoot":"","sources":["../../../../src/lib/custom/ai-agent-run/run-tree-timeline-projection.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AACH,OAAO,KAAK,EAAE,gBAAgB,EAAwB,MAAM,8BAA8B,CAAC;AAC3F,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,mCAAmC,CAAC;AA2FtE,uEAAuE;AACvE,wBAAgB,cAAc,CAAC,IAAI,EAAE,gBAAgB,GAAG,OAAO,CAE9D;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,eAAe,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAOtD;AAqCD;;;;;;;;;;;;;;;;GAgBG;AACH,MAAM,MAAM,gBAAgB,GAAG;IAC3B,EAAE,EAAE,MAAM,CAAC;IACX,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,MAAM,CAAC;IACjB,UAAU,EAAE,MAAM,CAAC;IACnB,MAAM,EAAE,MAAM,CAAC;IACf,gGAAgG;IAChG,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC;IAC3B,oGAAoG;IACpG,YAAY,EAAE,MAAM,CAAC;IACrB,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;IACxB,SAAS,EAAE,IAAI,GAAG,IAAI,CAAC;IACvB,WAAW,EAAE,IAAI,GAAG,IAAI,CAAC;IACzB;;;;;;OAMG;IACH,cAAc,EAAE,MAAM,GAAG,IAAI,CAAC;IAC9B,YAAY,EAAE,MAAM,GAAG,IAAI,CAAC;IAC5B,uEAAuE;IACvE,cAAc,EAAE,IAAI,CAAC;CACxB,CAAC;AAmBF,sGAAsG;AACtG,wBAAgB,qBAAqB,CAAC,IAAI,EAAE,gBAAgB,EAAE,UAAU,EAAE,MAAM,GAAG,gBAAgB,CAuBlG;AAeD;;;;;;;;;;GAUG;AACH,wBAAgB,wBAAwB,CACpC,IAAI,EAAE,gBAAgB,GAAG,IAAI,EAC7B,SAAS,SAAI,EACb,QAAQ,UAAQ,GACjB,YAAY,EAAE,CAsBhB"}
1
+ {"version":3,"file":"run-tree-timeline-projection.d.ts","sourceRoot":"","sources":["../../../../src/lib/custom/ai-agent-run/run-tree-timeline-projection.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AACH,OAAO,KAAK,EAAE,gBAAgB,EAAwB,MAAM,8BAA8B,CAAC;AAC3F,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,mCAAmC,CAAC;AAsGtE,uEAAuE;AACvE,wBAAgB,cAAc,CAAC,IAAI,EAAE,gBAAgB,GAAG,OAAO,CAE9D;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,eAAe,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAOtD;AAqCD;;;;;;;;;;;;;;;;GAgBG;AACH,MAAM,MAAM,gBAAgB,GAAG;IAC3B,EAAE,EAAE,MAAM,CAAC;IACX,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,MAAM,CAAC;IACjB,UAAU,EAAE,MAAM,CAAC;IACnB,MAAM,EAAE,MAAM,CAAC;IACf,gGAAgG;IAChG,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC;IAC3B,oGAAoG;IACpG,YAAY,EAAE,MAAM,CAAC;IACrB,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;IACxB,SAAS,EAAE,IAAI,GAAG,IAAI,CAAC;IACvB,WAAW,EAAE,IAAI,GAAG,IAAI,CAAC;IACzB;;;;;;OAMG;IACH,cAAc,EAAE,MAAM,GAAG,IAAI,CAAC;IAC9B,YAAY,EAAE,MAAM,GAAG,IAAI,CAAC;IAC5B,uEAAuE;IACvE,cAAc,EAAE,IAAI,CAAC;CACxB,CAAC;AAmBF,sGAAsG;AACtG,wBAAgB,qBAAqB,CAAC,IAAI,EAAE,gBAAgB,EAAE,UAAU,EAAE,MAAM,GAAG,gBAAgB,CAuBlG;AA+CD;;;;;;;;;;GAUG;AACH,wBAAgB,wBAAwB,CACpC,IAAI,EAAE,gBAAgB,GAAG,IAAI,EAC7B,SAAS,SAAI,EACb,QAAQ,UAAQ,EAChB,WAAW,CAAC,EAAE,oBAAoB,GACnC,YAAY,EAAE,CA4ChB;AAiBD;;;;;;GAMG;AACH,MAAM,MAAM,oBAAoB,GAAG,CAAC,IAAI,EAAE,gBAAgB,KAAK,MAAM,GAAG,IAAI,GAAG,SAAS,CAAC"}
@@ -56,11 +56,22 @@ const TASK_KIND_PRESENTATION = {
56
56
  * That is what makes a sub-agent run nested inside a graph revert to ordinary agent styling at the
57
57
  * run boundary: below it, the work is ordinary agent work again.
58
58
  */
59
- function presentationOf(node) {
59
+ function presentationOf(node, resolveIcon) {
60
60
  const workflow = node.NodeType === 'Task' || node.NodeType === 'TaskGraph';
61
61
  let icon = node.NodeType === 'Task' && node.SourceKind
62
62
  ? (TASK_KIND_PRESENTATION[node.SourceKind] ?? NODE_PRESENTATION.Task).icon
63
63
  : (NODE_PRESENTATION[node.NodeType] ?? NODE_PRESENTATION.Step).icon;
64
+ // What the work IS beats what kind of row it is. An executed action resolves to its own icon —
65
+ // Google Custom Search draws the Google mark whether it ran as a graph step or as the fifth
66
+ // pass of a loop, which is the whole point: the same action was rendering as two different
67
+ // generic glyphs depending on which arm of the tree query produced the row.
68
+ //
69
+ // Resolved by the HOST, not here: reaching an action means the execution log the row points at
70
+ // plus the action cache, and a pure projection that reached for either would stop being pure
71
+ // and stop being testable without a database.
72
+ const resolved = resolveIcon?.(node);
73
+ if (resolved)
74
+ icon = resolved;
64
75
  // A loop that ran its iterations at once is a different shape of work from one that ran them in
65
76
  // turn, and the passes underneath look identical either way — same rows, same durations. The
66
77
  // icon carries the distinction, because it is visible without opening anything.
@@ -178,6 +189,38 @@ function itemTypeOf(node) {
178
189
  return 'step';
179
190
  return NODE_ITEM_TYPE[node.NodeType] ?? 'step';
180
191
  }
192
+ /**
193
+ * The graph a `TaskGraph` submit step handed off to, when the pair is a clean 1:1.
194
+ *
195
+ * **Why these two rows are one thing.** `get-agent-run-tree.sql` joins the submit STEP to the graph
196
+ * it produced through `JSON_VALUE(s.OutputData, '$.parentTaskID')`, so a dispatched workflow always
197
+ * arrives as a `Step` row whose single child is the `TaskGraph` row. They are the same workflow
198
+ * described twice, and the two descriptions disagree on the only question a reader is asking: the
199
+ * step's status reports the SUBMISSION (`Completed` in ~300ms, correctly — see `base-agent.ts`,
200
+ * "Success means 'this graph is durable and will run', NOT 'this graph has run'"), while its title
201
+ * names the GRAPH, which is still running. A row titled after the workflow, marked Completed, above
202
+ * children that are Pending, reads as a finished workflow. The header gets this right — PAUSED plus
203
+ * "Workflow still running" — and the tree was the one place that contradicted it.
204
+ *
205
+ * **Null in three cases, all deliberate.** A submission that did not SUCCEED keeps its own row —
206
+ * failed, cancelled, or still in flight — because there is either no graph to inherit a status from
207
+ * or nothing yet to inherit, and the submission is then the whole story. An unexpected shape — no
208
+ * `TaskGraph` child, or more than one, or extra children beside it — also declines, because a
209
+ * projection that guesses when its assumption breaks is how a display invents a status nobody wrote.
210
+ *
211
+ * The success test is on the normalized word, since a step says `Completed` and a task says
212
+ * `Complete`; comparing raw is the two-letter difference this file already exists to absorb.
213
+ */
214
+ function collapsibleGraphChild(node) {
215
+ if (node.NodeType !== 'Step' || node.SourceKind !== 'TaskGraph')
216
+ return null;
217
+ if (NormalizeStatus(node.Status) !== 'Completed')
218
+ return null;
219
+ const graphChildren = node.Children.filter((child) => child.NodeType === 'TaskGraph');
220
+ return graphChildren.length === 1 && node.Children.length === graphChildren.length
221
+ ? graphChildren[0]
222
+ : null;
223
+ }
181
224
  /**
182
225
  * Flattens a run tree into timeline rows, in display order.
183
226
  *
@@ -189,7 +232,7 @@ function itemTypeOf(node) {
189
232
  * @param skipRoot omit the root itself — used when the row that owns this subtree is already on
190
233
  * screen and the tree is being expanded underneath it
191
234
  */
192
- export function ProjectRunTreeToTimeline(root, baseLevel = 0, skipRoot = false) {
235
+ export function ProjectRunTreeToTimeline(root, baseLevel = 0, skipRoot = false, resolveIcon) {
193
236
  if (!root)
194
237
  return [];
195
238
  /**
@@ -203,17 +246,51 @@ export function ProjectRunTreeToTimeline(root, baseLevel = 0, skipRoot = false)
203
246
  * lights up the recursive template and the expand machinery that were already there.
204
247
  */
205
248
  const build = (node, level, parentID, position) => {
206
- const item = toTimelineItem(node, level, parentID, position);
249
+ // A dispatched workflow arrives as two rows for one thing — see `collapsibleGraphChild`.
250
+ // Merged into one that keeps the step's identity (its id, so selection and deep links still
251
+ // resolve) and takes its STATUS and timing from the graph, which is what the title claims to
252
+ // describe. The submission's own latency survives in the subtitle rather than being lost.
253
+ const graph = collapsibleGraphChild(node);
254
+ if (graph) {
255
+ const item = toTimelineItem(graph, level, parentID, position, resolveIcon);
256
+ item.id = node.NodeID;
257
+ item.title = node.Name;
258
+ item.subtitle = describeDispatchedWorkflow(node, graph);
259
+ item.children = graph.Children.map((child, index) => build(child, level + 1, node.NodeID, index + 1));
260
+ return item;
261
+ }
262
+ const item = toTimelineItem(node, level, parentID, position, resolveIcon);
207
263
  item.children = node.Children.map((child, index) => build(child, level + 1, node.NodeID, index + 1));
208
264
  return item;
209
265
  };
210
- return skipRoot
211
- ? root.Children.map((child, index) => build(child, baseLevel, root.NodeID, index + 1))
212
- : [build(root, baseLevel, undefined, 1)];
266
+ // `skipRoot` is how the run timeline actually calls this: the submit step is ALREADY on screen
267
+ // (built from the run's own step rows) and this fills in what is underneath it. Without the
268
+ // collapse here the graph is emitted as a child of the step — the duplicate row, one indent
269
+ // deeper, which is exactly what the screen showed. The step is the workflow's row; the rows
270
+ // below it should be the workflow's STEPS.
271
+ if (skipRoot) {
272
+ const graph = collapsibleGraphChild(root);
273
+ const children = graph ? graph.Children : root.Children;
274
+ return children.map((child, index) => build(child, baseLevel, root.NodeID, index + 1));
275
+ }
276
+ return [build(root, baseLevel, undefined, 1)];
277
+ }
278
+ /**
279
+ * Subtitle for a collapsed submit-step/graph pair.
280
+ *
281
+ * Keeps the fact the merge would otherwise discard: how long the SUBMISSION took. That number is
282
+ * meaningful on its own — a slow submit is a slow validate-and-persist, which is a different problem
283
+ * from a slow workflow — and leaving it on a row whose duration now belongs to the graph would be
284
+ * two unrelated timings competing for one field.
285
+ */
286
+ function describeDispatchedWorkflow(step, graph) {
287
+ const base = describeNode(graph);
288
+ const dispatch = step.DurationMs != null ? `dispatched in ${formatDuration(step.DurationMs)}` : 'dispatched';
289
+ return base ? `${base} · ${dispatch}` : dispatch;
213
290
  }
214
291
  /** One node as a timeline row. */
215
- function toTimelineItem(node, level, parentID, position) {
216
- const presentation = presentationOf(node);
292
+ function toTimelineItem(node, level, parentID, position, resolveIcon) {
293
+ const presentation = presentationOf(node, resolveIcon);
217
294
  return {
218
295
  id: node.NodeID,
219
296
  type: itemTypeOf(node),