@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-step-detail.component.js","sourceRoot":"","sources":["../../../../src/lib/custom/ai-agent-run/ai-agent-run-step-detail.component.ts","../../../../src/lib/custom/ai-agent-run/ai-agent-run-step-detail.component.html"],"names":[],"mappings":"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","sourcesContent":["import { Component, Input, Output, EventEmitter, ChangeDetectorRef } from '@angular/core';\nimport { TimelineItem } from './ai-agent-run-timeline.component';\nimport { MJAIAgentRunStepEntity, MJAIAgentRunStepEntity_AgentSkillInvocation } from '@memberjunction/core-entities';\nimport { ResolveTaskGraphPositions, type TaskGraphSpec } from '@memberjunction/ai-core-plus';\nimport type { FlowPosition } from '@memberjunction/ng-flow-editor';\nimport { ParseJSONRecursive, ParseJSONOptions } from '@memberjunction/global';\n\ninterface ScratchpadSnapshotView {\n notes: string;\n tasks: Array<{\n id: string;\n title: string;\n status: string;\n notes?: string;\n }>;\n}\n\n@Component({\n standalone: false,\n selector: 'mj-ai-agent-run-step-detail',\n templateUrl: './ai-agent-run-step-detail.component.html',\n styleUrls: ['./ai-agent-run-step-detail.component.css']\n})\nexport class AIAgentRunStepDetailComponent {\n @Input() selectedTimelineItem: TimelineItem | null = null;\n @Output() closePanel = new EventEmitter<void>();\n @Output() navigateToActionLog = new EventEmitter<string>();\n @Output() copyToClipboard = new EventEmitter<string>();\n /**\n * The user asked to promote this run's graph into a reusable workflow (D17).\n *\n * Intent only — this component renders a run, it does not persist agents. The host performs the\n * conversion and the `AgentSpecSync` write, which keeps the one place that writes an agent the\n * one place that writes an agent.\n */\n @Output() saveAsWorkflowRequested = new EventEmitter<TaskGraphSpec>();\n\n selectedItemJsonString = '{}';\n detailPaneTab: 'json' | 'diff' | 'scratchpad' | 'skills' | 'graph' = 'diff';\n scratchpadSubTab: 'input' | 'output' | 'diff' = 'diff';\n\n constructor(private cdr: ChangeDetectorRef) {}\n\n ngOnChanges() {\n if (this.selectedTimelineItem) {\n this.selectedItemJsonString = this.getSelectedItemJson();\n // Default to diff tab if step has payload diff, skills for Skill steps (the activation IS\n // the story there), scratchpad if available, otherwise json\n if (this.showStepPayloadDiff) {\n this.detailPaneTab = 'diff';\n } else if (this.showGraphTab) {\n // A TaskGraph step's whole content IS the graph; opening on the JSON would bury the one\n // thing the step exists to show.\n this.detailPaneTab = 'graph';\n } else if (this.showSkillsTab && this.selectedTimelineItem.data?.StepType === 'Skill') {\n this.detailPaneTab = 'skills';\n } else if (this.showScratchpadTab) {\n this.detailPaneTab = 'scratchpad';\n } else if (this.showSkillsTab) {\n this.detailPaneTab = 'skills';\n } else {\n this.detailPaneTab = 'json';\n }\n this.scratchpadSubTab = 'diff';\n this.cdr.detectChanges();\n }\n }\n\n /**\n * What to say about a step that never executed, or null when it ran.\n *\n * **Why this needs saying at all.** A workflow persists every step at submission, before anything\n * runs — the rows are the dispatcher's work queue, and the skip cascade is computed from the graph\n * they form. So a branch the workflow did not take still has a row, and opening it shows a\n * perfectly normal record with empty payloads. Without a word of explanation the reader is left to\n * work out whether that emptiness is a branch that was not chosen, work still queued, or a step\n * that broke silently — three very different situations that look identical in JSON.\n *\n * The distinction between Skipped and Blocked is load-bearing and deliberately preserved here:\n * `Skipped` means the workflow chose another route, `Blocked` means something upstream failed. The\n * dispatcher separated them precisely because conflating them made every conditional workflow look\n * half-broken.\n */\n get StepNotice(): { Variant: 'info' | 'warning' | 'error'; Message: string } | null {\n const item = this.selectedTimelineItem;\n if (!item?.data?.IsWorkflowStep) return null;\n\n switch (item.status) {\n case 'Skipped':\n return {\n Variant: 'info',\n Message: 'This step never ran — the workflow took another route. Its row exists because ' +\n 'every step is created when the workflow is submitted, so the record of the branch ' +\n 'that was not taken survives. Nothing went wrong here.',\n };\n case 'Blocked':\n return {\n Variant: 'error',\n Message: 'This step could not run: something it depended on failed, so no path to it was ' +\n 'left. It is not a branch that lost — it is work that became unreachable.',\n };\n case 'Pending':\n return {\n Variant: 'warning',\n Message: 'This step has not started yet. A workflow runs on the dispatcher and outlives the ' +\n 'agent run that submitted it, so a finished run can still contain steps that are ' +\n 'queued or in flight.',\n };\n default:\n return null;\n }\n }\n\n getSelectedItemJson(): string {\n if (!this.selectedTimelineItem) return '{}';\n \n // Get all the data from the entity\n let data;\n if (this.selectedTimelineItem.data instanceof MJAIAgentRunStepEntity) {\n // If it's a step entity, we need to get the full run data\n data = this.selectedTimelineItem.data.GetAll();\n } else {\n data = this.selectedTimelineItem.data;\n }\n \n // Apply recursive JSON parsing to the entire data object\n const parseOptions: ParseJSONOptions = {\n extractInlineJson: true,\n maxDepth: 100,\n debug: false\n };\n const parsedData = ParseJSONRecursive(data, parseOptions);\n \n return JSON.stringify(parsedData, null, 2);\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 } 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?.PayloadAtStart) return null;\n \n try {\n // First, check if PayloadAtStart is a JSON string that needs to be parsed\n let payloadData = stepData.PayloadAtStart;\n try {\n // If PayloadAtStart is a JSON string, parse it first\n payloadData = JSON.parse(stepData.PayloadAtStart);\n } catch {\n // If it's not valid JSON, use it as-is\n payloadData = stepData.PayloadAtStart;\n }\n \n const parseOptions: ParseJSONOptions = {\n extractInlineJson: true,\n maxDepth: 100,\n debug: false\n };\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?.PayloadAtEnd) return null;\n \n try {\n // First, check if PayloadAtEnd is a JSON string that needs to be parsed\n let payloadData = stepData.PayloadAtEnd;\n try {\n // If PayloadAtEnd is a JSON string, parse it first\n payloadData = JSON.parse(stepData.PayloadAtEnd);\n } catch {\n // If it's not valid JSON, use it as-is\n payloadData = stepData.PayloadAtEnd;\n }\n \n const parseOptions: ParseJSONOptions = {\n extractInlineJson: true,\n maxDepth: 100,\n debug: false\n };\n return ParseJSONRecursive(payloadData, parseOptions);\n } catch (e) {\n return null;\n }\n }\n\n onClosePanel() {\n this.closePanel.emit();\n }\n\n onNavigateToActionLog(logId: string) {\n this.navigateToActionLog.emit(logId);\n }\n\n onCopyToClipboard() {\n this.copyToClipboard.emit(this.getSelectedItemJson());\n }\n\n /**\n * Whether the Skills tab should be shown — true when the step has skill-invocation records\n * on its `Skills` column (Skill steps, Prompt steps with skills in effect, and Actions/\n * Sub-Agent steps whose tool was granted through a skill).\n */\n get showSkillsTab(): boolean {\n return this.stepSkillInvocations.length > 0;\n }\n\n /**\n * Parsed {@link MJAIAgentRunStepEntity_AgentSkillInvocation} records from the step's `Skills`\n * JSON column. Empty array when the step has no skill linkage or the JSON is malformed.\n */\n get stepSkillInvocations(): MJAIAgentRunStepEntity_AgentSkillInvocation[] {\n if (!this.selectedTimelineItem || this.selectedTimelineItem.type !== 'step') {\n return [];\n }\n const raw = this.selectedTimelineItem.data?.Skills;\n if (!raw) return [];\n try {\n const parsed = typeof raw === 'string' ? JSON.parse(raw) : raw;\n return Array.isArray(parsed) ? parsed : [];\n } catch {\n return [];\n }\n }\n\n /** Human-readable label for an invocation's activation type. */\n public GetActivationTypeLabel(inv: MJAIAgentRunStepEntity_AgentSkillInvocation): string {\n return inv.ActivationType === 'requested' ? 'User Requested' : 'Agent Self-Activated';\n }\n\n /**\n * Whether the Workflow tab should be shown — true for a `TaskGraph` step that carries a spec.\n *\n * Phase 3 writes this step for EVERY emitted graph, dispatched or constant-folded, so a folded\n * single-node graph is just as promotable as a dispatched one. That was the point of recording\n * the fold rather than letting it vanish.\n */\n get showGraphTab(): boolean {\n return this.stepTaskGraph !== null;\n }\n\n /**\n * The `TaskGraphSpec` recorded on a `TaskGraph` step, or null.\n *\n * Read from InputData, falling back to OutputData: the step records the spec on the way in, and\n * a malformed or absent payload simply means no tab rather than a broken panel.\n */\n get stepTaskGraph(): TaskGraphSpec | null {\n if (!this.selectedTimelineItem || this.selectedTimelineItem.type !== 'step') return null;\n if (this.selectedTimelineItem.data?.StepType !== 'TaskGraph') return null;\n\n for (const raw of [this.selectedTimelineItem.data?.InputData, this.selectedTimelineItem.data?.OutputData]) {\n if (!raw) continue;\n try {\n const parsed = typeof raw === 'string' ? JSON.parse(raw) : raw;\n const spec = (parsed as { spec?: TaskGraphSpec })?.spec;\n if (spec?.tasks?.length) return spec;\n } catch {\n // A step whose payload cannot be parsed shows no tab, which is honest — better than a\n // canvas rendering half a graph.\n }\n }\n return null;\n }\n\n /**\n * Where the recorded graph's nodes go on the canvas.\n *\n * Without this the editor receives a spec and no geometry, so every node projects to the origin —\n * all of them, in one place. The canvas then rescues it with a deferred layout pass whose\n * zoom-to-fit measures a bounding box one node wide, and a four-step workflow renders as a single\n * enormous box at 265%. The positions exist the whole time: a workflow compiled from a Flow agent\n * carries the arrangement its author dragged into place, on every node.\n */\n get stepTaskGraphPositions(): Map<string, FlowPosition> | null {\n const spec = this.stepTaskGraph;\n if (!spec) return null;\n return ResolveTaskGraphPositions(spec);\n }\n\n /** True when the recorded graph was constant-folded rather than dispatched (D9). */\n get stepTaskGraphWasFolded(): boolean {\n if (!this.selectedTimelineItem) return false;\n const raw = this.selectedTimelineItem.data?.InputData;\n if (!raw) return false;\n try {\n const parsed = typeof raw === 'string' ? JSON.parse(raw) : raw;\n return (parsed as { folded?: boolean })?.folded === true;\n } catch {\n return false;\n }\n }\n\n /** Asks the host to save this run's graph as a reusable workflow. */\n public RequestSaveAsWorkflow(): void {\n const spec = this.stepTaskGraph;\n if (spec) this.saveAsWorkflowRequested.emit(spec);\n }\n\n /**\n * Whether the scratchpad tab should be shown (step has scratchpad data in InputData or OutputData)\n */\n get showScratchpadTab(): boolean {\n if (!this.selectedTimelineItem || this.selectedTimelineItem.type !== 'step') {\n return false;\n }\n return this.stepScratchpadInput !== null || this.stepScratchpadOutput !== null;\n }\n\n /**\n * Parse scratchpad snapshot from InputData JSON\n */\n get stepScratchpadInput(): ScratchpadSnapshotView | null {\n return this.extractScratchpadFromField('InputData');\n }\n\n /**\n * Parse scratchpad snapshot from OutputData JSON\n */\n get stepScratchpadOutput(): ScratchpadSnapshotView | null {\n return this.extractScratchpadFromField('OutputData');\n }\n\n /**\n * Number of tasks that changed between input and output scratchpad snapshots\n */\n get scratchpadTaskChangeCount(): number {\n const input = this.stepScratchpadInput;\n const output = this.stepScratchpadOutput;\n if (!input && !output) return 0;\n if (!input || !output) return (output?.tasks?.length ?? 0) + (input?.tasks?.length ?? 0);\n\n let changes = 0;\n const inputMap = new Map(input.tasks.map(t => [t.id, t]));\n const outputMap = new Map(output.tasks.map(t => [t.id, t]));\n\n for (const [id, task] of outputMap) {\n const prev = inputMap.get(id);\n if (!prev || prev.status !== task.status || prev.title !== task.title || prev.notes !== task.notes) {\n changes++;\n }\n }\n for (const id of inputMap.keys()) {\n if (!outputMap.has(id)) changes++; // removed tasks\n }\n if (input.notes !== output.notes) changes++;\n return changes;\n }\n\n private extractScratchpadFromField(fieldName: 'InputData' | 'OutputData'): ScratchpadSnapshotView | null {\n if (!this.selectedTimelineItem || this.selectedTimelineItem.type !== 'step') {\n return null;\n }\n\n const stepData = this.selectedTimelineItem.data;\n const rawValue = stepData?.[fieldName];\n if (!rawValue) return null;\n\n try {\n let parsed = rawValue;\n if (typeof parsed === 'string') {\n parsed = JSON.parse(parsed);\n }\n const scratchpad = parsed?.scratchpad;\n if (!scratchpad) return null;\n return {\n notes: scratchpad.notes ?? '',\n tasks: Array.isArray(scratchpad.tasks) ? scratchpad.tasks : []\n };\n } catch {\n return null;\n }\n }\n}","@if (selectedTimelineItem) {\n <div class=\"json-detail-pane\">\n <div class=\"json-pane-header\">\n <h3>\n <i class=\"fas\" [ngClass]=\"selectedTimelineItem.icon\"></i>\n {{ selectedTimelineItem.title }}\n </h3>\n <button class=\"btn-icon\" (click)=\"onClosePanel()\" title=\"Close\">\n <i class=\"fas fa-times\"></i>\n </button>\n </div>\n <div class=\"json-pane-content\">\n <div class=\"json-meta\">\n <div class=\"meta-item\">\n <label>Type</label>\n <span>{{ selectedTimelineItem.type }}</span>\n </div>\n <div class=\"meta-item\">\n <label>Status</label>\n <span class=\"status-badge small\" [attr.data-status]=\"selectedTimelineItem.status\">\n {{ selectedTimelineItem.status }}\n </span>\n </div>\n <div class=\"meta-item\">\n <label>Duration</label>\n <span>{{ selectedTimelineItem.duration || 'N/A' }}</span>\n </div>\n </div>\n <!-- Why a workflow step has nothing to show: it never ran. Above the tabs, because it explains\n the emptiness the reader is about to look at. -->\n @if (StepNotice) {\n <div class=\"step-notice\">\n <mj-alert [Variant]=\"StepNotice.Variant\" Size=\"sm\" [Message]=\"StepNotice.Message\"></mj-alert>\n </div>\n }\n <!-- Action-specific link -->\n @if (selectedTimelineItem.type === 'action' && selectedTimelineItem.data?.ID) {\n <div class=\"action-link\">\n <button class=\"btn-link\" (click)=\"onNavigateToActionLog(selectedTimelineItem.data.ID)\">\n <i class=\"fas fa-external-link-alt\"></i> View Action Execution Log\n </button>\n </div>\n }\n <!-- Tab Navigation - Show when we have payload diff or scratchpad data -->\n @if (showStepPayloadDiff || showScratchpadTab || showSkillsTab || showGraphTab) {\n <div class=\"detail-pane-tabs\">\n @if (showGraphTab) {\n <button\n class=\"detail-tab\"\n [class.active]=\"detailPaneTab === 'graph'\"\n (click)=\"detailPaneTab = 'graph'\">\n <i class=\"fa-solid fa-diagram-project\"></i>\n Workflow\n </button>\n }\n @if (showStepPayloadDiff) {\n <button\n class=\"detail-tab\"\n [class.active]=\"detailPaneTab === 'diff'\"\n (click)=\"detailPaneTab = 'diff'\">\n <i class=\"fa-solid fa-code-branch\"></i>\n Payload Changes\n </button>\n }\n @if (showSkillsTab) {\n <button\n class=\"detail-tab\"\n [class.active]=\"detailPaneTab === 'skills'\"\n (click)=\"detailPaneTab = 'skills'\">\n <i class=\"fa-solid fa-wand-magic-sparkles\"></i>\n Skills\n <span class=\"tab-badge\">{{ stepSkillInvocations.length }}</span>\n </button>\n }\n @if (showScratchpadTab) {\n <button\n class=\"detail-tab\"\n [class.active]=\"detailPaneTab === 'scratchpad'\"\n (click)=\"detailPaneTab = 'scratchpad'\">\n <i class=\"fa-solid fa-clipboard-list\"></i>\n Scratchpad\n @if (scratchpadTaskChangeCount > 0) {\n <span class=\"tab-badge\">{{ scratchpadTaskChangeCount }}</span>\n }\n </button>\n }\n <button\n class=\"detail-tab\"\n [class.active]=\"detailPaneTab === 'json'\"\n (click)=\"detailPaneTab = 'json'\">\n <i class=\"fa-solid fa-code\"></i>\n Full JSON\n </button>\n </div>\n }\n <!-- Tab Content -->\n <div class=\"detail-pane-content\" [class.with-tabs]=\"showStepPayloadDiff || showScratchpadTab || showSkillsTab || showGraphTab\">\n <!-- Skills Tab — skill-invocation observability (activation type, provenance of authority, reason) -->\n @if (detailPaneTab === 'graph' && showGraphTab) {\n <div class=\"detail-graph\">\n <div class=\"detail-graph__actions\">\n @if (stepTaskGraphWasFolded) {\n <!-- The fold is recorded rather than silent (D9), so the reader can see WHY this\n graph never reached the dispatcher instead of inferring it. -->\n <mj-alert Variant=\"info\" Size=\"sm\"\n Message=\"This ran inline as a single step — a workflow of one needs no scheduling. You can still save it.\">\n </mj-alert>\n }\n <button mjButton variant=\"primary\" size=\"sm\" (click)=\"RequestSaveAsWorkflow()\">\n <i class=\"fa-solid fa-floppy-disk\"></i> Save as Workflow\n </button>\n </div>\n <mj-task-graph-editor\n class=\"detail-graph__canvas\"\n [Spec]=\"stepTaskGraph\"\n [NodePositions]=\"stepTaskGraphPositions\"\n [ReadOnly]=\"true\"\n [ShowPalette]=\"false\">\n </mj-task-graph-editor>\n </div>\n }\n @if (detailPaneTab === 'skills' && showSkillsTab) {\n <div class=\"skills-content\">\n @for (inv of stepSkillInvocations; track inv.SkillID) {\n <div class=\"skill-invocation-card\" [attr.data-activation]=\"inv.ActivationType\">\n <div class=\"skill-invocation-header\">\n <span class=\"skill-invocation-name\">\n <i class=\"fa-solid fa-wand-magic-sparkles\"></i>\n {{ inv.SkillName }}\n </span>\n <span class=\"skill-invocation-type\" [attr.data-activation]=\"inv.ActivationType\">\n {{ GetActivationTypeLabel(inv) }}\n </span>\n </div>\n @if (inv.Reason) {\n <div class=\"skill-invocation-reason\">\n <i class=\"fa-solid fa-quote-left\"></i>\n {{ inv.Reason }}\n </div>\n }\n <div class=\"skill-invocation-provenance\">\n <div class=\"provenance-title\">Provenance of Authority</div>\n <div class=\"provenance-row\">\n <span class=\"provenance-label\">Requested By</span>\n <span class=\"provenance-value\">{{ inv.Provenance.RequestedBy === 'user-request' ? 'User (/skill mention)' : 'Agent decision' }}</span>\n </div>\n <div class=\"provenance-row\">\n <span class=\"provenance-label\">Agent AcceptsSkills</span>\n <span class=\"provenance-value\">{{ inv.Provenance.AgentAcceptsSkills }}</span>\n </div>\n <div class=\"provenance-row\">\n <span class=\"provenance-label\">Skill ActivationMode</span>\n <span class=\"provenance-value\">{{ inv.Provenance.SkillActivationMode }}</span>\n </div>\n <div class=\"provenance-row\">\n <span class=\"provenance-label\">Agent SkillActivationMode</span>\n <span class=\"provenance-value\">{{ inv.Provenance.AgentSkillActivationMode }}</span>\n </div>\n <div class=\"provenance-row\">\n <span class=\"provenance-label\">Skill ID</span>\n <span class=\"provenance-value provenance-id\">{{ inv.SkillID }}</span>\n </div>\n </div>\n </div>\n }\n </div>\n }\n <!-- Payload Diff Tab -->\n @if (detailPaneTab === 'diff' && showStepPayloadDiff) {\n <div class=\"step-payload-diff\">\n <mj-deep-diff\n [oldValue]=\"stepPayloadAtStartObject\"\n [newValue]=\"stepPayloadAtEndObject\"\n [title]=\"''\"\n [showSummary]=\"true\"\n [showUnchanged]=\"false\"\n [expandAll]=\"false\"\n [maxDepth]=\"8\"\n [maxStringLength]=\"150\"\n [treatNullAsUndefined]=\"true\">\n </mj-deep-diff>\n </div>\n }\n <!-- Scratchpad Tab -->\n @if (detailPaneTab === 'scratchpad' && showScratchpadTab) {\n <div class=\"scratchpad-content\">\n <div class=\"scratchpad-sub-tabs\">\n <button\n class=\"scratchpad-sub-tab\"\n [class.active]=\"scratchpadSubTab === 'diff'\"\n (click)=\"scratchpadSubTab = 'diff'\">\n <i class=\"fa-solid fa-code-compare\"></i> Diff\n </button>\n <button\n class=\"scratchpad-sub-tab\"\n [class.active]=\"scratchpadSubTab === 'input'\"\n (click)=\"scratchpadSubTab = 'input'\">\n <i class=\"fa-solid fa-arrow-right-to-bracket\"></i> Input\n </button>\n <button\n class=\"scratchpad-sub-tab\"\n [class.active]=\"scratchpadSubTab === 'output'\"\n (click)=\"scratchpadSubTab = 'output'\">\n <i class=\"fa-solid fa-arrow-right-from-bracket\"></i> Output\n </button>\n </div>\n <!-- Scratchpad Diff Sub-Tab -->\n @if (scratchpadSubTab === 'diff') {\n <div class=\"scratchpad-diff-view\">\n @if (stepScratchpadInput && stepScratchpadOutput) {\n <mj-deep-diff\n [oldValue]=\"stepScratchpadInput\"\n [newValue]=\"stepScratchpadOutput\"\n [title]=\"''\"\n [showSummary]=\"true\"\n [showUnchanged]=\"false\"\n [expandAll]=\"true\"\n [maxDepth]=\"6\"\n [maxStringLength]=\"300\"\n [treatNullAsUndefined]=\"true\">\n </mj-deep-diff>\n } @else if (stepScratchpadOutput) {\n <mj-empty-state\n Size=\"compact\"\n Icon=\"fa-solid fa-circle-plus\"\n Title=\"Scratchpad created in this step (no prior state)\" />\n <div class=\"scratchpad-snapshot\">\n <ng-container *ngTemplateOutlet=\"scratchpadSnapshotTpl; context: { $implicit: stepScratchpadOutput }\"></ng-container>\n </div>\n } @else {\n <mj-empty-state\n Size=\"compact\"\n Icon=\"fa-solid fa-circle-info\"\n Title=\"No scratchpad changes in this step\" />\n }\n </div>\n }\n <!-- Scratchpad Input Sub-Tab -->\n @if (scratchpadSubTab === 'input') {\n <div class=\"scratchpad-snapshot-view\">\n @if (stepScratchpadInput) {\n <ng-container *ngTemplateOutlet=\"scratchpadSnapshotTpl; context: { $implicit: stepScratchpadInput }\"></ng-container>\n } @else {\n <mj-empty-state\n Size=\"compact\"\n Icon=\"fa-solid fa-circle-info\"\n Title=\"No scratchpad input for this step\" />\n }\n </div>\n }\n <!-- Scratchpad Output Sub-Tab -->\n @if (scratchpadSubTab === 'output') {\n <div class=\"scratchpad-snapshot-view\">\n @if (stepScratchpadOutput) {\n <ng-container *ngTemplateOutlet=\"scratchpadSnapshotTpl; context: { $implicit: stepScratchpadOutput }\"></ng-container>\n } @else {\n <mj-empty-state\n Size=\"compact\"\n Icon=\"fa-solid fa-circle-info\"\n Title=\"No scratchpad output for this step\" />\n }\n </div>\n }\n </div>\n }\n <!-- Full JSON Tab -->\n @if (detailPaneTab === 'json' || (!showStepPayloadDiff && !showScratchpadTab)) {\n <div class=\"json-viewer\">\n <div class=\"json-toolbar\">\n <button class=\"btn-icon\" title=\"Copy JSON\" (click)=\"onCopyToClipboard()\">\n <i class=\"fas fa-copy\"></i>\n </button>\n </div>\n <mj-code-editor\n [(ngModel)]=\"selectedItemJsonString\"\n [language]=\"'json'\"\n [readonly]=\"true\"\n style=\"width: 100%;\">\n </mj-code-editor>\n </div>\n }\n </div>\n </div>\n </div>\n}\n\n<!-- Reusable scratchpad snapshot template -->\n<ng-template #scratchpadSnapshotTpl let-snapshot>\n <div class=\"scratchpad-snapshot\">\n @if (snapshot.notes) {\n <div class=\"scratchpad-notes-section\">\n <h4><i class=\"fa-solid fa-note-sticky\"></i> Notes</h4>\n <div class=\"scratchpad-notes-content\">{{ snapshot.notes }}</div>\n </div>\n }\n @if (snapshot.tasks?.length > 0) {\n <div class=\"scratchpad-tasks-section\">\n <h4><i class=\"fa-solid fa-list-check\"></i> Tasks ({{ snapshot.tasks.length }})</h4>\n <div class=\"scratchpad-task-list\">\n @for (task of snapshot.tasks; track task.id) {\n <div class=\"scratchpad-task-item\" [attr.data-status]=\"task.status\">\n <span class=\"task-status-indicator\" [attr.data-status]=\"task.status\">\n @switch (task.status) {\n @case ('completed') { <i class=\"fa-solid fa-circle-check\"></i> }\n @case ('in_progress') { <i class=\"fa-solid fa-spinner\"></i> }\n @case ('blocked') { <i class=\"fa-solid fa-circle-xmark\"></i> }\n @default { <i class=\"fa-regular fa-circle\"></i> }\n }\n </span>\n <div class=\"task-content\">\n <span class=\"task-id\">{{ task.id }}</span>\n <span class=\"task-title\">{{ task.title }}</span>\n @if (task.notes) {\n <span class=\"task-notes\">{{ task.notes }}</span>\n }\n </div>\n <span class=\"task-status-badge\" [attr.data-status]=\"task.status\">{{ task.status }}</span>\n </div>\n }\n </div>\n </div>\n }\n @if (!snapshot.notes && (!snapshot.tasks || snapshot.tasks.length === 0)) {\n <mj-empty-state\n Size=\"compact\"\n Icon=\"fa-solid fa-circle-info\"\n Title=\"Empty scratchpad\" />\n }\n </div>\n</ng-template>"]}
1
+ {"version":3,"file":"ai-agent-run-step-detail.component.js","sourceRoot":"","sources":["../../../../src/lib/custom/ai-agent-run/ai-agent-run-step-detail.component.ts","../../../../src/lib/custom/ai-agent-run/ai-agent-run-step-detail.component.html"],"names":[],"mappings":"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","sourcesContent":["import { Component, Input, Output, EventEmitter, ChangeDetectorRef } from '@angular/core';\nimport { TimelineItem } from './ai-agent-run-timeline.component';\nimport { MJAIAgentRunStepEntity, MJAIAgentRunStepEntity_AgentSkillInvocation } from '@memberjunction/core-entities';\nimport { ResolveTaskGraphPositions, type TaskGraphSpec } from '@memberjunction/ai-core-plus';\nimport type { FlowPosition } from '@memberjunction/ng-flow-editor';\nimport { ParseJSONRecursive, ParseJSONOptions } from '@memberjunction/global';\nimport type { IMetadataProvider } from '@memberjunction/core';\n\ninterface ScratchpadSnapshotView {\n notes: string;\n tasks: Array<{\n id: string;\n title: string;\n status: string;\n notes?: string;\n }>;\n}\n\n@Component({\n standalone: false,\n selector: 'mj-ai-agent-run-step-detail',\n templateUrl: './ai-agent-run-step-detail.component.html',\n styleUrls: ['./ai-agent-run-step-detail.component.css']\n})\nexport class AIAgentRunStepDetailComponent {\n @Input() selectedTimelineItem: TimelineItem | null = null;\n /** The provider the host is on, so the run view reads through the right one. */\n @Input() Provider: IMetadataProvider | null = null;\n @Output() closePanel = new EventEmitter<void>();\n @Output() navigateToActionLog = new EventEmitter<string>();\n @Output() copyToClipboard = new EventEmitter<string>();\n /**\n * The user asked to promote this run's graph into a reusable workflow (D17).\n *\n * Intent only — this component renders a run, it does not persist agents. The host performs the\n * conversion and the `AgentSpecSync` write, which keeps the one place that writes an agent the\n * one place that writes an agent.\n */\n @Output() saveAsWorkflowRequested = new EventEmitter<TaskGraphSpec>();\n\n selectedItemJsonString = '{}';\n detailPaneTab: 'json' | 'diff' | 'scratchpad' | 'skills' | 'graph' = 'diff';\n scratchpadSubTab: 'input' | 'output' | 'diff' = 'diff';\n\n constructor(private cdr: ChangeDetectorRef) {}\n\n ngOnChanges() {\n if (this.selectedTimelineItem) {\n this.selectedItemJsonString = this.getSelectedItemJson();\n // Default to diff tab if step has payload diff, skills for Skill steps (the activation IS\n // the story there), scratchpad if available, otherwise json\n if (this.showStepPayloadDiff) {\n this.detailPaneTab = 'diff';\n } else if (this.showGraphTab) {\n // A TaskGraph step's whole content IS the graph; opening on the JSON would bury the one\n // thing the step exists to show.\n this.detailPaneTab = 'graph';\n } else if (this.showSkillsTab && this.selectedTimelineItem.data?.StepType === 'Skill') {\n this.detailPaneTab = 'skills';\n } else if (this.showScratchpadTab) {\n this.detailPaneTab = 'scratchpad';\n } else if (this.showSkillsTab) {\n this.detailPaneTab = 'skills';\n } else {\n this.detailPaneTab = 'json';\n }\n this.scratchpadSubTab = 'diff';\n this.cdr.detectChanges();\n }\n }\n\n /**\n * What to say about a step that never executed, or null when it ran.\n *\n * **Why this needs saying at all.** A workflow persists every step at submission, before anything\n * runs — the rows are the dispatcher's work queue, and the skip cascade is computed from the graph\n * they form. So a branch the workflow did not take still has a row, and opening it shows a\n * perfectly normal record with empty payloads. Without a word of explanation the reader is left to\n * work out whether that emptiness is a branch that was not chosen, work still queued, or a step\n * that broke silently — three very different situations that look identical in JSON.\n *\n * The distinction between Skipped and Blocked is load-bearing and deliberately preserved here:\n * `Skipped` means the workflow chose another route, `Blocked` means something upstream failed. The\n * dispatcher separated them precisely because conflating them made every conditional workflow look\n * half-broken.\n */\n get StepNotice(): { Variant: 'info' | 'warning' | 'error'; Message: string } | null {\n const item = this.selectedTimelineItem;\n if (!item?.data?.IsWorkflowStep) return null;\n\n switch (item.status) {\n case 'Skipped':\n return {\n Variant: 'info',\n Message: 'This step never ran — the workflow took another route. Its row exists because ' +\n 'every step is created when the workflow is submitted, so the record of the branch ' +\n 'that was not taken survives. Nothing went wrong here.',\n };\n case 'Blocked':\n return {\n Variant: 'error',\n Message: 'This step could not run: something it depended on failed, so no path to it was ' +\n 'left. It is not a branch that lost — it is work that became unreachable.',\n };\n case 'Pending':\n return {\n Variant: 'warning',\n Message: 'This step has not started yet. A workflow runs on the dispatcher and outlives the ' +\n 'agent run that submitted it, so a finished run can still contain steps that are ' +\n 'queued or in flight.',\n };\n default:\n return null;\n }\n }\n\n getSelectedItemJson(): string {\n if (!this.selectedTimelineItem) return '{}';\n \n // Get all the data from the entity\n let data;\n if (this.selectedTimelineItem.data instanceof MJAIAgentRunStepEntity) {\n // If it's a step entity, we need to get the full run data\n data = this.selectedTimelineItem.data.GetAll();\n } else {\n data = this.selectedTimelineItem.data;\n }\n \n // Apply recursive JSON parsing to the entire data object\n const parseOptions: ParseJSONOptions = {\n extractInlineJson: true,\n maxDepth: 100,\n debug: false\n };\n const parsedData = ParseJSONRecursive(data, parseOptions);\n \n return JSON.stringify(parsedData, null, 2);\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 } 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?.PayloadAtStart) return null;\n \n try {\n // First, check if PayloadAtStart is a JSON string that needs to be parsed\n let payloadData = stepData.PayloadAtStart;\n try {\n // If PayloadAtStart is a JSON string, parse it first\n payloadData = JSON.parse(stepData.PayloadAtStart);\n } catch {\n // If it's not valid JSON, use it as-is\n payloadData = stepData.PayloadAtStart;\n }\n \n const parseOptions: ParseJSONOptions = {\n extractInlineJson: true,\n maxDepth: 100,\n debug: false\n };\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?.PayloadAtEnd) return null;\n \n try {\n // First, check if PayloadAtEnd is a JSON string that needs to be parsed\n let payloadData = stepData.PayloadAtEnd;\n try {\n // If PayloadAtEnd is a JSON string, parse it first\n payloadData = JSON.parse(stepData.PayloadAtEnd);\n } catch {\n // If it's not valid JSON, use it as-is\n payloadData = stepData.PayloadAtEnd;\n }\n \n const parseOptions: ParseJSONOptions = {\n extractInlineJson: true,\n maxDepth: 100,\n debug: false\n };\n return ParseJSONRecursive(payloadData, parseOptions);\n } catch (e) {\n return null;\n }\n }\n\n onClosePanel() {\n this.closePanel.emit();\n }\n\n onNavigateToActionLog(logId: string) {\n this.navigateToActionLog.emit(logId);\n }\n\n onCopyToClipboard() {\n this.copyToClipboard.emit(this.getSelectedItemJson());\n }\n\n /**\n * Whether the Skills tab should be shown — true when the step has skill-invocation records\n * on its `Skills` column (Skill steps, Prompt steps with skills in effect, and Actions/\n * Sub-Agent steps whose tool was granted through a skill).\n */\n get showSkillsTab(): boolean {\n return this.stepSkillInvocations.length > 0;\n }\n\n /**\n * Parsed {@link MJAIAgentRunStepEntity_AgentSkillInvocation} records from the step's `Skills`\n * JSON column. Empty array when the step has no skill linkage or the JSON is malformed.\n */\n get stepSkillInvocations(): MJAIAgentRunStepEntity_AgentSkillInvocation[] {\n if (!this.selectedTimelineItem || this.selectedTimelineItem.type !== 'step') {\n return [];\n }\n const raw = this.selectedTimelineItem.data?.Skills;\n if (!raw) return [];\n try {\n const parsed = typeof raw === 'string' ? JSON.parse(raw) : raw;\n return Array.isArray(parsed) ? parsed : [];\n } catch {\n return [];\n }\n }\n\n /** Human-readable label for an invocation's activation type. */\n public GetActivationTypeLabel(inv: MJAIAgentRunStepEntity_AgentSkillInvocation): string {\n return inv.ActivationType === 'requested' ? 'User Requested' : 'Agent Self-Activated';\n }\n\n /**\n * Whether the Workflow tab should be shown — true for a `TaskGraph` step that carries a spec.\n *\n * Phase 3 writes this step for EVERY emitted graph, dispatched or constant-folded, so a folded\n * single-node graph is just as promotable as a dispatched one. That was the point of recording\n * the fold rather than letting it vanish.\n */\n get showGraphTab(): boolean {\n return this.stepTaskGraph !== null;\n }\n\n /**\n * The `TaskGraphSpec` recorded on a `TaskGraph` step, or null.\n *\n * Read from InputData, falling back to OutputData: the step records the spec on the way in, and\n * a malformed or absent payload simply means no tab rather than a broken panel.\n */\n get stepTaskGraph(): TaskGraphSpec | null {\n if (!this.selectedTimelineItem || this.selectedTimelineItem.type !== 'step') return null;\n if (this.selectedTimelineItem.data?.StepType !== 'TaskGraph') return null;\n\n for (const raw of [this.selectedTimelineItem.data?.InputData, this.selectedTimelineItem.data?.OutputData]) {\n if (!raw) continue;\n try {\n const parsed = typeof raw === 'string' ? JSON.parse(raw) : raw;\n const spec = (parsed as { spec?: TaskGraphSpec })?.spec;\n if (spec?.tasks?.length) return spec;\n } catch {\n // A step whose payload cannot be parsed shows no tab, which is honest — better than a\n // canvas rendering half a graph.\n }\n }\n return null;\n }\n\n /**\n * Where the recorded graph's nodes go on the canvas.\n *\n * Without this the editor receives a spec and no geometry, so every node projects to the origin —\n * all of them, in one place. The canvas then rescues it with a deferred layout pass whose\n * zoom-to-fit measures a bounding box one node wide, and a four-step workflow renders as a single\n * enormous box at 265%. The positions exist the whole time: a workflow compiled from a Flow agent\n * carries the arrangement its author dragged into place, on every node.\n */\n get stepTaskGraphPositions(): Map<string, FlowPosition> | null {\n const spec = this.stepTaskGraph;\n if (!spec) return null;\n return ResolveTaskGraphPositions(spec);\n }\n\n /**\n * The graph's parent `MJ: Tasks` row, when this step actually dispatched one.\n *\n * **This is what turns the panel from a picture of the plan into a picture of the run.** With it,\n * the same `mj-task-graph-run-view` the Workflows app uses reads the Task rows and draws what\n * happened — declined branches hatched, untravelled edges absent, the toolbar available and the\n * legend off. Without it the panel had only the SPEC, so it rendered in design mode: every branch\n * drawn as though it had run, on a canvas that could not know otherwise.\n *\n * Null for a graph that was constant-folded (D9) — it never reached the dispatcher, so there are no\n * rows and no run to show. The spec view is the honest rendering there: it is a plan, and it is\n * drawn as one.\n */\n get stepTaskGraphParentTaskID(): string | null {\n const raw = this.selectedTimelineItem?.data?.OutputData;\n if (!raw) return null;\n try {\n const parsed = typeof raw === 'string' ? JSON.parse(raw) : raw;\n const id = (parsed as { parentTaskID?: unknown })?.parentTaskID;\n return typeof id === 'string' && id.length > 0 ? id : null;\n } catch {\n return null;\n }\n }\n\n /** True when the recorded graph was constant-folded rather than dispatched (D9). */\n get stepTaskGraphWasFolded(): boolean {\n if (!this.selectedTimelineItem) return false;\n const raw = this.selectedTimelineItem.data?.InputData;\n if (!raw) return false;\n try {\n const parsed = typeof raw === 'string' ? JSON.parse(raw) : raw;\n return (parsed as { folded?: boolean })?.folded === true;\n } catch {\n return false;\n }\n }\n\n /** Asks the host to save this run's graph as a reusable workflow. */\n public RequestSaveAsWorkflow(): void {\n const spec = this.stepTaskGraph;\n if (spec) this.saveAsWorkflowRequested.emit(spec);\n }\n\n /**\n * Whether the scratchpad tab should be shown (step has scratchpad data in InputData or OutputData)\n */\n get showScratchpadTab(): boolean {\n if (!this.selectedTimelineItem || this.selectedTimelineItem.type !== 'step') {\n return false;\n }\n return this.stepScratchpadInput !== null || this.stepScratchpadOutput !== null;\n }\n\n /**\n * Parse scratchpad snapshot from InputData JSON\n */\n get stepScratchpadInput(): ScratchpadSnapshotView | null {\n return this.extractScratchpadFromField('InputData');\n }\n\n /**\n * Parse scratchpad snapshot from OutputData JSON\n */\n get stepScratchpadOutput(): ScratchpadSnapshotView | null {\n return this.extractScratchpadFromField('OutputData');\n }\n\n /**\n * Number of tasks that changed between input and output scratchpad snapshots\n */\n get scratchpadTaskChangeCount(): number {\n const input = this.stepScratchpadInput;\n const output = this.stepScratchpadOutput;\n if (!input && !output) return 0;\n if (!input || !output) return (output?.tasks?.length ?? 0) + (input?.tasks?.length ?? 0);\n\n let changes = 0;\n const inputMap = new Map(input.tasks.map(t => [t.id, t]));\n const outputMap = new Map(output.tasks.map(t => [t.id, t]));\n\n for (const [id, task] of outputMap) {\n const prev = inputMap.get(id);\n if (!prev || prev.status !== task.status || prev.title !== task.title || prev.notes !== task.notes) {\n changes++;\n }\n }\n for (const id of inputMap.keys()) {\n if (!outputMap.has(id)) changes++; // removed tasks\n }\n if (input.notes !== output.notes) changes++;\n return changes;\n }\n\n private extractScratchpadFromField(fieldName: 'InputData' | 'OutputData'): ScratchpadSnapshotView | null {\n if (!this.selectedTimelineItem || this.selectedTimelineItem.type !== 'step') {\n return null;\n }\n\n const stepData = this.selectedTimelineItem.data;\n const rawValue = stepData?.[fieldName];\n if (!rawValue) return null;\n\n try {\n let parsed = rawValue;\n if (typeof parsed === 'string') {\n parsed = JSON.parse(parsed);\n }\n const scratchpad = parsed?.scratchpad;\n if (!scratchpad) return null;\n return {\n notes: scratchpad.notes ?? '',\n tasks: Array.isArray(scratchpad.tasks) ? scratchpad.tasks : []\n };\n } catch {\n return null;\n }\n }\n}","@if (selectedTimelineItem) {\n <div class=\"json-detail-pane\">\n <div class=\"json-pane-header\">\n <h3>\n <i class=\"fas\" [ngClass]=\"selectedTimelineItem.icon\"></i>\n {{ selectedTimelineItem.title }}\n </h3>\n <button class=\"btn-icon\" (click)=\"onClosePanel()\" title=\"Close\">\n <i class=\"fas fa-times\"></i>\n </button>\n </div>\n <div class=\"json-pane-content\">\n <div class=\"json-meta\">\n <div class=\"meta-item\">\n <label>Type</label>\n <span>{{ selectedTimelineItem.type }}</span>\n </div>\n <div class=\"meta-item\">\n <label>Status</label>\n <span class=\"status-badge small\" [attr.data-status]=\"selectedTimelineItem.status\">\n {{ selectedTimelineItem.status }}\n </span>\n </div>\n <div class=\"meta-item\">\n <label>Duration</label>\n <span>{{ selectedTimelineItem.duration || 'N/A' }}</span>\n </div>\n </div>\n <!-- Why a workflow step has nothing to show: it never ran. Above the tabs, because it explains\n the emptiness the reader is about to look at. -->\n @if (StepNotice) {\n <div class=\"step-notice\">\n <mj-alert [Variant]=\"StepNotice.Variant\" Size=\"sm\" [Message]=\"StepNotice.Message\"></mj-alert>\n </div>\n }\n <!-- Action-specific link -->\n @if (selectedTimelineItem.type === 'action' && selectedTimelineItem.data?.ID) {\n <div class=\"action-link\">\n <button class=\"btn-link\" (click)=\"onNavigateToActionLog(selectedTimelineItem.data.ID)\">\n <i class=\"fas fa-external-link-alt\"></i> View Action Execution Log\n </button>\n </div>\n }\n <!-- Tab Navigation - Show when we have payload diff or scratchpad data -->\n @if (showStepPayloadDiff || showScratchpadTab || showSkillsTab || showGraphTab) {\n <div class=\"detail-pane-tabs\">\n @if (showGraphTab) {\n <button\n class=\"detail-tab\"\n [class.active]=\"detailPaneTab === 'graph'\"\n (click)=\"detailPaneTab = 'graph'\">\n <i class=\"fa-solid fa-diagram-project\"></i>\n Workflow\n </button>\n }\n @if (showStepPayloadDiff) {\n <button\n class=\"detail-tab\"\n [class.active]=\"detailPaneTab === 'diff'\"\n (click)=\"detailPaneTab = 'diff'\">\n <i class=\"fa-solid fa-code-branch\"></i>\n Payload Changes\n </button>\n }\n @if (showSkillsTab) {\n <button\n class=\"detail-tab\"\n [class.active]=\"detailPaneTab === 'skills'\"\n (click)=\"detailPaneTab = 'skills'\">\n <i class=\"fa-solid fa-wand-magic-sparkles\"></i>\n Skills\n <span class=\"tab-badge\">{{ stepSkillInvocations.length }}</span>\n </button>\n }\n @if (showScratchpadTab) {\n <button\n class=\"detail-tab\"\n [class.active]=\"detailPaneTab === 'scratchpad'\"\n (click)=\"detailPaneTab = 'scratchpad'\">\n <i class=\"fa-solid fa-clipboard-list\"></i>\n Scratchpad\n @if (scratchpadTaskChangeCount > 0) {\n <span class=\"tab-badge\">{{ scratchpadTaskChangeCount }}</span>\n }\n </button>\n }\n <button\n class=\"detail-tab\"\n [class.active]=\"detailPaneTab === 'json'\"\n (click)=\"detailPaneTab = 'json'\">\n <i class=\"fa-solid fa-code\"></i>\n Full JSON\n </button>\n </div>\n }\n <!-- Tab Content -->\n <div class=\"detail-pane-content\" [class.with-tabs]=\"showStepPayloadDiff || showScratchpadTab || showSkillsTab || showGraphTab\">\n <!-- Skills Tab — skill-invocation observability (activation type, provenance of authority, reason) -->\n @if (detailPaneTab === 'graph' && showGraphTab) {\n <div class=\"detail-graph\">\n <div class=\"detail-graph__actions\">\n @if (stepTaskGraphWasFolded) {\n <!-- The fold is recorded rather than silent (D9), so the reader can see WHY this\n graph never reached the dispatcher instead of inferring it. -->\n <mj-alert Variant=\"info\" Size=\"sm\"\n Message=\"This ran inline as a single step — a workflow of one needs no scheduling. You can still save it.\">\n </mj-alert>\n }\n <button mjButton variant=\"primary\" size=\"sm\" (click)=\"RequestSaveAsWorkflow()\">\n <i class=\"fa-solid fa-floppy-disk\"></i> Save as Workflow\n </button>\n </div>\n @if (stepTaskGraphParentTaskID; as parentTaskID) {\n <!-- The RUN, not the plan. Same component the Workflows app uses, so a workflow is\n drawn identically wherever it is opened from — declined branches hatched,\n untravelled edges absent, toolbar on, legend off. -->\n <mj-task-graph-run-view\n class=\"detail-graph__canvas\"\n [Provider]=\"Provider\"\n [ParentTaskID]=\"parentTaskID\"\n [WorkflowName]=\"stepTaskGraph?.workflowName || 'Workflow'\"\n Height=\"100%\">\n </mj-task-graph-run-view>\n } @else {\n <!-- No dispatcher rows to read: a folded graph never ran. Drawing the spec is the\n honest rendering — it is a plan, and it is drawn as one. -->\n <mj-task-graph-editor\n class=\"detail-graph__canvas\"\n [Spec]=\"stepTaskGraph\"\n [NodePositions]=\"stepTaskGraphPositions\"\n [ReadOnly]=\"true\"\n [ShowPalette]=\"false\"\n [ShowLegend]=\"false\">\n </mj-task-graph-editor>\n }\n </div>\n }\n @if (detailPaneTab === 'skills' && showSkillsTab) {\n <div class=\"skills-content\">\n @for (inv of stepSkillInvocations; track inv.SkillID) {\n <div class=\"skill-invocation-card\" [attr.data-activation]=\"inv.ActivationType\">\n <div class=\"skill-invocation-header\">\n <span class=\"skill-invocation-name\">\n <i class=\"fa-solid fa-wand-magic-sparkles\"></i>\n {{ inv.SkillName }}\n </span>\n <span class=\"skill-invocation-type\" [attr.data-activation]=\"inv.ActivationType\">\n {{ GetActivationTypeLabel(inv) }}\n </span>\n </div>\n @if (inv.Reason) {\n <div class=\"skill-invocation-reason\">\n <i class=\"fa-solid fa-quote-left\"></i>\n {{ inv.Reason }}\n </div>\n }\n <div class=\"skill-invocation-provenance\">\n <div class=\"provenance-title\">Provenance of Authority</div>\n <div class=\"provenance-row\">\n <span class=\"provenance-label\">Requested By</span>\n <span class=\"provenance-value\">{{ inv.Provenance.RequestedBy === 'user-request' ? 'User (/skill mention)' : 'Agent decision' }}</span>\n </div>\n <div class=\"provenance-row\">\n <span class=\"provenance-label\">Agent AcceptsSkills</span>\n <span class=\"provenance-value\">{{ inv.Provenance.AgentAcceptsSkills }}</span>\n </div>\n <div class=\"provenance-row\">\n <span class=\"provenance-label\">Skill ActivationMode</span>\n <span class=\"provenance-value\">{{ inv.Provenance.SkillActivationMode }}</span>\n </div>\n <div class=\"provenance-row\">\n <span class=\"provenance-label\">Agent SkillActivationMode</span>\n <span class=\"provenance-value\">{{ inv.Provenance.AgentSkillActivationMode }}</span>\n </div>\n <div class=\"provenance-row\">\n <span class=\"provenance-label\">Skill ID</span>\n <span class=\"provenance-value provenance-id\">{{ inv.SkillID }}</span>\n </div>\n </div>\n </div>\n }\n </div>\n }\n <!-- Payload Diff Tab -->\n @if (detailPaneTab === 'diff' && showStepPayloadDiff) {\n <div class=\"step-payload-diff\">\n <mj-deep-diff\n [oldValue]=\"stepPayloadAtStartObject\"\n [newValue]=\"stepPayloadAtEndObject\"\n [title]=\"''\"\n [showSummary]=\"true\"\n [showUnchanged]=\"false\"\n [expandAll]=\"false\"\n [maxDepth]=\"8\"\n [maxStringLength]=\"150\"\n [treatNullAsUndefined]=\"true\">\n </mj-deep-diff>\n </div>\n }\n <!-- Scratchpad Tab -->\n @if (detailPaneTab === 'scratchpad' && showScratchpadTab) {\n <div class=\"scratchpad-content\">\n <div class=\"scratchpad-sub-tabs\">\n <button\n class=\"scratchpad-sub-tab\"\n [class.active]=\"scratchpadSubTab === 'diff'\"\n (click)=\"scratchpadSubTab = 'diff'\">\n <i class=\"fa-solid fa-code-compare\"></i> Diff\n </button>\n <button\n class=\"scratchpad-sub-tab\"\n [class.active]=\"scratchpadSubTab === 'input'\"\n (click)=\"scratchpadSubTab = 'input'\">\n <i class=\"fa-solid fa-arrow-right-to-bracket\"></i> Input\n </button>\n <button\n class=\"scratchpad-sub-tab\"\n [class.active]=\"scratchpadSubTab === 'output'\"\n (click)=\"scratchpadSubTab = 'output'\">\n <i class=\"fa-solid fa-arrow-right-from-bracket\"></i> Output\n </button>\n </div>\n <!-- Scratchpad Diff Sub-Tab -->\n @if (scratchpadSubTab === 'diff') {\n <div class=\"scratchpad-diff-view\">\n @if (stepScratchpadInput && stepScratchpadOutput) {\n <mj-deep-diff\n [oldValue]=\"stepScratchpadInput\"\n [newValue]=\"stepScratchpadOutput\"\n [title]=\"''\"\n [showSummary]=\"true\"\n [showUnchanged]=\"false\"\n [expandAll]=\"true\"\n [maxDepth]=\"6\"\n [maxStringLength]=\"300\"\n [treatNullAsUndefined]=\"true\">\n </mj-deep-diff>\n } @else if (stepScratchpadOutput) {\n <mj-empty-state\n Size=\"compact\"\n Icon=\"fa-solid fa-circle-plus\"\n Title=\"Scratchpad created in this step (no prior state)\" />\n <div class=\"scratchpad-snapshot\">\n <ng-container *ngTemplateOutlet=\"scratchpadSnapshotTpl; context: { $implicit: stepScratchpadOutput }\"></ng-container>\n </div>\n } @else {\n <mj-empty-state\n Size=\"compact\"\n Icon=\"fa-solid fa-circle-info\"\n Title=\"No scratchpad changes in this step\" />\n }\n </div>\n }\n <!-- Scratchpad Input Sub-Tab -->\n @if (scratchpadSubTab === 'input') {\n <div class=\"scratchpad-snapshot-view\">\n @if (stepScratchpadInput) {\n <ng-container *ngTemplateOutlet=\"scratchpadSnapshotTpl; context: { $implicit: stepScratchpadInput }\"></ng-container>\n } @else {\n <mj-empty-state\n Size=\"compact\"\n Icon=\"fa-solid fa-circle-info\"\n Title=\"No scratchpad input for this step\" />\n }\n </div>\n }\n <!-- Scratchpad Output Sub-Tab -->\n @if (scratchpadSubTab === 'output') {\n <div class=\"scratchpad-snapshot-view\">\n @if (stepScratchpadOutput) {\n <ng-container *ngTemplateOutlet=\"scratchpadSnapshotTpl; context: { $implicit: stepScratchpadOutput }\"></ng-container>\n } @else {\n <mj-empty-state\n Size=\"compact\"\n Icon=\"fa-solid fa-circle-info\"\n Title=\"No scratchpad output for this step\" />\n }\n </div>\n }\n </div>\n }\n <!-- Full JSON Tab -->\n @if (detailPaneTab === 'json' || (!showStepPayloadDiff && !showScratchpadTab)) {\n <div class=\"json-viewer\">\n <div class=\"json-toolbar\">\n <button class=\"btn-icon\" title=\"Copy JSON\" (click)=\"onCopyToClipboard()\">\n <i class=\"fas fa-copy\"></i>\n </button>\n </div>\n <mj-code-editor\n [(ngModel)]=\"selectedItemJsonString\"\n [language]=\"'json'\"\n [readonly]=\"true\"\n style=\"width: 100%;\">\n </mj-code-editor>\n </div>\n }\n </div>\n </div>\n </div>\n}\n\n<!-- Reusable scratchpad snapshot template -->\n<ng-template #scratchpadSnapshotTpl let-snapshot>\n <div class=\"scratchpad-snapshot\">\n @if (snapshot.notes) {\n <div class=\"scratchpad-notes-section\">\n <h4><i class=\"fa-solid fa-note-sticky\"></i> Notes</h4>\n <div class=\"scratchpad-notes-content\">{{ snapshot.notes }}</div>\n </div>\n }\n @if (snapshot.tasks?.length > 0) {\n <div class=\"scratchpad-tasks-section\">\n <h4><i class=\"fa-solid fa-list-check\"></i> Tasks ({{ snapshot.tasks.length }})</h4>\n <div class=\"scratchpad-task-list\">\n @for (task of snapshot.tasks; track task.id) {\n <div class=\"scratchpad-task-item\" [attr.data-status]=\"task.status\">\n <span class=\"task-status-indicator\" [attr.data-status]=\"task.status\">\n @switch (task.status) {\n @case ('completed') { <i class=\"fa-solid fa-circle-check\"></i> }\n @case ('in_progress') { <i class=\"fa-solid fa-spinner\"></i> }\n @case ('blocked') { <i class=\"fa-solid fa-circle-xmark\"></i> }\n @default { <i class=\"fa-regular fa-circle\"></i> }\n }\n </span>\n <div class=\"task-content\">\n <span class=\"task-id\">{{ task.id }}</span>\n <span class=\"task-title\">{{ task.title }}</span>\n @if (task.notes) {\n <span class=\"task-notes\">{{ task.notes }}</span>\n }\n </div>\n <span class=\"task-status-badge\" [attr.data-status]=\"task.status\">{{ task.status }}</span>\n </div>\n }\n </div>\n </div>\n }\n @if (!snapshot.notes && (!snapshot.tasks || snapshot.tasks.length === 0)) {\n <mj-empty-state\n Size=\"compact\"\n Icon=\"fa-solid fa-circle-info\"\n Title=\"Empty scratchpad\" />\n }\n </div>\n</ng-template>"]}
@@ -58,7 +58,16 @@ export declare class AIAgentRunTimelineComponent extends BaseAngularComponent im
58
58
  * issues the same recursive query three times AND lets the tabs disagree — a tab that loaded a
59
59
  * second earlier shows a different run than the one beside it.
60
60
  */
61
- RunTree: AgentRunTreeNode | null;
61
+ /**
62
+ * Setter, not a plain field: a TaskGraph step's row takes its STATUS from the graph (see
63
+ * `graphNodeForStep`), and the tree usually arrives after the step rows have already been built.
64
+ * Republishing rebuilds them, so a dispatched workflow stops reading Completed the moment the
65
+ * tree says it is still running.
66
+ */
67
+ set RunTree(value: AgentRunTreeNode | null);
68
+ get RunTree(): AgentRunTreeNode | null;
69
+ private runTree;
70
+ private runTree$;
62
71
  dataHelper: AIAgentRunDataHelper;
63
72
  itemSelected: EventEmitter<TimelineItem>;
64
73
  navigateToEntity: EventEmitter<{
@@ -66,6 +75,16 @@ export declare class AIAgentRunTimelineComponent extends BaseAngularComponent im
66
75
  recordId: string;
67
76
  }>;
68
77
  private destroy$;
78
+ /** Resolved once the action cache is warm, so a first paint without icons can be re-rendered with them. */
79
+ private actionsReady;
80
+ /**
81
+ * Execution-log id → action id, for the RUN-STEP path only.
82
+ *
83
+ * The tree path needs none of this — it carries `ActionID` outright. A run step of type `Actions`
84
+ * still names only its log, so this map stays for that case, built from logs the data service has
85
+ * already fetched by id.
86
+ */
87
+ private actionIDByLogID;
69
88
  steps$: Observable<MJAIAgentRunStepEntity[]>;
70
89
  subRuns$: Observable<MJAIAgentRunEntity[]>;
71
90
  actionLogs$: Observable<MJActionExecutionLogEntity[]>;
@@ -82,6 +101,32 @@ export declare class AIAgentRunTimelineComponent extends BaseAngularComponent im
82
101
  loadData(): Promise<void>;
83
102
  private buildTimelineItems;
84
103
  private buildHierarchicalItems;
104
+ /**
105
+ * Font Awesome class for a node that runs a known action or agent, or null to keep the default.
106
+ *
107
+ * **Why the row kind is the wrong answer.** The same action reaches this timeline through two
108
+ * arms of the run-tree query — as a graph Task and as a loop pass — and each arm had its own
109
+ * generic glyph, so one Google Custom Search drew a lightning bolt and the next a paper plane.
110
+ * What the step IS does not change with where it ran.
111
+ *
112
+ * **No hop.** The tree carries `ActionID` and `AgentID` directly (a task holds them as columns;
113
+ * a pass takes them from the log it expanded from), so this is one cache read. The first version
114
+ * of this went through the execution log and silently resolved NOTHING for graph steps, because
115
+ * the logs it consulted are only loaded for run steps of type `Actions` — of which a dispatched
116
+ * workflow has none.
117
+ *
118
+ * **Loops keep their own icon.** A ForEach carries the ActionID of the action it repeats, and
119
+ * drawing that action's mark on the loop row would say "this is a Google search" about a row that
120
+ * is a loop over five of them. The distinction the loop icon carries is worth more.
121
+ */
122
+ private resolveActionIcon;
123
+ /**
124
+ * The graph a TaskGraph step dispatched, from the run tree.
125
+ *
126
+ * Null until the tree arrives (the setter above republishes then) and null for a submission that
127
+ * produced no graph — a failed submit, where the step's own status IS the story.
128
+ */
129
+ private graphNodeForStep;
85
130
  private createTimelineItemFromStep;
86
131
  private getStepIconInfo;
87
132
  private getStepIcon;
@@ -1 +1 @@
1
- {"version":3,"file":"ai-agent-run-timeline.component.d.ts","sourceRoot":"","sources":["../../../../src/lib/custom/ai-agent-run/ai-agent-run-timeline.component.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"ai-agent-run-timeline.component.d.ts","sourceRoot":"","sources":["../../../../src/lib/custom/ai-agent-run/ai-agent-run-timeline.component.ts"],"names":[],"mappings":"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"}
@@ -1,12 +1,13 @@
1
1
  import { Component, Input, Output, EventEmitter, ChangeDetectionStrategy } from '@angular/core';
2
- import { Subject, combineLatest } from 'rxjs';
2
+ import { Subject, combineLatest, BehaviorSubject } from 'rxjs';
3
3
  import { takeUntil, map, shareReplay, filter } from 'rxjs/operators';
4
4
  import { AIAgentRunDataHelper } from './ai-agent-run-data.service';
5
5
  import { AIEngineBase } from '@memberjunction/ai-engine-base';
6
6
  import { UUIDsEqual } from '@memberjunction/global';
7
7
  import { BaseAngularComponent } from '@memberjunction/ng-base-types';
8
8
  import { FindAgentRunTreeNodes } from '@memberjunction/ai-core-plus';
9
- import { ProjectRunTreeToTimeline } from './run-tree-timeline-projection';
9
+ import { NormalizeStatus, ProjectRunTreeToTimeline } from './run-tree-timeline-projection';
10
+ import { ActionEngineBase } from '@memberjunction/actions-base';
10
11
  import * as i0 from "@angular/core";
11
12
  const _c0 = a0 => ({ $implicit: a0 });
12
13
  function AIAgentRunTimelineComponent_Conditional_0_Template(rf, ctx) { if (rf & 1) {
@@ -168,21 +169,53 @@ function AIAgentRunTimelineComponent_ng_template_5_Template(rf, ctx) { if (rf &
168
169
  const steps_r9 = ctx.$implicit;
169
170
  i0.ɵɵrepeater(steps_r9);
170
171
  } }
172
+ /**
173
+ * Node kinds whose row is a LOOP, not the work inside it.
174
+ *
175
+ * A ForEach carries the ActionID of the action it repeats, so resolving an icon from it would draw
176
+ * "a Google search" on a row that is a loop over five of them — losing the one distinction the row
177
+ * exists to make.
178
+ */
179
+ const LOOP_KINDS = new Set(['ForEach', 'While']);
171
180
  export class AIAgentRunTimelineComponent extends BaseAngularComponent {
181
+ /**
182
+ * The run's execution tree, loaded ONCE by the form and shared with every tab.
183
+ *
184
+ * Received rather than fetched: three tabs need the same structure, and letting each load its own
185
+ * issues the same recursive query three times AND lets the tabs disagree — a tab that loaded a
186
+ * second earlier shows a different run than the one beside it.
187
+ */
188
+ /**
189
+ * Setter, not a plain field: a TaskGraph step's row takes its STATUS from the graph (see
190
+ * `graphNodeForStep`), and the tree usually arrives after the step rows have already been built.
191
+ * Republishing rebuilds them, so a dispatched workflow stops reading Completed the moment the
192
+ * tree says it is still running.
193
+ */
194
+ set RunTree(value) {
195
+ this.runTree = value;
196
+ this.runTree$.next(value);
197
+ }
198
+ get RunTree() {
199
+ return this.runTree;
200
+ }
172
201
  constructor(cdr) {
173
202
  super();
174
203
  this.cdr = cdr;
175
- /**
176
- * The run's execution tree, loaded ONCE by the form and shared with every tab.
177
- *
178
- * Received rather than fetched: three tabs need the same structure, and letting each load its own
179
- * issues the same recursive query three times AND lets the tabs disagree — a tab that loaded a
180
- * second earlier shows a different run than the one beside it.
181
- */
182
- this.RunTree = null;
204
+ this.runTree = null;
205
+ this.runTree$ = new BehaviorSubject(null);
183
206
  this.itemSelected = new EventEmitter();
184
207
  this.navigateToEntity = new EventEmitter();
185
208
  this.destroy$ = new Subject();
209
+ /** Resolved once the action cache is warm, so a first paint without icons can be re-rendered with them. */
210
+ this.actionsReady = false;
211
+ /**
212
+ * Execution-log id → action id, for the RUN-STEP path only.
213
+ *
214
+ * The tree path needs none of this — it carries `ActionID` outright. A run step of type `Actions`
215
+ * still names only its log, so this map stays for that case, built from logs the data service has
216
+ * already fetched by id.
217
+ */
218
+ this.actionIDByLogID = new Map();
186
219
  this.loading = true;
187
220
  this.error = null;
188
221
  this.selectedItem = null;
@@ -193,6 +226,17 @@ export class AIAgentRunTimelineComponent extends BaseAngularComponent {
193
226
  // AIEngineBase is deferred at startup; ensure it's loaded before timeline
194
227
  // items render — getStepIconInfo / sub-agent lookups read .Agents synchronously.
195
228
  await AIEngineBase.Instance.EnsureLoaded();
229
+ // Same reason, for the same kind of read: `resolveActionIcon` looks up `.Actions` synchronously
230
+ // inside the projection. Cheap when another surface already warmed it, and a no-op on reload.
231
+ try {
232
+ await ActionEngineBase.Instance.EnsureLoaded();
233
+ this.actionsReady = true;
234
+ }
235
+ catch {
236
+ // An action cache that will not load costs icons, not rows — every action keeps the generic
237
+ // glyph it had before. Never worth failing a run view over.
238
+ this.actionsReady = false;
239
+ }
196
240
  // Initialize observables from the data helper
197
241
  this.steps$ = this.dataHelper.steps$;
198
242
  this.subRuns$ = this.dataHelper.subRuns$;
@@ -207,12 +251,20 @@ export class AIAgentRunTimelineComponent extends BaseAngularComponent {
207
251
  this.subRuns$,
208
252
  this.actionLogs$,
209
253
  this.promptRuns$,
210
- this.dataHelper.loading$
254
+ this.dataHelper.loading$,
255
+ this.runTree$
211
256
  ]).pipe(filter(([steps, _subRuns, _actionLogs, _promptRuns, isLoading]) => {
212
257
  // While loading, suppress the empty-array emission so the
213
258
  // template keeps showing the mj-loading indicator.
214
259
  return !(isLoading && steps.length === 0);
215
- }), map(([steps, subRuns, actionLogs, promptRuns]) => this.buildTimelineItems(steps, subRuns, actionLogs, promptRuns)), shareReplay(1));
260
+ }), map(([steps, subRuns, actionLogs, promptRuns]) => {
261
+ // Built here rather than on demand: this is where the logs arrive, and the resolver runs
262
+ // synchronously inside the projection, which cannot await anything.
263
+ this.actionIDByLogID = new Map((actionLogs ?? [])
264
+ .filter((log) => log.ID && log.ActionID)
265
+ .map((log) => [log.ID.toLowerCase(), log.ActionID]));
266
+ return this.buildTimelineItems(steps, subRuns, actionLogs, promptRuns);
267
+ }), shareReplay(1));
216
268
  // Data loading is now handled by the parent component through the helper
217
269
  // Subscribe to loading state from helper
218
270
  this.dataHelper.loading$.pipe(takeUntil(this.destroy$)).subscribe(loading => {
@@ -275,6 +327,51 @@ export class AIAgentRunTimelineComponent extends BaseAngularComponent {
275
327
  });
276
328
  return rootItems;
277
329
  }
330
+ /**
331
+ * Font Awesome class for a node that runs a known action or agent, or null to keep the default.
332
+ *
333
+ * **Why the row kind is the wrong answer.** The same action reaches this timeline through two
334
+ * arms of the run-tree query — as a graph Task and as a loop pass — and each arm had its own
335
+ * generic glyph, so one Google Custom Search drew a lightning bolt and the next a paper plane.
336
+ * What the step IS does not change with where it ran.
337
+ *
338
+ * **No hop.** The tree carries `ActionID` and `AgentID` directly (a task holds them as columns;
339
+ * a pass takes them from the log it expanded from), so this is one cache read. The first version
340
+ * of this went through the execution log and silently resolved NOTHING for graph steps, because
341
+ * the logs it consulted are only loaded for run steps of type `Actions` — of which a dispatched
342
+ * workflow has none.
343
+ *
344
+ * **Loops keep their own icon.** A ForEach carries the ActionID of the action it repeats, and
345
+ * drawing that action's mark on the loop row would say "this is a Google search" about a row that
346
+ * is a loop over five of them. The distinction the loop icon carries is worth more.
347
+ */
348
+ resolveActionIcon(node) {
349
+ if (LOOP_KINDS.has(node.SourceKind ?? ''))
350
+ return null;
351
+ if (node.ActionID) {
352
+ const action = ActionEngineBase.Instance.Actions?.find((a) => UUIDsEqual(a.ID, node.ActionID));
353
+ if (action?.IconClass)
354
+ return action.IconClass;
355
+ }
356
+ if (node.AgentID) {
357
+ const agent = AIEngineBase.Instance.Agents?.find((a) => UUIDsEqual(a.ID, node.AgentID));
358
+ if (agent?.IconClass)
359
+ return agent.IconClass;
360
+ }
361
+ return null;
362
+ }
363
+ /**
364
+ * The graph a TaskGraph step dispatched, from the run tree.
365
+ *
366
+ * Null until the tree arrives (the setter above republishes then) and null for a submission that
367
+ * produced no graph — a failed submit, where the step's own status IS the story.
368
+ */
369
+ graphNodeForStep(stepID) {
370
+ if (!this.runTree)
371
+ return null;
372
+ const stepNode = FindAgentRunTreeNodes(this.runTree, (n) => UUIDsEqual(n.NodeID, stepID))[0] ?? null;
373
+ return stepNode?.Children.find((c) => c.NodeType === 'TaskGraph') ?? null;
374
+ }
278
375
  createTimelineItemFromStep(step, level, promptRuns) {
279
376
  let subtitle = `Type: ${step.StepType}`;
280
377
  // For prompt steps, try to find the associated prompt run to get model/vendor info
@@ -286,18 +383,30 @@ export class AIAgentRunTimelineComponent extends BaseAngularComponent {
286
383
  }
287
384
  // Get icon and logoUrl based on step type
288
385
  const iconInfo = this.getStepIconInfo(step);
386
+ // A dispatched workflow's row describes the WORKFLOW, not the handoff that started it. The
387
+ // step's own status is about submission — Completed in ~300ms, correctly — and showing that
388
+ // under a title naming the workflow is how the timeline came to report a running graph as
389
+ // finished while the page header said "Workflow still running".
390
+ const graph = step.StepType === 'TaskGraph' ? this.graphNodeForStep(step.ID) : null;
391
+ if (graph) {
392
+ subtitle = `${subtitle} · dispatched in ${this.calculateDuration(step.StartedAt, step.CompletedAt)}`;
393
+ }
289
394
  return {
290
395
  id: step.ID,
291
396
  type: 'step',
292
397
  title: step.StepName || `Step ${step.StepNumber}`,
293
398
  subtitle: subtitle,
294
- status: step.Status,
399
+ status: graph ? NormalizeStatus(graph.Status) : step.Status,
295
400
  startTime: step.StartedAt,
296
- endTime: step.CompletedAt || undefined,
297
- duration: this.calculateDuration(step.StartedAt, step.CompletedAt),
401
+ endTime: (graph ? graph.CompletedAt : step.CompletedAt) || undefined,
402
+ // A graph that has not started yet has no duration of its own — the submission's stands in,
403
+ // and the subtitle says which it is either way.
404
+ duration: graph?.StartedAt
405
+ ? this.calculateDuration(graph.StartedAt, graph.CompletedAt)
406
+ : this.calculateDuration(step.StartedAt, step.CompletedAt),
298
407
  icon: iconInfo.icon,
299
408
  logoUrl: iconInfo.logoUrl,
300
- color: this.getStatusColor(step.Status),
409
+ color: this.getStatusColor(graph ? NormalizeStatus(graph.Status) : step.Status),
301
410
  data: step,
302
411
  children: [],
303
412
  level,
@@ -323,6 +432,20 @@ export class AIAgentRunTimelineComponent extends BaseAngularComponent {
323
432
  }
324
433
  }
325
434
  }
435
+ // An action step draws its OWN action's icon, exactly as a sub-agent step draws its agent's —
436
+ // the two cases are the same idea, and only one of them was implemented. `TargetLogID` names
437
+ // the execution log this run already loaded; that log names the action, whose IconClass is in
438
+ // ActionEngineBase's cache. A step whose action cannot be resolved (an action with no icon, a
439
+ // cache that did not load) falls through to the step-type default below, which is the same
440
+ // lightning bolt it drew before.
441
+ if (step.StepType === 'Actions' && step.TargetLogID) {
442
+ const actionID = this.actionIDByLogID.get(step.TargetLogID.toLowerCase());
443
+ const action = actionID
444
+ ? ActionEngineBase.Instance.Actions?.find((a) => UUIDsEqual(a.ID, actionID))
445
+ : undefined;
446
+ if (action?.IconClass)
447
+ return { icon: action.IconClass };
448
+ }
326
449
  // Default icons for each step type (includes fa-robot for sub-agents without agent metadata)
327
450
  const icon = this.getStepIcon(step.StepType);
328
451
  return { icon };
@@ -497,7 +620,7 @@ export class AIAgentRunTimelineComponent extends BaseAngularComponent {
497
620
  // The graph hangs off THIS step in the tree, so the subtree to splice in is the node whose id
498
621
  // matches the step — not the whole run, which is already on screen above it.
499
622
  const stepNode = FindAgentRunTreeNodes(this.RunTree, (n) => n.NodeID === item.id)[0] ?? null;
500
- item.children = ProjectRunTreeToTimeline(stepNode, item.level + 1, true);
623
+ item.children = ProjectRunTreeToTimeline(stepNode, item.level + 1, true, (n) => this.resolveActionIcon(n));
501
624
  item.childrenLoaded = true;
502
625
  item.hasNoChildren = item.children.length === 0;
503
626
  }
@@ -548,5 +671,5 @@ export class AIAgentRunTimelineComponent extends BaseAngularComponent {
548
671
  }], navigateToEntity: [{
549
672
  type: Output
550
673
  }] }); })();
551
- (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassDebugInfo(AIAgentRunTimelineComponent, { className: "AIAgentRunTimelineComponent", filePath: "src/lib/custom/ai-agent-run/ai-agent-run-timeline.component.ts", lineNumber: 63 }); })();
674
+ (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassDebugInfo(AIAgentRunTimelineComponent, { className: "AIAgentRunTimelineComponent", filePath: "src/lib/custom/ai-agent-run/ai-agent-run-timeline.component.ts", lineNumber: 73 }); })();
552
675
  //# sourceMappingURL=ai-agent-run-timeline.component.js.map