@memberjunction/ng-core-entity-forms 5.42.0 → 5.44.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (270) hide show
  1. package/dist/__tests__/model-prediction.logic.test.d.ts +2 -0
  2. package/dist/__tests__/model-prediction.logic.test.d.ts.map +1 -0
  3. package/dist/__tests__/model-prediction.logic.test.js +140 -0
  4. package/dist/__tests__/model-prediction.logic.test.js.map +1 -0
  5. package/dist/lib/custom/AIAgentSessions/ai-agent-session-form.component.js +79 -105
  6. package/dist/lib/custom/AIAgentSessions/ai-agent-session-form.component.js.map +1 -1
  7. package/dist/lib/custom/AIAgents/FlowAgentType/flow-agent-form-section.component.js +7 -10
  8. package/dist/lib/custom/AIAgents/FlowAgentType/flow-agent-form-section.component.js.map +1 -1
  9. package/dist/lib/custom/AIAgents/add-action-dialog.component.d.ts.map +1 -1
  10. package/dist/lib/custom/AIAgents/add-action-dialog.component.js +46 -51
  11. package/dist/lib/custom/AIAgents/add-action-dialog.component.js.map +1 -1
  12. package/dist/lib/custom/AIAgents/ai-agent-form.component.d.ts +2 -0
  13. package/dist/lib/custom/AIAgents/ai-agent-form.component.d.ts.map +1 -1
  14. package/dist/lib/custom/AIAgents/ai-agent-form.component.js +300 -378
  15. package/dist/lib/custom/AIAgents/ai-agent-form.component.js.map +1 -1
  16. package/dist/lib/custom/AIAgents/create-sub-agent-dialog.component.js +22 -29
  17. package/dist/lib/custom/AIAgents/create-sub-agent-dialog.component.js.map +1 -1
  18. package/dist/lib/custom/AIAgents/new-agent-dialog.component.js +15 -17
  19. package/dist/lib/custom/AIAgents/new-agent-dialog.component.js.map +1 -1
  20. package/dist/lib/custom/AIAgents/prompt-selector-dialog.component.js +27 -34
  21. package/dist/lib/custom/AIAgents/prompt-selector-dialog.component.js.map +1 -1
  22. package/dist/lib/custom/AIAgents/sub-agent-selector-dialog.component.d.ts +11 -0
  23. package/dist/lib/custom/AIAgents/sub-agent-selector-dialog.component.d.ts.map +1 -1
  24. package/dist/lib/custom/AIAgents/sub-agent-selector-dialog.component.js +48 -47
  25. package/dist/lib/custom/AIAgents/sub-agent-selector-dialog.component.js.map +1 -1
  26. package/dist/lib/custom/AIPromptRuns/ai-prompt-run-form.component.js +438 -454
  27. package/dist/lib/custom/AIPromptRuns/ai-prompt-run-form.component.js.map +1 -1
  28. package/dist/lib/custom/AIPromptRuns/chat-message-viewer.component.js +48 -51
  29. package/dist/lib/custom/AIPromptRuns/chat-message-viewer.component.js.map +1 -1
  30. package/dist/lib/custom/AIPrompts/ai-prompt-form.component.js +253 -282
  31. package/dist/lib/custom/AIPrompts/ai-prompt-form.component.js.map +1 -1
  32. package/dist/lib/custom/Actions/action-execution-log-form.component.js +24 -33
  33. package/dist/lib/custom/Actions/action-execution-log-form.component.js.map +1 -1
  34. package/dist/lib/custom/Actions/action-form.component.js +263 -311
  35. package/dist/lib/custom/Actions/action-form.component.js.map +1 -1
  36. package/dist/lib/custom/Entities/entity-form.component.d.ts +6 -0
  37. package/dist/lib/custom/Entities/entity-form.component.d.ts.map +1 -1
  38. package/dist/lib/custom/Entities/entity-form.component.js +475 -493
  39. package/dist/lib/custom/Entities/entity-form.component.js.map +1 -1
  40. package/dist/lib/custom/Lists/list-form.component.js +122 -173
  41. package/dist/lib/custom/Lists/list-form.component.js.map +1 -1
  42. package/dist/lib/custom/Queries/query-form.component.js +190 -248
  43. package/dist/lib/custom/Queries/query-form.component.js.map +1 -1
  44. package/dist/lib/custom/Queries/query-run-dialog.component.js +19 -23
  45. package/dist/lib/custom/Queries/query-run-dialog.component.js.map +1 -1
  46. package/dist/lib/custom/RecordProcesses/record-process-form.component.d.ts +16 -0
  47. package/dist/lib/custom/RecordProcesses/record-process-form.component.d.ts.map +1 -0
  48. package/dist/lib/custom/RecordProcesses/record-process-form.component.js +54 -0
  49. package/dist/lib/custom/RecordProcesses/record-process-form.component.js.map +1 -0
  50. package/dist/lib/custom/SearchScopes/searchscopeprovider-form.component.js +23 -24
  51. package/dist/lib/custom/SearchScopes/searchscopeprovider-form.component.js.map +1 -1
  52. package/dist/lib/custom/Templates/template-param-dialog.component.d.ts.map +1 -1
  53. package/dist/lib/custom/Templates/template-param-dialog.component.js +25 -46
  54. package/dist/lib/custom/Templates/template-param-dialog.component.js.map +1 -1
  55. package/dist/lib/custom/Tests/test-form.component.js +100 -130
  56. package/dist/lib/custom/Tests/test-form.component.js.map +1 -1
  57. package/dist/lib/custom/Tests/test-run-form.component.js +187 -205
  58. package/dist/lib/custom/Tests/test-run-form.component.js.map +1 -1
  59. package/dist/lib/custom/Tests/test-suite-form.component.d.ts +8 -0
  60. package/dist/lib/custom/Tests/test-suite-form.component.d.ts.map +1 -1
  61. package/dist/lib/custom/Tests/test-suite-form.component.js +412 -489
  62. package/dist/lib/custom/Tests/test-suite-form.component.js.map +1 -1
  63. package/dist/lib/custom/Tests/test-suite-run-form.component.js +100 -126
  64. package/dist/lib/custom/Tests/test-suite-run-form.component.js.map +1 -1
  65. package/dist/lib/custom/ai-agent-run/ai-agent-run-analytics.component.js +166 -184
  66. package/dist/lib/custom/ai-agent-run/ai-agent-run-analytics.component.js.map +1 -1
  67. package/dist/lib/custom/ai-agent-run/ai-agent-run-step-detail.component.js +42 -61
  68. package/dist/lib/custom/ai-agent-run/ai-agent-run-step-detail.component.js.map +1 -1
  69. package/dist/lib/custom/ai-agent-run/ai-agent-run-timeline.component.js +8 -17
  70. package/dist/lib/custom/ai-agent-run/ai-agent-run-timeline.component.js.map +1 -1
  71. package/dist/lib/custom/ai-agent-run/ai-agent-run.component.d.ts +0 -2
  72. package/dist/lib/custom/ai-agent-run/ai-agent-run.component.d.ts.map +1 -1
  73. package/dist/lib/custom/ai-agent-run/ai-agent-run.component.js +183 -188
  74. package/dist/lib/custom/ai-agent-run/ai-agent-run.component.js.map +1 -1
  75. package/dist/lib/custom/ai-agent-run/flow/agent-run-flow.component.d.ts +108 -0
  76. package/dist/lib/custom/ai-agent-run/flow/agent-run-flow.component.d.ts.map +1 -0
  77. package/dist/lib/custom/ai-agent-run/flow/agent-run-flow.component.js +665 -0
  78. package/dist/lib/custom/ai-agent-run/flow/agent-run-flow.component.js.map +1 -0
  79. package/dist/lib/custom/ai-agent-run/flow/agent-run-flow.model.d.ts +94 -0
  80. package/dist/lib/custom/ai-agent-run/flow/agent-run-flow.model.d.ts.map +1 -0
  81. package/dist/lib/custom/ai-agent-run/flow/agent-run-flow.model.js +257 -0
  82. package/dist/lib/custom/ai-agent-run/flow/agent-run-flow.model.js.map +1 -0
  83. package/dist/lib/custom/ai-agent-run/flow/constellation.component.d.ts +38 -0
  84. package/dist/lib/custom/ai-agent-run/flow/constellation.component.d.ts.map +1 -0
  85. package/dist/lib/custom/ai-agent-run/flow/constellation.component.js +200 -0
  86. package/dist/lib/custom/ai-agent-run/flow/constellation.component.js.map +1 -0
  87. package/dist/lib/custom/ai-agent-run/flow/flame-cascade.component.d.ts +44 -0
  88. package/dist/lib/custom/ai-agent-run/flow/flame-cascade.component.d.ts.map +1 -0
  89. package/dist/lib/custom/ai-agent-run/flow/flame-cascade.component.js +180 -0
  90. package/dist/lib/custom/ai-agent-run/flow/flame-cascade.component.js.map +1 -0
  91. package/dist/lib/custom/ai-agent-run/flow/flow-svg.util.d.ts +12 -0
  92. package/dist/lib/custom/ai-agent-run/flow/flow-svg.util.d.ts.map +1 -0
  93. package/dist/lib/custom/ai-agent-run/flow/flow-svg.util.js +46 -0
  94. package/dist/lib/custom/ai-agent-run/flow/flow-svg.util.js.map +1 -0
  95. package/dist/lib/custom/ai-agent-run/flow/flowchart.component.d.ts +64 -0
  96. package/dist/lib/custom/ai-agent-run/flow/flowchart.component.d.ts.map +1 -0
  97. package/dist/lib/custom/ai-agent-run/flow/flowchart.component.js +267 -0
  98. package/dist/lib/custom/ai-agent-run/flow/flowchart.component.js.map +1 -0
  99. package/dist/lib/custom/ai-agent-run/flow/pan-zoom.d.ts +53 -0
  100. package/dist/lib/custom/ai-agent-run/flow/pan-zoom.d.ts.map +1 -0
  101. package/dist/lib/custom/ai-agent-run/flow/pan-zoom.js +111 -0
  102. package/dist/lib/custom/ai-agent-run/flow/pan-zoom.js.map +1 -0
  103. package/dist/lib/custom/ai-agent-run/flow/subway-lines.component.d.ts +42 -0
  104. package/dist/lib/custom/ai-agent-run/flow/subway-lines.component.d.ts.map +1 -0
  105. package/dist/lib/custom/ai-agent-run/flow/subway-lines.component.js +193 -0
  106. package/dist/lib/custom/ai-agent-run/flow/subway-lines.component.js.map +1 -0
  107. package/dist/lib/custom/custom-forms.module.d.ts +58 -49
  108. package/dist/lib/custom/custom-forms.module.d.ts.map +1 -1
  109. package/dist/lib/custom/custom-forms.module.js +64 -16
  110. package/dist/lib/custom/custom-forms.module.js.map +1 -1
  111. package/dist/lib/custom/shared/entity-selector-dialog.component.d.ts +2 -0
  112. package/dist/lib/custom/shared/entity-selector-dialog.component.d.ts.map +1 -1
  113. package/dist/lib/custom/shared/entity-selector-dialog.component.js +25 -25
  114. package/dist/lib/custom/shared/entity-selector-dialog.component.js.map +1 -1
  115. package/dist/lib/generated/Entities/MJAIAgent/mjaiagent.form.component.d.ts.map +1 -1
  116. package/dist/lib/generated/Entities/MJAIAgent/mjaiagent.form.component.js +280 -216
  117. package/dist/lib/generated/Entities/MJAIAgent/mjaiagent.form.component.js.map +1 -1
  118. package/dist/lib/generated/Entities/MJAIAgentChannel/mjaiagentchannel.form.component.js +25 -21
  119. package/dist/lib/generated/Entities/MJAIAgentChannel/mjaiagentchannel.form.component.js.map +1 -1
  120. package/dist/lib/generated/Entities/MJAIAgentRun/mjaiagentrun.form.component.d.ts.map +1 -1
  121. package/dist/lib/generated/Entities/MJAIAgentRun/mjaiagentrun.form.component.js +68 -14
  122. package/dist/lib/generated/Entities/MJAIAgentRun/mjaiagentrun.form.component.js.map +1 -1
  123. package/dist/lib/generated/Entities/MJAIAgentSession/mjaiagentsession.form.component.d.ts.map +1 -1
  124. package/dist/lib/generated/Entities/MJAIAgentSession/mjaiagentsession.form.component.js +44 -32
  125. package/dist/lib/generated/Entities/MJAIAgentSession/mjaiagentsession.form.component.js.map +1 -1
  126. package/dist/lib/generated/Entities/MJAIAgentSkill/mjaiagentskill.form.component.d.ts +10 -0
  127. package/dist/lib/generated/Entities/MJAIAgentSkill/mjaiagentskill.form.component.d.ts.map +1 -0
  128. package/dist/lib/generated/Entities/MJAIAgentSkill/mjaiagentskill.form.component.js +66 -0
  129. package/dist/lib/generated/Entities/MJAIAgentSkill/mjaiagentskill.form.component.js.map +1 -0
  130. package/dist/lib/generated/Entities/MJAIPrompt/mjaiprompt.form.component.d.ts.map +1 -1
  131. package/dist/lib/generated/Entities/MJAIPrompt/mjaiprompt.form.component.js +55 -19
  132. package/dist/lib/generated/Entities/MJAIPrompt/mjaiprompt.form.component.js.map +1 -1
  133. package/dist/lib/generated/Entities/MJAIPromptRun/mjaipromptrun.form.component.d.ts.map +1 -1
  134. package/dist/lib/generated/Entities/MJAIPromptRun/mjaipromptrun.form.component.js +28 -10
  135. package/dist/lib/generated/Entities/MJAIPromptRun/mjaipromptrun.form.component.js.map +1 -1
  136. package/dist/lib/generated/Entities/MJAISkill/mjaiskill.form.component.d.ts +10 -0
  137. package/dist/lib/generated/Entities/MJAISkill/mjaiskill.form.component.d.ts.map +1 -0
  138. package/dist/lib/generated/Entities/MJAISkill/mjaiskill.form.component.js +167 -0
  139. package/dist/lib/generated/Entities/MJAISkill/mjaiskill.form.component.js.map +1 -0
  140. package/dist/lib/generated/Entities/MJAISkillAction/mjaiskillaction.form.component.d.ts +10 -0
  141. package/dist/lib/generated/Entities/MJAISkillAction/mjaiskillaction.form.component.d.ts.map +1 -0
  142. package/dist/lib/generated/Entities/MJAISkillAction/mjaiskillaction.form.component.js +64 -0
  143. package/dist/lib/generated/Entities/MJAISkillAction/mjaiskillaction.form.component.js.map +1 -0
  144. package/dist/lib/generated/Entities/MJAISkillPermission/mjaiskillpermission.form.component.d.ts +10 -0
  145. package/dist/lib/generated/Entities/MJAISkillPermission/mjaiskillpermission.form.component.d.ts.map +1 -0
  146. package/dist/lib/generated/Entities/MJAISkillPermission/mjaiskillpermission.form.component.js +82 -0
  147. package/dist/lib/generated/Entities/MJAISkillPermission/mjaiskillpermission.form.component.js.map +1 -0
  148. package/dist/lib/generated/Entities/MJAISkillSubAgent/mjaiskillsubagent.form.component.d.ts +10 -0
  149. package/dist/lib/generated/Entities/MJAISkillSubAgent/mjaiskillsubagent.form.component.d.ts.map +1 -0
  150. package/dist/lib/generated/Entities/MJAISkillSubAgent/mjaiskillsubagent.form.component.js +64 -0
  151. package/dist/lib/generated/Entities/MJAISkillSubAgent/mjaiskillsubagent.form.component.js.map +1 -0
  152. package/dist/lib/generated/Entities/MJAction/mjaction.form.component.d.ts.map +1 -1
  153. package/dist/lib/generated/Entities/MJAction/mjaction.form.component.js +35 -17
  154. package/dist/lib/generated/Entities/MJAction/mjaction.form.component.js.map +1 -1
  155. package/dist/lib/generated/Entities/MJApplication/mjapplication.form.component.d.ts.map +1 -1
  156. package/dist/lib/generated/Entities/MJApplication/mjapplication.form.component.js +59 -51
  157. package/dist/lib/generated/Entities/MJApplication/mjapplication.form.component.js.map +1 -1
  158. package/dist/lib/generated/Entities/MJCollection/mjcollection.form.component.d.ts.map +1 -1
  159. package/dist/lib/generated/Entities/MJCollection/mjcollection.form.component.js +25 -7
  160. package/dist/lib/generated/Entities/MJCollection/mjcollection.form.component.js.map +1 -1
  161. package/dist/lib/generated/Entities/MJCollectionArtifact/mjcollectionartifact.form.component.js +11 -7
  162. package/dist/lib/generated/Entities/MJCollectionArtifact/mjcollectionartifact.form.component.js.map +1 -1
  163. package/dist/lib/generated/Entities/MJConversation/mjconversation.form.component.d.ts.map +1 -1
  164. package/dist/lib/generated/Entities/MJConversation/mjconversation.form.component.js +56 -46
  165. package/dist/lib/generated/Entities/MJConversation/mjconversation.form.component.js.map +1 -1
  166. package/dist/lib/generated/Entities/MJConversationDetail/mjconversationdetail.form.component.d.ts.map +1 -1
  167. package/dist/lib/generated/Entities/MJConversationDetail/mjconversationdetail.form.component.js +73 -59
  168. package/dist/lib/generated/Entities/MJConversationDetail/mjconversationdetail.form.component.js.map +1 -1
  169. package/dist/lib/generated/Entities/MJDuplicateRunDetailMatch/mjduplicaterundetailmatch.form.component.d.ts.map +1 -1
  170. package/dist/lib/generated/Entities/MJDuplicateRunDetailMatch/mjduplicaterundetailmatch.form.component.js +24 -4
  171. package/dist/lib/generated/Entities/MJDuplicateRunDetailMatch/mjduplicaterundetailmatch.form.component.js.map +1 -1
  172. package/dist/lib/generated/Entities/MJEntity/mjentity.form.component.d.ts.map +1 -1
  173. package/dist/lib/generated/Entities/MJEntity/mjentity.form.component.js +137 -87
  174. package/dist/lib/generated/Entities/MJEntity/mjentity.form.component.js.map +1 -1
  175. package/dist/lib/generated/Entities/MJEntityActionInvocation/mjentityactioninvocation.form.component.js +10 -8
  176. package/dist/lib/generated/Entities/MJEntityActionInvocation/mjentityactioninvocation.form.component.js.map +1 -1
  177. package/dist/lib/generated/Entities/MJEntityDocument/mjentitydocument.form.component.d.ts.map +1 -1
  178. package/dist/lib/generated/Entities/MJEntityDocument/mjentitydocument.form.component.js +47 -29
  179. package/dist/lib/generated/Entities/MJEntityDocument/mjentitydocument.form.component.js.map +1 -1
  180. package/dist/lib/generated/Entities/MJExperiment/mjexperiment.form.component.d.ts +10 -0
  181. package/dist/lib/generated/Entities/MJExperiment/mjexperiment.form.component.d.ts.map +1 -0
  182. package/dist/lib/generated/Entities/MJExperiment/mjexperiment.form.component.js +99 -0
  183. package/dist/lib/generated/Entities/MJExperiment/mjexperiment.form.component.js.map +1 -0
  184. package/dist/lib/generated/Entities/MJExperimentSession/mjexperimentsession.form.component.d.ts +10 -0
  185. package/dist/lib/generated/Entities/MJExperimentSession/mjexperimentsession.form.component.d.ts.map +1 -0
  186. package/dist/lib/generated/Entities/MJExperimentSession/mjexperimentsession.form.component.js +101 -0
  187. package/dist/lib/generated/Entities/MJExperimentSession/mjexperimentsession.form.component.js.map +1 -0
  188. package/dist/lib/generated/Entities/MJExperimentSessionIteration/mjexperimentsessioniteration.form.component.d.ts +10 -0
  189. package/dist/lib/generated/Entities/MJExperimentSessionIteration/mjexperimentsessioniteration.form.component.d.ts.map +1 -0
  190. package/dist/lib/generated/Entities/MJExperimentSessionIteration/mjexperimentsessioniteration.form.component.js +115 -0
  191. package/dist/lib/generated/Entities/MJExperimentSessionIteration/mjexperimentsessioniteration.form.component.js.map +1 -0
  192. package/dist/lib/generated/Entities/MJFile/mjfile.form.component.d.ts.map +1 -1
  193. package/dist/lib/generated/Entities/MJFile/mjfile.form.component.js +63 -9
  194. package/dist/lib/generated/Entities/MJFile/mjfile.form.component.js.map +1 -1
  195. package/dist/lib/generated/Entities/MJFileStorageProvider/mjfilestorageprovider.form.component.d.ts.map +1 -1
  196. package/dist/lib/generated/Entities/MJFileStorageProvider/mjfilestorageprovider.form.component.js +32 -14
  197. package/dist/lib/generated/Entities/MJFileStorageProvider/mjfilestorageprovider.form.component.js.map +1 -1
  198. package/dist/lib/generated/Entities/MJMLAlgorithm/mjmlalgorithm.form.component.d.ts +10 -0
  199. package/dist/lib/generated/Entities/MJMLAlgorithm/mjmlalgorithm.form.component.d.ts.map +1 -0
  200. package/dist/lib/generated/Entities/MJMLAlgorithm/mjmlalgorithm.form.component.js +161 -0
  201. package/dist/lib/generated/Entities/MJMLAlgorithm/mjmlalgorithm.form.component.js.map +1 -0
  202. package/dist/lib/generated/Entities/MJMLAlgorithmUseCase/mjmlalgorithmusecase.form.component.d.ts +10 -0
  203. package/dist/lib/generated/Entities/MJMLAlgorithmUseCase/mjmlalgorithmusecase.form.component.d.ts.map +1 -0
  204. package/dist/lib/generated/Entities/MJMLAlgorithmUseCase/mjmlalgorithmusecase.form.component.js +89 -0
  205. package/dist/lib/generated/Entities/MJMLAlgorithmUseCase/mjmlalgorithmusecase.form.component.js.map +1 -0
  206. package/dist/lib/generated/Entities/MJMLAlgorithmUseCaseRanking/mjmlalgorithmusecaseranking.form.component.d.ts +10 -0
  207. package/dist/lib/generated/Entities/MJMLAlgorithmUseCaseRanking/mjmlalgorithmusecaseranking.form.component.d.ts.map +1 -0
  208. package/dist/lib/generated/Entities/MJMLAlgorithmUseCaseRanking/mjmlalgorithmusecaseranking.form.component.js +76 -0
  209. package/dist/lib/generated/Entities/MJMLAlgorithmUseCaseRanking/mjmlalgorithmusecaseranking.form.component.js.map +1 -0
  210. package/dist/lib/generated/Entities/MJMLModel/mjmlmodel.form.component.d.ts +10 -0
  211. package/dist/lib/generated/Entities/MJMLModel/mjmlmodel.form.component.d.ts.map +1 -0
  212. package/dist/lib/generated/Entities/MJMLModel/mjmlmodel.form.component.js +141 -0
  213. package/dist/lib/generated/Entities/MJMLModel/mjmlmodel.form.component.js.map +1 -0
  214. package/dist/lib/generated/Entities/MJMLModelScoringBinding/mjmlmodelscoringbinding.form.component.d.ts +10 -0
  215. package/dist/lib/generated/Entities/MJMLModelScoringBinding/mjmlmodelscoringbinding.form.component.d.ts.map +1 -0
  216. package/dist/lib/generated/Entities/MJMLModelScoringBinding/mjmlmodelscoringbinding.form.component.js +88 -0
  217. package/dist/lib/generated/Entities/MJMLModelScoringBinding/mjmlmodelscoringbinding.form.component.js.map +1 -0
  218. package/dist/lib/generated/Entities/MJMLTrainingPipeline/mjmltrainingpipeline.form.component.d.ts +10 -0
  219. package/dist/lib/generated/Entities/MJMLTrainingPipeline/mjmltrainingpipeline.form.component.d.ts.map +1 -0
  220. package/dist/lib/generated/Entities/MJMLTrainingPipeline/mjmltrainingpipeline.form.component.js +143 -0
  221. package/dist/lib/generated/Entities/MJMLTrainingPipeline/mjmltrainingpipeline.form.component.js.map +1 -0
  222. package/dist/lib/generated/Entities/MJMLTrainingRun/mjmltrainingrun.form.component.d.ts +10 -0
  223. package/dist/lib/generated/Entities/MJMLTrainingRun/mjmltrainingrun.form.component.d.ts.map +1 -0
  224. package/dist/lib/generated/Entities/MJMLTrainingRun/mjmltrainingrun.form.component.js +110 -0
  225. package/dist/lib/generated/Entities/MJMLTrainingRun/mjmltrainingrun.form.component.js.map +1 -0
  226. package/dist/lib/generated/Entities/MJOpenApp/mjopenapp.form.component.d.ts.map +1 -1
  227. package/dist/lib/generated/Entities/MJOpenApp/mjopenapp.form.component.js +56 -24
  228. package/dist/lib/generated/Entities/MJOpenApp/mjopenapp.form.component.js.map +1 -1
  229. package/dist/lib/generated/Entities/MJProcessRun/mjprocessrun.form.component.js +19 -17
  230. package/dist/lib/generated/Entities/MJProcessRun/mjprocessrun.form.component.js.map +1 -1
  231. package/dist/lib/generated/Entities/MJRecordProcess/mjrecordprocess.form.component.d.ts.map +1 -1
  232. package/dist/lib/generated/Entities/MJRecordProcess/mjrecordprocess.form.component.js +46 -26
  233. package/dist/lib/generated/Entities/MJRecordProcess/mjrecordprocess.form.component.js.map +1 -1
  234. package/dist/lib/generated/Entities/MJRemoteOperation/mjremoteoperation.form.component.js +12 -6
  235. package/dist/lib/generated/Entities/MJRemoteOperation/mjremoteoperation.form.component.js.map +1 -1
  236. package/dist/lib/generated/Entities/MJRole/mjrole.form.component.d.ts.map +1 -1
  237. package/dist/lib/generated/Entities/MJRole/mjrole.form.component.js +36 -18
  238. package/dist/lib/generated/Entities/MJRole/mjrole.form.component.js.map +1 -1
  239. package/dist/lib/generated/Entities/MJSchemaInfo/mjschemainfo.form.component.js +8 -6
  240. package/dist/lib/generated/Entities/MJSchemaInfo/mjschemainfo.form.component.js.map +1 -1
  241. package/dist/lib/generated/Entities/MJScopedPromptPart/mjscopedpromptpart.form.component.d.ts +10 -0
  242. package/dist/lib/generated/Entities/MJScopedPromptPart/mjscopedpromptpart.form.component.d.ts.map +1 -0
  243. package/dist/lib/generated/Entities/MJScopedPromptPart/mjscopedpromptpart.form.component.js +78 -0
  244. package/dist/lib/generated/Entities/MJScopedPromptPart/mjscopedpromptpart.form.component.js.map +1 -0
  245. package/dist/lib/generated/Entities/MJUser/mjuser.form.component.d.ts.map +1 -1
  246. package/dist/lib/generated/Entities/MJUser/mjuser.form.component.js +145 -109
  247. package/dist/lib/generated/Entities/MJUser/mjuser.form.component.js.map +1 -1
  248. package/dist/lib/generated/generated-forms.module.d.ts +356 -335
  249. package/dist/lib/generated/generated-forms.module.d.ts.map +1 -1
  250. package/dist/lib/generated/generated-forms.module.js +304 -226
  251. package/dist/lib/generated/generated-forms.module.js.map +1 -1
  252. package/dist/lib/panels/ai-agents/agent-realtime.panel.js +44 -44
  253. package/dist/lib/panels/ai-agents/agent-realtime.panel.js.map +1 -1
  254. package/dist/lib/panels/ai-skill-sharing/ai-skill-sharing-panel.component.d.ts +43 -0
  255. package/dist/lib/panels/ai-skill-sharing/ai-skill-sharing-panel.component.d.ts.map +1 -0
  256. package/dist/lib/panels/ai-skill-sharing/ai-skill-sharing-panel.component.js +240 -0
  257. package/dist/lib/panels/ai-skill-sharing/ai-skill-sharing-panel.component.js.map +1 -0
  258. package/dist/lib/panels/model-predictions/model-prediction.logic.d.ts +69 -0
  259. package/dist/lib/panels/model-predictions/model-prediction.logic.d.ts.map +1 -0
  260. package/dist/lib/panels/model-predictions/model-prediction.logic.js +130 -0
  261. package/dist/lib/panels/model-predictions/model-prediction.logic.js.map +1 -0
  262. package/dist/lib/panels/model-predictions/model-prediction.panel.d.ts +83 -0
  263. package/dist/lib/panels/model-predictions/model-prediction.panel.d.ts.map +1 -0
  264. package/dist/lib/panels/model-predictions/model-prediction.panel.js +293 -0
  265. package/dist/lib/panels/model-predictions/model-prediction.panel.js.map +1 -0
  266. package/package.json +38 -36
  267. package/dist/lib/custom/ai-agent-run/ai-agent-run-visualization.component.d.ts +0 -82
  268. package/dist/lib/custom/ai-agent-run/ai-agent-run-visualization.component.d.ts.map +0 -1
  269. package/dist/lib/custom/ai-agent-run/ai-agent-run-visualization.component.js +0 -1033
  270. package/dist/lib/custom/ai-agent-run/ai-agent-run-visualization.component.js.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"file":"ai-agent-session-form.component.js","sourceRoot":"","sources":["../../../../src/lib/custom/AIAgentSessions/ai-agent-session-form.component.ts","../../../../src/lib/custom/AIAgentSessions/ai-agent-session-form.component.html"],"names":[],"mappings":";;;;;;AAAA,OAAO,EAAE,SAAS,EAAU,MAAM,EAAE,MAAM,eAAe,CAAC;AAC1D,OAAO,EAAE,YAAY,EAAE,OAAO,EAAE,MAAM,sBAAsB,CAAC;AAE7D,OAAO,EAAE,aAAa,EAAE,UAAU,EAAE,MAAM,wBAAwB,CAAC;AACnE,OAAO,EAAE,iBAAiB,EAAE,4BAA4B,EAAE,MAAM,+BAA+B,CAAC;AAChG,OAAO,EAAE,aAAa,EAAE,iBAAiB,EAAE,MAAM,2BAA2B,CAAC;AAC7E,OAAO,EAAE,kBAAkB,EAAE,MAAM,qCAAqC,CAAC;AACzE,OAAO,EAAE,6BAA6B,EAAE,MAAM,2EAA2E,CAAC;;;;;;;;;;;;;ICgBxG,AADF,gCAAyB,YACkF;IAAxD,oNAAS,wBAAiB,WAAW,wBAAiB,KAAC;IACtG,YACF;IACF,AADE,iBAAI,EACC;;;IAFH,eACF;IADE,+DACF;;;;IAIF,wBAAoD;IAElD,AADF,gCAAyB,YACiF;IAAvD,oNAAS,wBAAiB,WAAW,uBAAgB,KAAC;IACrG,YACF;IACF,AADE,iBAAI,EACC;;;IAFH,eACF;IADE,yEACF;;;;IAKF,gCAAyG;IAAzE,uNAAS,+BAAwB,KAAC;IAChE,wBAA+B;IAC/B,4BAAM;IAAA,YAA2C;IAAA,iBAAO;IACxD,wBAAoD;IACtD,iBAAO;;;IAFC,eAA2C;IAA3C,kEAA2C;;;IAiCvD,AADF,+BAAkB,eACI;IAAA,sBAAM;IAAA,iBAAO;IACjC,gCAAoB;IAAA,YAAqC;;IAC3D,AAD2D,iBAAO,EAC5D;;;IADgB,eAAqC;IAArC,4EAAqC;;;IAIzD,AADF,+BAAkB,eACI;IAAA,2BAAW;IAAA,iBAAO;IACtC,gCAAoB;IAAA,YAAyC;;IAC/D,AAD+D,iBAAO,EAChE;;;IADgB,eAAyC;IAAzC,gFAAyC;;;IAiB7D,AADF,+BAAkB,eACI;IAAA,sBAAM;IAAA,iBAAO;IACjC,gCAAoB;IAAA,YAAoC;;IAC1D,AAD0D,iBAAO,EAC3D;;;IADgB,eAAoC;IAApC,yEAAoC;;;IAKxD,AADF,+BAAkB,eACI;IAAA,oBAAI;IAAA,iBAAO;IAC/B,gCAA4B;IAAA,YAAmC;;IACjE,AADiE,iBAAO,EAClE;;;IADwB,eAAmC;IAAnC,6EAAmC;;;;IAa3D,6BAAwG;IAAvD,oNAAS,wBAAiB,WAAW,uBAAgB,KAAC;IACrG,YACF;IAAA,iBAAI;;;IADF,cACF;IADE,oEACF;;;IAEA,gCAAoB;IAAA,oBAAI;IAAA,iBAAO;;;;IAkB/B,6BAA2H;IAA1E,oNAAS,wBAAiB,uBAAuB,8BAAuB,KAAC;IACxH,4CACF;IAAA,iBAAI;;;IAEJ,gCAAoB;IAAA,kCAAkB;IAAA,iBAAO;;;IAY1B,gCAAwB;IAAA,YAAoB;IAAA,iBAAO;;;IAA3B,cAAoB;IAApB,2CAAoB;;;IAI3C,gCAAwB;IAAA,YAAqB;IAAA,iBAAO;;;IAA5B,cAAqB;IAArB,4CAAqB;;;IAI3C,gCAAwB;IAAA,YAAuB;IAAA,iBAAO;;;IAA9B,cAAuB;IAAvB,8CAAuB;;;IAU7E,iCAAsE;;;IAEtE,+BAAyB;IACvB,wBAAiD;IACjD,yBAAG;IAAA,YAAe;IACpB,AADoB,iBAAI,EAClB;;;IADD,eAAe;IAAf,sCAAe;;;IAQd,+BAAyB;IACvB,wBAA4C;IAC5C,0BAAI;IAAA,uBAAO;IAAA,iBAAK;IAChB,yBAAG;IAAA,sEAAsD;IAC3D,AAD2D,iBAAI,EACzD;;;IAaI,wBAAgC;;;IAEhC,uBAAsC;;;IAEtC,wBAA4B;;;IAiB1B,gCAAuB;IAAA,wBAA4B;IAAC,YAAsC;;IAAA,iBAAO;;;IAA7C,eAAsC;IAAtC,iFAAsC;;;IAG1F,gCAAuB;IAAA,wBAAkC;IAAC,YAAgC;;IAAA,iBAAO;;;IAAvC,eAAgC;IAAhC,uEAAgC;;;;IAjClG,+BAIyB;IADpB,kRAAS,uDAA0C,KAAC;IAEvD,+BAE4D;IAKxD,AAFA,AAFF,qKAAiC,8IAED,+IAEvB;IAGX,iBAAM;IAGF,AADF,AADF,+BAAsB,cACK,aACD;IAAA,YAAgB;IAAA,iBAAK;IAC3C,gCAAuB;IAAA,aAAuC;;IAChE,AADgE,iBAAO,EACjE;IACN,gCAAqB;IAAA,aAAmB;IAAA,iBAAM;IAE5C,AADF,gCAAsB,gBACsC;IACxD,yBAA6D;IAAC,aAChE;IAAA,iBAAO;IACP,iCAAuB;IACrB,yBAA4B;IAAC,aAC/B;IAAA,iBAAO;IACP,0KAA8C;IAG9C,0KAA0C;IAKhD,AADE,AADE,iBAAM,EACF,EACF;;;;IAnCD,uDAAwC;IADxC,oDAAwC;IAKtC,cAA+C;IAC/C,AADA,2DAA+C,oDACO;IACzD,cAMC;IAND,iFAMC;IAIuB,eAAgB;IAAhB,mCAAgB;IACf,eAAuC;IAAvC,4EAAuC;IAE3C,eAAmB;IAAnB,sCAAmB;IAEb,eAAgC;;IACxC,cAAyC;IAAzC,iEAAyC;IAAM,cAChE;IADgE,+CAChE;IAE+B,eAC/B;IAD+B,8FAC/B;IACA,cAEC;IAFD,wEAEC;IACD,cAEC;IAFD,oEAEC;;;IApCX,+BAAsB;IACpB,oKAuCC;IACH,iBAAM;;;IAxCJ,cAuCC;IAvCD,6BAuCC;;;IAhDP,+BAAyB;IAOrB,AANF,mJAA4B,6HAMnB;IA4CX,iBAAM;;;IAlDJ,cAiDC;IAjDD,qDAiDC;;;IAQC,+BAAyB;IACvB,wBAAiC;IACjC,0BAAI;IAAA,2BAAW;IAAA,iBAAK;IACpB,yBAAG;IAAA,mEAAmD;IACxD,AADwD,iBAAI,EACtD;;;IA0BQ,gCAA2E;IAAA,YAA2B;IAAA,iBAAO;;;;IAAlC,cAA2B;IAA3B,+CAA2B;;;IAEtG,gCAAoB;IAAA,sBAAC;IAAA,iBAAO;;;IAU5B,YACF;;;;IADE,kGACF;;;IACE,gCAAoB;IAAA,sBAAC;IAAA,iBAAO;;;;IAvBlC,8BAAoG;IAAhG,uRAAS,wBAAiB,+BAA+B,qBAAiB,KAAC;IAE3E,AADF,0BAAI,eACwB;IACxB,wBAAmE;IACnE,YACF;IACF,AADE,iBAAO,EACJ;IACL,0BAAI;IAGA,AAFF,yKAA6B,mJAEpB;IAGX,iBAAK;IAEH,AADF,0BAAI,eACwE;IAAA,aAAwB;IACpG,AADoG,iBAAO,EACtG;IACL,+BAAiB;IAAA,aAAmD;;IAAA,iBAAK;IACzE,+BAAiB;IAAA,aAAiD;;IAAA,iBAAK;IACvE,+BAAiB;IAGb,AAFF,+JAAkC,qJAEzB;IAGX,iBAAK;IACL,+BAAmE;IACjE,aACF;IACF,AADE,iBAAK,EACF;;;;IA1BgB,eAA+C;IAA/C,wEAA+C;IAC9D,cACF;IADE,wDACF;IAGA,eAIC;IAJD,mDAIC;IAGiC,eAAuC;;IAAC,cAAwB;IAAxB,4CAAwB;IAEnF,eAAmD;IAAnD,yFAAmD;IACnD,eAAiD;IAAjD,uFAAiD;IAEhE,eAIC;IAJD,0DAIC;IAE0B,eAAqC;IAArC,uDAAqC;IAChE,cACF;IADE,sEACF;;;IAvCF,AADF,AADF,AADF,AADF,+BAAgC,gBACD,YACpB,SACD,SACE;IAAA,uBAAO;IAAA,iBAAK;IAChB,0BAAI;IAAA,yBAAS;IAAA,iBAAK;IAClB,0BAAI;IAAA,sBAAM;IAAA,iBAAK;IACf,2BAAI;IAAA,0BAAS;IAAA,iBAAK;IAClB,2BAAI;IAAA,4BAAW;IAAA,iBAAK;IACpB,2BAAI;IAAA,6BAAY;IAAA,iBAAK;IACrB,2BAAI;IAAA,uBAAM;IAEd,AADE,AADY,iBAAK,EACZ,EACC;IACR,8BAAO;IACL,qKA+BC;IAGP,AADE,AADE,iBAAQ,EACF,EACJ;;;IAlCA,gBA+BC;IA/BD,8BA+BC;;;IArDX,+BAAyB;IAOrB,AANF,mJAA6B,8HAMpB;IAmDX,iBAAM;;;IAzDJ,cAwDC;IAxDD,sDAwDC;;;IAQC,+BAAyB;IACvB,wBAAqC;IACrC,0BAAI;IAAA,6BAAa;IAAA,iBAAK;IACtB,yBAAG;IAAA,wEAAwD;IAC7D,AAD6D,iBAAI,EAC3D;;;IAOI,wBAA2B;;;IAE3B,wBAA2C;;;IAE3C,wBAA4B;;;IAM1B,YACF;;;IADE,wDACF;;;IACE,YACF;;;IADE,0DACF;;;IAfJ,AADF,+BAAwG,cAC7E;IAKrB,AAFA,AAFF,qKAA4B,+IAEQ,+IAE3B;IAGX,iBAAM;IAEJ,AADF,+BAAuB,cACE;IAGnB,AAFF,4JAA4B,sIAEnB;IAGT,gCAAwB;IAAA,aAA4C;;IACtE,AADsE,iBAAO,EACvE;IACN,gCAAyB;IAAA,aAAkB;IAE/C,AADE,AAD6C,iBAAM,EAC7C,EACF;;;IArBsD,AAA1C,sDAAyC,0CAA4C;IAEnG,eAMC;IAND,kFAMC;IAIC,eAIC;IAJD,kDAIC;IACuB,eAA4C;IAA5C,iFAA4C;IAE7C,eAAkB;IAAlB,sCAAkB;;;IArBnD,+BAA+B;IAC7B,oKAuBC;IACH,iBAAM;;;IAxBJ,cAuBC;IAvBD,gCAuBC;;;IAhCP,+BAAyB;IAOrB,AANF,mJAA+B,6HAMtB;IA4BX,iBAAM;;;IAlCJ,cAiCC;IAjCD,wDAiCC;;;IASG,wBAAkC;IAAC,gCACrC;;;;IA0BQ,6BAAwH;IAAvE,kPAAS,wBAAiB,mBAAmB,+BAAwB,KAAC;IACrH,YACF;IAAA,iBAAI;;;IADF,cACF;IADE,2FACF;;;IAEA,4BAAM;IAAA,mBAAG;IAAA,iBAAO;;;;IAYhB,6BAA2H;IAA1E,kPAAS,wBAAiB,uBAAuB,8BAAuB,KAAC;IACxH,YACF;IAAA,iBAAI;;;IADF,cACF;IADE,4DACF;;;IAEA,4BAAM;IAAA,2BAAW;IAAA,iBAAO;;;IAsB5B,wBAA2B;IAAC,6CAC9B;;;IAHF,8CAAuC;IACrC,iKAA8B;IAG9B,+BAA2B;IACzB,qCAKiB;IAErB,AADE,iBAAM,EACa;;;IAZD,gCAAkB;IAMhC,eAAwB;IAExB,AADA,AADA,6CAAwB,oBACL,kBACF;;;;IA7EzB,AADF,+BAAyB,6BACe;IACpC,kJAA8B;IAK1B,AADF,AADF,+BAA0B,cACC,YAChB;IAAA,kBAAE;IAAA,iBAAQ;IACjB,gCAAmB;IAAA,YAAe;IACpC,AADoC,iBAAO,EACrC;IAEJ,AADF,+BAAyB,aAChB;IAAA,iCAAgB;IAAA,iBAAQ;IAE7B,AADF,6BAAM,aACqG;IAAxD,oOAAS,wBAAiB,WAAW,wBAAiB,KAAC;IACtG,aACF;IAEJ,AADE,AADE,iBAAI,EACC,EACH;IAEJ,AADF,gCAAyB,aAChB;IAAA,qBAAI;IAAA,iBAAQ;IAEjB,AADF,6BAAM,aACgG;IAAnD,oOAAS,wBAAiB,OAAO,uBAAgB,KAAC;IACjG,aACF;IAEJ,AADE,AADE,iBAAI,EACC,EACH;IAEJ,AADF,gCAAyB,aAChB;IAAA,6BAAY;IAAA,iBAAQ;IAC3B,6BAAM;IAKF,AAJF,mJAA6B,4HAIpB;IAIb,AADE,iBAAO,EACH;IAEJ,AADF,gCAAyB,aAChB;IAAA,uBAAM;IAAA,iBAAQ;IACrB,iCAAoE;IAAA,aAAmB;IACzF,AADyF,iBAAO,EAC1F;IAEJ,AADF,gCAAyB,aAChB;IAAA,8BAAa;IAAA,iBAAQ;IAC5B,6BAAM;IAKF,AAJF,mJAA4B,4HAInB;IAIb,AADE,iBAAO,EACH;IAEJ,AADF,gCAAyB,aAChB;IAAA,8BAAa;IAAA,iBAAQ;IAC5B,iCAAmB;IAAA,aAAoC;IACzD,AADyD,iBAAO,EAC1D;IAEJ,AADF,gCAAyB,aAChB;IAAA,+BAAc;IAAA,iBAAQ;IAC7B,6BAAM;IAAA,aAAyC;;IACjD,AADiD,iBAAO,EAClD;IAEJ,AADF,gCAAyB,aAChB;IAAA,0BAAS;IAAA,iBAAQ;IACxB,6BAAM;IAAA,aAAwE;;IAGpF,AADE,AADE,AADgF,iBAAO,EACjF,EACF,EACa;IAErB,oKAAsB;IAexB,iBAAM;;;IAnFgB,cAAiB;IAAjB,+BAAiB;IAOZ,eAAe;IAAf,sCAAe;IAM9B,eACF;IADE,6DACF;IAOE,eACF;IADE,mDACF;IAMA,eAMC;IAND,wDAMC;IAK8B,eAAkC;;IAAC,cAAmB;IAAnB,0CAAmB;IAKrF,eAMC;IAND,uDAMC;IAKgB,eAAoC;IAApC,2DAAoC;IAIjD,eAAyC;IAAzC,kFAAyC;IAIzC,eAAwE;IAAxE,sHAAwE;IAKpF,eAcC;IAdD,iDAcC;;;IAnPL,qIAA4B;IAwD5B,qIAAgC;IA+DhC,qIAAkC;IAwClC,uIAA+B;;;IA/J/B,sDAqDC;IAGD,cA4DC;IA5DD,0DA4DC;IAGD,cAqCC;IArCD,4DAqCC;IAGD,cAsFC;IAtFD,yDAsFC;;;;IAzaT,mDAO4D;IAAxD,AADA,AADA,AADA,AADA,uOAAY,6BAAsB,KAAC,kOAChB,0BAAmB,KAAC,kOACpB,0BAAmB,KAAC,oOACnB,2BAAoB,KAAC,kPACd,kCAA2B,KAAC;IAOjD,AADF,AADF,AADF,AAFF,8BAA+C,aAEzB,aACU,aACD,aACG;IACxB,uBAAsC;IACxC,iBAAM;IAEJ,AADF,8BAAyB,SACnB;IAAA,gCAAgB;IAAA,iBAAK;IACzB,+BAAuB;IACrB,yHAAsB;IAOtB,6GAAqB;IAQrB,iCAAqB;IAAA,aAAoB;IAAA,iBAAO;IAChD,yHAA6B;IASnC,AADE,AADE,iBAAM,EACF,EACF;IAEJ,AADF,gCAA0B,eACqC;IAC3D,yBAA4D;IAC5D,aACF;IAAA,iBAAM;IAEJ,AADF,gCAA4B,kBACuC;IAAxC,0MAAS,oBAAa,KAAC;IAC9C,yBAA+B;IAIvC,AADE,AADE,AADE,iBAAS,EACL,EACF,EACF;IAIF,AADF,AADF,gCAA0B,eACN,gBACI;IAAA,qBAAI;IAAA,iBAAO;IAE7B,AADF,iCAAoB,aACkF;IAAnD,qMAAS,wBAAiB,OAAO,uBAAgB,KAAC;IAAC,aAAiB;IAEzH,AADE,AADuH,iBAAI,EACpH,EACH;IAEJ,AADF,gCAAkB,gBACI;IAAA,wBAAO;IAAA,iBAAO;IAClC,iCAAoB;IAAA,aAA2C;;IACjE,AADiE,iBAAO,EAClE;IAMJ,AALF,wHAAuB,kGAKd;IAOP,AADF,gCAAkB,gBACI;IAAA,yBAAQ;IAAA,iBAAO;IACnC,iCAAoB;IAAA,aAAqB;IAC3C,AAD2C,iBAAO,EAC5C;IAEJ,AADF,gCAAkB,gBACI;IAAA,yBAAQ;IAAA,iBAAO;IACnC,iCAAoB;IAAA,aAAqB;IAC3C,AAD2C,iBAAO,EAC5C;IAEJ,AADF,gCAAkB,gBACI;IAAA,+BAAc;IAAA,iBAAO;IACzC,iCAAoB;IAAA,aAAuB;IAC7C,AAD6C,iBAAO,EAC9C;IACN,wHAAkD;IAMlD,wHAA8C;IAMhD,iBAAM;IAIJ,AADF,gCAA+B,eACJ;IACvB,yBAA+B;IAE7B,AADF,gCAA4B,eACA;IAAA,6BAAY;IAAA,iBAAM;IAC5C,gCAA0B;IAKtB,AAJF,sHAAqB,mGAIZ;IAKf,AADE,AADE,iBAAM,EACF,EACF;IACN,gCAAyB;IACvB,yBAA6B;IAE3B,AADF,gCAA4B,eACA;IAAA,8BAAa;IAAA,iBAAM;IAC7C,gCAA+B;IAAA,aAAkC;IAErE,AADE,AADmE,iBAAM,EACnE,EACF;IACN,gCAAyB;IACvB,yBAA2B;IAEzB,AADF,gCAA4B,eACA;IAAA,6BAAY;IAAA,iBAAM;IAC5C,gCAA0B;IAKtB,AAJF,sHAA4B,mGAInB;IAOnB,AADE,AADE,AADE,AADE,iBAAM,EACF,EACF,EACF,EACF;IAIJ,AADF,gCAAkB,kBACsE;IAA5B,0MAAS,iBAAU,MAAM,CAAC,KAAC;IACnF,yBAAsC;IAAC,uBACvC;IAAA,yHAA0B;IAC5B,iBAAS;IACT,mCAA8F;IAAhC,0MAAS,iBAAU,UAAU,CAAC,KAAC;IAC3F,yBAA2B;IAAC,2BAC5B;IAAA,yHAA2B;IAC7B,iBAAS;IACT,mCAAkG;IAAlC,0MAAS,iBAAU,YAAY,CAAC,KAAC;IAC/F,yBAA+B;IAAC,6BAChC;IAAA,yHAA6B;IAC/B,iBAAS;IACT,mCAA4F;IAA/B,0MAAS,iBAAU,SAAS,CAAC,KAAC;IACzF,yBAAkC;IAAC,0BACrC;IACF,AADE,iBAAS,EACL;IAGN,gCAA0B;IAQtB,AALA,AAFF,+HAAe,kGAES,uFAKf;IA4Pf,AADE,AADE,iBAAM,EACF,EACmB;;;IA3avB,AADA,AADwC,AAAlB,sCAAiB,yBAAuB,uCAC/B,2BACL;IAkBhB,gBAMC;IAND,iDAMC;IACD,cAOC;IAPD,gDAOC;IACoB,eAAoB;IAApB,2CAAoB;IACzC,cAMC;IAND,wDAMC;IAKqB,eAAkC;;IAC3C,cAAwC;IAAxC,oEAAwC;IACvD,cACF;IADE,qDACF;IAasG,gBAAiB;IAAjB,wCAAiB;IAKnG,eAA2C;IAA3C,oFAA2C;IAEjE,eAUC;IAVD,kDAUC;IAGqB,eAAqB;IAArB,4CAAqB;IAIrB,eAAqB;IAArB,4CAAqB;IAIrB,eAAuB;IAAvB,8CAAuB;IAE7C,cAKC;IALD,oFAKC;IACD,cAKC;IALD,gFAKC;IAUK,eAMC;IAND,gDAMC;IAQ4B,eAAkC;IAAlC,8DAAkC;IAQ/D,eAMC;IAND,uDAMC;IASW,eAAqC;IAArC,qDAAqC;IAEvD,eAAgF;IAAhF,qDAAgF;IAE9D,cAAyC;IAAzC,yDAAyC;IAE3D,eAAkF;IAAlF,sDAAkF;IAEhE,cAA2C;IAA3C,2DAA2C;IAE7D,eAAsF;IAAtF,wDAAsF;IAEpE,cAAwC;IAAxC,wDAAwC;IAO5D,eAgQC;IAhQD,kEAgQC;;ADnUP;;;;;GAKG;AAQI,IAAM,qCAAqC,GAA3C,MAAM,qCAAsC,SAAQ,6BAA6B;IAAjF;;QAGH,iFAAiF;QACjE,kBAAa,GAAG,4BAA4B,CAAC;QAK7D,WAAW;QACJ,cAAS,GAAmD,MAAM,CAAC;QACnE,YAAO,GAAG,KAAK,CAAC;QAChB,cAAS,GAAkB,IAAI,CAAC;QAEvC,cAAc;QACP,YAAO,GAAyB,EAAE,CAAC;QACnC,aAAQ,GAA+B,EAAE,CAAC;QAC1C,eAAU,GAAoB,EAAE,CAAC;QACjC,sBAAiB,GAAG,CAAC,CAAC;QACtB,kBAAa,GAAkB,IAAI,CAAC;QACpC,oBAAe,GAAkB,IAAI,CAAC;QACtC,qBAAgB,GAA+B,IAAI,CAAC;QACpD,kBAAa,GAAkB,IAAI,CAAC;QACpC,gBAAW,GAAkB,IAAI,CAAC;QAEjC,kBAAa,GAAsB,EAAE,CAAC;QACtC,uBAAkB,GAAkB,IAAI,CAAC;QAEzC,sBAAiB,GAAG,MAAM,CAAC,iBAAiB,CAAC,CAAC;QAC9C,eAAU,GAAG,MAAM,CAAC,kBAAkB,CAAC,CAAC;KA0UnD;IAjWG,8DAA8D;IAC9C,uBAAuB,KAAgC,OAAO,YAAY,CAAC,CAAC,CAAC;IAwBpF,KAAK,CAAC,QAAQ;QACnB,MAAM,KAAK,CAAC,QAAQ,EAAE,CAAC;QACvB,IAAI,IAAI,CAAC,MAAM,EAAE,EAAE,EAAE,CAAC;YAClB,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;YAClE,MAAM,IAAI,CAAC,eAAe,EAAE,CAAC;QACjC,CAAC;IACL,CAAC;IAED,uEAAuE;IACvE,eAAe;IACf,uEAAuE;IAEvE,8EAA8E;IACtE,kBAAkB,CAAC,GAAkB;QACzC,IAAI,CAAC,GAAG;YAAE,OAAO,EAAE,CAAC;QACpB,IAAI,CAAC;YACD,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAA+B,CAAC;YAC7D,OAAO;gBACH,aAAa,EAAE,OAAO,MAAM,CAAC,aAAa,KAAK,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,aAAa,CAAC,CAAC,CAAC,SAAS;gBAC1F,YAAY,EAAE,OAAO,MAAM,CAAC,YAAY,KAAK,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC,CAAC,SAAS;gBACvF,WAAW,EAAE,OAAO,MAAM,CAAC,WAAW,KAAK,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC,CAAC,SAAS;aACvF,CAAC;QACN,CAAC;QAAC,MAAM,CAAC;YACL,OAAO,EAAE,CAAC;QACd,CAAC;IACL,CAAC;IAED;;;;;OAKG;IACK,KAAK,CAAC,eAAe;QACzB,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC;QACpB,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC;QACtB,IAAI,CAAC;YACD,MAAM,EAAE,GAAG,OAAO,CAAC,oBAAoB,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;YAC5D,MAAM,SAAS,GAAG,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC;YAEjC,MAAM,OAAO,GAAG,MAAM,EAAE,CAAC,QAAQ,CAAC;gBAC9B;oBACI,UAAU,EAAE,mBAAmB;oBAC/B,MAAM,EAAE,CAAC,IAAI,EAAE,SAAS,EAAE,OAAO,EAAE,aAAa,EAAE,QAAQ,EAAE,WAAW,EAAE,aAAa;wBAC7E,iBAAiB,EAAE,WAAW,EAAE,uBAAuB,EAAE,iBAAiB,CAAC;oBACpF,WAAW,EAAE,mBAAmB,SAAS,GAAG;oBAC5C,OAAO,EAAE,eAAe;oBACxB,UAAU,EAAE,QAAQ;iBACvB;gBACD;oBACI,UAAU,EAAE,+BAA+B;oBAC3C,MAAM,EAAE,CAAC,IAAI,EAAE,WAAW,EAAE,SAAS,EAAE,QAAQ,EAAE,WAAW,EAAE,gBAAgB,EAAE,cAAc,EAAE,gBAAgB,CAAC;oBACjH,WAAW,EAAE,mBAAmB,SAAS,GAAG;oBAC5C,OAAO,EAAE,oBAAoB;oBAC7B,UAAU,EAAE,QAAQ;iBACvB;gBACD;oBACI,UAAU,EAAE,uBAAuB;oBACnC,MAAM,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,eAAe,CAAC;oBACvC,UAAU,EAAE,QAAQ;iBACvB;gBACD;oBACI,UAAU,EAAE,0BAA0B;oBACtC,MAAM,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,SAAS,EAAE,OAAO,EAAE,MAAM,EAAE,gBAAgB,CAAC;oBACpE,WAAW,EAAE,mBAAmB,SAAS,GAAG;oBAC5C,OAAO,EAAE,oBAAoB;oBAC7B,UAAU,EAAE,QAAQ;iBACvB;gBACD,wEAAwE;gBACxE,qEAAqE;gBACrE;oBACI,UAAU,EAAE,oBAAoB;oBAChC,MAAM,EAAE,CAAC,IAAI,EAAE,OAAO,EAAE,QAAQ,EAAE,OAAO,EAAE,aAAa,EAAE,YAAY,EAAE,cAAc,EAAE,kBAAkB,EAAE,WAAW,CAAC;oBACxH,WAAW,EAAE,IAAI,CAAC,aAAa,CAAC,WAAW,CAAC,CAAC,CAAC,OAAO,IAAI,CAAC,aAAa,CAAC,WAAW,GAAG,CAAC,CAAC,CAAC,KAAK;oBAC9F,UAAU,EAAE,QAAQ;iBACvB;gBACD,yDAAyD;gBACzD;oBACI,UAAU,EAAE,eAAe;oBAC3B,MAAM,EAAE,CAAC,IAAI,EAAE,MAAM,CAAC;oBACtB,WAAW,EAAE,IAAI,CAAC,aAAa,CAAC,aAAa,CAAC,CAAC,CAAC,OAAO,IAAI,CAAC,aAAa,CAAC,aAAa,GAAG,CAAC,CAAC,CAAC,KAAK;oBAClG,UAAU,EAAE,QAAQ;iBACvB;aACJ,CAAC,CAAC;YAEH,MAAM,IAAI,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAoB,CAAC;YAChF,MAAM,WAAW,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAwB,CAAC;YAC3F,MAAM,WAAW,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAA2B,CAAC;YAC9F,IAAI,CAAC,UAAU,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAoB,CAAC;YACrF,MAAM,UAAU,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAA0B,CAAC;YAC5F,MAAM,YAAY,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAmC,CAAC;YAEvG,IAAI,CAAC,gBAAgB,GAAG,UAAU,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;YACrE,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC,aAAa,CAAC,aAAa,IAAI,IAAI,CAAC;YAC9D,IAAI,CAAC,eAAe,GAAG,YAAY,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC;YAE7E,IAAI,CAAC,QAAQ,GAAG,WAAW,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;gBACpC,GAAG;gBACH,aAAa,EAAE,WAAW,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,UAAU,CAAC,CAAC,CAAC,EAAE,EAAE,GAAG,CAAC,SAAS,CAAC,CAAC,EAAE,aAAa,IAAI,IAAI;aAC/F,CAAC,CAAC,CAAC;YAEJ,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC;YACvC,IAAI,CAAC,iBAAiB,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,WAAW,IAAI,IAAI,CAAC,CAAC,MAAM,CAAC;YACxE,IAAI,CAAC,mBAAmB,CAAC,IAAI,CAAC,CAAC;QACnC,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACb,OAAO,CAAC,KAAK,CAAC,mCAAmC,EAAE,KAAK,CAAC,CAAC;YAC1D,IAAI,CAAC,SAAS,GAAG,6BAA6B,CAAC;QACnD,CAAC;gBAAS,CAAC;YACP,IAAI,CAAC,OAAO,GAAG,KAAK,CAAC;YACrB,IAAI,CAAC,GAAG,CAAC,YAAY,EAAE,CAAC;QAC5B,CAAC;IACL,CAAC;IAED;;;;;OAKG;IACK,YAAY,CAAC,IAAqB;QACtC,MAAM,KAAK,GAAyB,EAAE,CAAC;QACvC,MAAM,QAAQ,GAAG,IAAI,GAAG,EAA2B,CAAC;QACpD,MAAM,KAAK,GAAG,IAAI,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC;QAEzD,MAAM,KAAK,GAAoB,EAAE,CAAC;QAClC,KAAK,MAAM,GAAG,IAAI,IAAI,EAAE,CAAC;YACrB,IAAI,GAAG,CAAC,WAAW,IAAI,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,WAAW,CAAC,WAAW,EAAE,CAAC,EAAE,CAAC;gBAC9D,MAAM,GAAG,GAAG,GAAG,CAAC,WAAW,CAAC,WAAW,EAAE,CAAC;gBAC1C,MAAM,IAAI,GAAG,QAAQ,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC;gBACrC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;gBACf,QAAQ,CAAC,GAAG,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC;YAC5B,CAAC;iBAAM,CAAC;gBACJ,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;YACpB,CAAC;QACL,CAAC;QAED,MAAM,KAAK,GAAG,CAAC,GAAkB,EAAE,KAAa,EAAQ,EAAE;YACtD,MAAM,SAAS,GAAG,IAAI,CAAC,aAAa,CAAC,YAAY,IAAI,IAAI,IAAI,UAAU,CAAC,GAAG,CAAC,EAAE,EAAE,IAAI,CAAC,aAAa,CAAC,YAAY,CAAC,CAAC;YACjH,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,aAAa,CAAC,GAAG,EAAE,KAAK,EAAE,SAAS,CAAC,CAAC,CAAC;YACtD,IAAI,SAAS,IAAI,IAAI,CAAC,gBAAgB,EAAE,CAAC;gBACrC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,mBAAmB,CAAC,IAAI,CAAC,gBAAgB,EAAE,KAAK,GAAG,CAAC,CAAC,CAAC,CAAC;YAC3E,CAAC;YACD,KAAK,MAAM,KAAK,IAAI,QAAQ,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC,WAAW,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC;gBAC3D,KAAK,CAAC,KAAK,EAAE,KAAK,GAAG,CAAC,CAAC,CAAC;YAC5B,CAAC;QACL,CAAC,CAAC;QACF,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;YACvB,KAAK,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC;QACnB,CAAC;QACD,OAAO,KAAK,CAAC;IACjB,CAAC;IAEO,aAAa,CAAC,GAAkB,EAAE,KAAa,EAAE,SAAkB;QACvE,MAAM,OAAO,GAAG,GAAG,CAAC,EAAE,CAAC,SAAS,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;QACvC,OAAO;YACH,IAAI,EAAE,KAAK;YACX,EAAE,EAAE,GAAG,CAAC,EAAE;YACV,UAAU,EAAE,mBAAmB;YAC/B,KAAK,EAAE,SAAS;gBACZ,CAAC,CAAC,GAAG,GAAG,CAAC,KAAK,IAAI,UAAU,gBAAgB;gBAC5C,CAAC,CAAC,GAAG,GAAG,CAAC,KAAK,IAAI,OAAO,kBAAkB;YAC/C,QAAQ,EAAE,SAAS;gBACf,CAAC,CAAC,eAAe,OAAO,wCAAwC;gBAChE,CAAC,CAAC,eAAe,OAAO,mBAAmB,GAAG,CAAC,WAAW,EAAE,SAAS,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,GAAG,kCAAkC;YACxH,MAAM,EAAE,GAAG,CAAC,MAAM;YAClB,SAAS,EAAE,GAAG,CAAC,SAAS;YACxB,WAAW,EAAE,GAAG,CAAC,WAAW;YAC5B,MAAM,EAAE,GAAG,CAAC,qBAAqB,IAAI,GAAG,CAAC,eAAe;YACxD,IAAI,EAAE,GAAG,CAAC,eAAe,IAAI,GAAG,CAAC,SAAS;YAC1C,KAAK;YACL,YAAY,EAAE,SAAS;SAC1B,CAAC;IACN,CAAC;IAEO,mBAAmB,CAAC,EAAuB,EAAE,KAAa;QAC9D,OAAO;YACH,IAAI,EAAE,WAAW;YACjB,EAAE,EAAE,EAAE,CAAC,EAAE;YACT,UAAU,EAAE,oBAAoB;YAChC,KAAK,EAAE,eAAe,EAAE,CAAC,KAAK,EAAE;YAChC,QAAQ,EAAE,gBAAgB,EAAE,CAAC,EAAE,CAAC,SAAS,CAAC,CAAC,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,YAAY,IAAI,CAAC,SAAS,EAAE,CAAC,gBAAgB,IAAI,CAAC,yCAAyC;YACnJ,MAAM,EAAE,EAAE,CAAC,MAAM;YACjB,SAAS,EAAE,EAAE,CAAC,KAAK;YACnB,WAAW,EAAE,EAAE,CAAC,WAAW;YAC3B,MAAM,EAAE,EAAE,CAAC,UAAU;YACrB,IAAI,EAAE,EAAE,CAAC,SAAS;YAClB,KAAK;YACL,YAAY,EAAE,KAAK;SACtB,CAAC;IACN,CAAC;IAED;;;;OAIG;IACK,mBAAmB,CAAC,IAAqB;QAC7C,MAAM,UAAU,GAAG,IAAI,CAAC,aAAa,CAAC,YAAY;YAC9C,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,UAAU,CAAC,CAAC,CAAC,EAAE,EAAE,IAAI,CAAC,aAAa,CAAC,YAAY,CAAC,CAAC,IAAI,IAAI;YAC3E,CAAC,CAAC,IAAI,CAAC;QACX,MAAM,SAAS,GAAG,UAAU,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,qBAAqB,IAAI,UAAU,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;QACvG,MAAM,OAAO,GAAG,UAAU,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,eAAe,IAAI,UAAU,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;QACzF,IAAI,CAAC,aAAa,GAAG,SAAS,IAAI,IAAI,CAAC,gBAAgB,EAAE,UAAU,IAAI,IAAI,CAAC;QAC5E,IAAI,CAAC,WAAW,GAAG,OAAO,IAAI,IAAI,CAAC,gBAAgB,EAAE,SAAS,IAAI,IAAI,CAAC;IAC3E,CAAC;IAED,uEAAuE;IACvE,kBAAkB;IAClB,uEAAuE;IAEhE,SAAS,CAAC,GAAmD;QAChE,IAAI,CAAC,SAAS,GAAG,GAAG,CAAC;IACzB,CAAC;IAEM,aAAa,CAAC,MAAqB;QACtC,QAAQ,MAAM,EAAE,CAAC;YACb,KAAK,QAAQ,CAAC,CAAC,OAAO,oBAAoB,CAAC;YAC3C,KAAK,MAAM,CAAC,CAAC,OAAO,SAAS,CAAC;YAC9B,KAAK,QAAQ,CAAC,CAAC,OAAO,gBAAgB,CAAC;YACvC,OAAO,CAAC,CAAC,OAAO,oBAAoB,CAAC;QACzC,CAAC;IACL,CAAC;IAEM,gBAAgB,CAAC,MAAc;QAClC,QAAQ,MAAM,EAAE,CAAC;YACb,KAAK,SAAS,CAAC,CAAC,OAAO,yBAAyB,CAAC;YACjD,KAAK,WAAW,CAAC,CAAC,OAAO,iBAAiB,CAAC;YAC3C,KAAK,QAAQ,CAAC,CAAC,OAAO,iBAAiB,CAAC;YACxC,KAAK,WAAW,CAAC,CAAC,OAAO,QAAQ,CAAC;YAClC,KAAK,QAAQ,CAAC,CAAC,OAAO,iBAAiB,CAAC;YACxC,KAAK,kBAAkB,CAAC,CAAC,OAAO,mBAAmB,CAAC;YACpD,KAAK,SAAS,CAAC,CAAC,OAAO,UAAU,CAAC;YAClC,OAAO,CAAC,CAAC,OAAO,oBAAoB,CAAC;QACzC,CAAC;IACL,CAAC;IAEM,cAAc,CAAC,WAA0B;QAC5C,QAAQ,WAAW,EAAE,CAAC;YAClB,KAAK,YAAY,CAAC,CAAC,OAAO,qBAAqB,CAAC;YAChD,KAAK,UAAU,CAAC,CAAC,OAAO,YAAY,CAAC;YACrC,KAAK,eAAe,CAAC,CAAC,OAAO,YAAY,CAAC;YAC1C,KAAK,YAAY,CAAC,CAAC,OAAO,eAAe,CAAC;YAC1C,KAAK,OAAO,CAAC,CAAC,OAAO,UAAU,CAAC;YAChC,OAAO,CAAC,CAAC,OAAO,SAAS,CAAC;QAC9B,CAAC;IACL,CAAC;IAED,8DAA8D;IAC9D,IAAW,cAAc;QACrB,OAAO,IAAI,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC,SAAS,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,WAAW,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;IACzF,CAAC;IAED,2EAA2E;IAC3E,IAAW,eAAe;QACtB,IAAI,CAAC,IAAI,CAAC,MAAM;YAAE,OAAO,EAAE,CAAC;QAC5B,MAAM,KAAK,GAAG,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,cAAc,CAAC,CAAC;QACtD,MAAM,GAAG,GAAG,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,IAAI,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC;QACvF,IAAI,CAAC,KAAK,IAAI,CAAC,GAAG;YAAE,OAAO,GAAG,CAAC;QAC/B,OAAO,IAAI,CAAC,cAAc,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;IAC3C,CAAC;IAEM,cAAc,CAAC,KAAsB,EAAE,GAAoB;QAC9D,MAAM,CAAC,GAAG,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;QAC7B,MAAM,CAAC,GAAG,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;QAC3B,IAAI,CAAC,CAAC;YAAE,OAAO,GAAG,CAAC;QACnB,IAAI,CAAC,CAAC;YAAE,OAAO,YAAY,CAAC;QAC5B,MAAM,EAAE,GAAG,CAAC,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC,OAAO,EAAE,CAAC;QACrC,IAAI,EAAE,GAAG,CAAC;YAAE,OAAO,GAAG,CAAC;QACvB,IAAI,EAAE,GAAG,IAAI;YAAE,OAAO,GAAG,EAAE,IAAI,CAAC;QAChC,IAAI,EAAE,GAAG,KAAK;YAAE,OAAO,GAAG,CAAC,EAAE,GAAG,IAAI,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC;QACpD,IAAI,EAAE,GAAG,OAAO;YAAE,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,EAAE,GAAG,KAAK,CAAC,KAAK,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,KAAK,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC;QAC1F,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,EAAE,GAAG,OAAO,CAAC,KAAK,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,OAAO,CAAC,GAAG,KAAK,CAAC,GAAG,CAAC;IACjF,CAAC;IAEO,MAAM,CAAC,KAAkC;QAC7C,IAAI,KAAK,IAAI,IAAI;YAAE,OAAO,IAAI,CAAC;QAC/B,MAAM,CAAC,GAAG,KAAK,YAAY,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC,KAAK,CAAC,CAAC;QAC1D,OAAO,KAAK,CAAC,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;IACzC,CAAC;IAED,uEAAuE;IACvE,IAAW,YAAY;QACnB,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,OAAO;YAAE,OAAO,EAAE,CAAC;QACrC,IAAI,IAAI,CAAC,kBAAkB,KAAK,IAAI;YAAE,OAAO,IAAI,CAAC,kBAAkB,CAAC;QACrE,IAAI,CAAC;YACD,IAAI,CAAC,kBAAkB,GAAG,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC;QACvF,CAAC;QAAC,MAAM,CAAC;YACL,IAAI,CAAC,kBAAkB,GAAG,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC;QAClD,CAAC;QACD,OAAO,IAAI,CAAC,kBAAkB,CAAC;IACnC,CAAC;IAED,uEAAuE;IACvE,aAAa;IACb,uEAAuE;IAEhE,gBAAgB,CAAC,UAAkB,EAAE,QAAuB;QAC/D,IAAI,QAAQ,EAAE,CAAC;YACX,aAAa,CAAC,QAAQ,CAAC,gBAAgB,CAAC,UAAU,EAAE,YAAY,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC;QACvF,CAAC;IACL,CAAC;IAED,0FAA0F;IACnF,sBAAsB;QACzB,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,cAAc;YAAE,OAAO;QACzC,MAAM,OAAO,GAAG,IAAI,CAAC,UAAU,CAAC,UAAU,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,IAAI,KAAK,MAAM,CAAC,CAAC;QAC9E,IAAI,CAAC,OAAO,EAAE,CAAC;YACX,6EAA6E;YAC7E,IAAI,CAAC,gBAAgB,CAAC,mBAAmB,EAAE,IAAI,CAAC,MAAM,CAAC,cAAc,CAAC,CAAC;YACvE,OAAO;QACX,CAAC;QACD,IAAI,CAAC,iBAAiB,CAAC,iBAAiB,CACpC,eAAe;QACf,yEAAyE;QACzE,sEAAsE;QACtE,EAAE,cAAc,EAAE,IAAI,CAAC,MAAM,CAAC,cAAc,EAAE,iBAAiB,EAAE,IAAI,CAAC,MAAM,CAAC,EAAE,EAAE,EACjF,OAAO,CAAC,EAAE,CACb,CAAC;IACN,CAAC;IAEM,WAAW;QACd,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,EAAE;YAAE,OAAO;QAC7B,IAAI,CAAC,kBAAkB,GAAG,IAAI,CAAC;QAC/B,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,GAAG,EAAE;YACvC,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;YAClE,KAAK,IAAI,CAAC,eAAe,EAAE,CAAC;QAChC,CAAC,CAAC,CAAC;IACP,CAAC;wUAtWQ,qCAAqC,yBAArC,qCAAqC;oEAArC,qCAAqC;YCrHlD,8HAAc;;YAAd,qCA+aC;;;AD1TY,qCAAqC;IAPjD,aAAa,CAAC,iBAAiB,EAAE,uBAAuB,CAAC;GAO7C,qCAAqC,CAuWjD;;iFAvWY,qCAAqC;cANjD,SAAS;6BACM,KAAK,YACP,0BAA0B;;kFAI3B,qCAAqC","sourcesContent":["import { Component, OnInit, inject } from '@angular/core';\nimport { CompositeKey, RunView } from '@memberjunction/core';\nimport { MJAIAgentSessionEntity } from '@memberjunction/core-entities';\nimport { RegisterClass, UUIDsEqual } from '@memberjunction/global';\nimport { BaseFormComponent, CUSTOM_LAYOUT_TOOLBAR_CONFIG } from '@memberjunction/ng-base-forms';\nimport { SharedService, NavigationService } from '@memberjunction/ng-shared';\nimport { ApplicationManager } from '@memberjunction/ng-base-application';\nimport { MJAIAgentSessionFormComponent } from '../../generated/Entities/MJAIAgentSession/mjaiagentsession.form.component';\n\n/**\n * Authoritative shape persisted in `AIAgentSession.Config` for a client-direct\n * realtime voice session. Mirrors `RealtimeSessionConfig` on the server\n * (MJServer/RealtimeClientSessionResolver). All fields optional — non-voice\n * sessions may carry none of them.\n */\ninterface SessionConfigJson {\n targetAgentID?: string;\n coAgentRunID?: string;\n promptRunID?: string;\n}\n\n/** Date values arrive as ISO strings from `ResultType: 'simple'` RunViews. */\ntype DateLike = Date | string;\n\n/** Narrowed read-only row from 'MJ: AI Agent Runs' for the session run tree. */\ninterface SessionRunRow {\n ID: string;\n AgentID: string;\n Agent: string | null;\n ParentRunID: string | null;\n Status: string;\n StartedAt: DateLike;\n CompletedAt: DateLike | null;\n TotalTokensUsed: number | null;\n TotalCost: number | null;\n TotalTokensUsedRollup: number | null;\n TotalCostRollup: number | null;\n}\n\n/** Narrowed read-only row from 'MJ: AI Agent Session Channels'. */\ninterface SessionChannelRow {\n ID: string;\n ChannelID: string;\n Channel: string;\n Status: 'Connected' | 'Connecting' | 'Disconnected' | 'Paused';\n SocketUrl: string | null;\n __mj_CreatedAt: DateLike;\n LastActiveAt: DateLike;\n DisconnectedAt: DateLike | null;\n}\n\n/** Narrowed read-only row from 'MJ: AI Agent Channels' (definition lookup for transport). */\ninterface ChannelDefinitionRow {\n ID: string;\n Name: string;\n TransportType: string;\n}\n\n/** Narrowed read-only row from 'MJ: Conversation Details' for the transcript. */\ninterface TranscriptRow {\n ID: string;\n Role: 'User' | 'AI' | 'Error';\n Message: string;\n Agent: string | null;\n User: string | null;\n __mj_CreatedAt: DateLike;\n}\n\n/** Narrowed read-only row from 'MJ: AI Prompt Runs' (the co-agent model leg). */\ninterface CoAgentPromptRunRow {\n ID: string;\n Model: string;\n Status: string;\n RunAt: DateLike;\n CompletedAt: DateLike | null;\n TokensUsed: number | null;\n TokensPrompt: number | null;\n TokensCompletion: number | null;\n TotalCost: number | null;\n}\n\n/** A flattened node in the session run tree (depth-first order, indented by depth). */\nexport interface SessionRunTreeItem {\n /** 'run' = AIAgentRun row, 'promptRun' = the co-agent's streaming model leg */\n kind: 'run' | 'promptRun';\n id: string;\n entityName: string;\n title: string;\n subtitle: string;\n status: string;\n startedAt: DateLike | null;\n completedAt: DateLike | null;\n tokens: number | null;\n cost: number | null;\n depth: number;\n isCoAgentRun: boolean;\n}\n\n/** Channel row decorated with its definition's transport type for display. */\nexport interface SessionChannelDisplayRow {\n row: SessionChannelRow;\n transportType: string | null;\n}\n\n/**\n * Custom form for 'MJ: AI Agent Sessions' — the observability surface for\n * long-lived realtime (voice) agent sessions. Mirrors the AI Agent Run form's\n * visual language: header with icon / status badge / stats, config bar, and\n * tabbed panes for the delegated run tree, channels, transcript, and details.\n */\n@RegisterClass(BaseFormComponent, 'MJ: AI Agent Sessions')\n@Component({\n standalone: false,\n selector: 'mj-ai-agent-session-form',\n templateUrl: './ai-agent-session-form.component.html',\n styleUrls: ['./ai-agent-session-form.component.css']\n})\nexport class MJAIAgentSessionFormComponentExtended extends MJAIAgentSessionFormComponent implements OnInit {\n public record!: MJAIAgentSessionEntity;\n\n /** Hide the generated-section controls — this form has a fully custom layout. */\n public readonly ToolbarConfig = CUSTOM_LAYOUT_TOOLBAR_CONFIG;\n\n /** Sessions read best full-width, like the agent-run form. */\n public override getDefaultFormWidthMode(): 'centered' | 'full-width' { return 'full-width'; }\n\n // UI state\n public ActiveTab: 'runs' | 'channels' | 'transcript' | 'details' = 'runs';\n public Loading = false;\n public LoadError: string | null = null;\n\n // Loaded data\n public RunTree: SessionRunTreeItem[] = [];\n public Channels: SessionChannelDisplayRow[] = [];\n public Transcript: TranscriptRow[] = [];\n public DelegatedRunCount = 0;\n public TargetAgentID: string | null = null;\n public TargetAgentName: string | null = null;\n public CoAgentPromptRun: CoAgentPromptRunRow | null = null;\n public SessionTokens: number | null = null;\n public SessionCost: number | null = null;\n\n private sessionConfig: SessionConfigJson = {};\n private cachedPrettyConfig: string | null = null;\n\n private navigationService = inject(NavigationService);\n private appManager = inject(ApplicationManager);\n\n override async ngOnInit(): Promise<void> {\n await super.ngOnInit();\n if (this.record?.ID) {\n this.sessionConfig = this.parseSessionConfig(this.record.Config_);\n await this.loadSessionData();\n }\n }\n\n // ────────────────────────────────────────────────────────────────────\n // Data loading\n // ────────────────────────────────────────────────────────────────────\n\n /** Parses the session's Config JSON; returns an empty config on any error. */\n private parseSessionConfig(raw: string | null): SessionConfigJson {\n if (!raw) return {};\n try {\n const parsed = JSON.parse(raw) as Partial<SessionConfigJson>;\n return {\n targetAgentID: typeof parsed.targetAgentID === 'string' ? parsed.targetAgentID : undefined,\n coAgentRunID: typeof parsed.coAgentRunID === 'string' ? parsed.coAgentRunID : undefined,\n promptRunID: typeof parsed.promptRunID === 'string' ? parsed.promptRunID : undefined\n };\n } catch {\n return {};\n }\n }\n\n /**\n * Loads everything the form shows in a single batched RunViews round trip:\n * the session's run tree, its channel instances (+ channel definitions for\n * transport), the transcript, and — when the Config carries observability\n * ids — the co-agent prompt run and target agent name.\n */\n private async loadSessionData(): Promise<void> {\n this.Loading = true;\n this.LoadError = null;\n try {\n const rv = RunView.FromMetadataProvider(this.ProviderToUse);\n const sessionId = this.record.ID;\n\n const results = await rv.RunViews([\n {\n EntityName: 'MJ: AI Agent Runs',\n Fields: ['ID', 'AgentID', 'Agent', 'ParentRunID', 'Status', 'StartedAt', 'CompletedAt',\n 'TotalTokensUsed', 'TotalCost', 'TotalTokensUsedRollup', 'TotalCostRollup'],\n ExtraFilter: `AgentSessionID='${sessionId}'`,\n OrderBy: 'StartedAt ASC',\n ResultType: 'simple'\n },\n {\n EntityName: 'MJ: AI Agent Session Channels',\n Fields: ['ID', 'ChannelID', 'Channel', 'Status', 'SocketUrl', '__mj_CreatedAt', 'LastActiveAt', 'DisconnectedAt'],\n ExtraFilter: `AgentSessionID='${sessionId}'`,\n OrderBy: '__mj_CreatedAt ASC',\n ResultType: 'simple'\n },\n {\n EntityName: 'MJ: AI Agent Channels',\n Fields: ['ID', 'Name', 'TransportType'],\n ResultType: 'simple'\n },\n {\n EntityName: 'MJ: Conversation Details',\n Fields: ['ID', 'Role', 'Message', 'Agent', 'User', '__mj_CreatedAt'],\n ExtraFilter: `AgentSessionID='${sessionId}'`,\n OrderBy: '__mj_CreatedAt ASC',\n ResultType: 'simple'\n },\n // Co-agent model leg — only meaningful when Config carries promptRunID;\n // an impossible filter keeps the batch shape stable when it doesn't.\n {\n EntityName: 'MJ: AI Prompt Runs',\n Fields: ['ID', 'Model', 'Status', 'RunAt', 'CompletedAt', 'TokensUsed', 'TokensPrompt', 'TokensCompletion', 'TotalCost'],\n ExtraFilter: this.sessionConfig.promptRunID ? `ID='${this.sessionConfig.promptRunID}'` : `1=0`,\n ResultType: 'simple'\n },\n // Target agent name resolution from Config.targetAgentID\n {\n EntityName: 'MJ: AI Agents',\n Fields: ['ID', 'Name'],\n ExtraFilter: this.sessionConfig.targetAgentID ? `ID='${this.sessionConfig.targetAgentID}'` : `1=0`,\n ResultType: 'simple'\n }\n ]);\n\n const runs = (results[0]?.Success ? results[0].Results : []) as SessionRunRow[];\n const channelRows = (results[1]?.Success ? results[1].Results : []) as SessionChannelRow[];\n const channelDefs = (results[2]?.Success ? results[2].Results : []) as ChannelDefinitionRow[];\n this.Transcript = (results[3]?.Success ? results[3].Results : []) as TranscriptRow[];\n const promptRuns = (results[4]?.Success ? results[4].Results : []) as CoAgentPromptRunRow[];\n const targetAgents = (results[5]?.Success ? results[5].Results : []) as { ID: string; Name: string }[];\n\n this.CoAgentPromptRun = promptRuns.length > 0 ? promptRuns[0] : null;\n this.TargetAgentID = this.sessionConfig.targetAgentID ?? null;\n this.TargetAgentName = targetAgents.length > 0 ? targetAgents[0].Name : null;\n\n this.Channels = channelRows.map(row => ({\n row,\n transportType: channelDefs.find(d => UUIDsEqual(d.ID, row.ChannelID))?.TransportType ?? null\n }));\n\n this.RunTree = this.buildRunTree(runs);\n this.DelegatedRunCount = runs.filter(r => r.ParentRunID != null).length;\n this.computeSessionUsage(runs);\n } catch (error) {\n console.error('Error loading agent session data:', error);\n this.LoadError = 'Failed to load session data';\n } finally {\n this.Loading = false;\n this.cdr.markForCheck();\n }\n }\n\n /**\n * Flattens the session's runs into a depth-first tree: root runs (no\n * ParentRunID, or parent outside the session) first, children nested by\n * ParentRunID. The co-agent run (Config.coAgentRunID) gets its streaming\n * prompt run inserted directly beneath it as a 'promptRun' leg.\n */\n private buildRunTree(runs: SessionRunRow[]): SessionRunTreeItem[] {\n const items: SessionRunTreeItem[] = [];\n const byParent = new Map<string, SessionRunRow[]>();\n const idSet = new Set(runs.map(r => r.ID.toUpperCase()));\n\n const roots: SessionRunRow[] = [];\n for (const run of runs) {\n if (run.ParentRunID && idSet.has(run.ParentRunID.toUpperCase())) {\n const key = run.ParentRunID.toUpperCase();\n const list = byParent.get(key) ?? [];\n list.push(run);\n byParent.set(key, list);\n } else {\n roots.push(run);\n }\n }\n\n const visit = (run: SessionRunRow, depth: number): void => {\n const isCoAgent = this.sessionConfig.coAgentRunID != null && UUIDsEqual(run.ID, this.sessionConfig.coAgentRunID);\n items.push(this.runToTreeItem(run, depth, isCoAgent));\n if (isCoAgent && this.CoAgentPromptRun) {\n items.push(this.promptRunToTreeItem(this.CoAgentPromptRun, depth + 1));\n }\n for (const child of byParent.get(run.ID.toUpperCase()) ?? []) {\n visit(child, depth + 1);\n }\n };\n for (const root of roots) {\n visit(root, 0);\n }\n return items;\n }\n\n private runToTreeItem(run: SessionRunRow, depth: number, isCoAgent: boolean): SessionRunTreeItem {\n const shortId = run.ID.substring(0, 8);\n return {\n kind: 'run',\n id: run.ID,\n entityName: 'MJ: AI Agent Runs',\n title: isCoAgent\n ? `${run.Agent ?? 'Co-Agent'} · session run`\n : `${run.Agent ?? 'Agent'} · delegated run`,\n subtitle: isCoAgent\n ? `AIAgentRun #${shortId} · one long-lived run for this session`\n : `AIAgentRun #${shortId} · ParentRunID #${run.ParentRunID?.substring(0, 8) ?? '—'} · invoked via target-agent tool`,\n status: run.Status,\n startedAt: run.StartedAt,\n completedAt: run.CompletedAt,\n tokens: run.TotalTokensUsedRollup ?? run.TotalTokensUsed,\n cost: run.TotalCostRollup ?? run.TotalCost,\n depth,\n isCoAgentRun: isCoAgent\n };\n }\n\n private promptRunToTreeItem(pr: CoAgentPromptRunRow, depth: number): SessionRunTreeItem {\n return {\n kind: 'promptRun',\n id: pr.ID,\n entityName: 'MJ: AI Prompt Runs',\n title: `Model leg · ${pr.Model}`,\n subtitle: `AIPromptRun #${pr.ID.substring(0, 8)} · ${pr.TokensPrompt ?? 0} in · ${pr.TokensCompletion ?? 0} out · usage checkpointed incrementally`,\n status: pr.Status,\n startedAt: pr.RunAt,\n completedAt: pr.CompletedAt,\n tokens: pr.TokensUsed,\n cost: pr.TotalCost,\n depth,\n isCoAgentRun: false\n };\n }\n\n /**\n * Session-level tokens/cost for the header stats: prefer the co-agent run's\n * rollups (covers delegated children), fall back to the prompt run's\n * incremental usage when the run rollups haven't been finalized yet.\n */\n private computeSessionUsage(runs: SessionRunRow[]): void {\n const coAgentRun = this.sessionConfig.coAgentRunID\n ? runs.find(r => UUIDsEqual(r.ID, this.sessionConfig.coAgentRunID)) ?? null\n : null;\n const runTokens = coAgentRun ? (coAgentRun.TotalTokensUsedRollup ?? coAgentRun.TotalTokensUsed) : null;\n const runCost = coAgentRun ? (coAgentRun.TotalCostRollup ?? coAgentRun.TotalCost) : null;\n this.SessionTokens = runTokens ?? this.CoAgentPromptRun?.TokensUsed ?? null;\n this.SessionCost = runCost ?? this.CoAgentPromptRun?.TotalCost ?? null;\n }\n\n // ────────────────────────────────────────────────────────────────────\n // Display helpers\n // ────────────────────────────────────────────────────────────────────\n\n public ChangeTab(tab: 'runs' | 'channels' | 'transcript' | 'details'): void {\n this.ActiveTab = tab;\n }\n\n public GetStatusIcon(status: string | null): string {\n switch (status) {\n case 'Active': return 'fa-tower-broadcast';\n case 'Idle': return 'fa-moon';\n case 'Closed': return 'fa-circle-stop';\n default: return 'fa-question-circle';\n }\n }\n\n public GetRunStatusIcon(status: string): string {\n switch (status) {\n case 'Running': return 'fa-circle-notch fa-spin';\n case 'Completed': return 'fa-check-circle';\n case 'Failed': return 'fa-times-circle';\n case 'Cancelled': return 'fa-ban';\n case 'Paused': return 'fa-pause-circle';\n case 'AwaitingFeedback': return 'fa-hourglass-half';\n case 'Pending': return 'fa-clock';\n default: return 'fa-question-circle';\n }\n }\n\n public GetChannelIcon(channelName: string | null): string {\n switch (channelName) {\n case 'VoiceAudio': return 'fa-microphone-lines';\n case 'TextChat': return 'fa-comment';\n case 'ClientControl': return 'fa-sliders';\n case 'Whiteboard': return 'fa-chalkboard';\n case 'Video': return 'fa-video';\n default: return 'fa-plug';\n }\n }\n\n /** Short, readable session id (first segment of the UUID). */\n public get ShortSessionId(): string {\n return this.record?.ID ? `sess_${this.record.ID.substring(0, 8).toLowerCase()}` : '';\n }\n\n /** Created → ClosedAt (terminal) or LastActiveAt (still open) duration. */\n public get SessionDuration(): string {\n if (!this.record) return '';\n const start = this.toDate(this.record.__mj_CreatedAt);\n const end = this.toDate(this.record.ClosedAt) ?? this.toDate(this.record.LastActiveAt);\n if (!start || !end) return '—';\n return this.FormatDuration(start, end);\n }\n\n public FormatDuration(start: DateLike | null, end: DateLike | null): string {\n const s = this.toDate(start);\n const e = this.toDate(end);\n if (!s) return '—';\n if (!e) return 'Running...';\n const ms = e.getTime() - s.getTime();\n if (ms < 0) return '—';\n if (ms < 1000) return `${ms}ms`;\n if (ms < 60000) return `${(ms / 1000).toFixed(1)}s`;\n if (ms < 3600000) return `${Math.floor(ms / 60000)}m ${Math.floor((ms % 60000) / 1000)}s`;\n return `${Math.floor(ms / 3600000)}h ${Math.floor((ms % 3600000) / 60000)}m`;\n }\n\n private toDate(value: DateLike | null | undefined): Date | null {\n if (value == null) return null;\n const d = value instanceof Date ? value : new Date(value);\n return isNaN(d.getTime()) ? null : d;\n }\n\n /** Pretty-printed session Config JSON for the Details tab (cached). */\n public get PrettyConfig(): string {\n if (!this.record?.Config_) return '';\n if (this.cachedPrettyConfig !== null) return this.cachedPrettyConfig;\n try {\n this.cachedPrettyConfig = JSON.stringify(JSON.parse(this.record.Config_), null, 2);\n } catch {\n this.cachedPrettyConfig = this.record.Config_;\n }\n return this.cachedPrettyConfig;\n }\n\n // ────────────────────────────────────────────────────────────────────\n // Navigation\n // ────────────────────────────────────────────────────────────────────\n\n public OpenEntityRecord(entityName: string, recordId: string | null): void {\n if (recordId) {\n SharedService.Instance.OpenEntityRecord(entityName, CompositeKey.FromID(recordId));\n }\n }\n\n /** Opens the linked conversation in the Chat app (same pattern as the agent-run form). */\n public NavigateToConversation(): void {\n if (!this.record?.ConversationID) return;\n const chatApp = this.appManager.GetAllApps().find(app => app.Name === 'Chat');\n if (!chatApp) {\n // Fall back to the raw conversation record when the Chat app isn't installed\n this.OpenEntityRecord('MJ: Conversations', this.record.ConversationID);\n return;\n }\n this.navigationService.OpenNavItemByName(\n 'Conversations',\n // realtimeSessionId opens the SESSION REVIEW overlay directly on arrival\n // (the chat wrapper consumes it once) — not just the containing chat.\n { conversationId: this.record.ConversationID, realtimeSessionId: this.record.ID },\n chatApp.ID\n );\n }\n\n public RefreshData(): void {\n if (!this.record?.ID) return;\n this.cachedPrettyConfig = null;\n this.record.Load(this.record.ID).then(() => {\n this.sessionConfig = this.parseSessionConfig(this.record.Config_);\n void this.loadSessionData();\n });\n }\n}\n","@if (record) {\n<mj-record-form-container [Record]=\"record\" [FormComponent]=\"this\"\n [ToolbarConfig]=\"ToolbarConfig\"\n [WidthMode]=\"'full-width'\"\n (Navigate)=\"OnFormNavigate($event)\"\n (DeleteRequested)=\"OnDeleteRequested()\"\n (FavoriteToggled)=\"OnFavoriteToggled()\"\n (HistoryRequested)=\"OnHistoryRequested()\"\n (ListManagementRequested)=\"OnListManagementRequested()\">\n\n <div class=\"record-form ai-agent-session-form\">\n <!-- Header (mirrors the AI Agent Run form header) -->\n <div class=\"header\">\n <div class=\"header-content\">\n <div class=\"header-left\">\n <div class=\"icon-wrapper\">\n <i class=\"fas fa-tower-broadcast\"></i>\n </div>\n <div class=\"header-info\">\n <h2>AI Agent Session</h2>\n <div class=\"meta-info\">\n @if (record.AgentID) {\n <span class=\"agent-name\">\n <a href=\"javascript:void(0)\" class=\"entity-link\" (click)=\"OpenEntityRecord('AI Agents', record.AgentID)\">\n {{ record.Agent || 'Agent' }}\n </a>\n </span>\n }\n @if (TargetAgentID) {\n <i class=\"fas fa-arrow-right-long target-arrow\"></i>\n <span class=\"agent-name\">\n <a href=\"javascript:void(0)\" class=\"entity-link\" (click)=\"OpenEntityRecord('AI Agents', TargetAgentID)\">\n {{ TargetAgentName || 'Target agent' }}\n </a>\n </span>\n }\n <span class=\"run-id\">{{ ShortSessionId }}</span>\n @if (record.ConversationID) {\n <span class=\"conversation-pill\" (click)=\"NavigateToConversation()\" title=\"Open conversation in Chat app\">\n <i class=\"fas fa-comments\"></i>\n <span>{{ record.Conversation || 'Conversation' }}</span>\n <i class=\"fas fa-external-link-alt pill-action\"></i>\n </span>\n }\n </div>\n </div>\n </div>\n <div class=\"header-right\">\n <div class=\"status-badge\" [attr.data-status]=\"record.Status\">\n <i class=\"fas\" [ngClass]=\"GetStatusIcon(record.Status)\"></i>\n {{ record.Status }}\n </div>\n <div class=\"header-actions\">\n <button class=\"btn-icon\" (click)=\"RefreshData()\" title=\"Refresh\">\n <i class=\"fas fa-sync-alt\"></i>\n </button>\n </div>\n </div>\n </div>\n\n <div class=\"header-stats\">\n <div class=\"stat\">\n <span class=\"label\">User</span>\n <span class=\"value\">\n <a href=\"javascript:void(0)\" class=\"entity-link\" (click)=\"OpenEntityRecord('Users', record.UserID)\">{{ record.User }}</a>\n </span>\n </div>\n <div class=\"stat\">\n <span class=\"label\">Started</span>\n <span class=\"value\">{{ record.__mj_CreatedAt | date:'medium' }}</span>\n </div>\n @if (record.ClosedAt) {\n <div class=\"stat\">\n <span class=\"label\">Closed</span>\n <span class=\"value\">{{ record.ClosedAt | date:'medium' }}</span>\n </div>\n } @else {\n <div class=\"stat\">\n <span class=\"label\">Last Active</span>\n <span class=\"value\">{{ record.LastActiveAt | date:'medium' }}</span>\n </div>\n }\n <div class=\"stat\">\n <span class=\"label\">Duration</span>\n <span class=\"value\">{{ SessionDuration }}</span>\n </div>\n <div class=\"stat\">\n <span class=\"label\">Channels</span>\n <span class=\"value\">{{ Channels.length }}</span>\n </div>\n <div class=\"stat\">\n <span class=\"label\">Delegated Runs</span>\n <span class=\"value\">{{ DelegatedRunCount }}</span>\n </div>\n @if (SessionTokens != null && SessionTokens > 0) {\n <div class=\"stat\">\n <span class=\"label\">Tokens</span>\n <span class=\"value\">{{ SessionTokens | number:'1.0-0' }}</span>\n </div>\n }\n @if (SessionCost != null && SessionCost > 0) {\n <div class=\"stat\">\n <span class=\"label\">Cost</span>\n <span class=\"value success\">${{ SessionCost | number:'1.2-4' }}</span>\n </div>\n }\n </div>\n\n <!-- Config bar: target agent / host instance / continuation -->\n <div class=\"configuration-bar\">\n <div class=\"config-item\">\n <i class=\"fas fa-bullseye\"></i>\n <div class=\"config-content\">\n <div class=\"config-label\">Target Agent</div>\n <div class=\"config-value\">\n @if (TargetAgentID) {\n <a href=\"javascript:void(0)\" class=\"entity-link\" (click)=\"OpenEntityRecord('AI Agents', TargetAgentID)\">\n {{ TargetAgentName || 'Unknown' }}\n </a>\n } @else {\n <span class=\"muted\">None</span>\n }\n </div>\n </div>\n </div>\n <div class=\"config-item\">\n <i class=\"fas fa-server\"></i>\n <div class=\"config-content\">\n <div class=\"config-label\">Host Instance</div>\n <div class=\"config-value mono\">{{ record.HostInstanceID || '—' }}</div>\n </div>\n </div>\n <div class=\"config-item\">\n <i class=\"fas fa-link\"></i>\n <div class=\"config-content\">\n <div class=\"config-label\">Continuation</div>\n <div class=\"config-value\">\n @if (record.LastSessionID) {\n <a href=\"javascript:void(0)\" class=\"entity-link\" (click)=\"OpenEntityRecord('MJ: AI Agent Sessions', record.LastSessionID)\">\n Resumed from prior session\n </a>\n } @else {\n <span class=\"muted\">None (new session)</span>\n }\n </div>\n </div>\n </div>\n </div>\n </div>\n\n <!-- Tabs -->\n <div class=\"tabs\">\n <button class=\"tab\" [class.active]=\"ActiveTab === 'runs'\" (click)=\"ChangeTab('runs')\">\n <i class=\"fas fa-diagram-project\"></i> Runs\n @if (RunTree.length > 0) { <span class=\"tab-count\">{{ RunTree.length }}</span> }\n </button>\n <button class=\"tab\" [class.active]=\"ActiveTab === 'channels'\" (click)=\"ChangeTab('channels')\">\n <i class=\"fas fa-plug\"></i> Channels\n @if (Channels.length > 0) { <span class=\"tab-count\">{{ Channels.length }}</span> }\n </button>\n <button class=\"tab\" [class.active]=\"ActiveTab === 'transcript'\" (click)=\"ChangeTab('transcript')\">\n <i class=\"fas fa-comments\"></i> Transcript\n @if (Transcript.length > 0) { <span class=\"tab-count\">{{ Transcript.length }}</span> }\n </button>\n <button class=\"tab\" [class.active]=\"ActiveTab === 'details'\" (click)=\"ChangeTab('details')\">\n <i class=\"fas fa-info-circle\"></i> Details\n </button>\n </div>\n\n <!-- Content -->\n <div class=\"content-area\">\n @if (Loading) {\n <mj-loading text=\"Loading session data...\" size=\"medium\"></mj-loading>\n } @else if (LoadError) {\n <div class=\"error-state\">\n <i class=\"fas fa-exclamation-triangle fa-2x\"></i>\n <p>{{ LoadError }}</p>\n </div>\n } @else {\n\n <!-- Runs tab: the session's delegated run tree -->\n @if (ActiveTab === 'runs') {\n <div class=\"tab-content\">\n @if (RunTree.length === 0) {\n <div class=\"empty-state\">\n <i class=\"fas fa-diagram-project fa-2x\"></i>\n <h4>No Runs</h4>\n <p>No agent runs have been recorded for this session yet.</p>\n </div>\n } @else {\n <div class=\"run-tree\">\n @for (node of RunTree; track node.id) {\n <div class=\"run-node\"\n [class.run-node--child]=\"node.depth > 0\"\n [style.margin-left.px]=\"node.depth * 36\"\n (click)=\"OpenEntityRecord(node.entityName, node.id)\"\n title=\"Open record\">\n <div class=\"run-marker\"\n [class.run-marker--coagent]=\"node.isCoAgentRun\"\n [class.run-marker--prompt]=\"node.kind === 'promptRun'\">\n @if (node.kind === 'promptRun') {\n <i class=\"fas fa-microchip\"></i>\n } @else if (node.isCoAgentRun) {\n <i class=\"fas fa-tower-broadcast\"></i>\n } @else {\n <i class=\"fas fa-robot\"></i>\n }\n </div>\n <div class=\"run-body\">\n <div class=\"run-headrow\">\n <h4 class=\"run-title\">{{ node.title }}</h4>\n <span class=\"run-time\">{{ node.startedAt | date:'h:mm:ss a' }}</span>\n </div>\n <div class=\"run-sub\">{{ node.subtitle }}</div>\n <div class=\"run-foot\">\n <span class=\"run-status\" [attr.data-status]=\"node.status\">\n <i class=\"fas\" [ngClass]=\"GetRunStatusIcon(node.status)\"></i> {{ node.status }}\n </span>\n <span class=\"run-chip\">\n <i class=\"fas fa-clock\"></i> {{ FormatDuration(node.startedAt, node.completedAt) }}\n </span>\n @if (node.tokens != null && node.tokens > 0) {\n <span class=\"run-chip\"><i class=\"fas fa-coins\"></i> {{ node.tokens | number:'1.0-0' }} tok</span>\n }\n @if (node.cost != null && node.cost > 0) {\n <span class=\"run-chip\"><i class=\"fas fa-dollar-sign\"></i> {{ node.cost | number:'1.2-4' }}</span>\n }\n </div>\n </div>\n </div>\n }\n </div>\n }\n </div>\n }\n\n <!-- Channels tab -->\n @if (ActiveTab === 'channels') {\n <div class=\"tab-content\">\n @if (Channels.length === 0) {\n <div class=\"empty-state\">\n <i class=\"fas fa-plug fa-2x\"></i>\n <h4>No Channels</h4>\n <p>No channel instances were attached to this session.</p>\n </div>\n } @else {\n <div class=\"channels-grid-wrap\">\n <table class=\"channels-grid\">\n <thead>\n <tr>\n <th>Channel</th>\n <th>Transport</th>\n <th>Status</th>\n <th>Connected</th>\n <th>Last Active</th>\n <th>Disconnected</th>\n <th>Socket</th>\n </tr>\n </thead>\n <tbody>\n @for (channel of Channels; track channel.row.ID) {\n <tr (click)=\"OpenEntityRecord('MJ: AI Agent Session Channels', channel.row.ID)\" title=\"Open record\">\n <td>\n <span class=\"cell-strong\">\n <i class=\"fas\" [ngClass]=\"GetChannelIcon(channel.row.Channel)\"></i>\n {{ channel.row.Channel }}\n </span>\n </td>\n <td>\n @if (channel.transportType) {\n <span class=\"transport-pill\" [attr.data-transport]=\"channel.transportType\">{{ channel.transportType }}</span>\n } @else {\n <span class=\"muted\">—</span>\n }\n </td>\n <td>\n <span class=\"channel-status-pill\" [attr.data-status]=\"channel.row.Status\">{{ channel.row.Status }}</span>\n </td>\n <td class=\"mono\">{{ channel.row.__mj_CreatedAt | date:'h:mm:ss a' }}</td>\n <td class=\"mono\">{{ channel.row.LastActiveAt | date:'h:mm:ss a' }}</td>\n <td class=\"mono\">\n @if (channel.row.DisconnectedAt) {\n {{ channel.row.DisconnectedAt | date:'h:mm:ss a' }}\n } @else {\n <span class=\"muted\">—</span>\n }\n </td>\n <td class=\"mono socket-cell\" [title]=\"channel.row.SocketUrl || ''\">\n {{ channel.row.SocketUrl || '—' }}\n </td>\n </tr>\n }\n </tbody>\n </table>\n </div>\n }\n </div>\n }\n\n <!-- Transcript tab -->\n @if (ActiveTab === 'transcript') {\n <div class=\"tab-content\">\n @if (Transcript.length === 0) {\n <div class=\"empty-state\">\n <i class=\"fas fa-comments fa-2x\"></i>\n <h4>No Transcript</h4>\n <p>No conversation messages were stamped with this session.</p>\n </div>\n } @else {\n <div class=\"transcript-thread\">\n @for (turn of Transcript; track turn.ID) {\n <div class=\"turn\" [class.turn--user]=\"turn.Role === 'User'\" [class.turn--error]=\"turn.Role === 'Error'\">\n <div class=\"turn-avatar\">\n @if (turn.Role === 'User') {\n <i class=\"fas fa-user\"></i>\n } @else if (turn.Role === 'Error') {\n <i class=\"fas fa-triangle-exclamation\"></i>\n } @else {\n <i class=\"fas fa-robot\"></i>\n }\n </div>\n <div class=\"turn-main\">\n <div class=\"turn-meta\">\n @if (turn.Role === 'User') {\n {{ turn.User || 'User' }}\n } @else {\n {{ turn.Agent || 'Agent' }}\n }\n <span class=\"turn-time\">{{ turn.__mj_CreatedAt | date:'h:mm:ss a' }}</span>\n </div>\n <div class=\"turn-bubble\">{{ turn.Message }}</div>\n </div>\n </div>\n }\n </div>\n }\n </div>\n }\n\n <!-- Details tab -->\n @if (ActiveTab === 'details') {\n <div class=\"tab-content\">\n <mj-accordion-panel [Expanded]=\"true\">\n <ng-template mjAccordionTitle>\n <i class=\"fas fa-info-circle\"></i> Session Record\n </ng-template>\n <div class=\"details-grid\">\n <div class=\"detail-item\">\n <label>ID</label>\n <span class=\"mono\">{{ record.ID }}</span>\n </div>\n <div class=\"detail-item\">\n <label>Agent (Co-Agent)</label>\n <span>\n <a href=\"javascript:void(0)\" class=\"entity-link\" (click)=\"OpenEntityRecord('AI Agents', record.AgentID)\">\n {{ record.Agent || 'N/A' }}\n </a>\n </span>\n </div>\n <div class=\"detail-item\">\n <label>User</label>\n <span>\n <a href=\"javascript:void(0)\" class=\"entity-link\" (click)=\"OpenEntityRecord('Users', record.UserID)\">\n {{ record.User }}\n </a>\n </span>\n </div>\n <div class=\"detail-item\">\n <label>Conversation</label>\n <span>\n @if (record.ConversationID) {\n <a href=\"javascript:void(0)\" class=\"entity-link\" (click)=\"OpenEntityRecord('MJ: Conversations', record.ConversationID)\">\n {{ record.Conversation || record.ConversationID }}\n </a>\n } @else {\n <span>N/A</span>\n }\n </span>\n </div>\n <div class=\"detail-item\">\n <label>Status</label>\n <span class=\"status-badge small\" [attr.data-status]=\"record.Status\">{{ record.Status }}</span>\n </div>\n <div class=\"detail-item\">\n <label>Prior Session</label>\n <span>\n @if (record.LastSessionID) {\n <a href=\"javascript:void(0)\" class=\"entity-link\" (click)=\"OpenEntityRecord('MJ: AI Agent Sessions', record.LastSessionID)\">\n {{ record.LastSessionID }}\n </a>\n } @else {\n <span>None (root)</span>\n }\n </span>\n </div>\n <div class=\"detail-item\">\n <label>Host Instance</label>\n <span class=\"mono\">{{ record.HostInstanceID || 'N/A' }}</span>\n </div>\n <div class=\"detail-item\">\n <label>Last Active At</label>\n <span>{{ record.LastActiveAt | date:'medium' }}</span>\n </div>\n <div class=\"detail-item\">\n <label>Closed At</label>\n <span>{{ record.ClosedAt ? (record.ClosedAt | date:'medium') : 'Still open' }}</span>\n </div>\n </div>\n </mj-accordion-panel>\n\n @if (record.Config_) {\n <mj-accordion-panel [Expanded]=\"false\">\n <ng-template mjAccordionTitle>\n <i class=\"fas fa-code\"></i> Config (Session State JSON)\n </ng-template>\n <div class=\"config-viewer\">\n <mj-code-editor\n [ngModel]=\"PrettyConfig\"\n [language]=\"'json'\"\n [readonly]=\"true\"\n style=\"height: 300px; width: 100%;\">\n </mj-code-editor>\n </div>\n </mj-accordion-panel>\n }\n </div>\n }\n }\n </div>\n </div>\n</mj-record-form-container>\n}\n"]}
1
+ {"version":3,"file":"ai-agent-session-form.component.js","sourceRoot":"","sources":["../../../../src/lib/custom/AIAgentSessions/ai-agent-session-form.component.ts","../../../../src/lib/custom/AIAgentSessions/ai-agent-session-form.component.html"],"names":[],"mappings":"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","sourcesContent":["import { Component, OnInit, inject } from '@angular/core';\nimport { CompositeKey, RunView } from '@memberjunction/core';\nimport { MJAIAgentSessionEntity } from '@memberjunction/core-entities';\nimport { RegisterClass, UUIDsEqual } from '@memberjunction/global';\nimport { BaseFormComponent, CUSTOM_LAYOUT_TOOLBAR_CONFIG } from '@memberjunction/ng-base-forms';\nimport { SharedService, NavigationService } from '@memberjunction/ng-shared';\nimport { ApplicationManager } from '@memberjunction/ng-base-application';\nimport { MJAIAgentSessionFormComponent } from '../../generated/Entities/MJAIAgentSession/mjaiagentsession.form.component';\n\n/**\n * Authoritative shape persisted in `AIAgentSession.Config` for a client-direct\n * realtime voice session. Mirrors `RealtimeSessionConfig` on the server\n * (MJServer/RealtimeClientSessionResolver). All fields optional — non-voice\n * sessions may carry none of them.\n */\ninterface SessionConfigJson {\n targetAgentID?: string;\n coAgentRunID?: string;\n promptRunID?: string;\n}\n\n/** Date values arrive as ISO strings from `ResultType: 'simple'` RunViews. */\ntype DateLike = Date | string;\n\n/** Narrowed read-only row from 'MJ: AI Agent Runs' for the session run tree. */\ninterface SessionRunRow {\n ID: string;\n AgentID: string;\n Agent: string | null;\n ParentRunID: string | null;\n Status: string;\n StartedAt: DateLike;\n CompletedAt: DateLike | null;\n TotalTokensUsed: number | null;\n TotalCost: number | null;\n TotalTokensUsedRollup: number | null;\n TotalCostRollup: number | null;\n}\n\n/** Narrowed read-only row from 'MJ: AI Agent Session Channels'. */\ninterface SessionChannelRow {\n ID: string;\n ChannelID: string;\n Channel: string;\n Status: 'Connected' | 'Connecting' | 'Disconnected' | 'Paused';\n SocketUrl: string | null;\n __mj_CreatedAt: DateLike;\n LastActiveAt: DateLike;\n DisconnectedAt: DateLike | null;\n}\n\n/** Narrowed read-only row from 'MJ: AI Agent Channels' (definition lookup for transport). */\ninterface ChannelDefinitionRow {\n ID: string;\n Name: string;\n TransportType: string;\n}\n\n/** Narrowed read-only row from 'MJ: Conversation Details' for the transcript. */\ninterface TranscriptRow {\n ID: string;\n Role: 'User' | 'AI' | 'Error';\n Message: string;\n Agent: string | null;\n User: string | null;\n __mj_CreatedAt: DateLike;\n}\n\n/** Narrowed read-only row from 'MJ: AI Prompt Runs' (the co-agent model leg). */\ninterface CoAgentPromptRunRow {\n ID: string;\n Model: string;\n Status: string;\n RunAt: DateLike;\n CompletedAt: DateLike | null;\n TokensUsed: number | null;\n TokensPrompt: number | null;\n TokensCompletion: number | null;\n TotalCost: number | null;\n}\n\n/** A flattened node in the session run tree (depth-first order, indented by depth). */\nexport interface SessionRunTreeItem {\n /** 'run' = AIAgentRun row, 'promptRun' = the co-agent's streaming model leg */\n kind: 'run' | 'promptRun';\n id: string;\n entityName: string;\n title: string;\n subtitle: string;\n status: string;\n startedAt: DateLike | null;\n completedAt: DateLike | null;\n tokens: number | null;\n cost: number | null;\n depth: number;\n isCoAgentRun: boolean;\n}\n\n/** Channel row decorated with its definition's transport type for display. */\nexport interface SessionChannelDisplayRow {\n row: SessionChannelRow;\n transportType: string | null;\n}\n\n/**\n * Custom form for 'MJ: AI Agent Sessions' — the observability surface for\n * long-lived realtime (voice) agent sessions. Mirrors the AI Agent Run form's\n * visual language: header with icon / status badge / stats, config bar, and\n * tabbed panes for the delegated run tree, channels, transcript, and details.\n */\n@RegisterClass(BaseFormComponent, 'MJ: AI Agent Sessions')\n@Component({\n standalone: false,\n selector: 'mj-ai-agent-session-form',\n templateUrl: './ai-agent-session-form.component.html',\n styleUrls: ['./ai-agent-session-form.component.css']\n})\nexport class MJAIAgentSessionFormComponentExtended extends MJAIAgentSessionFormComponent implements OnInit {\n public record!: MJAIAgentSessionEntity;\n\n /** Hide the generated-section controls — this form has a fully custom layout. */\n public readonly ToolbarConfig = CUSTOM_LAYOUT_TOOLBAR_CONFIG;\n\n /** Sessions read best full-width, like the agent-run form. */\n public override getDefaultFormWidthMode(): 'centered' | 'full-width' { return 'full-width'; }\n\n // UI state\n public ActiveTab: 'runs' | 'channels' | 'transcript' | 'details' = 'runs';\n public Loading = false;\n public LoadError: string | null = null;\n\n // Loaded data\n public RunTree: SessionRunTreeItem[] = [];\n public Channels: SessionChannelDisplayRow[] = [];\n public Transcript: TranscriptRow[] = [];\n public DelegatedRunCount = 0;\n public TargetAgentID: string | null = null;\n public TargetAgentName: string | null = null;\n public CoAgentPromptRun: CoAgentPromptRunRow | null = null;\n public SessionTokens: number | null = null;\n public SessionCost: number | null = null;\n\n private sessionConfig: SessionConfigJson = {};\n private cachedPrettyConfig: string | null = null;\n\n private navigationService = inject(NavigationService);\n private appManager = inject(ApplicationManager);\n\n override async ngOnInit(): Promise<void> {\n await super.ngOnInit();\n if (this.record?.ID) {\n this.sessionConfig = this.parseSessionConfig(this.record.Config_);\n await this.loadSessionData();\n }\n }\n\n // ────────────────────────────────────────────────────────────────────\n // Data loading\n // ────────────────────────────────────────────────────────────────────\n\n /** Parses the session's Config JSON; returns an empty config on any error. */\n private parseSessionConfig(raw: string | null): SessionConfigJson {\n if (!raw) return {};\n try {\n const parsed = JSON.parse(raw) as Partial<SessionConfigJson>;\n return {\n targetAgentID: typeof parsed.targetAgentID === 'string' ? parsed.targetAgentID : undefined,\n coAgentRunID: typeof parsed.coAgentRunID === 'string' ? parsed.coAgentRunID : undefined,\n promptRunID: typeof parsed.promptRunID === 'string' ? parsed.promptRunID : undefined\n };\n } catch {\n return {};\n }\n }\n\n /**\n * Loads everything the form shows in a single batched RunViews round trip:\n * the session's run tree, its channel instances (+ channel definitions for\n * transport), the transcript, and — when the Config carries observability\n * ids — the co-agent prompt run and target agent name.\n */\n private async loadSessionData(): Promise<void> {\n this.Loading = true;\n this.LoadError = null;\n try {\n const rv = RunView.FromMetadataProvider(this.ProviderToUse);\n const sessionId = this.record.ID;\n\n const results = await rv.RunViews([\n {\n EntityName: 'MJ: AI Agent Runs',\n Fields: ['ID', 'AgentID', 'Agent', 'ParentRunID', 'Status', 'StartedAt', 'CompletedAt',\n 'TotalTokensUsed', 'TotalCost', 'TotalTokensUsedRollup', 'TotalCostRollup'],\n ExtraFilter: `AgentSessionID='${sessionId}'`,\n OrderBy: 'StartedAt ASC',\n ResultType: 'simple'\n },\n {\n EntityName: 'MJ: AI Agent Session Channels',\n Fields: ['ID', 'ChannelID', 'Channel', 'Status', 'SocketUrl', '__mj_CreatedAt', 'LastActiveAt', 'DisconnectedAt'],\n ExtraFilter: `AgentSessionID='${sessionId}'`,\n OrderBy: '__mj_CreatedAt ASC',\n ResultType: 'simple'\n },\n {\n EntityName: 'MJ: AI Agent Channels',\n Fields: ['ID', 'Name', 'TransportType'],\n ResultType: 'simple'\n },\n {\n EntityName: 'MJ: Conversation Details',\n Fields: ['ID', 'Role', 'Message', 'Agent', 'User', '__mj_CreatedAt'],\n ExtraFilter: `AgentSessionID='${sessionId}'`,\n OrderBy: '__mj_CreatedAt ASC',\n ResultType: 'simple'\n },\n // Co-agent model leg — only meaningful when Config carries promptRunID;\n // an impossible filter keeps the batch shape stable when it doesn't.\n {\n EntityName: 'MJ: AI Prompt Runs',\n Fields: ['ID', 'Model', 'Status', 'RunAt', 'CompletedAt', 'TokensUsed', 'TokensPrompt', 'TokensCompletion', 'TotalCost'],\n ExtraFilter: this.sessionConfig.promptRunID ? `ID='${this.sessionConfig.promptRunID}'` : `1=0`,\n ResultType: 'simple'\n },\n // Target agent name resolution from Config.targetAgentID\n {\n EntityName: 'MJ: AI Agents',\n Fields: ['ID', 'Name'],\n ExtraFilter: this.sessionConfig.targetAgentID ? `ID='${this.sessionConfig.targetAgentID}'` : `1=0`,\n ResultType: 'simple'\n }\n ]);\n\n const runs = (results[0]?.Success ? results[0].Results : []) as SessionRunRow[];\n const channelRows = (results[1]?.Success ? results[1].Results : []) as SessionChannelRow[];\n const channelDefs = (results[2]?.Success ? results[2].Results : []) as ChannelDefinitionRow[];\n this.Transcript = (results[3]?.Success ? results[3].Results : []) as TranscriptRow[];\n const promptRuns = (results[4]?.Success ? results[4].Results : []) as CoAgentPromptRunRow[];\n const targetAgents = (results[5]?.Success ? results[5].Results : []) as { ID: string; Name: string }[];\n\n this.CoAgentPromptRun = promptRuns.length > 0 ? promptRuns[0] : null;\n this.TargetAgentID = this.sessionConfig.targetAgentID ?? null;\n this.TargetAgentName = targetAgents.length > 0 ? targetAgents[0].Name : null;\n\n this.Channels = channelRows.map(row => ({\n row,\n transportType: channelDefs.find(d => UUIDsEqual(d.ID, row.ChannelID))?.TransportType ?? null\n }));\n\n this.RunTree = this.buildRunTree(runs);\n this.DelegatedRunCount = runs.filter(r => r.ParentRunID != null).length;\n this.computeSessionUsage(runs);\n } catch (error) {\n console.error('Error loading agent session data:', error);\n this.LoadError = 'Failed to load session data';\n } finally {\n this.Loading = false;\n this.cdr.markForCheck();\n }\n }\n\n /**\n * Flattens the session's runs into a depth-first tree: root runs (no\n * ParentRunID, or parent outside the session) first, children nested by\n * ParentRunID. The co-agent run (Config.coAgentRunID) gets its streaming\n * prompt run inserted directly beneath it as a 'promptRun' leg.\n */\n private buildRunTree(runs: SessionRunRow[]): SessionRunTreeItem[] {\n const items: SessionRunTreeItem[] = [];\n const byParent = new Map<string, SessionRunRow[]>();\n const idSet = new Set(runs.map(r => r.ID.toUpperCase()));\n\n const roots: SessionRunRow[] = [];\n for (const run of runs) {\n if (run.ParentRunID && idSet.has(run.ParentRunID.toUpperCase())) {\n const key = run.ParentRunID.toUpperCase();\n const list = byParent.get(key) ?? [];\n list.push(run);\n byParent.set(key, list);\n } else {\n roots.push(run);\n }\n }\n\n const visit = (run: SessionRunRow, depth: number): void => {\n const isCoAgent = this.sessionConfig.coAgentRunID != null && UUIDsEqual(run.ID, this.sessionConfig.coAgentRunID);\n items.push(this.runToTreeItem(run, depth, isCoAgent));\n if (isCoAgent && this.CoAgentPromptRun) {\n items.push(this.promptRunToTreeItem(this.CoAgentPromptRun, depth + 1));\n }\n for (const child of byParent.get(run.ID.toUpperCase()) ?? []) {\n visit(child, depth + 1);\n }\n };\n for (const root of roots) {\n visit(root, 0);\n }\n return items;\n }\n\n private runToTreeItem(run: SessionRunRow, depth: number, isCoAgent: boolean): SessionRunTreeItem {\n const shortId = run.ID.substring(0, 8);\n return {\n kind: 'run',\n id: run.ID,\n entityName: 'MJ: AI Agent Runs',\n title: isCoAgent\n ? `${run.Agent ?? 'Co-Agent'} · session run`\n : `${run.Agent ?? 'Agent'} · delegated run`,\n subtitle: isCoAgent\n ? `AIAgentRun #${shortId} · one long-lived run for this session`\n : `AIAgentRun #${shortId} · ParentRunID #${run.ParentRunID?.substring(0, 8) ?? '—'} · invoked via target-agent tool`,\n status: run.Status,\n startedAt: run.StartedAt,\n completedAt: run.CompletedAt,\n tokens: run.TotalTokensUsedRollup ?? run.TotalTokensUsed,\n cost: run.TotalCostRollup ?? run.TotalCost,\n depth,\n isCoAgentRun: isCoAgent\n };\n }\n\n private promptRunToTreeItem(pr: CoAgentPromptRunRow, depth: number): SessionRunTreeItem {\n return {\n kind: 'promptRun',\n id: pr.ID,\n entityName: 'MJ: AI Prompt Runs',\n title: `Model leg · ${pr.Model}`,\n subtitle: `AIPromptRun #${pr.ID.substring(0, 8)} · ${pr.TokensPrompt ?? 0} in · ${pr.TokensCompletion ?? 0} out · usage checkpointed incrementally`,\n status: pr.Status,\n startedAt: pr.RunAt,\n completedAt: pr.CompletedAt,\n tokens: pr.TokensUsed,\n cost: pr.TotalCost,\n depth,\n isCoAgentRun: false\n };\n }\n\n /**\n * Session-level tokens/cost for the header stats: prefer the co-agent run's\n * rollups (covers delegated children), fall back to the prompt run's\n * incremental usage when the run rollups haven't been finalized yet.\n */\n private computeSessionUsage(runs: SessionRunRow[]): void {\n const coAgentRun = this.sessionConfig.coAgentRunID\n ? runs.find(r => UUIDsEqual(r.ID, this.sessionConfig.coAgentRunID)) ?? null\n : null;\n const runTokens = coAgentRun ? (coAgentRun.TotalTokensUsedRollup ?? coAgentRun.TotalTokensUsed) : null;\n const runCost = coAgentRun ? (coAgentRun.TotalCostRollup ?? coAgentRun.TotalCost) : null;\n this.SessionTokens = runTokens ?? this.CoAgentPromptRun?.TokensUsed ?? null;\n this.SessionCost = runCost ?? this.CoAgentPromptRun?.TotalCost ?? null;\n }\n\n // ────────────────────────────────────────────────────────────────────\n // Display helpers\n // ────────────────────────────────────────────────────────────────────\n\n public ChangeTab(tab: 'runs' | 'channels' | 'transcript' | 'details'): void {\n this.ActiveTab = tab;\n }\n\n public GetStatusIcon(status: string | null): string {\n switch (status) {\n case 'Active': return 'fa-tower-broadcast';\n case 'Idle': return 'fa-moon';\n case 'Closed': return 'fa-circle-stop';\n default: return 'fa-question-circle';\n }\n }\n\n public GetRunStatusIcon(status: string): string {\n switch (status) {\n case 'Running': return 'fa-circle-notch fa-spin';\n case 'Completed': return 'fa-check-circle';\n case 'Failed': return 'fa-times-circle';\n case 'Cancelled': return 'fa-ban';\n case 'Paused': return 'fa-pause-circle';\n case 'AwaitingFeedback': return 'fa-hourglass-half';\n case 'Pending': return 'fa-clock';\n default: return 'fa-question-circle';\n }\n }\n\n public GetChannelIcon(channelName: string | null): string {\n switch (channelName) {\n case 'VoiceAudio': return 'fa-microphone-lines';\n case 'TextChat': return 'fa-comment';\n case 'ClientControl': return 'fa-sliders';\n case 'Whiteboard': return 'fa-chalkboard';\n case 'Video': return 'fa-video';\n default: return 'fa-plug';\n }\n }\n\n /** Short, readable session id (first segment of the UUID). */\n public get ShortSessionId(): string {\n return this.record?.ID ? `sess_${this.record.ID.substring(0, 8).toLowerCase()}` : '';\n }\n\n /** Created → ClosedAt (terminal) or LastActiveAt (still open) duration. */\n public get SessionDuration(): string {\n if (!this.record) return '';\n const start = this.toDate(this.record.__mj_CreatedAt);\n const end = this.toDate(this.record.ClosedAt) ?? this.toDate(this.record.LastActiveAt);\n if (!start || !end) return '—';\n return this.FormatDuration(start, end);\n }\n\n public FormatDuration(start: DateLike | null, end: DateLike | null): string {\n const s = this.toDate(start);\n const e = this.toDate(end);\n if (!s) return '—';\n if (!e) return 'Running...';\n const ms = e.getTime() - s.getTime();\n if (ms < 0) return '—';\n if (ms < 1000) return `${ms}ms`;\n if (ms < 60000) return `${(ms / 1000).toFixed(1)}s`;\n if (ms < 3600000) return `${Math.floor(ms / 60000)}m ${Math.floor((ms % 60000) / 1000)}s`;\n return `${Math.floor(ms / 3600000)}h ${Math.floor((ms % 3600000) / 60000)}m`;\n }\n\n private toDate(value: DateLike | null | undefined): Date | null {\n if (value == null) return null;\n const d = value instanceof Date ? value : new Date(value);\n return isNaN(d.getTime()) ? null : d;\n }\n\n /** Pretty-printed session Config JSON for the Details tab (cached). */\n public get PrettyConfig(): string {\n if (!this.record?.Config_) return '';\n if (this.cachedPrettyConfig !== null) return this.cachedPrettyConfig;\n try {\n this.cachedPrettyConfig = JSON.stringify(JSON.parse(this.record.Config_), null, 2);\n } catch {\n this.cachedPrettyConfig = this.record.Config_;\n }\n return this.cachedPrettyConfig;\n }\n\n // ────────────────────────────────────────────────────────────────────\n // Navigation\n // ────────────────────────────────────────────────────────────────────\n\n public OpenEntityRecord(entityName: string, recordId: string | null): void {\n if (recordId) {\n SharedService.Instance.OpenEntityRecord(entityName, CompositeKey.FromID(recordId));\n }\n }\n\n /** Opens the linked conversation in the Chat app (same pattern as the agent-run form). */\n public NavigateToConversation(): void {\n if (!this.record?.ConversationID) return;\n const chatApp = this.appManager.GetAllApps().find(app => app.Name === 'Chat');\n if (!chatApp) {\n // Fall back to the raw conversation record when the Chat app isn't installed\n this.OpenEntityRecord('MJ: Conversations', this.record.ConversationID);\n return;\n }\n this.navigationService.OpenNavItemByName(\n 'Conversations',\n // realtimeSessionId opens the SESSION REVIEW overlay directly on arrival\n // (the chat wrapper consumes it once) — not just the containing chat.\n { conversationId: this.record.ConversationID, realtimeSessionId: this.record.ID },\n chatApp.ID\n );\n }\n\n public RefreshData(): void {\n if (!this.record?.ID) return;\n this.cachedPrettyConfig = null;\n this.record.Load(this.record.ID).then(() => {\n this.sessionConfig = this.parseSessionConfig(this.record.Config_);\n void this.loadSessionData();\n });\n }\n}\n","@if (record) {\n<mj-record-form-container [Record]=\"record\" [FormComponent]=\"this\"\n [ToolbarConfig]=\"ToolbarConfig\"\n [WidthMode]=\"'full-width'\"\n (Navigate)=\"OnFormNavigate($event)\"\n (DeleteRequested)=\"OnDeleteRequested()\"\n (FavoriteToggled)=\"OnFavoriteToggled()\"\n (HistoryRequested)=\"OnHistoryRequested()\"\n (ListManagementRequested)=\"OnListManagementRequested()\">\n\n <div class=\"record-form ai-agent-session-form\">\n <!-- Header (mirrors the AI Agent Run form header) -->\n <div class=\"header\">\n <div class=\"header-content\">\n <div class=\"header-left\">\n <div class=\"icon-wrapper\">\n <i class=\"fas fa-tower-broadcast\"></i>\n </div>\n <div class=\"header-info\">\n <h2>AI Agent Session</h2>\n <div class=\"meta-info\">\n @if (record.AgentID) {\n <span class=\"agent-name\">\n <a href=\"javascript:void(0)\" class=\"entity-link\" (click)=\"OpenEntityRecord('AI Agents', record.AgentID)\">\n {{ record.Agent || 'Agent' }}\n </a>\n </span>\n }\n @if (TargetAgentID) {\n <i class=\"fas fa-arrow-right-long target-arrow\"></i>\n <span class=\"agent-name\">\n <a href=\"javascript:void(0)\" class=\"entity-link\" (click)=\"OpenEntityRecord('AI Agents', TargetAgentID)\">\n {{ TargetAgentName || 'Target agent' }}\n </a>\n </span>\n }\n <span class=\"run-id\">{{ ShortSessionId }}</span>\n @if (record.ConversationID) {\n <span class=\"conversation-pill\" (click)=\"NavigateToConversation()\" title=\"Open conversation in Chat app\">\n <i class=\"fas fa-comments\"></i>\n <span>{{ record.Conversation || 'Conversation' }}</span>\n <i class=\"fas fa-external-link-alt pill-action\"></i>\n </span>\n }\n </div>\n </div>\n </div>\n <div class=\"header-right\">\n <div class=\"status-badge\" [attr.data-status]=\"record.Status\">\n <i class=\"fas\" [ngClass]=\"GetStatusIcon(record.Status)\"></i>\n {{ record.Status }}\n </div>\n <div class=\"header-actions\">\n <button class=\"btn-icon\" (click)=\"RefreshData()\" title=\"Refresh\">\n <i class=\"fas fa-sync-alt\"></i>\n </button>\n </div>\n </div>\n </div>\n\n <div class=\"header-stats\">\n <div class=\"stat\">\n <span class=\"label\">User</span>\n <span class=\"value\">\n <a href=\"javascript:void(0)\" class=\"entity-link\" (click)=\"OpenEntityRecord('Users', record.UserID)\">{{ record.User }}</a>\n </span>\n </div>\n <div class=\"stat\">\n <span class=\"label\">Started</span>\n <span class=\"value\">{{ record.__mj_CreatedAt | date:'medium' }}</span>\n </div>\n @if (record.ClosedAt) {\n <div class=\"stat\">\n <span class=\"label\">Closed</span>\n <span class=\"value\">{{ record.ClosedAt | date:'medium' }}</span>\n </div>\n } @else {\n <div class=\"stat\">\n <span class=\"label\">Last Active</span>\n <span class=\"value\">{{ record.LastActiveAt | date:'medium' }}</span>\n </div>\n }\n <div class=\"stat\">\n <span class=\"label\">Duration</span>\n <span class=\"value\">{{ SessionDuration }}</span>\n </div>\n <div class=\"stat\">\n <span class=\"label\">Channels</span>\n <span class=\"value\">{{ Channels.length }}</span>\n </div>\n <div class=\"stat\">\n <span class=\"label\">Delegated Runs</span>\n <span class=\"value\">{{ DelegatedRunCount }}</span>\n </div>\n @if (SessionTokens != null && SessionTokens > 0) {\n <div class=\"stat\">\n <span class=\"label\">Tokens</span>\n <span class=\"value\">{{ SessionTokens | number:'1.0-0' }}</span>\n </div>\n }\n @if (SessionCost != null && SessionCost > 0) {\n <div class=\"stat\">\n <span class=\"label\">Cost</span>\n <span class=\"value success\">${{ SessionCost | number:'1.2-4' }}</span>\n </div>\n }\n </div>\n\n <!-- Config bar: target agent / host instance / continuation -->\n <div class=\"configuration-bar\">\n <div class=\"config-item\">\n <i class=\"fas fa-bullseye\"></i>\n <div class=\"config-content\">\n <div class=\"config-label\">Target Agent</div>\n <div class=\"config-value\">\n @if (TargetAgentID) {\n <a href=\"javascript:void(0)\" class=\"entity-link\" (click)=\"OpenEntityRecord('AI Agents', TargetAgentID)\">\n {{ TargetAgentName || 'Unknown' }}\n </a>\n } @else {\n <span class=\"muted\">None</span>\n }\n </div>\n </div>\n </div>\n <div class=\"config-item\">\n <i class=\"fas fa-server\"></i>\n <div class=\"config-content\">\n <div class=\"config-label\">Host Instance</div>\n <div class=\"config-value mono\">{{ record.HostInstanceID || '—' }}</div>\n </div>\n </div>\n <div class=\"config-item\">\n <i class=\"fas fa-link\"></i>\n <div class=\"config-content\">\n <div class=\"config-label\">Continuation</div>\n <div class=\"config-value\">\n @if (record.LastSessionID) {\n <a href=\"javascript:void(0)\" class=\"entity-link\" (click)=\"OpenEntityRecord('MJ: AI Agent Sessions', record.LastSessionID)\">\n Resumed from prior session\n </a>\n } @else {\n <span class=\"muted\">None (new session)</span>\n }\n </div>\n </div>\n </div>\n </div>\n </div>\n\n <!-- Tabs -->\n <div class=\"tabs\">\n <button class=\"tab\" [class.active]=\"ActiveTab === 'runs'\" (click)=\"ChangeTab('runs')\">\n <i class=\"fas fa-diagram-project\"></i> Runs\n @if (RunTree.length > 0) { <span class=\"tab-count\">{{ RunTree.length }}</span> }\n </button>\n <button class=\"tab\" [class.active]=\"ActiveTab === 'channels'\" (click)=\"ChangeTab('channels')\">\n <i class=\"fas fa-plug\"></i> Channels\n @if (Channels.length > 0) { <span class=\"tab-count\">{{ Channels.length }}</span> }\n </button>\n <button class=\"tab\" [class.active]=\"ActiveTab === 'transcript'\" (click)=\"ChangeTab('transcript')\">\n <i class=\"fas fa-comments\"></i> Transcript\n @if (Transcript.length > 0) { <span class=\"tab-count\">{{ Transcript.length }}</span> }\n </button>\n <button class=\"tab\" [class.active]=\"ActiveTab === 'details'\" (click)=\"ChangeTab('details')\">\n <i class=\"fas fa-info-circle\"></i> Details\n </button>\n </div>\n\n <!-- Content -->\n <div class=\"content-area\">\n @if (Loading) {\n <mj-loading text=\"Loading session data...\" size=\"medium\"></mj-loading>\n } @else if (LoadError) {\n <mj-empty-state\n Variant=\"error\"\n [Message]=\"LoadError\" />\n } @else {\n\n <!-- Runs tab: the session's delegated run tree -->\n @if (ActiveTab === 'runs') {\n <div class=\"tab-content\">\n @if (RunTree.length === 0) {\n <mj-empty-state\n Icon=\"fa-solid fa-diagram-project\"\n Title=\"No Runs\"\n Message=\"No agent runs have been recorded for this session yet.\" />\n } @else {\n <div class=\"run-tree\">\n @for (node of RunTree; track node.id) {\n <div class=\"run-node\"\n [class.run-node--child]=\"node.depth > 0\"\n [style.margin-left.px]=\"node.depth * 36\"\n (click)=\"OpenEntityRecord(node.entityName, node.id)\"\n title=\"Open record\">\n <div class=\"run-marker\"\n [class.run-marker--coagent]=\"node.isCoAgentRun\"\n [class.run-marker--prompt]=\"node.kind === 'promptRun'\">\n @if (node.kind === 'promptRun') {\n <i class=\"fas fa-microchip\"></i>\n } @else if (node.isCoAgentRun) {\n <i class=\"fas fa-tower-broadcast\"></i>\n } @else {\n <i class=\"fas fa-robot\"></i>\n }\n </div>\n <div class=\"run-body\">\n <div class=\"run-headrow\">\n <h4 class=\"run-title\">{{ node.title }}</h4>\n <span class=\"run-time\">{{ node.startedAt | date:'h:mm:ss a' }}</span>\n </div>\n <div class=\"run-sub\">{{ node.subtitle }}</div>\n <div class=\"run-foot\">\n <span class=\"run-status\" [attr.data-status]=\"node.status\">\n <i class=\"fas\" [ngClass]=\"GetRunStatusIcon(node.status)\"></i> {{ node.status }}\n </span>\n <span class=\"run-chip\">\n <i class=\"fas fa-clock\"></i> {{ FormatDuration(node.startedAt, node.completedAt) }}\n </span>\n @if (node.tokens != null && node.tokens > 0) {\n <span class=\"run-chip\"><i class=\"fas fa-coins\"></i> {{ node.tokens | number:'1.0-0' }} tok</span>\n }\n @if (node.cost != null && node.cost > 0) {\n <span class=\"run-chip\"><i class=\"fas fa-dollar-sign\"></i> {{ node.cost | number:'1.2-4' }}</span>\n }\n </div>\n </div>\n </div>\n }\n </div>\n }\n </div>\n }\n\n <!-- Channels tab -->\n @if (ActiveTab === 'channels') {\n <div class=\"tab-content\">\n @if (Channels.length === 0) {\n <mj-empty-state\n Icon=\"fa-solid fa-plug\"\n Title=\"No Channels\"\n Message=\"No channel instances were attached to this session.\" />\n } @else {\n <div class=\"channels-grid-wrap\">\n <table class=\"channels-grid\">\n <thead>\n <tr>\n <th>Channel</th>\n <th>Transport</th>\n <th>Status</th>\n <th>Connected</th>\n <th>Last Active</th>\n <th>Disconnected</th>\n <th>Socket</th>\n </tr>\n </thead>\n <tbody>\n @for (channel of Channels; track channel.row.ID) {\n <tr (click)=\"OpenEntityRecord('MJ: AI Agent Session Channels', channel.row.ID)\" title=\"Open record\">\n <td>\n <span class=\"cell-strong\">\n <i class=\"fas\" [ngClass]=\"GetChannelIcon(channel.row.Channel)\"></i>\n {{ channel.row.Channel }}\n </span>\n </td>\n <td>\n @if (channel.transportType) {\n <span class=\"transport-pill\" [attr.data-transport]=\"channel.transportType\">{{ channel.transportType }}</span>\n } @else {\n <span class=\"muted\">—</span>\n }\n </td>\n <td>\n <span class=\"channel-status-pill\" [attr.data-status]=\"channel.row.Status\">{{ channel.row.Status }}</span>\n </td>\n <td class=\"mono\">{{ channel.row.__mj_CreatedAt | date:'h:mm:ss a' }}</td>\n <td class=\"mono\">{{ channel.row.LastActiveAt | date:'h:mm:ss a' }}</td>\n <td class=\"mono\">\n @if (channel.row.DisconnectedAt) {\n {{ channel.row.DisconnectedAt | date:'h:mm:ss a' }}\n } @else {\n <span class=\"muted\">—</span>\n }\n </td>\n <td class=\"mono socket-cell\" [title]=\"channel.row.SocketUrl || ''\">\n {{ channel.row.SocketUrl || '—' }}\n </td>\n </tr>\n }\n </tbody>\n </table>\n </div>\n }\n </div>\n }\n\n <!-- Transcript tab -->\n @if (ActiveTab === 'transcript') {\n <div class=\"tab-content\">\n @if (Transcript.length === 0) {\n <mj-empty-state\n Icon=\"fa-solid fa-comments\"\n Title=\"No Transcript\"\n Message=\"No conversation messages were stamped with this session.\" />\n } @else {\n <div class=\"transcript-thread\">\n @for (turn of Transcript; track turn.ID) {\n <div class=\"turn\" [class.turn--user]=\"turn.Role === 'User'\" [class.turn--error]=\"turn.Role === 'Error'\">\n <div class=\"turn-avatar\">\n @if (turn.Role === 'User') {\n <i class=\"fas fa-user\"></i>\n } @else if (turn.Role === 'Error') {\n <i class=\"fas fa-triangle-exclamation\"></i>\n } @else {\n <i class=\"fas fa-robot\"></i>\n }\n </div>\n <div class=\"turn-main\">\n <div class=\"turn-meta\">\n @if (turn.Role === 'User') {\n {{ turn.User || 'User' }}\n } @else {\n {{ turn.Agent || 'Agent' }}\n }\n <span class=\"turn-time\">{{ turn.__mj_CreatedAt | date:'h:mm:ss a' }}</span>\n </div>\n <div class=\"turn-bubble\">{{ turn.Message }}</div>\n </div>\n </div>\n }\n </div>\n }\n </div>\n }\n\n <!-- Details tab -->\n @if (ActiveTab === 'details') {\n <div class=\"tab-content\">\n <mj-accordion-panel [Expanded]=\"true\">\n <ng-template mjAccordionTitle>\n <i class=\"fas fa-info-circle\"></i> Session Record\n </ng-template>\n <div class=\"details-grid\">\n <div class=\"detail-item\">\n <label>ID</label>\n <span class=\"mono\">{{ record.ID }}</span>\n </div>\n <div class=\"detail-item\">\n <label>Agent (Co-Agent)</label>\n <span>\n <a href=\"javascript:void(0)\" class=\"entity-link\" (click)=\"OpenEntityRecord('AI Agents', record.AgentID)\">\n {{ record.Agent || 'N/A' }}\n </a>\n </span>\n </div>\n <div class=\"detail-item\">\n <label>User</label>\n <span>\n <a href=\"javascript:void(0)\" class=\"entity-link\" (click)=\"OpenEntityRecord('Users', record.UserID)\">\n {{ record.User }}\n </a>\n </span>\n </div>\n <div class=\"detail-item\">\n <label>Conversation</label>\n <span>\n @if (record.ConversationID) {\n <a href=\"javascript:void(0)\" class=\"entity-link\" (click)=\"OpenEntityRecord('MJ: Conversations', record.ConversationID)\">\n {{ record.Conversation || record.ConversationID }}\n </a>\n } @else {\n <span>N/A</span>\n }\n </span>\n </div>\n <div class=\"detail-item\">\n <label>Status</label>\n <span class=\"status-badge small\" [attr.data-status]=\"record.Status\">{{ record.Status }}</span>\n </div>\n <div class=\"detail-item\">\n <label>Prior Session</label>\n <span>\n @if (record.LastSessionID) {\n <a href=\"javascript:void(0)\" class=\"entity-link\" (click)=\"OpenEntityRecord('MJ: AI Agent Sessions', record.LastSessionID)\">\n {{ record.LastSessionID }}\n </a>\n } @else {\n <span>None (root)</span>\n }\n </span>\n </div>\n <div class=\"detail-item\">\n <label>Host Instance</label>\n <span class=\"mono\">{{ record.HostInstanceID || 'N/A' }}</span>\n </div>\n <div class=\"detail-item\">\n <label>Last Active At</label>\n <span>{{ record.LastActiveAt | date:'medium' }}</span>\n </div>\n <div class=\"detail-item\">\n <label>Closed At</label>\n <span>{{ record.ClosedAt ? (record.ClosedAt | date:'medium') : 'Still open' }}</span>\n </div>\n </div>\n </mj-accordion-panel>\n\n @if (record.Config_) {\n <mj-accordion-panel [Expanded]=\"false\">\n <ng-template mjAccordionTitle>\n <i class=\"fas fa-code\"></i> Config (Session State JSON)\n </ng-template>\n <div class=\"config-viewer\">\n <mj-code-editor\n [ngModel]=\"PrettyConfig\"\n [language]=\"'json'\"\n [readonly]=\"true\"\n style=\"height: 300px; width: 100%;\">\n </mj-code-editor>\n </div>\n </mj-accordion-panel>\n }\n </div>\n }\n }\n </div>\n </div>\n</mj-record-form-container>\n}\n"]}
@@ -8,7 +8,8 @@ import { Component } from '@angular/core';
8
8
  import { BaseFormSectionComponent } from '@memberjunction/ng-base-forms';
9
9
  import { RegisterClass } from '@memberjunction/global';
10
10
  import * as i0 from "@angular/core";
11
- import * as i1 from "@memberjunction/ng-flow-editor";
11
+ import * as i1 from "@memberjunction/ng-ui-components";
12
+ import * as i2 from "@memberjunction/ng-flow-editor";
12
13
  function FlowAgentFormSectionComponent_Conditional_0_Template(rf, ctx) { if (rf & 1) {
13
14
  const _r1 = i0.ɵɵgetCurrentView();
14
15
  i0.ɵɵelementStart(0, "mj-flow-agent-editor", 2);
@@ -19,11 +20,7 @@ function FlowAgentFormSectionComponent_Conditional_0_Template(rf, ctx) { if (rf
19
20
  i0.ɵɵproperty("AgentID", ctx_r1.AgentID)("EditMode", ctx_r1.EditMode)("FullScreen", ctx_r1.IsFullScreen);
20
21
  } }
21
22
  function FlowAgentFormSectionComponent_Conditional_1_Template(rf, ctx) { if (rf & 1) {
22
- i0.ɵɵelementStart(0, "div", 1);
23
- i0.ɵɵelement(1, "i", 3);
24
- i0.ɵɵelementStart(2, "p");
25
- i0.ɵɵtext(3, "Save the agent first to configure the workflow.");
26
- i0.ɵɵelementEnd()();
23
+ i0.ɵɵelement(0, "mj-empty-state", 1);
27
24
  } }
28
25
  /**
29
26
  * Form section component for Flow Agent types.
@@ -49,11 +46,11 @@ let FlowAgentFormSectionComponent = class FlowAgentFormSectionComponent extends
49
46
  this.cdr.detectChanges();
50
47
  }
51
48
  static { this.ɵfac = function FlowAgentFormSectionComponent_Factory(__ngFactoryType__) { return new (__ngFactoryType__ || FlowAgentFormSectionComponent)(i0.ɵɵdirectiveInject(i0.ChangeDetectorRef)); }; }
52
- static { this.ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: FlowAgentFormSectionComponent, selectors: [["mj-flow-agent-form-section"]], standalone: false, features: [i0.ɵɵInheritDefinitionFeature], decls: 2, vars: 1, consts: [[3, "AgentID", "EditMode", "FullScreen"], [1, "flow-empty-state"], [3, "FlowSaved", "FullScreenToggled", "AgentID", "EditMode", "FullScreen"], [1, "fa-solid", "fa-info-circle"]], template: function FlowAgentFormSectionComponent_Template(rf, ctx) { if (rf & 1) {
53
- i0.ɵɵconditionalCreate(0, FlowAgentFormSectionComponent_Conditional_0_Template, 1, 3, "mj-flow-agent-editor", 0)(1, FlowAgentFormSectionComponent_Conditional_1_Template, 4, 0, "div", 1);
49
+ static { this.ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: FlowAgentFormSectionComponent, selectors: [["mj-flow-agent-form-section"]], standalone: false, features: [i0.ɵɵInheritDefinitionFeature], decls: 2, vars: 1, consts: [[3, "AgentID", "EditMode", "FullScreen"], ["Variant", "warning", "Icon", "fa-solid fa-circle-info", "Title", "Save the agent first to configure the workflow.", 1, "flow-empty-state"], [3, "FlowSaved", "FullScreenToggled", "AgentID", "EditMode", "FullScreen"]], template: function FlowAgentFormSectionComponent_Template(rf, ctx) { if (rf & 1) {
50
+ i0.ɵɵconditionalCreate(0, FlowAgentFormSectionComponent_Conditional_0_Template, 1, 3, "mj-flow-agent-editor", 0)(1, FlowAgentFormSectionComponent_Conditional_1_Template, 1, 0, "mj-empty-state", 1);
54
51
  } if (rf & 2) {
55
52
  i0.ɵɵconditional(ctx.AgentID ? 0 : 1);
56
- } }, dependencies: [i1.FlowAgentEditorComponent], styles: ["\n\n[_nghost-%COMP%] {\n display: block;\n width: 100%;\n height: 100%;\n}\n\nmj-flow-agent-editor[_ngcontent-%COMP%] {\n display: block;\n width: 100%;\n \n\n\n\n\n height: calc(100vh - 300px);\n min-height: 400px;\n}\n\n.flow-empty-state[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: center;\n padding: 40px 20px;\n text-align: center;\n color: var(--mj-text-disabled);\n}\n\n.flow-empty-state[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n font-size: 32px;\n margin-bottom: 12px;\n color: var(--mj-border-strong);\n}\n\n.flow-empty-state[_ngcontent-%COMP%] p[_ngcontent-%COMP%] {\n font-size: 14px;\n margin: 0;\n}"] }); }
53
+ } }, dependencies: [i1.MJEmptyStateComponent, i2.FlowAgentEditorComponent], styles: ["\n\n[_nghost-%COMP%] {\n display: block;\n width: 100%;\n height: 100%;\n}\n\nmj-flow-agent-editor[_ngcontent-%COMP%] {\n display: block;\n width: 100%;\n \n\n\n\n\n height: calc(100vh - 300px);\n min-height: 400px;\n}\n\n\n\n.flow-empty-state[_ngcontent-%COMP%] {\n display: block;\n min-height: 400px;\n}"] }); }
57
54
  };
58
55
  FlowAgentFormSectionComponent = __decorate([
59
56
  RegisterClass(BaseFormSectionComponent, 'AI Agents.FlowAgentSection')
@@ -61,7 +58,7 @@ FlowAgentFormSectionComponent = __decorate([
61
58
  export { FlowAgentFormSectionComponent };
62
59
  (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(FlowAgentFormSectionComponent, [{
63
60
  type: Component,
64
- args: [{ standalone: false, selector: 'mj-flow-agent-form-section', template: "@if (AgentID) {\n <mj-flow-agent-editor\n [AgentID]=\"AgentID\"\n [EditMode]=\"EditMode\"\n [FullScreen]=\"IsFullScreen\"\n (FlowSaved)=\"OnFlowSaved()\"\n (FullScreenToggled)=\"OnFullScreenToggled($event)\">\n </mj-flow-agent-editor>\n} @else {\n <div class=\"flow-empty-state\">\n <i class=\"fa-solid fa-info-circle\"></i>\n <p>Save the agent first to configure the workflow.</p>\n </div>\n}\n", styles: ["/* Flow Agent Form Section - thin wrapper */\n:host {\n display: block;\n width: 100%;\n height: 100%;\n}\n\nmj-flow-agent-editor {\n display: block;\n width: 100%;\n /* Subtract the full stack of containers above:\n form-toolbar (~40px) + agent-header (~75px) + form-content padding (24px)\n + panelbar-item header (~52px) + panel-content padding (16px) + margins (~30px)\n + browser chrome (~50px) \u2248 290px. Use 300px with a safety buffer. */\n height: calc(100vh - 300px);\n min-height: 400px;\n}\n\n.flow-empty-state {\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: center;\n padding: 40px 20px;\n text-align: center;\n color: var(--mj-text-disabled);\n}\n\n.flow-empty-state i {\n font-size: 32px;\n margin-bottom: 12px;\n color: var(--mj-border-strong);\n}\n\n.flow-empty-state p {\n font-size: 14px;\n margin: 0;\n}\n"] }]
61
+ args: [{ standalone: false, selector: 'mj-flow-agent-form-section', template: "@if (AgentID) {\n <mj-flow-agent-editor\n [AgentID]=\"AgentID\"\n [EditMode]=\"EditMode\"\n [FullScreen]=\"IsFullScreen\"\n (FlowSaved)=\"OnFlowSaved()\"\n (FullScreenToggled)=\"OnFullScreenToggled($event)\">\n </mj-flow-agent-editor>\n} @else {\n <mj-empty-state\n class=\"flow-empty-state\"\n Variant=\"warning\"\n Icon=\"fa-solid fa-circle-info\"\n Title=\"Save the agent first to configure the workflow.\" />\n}\n", styles: ["/* Flow Agent Form Section - thin wrapper */\n:host {\n display: block;\n width: 100%;\n height: 100%;\n}\n\nmj-flow-agent-editor {\n display: block;\n width: 100%;\n /* Subtract the full stack of containers above:\n form-toolbar (~40px) + agent-header (~75px) + form-content padding (24px)\n + panelbar-item header (~52px) + panel-content padding (16px) + margins (~30px)\n + browser chrome (~50px) \u2248 290px. Use 300px with a safety buffer. */\n height: calc(100vh - 300px);\n min-height: 400px;\n}\n\n/* Fill the section's height so the placeholder centers in the available pane */\n.flow-empty-state {\n display: block;\n min-height: 400px;\n}\n"] }]
65
62
  }], () => [{ type: i0.ChangeDetectorRef }], null); })();
66
63
  (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassDebugInfo(FlowAgentFormSectionComponent, { className: "FlowAgentFormSectionComponent", filePath: "src/lib/custom/AIAgents/FlowAgentType/flow-agent-form-section.component.ts", lineNumber: 18 }); })();
67
64
  //# sourceMappingURL=flow-agent-form-section.component.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"flow-agent-form-section.component.js","sourceRoot":"","sources":["../../../../../src/lib/custom/AIAgents/FlowAgentType/flow-agent-form-section.component.ts","../../../../../src/lib/custom/AIAgents/FlowAgentType/flow-agent-form-section.component.html"],"names":[],"mappings":";;;;;;AAAA,OAAO,EAAE,SAAS,EAAqB,MAAM,eAAe,CAAC;AAC7D,OAAO,EAAE,wBAAwB,EAAE,MAAM,+BAA+B,CAAC;AACzE,OAAO,EAAE,aAAa,EAAE,MAAM,wBAAwB,CAAC;;;;;ICDnD,+CAKsD;IAAlD,AADA,uNAAa,oBAAa,KAAC,gOACN,kCAA2B,KAAC;IACrD,iBAAuB;;;IAHnB,AADA,AADA,wCAAmB,6BACE,mCACM;;;IAK/B,8BAA8B;IAC1B,uBAAuC;IACvC,yBAAG;IAAA,+DAA+C;IACtD,AADsD,iBAAI,EACpD;;ADPV;;;;GAIG;AAQI,IAAM,6BAA6B,GAAnC,MAAM,6BAA8B,SAAQ,wBAAwB;IAIvE,IAAI,OAAO;QACP,OAAO,IAAI,CAAC,MAAM,IAAI,IAAI,IAAI,IAAI,CAAC,MAAM,CAAC,CAAC,CAAE,IAAI,CAAC,MAAkC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC;IACnG,CAAC;IAED,YAAoB,GAAsB;QACtC,KAAK,EAAE,CAAC;QADQ,QAAG,GAAH,GAAG,CAAmB;QAP1C,qDAAqD;QAC9C,iBAAY,GAAG,KAAK,CAAC;IAQ5B,CAAC;IAEM,WAAW;QACd,6CAA6C;QAC7C,IAAI,CAAC,GAAG,CAAC,aAAa,EAAE,CAAC;IAC7B,CAAC;IAEM,mBAAmB,CAAC,UAAmB;QAC1C,IAAI,CAAC,YAAY,GAAG,UAAU,CAAC;QAC/B,IAAI,CAAC,GAAG,CAAC,aAAa,EAAE,CAAC;IAC7B,CAAC;8HApBQ,6BAA6B;oEAA7B,6BAA6B;YCTxC,AARF,gHAAe,yEAQN;;YART,qCAaC;;;ADIY,6BAA6B;IADzC,aAAa,CAAC,wBAAwB,EAAE,4BAA4B,CAAC;GACzD,6BAA6B,CAqBzC;;iFArBY,6BAA6B;cAPzC,SAAS;6BACI,KAAK,YACL,4BAA4B;;kFAK7B,6BAA6B","sourcesContent":["import { Component, ChangeDetectorRef } from '@angular/core';\nimport { BaseFormSectionComponent } from '@memberjunction/ng-base-forms';\nimport { RegisterClass } from '@memberjunction/global';\nimport { MJAIAgentEntityExtended } from '@memberjunction/ai-core-plus';\n\n/**\n * Form section component for Flow Agent types.\n * Simply wraps the FlowAgentEditorComponent from @memberjunction/ng-flow-editor\n * and passes through the agent ID and edit mode.\n */\n@Component({\n standalone: false,\n selector: 'mj-flow-agent-form-section',\n templateUrl: './flow-agent-form-section.component.html',\n styleUrls: ['./flow-agent-form-section.component.css']\n})\n@RegisterClass(BaseFormSectionComponent, 'AI Agents.FlowAgentSection')\nexport class FlowAgentFormSectionComponent extends BaseFormSectionComponent {\n /** Whether the flow editor is in full-screen mode */\n public IsFullScreen = false;\n\n get AgentID(): string | null {\n return this.record && 'ID' in this.record ? (this.record as MJAIAgentEntityExtended).ID : null;\n }\n\n constructor(private cdr: ChangeDetectorRef) {\n super();\n }\n\n public OnFlowSaved(): void {\n // Trigger form dirty-state refresh if needed\n this.cdr.detectChanges();\n }\n\n public OnFullScreenToggled(fullScreen: boolean): void {\n this.IsFullScreen = fullScreen;\n this.cdr.detectChanges();\n }\n}\n","@if (AgentID) {\n <mj-flow-agent-editor\n [AgentID]=\"AgentID\"\n [EditMode]=\"EditMode\"\n [FullScreen]=\"IsFullScreen\"\n (FlowSaved)=\"OnFlowSaved()\"\n (FullScreenToggled)=\"OnFullScreenToggled($event)\">\n </mj-flow-agent-editor>\n} @else {\n <div class=\"flow-empty-state\">\n <i class=\"fa-solid fa-info-circle\"></i>\n <p>Save the agent first to configure the workflow.</p>\n </div>\n}\n"]}
1
+ {"version":3,"file":"flow-agent-form-section.component.js","sourceRoot":"","sources":["../../../../../src/lib/custom/AIAgents/FlowAgentType/flow-agent-form-section.component.ts","../../../../../src/lib/custom/AIAgents/FlowAgentType/flow-agent-form-section.component.html"],"names":[],"mappings":";;;;;;AAAA,OAAO,EAAE,SAAS,EAAqB,MAAM,eAAe,CAAC;AAC7D,OAAO,EAAE,wBAAwB,EAAE,MAAM,+BAA+B,CAAC;AACzE,OAAO,EAAE,aAAa,EAAE,MAAM,wBAAwB,CAAC;;;;;;ICDnD,+CAKsD;IAAlD,AADA,uNAAa,oBAAa,KAAC,gOACN,kCAA2B,KAAC;IACrD,iBAAuB;;;IAHnB,AADA,AADA,wCAAmB,6BACE,mCACM;;;IAK/B,oCAI8D;;ADRlE;;;;GAIG;AAQI,IAAM,6BAA6B,GAAnC,MAAM,6BAA8B,SAAQ,wBAAwB;IAIvE,IAAI,OAAO;QACP,OAAO,IAAI,CAAC,MAAM,IAAI,IAAI,IAAI,IAAI,CAAC,MAAM,CAAC,CAAC,CAAE,IAAI,CAAC,MAAkC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC;IACnG,CAAC;IAED,YAAoB,GAAsB;QACtC,KAAK,EAAE,CAAC;QADQ,QAAG,GAAH,GAAG,CAAmB;QAP1C,qDAAqD;QAC9C,iBAAY,GAAG,KAAK,CAAC;IAQ5B,CAAC;IAEM,WAAW;QACd,6CAA6C;QAC7C,IAAI,CAAC,GAAG,CAAC,aAAa,EAAE,CAAC;IAC7B,CAAC;IAEM,mBAAmB,CAAC,UAAmB;QAC1C,IAAI,CAAC,YAAY,GAAG,UAAU,CAAC;QAC/B,IAAI,CAAC,GAAG,CAAC,aAAa,EAAE,CAAC;IAC7B,CAAC;8HApBQ,6BAA6B;oEAA7B,6BAA6B;YCTxC,AARF,gHAAe,oFAQN;;YART,qCAcC;;;ADGY,6BAA6B;IADzC,aAAa,CAAC,wBAAwB,EAAE,4BAA4B,CAAC;GACzD,6BAA6B,CAqBzC;;iFArBY,6BAA6B;cAPzC,SAAS;6BACI,KAAK,YACL,4BAA4B;;kFAK7B,6BAA6B","sourcesContent":["import { Component, ChangeDetectorRef } from '@angular/core';\nimport { BaseFormSectionComponent } from '@memberjunction/ng-base-forms';\nimport { RegisterClass } from '@memberjunction/global';\nimport { MJAIAgentEntityExtended } from '@memberjunction/ai-core-plus';\n\n/**\n * Form section component for Flow Agent types.\n * Simply wraps the FlowAgentEditorComponent from @memberjunction/ng-flow-editor\n * and passes through the agent ID and edit mode.\n */\n@Component({\n standalone: false,\n selector: 'mj-flow-agent-form-section',\n templateUrl: './flow-agent-form-section.component.html',\n styleUrls: ['./flow-agent-form-section.component.css']\n})\n@RegisterClass(BaseFormSectionComponent, 'AI Agents.FlowAgentSection')\nexport class FlowAgentFormSectionComponent extends BaseFormSectionComponent {\n /** Whether the flow editor is in full-screen mode */\n public IsFullScreen = false;\n\n get AgentID(): string | null {\n return this.record && 'ID' in this.record ? (this.record as MJAIAgentEntityExtended).ID : null;\n }\n\n constructor(private cdr: ChangeDetectorRef) {\n super();\n }\n\n public OnFlowSaved(): void {\n // Trigger form dirty-state refresh if needed\n this.cdr.detectChanges();\n }\n\n public OnFullScreenToggled(fullScreen: boolean): void {\n this.IsFullScreen = fullScreen;\n this.cdr.detectChanges();\n }\n}\n","@if (AgentID) {\n <mj-flow-agent-editor\n [AgentID]=\"AgentID\"\n [EditMode]=\"EditMode\"\n [FullScreen]=\"IsFullScreen\"\n (FlowSaved)=\"OnFlowSaved()\"\n (FullScreenToggled)=\"OnFullScreenToggled($event)\">\n </mj-flow-agent-editor>\n} @else {\n <mj-empty-state\n class=\"flow-empty-state\"\n Variant=\"warning\"\n Icon=\"fa-solid fa-circle-info\"\n Title=\"Save the agent first to configure the workflow.\" />\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"add-action-dialog.component.d.ts","sourceRoot":"","sources":["../../../../src/lib/custom/AIAgents/add-action-dialog.component.ts"],"names":[],"mappings":"AAAA,OAAO,EAAa,MAAM,EAAE,SAAS,EAAE,iBAAiB,EAAU,YAAY,EAAE,MAAM,eAAe,CAAC;AACtG,OAAO,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAC7C,OAAO,EAAE,OAAO,EAAE,eAAe,EAA2E,MAAM,MAAM,CAAC;AAEzH,OAAO,EAAE,cAAc,EAAE,sBAAsB,EAAE,MAAM,+BAA+B,CAAC;AAGvF,OAAO,EAAE,oBAAoB,EAAE,MAAM,+BAA+B,CAAC;;AACrE,MAAM,WAAW,gBAAgB;IAC/B,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,CAAC,EAAE,gBAAgB,EAAE,CAAC;IAC9B,QAAQ,CAAC,EAAE,OAAO,CAAC;CACpB;AAED,MAAM,WAAW,iBAAkB,SAAQ,cAAc;IACvD,QAAQ,EAAE,OAAO,CAAC;IAClB,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB;AAED;;;GAGG;AACH,qBAMa,wBAAyB,SAAQ,oBAAqB,YAAW,MAAM,EAAE,SAAS;IAyC3F,OAAO,CAAC,GAAG;IAtCb,OAAO,EAAE,MAAM,CAAM;IACrB,SAAS,EAAE,MAAM,CAAM;IACvB,iBAAiB,EAAE,MAAM,EAAE,CAAM;IAGjC,OAAO,CAAC,QAAQ,CAAuB;IAChC,MAAM,4BAAmC;IAGhD,WAAW,uCAAgD;IAC3D,WAAW,4CAAqD;IAChE,gBAAgB,uCAAgD;IAChE,aAAa,sCAA+C;IAC5D,gBAAgB,+BAA+C;IAC/D,UAAU,2BAAuC;IAGjD,aAAa,6BAAuB;IACpC,mBAAmB,0BAAsC;IACzD,SAAS,mCAAgD;IACzD,kBAAkB,cAAqB;IAGvC,IAAI,aAAa,IAAI,MAAM,CAE1B;IAED,IAAI,gBAAgB,IAAI,MAAM,CAE7B;IAED,IAAI,aAAa,IAAI,MAAM,CAE1B;IAES,WAAW,qBAA4B;gBAGvC,GAAG,EAAE,iBAAiB;IAIhC,QAAQ;IAMR,WAAW;YAKG,cAAc;YAad,wBAAwB;IAmCtC,OAAO,CAAC,iBAAiB;IAgDzB,OAAO,CAAC,eAAe;IAgBvB,OAAO,CAAC,cAAc;IAgBtB,OAAO,CAAC,aAAa;IA0BrB,OAAO,CAAC,mBAAmB;IAK3B,OAAO,CAAC,wBAAwB;IAgBhC,cAAc,CAAC,UAAU,EAAE,MAAM;IAIjC,cAAc;IAKd,qBAAqB,CAAC,MAAM,EAAE,iBAAiB;IA4B/C,WAAW;IAIX,aAAa,CAAC,MAAM,EAAE,iBAAiB,GAAG,MAAM;IAsBhD,MAAM;IAKN,kBAAkB;yCA3SP,wBAAwB;2CAAxB,wBAAwB;CAyTpC"}
1
+ {"version":3,"file":"add-action-dialog.component.d.ts","sourceRoot":"","sources":["../../../../src/lib/custom/AIAgents/add-action-dialog.component.ts"],"names":[],"mappings":"AAAA,OAAO,EAAa,MAAM,EAAE,SAAS,EAAE,iBAAiB,EAAU,YAAY,EAAE,MAAM,eAAe,CAAC;AACtG,OAAO,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAC7C,OAAO,EAAE,OAAO,EAAE,eAAe,EAA2E,MAAM,MAAM,CAAC;AAEzH,OAAO,EAAE,cAAc,EAAE,sBAAsB,EAAE,MAAM,+BAA+B,CAAC;AAGvF,OAAO,EAAE,oBAAoB,EAAE,MAAM,+BAA+B,CAAC;;AACrE,MAAM,WAAW,gBAAgB;IAC/B,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,CAAC,EAAE,gBAAgB,EAAE,CAAC;IAC9B,QAAQ,CAAC,EAAE,OAAO,CAAC;CACpB;AAED,MAAM,WAAW,iBAAkB,SAAQ,cAAc;IACvD,QAAQ,EAAE,OAAO,CAAC;IAClB,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB;AAED;;;GAGG;AACH,qBAMa,wBAAyB,SAAQ,oBAAqB,YAAW,MAAM,EAAE,SAAS;IAyC3F,OAAO,CAAC,GAAG;IAtCb,OAAO,EAAE,MAAM,CAAM;IACrB,SAAS,EAAE,MAAM,CAAM;IACvB,iBAAiB,EAAE,MAAM,EAAE,CAAM;IAGjC,OAAO,CAAC,QAAQ,CAAuB;IAChC,MAAM,4BAAmC;IAGhD,WAAW,uCAAgD;IAC3D,WAAW,4CAAqD;IAChE,gBAAgB,uCAAgD;IAChE,aAAa,sCAA+C;IAC5D,gBAAgB,+BAA+C;IAC/D,UAAU,2BAAuC;IAGjD,aAAa,6BAAuB;IACpC,mBAAmB,0BAAsC;IACzD,SAAS,mCAAgD;IACzD,kBAAkB,cAAqB;IAGvC,IAAI,aAAa,IAAI,MAAM,CAE1B;IAED,IAAI,gBAAgB,IAAI,MAAM,CAE7B;IAED,IAAI,aAAa,IAAI,MAAM,CAE1B;IAES,WAAW,qBAA4B;gBAGvC,GAAG,EAAE,iBAAiB;IAIhC,QAAQ;IAMR,WAAW;YAKG,cAAc;YAad,wBAAwB;IAmCtC,OAAO,CAAC,iBAAiB;IAgDzB,OAAO,CAAC,eAAe;IAgBvB,OAAO,CAAC,cAAc;IAgBtB,OAAO,CAAC,aAAa;IA0BrB,OAAO,CAAC,mBAAmB;IAK3B,OAAO,CAAC,wBAAwB;IAgBhC,cAAc,CAAC,UAAU,EAAE,MAAM;IAIjC,cAAc;IAKd,qBAAqB,CAAC,MAAM,EAAE,iBAAiB;IA+B/C,WAAW;IAKX,aAAa,CAAC,MAAM,EAAE,iBAAiB,GAAG,MAAM;IAsBhD,MAAM;IAKN,kBAAkB;yCA/SP,wBAAwB;2CAAxB,wBAAwB;CA6TpC"}