@memberjunction/ng-core-entity-forms 6.1.4 → 6.2.0-edge.1

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 (327) hide show
  1. package/README.md +22 -0
  2. package/dist/lib/custom/AIAgentCategories/ai-agent-category-overview.panel.d.ts +1 -1
  3. package/dist/lib/custom/AIAgentCategories/ai-agent-category-overview.panel.js +2 -2
  4. package/dist/lib/custom/AIAgentCategories/ai-agent-category-overview.panel.js.map +1 -1
  5. package/dist/lib/custom/AIAgentSessions/ai-agent-session-form.component.js.map +1 -1
  6. package/dist/lib/custom/AIAgents/add-action-dialog.component.d.ts +90 -16
  7. package/dist/lib/custom/AIAgents/add-action-dialog.component.d.ts.map +1 -1
  8. package/dist/lib/custom/AIAgents/add-action-dialog.component.js +218 -70
  9. package/dist/lib/custom/AIAgents/add-action-dialog.component.js.map +1 -1
  10. package/dist/lib/custom/AIAgents/agent-prompt-advanced-settings-dialog.component.d.ts +80 -16
  11. package/dist/lib/custom/AIAgents/agent-prompt-advanced-settings-dialog.component.d.ts.map +1 -1
  12. package/dist/lib/custom/AIAgents/agent-prompt-advanced-settings-dialog.component.js +146 -46
  13. package/dist/lib/custom/AIAgents/agent-prompt-advanced-settings-dialog.component.js.map +1 -1
  14. package/dist/lib/custom/AIAgents/ai-agent-form.component.d.ts +329 -27
  15. package/dist/lib/custom/AIAgents/ai-agent-form.component.d.ts.map +1 -1
  16. package/dist/lib/custom/AIAgents/ai-agent-form.component.js +794 -262
  17. package/dist/lib/custom/AIAgents/ai-agent-form.component.js.map +1 -1
  18. package/dist/lib/custom/AIAgents/ai-agent-management.service.d.ts +76 -0
  19. package/dist/lib/custom/AIAgents/ai-agent-management.service.d.ts.map +1 -1
  20. package/dist/lib/custom/AIAgents/ai-agent-management.service.js +77 -33
  21. package/dist/lib/custom/AIAgents/ai-agent-management.service.js.map +1 -1
  22. package/dist/lib/custom/AIAgents/create-prompt-dialog.component.d.ts +69 -15
  23. package/dist/lib/custom/AIAgents/create-prompt-dialog.component.d.ts.map +1 -1
  24. package/dist/lib/custom/AIAgents/create-prompt-dialog.component.js +182 -74
  25. package/dist/lib/custom/AIAgents/create-prompt-dialog.component.js.map +1 -1
  26. package/dist/lib/custom/AIAgents/create-sub-agent-dialog.component.d.ts +105 -25
  27. package/dist/lib/custom/AIAgents/create-sub-agent-dialog.component.d.ts.map +1 -1
  28. package/dist/lib/custom/AIAgents/create-sub-agent-dialog.component.js +272 -112
  29. package/dist/lib/custom/AIAgents/create-sub-agent-dialog.component.js.map +1 -1
  30. package/dist/lib/custom/AIAgents/new-agent-dialog.component.d.ts +32 -6
  31. package/dist/lib/custom/AIAgents/new-agent-dialog.component.d.ts.map +1 -1
  32. package/dist/lib/custom/AIAgents/new-agent-dialog.component.js +71 -19
  33. package/dist/lib/custom/AIAgents/new-agent-dialog.component.js.map +1 -1
  34. package/dist/lib/custom/AIAgents/new-agent-dialog.service.d.ts +10 -0
  35. package/dist/lib/custom/AIAgents/new-agent-dialog.service.d.ts.map +1 -1
  36. package/dist/lib/custom/AIAgents/new-agent-dialog.service.js +27 -7
  37. package/dist/lib/custom/AIAgents/new-agent-dialog.service.js.map +1 -1
  38. package/dist/lib/custom/AIAgents/prompt-selector-dialog.component.d.ts +65 -15
  39. package/dist/lib/custom/AIAgents/prompt-selector-dialog.component.d.ts.map +1 -1
  40. package/dist/lib/custom/AIAgents/prompt-selector-dialog.component.js +152 -52
  41. package/dist/lib/custom/AIAgents/prompt-selector-dialog.component.js.map +1 -1
  42. package/dist/lib/custom/AIAgents/sub-agent-advanced-settings-dialog.component.d.ts +81 -15
  43. package/dist/lib/custom/AIAgents/sub-agent-advanced-settings-dialog.component.d.ts.map +1 -1
  44. package/dist/lib/custom/AIAgents/sub-agent-advanced-settings-dialog.component.js +145 -45
  45. package/dist/lib/custom/AIAgents/sub-agent-advanced-settings-dialog.component.js.map +1 -1
  46. package/dist/lib/custom/AIAgents/sub-agent-selector-dialog.component.d.ts +71 -17
  47. package/dist/lib/custom/AIAgents/sub-agent-selector-dialog.component.d.ts.map +1 -1
  48. package/dist/lib/custom/AIAgents/sub-agent-selector-dialog.component.js +175 -67
  49. package/dist/lib/custom/AIAgents/sub-agent-selector-dialog.component.js.map +1 -1
  50. package/dist/lib/custom/AIPromptRuns/ai-prompt-run-form.component.d.ts +173 -27
  51. package/dist/lib/custom/AIPromptRuns/ai-prompt-run-form.component.d.ts.map +1 -1
  52. package/dist/lib/custom/AIPromptRuns/ai-prompt-run-form.component.js +385 -93
  53. package/dist/lib/custom/AIPromptRuns/ai-prompt-run-form.component.js.map +1 -1
  54. package/dist/lib/custom/AIPromptRuns/chat-message-viewer.component.d.ts +64 -4
  55. package/dist/lib/custom/AIPromptRuns/chat-message-viewer.component.d.ts.map +1 -1
  56. package/dist/lib/custom/AIPromptRuns/chat-message-viewer.component.js +129 -29
  57. package/dist/lib/custom/AIPromptRuns/chat-message-viewer.component.js.map +1 -1
  58. package/dist/lib/custom/AIPrompts/ai-prompt-form.component.d.ts +260 -27
  59. package/dist/lib/custom/AIPrompts/ai-prompt-form.component.d.ts.map +1 -1
  60. package/dist/lib/custom/AIPrompts/ai-prompt-form.component.js +686 -238
  61. package/dist/lib/custom/AIPrompts/ai-prompt-form.component.js.map +1 -1
  62. package/dist/lib/custom/AIPrompts/ai-prompt-management.service.d.ts +10 -0
  63. package/dist/lib/custom/AIPrompts/ai-prompt-management.service.d.ts.map +1 -1
  64. package/dist/lib/custom/AIPrompts/ai-prompt-management.service.js +17 -9
  65. package/dist/lib/custom/AIPrompts/ai-prompt-management.service.js.map +1 -1
  66. package/dist/lib/custom/AIPrompts/template-selector-dialog.component.d.ts +74 -16
  67. package/dist/lib/custom/AIPrompts/template-selector-dialog.component.d.ts.map +1 -1
  68. package/dist/lib/custom/AIPrompts/template-selector-dialog.component.js +174 -58
  69. package/dist/lib/custom/AIPrompts/template-selector-dialog.component.js.map +1 -1
  70. package/dist/lib/custom/Actions/action-execution-log-form.component.d.ts +108 -14
  71. package/dist/lib/custom/Actions/action-execution-log-form.component.d.ts.map +1 -1
  72. package/dist/lib/custom/Actions/action-execution-log-form.component.js +258 -70
  73. package/dist/lib/custom/Actions/action-execution-log-form.component.js.map +1 -1
  74. package/dist/lib/custom/Actions/action-form.component.d.ts +198 -14
  75. package/dist/lib/custom/Actions/action-form.component.d.ts.map +1 -1
  76. package/dist/lib/custom/Actions/action-form.component.js +387 -107
  77. package/dist/lib/custom/Actions/action-form.component.js.map +1 -1
  78. package/dist/lib/custom/BridgeProviders/bridge-provider-features.d.ts +12 -6
  79. package/dist/lib/custom/BridgeProviders/bridge-provider-features.d.ts.map +1 -1
  80. package/dist/lib/custom/BridgeProviders/bridge-provider-features.js +41 -29
  81. package/dist/lib/custom/BridgeProviders/bridge-provider-features.js.map +1 -1
  82. package/dist/lib/custom/BridgeProviders/bridge-provider-form.component.js +14 -14
  83. package/dist/lib/custom/BridgeProviders/bridge-provider-form.component.js.map +1 -1
  84. package/dist/lib/custom/Companies/company-overview.panel.d.ts +1 -1
  85. package/dist/lib/custom/Companies/company-overview.panel.js +2 -2
  86. package/dist/lib/custom/Companies/company-overview.panel.js.map +1 -1
  87. package/dist/lib/custom/Conversations/conversation-overview.panel.d.ts +1 -1
  88. package/dist/lib/custom/Conversations/conversation-overview.panel.js +2 -2
  89. package/dist/lib/custom/Conversations/conversation-overview.panel.js.map +1 -1
  90. package/dist/lib/custom/Employees/employee-overview.panel.d.ts +1 -1
  91. package/dist/lib/custom/Employees/employee-overview.panel.js +2 -2
  92. package/dist/lib/custom/Employees/employee-overview.panel.js.map +1 -1
  93. package/dist/lib/custom/Entities/entity-form.component.d.ts +209 -28
  94. package/dist/lib/custom/Entities/entity-form.component.d.ts.map +1 -1
  95. package/dist/lib/custom/Entities/entity-form.component.js +494 -138
  96. package/dist/lib/custom/Entities/entity-form.component.js.map +1 -1
  97. package/dist/lib/custom/EntityActions/entityaction.form.component.d.ts +5 -1
  98. package/dist/lib/custom/EntityActions/entityaction.form.component.d.ts.map +1 -1
  99. package/dist/lib/custom/EntityActions/entityaction.form.component.js +10 -2
  100. package/dist/lib/custom/EntityActions/entityaction.form.component.js.map +1 -1
  101. package/dist/lib/custom/Files/file-form.component.d.ts +1 -1
  102. package/dist/lib/custom/Files/file-form.component.js +2 -2
  103. package/dist/lib/custom/Files/file-form.component.js.map +1 -1
  104. package/dist/lib/custom/Lists/list-form.component.d.ts +300 -36
  105. package/dist/lib/custom/Lists/list-form.component.d.ts.map +1 -1
  106. package/dist/lib/custom/Lists/list-form.component.js +664 -208
  107. package/dist/lib/custom/Lists/list-form.component.js.map +1 -1
  108. package/dist/lib/custom/MLModels/ml-model-form.component.d.ts +27 -0
  109. package/dist/lib/custom/MLModels/ml-model-form.component.d.ts.map +1 -0
  110. package/dist/lib/custom/MLModels/ml-model-form.component.js +193 -0
  111. package/dist/lib/custom/MLModels/ml-model-form.component.js.map +1 -0
  112. package/dist/lib/custom/MLModels/ml-model-view-models.d.ts +75 -0
  113. package/dist/lib/custom/MLModels/ml-model-view-models.d.ts.map +1 -0
  114. package/dist/lib/custom/MLModels/ml-model-view-models.js +244 -0
  115. package/dist/lib/custom/MLModels/ml-model-view-models.js.map +1 -0
  116. package/dist/lib/custom/MLModels/ps-model-detail.component.d.ts +173 -0
  117. package/dist/lib/custom/MLModels/ps-model-detail.component.d.ts.map +1 -0
  118. package/dist/lib/custom/MLModels/ps-model-detail.component.js +883 -0
  119. package/dist/lib/custom/MLModels/ps-model-detail.component.js.map +1 -0
  120. package/dist/lib/custom/Queries/query-form.component.d.ts +201 -26
  121. package/dist/lib/custom/Queries/query-form.component.d.ts.map +1 -1
  122. package/dist/lib/custom/Queries/query-form.component.js +429 -109
  123. package/dist/lib/custom/Queries/query-form.component.js.map +1 -1
  124. package/dist/lib/custom/Queries/query-run-dialog.component.d.ts +107 -14
  125. package/dist/lib/custom/Queries/query-run-dialog.component.d.ts.map +1 -1
  126. package/dist/lib/custom/Queries/query-run-dialog.component.js +249 -79
  127. package/dist/lib/custom/Queries/query-run-dialog.component.js.map +1 -1
  128. package/dist/lib/custom/RecordProcesses/record-process-form.component.d.ts +133 -7
  129. package/dist/lib/custom/RecordProcesses/record-process-form.component.d.ts.map +1 -1
  130. package/dist/lib/custom/RecordProcesses/record-process-form.component.js +1268 -19
  131. package/dist/lib/custom/RecordProcesses/record-process-form.component.js.map +1 -1
  132. package/dist/lib/custom/SearchScopes/searchscope-form.component.d.ts +1 -1
  133. package/dist/lib/custom/SearchScopes/searchscope-form.component.js +4 -4
  134. package/dist/lib/custom/SearchScopes/searchscope-form.component.js.map +1 -1
  135. package/dist/lib/custom/SessionBridges/session-bridge-form.component.js.map +1 -1
  136. package/dist/lib/custom/Templates/template-param-dialog.component.d.ts +77 -13
  137. package/dist/lib/custom/Templates/template-param-dialog.component.d.ts.map +1 -1
  138. package/dist/lib/custom/Templates/template-param-dialog.component.js +196 -78
  139. package/dist/lib/custom/Templates/template-param-dialog.component.js.map +1 -1
  140. package/dist/lib/custom/Templates/template-params-grid.component.d.ts +49 -7
  141. package/dist/lib/custom/Templates/template-params-grid.component.d.ts.map +1 -1
  142. package/dist/lib/custom/Templates/template-params-grid.component.js +132 -44
  143. package/dist/lib/custom/Templates/template-params-grid.component.js.map +1 -1
  144. package/dist/lib/custom/Templates/templates-form.component.d.ts +142 -17
  145. package/dist/lib/custom/Templates/templates-form.component.d.ts.map +1 -1
  146. package/dist/lib/custom/Templates/templates-form.component.js +333 -113
  147. package/dist/lib/custom/Templates/templates-form.component.js.map +1 -1
  148. package/dist/lib/custom/Tests/entity-link-pill.component.d.ts +24 -4
  149. package/dist/lib/custom/Tests/entity-link-pill.component.d.ts.map +1 -1
  150. package/dist/lib/custom/Tests/entity-link-pill.component.js +64 -20
  151. package/dist/lib/custom/Tests/entity-link-pill.component.js.map +1 -1
  152. package/dist/lib/custom/Tests/test-form.component.d.ts +217 -27
  153. package/dist/lib/custom/Tests/test-form.component.d.ts.map +1 -1
  154. package/dist/lib/custom/Tests/test-form.component.js +549 -169
  155. package/dist/lib/custom/Tests/test-form.component.js.map +1 -1
  156. package/dist/lib/custom/Tests/test-run-checks.d.ts +2 -0
  157. package/dist/lib/custom/Tests/test-run-checks.d.ts.map +1 -1
  158. package/dist/lib/custom/Tests/test-run-checks.js +5 -1
  159. package/dist/lib/custom/Tests/test-run-checks.js.map +1 -1
  160. package/dist/lib/custom/Tests/test-run-feedback-form.component.d.ts +2 -0
  161. package/dist/lib/custom/Tests/test-run-feedback-form.component.d.ts.map +1 -1
  162. package/dist/lib/custom/Tests/test-run-feedback-form.component.js +5 -1
  163. package/dist/lib/custom/Tests/test-run-feedback-form.component.js.map +1 -1
  164. package/dist/lib/custom/Tests/test-run-form.component.d.ts +146 -18
  165. package/dist/lib/custom/Tests/test-run-form.component.d.ts.map +1 -1
  166. package/dist/lib/custom/Tests/test-run-form.component.js +362 -106
  167. package/dist/lib/custom/Tests/test-run-form.component.js.map +1 -1
  168. package/dist/lib/custom/Tests/test-suite-form.component.d.ts +390 -47
  169. package/dist/lib/custom/Tests/test-suite-form.component.d.ts.map +1 -1
  170. package/dist/lib/custom/Tests/test-suite-form.component.js +1015 -343
  171. package/dist/lib/custom/Tests/test-suite-form.component.js.map +1 -1
  172. package/dist/lib/custom/Tests/test-suite-run-form.component.d.ts +214 -26
  173. package/dist/lib/custom/Tests/test-suite-run-form.component.d.ts.map +1 -1
  174. package/dist/lib/custom/Tests/test-suite-run-form.component.js +535 -159
  175. package/dist/lib/custom/Tests/test-suite-run-form.component.js.map +1 -1
  176. package/dist/lib/custom/Users/user-overview.panel.d.ts +1 -1
  177. package/dist/lib/custom/Users/user-overview.panel.js +2 -2
  178. package/dist/lib/custom/Users/user-overview.panel.js.map +1 -1
  179. package/dist/lib/custom/ai-agent-run/ai-agent-run-analytics.component.d.ts +208 -29
  180. package/dist/lib/custom/ai-agent-run/ai-agent-run-analytics.component.d.ts.map +1 -1
  181. package/dist/lib/custom/ai-agent-run/ai-agent-run-analytics.component.js +446 -138
  182. package/dist/lib/custom/ai-agent-run/ai-agent-run-analytics.component.js.map +1 -1
  183. package/dist/lib/custom/ai-agent-run/ai-agent-run-cost.service.d.ts +6 -0
  184. package/dist/lib/custom/ai-agent-run/ai-agent-run-cost.service.d.ts.map +1 -1
  185. package/dist/lib/custom/ai-agent-run/ai-agent-run-cost.service.js +16 -4
  186. package/dist/lib/custom/ai-agent-run/ai-agent-run-cost.service.js.map +1 -1
  187. package/dist/lib/custom/ai-agent-run/ai-agent-run-data.service.d.ts +50 -6
  188. package/dist/lib/custom/ai-agent-run/ai-agent-run-data.service.d.ts.map +1 -1
  189. package/dist/lib/custom/ai-agent-run/ai-agent-run-data.service.js +84 -12
  190. package/dist/lib/custom/ai-agent-run/ai-agent-run-data.service.js.map +1 -1
  191. package/dist/lib/custom/ai-agent-run/ai-agent-run-step-detail.component.d.ts +89 -5
  192. package/dist/lib/custom/ai-agent-run/ai-agent-run-step-detail.component.d.ts.map +1 -1
  193. package/dist/lib/custom/ai-agent-run/ai-agent-run-step-detail.component.js +216 -70
  194. package/dist/lib/custom/ai-agent-run/ai-agent-run-step-detail.component.js.map +1 -1
  195. package/dist/lib/custom/ai-agent-run/ai-agent-run-step-node.component.d.ts +62 -3
  196. package/dist/lib/custom/ai-agent-run/ai-agent-run-step-node.component.d.ts.map +1 -1
  197. package/dist/lib/custom/ai-agent-run/ai-agent-run-step-node.component.js +140 -42
  198. package/dist/lib/custom/ai-agent-run/ai-agent-run-step-node.component.js.map +1 -1
  199. package/dist/lib/custom/ai-agent-run/ai-agent-run-timeline.component.d.ts +81 -10
  200. package/dist/lib/custom/ai-agent-run/ai-agent-run-timeline.component.d.ts.map +1 -1
  201. package/dist/lib/custom/ai-agent-run/ai-agent-run-timeline.component.js +165 -37
  202. package/dist/lib/custom/ai-agent-run/ai-agent-run-timeline.component.js.map +1 -1
  203. package/dist/lib/custom/ai-agent-run/ai-agent-run.component.d.ts +121 -14
  204. package/dist/lib/custom/ai-agent-run/ai-agent-run.component.d.ts.map +1 -1
  205. package/dist/lib/custom/ai-agent-run/ai-agent-run.component.js +287 -79
  206. package/dist/lib/custom/ai-agent-run/ai-agent-run.component.js.map +1 -1
  207. package/dist/lib/custom/ai-agent-run/flow/agent-run-flow.component.d.ts +101 -15
  208. package/dist/lib/custom/ai-agent-run/flow/agent-run-flow.component.d.ts.map +1 -1
  209. package/dist/lib/custom/ai-agent-run/flow/agent-run-flow.component.js +281 -97
  210. package/dist/lib/custom/ai-agent-run/flow/agent-run-flow.component.js.map +1 -1
  211. package/dist/lib/custom/ai-agent-run/flow/agent-run-flow.model.d.ts +43 -25
  212. package/dist/lib/custom/ai-agent-run/flow/agent-run-flow.model.d.ts.map +1 -1
  213. package/dist/lib/custom/ai-agent-run/flow/agent-run-flow.model.js +100 -64
  214. package/dist/lib/custom/ai-agent-run/flow/agent-run-flow.model.js.map +1 -1
  215. package/dist/lib/custom/ai-agent-run/flow/constellation.component.d.ts +14 -2
  216. package/dist/lib/custom/ai-agent-run/flow/constellation.component.d.ts.map +1 -1
  217. package/dist/lib/custom/ai-agent-run/flow/constellation.component.js +71 -53
  218. package/dist/lib/custom/ai-agent-run/flow/constellation.component.js.map +1 -1
  219. package/dist/lib/custom/ai-agent-run/flow/flame-cascade.component.d.ts +14 -2
  220. package/dist/lib/custom/ai-agent-run/flow/flame-cascade.component.d.ts.map +1 -1
  221. package/dist/lib/custom/ai-agent-run/flow/flame-cascade.component.js +70 -52
  222. package/dist/lib/custom/ai-agent-run/flow/flame-cascade.component.js.map +1 -1
  223. package/dist/lib/custom/ai-agent-run/flow/flow-svg.util.d.ts +8 -0
  224. package/dist/lib/custom/ai-agent-run/flow/flow-svg.util.d.ts.map +1 -1
  225. package/dist/lib/custom/ai-agent-run/flow/flow-svg.util.js +22 -6
  226. package/dist/lib/custom/ai-agent-run/flow/flow-svg.util.js.map +1 -1
  227. package/dist/lib/custom/ai-agent-run/flow/flowchart.component.d.ts +24 -2
  228. package/dist/lib/custom/ai-agent-run/flow/flowchart.component.d.ts.map +1 -1
  229. package/dist/lib/custom/ai-agent-run/flow/flowchart.component.js +91 -59
  230. package/dist/lib/custom/ai-agent-run/flow/flowchart.component.js.map +1 -1
  231. package/dist/lib/custom/ai-agent-run/flow/pan-zoom.d.ts +10 -2
  232. package/dist/lib/custom/ai-agent-run/flow/pan-zoom.d.ts.map +1 -1
  233. package/dist/lib/custom/ai-agent-run/flow/pan-zoom.js +33 -17
  234. package/dist/lib/custom/ai-agent-run/flow/pan-zoom.js.map +1 -1
  235. package/dist/lib/custom/ai-agent-run/flow/run-tree-flow-projection.d.ts +2 -0
  236. package/dist/lib/custom/ai-agent-run/flow/run-tree-flow-projection.d.ts.map +1 -1
  237. package/dist/lib/custom/ai-agent-run/flow/run-tree-flow-projection.js +34 -30
  238. package/dist/lib/custom/ai-agent-run/flow/run-tree-flow-projection.js.map +1 -1
  239. package/dist/lib/custom/ai-agent-run/flow/subway-lines.component.d.ts +14 -2
  240. package/dist/lib/custom/ai-agent-run/flow/subway-lines.component.d.ts.map +1 -1
  241. package/dist/lib/custom/ai-agent-run/flow/subway-lines.component.js +69 -51
  242. package/dist/lib/custom/ai-agent-run/flow/subway-lines.component.js.map +1 -1
  243. package/dist/lib/custom/custom-forms.module.d.ts +32 -30
  244. package/dist/lib/custom/custom-forms.module.d.ts.map +1 -1
  245. package/dist/lib/custom/custom-forms.module.js +21 -4
  246. package/dist/lib/custom/custom-forms.module.js.map +1 -1
  247. package/dist/lib/custom/shared/entity-selector-dialog.component.d.ts +38 -12
  248. package/dist/lib/custom/shared/entity-selector-dialog.component.d.ts.map +1 -1
  249. package/dist/lib/custom/shared/entity-selector-dialog.component.js +103 -51
  250. package/dist/lib/custom/shared/entity-selector-dialog.component.js.map +1 -1
  251. package/dist/lib/generated/Entities/MJAIPrompt/mjaiprompt.form.component.d.ts.map +1 -1
  252. package/dist/lib/generated/Entities/MJAIPrompt/mjaiprompt.form.component.js +62 -26
  253. package/dist/lib/generated/Entities/MJAIPrompt/mjaiprompt.form.component.js.map +1 -1
  254. package/dist/lib/generated/Entities/MJAIPromptRun/mjaipromptrun.form.component.d.ts.map +1 -1
  255. package/dist/lib/generated/Entities/MJAIPromptRun/mjaipromptrun.form.component.js +59 -51
  256. package/dist/lib/generated/Entities/MJAIPromptRun/mjaipromptrun.form.component.js.map +1 -1
  257. package/dist/lib/generated/Entities/MJAIVendor/mjaivendor.form.component.js +76 -74
  258. package/dist/lib/generated/Entities/MJAIVendor/mjaivendor.form.component.js.map +1 -1
  259. package/dist/lib/generated/Entities/MJCredential/mjcredential.form.component.d.ts.map +1 -1
  260. package/dist/lib/generated/Entities/MJCredential/mjcredential.form.component.js +33 -15
  261. package/dist/lib/generated/Entities/MJCredential/mjcredential.form.component.js.map +1 -1
  262. package/dist/lib/generated/Entities/MJEntity/mjentity.form.component.d.ts.map +1 -1
  263. package/dist/lib/generated/Entities/MJEntity/mjentity.form.component.js +100 -82
  264. package/dist/lib/generated/Entities/MJEntity/mjentity.form.component.js.map +1 -1
  265. package/dist/lib/generated/Entities/MJEntityField/mjentityfield.form.component.js +24 -20
  266. package/dist/lib/generated/Entities/MJEntityField/mjentityfield.form.component.js.map +1 -1
  267. package/dist/lib/generated/Entities/MJFeatureValue/mjfeaturevalue.form.component.d.ts +10 -0
  268. package/dist/lib/generated/Entities/MJFeatureValue/mjfeaturevalue.form.component.d.ts.map +1 -0
  269. package/dist/lib/generated/Entities/MJFeatureValue/mjfeaturevalue.form.component.js +122 -0
  270. package/dist/lib/generated/Entities/MJFeatureValue/mjfeaturevalue.form.component.js.map +1 -0
  271. package/dist/lib/generated/Entities/MJFeatureValueCache/mjfeaturevaluecache.form.component.d.ts +10 -0
  272. package/dist/lib/generated/Entities/MJFeatureValueCache/mjfeaturevaluecache.form.component.d.ts.map +1 -0
  273. package/dist/lib/generated/Entities/MJFeatureValueCache/mjfeaturevaluecache.form.component.js +125 -0
  274. package/dist/lib/generated/Entities/MJFeatureValueCache/mjfeaturevaluecache.form.component.js.map +1 -0
  275. package/dist/lib/generated/Entities/MJProcessRun/mjprocessrun.form.component.d.ts.map +1 -1
  276. package/dist/lib/generated/Entities/MJProcessRun/mjprocessrun.form.component.js +23 -5
  277. package/dist/lib/generated/Entities/MJProcessRun/mjprocessrun.form.component.js.map +1 -1
  278. package/dist/lib/generated/Entities/MJProcessRunDetail/mjprocessrundetail.form.component.d.ts.map +1 -1
  279. package/dist/lib/generated/Entities/MJProcessRunDetail/mjprocessrundetail.form.component.js +25 -6
  280. package/dist/lib/generated/Entities/MJProcessRunDetail/mjprocessrundetail.form.component.js.map +1 -1
  281. package/dist/lib/generated/Entities/MJProject/mjproject.form.component.js +27 -25
  282. package/dist/lib/generated/Entities/MJProject/mjproject.form.component.js.map +1 -1
  283. package/dist/lib/generated/Entities/MJQuery/mjquery.form.component.d.ts.map +1 -1
  284. package/dist/lib/generated/Entities/MJQuery/mjquery.form.component.js +11 -15
  285. package/dist/lib/generated/Entities/MJQuery/mjquery.form.component.js.map +1 -1
  286. package/dist/lib/generated/Entities/MJRecordProcess/mjrecordprocess.form.component.d.ts.map +1 -1
  287. package/dist/lib/generated/Entities/MJRecordProcess/mjrecordprocess.form.component.js +43 -7
  288. package/dist/lib/generated/Entities/MJRecordProcess/mjrecordprocess.form.component.js.map +1 -1
  289. package/dist/lib/generated/Entities/MJUser/mjuser.form.component.d.ts.map +1 -1
  290. package/dist/lib/generated/Entities/MJUser/mjuser.form.component.js +155 -119
  291. package/dist/lib/generated/Entities/MJUser/mjuser.form.component.js.map +1 -1
  292. package/dist/lib/generated/Entities/MJWebSearchProvider/mjwebsearchprovider.form.component.d.ts +10 -0
  293. package/dist/lib/generated/Entities/MJWebSearchProvider/mjwebsearchprovider.form.component.d.ts.map +1 -0
  294. package/dist/lib/generated/Entities/MJWebSearchProvider/mjwebsearchprovider.form.component.js +78 -0
  295. package/dist/lib/generated/Entities/MJWebSearchProvider/mjwebsearchprovider.form.component.js.map +1 -0
  296. package/dist/lib/generated/generated-forms.module.d.ts +240 -237
  297. package/dist/lib/generated/generated-forms.module.d.ts.map +1 -1
  298. package/dist/lib/generated/generated-forms.module.js +11 -2
  299. package/dist/lib/generated/generated-forms.module.js.map +1 -1
  300. package/dist/lib/panels/ai-skill-sharing/ai-skill-sharing-panel.component.d.ts +5 -1
  301. package/dist/lib/panels/ai-skill-sharing/ai-skill-sharing-panel.component.d.ts.map +1 -1
  302. package/dist/lib/panels/ai-skill-sharing/ai-skill-sharing-panel.component.js +11 -3
  303. package/dist/lib/panels/ai-skill-sharing/ai-skill-sharing-panel.component.js.map +1 -1
  304. package/dist/lib/panels/content-sources/tag-pipeline-configuration.panel.d.ts +2 -0
  305. package/dist/lib/panels/content-sources/tag-pipeline-configuration.panel.d.ts.map +1 -1
  306. package/dist/lib/panels/content-sources/tag-pipeline-configuration.panel.js +16 -12
  307. package/dist/lib/panels/content-sources/tag-pipeline-configuration.panel.js.map +1 -1
  308. package/dist/lib/panels/content-sources/website-crawler-settings.panel.d.ts +1 -1
  309. package/dist/lib/panels/content-sources/website-crawler-settings.panel.js +2 -2
  310. package/dist/lib/panels/content-sources/website-crawler-settings.panel.js.map +1 -1
  311. package/dist/lib/panels/model-predictions/model-prediction.logic.d.ts +122 -1
  312. package/dist/lib/panels/model-predictions/model-prediction.logic.d.ts.map +1 -1
  313. package/dist/lib/panels/model-predictions/model-prediction.logic.js +236 -11
  314. package/dist/lib/panels/model-predictions/model-prediction.logic.js.map +1 -1
  315. package/dist/lib/panels/model-predictions/model-prediction.panel.d.ts +72 -13
  316. package/dist/lib/panels/model-predictions/model-prediction.panel.d.ts.map +1 -1
  317. package/dist/lib/panels/model-predictions/model-prediction.panel.js +577 -78
  318. package/dist/lib/panels/model-predictions/model-prediction.panel.js.map +1 -1
  319. package/dist/lib/shared/components/template-editor.component.d.ts +133 -14
  320. package/dist/lib/shared/components/template-editor.component.d.ts.map +1 -1
  321. package/dist/lib/shared/components/template-editor.component.js +322 -124
  322. package/dist/lib/shared/components/template-editor.component.js.map +1 -1
  323. package/dist/public-api.d.ts +4 -0
  324. package/dist/public-api.d.ts.map +1 -1
  325. package/dist/public-api.js +4 -0
  326. package/dist/public-api.js.map +1 -1
  327. package/package.json +43 -41
@@ -60,10 +60,10 @@ function makeStepNode(step, promptRuns) {
60
60
  }
61
61
  const icon = stepIcon(step, type);
62
62
  return {
63
- id: -1, name: step.StepName || `Step ${step.StepNumber}`, type, status: step.Status,
64
- model, realDur: durationSeconds(step.StartedAt, step.CompletedAt),
65
- t0: 0, t1: 0, tmid: 0, r0: 0, r1: 0, depth: 0, heat: 0,
66
- parent: null, children: [], raw: step, iconClass: icon.iconClass, logoUrl: icon.logoUrl
63
+ Id: -1, Name: step.StepName || `Step ${step.StepNumber}`, Type: type, Status: step.Status,
64
+ Model: model, RealDur: durationSeconds(step.StartedAt, step.CompletedAt),
65
+ T0: 0, T1: 0, Tmid: 0, R0: 0, R1: 0, Depth: 0, Heat: 0,
66
+ Parent: null, Children: [], Raw: step, IconClass: icon.iconClass, LogoUrl: icon.logoUrl
67
67
  };
68
68
  }
69
69
  /**
@@ -78,12 +78,12 @@ async function attachStepTree(parent, steps, promptRuns, helper) {
78
78
  const node = byId.get(s.ID);
79
79
  if (s.ParentID && byId.has(s.ParentID)) {
80
80
  const par = byId.get(s.ParentID);
81
- node.parent = par;
82
- par.children.push(node);
81
+ node.Parent = par;
82
+ par.Children.push(node);
83
83
  }
84
84
  else {
85
- node.parent = parent;
86
- parent.children.push(node);
85
+ node.Parent = parent;
86
+ parent.Children.push(node);
87
87
  }
88
88
  }
89
89
  // Recurse into sub-agent steps (their child steps need a separate load).
@@ -103,44 +103,44 @@ async function attachStepTree(parent, steps, promptRuns, helper) {
103
103
  }
104
104
  }
105
105
  function calcDur(n) {
106
- if (n.children.length)
107
- n.realDur = n.children.reduce((s, c) => s + calcDur(c), 0);
108
- return n.realDur;
106
+ if (n.Children.length)
107
+ n.RealDur = n.Children.reduce((s, c) => s + calcDur(c), 0);
108
+ return n.RealDur;
109
109
  }
110
110
  function assignT(n, t0, t1) {
111
- n.t0 = t0;
112
- n.t1 = t1;
113
- n.tmid = (t0 + t1) / 2;
114
- if (n.children.length) {
115
- const tot = n.children.reduce((s, c) => s + comp(c.realDur), 0) || 1;
111
+ n.T0 = t0;
112
+ n.T1 = t1;
113
+ n.Tmid = (t0 + t1) / 2;
114
+ if (n.Children.length) {
115
+ const tot = n.Children.reduce((s, c) => s + comp(c.RealDur), 0) || 1;
116
116
  let cur = t0;
117
- for (const c of n.children) {
118
- const w = (t1 - t0) * comp(c.realDur) / tot;
117
+ for (const c of n.Children) {
118
+ const w = (t1 - t0) * comp(c.RealDur) / tot;
119
119
  assignT(c, cur, cur + w);
120
120
  cur += w;
121
121
  }
122
122
  }
123
123
  }
124
124
  function assignReal(n, r0) {
125
- n.r0 = r0;
126
- if (n.children.length) {
125
+ n.R0 = r0;
126
+ if (n.Children.length) {
127
127
  let cur = r0;
128
- for (const c of n.children) {
128
+ for (const c of n.Children) {
129
129
  assignReal(c, cur);
130
- cur = c.r1;
130
+ cur = c.R1;
131
131
  }
132
- n.r1 = cur;
132
+ n.R1 = cur;
133
133
  }
134
134
  else {
135
- n.r1 = r0 + n.realDur;
135
+ n.R1 = r0 + n.RealDur;
136
136
  }
137
- return n.r1;
137
+ return n.R1;
138
138
  }
139
139
  function flatten(n, depth, out) {
140
- n.depth = depth;
141
- n.id = out.length;
140
+ n.Depth = depth;
141
+ n.Id = out.length;
142
142
  out.push(n);
143
- n.children.forEach(c => flatten(c, depth + 1, out));
143
+ n.Children.forEach(c => flatten(c, depth + 1, out));
144
144
  }
145
145
  function heatTier(d, maxLeaf) {
146
146
  const r = d / (maxLeaf || 1);
@@ -151,18 +151,22 @@ function heatTier(d, maxLeaf) {
151
151
  * sub-agent tree (via the helper's cached `loadSubAgentData`) so the zoomed-out
152
152
  * view shows the entire run at once.
153
153
  */
154
- export async function buildFlowModel(rootName, rootStatus, rootIcon, helper) {
154
+ export async function BuildFlowModel(rootName, rootStatus, rootIcon, helper) {
155
155
  const { steps, promptRuns } = helper.getCurrentData();
156
156
  const root = {
157
- id: -1, name: rootName || 'Agent run', type: 'agent', status: rootStatus,
158
- model: null, realDur: 0, t0: 0, t1: 1, tmid: 0.5, r0: 0, r1: 0, depth: 0, heat: 0,
159
- parent: null, children: [], raw: null,
160
- iconClass: rootIcon.iconClass || 'fa-robot', logoUrl: rootIcon.logoUrl
157
+ Id: -1, Name: rootName || 'Agent run', Type: 'agent', Status: rootStatus,
158
+ Model: null, RealDur: 0, T0: 0, T1: 1, Tmid: 0.5, R0: 0, R1: 0, Depth: 0, Heat: 0,
159
+ Parent: null, Children: [], Raw: null,
160
+ IconClass: rootIcon.iconClass || 'fa-robot', LogoUrl: rootIcon.logoUrl
161
161
  };
162
162
  if (steps.length) {
163
163
  await attachStepTree(root, steps, promptRuns, helper);
164
164
  }
165
- return finalizeFlowModel(root);
165
+ return FinalizeFlowModel(root);
166
+ }
167
+ /** @deprecated Use {@link BuildFlowModel}. */
168
+ export async function buildFlowModel(rootName, rootStatus, rootIcon, helper) {
169
+ return BuildFlowModel(rootName, rootStatus, rootIcon, helper);
166
170
  }
167
171
  /**
168
172
  * Durations, playback window, wall-clock and heat — the normalization every FlowModel shares.
@@ -172,68 +176,92 @@ export async function buildFlowModel(rootName, rootStatus, rootIcon, helper) {
172
176
  * into looking like different products — different bar widths, different heat thresholds — for the
173
177
  * same run.
174
178
  */
175
- export function finalizeFlowModel(root) {
179
+ export function FinalizeFlowModel(root) {
176
180
  calcDur(root);
177
181
  assignT(root, 0, 1);
178
182
  assignReal(root, 0);
179
183
  const nodes = [];
180
184
  flatten(root, 0, nodes);
181
- nodes.forEach(n => { n.tmid = (n.t0 + n.t1) / 2; });
182
- const leaves = nodes.filter(n => n.children.length === 0).sort((a, b) => a.t0 - b.t0);
183
- const maxLeafDur = Math.max(0.001, ...leaves.map(n => n.realDur));
184
- nodes.forEach(n => { n.heat = heatTier(n.realDur, maxLeafDur); });
185
+ nodes.forEach(n => { n.Tmid = (n.T0 + n.T1) / 2; });
186
+ const leaves = nodes.filter(n => n.Children.length === 0).sort((a, b) => a.T0 - b.T0);
187
+ const maxLeafDur = Math.max(0.001, ...leaves.map(n => n.RealDur));
188
+ nodes.forEach(n => { n.Heat = heatTier(n.RealDur, maxLeafDur); });
185
189
  return {
186
- root, nodes, leaves, total: root.realDur,
187
- maxDepth: Math.max(0, ...nodes.map(n => n.depth)), maxLeafDur
190
+ Root: root, Nodes: nodes, Leaves: leaves, Total: root.RealDur,
191
+ MaxDepth: Math.max(0, ...nodes.map(n => n.Depth)), MaxLeafDur: maxLeafDur
188
192
  };
189
193
  }
194
+ /** @deprecated Use {@link FinalizeFlowModel}. */
195
+ export function finalizeFlowModel(root) {
196
+ return FinalizeFlowModel(root);
197
+ }
190
198
  /* ----------------------------- shared lookups ----------------------------- */
191
- export function activeLeaf(model, p) {
192
- const L = model.leaves;
199
+ export function ActiveLeaf(model, p) {
200
+ const L = model.Leaves;
193
201
  if (!L.length)
194
- return model.root;
202
+ return model.Root;
195
203
  if (p <= 0)
196
204
  return L[0];
197
205
  if (p >= 1)
198
206
  return L[L.length - 1];
199
- return L.find(l => p >= l.t0 && p < l.t1) ?? L[L.length - 1];
207
+ return L.find(l => p >= l.T0 && p < l.T1) ?? L[L.length - 1];
200
208
  }
201
- export function ancestors(n) {
209
+ /** @deprecated Use {@link ActiveLeaf}. */
210
+ export function activeLeaf(model, p) {
211
+ return ActiveLeaf(model, p);
212
+ }
213
+ export function Ancestors(n) {
202
214
  const out = [];
203
215
  let c = n;
204
216
  while (c) {
205
217
  out.unshift(c);
206
- c = c.parent;
218
+ c = c.Parent;
207
219
  }
208
220
  return out;
209
221
  }
210
- export function agentOf(n) {
211
- let c = n.parent;
222
+ /** @deprecated Use {@link Ancestors}. */
223
+ export function ancestors(n) {
224
+ return Ancestors(n);
225
+ }
226
+ export function AgentOf(n) {
227
+ let c = n.Parent;
212
228
  while (c) {
213
- if (c.type === 'agent' || c.type === 'subagent')
229
+ if (c.Type === 'agent' || c.Type === 'subagent')
214
230
  return c;
215
- c = c.parent;
231
+ c = c.Parent;
216
232
  }
217
233
  return n;
218
234
  }
235
+ /** @deprecated Use {@link AgentOf}. */
236
+ export function agentOf(n) {
237
+ return AgentOf(n);
238
+ }
219
239
  /** "Execute Sub-Agent: Query Strategist" → "Query Strategist". */
240
+ export function AgentShortName(a) {
241
+ const i = a.Name.indexOf(': ');
242
+ return i >= 0 ? a.Name.slice(i + 2) : a.Name;
243
+ }
244
+ /** @deprecated Use {@link AgentShortName}. */
220
245
  export function agentShortName(a) {
221
- const i = a.name.indexOf(': ');
222
- return i >= 0 ? a.name.slice(i + 2) : a.name;
246
+ return AgentShortName(a);
223
247
  }
224
248
  /**
225
249
  * Label with the owning agent's prefix stripped — child step names tend to be
226
250
  * "Query Strategist: Execute Agent Prompt"; on a view that already shows which
227
251
  * agent/line a node belongs to, the prefix is pure noise that causes overlap.
228
252
  */
229
- export function displayName(n) {
230
- const a = agentOf(n);
253
+ export function DisplayName(n) {
254
+ const a = AgentOf(n);
231
255
  if (a && a !== n) {
232
- const short = agentShortName(a);
233
- if (short && n.name.startsWith(short + ':'))
234
- return n.name.slice(short.length + 1).trim();
256
+ const short = AgentShortName(a);
257
+ if (short && n.Name.startsWith(short + ':'))
258
+ return n.Name.slice(short.length + 1).trim();
235
259
  }
236
- return n.name;
260
+ return n.Name;
261
+ }
262
+ /** @deprecated Use {@link DisplayName}. */
263
+ export function displayName(n) {
264
+ return DisplayName(n);
237
265
  }
238
266
  /**
239
267
  * Aggressively abbreviated label for tight surfaces (subway stations, flame bars,
@@ -243,10 +271,10 @@ export function displayName(n) {
243
271
  * "Execute Action: Search Query Catalog"→ "Search Query Catalog"
244
272
  * "Agent Validation" → "Validation"
245
273
  */
246
- export function shortLabel(n) {
247
- if (n.type === 'subagent')
248
- return `${agentShortName(n)} Sub-Agent`;
249
- let s = displayName(n);
274
+ export function ShortLabel(n) {
275
+ if (n.Type === 'subagent')
276
+ return `${AgentShortName(n)} Sub-Agent`;
277
+ let s = DisplayName(n);
250
278
  s = s.replace(/^Execute Action:\s*/i, '').replace(/^Execute Sub-Agent:\s*/i, '');
251
279
  if (/^Execute Agent Prompt$/i.test(s))
252
280
  s = 'Prompt';
@@ -256,7 +284,11 @@ export function shortLabel(n) {
256
284
  s = 'Data Preload';
257
285
  return s;
258
286
  }
259
- export function formatDuration(seconds) {
287
+ /** @deprecated Use {@link ShortLabel}. */
288
+ export function shortLabel(n) {
289
+ return ShortLabel(n);
290
+ }
291
+ export function FormatDuration(seconds) {
260
292
  if (seconds < 1)
261
293
  return `${Math.round(seconds * 1000)}ms`;
262
294
  if (seconds < 60)
@@ -265,4 +297,8 @@ export function formatDuration(seconds) {
265
297
  return `${Math.floor(seconds / 60)}m ${Math.round(seconds % 60)}s`;
266
298
  return `${Math.floor(seconds / 3600)}h ${Math.floor((seconds % 3600) / 60)}m`;
267
299
  }
300
+ /** @deprecated Use {@link FormatDuration}. */
301
+ export function formatDuration(seconds) {
302
+ return FormatDuration(seconds);
303
+ }
268
304
  //# sourceMappingURL=agent-run-flow.model.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"agent-run-flow.model.js","sourceRoot":"","sources":["../../../../../src/lib/custom/ai-agent-run/flow/agent-run-flow.model.ts"],"names":[],"mappings":"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","sourcesContent":["import { MJAIAgentRunStepEntity, MJAIPromptRunEntity } from '@memberjunction/core-entities';\nimport { UUIDsEqual } from '@memberjunction/global';\nimport { AIEngineBase } from '@memberjunction/ai-engine-base';\nimport { AIAgentRunDataHelper } from '../ai-agent-run-data.service';\n\n/** Root-agent icon, resolved by the caller from the run's agent metadata. */\nexport interface RootIcon { iconClass: string; logoUrl: string | null; }\n\n/**\n * Shared, framework-agnostic flow model for the Agent Run \"Flow\" visualizations.\n *\n * One adapter (`buildFlowModel`) turns the raw step / sub-run / prompt-run data\n * from {@link AIAgentRunDataHelper} into a normalized {@link FlowNode} tree that\n * every renderer (Flame Cascade, Subway Lines, Constellation, …) consumes.\n *\n * Two clocks are baked into each node:\n * - **playback time** (`t0`/`t1`, range 0..1): compressed so every step gets\n * visible airtime regardless of real duration. This is what the scrubber drives.\n * - **real time** (`r0`/`r1`, seconds): the true cumulative wall-clock, used for\n * the digital clock readout and the narration rail.\n *\n * True duration is therefore never encoded as literal playback width — renderers\n * surface it through a *visual* channel (heat glow, node size, sweep speed).\n */\nexport type FlowNodeType =\n | 'agent' | 'subagent' | 'prompt' | 'action' | 'decision' | 'loop' | 'validation' | 'other';\n\nexport interface FlowNode {\n /** Stable index within the flattened model (renderer scratch keys off this). */\n id: number;\n name: string;\n type: FlowNodeType;\n status: string;\n model: string | null;\n /** Real duration in seconds (container nodes = sum of children). */\n realDur: number;\n /** Normalized playback window [0..1]. */\n t0: number;\n t1: number;\n tmid: number;\n /** Real cumulative wall-clock window in seconds. */\n r0: number;\n r1: number;\n depth: number;\n /** Relative heat tier 0..3 (3 = among the longest steps in this run). */\n heat: 0 | 1 | 2 | 3;\n parent: FlowNode | null;\n children: FlowNode[];\n /** Underlying step entity (null for the synthetic root, and for task-graph nodes). */\n raw: MJAIAgentRunStepEntity | null;\n /**\n * Which record this node came from, whatever entity that is.\n *\n * `raw` is typed to a run STEP, so a workflow's steps — which are `MJ: Tasks` rows — could never\n * be represented by it. This generic reference is what lets one model hold both, and what lets a\n * click open the right record either way.\n */\n source?: { entity: string; id: string } | null;\n /** Font Awesome class (e.g. 'fa-brain'); sub-agents resolve their agent's icon. */\n iconClass: string;\n /** Agent logo image URL when available (sub-agents / root), else null. */\n logoUrl: string | null;\n}\n\nexport interface FlowModel {\n root: FlowNode;\n nodes: FlowNode[];\n leaves: FlowNode[];\n total: number;\n maxDepth: number;\n maxLeafDur: number;\n}\n\n/** Categorical data-visualization palette (per CLAUDE.md, chart colors may be literal). */\nexport const FLOW_COLORS: Record<FlowNodeType, string> = {\n agent: '#11a8e6', subagent: '#f59e0b', prompt: '#3b82f6', action: '#22c55e',\n decision: '#ef4444', loop: '#a855f7', validation: '#14b8a6', other: '#94a3b8'\n};\n\nexport const FLOW_EMOJI: Record<FlowNodeType, string> = {\n agent: '🤖', subagent: '🤖', prompt: '💬', action: '⚙️',\n decision: '🔀', loop: '🔁', validation: '✓', other: '•'\n};\n\n/** Font Awesome icon per type — mirrors the Timeline's step icons. */\nexport const FLOW_ICON: Record<FlowNodeType, string> = {\n agent: 'fa-robot', subagent: 'fa-robot', prompt: 'fa-brain', action: 'fa-wrench',\n decision: 'fa-code-branch', loop: 'fa-repeat', validation: 'fa-square-check', other: 'fa-circle'\n};\n\nexport const FLOW_LABEL: Record<FlowNodeType, string> = {\n agent: 'Agent run', subagent: 'Sub-agent', prompt: 'Prompt', action: 'Action',\n decision: 'Decision', loop: 'Loop', validation: 'Validation', other: 'Step'\n};\n\nfunction flowType(stepType: string | null | undefined): FlowNodeType {\n switch (stepType) {\n case 'Prompt': return 'prompt';\n case 'Actions':\n case 'Tool': return 'action';\n case 'Sub-Agent': return 'subagent';\n case 'Decision': return 'decision';\n case 'ForEach':\n case 'While': return 'loop';\n case 'Validation': return 'validation';\n default: return 'other';\n }\n}\n\n/** Compression curve: longer steps still get more airtime, but sub-linearly. */\nfunction comp(d: number): number { return Math.pow(Math.max(d, 0.001), 0.55); }\n\nfunction durationSeconds(start: Date | null | undefined, end: Date | null | undefined): number {\n if (!start) return 0.1;\n const s = new Date(start).getTime();\n const e = end ? new Date(end).getTime() : Date.now();\n return Math.max(0.05, (e - s) / 1000);\n}\n\n/** Resolve a step's icon: sub-agents use their agent's logo/icon, else the type icon. */\nfunction stepIcon(step: MJAIAgentRunStepEntity, type: FlowNodeType): { iconClass: string; logoUrl: string | null } {\n if (step.StepType === 'Sub-Agent' && step.TargetID) {\n const agent = AIEngineBase.Instance.Agents.find(a => UUIDsEqual(a.ID, step.TargetID!));\n if (agent?.LogoURL) return { iconClass: 'fa-robot', logoUrl: agent.LogoURL };\n if (agent?.IconClass) return { iconClass: agent.IconClass, logoUrl: null };\n }\n return { iconClass: FLOW_ICON[type], logoUrl: null };\n}\n\nfunction makeStepNode(step: MJAIAgentRunStepEntity, promptRuns: MJAIPromptRunEntity[]): FlowNode {\n const type = flowType(step.StepType);\n let model: string | null = null;\n if (type === 'prompt' && step.TargetLogID) {\n const pr = promptRuns.find(p => UUIDsEqual(p.ID, step.TargetLogID!));\n model = pr?.Model ?? null;\n }\n const icon = stepIcon(step, type);\n return {\n id: -1, name: step.StepName || `Step ${step.StepNumber}`, type, status: step.Status,\n model, realDur: durationSeconds(step.StartedAt, step.CompletedAt),\n t0: 0, t1: 0, tmid: 0, r0: 0, r1: 0, depth: 0, heat: 0,\n parent: null, children: [], raw: step, iconClass: icon.iconClass, logoUrl: icon.logoUrl\n };\n}\n\n/**\n * Recursively attach a level of steps to `parent`, nesting both loop bodies\n * (`ParentID`) and sub-agent runs (`Sub-Agent` step → its own run's steps).\n */\nasync function attachStepTree(\n parent: FlowNode,\n steps: MJAIAgentRunStepEntity[],\n promptRuns: MJAIPromptRunEntity[],\n helper: AIAgentRunDataHelper\n): Promise<void> {\n const byId = new Map<string, FlowNode>();\n steps.forEach(s => byId.set(s.ID, makeStepNode(s, promptRuns)));\n\n // Nest loop bodies via ParentID; everything else hangs off `parent`.\n for (const s of steps) {\n const node = byId.get(s.ID)!;\n if (s.ParentID && byId.has(s.ParentID)) {\n const par = byId.get(s.ParentID)!;\n node.parent = par; par.children.push(node);\n } else {\n node.parent = parent; parent.children.push(node);\n }\n }\n\n // Recurse into sub-agent steps (their child steps need a separate load).\n for (const s of steps) {\n if (s.StepType === 'Sub-Agent' && s.TargetLogID) {\n const node = byId.get(s.ID)!;\n try {\n const sub = await helper.loadSubAgentData(s.TargetLogID);\n if (sub.steps?.length) {\n await attachStepTree(node, sub.steps, sub.promptRuns, helper);\n }\n } catch {\n // Sub-agent load failed — leave it as a leaf with its own timing.\n }\n }\n }\n}\n\nfunction calcDur(n: FlowNode): number {\n if (n.children.length) n.realDur = n.children.reduce((s, c) => s + calcDur(c), 0);\n return n.realDur;\n}\n\nfunction assignT(n: FlowNode, t0: number, t1: number): void {\n n.t0 = t0; n.t1 = t1; n.tmid = (t0 + t1) / 2;\n if (n.children.length) {\n const tot = n.children.reduce((s, c) => s + comp(c.realDur), 0) || 1;\n let cur = t0;\n for (const c of n.children) {\n const w = (t1 - t0) * comp(c.realDur) / tot;\n assignT(c, cur, cur + w); cur += w;\n }\n }\n}\n\nfunction assignReal(n: FlowNode, r0: number): number {\n n.r0 = r0;\n if (n.children.length) {\n let cur = r0;\n for (const c of n.children) { assignReal(c, cur); cur = c.r1; }\n n.r1 = cur;\n } else {\n n.r1 = r0 + n.realDur;\n }\n return n.r1;\n}\n\nfunction flatten(n: FlowNode, depth: number, out: FlowNode[]): void {\n n.depth = depth; n.id = out.length; out.push(n);\n n.children.forEach(c => flatten(c, depth + 1, out));\n}\n\nfunction heatTier(d: number, maxLeaf: number): 0 | 1 | 2 | 3 {\n const r = d / (maxLeaf || 1);\n return r >= 0.66 ? 3 : r >= 0.33 ? 2 : r >= 0.12 ? 1 : 0;\n}\n\n/**\n * Build the full normalized flow model for an agent run. Eagerly walks the whole\n * sub-agent tree (via the helper's cached `loadSubAgentData`) so the zoomed-out\n * view shows the entire run at once.\n */\nexport async function buildFlowModel(\n rootName: string,\n rootStatus: string,\n rootIcon: RootIcon,\n helper: AIAgentRunDataHelper\n): Promise<FlowModel> {\n const { steps, promptRuns } = helper.getCurrentData();\n\n const root: FlowNode = {\n id: -1, name: rootName || 'Agent run', type: 'agent', status: rootStatus,\n model: null, realDur: 0, t0: 0, t1: 1, tmid: 0.5, r0: 0, r1: 0, depth: 0, heat: 0,\n parent: null, children: [], raw: null,\n iconClass: rootIcon.iconClass || 'fa-robot', logoUrl: rootIcon.logoUrl\n };\n\n if (steps.length) {\n await attachStepTree(root, steps, promptRuns, helper);\n }\n\n return finalizeFlowModel(root);\n}\n\n/**\n * Durations, playback window, wall-clock and heat — the normalization every FlowModel shares.\n *\n * Extracted so a model built from the run TREE goes through the identical pipeline as one built\n * from raw step rows. Re-deriving any of it in a second builder is how the two sources would drift\n * into looking like different products — different bar widths, different heat thresholds — for the\n * same run.\n */\nexport function finalizeFlowModel(root: FlowNode): FlowModel {\n calcDur(root);\n assignT(root, 0, 1);\n assignReal(root, 0);\n\n const nodes: FlowNode[] = [];\n flatten(root, 0, nodes);\n nodes.forEach(n => { n.tmid = (n.t0 + n.t1) / 2; });\n\n const leaves = nodes.filter(n => n.children.length === 0).sort((a, b) => a.t0 - b.t0);\n const maxLeafDur = Math.max(0.001, ...leaves.map(n => n.realDur));\n nodes.forEach(n => { n.heat = heatTier(n.realDur, maxLeafDur); });\n\n return {\n root, nodes, leaves, total: root.realDur,\n maxDepth: Math.max(0, ...nodes.map(n => n.depth)), maxLeafDur\n };\n}\n\n/* ----------------------------- shared lookups ----------------------------- */\n\nexport function activeLeaf(model: FlowModel, p: number): FlowNode {\n const L = model.leaves;\n if (!L.length) return model.root;\n if (p <= 0) return L[0];\n if (p >= 1) return L[L.length - 1];\n return L.find(l => p >= l.t0 && p < l.t1) ?? L[L.length - 1];\n}\n\nexport function ancestors(n: FlowNode): FlowNode[] {\n const out: FlowNode[] = []; let c: FlowNode | null = n;\n while (c) { out.unshift(c); c = c.parent; }\n return out;\n}\n\nexport function agentOf(n: FlowNode): FlowNode {\n let c = n.parent;\n while (c) { if (c.type === 'agent' || c.type === 'subagent') return c; c = c.parent; }\n return n;\n}\n\n/** \"Execute Sub-Agent: Query Strategist\" → \"Query Strategist\". */\nexport function agentShortName(a: FlowNode): string {\n const i = a.name.indexOf(': ');\n return i >= 0 ? a.name.slice(i + 2) : a.name;\n}\n\n/**\n * Label with the owning agent's prefix stripped — child step names tend to be\n * \"Query Strategist: Execute Agent Prompt\"; on a view that already shows which\n * agent/line a node belongs to, the prefix is pure noise that causes overlap.\n */\nexport function displayName(n: FlowNode): string {\n const a = agentOf(n);\n if (a && a !== n) {\n const short = agentShortName(a);\n if (short && n.name.startsWith(short + ':')) return n.name.slice(short.length + 1).trim();\n }\n return n.name;\n}\n\n/**\n * Aggressively abbreviated label for tight surfaces (subway stations, flame bars,\n * stars). Strips the agent prefix, then collapses the verbose MJ step phrasing:\n * \"Execute Sub-Agent: Query Strategist\" → \"Query Strategist Sub-Agent\"\n * \"Execute Agent Prompt\" → \"Prompt\"\n * \"Execute Action: Search Query Catalog\"→ \"Search Query Catalog\"\n * \"Agent Validation\" → \"Validation\"\n */\nexport function shortLabel(n: FlowNode): string {\n if (n.type === 'subagent') return `${agentShortName(n)} Sub-Agent`;\n let s = displayName(n);\n s = s.replace(/^Execute Action:\\s*/i, '').replace(/^Execute Sub-Agent:\\s*/i, '');\n if (/^Execute Agent Prompt$/i.test(s)) s = 'Prompt';\n else if (/^Agent Validation$/i.test(s)) s = 'Validation';\n else if (/^Data Source Preloading$/i.test(s)) s = 'Data Preload';\n return s;\n}\n\nexport function formatDuration(seconds: number): string {\n if (seconds < 1) return `${Math.round(seconds * 1000)}ms`;\n if (seconds < 60) return `${seconds < 10 ? seconds.toFixed(1) : Math.round(seconds)}s`;\n if (seconds < 3600) return `${Math.floor(seconds / 60)}m ${Math.round(seconds % 60)}s`;\n return `${Math.floor(seconds / 3600)}h ${Math.floor((seconds % 3600) / 60)}m`;\n}\n"]}
1
+ {"version":3,"file":"agent-run-flow.model.js","sourceRoot":"","sources":["../../../../../src/lib/custom/ai-agent-run/flow/agent-run-flow.model.ts"],"names":[],"mappings":"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","sourcesContent":["import { MJAIAgentRunStepEntity, MJAIPromptRunEntity } from '@memberjunction/core-entities';\nimport { UUIDsEqual } from '@memberjunction/global';\nimport { AIEngineBase } from '@memberjunction/ai-engine-base';\nimport { AIAgentRunDataHelper } from '../ai-agent-run-data.service';\n\n/** Root-agent icon, resolved by the caller from the run's agent metadata. */\nexport interface RootIcon { iconClass: string; logoUrl: string | null; } // case-violation-ok-legacy-back-compat: the old name is also read off a value typed `any`, where a rename would compile and silently return undefined\n\n/**\n * Shared, framework-agnostic flow model for the Agent Run \"Flow\" visualizations.\n *\n * One adapter (`buildFlowModel`) turns the raw step / sub-run / prompt-run data\n * from {@link AIAgentRunDataHelper} into a normalized {@link FlowNode} tree that\n * every renderer (Flame Cascade, Subway Lines, Constellation, …) consumes.\n *\n * Two clocks are baked into each node:\n * - **playback time** (`t0`/`t1`, range 0..1): compressed so every step gets\n * visible airtime regardless of real duration. This is what the scrubber drives.\n * - **real time** (`r0`/`r1`, seconds): the true cumulative wall-clock, used for\n * the digital clock readout and the narration rail.\n *\n * True duration is therefore never encoded as literal playback width — renderers\n * surface it through a *visual* channel (heat glow, node size, sweep speed).\n */\nexport type FlowNodeType =\n | 'agent' | 'subagent' | 'prompt' | 'action' | 'decision' | 'loop' | 'validation' | 'other';\n\nexport interface FlowNode {\n /** Stable index within the flattened model (renderer scratch keys off this). */\n Id: number;\n Name: string;\n Type: FlowNodeType;\n Status: string;\n Model: string | null;\n /** Real duration in seconds (container nodes = sum of children). */\n RealDur: number;\n /** Normalized playback window [0..1]. */\n T0: number;\n T1: number;\n Tmid: number;\n /** Real cumulative wall-clock window in seconds. */\n R0: number;\n R1: number;\n Depth: number;\n /** Relative heat tier 0..3 (3 = among the longest steps in this run). */\n Heat: 0 | 1 | 2 | 3;\n Parent: FlowNode | null;\n Children: FlowNode[];\n /** Underlying step entity (null for the synthetic root, and for task-graph nodes). */\n Raw: MJAIAgentRunStepEntity | null;\n /**\n * Which record this node came from, whatever entity that is.\n *\n * `raw` is typed to a run STEP, so a workflow's steps — which are `MJ: Tasks` rows — could never\n * be represented by it. This generic reference is what lets one model hold both, and what lets a\n * click open the right record either way.\n */\n Source?: { entity: string; id: string } | null;\n /** Font Awesome class (e.g. 'fa-brain'); sub-agents resolve their agent's icon. */\n IconClass: string;\n /** Agent logo image URL when available (sub-agents / root), else null. */\n LogoUrl: string | null;\n}\n\nexport interface FlowModel {\n Root: FlowNode;\n Nodes: FlowNode[];\n Leaves: FlowNode[];\n Total: number;\n MaxDepth: number;\n MaxLeafDur: number;\n}\n\n/** Categorical data-visualization palette (per CLAUDE.md, chart colors may be literal). */\nexport const FLOW_COLORS: Record<FlowNodeType, string> = {\n agent: '#11a8e6', subagent: '#f59e0b', prompt: '#3b82f6', action: '#22c55e',\n decision: '#ef4444', loop: '#a855f7', validation: '#14b8a6', other: '#94a3b8'\n};\n\nexport const FLOW_EMOJI: Record<FlowNodeType, string> = {\n agent: '🤖', subagent: '🤖', prompt: '💬', action: '⚙️',\n decision: '🔀', loop: '🔁', validation: '✓', other: '•'\n};\n\n/** Font Awesome icon per type — mirrors the Timeline's step icons. */\nexport const FLOW_ICON: Record<FlowNodeType, string> = {\n agent: 'fa-robot', subagent: 'fa-robot', prompt: 'fa-brain', action: 'fa-wrench',\n decision: 'fa-code-branch', loop: 'fa-repeat', validation: 'fa-square-check', other: 'fa-circle'\n};\n\nexport const FLOW_LABEL: Record<FlowNodeType, string> = {\n agent: 'Agent run', subagent: 'Sub-agent', prompt: 'Prompt', action: 'Action',\n decision: 'Decision', loop: 'Loop', validation: 'Validation', other: 'Step'\n};\n\nfunction flowType(stepType: string | null | undefined): FlowNodeType {\n switch (stepType) {\n case 'Prompt': return 'prompt';\n case 'Actions':\n case 'Tool': return 'action';\n case 'Sub-Agent': return 'subagent';\n case 'Decision': return 'decision';\n case 'ForEach':\n case 'While': return 'loop';\n case 'Validation': return 'validation';\n default: return 'other';\n }\n}\n\n/** Compression curve: longer steps still get more airtime, but sub-linearly. */\nfunction comp(d: number): number { return Math.pow(Math.max(d, 0.001), 0.55); }\n\nfunction durationSeconds(start: Date | null | undefined, end: Date | null | undefined): number {\n if (!start) return 0.1;\n const s = new Date(start).getTime();\n const e = end ? new Date(end).getTime() : Date.now();\n return Math.max(0.05, (e - s) / 1000);\n}\n\n/** Resolve a step's icon: sub-agents use their agent's logo/icon, else the type icon. */\nfunction stepIcon(step: MJAIAgentRunStepEntity, type: FlowNodeType): { iconClass: string; logoUrl: string | null } {\n if (step.StepType === 'Sub-Agent' && step.TargetID) {\n const agent = AIEngineBase.Instance.Agents.find(a => UUIDsEqual(a.ID, step.TargetID!));\n if (agent?.LogoURL) return { iconClass: 'fa-robot', logoUrl: agent.LogoURL };\n if (agent?.IconClass) return { iconClass: agent.IconClass, logoUrl: null };\n }\n return { iconClass: FLOW_ICON[type], logoUrl: null };\n}\n\nfunction makeStepNode(step: MJAIAgentRunStepEntity, promptRuns: MJAIPromptRunEntity[]): FlowNode {\n const type = flowType(step.StepType);\n let model: string | null = null;\n if (type === 'prompt' && step.TargetLogID) {\n const pr = promptRuns.find(p => UUIDsEqual(p.ID, step.TargetLogID!));\n model = pr?.Model ?? null;\n }\n const icon = stepIcon(step, type);\n return {\n Id: -1, Name: step.StepName || `Step ${step.StepNumber}`, Type: type, Status: step.Status,\n Model: model, RealDur: durationSeconds(step.StartedAt, step.CompletedAt),\n T0: 0, T1: 0, Tmid: 0, R0: 0, R1: 0, Depth: 0, Heat: 0,\n Parent: null, Children: [], Raw: step, IconClass: icon.iconClass, LogoUrl: icon.logoUrl\n };\n}\n\n/**\n * Recursively attach a level of steps to `parent`, nesting both loop bodies\n * (`ParentID`) and sub-agent runs (`Sub-Agent` step → its own run's steps).\n */\nasync function attachStepTree(\n parent: FlowNode,\n steps: MJAIAgentRunStepEntity[],\n promptRuns: MJAIPromptRunEntity[],\n helper: AIAgentRunDataHelper\n): Promise<void> {\n const byId = new Map<string, FlowNode>();\n steps.forEach(s => byId.set(s.ID, makeStepNode(s, promptRuns)));\n\n // Nest loop bodies via ParentID; everything else hangs off `parent`.\n for (const s of steps) {\n const node = byId.get(s.ID)!;\n if (s.ParentID && byId.has(s.ParentID)) {\n const par = byId.get(s.ParentID)!;\n node.Parent = par; par.Children.push(node);\n } else {\n node.Parent = parent; parent.Children.push(node);\n }\n }\n\n // Recurse into sub-agent steps (their child steps need a separate load).\n for (const s of steps) {\n if (s.StepType === 'Sub-Agent' && s.TargetLogID) {\n const node = byId.get(s.ID)!;\n try {\n const sub = await helper.loadSubAgentData(s.TargetLogID);\n if (sub.steps?.length) {\n await attachStepTree(node, sub.steps, sub.promptRuns, helper);\n }\n } catch {\n // Sub-agent load failed — leave it as a leaf with its own timing.\n }\n }\n }\n}\n\nfunction calcDur(n: FlowNode): number {\n if (n.Children.length) n.RealDur = n.Children.reduce((s, c) => s + calcDur(c), 0);\n return n.RealDur;\n}\n\nfunction assignT(n: FlowNode, t0: number, t1: number): void {\n n.T0 = t0; n.T1 = t1; n.Tmid = (t0 + t1) / 2;\n if (n.Children.length) {\n const tot = n.Children.reduce((s, c) => s + comp(c.RealDur), 0) || 1;\n let cur = t0;\n for (const c of n.Children) {\n const w = (t1 - t0) * comp(c.RealDur) / tot;\n assignT(c, cur, cur + w); cur += w;\n }\n }\n}\n\nfunction assignReal(n: FlowNode, r0: number): number {\n n.R0 = r0;\n if (n.Children.length) {\n let cur = r0;\n for (const c of n.Children) { assignReal(c, cur); cur = c.R1; }\n n.R1 = cur;\n } else {\n n.R1 = r0 + n.RealDur;\n }\n return n.R1;\n}\n\nfunction flatten(n: FlowNode, depth: number, out: FlowNode[]): void {\n n.Depth = depth; n.Id = out.length; out.push(n);\n n.Children.forEach(c => flatten(c, depth + 1, out));\n}\n\nfunction heatTier(d: number, maxLeaf: number): 0 | 1 | 2 | 3 {\n const r = d / (maxLeaf || 1);\n return r >= 0.66 ? 3 : r >= 0.33 ? 2 : r >= 0.12 ? 1 : 0;\n}\n\n/**\n * Build the full normalized flow model for an agent run. Eagerly walks the whole\n * sub-agent tree (via the helper's cached `loadSubAgentData`) so the zoomed-out\n * view shows the entire run at once.\n */\nexport async function BuildFlowModel(\n rootName: string,\n rootStatus: string,\n rootIcon: RootIcon,\n helper: AIAgentRunDataHelper\n): Promise<FlowModel> {\n const { steps, promptRuns } = helper.getCurrentData();\n\n const root: FlowNode = {\n Id: -1, Name: rootName || 'Agent run', Type: 'agent', Status: rootStatus,\n Model: null, RealDur: 0, T0: 0, T1: 1, Tmid: 0.5, R0: 0, R1: 0, Depth: 0, Heat: 0,\n Parent: null, Children: [], Raw: null,\n IconClass: rootIcon.iconClass || 'fa-robot', LogoUrl: rootIcon.logoUrl\n };\n\n if (steps.length) {\n await attachStepTree(root, steps, promptRuns, helper);\n }\n\n return FinalizeFlowModel(root);\n}\n\n/** @deprecated Use {@link BuildFlowModel}. */\nexport async function buildFlowModel(\n rootName: string,\n rootStatus: string,\n rootIcon: RootIcon,\n helper: AIAgentRunDataHelper\n): Promise<FlowModel> {\n return BuildFlowModel(rootName, rootStatus, rootIcon, helper);\n}\n\n/**\n * Durations, playback window, wall-clock and heat — the normalization every FlowModel shares.\n *\n * Extracted so a model built from the run TREE goes through the identical pipeline as one built\n * from raw step rows. Re-deriving any of it in a second builder is how the two sources would drift\n * into looking like different products — different bar widths, different heat thresholds — for the\n * same run.\n */\nexport function FinalizeFlowModel(root: FlowNode): FlowModel {\n calcDur(root);\n assignT(root, 0, 1);\n assignReal(root, 0);\n\n const nodes: FlowNode[] = [];\n flatten(root, 0, nodes);\n nodes.forEach(n => { n.Tmid = (n.T0 + n.T1) / 2; });\n\n const leaves = nodes.filter(n => n.Children.length === 0).sort((a, b) => a.T0 - b.T0);\n const maxLeafDur = Math.max(0.001, ...leaves.map(n => n.RealDur));\n nodes.forEach(n => { n.Heat = heatTier(n.RealDur, maxLeafDur); });\n\n return {\n Root: root, Nodes: nodes, Leaves: leaves, Total: root.RealDur,\n MaxDepth: Math.max(0, ...nodes.map(n => n.Depth)), MaxLeafDur: maxLeafDur\n };\n}\n\n/** @deprecated Use {@link FinalizeFlowModel}. */\nexport function finalizeFlowModel(root: FlowNode): FlowModel {\n return FinalizeFlowModel(root);\n}\n\n/* ----------------------------- shared lookups ----------------------------- */\n\nexport function ActiveLeaf(model: FlowModel, p: number): FlowNode {\n const L = model.Leaves;\n if (!L.length) return model.Root;\n if (p <= 0) return L[0];\n if (p >= 1) return L[L.length - 1];\n return L.find(l => p >= l.T0 && p < l.T1) ?? L[L.length - 1];\n}\n\n/** @deprecated Use {@link ActiveLeaf}. */\nexport function activeLeaf(model: FlowModel, p: number): FlowNode {\n return ActiveLeaf(model, p);\n}\n\nexport function Ancestors(n: FlowNode): FlowNode[] {\n const out: FlowNode[] = []; let c: FlowNode | null = n;\n while (c) { out.unshift(c); c = c.Parent; }\n return out;\n}\n\n/** @deprecated Use {@link Ancestors}. */\nexport function ancestors(n: FlowNode): FlowNode[] {\n return Ancestors(n);\n}\n\nexport function AgentOf(n: FlowNode): FlowNode {\n let c = n.Parent;\n while (c) { if (c.Type === 'agent' || c.Type === 'subagent') return c; c = c.Parent; }\n return n;\n}\n\n/** @deprecated Use {@link AgentOf}. */\nexport function agentOf(n: FlowNode): FlowNode {\n return AgentOf(n);\n}\n\n/** \"Execute Sub-Agent: Query Strategist\" → \"Query Strategist\". */\nexport function AgentShortName(a: FlowNode): string {\n const i = a.Name.indexOf(': ');\n return i >= 0 ? a.Name.slice(i + 2) : a.Name;\n}\n\n/** @deprecated Use {@link AgentShortName}. */\nexport function agentShortName(a: FlowNode): string {\n return AgentShortName(a);\n}\n\n/**\n * Label with the owning agent's prefix stripped — child step names tend to be\n * \"Query Strategist: Execute Agent Prompt\"; on a view that already shows which\n * agent/line a node belongs to, the prefix is pure noise that causes overlap.\n */\nexport function DisplayName(n: FlowNode): string {\n const a = AgentOf(n);\n if (a && a !== n) {\n const short = AgentShortName(a);\n if (short && n.Name.startsWith(short + ':')) return n.Name.slice(short.length + 1).trim();\n }\n return n.Name;\n}\n\n/** @deprecated Use {@link DisplayName}. */\nexport function displayName(n: FlowNode): string {\n return DisplayName(n);\n}\n\n/**\n * Aggressively abbreviated label for tight surfaces (subway stations, flame bars,\n * stars). Strips the agent prefix, then collapses the verbose MJ step phrasing:\n * \"Execute Sub-Agent: Query Strategist\" → \"Query Strategist Sub-Agent\"\n * \"Execute Agent Prompt\" → \"Prompt\"\n * \"Execute Action: Search Query Catalog\"→ \"Search Query Catalog\"\n * \"Agent Validation\" → \"Validation\"\n */\nexport function ShortLabel(n: FlowNode): string {\n if (n.Type === 'subagent') return `${AgentShortName(n)} Sub-Agent`;\n let s = DisplayName(n);\n s = s.replace(/^Execute Action:\\s*/i, '').replace(/^Execute Sub-Agent:\\s*/i, '');\n if (/^Execute Agent Prompt$/i.test(s)) s = 'Prompt';\n else if (/^Agent Validation$/i.test(s)) s = 'Validation';\n else if (/^Data Source Preloading$/i.test(s)) s = 'Data Preload';\n return s;\n}\n\n/** @deprecated Use {@link ShortLabel}. */\nexport function shortLabel(n: FlowNode): string {\n return ShortLabel(n);\n}\n\nexport function FormatDuration(seconds: number): string {\n if (seconds < 1) return `${Math.round(seconds * 1000)}ms`;\n if (seconds < 60) return `${seconds < 10 ? seconds.toFixed(1) : Math.round(seconds)}s`;\n if (seconds < 3600) return `${Math.floor(seconds / 60)}m ${Math.round(seconds % 60)}s`;\n return `${Math.floor(seconds / 3600)}h ${Math.floor((seconds % 3600) / 60)}m`;\n}\n\n/** @deprecated Use {@link FormatDuration}. */\nexport function formatDuration(seconds: number): string {\n return FormatDuration(seconds);\n}\n"]}
@@ -8,7 +8,19 @@ import * as i0 from "@angular/core";
8
8
  * Labels stay clutter-free (root + top level + active by default, hover to reveal).
9
9
  */
10
10
  export declare class ConstellationComponent {
11
- svgRef: ElementRef<SVGSVGElement>;
11
+ SvgRef: ElementRef<SVGSVGElement>;
12
+ /** @deprecated Use {@link SvgRef}. */
13
+ get svgRef(): ElementRef<SVGSVGElement>;
14
+ /** @deprecated Use {@link SvgRef}. */
15
+ set svgRef(value: ElementRef<SVGSVGElement>);
16
+ NodeSelected: EventEmitter<FlowNode>;
17
+ /**
18
+ * @deprecated Use {@link NodeSelected}.
19
+ *
20
+ * The same emitter under the old binding name, so a template still binding
21
+ * (nodeSelected) keeps working. Must stay AFTER NodeSelected: class fields
22
+ * initialise in order, and the other way round this captures undefined.
23
+ */
12
24
  nodeSelected: EventEmitter<FlowNode>;
13
25
  private _model;
14
26
  private built;
@@ -33,6 +45,6 @@ export declare class ConstellationComponent {
33
45
  private build;
34
46
  private update;
35
47
  static ɵfac: i0.ɵɵFactoryDeclaration<ConstellationComponent, never>;
36
- static ɵcmp: i0.ɵɵComponentDeclaration<ConstellationComponent, "mj-agent-flow-constellation", never, { "Model": { "alias": "Model"; "required": false; }; }, { "nodeSelected": "nodeSelected"; }, never, never, false, never>;
48
+ static ɵcmp: i0.ɵɵComponentDeclaration<ConstellationComponent, "mj-agent-flow-constellation", never, { "Model": { "alias": "Model"; "required": false; }; }, { "NodeSelected": "NodeSelected"; "nodeSelected": "nodeSelected"; }, never, never, false, never>;
37
49
  }
38
50
  //# sourceMappingURL=constellation.component.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"constellation.component.d.ts","sourceRoot":"","sources":["../../../../../src/lib/custom/ai-agent-run/flow/constellation.component.ts"],"names":[],"mappings":"AAAA,OAAO,EAAa,UAAU,EAAiB,YAAY,EAAoE,MAAM,eAAe,CAAC;AACrJ,OAAO,EAAE,SAAS,EAAE,QAAQ,EAA2B,MAAM,wBAAwB,CAAC;;AAQtF;;;;;GAKG;AACH,qBAQa,sBAAsB;IACG,MAAM,EAAG,UAAU,CAAC,aAAa,CAAC,CAAC;IAC7D,YAAY,yBAAgC;IAEtD,OAAO,CAAC,MAAM,CAA0B;IACxC,OAAO,CAAC,KAAK,CAAS;IACtB,OAAO,CAAC,KAAK,CAA2B;IACxC,OAAO,CAAC,KAAK,CAAc;IAC3B,OAAO,CAAC,SAAS,CAAM;IACvB,OAAO,CAAC,UAAU,CAAM;IACxB,OAAO,CAAC,EAAE,CAAC,CAAoB;IAE/B,OAAO,CAAC,QAAQ,CAAC,EAAE,CAAQ;IAC3B,OAAO,CAAC,QAAQ,CAAC,EAAE,CAAO;IAC1B,OAAO,CAAC,QAAQ,CAAC,EAAE,CAAO;IAC1B,OAAO,CAAC,QAAQ,CAAC,EAAE,CAAO;IAEnB,WAAW,CAAC,EAAE,EAAE,MAAM,GAAG,IAAI,GAAG,IAAI;IACpC,MAAM,IAAI,IAAI;IACd,OAAO,IAAI,IAAI;IACf,QAAQ,IAAI,IAAI;IAChB,WAAW,IAAI,IAAI;IAC1B,WAAW,IAAI,IAAI;IAEnB,IAAa,KAAK,CAAC,CAAC,EAAE,SAAS,GAAG,IAAI,EAAwD;IAEvF,MAAM,CAAC,CAAC,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,GAAG,IAAI;IAM1C,OAAO,CAAC,KAAK;IAOb,OAAO,CAAC,KAAK;IA0Eb,OAAO,CAAC,MAAM;yCAjHH,sBAAsB;2CAAtB,sBAAsB;CAwJlC"}
1
+ {"version":3,"file":"constellation.component.d.ts","sourceRoot":"","sources":["../../../../../src/lib/custom/ai-agent-run/flow/constellation.component.ts"],"names":[],"mappings":"AAAA,OAAO,EAAa,UAAU,EAAiB,YAAY,EAAoE,MAAM,eAAe,CAAC;AACrJ,OAAO,EAAE,SAAS,EAAE,QAAQ,EAA2B,MAAM,wBAAwB,CAAC;;AAQtF;;;;;GAKG;AACH,qBAQa,sBAAsB;IACG,MAAM,EAAG,UAAU,CAAC,aAAa,CAAC,CAAC;IAEvE,sCAAsC;IACtC,IAAI,MAAM,IAAI,UAAU,CAAC,aAAa,CAAC,CAEtC;IACD,sCAAsC;IACtC,IAAI,MAAM,CAAC,KAAK,EAAE,UAAU,CAAC,aAAa,CAAC,EAE1C;IACS,YAAY,yBAAgC;IAEtD;;;;;;OAMG;IACO,YAAY,yBAAqB;IAE3C,OAAO,CAAC,MAAM,CAA0B;IACxC,OAAO,CAAC,KAAK,CAAS;IACtB,OAAO,CAAC,KAAK,CAA2B;IACxC,OAAO,CAAC,KAAK,CAAc;IAC3B,OAAO,CAAC,SAAS,CAAM;IACvB,OAAO,CAAC,UAAU,CAAM;IACxB,OAAO,CAAC,EAAE,CAAC,CAAoB;IAE/B,OAAO,CAAC,QAAQ,CAAC,EAAE,CAAQ;IAC3B,OAAO,CAAC,QAAQ,CAAC,EAAE,CAAO;IAC1B,OAAO,CAAC,QAAQ,CAAC,EAAE,CAAO;IAC1B,OAAO,CAAC,QAAQ,CAAC,EAAE,CAAO;IAEnB,WAAW,CAAC,EAAE,EAAE,MAAM,GAAG,IAAI,GAAG,IAAI;IACpC,MAAM,IAAI,IAAI;IACd,OAAO,IAAI,IAAI;IACf,QAAQ,IAAI,IAAI;IAChB,WAAW,IAAI,IAAI;IAC1B,WAAW,IAAI,IAAI;IAEnB,IAAa,KAAK,CAAC,CAAC,EAAE,SAAS,GAAG,IAAI,EAAwD;IAEvF,MAAM,CAAC,CAAC,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,GAAG,IAAI;IAM1C,OAAO,CAAC,KAAK;IAOb,OAAO,CAAC,KAAK;IA0Eb,OAAO,CAAC,MAAM;yCAnIH,sBAAsB;2CAAtB,sBAAsB;CA0KlC"}