@memberjunction/ng-core-entity-forms 5.43.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 (259) 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/SearchScopes/searchscopeprovider-form.component.js +23 -24
  47. package/dist/lib/custom/SearchScopes/searchscopeprovider-form.component.js.map +1 -1
  48. package/dist/lib/custom/Templates/template-param-dialog.component.js +14 -23
  49. package/dist/lib/custom/Templates/template-param-dialog.component.js.map +1 -1
  50. package/dist/lib/custom/Tests/test-form.component.js +100 -130
  51. package/dist/lib/custom/Tests/test-form.component.js.map +1 -1
  52. package/dist/lib/custom/Tests/test-run-form.component.js +187 -205
  53. package/dist/lib/custom/Tests/test-run-form.component.js.map +1 -1
  54. package/dist/lib/custom/Tests/test-suite-form.component.d.ts +8 -0
  55. package/dist/lib/custom/Tests/test-suite-form.component.d.ts.map +1 -1
  56. package/dist/lib/custom/Tests/test-suite-form.component.js +412 -489
  57. package/dist/lib/custom/Tests/test-suite-form.component.js.map +1 -1
  58. package/dist/lib/custom/Tests/test-suite-run-form.component.js +100 -126
  59. package/dist/lib/custom/Tests/test-suite-run-form.component.js.map +1 -1
  60. package/dist/lib/custom/ai-agent-run/ai-agent-run-analytics.component.js +166 -184
  61. package/dist/lib/custom/ai-agent-run/ai-agent-run-analytics.component.js.map +1 -1
  62. package/dist/lib/custom/ai-agent-run/ai-agent-run-step-detail.component.js +42 -61
  63. package/dist/lib/custom/ai-agent-run/ai-agent-run-step-detail.component.js.map +1 -1
  64. package/dist/lib/custom/ai-agent-run/ai-agent-run-timeline.component.js +8 -17
  65. package/dist/lib/custom/ai-agent-run/ai-agent-run-timeline.component.js.map +1 -1
  66. package/dist/lib/custom/ai-agent-run/ai-agent-run.component.d.ts +0 -2
  67. package/dist/lib/custom/ai-agent-run/ai-agent-run.component.d.ts.map +1 -1
  68. package/dist/lib/custom/ai-agent-run/ai-agent-run.component.js +183 -188
  69. package/dist/lib/custom/ai-agent-run/ai-agent-run.component.js.map +1 -1
  70. package/dist/lib/custom/ai-agent-run/flow/agent-run-flow.component.d.ts +108 -0
  71. package/dist/lib/custom/ai-agent-run/flow/agent-run-flow.component.d.ts.map +1 -0
  72. package/dist/lib/custom/ai-agent-run/flow/agent-run-flow.component.js +665 -0
  73. package/dist/lib/custom/ai-agent-run/flow/agent-run-flow.component.js.map +1 -0
  74. package/dist/lib/custom/ai-agent-run/flow/agent-run-flow.model.d.ts +94 -0
  75. package/dist/lib/custom/ai-agent-run/flow/agent-run-flow.model.d.ts.map +1 -0
  76. package/dist/lib/custom/ai-agent-run/flow/agent-run-flow.model.js +257 -0
  77. package/dist/lib/custom/ai-agent-run/flow/agent-run-flow.model.js.map +1 -0
  78. package/dist/lib/custom/ai-agent-run/flow/constellation.component.d.ts +38 -0
  79. package/dist/lib/custom/ai-agent-run/flow/constellation.component.d.ts.map +1 -0
  80. package/dist/lib/custom/ai-agent-run/flow/constellation.component.js +200 -0
  81. package/dist/lib/custom/ai-agent-run/flow/constellation.component.js.map +1 -0
  82. package/dist/lib/custom/ai-agent-run/flow/flame-cascade.component.d.ts +44 -0
  83. package/dist/lib/custom/ai-agent-run/flow/flame-cascade.component.d.ts.map +1 -0
  84. package/dist/lib/custom/ai-agent-run/flow/flame-cascade.component.js +180 -0
  85. package/dist/lib/custom/ai-agent-run/flow/flame-cascade.component.js.map +1 -0
  86. package/dist/lib/custom/ai-agent-run/flow/flow-svg.util.d.ts +12 -0
  87. package/dist/lib/custom/ai-agent-run/flow/flow-svg.util.d.ts.map +1 -0
  88. package/dist/lib/custom/ai-agent-run/flow/flow-svg.util.js +46 -0
  89. package/dist/lib/custom/ai-agent-run/flow/flow-svg.util.js.map +1 -0
  90. package/dist/lib/custom/ai-agent-run/flow/flowchart.component.d.ts +64 -0
  91. package/dist/lib/custom/ai-agent-run/flow/flowchart.component.d.ts.map +1 -0
  92. package/dist/lib/custom/ai-agent-run/flow/flowchart.component.js +267 -0
  93. package/dist/lib/custom/ai-agent-run/flow/flowchart.component.js.map +1 -0
  94. package/dist/lib/custom/ai-agent-run/flow/pan-zoom.d.ts +53 -0
  95. package/dist/lib/custom/ai-agent-run/flow/pan-zoom.d.ts.map +1 -0
  96. package/dist/lib/custom/ai-agent-run/flow/pan-zoom.js +111 -0
  97. package/dist/lib/custom/ai-agent-run/flow/pan-zoom.js.map +1 -0
  98. package/dist/lib/custom/ai-agent-run/flow/subway-lines.component.d.ts +42 -0
  99. package/dist/lib/custom/ai-agent-run/flow/subway-lines.component.d.ts.map +1 -0
  100. package/dist/lib/custom/ai-agent-run/flow/subway-lines.component.js +193 -0
  101. package/dist/lib/custom/ai-agent-run/flow/subway-lines.component.js.map +1 -0
  102. package/dist/lib/custom/custom-forms.module.d.ts +58 -51
  103. package/dist/lib/custom/custom-forms.module.d.ts.map +1 -1
  104. package/dist/lib/custom/custom-forms.module.js +52 -13
  105. package/dist/lib/custom/custom-forms.module.js.map +1 -1
  106. package/dist/lib/custom/shared/entity-selector-dialog.component.d.ts +2 -0
  107. package/dist/lib/custom/shared/entity-selector-dialog.component.d.ts.map +1 -1
  108. package/dist/lib/custom/shared/entity-selector-dialog.component.js +25 -25
  109. package/dist/lib/custom/shared/entity-selector-dialog.component.js.map +1 -1
  110. package/dist/lib/generated/Entities/MJAIAgent/mjaiagent.form.component.d.ts.map +1 -1
  111. package/dist/lib/generated/Entities/MJAIAgent/mjaiagent.form.component.js +280 -216
  112. package/dist/lib/generated/Entities/MJAIAgent/mjaiagent.form.component.js.map +1 -1
  113. package/dist/lib/generated/Entities/MJAIAgentChannel/mjaiagentchannel.form.component.js +25 -21
  114. package/dist/lib/generated/Entities/MJAIAgentChannel/mjaiagentchannel.form.component.js.map +1 -1
  115. package/dist/lib/generated/Entities/MJAIAgentRun/mjaiagentrun.form.component.d.ts.map +1 -1
  116. package/dist/lib/generated/Entities/MJAIAgentRun/mjaiagentrun.form.component.js +68 -14
  117. package/dist/lib/generated/Entities/MJAIAgentRun/mjaiagentrun.form.component.js.map +1 -1
  118. package/dist/lib/generated/Entities/MJAIAgentSession/mjaiagentsession.form.component.d.ts.map +1 -1
  119. package/dist/lib/generated/Entities/MJAIAgentSession/mjaiagentsession.form.component.js +44 -32
  120. package/dist/lib/generated/Entities/MJAIAgentSession/mjaiagentsession.form.component.js.map +1 -1
  121. package/dist/lib/generated/Entities/MJAIAgentSkill/mjaiagentskill.form.component.d.ts +10 -0
  122. package/dist/lib/generated/Entities/MJAIAgentSkill/mjaiagentskill.form.component.d.ts.map +1 -0
  123. package/dist/lib/generated/Entities/MJAIAgentSkill/mjaiagentskill.form.component.js +66 -0
  124. package/dist/lib/generated/Entities/MJAIAgentSkill/mjaiagentskill.form.component.js.map +1 -0
  125. package/dist/lib/generated/Entities/MJAIPrompt/mjaiprompt.form.component.d.ts.map +1 -1
  126. package/dist/lib/generated/Entities/MJAIPrompt/mjaiprompt.form.component.js +55 -19
  127. package/dist/lib/generated/Entities/MJAIPrompt/mjaiprompt.form.component.js.map +1 -1
  128. package/dist/lib/generated/Entities/MJAIPromptRun/mjaipromptrun.form.component.d.ts.map +1 -1
  129. package/dist/lib/generated/Entities/MJAIPromptRun/mjaipromptrun.form.component.js +28 -10
  130. package/dist/lib/generated/Entities/MJAIPromptRun/mjaipromptrun.form.component.js.map +1 -1
  131. package/dist/lib/generated/Entities/MJAISkill/mjaiskill.form.component.d.ts +10 -0
  132. package/dist/lib/generated/Entities/MJAISkill/mjaiskill.form.component.d.ts.map +1 -0
  133. package/dist/lib/generated/Entities/MJAISkill/mjaiskill.form.component.js +167 -0
  134. package/dist/lib/generated/Entities/MJAISkill/mjaiskill.form.component.js.map +1 -0
  135. package/dist/lib/generated/Entities/MJAISkillAction/mjaiskillaction.form.component.d.ts +10 -0
  136. package/dist/lib/generated/Entities/MJAISkillAction/mjaiskillaction.form.component.d.ts.map +1 -0
  137. package/dist/lib/generated/Entities/MJAISkillAction/mjaiskillaction.form.component.js +64 -0
  138. package/dist/lib/generated/Entities/MJAISkillAction/mjaiskillaction.form.component.js.map +1 -0
  139. package/dist/lib/generated/Entities/MJAISkillPermission/mjaiskillpermission.form.component.d.ts +10 -0
  140. package/dist/lib/generated/Entities/MJAISkillPermission/mjaiskillpermission.form.component.d.ts.map +1 -0
  141. package/dist/lib/generated/Entities/MJAISkillPermission/mjaiskillpermission.form.component.js +82 -0
  142. package/dist/lib/generated/Entities/MJAISkillPermission/mjaiskillpermission.form.component.js.map +1 -0
  143. package/dist/lib/generated/Entities/MJAISkillSubAgent/mjaiskillsubagent.form.component.d.ts +10 -0
  144. package/dist/lib/generated/Entities/MJAISkillSubAgent/mjaiskillsubagent.form.component.d.ts.map +1 -0
  145. package/dist/lib/generated/Entities/MJAISkillSubAgent/mjaiskillsubagent.form.component.js +64 -0
  146. package/dist/lib/generated/Entities/MJAISkillSubAgent/mjaiskillsubagent.form.component.js.map +1 -0
  147. package/dist/lib/generated/Entities/MJAction/mjaction.form.component.d.ts.map +1 -1
  148. package/dist/lib/generated/Entities/MJAction/mjaction.form.component.js +35 -17
  149. package/dist/lib/generated/Entities/MJAction/mjaction.form.component.js.map +1 -1
  150. package/dist/lib/generated/Entities/MJApplication/mjapplication.form.component.d.ts.map +1 -1
  151. package/dist/lib/generated/Entities/MJApplication/mjapplication.form.component.js +59 -51
  152. package/dist/lib/generated/Entities/MJApplication/mjapplication.form.component.js.map +1 -1
  153. package/dist/lib/generated/Entities/MJCollection/mjcollection.form.component.d.ts.map +1 -1
  154. package/dist/lib/generated/Entities/MJCollection/mjcollection.form.component.js +25 -7
  155. package/dist/lib/generated/Entities/MJCollection/mjcollection.form.component.js.map +1 -1
  156. package/dist/lib/generated/Entities/MJCollectionArtifact/mjcollectionartifact.form.component.js +11 -7
  157. package/dist/lib/generated/Entities/MJCollectionArtifact/mjcollectionartifact.form.component.js.map +1 -1
  158. package/dist/lib/generated/Entities/MJConversation/mjconversation.form.component.d.ts.map +1 -1
  159. package/dist/lib/generated/Entities/MJConversation/mjconversation.form.component.js +56 -46
  160. package/dist/lib/generated/Entities/MJConversation/mjconversation.form.component.js.map +1 -1
  161. package/dist/lib/generated/Entities/MJConversationDetail/mjconversationdetail.form.component.d.ts.map +1 -1
  162. package/dist/lib/generated/Entities/MJConversationDetail/mjconversationdetail.form.component.js +73 -59
  163. package/dist/lib/generated/Entities/MJConversationDetail/mjconversationdetail.form.component.js.map +1 -1
  164. package/dist/lib/generated/Entities/MJDuplicateRunDetailMatch/mjduplicaterundetailmatch.form.component.d.ts.map +1 -1
  165. package/dist/lib/generated/Entities/MJDuplicateRunDetailMatch/mjduplicaterundetailmatch.form.component.js +24 -4
  166. package/dist/lib/generated/Entities/MJDuplicateRunDetailMatch/mjduplicaterundetailmatch.form.component.js.map +1 -1
  167. package/dist/lib/generated/Entities/MJEntity/mjentity.form.component.d.ts.map +1 -1
  168. package/dist/lib/generated/Entities/MJEntity/mjentity.form.component.js +137 -87
  169. package/dist/lib/generated/Entities/MJEntity/mjentity.form.component.js.map +1 -1
  170. package/dist/lib/generated/Entities/MJEntityDocument/mjentitydocument.form.component.d.ts.map +1 -1
  171. package/dist/lib/generated/Entities/MJEntityDocument/mjentitydocument.form.component.js +47 -29
  172. package/dist/lib/generated/Entities/MJEntityDocument/mjentitydocument.form.component.js.map +1 -1
  173. package/dist/lib/generated/Entities/MJExperiment/mjexperiment.form.component.d.ts +10 -0
  174. package/dist/lib/generated/Entities/MJExperiment/mjexperiment.form.component.d.ts.map +1 -0
  175. package/dist/lib/generated/Entities/MJExperiment/mjexperiment.form.component.js +99 -0
  176. package/dist/lib/generated/Entities/MJExperiment/mjexperiment.form.component.js.map +1 -0
  177. package/dist/lib/generated/Entities/MJExperimentSession/mjexperimentsession.form.component.d.ts +10 -0
  178. package/dist/lib/generated/Entities/MJExperimentSession/mjexperimentsession.form.component.d.ts.map +1 -0
  179. package/dist/lib/generated/Entities/MJExperimentSession/mjexperimentsession.form.component.js +101 -0
  180. package/dist/lib/generated/Entities/MJExperimentSession/mjexperimentsession.form.component.js.map +1 -0
  181. package/dist/lib/generated/Entities/MJExperimentSessionIteration/mjexperimentsessioniteration.form.component.d.ts +10 -0
  182. package/dist/lib/generated/Entities/MJExperimentSessionIteration/mjexperimentsessioniteration.form.component.d.ts.map +1 -0
  183. package/dist/lib/generated/Entities/MJExperimentSessionIteration/mjexperimentsessioniteration.form.component.js +115 -0
  184. package/dist/lib/generated/Entities/MJExperimentSessionIteration/mjexperimentsessioniteration.form.component.js.map +1 -0
  185. package/dist/lib/generated/Entities/MJFile/mjfile.form.component.d.ts.map +1 -1
  186. package/dist/lib/generated/Entities/MJFile/mjfile.form.component.js +63 -9
  187. package/dist/lib/generated/Entities/MJFile/mjfile.form.component.js.map +1 -1
  188. package/dist/lib/generated/Entities/MJFileStorageProvider/mjfilestorageprovider.form.component.d.ts.map +1 -1
  189. package/dist/lib/generated/Entities/MJFileStorageProvider/mjfilestorageprovider.form.component.js +32 -14
  190. package/dist/lib/generated/Entities/MJFileStorageProvider/mjfilestorageprovider.form.component.js.map +1 -1
  191. package/dist/lib/generated/Entities/MJMLAlgorithm/mjmlalgorithm.form.component.d.ts +10 -0
  192. package/dist/lib/generated/Entities/MJMLAlgorithm/mjmlalgorithm.form.component.d.ts.map +1 -0
  193. package/dist/lib/generated/Entities/MJMLAlgorithm/mjmlalgorithm.form.component.js +161 -0
  194. package/dist/lib/generated/Entities/MJMLAlgorithm/mjmlalgorithm.form.component.js.map +1 -0
  195. package/dist/lib/generated/Entities/MJMLAlgorithmUseCase/mjmlalgorithmusecase.form.component.d.ts +10 -0
  196. package/dist/lib/generated/Entities/MJMLAlgorithmUseCase/mjmlalgorithmusecase.form.component.d.ts.map +1 -0
  197. package/dist/lib/generated/Entities/MJMLAlgorithmUseCase/mjmlalgorithmusecase.form.component.js +89 -0
  198. package/dist/lib/generated/Entities/MJMLAlgorithmUseCase/mjmlalgorithmusecase.form.component.js.map +1 -0
  199. package/dist/lib/generated/Entities/MJMLAlgorithmUseCaseRanking/mjmlalgorithmusecaseranking.form.component.d.ts +10 -0
  200. package/dist/lib/generated/Entities/MJMLAlgorithmUseCaseRanking/mjmlalgorithmusecaseranking.form.component.d.ts.map +1 -0
  201. package/dist/lib/generated/Entities/MJMLAlgorithmUseCaseRanking/mjmlalgorithmusecaseranking.form.component.js +76 -0
  202. package/dist/lib/generated/Entities/MJMLAlgorithmUseCaseRanking/mjmlalgorithmusecaseranking.form.component.js.map +1 -0
  203. package/dist/lib/generated/Entities/MJMLModel/mjmlmodel.form.component.d.ts +10 -0
  204. package/dist/lib/generated/Entities/MJMLModel/mjmlmodel.form.component.d.ts.map +1 -0
  205. package/dist/lib/generated/Entities/MJMLModel/mjmlmodel.form.component.js +141 -0
  206. package/dist/lib/generated/Entities/MJMLModel/mjmlmodel.form.component.js.map +1 -0
  207. package/dist/lib/generated/Entities/MJMLModelScoringBinding/mjmlmodelscoringbinding.form.component.d.ts +10 -0
  208. package/dist/lib/generated/Entities/MJMLModelScoringBinding/mjmlmodelscoringbinding.form.component.d.ts.map +1 -0
  209. package/dist/lib/generated/Entities/MJMLModelScoringBinding/mjmlmodelscoringbinding.form.component.js +88 -0
  210. package/dist/lib/generated/Entities/MJMLModelScoringBinding/mjmlmodelscoringbinding.form.component.js.map +1 -0
  211. package/dist/lib/generated/Entities/MJMLTrainingPipeline/mjmltrainingpipeline.form.component.d.ts +10 -0
  212. package/dist/lib/generated/Entities/MJMLTrainingPipeline/mjmltrainingpipeline.form.component.d.ts.map +1 -0
  213. package/dist/lib/generated/Entities/MJMLTrainingPipeline/mjmltrainingpipeline.form.component.js +143 -0
  214. package/dist/lib/generated/Entities/MJMLTrainingPipeline/mjmltrainingpipeline.form.component.js.map +1 -0
  215. package/dist/lib/generated/Entities/MJMLTrainingRun/mjmltrainingrun.form.component.d.ts +10 -0
  216. package/dist/lib/generated/Entities/MJMLTrainingRun/mjmltrainingrun.form.component.d.ts.map +1 -0
  217. package/dist/lib/generated/Entities/MJMLTrainingRun/mjmltrainingrun.form.component.js +110 -0
  218. package/dist/lib/generated/Entities/MJMLTrainingRun/mjmltrainingrun.form.component.js.map +1 -0
  219. package/dist/lib/generated/Entities/MJOpenApp/mjopenapp.form.component.d.ts.map +1 -1
  220. package/dist/lib/generated/Entities/MJOpenApp/mjopenapp.form.component.js +54 -24
  221. package/dist/lib/generated/Entities/MJOpenApp/mjopenapp.form.component.js.map +1 -1
  222. package/dist/lib/generated/Entities/MJRecordProcess/mjrecordprocess.form.component.d.ts.map +1 -1
  223. package/dist/lib/generated/Entities/MJRecordProcess/mjrecordprocess.form.component.js +24 -6
  224. package/dist/lib/generated/Entities/MJRecordProcess/mjrecordprocess.form.component.js.map +1 -1
  225. package/dist/lib/generated/Entities/MJRole/mjrole.form.component.d.ts.map +1 -1
  226. package/dist/lib/generated/Entities/MJRole/mjrole.form.component.js +36 -18
  227. package/dist/lib/generated/Entities/MJRole/mjrole.form.component.js.map +1 -1
  228. package/dist/lib/generated/Entities/MJSchemaInfo/mjschemainfo.form.component.js +8 -6
  229. package/dist/lib/generated/Entities/MJSchemaInfo/mjschemainfo.form.component.js.map +1 -1
  230. package/dist/lib/generated/Entities/MJScopedPromptPart/mjscopedpromptpart.form.component.d.ts +10 -0
  231. package/dist/lib/generated/Entities/MJScopedPromptPart/mjscopedpromptpart.form.component.d.ts.map +1 -0
  232. package/dist/lib/generated/Entities/MJScopedPromptPart/mjscopedpromptpart.form.component.js +78 -0
  233. package/dist/lib/generated/Entities/MJScopedPromptPart/mjscopedpromptpart.form.component.js.map +1 -0
  234. package/dist/lib/generated/Entities/MJUser/mjuser.form.component.d.ts.map +1 -1
  235. package/dist/lib/generated/Entities/MJUser/mjuser.form.component.js +145 -109
  236. package/dist/lib/generated/Entities/MJUser/mjuser.form.component.js.map +1 -1
  237. package/dist/lib/generated/generated-forms.module.d.ts +356 -335
  238. package/dist/lib/generated/generated-forms.module.d.ts.map +1 -1
  239. package/dist/lib/generated/generated-forms.module.js +304 -226
  240. package/dist/lib/generated/generated-forms.module.js.map +1 -1
  241. package/dist/lib/panels/ai-agents/agent-realtime.panel.js +44 -44
  242. package/dist/lib/panels/ai-agents/agent-realtime.panel.js.map +1 -1
  243. package/dist/lib/panels/ai-skill-sharing/ai-skill-sharing-panel.component.d.ts +43 -0
  244. package/dist/lib/panels/ai-skill-sharing/ai-skill-sharing-panel.component.d.ts.map +1 -0
  245. package/dist/lib/panels/ai-skill-sharing/ai-skill-sharing-panel.component.js +240 -0
  246. package/dist/lib/panels/ai-skill-sharing/ai-skill-sharing-panel.component.js.map +1 -0
  247. package/dist/lib/panels/model-predictions/model-prediction.logic.d.ts +69 -0
  248. package/dist/lib/panels/model-predictions/model-prediction.logic.d.ts.map +1 -0
  249. package/dist/lib/panels/model-predictions/model-prediction.logic.js +130 -0
  250. package/dist/lib/panels/model-predictions/model-prediction.logic.js.map +1 -0
  251. package/dist/lib/panels/model-predictions/model-prediction.panel.d.ts +83 -0
  252. package/dist/lib/panels/model-predictions/model-prediction.panel.d.ts.map +1 -0
  253. package/dist/lib/panels/model-predictions/model-prediction.panel.js +293 -0
  254. package/dist/lib/panels/model-predictions/model-prediction.panel.js.map +1 -0
  255. package/package.json +38 -37
  256. package/dist/lib/custom/ai-agent-run/ai-agent-run-visualization.component.d.ts +0 -82
  257. package/dist/lib/custom/ai-agent-run/ai-agent-run-visualization.component.d.ts.map +0 -1
  258. package/dist/lib/custom/ai-agent-run/ai-agent-run-visualization.component.js +0 -1033
  259. package/dist/lib/custom/ai-agent-run/ai-agent-run-visualization.component.js.map +0 -1
@@ -10,29 +10,29 @@ import { RegisterClassEx, UUIDsEqual } from '@memberjunction/global';
10
10
  import { BaseFormPanel } from '@memberjunction/ng-base-forms';
11
11
  import { SharedService } from '@memberjunction/ng-shared';
12
12
  import * as i0 from "@angular/core";
13
- import * as i1 from "@memberjunction/ng-base-forms";
14
- import * as i2 from "@memberjunction/ng-shared-generic";
13
+ import * as i1 from "@memberjunction/ng-ui-components";
14
+ import * as i2 from "@memberjunction/ng-base-forms";
15
+ import * as i3 from "@memberjunction/ng-shared-generic";
15
16
  const _forTrack0 = ($index, $item) => $item.ID;
16
17
  function AgentRealtimePanel_Conditional_1_Template(rf, ctx) { if (rf & 1) {
17
18
  i0.ɵɵelement(0, "mj-loading", 1);
18
19
  } }
19
20
  function AgentRealtimePanel_Conditional_2_Template(rf, ctx) { if (rf & 1) {
20
- i0.ɵɵelementStart(0, "div", 2);
21
- i0.ɵɵelement(1, "i", 3);
22
- i0.ɵɵtext(2);
21
+ i0.ɵɵelementStart(0, "mj-alert", 2);
22
+ i0.ɵɵtext(1);
23
23
  i0.ɵɵelementEnd();
24
24
  } if (rf & 2) {
25
25
  const ctx_r0 = i0.ɵɵnextContext();
26
- i0.ɵɵadvance(2);
27
- i0.ɵɵtextInterpolate1(" ", ctx_r0.LoadError);
26
+ i0.ɵɵadvance();
27
+ i0.ɵɵtextInterpolate(ctx_r0.LoadError);
28
28
  } }
29
29
  function AgentRealtimePanel_Conditional_3_Conditional_9_Template(rf, ctx) { if (rf & 1) {
30
- i0.ɵɵelementStart(0, "div", 9);
30
+ i0.ɵɵelementStart(0, "div", 8);
31
31
  i0.ɵɵtext(1, "No co-agent pairings reference this agent.");
32
32
  i0.ɵɵelementEnd();
33
33
  } }
34
34
  function AgentRealtimePanel_Conditional_3_Conditional_10_For_2_Conditional_6_Template(rf, ctx) { if (rf & 1) {
35
- i0.ɵɵelementStart(0, "span", 21);
35
+ i0.ɵɵelementStart(0, "span", 20);
36
36
  i0.ɵɵtext(1, "voices");
37
37
  i0.ɵɵelementEnd();
38
38
  i0.ɵɵtext(2);
@@ -43,7 +43,7 @@ function AgentRealtimePanel_Conditional_3_Conditional_10_For_2_Conditional_6_Tem
43
43
  i0.ɵɵtextInterpolate1(" ", ctx_r0.OtherAgentName(p_r3), " ");
44
44
  } }
45
45
  function AgentRealtimePanel_Conditional_3_Conditional_10_For_2_Conditional_7_Template(rf, ctx) { if (rf & 1) {
46
- i0.ɵɵelementStart(0, "span", 21);
46
+ i0.ɵɵelementStart(0, "span", 20);
47
47
  i0.ɵɵtext(1, "voiced by");
48
48
  i0.ɵɵelementEnd();
49
49
  i0.ɵɵtext(2);
@@ -55,26 +55,26 @@ function AgentRealtimePanel_Conditional_3_Conditional_10_For_2_Conditional_7_Tem
55
55
  } }
56
56
  function AgentRealtimePanel_Conditional_3_Conditional_10_For_2_Conditional_10_Template(rf, ctx) { if (rf & 1) {
57
57
  i0.ɵɵtext(0, " \u00B7 ");
58
- i0.ɵɵelementStart(1, "span", 22);
58
+ i0.ɵɵelementStart(1, "span", 21);
59
59
  i0.ɵɵtext(2, "default");
60
60
  i0.ɵɵelementEnd();
61
61
  } }
62
62
  function AgentRealtimePanel_Conditional_3_Conditional_10_For_2_Template(rf, ctx) { if (rf & 1) {
63
63
  const _r2 = i0.ɵɵgetCurrentView();
64
- i0.ɵɵelementStart(0, "button", 15);
64
+ i0.ɵɵelementStart(0, "button", 14);
65
65
  i0.ɵɵlistener("click", function AgentRealtimePanel_Conditional_3_Conditional_10_For_2_Template_button_click_0_listener() { const p_r3 = i0.ɵɵrestoreView(_r2).$implicit; const ctx_r0 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r0.OpenPairing(p_r3)); });
66
- i0.ɵɵelementStart(1, "span", 16);
66
+ i0.ɵɵelementStart(1, "span", 15);
67
67
  i0.ɵɵelement(2, "i");
68
68
  i0.ɵɵelementEnd();
69
- i0.ɵɵelementStart(3, "span", 17)(4, "span", 18);
69
+ i0.ɵɵelementStart(3, "span", 16)(4, "span", 17);
70
70
  i0.ɵɵtext(5);
71
71
  i0.ɵɵconditionalCreate(6, AgentRealtimePanel_Conditional_3_Conditional_10_For_2_Conditional_6_Template, 3, 1)(7, AgentRealtimePanel_Conditional_3_Conditional_10_For_2_Conditional_7_Template, 3, 1);
72
72
  i0.ɵɵelementEnd();
73
- i0.ɵɵelementStart(8, "span", 19);
73
+ i0.ɵɵelementStart(8, "span", 18);
74
74
  i0.ɵɵtext(9);
75
75
  i0.ɵɵconditionalCreate(10, AgentRealtimePanel_Conditional_3_Conditional_10_For_2_Conditional_10_Template, 3, 0);
76
76
  i0.ɵɵelementEnd()();
77
- i0.ɵɵelementStart(11, "span", 20);
77
+ i0.ɵɵelementStart(11, "span", 19);
78
78
  i0.ɵɵtext(12);
79
79
  i0.ɵɵelementEnd()();
80
80
  } if (rf & 2) {
@@ -96,8 +96,8 @@ function AgentRealtimePanel_Conditional_3_Conditional_10_For_2_Template(rf, ctx)
96
96
  i0.ɵɵtextInterpolate(p_r3.Status);
97
97
  } }
98
98
  function AgentRealtimePanel_Conditional_3_Conditional_10_Template(rf, ctx) { if (rf & 1) {
99
- i0.ɵɵelementStart(0, "div", 10);
100
- i0.ɵɵrepeaterCreate(1, AgentRealtimePanel_Conditional_3_Conditional_10_For_2_Template, 13, 10, "button", 14, _forTrack0);
99
+ i0.ɵɵelementStart(0, "div", 9);
100
+ i0.ɵɵrepeaterCreate(1, AgentRealtimePanel_Conditional_3_Conditional_10_For_2_Template, 13, 10, "button", 13, _forTrack0);
101
101
  i0.ɵɵelementEnd();
102
102
  } if (rf & 2) {
103
103
  const ctx_r0 = i0.ɵɵnextContext(2);
@@ -105,24 +105,24 @@ function AgentRealtimePanel_Conditional_3_Conditional_10_Template(rf, ctx) { if
105
105
  i0.ɵɵrepeater(ctx_r0.Pairings);
106
106
  } }
107
107
  function AgentRealtimePanel_Conditional_3_Conditional_18_Template(rf, ctx) { if (rf & 1) {
108
- i0.ɵɵelementStart(0, "div", 9);
108
+ i0.ɵɵelementStart(0, "div", 8);
109
109
  i0.ɵɵtext(1, "No bridge identities provisioned for this agent.");
110
110
  i0.ɵɵelementEnd();
111
111
  } }
112
112
  function AgentRealtimePanel_Conditional_3_Conditional_19_For_2_Template(rf, ctx) { if (rf & 1) {
113
113
  const _r4 = i0.ɵɵgetCurrentView();
114
- i0.ɵɵelementStart(0, "button", 15);
114
+ i0.ɵɵelementStart(0, "button", 14);
115
115
  i0.ɵɵlistener("click", function AgentRealtimePanel_Conditional_3_Conditional_19_For_2_Template_button_click_0_listener() { const i_r5 = i0.ɵɵrestoreView(_r4).$implicit; const ctx_r0 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r0.OpenIdentity(i_r5)); });
116
- i0.ɵɵelementStart(1, "span", 16);
116
+ i0.ɵɵelementStart(1, "span", 15);
117
117
  i0.ɵɵelement(2, "i");
118
118
  i0.ɵɵelementEnd();
119
- i0.ɵɵelementStart(3, "span", 17)(4, "span", 18);
119
+ i0.ɵɵelementStart(3, "span", 16)(4, "span", 17);
120
120
  i0.ɵɵtext(5);
121
121
  i0.ɵɵelementEnd();
122
- i0.ɵɵelementStart(6, "span", 19);
122
+ i0.ɵɵelementStart(6, "span", 18);
123
123
  i0.ɵɵtext(7);
124
124
  i0.ɵɵelementEnd()();
125
- i0.ɵɵelementStart(8, "span", 20);
125
+ i0.ɵɵelementStart(8, "span", 19);
126
126
  i0.ɵɵtext(9);
127
127
  i0.ɵɵelementEnd()();
128
128
  } if (rf & 2) {
@@ -140,8 +140,8 @@ function AgentRealtimePanel_Conditional_3_Conditional_19_For_2_Template(rf, ctx)
140
140
  i0.ɵɵtextInterpolate(i_r5.IsActive ? "Active" : "Inactive");
141
141
  } }
142
142
  function AgentRealtimePanel_Conditional_3_Conditional_19_Template(rf, ctx) { if (rf & 1) {
143
- i0.ɵɵelementStart(0, "div", 10);
144
- i0.ɵɵrepeaterCreate(1, AgentRealtimePanel_Conditional_3_Conditional_19_For_2_Template, 10, 9, "button", 14, _forTrack0);
143
+ i0.ɵɵelementStart(0, "div", 9);
144
+ i0.ɵɵrepeaterCreate(1, AgentRealtimePanel_Conditional_3_Conditional_19_For_2_Template, 10, 9, "button", 13, _forTrack0);
145
145
  i0.ɵɵelementEnd();
146
146
  } if (rf & 2) {
147
147
  const ctx_r0 = i0.ɵɵnextContext(2);
@@ -149,7 +149,7 @@ function AgentRealtimePanel_Conditional_3_Conditional_19_Template(rf, ctx) { if
149
149
  i0.ɵɵrepeater(ctx_r0.Identities);
150
150
  } }
151
151
  function AgentRealtimePanel_Conditional_3_Conditional_25_Template(rf, ctx) { if (rf & 1) {
152
- i0.ɵɵelementStart(0, "pre", 13);
152
+ i0.ɵɵelementStart(0, "pre", 12);
153
153
  i0.ɵɵtext(1);
154
154
  i0.ɵɵelementEnd();
155
155
  } if (rf & 2) {
@@ -158,40 +158,40 @@ function AgentRealtimePanel_Conditional_3_Conditional_25_Template(rf, ctx) { if
158
158
  i0.ɵɵtextInterpolate(ctx_r0.PrettyTypeConfiguration);
159
159
  } }
160
160
  function AgentRealtimePanel_Conditional_3_Conditional_26_Template(rf, ctx) { if (rf & 1) {
161
- i0.ɵɵelementStart(0, "div", 9);
161
+ i0.ɵɵelementStart(0, "div", 8);
162
162
  i0.ɵɵtext(1, "No type configuration set \u2014 this agent uses its type's defaults.");
163
163
  i0.ɵɵelementEnd();
164
164
  } }
165
165
  function AgentRealtimePanel_Conditional_3_Template(rf, ctx) { if (rf & 1) {
166
- i0.ɵɵelementStart(0, "p", 4);
166
+ i0.ɵɵelementStart(0, "p", 3);
167
167
  i0.ɵɵtext(1, " A one-place summary of this agent's realtime / bridge setup \u2014 its co-agent pairings, its type-level realtime configuration, and the bridge identities that route inbound calls and invites to it. ");
168
168
  i0.ɵɵelementEnd();
169
- i0.ɵɵelementStart(2, "div", 5)(3, "div", 6);
170
- i0.ɵɵelement(4, "i", 7);
169
+ i0.ɵɵelementStart(2, "div", 4)(3, "div", 5);
170
+ i0.ɵɵelement(4, "i", 6);
171
171
  i0.ɵɵelementStart(5, "span");
172
172
  i0.ɵɵtext(6, "Co-agent pairings");
173
173
  i0.ɵɵelementEnd();
174
- i0.ɵɵelementStart(7, "span", 8);
174
+ i0.ɵɵelementStart(7, "span", 7);
175
175
  i0.ɵɵtext(8);
176
176
  i0.ɵɵelementEnd()();
177
- i0.ɵɵconditionalCreate(9, AgentRealtimePanel_Conditional_3_Conditional_9_Template, 2, 0, "div", 9)(10, AgentRealtimePanel_Conditional_3_Conditional_10_Template, 3, 0, "div", 10);
177
+ i0.ɵɵconditionalCreate(9, AgentRealtimePanel_Conditional_3_Conditional_9_Template, 2, 0, "div", 8)(10, AgentRealtimePanel_Conditional_3_Conditional_10_Template, 3, 0, "div", 9);
178
178
  i0.ɵɵelementEnd();
179
- i0.ɵɵelementStart(11, "div", 5)(12, "div", 6);
180
- i0.ɵɵelement(13, "i", 11);
179
+ i0.ɵɵelementStart(11, "div", 4)(12, "div", 5);
180
+ i0.ɵɵelement(13, "i", 10);
181
181
  i0.ɵɵelementStart(14, "span");
182
182
  i0.ɵɵtext(15, "Bridge identities");
183
183
  i0.ɵɵelementEnd();
184
- i0.ɵɵelementStart(16, "span", 8);
184
+ i0.ɵɵelementStart(16, "span", 7);
185
185
  i0.ɵɵtext(17);
186
186
  i0.ɵɵelementEnd()();
187
- i0.ɵɵconditionalCreate(18, AgentRealtimePanel_Conditional_3_Conditional_18_Template, 2, 0, "div", 9)(19, AgentRealtimePanel_Conditional_3_Conditional_19_Template, 3, 0, "div", 10);
187
+ i0.ɵɵconditionalCreate(18, AgentRealtimePanel_Conditional_3_Conditional_18_Template, 2, 0, "div", 8)(19, AgentRealtimePanel_Conditional_3_Conditional_19_Template, 3, 0, "div", 9);
188
188
  i0.ɵɵelementEnd();
189
- i0.ɵɵelementStart(20, "div", 5)(21, "div", 6);
190
- i0.ɵɵelement(22, "i", 12);
189
+ i0.ɵɵelementStart(20, "div", 4)(21, "div", 5);
190
+ i0.ɵɵelement(22, "i", 11);
191
191
  i0.ɵɵelementStart(23, "span");
192
192
  i0.ɵɵtext(24, "Type configuration");
193
193
  i0.ɵɵelementEnd()();
194
- i0.ɵɵconditionalCreate(25, AgentRealtimePanel_Conditional_3_Conditional_25_Template, 2, 1, "pre", 13)(26, AgentRealtimePanel_Conditional_3_Conditional_26_Template, 2, 0, "div", 9);
194
+ i0.ɵɵconditionalCreate(25, AgentRealtimePanel_Conditional_3_Conditional_25_Template, 2, 1, "pre", 12)(26, AgentRealtimePanel_Conditional_3_Conditional_26_Template, 2, 0, "div", 8);
195
195
  i0.ɵɵelementEnd();
196
196
  } if (rf & 2) {
197
197
  const ctx_r0 = i0.ɵɵnextContext();
@@ -331,15 +331,15 @@ let AgentRealtimePanel = class AgentRealtimePanel extends BaseFormPanel {
331
331
  SharedService.Instance.OpenEntityRecord('MJ: AI Bridge Agent Identities', CompositeKey.FromID(i.ID));
332
332
  }
333
333
  static { this.ɵfac = /*@__PURE__*/ (() => { let ɵAgentRealtimePanel_BaseFactory; return function AgentRealtimePanel_Factory(__ngFactoryType__) { return (ɵAgentRealtimePanel_BaseFactory || (ɵAgentRealtimePanel_BaseFactory = i0.ɵɵgetInheritedFactory(AgentRealtimePanel)))(__ngFactoryType__ || AgentRealtimePanel); }; })(); }
334
- static { this.ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: AgentRealtimePanel, selectors: [["mj-ai-agent-realtime-panel"]], standalone: false, features: [i0.ɵɵInheritDefinitionFeature], decls: 4, vars: 3, consts: [["SectionKey", "agentRealtime", "SectionName", "Realtime", "Icon", "fa fa-tower-broadcast", 3, "Form", "FormContext"], ["text", "Loading realtime setup..."], [1, "rt-error"], [1, "fa-solid", "fa-triangle-exclamation"], [1, "rt-intro"], [1, "rt-section"], [1, "rt-section-header"], [1, "fa-solid", "fa-people-arrows"], [1, "rt-count"], [1, "rt-empty"], [1, "rt-list"], [1, "fa-solid", "fa-id-card"], [1, "fa-solid", "fa-gears"], [1, "rt-config"], ["type", "button", 1, "rt-row"], ["type", "button", 1, "rt-row", 3, "click"], [1, "rt-row-icon"], [1, "rt-row-main"], [1, "rt-row-title"], [1, "rt-row-sub"], [1, "rt-status"], [1, "rt-rel"], [1, "rt-tag"]], template: function AgentRealtimePanel_Template(rf, ctx) { if (rf & 1) {
334
+ static { this.ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: AgentRealtimePanel, selectors: [["mj-ai-agent-realtime-panel"]], standalone: false, features: [i0.ɵɵInheritDefinitionFeature], decls: 4, vars: 3, consts: [["SectionKey", "agentRealtime", "SectionName", "Realtime", "Icon", "fa fa-tower-broadcast", 3, "Form", "FormContext"], ["text", "Loading realtime setup..."], ["Variant", "error"], [1, "rt-intro"], [1, "rt-section"], [1, "rt-section-header"], [1, "fa-solid", "fa-people-arrows"], [1, "rt-count"], [1, "rt-empty"], [1, "rt-list"], [1, "fa-solid", "fa-id-card"], [1, "fa-solid", "fa-gears"], [1, "rt-config"], ["type", "button", 1, "rt-row"], ["type", "button", 1, "rt-row", 3, "click"], [1, "rt-row-icon"], [1, "rt-row-main"], [1, "rt-row-title"], [1, "rt-row-sub"], [1, "rt-status"], [1, "rt-rel"], [1, "rt-tag"]], template: function AgentRealtimePanel_Template(rf, ctx) { if (rf & 1) {
335
335
  i0.ɵɵelementStart(0, "mj-collapsible-panel", 0);
336
- i0.ɵɵconditionalCreate(1, AgentRealtimePanel_Conditional_1_Template, 1, 0, "mj-loading", 1)(2, AgentRealtimePanel_Conditional_2_Template, 3, 1, "div", 2)(3, AgentRealtimePanel_Conditional_3_Template, 27, 5);
336
+ i0.ɵɵconditionalCreate(1, AgentRealtimePanel_Conditional_1_Template, 1, 0, "mj-loading", 1)(2, AgentRealtimePanel_Conditional_2_Template, 2, 1, "mj-alert", 2)(3, AgentRealtimePanel_Conditional_3_Template, 27, 5);
337
337
  i0.ɵɵelementEnd();
338
338
  } if (rf & 2) {
339
339
  i0.ɵɵproperty("Form", ctx.FormComponent)("FormContext", ctx.FormContext);
340
340
  i0.ɵɵadvance();
341
341
  i0.ɵɵconditional(ctx.Loading ? 1 : ctx.LoadError ? 2 : 3);
342
- } }, dependencies: [i1.MjCollapsiblePanelComponent, i2.LoadingComponent], styles: ["\n\n\n\n.rt-intro[_ngcontent-%COMP%] {\n font-size: 12px;\n line-height: 1.5;\n color: var(--mj-text-secondary);\n margin: 0 0 14px;\n max-width: 92ch;\n}\n.rt-error[_ngcontent-%COMP%] {\n font-size: 12px;\n padding: 10px 12px;\n border-radius: 6px;\n background: color-mix(in srgb, var(--mj-status-error) 10%, transparent);\n color: var(--mj-status-error-text, var(--mj-status-error));\n}\n.rt-error[_ngcontent-%COMP%] i[_ngcontent-%COMP%] { margin-right: 6px; }\n\n.rt-section[_ngcontent-%COMP%] { margin-bottom: 18px; }\n.rt-section[_ngcontent-%COMP%]:last-child { margin-bottom: 0; }\n\n.rt-section-header[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 8px;\n font-size: 11px;\n text-transform: uppercase;\n letter-spacing: 0.06em;\n font-weight: 700;\n color: var(--mj-text-muted);\n margin: 0 0 8px;\n}\n.rt-section-header[_ngcontent-%COMP%] i[_ngcontent-%COMP%] { color: var(--mj-brand-primary); }\n.rt-count[_ngcontent-%COMP%] {\n margin-left: auto;\n font-size: 11px;\n font-weight: 700;\n color: var(--mj-text-secondary);\n background: var(--mj-bg-surface-sunken);\n border-radius: 10px;\n padding: 1px 8px;\n}\n\n.rt-empty[_ngcontent-%COMP%] {\n font-size: 12px;\n color: var(--mj-text-muted);\n padding: 8px 0;\n}\n\n.rt-list[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n border: 1px solid var(--mj-border-default);\n border-radius: 8px;\n overflow: hidden;\n background: var(--mj-bg-surface);\n}\n.rt-row[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 12px;\n width: 100%;\n text-align: left;\n padding: 10px 14px;\n border: 0;\n border-top: 1px solid var(--mj-border-subtle);\n background: transparent;\n cursor: pointer;\n color: var(--mj-text-primary);\n transition: background 0.12s;\n}\n.rt-row[_ngcontent-%COMP%]:first-child { border-top: 0; }\n.rt-row[_ngcontent-%COMP%]:hover { background: var(--mj-bg-surface-hover); }\n\n.rt-row-icon[_ngcontent-%COMP%] {\n flex: 0 0 auto;\n width: 30px;\n height: 30px;\n border-radius: 50%;\n display: flex;\n align-items: center;\n justify-content: center;\n font-size: 13px;\n background: color-mix(in srgb, var(--mj-brand-primary) 10%, transparent);\n color: var(--mj-brand-primary);\n}\n.rt-row-main[_ngcontent-%COMP%] { display: flex; flex-direction: column; gap: 2px; min-width: 0; flex: 1 1 auto; }\n.rt-row-title[_ngcontent-%COMP%] { font-size: 13px; font-weight: 600; }\n.rt-row-title[_ngcontent-%COMP%] .rt-rel[_ngcontent-%COMP%] { color: var(--mj-text-muted); font-weight: 400; }\n.rt-row-sub[_ngcontent-%COMP%] { font-size: 11px; color: var(--mj-text-muted); }\n.rt-tag[_ngcontent-%COMP%] {\n font-size: 10px;\n font-weight: 700;\n text-transform: uppercase;\n letter-spacing: 0.04em;\n color: var(--mj-brand-primary);\n}\n\n.rt-status[_ngcontent-%COMP%] {\n flex: 0 0 auto;\n font-size: 11px;\n font-weight: 600;\n padding: 2px 9px;\n border-radius: 10px;\n background: var(--mj-bg-surface-sunken);\n color: var(--mj-text-muted);\n}\n.rt-status.active[_ngcontent-%COMP%] {\n background: color-mix(in srgb, var(--mj-status-success) 14%, transparent);\n color: var(--mj-status-success-text, var(--mj-status-success));\n}\n\n.rt-config[_ngcontent-%COMP%] {\n margin: 0;\n padding: 12px 14px;\n border-radius: 8px;\n background: var(--mj-bg-surface-sunken);\n border: 1px solid var(--mj-border-default);\n font-family: ui-monospace, monospace;\n font-size: 12px;\n line-height: 1.5;\n color: var(--mj-text-primary);\n white-space: pre-wrap;\n word-break: break-word;\n max-height: 360px;\n overflow: auto;\n}"] }); }
342
+ } }, dependencies: [i1.MJAlertComponent, i2.MjCollapsiblePanelComponent, i3.LoadingComponent], styles: ["\n\n\n\n.rt-intro[_ngcontent-%COMP%] {\n font-size: 12px;\n line-height: 1.5;\n color: var(--mj-text-secondary);\n margin: 0 0 14px;\n max-width: 92ch;\n}\n\n.rt-section[_ngcontent-%COMP%] { margin-bottom: 18px; }\n.rt-section[_ngcontent-%COMP%]:last-child { margin-bottom: 0; }\n\n.rt-section-header[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 8px;\n font-size: 11px;\n text-transform: uppercase;\n letter-spacing: 0.06em;\n font-weight: 700;\n color: var(--mj-text-muted);\n margin: 0 0 8px;\n}\n.rt-section-header[_ngcontent-%COMP%] i[_ngcontent-%COMP%] { color: var(--mj-brand-primary); }\n.rt-count[_ngcontent-%COMP%] {\n margin-left: auto;\n font-size: 11px;\n font-weight: 700;\n color: var(--mj-text-secondary);\n background: var(--mj-bg-surface-sunken);\n border-radius: 10px;\n padding: 1px 8px;\n}\n\n.rt-empty[_ngcontent-%COMP%] {\n font-size: 12px;\n color: var(--mj-text-muted);\n padding: 8px 0;\n}\n\n.rt-list[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n border: 1px solid var(--mj-border-default);\n border-radius: 8px;\n overflow: hidden;\n background: var(--mj-bg-surface);\n}\n.rt-row[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 12px;\n width: 100%;\n text-align: left;\n padding: 10px 14px;\n border: 0;\n border-top: 1px solid var(--mj-border-subtle);\n background: transparent;\n cursor: pointer;\n color: var(--mj-text-primary);\n transition: background 0.12s;\n}\n.rt-row[_ngcontent-%COMP%]:first-child { border-top: 0; }\n.rt-row[_ngcontent-%COMP%]:hover { background: var(--mj-bg-surface-hover); }\n\n.rt-row-icon[_ngcontent-%COMP%] {\n flex: 0 0 auto;\n width: 30px;\n height: 30px;\n border-radius: 50%;\n display: flex;\n align-items: center;\n justify-content: center;\n font-size: 13px;\n background: color-mix(in srgb, var(--mj-brand-primary) 10%, transparent);\n color: var(--mj-brand-primary);\n}\n.rt-row-main[_ngcontent-%COMP%] { display: flex; flex-direction: column; gap: 2px; min-width: 0; flex: 1 1 auto; }\n.rt-row-title[_ngcontent-%COMP%] { font-size: 13px; font-weight: 600; }\n.rt-row-title[_ngcontent-%COMP%] .rt-rel[_ngcontent-%COMP%] { color: var(--mj-text-muted); font-weight: 400; }\n.rt-row-sub[_ngcontent-%COMP%] { font-size: 11px; color: var(--mj-text-muted); }\n.rt-tag[_ngcontent-%COMP%] {\n font-size: 10px;\n font-weight: 700;\n text-transform: uppercase;\n letter-spacing: 0.04em;\n color: var(--mj-brand-primary);\n}\n\n.rt-status[_ngcontent-%COMP%] {\n flex: 0 0 auto;\n font-size: 11px;\n font-weight: 600;\n padding: 2px 9px;\n border-radius: 10px;\n background: var(--mj-bg-surface-sunken);\n color: var(--mj-text-muted);\n}\n.rt-status.active[_ngcontent-%COMP%] {\n background: color-mix(in srgb, var(--mj-status-success) 14%, transparent);\n color: var(--mj-status-success-text, var(--mj-status-success));\n}\n\n.rt-config[_ngcontent-%COMP%] {\n margin: 0;\n padding: 12px 14px;\n border-radius: 8px;\n background: var(--mj-bg-surface-sunken);\n border: 1px solid var(--mj-border-default);\n font-family: ui-monospace, monospace;\n font-size: 12px;\n line-height: 1.5;\n color: var(--mj-text-primary);\n white-space: pre-wrap;\n word-break: break-word;\n max-height: 360px;\n overflow: auto;\n}"] }); }
343
343
  };
344
344
  AgentRealtimePanel = __decorate([
345
345
  RegisterClassEx(BaseFormPanel, {
@@ -355,7 +355,7 @@ AgentRealtimePanel = __decorate([
355
355
  export { AgentRealtimePanel };
356
356
  (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(AgentRealtimePanel, [{
357
357
  type: Component,
358
- args: [{ standalone: false, selector: 'mj-ai-agent-realtime-panel', template: "<mj-collapsible-panel\n SectionKey=\"agentRealtime\"\n SectionName=\"Realtime\"\n Icon=\"fa fa-tower-broadcast\"\n [Form]=\"FormComponent\"\n [FormContext]=\"FormContext\">\n\n @if (Loading) {\n <mj-loading text=\"Loading realtime setup...\"></mj-loading>\n } @else if (LoadError) {\n <div class=\"rt-error\"><i class=\"fa-solid fa-triangle-exclamation\"></i> {{ LoadError }}</div>\n } @else {\n <p class=\"rt-intro\">\n A one-place summary of this agent's realtime / bridge setup \u2014 its co-agent pairings, its\n type-level realtime configuration, and the bridge identities that route inbound calls and invites to it.\n </p>\n\n <!-- Co-agent pairings -->\n <div class=\"rt-section\">\n <div class=\"rt-section-header\">\n <i class=\"fa-solid fa-people-arrows\"></i>\n <span>Co-agent pairings</span>\n <span class=\"rt-count\">{{ Pairings.length }}</span>\n </div>\n @if (Pairings.length === 0) {\n <div class=\"rt-empty\">No co-agent pairings reference this agent.</div>\n } @else {\n <div class=\"rt-list\">\n @for (p of Pairings; track p.ID) {\n <button type=\"button\" class=\"rt-row\" (click)=\"OpenPairing(p)\">\n <span class=\"rt-row-icon\"><i class=\"fa-solid {{ PairingTypeIcon(p.Type) }}\"></i></span>\n <span class=\"rt-row-main\">\n <span class=\"rt-row-title\">\n {{ p.Type }}\n @if (p.role === 'as-coagent') {\n <span class=\"rt-rel\">voices</span> {{ OtherAgentName(p) }}\n } @else {\n <span class=\"rt-rel\">voiced by</span> {{ OtherAgentName(p) }}\n }\n </span>\n <span class=\"rt-row-sub\">\n seq {{ p.Sequence }}\n @if (p.IsDefault) { \u00B7 <span class=\"rt-tag\">default</span> }\n </span>\n </span>\n <span class=\"rt-status\" [class.active]=\"p.Status === 'Active'\">{{ p.Status }}</span>\n </button>\n }\n </div>\n }\n </div>\n\n <!-- Bridge identities -->\n <div class=\"rt-section\">\n <div class=\"rt-section-header\">\n <i class=\"fa-solid fa-id-card\"></i>\n <span>Bridge identities</span>\n <span class=\"rt-count\">{{ Identities.length }}</span>\n </div>\n @if (Identities.length === 0) {\n <div class=\"rt-empty\">No bridge identities provisioned for this agent.</div>\n } @else {\n <div class=\"rt-list\">\n @for (i of Identities; track i.ID) {\n <button type=\"button\" class=\"rt-row\" (click)=\"OpenIdentity(i)\">\n <span class=\"rt-row-icon\"><i class=\"fa-solid {{ IdentityTypeIcon(i.IdentityType) }}\"></i></span>\n <span class=\"rt-row-main\">\n <span class=\"rt-row-title\">{{ i.DisplayName || i.IdentityValue }}</span>\n <span class=\"rt-row-sub\">{{ i.IdentityType }} \u00B7 {{ i.Provider }}</span>\n </span>\n <span class=\"rt-status\" [class.active]=\"i.IsActive\">{{ i.IsActive ? 'Active' : 'Inactive' }}</span>\n </button>\n }\n </div>\n }\n </div>\n\n <!-- Type configuration -->\n <div class=\"rt-section\">\n <div class=\"rt-section-header\">\n <i class=\"fa-solid fa-gears\"></i>\n <span>Type configuration</span>\n </div>\n @if (PrettyTypeConfiguration) {\n <pre class=\"rt-config\">{{ PrettyTypeConfiguration }}</pre>\n } @else {\n <div class=\"rt-empty\">No type configuration set \u2014 this agent uses its type's defaults.</div>\n }\n </div>\n }\n</mj-collapsible-panel>\n", styles: ["/* AI Agent Realtime panel \u2014 read-only summary of pairings / identities / type config.\n Tokens only. */\n\n.rt-intro {\n font-size: 12px;\n line-height: 1.5;\n color: var(--mj-text-secondary);\n margin: 0 0 14px;\n max-width: 92ch;\n}\n.rt-error {\n font-size: 12px;\n padding: 10px 12px;\n border-radius: 6px;\n background: color-mix(in srgb, var(--mj-status-error) 10%, transparent);\n color: var(--mj-status-error-text, var(--mj-status-error));\n}\n.rt-error i { margin-right: 6px; }\n\n.rt-section { margin-bottom: 18px; }\n.rt-section:last-child { margin-bottom: 0; }\n\n.rt-section-header {\n display: flex;\n align-items: center;\n gap: 8px;\n font-size: 11px;\n text-transform: uppercase;\n letter-spacing: 0.06em;\n font-weight: 700;\n color: var(--mj-text-muted);\n margin: 0 0 8px;\n}\n.rt-section-header i { color: var(--mj-brand-primary); }\n.rt-count {\n margin-left: auto;\n font-size: 11px;\n font-weight: 700;\n color: var(--mj-text-secondary);\n background: var(--mj-bg-surface-sunken);\n border-radius: 10px;\n padding: 1px 8px;\n}\n\n.rt-empty {\n font-size: 12px;\n color: var(--mj-text-muted);\n padding: 8px 0;\n}\n\n.rt-list {\n display: flex;\n flex-direction: column;\n border: 1px solid var(--mj-border-default);\n border-radius: 8px;\n overflow: hidden;\n background: var(--mj-bg-surface);\n}\n.rt-row {\n display: flex;\n align-items: center;\n gap: 12px;\n width: 100%;\n text-align: left;\n padding: 10px 14px;\n border: 0;\n border-top: 1px solid var(--mj-border-subtle);\n background: transparent;\n cursor: pointer;\n color: var(--mj-text-primary);\n transition: background 0.12s;\n}\n.rt-row:first-child { border-top: 0; }\n.rt-row:hover { background: var(--mj-bg-surface-hover); }\n\n.rt-row-icon {\n flex: 0 0 auto;\n width: 30px;\n height: 30px;\n border-radius: 50%;\n display: flex;\n align-items: center;\n justify-content: center;\n font-size: 13px;\n background: color-mix(in srgb, var(--mj-brand-primary) 10%, transparent);\n color: var(--mj-brand-primary);\n}\n.rt-row-main { display: flex; flex-direction: column; gap: 2px; min-width: 0; flex: 1 1 auto; }\n.rt-row-title { font-size: 13px; font-weight: 600; }\n.rt-row-title .rt-rel { color: var(--mj-text-muted); font-weight: 400; }\n.rt-row-sub { font-size: 11px; color: var(--mj-text-muted); }\n.rt-tag {\n font-size: 10px;\n font-weight: 700;\n text-transform: uppercase;\n letter-spacing: 0.04em;\n color: var(--mj-brand-primary);\n}\n\n.rt-status {\n flex: 0 0 auto;\n font-size: 11px;\n font-weight: 600;\n padding: 2px 9px;\n border-radius: 10px;\n background: var(--mj-bg-surface-sunken);\n color: var(--mj-text-muted);\n}\n.rt-status.active {\n background: color-mix(in srgb, var(--mj-status-success) 14%, transparent);\n color: var(--mj-status-success-text, var(--mj-status-success));\n}\n\n.rt-config {\n margin: 0;\n padding: 12px 14px;\n border-radius: 8px;\n background: var(--mj-bg-surface-sunken);\n border: 1px solid var(--mj-border-default);\n font-family: ui-monospace, monospace;\n font-size: 12px;\n line-height: 1.5;\n color: var(--mj-text-primary);\n white-space: pre-wrap;\n word-break: break-word;\n max-height: 360px;\n overflow: auto;\n}\n"] }]
358
+ args: [{ standalone: false, selector: 'mj-ai-agent-realtime-panel', template: "<mj-collapsible-panel\n SectionKey=\"agentRealtime\"\n SectionName=\"Realtime\"\n Icon=\"fa fa-tower-broadcast\"\n [Form]=\"FormComponent\"\n [FormContext]=\"FormContext\">\n\n @if (Loading) {\n <mj-loading text=\"Loading realtime setup...\"></mj-loading>\n } @else if (LoadError) {\n <mj-alert Variant=\"error\">{{ LoadError }}</mj-alert>\n } @else {\n <p class=\"rt-intro\">\n A one-place summary of this agent's realtime / bridge setup \u2014 its co-agent pairings, its\n type-level realtime configuration, and the bridge identities that route inbound calls and invites to it.\n </p>\n\n <!-- Co-agent pairings -->\n <div class=\"rt-section\">\n <div class=\"rt-section-header\">\n <i class=\"fa-solid fa-people-arrows\"></i>\n <span>Co-agent pairings</span>\n <span class=\"rt-count\">{{ Pairings.length }}</span>\n </div>\n @if (Pairings.length === 0) {\n <div class=\"rt-empty\">No co-agent pairings reference this agent.</div>\n } @else {\n <div class=\"rt-list\">\n @for (p of Pairings; track p.ID) {\n <button type=\"button\" class=\"rt-row\" (click)=\"OpenPairing(p)\">\n <span class=\"rt-row-icon\"><i class=\"fa-solid {{ PairingTypeIcon(p.Type) }}\"></i></span>\n <span class=\"rt-row-main\">\n <span class=\"rt-row-title\">\n {{ p.Type }}\n @if (p.role === 'as-coagent') {\n <span class=\"rt-rel\">voices</span> {{ OtherAgentName(p) }}\n } @else {\n <span class=\"rt-rel\">voiced by</span> {{ OtherAgentName(p) }}\n }\n </span>\n <span class=\"rt-row-sub\">\n seq {{ p.Sequence }}\n @if (p.IsDefault) { \u00B7 <span class=\"rt-tag\">default</span> }\n </span>\n </span>\n <span class=\"rt-status\" [class.active]=\"p.Status === 'Active'\">{{ p.Status }}</span>\n </button>\n }\n </div>\n }\n </div>\n\n <!-- Bridge identities -->\n <div class=\"rt-section\">\n <div class=\"rt-section-header\">\n <i class=\"fa-solid fa-id-card\"></i>\n <span>Bridge identities</span>\n <span class=\"rt-count\">{{ Identities.length }}</span>\n </div>\n @if (Identities.length === 0) {\n <div class=\"rt-empty\">No bridge identities provisioned for this agent.</div>\n } @else {\n <div class=\"rt-list\">\n @for (i of Identities; track i.ID) {\n <button type=\"button\" class=\"rt-row\" (click)=\"OpenIdentity(i)\">\n <span class=\"rt-row-icon\"><i class=\"fa-solid {{ IdentityTypeIcon(i.IdentityType) }}\"></i></span>\n <span class=\"rt-row-main\">\n <span class=\"rt-row-title\">{{ i.DisplayName || i.IdentityValue }}</span>\n <span class=\"rt-row-sub\">{{ i.IdentityType }} \u00B7 {{ i.Provider }}</span>\n </span>\n <span class=\"rt-status\" [class.active]=\"i.IsActive\">{{ i.IsActive ? 'Active' : 'Inactive' }}</span>\n </button>\n }\n </div>\n }\n </div>\n\n <!-- Type configuration -->\n <div class=\"rt-section\">\n <div class=\"rt-section-header\">\n <i class=\"fa-solid fa-gears\"></i>\n <span>Type configuration</span>\n </div>\n @if (PrettyTypeConfiguration) {\n <pre class=\"rt-config\">{{ PrettyTypeConfiguration }}</pre>\n } @else {\n <div class=\"rt-empty\">No type configuration set \u2014 this agent uses its type's defaults.</div>\n }\n </div>\n }\n</mj-collapsible-panel>\n", styles: ["/* AI Agent Realtime panel \u2014 read-only summary of pairings / identities / type config.\n Tokens only. */\n\n.rt-intro {\n font-size: 12px;\n line-height: 1.5;\n color: var(--mj-text-secondary);\n margin: 0 0 14px;\n max-width: 92ch;\n}\n\n.rt-section { margin-bottom: 18px; }\n.rt-section:last-child { margin-bottom: 0; }\n\n.rt-section-header {\n display: flex;\n align-items: center;\n gap: 8px;\n font-size: 11px;\n text-transform: uppercase;\n letter-spacing: 0.06em;\n font-weight: 700;\n color: var(--mj-text-muted);\n margin: 0 0 8px;\n}\n.rt-section-header i { color: var(--mj-brand-primary); }\n.rt-count {\n margin-left: auto;\n font-size: 11px;\n font-weight: 700;\n color: var(--mj-text-secondary);\n background: var(--mj-bg-surface-sunken);\n border-radius: 10px;\n padding: 1px 8px;\n}\n\n.rt-empty {\n font-size: 12px;\n color: var(--mj-text-muted);\n padding: 8px 0;\n}\n\n.rt-list {\n display: flex;\n flex-direction: column;\n border: 1px solid var(--mj-border-default);\n border-radius: 8px;\n overflow: hidden;\n background: var(--mj-bg-surface);\n}\n.rt-row {\n display: flex;\n align-items: center;\n gap: 12px;\n width: 100%;\n text-align: left;\n padding: 10px 14px;\n border: 0;\n border-top: 1px solid var(--mj-border-subtle);\n background: transparent;\n cursor: pointer;\n color: var(--mj-text-primary);\n transition: background 0.12s;\n}\n.rt-row:first-child { border-top: 0; }\n.rt-row:hover { background: var(--mj-bg-surface-hover); }\n\n.rt-row-icon {\n flex: 0 0 auto;\n width: 30px;\n height: 30px;\n border-radius: 50%;\n display: flex;\n align-items: center;\n justify-content: center;\n font-size: 13px;\n background: color-mix(in srgb, var(--mj-brand-primary) 10%, transparent);\n color: var(--mj-brand-primary);\n}\n.rt-row-main { display: flex; flex-direction: column; gap: 2px; min-width: 0; flex: 1 1 auto; }\n.rt-row-title { font-size: 13px; font-weight: 600; }\n.rt-row-title .rt-rel { color: var(--mj-text-muted); font-weight: 400; }\n.rt-row-sub { font-size: 11px; color: var(--mj-text-muted); }\n.rt-tag {\n font-size: 10px;\n font-weight: 700;\n text-transform: uppercase;\n letter-spacing: 0.04em;\n color: var(--mj-brand-primary);\n}\n\n.rt-status {\n flex: 0 0 auto;\n font-size: 11px;\n font-weight: 600;\n padding: 2px 9px;\n border-radius: 10px;\n background: var(--mj-bg-surface-sunken);\n color: var(--mj-text-muted);\n}\n.rt-status.active {\n background: color-mix(in srgb, var(--mj-status-success) 14%, transparent);\n color: var(--mj-status-success-text, var(--mj-status-success));\n}\n\n.rt-config {\n margin: 0;\n padding: 12px 14px;\n border-radius: 8px;\n background: var(--mj-bg-surface-sunken);\n border: 1px solid var(--mj-border-default);\n font-family: ui-monospace, monospace;\n font-size: 12px;\n line-height: 1.5;\n color: var(--mj-text-primary);\n white-space: pre-wrap;\n word-break: break-word;\n max-height: 360px;\n overflow: auto;\n}\n"] }]
359
359
  }], null, null); })();
360
360
  (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassDebugInfo(AgentRealtimePanel, { className: "AgentRealtimePanel", filePath: "src/lib/panels/ai-agents/agent-realtime.panel.ts", lineNumber: 65 }); })();
361
361
  /** Tree-shake guard — invoked from the panels module loader. */
@@ -1 +1 @@
1
- {"version":3,"file":"agent-realtime.panel.js","sourceRoot":"","sources":["../../../../src/lib/panels/ai-agents/agent-realtime.panel.ts","../../../../src/lib/panels/ai-agents/agent-realtime.panel.html"],"names":[],"mappings":";;;;;;AAAA,OAAO,EAAE,SAAS,EAAU,MAAM,EAAE,iBAAiB,EAAE,MAAM,eAAe,CAAC;AAC7E,OAAO,EAAE,YAAY,EAAE,OAAO,EAAE,MAAM,sBAAsB,CAAC;AAC7D,OAAO,EAAE,eAAe,EAAE,UAAU,EAAE,MAAM,wBAAwB,CAAC;AACrE,OAAO,EAAE,aAAa,EAAE,MAAM,+BAA+B,CAAC;AAE9D,OAAO,EAAE,aAAa,EAAE,MAAM,2BAA2B,CAAC;;;;;;ICGlD,gCAA0D;;;IAE1D,8BAAsB;IAAA,uBAAgD;IAAC,YAAe;IAAA,iBAAM;;;IAArB,eAAe;IAAf,4CAAe;;;IAe9E,8BAAsB;IAAA,0DAA0C;IAAA,iBAAM;;;IAU9C,gCAAqB;IAAA,sBAAM;IAAA,iBAAO;IAAC,YACvC;;;;IADuC,eACvC;IADuC,4DACvC;;;IACI,gCAAqB;IAAA,yBAAS;IAAA,iBAAO;IAAC,YAC1C;;;;IAD0C,eAC1C;IAD0C,4DAC1C;;;IAIoB,wBAAE;IAAA,gCAAqB;IAAA,uBAAO;IAAA,iBAAO;;;;IAbrE,kCAA8D;IAAzB,mOAAS,wBAAc,KAAC;IACzD,gCAA0B;IAAA,oBAAsD;IAAA,iBAAO;IAEnF,AADJ,gCAA0B,eACK;IACvB,YACA;IAEE,AAFF,6GAA+B,uFAEtB;IAGb,iBAAO;IACP,gCAAyB;IACrB,YACA;IAAA,+GAAmB;IAE3B,AADI,iBAAO,EACJ;IACP,iCAA+D;IAAA,aAAc;IACjF,AADiF,iBAAO,EAC/E;;;;IAhBwB,eAA8C;IAA9C,cAAA,iEAA8C,CAAA;IAGnE,eACA;IADA,0CACA;IAAA,cAIC;IAJD,oDAIC;IAGD,eACA;IADA,kDACA;IAAA,cAA2D;IAA3D,0CAA2D;IAG3C,cAAsC;IAAtC,kDAAsC;IAAC,cAAc;IAAd,iCAAc;;;IAlBzF,+BAAqB;IACjB,wHAmBC;IACL,iBAAM;;;IApBF,cAmBC;IAnBD,8BAmBC;;;IAaL,8BAAsB;IAAA,gEAAgD;IAAA,iBAAM;;;;IAIpE,kCAA+D;IAA1B,mOAAS,yBAAe,KAAC;IAC1D,gCAA0B;IAAA,oBAA+D;IAAA,iBAAO;IAE5F,AADJ,gCAA0B,eACK;IAAA,YAAsC;IAAA,iBAAO;IACxE,gCAAyB;IAAA,YAAuC;IACpE,AADoE,iBAAO,EACpE;IACP,gCAAoD;IAAA,YAAwC;IAChG,AADgG,iBAAO,EAC9F;;;;IANwB,eAAuD;IAAvD,cAAA,0EAAuD,CAAA;IAErD,eAAsC;IAAtC,4DAAsC;IACxC,eAAuC;IAAvC,uEAAuC;IAE5C,cAA2B;IAA3B,uCAA2B;IAAC,cAAwC;IAAxC,2DAAwC;;;IARxG,+BAAqB;IACjB,uHASC;IACL,iBAAM;;;IAVF,cASC;IATD,gCASC;;;IAYL,+BAAuB;IAAA,YAA6B;IAAA,iBAAM;;;IAAnC,cAA6B;IAA7B,oDAA6B;;;IAEpD,8BAAsB;IAAA,qFAAgE;IAAA,iBAAM;;;IA1EpG,4BAAoB;IAChB,wNAEJ;IAAA,iBAAI;IAIA,AADJ,8BAAwB,aACW;IAC3B,uBAAyC;IACzC,4BAAM;IAAA,iCAAiB;IAAA,iBAAO;IAC9B,+BAAuB;IAAA,YAAqB;IAChD,AADgD,iBAAO,EACjD;IAGJ,AAFF,kGAA6B,+EAEpB;IAwBb,iBAAM;IAIF,AADJ,+BAAwB,cACW;IAC3B,yBAAmC;IACnC,6BAAM;IAAA,kCAAiB;IAAA,iBAAO;IAC9B,gCAAuB;IAAA,aAAuB;IAClD,AADkD,iBAAO,EACnD;IAGJ,AAFF,oGAA+B,+EAEtB;IAcb,iBAAM;IAIF,AADJ,+BAAwB,cACW;IAC3B,yBAAiC;IACjC,6BAAM;IAAA,mCAAkB;IAC5B,AAD4B,iBAAO,EAC7B;IAGJ,AAFF,qGAA+B,8EAEtB;IAGb,iBAAM;;;IAlEyB,eAAqB;IAArB,4CAAqB;IAEhD,cAyBC;IAzBD,uDAyBC;IAQ0B,eAAuB;IAAvB,8CAAuB;IAElD,cAeC;IAfD,0DAeC;IASD,eAIC;IAJD,0DAIC;;ADvDb;;;;;;;;;;;;;;;;GAgBG;AAgBI,IAAM,kBAAkB,GAAxB,MAAM,kBAAmB,SAAQ,aAA8B;IAA/D;;QACK,QAAG,GAAG,MAAM,CAAC,iBAAiB,CAAC,CAAC;QAEjC,YAAO,GAAG,KAAK,CAAC;QAChB,cAAS,GAAkB,IAAI,CAAC;QAChC,aAAQ,GAAwB,EAAE,CAAC;QACnC,eAAU,GAAwB,EAAE,CAAC;QAEpC,0BAAqB,GAA8B,SAAS,CAAC;KAwGxE;IAtGG,KAAK,CAAC,QAAQ;QACV,MAAM,IAAI,CAAC,QAAQ,EAAE,CAAC;IAC1B,CAAC;IAED,wFAAwF;IACxF,IAAW,uBAAuB;QAC9B,IAAI,IAAI,CAAC,qBAAqB,KAAK,SAAS;YAAE,OAAO,IAAI,CAAC,qBAAqB,CAAC;QAChF,MAAM,GAAG,GAAG,IAAI,CAAC,MAAM,EAAE,iBAAiB,IAAI,IAAI,CAAC;QACnD,IAAI,CAAC,GAAG,EAAE,CAAC;YACP,IAAI,CAAC,qBAAqB,GAAG,IAAI,CAAC;YAClC,OAAO,IAAI,CAAC;QAChB,CAAC;QACD,IAAI,CAAC;YACD,IAAI,CAAC,qBAAqB,GAAG,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC;QAC1E,CAAC;QAAC,MAAM,CAAC;YACL,IAAI,CAAC,qBAAqB,GAAG,GAAG,CAAC;QACrC,CAAC;QACD,OAAO,IAAI,CAAC,qBAAqB,CAAC;IACtC,CAAC;IAED,IAAW,WAAW;QAClB,OAAO,IAAI,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC,IAAI,IAAI,CAAC,UAAU,CAAC,MAAM,GAAG,CAAC,IAAI,IAAI,CAAC,uBAAuB,IAAI,IAAI,CAAC;IAC1G,CAAC;IAED;;;;OAIG;IACK,KAAK,CAAC,QAAQ;QAClB,MAAM,OAAO,GAAG,IAAI,CAAC,MAAM,EAAE,EAAE,CAAC;QAChC,IAAI,CAAC,OAAO;YAAE,OAAO;QAErB,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,aAAa,CAAC,CAAC;YAC1E,MAAM,OAAO,GAAG,MAAM,EAAE,CAAC,QAAQ,CAAC;gBAC9B;oBACI,UAAU,EAAE,wBAAwB;oBACpC,MAAM,EAAE,CAAC,IAAI,EAAE,WAAW,EAAE,SAAS,EAAE,eAAe,EAAE,aAAa,EAAE,MAAM,EAAE,WAAW,EAAE,UAAU,EAAE,QAAQ,CAAC;oBACjH,WAAW,EAAE,cAAc,OAAO,uBAAuB,OAAO,GAAG;oBACnE,OAAO,EAAE,cAAc;oBACvB,UAAU,EAAE,QAAQ;iBACvB;gBACD;oBACI,UAAU,EAAE,gCAAgC;oBAC5C,MAAM,EAAE,CAAC,IAAI,EAAE,cAAc,EAAE,eAAe,EAAE,aAAa,EAAE,UAAU,EAAE,UAAU,CAAC;oBACtF,WAAW,EAAE,YAAY,OAAO,GAAG;oBACnC,OAAO,EAAE,cAAc;oBACvB,UAAU,EAAE,QAAQ;iBACvB;aACJ,CAAC,CAAC;YAEH,MAAM,QAAQ,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAA2C,CAAC;YAC3G,IAAI,CAAC,QAAQ,GAAG,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;gBACjC,GAAG,CAAC;gBACJ,IAAI,EAAE,UAAU,CAAC,CAAC,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,WAAW;aACtE,CAAC,CAAC,CAAC;YACJ,IAAI,CAAC,UAAU,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAwB,CAAC;QAC7F,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACb,OAAO,CAAC,KAAK,CAAC,0CAA0C,EAAE,KAAK,CAAC,CAAC;YACjE,IAAI,CAAC,SAAS,GAAG,gCAAgC,CAAC;QACtD,CAAC;gBAAS,CAAC;YACP,IAAI,CAAC,OAAO,GAAG,KAAK,CAAC;YACrB,IAAI,CAAC,GAAG,CAAC,YAAY,EAAE,CAAC;QAC5B,CAAC;IACL,CAAC;IAEM,eAAe,CAAC,IAAY;QAC/B,QAAQ,IAAI,EAAE,CAAC;YACX,KAAK,SAAS,CAAC,CAAC,OAAO,qBAAqB,CAAC;YAC7C,KAAK,UAAU,CAAC,CAAC,OAAO,sBAAsB,CAAC;YAC/C,KAAK,UAAU,CAAC,CAAC,OAAO,cAAc,CAAC;YACvC,KAAK,UAAU,CAAC,CAAC,OAAO,QAAQ,CAAC;YACjC,KAAK,MAAM,CAAC,CAAC,OAAO,kBAAkB,CAAC;YACvC,KAAK,UAAU,CAAC,CAAC,OAAO,oBAAoB,CAAC;YAC7C,OAAO,CAAC,CAAC,OAAO,SAAS,CAAC;QAC9B,CAAC;IACL,CAAC;IAEM,gBAAgB,CAAC,IAAY;QAChC,QAAQ,IAAI,EAAE,CAAC;YACX,KAAK,OAAO,CAAC,CAAC,OAAO,aAAa,CAAC;YACnC,KAAK,aAAa,CAAC,CAAC,OAAO,UAAU,CAAC;YACtC,KAAK,WAAW,CAAC,CAAC,OAAO,aAAa,CAAC;YACvC,OAAO,CAAC,CAAC,OAAO,YAAY,CAAC;QACjC,CAAC;IACL,CAAC;IAED,kFAAkF;IAC3E,cAAc,CAAC,CAAoB;QACtC,OAAO,CAAC,CAAC,IAAI,KAAK,YAAY,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,WAAW,IAAI,YAAY,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,IAAI,kBAAkB,CAAC,CAAC;IACzG,CAAC;IAEM,WAAW,CAAC,CAAoB;QACnC,aAAa,CAAC,QAAQ,CAAC,gBAAgB,CAAC,wBAAwB,EAAE,YAAY,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;IACjG,CAAC;IAEM,YAAY,CAAC,CAAoB;QACpC,aAAa,CAAC,QAAQ,CAAC,gBAAgB,CAAC,gCAAgC,EAAE,YAAY,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;IACzG,CAAC;4PA/GQ,kBAAkB,yBAAlB,kBAAkB;oEAAlB,kBAAkB;YChE/B,+CAKgC;YAM1B,AAFA,AAFF,2FAAe,8DAES,qDAEf;YA+Eb,iBAAuB;;YArFnB,AADA,wCAAsB,gCACK;YAE3B,cAkFC;YAlFD,yDAkFC;;;ADzBQ,kBAAkB;IAf9B,eAAe,CAAC,aAAa,EAAE;QAC5B,GAAG,EAAE,oBAAoB;QACzB,kBAAkB,EAAE,IAAI;QACxB,QAAQ,EAAE;YACN,MAAM,EAAE,WAAW;YACnB,IAAI,EAAE,cAAc;YACpB,OAAO,EAAE,EAAE;SACd;KACJ,CAAC;GAOW,kBAAkB,CAgH9B;;iFAhHY,kBAAkB;cAN9B,SAAS;6BACM,KAAK,YACP,4BAA4B;;kFAI7B,kBAAkB;AAkH/B,gEAAgE;AAChE,MAAM,UAAU,sBAAsB;IAClC,kBAAkB;AACtB,CAAC","sourcesContent":["import { Component, OnInit, inject, ChangeDetectorRef } from '@angular/core';\nimport { CompositeKey, RunView } from '@memberjunction/core';\nimport { RegisterClassEx, UUIDsEqual } from '@memberjunction/global';\nimport { BaseFormPanel } from '@memberjunction/ng-base-forms';\nimport { MJAIAgentEntity } from '@memberjunction/core-entities';\nimport { SharedService } from '@memberjunction/ng-shared';\n\n/** Read-only co-agent pairing row for the summary list. */\ninterface CoAgentPairingRow {\n ID: string;\n CoAgentID: string;\n CoAgent: string | null;\n TargetAgentID: string | null;\n TargetAgent: string | null;\n Type: string;\n IsDefault: boolean;\n Sequence: number;\n Status: string;\n /** 'as-coagent' = this agent IS the co-agent; 'as-target' = this agent is the voiced target. */\n role: 'as-coagent' | 'as-target';\n}\n\n/** Read-only bridge identity row for the summary list. */\ninterface BridgeIdentityRow {\n ID: string;\n IdentityType: string;\n IdentityValue: string;\n DisplayName: string | null;\n Provider: string;\n IsActive: boolean;\n}\n\n/**\n * AI Agent \"Realtime\" panel (Pattern 1 — BaseFormPanel slot). A read-only\n * summary that puts an agent's realtime / bridge setup in one place:\n * - its co-agent pairings (rows where this agent is the co-agent OR the\n * voiced target, from 'MJ: AI Agent Co Agents'),\n * - its `TypeConfiguration` (the agent's typed realtime config layer),\n * - its bridge agent identities ('MJ: AI Bridge Agent Identities' for this\n * agent).\n *\n * Registers against the 'AI Agents' entity, `after-fields` slot. The AI Agent\n * form is a full custom override whose template doesn't emit the `after-fields`\n * marker, so this panel falls through to the container's always-present\n * `after-everything` slot and mounts at the bottom of the form — functional,\n * just lower than ideal until the custom form emits the slot marker.\n *\n * Provider-correct: all RunViews are scoped to the host form's `ProviderToUse`.\n */\n@RegisterClassEx(BaseFormPanel, {\n key: 'ai-agents:realtime',\n skipNullKeyWarning: true,\n metadata: {\n entity: 'AI Agents',\n slot: 'after-fields',\n sortKey: 40,\n },\n})\n@Component({\n standalone: false,\n selector: 'mj-ai-agent-realtime-panel',\n templateUrl: './agent-realtime.panel.html',\n styleUrls: ['./agent-realtime.panel.css'],\n})\nexport class AgentRealtimePanel extends BaseFormPanel<MJAIAgentEntity> implements OnInit {\n private cdr = inject(ChangeDetectorRef);\n\n public Loading = false;\n public LoadError: string | null = null;\n public Pairings: CoAgentPairingRow[] = [];\n public Identities: BridgeIdentityRow[] = [];\n\n private prettyTypeConfigCache: string | null | undefined = undefined;\n\n async ngOnInit(): Promise<void> {\n await this.loadData();\n }\n\n /** Pretty-printed TypeConfiguration JSON (cached, falls back to raw on parse error). */\n public get PrettyTypeConfiguration(): string | null {\n if (this.prettyTypeConfigCache !== undefined) return this.prettyTypeConfigCache;\n const raw = this.Record?.TypeConfiguration ?? null;\n if (!raw) {\n this.prettyTypeConfigCache = null;\n return null;\n }\n try {\n this.prettyTypeConfigCache = JSON.stringify(JSON.parse(raw), null, 2);\n } catch {\n this.prettyTypeConfigCache = raw;\n }\n return this.prettyTypeConfigCache;\n }\n\n public get HasAnything(): boolean {\n return this.Pairings.length > 0 || this.Identities.length > 0 || this.PrettyTypeConfiguration != null;\n }\n\n /**\n * Loads the agent's pairings + bridge identities in one batched round trip,\n * scoped to the host form's provider. TypeConfiguration is read straight off\n * the already-loaded record (no query needed).\n */\n private async loadData(): Promise<void> {\n const agentId = this.Record?.ID;\n if (!agentId) return;\n\n this.Loading = true;\n this.LoadError = null;\n try {\n const rv = RunView.FromMetadataProvider(this.FormComponent.ProviderToUse);\n const results = await rv.RunViews([\n {\n EntityName: 'MJ: AI Agent Co Agents',\n Fields: ['ID', 'CoAgentID', 'CoAgent', 'TargetAgentID', 'TargetAgent', 'Type', 'IsDefault', 'Sequence', 'Status'],\n ExtraFilter: `CoAgentID='${agentId}' OR TargetAgentID='${agentId}'`,\n OrderBy: 'Sequence ASC',\n ResultType: 'simple',\n },\n {\n EntityName: 'MJ: AI Bridge Agent Identities',\n Fields: ['ID', 'IdentityType', 'IdentityValue', 'DisplayName', 'Provider', 'IsActive'],\n ExtraFilter: `AgentID='${agentId}'`,\n OrderBy: 'Provider ASC',\n ResultType: 'simple',\n },\n ]);\n\n const pairings = (results[0]?.Success ? results[0].Results : []) as Array<Omit<CoAgentPairingRow, 'role'>>;\n this.Pairings = pairings.map((p) => ({\n ...p,\n role: UUIDsEqual(p.CoAgentID, agentId) ? 'as-coagent' : 'as-target',\n }));\n this.Identities = (results[1]?.Success ? results[1].Results : []) as BridgeIdentityRow[];\n } catch (error) {\n console.error('Error loading agent realtime panel data:', error);\n this.LoadError = 'Failed to load realtime setup.';\n } finally {\n this.Loading = false;\n this.cdr.markForCheck();\n }\n }\n\n public PairingTypeIcon(type: string): string {\n switch (type) {\n case 'CoAgent': return 'fa-microphone-lines';\n case 'Delegate': return 'fa-share-from-square';\n case 'Fallback': return 'fa-life-ring';\n case 'Observer': return 'fa-eye';\n case 'Peer': return 'fa-people-arrows';\n case 'Reviewer': return 'fa-clipboard-check';\n default: return 'fa-link';\n }\n }\n\n public IdentityTypeIcon(type: string): string {\n switch (type) {\n case 'Email': return 'fa-envelope';\n case 'PhoneNumber': return 'fa-phone';\n case 'AccountID': return 'fa-id-badge';\n default: return 'fa-id-card';\n }\n }\n\n /** The \"other\" agent in a pairing (the one that isn't the agent on this form). */\n public OtherAgentName(p: CoAgentPairingRow): string {\n return p.role === 'as-coagent' ? (p.TargetAgent ?? 'this agent') : (p.CoAgent ?? 'unknown co-agent');\n }\n\n public OpenPairing(p: CoAgentPairingRow): void {\n SharedService.Instance.OpenEntityRecord('MJ: AI Agent Co Agents', CompositeKey.FromID(p.ID));\n }\n\n public OpenIdentity(i: BridgeIdentityRow): void {\n SharedService.Instance.OpenEntityRecord('MJ: AI Bridge Agent Identities', CompositeKey.FromID(i.ID));\n }\n}\n\n/** Tree-shake guard — invoked from the panels module loader. */\nexport function LoadAgentRealtimePanel(): void {\n /* no-op marker */\n}\n","<mj-collapsible-panel\n SectionKey=\"agentRealtime\"\n SectionName=\"Realtime\"\n Icon=\"fa fa-tower-broadcast\"\n [Form]=\"FormComponent\"\n [FormContext]=\"FormContext\">\n\n @if (Loading) {\n <mj-loading text=\"Loading realtime setup...\"></mj-loading>\n } @else if (LoadError) {\n <div class=\"rt-error\"><i class=\"fa-solid fa-triangle-exclamation\"></i> {{ LoadError }}</div>\n } @else {\n <p class=\"rt-intro\">\n A one-place summary of this agent's realtime / bridge setup — its co-agent pairings, its\n type-level realtime configuration, and the bridge identities that route inbound calls and invites to it.\n </p>\n\n <!-- Co-agent pairings -->\n <div class=\"rt-section\">\n <div class=\"rt-section-header\">\n <i class=\"fa-solid fa-people-arrows\"></i>\n <span>Co-agent pairings</span>\n <span class=\"rt-count\">{{ Pairings.length }}</span>\n </div>\n @if (Pairings.length === 0) {\n <div class=\"rt-empty\">No co-agent pairings reference this agent.</div>\n } @else {\n <div class=\"rt-list\">\n @for (p of Pairings; track p.ID) {\n <button type=\"button\" class=\"rt-row\" (click)=\"OpenPairing(p)\">\n <span class=\"rt-row-icon\"><i class=\"fa-solid {{ PairingTypeIcon(p.Type) }}\"></i></span>\n <span class=\"rt-row-main\">\n <span class=\"rt-row-title\">\n {{ p.Type }}\n @if (p.role === 'as-coagent') {\n <span class=\"rt-rel\">voices</span> {{ OtherAgentName(p) }}\n } @else {\n <span class=\"rt-rel\">voiced by</span> {{ OtherAgentName(p) }}\n }\n </span>\n <span class=\"rt-row-sub\">\n seq {{ p.Sequence }}\n @if (p.IsDefault) { · <span class=\"rt-tag\">default</span> }\n </span>\n </span>\n <span class=\"rt-status\" [class.active]=\"p.Status === 'Active'\">{{ p.Status }}</span>\n </button>\n }\n </div>\n }\n </div>\n\n <!-- Bridge identities -->\n <div class=\"rt-section\">\n <div class=\"rt-section-header\">\n <i class=\"fa-solid fa-id-card\"></i>\n <span>Bridge identities</span>\n <span class=\"rt-count\">{{ Identities.length }}</span>\n </div>\n @if (Identities.length === 0) {\n <div class=\"rt-empty\">No bridge identities provisioned for this agent.</div>\n } @else {\n <div class=\"rt-list\">\n @for (i of Identities; track i.ID) {\n <button type=\"button\" class=\"rt-row\" (click)=\"OpenIdentity(i)\">\n <span class=\"rt-row-icon\"><i class=\"fa-solid {{ IdentityTypeIcon(i.IdentityType) }}\"></i></span>\n <span class=\"rt-row-main\">\n <span class=\"rt-row-title\">{{ i.DisplayName || i.IdentityValue }}</span>\n <span class=\"rt-row-sub\">{{ i.IdentityType }} · {{ i.Provider }}</span>\n </span>\n <span class=\"rt-status\" [class.active]=\"i.IsActive\">{{ i.IsActive ? 'Active' : 'Inactive' }}</span>\n </button>\n }\n </div>\n }\n </div>\n\n <!-- Type configuration -->\n <div class=\"rt-section\">\n <div class=\"rt-section-header\">\n <i class=\"fa-solid fa-gears\"></i>\n <span>Type configuration</span>\n </div>\n @if (PrettyTypeConfiguration) {\n <pre class=\"rt-config\">{{ PrettyTypeConfiguration }}</pre>\n } @else {\n <div class=\"rt-empty\">No type configuration set — this agent uses its type's defaults.</div>\n }\n </div>\n }\n</mj-collapsible-panel>\n"]}
1
+ {"version":3,"file":"agent-realtime.panel.js","sourceRoot":"","sources":["../../../../src/lib/panels/ai-agents/agent-realtime.panel.ts","../../../../src/lib/panels/ai-agents/agent-realtime.panel.html"],"names":[],"mappings":"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","sourcesContent":["import { Component, OnInit, inject, ChangeDetectorRef } from '@angular/core';\nimport { CompositeKey, RunView } from '@memberjunction/core';\nimport { RegisterClassEx, UUIDsEqual } from '@memberjunction/global';\nimport { BaseFormPanel } from '@memberjunction/ng-base-forms';\nimport { MJAIAgentEntity } from '@memberjunction/core-entities';\nimport { SharedService } from '@memberjunction/ng-shared';\n\n/** Read-only co-agent pairing row for the summary list. */\ninterface CoAgentPairingRow {\n ID: string;\n CoAgentID: string;\n CoAgent: string | null;\n TargetAgentID: string | null;\n TargetAgent: string | null;\n Type: string;\n IsDefault: boolean;\n Sequence: number;\n Status: string;\n /** 'as-coagent' = this agent IS the co-agent; 'as-target' = this agent is the voiced target. */\n role: 'as-coagent' | 'as-target';\n}\n\n/** Read-only bridge identity row for the summary list. */\ninterface BridgeIdentityRow {\n ID: string;\n IdentityType: string;\n IdentityValue: string;\n DisplayName: string | null;\n Provider: string;\n IsActive: boolean;\n}\n\n/**\n * AI Agent \"Realtime\" panel (Pattern 1 — BaseFormPanel slot). A read-only\n * summary that puts an agent's realtime / bridge setup in one place:\n * - its co-agent pairings (rows where this agent is the co-agent OR the\n * voiced target, from 'MJ: AI Agent Co Agents'),\n * - its `TypeConfiguration` (the agent's typed realtime config layer),\n * - its bridge agent identities ('MJ: AI Bridge Agent Identities' for this\n * agent).\n *\n * Registers against the 'AI Agents' entity, `after-fields` slot. The AI Agent\n * form is a full custom override whose template doesn't emit the `after-fields`\n * marker, so this panel falls through to the container's always-present\n * `after-everything` slot and mounts at the bottom of the form — functional,\n * just lower than ideal until the custom form emits the slot marker.\n *\n * Provider-correct: all RunViews are scoped to the host form's `ProviderToUse`.\n */\n@RegisterClassEx(BaseFormPanel, {\n key: 'ai-agents:realtime',\n skipNullKeyWarning: true,\n metadata: {\n entity: 'AI Agents',\n slot: 'after-fields',\n sortKey: 40,\n },\n})\n@Component({\n standalone: false,\n selector: 'mj-ai-agent-realtime-panel',\n templateUrl: './agent-realtime.panel.html',\n styleUrls: ['./agent-realtime.panel.css'],\n})\nexport class AgentRealtimePanel extends BaseFormPanel<MJAIAgentEntity> implements OnInit {\n private cdr = inject(ChangeDetectorRef);\n\n public Loading = false;\n public LoadError: string | null = null;\n public Pairings: CoAgentPairingRow[] = [];\n public Identities: BridgeIdentityRow[] = [];\n\n private prettyTypeConfigCache: string | null | undefined = undefined;\n\n async ngOnInit(): Promise<void> {\n await this.loadData();\n }\n\n /** Pretty-printed TypeConfiguration JSON (cached, falls back to raw on parse error). */\n public get PrettyTypeConfiguration(): string | null {\n if (this.prettyTypeConfigCache !== undefined) return this.prettyTypeConfigCache;\n const raw = this.Record?.TypeConfiguration ?? null;\n if (!raw) {\n this.prettyTypeConfigCache = null;\n return null;\n }\n try {\n this.prettyTypeConfigCache = JSON.stringify(JSON.parse(raw), null, 2);\n } catch {\n this.prettyTypeConfigCache = raw;\n }\n return this.prettyTypeConfigCache;\n }\n\n public get HasAnything(): boolean {\n return this.Pairings.length > 0 || this.Identities.length > 0 || this.PrettyTypeConfiguration != null;\n }\n\n /**\n * Loads the agent's pairings + bridge identities in one batched round trip,\n * scoped to the host form's provider. TypeConfiguration is read straight off\n * the already-loaded record (no query needed).\n */\n private async loadData(): Promise<void> {\n const agentId = this.Record?.ID;\n if (!agentId) return;\n\n this.Loading = true;\n this.LoadError = null;\n try {\n const rv = RunView.FromMetadataProvider(this.FormComponent.ProviderToUse);\n const results = await rv.RunViews([\n {\n EntityName: 'MJ: AI Agent Co Agents',\n Fields: ['ID', 'CoAgentID', 'CoAgent', 'TargetAgentID', 'TargetAgent', 'Type', 'IsDefault', 'Sequence', 'Status'],\n ExtraFilter: `CoAgentID='${agentId}' OR TargetAgentID='${agentId}'`,\n OrderBy: 'Sequence ASC',\n ResultType: 'simple',\n },\n {\n EntityName: 'MJ: AI Bridge Agent Identities',\n Fields: ['ID', 'IdentityType', 'IdentityValue', 'DisplayName', 'Provider', 'IsActive'],\n ExtraFilter: `AgentID='${agentId}'`,\n OrderBy: 'Provider ASC',\n ResultType: 'simple',\n },\n ]);\n\n const pairings = (results[0]?.Success ? results[0].Results : []) as Array<Omit<CoAgentPairingRow, 'role'>>;\n this.Pairings = pairings.map((p) => ({\n ...p,\n role: UUIDsEqual(p.CoAgentID, agentId) ? 'as-coagent' : 'as-target',\n }));\n this.Identities = (results[1]?.Success ? results[1].Results : []) as BridgeIdentityRow[];\n } catch (error) {\n console.error('Error loading agent realtime panel data:', error);\n this.LoadError = 'Failed to load realtime setup.';\n } finally {\n this.Loading = false;\n this.cdr.markForCheck();\n }\n }\n\n public PairingTypeIcon(type: string): string {\n switch (type) {\n case 'CoAgent': return 'fa-microphone-lines';\n case 'Delegate': return 'fa-share-from-square';\n case 'Fallback': return 'fa-life-ring';\n case 'Observer': return 'fa-eye';\n case 'Peer': return 'fa-people-arrows';\n case 'Reviewer': return 'fa-clipboard-check';\n default: return 'fa-link';\n }\n }\n\n public IdentityTypeIcon(type: string): string {\n switch (type) {\n case 'Email': return 'fa-envelope';\n case 'PhoneNumber': return 'fa-phone';\n case 'AccountID': return 'fa-id-badge';\n default: return 'fa-id-card';\n }\n }\n\n /** The \"other\" agent in a pairing (the one that isn't the agent on this form). */\n public OtherAgentName(p: CoAgentPairingRow): string {\n return p.role === 'as-coagent' ? (p.TargetAgent ?? 'this agent') : (p.CoAgent ?? 'unknown co-agent');\n }\n\n public OpenPairing(p: CoAgentPairingRow): void {\n SharedService.Instance.OpenEntityRecord('MJ: AI Agent Co Agents', CompositeKey.FromID(p.ID));\n }\n\n public OpenIdentity(i: BridgeIdentityRow): void {\n SharedService.Instance.OpenEntityRecord('MJ: AI Bridge Agent Identities', CompositeKey.FromID(i.ID));\n }\n}\n\n/** Tree-shake guard — invoked from the panels module loader. */\nexport function LoadAgentRealtimePanel(): void {\n /* no-op marker */\n}\n","<mj-collapsible-panel\n SectionKey=\"agentRealtime\"\n SectionName=\"Realtime\"\n Icon=\"fa fa-tower-broadcast\"\n [Form]=\"FormComponent\"\n [FormContext]=\"FormContext\">\n\n @if (Loading) {\n <mj-loading text=\"Loading realtime setup...\"></mj-loading>\n } @else if (LoadError) {\n <mj-alert Variant=\"error\">{{ LoadError }}</mj-alert>\n } @else {\n <p class=\"rt-intro\">\n A one-place summary of this agent's realtime / bridge setup — its co-agent pairings, its\n type-level realtime configuration, and the bridge identities that route inbound calls and invites to it.\n </p>\n\n <!-- Co-agent pairings -->\n <div class=\"rt-section\">\n <div class=\"rt-section-header\">\n <i class=\"fa-solid fa-people-arrows\"></i>\n <span>Co-agent pairings</span>\n <span class=\"rt-count\">{{ Pairings.length }}</span>\n </div>\n @if (Pairings.length === 0) {\n <div class=\"rt-empty\">No co-agent pairings reference this agent.</div>\n } @else {\n <div class=\"rt-list\">\n @for (p of Pairings; track p.ID) {\n <button type=\"button\" class=\"rt-row\" (click)=\"OpenPairing(p)\">\n <span class=\"rt-row-icon\"><i class=\"fa-solid {{ PairingTypeIcon(p.Type) }}\"></i></span>\n <span class=\"rt-row-main\">\n <span class=\"rt-row-title\">\n {{ p.Type }}\n @if (p.role === 'as-coagent') {\n <span class=\"rt-rel\">voices</span> {{ OtherAgentName(p) }}\n } @else {\n <span class=\"rt-rel\">voiced by</span> {{ OtherAgentName(p) }}\n }\n </span>\n <span class=\"rt-row-sub\">\n seq {{ p.Sequence }}\n @if (p.IsDefault) { · <span class=\"rt-tag\">default</span> }\n </span>\n </span>\n <span class=\"rt-status\" [class.active]=\"p.Status === 'Active'\">{{ p.Status }}</span>\n </button>\n }\n </div>\n }\n </div>\n\n <!-- Bridge identities -->\n <div class=\"rt-section\">\n <div class=\"rt-section-header\">\n <i class=\"fa-solid fa-id-card\"></i>\n <span>Bridge identities</span>\n <span class=\"rt-count\">{{ Identities.length }}</span>\n </div>\n @if (Identities.length === 0) {\n <div class=\"rt-empty\">No bridge identities provisioned for this agent.</div>\n } @else {\n <div class=\"rt-list\">\n @for (i of Identities; track i.ID) {\n <button type=\"button\" class=\"rt-row\" (click)=\"OpenIdentity(i)\">\n <span class=\"rt-row-icon\"><i class=\"fa-solid {{ IdentityTypeIcon(i.IdentityType) }}\"></i></span>\n <span class=\"rt-row-main\">\n <span class=\"rt-row-title\">{{ i.DisplayName || i.IdentityValue }}</span>\n <span class=\"rt-row-sub\">{{ i.IdentityType }} · {{ i.Provider }}</span>\n </span>\n <span class=\"rt-status\" [class.active]=\"i.IsActive\">{{ i.IsActive ? 'Active' : 'Inactive' }}</span>\n </button>\n }\n </div>\n }\n </div>\n\n <!-- Type configuration -->\n <div class=\"rt-section\">\n <div class=\"rt-section-header\">\n <i class=\"fa-solid fa-gears\"></i>\n <span>Type configuration</span>\n </div>\n @if (PrettyTypeConfiguration) {\n <pre class=\"rt-config\">{{ PrettyTypeConfiguration }}</pre>\n } @else {\n <div class=\"rt-empty\">No type configuration set — this agent uses its type's defaults.</div>\n }\n </div>\n }\n</mj-collapsible-panel>\n"]}
@@ -0,0 +1,43 @@
1
+ import { ElementRef } from '@angular/core';
2
+ import { BaseFormPanel } from '@memberjunction/ng-base-forms';
3
+ import { MJAISkillEntity } from '@memberjunction/core-entities';
4
+ import * as i0 from "@angular/core";
5
+ /**
6
+ * Adds Manage Permissions / Export SKILL.md / Import SKILL.md actions to the generated
7
+ * `MJ: AI Skills` form via the BaseFormPanel slot system (Pattern 1 — see PANELS.md) rather than a
8
+ * full custom form override, since the generated form's field panels and related-entity grids are
9
+ * otherwise fine as-is.
10
+ *
11
+ * - Manage Permissions opens the dedicated `<mj-skill-permissions-dialog>` (from
12
+ * `@memberjunction/ng-agents`), which reads/writes the dedicated `MJ: AI Skill Permissions`
13
+ * table (per-user / per-role View/Run/Edit/Delete) — the same open-by-default, dedicated-table
14
+ * model AI Agents use. It is gated behind the "Can Share Skills" authorization; authoring/using
15
+ * your own skills never requires it.
16
+ * - Export/Import call the `AISkill.ExportMarkdown` / `AISkill.ImportMarkdown` Remote Operations
17
+ * (typed, provider-routed — see guides/REMOTE_OPERATIONS_GUIDE.md), which wrap
18
+ * `SkillImportExportService` in `@memberjunction/ai-agents` server-side.
19
+ */
20
+ export declare class AISkillSharingPanel extends BaseFormPanel<MJAISkillEntity> {
21
+ importFileInput: ElementRef<HTMLInputElement>;
22
+ PermissionsDialogVisible: boolean;
23
+ IsExporting: boolean;
24
+ IsImporting: boolean;
25
+ /**
26
+ * Whether the current user may manage this skill's permission grid (per-user / per-role
27
+ * View/Run/Edit/Delete on the skill). `BaseFormPanel` has no Provider input (the panel slot
28
+ * system doesn't thread one through yet), so this uses the global default provider —
29
+ * consistent with the rest of the not-yet-multi-provider-migrated panel system today.
30
+ */
31
+ get CanShareSkills(): boolean;
32
+ get CanExportImport(): boolean;
33
+ OpenPermissionsDialog(): void;
34
+ OnPermissionsDialogClosed(): void;
35
+ ExportMarkdown(): Promise<void>;
36
+ /** Opens the hidden file input; the actual import happens in `OnImportFileSelected`. */
37
+ TriggerImport(): void;
38
+ OnImportFileSelected(event: Event): Promise<void>;
39
+ private downloadTextFile;
40
+ static ɵfac: i0.ɵɵFactoryDeclaration<AISkillSharingPanel, never>;
41
+ static ɵcmp: i0.ɵɵComponentDeclaration<AISkillSharingPanel, "mj-ai-skill-sharing-panel", never, {}, {}, never, never, false, never>;
42
+ }
43
+ //# sourceMappingURL=ai-skill-sharing-panel.component.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ai-skill-sharing-panel.component.d.ts","sourceRoot":"","sources":["../../../../src/lib/panels/ai-skill-sharing/ai-skill-sharing-panel.component.ts"],"names":[],"mappings":"AAAA,OAAO,EAAwB,UAAU,EAAE,MAAM,eAAe,CAAC;AAEjE,OAAO,EAAE,aAAa,EAAE,MAAM,+BAA+B,CAAC;AAE9D,OAAO,EAAE,eAAe,EAAE,MAAM,+BAA+B,CAAC;;AAUhE;;;;;;;;;;;;;;GAcG;AACH,qBAWa,mBAAoB,SAAQ,aAAa,CAAC,eAAe,CAAC;IACrC,eAAe,EAAG,UAAU,CAAC,gBAAgB,CAAC,CAAC;IAEtE,wBAAwB,UAAS;IAEjC,WAAW,UAAS;IACpB,WAAW,UAAS;IAE3B;;;;;OAKG;IACH,IAAW,cAAc,IAAI,OAAO,CAcnC;IAED,IAAW,eAAe,IAAI,OAAO,CAEpC;IAEM,qBAAqB,IAAI,IAAI;IAI7B,yBAAyB,IAAI,IAAI;IAI3B,cAAc,IAAI,OAAO,CAAC,IAAI,CAAC;IA2B5C,wFAAwF;IACjF,aAAa,IAAI,IAAI;IAIf,oBAAoB,CAAC,KAAK,EAAE,KAAK,GAAG,OAAO,CAAC,IAAI,CAAC;IAiD9D,OAAO,CAAC,gBAAgB;yCA3Hf,mBAAmB;2CAAnB,mBAAmB;CAoI/B"}