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

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 (182) hide show
  1. package/dist/lib/custom/AIAgents/FlowAgentType/flow-agent-form-section.component.d.ts +19 -2
  2. package/dist/lib/custom/AIAgents/FlowAgentType/flow-agent-form-section.component.d.ts.map +1 -1
  3. package/dist/lib/custom/AIAgents/FlowAgentType/flow-agent-form-section.component.js +50 -9
  4. package/dist/lib/custom/AIAgents/FlowAgentType/flow-agent-form-section.component.js.map +1 -1
  5. package/dist/lib/custom/AIAgents/agent-form-tabs.d.ts +59 -0
  6. package/dist/lib/custom/AIAgents/agent-form-tabs.d.ts.map +1 -0
  7. package/dist/lib/custom/AIAgents/agent-form-tabs.js +53 -0
  8. package/dist/lib/custom/AIAgents/agent-form-tabs.js.map +1 -0
  9. package/dist/lib/custom/AIAgents/ai-agent-form.component.d.ts +54 -0
  10. package/dist/lib/custom/AIAgents/ai-agent-form.component.d.ts.map +1 -1
  11. package/dist/lib/custom/AIAgents/ai-agent-form.component.js +1300 -1143
  12. package/dist/lib/custom/AIAgents/ai-agent-form.component.js.map +1 -1
  13. package/dist/lib/custom/EntityActions/entityaction.form.component.js +9 -9
  14. package/dist/lib/custom/EntityActions/entityaction.form.component.js.map +1 -1
  15. package/dist/lib/custom/ai-agent-run/ai-agent-run-analytics.component.d.ts +25 -1
  16. package/dist/lib/custom/ai-agent-run/ai-agent-run-analytics.component.d.ts.map +1 -1
  17. package/dist/lib/custom/ai-agent-run/ai-agent-run-analytics.component.js +228 -170
  18. package/dist/lib/custom/ai-agent-run/ai-agent-run-analytics.component.js.map +1 -1
  19. package/dist/lib/custom/ai-agent-run/ai-agent-run-step-detail.component.d.ts +60 -2
  20. package/dist/lib/custom/ai-agent-run/ai-agent-run-step-detail.component.d.ts.map +1 -1
  21. package/dist/lib/custom/ai-agent-run/ai-agent-run-step-detail.component.js +372 -188
  22. package/dist/lib/custom/ai-agent-run/ai-agent-run-step-detail.component.js.map +1 -1
  23. package/dist/lib/custom/ai-agent-run/ai-agent-run-step-node.component.d.ts +9 -0
  24. package/dist/lib/custom/ai-agent-run/ai-agent-run-step-node.component.d.ts.map +1 -1
  25. package/dist/lib/custom/ai-agent-run/ai-agent-run-step-node.component.js +86 -51
  26. package/dist/lib/custom/ai-agent-run/ai-agent-run-step-node.component.js.map +1 -1
  27. package/dist/lib/custom/ai-agent-run/ai-agent-run-timeline.component.d.ts +73 -4
  28. package/dist/lib/custom/ai-agent-run/ai-agent-run-timeline.component.d.ts.map +1 -1
  29. package/dist/lib/custom/ai-agent-run/ai-agent-run-timeline.component.js +133 -7
  30. package/dist/lib/custom/ai-agent-run/ai-agent-run-timeline.component.js.map +1 -1
  31. package/dist/lib/custom/ai-agent-run/ai-agent-run.component.d.ts +49 -1
  32. package/dist/lib/custom/ai-agent-run/ai-agent-run.component.d.ts.map +1 -1
  33. package/dist/lib/custom/ai-agent-run/ai-agent-run.component.js +383 -264
  34. package/dist/lib/custom/ai-agent-run/ai-agent-run.component.js.map +1 -1
  35. package/dist/lib/custom/ai-agent-run/flow/agent-run-flow.component.d.ts +10 -1
  36. package/dist/lib/custom/ai-agent-run/flow/agent-run-flow.component.d.ts.map +1 -1
  37. package/dist/lib/custom/ai-agent-run/flow/agent-run-flow.component.js +25 -3
  38. package/dist/lib/custom/ai-agent-run/flow/agent-run-flow.component.js.map +1 -1
  39. package/dist/lib/custom/ai-agent-run/flow/agent-run-flow.model.d.ts +21 -1
  40. package/dist/lib/custom/ai-agent-run/flow/agent-run-flow.model.d.ts.map +1 -1
  41. package/dist/lib/custom/ai-agent-run/flow/agent-run-flow.model.js +11 -0
  42. package/dist/lib/custom/ai-agent-run/flow/agent-run-flow.model.js.map +1 -1
  43. package/dist/lib/custom/ai-agent-run/flow/run-tree-flow-projection.d.ts +28 -0
  44. package/dist/lib/custom/ai-agent-run/flow/run-tree-flow-projection.d.ts.map +1 -0
  45. package/dist/lib/custom/ai-agent-run/flow/run-tree-flow-projection.js +120 -0
  46. package/dist/lib/custom/ai-agent-run/flow/run-tree-flow-projection.js.map +1 -0
  47. package/dist/lib/custom/ai-agent-run/run-tree-timeline-projection.d.ts +90 -0
  48. package/dist/lib/custom/ai-agent-run/run-tree-timeline-projection.d.ts.map +1 -0
  49. package/dist/lib/custom/ai-agent-run/run-tree-timeline-projection.js +326 -0
  50. package/dist/lib/custom/ai-agent-run/run-tree-timeline-projection.js.map +1 -0
  51. package/dist/lib/custom/custom-forms.module.d.ts +14 -13
  52. package/dist/lib/custom/custom-forms.module.d.ts.map +1 -1
  53. package/dist/lib/custom/custom-forms.module.js +8 -1
  54. package/dist/lib/custom/custom-forms.module.js.map +1 -1
  55. package/dist/lib/generated/Entities/MJAIAgent/mjaiagent.form.component.d.ts.map +1 -1
  56. package/dist/lib/generated/Entities/MJAIAgent/mjaiagent.form.component.js +59 -41
  57. package/dist/lib/generated/Entities/MJAIAgent/mjaiagent.form.component.js.map +1 -1
  58. package/dist/lib/generated/Entities/MJAIAgentCredential/mjaiagentcredential.form.component.d.ts +10 -0
  59. package/dist/lib/generated/Entities/MJAIAgentCredential/mjaiagentcredential.form.component.d.ts.map +1 -0
  60. package/dist/lib/generated/Entities/MJAIAgentCredential/mjaiagentcredential.form.component.js +78 -0
  61. package/dist/lib/generated/Entities/MJAIAgentCredential/mjaiagentcredential.form.component.js.map +1 -0
  62. package/dist/lib/generated/Entities/MJAIAgentHarness/mjaiagentharness.form.component.d.ts +10 -0
  63. package/dist/lib/generated/Entities/{MJReportSnapshot/mjreportsnapshot.form.component.d.ts.map → MJAIAgentHarness/mjaiagentharness.form.component.d.ts.map} +1 -1
  64. package/dist/lib/generated/Entities/MJAIAgentHarness/mjaiagentharness.form.component.js +90 -0
  65. package/dist/lib/generated/Entities/MJAIAgentHarness/mjaiagentharness.form.component.js.map +1 -0
  66. package/dist/lib/generated/Entities/MJAIAgentRequest/mjaiagentrequest.form.component.js +8 -6
  67. package/dist/lib/generated/Entities/MJAIAgentRequest/mjaiagentrequest.form.component.js.map +1 -1
  68. package/dist/lib/generated/Entities/MJAIAgentRun/mjaiagentrun.form.component.d.ts.map +1 -1
  69. package/dist/lib/generated/Entities/MJAIAgentRun/mjaiagentrun.form.component.js +105 -83
  70. package/dist/lib/generated/Entities/MJAIAgentRun/mjaiagentrun.form.component.js.map +1 -1
  71. package/dist/lib/generated/Entities/MJAIModel/mjaimodel.form.component.d.ts.map +1 -1
  72. package/dist/lib/generated/Entities/MJAIModel/mjaimodel.form.component.js +184 -164
  73. package/dist/lib/generated/Entities/MJAIModel/mjaimodel.form.component.js.map +1 -1
  74. package/dist/lib/generated/Entities/MJAIModelType/mjaimodeltype.form.component.js +25 -23
  75. package/dist/lib/generated/Entities/MJAIModelType/mjaimodeltype.form.component.js.map +1 -1
  76. package/dist/lib/generated/Entities/MJAIModelVendor/mjaimodelvendor.form.component.js +15 -13
  77. package/dist/lib/generated/Entities/MJAIModelVendor/mjaimodelvendor.form.component.js.map +1 -1
  78. package/dist/lib/generated/Entities/MJAIPrompt/mjaiprompt.form.component.d.ts.map +1 -1
  79. package/dist/lib/generated/Entities/MJAIPrompt/mjaiprompt.form.component.js +43 -25
  80. package/dist/lib/generated/Entities/MJAIPrompt/mjaiprompt.form.component.js.map +1 -1
  81. package/dist/lib/generated/Entities/MJAIVendor/mjaivendor.form.component.d.ts.map +1 -1
  82. package/dist/lib/generated/Entities/MJAIVendor/mjaivendor.form.component.js +31 -13
  83. package/dist/lib/generated/Entities/MJAIVendor/mjaivendor.form.component.js.map +1 -1
  84. package/dist/lib/generated/Entities/MJAction/mjaction.form.component.js +31 -31
  85. package/dist/lib/generated/Entities/MJAction/mjaction.form.component.js.map +1 -1
  86. package/dist/lib/generated/Entities/MJActionExecutionLog/mjactionexecutionlog.form.component.js +11 -11
  87. package/dist/lib/generated/Entities/MJActionExecutionLog/mjactionexecutionlog.form.component.js.map +1 -1
  88. package/dist/lib/generated/Entities/MJActionParam/mjactionparam.form.component.d.ts.map +1 -1
  89. package/dist/lib/generated/Entities/MJActionParam/mjactionparam.form.component.js +5 -23
  90. package/dist/lib/generated/Entities/MJActionParam/mjactionparam.form.component.js.map +1 -1
  91. package/dist/lib/generated/Entities/MJContentSource/mjcontentsource.form.component.js +2 -2
  92. package/dist/lib/generated/Entities/MJContentSource/mjcontentsource.form.component.js.map +1 -1
  93. package/dist/lib/generated/Entities/MJConversation/mjconversation.form.component.d.ts.map +1 -1
  94. package/dist/lib/generated/Entities/MJConversation/mjconversation.form.component.js +31 -49
  95. package/dist/lib/generated/Entities/MJConversation/mjconversation.form.component.js.map +1 -1
  96. package/dist/lib/generated/Entities/MJConversationDetail/mjconversationdetail.form.component.d.ts.map +1 -1
  97. package/dist/lib/generated/Entities/MJConversationDetail/mjconversationdetail.form.component.js +38 -56
  98. package/dist/lib/generated/Entities/MJConversationDetail/mjconversationdetail.form.component.js.map +1 -1
  99. package/dist/lib/generated/Entities/MJCredential/mjcredential.form.component.d.ts.map +1 -1
  100. package/dist/lib/generated/Entities/MJCredential/mjcredential.form.component.js +31 -13
  101. package/dist/lib/generated/Entities/MJCredential/mjcredential.form.component.js.map +1 -1
  102. package/dist/lib/generated/Entities/MJDataContext/mjdatacontext.form.component.d.ts.map +1 -1
  103. package/dist/lib/generated/Entities/MJDataContext/mjdatacontext.form.component.js +7 -25
  104. package/dist/lib/generated/Entities/MJDataContext/mjdatacontext.form.component.js.map +1 -1
  105. package/dist/lib/generated/Entities/MJEntity/mjentity.form.component.js +3 -3
  106. package/dist/lib/generated/Entities/MJEntity/mjentity.form.component.js.map +1 -1
  107. package/dist/lib/generated/Entities/MJEntityAction/mjentityaction.form.component.js +38 -36
  108. package/dist/lib/generated/Entities/MJEntityAction/mjentityaction.form.component.js.map +1 -1
  109. package/dist/lib/generated/Entities/MJEntityActionParam/mjentityactionparam.form.component.d.ts.map +1 -1
  110. package/dist/lib/generated/Entities/MJEntityActionParam/mjentityactionparam.form.component.js +7 -13
  111. package/dist/lib/generated/Entities/MJEntityActionParam/mjentityactionparam.form.component.js.map +1 -1
  112. package/dist/lib/generated/Entities/MJEntityRelationship/mjentityrelationship.form.component.js +12 -10
  113. package/dist/lib/generated/Entities/MJEntityRelationship/mjentityrelationship.form.component.js.map +1 -1
  114. package/dist/lib/generated/Entities/MJEnvironment/mjenvironment.form.component.d.ts.map +1 -1
  115. package/dist/lib/generated/Entities/MJEnvironment/mjenvironment.form.component.js +15 -33
  116. package/dist/lib/generated/Entities/MJEnvironment/mjenvironment.form.component.js.map +1 -1
  117. package/dist/lib/generated/Entities/MJOutputDeliveryType/mjoutputdeliverytype.form.component.d.ts.map +1 -1
  118. package/dist/lib/generated/Entities/MJOutputDeliveryType/mjoutputdeliverytype.form.component.js +6 -25
  119. package/dist/lib/generated/Entities/MJOutputDeliveryType/mjoutputdeliverytype.form.component.js.map +1 -1
  120. package/dist/lib/generated/Entities/MJOutputFormatType/mjoutputformattype.form.component.d.ts.map +1 -1
  121. package/dist/lib/generated/Entities/MJOutputFormatType/mjoutputformattype.form.component.js +6 -25
  122. package/dist/lib/generated/Entities/MJOutputFormatType/mjoutputformattype.form.component.js.map +1 -1
  123. package/dist/lib/generated/Entities/MJScheduledJob/mjscheduledjob.form.component.d.ts.map +1 -1
  124. package/dist/lib/generated/Entities/MJScheduledJob/mjscheduledjob.form.component.js +45 -25
  125. package/dist/lib/generated/Entities/MJScheduledJob/mjscheduledjob.form.component.js.map +1 -1
  126. package/dist/lib/generated/Entities/MJTask/mjtask.form.component.d.ts.map +1 -1
  127. package/dist/lib/generated/Entities/MJTask/mjtask.form.component.js +68 -24
  128. package/dist/lib/generated/Entities/MJTask/mjtask.form.component.js.map +1 -1
  129. package/dist/lib/generated/Entities/MJTaskDependency/mjtaskdependency.form.component.d.ts.map +1 -1
  130. package/dist/lib/generated/Entities/MJTaskDependency/mjtaskdependency.form.component.js +20 -6
  131. package/dist/lib/generated/Entities/MJTaskDependency/mjtaskdependency.form.component.js.map +1 -1
  132. package/dist/lib/generated/Entities/MJUser/mjuser.form.component.d.ts.map +1 -1
  133. package/dist/lib/generated/Entities/MJUser/mjuser.form.component.js +372 -462
  134. package/dist/lib/generated/Entities/MJUser/mjuser.form.component.js.map +1 -1
  135. package/dist/lib/generated/generated-forms.module.d.ts +375 -389
  136. package/dist/lib/generated/generated-forms.module.d.ts.map +1 -1
  137. package/dist/lib/generated/generated-forms.module.js +158 -215
  138. package/dist/lib/generated/generated-forms.module.js.map +1 -1
  139. package/package.json +43 -42
  140. package/dist/lib/generated/Entities/MJOutputTriggerType/mjoutputtriggertype.form.component.d.ts +0 -10
  141. package/dist/lib/generated/Entities/MJOutputTriggerType/mjoutputtriggertype.form.component.d.ts.map +0 -1
  142. package/dist/lib/generated/Entities/MJOutputTriggerType/mjoutputtriggertype.form.component.js +0 -83
  143. package/dist/lib/generated/Entities/MJOutputTriggerType/mjoutputtriggertype.form.component.js.map +0 -1
  144. package/dist/lib/generated/Entities/MJReport/mjreport.form.component.d.ts +0 -10
  145. package/dist/lib/generated/Entities/MJReport/mjreport.form.component.d.ts.map +0 -1
  146. package/dist/lib/generated/Entities/MJReport/mjreport.form.component.js +0 -161
  147. package/dist/lib/generated/Entities/MJReport/mjreport.form.component.js.map +0 -1
  148. package/dist/lib/generated/Entities/MJReportCategory/mjreportcategory.form.component.d.ts +0 -10
  149. package/dist/lib/generated/Entities/MJReportCategory/mjreportcategory.form.component.d.ts.map +0 -1
  150. package/dist/lib/generated/Entities/MJReportCategory/mjreportcategory.form.component.js +0 -113
  151. package/dist/lib/generated/Entities/MJReportCategory/mjreportcategory.form.component.js.map +0 -1
  152. package/dist/lib/generated/Entities/MJReportSnapshot/mjreportsnapshot.form.component.d.ts +0 -10
  153. package/dist/lib/generated/Entities/MJReportSnapshot/mjreportsnapshot.form.component.js +0 -72
  154. package/dist/lib/generated/Entities/MJReportSnapshot/mjreportsnapshot.form.component.js.map +0 -1
  155. package/dist/lib/generated/Entities/MJReportUserState/mjreportuserstate.form.component.d.ts +0 -10
  156. package/dist/lib/generated/Entities/MJReportUserState/mjreportuserstate.form.component.d.ts.map +0 -1
  157. package/dist/lib/generated/Entities/MJReportUserState/mjreportuserstate.form.component.js +0 -72
  158. package/dist/lib/generated/Entities/MJReportUserState/mjreportuserstate.form.component.js.map +0 -1
  159. package/dist/lib/generated/Entities/MJReportVersion/mjreportversion.form.component.d.ts +0 -10
  160. package/dist/lib/generated/Entities/MJReportVersion/mjreportversion.form.component.d.ts.map +0 -1
  161. package/dist/lib/generated/Entities/MJReportVersion/mjreportversion.form.component.js +0 -78
  162. package/dist/lib/generated/Entities/MJReportVersion/mjreportversion.form.component.js.map +0 -1
  163. package/dist/lib/generated/Entities/MJScheduledAction/mjscheduledaction.form.component.d.ts +0 -10
  164. package/dist/lib/generated/Entities/MJScheduledAction/mjscheduledaction.form.component.d.ts.map +0 -1
  165. package/dist/lib/generated/Entities/MJScheduledAction/mjscheduledaction.form.component.js +0 -135
  166. package/dist/lib/generated/Entities/MJScheduledAction/mjscheduledaction.form.component.js.map +0 -1
  167. package/dist/lib/generated/Entities/MJScheduledActionParam/mjscheduledactionparam.form.component.d.ts +0 -10
  168. package/dist/lib/generated/Entities/MJScheduledActionParam/mjscheduledactionparam.form.component.d.ts.map +0 -1
  169. package/dist/lib/generated/Entities/MJScheduledActionParam/mjscheduledactionparam.form.component.js +0 -76
  170. package/dist/lib/generated/Entities/MJScheduledActionParam/mjscheduledactionparam.form.component.js.map +0 -1
  171. package/dist/lib/generated/Entities/MJWorkflow/mjworkflow.form.component.d.ts +0 -10
  172. package/dist/lib/generated/Entities/MJWorkflow/mjworkflow.form.component.d.ts.map +0 -1
  173. package/dist/lib/generated/Entities/MJWorkflow/mjworkflow.form.component.js +0 -121
  174. package/dist/lib/generated/Entities/MJWorkflow/mjworkflow.form.component.js.map +0 -1
  175. package/dist/lib/generated/Entities/MJWorkflowEngine/mjworkflowengine.form.component.d.ts +0 -10
  176. package/dist/lib/generated/Entities/MJWorkflowEngine/mjworkflowengine.form.component.d.ts.map +0 -1
  177. package/dist/lib/generated/Entities/MJWorkflowEngine/mjworkflowengine.form.component.js +0 -87
  178. package/dist/lib/generated/Entities/MJWorkflowEngine/mjworkflowengine.form.component.js.map +0 -1
  179. package/dist/lib/generated/Entities/MJWorkflowRun/mjworkflowrun.form.component.d.ts +0 -10
  180. package/dist/lib/generated/Entities/MJWorkflowRun/mjworkflowrun.form.component.d.ts.map +0 -1
  181. package/dist/lib/generated/Entities/MJWorkflowRun/mjworkflowrun.form.component.js +0 -80
  182. package/dist/lib/generated/Entities/MJWorkflowRun/mjworkflowrun.form.component.js.map +0 -1
@@ -7,6 +7,7 @@ var __decorate = (this && this.__decorate) || function (decorators, target, key,
7
7
  import { Component, ViewChild, inject } from '@angular/core';
8
8
  import { Subject } from 'rxjs';
9
9
  import { BaseEntity, CompositeKey } from '@memberjunction/core';
10
+ import { LoadAgentRunTree, MAX_AGENT_RUN_TREE_DEPTH, WalkAgentRunTree, } from '@memberjunction/ai-core-plus';
10
11
  import { BaseFormComponent } from '@memberjunction/ng-base-forms';
11
12
  import { MJGlobal, MJEventType, RegisterClass, UUIDsEqual } from '@memberjunction/global';
12
13
  import { SharedService, NavigationService } from '@memberjunction/ng-shared';
@@ -45,7 +46,7 @@ function MJAIAgentRunFormComponentExtended_Conditional_8_Template(rf, ctx) { if
45
46
  } }
46
47
  function MJAIAgentRunFormComponentExtended_Conditional_13_Template(rf, ctx) { if (rf & 1) {
47
48
  const _r2 = i0.ɵɵgetCurrentView();
48
- i0.ɵɵelementStart(0, "span", 12)(1, "a", 36);
49
+ i0.ɵɵelementStart(0, "span", 12)(1, "a", 37);
49
50
  i0.ɵɵlistener("click", function MJAIAgentRunFormComponentExtended_Conditional_13_Template_a_click_1_listener() { i0.ɵɵrestoreView(_r2); const ctx_r0 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r0.openEntityRecord("MJ: AI Agents", ctx_r0.record.AgentID)); });
50
51
  i0.ɵɵtext(2);
51
52
  i0.ɵɵelementEnd()();
@@ -57,34 +58,40 @@ function MJAIAgentRunFormComponentExtended_Conditional_13_Template(rf, ctx) { if
57
58
  function MJAIAgentRunFormComponentExtended_Conditional_16_Template(rf, ctx) { if (rf & 1) {
58
59
  const _r3 = i0.ɵɵgetCurrentView();
59
60
  i0.ɵɵelementStart(0, "span", 14);
60
- i0.ɵɵelement(1, "i", 37);
61
- i0.ɵɵelementStart(2, "a", 38);
61
+ i0.ɵɵelement(1, "i", 38);
62
+ i0.ɵɵelementStart(2, "a", 39);
62
63
  i0.ɵɵlistener("click", function MJAIAgentRunFormComponentExtended_Conditional_16_Template_a_click_2_listener() { i0.ɵɵrestoreView(_r3); const ctx_r0 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r0.navigateToParentRun()); });
63
64
  i0.ɵɵtext(3, "Parent Run");
64
65
  i0.ɵɵelementEnd()();
65
66
  } }
66
67
  function MJAIAgentRunFormComponentExtended_Conditional_17_Template(rf, ctx) { if (rf & 1) {
67
68
  const _r4 = i0.ɵɵgetCurrentView();
68
- i0.ɵɵelementStart(0, "span", 39);
69
+ i0.ɵɵelementStart(0, "span", 40);
69
70
  i0.ɵɵlistener("click", function MJAIAgentRunFormComponentExtended_Conditional_17_Template_span_click_0_listener() { i0.ɵɵrestoreView(_r4); const ctx_r0 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r0.navigateToConversation()); });
70
- i0.ɵɵelement(1, "i", 40);
71
+ i0.ɵɵelement(1, "i", 41);
71
72
  i0.ɵɵelementStart(2, "span");
72
73
  i0.ɵɵtext(3, "Conversation");
73
74
  i0.ɵɵelementEnd();
74
- i0.ɵɵelement(4, "i", 41);
75
+ i0.ɵɵelement(4, "i", 42);
75
76
  i0.ɵɵelementEnd();
76
77
  } }
77
78
  function MJAIAgentRunFormComponentExtended_Conditional_19_Template(rf, ctx) { if (rf & 1) {
78
79
  i0.ɵɵelementStart(0, "div", 17);
79
- i0.ɵɵelement(1, "i", 42);
80
+ i0.ɵɵelement(1, "i", 43);
80
81
  i0.ɵɵtext(2, " Plan Mode ");
81
82
  i0.ɵɵelementEnd();
82
83
  } }
83
- function MJAIAgentRunFormComponentExtended_Conditional_33_Template(rf, ctx) { if (rf & 1) {
84
- i0.ɵɵelementStart(0, "div", 23)(1, "span", 24);
84
+ function MJAIAgentRunFormComponentExtended_Conditional_23_Template(rf, ctx) { if (rf & 1) {
85
+ i0.ɵɵelementStart(0, "div", 19);
86
+ i0.ɵɵelement(1, "i", 44);
87
+ i0.ɵɵtext(2, " Workflow still running ");
88
+ i0.ɵɵelementEnd();
89
+ } }
90
+ function MJAIAgentRunFormComponentExtended_Conditional_34_Template(rf, ctx) { if (rf & 1) {
91
+ i0.ɵɵelementStart(0, "div", 24)(1, "span", 25);
85
92
  i0.ɵɵtext(2, "Completed");
86
93
  i0.ɵɵelementEnd();
87
- i0.ɵɵelementStart(3, "span", 25);
94
+ i0.ɵɵelementStart(3, "span", 26);
88
95
  i0.ɵɵtext(4);
89
96
  i0.ɵɵpipe(5, "date");
90
97
  i0.ɵɵelementEnd()();
@@ -93,11 +100,11 @@ function MJAIAgentRunFormComponentExtended_Conditional_33_Template(rf, ctx) { if
93
100
  i0.ɵɵadvance(4);
94
101
  i0.ɵɵtextInterpolate(i0.ɵɵpipeBind2(5, 1, ctx_r0.record.CompletedAt, "medium"));
95
102
  } }
96
- function MJAIAgentRunFormComponentExtended_Conditional_34_Template(rf, ctx) { if (rf & 1) {
97
- i0.ɵɵelementStart(0, "div", 23)(1, "span", 24);
103
+ function MJAIAgentRunFormComponentExtended_Conditional_35_Template(rf, ctx) { if (rf & 1) {
104
+ i0.ɵɵelementStart(0, "div", 24)(1, "span", 25);
98
105
  i0.ɵɵtext(2, "Duration");
99
106
  i0.ɵɵelementEnd();
100
- i0.ɵɵelementStart(3, "span", 25);
107
+ i0.ɵɵelementStart(3, "span", 26);
101
108
  i0.ɵɵtext(4);
102
109
  i0.ɵɵelementEnd()();
103
110
  } if (rf & 2) {
@@ -105,11 +112,11 @@ function MJAIAgentRunFormComponentExtended_Conditional_34_Template(rf, ctx) { if
105
112
  i0.ɵɵadvance(4);
106
113
  i0.ɵɵtextInterpolate(ctx_r0.calculateDuration(ctx_r0.record.StartedAt, ctx_r0.record.CompletedAt));
107
114
  } }
108
- function MJAIAgentRunFormComponentExtended_Conditional_35_Template(rf, ctx) { if (rf & 1) {
109
- i0.ɵɵelementStart(0, "div", 23)(1, "span", 24);
115
+ function MJAIAgentRunFormComponentExtended_Conditional_36_Template(rf, ctx) { if (rf & 1) {
116
+ i0.ɵɵelementStart(0, "div", 24)(1, "span", 25);
110
117
  i0.ɵɵtext(2, "Result");
111
118
  i0.ɵɵelementEnd();
112
- i0.ɵɵelementStart(3, "span", 25);
119
+ i0.ɵɵelementStart(3, "span", 26);
113
120
  i0.ɵɵtext(4);
114
121
  i0.ɵɵelementEnd()();
115
122
  } if (rf & 2) {
@@ -119,8 +126,8 @@ function MJAIAgentRunFormComponentExtended_Conditional_35_Template(rf, ctx) { if
119
126
  i0.ɵɵadvance();
120
127
  i0.ɵɵtextInterpolate1(" ", ctx_r0.record.Success ? "Success" : "Failed", " ");
121
128
  } }
122
- function MJAIAgentRunFormComponentExtended_Conditional_36_Conditional_3_Template(rf, ctx) { if (rf & 1) {
123
- i0.ɵɵelementStart(0, "span", 25);
129
+ function MJAIAgentRunFormComponentExtended_Conditional_37_Conditional_3_Template(rf, ctx) { if (rf & 1) {
130
+ i0.ɵɵelementStart(0, "span", 26);
124
131
  i0.ɵɵtext(1);
125
132
  i0.ɵɵpipe(2, "number");
126
133
  i0.ɵɵelementEnd();
@@ -129,17 +136,17 @@ function MJAIAgentRunFormComponentExtended_Conditional_36_Conditional_3_Template
129
136
  i0.ɵɵadvance();
130
137
  i0.ɵɵtextInterpolate(i0.ɵɵpipeBind2(2, 1, ctx_r0.costMetrics.totalTokensInput + ctx_r0.costMetrics.totalTokensOutput, "1.0-0"));
131
138
  } }
132
- function MJAIAgentRunFormComponentExtended_Conditional_36_Conditional_4_Template(rf, ctx) { if (rf & 1) {
133
- i0.ɵɵelementStart(0, "span", 43);
134
- i0.ɵɵelement(1, "i", 44);
139
+ function MJAIAgentRunFormComponentExtended_Conditional_37_Conditional_4_Template(rf, ctx) { if (rf & 1) {
140
+ i0.ɵɵelementStart(0, "span", 45);
141
+ i0.ɵɵelement(1, "i", 46);
135
142
  i0.ɵɵelementEnd();
136
143
  } }
137
- function MJAIAgentRunFormComponentExtended_Conditional_36_Template(rf, ctx) { if (rf & 1) {
138
- i0.ɵɵelementStart(0, "div", 23)(1, "span", 24);
144
+ function MJAIAgentRunFormComponentExtended_Conditional_37_Template(rf, ctx) { if (rf & 1) {
145
+ i0.ɵɵelementStart(0, "div", 24)(1, "span", 25);
139
146
  i0.ɵɵtext(2, "Tokens");
140
147
  i0.ɵɵelementEnd();
141
- i0.ɵɵconditionalCreate(3, MJAIAgentRunFormComponentExtended_Conditional_36_Conditional_3_Template, 3, 4, "span", 25);
142
- i0.ɵɵconditionalCreate(4, MJAIAgentRunFormComponentExtended_Conditional_36_Conditional_4_Template, 2, 0, "span", 43);
148
+ i0.ɵɵconditionalCreate(3, MJAIAgentRunFormComponentExtended_Conditional_37_Conditional_3_Template, 3, 4, "span", 26);
149
+ i0.ɵɵconditionalCreate(4, MJAIAgentRunFormComponentExtended_Conditional_37_Conditional_4_Template, 2, 0, "span", 45);
143
150
  i0.ɵɵelementEnd();
144
151
  } if (rf & 2) {
145
152
  const ctx_r0 = i0.ɵɵnextContext();
@@ -148,8 +155,8 @@ function MJAIAgentRunFormComponentExtended_Conditional_36_Template(rf, ctx) { if
148
155
  i0.ɵɵadvance();
149
156
  i0.ɵɵconditional(ctx_r0.costMetrics.isLoading ? 4 : -1);
150
157
  } }
151
- function MJAIAgentRunFormComponentExtended_Conditional_37_Conditional_3_Template(rf, ctx) { if (rf & 1) {
152
- i0.ɵɵelementStart(0, "span", 25);
158
+ function MJAIAgentRunFormComponentExtended_Conditional_38_Conditional_3_Template(rf, ctx) { if (rf & 1) {
159
+ i0.ɵɵelementStart(0, "span", 26);
153
160
  i0.ɵɵtext(1);
154
161
  i0.ɵɵpipe(2, "number");
155
162
  i0.ɵɵelementEnd();
@@ -158,17 +165,17 @@ function MJAIAgentRunFormComponentExtended_Conditional_37_Conditional_3_Template
158
165
  i0.ɵɵadvance();
159
166
  i0.ɵɵtextInterpolate1("$", i0.ɵɵpipeBind2(2, 1, ctx_r0.costMetrics.totalCost, "1.2-4"));
160
167
  } }
161
- function MJAIAgentRunFormComponentExtended_Conditional_37_Conditional_4_Template(rf, ctx) { if (rf & 1) {
162
- i0.ɵɵelementStart(0, "span", 43);
163
- i0.ɵɵelement(1, "i", 44);
168
+ function MJAIAgentRunFormComponentExtended_Conditional_38_Conditional_4_Template(rf, ctx) { if (rf & 1) {
169
+ i0.ɵɵelementStart(0, "span", 45);
170
+ i0.ɵɵelement(1, "i", 46);
164
171
  i0.ɵɵelementEnd();
165
172
  } }
166
- function MJAIAgentRunFormComponentExtended_Conditional_37_Template(rf, ctx) { if (rf & 1) {
167
- i0.ɵɵelementStart(0, "div", 23)(1, "span", 24);
173
+ function MJAIAgentRunFormComponentExtended_Conditional_38_Template(rf, ctx) { if (rf & 1) {
174
+ i0.ɵɵelementStart(0, "div", 24)(1, "span", 25);
168
175
  i0.ɵɵtext(2, "Cost");
169
176
  i0.ɵɵelementEnd();
170
- i0.ɵɵconditionalCreate(3, MJAIAgentRunFormComponentExtended_Conditional_37_Conditional_3_Template, 3, 4, "span", 25);
171
- i0.ɵɵconditionalCreate(4, MJAIAgentRunFormComponentExtended_Conditional_37_Conditional_4_Template, 2, 0, "span", 43);
177
+ i0.ɵɵconditionalCreate(3, MJAIAgentRunFormComponentExtended_Conditional_38_Conditional_3_Template, 3, 4, "span", 26);
178
+ i0.ɵɵconditionalCreate(4, MJAIAgentRunFormComponentExtended_Conditional_38_Conditional_4_Template, 2, 0, "span", 45);
172
179
  i0.ɵɵelementEnd();
173
180
  } if (rf & 2) {
174
181
  const ctx_r0 = i0.ɵɵnextContext();
@@ -177,11 +184,11 @@ function MJAIAgentRunFormComponentExtended_Conditional_37_Template(rf, ctx) { if
177
184
  i0.ɵɵadvance();
178
185
  i0.ɵɵconditional(ctx_r0.costMetrics.isLoading ? 4 : -1);
179
186
  } }
180
- function MJAIAgentRunFormComponentExtended_Conditional_38_Template(rf, ctx) { if (rf & 1) {
181
- i0.ɵɵelementStart(0, "div", 23)(1, "span", 24);
187
+ function MJAIAgentRunFormComponentExtended_Conditional_39_Template(rf, ctx) { if (rf & 1) {
188
+ i0.ɵɵelementStart(0, "div", 24)(1, "span", 25);
182
189
  i0.ɵɵtext(2, "Effort Level");
183
190
  i0.ɵɵelementEnd();
184
- i0.ɵɵelementStart(3, "span", 25);
191
+ i0.ɵɵelementStart(3, "span", 26);
185
192
  i0.ɵɵtext(4);
186
193
  i0.ɵɵelementEnd()();
187
194
  } if (rf & 2) {
@@ -189,15 +196,15 @@ function MJAIAgentRunFormComponentExtended_Conditional_38_Template(rf, ctx) { if
189
196
  i0.ɵɵadvance(4);
190
197
  i0.ɵɵtextInterpolate(ctx_r0.record.EffortLevel);
191
198
  } }
192
- function MJAIAgentRunFormComponentExtended_Conditional_39_Template(rf, ctx) { if (rf & 1) {
199
+ function MJAIAgentRunFormComponentExtended_Conditional_40_Template(rf, ctx) { if (rf & 1) {
193
200
  const _r5 = i0.ɵɵgetCurrentView();
194
- i0.ɵɵelementStart(0, "div", 26)(1, "div", 45);
195
- i0.ɵɵelement(2, "i", 46);
196
- i0.ɵɵelementStart(3, "div", 47)(4, "div", 48);
201
+ i0.ɵɵelementStart(0, "div", 27)(1, "div", 47);
202
+ i0.ɵɵelement(2, "i", 48);
203
+ i0.ɵɵelementStart(3, "div", 49)(4, "div", 50);
197
204
  i0.ɵɵtext(5, "Configuration");
198
205
  i0.ɵɵelementEnd();
199
- i0.ɵɵelementStart(6, "div", 49)(7, "a", 36);
200
- i0.ɵɵlistener("click", function MJAIAgentRunFormComponentExtended_Conditional_39_Template_a_click_7_listener() { i0.ɵɵrestoreView(_r5); const ctx_r0 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r0.openEntityRecord("MJ: AI Configurations", ctx_r0.record.ConfigurationID)); });
206
+ i0.ɵɵelementStart(6, "div", 51)(7, "a", 37);
207
+ i0.ɵɵlistener("click", function MJAIAgentRunFormComponentExtended_Conditional_40_Template_a_click_7_listener() { i0.ɵɵrestoreView(_r5); const ctx_r0 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r0.openEntityRecord("MJ: AI Configurations", ctx_r0.record.ConfigurationID)); });
201
208
  i0.ɵɵtext(8);
202
209
  i0.ɵɵelementEnd()()()()();
203
210
  } if (rf & 2) {
@@ -205,10 +212,10 @@ function MJAIAgentRunFormComponentExtended_Conditional_39_Template(rf, ctx) { if
205
212
  i0.ɵɵadvance(8);
206
213
  i0.ɵɵtextInterpolate1(" ", ctx_r0.record.Configuration || "Unknown", " ");
207
214
  } }
208
- function MJAIAgentRunFormComponentExtended_Conditional_54_Conditional_4_Template(rf, ctx) { if (rf & 1) {
215
+ function MJAIAgentRunFormComponentExtended_Conditional_55_Conditional_4_Template(rf, ctx) { if (rf & 1) {
209
216
  const _r7 = i0.ɵɵgetCurrentView();
210
- i0.ɵɵelementStart(0, "as-split-area", 51)(1, "mj-ai-agent-run-step-detail", 53);
211
- i0.ɵɵlistener("closePanel", function MJAIAgentRunFormComponentExtended_Conditional_54_Conditional_4_Template_mj_ai_agent_run_step_detail_closePanel_1_listener() { i0.ɵɵrestoreView(_r7); const ctx_r0 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r0.closeJsonPanel()); })("navigateToActionLog", function MJAIAgentRunFormComponentExtended_Conditional_54_Conditional_4_Template_mj_ai_agent_run_step_detail_navigateToActionLog_1_listener($event) { i0.ɵɵrestoreView(_r7); const ctx_r0 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r0.navigateToActionLog($event)); })("copyToClipboard", function MJAIAgentRunFormComponentExtended_Conditional_54_Conditional_4_Template_mj_ai_agent_run_step_detail_copyToClipboard_1_listener($event) { i0.ɵɵrestoreView(_r7); const ctx_r0 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r0.copyToClipboard($event)); });
217
+ i0.ɵɵelementStart(0, "as-split-area", 53)(1, "mj-ai-agent-run-step-detail", 55);
218
+ i0.ɵɵlistener("closePanel", function MJAIAgentRunFormComponentExtended_Conditional_55_Conditional_4_Template_mj_ai_agent_run_step_detail_closePanel_1_listener() { i0.ɵɵrestoreView(_r7); const ctx_r0 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r0.closeJsonPanel()); })("navigateToActionLog", function MJAIAgentRunFormComponentExtended_Conditional_55_Conditional_4_Template_mj_ai_agent_run_step_detail_navigateToActionLog_1_listener($event) { i0.ɵɵrestoreView(_r7); const ctx_r0 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r0.navigateToActionLog($event)); })("copyToClipboard", function MJAIAgentRunFormComponentExtended_Conditional_55_Conditional_4_Template_mj_ai_agent_run_step_detail_copyToClipboard_1_listener($event) { i0.ɵɵrestoreView(_r7); const ctx_r0 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r0.copyToClipboard($event)); });
212
219
  i0.ɵɵelementEnd()();
213
220
  } if (rf & 2) {
214
221
  const ctx_r0 = i0.ɵɵnextContext(2);
@@ -216,60 +223,60 @@ function MJAIAgentRunFormComponentExtended_Conditional_54_Conditional_4_Template
216
223
  i0.ɵɵadvance();
217
224
  i0.ɵɵproperty("selectedTimelineItem", ctx_r0.selectedTimelineItem);
218
225
  } }
219
- function MJAIAgentRunFormComponentExtended_Conditional_54_Template(rf, ctx) { if (rf & 1) {
226
+ function MJAIAgentRunFormComponentExtended_Conditional_55_Template(rf, ctx) { if (rf & 1) {
220
227
  const _r6 = i0.ɵɵgetCurrentView();
221
- i0.ɵɵelementStart(0, "div", 34)(1, "as-split", 50)(2, "as-split-area", 51)(3, "mj-ai-agent-run-timeline", 52);
222
- i0.ɵɵlistener("itemSelected", function MJAIAgentRunFormComponentExtended_Conditional_54_Template_mj_ai_agent_run_timeline_itemSelected_3_listener($event) { i0.ɵɵrestoreView(_r6); const ctx_r0 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r0.selectTimelineItem($event)); })("navigateToEntity", function MJAIAgentRunFormComponentExtended_Conditional_54_Template_mj_ai_agent_run_timeline_navigateToEntity_3_listener($event) { i0.ɵɵrestoreView(_r6); const ctx_r0 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r0.navigateToEntityRecord($event)); });
228
+ i0.ɵɵelementStart(0, "div", 35)(1, "as-split", 52)(2, "as-split-area", 53)(3, "mj-ai-agent-run-timeline", 54);
229
+ i0.ɵɵlistener("itemSelected", function MJAIAgentRunFormComponentExtended_Conditional_55_Template_mj_ai_agent_run_timeline_itemSelected_3_listener($event) { i0.ɵɵrestoreView(_r6); const ctx_r0 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r0.selectTimelineItem($event)); })("navigateToEntity", function MJAIAgentRunFormComponentExtended_Conditional_55_Template_mj_ai_agent_run_timeline_navigateToEntity_3_listener($event) { i0.ɵɵrestoreView(_r6); const ctx_r0 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r0.navigateToEntityRecord($event)); });
223
230
  i0.ɵɵelementEnd()();
224
- i0.ɵɵconditionalCreate(4, MJAIAgentRunFormComponentExtended_Conditional_54_Conditional_4_Template, 2, 2, "as-split-area", 51);
231
+ i0.ɵɵconditionalCreate(4, MJAIAgentRunFormComponentExtended_Conditional_55_Conditional_4_Template, 2, 2, "as-split-area", 53);
225
232
  i0.ɵɵelementEnd()();
226
233
  } if (rf & 2) {
227
234
  const ctx_r0 = i0.ɵɵnextContext();
228
235
  i0.ɵɵadvance(2);
229
236
  i0.ɵɵproperty("size", ctx_r0.selectedTimelineItem ? 55 : 100);
230
237
  i0.ɵɵadvance();
231
- i0.ɵɵproperty("aiAgentRunId", ctx_r0.record.ID)("dataHelper", ctx_r0.dataHelper);
238
+ i0.ɵɵproperty("aiAgentRunId", ctx_r0.record.ID)("dataHelper", ctx_r0.dataHelper)("RunTree", ctx_r0.runTree);
232
239
  i0.ɵɵadvance();
233
240
  i0.ɵɵconditional(ctx_r0.selectedTimelineItem ? 4 : -1);
234
241
  } }
235
- function MJAIAgentRunFormComponentExtended_Conditional_55_Conditional_1_Template(rf, ctx) { if (rf & 1) {
236
- i0.ɵɵelement(0, "mj-ai-agent-run-flow", 54);
242
+ function MJAIAgentRunFormComponentExtended_Conditional_56_Conditional_1_Template(rf, ctx) { if (rf & 1) {
243
+ i0.ɵɵelement(0, "mj-ai-agent-run-flow", 56);
237
244
  } if (rf & 2) {
238
245
  const ctx_r0 = i0.ɵɵnextContext(2);
239
- i0.ɵɵproperty("aiAgentRunId", ctx_r0.record.ID)("dataHelper", ctx_r0.dataHelper)("agentName", (ctx_r0.agent == null ? null : ctx_r0.agent.Name) || null)("runStatus", ctx_r0.record.Status || "")("agentIconClass", (ctx_r0.agent == null ? null : ctx_r0.agent.IconClass) || null)("agentLogoUrl", (ctx_r0.agent == null ? null : ctx_r0.agent.LogoURL) || null);
246
+ i0.ɵɵproperty("aiAgentRunId", ctx_r0.record.ID)("dataHelper", ctx_r0.dataHelper)("agentName", (ctx_r0.agent == null ? null : ctx_r0.agent.Name) || null)("runStatus", ctx_r0.record.Status || "")("agentIconClass", (ctx_r0.agent == null ? null : ctx_r0.agent.IconClass) || null)("agentLogoUrl", (ctx_r0.agent == null ? null : ctx_r0.agent.LogoURL) || null)("RunTree", ctx_r0.runTree);
240
247
  } }
241
- function MJAIAgentRunFormComponentExtended_Conditional_55_Template(rf, ctx) { if (rf & 1) {
242
- i0.ɵɵelementStart(0, "div", 34);
243
- i0.ɵɵconditionalCreate(1, MJAIAgentRunFormComponentExtended_Conditional_55_Conditional_1_Template, 1, 6, "mj-ai-agent-run-flow", 54);
248
+ function MJAIAgentRunFormComponentExtended_Conditional_56_Template(rf, ctx) { if (rf & 1) {
249
+ i0.ɵɵelementStart(0, "div", 35);
250
+ i0.ɵɵconditionalCreate(1, MJAIAgentRunFormComponentExtended_Conditional_56_Conditional_1_Template, 1, 7, "mj-ai-agent-run-flow", 56);
244
251
  i0.ɵɵelementEnd();
245
252
  } if (rf & 2) {
246
253
  const ctx_r0 = i0.ɵɵnextContext();
247
254
  i0.ɵɵadvance();
248
255
  i0.ɵɵconditional(ctx_r0.visualizationLoaded ? 1 : -1);
249
256
  } }
250
- function MJAIAgentRunFormComponentExtended_Conditional_56_Conditional_1_Template(rf, ctx) { if (rf & 1) {
251
- i0.ɵɵelement(0, "mj-ai-agent-run-analytics", 55, 0);
257
+ function MJAIAgentRunFormComponentExtended_Conditional_57_Conditional_1_Template(rf, ctx) { if (rf & 1) {
258
+ i0.ɵɵelement(0, "mj-ai-agent-run-analytics", 57, 0);
252
259
  } if (rf & 2) {
253
260
  const ctx_r0 = i0.ɵɵnextContext(2);
254
- i0.ɵɵproperty("agentRunId", ctx_r0.record.ID);
261
+ i0.ɵɵproperty("agentRunId", ctx_r0.record.ID)("RunTree", ctx_r0.runTree);
255
262
  } }
256
- function MJAIAgentRunFormComponentExtended_Conditional_56_Template(rf, ctx) { if (rf & 1) {
257
- i0.ɵɵelementStart(0, "div", 34);
258
- i0.ɵɵconditionalCreate(1, MJAIAgentRunFormComponentExtended_Conditional_56_Conditional_1_Template, 2, 1, "mj-ai-agent-run-analytics", 55);
263
+ function MJAIAgentRunFormComponentExtended_Conditional_57_Template(rf, ctx) { if (rf & 1) {
264
+ i0.ɵɵelementStart(0, "div", 35);
265
+ i0.ɵɵconditionalCreate(1, MJAIAgentRunFormComponentExtended_Conditional_57_Conditional_1_Template, 2, 2, "mj-ai-agent-run-analytics", 57);
259
266
  i0.ɵɵelementEnd();
260
267
  } if (rf & 2) {
261
268
  const ctx_r0 = i0.ɵɵnextContext();
262
269
  i0.ɵɵadvance();
263
270
  i0.ɵɵconditional(ctx_r0.analyticsLoaded ? 1 : -1);
264
271
  } }
265
- function MJAIAgentRunFormComponentExtended_Conditional_57_ng_template_2_Template(rf, ctx) { if (rf & 1) {
266
- i0.ɵɵelement(0, "i", 32);
272
+ function MJAIAgentRunFormComponentExtended_Conditional_58_ng_template_2_Template(rf, ctx) { if (rf & 1) {
273
+ i0.ɵɵelement(0, "i", 33);
267
274
  i0.ɵɵtext(1, " General Information ");
268
275
  } }
269
- function MJAIAgentRunFormComponentExtended_Conditional_57_Conditional_14_Template(rf, ctx) { if (rf & 1) {
276
+ function MJAIAgentRunFormComponentExtended_Conditional_58_Conditional_14_Template(rf, ctx) { if (rf & 1) {
270
277
  const _r9 = i0.ɵɵgetCurrentView();
271
- i0.ɵɵelementStart(0, "a", 36);
272
- i0.ɵɵlistener("click", function MJAIAgentRunFormComponentExtended_Conditional_57_Conditional_14_Template_a_click_0_listener() { i0.ɵɵrestoreView(_r9); const ctx_r0 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r0.openEntityRecord("MJ: AI Agent Runs", ctx_r0.record.ParentRunID)); });
278
+ i0.ɵɵelementStart(0, "a", 37);
279
+ i0.ɵɵlistener("click", function MJAIAgentRunFormComponentExtended_Conditional_58_Conditional_14_Template_a_click_0_listener() { i0.ɵɵrestoreView(_r9); const ctx_r0 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r0.openEntityRecord("MJ: AI Agent Runs", ctx_r0.record.ParentRunID)); });
273
280
  i0.ɵɵtext(1);
274
281
  i0.ɵɵelementEnd();
275
282
  } if (rf & 2) {
@@ -277,15 +284,15 @@ function MJAIAgentRunFormComponentExtended_Conditional_57_Conditional_14_Templat
277
284
  i0.ɵɵadvance();
278
285
  i0.ɵɵtextInterpolate1(" ", ctx_r0.record.ParentRunID, " ");
279
286
  } }
280
- function MJAIAgentRunFormComponentExtended_Conditional_57_Conditional_15_Template(rf, ctx) { if (rf & 1) {
287
+ function MJAIAgentRunFormComponentExtended_Conditional_58_Conditional_15_Template(rf, ctx) { if (rf & 1) {
281
288
  i0.ɵɵelementStart(0, "span");
282
289
  i0.ɵɵtext(1, "None (Root)");
283
290
  i0.ɵɵelementEnd();
284
291
  } }
285
- function MJAIAgentRunFormComponentExtended_Conditional_57_Conditional_20_Template(rf, ctx) { if (rf & 1) {
292
+ function MJAIAgentRunFormComponentExtended_Conditional_58_Conditional_20_Template(rf, ctx) { if (rf & 1) {
286
293
  const _r10 = i0.ɵɵgetCurrentView();
287
- i0.ɵɵelementStart(0, "a", 36);
288
- i0.ɵɵlistener("click", function MJAIAgentRunFormComponentExtended_Conditional_57_Conditional_20_Template_a_click_0_listener() { i0.ɵɵrestoreView(_r10); const ctx_r0 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r0.openEntityRecord("MJ: AI Agent Runs", ctx_r0.record.LastRunID)); });
294
+ i0.ɵɵelementStart(0, "a", 37);
295
+ i0.ɵɵlistener("click", function MJAIAgentRunFormComponentExtended_Conditional_58_Conditional_20_Template_a_click_0_listener() { i0.ɵɵrestoreView(_r10); const ctx_r0 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r0.openEntityRecord("MJ: AI Agent Runs", ctx_r0.record.LastRunID)); });
289
296
  i0.ɵɵtext(1);
290
297
  i0.ɵɵelementEnd();
291
298
  } if (rf & 2) {
@@ -293,15 +300,15 @@ function MJAIAgentRunFormComponentExtended_Conditional_57_Conditional_20_Templat
293
300
  i0.ɵɵadvance();
294
301
  i0.ɵɵtextInterpolate1(" ", ctx_r0.record.LastRunID, " ");
295
302
  } }
296
- function MJAIAgentRunFormComponentExtended_Conditional_57_Conditional_21_Template(rf, ctx) { if (rf & 1) {
303
+ function MJAIAgentRunFormComponentExtended_Conditional_58_Conditional_21_Template(rf, ctx) { if (rf & 1) {
297
304
  i0.ɵɵelementStart(0, "span");
298
305
  i0.ɵɵtext(1, "None");
299
306
  i0.ɵɵelementEnd();
300
307
  } }
301
- function MJAIAgentRunFormComponentExtended_Conditional_57_Conditional_26_Template(rf, ctx) { if (rf & 1) {
308
+ function MJAIAgentRunFormComponentExtended_Conditional_58_Conditional_26_Template(rf, ctx) { if (rf & 1) {
302
309
  const _r11 = i0.ɵɵgetCurrentView();
303
- i0.ɵɵelementStart(0, "a", 36);
304
- i0.ɵɵlistener("click", function MJAIAgentRunFormComponentExtended_Conditional_57_Conditional_26_Template_a_click_0_listener() { i0.ɵɵrestoreView(_r11); const ctx_r0 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r0.openEntityRecord("MJ: Conversations", ctx_r0.record.ConversationID)); });
310
+ i0.ɵɵelementStart(0, "a", 37);
311
+ i0.ɵɵlistener("click", function MJAIAgentRunFormComponentExtended_Conditional_58_Conditional_26_Template_a_click_0_listener() { i0.ɵɵrestoreView(_r11); const ctx_r0 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r0.openEntityRecord("MJ: Conversations", ctx_r0.record.ConversationID)); });
305
312
  i0.ɵɵtext(1);
306
313
  i0.ɵɵelementEnd();
307
314
  } if (rf & 2) {
@@ -309,15 +316,15 @@ function MJAIAgentRunFormComponentExtended_Conditional_57_Conditional_26_Templat
309
316
  i0.ɵɵadvance();
310
317
  i0.ɵɵtextInterpolate1(" ", ctx_r0.record.ConversationID, " ");
311
318
  } }
312
- function MJAIAgentRunFormComponentExtended_Conditional_57_Conditional_27_Template(rf, ctx) { if (rf & 1) {
319
+ function MJAIAgentRunFormComponentExtended_Conditional_58_Conditional_27_Template(rf, ctx) { if (rf & 1) {
313
320
  i0.ɵɵelementStart(0, "span");
314
321
  i0.ɵɵtext(1, "N/A");
315
322
  i0.ɵɵelementEnd();
316
323
  } }
317
- function MJAIAgentRunFormComponentExtended_Conditional_57_Conditional_32_Template(rf, ctx) { if (rf & 1) {
324
+ function MJAIAgentRunFormComponentExtended_Conditional_58_Conditional_32_Template(rf, ctx) { if (rf & 1) {
318
325
  const _r12 = i0.ɵɵgetCurrentView();
319
- i0.ɵɵelementStart(0, "a", 36);
320
- i0.ɵɵlistener("click", function MJAIAgentRunFormComponentExtended_Conditional_57_Conditional_32_Template_a_click_0_listener() { i0.ɵɵrestoreView(_r12); const ctx_r0 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r0.openEntityRecord("MJ: Users", ctx_r0.record.UserID)); });
326
+ i0.ɵɵelementStart(0, "a", 37);
327
+ i0.ɵɵlistener("click", function MJAIAgentRunFormComponentExtended_Conditional_58_Conditional_32_Template_a_click_0_listener() { i0.ɵɵrestoreView(_r12); const ctx_r0 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r0.openEntityRecord("MJ: Users", ctx_r0.record.UserID)); });
321
328
  i0.ɵɵtext(1);
322
329
  i0.ɵɵelementEnd();
323
330
  } if (rf & 2) {
@@ -325,19 +332,19 @@ function MJAIAgentRunFormComponentExtended_Conditional_57_Conditional_32_Templat
325
332
  i0.ɵɵadvance();
326
333
  i0.ɵɵtextInterpolate1(" ", ctx_r0.record.User || "N/A", " ");
327
334
  } }
328
- function MJAIAgentRunFormComponentExtended_Conditional_57_Conditional_33_Template(rf, ctx) { if (rf & 1) {
335
+ function MJAIAgentRunFormComponentExtended_Conditional_58_Conditional_33_Template(rf, ctx) { if (rf & 1) {
329
336
  i0.ɵɵelementStart(0, "span");
330
337
  i0.ɵɵtext(1, "N/A");
331
338
  i0.ɵɵelementEnd();
332
339
  } }
333
- function MJAIAgentRunFormComponentExtended_Conditional_57_ng_template_35_Template(rf, ctx) { if (rf & 1) {
334
- i0.ɵɵelement(0, "i", 64);
340
+ function MJAIAgentRunFormComponentExtended_Conditional_58_ng_template_35_Template(rf, ctx) { if (rf & 1) {
341
+ i0.ɵɵelement(0, "i", 66);
335
342
  i0.ɵɵtext(1, " Execution Settings ");
336
343
  } }
337
- function MJAIAgentRunFormComponentExtended_Conditional_57_Conditional_41_Template(rf, ctx) { if (rf & 1) {
344
+ function MJAIAgentRunFormComponentExtended_Conditional_58_Conditional_41_Template(rf, ctx) { if (rf & 1) {
338
345
  const _r13 = i0.ɵɵgetCurrentView();
339
- i0.ɵɵelementStart(0, "a", 36);
340
- i0.ɵɵlistener("click", function MJAIAgentRunFormComponentExtended_Conditional_57_Conditional_41_Template_a_click_0_listener() { i0.ɵɵrestoreView(_r13); const ctx_r0 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r0.openEntityRecord("MJ: AI Models", ctx_r0.record.OverrideModelID)); });
346
+ i0.ɵɵelementStart(0, "a", 37);
347
+ i0.ɵɵlistener("click", function MJAIAgentRunFormComponentExtended_Conditional_58_Conditional_41_Template_a_click_0_listener() { i0.ɵɵrestoreView(_r13); const ctx_r0 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r0.openEntityRecord("MJ: AI Models", ctx_r0.record.OverrideModelID)); });
341
348
  i0.ɵɵtext(1);
342
349
  i0.ɵɵelementEnd();
343
350
  } if (rf & 2) {
@@ -345,15 +352,15 @@ function MJAIAgentRunFormComponentExtended_Conditional_57_Conditional_41_Templat
345
352
  i0.ɵɵadvance();
346
353
  i0.ɵɵtextInterpolate1(" ", ctx_r0.record.OverrideModel || "N/A", " ");
347
354
  } }
348
- function MJAIAgentRunFormComponentExtended_Conditional_57_Conditional_42_Template(rf, ctx) { if (rf & 1) {
355
+ function MJAIAgentRunFormComponentExtended_Conditional_58_Conditional_42_Template(rf, ctx) { if (rf & 1) {
349
356
  i0.ɵɵelementStart(0, "span");
350
357
  i0.ɵɵtext(1, "N/A");
351
358
  i0.ɵɵelementEnd();
352
359
  } }
353
- function MJAIAgentRunFormComponentExtended_Conditional_57_Conditional_47_Template(rf, ctx) { if (rf & 1) {
360
+ function MJAIAgentRunFormComponentExtended_Conditional_58_Conditional_47_Template(rf, ctx) { if (rf & 1) {
354
361
  const _r14 = i0.ɵɵgetCurrentView();
355
- i0.ɵɵelementStart(0, "a", 36);
356
- i0.ɵɵlistener("click", function MJAIAgentRunFormComponentExtended_Conditional_57_Conditional_47_Template_a_click_0_listener() { i0.ɵɵrestoreView(_r14); const ctx_r0 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r0.openEntityRecord("MJ: AI Vendors", ctx_r0.record.OverrideVendorID)); });
362
+ i0.ɵɵelementStart(0, "a", 37);
363
+ i0.ɵɵlistener("click", function MJAIAgentRunFormComponentExtended_Conditional_58_Conditional_47_Template_a_click_0_listener() { i0.ɵɵrestoreView(_r14); const ctx_r0 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r0.openEntityRecord("MJ: AI Vendors", ctx_r0.record.OverrideVendorID)); });
357
364
  i0.ɵɵtext(1);
358
365
  i0.ɵɵelementEnd();
359
366
  } if (rf & 2) {
@@ -361,35 +368,35 @@ function MJAIAgentRunFormComponentExtended_Conditional_57_Conditional_47_Templat
361
368
  i0.ɵɵadvance();
362
369
  i0.ɵɵtextInterpolate1(" ", ctx_r0.record.OverrideVendor || "N/A", " ");
363
370
  } }
364
- function MJAIAgentRunFormComponentExtended_Conditional_57_Conditional_48_Template(rf, ctx) { if (rf & 1) {
371
+ function MJAIAgentRunFormComponentExtended_Conditional_58_Conditional_48_Template(rf, ctx) { if (rf & 1) {
365
372
  i0.ɵɵelementStart(0, "span");
366
373
  i0.ɵɵtext(1, "N/A");
367
374
  i0.ɵɵelementEnd();
368
375
  } }
369
- function MJAIAgentRunFormComponentExtended_Conditional_57_ng_template_55_Template(rf, ctx) { if (rf & 1) {
370
- i0.ɵɵelement(0, "i", 65);
376
+ function MJAIAgentRunFormComponentExtended_Conditional_58_ng_template_55_Template(rf, ctx) { if (rf & 1) {
377
+ i0.ɵɵelement(0, "i", 67);
371
378
  i0.ɵɵtext(1, " Execution Status ");
372
379
  } }
373
- function MJAIAgentRunFormComponentExtended_Conditional_57_Conditional_65_Template(rf, ctx) { if (rf & 1) {
380
+ function MJAIAgentRunFormComponentExtended_Conditional_58_Conditional_65_Template(rf, ctx) { if (rf & 1) {
374
381
  i0.ɵɵelementStart(0, "span");
375
382
  i0.ɵɵtext(1, "In Progress");
376
383
  i0.ɵɵelementEnd();
377
384
  } }
378
- function MJAIAgentRunFormComponentExtended_Conditional_57_Conditional_66_Template(rf, ctx) { if (rf & 1) {
379
- i0.ɵɵelementStart(0, "span", 61);
385
+ function MJAIAgentRunFormComponentExtended_Conditional_58_Conditional_66_Template(rf, ctx) { if (rf & 1) {
386
+ i0.ɵɵelementStart(0, "span", 63);
380
387
  i0.ɵɵtext(1, "Yes");
381
388
  i0.ɵɵelementEnd();
382
389
  } }
383
- function MJAIAgentRunFormComponentExtended_Conditional_57_Conditional_67_Template(rf, ctx) { if (rf & 1) {
384
- i0.ɵɵelementStart(0, "span", 62);
390
+ function MJAIAgentRunFormComponentExtended_Conditional_58_Conditional_67_Template(rf, ctx) { if (rf & 1) {
391
+ i0.ɵɵelementStart(0, "span", 64);
385
392
  i0.ɵɵtext(1, "No");
386
393
  i0.ɵɵelementEnd();
387
394
  } }
388
- function MJAIAgentRunFormComponentExtended_Conditional_57_Conditional_68_Template(rf, ctx) { if (rf & 1) {
389
- i0.ɵɵelementStart(0, "div", 63)(1, "label");
395
+ function MJAIAgentRunFormComponentExtended_Conditional_58_Conditional_68_Template(rf, ctx) { if (rf & 1) {
396
+ i0.ɵɵelementStart(0, "div", 65)(1, "label");
390
397
  i0.ɵɵtext(2, "Message");
391
398
  i0.ɵɵelementEnd();
392
- i0.ɵɵelementStart(3, "div", 66);
399
+ i0.ɵɵelementStart(3, "div", 68);
393
400
  i0.ɵɵtext(4);
394
401
  i0.ɵɵelementEnd()();
395
402
  } if (rf & 2) {
@@ -397,11 +404,11 @@ function MJAIAgentRunFormComponentExtended_Conditional_57_Conditional_68_Templat
397
404
  i0.ɵɵadvance(4);
398
405
  i0.ɵɵtextInterpolate(ctx_r0.record.Message);
399
406
  } }
400
- function MJAIAgentRunFormComponentExtended_Conditional_57_Conditional_69_Template(rf, ctx) { if (rf & 1) {
401
- i0.ɵɵelementStart(0, "div", 63)(1, "label");
407
+ function MJAIAgentRunFormComponentExtended_Conditional_58_Conditional_69_Template(rf, ctx) { if (rf & 1) {
408
+ i0.ɵɵelementStart(0, "div", 65)(1, "label");
402
409
  i0.ɵɵtext(2, "Error Message");
403
410
  i0.ɵɵelementEnd();
404
- i0.ɵɵelementStart(3, "div", 62);
411
+ i0.ɵɵelementStart(3, "div", 64);
405
412
  i0.ɵɵtext(4);
406
413
  i0.ɵɵelementEnd()();
407
414
  } if (rf & 2) {
@@ -409,31 +416,31 @@ function MJAIAgentRunFormComponentExtended_Conditional_57_Conditional_69_Templat
409
416
  i0.ɵɵadvance(4);
410
417
  i0.ɵɵtextInterpolate(ctx_r0.record.ErrorMessage);
411
418
  } }
412
- function MJAIAgentRunFormComponentExtended_Conditional_57_ng_template_71_Template(rf, ctx) { if (rf & 1) {
413
- i0.ɵɵelement(0, "i", 67);
419
+ function MJAIAgentRunFormComponentExtended_Conditional_58_ng_template_71_Template(rf, ctx) { if (rf & 1) {
420
+ i0.ɵɵelement(0, "i", 69);
414
421
  i0.ɵɵtext(1, " Usage & Cost ");
415
422
  } }
416
- function MJAIAgentRunFormComponentExtended_Conditional_57_Conditional_103_ng_template_1_Template(rf, ctx) { if (rf & 1) {
417
- i0.ɵɵelement(0, "i", 71);
423
+ function MJAIAgentRunFormComponentExtended_Conditional_58_Conditional_103_ng_template_1_Template(rf, ctx) { if (rf & 1) {
424
+ i0.ɵɵelement(0, "i", 73);
418
425
  i0.ɵɵtext(1, " Result ");
419
426
  } }
420
- function MJAIAgentRunFormComponentExtended_Conditional_57_Conditional_103_Conditional_3_Template(rf, ctx) { if (rf & 1) {
421
- i0.ɵɵelement(0, "mj-code-editor", 69);
427
+ function MJAIAgentRunFormComponentExtended_Conditional_58_Conditional_103_Conditional_3_Template(rf, ctx) { if (rf & 1) {
428
+ i0.ɵɵelement(0, "mj-code-editor", 71);
422
429
  } if (rf & 2) {
423
430
  const ctx_r0 = i0.ɵɵnextContext(3);
424
431
  i0.ɵɵproperty("ngModel", ctx_r0.parsedResult)("language", "json")("readonly", true);
425
432
  } }
426
- function MJAIAgentRunFormComponentExtended_Conditional_57_Conditional_103_Conditional_4_Template(rf, ctx) { if (rf & 1) {
427
- i0.ɵɵelementStart(0, "div", 70);
428
- i0.ɵɵelement(1, "i", 44);
433
+ function MJAIAgentRunFormComponentExtended_Conditional_58_Conditional_103_Conditional_4_Template(rf, ctx) { if (rf & 1) {
434
+ i0.ɵɵelementStart(0, "div", 72);
435
+ i0.ɵɵelement(1, "i", 46);
429
436
  i0.ɵɵtext(2, " Loading result data... ");
430
437
  i0.ɵɵelementEnd();
431
438
  } }
432
- function MJAIAgentRunFormComponentExtended_Conditional_57_Conditional_103_Template(rf, ctx) { if (rf & 1) {
433
- i0.ɵɵelementStart(0, "mj-accordion-panel", 56);
434
- i0.ɵɵtemplate(1, MJAIAgentRunFormComponentExtended_Conditional_57_Conditional_103_ng_template_1_Template, 2, 0, "ng-template", 57);
435
- i0.ɵɵelementStart(2, "div", 68);
436
- i0.ɵɵconditionalCreate(3, MJAIAgentRunFormComponentExtended_Conditional_57_Conditional_103_Conditional_3_Template, 1, 3, "mj-code-editor", 69)(4, MJAIAgentRunFormComponentExtended_Conditional_57_Conditional_103_Conditional_4_Template, 3, 0, "div", 70);
439
+ function MJAIAgentRunFormComponentExtended_Conditional_58_Conditional_103_Template(rf, ctx) { if (rf & 1) {
440
+ i0.ɵɵelementStart(0, "mj-accordion-panel", 58);
441
+ i0.ɵɵtemplate(1, MJAIAgentRunFormComponentExtended_Conditional_58_Conditional_103_ng_template_1_Template, 2, 0, "ng-template", 59);
442
+ i0.ɵɵelementStart(2, "div", 70);
443
+ i0.ɵɵconditionalCreate(3, MJAIAgentRunFormComponentExtended_Conditional_58_Conditional_103_Conditional_3_Template, 1, 3, "mj-code-editor", 71)(4, MJAIAgentRunFormComponentExtended_Conditional_58_Conditional_103_Conditional_4_Template, 3, 0, "div", 72);
437
444
  i0.ɵɵelementEnd()();
438
445
  } if (rf & 2) {
439
446
  const ctx_r0 = i0.ɵɵnextContext(2);
@@ -441,27 +448,27 @@ function MJAIAgentRunFormComponentExtended_Conditional_57_Conditional_103_Templa
441
448
  i0.ɵɵadvance(3);
442
449
  i0.ɵɵconditional(ctx_r0.isParsingComplete ? 3 : 4);
443
450
  } }
444
- function MJAIAgentRunFormComponentExtended_Conditional_57_Conditional_104_ng_template_1_Template(rf, ctx) { if (rf & 1) {
445
- i0.ɵɵelement(0, "i", 72);
451
+ function MJAIAgentRunFormComponentExtended_Conditional_58_Conditional_104_ng_template_1_Template(rf, ctx) { if (rf & 1) {
452
+ i0.ɵɵelement(0, "i", 74);
446
453
  i0.ɵɵtext(1, " Starting Payload ");
447
454
  } }
448
- function MJAIAgentRunFormComponentExtended_Conditional_57_Conditional_104_Conditional_3_Template(rf, ctx) { if (rf & 1) {
449
- i0.ɵɵelement(0, "mj-code-editor", 69);
455
+ function MJAIAgentRunFormComponentExtended_Conditional_58_Conditional_104_Conditional_3_Template(rf, ctx) { if (rf & 1) {
456
+ i0.ɵɵelement(0, "mj-code-editor", 71);
450
457
  } if (rf & 2) {
451
458
  const ctx_r0 = i0.ɵɵnextContext(3);
452
459
  i0.ɵɵproperty("ngModel", ctx_r0.parsedStartingPayload)("language", "json")("readonly", true);
453
460
  } }
454
- function MJAIAgentRunFormComponentExtended_Conditional_57_Conditional_104_Conditional_4_Template(rf, ctx) { if (rf & 1) {
455
- i0.ɵɵelementStart(0, "div", 70);
456
- i0.ɵɵelement(1, "i", 44);
461
+ function MJAIAgentRunFormComponentExtended_Conditional_58_Conditional_104_Conditional_4_Template(rf, ctx) { if (rf & 1) {
462
+ i0.ɵɵelementStart(0, "div", 72);
463
+ i0.ɵɵelement(1, "i", 46);
457
464
  i0.ɵɵtext(2, " Loading payload data... ");
458
465
  i0.ɵɵelementEnd();
459
466
  } }
460
- function MJAIAgentRunFormComponentExtended_Conditional_57_Conditional_104_Template(rf, ctx) { if (rf & 1) {
461
- i0.ɵɵelementStart(0, "mj-accordion-panel", 56);
462
- i0.ɵɵtemplate(1, MJAIAgentRunFormComponentExtended_Conditional_57_Conditional_104_ng_template_1_Template, 2, 0, "ng-template", 57);
463
- i0.ɵɵelementStart(2, "div", 68);
464
- i0.ɵɵconditionalCreate(3, MJAIAgentRunFormComponentExtended_Conditional_57_Conditional_104_Conditional_3_Template, 1, 3, "mj-code-editor", 69)(4, MJAIAgentRunFormComponentExtended_Conditional_57_Conditional_104_Conditional_4_Template, 3, 0, "div", 70);
467
+ function MJAIAgentRunFormComponentExtended_Conditional_58_Conditional_104_Template(rf, ctx) { if (rf & 1) {
468
+ i0.ɵɵelementStart(0, "mj-accordion-panel", 58);
469
+ i0.ɵɵtemplate(1, MJAIAgentRunFormComponentExtended_Conditional_58_Conditional_104_ng_template_1_Template, 2, 0, "ng-template", 59);
470
+ i0.ɵɵelementStart(2, "div", 70);
471
+ i0.ɵɵconditionalCreate(3, MJAIAgentRunFormComponentExtended_Conditional_58_Conditional_104_Conditional_3_Template, 1, 3, "mj-code-editor", 71)(4, MJAIAgentRunFormComponentExtended_Conditional_58_Conditional_104_Conditional_4_Template, 3, 0, "div", 72);
465
472
  i0.ɵɵelementEnd()();
466
473
  } if (rf & 2) {
467
474
  const ctx_r0 = i0.ɵɵnextContext(2);
@@ -469,27 +476,27 @@ function MJAIAgentRunFormComponentExtended_Conditional_57_Conditional_104_Templa
469
476
  i0.ɵɵadvance(3);
470
477
  i0.ɵɵconditional(ctx_r0.isParsingComplete ? 3 : 4);
471
478
  } }
472
- function MJAIAgentRunFormComponentExtended_Conditional_57_Conditional_105_ng_template_1_Template(rf, ctx) { if (rf & 1) {
473
- i0.ɵɵelement(0, "i", 73);
479
+ function MJAIAgentRunFormComponentExtended_Conditional_58_Conditional_105_ng_template_1_Template(rf, ctx) { if (rf & 1) {
480
+ i0.ɵɵelement(0, "i", 75);
474
481
  i0.ɵɵtext(1, " Execution Data ");
475
482
  } }
476
- function MJAIAgentRunFormComponentExtended_Conditional_57_Conditional_105_Conditional_3_Template(rf, ctx) { if (rf & 1) {
477
- i0.ɵɵelement(0, "mj-code-editor", 69);
483
+ function MJAIAgentRunFormComponentExtended_Conditional_58_Conditional_105_Conditional_3_Template(rf, ctx) { if (rf & 1) {
484
+ i0.ɵɵelement(0, "mj-code-editor", 71);
478
485
  } if (rf & 2) {
479
486
  const ctx_r0 = i0.ɵɵnextContext(3);
480
487
  i0.ɵɵproperty("ngModel", ctx_r0.parsedData)("language", "json")("readonly", true);
481
488
  } }
482
- function MJAIAgentRunFormComponentExtended_Conditional_57_Conditional_105_Conditional_4_Template(rf, ctx) { if (rf & 1) {
483
- i0.ɵɵelementStart(0, "div", 70);
484
- i0.ɵɵelement(1, "i", 44);
489
+ function MJAIAgentRunFormComponentExtended_Conditional_58_Conditional_105_Conditional_4_Template(rf, ctx) { if (rf & 1) {
490
+ i0.ɵɵelementStart(0, "div", 72);
491
+ i0.ɵɵelement(1, "i", 46);
485
492
  i0.ɵɵtext(2, " Loading execution data... ");
486
493
  i0.ɵɵelementEnd();
487
494
  } }
488
- function MJAIAgentRunFormComponentExtended_Conditional_57_Conditional_105_Template(rf, ctx) { if (rf & 1) {
489
- i0.ɵɵelementStart(0, "mj-accordion-panel", 56);
490
- i0.ɵɵtemplate(1, MJAIAgentRunFormComponentExtended_Conditional_57_Conditional_105_ng_template_1_Template, 2, 0, "ng-template", 57);
491
- i0.ɵɵelementStart(2, "div", 68);
492
- i0.ɵɵconditionalCreate(3, MJAIAgentRunFormComponentExtended_Conditional_57_Conditional_105_Conditional_3_Template, 1, 3, "mj-code-editor", 69)(4, MJAIAgentRunFormComponentExtended_Conditional_57_Conditional_105_Conditional_4_Template, 3, 0, "div", 70);
495
+ function MJAIAgentRunFormComponentExtended_Conditional_58_Conditional_105_Template(rf, ctx) { if (rf & 1) {
496
+ i0.ɵɵelementStart(0, "mj-accordion-panel", 58);
497
+ i0.ɵɵtemplate(1, MJAIAgentRunFormComponentExtended_Conditional_58_Conditional_105_ng_template_1_Template, 2, 0, "ng-template", 59);
498
+ i0.ɵɵelementStart(2, "div", 70);
499
+ i0.ɵɵconditionalCreate(3, MJAIAgentRunFormComponentExtended_Conditional_58_Conditional_105_Conditional_3_Template, 1, 3, "mj-code-editor", 71)(4, MJAIAgentRunFormComponentExtended_Conditional_58_Conditional_105_Conditional_4_Template, 3, 0, "div", 72);
493
500
  i0.ɵɵelementEnd()();
494
501
  } if (rf & 2) {
495
502
  const ctx_r0 = i0.ɵɵnextContext(2);
@@ -497,27 +504,27 @@ function MJAIAgentRunFormComponentExtended_Conditional_57_Conditional_105_Templa
497
504
  i0.ɵɵadvance(3);
498
505
  i0.ɵɵconditional(ctx_r0.isParsingComplete ? 3 : 4);
499
506
  } }
500
- function MJAIAgentRunFormComponentExtended_Conditional_57_Conditional_106_ng_template_1_Template(rf, ctx) { if (rf & 1) {
501
- i0.ɵɵelement(0, "i", 74);
507
+ function MJAIAgentRunFormComponentExtended_Conditional_58_Conditional_106_ng_template_1_Template(rf, ctx) { if (rf & 1) {
508
+ i0.ɵɵelement(0, "i", 76);
502
509
  i0.ɵɵtext(1, " Final Payload ");
503
510
  } }
504
- function MJAIAgentRunFormComponentExtended_Conditional_57_Conditional_106_Conditional_3_Template(rf, ctx) { if (rf & 1) {
505
- i0.ɵɵelement(0, "mj-code-editor", 69);
511
+ function MJAIAgentRunFormComponentExtended_Conditional_58_Conditional_106_Conditional_3_Template(rf, ctx) { if (rf & 1) {
512
+ i0.ɵɵelement(0, "mj-code-editor", 71);
506
513
  } if (rf & 2) {
507
514
  const ctx_r0 = i0.ɵɵnextContext(3);
508
515
  i0.ɵɵproperty("ngModel", ctx_r0.parsedFinalPayload)("language", "json")("readonly", true);
509
516
  } }
510
- function MJAIAgentRunFormComponentExtended_Conditional_57_Conditional_106_Conditional_4_Template(rf, ctx) { if (rf & 1) {
511
- i0.ɵɵelementStart(0, "div", 70);
512
- i0.ɵɵelement(1, "i", 44);
517
+ function MJAIAgentRunFormComponentExtended_Conditional_58_Conditional_106_Conditional_4_Template(rf, ctx) { if (rf & 1) {
518
+ i0.ɵɵelementStart(0, "div", 72);
519
+ i0.ɵɵelement(1, "i", 46);
513
520
  i0.ɵɵtext(2, " Loading final payload data... ");
514
521
  i0.ɵɵelementEnd();
515
522
  } }
516
- function MJAIAgentRunFormComponentExtended_Conditional_57_Conditional_106_Template(rf, ctx) { if (rf & 1) {
517
- i0.ɵɵelementStart(0, "mj-accordion-panel", 56);
518
- i0.ɵɵtemplate(1, MJAIAgentRunFormComponentExtended_Conditional_57_Conditional_106_ng_template_1_Template, 2, 0, "ng-template", 57);
519
- i0.ɵɵelementStart(2, "div", 68);
520
- i0.ɵɵconditionalCreate(3, MJAIAgentRunFormComponentExtended_Conditional_57_Conditional_106_Conditional_3_Template, 1, 3, "mj-code-editor", 69)(4, MJAIAgentRunFormComponentExtended_Conditional_57_Conditional_106_Conditional_4_Template, 3, 0, "div", 70);
523
+ function MJAIAgentRunFormComponentExtended_Conditional_58_Conditional_106_Template(rf, ctx) { if (rf & 1) {
524
+ i0.ɵɵelementStart(0, "mj-accordion-panel", 58);
525
+ i0.ɵɵtemplate(1, MJAIAgentRunFormComponentExtended_Conditional_58_Conditional_106_ng_template_1_Template, 2, 0, "ng-template", 59);
526
+ i0.ɵɵelementStart(2, "div", 70);
527
+ i0.ɵɵconditionalCreate(3, MJAIAgentRunFormComponentExtended_Conditional_58_Conditional_106_Conditional_3_Template, 1, 3, "mj-code-editor", 71)(4, MJAIAgentRunFormComponentExtended_Conditional_58_Conditional_106_Conditional_4_Template, 3, 0, "div", 72);
521
528
  i0.ɵɵelementEnd()();
522
529
  } if (rf & 2) {
523
530
  const ctx_r0 = i0.ɵɵnextContext(2);
@@ -525,27 +532,27 @@ function MJAIAgentRunFormComponentExtended_Conditional_57_Conditional_106_Templa
525
532
  i0.ɵɵadvance(3);
526
533
  i0.ɵɵconditional(ctx_r0.isParsingComplete ? 3 : 4);
527
534
  } }
528
- function MJAIAgentRunFormComponentExtended_Conditional_57_Conditional_107_ng_template_1_Template(rf, ctx) { if (rf & 1) {
529
- i0.ɵɵelement(0, "i", 77);
535
+ function MJAIAgentRunFormComponentExtended_Conditional_58_Conditional_107_ng_template_1_Template(rf, ctx) { if (rf & 1) {
536
+ i0.ɵɵelement(0, "i", 79);
530
537
  i0.ɵɵtext(1, " Payload Diff ");
531
538
  } }
532
- function MJAIAgentRunFormComponentExtended_Conditional_57_Conditional_107_Conditional_3_Template(rf, ctx) { if (rf & 1) {
533
- i0.ɵɵelement(0, "mj-deep-diff", 76);
539
+ function MJAIAgentRunFormComponentExtended_Conditional_58_Conditional_107_Conditional_3_Template(rf, ctx) { if (rf & 1) {
540
+ i0.ɵɵelement(0, "mj-deep-diff", 78);
534
541
  } if (rf & 2) {
535
542
  const ctx_r0 = i0.ɵɵnextContext(3);
536
543
  i0.ɵɵproperty("oldValue", ctx_r0.startingPayloadObject)("newValue", ctx_r0.finalPayloadObject)("title", "")("showSummary", true)("showUnchanged", false)("expandAll", false)("maxDepth", 10)("maxStringLength", 200)("treatNullAsUndefined", true);
537
544
  } }
538
- function MJAIAgentRunFormComponentExtended_Conditional_57_Conditional_107_Conditional_4_Template(rf, ctx) { if (rf & 1) {
539
- i0.ɵɵelementStart(0, "div", 70);
540
- i0.ɵɵelement(1, "i", 44);
545
+ function MJAIAgentRunFormComponentExtended_Conditional_58_Conditional_107_Conditional_4_Template(rf, ctx) { if (rf & 1) {
546
+ i0.ɵɵelementStart(0, "div", 72);
547
+ i0.ɵɵelement(1, "i", 46);
541
548
  i0.ɵɵtext(2, " Loading payload diff... ");
542
549
  i0.ɵɵelementEnd();
543
550
  } }
544
- function MJAIAgentRunFormComponentExtended_Conditional_57_Conditional_107_Template(rf, ctx) { if (rf & 1) {
545
- i0.ɵɵelementStart(0, "mj-accordion-panel", 56);
546
- i0.ɵɵtemplate(1, MJAIAgentRunFormComponentExtended_Conditional_57_Conditional_107_ng_template_1_Template, 2, 0, "ng-template", 57);
547
- i0.ɵɵelementStart(2, "div", 75);
548
- i0.ɵɵconditionalCreate(3, MJAIAgentRunFormComponentExtended_Conditional_57_Conditional_107_Conditional_3_Template, 1, 9, "mj-deep-diff", 76)(4, MJAIAgentRunFormComponentExtended_Conditional_57_Conditional_107_Conditional_4_Template, 3, 0, "div", 70);
551
+ function MJAIAgentRunFormComponentExtended_Conditional_58_Conditional_107_Template(rf, ctx) { if (rf & 1) {
552
+ i0.ɵɵelementStart(0, "mj-accordion-panel", 58);
553
+ i0.ɵɵtemplate(1, MJAIAgentRunFormComponentExtended_Conditional_58_Conditional_107_ng_template_1_Template, 2, 0, "ng-template", 59);
554
+ i0.ɵɵelementStart(2, "div", 77);
555
+ i0.ɵɵconditionalCreate(3, MJAIAgentRunFormComponentExtended_Conditional_58_Conditional_107_Conditional_3_Template, 1, 9, "mj-deep-diff", 78)(4, MJAIAgentRunFormComponentExtended_Conditional_58_Conditional_107_Conditional_4_Template, 3, 0, "div", 72);
549
556
  i0.ɵɵelementEnd()();
550
557
  } if (rf & 2) {
551
558
  const ctx_r0 = i0.ɵɵnextContext(2);
@@ -553,125 +560,125 @@ function MJAIAgentRunFormComponentExtended_Conditional_57_Conditional_107_Templa
553
560
  i0.ɵɵadvance(3);
554
561
  i0.ɵɵconditional(ctx_r0.isParsingComplete ? 3 : 4);
555
562
  } }
556
- function MJAIAgentRunFormComponentExtended_Conditional_57_Template(rf, ctx) { if (rf & 1) {
563
+ function MJAIAgentRunFormComponentExtended_Conditional_58_Template(rf, ctx) { if (rf & 1) {
557
564
  const _r8 = i0.ɵɵgetCurrentView();
558
- i0.ɵɵelementStart(0, "div", 35)(1, "mj-accordion-panel", 56);
559
- i0.ɵɵtemplate(2, MJAIAgentRunFormComponentExtended_Conditional_57_ng_template_2_Template, 2, 0, "ng-template", 57);
560
- i0.ɵɵelementStart(3, "div", 58)(4, "div", 59)(5, "label");
565
+ i0.ɵɵelementStart(0, "div", 36)(1, "mj-accordion-panel", 58);
566
+ i0.ɵɵtemplate(2, MJAIAgentRunFormComponentExtended_Conditional_58_ng_template_2_Template, 2, 0, "ng-template", 59);
567
+ i0.ɵɵelementStart(3, "div", 60)(4, "div", 61)(5, "label");
561
568
  i0.ɵɵtext(6, "Agent");
562
569
  i0.ɵɵelementEnd();
563
- i0.ɵɵelementStart(7, "span")(8, "a", 36);
564
- i0.ɵɵlistener("click", function MJAIAgentRunFormComponentExtended_Conditional_57_Template_a_click_8_listener() { i0.ɵɵrestoreView(_r8); const ctx_r0 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r0.openEntityRecord("MJ: AI Agents", ctx_r0.record.AgentID)); });
570
+ i0.ɵɵelementStart(7, "span")(8, "a", 37);
571
+ i0.ɵɵlistener("click", function MJAIAgentRunFormComponentExtended_Conditional_58_Template_a_click_8_listener() { i0.ɵɵrestoreView(_r8); const ctx_r0 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r0.openEntityRecord("MJ: AI Agents", ctx_r0.record.AgentID)); });
565
572
  i0.ɵɵtext(9);
566
573
  i0.ɵɵelementEnd()()();
567
- i0.ɵɵelementStart(10, "div", 59)(11, "label");
574
+ i0.ɵɵelementStart(10, "div", 61)(11, "label");
568
575
  i0.ɵɵtext(12, "Parent Run ID");
569
576
  i0.ɵɵelementEnd();
570
577
  i0.ɵɵelementStart(13, "span");
571
- i0.ɵɵconditionalCreate(14, MJAIAgentRunFormComponentExtended_Conditional_57_Conditional_14_Template, 2, 1, "a", 60);
572
- i0.ɵɵconditionalCreate(15, MJAIAgentRunFormComponentExtended_Conditional_57_Conditional_15_Template, 2, 0, "span");
578
+ i0.ɵɵconditionalCreate(14, MJAIAgentRunFormComponentExtended_Conditional_58_Conditional_14_Template, 2, 1, "a", 62);
579
+ i0.ɵɵconditionalCreate(15, MJAIAgentRunFormComponentExtended_Conditional_58_Conditional_15_Template, 2, 0, "span");
573
580
  i0.ɵɵelementEnd()();
574
- i0.ɵɵelementStart(16, "div", 59)(17, "label");
581
+ i0.ɵɵelementStart(16, "div", 61)(17, "label");
575
582
  i0.ɵɵtext(18, "Last Run ID");
576
583
  i0.ɵɵelementEnd();
577
584
  i0.ɵɵelementStart(19, "span");
578
- i0.ɵɵconditionalCreate(20, MJAIAgentRunFormComponentExtended_Conditional_57_Conditional_20_Template, 2, 1, "a", 60);
579
- i0.ɵɵconditionalCreate(21, MJAIAgentRunFormComponentExtended_Conditional_57_Conditional_21_Template, 2, 0, "span");
585
+ i0.ɵɵconditionalCreate(20, MJAIAgentRunFormComponentExtended_Conditional_58_Conditional_20_Template, 2, 1, "a", 62);
586
+ i0.ɵɵconditionalCreate(21, MJAIAgentRunFormComponentExtended_Conditional_58_Conditional_21_Template, 2, 0, "span");
580
587
  i0.ɵɵelementEnd()();
581
- i0.ɵɵelementStart(22, "div", 59)(23, "label");
588
+ i0.ɵɵelementStart(22, "div", 61)(23, "label");
582
589
  i0.ɵɵtext(24, "Conversation ID");
583
590
  i0.ɵɵelementEnd();
584
591
  i0.ɵɵelementStart(25, "span");
585
- i0.ɵɵconditionalCreate(26, MJAIAgentRunFormComponentExtended_Conditional_57_Conditional_26_Template, 2, 1, "a", 60);
586
- i0.ɵɵconditionalCreate(27, MJAIAgentRunFormComponentExtended_Conditional_57_Conditional_27_Template, 2, 0, "span");
592
+ i0.ɵɵconditionalCreate(26, MJAIAgentRunFormComponentExtended_Conditional_58_Conditional_26_Template, 2, 1, "a", 62);
593
+ i0.ɵɵconditionalCreate(27, MJAIAgentRunFormComponentExtended_Conditional_58_Conditional_27_Template, 2, 0, "span");
587
594
  i0.ɵɵelementEnd()();
588
- i0.ɵɵelementStart(28, "div", 59)(29, "label");
595
+ i0.ɵɵelementStart(28, "div", 61)(29, "label");
589
596
  i0.ɵɵtext(30, "User");
590
597
  i0.ɵɵelementEnd();
591
598
  i0.ɵɵelementStart(31, "span");
592
- i0.ɵɵconditionalCreate(32, MJAIAgentRunFormComponentExtended_Conditional_57_Conditional_32_Template, 2, 1, "a", 60);
593
- i0.ɵɵconditionalCreate(33, MJAIAgentRunFormComponentExtended_Conditional_57_Conditional_33_Template, 2, 0, "span");
599
+ i0.ɵɵconditionalCreate(32, MJAIAgentRunFormComponentExtended_Conditional_58_Conditional_32_Template, 2, 1, "a", 62);
600
+ i0.ɵɵconditionalCreate(33, MJAIAgentRunFormComponentExtended_Conditional_58_Conditional_33_Template, 2, 0, "span");
594
601
  i0.ɵɵelementEnd()()()();
595
- i0.ɵɵelementStart(34, "mj-accordion-panel", 56);
596
- i0.ɵɵtemplate(35, MJAIAgentRunFormComponentExtended_Conditional_57_ng_template_35_Template, 2, 0, "ng-template", 57);
597
- i0.ɵɵelementStart(36, "div", 58)(37, "div", 59)(38, "label");
602
+ i0.ɵɵelementStart(34, "mj-accordion-panel", 58);
603
+ i0.ɵɵtemplate(35, MJAIAgentRunFormComponentExtended_Conditional_58_ng_template_35_Template, 2, 0, "ng-template", 59);
604
+ i0.ɵɵelementStart(36, "div", 60)(37, "div", 61)(38, "label");
598
605
  i0.ɵɵtext(39, "Override Model");
599
606
  i0.ɵɵelementEnd();
600
607
  i0.ɵɵelementStart(40, "span");
601
- i0.ɵɵconditionalCreate(41, MJAIAgentRunFormComponentExtended_Conditional_57_Conditional_41_Template, 2, 1, "a", 60);
602
- i0.ɵɵconditionalCreate(42, MJAIAgentRunFormComponentExtended_Conditional_57_Conditional_42_Template, 2, 0, "span");
608
+ i0.ɵɵconditionalCreate(41, MJAIAgentRunFormComponentExtended_Conditional_58_Conditional_41_Template, 2, 1, "a", 62);
609
+ i0.ɵɵconditionalCreate(42, MJAIAgentRunFormComponentExtended_Conditional_58_Conditional_42_Template, 2, 0, "span");
603
610
  i0.ɵɵelementEnd()();
604
- i0.ɵɵelementStart(43, "div", 59)(44, "label");
611
+ i0.ɵɵelementStart(43, "div", 61)(44, "label");
605
612
  i0.ɵɵtext(45, "Override Vendor");
606
613
  i0.ɵɵelementEnd();
607
614
  i0.ɵɵelementStart(46, "span");
608
- i0.ɵɵconditionalCreate(47, MJAIAgentRunFormComponentExtended_Conditional_57_Conditional_47_Template, 2, 1, "a", 60);
609
- i0.ɵɵconditionalCreate(48, MJAIAgentRunFormComponentExtended_Conditional_57_Conditional_48_Template, 2, 0, "span");
615
+ i0.ɵɵconditionalCreate(47, MJAIAgentRunFormComponentExtended_Conditional_58_Conditional_47_Template, 2, 1, "a", 62);
616
+ i0.ɵɵconditionalCreate(48, MJAIAgentRunFormComponentExtended_Conditional_58_Conditional_48_Template, 2, 0, "span");
610
617
  i0.ɵɵelementEnd()();
611
- i0.ɵɵelementStart(49, "div", 59)(50, "label");
618
+ i0.ɵɵelementStart(49, "div", 61)(50, "label");
612
619
  i0.ɵɵtext(51, "Verbose Logging");
613
620
  i0.ɵɵelementEnd();
614
621
  i0.ɵɵelementStart(52, "span");
615
622
  i0.ɵɵtext(53);
616
623
  i0.ɵɵelementEnd()()()();
617
- i0.ɵɵelementStart(54, "mj-accordion-panel", 56);
618
- i0.ɵɵtemplate(55, MJAIAgentRunFormComponentExtended_Conditional_57_ng_template_55_Template, 2, 0, "ng-template", 57);
619
- i0.ɵɵelementStart(56, "div", 58)(57, "div", 59)(58, "label");
624
+ i0.ɵɵelementStart(54, "mj-accordion-panel", 58);
625
+ i0.ɵɵtemplate(55, MJAIAgentRunFormComponentExtended_Conditional_58_ng_template_55_Template, 2, 0, "ng-template", 59);
626
+ i0.ɵɵelementStart(56, "div", 60)(57, "div", 61)(58, "label");
620
627
  i0.ɵɵtext(59, "Status");
621
628
  i0.ɵɵelementEnd();
622
629
  i0.ɵɵelementStart(60, "span", 18);
623
630
  i0.ɵɵtext(61);
624
631
  i0.ɵɵelementEnd()();
625
- i0.ɵɵelementStart(62, "div", 59)(63, "label");
632
+ i0.ɵɵelementStart(62, "div", 61)(63, "label");
626
633
  i0.ɵɵtext(64, "Success");
627
634
  i0.ɵɵelementEnd();
628
- i0.ɵɵconditionalCreate(65, MJAIAgentRunFormComponentExtended_Conditional_57_Conditional_65_Template, 2, 0, "span")(66, MJAIAgentRunFormComponentExtended_Conditional_57_Conditional_66_Template, 2, 0, "span", 61)(67, MJAIAgentRunFormComponentExtended_Conditional_57_Conditional_67_Template, 2, 0, "span", 62);
635
+ i0.ɵɵconditionalCreate(65, MJAIAgentRunFormComponentExtended_Conditional_58_Conditional_65_Template, 2, 0, "span")(66, MJAIAgentRunFormComponentExtended_Conditional_58_Conditional_66_Template, 2, 0, "span", 63)(67, MJAIAgentRunFormComponentExtended_Conditional_58_Conditional_67_Template, 2, 0, "span", 64);
629
636
  i0.ɵɵelementEnd();
630
- i0.ɵɵconditionalCreate(68, MJAIAgentRunFormComponentExtended_Conditional_57_Conditional_68_Template, 5, 1, "div", 63);
631
- i0.ɵɵconditionalCreate(69, MJAIAgentRunFormComponentExtended_Conditional_57_Conditional_69_Template, 5, 1, "div", 63);
637
+ i0.ɵɵconditionalCreate(68, MJAIAgentRunFormComponentExtended_Conditional_58_Conditional_68_Template, 5, 1, "div", 65);
638
+ i0.ɵɵconditionalCreate(69, MJAIAgentRunFormComponentExtended_Conditional_58_Conditional_69_Template, 5, 1, "div", 65);
632
639
  i0.ɵɵelementEnd()();
633
- i0.ɵɵelementStart(70, "mj-accordion-panel", 56);
634
- i0.ɵɵtemplate(71, MJAIAgentRunFormComponentExtended_Conditional_57_ng_template_71_Template, 2, 0, "ng-template", 57);
635
- i0.ɵɵelementStart(72, "div", 58)(73, "div", 59)(74, "label");
640
+ i0.ɵɵelementStart(70, "mj-accordion-panel", 58);
641
+ i0.ɵɵtemplate(71, MJAIAgentRunFormComponentExtended_Conditional_58_ng_template_71_Template, 2, 0, "ng-template", 59);
642
+ i0.ɵɵelementStart(72, "div", 60)(73, "div", 61)(74, "label");
636
643
  i0.ɵɵtext(75, "Total Tokens Used");
637
644
  i0.ɵɵelementEnd();
638
645
  i0.ɵɵelementStart(76, "span");
639
646
  i0.ɵɵtext(77);
640
647
  i0.ɵɵpipe(78, "number");
641
648
  i0.ɵɵelementEnd()();
642
- i0.ɵɵelementStart(79, "div", 59)(80, "label");
649
+ i0.ɵɵelementStart(79, "div", 61)(80, "label");
643
650
  i0.ɵɵtext(81, "Prompt Tokens");
644
651
  i0.ɵɵelementEnd();
645
652
  i0.ɵɵelementStart(82, "span");
646
653
  i0.ɵɵtext(83);
647
654
  i0.ɵɵpipe(84, "number");
648
655
  i0.ɵɵelementEnd()();
649
- i0.ɵɵelementStart(85, "div", 59)(86, "label");
656
+ i0.ɵɵelementStart(85, "div", 61)(86, "label");
650
657
  i0.ɵɵtext(87, "Completion Tokens");
651
658
  i0.ɵɵelementEnd();
652
659
  i0.ɵɵelementStart(88, "span");
653
660
  i0.ɵɵtext(89);
654
661
  i0.ɵɵpipe(90, "number");
655
662
  i0.ɵɵelementEnd()();
656
- i0.ɵɵelementStart(91, "div", 59)(92, "label");
663
+ i0.ɵɵelementStart(91, "div", 61)(92, "label");
657
664
  i0.ɵɵtext(93, "Total Cost");
658
665
  i0.ɵɵelementEnd();
659
666
  i0.ɵɵelementStart(94, "span");
660
667
  i0.ɵɵtext(95);
661
668
  i0.ɵɵpipe(96, "number");
662
669
  i0.ɵɵelementEnd()();
663
- i0.ɵɵelementStart(97, "div", 59)(98, "label");
670
+ i0.ɵɵelementStart(97, "div", 61)(98, "label");
664
671
  i0.ɵɵtext(99, "Total Prompt Iterations");
665
672
  i0.ɵɵelementEnd();
666
673
  i0.ɵɵelementStart(100, "span");
667
674
  i0.ɵɵtext(101);
668
675
  i0.ɵɵpipe(102, "number");
669
676
  i0.ɵɵelementEnd()()()();
670
- i0.ɵɵconditionalCreate(103, MJAIAgentRunFormComponentExtended_Conditional_57_Conditional_103_Template, 5, 2, "mj-accordion-panel", 56);
671
- i0.ɵɵconditionalCreate(104, MJAIAgentRunFormComponentExtended_Conditional_57_Conditional_104_Template, 5, 2, "mj-accordion-panel", 56);
672
- i0.ɵɵconditionalCreate(105, MJAIAgentRunFormComponentExtended_Conditional_57_Conditional_105_Template, 5, 2, "mj-accordion-panel", 56);
673
- i0.ɵɵconditionalCreate(106, MJAIAgentRunFormComponentExtended_Conditional_57_Conditional_106_Template, 5, 2, "mj-accordion-panel", 56);
674
- i0.ɵɵconditionalCreate(107, MJAIAgentRunFormComponentExtended_Conditional_57_Conditional_107_Template, 5, 2, "mj-accordion-panel", 56);
677
+ i0.ɵɵconditionalCreate(103, MJAIAgentRunFormComponentExtended_Conditional_58_Conditional_103_Template, 5, 2, "mj-accordion-panel", 58);
678
+ i0.ɵɵconditionalCreate(104, MJAIAgentRunFormComponentExtended_Conditional_58_Conditional_104_Template, 5, 2, "mj-accordion-panel", 58);
679
+ i0.ɵɵconditionalCreate(105, MJAIAgentRunFormComponentExtended_Conditional_58_Conditional_105_Template, 5, 2, "mj-accordion-panel", 58);
680
+ i0.ɵɵconditionalCreate(106, MJAIAgentRunFormComponentExtended_Conditional_58_Conditional_106_Template, 5, 2, "mj-accordion-panel", 58);
681
+ i0.ɵɵconditionalCreate(107, MJAIAgentRunFormComponentExtended_Conditional_58_Conditional_107_Template, 5, 2, "mj-accordion-panel", 58);
675
682
  i0.ɵɵelementEnd();
676
683
  } if (rf & 2) {
677
684
  const ctx_r0 = i0.ɵɵnextContext();
@@ -742,6 +749,19 @@ function MJAIAgentRunFormComponentExtended_Conditional_57_Template(rf, ctx) { if
742
749
  i0.ɵɵadvance();
743
750
  i0.ɵɵconditional(ctx_r0.showPayloadDiff ? 107 : -1);
744
751
  } }
752
+ /**
753
+ * Task statuses that mean the step is finished with. Anything else means the workflow is still
754
+ * moving — see `WorkflowStillRunning`.
755
+ */
756
+ const TERMINAL_TASK_STATUSES = new Set(['Complete', 'Failed', 'Cancelled', 'Skipped', 'Blocked']);
757
+ /**
758
+ * How often to re-read the tree while a detached workflow runs.
759
+ *
760
+ * Human-scale rather than aggressive: a workflow step takes seconds at least, and the query walks
761
+ * the whole tree. Fast enough that a watcher sees progress, slow enough that leaving the tab open on
762
+ * a long workflow is not a load problem.
763
+ */
764
+ const WORKFLOW_POLL_INTERVAL_MS = 4000;
745
765
  let MJAIAgentRunFormComponentExtended = class MJAIAgentRunFormComponentExtended extends MJAIAgentRunFormComponent {
746
766
  constructor() {
747
767
  super(...arguments);
@@ -752,6 +772,8 @@ let MJAIAgentRunFormComponentExtended = class MJAIAgentRunFormComponentExtended
752
772
  // polling the DB on a timer. Only attached when Status === 'Running'.
753
773
  this.entityEventSubscription = null;
754
774
  this.refreshInFlight = false;
775
+ /** Pending re-read of the run tree while a detached workflow is still running. */
776
+ this.workflowPollTimer = null;
755
777
  // UI state
756
778
  this.activeTab = 'timeline';
757
779
  this.selectedTimelineItem = null;
@@ -776,11 +798,103 @@ let MJAIAgentRunFormComponentExtended = class MJAIAgentRunFormComponentExtended
776
798
  this.appManager = inject(ApplicationManager);
777
799
  // Instance of data helper per component
778
800
  this.dataHelper = new AIAgentRunDataHelper();
801
+ /**
802
+ * The run's complete execution tree — loaded ONCE here and shared with every tab.
803
+ *
804
+ * **One load, one shape, one refresh.** The timeline, the three flow renderers and analytics all
805
+ * need the same structure; letting each fetch its own would issue the same recursive query three
806
+ * times, and — worse — let the tabs disagree, because a tab that loaded a second earlier shows a
807
+ * different run than the one beside it. Sharing it also means a refresh updates all three at once
808
+ * rather than whichever one the user happens to open next.
809
+ */
810
+ this.runTree = null;
811
+ /** True while the tree is loading, so a tab can say so rather than render an empty run. */
812
+ this.runTreeLoading = false;
813
+ /** Why the tree could not be loaded, or null. Surfaced rather than swallowed. */
814
+ this.runTreeError = null;
815
+ }
816
+ /**
817
+ * Loads (or reloads) the shared run tree.
818
+ *
819
+ * Errors are held rather than thrown: a run whose tree cannot be read still has fields worth
820
+ * looking at, and taking the whole form down over one query would hide them.
821
+ */
822
+ async loadRunTree() {
823
+ if (!this.record?.ID)
824
+ return;
825
+ this.runTreeLoading = true;
826
+ this.runTreeError = null;
827
+ try {
828
+ const result = await LoadAgentRunTree(this.record.ID, this.RunQueryToUse);
829
+ this.runTree = result.Root;
830
+ this.runTreeError = result.ErrorMessage;
831
+ if (result.Truncated) {
832
+ this.runTreeError =
833
+ `This run nests deeper than ${MAX_AGENT_RUN_TREE_DEPTH} levels; what is shown is truncated.`;
834
+ }
835
+ }
836
+ catch (e) {
837
+ this.runTreeError = e instanceof Error ? e.message : String(e);
838
+ this.runTree = null;
839
+ }
840
+ finally {
841
+ this.runTreeLoading = false;
842
+ this.scheduleWorkflowPoll();
843
+ }
844
+ }
845
+ /**
846
+ * True when this run submitted a workflow that has not finished.
847
+ *
848
+ * **The run being "Completed" says nothing about this.** A task graph is submit-and-detach: the
849
+ * step that submits it completes as soon as the graph is persisted, and the run completes with it
850
+ * — while the dispatcher goes on executing for seconds or minutes afterwards. One observed run
851
+ * finished in 225ms and its workflow ran for a further eighteen seconds.
852
+ *
853
+ * Without this the form showed a green COMPLETED header above steps sitting at Pending, and the
854
+ * only available reading was that something had failed. Nothing had; the page was simply a
855
+ * snapshot of a moving thing, with nothing saying so.
856
+ */
857
+ get WorkflowStillRunning() {
858
+ if (!this.runTree)
859
+ return false;
860
+ for (const node of WalkAgentRunTree(this.runTree)) {
861
+ if (node.NodeType !== 'Task' && node.NodeType !== 'TaskGraph')
862
+ continue;
863
+ if (!TERMINAL_TASK_STATUSES.has(node.Status))
864
+ return true;
865
+ }
866
+ return false;
867
+ }
868
+ /**
869
+ * Re-reads the tree while a detached workflow is still moving, and stops when it settles.
870
+ *
871
+ * Polling rather than the BaseEntity event subscription this form already has, because that
872
+ * subscription cannot see this work for two independent reasons: it is only attached while the RUN
873
+ * is `Running` (a detached graph outlives that), and the dispatcher advances tasks through the
874
+ * claim protocol's direct SQL, which fires no entity events at all.
875
+ *
876
+ * Self-cancelling: each load reschedules only if work remains, so a settled run costs nothing.
877
+ */
878
+ scheduleWorkflowPoll() {
879
+ this.clearWorkflowPoll();
880
+ if (!this.WorkflowStillRunning)
881
+ return;
882
+ this.workflowPollTimer = setTimeout(() => {
883
+ this.workflowPollTimer = null;
884
+ void this.loadRunTree();
885
+ }, WORKFLOW_POLL_INTERVAL_MS);
886
+ }
887
+ clearWorkflowPoll() {
888
+ if (this.workflowPollTimer !== null) {
889
+ clearTimeout(this.workflowPollTimer);
890
+ this.workflowPollTimer = null;
891
+ }
779
892
  }
780
893
  async ngOnInit() {
781
894
  await super.ngOnInit();
782
895
  if (this.record && this.record.ID) {
783
896
  await this.dataHelper.loadAgentRunData(this.record.ID);
897
+ await this.loadRunTree();
784
898
  await this.loadAgent();
785
899
  await this.loadCostMetrics();
786
900
  // Parse all JSON fields on form load for instant access later
@@ -797,6 +911,7 @@ let MJAIAgentRunFormComponentExtended = class MJAIAgentRunFormComponentExtended
797
911
  ngOnDestroy() {
798
912
  this.destroy$.next();
799
913
  this.destroy$.complete();
914
+ this.clearWorkflowPoll();
800
915
  this.entityEventSubscription?.unsubscribe();
801
916
  this.entityEventSubscription = null;
802
917
  this.clearParsedCache();
@@ -1054,6 +1169,7 @@ let MJAIAgentRunFormComponentExtended = class MJAIAgentRunFormComponentExtended
1054
1169
  this.loadCostMetrics();
1055
1170
  // Reload data through helper - this will update all components (force reload for refresh)
1056
1171
  this.dataHelper.loadAgentRunData(this.record.ID, true);
1172
+ void this.loadRunTree();
1057
1173
  // Trigger analytics refresh
1058
1174
  if (this.analyticsComponent) {
1059
1175
  this.analyticsComponent.loadData();
@@ -1432,7 +1548,7 @@ let MJAIAgentRunFormComponentExtended = class MJAIAgentRunFormComponentExtended
1432
1548
  let _t;
1433
1549
  i0.ɵɵqueryRefresh(_t = i0.ɵɵloadQuery()) && (ctx.timelineComponent = _t.first);
1434
1550
  i0.ɵɵqueryRefresh(_t = i0.ɵɵloadQuery()) && (ctx.analyticsComponent = _t.first);
1435
- } }, standalone: false, features: [i0.ɵɵInheritDefinitionFeature], decls: 58, vars: 34, consts: [["analyticsComponent", ""], [1, "record-form-container", "ai-agent-run-form"], [1, "record-form"], [1, "header"], [1, "header-content"], [1, "header-left"], [1, "icon-wrapper"], [1, "agent-logo", 3, "src", "alt"], [1, "fas", 3, "ngClass"], [1, "fas", "fa-robot"], [1, "header-info"], [1, "meta-info"], [1, "agent-name"], [1, "run-id"], [1, "parent-run"], ["title", "Open conversation in Chat app", 1, "conversation-pill"], [1, "header-right"], ["title", "This run executed in Plan Mode \u2014 the agent presented a plan for human approval before executing actions or sub-agents", 1, "plan-mode-badge"], [1, "status-badge"], [1, "header-actions"], ["title", "Refresh", 1, "btn-icon", 3, "click"], [1, "fas", "fa-sync-alt"], [1, "header-stats"], [1, "stat"], [1, "label"], [1, "value"], [1, "configuration-bar"], [1, "tabs"], [1, "tab", 3, "click"], [1, "fas", "fa-stream"], [1, "fas", "fa-diagram-project"], [1, "fas", "fa-chart-line"], [1, "fas", "fa-info-circle"], [1, "content-area"], [1, "tab-content", 2, "height", "100%"], [1, "tab-content"], ["href", "javascript:void(0)", 1, "entity-link", 3, "click"], [1, "fas", "fa-level-up-alt"], [1, "parent-link", 3, "click"], ["title", "Open conversation in Chat app", 1, "conversation-pill", 3, "click"], [1, "fas", "fa-comments"], [1, "fas", "fa-external-link-alt", "pill-action"], [1, "fas", "fa-clipboard-check"], [1, "value", "loading"], [1, "fas", "fa-spinner", "fa-spin"], [1, "config-item"], [1, "fas", "fa-cog"], [1, "config-content"], [1, "config-label"], [1, "config-value"], ["direction", "horizontal", 2, "height", "100%"], [3, "size"], [3, "itemSelected", "navigateToEntity", "aiAgentRunId", "dataHelper"], [3, "closePanel", "navigateToActionLog", "copyToClipboard", "selectedTimelineItem"], [3, "aiAgentRunId", "dataHelper", "agentName", "runStatus", "agentIconClass", "agentLogoUrl"], [3, "agentRunId"], [3, "Expanded"], ["mjAccordionTitle", ""], [1, "details-grid"], [1, "detail-item"], ["href", "javascript:void(0)", 1, "entity-link"], [1, "success"], [1, "error-message"], [1, "detail-item", "full-width"], [1, "fas", "fa-cogs"], [1, "fas", "fa-tasks"], [1, "message"], [1, "fas", "fa-dollar-sign"], [1, "result-viewer"], [2, "height", "300px", "width", "100%", 3, "ngModel", "language", "readonly"], [2, "padding", "20px", "text-align", "center", "color", "var(--mj-text-muted)"], [1, "fas", "fa-code"], [1, "fas", "fa-upload"], [1, "fas", "fa-database"], [1, "fas", "fa-download"], [2, "padding", "20px", "background", "var(--mj-bg-surface-card)"], [3, "oldValue", "newValue", "title", "showSummary", "showUnchanged", "expandAll", "maxDepth", "maxStringLength", "treatNullAsUndefined"], [1, "fas", "fa-code-compare"]], template: function MJAIAgentRunFormComponentExtended_Template(rf, ctx) { if (rf & 1) {
1551
+ } }, standalone: false, features: [i0.ɵɵInheritDefinitionFeature], decls: 59, vars: 35, consts: [["analyticsComponent", ""], [1, "record-form-container", "ai-agent-run-form"], [1, "record-form"], [1, "header"], [1, "header-content"], [1, "header-left"], [1, "icon-wrapper"], [1, "agent-logo", 3, "src", "alt"], [1, "fas", 3, "ngClass"], [1, "fas", "fa-robot"], [1, "header-info"], [1, "meta-info"], [1, "agent-name"], [1, "run-id"], [1, "parent-run"], ["title", "Open conversation in Chat app", 1, "conversation-pill"], [1, "header-right"], ["title", "This run executed in Plan Mode \u2014 the agent presented a plan for human approval before executing actions or sub-agents", 1, "plan-mode-badge"], [1, "status-badge"], ["title", "This run submitted a workflow that runs on the dispatcher. The run finished when the workflow was submitted; the workflow itself is still going. This view refreshes on its own.", 1, "workflow-running-badge"], [1, "header-actions"], ["title", "Refresh", 1, "btn-icon", 3, "click"], [1, "fas", "fa-sync-alt"], [1, "header-stats"], [1, "stat"], [1, "label"], [1, "value"], [1, "configuration-bar"], [1, "tabs"], [1, "tab", 3, "click"], [1, "fas", "fa-stream"], [1, "fas", "fa-diagram-project"], [1, "fas", "fa-chart-line"], [1, "fas", "fa-info-circle"], [1, "content-area"], [1, "tab-content", 2, "height", "100%"], [1, "tab-content"], ["href", "javascript:void(0)", 1, "entity-link", 3, "click"], [1, "fas", "fa-level-up-alt"], [1, "parent-link", 3, "click"], ["title", "Open conversation in Chat app", 1, "conversation-pill", 3, "click"], [1, "fas", "fa-comments"], [1, "fas", "fa-external-link-alt", "pill-action"], [1, "fas", "fa-clipboard-check"], [1, "fas", "fa-circle-notch", "fa-spin"], [1, "value", "loading"], [1, "fas", "fa-spinner", "fa-spin"], [1, "config-item"], [1, "fas", "fa-cog"], [1, "config-content"], [1, "config-label"], [1, "config-value"], ["direction", "horizontal", 2, "height", "100%"], [3, "size"], [3, "itemSelected", "navigateToEntity", "aiAgentRunId", "dataHelper", "RunTree"], [3, "closePanel", "navigateToActionLog", "copyToClipboard", "selectedTimelineItem"], [3, "aiAgentRunId", "dataHelper", "agentName", "runStatus", "agentIconClass", "agentLogoUrl", "RunTree"], [3, "agentRunId", "RunTree"], [3, "Expanded"], ["mjAccordionTitle", ""], [1, "details-grid"], [1, "detail-item"], ["href", "javascript:void(0)", 1, "entity-link"], [1, "success"], [1, "error-message"], [1, "detail-item", "full-width"], [1, "fas", "fa-cogs"], [1, "fas", "fa-tasks"], [1, "message"], [1, "fas", "fa-dollar-sign"], [1, "result-viewer"], [2, "height", "300px", "width", "100%", 3, "ngModel", "language", "readonly"], [2, "padding", "20px", "text-align", "center", "color", "var(--mj-text-muted)"], [1, "fas", "fa-code"], [1, "fas", "fa-upload"], [1, "fas", "fa-database"], [1, "fas", "fa-download"], [2, "padding", "20px", "background", "var(--mj-bg-surface-card)"], [3, "oldValue", "newValue", "title", "showSummary", "showUnchanged", "expandAll", "maxDepth", "maxStringLength", "treatNullAsUndefined"], [1, "fas", "fa-code-compare"]], template: function MJAIAgentRunFormComponentExtended_Template(rf, ctx) { if (rf & 1) {
1436
1552
  i0.ɵɵelementStart(0, "div", 1)(1, "div", 2)(2, "div", 3)(3, "div", 4)(4, "div", 5)(5, "div", 6);
1437
1553
  i0.ɵɵconditionalCreate(6, MJAIAgentRunFormComponentExtended_Conditional_6_Template, 1, 2, "img", 7);
1438
1554
  i0.ɵɵconditionalCreate(7, MJAIAgentRunFormComponentExtended_Conditional_7_Template, 1, 1, "i", 8);
@@ -1455,51 +1571,52 @@ let MJAIAgentRunFormComponentExtended = class MJAIAgentRunFormComponentExtended
1455
1571
  i0.ɵɵelement(21, "i", 8);
1456
1572
  i0.ɵɵtext(22);
1457
1573
  i0.ɵɵelementEnd();
1458
- i0.ɵɵelementStart(23, "div", 19)(24, "button", 20);
1459
- i0.ɵɵlistener("click", function MJAIAgentRunFormComponentExtended_Template_button_click_24_listener() { return ctx.refreshData(); });
1460
- i0.ɵɵelement(25, "i", 21);
1574
+ i0.ɵɵconditionalCreate(23, MJAIAgentRunFormComponentExtended_Conditional_23_Template, 3, 0, "div", 19);
1575
+ i0.ɵɵelementStart(24, "div", 20)(25, "button", 21);
1576
+ i0.ɵɵlistener("click", function MJAIAgentRunFormComponentExtended_Template_button_click_25_listener() { return ctx.refreshData(); });
1577
+ i0.ɵɵelement(26, "i", 22);
1461
1578
  i0.ɵɵelementEnd()()()();
1462
- i0.ɵɵelementStart(26, "div", 22)(27, "div", 23)(28, "span", 24);
1463
- i0.ɵɵtext(29, "Started");
1579
+ i0.ɵɵelementStart(27, "div", 23)(28, "div", 24)(29, "span", 25);
1580
+ i0.ɵɵtext(30, "Started");
1464
1581
  i0.ɵɵelementEnd();
1465
- i0.ɵɵelementStart(30, "span", 25);
1466
- i0.ɵɵtext(31);
1467
- i0.ɵɵpipe(32, "date");
1582
+ i0.ɵɵelementStart(31, "span", 26);
1583
+ i0.ɵɵtext(32);
1584
+ i0.ɵɵpipe(33, "date");
1468
1585
  i0.ɵɵelementEnd()();
1469
- i0.ɵɵconditionalCreate(33, MJAIAgentRunFormComponentExtended_Conditional_33_Template, 6, 4, "div", 23);
1470
- i0.ɵɵconditionalCreate(34, MJAIAgentRunFormComponentExtended_Conditional_34_Template, 5, 1, "div", 23);
1471
- i0.ɵɵconditionalCreate(35, MJAIAgentRunFormComponentExtended_Conditional_35_Template, 5, 5, "div", 23);
1472
- i0.ɵɵconditionalCreate(36, MJAIAgentRunFormComponentExtended_Conditional_36_Template, 5, 2, "div", 23);
1473
- i0.ɵɵconditionalCreate(37, MJAIAgentRunFormComponentExtended_Conditional_37_Template, 5, 2, "div", 23);
1474
- i0.ɵɵconditionalCreate(38, MJAIAgentRunFormComponentExtended_Conditional_38_Template, 5, 1, "div", 23);
1586
+ i0.ɵɵconditionalCreate(34, MJAIAgentRunFormComponentExtended_Conditional_34_Template, 6, 4, "div", 24);
1587
+ i0.ɵɵconditionalCreate(35, MJAIAgentRunFormComponentExtended_Conditional_35_Template, 5, 1, "div", 24);
1588
+ i0.ɵɵconditionalCreate(36, MJAIAgentRunFormComponentExtended_Conditional_36_Template, 5, 5, "div", 24);
1589
+ i0.ɵɵconditionalCreate(37, MJAIAgentRunFormComponentExtended_Conditional_37_Template, 5, 2, "div", 24);
1590
+ i0.ɵɵconditionalCreate(38, MJAIAgentRunFormComponentExtended_Conditional_38_Template, 5, 2, "div", 24);
1591
+ i0.ɵɵconditionalCreate(39, MJAIAgentRunFormComponentExtended_Conditional_39_Template, 5, 1, "div", 24);
1475
1592
  i0.ɵɵelementEnd();
1476
- i0.ɵɵconditionalCreate(39, MJAIAgentRunFormComponentExtended_Conditional_39_Template, 9, 1, "div", 26);
1593
+ i0.ɵɵconditionalCreate(40, MJAIAgentRunFormComponentExtended_Conditional_40_Template, 9, 1, "div", 27);
1477
1594
  i0.ɵɵelementEnd();
1478
- i0.ɵɵelementStart(40, "div", 27)(41, "button", 28);
1479
- i0.ɵɵlistener("click", function MJAIAgentRunFormComponentExtended_Template_button_click_41_listener() { return ctx.changeTab("timeline"); });
1480
- i0.ɵɵelement(42, "i", 29);
1481
- i0.ɵɵtext(43, " Timeline ");
1595
+ i0.ɵɵelementStart(41, "div", 28)(42, "button", 29);
1596
+ i0.ɵɵlistener("click", function MJAIAgentRunFormComponentExtended_Template_button_click_42_listener() { return ctx.changeTab("timeline"); });
1597
+ i0.ɵɵelement(43, "i", 30);
1598
+ i0.ɵɵtext(44, " Timeline ");
1482
1599
  i0.ɵɵelementEnd();
1483
- i0.ɵɵelementStart(44, "button", 28);
1484
- i0.ɵɵlistener("click", function MJAIAgentRunFormComponentExtended_Template_button_click_44_listener() { return ctx.changeTab("visualization"); });
1485
- i0.ɵɵelement(45, "i", 30);
1486
- i0.ɵɵtext(46, " Visualization ");
1600
+ i0.ɵɵelementStart(45, "button", 29);
1601
+ i0.ɵɵlistener("click", function MJAIAgentRunFormComponentExtended_Template_button_click_45_listener() { return ctx.changeTab("visualization"); });
1602
+ i0.ɵɵelement(46, "i", 31);
1603
+ i0.ɵɵtext(47, " Visualization ");
1487
1604
  i0.ɵɵelementEnd();
1488
- i0.ɵɵelementStart(47, "button", 28);
1489
- i0.ɵɵlistener("click", function MJAIAgentRunFormComponentExtended_Template_button_click_47_listener() { return ctx.changeTab("analytics"); });
1490
- i0.ɵɵelement(48, "i", 31);
1491
- i0.ɵɵtext(49, " Analytics ");
1605
+ i0.ɵɵelementStart(48, "button", 29);
1606
+ i0.ɵɵlistener("click", function MJAIAgentRunFormComponentExtended_Template_button_click_48_listener() { return ctx.changeTab("analytics"); });
1607
+ i0.ɵɵelement(49, "i", 32);
1608
+ i0.ɵɵtext(50, " Analytics ");
1492
1609
  i0.ɵɵelementEnd();
1493
- i0.ɵɵelementStart(50, "button", 28);
1494
- i0.ɵɵlistener("click", function MJAIAgentRunFormComponentExtended_Template_button_click_50_listener() { return ctx.changeTab("details"); });
1495
- i0.ɵɵelement(51, "i", 32);
1496
- i0.ɵɵtext(52, " Details ");
1610
+ i0.ɵɵelementStart(51, "button", 29);
1611
+ i0.ɵɵlistener("click", function MJAIAgentRunFormComponentExtended_Template_button_click_51_listener() { return ctx.changeTab("details"); });
1612
+ i0.ɵɵelement(52, "i", 33);
1613
+ i0.ɵɵtext(53, " Details ");
1497
1614
  i0.ɵɵelementEnd()();
1498
- i0.ɵɵelementStart(53, "div", 33);
1499
- i0.ɵɵconditionalCreate(54, MJAIAgentRunFormComponentExtended_Conditional_54_Template, 5, 4, "div", 34);
1500
- i0.ɵɵconditionalCreate(55, MJAIAgentRunFormComponentExtended_Conditional_55_Template, 2, 1, "div", 34);
1501
- i0.ɵɵconditionalCreate(56, MJAIAgentRunFormComponentExtended_Conditional_56_Template, 2, 1, "div", 34);
1502
- i0.ɵɵconditionalCreate(57, MJAIAgentRunFormComponentExtended_Conditional_57_Template, 108, 48, "div", 35);
1615
+ i0.ɵɵelementStart(54, "div", 34);
1616
+ i0.ɵɵconditionalCreate(55, MJAIAgentRunFormComponentExtended_Conditional_55_Template, 5, 5, "div", 35);
1617
+ i0.ɵɵconditionalCreate(56, MJAIAgentRunFormComponentExtended_Conditional_56_Template, 2, 1, "div", 35);
1618
+ i0.ɵɵconditionalCreate(57, MJAIAgentRunFormComponentExtended_Conditional_57_Template, 2, 1, "div", 35);
1619
+ i0.ɵɵconditionalCreate(58, MJAIAgentRunFormComponentExtended_Conditional_58_Template, 108, 48, "div", 36);
1503
1620
  i0.ɵɵelementEnd()()();
1504
1621
  } if (rf & 2) {
1505
1622
  i0.ɵɵadvance(6);
@@ -1524,22 +1641,24 @@ let MJAIAgentRunFormComponentExtended = class MJAIAgentRunFormComponentExtended
1524
1641
  i0.ɵɵproperty("ngClass", ctx.getStatusIcon(ctx.record.Status || ""));
1525
1642
  i0.ɵɵadvance();
1526
1643
  i0.ɵɵtextInterpolate1(" ", ctx.record.Status, " ");
1644
+ i0.ɵɵadvance();
1645
+ i0.ɵɵconditional(ctx.WorkflowStillRunning ? 23 : -1);
1527
1646
  i0.ɵɵadvance(9);
1528
- i0.ɵɵtextInterpolate(i0.ɵɵpipeBind2(32, 31, ctx.record.StartedAt, "medium"));
1647
+ i0.ɵɵtextInterpolate(i0.ɵɵpipeBind2(33, 32, ctx.record.StartedAt, "medium"));
1529
1648
  i0.ɵɵadvance(2);
1530
- i0.ɵɵconditional(ctx.record.CompletedAt ? 33 : -1);
1531
- i0.ɵɵadvance();
1532
1649
  i0.ɵɵconditional(ctx.record.CompletedAt ? 34 : -1);
1533
1650
  i0.ɵɵadvance();
1534
- i0.ɵɵconditional(ctx.record.Success !== null && ctx.record.CompletedAt !== null ? 35 : -1);
1651
+ i0.ɵɵconditional(ctx.record.CompletedAt ? 35 : -1);
1652
+ i0.ɵɵadvance();
1653
+ i0.ɵɵconditional(ctx.record.Success !== null && ctx.record.CompletedAt !== null ? 36 : -1);
1535
1654
  i0.ɵɵadvance();
1536
- i0.ɵɵconditional(ctx.costMetrics && ctx.costMetrics.totalTokensInput + ctx.costMetrics.totalTokensOutput > 0 ? 36 : -1);
1655
+ i0.ɵɵconditional(ctx.costMetrics && ctx.costMetrics.totalTokensInput + ctx.costMetrics.totalTokensOutput > 0 ? 37 : -1);
1537
1656
  i0.ɵɵadvance();
1538
- i0.ɵɵconditional(ctx.costMetrics && ctx.costMetrics.totalCost > 0 ? 37 : -1);
1657
+ i0.ɵɵconditional(ctx.costMetrics && ctx.costMetrics.totalCost > 0 ? 38 : -1);
1539
1658
  i0.ɵɵadvance();
1540
- i0.ɵɵconditional(ctx.record.EffortLevel ? 38 : -1);
1659
+ i0.ɵɵconditional(ctx.record.EffortLevel ? 39 : -1);
1541
1660
  i0.ɵɵadvance();
1542
- i0.ɵɵconditional(ctx.record.ConfigurationID ? 39 : -1);
1661
+ i0.ɵɵconditional(ctx.record.ConfigurationID ? 40 : -1);
1543
1662
  i0.ɵɵadvance(2);
1544
1663
  i0.ɵɵclassProp("active", ctx.activeTab === "timeline");
1545
1664
  i0.ɵɵadvance(3);
@@ -1549,14 +1668,14 @@ let MJAIAgentRunFormComponentExtended = class MJAIAgentRunFormComponentExtended
1549
1668
  i0.ɵɵadvance(3);
1550
1669
  i0.ɵɵclassProp("active", ctx.activeTab === "details");
1551
1670
  i0.ɵɵadvance(4);
1552
- i0.ɵɵconditional(ctx.activeTab === "timeline" ? 54 : -1);
1671
+ i0.ɵɵconditional(ctx.activeTab === "timeline" ? 55 : -1);
1553
1672
  i0.ɵɵadvance();
1554
- i0.ɵɵconditional(ctx.activeTab === "visualization" ? 55 : -1);
1673
+ i0.ɵɵconditional(ctx.activeTab === "visualization" ? 56 : -1);
1555
1674
  i0.ɵɵadvance();
1556
- i0.ɵɵconditional(ctx.activeTab === "analytics" ? 56 : -1);
1675
+ i0.ɵɵconditional(ctx.activeTab === "analytics" ? 57 : -1);
1557
1676
  i0.ɵɵadvance();
1558
- i0.ɵɵconditional(ctx.activeTab === "details" ? 57 : -1);
1559
- } }, dependencies: [i1.NgClass, i2.NgControlStatus, i2.NgModel, i3.MJAccordionPanelComponent, i3.MJAccordionTitleDirective, i4.CodeEditorComponent, i5.DeepDiffComponent, i6.SplitComponent, i6.SplitAreaComponent, i7.AIAgentRunTimelineComponent, i8.AIAgentRunAnalyticsComponent, i9.AIAgentRunStepDetailComponent, i10.AIAgentRunFlowComponent, i1.DecimalPipe, i1.DatePipe], styles: [".ai-agent-run-form[_ngcontent-%COMP%] {\n height: 100%;\n display: flex;\n flex-direction: column;\n overflow: hidden;\n}\n\n.record-form-container.ai-agent-run-form[_ngcontent-%COMP%] > .record-form[_ngcontent-%COMP%], \n.ai-agent-run-form[_ngcontent-%COMP%] > .record-form[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n height: 100%;\n min-height: 0;\n}\n\n\n\n.header[_ngcontent-%COMP%] {\n background: var(--mj-bg-surface);\n border-bottom: 1px solid var(--mj-border-default);\n padding: 20px;\n box-shadow: var(--mj-shadow-sm);\n flex-shrink: 0;\n}\n\n.header-content[_ngcontent-%COMP%] {\n display: flex;\n justify-content: space-between;\n align-items: flex-start;\n margin-bottom: 16px;\n}\n\n.header-left[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 16px;\n}\n\n.icon-wrapper[_ngcontent-%COMP%] {\n width: 48px;\n height: 48px;\n background: var(--mj-brand-primary);\n border-radius: 12px;\n display: flex;\n align-items: center;\n justify-content: center;\n color: var(--mj-text-inverse);\n font-size: 20px;\n overflow: hidden;\n}\n\n.agent-logo[_ngcontent-%COMP%] {\n width: 100%;\n height: 100%;\n object-fit: cover;\n}\n\n.header-info[_ngcontent-%COMP%] h2[_ngcontent-%COMP%] {\n margin: 0;\n font-size: 24px;\n font-weight: 600;\n color: var(--mj-text-primary);\n}\n\n.meta-info[_ngcontent-%COMP%] {\n display: flex;\n gap: 12px;\n margin-top: 4px;\n font-size: 14px;\n color: var(--mj-text-muted);\n}\n\n.parent-run[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 6px;\n}\n\n.parent-link[_ngcontent-%COMP%] {\n color: var(--mj-status-error);\n text-decoration: none;\n cursor: pointer;\n transition: color 0.2s;\n}\n\n.parent-link[_ngcontent-%COMP%]:hover {\n color: var(--mj-status-error);\n text-decoration: underline;\n}\n\n.agent-name[_ngcontent-%COMP%] {\n font-weight: 500;\n color: var(--mj-text-secondary);\n}\n\n.run-id[_ngcontent-%COMP%] {\n font-family: monospace;\n font-size: 12px;\n opacity: 0.7;\n}\n\n\n\n.conversation-pill[_ngcontent-%COMP%] {\n display: inline-flex;\n align-items: center;\n gap: 6px;\n padding: 4px 10px;\n background: color-mix(in srgb, var(--mj-brand-primary) 8%, var(--mj-bg-surface));\n border: 1px solid color-mix(in srgb, var(--mj-brand-primary) 20%, transparent);\n border-radius: 16px;\n font-size: 12px;\n font-weight: 500;\n color: var(--mj-brand-primary);\n cursor: pointer;\n transition: all 0.2s ease;\n white-space: nowrap;\n}\n\n.conversation-pill[_ngcontent-%COMP%]:hover {\n background: color-mix(in srgb, var(--mj-brand-primary) 15%, var(--mj-bg-surface));\n border-color: color-mix(in srgb, var(--mj-brand-primary) 40%, transparent);\n transform: translateY(-1px);\n box-shadow: 0 2px 8px color-mix(in srgb, var(--mj-brand-primary) 15%, transparent);\n}\n\n.conversation-pill[_ngcontent-%COMP%] i[_ngcontent-%COMP%]:first-child {\n font-size: 11px;\n opacity: 0.9;\n}\n\n.conversation-pill[_ngcontent-%COMP%] .pill-action[_ngcontent-%COMP%] {\n font-size: 9px;\n opacity: 0.6;\n transition: opacity 0.2s ease;\n}\n\n.conversation-pill[_ngcontent-%COMP%]:hover .pill-action[_ngcontent-%COMP%] {\n opacity: 1;\n}\n\n.header-right[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 16px;\n}\n\n.status-badge[_ngcontent-%COMP%] {\n padding: 6px 16px;\n border-radius: 20px;\n font-size: 13px;\n font-weight: 600;\n text-transform: uppercase;\n letter-spacing: 0.5px;\n display: inline-flex;\n align-items: center;\n gap: 6px;\n}\n\n.status-badge[data-status=\"Running\"][_ngcontent-%COMP%] {\n background: color-mix(in srgb, var(--mj-status-info) 15%, var(--mj-bg-surface));\n color: var(--mj-status-info);\n}\n\n.status-badge[data-status=\"Completed\"][_ngcontent-%COMP%] {\n background: color-mix(in srgb, var(--mj-status-success) 15%, var(--mj-bg-surface));\n color: var(--mj-status-success);\n}\n\n.status-badge[data-status=\"Failed\"][_ngcontent-%COMP%] {\n background: color-mix(in srgb, var(--mj-status-error) 15%, var(--mj-bg-surface));\n color: var(--mj-status-error);\n}\n\n.status-badge[data-status=\"Cancelled\"][_ngcontent-%COMP%] {\n background: color-mix(in srgb, var(--mj-status-warning) 15%, var(--mj-bg-surface));\n color: var(--mj-status-warning);\n}\n\n.status-badge[data-status=\"Paused\"][_ngcontent-%COMP%] {\n background: var(--mj-bg-surface-sunken);\n color: var(--mj-text-secondary);\n}\n\n.status-badge.small[_ngcontent-%COMP%] {\n padding: 4px 12px;\n font-size: 11px;\n}\n\n\n\n.plan-mode-badge[_ngcontent-%COMP%] {\n padding: 6px 16px;\n border-radius: 20px;\n font-size: 13px;\n font-weight: 600;\n text-transform: uppercase;\n letter-spacing: 0.5px;\n display: inline-flex;\n align-items: center;\n gap: 6px;\n background: color-mix(in srgb, var(--mj-brand-primary) 12%, var(--mj-bg-surface));\n color: var(--mj-brand-primary);\n border: 1px solid color-mix(in srgb, var(--mj-brand-primary) 30%, transparent);\n}\n\n.header-actions[_ngcontent-%COMP%] {\n display: flex;\n gap: 8px;\n}\n\n.btn-icon[_ngcontent-%COMP%] {\n width: 36px;\n height: 36px;\n border: 1px solid var(--mj-border-default);\n background: var(--mj-bg-surface);\n border-radius: 8px;\n display: flex;\n align-items: center;\n justify-content: center;\n cursor: pointer;\n transition: all 0.2s ease;\n color: var(--mj-text-muted);\n}\n\n.btn-icon[_ngcontent-%COMP%]:hover {\n background: var(--mj-bg-surface-sunken);\n border-color: var(--mj-border-strong);\n color: var(--mj-text-secondary);\n}\n\n.header-stats[_ngcontent-%COMP%] {\n display: flex;\n gap: 24px;\n padding-top: 12px;\n border-top: 1px solid var(--mj-border-default);\n}\n\n\n\n.configuration-bar[_ngcontent-%COMP%] {\n display: flex;\n gap: 24px;\n padding-top: 16px;\n border-top: 1px solid var(--mj-border-default);\n margin-top: 16px;\n}\n\n.config-item[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 12px;\n}\n\n.config-item[_ngcontent-%COMP%] > i[_ngcontent-%COMP%] {\n font-size: 1.2em;\n color: var(--mj-text-muted);\n width: 24px;\n text-align: center;\n}\n\n.config-content[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n}\n\n.config-label[_ngcontent-%COMP%] {\n font-size: 12px;\n color: var(--mj-text-muted);\n text-transform: uppercase;\n letter-spacing: 0.5px;\n}\n\n.config-value[_ngcontent-%COMP%] {\n font-size: 14px;\n font-weight: 600;\n color: var(--mj-text-primary);\n}\n\n.config-value[_ngcontent-%COMP%] .entity-link[_ngcontent-%COMP%] {\n color: var(--mj-brand-primary);\n text-decoration: none;\n cursor: pointer;\n transition: color 0.2s;\n}\n\n.config-value[_ngcontent-%COMP%] .entity-link[_ngcontent-%COMP%]:hover {\n color: var(--mj-brand-primary-hover);\n text-decoration: underline;\n}\n\n.stat[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n gap: 4px;\n}\n\n.stat[_ngcontent-%COMP%] .label[_ngcontent-%COMP%] {\n font-size: 12px;\n color: var(--mj-text-muted);\n text-transform: uppercase;\n letter-spacing: 0.5px;\n}\n\n.stat[_ngcontent-%COMP%] .value[_ngcontent-%COMP%] {\n font-size: 14px;\n font-weight: 500;\n color: var(--mj-text-secondary);\n}\n\n.stat[_ngcontent-%COMP%] .value.success[_ngcontent-%COMP%] {\n color: var(--mj-status-success);\n}\n\n.stat[_ngcontent-%COMP%] .value.error[_ngcontent-%COMP%] {\n color: var(--mj-status-error);\n}\n\n\n\n.tabs[_ngcontent-%COMP%] {\n display: flex;\n border-bottom: 1px solid var(--mj-border-default);\n background: var(--mj-bg-surface-sunken);\n flex-shrink: 0;\n}\n\n.tab[_ngcontent-%COMP%] {\n padding: 12px 24px;\n border: none;\n background: transparent;\n cursor: pointer;\n font-size: 14px;\n font-weight: 500;\n color: var(--mj-text-muted);\n display: flex;\n align-items: center;\n gap: 8px;\n transition: all 0.2s ease;\n border-bottom: 3px solid transparent;\n}\n\n.tab[_ngcontent-%COMP%]:hover {\n color: var(--mj-text-secondary);\n background: color-mix(in srgb, var(--mj-text-primary) 2%, var(--mj-bg-surface));\n}\n\n.tab.active[_ngcontent-%COMP%] {\n color: var(--mj-brand-primary);\n border-bottom-color: var(--mj-brand-primary);\n background: var(--mj-bg-surface);\n}\n\n\n\n.content-area[_ngcontent-%COMP%] {\n position: relative;\n flex: 1;\n min-height: 0;\n overflow: auto;\n background: var(--mj-bg-surface);\n}\n\n.tab-content[_ngcontent-%COMP%] {\n height: 100%;\n min-height: 0;\n overflow: auto;\n}\n\n\n\n.tab-content[_ngcontent-%COMP%] mj-accordion-panel[_ngcontent-%COMP%] {\n display: block;\n margin-bottom: 8px;\n}\n\n\n\n.json-detail-pane[_ngcontent-%COMP%] {\n height: 100%;\n display: flex;\n flex-direction: column;\n background: var(--mj-bg-surface-sunken);\n border-left: 1px solid var(--mj-border-default);\n}\n\n.json-pane-header[_ngcontent-%COMP%] {\n display: flex;\n justify-content: space-between;\n align-items: center;\n padding: 16px 20px;\n background: var(--mj-bg-surface);\n border-bottom: 1px solid var(--mj-border-default);\n box-shadow: var(--mj-shadow-sm);\n}\n\n.json-pane-header[_ngcontent-%COMP%] h3[_ngcontent-%COMP%] {\n margin: 0;\n font-size: 16px;\n font-weight: 600;\n color: var(--mj-text-primary);\n display: flex;\n align-items: center;\n gap: 8px;\n}\n\n.json-pane-header[_ngcontent-%COMP%] h3[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n color: var(--mj-text-muted);\n font-size: 14px;\n}\n\n.json-pane-content[_ngcontent-%COMP%] {\n flex: 1;\n display: flex;\n flex-direction: column;\n overflow: auto;\n padding: 16px;\n}\n\n.json-meta[_ngcontent-%COMP%] {\n display: flex;\n gap: 20px;\n margin-bottom: 16px;\n flex-wrap: wrap;\n}\n\n.json-meta[_ngcontent-%COMP%] .meta-item[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n gap: 4px;\n}\n\n.json-meta[_ngcontent-%COMP%] .meta-item[_ngcontent-%COMP%] label[_ngcontent-%COMP%] {\n font-size: 11px;\n text-transform: uppercase;\n color: var(--mj-text-muted);\n font-weight: 600;\n letter-spacing: 0.5px;\n}\n\n.json-meta[_ngcontent-%COMP%] .meta-item[_ngcontent-%COMP%] span[_ngcontent-%COMP%] {\n font-size: 14px;\n color: var(--mj-text-primary);\n font-weight: 500;\n}\n\n.action-link[_ngcontent-%COMP%] {\n margin-bottom: 12px;\n}\n\n.action-link[_ngcontent-%COMP%] .btn-link[_ngcontent-%COMP%] {\n background: none;\n border: none;\n color: var(--mj-brand-primary);\n font-size: 14px;\n cursor: pointer;\n padding: 6px 12px;\n border-radius: 4px;\n transition: all 0.2s;\n display: inline-flex;\n align-items: center;\n gap: 6px;\n}\n\n.action-link[_ngcontent-%COMP%] .btn-link[_ngcontent-%COMP%]:hover {\n background: color-mix(in srgb, var(--mj-brand-primary) 8%, var(--mj-bg-surface));\n color: var(--mj-brand-primary-hover);\n}\n\n.json-viewer[_ngcontent-%COMP%] {\n flex: 1;\n display: flex;\n flex-direction: column;\n background: var(--mj-bg-surface);\n border-radius: 8px;\n border: 1px solid var(--mj-border-default);\n overflow: auto;\n padding: 20px;\n gap: 10px;\n min-height: 0;\n margin-bottom: 45px;\n}\n\n\n.json-toolbar[_ngcontent-%COMP%] {\n display: flex;\n justify-content: flex-end;\n padding: 8px 12px;\n background: var(--mj-bg-surface-sunken);\n border-bottom: 1px solid var(--mj-border-default);\n}\n\n\n\n.timeline-container[_ngcontent-%COMP%] {\n height: 100%;\n overflow-y: auto;\n padding: 20px;\n}\n\n.timeline-container[_ngcontent-%COMP%] > .timeline[_ngcontent-%COMP%] {\n max-width: 900px;\n margin: 0 auto;\n}\n\n.timeline[_ngcontent-%COMP%] {\n position: relative;\n padding-left: 40px;\n}\n\n.timeline[_ngcontent-%COMP%]::before {\n content: '';\n position: absolute;\n left: 20px;\n top: 0;\n bottom: 0;\n width: 2px;\n background: var(--mj-border-default);\n}\n\n.timeline-item[_ngcontent-%COMP%] {\n position: relative;\n margin-bottom: 24px;\n cursor: pointer;\n transition: all 0.2s ease;\n}\n\n.timeline-item[_ngcontent-%COMP%]:hover {\n transform: translateX(4px);\n}\n\n.timeline-item.selected[_ngcontent-%COMP%] {\n transform: translateX(8px);\n}\n\n.timeline-item.selected[_ngcontent-%COMP%] .timeline-content[_ngcontent-%COMP%] {\n background: color-mix(in srgb, var(--mj-brand-primary) 8%, var(--mj-bg-surface));\n border-color: var(--mj-brand-primary);\n}\n\n.timeline-marker[_ngcontent-%COMP%] {\n position: absolute;\n left: -30px;\n top: 0;\n width: 40px;\n height: 40px;\n border-radius: 50%;\n display: flex;\n align-items: center;\n justify-content: center;\n background: var(--mj-bg-surface);\n border: 3px solid var(--mj-border-default);\n z-index: 1;\n transition: all 0.2s ease;\n}\n\n.timeline-marker[data-color=\"success\"][_ngcontent-%COMP%] {\n border-color: var(--mj-status-success);\n color: var(--mj-status-success);\n}\n\n.timeline-marker[data-color=\"error\"][_ngcontent-%COMP%] {\n border-color: var(--mj-status-error);\n color: var(--mj-status-error);\n}\n\n.timeline-marker[data-color=\"info\"][_ngcontent-%COMP%] {\n border-color: var(--mj-status-info);\n color: var(--mj-status-info);\n}\n\n.timeline-marker[data-color=\"warning\"][_ngcontent-%COMP%] {\n border-color: var(--mj-status-warning);\n color: var(--mj-status-warning);\n}\n\n.timeline-marker[data-color=\"secondary\"][_ngcontent-%COMP%] {\n border-color: var(--mj-text-muted);\n color: var(--mj-text-muted);\n}\n\n.timeline-marker.small[_ngcontent-%COMP%] {\n width: 28px;\n height: 28px;\n font-size: 12px;\n}\n\n.timeline-content[_ngcontent-%COMP%] {\n background: var(--mj-bg-surface);\n border: 1px solid var(--mj-border-default);\n border-radius: 12px;\n padding: 16px 20px;\n margin-left: 20px;\n box-shadow: var(--mj-shadow-sm);\n transition: all 0.2s ease;\n}\n\n.timeline-header[_ngcontent-%COMP%] {\n display: flex;\n justify-content: space-between;\n align-items: center;\n margin-bottom: 8px;\n}\n\n.timeline-header[_ngcontent-%COMP%] h4[_ngcontent-%COMP%] {\n margin: 0;\n font-size: 16px;\n font-weight: 600;\n color: var(--mj-text-primary);\n}\n\n.timeline-header[_ngcontent-%COMP%] h5[_ngcontent-%COMP%] {\n margin: 0;\n font-size: 14px;\n font-weight: 600;\n color: var(--mj-text-secondary);\n}\n\n.timeline-time[_ngcontent-%COMP%] {\n font-size: 12px;\n color: var(--mj-text-muted);\n font-family: monospace;\n}\n\n.timeline-subtitle[_ngcontent-%COMP%] {\n font-size: 13px;\n color: var(--mj-text-muted);\n margin-bottom: 8px;\n}\n\n.timeline-meta[_ngcontent-%COMP%] {\n display: flex;\n gap: 16px;\n font-size: 12px;\n color: var(--mj-text-muted);\n}\n\n.timeline-meta[_ngcontent-%COMP%] .status[_ngcontent-%COMP%] {\n display: inline-flex;\n align-items: center;\n gap: 6px;\n padding: 2px 8px;\n border-radius: 12px;\n font-size: 11px;\n font-weight: 600;\n text-transform: uppercase;\n letter-spacing: 0.5px;\n}\n\n.timeline-meta[_ngcontent-%COMP%] .status[data-status=\"Completed\"][_ngcontent-%COMP%] {\n background: color-mix(in srgb, var(--mj-status-success) 15%, var(--mj-bg-surface));\n color: var(--mj-status-success);\n}\n\n.timeline-meta[_ngcontent-%COMP%] .status[data-status=\"Failed\"][_ngcontent-%COMP%] {\n background: color-mix(in srgb, var(--mj-status-error) 15%, var(--mj-bg-surface));\n color: var(--mj-status-error);\n}\n\n.timeline-meta[_ngcontent-%COMP%] .status[data-status=\"Running\"][_ngcontent-%COMP%] {\n background: color-mix(in srgb, var(--mj-status-info) 15%, var(--mj-bg-surface));\n color: var(--mj-status-info);\n}\n\n.timeline-meta[_ngcontent-%COMP%] .status[data-status=\"Paused\"][_ngcontent-%COMP%] {\n background: var(--mj-bg-surface-sunken);\n color: var(--mj-text-secondary);\n}\n\n.duration[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 4px;\n}\n\n.timeline-actions[_ngcontent-%COMP%] {\n position: absolute;\n right: 20px;\n top: 50%;\n transform: translateY(-50%);\n display: flex;\n align-items: center;\n gap: 8px;\n}\n\n.btn-link[_ngcontent-%COMP%] {\n background: none;\n border: none;\n color: var(--mj-brand-primary);\n cursor: pointer;\n font-size: 12px;\n display: flex;\n align-items: center;\n gap: 4px;\n padding: 4px 8px;\n border-radius: 4px;\n transition: all 0.2s ease;\n}\n\n.btn-link[_ngcontent-%COMP%]:hover {\n background: color-mix(in srgb, var(--mj-brand-primary) 10%, var(--mj-bg-surface));\n}\n\n.btn-expand[_ngcontent-%COMP%] {\n width: 24px;\n height: 24px;\n border: 1px solid var(--mj-border-default);\n background: var(--mj-bg-surface);\n border-radius: 4px;\n display: flex;\n align-items: center;\n justify-content: center;\n cursor: pointer;\n transition: all 0.2s ease;\n color: var(--mj-text-muted);\n font-size: 12px;\n}\n\n.btn-expand[_ngcontent-%COMP%]:hover {\n background: var(--mj-bg-surface-sunken);\n border-color: var(--mj-border-strong);\n color: var(--mj-text-secondary);\n}\n\n\n\n.timeline-children[_ngcontent-%COMP%] {\n position: relative;\n margin-top: 12px;\n margin-bottom: 12px;\n}\n\n.timeline-children[_ngcontent-%COMP%]::before {\n content: '';\n position: absolute;\n left: -10px;\n top: -12px;\n bottom: 0;\n width: 2px;\n background: var(--mj-border-default);\n}\n\n.child-item[_ngcontent-%COMP%] {\n margin-bottom: 12px;\n}\n\n.child-item[_ngcontent-%COMP%] .timeline-content[_ngcontent-%COMP%] {\n background: var(--mj-bg-surface-sunken);\n border-color: var(--mj-border-default);\n}\n\n\n\n.sub-run-timeline[_ngcontent-%COMP%] {\n background: color-mix(in srgb, var(--mj-brand-primary) 2%, var(--mj-bg-surface));\n border-left: 2px solid color-mix(in srgb, var(--mj-brand-primary) 20%, transparent);\n margin-left: 20px;\n padding-left: 20px;\n margin-top: 8px;\n margin-bottom: 8px;\n}\n\n.sub-run-item[_ngcontent-%COMP%] .timeline-marker[_ngcontent-%COMP%] {\n border-width: 2px;\n}\n\n.sub-run-item[_ngcontent-%COMP%] .timeline-content[_ngcontent-%COMP%] {\n transition: all 0.2s ease;\n}\n\n\n\n.json-detail-pane[_ngcontent-%COMP%] {\n height: 100%;\n display: flex;\n flex-direction: column;\n background: var(--mj-bg-surface);\n border-left: 1px solid var(--mj-border-default);\n}\n\n.json-pane-header[_ngcontent-%COMP%] {\n padding: 16px 20px;\n background: var(--mj-bg-surface-sunken);\n border-bottom: 1px solid var(--mj-border-default);\n display: flex;\n justify-content: space-between;\n align-items: center;\n flex-shrink: 0;\n}\n\n.json-pane-header[_ngcontent-%COMP%] h3[_ngcontent-%COMP%] {\n margin: 0;\n font-size: 16px;\n color: var(--mj-text-primary);\n display: flex;\n align-items: center;\n gap: 10px;\n font-weight: 600;\n}\n\n.json-pane-content[_ngcontent-%COMP%] {\n flex: 1;\n overflow-y: auto;\n display: flex;\n flex-direction: column;\n}\n\n.json-meta[_ngcontent-%COMP%] {\n padding: 16px 20px;\n border-bottom: 1px solid var(--mj-border-default);\n display: flex;\n gap: 20px;\n flex-wrap: wrap;\n flex-shrink: 0;\n}\n\n.json-meta[_ngcontent-%COMP%] .meta-item[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n gap: 4px;\n}\n\n.json-meta[_ngcontent-%COMP%] label[_ngcontent-%COMP%] {\n font-size: 11px;\n color: var(--mj-text-muted);\n text-transform: uppercase;\n letter-spacing: 0.5px;\n}\n\n.json-meta[_ngcontent-%COMP%] span[_ngcontent-%COMP%] {\n font-size: 14px;\n color: var(--mj-text-primary);\n font-weight: 500;\n}\n\n.action-link[_ngcontent-%COMP%] {\n padding: 12px 20px;\n border-bottom: 1px solid var(--mj-border-default);\n flex-shrink: 0;\n}\n\n.action-link[_ngcontent-%COMP%] .btn-link[_ngcontent-%COMP%] {\n display: inline-flex;\n align-items: center;\n gap: 6px;\n color: var(--mj-brand-primary);\n text-decoration: none;\n font-size: 14px;\n padding: 8px 12px;\n background: color-mix(in srgb, var(--mj-brand-primary) 8%, var(--mj-bg-surface));\n border: 1px solid color-mix(in srgb, var(--mj-brand-primary) 20%, transparent);\n border-radius: 4px;\n transition: all 0.2s;\n cursor: pointer;\n}\n\n.action-link[_ngcontent-%COMP%] .btn-link[_ngcontent-%COMP%]:hover {\n background: color-mix(in srgb, var(--mj-brand-primary) 15%, var(--mj-bg-surface));\n border-color: color-mix(in srgb, var(--mj-brand-primary) 35%, transparent);\n text-decoration: none;\n}\n\n\n.json-toolbar[_ngcontent-%COMP%] {\n display: flex;\n justify-content: flex-end;\n gap: 8px;\n margin-bottom: 8px;\n}\n\n\n\n.details-grid[_ngcontent-%COMP%] {\n display: grid;\n grid-template-columns: repeat(auto-fit, minmax(250px, 1fr));\n gap: 20px;\n padding: 20px;\n}\n\n.detail-item[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n gap: 8px;\n}\n\n.detail-item.full-width[_ngcontent-%COMP%] {\n grid-column: 1 / -1;\n}\n\n.detail-item[_ngcontent-%COMP%] label[_ngcontent-%COMP%] {\n font-size: 12px;\n color: var(--mj-text-muted);\n text-transform: uppercase;\n letter-spacing: 0.5px;\n}\n\n.detail-item[_ngcontent-%COMP%] span[_ngcontent-%COMP%] {\n font-size: 14px;\n color: var(--mj-text-secondary);\n}\n\n.error-message[_ngcontent-%COMP%] {\n background: color-mix(in srgb, var(--mj-status-error) 15%, var(--mj-bg-surface));\n color: var(--mj-status-error);\n padding: 12px;\n border-radius: 8px;\n font-size: 13px;\n}\n\n.result-viewer[_ngcontent-%COMP%], \n.state-viewer[_ngcontent-%COMP%] {\n padding: 20px;\n max-height: 450px;\n overflow: auto;\n display: flex;\n flex-direction: column;\n}\n\n.result-viewer[_ngcontent-%COMP%] mj-code-editor[_ngcontent-%COMP%], \n.state-viewer[_ngcontent-%COMP%] mj-code-editor[_ngcontent-%COMP%] {\n flex: 1;\n min-height: 0;\n}\n\n\n\n.empty-state[_ngcontent-%COMP%], \n.loading-state[_ngcontent-%COMP%], \n.error-state[_ngcontent-%COMP%] {\n text-align: center;\n padding: 60px 20px;\n color: var(--mj-text-muted);\n}\n\n.empty-state[_ngcontent-%COMP%] i[_ngcontent-%COMP%], \n.loading-state[_ngcontent-%COMP%] i[_ngcontent-%COMP%], \n.error-state[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n opacity: 0.3;\n margin-bottom: 16px;\n}\n\n\n\n@media (max-width: 768px) {\n .header-content[_ngcontent-%COMP%] {\n flex-direction: column;\n gap: 16px;\n }\n \n .header-stats[_ngcontent-%COMP%] {\n flex-wrap: wrap;\n }\n \n .json-detail-pane[_ngcontent-%COMP%] {\n width: 100%;\n }\n \n .timeline[_ngcontent-%COMP%] {\n padding-left: 30px;\n }\n \n .timeline-marker[_ngcontent-%COMP%] {\n left: -25px;\n width: 32px;\n height: 32px;\n }\n \n .timeline-content[_ngcontent-%COMP%] {\n margin-left: 10px;\n }\n}\n\n\n\n.entity-link[_ngcontent-%COMP%] {\n color: var(--mj-brand-primary);\n text-decoration: none;\n transition: all 0.2s ease;\n border-bottom: 1px solid transparent;\n display: inline-block;\n}\n\n.entity-link[_ngcontent-%COMP%]:hover {\n color: var(--mj-brand-primary-hover);\n border-bottom-color: var(--mj-brand-primary-hover);\n}\n\n.entity-link[_ngcontent-%COMP%]:active {\n color: var(--mj-brand-primary-hover);\n}\n\n\n\n.detail-pane-tabs[_ngcontent-%COMP%] {\n display: flex;\n gap: 8px;\n margin: 8px 0 0 0;\n border-bottom: 1px solid var(--mj-border-default);\n padding: 0 16px;\n}\n\n.detail-tab[_ngcontent-%COMP%] {\n padding: 10px 16px;\n background: none;\n border: none;\n border-bottom: 3px solid transparent;\n color: var(--mj-text-muted);\n font-size: 14px;\n font-weight: 500;\n cursor: pointer;\n transition: all 0.2s ease;\n display: flex;\n align-items: center;\n gap: 6px;\n}\n\n.detail-tab[_ngcontent-%COMP%]:hover {\n color: var(--mj-text-secondary);\n background: color-mix(in srgb, var(--mj-text-primary) 2%, var(--mj-bg-surface));\n}\n\n.detail-tab.active[_ngcontent-%COMP%] {\n color: var(--mj-brand-primary);\n border-bottom-color: var(--mj-brand-primary);\n}\n\n.detail-tab[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n font-size: 14px;\n}\n\n\n\n.detail-pane-content[_ngcontent-%COMP%] {\n flex: 1;\n overflow-y: auto;\n min-height: 0;\n margin-bottom: 35px;\n}\n\n.detail-pane-content.with-tabs[_ngcontent-%COMP%] {\n \n\n margin-top: 0;\n}\n\n\n\n.step-payload-diff[_ngcontent-%COMP%] {\n height: 100%;\n overflow-y: auto;\n padding: 16px;\n}\n\n.step-payload-diff[_ngcontent-%COMP%] mj-deep-diff[_ngcontent-%COMP%] {\n display: block;\n height: 100%;\n}\n\n\n\n.detail-pane-content[_ngcontent-%COMP%]:not(.with-tabs) .json-viewer[_ngcontent-%COMP%] {\n margin-top: 16px;\n}"] }); }
1677
+ i0.ɵɵconditional(ctx.activeTab === "details" ? 58 : -1);
1678
+ } }, dependencies: [i1.NgClass, i2.NgControlStatus, i2.NgModel, i3.MJAccordionPanelComponent, i3.MJAccordionTitleDirective, i4.CodeEditorComponent, i5.DeepDiffComponent, i6.SplitComponent, i6.SplitAreaComponent, i7.AIAgentRunTimelineComponent, i8.AIAgentRunAnalyticsComponent, i9.AIAgentRunStepDetailComponent, i10.AIAgentRunFlowComponent, i1.DecimalPipe, i1.DatePipe], styles: [".ai-agent-run-form[_ngcontent-%COMP%] {\n height: 100%;\n display: flex;\n flex-direction: column;\n overflow: hidden;\n}\n\n.record-form-container.ai-agent-run-form[_ngcontent-%COMP%] > .record-form[_ngcontent-%COMP%], \n.ai-agent-run-form[_ngcontent-%COMP%] > .record-form[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n height: 100%;\n min-height: 0;\n}\n\n\n\n.header[_ngcontent-%COMP%] {\n background: var(--mj-bg-surface);\n border-bottom: 1px solid var(--mj-border-default);\n padding: 20px;\n box-shadow: var(--mj-shadow-sm);\n flex-shrink: 0;\n}\n\n.header-content[_ngcontent-%COMP%] {\n display: flex;\n justify-content: space-between;\n align-items: flex-start;\n margin-bottom: 16px;\n}\n\n.header-left[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 16px;\n}\n\n.icon-wrapper[_ngcontent-%COMP%] {\n width: 48px;\n height: 48px;\n background: var(--mj-brand-primary);\n border-radius: 12px;\n display: flex;\n align-items: center;\n justify-content: center;\n color: var(--mj-text-inverse);\n font-size: 20px;\n overflow: hidden;\n}\n\n.agent-logo[_ngcontent-%COMP%] {\n width: 100%;\n height: 100%;\n object-fit: cover;\n}\n\n.header-info[_ngcontent-%COMP%] h2[_ngcontent-%COMP%] {\n margin: 0;\n font-size: 24px;\n font-weight: 600;\n color: var(--mj-text-primary);\n}\n\n.meta-info[_ngcontent-%COMP%] {\n display: flex;\n gap: 12px;\n margin-top: 4px;\n font-size: 14px;\n color: var(--mj-text-muted);\n}\n\n.parent-run[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 6px;\n}\n\n.parent-link[_ngcontent-%COMP%] {\n color: var(--mj-status-error);\n text-decoration: none;\n cursor: pointer;\n transition: color 0.2s;\n}\n\n.parent-link[_ngcontent-%COMP%]:hover {\n color: var(--mj-status-error);\n text-decoration: underline;\n}\n\n.agent-name[_ngcontent-%COMP%] {\n font-weight: 500;\n color: var(--mj-text-secondary);\n}\n\n.run-id[_ngcontent-%COMP%] {\n font-family: monospace;\n font-size: 12px;\n opacity: 0.7;\n}\n\n\n\n.conversation-pill[_ngcontent-%COMP%] {\n display: inline-flex;\n align-items: center;\n gap: 6px;\n padding: 4px 10px;\n background: color-mix(in srgb, var(--mj-brand-primary) 8%, var(--mj-bg-surface));\n border: 1px solid color-mix(in srgb, var(--mj-brand-primary) 20%, transparent);\n border-radius: 16px;\n font-size: 12px;\n font-weight: 500;\n color: var(--mj-brand-primary);\n cursor: pointer;\n transition: all 0.2s ease;\n white-space: nowrap;\n}\n\n.conversation-pill[_ngcontent-%COMP%]:hover {\n background: color-mix(in srgb, var(--mj-brand-primary) 15%, var(--mj-bg-surface));\n border-color: color-mix(in srgb, var(--mj-brand-primary) 40%, transparent);\n transform: translateY(-1px);\n box-shadow: 0 2px 8px color-mix(in srgb, var(--mj-brand-primary) 15%, transparent);\n}\n\n.conversation-pill[_ngcontent-%COMP%] i[_ngcontent-%COMP%]:first-child {\n font-size: 11px;\n opacity: 0.9;\n}\n\n.conversation-pill[_ngcontent-%COMP%] .pill-action[_ngcontent-%COMP%] {\n font-size: 9px;\n opacity: 0.6;\n transition: opacity 0.2s ease;\n}\n\n.conversation-pill[_ngcontent-%COMP%]:hover .pill-action[_ngcontent-%COMP%] {\n opacity: 1;\n}\n\n.header-right[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 16px;\n}\n\n.status-badge[_ngcontent-%COMP%] {\n padding: 6px 16px;\n border-radius: 20px;\n font-size: 13px;\n font-weight: 600;\n text-transform: uppercase;\n letter-spacing: 0.5px;\n display: inline-flex;\n align-items: center;\n gap: 6px;\n}\n\n.status-badge[data-status=\"Running\"][_ngcontent-%COMP%] {\n background: color-mix(in srgb, var(--mj-status-info) 15%, var(--mj-bg-surface));\n color: var(--mj-status-info);\n}\n\n.status-badge[data-status=\"Completed\"][_ngcontent-%COMP%] {\n background: color-mix(in srgb, var(--mj-status-success) 15%, var(--mj-bg-surface));\n color: var(--mj-status-success);\n}\n\n.status-badge[data-status=\"Failed\"][_ngcontent-%COMP%] {\n background: color-mix(in srgb, var(--mj-status-error) 15%, var(--mj-bg-surface));\n color: var(--mj-status-error);\n}\n\n.status-badge[data-status=\"Cancelled\"][_ngcontent-%COMP%] {\n background: color-mix(in srgb, var(--mj-status-warning) 15%, var(--mj-bg-surface));\n color: var(--mj-status-warning);\n}\n\n.status-badge[data-status=\"Paused\"][_ngcontent-%COMP%] {\n background: var(--mj-bg-surface-sunken);\n color: var(--mj-text-secondary);\n}\n\n.status-badge.small[_ngcontent-%COMP%] {\n padding: 4px 12px;\n font-size: 11px;\n}\n\n\n\n.plan-mode-badge[_ngcontent-%COMP%] {\n padding: 6px 16px;\n border-radius: 20px;\n font-size: 13px;\n font-weight: 600;\n text-transform: uppercase;\n letter-spacing: 0.5px;\n display: inline-flex;\n align-items: center;\n gap: 6px;\n background: color-mix(in srgb, var(--mj-brand-primary) 12%, var(--mj-bg-surface));\n color: var(--mj-brand-primary);\n border: 1px solid color-mix(in srgb, var(--mj-brand-primary) 30%, transparent);\n}\n\n.header-actions[_ngcontent-%COMP%] {\n display: flex;\n gap: 8px;\n}\n\n.btn-icon[_ngcontent-%COMP%] {\n width: 36px;\n height: 36px;\n border: 1px solid var(--mj-border-default);\n background: var(--mj-bg-surface);\n border-radius: 8px;\n display: flex;\n align-items: center;\n justify-content: center;\n cursor: pointer;\n transition: all 0.2s ease;\n color: var(--mj-text-muted);\n}\n\n.btn-icon[_ngcontent-%COMP%]:hover {\n background: var(--mj-bg-surface-sunken);\n border-color: var(--mj-border-strong);\n color: var(--mj-text-secondary);\n}\n\n.header-stats[_ngcontent-%COMP%] {\n display: flex;\n gap: 24px;\n padding-top: 12px;\n border-top: 1px solid var(--mj-border-default);\n}\n\n\n\n.configuration-bar[_ngcontent-%COMP%] {\n display: flex;\n gap: 24px;\n padding-top: 16px;\n border-top: 1px solid var(--mj-border-default);\n margin-top: 16px;\n}\n\n.config-item[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 12px;\n}\n\n.config-item[_ngcontent-%COMP%] > i[_ngcontent-%COMP%] {\n font-size: 1.2em;\n color: var(--mj-text-muted);\n width: 24px;\n text-align: center;\n}\n\n.config-content[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n}\n\n.config-label[_ngcontent-%COMP%] {\n font-size: 12px;\n color: var(--mj-text-muted);\n text-transform: uppercase;\n letter-spacing: 0.5px;\n}\n\n.config-value[_ngcontent-%COMP%] {\n font-size: 14px;\n font-weight: 600;\n color: var(--mj-text-primary);\n}\n\n.config-value[_ngcontent-%COMP%] .entity-link[_ngcontent-%COMP%] {\n color: var(--mj-brand-primary);\n text-decoration: none;\n cursor: pointer;\n transition: color 0.2s;\n}\n\n.config-value[_ngcontent-%COMP%] .entity-link[_ngcontent-%COMP%]:hover {\n color: var(--mj-brand-primary-hover);\n text-decoration: underline;\n}\n\n.stat[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n gap: 4px;\n}\n\n.stat[_ngcontent-%COMP%] .label[_ngcontent-%COMP%] {\n font-size: 12px;\n color: var(--mj-text-muted);\n text-transform: uppercase;\n letter-spacing: 0.5px;\n}\n\n.stat[_ngcontent-%COMP%] .value[_ngcontent-%COMP%] {\n font-size: 14px;\n font-weight: 500;\n color: var(--mj-text-secondary);\n}\n\n.stat[_ngcontent-%COMP%] .value.success[_ngcontent-%COMP%] {\n color: var(--mj-status-success);\n}\n\n.stat[_ngcontent-%COMP%] .value.error[_ngcontent-%COMP%] {\n color: var(--mj-status-error);\n}\n\n\n\n.tabs[_ngcontent-%COMP%] {\n display: flex;\n border-bottom: 1px solid var(--mj-border-default);\n background: var(--mj-bg-surface-sunken);\n flex-shrink: 0;\n}\n\n.tab[_ngcontent-%COMP%] {\n padding: 12px 24px;\n border: none;\n background: transparent;\n cursor: pointer;\n font-size: 14px;\n font-weight: 500;\n color: var(--mj-text-muted);\n display: flex;\n align-items: center;\n gap: 8px;\n transition: all 0.2s ease;\n border-bottom: 3px solid transparent;\n}\n\n.tab[_ngcontent-%COMP%]:hover {\n color: var(--mj-text-secondary);\n background: color-mix(in srgb, var(--mj-text-primary) 2%, var(--mj-bg-surface));\n}\n\n.tab.active[_ngcontent-%COMP%] {\n color: var(--mj-brand-primary);\n border-bottom-color: var(--mj-brand-primary);\n background: var(--mj-bg-surface);\n}\n\n\n\n.content-area[_ngcontent-%COMP%] {\n position: relative;\n flex: 1;\n min-height: 0;\n overflow: auto;\n background: var(--mj-bg-surface);\n}\n\n.tab-content[_ngcontent-%COMP%] {\n height: 100%;\n min-height: 0;\n overflow: auto;\n}\n\n\n\n.tab-content[_ngcontent-%COMP%] mj-accordion-panel[_ngcontent-%COMP%] {\n display: block;\n margin-bottom: 8px;\n}\n\n\n\n.json-detail-pane[_ngcontent-%COMP%] {\n height: 100%;\n display: flex;\n flex-direction: column;\n background: var(--mj-bg-surface-sunken);\n border-left: 1px solid var(--mj-border-default);\n}\n\n.json-pane-header[_ngcontent-%COMP%] {\n display: flex;\n justify-content: space-between;\n align-items: center;\n padding: 16px 20px;\n background: var(--mj-bg-surface);\n border-bottom: 1px solid var(--mj-border-default);\n box-shadow: var(--mj-shadow-sm);\n}\n\n.json-pane-header[_ngcontent-%COMP%] h3[_ngcontent-%COMP%] {\n margin: 0;\n font-size: 16px;\n font-weight: 600;\n color: var(--mj-text-primary);\n display: flex;\n align-items: center;\n gap: 8px;\n}\n\n.json-pane-header[_ngcontent-%COMP%] h3[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n color: var(--mj-text-muted);\n font-size: 14px;\n}\n\n.json-pane-content[_ngcontent-%COMP%] {\n flex: 1;\n display: flex;\n flex-direction: column;\n overflow: auto;\n padding: 16px;\n}\n\n.json-meta[_ngcontent-%COMP%] {\n display: flex;\n gap: 20px;\n margin-bottom: 16px;\n flex-wrap: wrap;\n}\n\n.json-meta[_ngcontent-%COMP%] .meta-item[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n gap: 4px;\n}\n\n.json-meta[_ngcontent-%COMP%] .meta-item[_ngcontent-%COMP%] label[_ngcontent-%COMP%] {\n font-size: 11px;\n text-transform: uppercase;\n color: var(--mj-text-muted);\n font-weight: 600;\n letter-spacing: 0.5px;\n}\n\n.json-meta[_ngcontent-%COMP%] .meta-item[_ngcontent-%COMP%] span[_ngcontent-%COMP%] {\n font-size: 14px;\n color: var(--mj-text-primary);\n font-weight: 500;\n}\n\n.action-link[_ngcontent-%COMP%] {\n margin-bottom: 12px;\n}\n\n.action-link[_ngcontent-%COMP%] .btn-link[_ngcontent-%COMP%] {\n background: none;\n border: none;\n color: var(--mj-brand-primary);\n font-size: 14px;\n cursor: pointer;\n padding: 6px 12px;\n border-radius: 4px;\n transition: all 0.2s;\n display: inline-flex;\n align-items: center;\n gap: 6px;\n}\n\n.action-link[_ngcontent-%COMP%] .btn-link[_ngcontent-%COMP%]:hover {\n background: color-mix(in srgb, var(--mj-brand-primary) 8%, var(--mj-bg-surface));\n color: var(--mj-brand-primary-hover);\n}\n\n.json-viewer[_ngcontent-%COMP%] {\n flex: 1;\n display: flex;\n flex-direction: column;\n background: var(--mj-bg-surface);\n border-radius: 8px;\n border: 1px solid var(--mj-border-default);\n overflow: auto;\n padding: 20px;\n gap: 10px;\n min-height: 0;\n margin-bottom: 45px;\n}\n\n\n.json-toolbar[_ngcontent-%COMP%] {\n display: flex;\n justify-content: flex-end;\n padding: 8px 12px;\n background: var(--mj-bg-surface-sunken);\n border-bottom: 1px solid var(--mj-border-default);\n}\n\n\n\n.timeline-container[_ngcontent-%COMP%] {\n height: 100%;\n overflow-y: auto;\n padding: 20px;\n}\n\n.timeline-container[_ngcontent-%COMP%] > .timeline[_ngcontent-%COMP%] {\n max-width: 900px;\n margin: 0 auto;\n}\n\n.timeline[_ngcontent-%COMP%] {\n position: relative;\n padding-left: 40px;\n}\n\n.timeline[_ngcontent-%COMP%]::before {\n content: '';\n position: absolute;\n left: 20px;\n top: 0;\n bottom: 0;\n width: 2px;\n background: var(--mj-border-default);\n}\n\n.timeline-item[_ngcontent-%COMP%] {\n position: relative;\n margin-bottom: 24px;\n cursor: pointer;\n transition: all 0.2s ease;\n}\n\n.timeline-item[_ngcontent-%COMP%]:hover {\n transform: translateX(4px);\n}\n\n.timeline-item.selected[_ngcontent-%COMP%] {\n transform: translateX(8px);\n}\n\n.timeline-item.selected[_ngcontent-%COMP%] .timeline-content[_ngcontent-%COMP%] {\n background: color-mix(in srgb, var(--mj-brand-primary) 8%, var(--mj-bg-surface));\n border-color: var(--mj-brand-primary);\n}\n\n.timeline-marker[_ngcontent-%COMP%] {\n position: absolute;\n left: -30px;\n top: 0;\n width: 40px;\n height: 40px;\n border-radius: 50%;\n display: flex;\n align-items: center;\n justify-content: center;\n background: var(--mj-bg-surface);\n border: 3px solid var(--mj-border-default);\n z-index: 1;\n transition: all 0.2s ease;\n}\n\n.timeline-marker[data-color=\"success\"][_ngcontent-%COMP%] {\n border-color: var(--mj-status-success);\n color: var(--mj-status-success);\n}\n\n.timeline-marker[data-color=\"error\"][_ngcontent-%COMP%] {\n border-color: var(--mj-status-error);\n color: var(--mj-status-error);\n}\n\n.timeline-marker[data-color=\"info\"][_ngcontent-%COMP%] {\n border-color: var(--mj-status-info);\n color: var(--mj-status-info);\n}\n\n.timeline-marker[data-color=\"warning\"][_ngcontent-%COMP%] {\n border-color: var(--mj-status-warning);\n color: var(--mj-status-warning);\n}\n\n.timeline-marker[data-color=\"secondary\"][_ngcontent-%COMP%] {\n border-color: var(--mj-text-muted);\n color: var(--mj-text-muted);\n}\n\n.timeline-marker.small[_ngcontent-%COMP%] {\n width: 28px;\n height: 28px;\n font-size: 12px;\n}\n\n.timeline-content[_ngcontent-%COMP%] {\n background: var(--mj-bg-surface);\n border: 1px solid var(--mj-border-default);\n border-radius: 12px;\n padding: 16px 20px;\n margin-left: 20px;\n box-shadow: var(--mj-shadow-sm);\n transition: all 0.2s ease;\n}\n\n.timeline-header[_ngcontent-%COMP%] {\n display: flex;\n justify-content: space-between;\n align-items: center;\n margin-bottom: 8px;\n}\n\n.timeline-header[_ngcontent-%COMP%] h4[_ngcontent-%COMP%] {\n margin: 0;\n font-size: 16px;\n font-weight: 600;\n color: var(--mj-text-primary);\n}\n\n.timeline-header[_ngcontent-%COMP%] h5[_ngcontent-%COMP%] {\n margin: 0;\n font-size: 14px;\n font-weight: 600;\n color: var(--mj-text-secondary);\n}\n\n.timeline-time[_ngcontent-%COMP%] {\n font-size: 12px;\n color: var(--mj-text-muted);\n font-family: monospace;\n}\n\n.timeline-subtitle[_ngcontent-%COMP%] {\n font-size: 13px;\n color: var(--mj-text-muted);\n margin-bottom: 8px;\n}\n\n.timeline-meta[_ngcontent-%COMP%] {\n display: flex;\n gap: 16px;\n font-size: 12px;\n color: var(--mj-text-muted);\n}\n\n.timeline-meta[_ngcontent-%COMP%] .status[_ngcontent-%COMP%] {\n display: inline-flex;\n align-items: center;\n gap: 6px;\n padding: 2px 8px;\n border-radius: 12px;\n font-size: 11px;\n font-weight: 600;\n text-transform: uppercase;\n letter-spacing: 0.5px;\n}\n\n.timeline-meta[_ngcontent-%COMP%] .status[data-status=\"Completed\"][_ngcontent-%COMP%] {\n background: color-mix(in srgb, var(--mj-status-success) 15%, var(--mj-bg-surface));\n color: var(--mj-status-success);\n}\n\n.timeline-meta[_ngcontent-%COMP%] .status[data-status=\"Failed\"][_ngcontent-%COMP%] {\n background: color-mix(in srgb, var(--mj-status-error) 15%, var(--mj-bg-surface));\n color: var(--mj-status-error);\n}\n\n.timeline-meta[_ngcontent-%COMP%] .status[data-status=\"Running\"][_ngcontent-%COMP%] {\n background: color-mix(in srgb, var(--mj-status-info) 15%, var(--mj-bg-surface));\n color: var(--mj-status-info);\n}\n\n.timeline-meta[_ngcontent-%COMP%] .status[data-status=\"Paused\"][_ngcontent-%COMP%] {\n background: var(--mj-bg-surface-sunken);\n color: var(--mj-text-secondary);\n}\n\n.duration[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 4px;\n}\n\n.timeline-actions[_ngcontent-%COMP%] {\n position: absolute;\n right: 20px;\n top: 50%;\n transform: translateY(-50%);\n display: flex;\n align-items: center;\n gap: 8px;\n}\n\n.btn-link[_ngcontent-%COMP%] {\n background: none;\n border: none;\n color: var(--mj-brand-primary);\n cursor: pointer;\n font-size: 12px;\n display: flex;\n align-items: center;\n gap: 4px;\n padding: 4px 8px;\n border-radius: 4px;\n transition: all 0.2s ease;\n}\n\n.btn-link[_ngcontent-%COMP%]:hover {\n background: color-mix(in srgb, var(--mj-brand-primary) 10%, var(--mj-bg-surface));\n}\n\n.btn-expand[_ngcontent-%COMP%] {\n width: 24px;\n height: 24px;\n border: 1px solid var(--mj-border-default);\n background: var(--mj-bg-surface);\n border-radius: 4px;\n display: flex;\n align-items: center;\n justify-content: center;\n cursor: pointer;\n transition: all 0.2s ease;\n color: var(--mj-text-muted);\n font-size: 12px;\n}\n\n.btn-expand[_ngcontent-%COMP%]:hover {\n background: var(--mj-bg-surface-sunken);\n border-color: var(--mj-border-strong);\n color: var(--mj-text-secondary);\n}\n\n\n\n.timeline-children[_ngcontent-%COMP%] {\n position: relative;\n margin-top: 12px;\n margin-bottom: 12px;\n}\n\n.timeline-children[_ngcontent-%COMP%]::before {\n content: '';\n position: absolute;\n left: -10px;\n top: -12px;\n bottom: 0;\n width: 2px;\n background: var(--mj-border-default);\n}\n\n.child-item[_ngcontent-%COMP%] {\n margin-bottom: 12px;\n}\n\n.child-item[_ngcontent-%COMP%] .timeline-content[_ngcontent-%COMP%] {\n background: var(--mj-bg-surface-sunken);\n border-color: var(--mj-border-default);\n}\n\n\n\n.sub-run-timeline[_ngcontent-%COMP%] {\n background: color-mix(in srgb, var(--mj-brand-primary) 2%, var(--mj-bg-surface));\n border-left: 2px solid color-mix(in srgb, var(--mj-brand-primary) 20%, transparent);\n margin-left: 20px;\n padding-left: 20px;\n margin-top: 8px;\n margin-bottom: 8px;\n}\n\n.sub-run-item[_ngcontent-%COMP%] .timeline-marker[_ngcontent-%COMP%] {\n border-width: 2px;\n}\n\n.sub-run-item[_ngcontent-%COMP%] .timeline-content[_ngcontent-%COMP%] {\n transition: all 0.2s ease;\n}\n\n\n\n.json-detail-pane[_ngcontent-%COMP%] {\n height: 100%;\n display: flex;\n flex-direction: column;\n background: var(--mj-bg-surface);\n border-left: 1px solid var(--mj-border-default);\n}\n\n.json-pane-header[_ngcontent-%COMP%] {\n padding: 16px 20px;\n background: var(--mj-bg-surface-sunken);\n border-bottom: 1px solid var(--mj-border-default);\n display: flex;\n justify-content: space-between;\n align-items: center;\n flex-shrink: 0;\n}\n\n.json-pane-header[_ngcontent-%COMP%] h3[_ngcontent-%COMP%] {\n margin: 0;\n font-size: 16px;\n color: var(--mj-text-primary);\n display: flex;\n align-items: center;\n gap: 10px;\n font-weight: 600;\n}\n\n.json-pane-content[_ngcontent-%COMP%] {\n flex: 1;\n overflow-y: auto;\n display: flex;\n flex-direction: column;\n}\n\n.json-meta[_ngcontent-%COMP%] {\n padding: 16px 20px;\n border-bottom: 1px solid var(--mj-border-default);\n display: flex;\n gap: 20px;\n flex-wrap: wrap;\n flex-shrink: 0;\n}\n\n.json-meta[_ngcontent-%COMP%] .meta-item[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n gap: 4px;\n}\n\n.json-meta[_ngcontent-%COMP%] label[_ngcontent-%COMP%] {\n font-size: 11px;\n color: var(--mj-text-muted);\n text-transform: uppercase;\n letter-spacing: 0.5px;\n}\n\n.json-meta[_ngcontent-%COMP%] span[_ngcontent-%COMP%] {\n font-size: 14px;\n color: var(--mj-text-primary);\n font-weight: 500;\n}\n\n.action-link[_ngcontent-%COMP%] {\n padding: 12px 20px;\n border-bottom: 1px solid var(--mj-border-default);\n flex-shrink: 0;\n}\n\n.action-link[_ngcontent-%COMP%] .btn-link[_ngcontent-%COMP%] {\n display: inline-flex;\n align-items: center;\n gap: 6px;\n color: var(--mj-brand-primary);\n text-decoration: none;\n font-size: 14px;\n padding: 8px 12px;\n background: color-mix(in srgb, var(--mj-brand-primary) 8%, var(--mj-bg-surface));\n border: 1px solid color-mix(in srgb, var(--mj-brand-primary) 20%, transparent);\n border-radius: 4px;\n transition: all 0.2s;\n cursor: pointer;\n}\n\n.action-link[_ngcontent-%COMP%] .btn-link[_ngcontent-%COMP%]:hover {\n background: color-mix(in srgb, var(--mj-brand-primary) 15%, var(--mj-bg-surface));\n border-color: color-mix(in srgb, var(--mj-brand-primary) 35%, transparent);\n text-decoration: none;\n}\n\n\n.json-toolbar[_ngcontent-%COMP%] {\n display: flex;\n justify-content: flex-end;\n gap: 8px;\n margin-bottom: 8px;\n}\n\n\n\n.details-grid[_ngcontent-%COMP%] {\n display: grid;\n grid-template-columns: repeat(auto-fit, minmax(250px, 1fr));\n gap: 20px;\n padding: 20px;\n}\n\n.detail-item[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n gap: 8px;\n}\n\n.detail-item.full-width[_ngcontent-%COMP%] {\n grid-column: 1 / -1;\n}\n\n.detail-item[_ngcontent-%COMP%] label[_ngcontent-%COMP%] {\n font-size: 12px;\n color: var(--mj-text-muted);\n text-transform: uppercase;\n letter-spacing: 0.5px;\n}\n\n.detail-item[_ngcontent-%COMP%] span[_ngcontent-%COMP%] {\n font-size: 14px;\n color: var(--mj-text-secondary);\n}\n\n.error-message[_ngcontent-%COMP%] {\n background: color-mix(in srgb, var(--mj-status-error) 15%, var(--mj-bg-surface));\n color: var(--mj-status-error);\n padding: 12px;\n border-radius: 8px;\n font-size: 13px;\n}\n\n.result-viewer[_ngcontent-%COMP%], \n.state-viewer[_ngcontent-%COMP%] {\n padding: 20px;\n max-height: 450px;\n overflow: auto;\n display: flex;\n flex-direction: column;\n}\n\n.result-viewer[_ngcontent-%COMP%] mj-code-editor[_ngcontent-%COMP%], \n.state-viewer[_ngcontent-%COMP%] mj-code-editor[_ngcontent-%COMP%] {\n flex: 1;\n min-height: 0;\n}\n\n\n\n.empty-state[_ngcontent-%COMP%], \n.loading-state[_ngcontent-%COMP%], \n.error-state[_ngcontent-%COMP%] {\n text-align: center;\n padding: 60px 20px;\n color: var(--mj-text-muted);\n}\n\n.empty-state[_ngcontent-%COMP%] i[_ngcontent-%COMP%], \n.loading-state[_ngcontent-%COMP%] i[_ngcontent-%COMP%], \n.error-state[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n opacity: 0.3;\n margin-bottom: 16px;\n}\n\n\n\n@media (max-width: 768px) {\n .header-content[_ngcontent-%COMP%] {\n flex-direction: column;\n gap: 16px;\n }\n \n .header-stats[_ngcontent-%COMP%] {\n flex-wrap: wrap;\n }\n \n .json-detail-pane[_ngcontent-%COMP%] {\n width: 100%;\n }\n \n .timeline[_ngcontent-%COMP%] {\n padding-left: 30px;\n }\n \n .timeline-marker[_ngcontent-%COMP%] {\n left: -25px;\n width: 32px;\n height: 32px;\n }\n \n .timeline-content[_ngcontent-%COMP%] {\n margin-left: 10px;\n }\n}\n\n\n\n.entity-link[_ngcontent-%COMP%] {\n color: var(--mj-brand-primary);\n text-decoration: none;\n transition: all 0.2s ease;\n border-bottom: 1px solid transparent;\n display: inline-block;\n}\n\n.entity-link[_ngcontent-%COMP%]:hover {\n color: var(--mj-brand-primary-hover);\n border-bottom-color: var(--mj-brand-primary-hover);\n}\n\n.entity-link[_ngcontent-%COMP%]:active {\n color: var(--mj-brand-primary-hover);\n}\n\n\n\n.detail-pane-tabs[_ngcontent-%COMP%] {\n display: flex;\n gap: 8px;\n margin: 8px 0 0 0;\n border-bottom: 1px solid var(--mj-border-default);\n padding: 0 16px;\n}\n\n.detail-tab[_ngcontent-%COMP%] {\n padding: 10px 16px;\n background: none;\n border: none;\n border-bottom: 3px solid transparent;\n color: var(--mj-text-muted);\n font-size: 14px;\n font-weight: 500;\n cursor: pointer;\n transition: all 0.2s ease;\n display: flex;\n align-items: center;\n gap: 6px;\n}\n\n.detail-tab[_ngcontent-%COMP%]:hover {\n color: var(--mj-text-secondary);\n background: color-mix(in srgb, var(--mj-text-primary) 2%, var(--mj-bg-surface));\n}\n\n.detail-tab.active[_ngcontent-%COMP%] {\n color: var(--mj-brand-primary);\n border-bottom-color: var(--mj-brand-primary);\n}\n\n.detail-tab[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n font-size: 14px;\n}\n\n\n\n.detail-pane-content[_ngcontent-%COMP%] {\n flex: 1;\n overflow-y: auto;\n min-height: 0;\n margin-bottom: 35px;\n}\n\n.detail-pane-content.with-tabs[_ngcontent-%COMP%] {\n \n\n margin-top: 0;\n}\n\n\n\n.step-payload-diff[_ngcontent-%COMP%] {\n height: 100%;\n overflow-y: auto;\n padding: 16px;\n}\n\n.step-payload-diff[_ngcontent-%COMP%] mj-deep-diff[_ngcontent-%COMP%] {\n display: block;\n height: 100%;\n}\n\n\n\n.detail-pane-content[_ngcontent-%COMP%]:not(.with-tabs) .json-viewer[_ngcontent-%COMP%] {\n margin-top: 16px;\n}\n\n\n\n.workflow-running-badge[_ngcontent-%COMP%] {\n display: inline-flex;\n align-items: center;\n gap: 6px;\n padding: 4px 12px;\n border-radius: var(--mj-radius-full, 999px);\n font-size: 12px;\n font-weight: 600;\n color: var(--mj-brand-primary);\n background: color-mix(in srgb, var(--mj-brand-primary) 12%, var(--mj-bg-surface));\n border: 1px solid color-mix(in srgb, var(--mj-brand-primary) 30%, transparent);\n white-space: nowrap;\n}"] }); }
1560
1679
  };
1561
1680
  MJAIAgentRunFormComponentExtended = __decorate([
1562
1681
  RegisterClass(BaseFormComponent, 'MJ: AI Agent Runs')
@@ -1564,7 +1683,7 @@ MJAIAgentRunFormComponentExtended = __decorate([
1564
1683
  export { MJAIAgentRunFormComponentExtended };
1565
1684
  (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(MJAIAgentRunFormComponentExtended, [{
1566
1685
  type: Component,
1567
- args: [{ standalone: false, selector: 'mj-ai-agent-run-form', template: "<div class=\"record-form-container ai-agent-run-form\">\n <div class=\"record-form\">\n <!-- Header -->\n <div class=\"header\">\n <div class=\"header-content\">\n <div class=\"header-left\">\n <div class=\"icon-wrapper\">\n @if (agent && agent.LogoURL) {\n <img [src]=\"agent.LogoURL\" [alt]=\"agent.Name || 'Agent'\" class=\"agent-logo\" />\n }\n @if (agent && !agent.LogoURL && agent.IconClass) {\n <i class=\"fas\" [ngClass]=\"agent.IconClass\"></i>\n }\n @if (!agent || (!agent.LogoURL && !agent.IconClass)) {\n <i class=\"fas fa-robot\"></i>\n }\n </div>\n <div class=\"header-info\">\n <h2>AI Agent Run</h2>\n <div class=\"meta-info\">\n @if (agent) {\n <span class=\"agent-name\">\n <a href=\"javascript:void(0)\" class=\"entity-link\" (click)=\"openEntityRecord('MJ: AI Agents', record.AgentID)\">\n {{ agent.Name }}\n </a>\n </span>\n }\n <span class=\"run-id\">{{ record.ID }}</span>\n @if (record.ParentRunID) {\n <span class=\"parent-run\">\n <i class=\"fas fa-level-up-alt\"></i>\n <a (click)=\"navigateToParentRun()\" class=\"parent-link\">Parent Run</a>\n </span>\n }\n <!-- Conversation Link Pill -->\n @if (record.ConversationID) {\n <span class=\"conversation-pill\" (click)=\"navigateToConversation()\" title=\"Open conversation in Chat app\">\n <i class=\"fas fa-comments\"></i>\n <span>Conversation</span>\n <i class=\"fas fa-external-link-alt pill-action\"></i>\n </span>\n }\n </div>\n </div>\n </div>\n <div class=\"header-right\">\n @if (record.PlanMode) {\n <div class=\"plan-mode-badge\" title=\"This run executed in Plan Mode \u2014 the agent presented a plan for human approval before executing actions or sub-agents\">\n <i class=\"fas fa-clipboard-check\"></i>\n Plan Mode\n </div>\n }\n <div class=\"status-badge\" [attr.data-status]=\"record.Status\">\n <i class=\"fas\" [ngClass]=\"getStatusIcon(record.Status || '')\"></i>\n {{ record.Status }}\n </div>\n <div class=\"header-actions\">\n <button class=\"btn-icon\" (click)=\"refreshData()\" title=\"Refresh\">\n <i class=\"fas fa-sync-alt\"></i>\n </button>\n </div>\n </div>\n </div>\n <div class=\"header-stats\">\n <div class=\"stat\">\n <span class=\"label\">Started</span>\n <span class=\"value\">{{ record.StartedAt | date:'medium' }}</span>\n </div>\n @if (record.CompletedAt) {\n <div class=\"stat\">\n <span class=\"label\">Completed</span>\n <span class=\"value\">{{ record.CompletedAt | date:'medium' }}</span>\n </div>\n }\n @if (record.CompletedAt) {\n <div class=\"stat\">\n <span class=\"label\">Duration</span>\n <span class=\"value\">{{ calculateDuration(record.StartedAt, record.CompletedAt) }}</span>\n </div>\n }\n @if (record.Success !== null && record.CompletedAt !== null) {\n <div class=\"stat\">\n <span class=\"label\">Result</span>\n <span class=\"value\" [class.success]=\"record.Success\" [class.error]=\"!record.Success\">\n {{ record.Success ? 'Success' : 'Failed' }}\n </span>\n </div>\n }\n @if (costMetrics && (costMetrics.totalTokensInput + costMetrics.totalTokensOutput) > 0) {\n <div class=\"stat\">\n <span class=\"label\">Tokens</span>\n @if (!costMetrics.isLoading) {\n <span class=\"value\">{{ (costMetrics.totalTokensInput + costMetrics.totalTokensOutput) | number:'1.0-0' }}</span>\n }\n @if (costMetrics.isLoading) {\n <span class=\"value loading\"><i class=\"fas fa-spinner fa-spin\"></i></span>\n }\n </div>\n }\n @if (costMetrics && costMetrics.totalCost > 0) {\n <div class=\"stat\">\n <span class=\"label\">Cost</span>\n @if (!costMetrics.isLoading) {\n <span class=\"value\">${{ costMetrics.totalCost | number:'1.2-4' }}</span>\n }\n @if (costMetrics.isLoading) {\n <span class=\"value loading\"><i class=\"fas fa-spinner fa-spin\"></i></span>\n }\n </div>\n }\n @if (record.EffortLevel) {\n <div class=\"stat\">\n <span class=\"label\">Effort Level</span>\n <span class=\"value\">{{ record.EffortLevel }}</span>\n </div>\n }\n </div>\n\n <!-- Configuration Bar (shown below header stats when ConfigurationID exists) -->\n @if (record.ConfigurationID) {\n <div class=\"configuration-bar\">\n <div class=\"config-item\">\n <i class=\"fas fa-cog\"></i>\n <div class=\"config-content\">\n <div class=\"config-label\">Configuration</div>\n <div class=\"config-value\">\n <a href=\"javascript:void(0)\" class=\"entity-link\" (click)=\"openEntityRecord('MJ: AI Configurations', record.ConfigurationID)\">\n {{ record.Configuration || 'Unknown' }}\n </a>\n </div>\n </div>\n </div>\n </div>\n }\n </div>\n\n <!-- Tabs -->\n <div class=\"tabs\">\n <button class=\"tab\" [class.active]=\"activeTab === 'timeline'\" (click)=\"changeTab('timeline')\">\n <i class=\"fas fa-stream\"></i> Timeline\n </button>\n <button class=\"tab\" [class.active]=\"activeTab === 'visualization'\" (click)=\"changeTab('visualization')\">\n <i class=\"fas fa-diagram-project\"></i> Visualization\n </button>\n <button class=\"tab\" [class.active]=\"activeTab === 'analytics'\" (click)=\"changeTab('analytics')\">\n <i class=\"fas fa-chart-line\"></i> Analytics\n </button>\n <button class=\"tab\" [class.active]=\"activeTab === 'details'\" (click)=\"changeTab('details')\">\n <i class=\"fas fa-info-circle\"></i> Details\n </button>\n </div>\n\n <!-- Content -->\n <div class=\"content-area\">\n <!-- Timeline Tab -->\n @if (activeTab === 'timeline') {\n <div class=\"tab-content\" style=\"height: 100%;\">\n <as-split direction=\"horizontal\" style=\"height: 100%;\">\n <!-- Timeline Pane -->\n <as-split-area [size]=\"selectedTimelineItem ? 55 : 100\">\n <mj-ai-agent-run-timeline\n [aiAgentRunId]=\"record.ID\"\n [dataHelper]=\"dataHelper\"\n (itemSelected)=\"selectTimelineItem($event)\"\n (navigateToEntity)=\"navigateToEntityRecord($event)\">\n </mj-ai-agent-run-timeline>\n </as-split-area>\n <!-- JSON Detail Pane -->\n @if (selectedTimelineItem) {\n <as-split-area [size]=\"45\">\n <mj-ai-agent-run-step-detail\n [selectedTimelineItem]=\"selectedTimelineItem\"\n (closePanel)=\"closeJsonPanel()\"\n (navigateToActionLog)=\"navigateToActionLog($event)\"\n (copyToClipboard)=\"copyToClipboard($event)\">\n </mj-ai-agent-run-step-detail>\n </as-split-area>\n }\n </as-split>\n </div>\n }\n\n <!-- Visualization Tab (animated flow views + static flowchart) -->\n @if (activeTab === 'visualization') {\n <div class=\"tab-content\" style=\"height: 100%;\">\n @if (visualizationLoaded) {\n <mj-ai-agent-run-flow\n [aiAgentRunId]=\"record.ID\"\n [dataHelper]=\"dataHelper\"\n [agentName]=\"agent?.Name || null\"\n [runStatus]=\"record.Status || ''\"\n [agentIconClass]=\"agent?.IconClass || null\"\n [agentLogoUrl]=\"agent?.LogoURL || null\">\n </mj-ai-agent-run-flow>\n }\n </div>\n }\n\n <!-- Analytics Tab -->\n @if (activeTab === 'analytics') {\n <div class=\"tab-content\" style=\"height: 100%;\">\n @if (analyticsLoaded) {\n <mj-ai-agent-run-analytics\n #analyticsComponent\n [agentRunId]=\"record.ID\"\n >\n </mj-ai-agent-run-analytics>\n }\n </div>\n }\n\n <!-- Details Tab -->\n @if (activeTab === 'details') {\n <div class=\"tab-content\">\n <mj-accordion-panel [Expanded]=\"true\">\n <ng-template mjAccordionTitle>\n <i class=\"fas fa-info-circle\"></i> General Information\n </ng-template>\n <div class=\"details-grid\">\n <div class=\"detail-item\">\n <label>Agent</label>\n <span>\n <a href=\"javascript:void(0)\" class=\"entity-link\" (click)=\"openEntityRecord('MJ: AI Agents', record.AgentID)\">\n {{ agent?.Name || 'N/A' }}\n </a>\n </span>\n </div>\n <div class=\"detail-item\">\n <label>Parent Run ID</label>\n <span>\n @if (record.ParentRunID) {\n <a href=\"javascript:void(0)\" class=\"entity-link\" (click)=\"openEntityRecord('MJ: AI Agent Runs', record.ParentRunID)\">\n {{ record.ParentRunID }}\n </a>\n }\n @if (!record.ParentRunID) {\n <span>None (Root)</span>\n }\n </span>\n </div>\n <div class=\"detail-item\">\n <label>Last Run ID</label>\n <span>\n @if (record.LastRunID) {\n <a href=\"javascript:void(0)\" class=\"entity-link\" (click)=\"openEntityRecord('MJ: AI Agent Runs', record.LastRunID)\">\n {{ record.LastRunID }}\n </a>\n }\n @if (!record.LastRunID) {\n <span>None</span>\n }\n </span>\n </div>\n <div class=\"detail-item\">\n <label>Conversation ID</label>\n <span>\n @if (record.ConversationID) {\n <a href=\"javascript:void(0)\" class=\"entity-link\" (click)=\"openEntityRecord('MJ: Conversations', record.ConversationID)\">\n {{ record.ConversationID }}\n </a>\n }\n @if (!record.ConversationID) {\n <span>N/A</span>\n }\n </span>\n </div>\n <div class=\"detail-item\">\n <label>User</label>\n <span>\n @if (record.UserID) {\n <a href=\"javascript:void(0)\" class=\"entity-link\" (click)=\"openEntityRecord('MJ: Users', record.UserID)\">\n {{ record.User || 'N/A' }}\n </a>\n }\n @if (!record.UserID) {\n <span>N/A</span>\n }\n </span>\n </div>\n </div>\n </mj-accordion-panel>\n <mj-accordion-panel [Expanded]=\"false\">\n <ng-template mjAccordionTitle>\n <i class=\"fas fa-cogs\"></i> Execution Settings\n </ng-template>\n <div class=\"details-grid\">\n <div class=\"detail-item\">\n <label>Override Model</label>\n <span>\n @if (record.OverrideModelID) {\n <a href=\"javascript:void(0)\" class=\"entity-link\" (click)=\"openEntityRecord('MJ: AI Models', record.OverrideModelID)\">\n {{ record.OverrideModel || 'N/A' }}\n </a>\n }\n @if (!record.OverrideModelID) {\n <span>N/A</span>\n }\n </span>\n </div>\n <div class=\"detail-item\">\n <label>Override Vendor</label>\n <span>\n @if (record.OverrideVendorID) {\n <a href=\"javascript:void(0)\" class=\"entity-link\" (click)=\"openEntityRecord('MJ: AI Vendors', record.OverrideVendorID)\">\n {{ record.OverrideVendor || 'N/A' }}\n </a>\n }\n @if (!record.OverrideVendorID) {\n <span>N/A</span>\n }\n </span>\n </div>\n <div class=\"detail-item\">\n <label>Verbose Logging</label>\n <span>{{ record.Verbose ? 'Yes' : 'No' }}</span>\n </div>\n </div>\n </mj-accordion-panel>\n <mj-accordion-panel [Expanded]=\"false\">\n <ng-template mjAccordionTitle>\n <i class=\"fas fa-tasks\"></i> Execution Status\n </ng-template>\n <div class=\"details-grid\">\n <div class=\"detail-item\">\n <label>Status</label>\n <span class=\"status-badge\" [attr.data-status]=\"record.Status\">\n {{ record.Status }}\n </span>\n </div>\n <div class=\"detail-item\">\n <label>Success</label>\n @if (record.Success === null) {\n <span>In Progress</span>\n }\n @else if (record.Success) {\n <span class=\"success\">Yes</span>\n }\n @else {\n <span class=\"error-message\">No</span>\n }\n </div>\n @if (record.Message) {\n <div class=\"detail-item full-width\">\n <label>Message</label>\n <div class=\"message\">{{ record.Message }}</div>\n </div>\n }\n @if (record.ErrorMessage) {\n <div class=\"detail-item full-width\">\n <label>Error Message</label>\n <div class=\"error-message\">{{ record.ErrorMessage }}</div>\n </div>\n }\n </div>\n </mj-accordion-panel>\n <mj-accordion-panel [Expanded]=\"false\">\n <ng-template mjAccordionTitle>\n <i class=\"fas fa-dollar-sign\"></i> Usage &amp; Cost\n </ng-template>\n <div class=\"details-grid\">\n <div class=\"detail-item\">\n <label>Total Tokens Used</label>\n <span>{{ record.TotalTokensUsed ? (record.TotalTokensUsed | number:'1.0-0') : 'N/A' }}</span>\n </div>\n <div class=\"detail-item\">\n <label>Prompt Tokens</label>\n <span>{{ record.TotalPromptTokensUsed ? (record.TotalPromptTokensUsed | number:'1.0-0') : 'N/A' }}</span>\n </div>\n <div class=\"detail-item\">\n <label>Completion Tokens</label>\n <span>{{ record.TotalCompletionTokensUsed ? (record.TotalCompletionTokensUsed | number:'1.0-0') : 'N/A' }}</span>\n </div>\n <div class=\"detail-item\">\n <label>Total Cost</label>\n <span>{{ record.TotalCost != null ? ('$' + (record.TotalCost | number:'1.2-4')) : 'N/A' }}</span>\n </div>\n <div class=\"detail-item\">\n <label>Total Prompt Iterations</label>\n <span>{{ record.TotalPromptIterations != null ? (record.TotalPromptIterations | number:'1.0-0') : 'N/A' }}</span>\n </div>\n </div>\n </mj-accordion-panel>\n @if (record.Result) {\n <mj-accordion-panel [Expanded]=\"false\">\n <ng-template mjAccordionTitle>\n <i class=\"fas fa-code\"></i> Result\n </ng-template>\n <div class=\"result-viewer\">\n @if (isParsingComplete) {\n <mj-code-editor\n [ngModel]=\"parsedResult\"\n [language]=\"'json'\"\n [readonly]=\"true\"\n style=\"height: 300px; width: 100%;\">\n </mj-code-editor>\n } @else {\n <div style=\"padding: 20px; text-align: center; color: var(--mj-text-muted);\">\n <i class=\"fas fa-spinner fa-spin\"></i> Loading result data...\n </div>\n }\n </div>\n </mj-accordion-panel>\n }\n @if (record.StartingPayload) {\n <mj-accordion-panel [Expanded]=\"false\">\n <ng-template mjAccordionTitle>\n <i class=\"fas fa-upload\"></i> Starting Payload\n </ng-template>\n <div class=\"result-viewer\">\n @if (isParsingComplete) {\n <mj-code-editor\n [ngModel]=\"parsedStartingPayload\"\n [language]=\"'json'\"\n [readonly]=\"true\"\n style=\"height: 300px; width: 100%;\">\n </mj-code-editor>\n } @else {\n <div style=\"padding: 20px; text-align: center; color: var(--mj-text-muted);\">\n <i class=\"fas fa-spinner fa-spin\"></i> Loading payload data...\n </div>\n }\n </div>\n </mj-accordion-panel>\n }\n @if (record.Data) {\n <mj-accordion-panel [Expanded]=\"false\">\n <ng-template mjAccordionTitle>\n <i class=\"fas fa-database\"></i> Execution Data\n </ng-template>\n <div class=\"result-viewer\">\n @if (isParsingComplete) {\n <mj-code-editor\n [ngModel]=\"parsedData\"\n [language]=\"'json'\"\n [readonly]=\"true\"\n style=\"height: 300px; width: 100%;\">\n </mj-code-editor>\n } @else {\n <div style=\"padding: 20px; text-align: center; color: var(--mj-text-muted);\">\n <i class=\"fas fa-spinner fa-spin\"></i> Loading execution data...\n </div>\n }\n </div>\n </mj-accordion-panel>\n }\n @if (record.FinalPayload) {\n <mj-accordion-panel [Expanded]=\"false\">\n <ng-template mjAccordionTitle>\n <i class=\"fas fa-download\"></i> Final Payload\n </ng-template>\n <div class=\"result-viewer\">\n @if (isParsingComplete) {\n <mj-code-editor\n [ngModel]=\"parsedFinalPayload\"\n [language]=\"'json'\"\n [readonly]=\"true\"\n style=\"height: 300px; width: 100%;\">\n </mj-code-editor>\n } @else {\n <div style=\"padding: 20px; text-align: center; color: var(--mj-text-muted);\">\n <i class=\"fas fa-spinner fa-spin\"></i> Loading final payload data...\n </div>\n }\n </div>\n </mj-accordion-panel>\n }\n @if (showPayloadDiff) {\n <mj-accordion-panel [Expanded]=\"false\">\n <ng-template mjAccordionTitle>\n <i class=\"fas fa-code-compare\"></i> Payload Diff\n </ng-template>\n <div style=\"padding: 20px; background: var(--mj-bg-surface-card);\">\n @if (isParsingComplete) {\n <mj-deep-diff\n [oldValue]=\"startingPayloadObject\"\n [newValue]=\"finalPayloadObject\"\n [title]=\"''\"\n [showSummary]=\"true\"\n [showUnchanged]=\"false\"\n [expandAll]=\"false\"\n [maxDepth]=\"10\"\n [maxStringLength]=\"200\"\n [treatNullAsUndefined]=\"true\">\n </mj-deep-diff>\n } @else {\n <div style=\"padding: 20px; text-align: center; color: var(--mj-text-muted);\">\n <i class=\"fas fa-spinner fa-spin\"></i> Loading payload diff...\n </div>\n }\n </div>\n </mj-accordion-panel>\n }\n </div>\n }\n</div>\n</div>\n</div>", styles: [".ai-agent-run-form {\n height: 100%;\n display: flex;\n flex-direction: column;\n overflow: hidden;\n}\n\n.record-form-container.ai-agent-run-form > .record-form,\n.ai-agent-run-form > .record-form {\n display: flex;\n flex-direction: column;\n height: 100%;\n min-height: 0;\n}\n\n/* Header Styles */\n.header {\n background: var(--mj-bg-surface);\n border-bottom: 1px solid var(--mj-border-default);\n padding: 20px;\n box-shadow: var(--mj-shadow-sm);\n flex-shrink: 0;\n}\n\n.header-content {\n display: flex;\n justify-content: space-between;\n align-items: flex-start;\n margin-bottom: 16px;\n}\n\n.header-left {\n display: flex;\n align-items: center;\n gap: 16px;\n}\n\n.icon-wrapper {\n width: 48px;\n height: 48px;\n background: var(--mj-brand-primary);\n border-radius: 12px;\n display: flex;\n align-items: center;\n justify-content: center;\n color: var(--mj-text-inverse);\n font-size: 20px;\n overflow: hidden;\n}\n\n.agent-logo {\n width: 100%;\n height: 100%;\n object-fit: cover;\n}\n\n.header-info h2 {\n margin: 0;\n font-size: 24px;\n font-weight: 600;\n color: var(--mj-text-primary);\n}\n\n.meta-info {\n display: flex;\n gap: 12px;\n margin-top: 4px;\n font-size: 14px;\n color: var(--mj-text-muted);\n}\n\n.parent-run {\n display: flex;\n align-items: center;\n gap: 6px;\n}\n\n.parent-link {\n color: var(--mj-status-error);\n text-decoration: none;\n cursor: pointer;\n transition: color 0.2s;\n}\n\n.parent-link:hover {\n color: var(--mj-status-error);\n text-decoration: underline;\n}\n\n.agent-name {\n font-weight: 500;\n color: var(--mj-text-secondary);\n}\n\n.run-id {\n font-family: monospace;\n font-size: 12px;\n opacity: 0.7;\n}\n\n/* Conversation Link Pill */\n.conversation-pill {\n display: inline-flex;\n align-items: center;\n gap: 6px;\n padding: 4px 10px;\n background: color-mix(in srgb, var(--mj-brand-primary) 8%, var(--mj-bg-surface));\n border: 1px solid color-mix(in srgb, var(--mj-brand-primary) 20%, transparent);\n border-radius: 16px;\n font-size: 12px;\n font-weight: 500;\n color: var(--mj-brand-primary);\n cursor: pointer;\n transition: all 0.2s ease;\n white-space: nowrap;\n}\n\n.conversation-pill:hover {\n background: color-mix(in srgb, var(--mj-brand-primary) 15%, var(--mj-bg-surface));\n border-color: color-mix(in srgb, var(--mj-brand-primary) 40%, transparent);\n transform: translateY(-1px);\n box-shadow: 0 2px 8px color-mix(in srgb, var(--mj-brand-primary) 15%, transparent);\n}\n\n.conversation-pill i:first-child {\n font-size: 11px;\n opacity: 0.9;\n}\n\n.conversation-pill .pill-action {\n font-size: 9px;\n opacity: 0.6;\n transition: opacity 0.2s ease;\n}\n\n.conversation-pill:hover .pill-action {\n opacity: 1;\n}\n\n.header-right {\n display: flex;\n align-items: center;\n gap: 16px;\n}\n\n.status-badge {\n padding: 6px 16px;\n border-radius: 20px;\n font-size: 13px;\n font-weight: 600;\n text-transform: uppercase;\n letter-spacing: 0.5px;\n display: inline-flex;\n align-items: center;\n gap: 6px;\n}\n\n.status-badge[data-status=\"Running\"] {\n background: color-mix(in srgb, var(--mj-status-info) 15%, var(--mj-bg-surface));\n color: var(--mj-status-info);\n}\n\n.status-badge[data-status=\"Completed\"] {\n background: color-mix(in srgb, var(--mj-status-success) 15%, var(--mj-bg-surface));\n color: var(--mj-status-success);\n}\n\n.status-badge[data-status=\"Failed\"] {\n background: color-mix(in srgb, var(--mj-status-error) 15%, var(--mj-bg-surface));\n color: var(--mj-status-error);\n}\n\n.status-badge[data-status=\"Cancelled\"] {\n background: color-mix(in srgb, var(--mj-status-warning) 15%, var(--mj-bg-surface));\n color: var(--mj-status-warning);\n}\n\n.status-badge[data-status=\"Paused\"] {\n background: var(--mj-bg-surface-sunken);\n color: var(--mj-text-secondary);\n}\n\n.status-badge.small {\n padding: 4px 12px;\n font-size: 11px;\n}\n\n/* Plan Mode chip \u2014 shown next to the status badge when AIAgentRun.PlanMode = 1 */\n.plan-mode-badge {\n padding: 6px 16px;\n border-radius: 20px;\n font-size: 13px;\n font-weight: 600;\n text-transform: uppercase;\n letter-spacing: 0.5px;\n display: inline-flex;\n align-items: center;\n gap: 6px;\n background: color-mix(in srgb, var(--mj-brand-primary) 12%, var(--mj-bg-surface));\n color: var(--mj-brand-primary);\n border: 1px solid color-mix(in srgb, var(--mj-brand-primary) 30%, transparent);\n}\n\n.header-actions {\n display: flex;\n gap: 8px;\n}\n\n.btn-icon {\n width: 36px;\n height: 36px;\n border: 1px solid var(--mj-border-default);\n background: var(--mj-bg-surface);\n border-radius: 8px;\n display: flex;\n align-items: center;\n justify-content: center;\n cursor: pointer;\n transition: all 0.2s ease;\n color: var(--mj-text-muted);\n}\n\n.btn-icon:hover {\n background: var(--mj-bg-surface-sunken);\n border-color: var(--mj-border-strong);\n color: var(--mj-text-secondary);\n}\n\n.header-stats {\n display: flex;\n gap: 24px;\n padding-top: 12px;\n border-top: 1px solid var(--mj-border-default);\n}\n\n/* Configuration Bar */\n.configuration-bar {\n display: flex;\n gap: 24px;\n padding-top: 16px;\n border-top: 1px solid var(--mj-border-default);\n margin-top: 16px;\n}\n\n.config-item {\n display: flex;\n align-items: center;\n gap: 12px;\n}\n\n.config-item > i {\n font-size: 1.2em;\n color: var(--mj-text-muted);\n width: 24px;\n text-align: center;\n}\n\n.config-content {\n display: flex;\n flex-direction: column;\n}\n\n.config-label {\n font-size: 12px;\n color: var(--mj-text-muted);\n text-transform: uppercase;\n letter-spacing: 0.5px;\n}\n\n.config-value {\n font-size: 14px;\n font-weight: 600;\n color: var(--mj-text-primary);\n}\n\n.config-value .entity-link {\n color: var(--mj-brand-primary);\n text-decoration: none;\n cursor: pointer;\n transition: color 0.2s;\n}\n\n.config-value .entity-link:hover {\n color: var(--mj-brand-primary-hover);\n text-decoration: underline;\n}\n\n.stat {\n display: flex;\n flex-direction: column;\n gap: 4px;\n}\n\n.stat .label {\n font-size: 12px;\n color: var(--mj-text-muted);\n text-transform: uppercase;\n letter-spacing: 0.5px;\n}\n\n.stat .value {\n font-size: 14px;\n font-weight: 500;\n color: var(--mj-text-secondary);\n}\n\n.stat .value.success {\n color: var(--mj-status-success);\n}\n\n.stat .value.error {\n color: var(--mj-status-error);\n}\n\n/* Tabs */\n.tabs {\n display: flex;\n border-bottom: 1px solid var(--mj-border-default);\n background: var(--mj-bg-surface-sunken);\n flex-shrink: 0;\n}\n\n.tab {\n padding: 12px 24px;\n border: none;\n background: transparent;\n cursor: pointer;\n font-size: 14px;\n font-weight: 500;\n color: var(--mj-text-muted);\n display: flex;\n align-items: center;\n gap: 8px;\n transition: all 0.2s ease;\n border-bottom: 3px solid transparent;\n}\n\n.tab:hover {\n color: var(--mj-text-secondary);\n background: color-mix(in srgb, var(--mj-text-primary) 2%, var(--mj-bg-surface));\n}\n\n.tab.active {\n color: var(--mj-brand-primary);\n border-bottom-color: var(--mj-brand-primary);\n background: var(--mj-bg-surface);\n}\n\n/* Content Area */\n.content-area {\n position: relative;\n flex: 1;\n min-height: 0;\n overflow: auto;\n background: var(--mj-bg-surface);\n}\n\n.tab-content {\n height: 100%;\n min-height: 0;\n overflow: auto;\n}\n\n/* Details tab accordion panels */\n.tab-content mj-accordion-panel {\n display: block;\n margin-bottom: 8px;\n}\n\n/* JSON Detail Pane */\n.json-detail-pane {\n height: 100%;\n display: flex;\n flex-direction: column;\n background: var(--mj-bg-surface-sunken);\n border-left: 1px solid var(--mj-border-default);\n}\n\n.json-pane-header {\n display: flex;\n justify-content: space-between;\n align-items: center;\n padding: 16px 20px;\n background: var(--mj-bg-surface);\n border-bottom: 1px solid var(--mj-border-default);\n box-shadow: var(--mj-shadow-sm);\n}\n\n.json-pane-header h3 {\n margin: 0;\n font-size: 16px;\n font-weight: 600;\n color: var(--mj-text-primary);\n display: flex;\n align-items: center;\n gap: 8px;\n}\n\n.json-pane-header h3 i {\n color: var(--mj-text-muted);\n font-size: 14px;\n}\n\n.json-pane-content {\n flex: 1;\n display: flex;\n flex-direction: column;\n overflow: auto;\n padding: 16px;\n}\n\n.json-meta {\n display: flex;\n gap: 20px;\n margin-bottom: 16px;\n flex-wrap: wrap;\n}\n\n.json-meta .meta-item {\n display: flex;\n flex-direction: column;\n gap: 4px;\n}\n\n.json-meta .meta-item label {\n font-size: 11px;\n text-transform: uppercase;\n color: var(--mj-text-muted);\n font-weight: 600;\n letter-spacing: 0.5px;\n}\n\n.json-meta .meta-item span {\n font-size: 14px;\n color: var(--mj-text-primary);\n font-weight: 500;\n}\n\n.action-link {\n margin-bottom: 12px;\n}\n\n.action-link .btn-link {\n background: none;\n border: none;\n color: var(--mj-brand-primary);\n font-size: 14px;\n cursor: pointer;\n padding: 6px 12px;\n border-radius: 4px;\n transition: all 0.2s;\n display: inline-flex;\n align-items: center;\n gap: 6px;\n}\n\n.action-link .btn-link:hover {\n background: color-mix(in srgb, var(--mj-brand-primary) 8%, var(--mj-bg-surface));\n color: var(--mj-brand-primary-hover);\n}\n\n.json-viewer {\n flex: 1;\n display: flex;\n flex-direction: column;\n background: var(--mj-bg-surface);\n border-radius: 8px;\n border: 1px solid var(--mj-border-default);\n overflow: auto;\n padding: 20px;\n gap: 10px;\n min-height: 0;\n margin-bottom: 45px;\n}\n\n\n.json-toolbar {\n display: flex;\n justify-content: flex-end;\n padding: 8px 12px;\n background: var(--mj-bg-surface-sunken);\n border-bottom: 1px solid var(--mj-border-default);\n}\n\n/* Timeline Styles */\n.timeline-container {\n height: 100%;\n overflow-y: auto;\n padding: 20px;\n}\n\n.timeline-container > .timeline {\n max-width: 900px;\n margin: 0 auto;\n}\n\n.timeline {\n position: relative;\n padding-left: 40px;\n}\n\n.timeline::before {\n content: '';\n position: absolute;\n left: 20px;\n top: 0;\n bottom: 0;\n width: 2px;\n background: var(--mj-border-default);\n}\n\n.timeline-item {\n position: relative;\n margin-bottom: 24px;\n cursor: pointer;\n transition: all 0.2s ease;\n}\n\n.timeline-item:hover {\n transform: translateX(4px);\n}\n\n.timeline-item.selected {\n transform: translateX(8px);\n}\n\n.timeline-item.selected .timeline-content {\n background: color-mix(in srgb, var(--mj-brand-primary) 8%, var(--mj-bg-surface));\n border-color: var(--mj-brand-primary);\n}\n\n.timeline-marker {\n position: absolute;\n left: -30px;\n top: 0;\n width: 40px;\n height: 40px;\n border-radius: 50%;\n display: flex;\n align-items: center;\n justify-content: center;\n background: var(--mj-bg-surface);\n border: 3px solid var(--mj-border-default);\n z-index: 1;\n transition: all 0.2s ease;\n}\n\n.timeline-marker[data-color=\"success\"] {\n border-color: var(--mj-status-success);\n color: var(--mj-status-success);\n}\n\n.timeline-marker[data-color=\"error\"] {\n border-color: var(--mj-status-error);\n color: var(--mj-status-error);\n}\n\n.timeline-marker[data-color=\"info\"] {\n border-color: var(--mj-status-info);\n color: var(--mj-status-info);\n}\n\n.timeline-marker[data-color=\"warning\"] {\n border-color: var(--mj-status-warning);\n color: var(--mj-status-warning);\n}\n\n.timeline-marker[data-color=\"secondary\"] {\n border-color: var(--mj-text-muted);\n color: var(--mj-text-muted);\n}\n\n.timeline-marker.small {\n width: 28px;\n height: 28px;\n font-size: 12px;\n}\n\n.timeline-content {\n background: var(--mj-bg-surface);\n border: 1px solid var(--mj-border-default);\n border-radius: 12px;\n padding: 16px 20px;\n margin-left: 20px;\n box-shadow: var(--mj-shadow-sm);\n transition: all 0.2s ease;\n}\n\n.timeline-header {\n display: flex;\n justify-content: space-between;\n align-items: center;\n margin-bottom: 8px;\n}\n\n.timeline-header h4 {\n margin: 0;\n font-size: 16px;\n font-weight: 600;\n color: var(--mj-text-primary);\n}\n\n.timeline-header h5 {\n margin: 0;\n font-size: 14px;\n font-weight: 600;\n color: var(--mj-text-secondary);\n}\n\n.timeline-time {\n font-size: 12px;\n color: var(--mj-text-muted);\n font-family: monospace;\n}\n\n.timeline-subtitle {\n font-size: 13px;\n color: var(--mj-text-muted);\n margin-bottom: 8px;\n}\n\n.timeline-meta {\n display: flex;\n gap: 16px;\n font-size: 12px;\n color: var(--mj-text-muted);\n}\n\n.timeline-meta .status {\n display: inline-flex;\n align-items: center;\n gap: 6px;\n padding: 2px 8px;\n border-radius: 12px;\n font-size: 11px;\n font-weight: 600;\n text-transform: uppercase;\n letter-spacing: 0.5px;\n}\n\n.timeline-meta .status[data-status=\"Completed\"] {\n background: color-mix(in srgb, var(--mj-status-success) 15%, var(--mj-bg-surface));\n color: var(--mj-status-success);\n}\n\n.timeline-meta .status[data-status=\"Failed\"] {\n background: color-mix(in srgb, var(--mj-status-error) 15%, var(--mj-bg-surface));\n color: var(--mj-status-error);\n}\n\n.timeline-meta .status[data-status=\"Running\"] {\n background: color-mix(in srgb, var(--mj-status-info) 15%, var(--mj-bg-surface));\n color: var(--mj-status-info);\n}\n\n.timeline-meta .status[data-status=\"Paused\"] {\n background: var(--mj-bg-surface-sunken);\n color: var(--mj-text-secondary);\n}\n\n.duration {\n display: flex;\n align-items: center;\n gap: 4px;\n}\n\n.timeline-actions {\n position: absolute;\n right: 20px;\n top: 50%;\n transform: translateY(-50%);\n display: flex;\n align-items: center;\n gap: 8px;\n}\n\n.btn-link {\n background: none;\n border: none;\n color: var(--mj-brand-primary);\n cursor: pointer;\n font-size: 12px;\n display: flex;\n align-items: center;\n gap: 4px;\n padding: 4px 8px;\n border-radius: 4px;\n transition: all 0.2s ease;\n}\n\n.btn-link:hover {\n background: color-mix(in srgb, var(--mj-brand-primary) 10%, var(--mj-bg-surface));\n}\n\n.btn-expand {\n width: 24px;\n height: 24px;\n border: 1px solid var(--mj-border-default);\n background: var(--mj-bg-surface);\n border-radius: 4px;\n display: flex;\n align-items: center;\n justify-content: center;\n cursor: pointer;\n transition: all 0.2s ease;\n color: var(--mj-text-muted);\n font-size: 12px;\n}\n\n.btn-expand:hover {\n background: var(--mj-bg-surface-sunken);\n border-color: var(--mj-border-strong);\n color: var(--mj-text-secondary);\n}\n\n/* Timeline Children */\n.timeline-children {\n position: relative;\n margin-top: 12px;\n margin-bottom: 12px;\n}\n\n.timeline-children::before {\n content: '';\n position: absolute;\n left: -10px;\n top: -12px;\n bottom: 0;\n width: 2px;\n background: var(--mj-border-default);\n}\n\n.child-item {\n margin-bottom: 12px;\n}\n\n.child-item .timeline-content {\n background: var(--mj-bg-surface-sunken);\n border-color: var(--mj-border-default);\n}\n\n/* Sub-run timeline styles */\n.sub-run-timeline {\n background: color-mix(in srgb, var(--mj-brand-primary) 2%, var(--mj-bg-surface));\n border-left: 2px solid color-mix(in srgb, var(--mj-brand-primary) 20%, transparent);\n margin-left: 20px;\n padding-left: 20px;\n margin-top: 8px;\n margin-bottom: 8px;\n}\n\n.sub-run-item .timeline-marker {\n border-width: 2px;\n}\n\n.sub-run-item .timeline-content {\n transition: all 0.2s ease;\n}\n\n/* JSON Detail Pane (in splitter) */\n.json-detail-pane {\n height: 100%;\n display: flex;\n flex-direction: column;\n background: var(--mj-bg-surface);\n border-left: 1px solid var(--mj-border-default);\n}\n\n.json-pane-header {\n padding: 16px 20px;\n background: var(--mj-bg-surface-sunken);\n border-bottom: 1px solid var(--mj-border-default);\n display: flex;\n justify-content: space-between;\n align-items: center;\n flex-shrink: 0;\n}\n\n.json-pane-header h3 {\n margin: 0;\n font-size: 16px;\n color: var(--mj-text-primary);\n display: flex;\n align-items: center;\n gap: 10px;\n font-weight: 600;\n}\n\n.json-pane-content {\n flex: 1;\n overflow-y: auto;\n display: flex;\n flex-direction: column;\n}\n\n.json-meta {\n padding: 16px 20px;\n border-bottom: 1px solid var(--mj-border-default);\n display: flex;\n gap: 20px;\n flex-wrap: wrap;\n flex-shrink: 0;\n}\n\n.json-meta .meta-item {\n display: flex;\n flex-direction: column;\n gap: 4px;\n}\n\n.json-meta label {\n font-size: 11px;\n color: var(--mj-text-muted);\n text-transform: uppercase;\n letter-spacing: 0.5px;\n}\n\n.json-meta span {\n font-size: 14px;\n color: var(--mj-text-primary);\n font-weight: 500;\n}\n\n.action-link {\n padding: 12px 20px;\n border-bottom: 1px solid var(--mj-border-default);\n flex-shrink: 0;\n}\n\n.action-link .btn-link {\n display: inline-flex;\n align-items: center;\n gap: 6px;\n color: var(--mj-brand-primary);\n text-decoration: none;\n font-size: 14px;\n padding: 8px 12px;\n background: color-mix(in srgb, var(--mj-brand-primary) 8%, var(--mj-bg-surface));\n border: 1px solid color-mix(in srgb, var(--mj-brand-primary) 20%, transparent);\n border-radius: 4px;\n transition: all 0.2s;\n cursor: pointer;\n}\n\n.action-link .btn-link:hover {\n background: color-mix(in srgb, var(--mj-brand-primary) 15%, var(--mj-bg-surface));\n border-color: color-mix(in srgb, var(--mj-brand-primary) 35%, transparent);\n text-decoration: none;\n}\n\n\n.json-toolbar {\n display: flex;\n justify-content: flex-end;\n gap: 8px;\n margin-bottom: 8px;\n}\n\n/* Details Tab */\n.details-grid {\n display: grid;\n grid-template-columns: repeat(auto-fit, minmax(250px, 1fr));\n gap: 20px;\n padding: 20px;\n}\n\n.detail-item {\n display: flex;\n flex-direction: column;\n gap: 8px;\n}\n\n.detail-item.full-width {\n grid-column: 1 / -1;\n}\n\n.detail-item label {\n font-size: 12px;\n color: var(--mj-text-muted);\n text-transform: uppercase;\n letter-spacing: 0.5px;\n}\n\n.detail-item span {\n font-size: 14px;\n color: var(--mj-text-secondary);\n}\n\n.error-message {\n background: color-mix(in srgb, var(--mj-status-error) 15%, var(--mj-bg-surface));\n color: var(--mj-status-error);\n padding: 12px;\n border-radius: 8px;\n font-size: 13px;\n}\n\n.result-viewer,\n.state-viewer {\n padding: 20px;\n max-height: 450px;\n overflow: auto;\n display: flex;\n flex-direction: column;\n}\n\n.result-viewer mj-code-editor,\n.state-viewer mj-code-editor {\n flex: 1;\n min-height: 0;\n}\n\n/* Empty States */\n.empty-state,\n.loading-state,\n.error-state {\n text-align: center;\n padding: 60px 20px;\n color: var(--mj-text-muted);\n}\n\n.empty-state i,\n.loading-state i,\n.error-state i {\n opacity: 0.3;\n margin-bottom: 16px;\n}\n\n/* Responsive */\n@media (max-width: 768px) {\n .header-content {\n flex-direction: column;\n gap: 16px;\n }\n \n .header-stats {\n flex-wrap: wrap;\n }\n \n .json-detail-pane {\n width: 100%;\n }\n \n .timeline {\n padding-left: 30px;\n }\n \n .timeline-marker {\n left: -25px;\n width: 32px;\n height: 32px;\n }\n \n .timeline-content {\n margin-left: 10px;\n }\n}\n\n/* Entity Link Styles */\n.entity-link {\n color: var(--mj-brand-primary);\n text-decoration: none;\n transition: all 0.2s ease;\n border-bottom: 1px solid transparent;\n display: inline-block;\n}\n\n.entity-link:hover {\n color: var(--mj-brand-primary-hover);\n border-bottom-color: var(--mj-brand-primary-hover);\n}\n\n.entity-link:active {\n color: var(--mj-brand-primary-hover);\n}\n\n/* Detail Pane Tabs */\n.detail-pane-tabs {\n display: flex;\n gap: 8px;\n margin: 8px 0 0 0;\n border-bottom: 1px solid var(--mj-border-default);\n padding: 0 16px;\n}\n\n.detail-tab {\n padding: 10px 16px;\n background: none;\n border: none;\n border-bottom: 3px solid transparent;\n color: var(--mj-text-muted);\n font-size: 14px;\n font-weight: 500;\n cursor: pointer;\n transition: all 0.2s ease;\n display: flex;\n align-items: center;\n gap: 6px;\n}\n\n.detail-tab:hover {\n color: var(--mj-text-secondary);\n background: color-mix(in srgb, var(--mj-text-primary) 2%, var(--mj-bg-surface));\n}\n\n.detail-tab.active {\n color: var(--mj-brand-primary);\n border-bottom-color: var(--mj-brand-primary);\n}\n\n.detail-tab i {\n font-size: 14px;\n}\n\n/* Detail Pane Content */\n.detail-pane-content {\n flex: 1;\n overflow-y: auto;\n min-height: 0;\n margin-bottom: 35px;\n}\n\n.detail-pane-content.with-tabs {\n /* When tabs are shown, content starts right after tabs */\n margin-top: 0;\n}\n\n/* Step Payload Diff */\n.step-payload-diff {\n height: 100%;\n overflow-y: auto;\n padding: 16px;\n}\n\n.step-payload-diff mj-deep-diff {\n display: block;\n height: 100%;\n}\n\n/* JSON Viewer adjustments when no tabs */\n.detail-pane-content:not(.with-tabs) .json-viewer {\n margin-top: 16px;\n}"] }]
1686
+ args: [{ standalone: false, selector: 'mj-ai-agent-run-form', template: "<div class=\"record-form-container ai-agent-run-form\">\n <div class=\"record-form\">\n <!-- Header -->\n <div class=\"header\">\n <div class=\"header-content\">\n <div class=\"header-left\">\n <div class=\"icon-wrapper\">\n @if (agent && agent.LogoURL) {\n <img [src]=\"agent.LogoURL\" [alt]=\"agent.Name || 'Agent'\" class=\"agent-logo\" />\n }\n @if (agent && !agent.LogoURL && agent.IconClass) {\n <i class=\"fas\" [ngClass]=\"agent.IconClass\"></i>\n }\n @if (!agent || (!agent.LogoURL && !agent.IconClass)) {\n <i class=\"fas fa-robot\"></i>\n }\n </div>\n <div class=\"header-info\">\n <h2>AI Agent Run</h2>\n <div class=\"meta-info\">\n @if (agent) {\n <span class=\"agent-name\">\n <a href=\"javascript:void(0)\" class=\"entity-link\" (click)=\"openEntityRecord('MJ: AI Agents', record.AgentID)\">\n {{ agent.Name }}\n </a>\n </span>\n }\n <span class=\"run-id\">{{ record.ID }}</span>\n @if (record.ParentRunID) {\n <span class=\"parent-run\">\n <i class=\"fas fa-level-up-alt\"></i>\n <a (click)=\"navigateToParentRun()\" class=\"parent-link\">Parent Run</a>\n </span>\n }\n <!-- Conversation Link Pill -->\n @if (record.ConversationID) {\n <span class=\"conversation-pill\" (click)=\"navigateToConversation()\" title=\"Open conversation in Chat app\">\n <i class=\"fas fa-comments\"></i>\n <span>Conversation</span>\n <i class=\"fas fa-external-link-alt pill-action\"></i>\n </span>\n }\n </div>\n </div>\n </div>\n <div class=\"header-right\">\n @if (record.PlanMode) {\n <div class=\"plan-mode-badge\" title=\"This run executed in Plan Mode \u2014 the agent presented a plan for human approval before executing actions or sub-agents\">\n <i class=\"fas fa-clipboard-check\"></i>\n Plan Mode\n </div>\n }\n <div class=\"status-badge\" [attr.data-status]=\"record.Status\">\n <i class=\"fas\" [ngClass]=\"getStatusIcon(record.Status || '')\"></i>\n {{ record.Status }}\n </div>\n <!-- A workflow outlives the run that submitted it, so a Completed run can still have work\n in flight. Said beside the status rather than instead of it \u2014 both are true. -->\n @if (WorkflowStillRunning) {\n <div class=\"workflow-running-badge\"\n title=\"This run submitted a workflow that runs on the dispatcher. The run finished when the workflow was submitted; the workflow itself is still going. This view refreshes on its own.\">\n <i class=\"fas fa-circle-notch fa-spin\"></i>\n Workflow still running\n </div>\n }\n <div class=\"header-actions\">\n <button class=\"btn-icon\" (click)=\"refreshData()\" title=\"Refresh\">\n <i class=\"fas fa-sync-alt\"></i>\n </button>\n </div>\n </div>\n </div>\n <div class=\"header-stats\">\n <div class=\"stat\">\n <span class=\"label\">Started</span>\n <span class=\"value\">{{ record.StartedAt | date:'medium' }}</span>\n </div>\n @if (record.CompletedAt) {\n <div class=\"stat\">\n <span class=\"label\">Completed</span>\n <span class=\"value\">{{ record.CompletedAt | date:'medium' }}</span>\n </div>\n }\n @if (record.CompletedAt) {\n <div class=\"stat\">\n <span class=\"label\">Duration</span>\n <span class=\"value\">{{ calculateDuration(record.StartedAt, record.CompletedAt) }}</span>\n </div>\n }\n @if (record.Success !== null && record.CompletedAt !== null) {\n <div class=\"stat\">\n <span class=\"label\">Result</span>\n <span class=\"value\" [class.success]=\"record.Success\" [class.error]=\"!record.Success\">\n {{ record.Success ? 'Success' : 'Failed' }}\n </span>\n </div>\n }\n @if (costMetrics && (costMetrics.totalTokensInput + costMetrics.totalTokensOutput) > 0) {\n <div class=\"stat\">\n <span class=\"label\">Tokens</span>\n @if (!costMetrics.isLoading) {\n <span class=\"value\">{{ (costMetrics.totalTokensInput + costMetrics.totalTokensOutput) | number:'1.0-0' }}</span>\n }\n @if (costMetrics.isLoading) {\n <span class=\"value loading\"><i class=\"fas fa-spinner fa-spin\"></i></span>\n }\n </div>\n }\n @if (costMetrics && costMetrics.totalCost > 0) {\n <div class=\"stat\">\n <span class=\"label\">Cost</span>\n @if (!costMetrics.isLoading) {\n <span class=\"value\">${{ costMetrics.totalCost | number:'1.2-4' }}</span>\n }\n @if (costMetrics.isLoading) {\n <span class=\"value loading\"><i class=\"fas fa-spinner fa-spin\"></i></span>\n }\n </div>\n }\n @if (record.EffortLevel) {\n <div class=\"stat\">\n <span class=\"label\">Effort Level</span>\n <span class=\"value\">{{ record.EffortLevel }}</span>\n </div>\n }\n </div>\n\n <!-- Configuration Bar (shown below header stats when ConfigurationID exists) -->\n @if (record.ConfigurationID) {\n <div class=\"configuration-bar\">\n <div class=\"config-item\">\n <i class=\"fas fa-cog\"></i>\n <div class=\"config-content\">\n <div class=\"config-label\">Configuration</div>\n <div class=\"config-value\">\n <a href=\"javascript:void(0)\" class=\"entity-link\" (click)=\"openEntityRecord('MJ: AI Configurations', record.ConfigurationID)\">\n {{ record.Configuration || 'Unknown' }}\n </a>\n </div>\n </div>\n </div>\n </div>\n }\n </div>\n\n <!-- Tabs -->\n <div class=\"tabs\">\n <button class=\"tab\" [class.active]=\"activeTab === 'timeline'\" (click)=\"changeTab('timeline')\">\n <i class=\"fas fa-stream\"></i> Timeline\n </button>\n <button class=\"tab\" [class.active]=\"activeTab === 'visualization'\" (click)=\"changeTab('visualization')\">\n <i class=\"fas fa-diagram-project\"></i> Visualization\n </button>\n <button class=\"tab\" [class.active]=\"activeTab === 'analytics'\" (click)=\"changeTab('analytics')\">\n <i class=\"fas fa-chart-line\"></i> Analytics\n </button>\n <button class=\"tab\" [class.active]=\"activeTab === 'details'\" (click)=\"changeTab('details')\">\n <i class=\"fas fa-info-circle\"></i> Details\n </button>\n </div>\n\n <!-- Content -->\n <div class=\"content-area\">\n <!-- Timeline Tab -->\n @if (activeTab === 'timeline') {\n <div class=\"tab-content\" style=\"height: 100%;\">\n <as-split direction=\"horizontal\" style=\"height: 100%;\">\n <!-- Timeline Pane -->\n <as-split-area [size]=\"selectedTimelineItem ? 55 : 100\">\n <mj-ai-agent-run-timeline\n [aiAgentRunId]=\"record.ID\"\n [dataHelper]=\"dataHelper\"\n [RunTree]=\"runTree\"\n (itemSelected)=\"selectTimelineItem($event)\"\n (navigateToEntity)=\"navigateToEntityRecord($event)\">\n </mj-ai-agent-run-timeline>\n </as-split-area>\n <!-- JSON Detail Pane -->\n @if (selectedTimelineItem) {\n <as-split-area [size]=\"45\">\n <mj-ai-agent-run-step-detail\n [selectedTimelineItem]=\"selectedTimelineItem\"\n (closePanel)=\"closeJsonPanel()\"\n (navigateToActionLog)=\"navigateToActionLog($event)\"\n (copyToClipboard)=\"copyToClipboard($event)\">\n </mj-ai-agent-run-step-detail>\n </as-split-area>\n }\n </as-split>\n </div>\n }\n\n <!-- Visualization Tab (animated flow views + static flowchart) -->\n @if (activeTab === 'visualization') {\n <div class=\"tab-content\" style=\"height: 100%;\">\n @if (visualizationLoaded) {\n <mj-ai-agent-run-flow\n [aiAgentRunId]=\"record.ID\"\n [dataHelper]=\"dataHelper\"\n [agentName]=\"agent?.Name || null\"\n [runStatus]=\"record.Status || ''\"\n [agentIconClass]=\"agent?.IconClass || null\"\n [agentLogoUrl]=\"agent?.LogoURL || null\"\n [RunTree]=\"runTree\">\n </mj-ai-agent-run-flow>\n }\n </div>\n }\n\n <!-- Analytics Tab -->\n @if (activeTab === 'analytics') {\n <div class=\"tab-content\" style=\"height: 100%;\">\n @if (analyticsLoaded) {\n <mj-ai-agent-run-analytics\n #analyticsComponent\n [agentRunId]=\"record.ID\"\n [RunTree]=\"runTree\"\n >\n </mj-ai-agent-run-analytics>\n }\n </div>\n }\n\n <!-- Details Tab -->\n @if (activeTab === 'details') {\n <div class=\"tab-content\">\n <mj-accordion-panel [Expanded]=\"true\">\n <ng-template mjAccordionTitle>\n <i class=\"fas fa-info-circle\"></i> General Information\n </ng-template>\n <div class=\"details-grid\">\n <div class=\"detail-item\">\n <label>Agent</label>\n <span>\n <a href=\"javascript:void(0)\" class=\"entity-link\" (click)=\"openEntityRecord('MJ: AI Agents', record.AgentID)\">\n {{ agent?.Name || 'N/A' }}\n </a>\n </span>\n </div>\n <div class=\"detail-item\">\n <label>Parent Run ID</label>\n <span>\n @if (record.ParentRunID) {\n <a href=\"javascript:void(0)\" class=\"entity-link\" (click)=\"openEntityRecord('MJ: AI Agent Runs', record.ParentRunID)\">\n {{ record.ParentRunID }}\n </a>\n }\n @if (!record.ParentRunID) {\n <span>None (Root)</span>\n }\n </span>\n </div>\n <div class=\"detail-item\">\n <label>Last Run ID</label>\n <span>\n @if (record.LastRunID) {\n <a href=\"javascript:void(0)\" class=\"entity-link\" (click)=\"openEntityRecord('MJ: AI Agent Runs', record.LastRunID)\">\n {{ record.LastRunID }}\n </a>\n }\n @if (!record.LastRunID) {\n <span>None</span>\n }\n </span>\n </div>\n <div class=\"detail-item\">\n <label>Conversation ID</label>\n <span>\n @if (record.ConversationID) {\n <a href=\"javascript:void(0)\" class=\"entity-link\" (click)=\"openEntityRecord('MJ: Conversations', record.ConversationID)\">\n {{ record.ConversationID }}\n </a>\n }\n @if (!record.ConversationID) {\n <span>N/A</span>\n }\n </span>\n </div>\n <div class=\"detail-item\">\n <label>User</label>\n <span>\n @if (record.UserID) {\n <a href=\"javascript:void(0)\" class=\"entity-link\" (click)=\"openEntityRecord('MJ: Users', record.UserID)\">\n {{ record.User || 'N/A' }}\n </a>\n }\n @if (!record.UserID) {\n <span>N/A</span>\n }\n </span>\n </div>\n </div>\n </mj-accordion-panel>\n <mj-accordion-panel [Expanded]=\"false\">\n <ng-template mjAccordionTitle>\n <i class=\"fas fa-cogs\"></i> Execution Settings\n </ng-template>\n <div class=\"details-grid\">\n <div class=\"detail-item\">\n <label>Override Model</label>\n <span>\n @if (record.OverrideModelID) {\n <a href=\"javascript:void(0)\" class=\"entity-link\" (click)=\"openEntityRecord('MJ: AI Models', record.OverrideModelID)\">\n {{ record.OverrideModel || 'N/A' }}\n </a>\n }\n @if (!record.OverrideModelID) {\n <span>N/A</span>\n }\n </span>\n </div>\n <div class=\"detail-item\">\n <label>Override Vendor</label>\n <span>\n @if (record.OverrideVendorID) {\n <a href=\"javascript:void(0)\" class=\"entity-link\" (click)=\"openEntityRecord('MJ: AI Vendors', record.OverrideVendorID)\">\n {{ record.OverrideVendor || 'N/A' }}\n </a>\n }\n @if (!record.OverrideVendorID) {\n <span>N/A</span>\n }\n </span>\n </div>\n <div class=\"detail-item\">\n <label>Verbose Logging</label>\n <span>{{ record.Verbose ? 'Yes' : 'No' }}</span>\n </div>\n </div>\n </mj-accordion-panel>\n <mj-accordion-panel [Expanded]=\"false\">\n <ng-template mjAccordionTitle>\n <i class=\"fas fa-tasks\"></i> Execution Status\n </ng-template>\n <div class=\"details-grid\">\n <div class=\"detail-item\">\n <label>Status</label>\n <span class=\"status-badge\" [attr.data-status]=\"record.Status\">\n {{ record.Status }}\n </span>\n </div>\n <div class=\"detail-item\">\n <label>Success</label>\n @if (record.Success === null) {\n <span>In Progress</span>\n }\n @else if (record.Success) {\n <span class=\"success\">Yes</span>\n }\n @else {\n <span class=\"error-message\">No</span>\n }\n </div>\n @if (record.Message) {\n <div class=\"detail-item full-width\">\n <label>Message</label>\n <div class=\"message\">{{ record.Message }}</div>\n </div>\n }\n @if (record.ErrorMessage) {\n <div class=\"detail-item full-width\">\n <label>Error Message</label>\n <div class=\"error-message\">{{ record.ErrorMessage }}</div>\n </div>\n }\n </div>\n </mj-accordion-panel>\n <mj-accordion-panel [Expanded]=\"false\">\n <ng-template mjAccordionTitle>\n <i class=\"fas fa-dollar-sign\"></i> Usage &amp; Cost\n </ng-template>\n <div class=\"details-grid\">\n <div class=\"detail-item\">\n <label>Total Tokens Used</label>\n <span>{{ record.TotalTokensUsed ? (record.TotalTokensUsed | number:'1.0-0') : 'N/A' }}</span>\n </div>\n <div class=\"detail-item\">\n <label>Prompt Tokens</label>\n <span>{{ record.TotalPromptTokensUsed ? (record.TotalPromptTokensUsed | number:'1.0-0') : 'N/A' }}</span>\n </div>\n <div class=\"detail-item\">\n <label>Completion Tokens</label>\n <span>{{ record.TotalCompletionTokensUsed ? (record.TotalCompletionTokensUsed | number:'1.0-0') : 'N/A' }}</span>\n </div>\n <div class=\"detail-item\">\n <label>Total Cost</label>\n <span>{{ record.TotalCost != null ? ('$' + (record.TotalCost | number:'1.2-4')) : 'N/A' }}</span>\n </div>\n <div class=\"detail-item\">\n <label>Total Prompt Iterations</label>\n <span>{{ record.TotalPromptIterations != null ? (record.TotalPromptIterations | number:'1.0-0') : 'N/A' }}</span>\n </div>\n </div>\n </mj-accordion-panel>\n @if (record.Result) {\n <mj-accordion-panel [Expanded]=\"false\">\n <ng-template mjAccordionTitle>\n <i class=\"fas fa-code\"></i> Result\n </ng-template>\n <div class=\"result-viewer\">\n @if (isParsingComplete) {\n <mj-code-editor\n [ngModel]=\"parsedResult\"\n [language]=\"'json'\"\n [readonly]=\"true\"\n style=\"height: 300px; width: 100%;\">\n </mj-code-editor>\n } @else {\n <div style=\"padding: 20px; text-align: center; color: var(--mj-text-muted);\">\n <i class=\"fas fa-spinner fa-spin\"></i> Loading result data...\n </div>\n }\n </div>\n </mj-accordion-panel>\n }\n @if (record.StartingPayload) {\n <mj-accordion-panel [Expanded]=\"false\">\n <ng-template mjAccordionTitle>\n <i class=\"fas fa-upload\"></i> Starting Payload\n </ng-template>\n <div class=\"result-viewer\">\n @if (isParsingComplete) {\n <mj-code-editor\n [ngModel]=\"parsedStartingPayload\"\n [language]=\"'json'\"\n [readonly]=\"true\"\n style=\"height: 300px; width: 100%;\">\n </mj-code-editor>\n } @else {\n <div style=\"padding: 20px; text-align: center; color: var(--mj-text-muted);\">\n <i class=\"fas fa-spinner fa-spin\"></i> Loading payload data...\n </div>\n }\n </div>\n </mj-accordion-panel>\n }\n @if (record.Data) {\n <mj-accordion-panel [Expanded]=\"false\">\n <ng-template mjAccordionTitle>\n <i class=\"fas fa-database\"></i> Execution Data\n </ng-template>\n <div class=\"result-viewer\">\n @if (isParsingComplete) {\n <mj-code-editor\n [ngModel]=\"parsedData\"\n [language]=\"'json'\"\n [readonly]=\"true\"\n style=\"height: 300px; width: 100%;\">\n </mj-code-editor>\n } @else {\n <div style=\"padding: 20px; text-align: center; color: var(--mj-text-muted);\">\n <i class=\"fas fa-spinner fa-spin\"></i> Loading execution data...\n </div>\n }\n </div>\n </mj-accordion-panel>\n }\n @if (record.FinalPayload) {\n <mj-accordion-panel [Expanded]=\"false\">\n <ng-template mjAccordionTitle>\n <i class=\"fas fa-download\"></i> Final Payload\n </ng-template>\n <div class=\"result-viewer\">\n @if (isParsingComplete) {\n <mj-code-editor\n [ngModel]=\"parsedFinalPayload\"\n [language]=\"'json'\"\n [readonly]=\"true\"\n style=\"height: 300px; width: 100%;\">\n </mj-code-editor>\n } @else {\n <div style=\"padding: 20px; text-align: center; color: var(--mj-text-muted);\">\n <i class=\"fas fa-spinner fa-spin\"></i> Loading final payload data...\n </div>\n }\n </div>\n </mj-accordion-panel>\n }\n @if (showPayloadDiff) {\n <mj-accordion-panel [Expanded]=\"false\">\n <ng-template mjAccordionTitle>\n <i class=\"fas fa-code-compare\"></i> Payload Diff\n </ng-template>\n <div style=\"padding: 20px; background: var(--mj-bg-surface-card);\">\n @if (isParsingComplete) {\n <mj-deep-diff\n [oldValue]=\"startingPayloadObject\"\n [newValue]=\"finalPayloadObject\"\n [title]=\"''\"\n [showSummary]=\"true\"\n [showUnchanged]=\"false\"\n [expandAll]=\"false\"\n [maxDepth]=\"10\"\n [maxStringLength]=\"200\"\n [treatNullAsUndefined]=\"true\">\n </mj-deep-diff>\n } @else {\n <div style=\"padding: 20px; text-align: center; color: var(--mj-text-muted);\">\n <i class=\"fas fa-spinner fa-spin\"></i> Loading payload diff...\n </div>\n }\n </div>\n </mj-accordion-panel>\n }\n </div>\n }\n</div>\n</div>\n</div>", styles: [".ai-agent-run-form {\n height: 100%;\n display: flex;\n flex-direction: column;\n overflow: hidden;\n}\n\n.record-form-container.ai-agent-run-form > .record-form,\n.ai-agent-run-form > .record-form {\n display: flex;\n flex-direction: column;\n height: 100%;\n min-height: 0;\n}\n\n/* Header Styles */\n.header {\n background: var(--mj-bg-surface);\n border-bottom: 1px solid var(--mj-border-default);\n padding: 20px;\n box-shadow: var(--mj-shadow-sm);\n flex-shrink: 0;\n}\n\n.header-content {\n display: flex;\n justify-content: space-between;\n align-items: flex-start;\n margin-bottom: 16px;\n}\n\n.header-left {\n display: flex;\n align-items: center;\n gap: 16px;\n}\n\n.icon-wrapper {\n width: 48px;\n height: 48px;\n background: var(--mj-brand-primary);\n border-radius: 12px;\n display: flex;\n align-items: center;\n justify-content: center;\n color: var(--mj-text-inverse);\n font-size: 20px;\n overflow: hidden;\n}\n\n.agent-logo {\n width: 100%;\n height: 100%;\n object-fit: cover;\n}\n\n.header-info h2 {\n margin: 0;\n font-size: 24px;\n font-weight: 600;\n color: var(--mj-text-primary);\n}\n\n.meta-info {\n display: flex;\n gap: 12px;\n margin-top: 4px;\n font-size: 14px;\n color: var(--mj-text-muted);\n}\n\n.parent-run {\n display: flex;\n align-items: center;\n gap: 6px;\n}\n\n.parent-link {\n color: var(--mj-status-error);\n text-decoration: none;\n cursor: pointer;\n transition: color 0.2s;\n}\n\n.parent-link:hover {\n color: var(--mj-status-error);\n text-decoration: underline;\n}\n\n.agent-name {\n font-weight: 500;\n color: var(--mj-text-secondary);\n}\n\n.run-id {\n font-family: monospace;\n font-size: 12px;\n opacity: 0.7;\n}\n\n/* Conversation Link Pill */\n.conversation-pill {\n display: inline-flex;\n align-items: center;\n gap: 6px;\n padding: 4px 10px;\n background: color-mix(in srgb, var(--mj-brand-primary) 8%, var(--mj-bg-surface));\n border: 1px solid color-mix(in srgb, var(--mj-brand-primary) 20%, transparent);\n border-radius: 16px;\n font-size: 12px;\n font-weight: 500;\n color: var(--mj-brand-primary);\n cursor: pointer;\n transition: all 0.2s ease;\n white-space: nowrap;\n}\n\n.conversation-pill:hover {\n background: color-mix(in srgb, var(--mj-brand-primary) 15%, var(--mj-bg-surface));\n border-color: color-mix(in srgb, var(--mj-brand-primary) 40%, transparent);\n transform: translateY(-1px);\n box-shadow: 0 2px 8px color-mix(in srgb, var(--mj-brand-primary) 15%, transparent);\n}\n\n.conversation-pill i:first-child {\n font-size: 11px;\n opacity: 0.9;\n}\n\n.conversation-pill .pill-action {\n font-size: 9px;\n opacity: 0.6;\n transition: opacity 0.2s ease;\n}\n\n.conversation-pill:hover .pill-action {\n opacity: 1;\n}\n\n.header-right {\n display: flex;\n align-items: center;\n gap: 16px;\n}\n\n.status-badge {\n padding: 6px 16px;\n border-radius: 20px;\n font-size: 13px;\n font-weight: 600;\n text-transform: uppercase;\n letter-spacing: 0.5px;\n display: inline-flex;\n align-items: center;\n gap: 6px;\n}\n\n.status-badge[data-status=\"Running\"] {\n background: color-mix(in srgb, var(--mj-status-info) 15%, var(--mj-bg-surface));\n color: var(--mj-status-info);\n}\n\n.status-badge[data-status=\"Completed\"] {\n background: color-mix(in srgb, var(--mj-status-success) 15%, var(--mj-bg-surface));\n color: var(--mj-status-success);\n}\n\n.status-badge[data-status=\"Failed\"] {\n background: color-mix(in srgb, var(--mj-status-error) 15%, var(--mj-bg-surface));\n color: var(--mj-status-error);\n}\n\n.status-badge[data-status=\"Cancelled\"] {\n background: color-mix(in srgb, var(--mj-status-warning) 15%, var(--mj-bg-surface));\n color: var(--mj-status-warning);\n}\n\n.status-badge[data-status=\"Paused\"] {\n background: var(--mj-bg-surface-sunken);\n color: var(--mj-text-secondary);\n}\n\n.status-badge.small {\n padding: 4px 12px;\n font-size: 11px;\n}\n\n/* Plan Mode chip \u2014 shown next to the status badge when AIAgentRun.PlanMode = 1 */\n.plan-mode-badge {\n padding: 6px 16px;\n border-radius: 20px;\n font-size: 13px;\n font-weight: 600;\n text-transform: uppercase;\n letter-spacing: 0.5px;\n display: inline-flex;\n align-items: center;\n gap: 6px;\n background: color-mix(in srgb, var(--mj-brand-primary) 12%, var(--mj-bg-surface));\n color: var(--mj-brand-primary);\n border: 1px solid color-mix(in srgb, var(--mj-brand-primary) 30%, transparent);\n}\n\n.header-actions {\n display: flex;\n gap: 8px;\n}\n\n.btn-icon {\n width: 36px;\n height: 36px;\n border: 1px solid var(--mj-border-default);\n background: var(--mj-bg-surface);\n border-radius: 8px;\n display: flex;\n align-items: center;\n justify-content: center;\n cursor: pointer;\n transition: all 0.2s ease;\n color: var(--mj-text-muted);\n}\n\n.btn-icon:hover {\n background: var(--mj-bg-surface-sunken);\n border-color: var(--mj-border-strong);\n color: var(--mj-text-secondary);\n}\n\n.header-stats {\n display: flex;\n gap: 24px;\n padding-top: 12px;\n border-top: 1px solid var(--mj-border-default);\n}\n\n/* Configuration Bar */\n.configuration-bar {\n display: flex;\n gap: 24px;\n padding-top: 16px;\n border-top: 1px solid var(--mj-border-default);\n margin-top: 16px;\n}\n\n.config-item {\n display: flex;\n align-items: center;\n gap: 12px;\n}\n\n.config-item > i {\n font-size: 1.2em;\n color: var(--mj-text-muted);\n width: 24px;\n text-align: center;\n}\n\n.config-content {\n display: flex;\n flex-direction: column;\n}\n\n.config-label {\n font-size: 12px;\n color: var(--mj-text-muted);\n text-transform: uppercase;\n letter-spacing: 0.5px;\n}\n\n.config-value {\n font-size: 14px;\n font-weight: 600;\n color: var(--mj-text-primary);\n}\n\n.config-value .entity-link {\n color: var(--mj-brand-primary);\n text-decoration: none;\n cursor: pointer;\n transition: color 0.2s;\n}\n\n.config-value .entity-link:hover {\n color: var(--mj-brand-primary-hover);\n text-decoration: underline;\n}\n\n.stat {\n display: flex;\n flex-direction: column;\n gap: 4px;\n}\n\n.stat .label {\n font-size: 12px;\n color: var(--mj-text-muted);\n text-transform: uppercase;\n letter-spacing: 0.5px;\n}\n\n.stat .value {\n font-size: 14px;\n font-weight: 500;\n color: var(--mj-text-secondary);\n}\n\n.stat .value.success {\n color: var(--mj-status-success);\n}\n\n.stat .value.error {\n color: var(--mj-status-error);\n}\n\n/* Tabs */\n.tabs {\n display: flex;\n border-bottom: 1px solid var(--mj-border-default);\n background: var(--mj-bg-surface-sunken);\n flex-shrink: 0;\n}\n\n.tab {\n padding: 12px 24px;\n border: none;\n background: transparent;\n cursor: pointer;\n font-size: 14px;\n font-weight: 500;\n color: var(--mj-text-muted);\n display: flex;\n align-items: center;\n gap: 8px;\n transition: all 0.2s ease;\n border-bottom: 3px solid transparent;\n}\n\n.tab:hover {\n color: var(--mj-text-secondary);\n background: color-mix(in srgb, var(--mj-text-primary) 2%, var(--mj-bg-surface));\n}\n\n.tab.active {\n color: var(--mj-brand-primary);\n border-bottom-color: var(--mj-brand-primary);\n background: var(--mj-bg-surface);\n}\n\n/* Content Area */\n.content-area {\n position: relative;\n flex: 1;\n min-height: 0;\n overflow: auto;\n background: var(--mj-bg-surface);\n}\n\n.tab-content {\n height: 100%;\n min-height: 0;\n overflow: auto;\n}\n\n/* Details tab accordion panels */\n.tab-content mj-accordion-panel {\n display: block;\n margin-bottom: 8px;\n}\n\n/* JSON Detail Pane */\n.json-detail-pane {\n height: 100%;\n display: flex;\n flex-direction: column;\n background: var(--mj-bg-surface-sunken);\n border-left: 1px solid var(--mj-border-default);\n}\n\n.json-pane-header {\n display: flex;\n justify-content: space-between;\n align-items: center;\n padding: 16px 20px;\n background: var(--mj-bg-surface);\n border-bottom: 1px solid var(--mj-border-default);\n box-shadow: var(--mj-shadow-sm);\n}\n\n.json-pane-header h3 {\n margin: 0;\n font-size: 16px;\n font-weight: 600;\n color: var(--mj-text-primary);\n display: flex;\n align-items: center;\n gap: 8px;\n}\n\n.json-pane-header h3 i {\n color: var(--mj-text-muted);\n font-size: 14px;\n}\n\n.json-pane-content {\n flex: 1;\n display: flex;\n flex-direction: column;\n overflow: auto;\n padding: 16px;\n}\n\n.json-meta {\n display: flex;\n gap: 20px;\n margin-bottom: 16px;\n flex-wrap: wrap;\n}\n\n.json-meta .meta-item {\n display: flex;\n flex-direction: column;\n gap: 4px;\n}\n\n.json-meta .meta-item label {\n font-size: 11px;\n text-transform: uppercase;\n color: var(--mj-text-muted);\n font-weight: 600;\n letter-spacing: 0.5px;\n}\n\n.json-meta .meta-item span {\n font-size: 14px;\n color: var(--mj-text-primary);\n font-weight: 500;\n}\n\n.action-link {\n margin-bottom: 12px;\n}\n\n.action-link .btn-link {\n background: none;\n border: none;\n color: var(--mj-brand-primary);\n font-size: 14px;\n cursor: pointer;\n padding: 6px 12px;\n border-radius: 4px;\n transition: all 0.2s;\n display: inline-flex;\n align-items: center;\n gap: 6px;\n}\n\n.action-link .btn-link:hover {\n background: color-mix(in srgb, var(--mj-brand-primary) 8%, var(--mj-bg-surface));\n color: var(--mj-brand-primary-hover);\n}\n\n.json-viewer {\n flex: 1;\n display: flex;\n flex-direction: column;\n background: var(--mj-bg-surface);\n border-radius: 8px;\n border: 1px solid var(--mj-border-default);\n overflow: auto;\n padding: 20px;\n gap: 10px;\n min-height: 0;\n margin-bottom: 45px;\n}\n\n\n.json-toolbar {\n display: flex;\n justify-content: flex-end;\n padding: 8px 12px;\n background: var(--mj-bg-surface-sunken);\n border-bottom: 1px solid var(--mj-border-default);\n}\n\n/* Timeline Styles */\n.timeline-container {\n height: 100%;\n overflow-y: auto;\n padding: 20px;\n}\n\n.timeline-container > .timeline {\n max-width: 900px;\n margin: 0 auto;\n}\n\n.timeline {\n position: relative;\n padding-left: 40px;\n}\n\n.timeline::before {\n content: '';\n position: absolute;\n left: 20px;\n top: 0;\n bottom: 0;\n width: 2px;\n background: var(--mj-border-default);\n}\n\n.timeline-item {\n position: relative;\n margin-bottom: 24px;\n cursor: pointer;\n transition: all 0.2s ease;\n}\n\n.timeline-item:hover {\n transform: translateX(4px);\n}\n\n.timeline-item.selected {\n transform: translateX(8px);\n}\n\n.timeline-item.selected .timeline-content {\n background: color-mix(in srgb, var(--mj-brand-primary) 8%, var(--mj-bg-surface));\n border-color: var(--mj-brand-primary);\n}\n\n.timeline-marker {\n position: absolute;\n left: -30px;\n top: 0;\n width: 40px;\n height: 40px;\n border-radius: 50%;\n display: flex;\n align-items: center;\n justify-content: center;\n background: var(--mj-bg-surface);\n border: 3px solid var(--mj-border-default);\n z-index: 1;\n transition: all 0.2s ease;\n}\n\n.timeline-marker[data-color=\"success\"] {\n border-color: var(--mj-status-success);\n color: var(--mj-status-success);\n}\n\n.timeline-marker[data-color=\"error\"] {\n border-color: var(--mj-status-error);\n color: var(--mj-status-error);\n}\n\n.timeline-marker[data-color=\"info\"] {\n border-color: var(--mj-status-info);\n color: var(--mj-status-info);\n}\n\n.timeline-marker[data-color=\"warning\"] {\n border-color: var(--mj-status-warning);\n color: var(--mj-status-warning);\n}\n\n.timeline-marker[data-color=\"secondary\"] {\n border-color: var(--mj-text-muted);\n color: var(--mj-text-muted);\n}\n\n.timeline-marker.small {\n width: 28px;\n height: 28px;\n font-size: 12px;\n}\n\n.timeline-content {\n background: var(--mj-bg-surface);\n border: 1px solid var(--mj-border-default);\n border-radius: 12px;\n padding: 16px 20px;\n margin-left: 20px;\n box-shadow: var(--mj-shadow-sm);\n transition: all 0.2s ease;\n}\n\n.timeline-header {\n display: flex;\n justify-content: space-between;\n align-items: center;\n margin-bottom: 8px;\n}\n\n.timeline-header h4 {\n margin: 0;\n font-size: 16px;\n font-weight: 600;\n color: var(--mj-text-primary);\n}\n\n.timeline-header h5 {\n margin: 0;\n font-size: 14px;\n font-weight: 600;\n color: var(--mj-text-secondary);\n}\n\n.timeline-time {\n font-size: 12px;\n color: var(--mj-text-muted);\n font-family: monospace;\n}\n\n.timeline-subtitle {\n font-size: 13px;\n color: var(--mj-text-muted);\n margin-bottom: 8px;\n}\n\n.timeline-meta {\n display: flex;\n gap: 16px;\n font-size: 12px;\n color: var(--mj-text-muted);\n}\n\n.timeline-meta .status {\n display: inline-flex;\n align-items: center;\n gap: 6px;\n padding: 2px 8px;\n border-radius: 12px;\n font-size: 11px;\n font-weight: 600;\n text-transform: uppercase;\n letter-spacing: 0.5px;\n}\n\n.timeline-meta .status[data-status=\"Completed\"] {\n background: color-mix(in srgb, var(--mj-status-success) 15%, var(--mj-bg-surface));\n color: var(--mj-status-success);\n}\n\n.timeline-meta .status[data-status=\"Failed\"] {\n background: color-mix(in srgb, var(--mj-status-error) 15%, var(--mj-bg-surface));\n color: var(--mj-status-error);\n}\n\n.timeline-meta .status[data-status=\"Running\"] {\n background: color-mix(in srgb, var(--mj-status-info) 15%, var(--mj-bg-surface));\n color: var(--mj-status-info);\n}\n\n.timeline-meta .status[data-status=\"Paused\"] {\n background: var(--mj-bg-surface-sunken);\n color: var(--mj-text-secondary);\n}\n\n.duration {\n display: flex;\n align-items: center;\n gap: 4px;\n}\n\n.timeline-actions {\n position: absolute;\n right: 20px;\n top: 50%;\n transform: translateY(-50%);\n display: flex;\n align-items: center;\n gap: 8px;\n}\n\n.btn-link {\n background: none;\n border: none;\n color: var(--mj-brand-primary);\n cursor: pointer;\n font-size: 12px;\n display: flex;\n align-items: center;\n gap: 4px;\n padding: 4px 8px;\n border-radius: 4px;\n transition: all 0.2s ease;\n}\n\n.btn-link:hover {\n background: color-mix(in srgb, var(--mj-brand-primary) 10%, var(--mj-bg-surface));\n}\n\n.btn-expand {\n width: 24px;\n height: 24px;\n border: 1px solid var(--mj-border-default);\n background: var(--mj-bg-surface);\n border-radius: 4px;\n display: flex;\n align-items: center;\n justify-content: center;\n cursor: pointer;\n transition: all 0.2s ease;\n color: var(--mj-text-muted);\n font-size: 12px;\n}\n\n.btn-expand:hover {\n background: var(--mj-bg-surface-sunken);\n border-color: var(--mj-border-strong);\n color: var(--mj-text-secondary);\n}\n\n/* Timeline Children */\n.timeline-children {\n position: relative;\n margin-top: 12px;\n margin-bottom: 12px;\n}\n\n.timeline-children::before {\n content: '';\n position: absolute;\n left: -10px;\n top: -12px;\n bottom: 0;\n width: 2px;\n background: var(--mj-border-default);\n}\n\n.child-item {\n margin-bottom: 12px;\n}\n\n.child-item .timeline-content {\n background: var(--mj-bg-surface-sunken);\n border-color: var(--mj-border-default);\n}\n\n/* Sub-run timeline styles */\n.sub-run-timeline {\n background: color-mix(in srgb, var(--mj-brand-primary) 2%, var(--mj-bg-surface));\n border-left: 2px solid color-mix(in srgb, var(--mj-brand-primary) 20%, transparent);\n margin-left: 20px;\n padding-left: 20px;\n margin-top: 8px;\n margin-bottom: 8px;\n}\n\n.sub-run-item .timeline-marker {\n border-width: 2px;\n}\n\n.sub-run-item .timeline-content {\n transition: all 0.2s ease;\n}\n\n/* JSON Detail Pane (in splitter) */\n.json-detail-pane {\n height: 100%;\n display: flex;\n flex-direction: column;\n background: var(--mj-bg-surface);\n border-left: 1px solid var(--mj-border-default);\n}\n\n.json-pane-header {\n padding: 16px 20px;\n background: var(--mj-bg-surface-sunken);\n border-bottom: 1px solid var(--mj-border-default);\n display: flex;\n justify-content: space-between;\n align-items: center;\n flex-shrink: 0;\n}\n\n.json-pane-header h3 {\n margin: 0;\n font-size: 16px;\n color: var(--mj-text-primary);\n display: flex;\n align-items: center;\n gap: 10px;\n font-weight: 600;\n}\n\n.json-pane-content {\n flex: 1;\n overflow-y: auto;\n display: flex;\n flex-direction: column;\n}\n\n.json-meta {\n padding: 16px 20px;\n border-bottom: 1px solid var(--mj-border-default);\n display: flex;\n gap: 20px;\n flex-wrap: wrap;\n flex-shrink: 0;\n}\n\n.json-meta .meta-item {\n display: flex;\n flex-direction: column;\n gap: 4px;\n}\n\n.json-meta label {\n font-size: 11px;\n color: var(--mj-text-muted);\n text-transform: uppercase;\n letter-spacing: 0.5px;\n}\n\n.json-meta span {\n font-size: 14px;\n color: var(--mj-text-primary);\n font-weight: 500;\n}\n\n.action-link {\n padding: 12px 20px;\n border-bottom: 1px solid var(--mj-border-default);\n flex-shrink: 0;\n}\n\n.action-link .btn-link {\n display: inline-flex;\n align-items: center;\n gap: 6px;\n color: var(--mj-brand-primary);\n text-decoration: none;\n font-size: 14px;\n padding: 8px 12px;\n background: color-mix(in srgb, var(--mj-brand-primary) 8%, var(--mj-bg-surface));\n border: 1px solid color-mix(in srgb, var(--mj-brand-primary) 20%, transparent);\n border-radius: 4px;\n transition: all 0.2s;\n cursor: pointer;\n}\n\n.action-link .btn-link:hover {\n background: color-mix(in srgb, var(--mj-brand-primary) 15%, var(--mj-bg-surface));\n border-color: color-mix(in srgb, var(--mj-brand-primary) 35%, transparent);\n text-decoration: none;\n}\n\n\n.json-toolbar {\n display: flex;\n justify-content: flex-end;\n gap: 8px;\n margin-bottom: 8px;\n}\n\n/* Details Tab */\n.details-grid {\n display: grid;\n grid-template-columns: repeat(auto-fit, minmax(250px, 1fr));\n gap: 20px;\n padding: 20px;\n}\n\n.detail-item {\n display: flex;\n flex-direction: column;\n gap: 8px;\n}\n\n.detail-item.full-width {\n grid-column: 1 / -1;\n}\n\n.detail-item label {\n font-size: 12px;\n color: var(--mj-text-muted);\n text-transform: uppercase;\n letter-spacing: 0.5px;\n}\n\n.detail-item span {\n font-size: 14px;\n color: var(--mj-text-secondary);\n}\n\n.error-message {\n background: color-mix(in srgb, var(--mj-status-error) 15%, var(--mj-bg-surface));\n color: var(--mj-status-error);\n padding: 12px;\n border-radius: 8px;\n font-size: 13px;\n}\n\n.result-viewer,\n.state-viewer {\n padding: 20px;\n max-height: 450px;\n overflow: auto;\n display: flex;\n flex-direction: column;\n}\n\n.result-viewer mj-code-editor,\n.state-viewer mj-code-editor {\n flex: 1;\n min-height: 0;\n}\n\n/* Empty States */\n.empty-state,\n.loading-state,\n.error-state {\n text-align: center;\n padding: 60px 20px;\n color: var(--mj-text-muted);\n}\n\n.empty-state i,\n.loading-state i,\n.error-state i {\n opacity: 0.3;\n margin-bottom: 16px;\n}\n\n/* Responsive */\n@media (max-width: 768px) {\n .header-content {\n flex-direction: column;\n gap: 16px;\n }\n \n .header-stats {\n flex-wrap: wrap;\n }\n \n .json-detail-pane {\n width: 100%;\n }\n \n .timeline {\n padding-left: 30px;\n }\n \n .timeline-marker {\n left: -25px;\n width: 32px;\n height: 32px;\n }\n \n .timeline-content {\n margin-left: 10px;\n }\n}\n\n/* Entity Link Styles */\n.entity-link {\n color: var(--mj-brand-primary);\n text-decoration: none;\n transition: all 0.2s ease;\n border-bottom: 1px solid transparent;\n display: inline-block;\n}\n\n.entity-link:hover {\n color: var(--mj-brand-primary-hover);\n border-bottom-color: var(--mj-brand-primary-hover);\n}\n\n.entity-link:active {\n color: var(--mj-brand-primary-hover);\n}\n\n/* Detail Pane Tabs */\n.detail-pane-tabs {\n display: flex;\n gap: 8px;\n margin: 8px 0 0 0;\n border-bottom: 1px solid var(--mj-border-default);\n padding: 0 16px;\n}\n\n.detail-tab {\n padding: 10px 16px;\n background: none;\n border: none;\n border-bottom: 3px solid transparent;\n color: var(--mj-text-muted);\n font-size: 14px;\n font-weight: 500;\n cursor: pointer;\n transition: all 0.2s ease;\n display: flex;\n align-items: center;\n gap: 6px;\n}\n\n.detail-tab:hover {\n color: var(--mj-text-secondary);\n background: color-mix(in srgb, var(--mj-text-primary) 2%, var(--mj-bg-surface));\n}\n\n.detail-tab.active {\n color: var(--mj-brand-primary);\n border-bottom-color: var(--mj-brand-primary);\n}\n\n.detail-tab i {\n font-size: 14px;\n}\n\n/* Detail Pane Content */\n.detail-pane-content {\n flex: 1;\n overflow-y: auto;\n min-height: 0;\n margin-bottom: 35px;\n}\n\n.detail-pane-content.with-tabs {\n /* When tabs are shown, content starts right after tabs */\n margin-top: 0;\n}\n\n/* Step Payload Diff */\n.step-payload-diff {\n height: 100%;\n overflow-y: auto;\n padding: 16px;\n}\n\n.step-payload-diff mj-deep-diff {\n display: block;\n height: 100%;\n}\n\n/* JSON Viewer adjustments when no tabs */\n.detail-pane-content:not(.with-tabs) .json-viewer {\n margin-top: 16px;\n}\n/* A detached workflow still executing after its run completed. Blue rather than green or amber: it\n is neither finished nor wrong, it is the same \"workflow\" provenance the timeline uses. */\n.workflow-running-badge {\n display: inline-flex;\n align-items: center;\n gap: 6px;\n padding: 4px 12px;\n border-radius: var(--mj-radius-full, 999px);\n font-size: 12px;\n font-weight: 600;\n color: var(--mj-brand-primary);\n background: color-mix(in srgb, var(--mj-brand-primary) 12%, var(--mj-bg-surface));\n border: 1px solid color-mix(in srgb, var(--mj-brand-primary) 30%, transparent);\n white-space: nowrap;\n}\n"] }]
1568
1687
  }], null, { timelineComponent: [{
1569
1688
  type: ViewChild,
1570
1689
  args: [AIAgentRunTimelineComponent]
@@ -1572,5 +1691,5 @@ export { MJAIAgentRunFormComponentExtended };
1572
1691
  type: ViewChild,
1573
1692
  args: [AIAgentRunAnalyticsComponent]
1574
1693
  }] }); })();
1575
- (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassDebugInfo(MJAIAgentRunFormComponentExtended, { className: "MJAIAgentRunFormComponentExtended", filePath: "src/lib/custom/ai-agent-run/ai-agent-run.component.ts", lineNumber: 23 }); })();
1694
+ (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassDebugInfo(MJAIAgentRunFormComponentExtended, { className: "MJAIAgentRunFormComponentExtended", filePath: "src/lib/custom/ai-agent-run/ai-agent-run.component.ts", lineNumber: 45 }); })();
1576
1695
  //# sourceMappingURL=ai-agent-run.component.js.map