@memberjunction/ng-core-entity-forms 6.2.1 → 6.3.0-edge.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (204) hide show
  1. package/README.md +5 -6
  2. package/dist/lib/custom/AIAgentCategories/ai-agent-category-header.panel.d.ts.map +1 -1
  3. package/dist/lib/custom/AIAgentCategories/ai-agent-category-header.panel.js +3 -3
  4. package/dist/lib/custom/AIAgentCategories/ai-agent-category-header.panel.js.map +1 -1
  5. package/dist/lib/custom/AIAgentSessions/ai-agent-session-form.component.d.ts +12 -0
  6. package/dist/lib/custom/AIAgentSessions/ai-agent-session-form.component.d.ts.map +1 -1
  7. package/dist/lib/custom/AIAgentSessions/ai-agent-session-form.component.js +293 -230
  8. package/dist/lib/custom/AIAgentSessions/ai-agent-session-form.component.js.map +1 -1
  9. package/dist/lib/custom/AIAgents/add-action-dialog.component.js +2 -2
  10. package/dist/lib/custom/AIAgents/agent-prompt-advanced-settings-dialog.component.js +2 -2
  11. package/dist/lib/custom/AIAgents/ai-agent-form.component.d.ts +11 -0
  12. package/dist/lib/custom/AIAgents/ai-agent-form.component.d.ts.map +1 -1
  13. package/dist/lib/custom/AIAgents/ai-agent-form.component.js +862 -812
  14. package/dist/lib/custom/AIAgents/ai-agent-form.component.js.map +1 -1
  15. package/dist/lib/custom/AIAgents/create-prompt-dialog.component.js +2 -2
  16. package/dist/lib/custom/AIAgents/create-sub-agent-dialog.component.js +2 -2
  17. package/dist/lib/custom/AIAgents/new-agent-dialog.component.js +2 -2
  18. package/dist/lib/custom/AIAgents/prompt-selector-dialog.component.js +2 -2
  19. package/dist/lib/custom/AIAgents/sub-agent-advanced-settings-dialog.component.js +2 -2
  20. package/dist/lib/custom/AIAgents/sub-agent-selector-dialog.component.js +2 -2
  21. package/dist/lib/custom/AIPromptRuns/ai-prompt-run-form.component.d.ts +12 -0
  22. package/dist/lib/custom/AIPromptRuns/ai-prompt-run-form.component.d.ts.map +1 -1
  23. package/dist/lib/custom/AIPromptRuns/ai-prompt-run-form.component.js +821 -763
  24. package/dist/lib/custom/AIPromptRuns/ai-prompt-run-form.component.js.map +1 -1
  25. package/dist/lib/custom/AIPromptRuns/chat-message-viewer.component.js +2 -2
  26. package/dist/lib/custom/AIPrompts/ai-prompt-form.component.d.ts +10 -0
  27. package/dist/lib/custom/AIPrompts/ai-prompt-form.component.d.ts.map +1 -1
  28. package/dist/lib/custom/AIPrompts/ai-prompt-form.component.js +700 -605
  29. package/dist/lib/custom/AIPrompts/ai-prompt-form.component.js.map +1 -1
  30. package/dist/lib/custom/Actions/action-execution-log-form.component.d.ts +10 -0
  31. package/dist/lib/custom/Actions/action-execution-log-form.component.d.ts.map +1 -1
  32. package/dist/lib/custom/Actions/action-execution-log-form.component.js +223 -175
  33. package/dist/lib/custom/Actions/action-execution-log-form.component.js.map +1 -1
  34. package/dist/lib/custom/Actions/action-form.component.d.ts +10 -0
  35. package/dist/lib/custom/Actions/action-form.component.d.ts.map +1 -1
  36. package/dist/lib/custom/Actions/action-form.component.js +502 -453
  37. package/dist/lib/custom/Actions/action-form.component.js.map +1 -1
  38. package/dist/lib/custom/Companies/company-header.panel.d.ts.map +1 -1
  39. package/dist/lib/custom/Companies/company-header.panel.js +3 -3
  40. package/dist/lib/custom/Companies/company-header.panel.js.map +1 -1
  41. package/dist/lib/custom/Conversations/conversation-header.panel.d.ts.map +1 -1
  42. package/dist/lib/custom/Conversations/conversation-header.panel.js +3 -3
  43. package/dist/lib/custom/Conversations/conversation-header.panel.js.map +1 -1
  44. package/dist/lib/custom/Employees/employee-header.panel.d.ts.map +1 -1
  45. package/dist/lib/custom/Employees/employee-header.panel.js +3 -3
  46. package/dist/lib/custom/Employees/employee-header.panel.js.map +1 -1
  47. package/dist/lib/custom/Entities/entity-form.component.d.ts +15 -0
  48. package/dist/lib/custom/Entities/entity-form.component.d.ts.map +1 -1
  49. package/dist/lib/custom/Entities/entity-form.component.js +836 -801
  50. package/dist/lib/custom/Entities/entity-form.component.js.map +1 -1
  51. package/dist/lib/custom/EntityActions/entityaction.form.component.js +2 -2
  52. package/dist/lib/custom/Files/file-form.component.js +2 -2
  53. package/dist/lib/custom/Lists/list-form.component.d.ts +5 -0
  54. package/dist/lib/custom/Lists/list-form.component.d.ts.map +1 -1
  55. package/dist/lib/custom/Lists/list-form.component.js +355 -338
  56. package/dist/lib/custom/Lists/list-form.component.js.map +1 -1
  57. package/dist/lib/custom/MLModels/ml-model-form.component.js +3 -3
  58. package/dist/lib/custom/MLModels/ml-model-form.component.js.map +1 -1
  59. package/dist/lib/custom/MLModels/ml-model-view-models.d.ts +17 -35
  60. package/dist/lib/custom/MLModels/ml-model-view-models.d.ts.map +1 -1
  61. package/dist/lib/custom/MLModels/ml-model-view-models.js +55 -54
  62. package/dist/lib/custom/MLModels/ml-model-view-models.js.map +1 -1
  63. package/dist/lib/custom/MLModels/ps-model-detail.component.d.ts +7 -99
  64. package/dist/lib/custom/MLModels/ps-model-detail.component.d.ts.map +1 -1
  65. package/dist/lib/custom/MLModels/ps-model-detail.component.js +124 -303
  66. package/dist/lib/custom/MLModels/ps-model-detail.component.js.map +1 -1
  67. package/dist/lib/custom/Queries/query-form.component.d.ts +9 -0
  68. package/dist/lib/custom/Queries/query-form.component.d.ts.map +1 -1
  69. package/dist/lib/custom/Queries/query-form.component.js +493 -444
  70. package/dist/lib/custom/Queries/query-form.component.js.map +1 -1
  71. package/dist/lib/custom/Queries/query-run-dialog.component.js +2 -2
  72. package/dist/lib/custom/Templates/template-param-dialog.component.js +2 -2
  73. package/dist/lib/custom/Templates/templates-form.component.d.ts +9 -0
  74. package/dist/lib/custom/Templates/templates-form.component.d.ts.map +1 -1
  75. package/dist/lib/custom/Templates/templates-form.component.js +118 -74
  76. package/dist/lib/custom/Templates/templates-form.component.js.map +1 -1
  77. package/dist/lib/custom/Tests/test-form.component.d.ts +5 -0
  78. package/dist/lib/custom/Tests/test-form.component.d.ts.map +1 -1
  79. package/dist/lib/custom/Tests/test-form.component.js +471 -451
  80. package/dist/lib/custom/Tests/test-form.component.js.map +1 -1
  81. package/dist/lib/custom/Tests/test-run-form.component.d.ts +5 -0
  82. package/dist/lib/custom/Tests/test-run-form.component.d.ts.map +1 -1
  83. package/dist/lib/custom/Tests/test-run-form.component.js +312 -289
  84. package/dist/lib/custom/Tests/test-run-form.component.js.map +1 -1
  85. package/dist/lib/custom/Tests/test-suite-form.component.d.ts +5 -0
  86. package/dist/lib/custom/Tests/test-suite-form.component.d.ts.map +1 -1
  87. package/dist/lib/custom/Tests/test-suite-form.component.js +697 -677
  88. package/dist/lib/custom/Tests/test-suite-form.component.js.map +1 -1
  89. package/dist/lib/custom/Tests/test-suite-run-form.component.d.ts +5 -0
  90. package/dist/lib/custom/Tests/test-suite-run-form.component.d.ts.map +1 -1
  91. package/dist/lib/custom/Tests/test-suite-run-form.component.js +453 -433
  92. package/dist/lib/custom/Tests/test-suite-run-form.component.js.map +1 -1
  93. package/dist/lib/custom/Users/user-header.panel.d.ts.map +1 -1
  94. package/dist/lib/custom/Users/user-header.panel.js +3 -3
  95. package/dist/lib/custom/Users/user-header.panel.js.map +1 -1
  96. package/dist/lib/custom/ai-agent-run/agent-run-cost-split.d.ts +2 -2
  97. package/dist/lib/custom/ai-agent-run/agent-run-cost-split.d.ts.map +1 -1
  98. package/dist/lib/custom/ai-agent-run/agent-run-cost-split.js +30 -13
  99. package/dist/lib/custom/ai-agent-run/agent-run-cost-split.js.map +1 -1
  100. package/dist/lib/custom/ai-agent-run/ai-agent-run.component.d.ts +23 -0
  101. package/dist/lib/custom/ai-agent-run/ai-agent-run.component.d.ts.map +1 -1
  102. package/dist/lib/custom/ai-agent-run/ai-agent-run.component.js +276 -216
  103. package/dist/lib/custom/ai-agent-run/ai-agent-run.component.js.map +1 -1
  104. package/dist/lib/custom/custom-forms.module.d.ts +1 -1
  105. package/dist/lib/custom/custom-forms.module.d.ts.map +1 -1
  106. package/dist/lib/custom/custom-forms.module.js +7 -1
  107. package/dist/lib/custom/custom-forms.module.js.map +1 -1
  108. package/dist/lib/generated/Entities/MJAIPromptRun/mjaipromptrun.form.component.d.ts.map +1 -1
  109. package/dist/lib/generated/Entities/MJAIPromptRun/mjaipromptrun.form.component.js +32 -14
  110. package/dist/lib/generated/Entities/MJAIPromptRun/mjaipromptrun.form.component.js.map +1 -1
  111. package/dist/lib/generated/Entities/MJAction/mjaction.form.component.d.ts.map +1 -1
  112. package/dist/lib/generated/Entities/MJAction/mjaction.form.component.js +119 -95
  113. package/dist/lib/generated/Entities/MJAction/mjaction.form.component.js.map +1 -1
  114. package/dist/lib/generated/Entities/MJComment/mjcomment.form.component.d.ts +10 -0
  115. package/dist/lib/generated/Entities/MJComment/mjcomment.form.component.d.ts.map +1 -0
  116. package/dist/lib/generated/Entities/MJComment/mjcomment.form.component.js +124 -0
  117. package/dist/lib/generated/Entities/MJComment/mjcomment.form.component.js.map +1 -0
  118. package/dist/lib/generated/Entities/MJCommentType/mjcommenttype.form.component.d.ts +10 -0
  119. package/dist/lib/generated/Entities/MJCommentType/mjcommenttype.form.component.d.ts.map +1 -0
  120. package/dist/lib/generated/Entities/MJCommentType/mjcommenttype.form.component.js +99 -0
  121. package/dist/lib/generated/Entities/MJCommentType/mjcommenttype.form.component.js.map +1 -0
  122. package/dist/lib/generated/Entities/MJConversation/mjconversation.form.component.js +2 -2
  123. package/dist/lib/generated/Entities/MJConversation/mjconversation.form.component.js.map +1 -1
  124. package/dist/lib/generated/Entities/MJConversationType/mjconversationtype.form.component.d.ts +10 -0
  125. package/dist/lib/generated/Entities/MJConversationType/mjconversationtype.form.component.d.ts.map +1 -0
  126. package/dist/lib/generated/Entities/MJConversationType/mjconversationtype.form.component.js +95 -0
  127. package/dist/lib/generated/Entities/MJConversationType/mjconversationtype.form.component.js.map +1 -0
  128. package/dist/lib/generated/Entities/MJDocumentSequenceCounter/mjdocumentsequencecounter.form.component.d.ts +10 -0
  129. package/dist/lib/generated/Entities/MJDocumentSequenceCounter/mjdocumentsequencecounter.form.component.d.ts.map +1 -0
  130. package/dist/lib/generated/Entities/MJDocumentSequenceCounter/mjdocumentsequencecounter.form.component.js +60 -0
  131. package/dist/lib/generated/Entities/MJDocumentSequenceCounter/mjdocumentsequencecounter.form.component.js.map +1 -0
  132. package/dist/lib/generated/Entities/MJEntity/mjentity.form.component.d.ts.map +1 -1
  133. package/dist/lib/generated/Entities/MJEntity/mjentity.form.component.js +124 -106
  134. package/dist/lib/generated/Entities/MJEntity/mjentity.form.component.js.map +1 -1
  135. package/dist/lib/generated/Entities/MJEntityFieldValue/mjentityfieldvalue.form.component.d.ts.map +1 -1
  136. package/dist/lib/generated/Entities/MJEntityFieldValue/mjentityfieldvalue.form.component.js +12 -4
  137. package/dist/lib/generated/Entities/MJEntityFieldValue/mjentityfieldvalue.form.component.js.map +1 -1
  138. package/dist/lib/generated/Entities/MJEntityOrganicKey/mjentityorganickey.form.component.d.ts.map +1 -1
  139. package/dist/lib/generated/Entities/MJEntityOrganicKey/mjentityorganickey.form.component.js +19 -11
  140. package/dist/lib/generated/Entities/MJEntityOrganicKey/mjentityorganickey.form.component.js.map +1 -1
  141. package/dist/lib/generated/Entities/MJEntityUniqueKey/mjentityuniquekey.form.component.d.ts +10 -0
  142. package/dist/lib/generated/Entities/MJEntityUniqueKey/mjentityuniquekey.form.component.d.ts.map +1 -0
  143. package/dist/lib/generated/Entities/MJEntityUniqueKey/mjentityuniquekey.form.component.js +62 -0
  144. package/dist/lib/generated/Entities/MJEntityUniqueKey/mjentityuniquekey.form.component.js.map +1 -0
  145. package/dist/lib/generated/Entities/MJFeatureValue/mjfeaturevalue.form.component.d.ts.map +1 -1
  146. package/dist/lib/generated/Entities/MJFeatureValue/mjfeaturevalue.form.component.js +26 -12
  147. package/dist/lib/generated/Entities/MJFeatureValue/mjfeaturevalue.form.component.js.map +1 -1
  148. package/dist/lib/generated/Entities/MJFieldSuggestion/mjfieldsuggestion.form.component.d.ts +10 -0
  149. package/dist/lib/generated/Entities/MJFieldSuggestion/mjfieldsuggestion.form.component.d.ts.map +1 -0
  150. package/dist/lib/generated/Entities/MJFieldSuggestion/mjfieldsuggestion.form.component.js +140 -0
  151. package/dist/lib/generated/Entities/MJFieldSuggestion/mjfieldsuggestion.form.component.js.map +1 -0
  152. package/dist/lib/generated/Entities/MJFile/mjfile.form.component.d.ts.map +1 -1
  153. package/dist/lib/generated/Entities/MJFile/mjfile.form.component.js +69 -15
  154. package/dist/lib/generated/Entities/MJFile/mjfile.form.component.js.map +1 -1
  155. package/dist/lib/generated/Entities/MJFileStorageProvider/mjfilestorageprovider.form.component.d.ts.map +1 -1
  156. package/dist/lib/generated/Entities/MJFileStorageProvider/mjfilestorageprovider.form.component.js +31 -13
  157. package/dist/lib/generated/Entities/MJFileStorageProvider/mjfilestorageprovider.form.component.js.map +1 -1
  158. package/dist/lib/generated/Entities/MJMLEvaluationProtocol/mjmlevaluationprotocol.form.component.d.ts +10 -0
  159. package/dist/lib/generated/Entities/MJMLEvaluationProtocol/mjmlevaluationprotocol.form.component.d.ts.map +1 -0
  160. package/dist/lib/generated/Entities/MJMLEvaluationProtocol/mjmlevaluationprotocol.form.component.js +205 -0
  161. package/dist/lib/generated/Entities/MJMLEvaluationProtocol/mjmlevaluationprotocol.form.component.js.map +1 -0
  162. package/dist/lib/generated/Entities/MJMLModel/mjmlmodel.form.component.d.ts.map +1 -1
  163. package/dist/lib/generated/Entities/MJMLModel/mjmlmodel.form.component.js +24 -6
  164. package/dist/lib/generated/Entities/MJMLModel/mjmlmodel.form.component.js.map +1 -1
  165. package/dist/lib/generated/Entities/MJMLPredictionUnit/mjmlpredictionunit.form.component.d.ts +10 -0
  166. package/dist/lib/generated/Entities/MJMLPredictionUnit/mjmlpredictionunit.form.component.d.ts.map +1 -0
  167. package/dist/lib/generated/Entities/MJMLPredictionUnit/mjmlpredictionunit.form.component.js +173 -0
  168. package/dist/lib/generated/Entities/MJMLPredictionUnit/mjmlpredictionunit.form.component.js.map +1 -0
  169. package/dist/lib/generated/Entities/MJMLTrainingPipeline/mjmltrainingpipeline.form.component.d.ts.map +1 -1
  170. package/dist/lib/generated/Entities/MJMLTrainingPipeline/mjmltrainingpipeline.form.component.js +46 -24
  171. package/dist/lib/generated/Entities/MJMLTrainingPipeline/mjmltrainingpipeline.form.component.js.map +1 -1
  172. package/dist/lib/generated/Entities/MJMLTrainingRun/mjmltrainingrun.form.component.js +22 -14
  173. package/dist/lib/generated/Entities/MJMLTrainingRun/mjmltrainingrun.form.component.js.map +1 -1
  174. package/dist/lib/generated/Entities/MJMLTrainingSnapshot/mjmltrainingsnapshot.form.component.d.ts +10 -0
  175. package/dist/lib/generated/Entities/MJMLTrainingSnapshot/mjmltrainingsnapshot.form.component.d.ts.map +1 -0
  176. package/dist/lib/generated/Entities/MJMLTrainingSnapshot/mjmltrainingsnapshot.form.component.js +175 -0
  177. package/dist/lib/generated/Entities/MJMLTrainingSnapshot/mjmltrainingsnapshot.form.component.js.map +1 -0
  178. package/dist/lib/generated/Entities/MJQueryField/mjqueryfield.form.component.js +8 -6
  179. package/dist/lib/generated/Entities/MJQueryField/mjqueryfield.form.component.js.map +1 -1
  180. package/dist/lib/generated/Entities/MJRecordProcess/mjrecordprocess.form.component.d.ts.map +1 -1
  181. package/dist/lib/generated/Entities/MJRecordProcess/mjrecordprocess.form.component.js +44 -36
  182. package/dist/lib/generated/Entities/MJRecordProcess/mjrecordprocess.form.component.js.map +1 -1
  183. package/dist/lib/generated/Entities/MJTask/mjtask.form.component.d.ts.map +1 -1
  184. package/dist/lib/generated/Entities/MJTask/mjtask.form.component.js +54 -32
  185. package/dist/lib/generated/Entities/MJTask/mjtask.form.component.js.map +1 -1
  186. package/dist/lib/generated/generated-forms.module.d.ts +452 -443
  187. package/dist/lib/generated/generated-forms.module.d.ts.map +1 -1
  188. package/dist/lib/generated/generated-forms.module.js +27 -0
  189. package/dist/lib/generated/generated-forms.module.js.map +1 -1
  190. package/dist/lib/panels/feature-values/feature-values.panel.js +1 -1
  191. package/dist/lib/panels/feature-values/feature-values.panel.js.map +1 -1
  192. package/dist/lib/panels/model-predictions/model-prediction.logic.d.ts +1 -1
  193. package/dist/lib/panels/model-predictions/model-prediction.logic.d.ts.map +1 -1
  194. package/dist/lib/panels/model-predictions/model-prediction.logic.js.map +1 -1
  195. package/dist/lib/shared/components/template-editor.component.js +2 -2
  196. package/dist/lib/shared/phone-hero.d.ts +17 -0
  197. package/dist/lib/shared/phone-hero.d.ts.map +1 -0
  198. package/dist/lib/shared/phone-hero.js +30 -0
  199. package/dist/lib/shared/phone-hero.js.map +1 -0
  200. package/dist/lib/shared/phone-sections-state.d.ts +28 -0
  201. package/dist/lib/shared/phone-sections-state.d.ts.map +1 -0
  202. package/dist/lib/shared/phone-sections-state.js +38 -0
  203. package/dist/lib/shared/phone-sections-state.js.map +1 -0
  204. package/package.json +50 -50
@@ -20,6 +20,7 @@ import { AIAgentRunAnalyticsComponent } from './ai-agent-run-analytics.component
20
20
  import { AIAgentRunCostService } from './ai-agent-run-cost.service';
21
21
  import { AIAgentRunDataHelper } from './ai-agent-run-data.service';
22
22
  import { ApplicationManager } from '@memberjunction/ng-base-application';
23
+ import { IsPhoneViewport, WatchPhoneViewport } from '@memberjunction/ng-ui-components';
23
24
  import * as i0 from "@angular/core";
24
25
  import * as i1 from "@angular/common";
25
26
  import * as i2 from "@angular/forms";
@@ -49,7 +50,7 @@ function MJAIAgentRunFormComponentExtended_Conditional_8_Template(rf, ctx) { if
49
50
  } }
50
51
  function MJAIAgentRunFormComponentExtended_Conditional_13_Template(rf, ctx) { if (rf & 1) {
51
52
  const _r2 = i0.ɵɵgetCurrentView();
52
- i0.ɵɵelementStart(0, "span", 12)(1, "a", 37);
53
+ i0.ɵɵelementStart(0, "span", 12)(1, "a", 39);
53
54
  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)); });
54
55
  i0.ɵɵtext(2);
55
56
  i0.ɵɵelementEnd()();
@@ -63,8 +64,8 @@ function MJAIAgentRunFormComponentExtended_Conditional_13_Template(rf, ctx) { if
63
64
  function MJAIAgentRunFormComponentExtended_Conditional_16_Template(rf, ctx) { if (rf & 1) {
64
65
  const _r3 = i0.ɵɵgetCurrentView();
65
66
  i0.ɵɵelementStart(0, "span", 14);
66
- i0.ɵɵelement(1, "i", 38);
67
- i0.ɵɵelementStart(2, "a", 39);
67
+ i0.ɵɵelement(1, "i", 40);
68
+ i0.ɵɵelementStart(2, "a", 41);
68
69
  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()); });
69
70
  i0.ɵɵtext(3, "Parent Run");
70
71
  i0.ɵɵelementEnd()();
@@ -75,24 +76,24 @@ function MJAIAgentRunFormComponentExtended_Conditional_16_Template(rf, ctx) { if
75
76
  } }
76
77
  function MJAIAgentRunFormComponentExtended_Conditional_17_Template(rf, ctx) { if (rf & 1) {
77
78
  const _r4 = i0.ɵɵgetCurrentView();
78
- i0.ɵɵelementStart(0, "span", 40);
79
+ i0.ɵɵelementStart(0, "span", 42);
79
80
  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()); });
80
- i0.ɵɵelement(1, "i", 41);
81
+ i0.ɵɵelement(1, "i", 43);
81
82
  i0.ɵɵelementStart(2, "span");
82
83
  i0.ɵɵtext(3, "Conversation");
83
84
  i0.ɵɵelementEnd();
84
- i0.ɵɵelement(4, "i", 42);
85
+ i0.ɵɵelement(4, "i", 44);
85
86
  i0.ɵɵelementEnd();
86
87
  } }
87
88
  function MJAIAgentRunFormComponentExtended_Conditional_19_Template(rf, ctx) { if (rf & 1) {
88
89
  i0.ɵɵelementStart(0, "div", 17);
89
- i0.ɵɵelement(1, "i", 43);
90
+ i0.ɵɵelement(1, "i", 45);
90
91
  i0.ɵɵtext(2, " Plan Mode ");
91
92
  i0.ɵɵelementEnd();
92
93
  } }
93
94
  function MJAIAgentRunFormComponentExtended_Conditional_23_Template(rf, ctx) { if (rf & 1) {
94
95
  i0.ɵɵelementStart(0, "div", 19);
95
- i0.ɵɵelement(1, "i", 44);
96
+ i0.ɵɵelement(1, "i", 46);
96
97
  i0.ɵɵtext(2, " Workflow still running ");
97
98
  i0.ɵɵelementEnd();
98
99
  } }
@@ -146,8 +147,8 @@ function MJAIAgentRunFormComponentExtended_Conditional_37_Conditional_3_Template
146
147
  i0.ɵɵtextInterpolate(i0.ɵɵpipeBind2(2, 1, ctx_r0.costMetrics.totalTokensInput + ctx_r0.costMetrics.totalTokensOutput, "1.0-0"));
147
148
  } }
148
149
  function MJAIAgentRunFormComponentExtended_Conditional_37_Conditional_4_Template(rf, ctx) { if (rf & 1) {
149
- i0.ɵɵelementStart(0, "span", 45);
150
- i0.ɵɵelement(1, "i", 46);
150
+ i0.ɵɵelementStart(0, "span", 47);
151
+ i0.ɵɵelement(1, "i", 48);
151
152
  i0.ɵɵelementEnd();
152
153
  } }
153
154
  function MJAIAgentRunFormComponentExtended_Conditional_37_Template(rf, ctx) { if (rf & 1) {
@@ -155,7 +156,7 @@ function MJAIAgentRunFormComponentExtended_Conditional_37_Template(rf, ctx) { if
155
156
  i0.ɵɵtext(2, "Tokens");
156
157
  i0.ɵɵelementEnd();
157
158
  i0.ɵɵconditionalCreate(3, MJAIAgentRunFormComponentExtended_Conditional_37_Conditional_3_Template, 3, 4, "span", 26);
158
- i0.ɵɵconditionalCreate(4, MJAIAgentRunFormComponentExtended_Conditional_37_Conditional_4_Template, 2, 0, "span", 45);
159
+ i0.ɵɵconditionalCreate(4, MJAIAgentRunFormComponentExtended_Conditional_37_Conditional_4_Template, 2, 0, "span", 47);
159
160
  i0.ɵɵelementEnd();
160
161
  } if (rf & 2) {
161
162
  const ctx_r0 = i0.ɵɵnextContext();
@@ -175,8 +176,8 @@ function MJAIAgentRunFormComponentExtended_Conditional_38_Conditional_3_Template
175
176
  i0.ɵɵtextInterpolate1("$", i0.ɵɵpipeBind2(2, 1, ctx_r0.costMetrics.totalCost, "1.2-4"));
176
177
  } }
177
178
  function MJAIAgentRunFormComponentExtended_Conditional_38_Conditional_4_Template(rf, ctx) { if (rf & 1) {
178
- i0.ɵɵelementStart(0, "span", 45);
179
- i0.ɵɵelement(1, "i", 46);
179
+ i0.ɵɵelementStart(0, "span", 47);
180
+ i0.ɵɵelement(1, "i", 48);
180
181
  i0.ɵɵelementEnd();
181
182
  } }
182
183
  function MJAIAgentRunFormComponentExtended_Conditional_38_Template(rf, ctx) { if (rf & 1) {
@@ -184,7 +185,7 @@ function MJAIAgentRunFormComponentExtended_Conditional_38_Template(rf, ctx) { if
184
185
  i0.ɵɵtext(2, "Cost");
185
186
  i0.ɵɵelementEnd();
186
187
  i0.ɵɵconditionalCreate(3, MJAIAgentRunFormComponentExtended_Conditional_38_Conditional_3_Template, 3, 4, "span", 26);
187
- i0.ɵɵconditionalCreate(4, MJAIAgentRunFormComponentExtended_Conditional_38_Conditional_4_Template, 2, 0, "span", 45);
188
+ i0.ɵɵconditionalCreate(4, MJAIAgentRunFormComponentExtended_Conditional_38_Conditional_4_Template, 2, 0, "span", 47);
188
189
  i0.ɵɵelementEnd();
189
190
  } if (rf & 2) {
190
191
  const ctx_r0 = i0.ɵɵnextContext();
@@ -207,12 +208,12 @@ function MJAIAgentRunFormComponentExtended_Conditional_39_Template(rf, ctx) { if
207
208
  } }
208
209
  function MJAIAgentRunFormComponentExtended_Conditional_40_Template(rf, ctx) { if (rf & 1) {
209
210
  const _r5 = i0.ɵɵgetCurrentView();
210
- i0.ɵɵelementStart(0, "div", 27)(1, "div", 47);
211
- i0.ɵɵelement(2, "i", 48);
212
- i0.ɵɵelementStart(3, "div", 49)(4, "div", 50);
211
+ i0.ɵɵelementStart(0, "div", 27)(1, "div", 49);
212
+ i0.ɵɵelement(2, "i", 50);
213
+ i0.ɵɵelementStart(3, "div", 51)(4, "div", 52);
213
214
  i0.ɵɵtext(5, "Configuration");
214
215
  i0.ɵɵelementEnd();
215
- i0.ɵɵelementStart(6, "div", 51)(7, "a", 52);
216
+ i0.ɵɵelementStart(6, "div", 53)(7, "a", 54);
216
217
  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)); });
217
218
  i0.ɵɵtext(8);
218
219
  i0.ɵɵelementEnd()()()()();
@@ -221,10 +222,10 @@ function MJAIAgentRunFormComponentExtended_Conditional_40_Template(rf, ctx) { if
221
222
  i0.ɵɵadvance(8);
222
223
  i0.ɵɵtextInterpolate1(" ", ctx_r0.record.Configuration || "Unknown", " ");
223
224
  } }
224
- function MJAIAgentRunFormComponentExtended_Conditional_55_Conditional_4_Template(rf, ctx) { if (rf & 1) {
225
+ function MJAIAgentRunFormComponentExtended_Conditional_56_Conditional_4_Template(rf, ctx) { if (rf & 1) {
225
226
  const _r7 = i0.ɵɵgetCurrentView();
226
- i0.ɵɵelementStart(0, "as-split-area", 54)(1, "mj-ai-agent-run-step-detail", 56);
227
- 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)); })("SaveAsWorkflowRequested", function MJAIAgentRunFormComponentExtended_Conditional_55_Conditional_4_Template_mj_ai_agent_run_step_detail_SaveAsWorkflowRequested_1_listener($event) { i0.ɵɵrestoreView(_r7); const ctx_r0 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r0.OnSaveAsWorkflowRequested($event)); });
227
+ i0.ɵɵelementStart(0, "as-split-area", 56)(1, "mj-ai-agent-run-step-detail", 61);
228
+ i0.ɵɵlistener("closePanel", function MJAIAgentRunFormComponentExtended_Conditional_56_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_56_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_56_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)); })("SaveAsWorkflowRequested", function MJAIAgentRunFormComponentExtended_Conditional_56_Conditional_4_Template_mj_ai_agent_run_step_detail_SaveAsWorkflowRequested_1_listener($event) { i0.ɵɵrestoreView(_r7); const ctx_r0 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r0.OnSaveAsWorkflowRequested($event)); });
228
229
  i0.ɵɵelementEnd()();
229
230
  } if (rf & 2) {
230
231
  const ctx_r0 = i0.ɵɵnextContext(2);
@@ -232,60 +233,70 @@ function MJAIAgentRunFormComponentExtended_Conditional_55_Conditional_4_Template
232
233
  i0.ɵɵadvance();
233
234
  i0.ɵɵproperty("selectedTimelineItem", ctx_r0.selectedTimelineItem)("Provider", ctx_r0.ProviderToUse)("SavingWorkflow", ctx_r0.SavingWorkflow);
234
235
  } }
235
- function MJAIAgentRunFormComponentExtended_Conditional_55_Template(rf, ctx) { if (rf & 1) {
236
+ function MJAIAgentRunFormComponentExtended_Conditional_56_Template(rf, ctx) { if (rf & 1) {
236
237
  const _r6 = i0.ɵɵgetCurrentView();
237
- i0.ɵɵelementStart(0, "div", 35)(1, "as-split", 53)(2, "as-split-area", 54)(3, "mj-ai-agent-run-timeline", 55);
238
- 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)); });
239
- i0.ɵɵelementEnd()();
240
- i0.ɵɵconditionalCreate(4, MJAIAgentRunFormComponentExtended_Conditional_55_Conditional_4_Template, 2, 4, "as-split-area", 54);
238
+ i0.ɵɵelementStart(0, "div", 36)(1, "as-split", 55)(2, "as-split-area", 56)(3, "mj-ai-agent-run-timeline", 57);
239
+ i0.ɵɵlistener("itemSelected", function MJAIAgentRunFormComponentExtended_Conditional_56_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_56_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)); });
241
240
  i0.ɵɵelementEnd()();
241
+ i0.ɵɵconditionalCreate(4, MJAIAgentRunFormComponentExtended_Conditional_56_Conditional_4_Template, 2, 4, "as-split-area", 56);
242
+ i0.ɵɵelementEnd();
243
+ i0.ɵɵelementStart(5, "div", 58)(6, "span");
244
+ i0.ɵɵtext(7, "Visualization and Analytics are desktop views for this run.");
245
+ i0.ɵɵelementEnd();
246
+ i0.ɵɵelementStart(8, "button", 59);
247
+ i0.ɵɵlistener("click", function MJAIAgentRunFormComponentExtended_Conditional_56_Template_button_click_8_listener() { i0.ɵɵrestoreView(_r6); const ctx_r0 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r0.CopyPageLink()); });
248
+ i0.ɵɵelement(9, "i", 60);
249
+ i0.ɵɵtext(10, " Copy link ");
250
+ i0.ɵɵelementEnd()()();
242
251
  } if (rf & 2) {
243
252
  const ctx_r0 = i0.ɵɵnextContext();
244
- i0.ɵɵadvance(2);
253
+ i0.ɵɵadvance();
254
+ i0.ɵɵproperty("direction", ctx_r0.TimelineSplitDirection);
255
+ i0.ɵɵadvance();
245
256
  i0.ɵɵproperty("size", ctx_r0.selectedTimelineItem ? 55 : 100);
246
257
  i0.ɵɵadvance();
247
258
  i0.ɵɵproperty("aiAgentRunId", ctx_r0.record.ID)("dataHelper", ctx_r0.dataHelper)("RunTree", ctx_r0.runTree);
248
259
  i0.ɵɵadvance();
249
260
  i0.ɵɵconditional(ctx_r0.selectedTimelineItem ? 4 : -1);
250
261
  } }
251
- function MJAIAgentRunFormComponentExtended_Conditional_56_Conditional_1_Template(rf, ctx) { if (rf & 1) {
252
- i0.ɵɵelement(0, "mj-ai-agent-run-flow", 57);
262
+ function MJAIAgentRunFormComponentExtended_Conditional_57_Conditional_1_Template(rf, ctx) { if (rf & 1) {
263
+ i0.ɵɵelement(0, "mj-ai-agent-run-flow", 62);
253
264
  } if (rf & 2) {
254
265
  const ctx_r0 = i0.ɵɵnextContext(2);
255
266
  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);
256
267
  } }
257
- function MJAIAgentRunFormComponentExtended_Conditional_56_Template(rf, ctx) { if (rf & 1) {
258
- i0.ɵɵelementStart(0, "div", 35);
259
- i0.ɵɵconditionalCreate(1, MJAIAgentRunFormComponentExtended_Conditional_56_Conditional_1_Template, 1, 7, "mj-ai-agent-run-flow", 57);
268
+ function MJAIAgentRunFormComponentExtended_Conditional_57_Template(rf, ctx) { if (rf & 1) {
269
+ i0.ɵɵelementStart(0, "div", 37);
270
+ i0.ɵɵconditionalCreate(1, MJAIAgentRunFormComponentExtended_Conditional_57_Conditional_1_Template, 1, 7, "mj-ai-agent-run-flow", 62);
260
271
  i0.ɵɵelementEnd();
261
272
  } if (rf & 2) {
262
273
  const ctx_r0 = i0.ɵɵnextContext();
263
274
  i0.ɵɵadvance();
264
275
  i0.ɵɵconditional(ctx_r0.visualizationLoaded ? 1 : -1);
265
276
  } }
266
- function MJAIAgentRunFormComponentExtended_Conditional_57_Conditional_1_Template(rf, ctx) { if (rf & 1) {
267
- i0.ɵɵelement(0, "mj-ai-agent-run-analytics", 58, 0);
277
+ function MJAIAgentRunFormComponentExtended_Conditional_58_Conditional_1_Template(rf, ctx) { if (rf & 1) {
278
+ i0.ɵɵelement(0, "mj-ai-agent-run-analytics", 63, 0);
268
279
  } if (rf & 2) {
269
280
  const ctx_r0 = i0.ɵɵnextContext(2);
270
281
  i0.ɵɵproperty("agentRunId", ctx_r0.record.ID)("RunTree", ctx_r0.runTree);
271
282
  } }
272
- function MJAIAgentRunFormComponentExtended_Conditional_57_Template(rf, ctx) { if (rf & 1) {
273
- i0.ɵɵelementStart(0, "div", 35);
274
- i0.ɵɵconditionalCreate(1, MJAIAgentRunFormComponentExtended_Conditional_57_Conditional_1_Template, 2, 2, "mj-ai-agent-run-analytics", 58);
283
+ function MJAIAgentRunFormComponentExtended_Conditional_58_Template(rf, ctx) { if (rf & 1) {
284
+ i0.ɵɵelementStart(0, "div", 37);
285
+ i0.ɵɵconditionalCreate(1, MJAIAgentRunFormComponentExtended_Conditional_58_Conditional_1_Template, 2, 2, "mj-ai-agent-run-analytics", 63);
275
286
  i0.ɵɵelementEnd();
276
287
  } if (rf & 2) {
277
288
  const ctx_r0 = i0.ɵɵnextContext();
278
289
  i0.ɵɵadvance();
279
290
  i0.ɵɵconditional(ctx_r0.analyticsLoaded ? 1 : -1);
280
291
  } }
281
- function MJAIAgentRunFormComponentExtended_Conditional_58_ng_template_2_Template(rf, ctx) { if (rf & 1) {
282
- i0.ɵɵelement(0, "i", 33);
292
+ function MJAIAgentRunFormComponentExtended_Conditional_59_ng_template_2_Template(rf, ctx) { if (rf & 1) {
293
+ i0.ɵɵelement(0, "i", 34);
283
294
  i0.ɵɵtext(1, " General Information ");
284
295
  } }
285
- function MJAIAgentRunFormComponentExtended_Conditional_58_Conditional_14_Template(rf, ctx) { if (rf & 1) {
296
+ function MJAIAgentRunFormComponentExtended_Conditional_59_Conditional_14_Template(rf, ctx) { if (rf & 1) {
286
297
  const _r9 = i0.ɵɵgetCurrentView();
287
- i0.ɵɵelementStart(0, "a", 52);
288
- 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)); });
298
+ i0.ɵɵelementStart(0, "a", 54);
299
+ i0.ɵɵlistener("click", function MJAIAgentRunFormComponentExtended_Conditional_59_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)); });
289
300
  i0.ɵɵtext(1);
290
301
  i0.ɵɵelementEnd();
291
302
  } if (rf & 2) {
@@ -293,15 +304,15 @@ function MJAIAgentRunFormComponentExtended_Conditional_58_Conditional_14_Templat
293
304
  i0.ɵɵadvance();
294
305
  i0.ɵɵtextInterpolate1(" ", ctx_r0.record.ParentRunID, " ");
295
306
  } }
296
- function MJAIAgentRunFormComponentExtended_Conditional_58_Conditional_15_Template(rf, ctx) { if (rf & 1) {
307
+ function MJAIAgentRunFormComponentExtended_Conditional_59_Conditional_15_Template(rf, ctx) { if (rf & 1) {
297
308
  i0.ɵɵelementStart(0, "span");
298
309
  i0.ɵɵtext(1, "None (Root)");
299
310
  i0.ɵɵelementEnd();
300
311
  } }
301
- function MJAIAgentRunFormComponentExtended_Conditional_58_Conditional_20_Template(rf, ctx) { if (rf & 1) {
312
+ function MJAIAgentRunFormComponentExtended_Conditional_59_Conditional_20_Template(rf, ctx) { if (rf & 1) {
302
313
  const _r10 = i0.ɵɵgetCurrentView();
303
- i0.ɵɵelementStart(0, "a", 52);
304
- 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)); });
314
+ i0.ɵɵelementStart(0, "a", 54);
315
+ i0.ɵɵlistener("click", function MJAIAgentRunFormComponentExtended_Conditional_59_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)); });
305
316
  i0.ɵɵtext(1);
306
317
  i0.ɵɵelementEnd();
307
318
  } if (rf & 2) {
@@ -309,15 +320,15 @@ function MJAIAgentRunFormComponentExtended_Conditional_58_Conditional_20_Templat
309
320
  i0.ɵɵadvance();
310
321
  i0.ɵɵtextInterpolate1(" ", ctx_r0.record.LastRunID, " ");
311
322
  } }
312
- function MJAIAgentRunFormComponentExtended_Conditional_58_Conditional_21_Template(rf, ctx) { if (rf & 1) {
323
+ function MJAIAgentRunFormComponentExtended_Conditional_59_Conditional_21_Template(rf, ctx) { if (rf & 1) {
313
324
  i0.ɵɵelementStart(0, "span");
314
325
  i0.ɵɵtext(1, "None");
315
326
  i0.ɵɵelementEnd();
316
327
  } }
317
- function MJAIAgentRunFormComponentExtended_Conditional_58_Conditional_26_Template(rf, ctx) { if (rf & 1) {
328
+ function MJAIAgentRunFormComponentExtended_Conditional_59_Conditional_26_Template(rf, ctx) { if (rf & 1) {
318
329
  const _r11 = i0.ɵɵgetCurrentView();
319
- i0.ɵɵelementStart(0, "a", 52);
320
- 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)); });
330
+ i0.ɵɵelementStart(0, "a", 54);
331
+ i0.ɵɵlistener("click", function MJAIAgentRunFormComponentExtended_Conditional_59_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)); });
321
332
  i0.ɵɵtext(1);
322
333
  i0.ɵɵelementEnd();
323
334
  } if (rf & 2) {
@@ -325,15 +336,15 @@ function MJAIAgentRunFormComponentExtended_Conditional_58_Conditional_26_Templat
325
336
  i0.ɵɵadvance();
326
337
  i0.ɵɵtextInterpolate1(" ", ctx_r0.record.ConversationID, " ");
327
338
  } }
328
- function MJAIAgentRunFormComponentExtended_Conditional_58_Conditional_27_Template(rf, ctx) { if (rf & 1) {
339
+ function MJAIAgentRunFormComponentExtended_Conditional_59_Conditional_27_Template(rf, ctx) { if (rf & 1) {
329
340
  i0.ɵɵelementStart(0, "span");
330
341
  i0.ɵɵtext(1, "N/A");
331
342
  i0.ɵɵelementEnd();
332
343
  } }
333
- function MJAIAgentRunFormComponentExtended_Conditional_58_Conditional_32_Template(rf, ctx) { if (rf & 1) {
344
+ function MJAIAgentRunFormComponentExtended_Conditional_59_Conditional_32_Template(rf, ctx) { if (rf & 1) {
334
345
  const _r12 = i0.ɵɵgetCurrentView();
335
- i0.ɵɵelementStart(0, "a", 52);
336
- 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)); });
346
+ i0.ɵɵelementStart(0, "a", 54);
347
+ i0.ɵɵlistener("click", function MJAIAgentRunFormComponentExtended_Conditional_59_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)); });
337
348
  i0.ɵɵtext(1);
338
349
  i0.ɵɵelementEnd();
339
350
  } if (rf & 2) {
@@ -341,19 +352,19 @@ function MJAIAgentRunFormComponentExtended_Conditional_58_Conditional_32_Templat
341
352
  i0.ɵɵadvance();
342
353
  i0.ɵɵtextInterpolate1(" ", ctx_r0.record.User || "N/A", " ");
343
354
  } }
344
- function MJAIAgentRunFormComponentExtended_Conditional_58_Conditional_33_Template(rf, ctx) { if (rf & 1) {
355
+ function MJAIAgentRunFormComponentExtended_Conditional_59_Conditional_33_Template(rf, ctx) { if (rf & 1) {
345
356
  i0.ɵɵelementStart(0, "span");
346
357
  i0.ɵɵtext(1, "N/A");
347
358
  i0.ɵɵelementEnd();
348
359
  } }
349
- function MJAIAgentRunFormComponentExtended_Conditional_58_ng_template_35_Template(rf, ctx) { if (rf & 1) {
350
- i0.ɵɵelement(0, "i", 67);
360
+ function MJAIAgentRunFormComponentExtended_Conditional_59_ng_template_35_Template(rf, ctx) { if (rf & 1) {
361
+ i0.ɵɵelement(0, "i", 72);
351
362
  i0.ɵɵtext(1, " Execution Settings ");
352
363
  } }
353
- function MJAIAgentRunFormComponentExtended_Conditional_58_Conditional_41_Template(rf, ctx) { if (rf & 1) {
364
+ function MJAIAgentRunFormComponentExtended_Conditional_59_Conditional_41_Template(rf, ctx) { if (rf & 1) {
354
365
  const _r13 = i0.ɵɵgetCurrentView();
355
- i0.ɵɵelementStart(0, "a", 52);
356
- 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)); });
366
+ i0.ɵɵelementStart(0, "a", 54);
367
+ i0.ɵɵlistener("click", function MJAIAgentRunFormComponentExtended_Conditional_59_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)); });
357
368
  i0.ɵɵtext(1);
358
369
  i0.ɵɵelementEnd();
359
370
  } if (rf & 2) {
@@ -361,15 +372,15 @@ function MJAIAgentRunFormComponentExtended_Conditional_58_Conditional_41_Templat
361
372
  i0.ɵɵadvance();
362
373
  i0.ɵɵtextInterpolate1(" ", ctx_r0.record.OverrideModel || "N/A", " ");
363
374
  } }
364
- function MJAIAgentRunFormComponentExtended_Conditional_58_Conditional_42_Template(rf, ctx) { if (rf & 1) {
375
+ function MJAIAgentRunFormComponentExtended_Conditional_59_Conditional_42_Template(rf, ctx) { if (rf & 1) {
365
376
  i0.ɵɵelementStart(0, "span");
366
377
  i0.ɵɵtext(1, "N/A");
367
378
  i0.ɵɵelementEnd();
368
379
  } }
369
- function MJAIAgentRunFormComponentExtended_Conditional_58_Conditional_47_Template(rf, ctx) { if (rf & 1) {
380
+ function MJAIAgentRunFormComponentExtended_Conditional_59_Conditional_47_Template(rf, ctx) { if (rf & 1) {
370
381
  const _r14 = i0.ɵɵgetCurrentView();
371
- i0.ɵɵelementStart(0, "a", 52);
372
- 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)); });
382
+ i0.ɵɵelementStart(0, "a", 54);
383
+ i0.ɵɵlistener("click", function MJAIAgentRunFormComponentExtended_Conditional_59_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)); });
373
384
  i0.ɵɵtext(1);
374
385
  i0.ɵɵelementEnd();
375
386
  } if (rf & 2) {
@@ -377,35 +388,35 @@ function MJAIAgentRunFormComponentExtended_Conditional_58_Conditional_47_Templat
377
388
  i0.ɵɵadvance();
378
389
  i0.ɵɵtextInterpolate1(" ", ctx_r0.record.OverrideVendor || "N/A", " ");
379
390
  } }
380
- function MJAIAgentRunFormComponentExtended_Conditional_58_Conditional_48_Template(rf, ctx) { if (rf & 1) {
391
+ function MJAIAgentRunFormComponentExtended_Conditional_59_Conditional_48_Template(rf, ctx) { if (rf & 1) {
381
392
  i0.ɵɵelementStart(0, "span");
382
393
  i0.ɵɵtext(1, "N/A");
383
394
  i0.ɵɵelementEnd();
384
395
  } }
385
- function MJAIAgentRunFormComponentExtended_Conditional_58_ng_template_55_Template(rf, ctx) { if (rf & 1) {
386
- i0.ɵɵelement(0, "i", 68);
396
+ function MJAIAgentRunFormComponentExtended_Conditional_59_ng_template_55_Template(rf, ctx) { if (rf & 1) {
397
+ i0.ɵɵelement(0, "i", 73);
387
398
  i0.ɵɵtext(1, " Execution Status ");
388
399
  } }
389
- function MJAIAgentRunFormComponentExtended_Conditional_58_Conditional_65_Template(rf, ctx) { if (rf & 1) {
400
+ function MJAIAgentRunFormComponentExtended_Conditional_59_Conditional_65_Template(rf, ctx) { if (rf & 1) {
390
401
  i0.ɵɵelementStart(0, "span");
391
402
  i0.ɵɵtext(1, "In Progress");
392
403
  i0.ɵɵelementEnd();
393
404
  } }
394
- function MJAIAgentRunFormComponentExtended_Conditional_58_Conditional_66_Template(rf, ctx) { if (rf & 1) {
395
- i0.ɵɵelementStart(0, "span", 64);
405
+ function MJAIAgentRunFormComponentExtended_Conditional_59_Conditional_66_Template(rf, ctx) { if (rf & 1) {
406
+ i0.ɵɵelementStart(0, "span", 69);
396
407
  i0.ɵɵtext(1, "Yes");
397
408
  i0.ɵɵelementEnd();
398
409
  } }
399
- function MJAIAgentRunFormComponentExtended_Conditional_58_Conditional_67_Template(rf, ctx) { if (rf & 1) {
400
- i0.ɵɵelementStart(0, "span", 65);
410
+ function MJAIAgentRunFormComponentExtended_Conditional_59_Conditional_67_Template(rf, ctx) { if (rf & 1) {
411
+ i0.ɵɵelementStart(0, "span", 70);
401
412
  i0.ɵɵtext(1, "No");
402
413
  i0.ɵɵelementEnd();
403
414
  } }
404
- function MJAIAgentRunFormComponentExtended_Conditional_58_Conditional_68_Template(rf, ctx) { if (rf & 1) {
405
- i0.ɵɵelementStart(0, "div", 66)(1, "label");
415
+ function MJAIAgentRunFormComponentExtended_Conditional_59_Conditional_68_Template(rf, ctx) { if (rf & 1) {
416
+ i0.ɵɵelementStart(0, "div", 71)(1, "label");
406
417
  i0.ɵɵtext(2, "Message");
407
418
  i0.ɵɵelementEnd();
408
- i0.ɵɵelementStart(3, "div", 69);
419
+ i0.ɵɵelementStart(3, "div", 74);
409
420
  i0.ɵɵtext(4);
410
421
  i0.ɵɵelementEnd()();
411
422
  } if (rf & 2) {
@@ -413,11 +424,11 @@ function MJAIAgentRunFormComponentExtended_Conditional_58_Conditional_68_Templat
413
424
  i0.ɵɵadvance(4);
414
425
  i0.ɵɵtextInterpolate(ctx_r0.record.Message);
415
426
  } }
416
- function MJAIAgentRunFormComponentExtended_Conditional_58_Conditional_69_Template(rf, ctx) { if (rf & 1) {
417
- i0.ɵɵelementStart(0, "div", 66)(1, "label");
427
+ function MJAIAgentRunFormComponentExtended_Conditional_59_Conditional_69_Template(rf, ctx) { if (rf & 1) {
428
+ i0.ɵɵelementStart(0, "div", 71)(1, "label");
418
429
  i0.ɵɵtext(2, "Error Message");
419
430
  i0.ɵɵelementEnd();
420
- i0.ɵɵelementStart(3, "div", 65);
431
+ i0.ɵɵelementStart(3, "div", 70);
421
432
  i0.ɵɵtext(4);
422
433
  i0.ɵɵelementEnd()();
423
434
  } if (rf & 2) {
@@ -425,31 +436,31 @@ function MJAIAgentRunFormComponentExtended_Conditional_58_Conditional_69_Templat
425
436
  i0.ɵɵadvance(4);
426
437
  i0.ɵɵtextInterpolate(ctx_r0.record.ErrorMessage);
427
438
  } }
428
- function MJAIAgentRunFormComponentExtended_Conditional_58_ng_template_71_Template(rf, ctx) { if (rf & 1) {
429
- i0.ɵɵelement(0, "i", 70);
439
+ function MJAIAgentRunFormComponentExtended_Conditional_59_ng_template_71_Template(rf, ctx) { if (rf & 1) {
440
+ i0.ɵɵelement(0, "i", 75);
430
441
  i0.ɵɵtext(1, " Usage & Cost ");
431
442
  } }
432
- function MJAIAgentRunFormComponentExtended_Conditional_58_Conditional_103_ng_template_1_Template(rf, ctx) { if (rf & 1) {
433
- i0.ɵɵelement(0, "i", 74);
443
+ function MJAIAgentRunFormComponentExtended_Conditional_59_Conditional_103_ng_template_1_Template(rf, ctx) { if (rf & 1) {
444
+ i0.ɵɵelement(0, "i", 79);
434
445
  i0.ɵɵtext(1, " Result ");
435
446
  } }
436
- function MJAIAgentRunFormComponentExtended_Conditional_58_Conditional_103_Conditional_3_Template(rf, ctx) { if (rf & 1) {
437
- i0.ɵɵelement(0, "mj-code-editor", 72);
447
+ function MJAIAgentRunFormComponentExtended_Conditional_59_Conditional_103_Conditional_3_Template(rf, ctx) { if (rf & 1) {
448
+ i0.ɵɵelement(0, "mj-code-editor", 77);
438
449
  } if (rf & 2) {
439
450
  const ctx_r0 = i0.ɵɵnextContext(3);
440
451
  i0.ɵɵproperty("ngModel", ctx_r0.parsedResult)("language", "json")("readonly", true);
441
452
  } }
442
- function MJAIAgentRunFormComponentExtended_Conditional_58_Conditional_103_Conditional_4_Template(rf, ctx) { if (rf & 1) {
443
- i0.ɵɵelementStart(0, "div", 73);
444
- i0.ɵɵelement(1, "i", 46);
453
+ function MJAIAgentRunFormComponentExtended_Conditional_59_Conditional_103_Conditional_4_Template(rf, ctx) { if (rf & 1) {
454
+ i0.ɵɵelementStart(0, "div", 78);
455
+ i0.ɵɵelement(1, "i", 48);
445
456
  i0.ɵɵtext(2, " Loading result data... ");
446
457
  i0.ɵɵelementEnd();
447
458
  } }
448
- function MJAIAgentRunFormComponentExtended_Conditional_58_Conditional_103_Template(rf, ctx) { if (rf & 1) {
449
- i0.ɵɵelementStart(0, "mj-accordion-panel", 59);
450
- i0.ɵɵtemplate(1, MJAIAgentRunFormComponentExtended_Conditional_58_Conditional_103_ng_template_1_Template, 2, 0, "ng-template", 60);
451
- i0.ɵɵelementStart(2, "div", 71);
452
- i0.ɵɵconditionalCreate(3, MJAIAgentRunFormComponentExtended_Conditional_58_Conditional_103_Conditional_3_Template, 1, 3, "mj-code-editor", 72)(4, MJAIAgentRunFormComponentExtended_Conditional_58_Conditional_103_Conditional_4_Template, 3, 0, "div", 73);
459
+ function MJAIAgentRunFormComponentExtended_Conditional_59_Conditional_103_Template(rf, ctx) { if (rf & 1) {
460
+ i0.ɵɵelementStart(0, "mj-accordion-panel", 64);
461
+ i0.ɵɵtemplate(1, MJAIAgentRunFormComponentExtended_Conditional_59_Conditional_103_ng_template_1_Template, 2, 0, "ng-template", 65);
462
+ i0.ɵɵelementStart(2, "div", 76);
463
+ i0.ɵɵconditionalCreate(3, MJAIAgentRunFormComponentExtended_Conditional_59_Conditional_103_Conditional_3_Template, 1, 3, "mj-code-editor", 77)(4, MJAIAgentRunFormComponentExtended_Conditional_59_Conditional_103_Conditional_4_Template, 3, 0, "div", 78);
453
464
  i0.ɵɵelementEnd()();
454
465
  } if (rf & 2) {
455
466
  const ctx_r0 = i0.ɵɵnextContext(2);
@@ -457,27 +468,27 @@ function MJAIAgentRunFormComponentExtended_Conditional_58_Conditional_103_Templa
457
468
  i0.ɵɵadvance(3);
458
469
  i0.ɵɵconditional(ctx_r0.isParsingComplete ? 3 : 4);
459
470
  } }
460
- function MJAIAgentRunFormComponentExtended_Conditional_58_Conditional_104_ng_template_1_Template(rf, ctx) { if (rf & 1) {
461
- i0.ɵɵelement(0, "i", 75);
471
+ function MJAIAgentRunFormComponentExtended_Conditional_59_Conditional_104_ng_template_1_Template(rf, ctx) { if (rf & 1) {
472
+ i0.ɵɵelement(0, "i", 80);
462
473
  i0.ɵɵtext(1, " Starting Payload ");
463
474
  } }
464
- function MJAIAgentRunFormComponentExtended_Conditional_58_Conditional_104_Conditional_3_Template(rf, ctx) { if (rf & 1) {
465
- i0.ɵɵelement(0, "mj-code-editor", 72);
475
+ function MJAIAgentRunFormComponentExtended_Conditional_59_Conditional_104_Conditional_3_Template(rf, ctx) { if (rf & 1) {
476
+ i0.ɵɵelement(0, "mj-code-editor", 77);
466
477
  } if (rf & 2) {
467
478
  const ctx_r0 = i0.ɵɵnextContext(3);
468
479
  i0.ɵɵproperty("ngModel", ctx_r0.parsedStartingPayload)("language", "json")("readonly", true);
469
480
  } }
470
- function MJAIAgentRunFormComponentExtended_Conditional_58_Conditional_104_Conditional_4_Template(rf, ctx) { if (rf & 1) {
471
- i0.ɵɵelementStart(0, "div", 73);
472
- i0.ɵɵelement(1, "i", 46);
481
+ function MJAIAgentRunFormComponentExtended_Conditional_59_Conditional_104_Conditional_4_Template(rf, ctx) { if (rf & 1) {
482
+ i0.ɵɵelementStart(0, "div", 78);
483
+ i0.ɵɵelement(1, "i", 48);
473
484
  i0.ɵɵtext(2, " Loading payload data... ");
474
485
  i0.ɵɵelementEnd();
475
486
  } }
476
- function MJAIAgentRunFormComponentExtended_Conditional_58_Conditional_104_Template(rf, ctx) { if (rf & 1) {
477
- i0.ɵɵelementStart(0, "mj-accordion-panel", 59);
478
- i0.ɵɵtemplate(1, MJAIAgentRunFormComponentExtended_Conditional_58_Conditional_104_ng_template_1_Template, 2, 0, "ng-template", 60);
479
- i0.ɵɵelementStart(2, "div", 71);
480
- i0.ɵɵconditionalCreate(3, MJAIAgentRunFormComponentExtended_Conditional_58_Conditional_104_Conditional_3_Template, 1, 3, "mj-code-editor", 72)(4, MJAIAgentRunFormComponentExtended_Conditional_58_Conditional_104_Conditional_4_Template, 3, 0, "div", 73);
487
+ function MJAIAgentRunFormComponentExtended_Conditional_59_Conditional_104_Template(rf, ctx) { if (rf & 1) {
488
+ i0.ɵɵelementStart(0, "mj-accordion-panel", 64);
489
+ i0.ɵɵtemplate(1, MJAIAgentRunFormComponentExtended_Conditional_59_Conditional_104_ng_template_1_Template, 2, 0, "ng-template", 65);
490
+ i0.ɵɵelementStart(2, "div", 76);
491
+ i0.ɵɵconditionalCreate(3, MJAIAgentRunFormComponentExtended_Conditional_59_Conditional_104_Conditional_3_Template, 1, 3, "mj-code-editor", 77)(4, MJAIAgentRunFormComponentExtended_Conditional_59_Conditional_104_Conditional_4_Template, 3, 0, "div", 78);
481
492
  i0.ɵɵelementEnd()();
482
493
  } if (rf & 2) {
483
494
  const ctx_r0 = i0.ɵɵnextContext(2);
@@ -485,27 +496,27 @@ function MJAIAgentRunFormComponentExtended_Conditional_58_Conditional_104_Templa
485
496
  i0.ɵɵadvance(3);
486
497
  i0.ɵɵconditional(ctx_r0.isParsingComplete ? 3 : 4);
487
498
  } }
488
- function MJAIAgentRunFormComponentExtended_Conditional_58_Conditional_105_ng_template_1_Template(rf, ctx) { if (rf & 1) {
489
- i0.ɵɵelement(0, "i", 76);
499
+ function MJAIAgentRunFormComponentExtended_Conditional_59_Conditional_105_ng_template_1_Template(rf, ctx) { if (rf & 1) {
500
+ i0.ɵɵelement(0, "i", 81);
490
501
  i0.ɵɵtext(1, " Execution Data ");
491
502
  } }
492
- function MJAIAgentRunFormComponentExtended_Conditional_58_Conditional_105_Conditional_3_Template(rf, ctx) { if (rf & 1) {
493
- i0.ɵɵelement(0, "mj-code-editor", 72);
503
+ function MJAIAgentRunFormComponentExtended_Conditional_59_Conditional_105_Conditional_3_Template(rf, ctx) { if (rf & 1) {
504
+ i0.ɵɵelement(0, "mj-code-editor", 77);
494
505
  } if (rf & 2) {
495
506
  const ctx_r0 = i0.ɵɵnextContext(3);
496
507
  i0.ɵɵproperty("ngModel", ctx_r0.parsedData)("language", "json")("readonly", true);
497
508
  } }
498
- function MJAIAgentRunFormComponentExtended_Conditional_58_Conditional_105_Conditional_4_Template(rf, ctx) { if (rf & 1) {
499
- i0.ɵɵelementStart(0, "div", 73);
500
- i0.ɵɵelement(1, "i", 46);
509
+ function MJAIAgentRunFormComponentExtended_Conditional_59_Conditional_105_Conditional_4_Template(rf, ctx) { if (rf & 1) {
510
+ i0.ɵɵelementStart(0, "div", 78);
511
+ i0.ɵɵelement(1, "i", 48);
501
512
  i0.ɵɵtext(2, " Loading execution data... ");
502
513
  i0.ɵɵelementEnd();
503
514
  } }
504
- function MJAIAgentRunFormComponentExtended_Conditional_58_Conditional_105_Template(rf, ctx) { if (rf & 1) {
505
- i0.ɵɵelementStart(0, "mj-accordion-panel", 59);
506
- i0.ɵɵtemplate(1, MJAIAgentRunFormComponentExtended_Conditional_58_Conditional_105_ng_template_1_Template, 2, 0, "ng-template", 60);
507
- i0.ɵɵelementStart(2, "div", 71);
508
- i0.ɵɵconditionalCreate(3, MJAIAgentRunFormComponentExtended_Conditional_58_Conditional_105_Conditional_3_Template, 1, 3, "mj-code-editor", 72)(4, MJAIAgentRunFormComponentExtended_Conditional_58_Conditional_105_Conditional_4_Template, 3, 0, "div", 73);
515
+ function MJAIAgentRunFormComponentExtended_Conditional_59_Conditional_105_Template(rf, ctx) { if (rf & 1) {
516
+ i0.ɵɵelementStart(0, "mj-accordion-panel", 64);
517
+ i0.ɵɵtemplate(1, MJAIAgentRunFormComponentExtended_Conditional_59_Conditional_105_ng_template_1_Template, 2, 0, "ng-template", 65);
518
+ i0.ɵɵelementStart(2, "div", 76);
519
+ i0.ɵɵconditionalCreate(3, MJAIAgentRunFormComponentExtended_Conditional_59_Conditional_105_Conditional_3_Template, 1, 3, "mj-code-editor", 77)(4, MJAIAgentRunFormComponentExtended_Conditional_59_Conditional_105_Conditional_4_Template, 3, 0, "div", 78);
509
520
  i0.ɵɵelementEnd()();
510
521
  } if (rf & 2) {
511
522
  const ctx_r0 = i0.ɵɵnextContext(2);
@@ -513,27 +524,27 @@ function MJAIAgentRunFormComponentExtended_Conditional_58_Conditional_105_Templa
513
524
  i0.ɵɵadvance(3);
514
525
  i0.ɵɵconditional(ctx_r0.isParsingComplete ? 3 : 4);
515
526
  } }
516
- function MJAIAgentRunFormComponentExtended_Conditional_58_Conditional_106_ng_template_1_Template(rf, ctx) { if (rf & 1) {
517
- i0.ɵɵelement(0, "i", 77);
527
+ function MJAIAgentRunFormComponentExtended_Conditional_59_Conditional_106_ng_template_1_Template(rf, ctx) { if (rf & 1) {
528
+ i0.ɵɵelement(0, "i", 82);
518
529
  i0.ɵɵtext(1, " Final Payload ");
519
530
  } }
520
- function MJAIAgentRunFormComponentExtended_Conditional_58_Conditional_106_Conditional_3_Template(rf, ctx) { if (rf & 1) {
521
- i0.ɵɵelement(0, "mj-code-editor", 72);
531
+ function MJAIAgentRunFormComponentExtended_Conditional_59_Conditional_106_Conditional_3_Template(rf, ctx) { if (rf & 1) {
532
+ i0.ɵɵelement(0, "mj-code-editor", 77);
522
533
  } if (rf & 2) {
523
534
  const ctx_r0 = i0.ɵɵnextContext(3);
524
535
  i0.ɵɵproperty("ngModel", ctx_r0.parsedFinalPayload)("language", "json")("readonly", true);
525
536
  } }
526
- function MJAIAgentRunFormComponentExtended_Conditional_58_Conditional_106_Conditional_4_Template(rf, ctx) { if (rf & 1) {
527
- i0.ɵɵelementStart(0, "div", 73);
528
- i0.ɵɵelement(1, "i", 46);
537
+ function MJAIAgentRunFormComponentExtended_Conditional_59_Conditional_106_Conditional_4_Template(rf, ctx) { if (rf & 1) {
538
+ i0.ɵɵelementStart(0, "div", 78);
539
+ i0.ɵɵelement(1, "i", 48);
529
540
  i0.ɵɵtext(2, " Loading final payload data... ");
530
541
  i0.ɵɵelementEnd();
531
542
  } }
532
- function MJAIAgentRunFormComponentExtended_Conditional_58_Conditional_106_Template(rf, ctx) { if (rf & 1) {
533
- i0.ɵɵelementStart(0, "mj-accordion-panel", 59);
534
- i0.ɵɵtemplate(1, MJAIAgentRunFormComponentExtended_Conditional_58_Conditional_106_ng_template_1_Template, 2, 0, "ng-template", 60);
535
- i0.ɵɵelementStart(2, "div", 71);
536
- i0.ɵɵconditionalCreate(3, MJAIAgentRunFormComponentExtended_Conditional_58_Conditional_106_Conditional_3_Template, 1, 3, "mj-code-editor", 72)(4, MJAIAgentRunFormComponentExtended_Conditional_58_Conditional_106_Conditional_4_Template, 3, 0, "div", 73);
543
+ function MJAIAgentRunFormComponentExtended_Conditional_59_Conditional_106_Template(rf, ctx) { if (rf & 1) {
544
+ i0.ɵɵelementStart(0, "mj-accordion-panel", 64);
545
+ i0.ɵɵtemplate(1, MJAIAgentRunFormComponentExtended_Conditional_59_Conditional_106_ng_template_1_Template, 2, 0, "ng-template", 65);
546
+ i0.ɵɵelementStart(2, "div", 76);
547
+ i0.ɵɵconditionalCreate(3, MJAIAgentRunFormComponentExtended_Conditional_59_Conditional_106_Conditional_3_Template, 1, 3, "mj-code-editor", 77)(4, MJAIAgentRunFormComponentExtended_Conditional_59_Conditional_106_Conditional_4_Template, 3, 0, "div", 78);
537
548
  i0.ɵɵelementEnd()();
538
549
  } if (rf & 2) {
539
550
  const ctx_r0 = i0.ɵɵnextContext(2);
@@ -541,27 +552,27 @@ function MJAIAgentRunFormComponentExtended_Conditional_58_Conditional_106_Templa
541
552
  i0.ɵɵadvance(3);
542
553
  i0.ɵɵconditional(ctx_r0.isParsingComplete ? 3 : 4);
543
554
  } }
544
- function MJAIAgentRunFormComponentExtended_Conditional_58_Conditional_107_ng_template_1_Template(rf, ctx) { if (rf & 1) {
545
- i0.ɵɵelement(0, "i", 80);
555
+ function MJAIAgentRunFormComponentExtended_Conditional_59_Conditional_107_ng_template_1_Template(rf, ctx) { if (rf & 1) {
556
+ i0.ɵɵelement(0, "i", 85);
546
557
  i0.ɵɵtext(1, " Payload Diff ");
547
558
  } }
548
- function MJAIAgentRunFormComponentExtended_Conditional_58_Conditional_107_Conditional_3_Template(rf, ctx) { if (rf & 1) {
549
- i0.ɵɵelement(0, "mj-deep-diff", 79);
559
+ function MJAIAgentRunFormComponentExtended_Conditional_59_Conditional_107_Conditional_3_Template(rf, ctx) { if (rf & 1) {
560
+ i0.ɵɵelement(0, "mj-deep-diff", 84);
550
561
  } if (rf & 2) {
551
562
  const ctx_r0 = i0.ɵɵnextContext(3);
552
563
  i0.ɵɵproperty("oldValue", ctx_r0.startingPayloadObject)("newValue", ctx_r0.finalPayloadObject)("title", "")("showSummary", true)("showUnchanged", false)("expandAll", false)("maxDepth", 10)("maxStringLength", 200)("treatNullAsUndefined", true);
553
564
  } }
554
- function MJAIAgentRunFormComponentExtended_Conditional_58_Conditional_107_Conditional_4_Template(rf, ctx) { if (rf & 1) {
555
- i0.ɵɵelementStart(0, "div", 73);
556
- i0.ɵɵelement(1, "i", 46);
565
+ function MJAIAgentRunFormComponentExtended_Conditional_59_Conditional_107_Conditional_4_Template(rf, ctx) { if (rf & 1) {
566
+ i0.ɵɵelementStart(0, "div", 78);
567
+ i0.ɵɵelement(1, "i", 48);
557
568
  i0.ɵɵtext(2, " Loading payload diff... ");
558
569
  i0.ɵɵelementEnd();
559
570
  } }
560
- function MJAIAgentRunFormComponentExtended_Conditional_58_Conditional_107_Template(rf, ctx) { if (rf & 1) {
561
- i0.ɵɵelementStart(0, "mj-accordion-panel", 59);
562
- i0.ɵɵtemplate(1, MJAIAgentRunFormComponentExtended_Conditional_58_Conditional_107_ng_template_1_Template, 2, 0, "ng-template", 60);
563
- i0.ɵɵelementStart(2, "div", 78);
564
- i0.ɵɵconditionalCreate(3, MJAIAgentRunFormComponentExtended_Conditional_58_Conditional_107_Conditional_3_Template, 1, 9, "mj-deep-diff", 79)(4, MJAIAgentRunFormComponentExtended_Conditional_58_Conditional_107_Conditional_4_Template, 3, 0, "div", 73);
571
+ function MJAIAgentRunFormComponentExtended_Conditional_59_Conditional_107_Template(rf, ctx) { if (rf & 1) {
572
+ i0.ɵɵelementStart(0, "mj-accordion-panel", 64);
573
+ i0.ɵɵtemplate(1, MJAIAgentRunFormComponentExtended_Conditional_59_Conditional_107_ng_template_1_Template, 2, 0, "ng-template", 65);
574
+ i0.ɵɵelementStart(2, "div", 83);
575
+ i0.ɵɵconditionalCreate(3, MJAIAgentRunFormComponentExtended_Conditional_59_Conditional_107_Conditional_3_Template, 1, 9, "mj-deep-diff", 84)(4, MJAIAgentRunFormComponentExtended_Conditional_59_Conditional_107_Conditional_4_Template, 3, 0, "div", 78);
565
576
  i0.ɵɵelementEnd()();
566
577
  } if (rf & 2) {
567
578
  const ctx_r0 = i0.ɵɵnextContext(2);
@@ -569,125 +580,125 @@ function MJAIAgentRunFormComponentExtended_Conditional_58_Conditional_107_Templa
569
580
  i0.ɵɵadvance(3);
570
581
  i0.ɵɵconditional(ctx_r0.isParsingComplete ? 3 : 4);
571
582
  } }
572
- function MJAIAgentRunFormComponentExtended_Conditional_58_Template(rf, ctx) { if (rf & 1) {
583
+ function MJAIAgentRunFormComponentExtended_Conditional_59_Template(rf, ctx) { if (rf & 1) {
573
584
  const _r8 = i0.ɵɵgetCurrentView();
574
- i0.ɵɵelementStart(0, "div", 36)(1, "mj-accordion-panel", 59);
575
- i0.ɵɵtemplate(2, MJAIAgentRunFormComponentExtended_Conditional_58_ng_template_2_Template, 2, 0, "ng-template", 60);
576
- i0.ɵɵelementStart(3, "div", 61)(4, "div", 62)(5, "label");
585
+ i0.ɵɵelementStart(0, "div", 38)(1, "mj-accordion-panel", 64);
586
+ i0.ɵɵtemplate(2, MJAIAgentRunFormComponentExtended_Conditional_59_ng_template_2_Template, 2, 0, "ng-template", 65);
587
+ i0.ɵɵelementStart(3, "div", 66)(4, "div", 67)(5, "label");
577
588
  i0.ɵɵtext(6, "Agent");
578
589
  i0.ɵɵelementEnd();
579
- i0.ɵɵelementStart(7, "span")(8, "a", 52);
580
- 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)); });
590
+ i0.ɵɵelementStart(7, "span")(8, "a", 54);
591
+ i0.ɵɵlistener("click", function MJAIAgentRunFormComponentExtended_Conditional_59_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)); });
581
592
  i0.ɵɵtext(9);
582
593
  i0.ɵɵelementEnd()()();
583
- i0.ɵɵelementStart(10, "div", 62)(11, "label");
594
+ i0.ɵɵelementStart(10, "div", 67)(11, "label");
584
595
  i0.ɵɵtext(12, "Parent Run ID");
585
596
  i0.ɵɵelementEnd();
586
597
  i0.ɵɵelementStart(13, "span");
587
- i0.ɵɵconditionalCreate(14, MJAIAgentRunFormComponentExtended_Conditional_58_Conditional_14_Template, 2, 1, "a", 63);
588
- i0.ɵɵconditionalCreate(15, MJAIAgentRunFormComponentExtended_Conditional_58_Conditional_15_Template, 2, 0, "span");
598
+ i0.ɵɵconditionalCreate(14, MJAIAgentRunFormComponentExtended_Conditional_59_Conditional_14_Template, 2, 1, "a", 68);
599
+ i0.ɵɵconditionalCreate(15, MJAIAgentRunFormComponentExtended_Conditional_59_Conditional_15_Template, 2, 0, "span");
589
600
  i0.ɵɵelementEnd()();
590
- i0.ɵɵelementStart(16, "div", 62)(17, "label");
601
+ i0.ɵɵelementStart(16, "div", 67)(17, "label");
591
602
  i0.ɵɵtext(18, "Last Run ID");
592
603
  i0.ɵɵelementEnd();
593
604
  i0.ɵɵelementStart(19, "span");
594
- i0.ɵɵconditionalCreate(20, MJAIAgentRunFormComponentExtended_Conditional_58_Conditional_20_Template, 2, 1, "a", 63);
595
- i0.ɵɵconditionalCreate(21, MJAIAgentRunFormComponentExtended_Conditional_58_Conditional_21_Template, 2, 0, "span");
605
+ i0.ɵɵconditionalCreate(20, MJAIAgentRunFormComponentExtended_Conditional_59_Conditional_20_Template, 2, 1, "a", 68);
606
+ i0.ɵɵconditionalCreate(21, MJAIAgentRunFormComponentExtended_Conditional_59_Conditional_21_Template, 2, 0, "span");
596
607
  i0.ɵɵelementEnd()();
597
- i0.ɵɵelementStart(22, "div", 62)(23, "label");
608
+ i0.ɵɵelementStart(22, "div", 67)(23, "label");
598
609
  i0.ɵɵtext(24, "Conversation ID");
599
610
  i0.ɵɵelementEnd();
600
611
  i0.ɵɵelementStart(25, "span");
601
- i0.ɵɵconditionalCreate(26, MJAIAgentRunFormComponentExtended_Conditional_58_Conditional_26_Template, 2, 1, "a", 63);
602
- i0.ɵɵconditionalCreate(27, MJAIAgentRunFormComponentExtended_Conditional_58_Conditional_27_Template, 2, 0, "span");
612
+ i0.ɵɵconditionalCreate(26, MJAIAgentRunFormComponentExtended_Conditional_59_Conditional_26_Template, 2, 1, "a", 68);
613
+ i0.ɵɵconditionalCreate(27, MJAIAgentRunFormComponentExtended_Conditional_59_Conditional_27_Template, 2, 0, "span");
603
614
  i0.ɵɵelementEnd()();
604
- i0.ɵɵelementStart(28, "div", 62)(29, "label");
615
+ i0.ɵɵelementStart(28, "div", 67)(29, "label");
605
616
  i0.ɵɵtext(30, "User");
606
617
  i0.ɵɵelementEnd();
607
618
  i0.ɵɵelementStart(31, "span");
608
- i0.ɵɵconditionalCreate(32, MJAIAgentRunFormComponentExtended_Conditional_58_Conditional_32_Template, 2, 1, "a", 63);
609
- i0.ɵɵconditionalCreate(33, MJAIAgentRunFormComponentExtended_Conditional_58_Conditional_33_Template, 2, 0, "span");
619
+ i0.ɵɵconditionalCreate(32, MJAIAgentRunFormComponentExtended_Conditional_59_Conditional_32_Template, 2, 1, "a", 68);
620
+ i0.ɵɵconditionalCreate(33, MJAIAgentRunFormComponentExtended_Conditional_59_Conditional_33_Template, 2, 0, "span");
610
621
  i0.ɵɵelementEnd()()()();
611
- i0.ɵɵelementStart(34, "mj-accordion-panel", 59);
612
- i0.ɵɵtemplate(35, MJAIAgentRunFormComponentExtended_Conditional_58_ng_template_35_Template, 2, 0, "ng-template", 60);
613
- i0.ɵɵelementStart(36, "div", 61)(37, "div", 62)(38, "label");
622
+ i0.ɵɵelementStart(34, "mj-accordion-panel", 64);
623
+ i0.ɵɵtemplate(35, MJAIAgentRunFormComponentExtended_Conditional_59_ng_template_35_Template, 2, 0, "ng-template", 65);
624
+ i0.ɵɵelementStart(36, "div", 66)(37, "div", 67)(38, "label");
614
625
  i0.ɵɵtext(39, "Override Model");
615
626
  i0.ɵɵelementEnd();
616
627
  i0.ɵɵelementStart(40, "span");
617
- i0.ɵɵconditionalCreate(41, MJAIAgentRunFormComponentExtended_Conditional_58_Conditional_41_Template, 2, 1, "a", 63);
618
- i0.ɵɵconditionalCreate(42, MJAIAgentRunFormComponentExtended_Conditional_58_Conditional_42_Template, 2, 0, "span");
628
+ i0.ɵɵconditionalCreate(41, MJAIAgentRunFormComponentExtended_Conditional_59_Conditional_41_Template, 2, 1, "a", 68);
629
+ i0.ɵɵconditionalCreate(42, MJAIAgentRunFormComponentExtended_Conditional_59_Conditional_42_Template, 2, 0, "span");
619
630
  i0.ɵɵelementEnd()();
620
- i0.ɵɵelementStart(43, "div", 62)(44, "label");
631
+ i0.ɵɵelementStart(43, "div", 67)(44, "label");
621
632
  i0.ɵɵtext(45, "Override Vendor");
622
633
  i0.ɵɵelementEnd();
623
634
  i0.ɵɵelementStart(46, "span");
624
- i0.ɵɵconditionalCreate(47, MJAIAgentRunFormComponentExtended_Conditional_58_Conditional_47_Template, 2, 1, "a", 63);
625
- i0.ɵɵconditionalCreate(48, MJAIAgentRunFormComponentExtended_Conditional_58_Conditional_48_Template, 2, 0, "span");
635
+ i0.ɵɵconditionalCreate(47, MJAIAgentRunFormComponentExtended_Conditional_59_Conditional_47_Template, 2, 1, "a", 68);
636
+ i0.ɵɵconditionalCreate(48, MJAIAgentRunFormComponentExtended_Conditional_59_Conditional_48_Template, 2, 0, "span");
626
637
  i0.ɵɵelementEnd()();
627
- i0.ɵɵelementStart(49, "div", 62)(50, "label");
638
+ i0.ɵɵelementStart(49, "div", 67)(50, "label");
628
639
  i0.ɵɵtext(51, "Verbose Logging");
629
640
  i0.ɵɵelementEnd();
630
641
  i0.ɵɵelementStart(52, "span");
631
642
  i0.ɵɵtext(53);
632
643
  i0.ɵɵelementEnd()()()();
633
- i0.ɵɵelementStart(54, "mj-accordion-panel", 59);
634
- i0.ɵɵtemplate(55, MJAIAgentRunFormComponentExtended_Conditional_58_ng_template_55_Template, 2, 0, "ng-template", 60);
635
- i0.ɵɵelementStart(56, "div", 61)(57, "div", 62)(58, "label");
644
+ i0.ɵɵelementStart(54, "mj-accordion-panel", 64);
645
+ i0.ɵɵtemplate(55, MJAIAgentRunFormComponentExtended_Conditional_59_ng_template_55_Template, 2, 0, "ng-template", 65);
646
+ i0.ɵɵelementStart(56, "div", 66)(57, "div", 67)(58, "label");
636
647
  i0.ɵɵtext(59, "Status");
637
648
  i0.ɵɵelementEnd();
638
649
  i0.ɵɵelementStart(60, "span", 18);
639
650
  i0.ɵɵtext(61);
640
651
  i0.ɵɵelementEnd()();
641
- i0.ɵɵelementStart(62, "div", 62)(63, "label");
652
+ i0.ɵɵelementStart(62, "div", 67)(63, "label");
642
653
  i0.ɵɵtext(64, "Success");
643
654
  i0.ɵɵelementEnd();
644
- i0.ɵɵconditionalCreate(65, MJAIAgentRunFormComponentExtended_Conditional_58_Conditional_65_Template, 2, 0, "span")(66, MJAIAgentRunFormComponentExtended_Conditional_58_Conditional_66_Template, 2, 0, "span", 64)(67, MJAIAgentRunFormComponentExtended_Conditional_58_Conditional_67_Template, 2, 0, "span", 65);
655
+ i0.ɵɵconditionalCreate(65, MJAIAgentRunFormComponentExtended_Conditional_59_Conditional_65_Template, 2, 0, "span")(66, MJAIAgentRunFormComponentExtended_Conditional_59_Conditional_66_Template, 2, 0, "span", 69)(67, MJAIAgentRunFormComponentExtended_Conditional_59_Conditional_67_Template, 2, 0, "span", 70);
645
656
  i0.ɵɵelementEnd();
646
- i0.ɵɵconditionalCreate(68, MJAIAgentRunFormComponentExtended_Conditional_58_Conditional_68_Template, 5, 1, "div", 66);
647
- i0.ɵɵconditionalCreate(69, MJAIAgentRunFormComponentExtended_Conditional_58_Conditional_69_Template, 5, 1, "div", 66);
657
+ i0.ɵɵconditionalCreate(68, MJAIAgentRunFormComponentExtended_Conditional_59_Conditional_68_Template, 5, 1, "div", 71);
658
+ i0.ɵɵconditionalCreate(69, MJAIAgentRunFormComponentExtended_Conditional_59_Conditional_69_Template, 5, 1, "div", 71);
648
659
  i0.ɵɵelementEnd()();
649
- i0.ɵɵelementStart(70, "mj-accordion-panel", 59);
650
- i0.ɵɵtemplate(71, MJAIAgentRunFormComponentExtended_Conditional_58_ng_template_71_Template, 2, 0, "ng-template", 60);
651
- i0.ɵɵelementStart(72, "div", 61)(73, "div", 62)(74, "label");
660
+ i0.ɵɵelementStart(70, "mj-accordion-panel", 64);
661
+ i0.ɵɵtemplate(71, MJAIAgentRunFormComponentExtended_Conditional_59_ng_template_71_Template, 2, 0, "ng-template", 65);
662
+ i0.ɵɵelementStart(72, "div", 66)(73, "div", 67)(74, "label");
652
663
  i0.ɵɵtext(75, "Total Tokens Used");
653
664
  i0.ɵɵelementEnd();
654
665
  i0.ɵɵelementStart(76, "span");
655
666
  i0.ɵɵtext(77);
656
667
  i0.ɵɵpipe(78, "number");
657
668
  i0.ɵɵelementEnd()();
658
- i0.ɵɵelementStart(79, "div", 62)(80, "label");
669
+ i0.ɵɵelementStart(79, "div", 67)(80, "label");
659
670
  i0.ɵɵtext(81, "Prompt Tokens");
660
671
  i0.ɵɵelementEnd();
661
672
  i0.ɵɵelementStart(82, "span");
662
673
  i0.ɵɵtext(83);
663
674
  i0.ɵɵpipe(84, "number");
664
675
  i0.ɵɵelementEnd()();
665
- i0.ɵɵelementStart(85, "div", 62)(86, "label");
676
+ i0.ɵɵelementStart(85, "div", 67)(86, "label");
666
677
  i0.ɵɵtext(87, "Completion Tokens");
667
678
  i0.ɵɵelementEnd();
668
679
  i0.ɵɵelementStart(88, "span");
669
680
  i0.ɵɵtext(89);
670
681
  i0.ɵɵpipe(90, "number");
671
682
  i0.ɵɵelementEnd()();
672
- i0.ɵɵelementStart(91, "div", 62)(92, "label");
683
+ i0.ɵɵelementStart(91, "div", 67)(92, "label");
673
684
  i0.ɵɵtext(93, "Total Cost");
674
685
  i0.ɵɵelementEnd();
675
686
  i0.ɵɵelementStart(94, "span");
676
687
  i0.ɵɵtext(95);
677
688
  i0.ɵɵpipe(96, "number");
678
689
  i0.ɵɵelementEnd()();
679
- i0.ɵɵelementStart(97, "div", 62)(98, "label");
690
+ i0.ɵɵelementStart(97, "div", 67)(98, "label");
680
691
  i0.ɵɵtext(99, "Total Prompt Iterations");
681
692
  i0.ɵɵelementEnd();
682
693
  i0.ɵɵelementStart(100, "span");
683
694
  i0.ɵɵtext(101);
684
695
  i0.ɵɵpipe(102, "number");
685
696
  i0.ɵɵelementEnd()()()();
686
- i0.ɵɵconditionalCreate(103, MJAIAgentRunFormComponentExtended_Conditional_58_Conditional_103_Template, 5, 2, "mj-accordion-panel", 59);
687
- i0.ɵɵconditionalCreate(104, MJAIAgentRunFormComponentExtended_Conditional_58_Conditional_104_Template, 5, 2, "mj-accordion-panel", 59);
688
- i0.ɵɵconditionalCreate(105, MJAIAgentRunFormComponentExtended_Conditional_58_Conditional_105_Template, 5, 2, "mj-accordion-panel", 59);
689
- i0.ɵɵconditionalCreate(106, MJAIAgentRunFormComponentExtended_Conditional_58_Conditional_106_Template, 5, 2, "mj-accordion-panel", 59);
690
- i0.ɵɵconditionalCreate(107, MJAIAgentRunFormComponentExtended_Conditional_58_Conditional_107_Template, 5, 2, "mj-accordion-panel", 59);
697
+ i0.ɵɵconditionalCreate(103, MJAIAgentRunFormComponentExtended_Conditional_59_Conditional_103_Template, 5, 2, "mj-accordion-panel", 64);
698
+ i0.ɵɵconditionalCreate(104, MJAIAgentRunFormComponentExtended_Conditional_59_Conditional_104_Template, 5, 2, "mj-accordion-panel", 64);
699
+ i0.ɵɵconditionalCreate(105, MJAIAgentRunFormComponentExtended_Conditional_59_Conditional_105_Template, 5, 2, "mj-accordion-panel", 64);
700
+ i0.ɵɵconditionalCreate(106, MJAIAgentRunFormComponentExtended_Conditional_59_Conditional_106_Template, 5, 2, "mj-accordion-panel", 64);
701
+ i0.ɵɵconditionalCreate(107, MJAIAgentRunFormComponentExtended_Conditional_59_Conditional_107_Template, 5, 2, "mj-accordion-panel", 64);
691
702
  i0.ɵɵelementEnd();
692
703
  } if (rf & 2) {
693
704
  const ctx_r0 = i0.ɵɵnextContext();
@@ -785,6 +796,10 @@ let MJAIAgentRunFormComponentExtended = class MJAIAgentRunFormComponentExtended
785
796
  this.workflowPollTimer = null;
786
797
  // UI state
787
798
  this.ActiveTab = 'timeline';
799
+ /** Phone-width viewport, decided once at init. Visualization and Analytics are desktop views. */
800
+ this.IsPhone = false;
801
+ /** Stops following the breakpoint; set at init, called from ngOnDestroy. */
802
+ this.stopPhoneWatch = () => undefined;
788
803
  this.SelectedTimelineItem = null;
789
804
  this.JsonPanelExpanded = false;
790
805
  this.Loading = false;
@@ -836,6 +851,43 @@ let MJAIAgentRunFormComponentExtended = class MJAIAgentRunFormComponentExtended
836
851
  /** True while a workflow is being saved via `WorkflowSaveOperation`. */
837
852
  this.SavingWorkflow = false;
838
853
  }
854
+ /** The timeline's detail pane sits beside the list on desktop and under it on a phone. */
855
+ get TimelineSplitDirection() {
856
+ return this.IsPhone ? 'vertical' : 'horizontal';
857
+ }
858
+ /** The views that work at phone width, as `mj-section-picker` items. */
859
+ get SectionPickerItems() {
860
+ return [
861
+ { Key: 'timeline', Title: 'Timeline', Icon: 'fas fa-stream' },
862
+ { Key: 'details', Title: 'Details', Icon: 'fas fa-info-circle' },
863
+ ];
864
+ }
865
+ /** A pick from the phone section sheet; only the phone views are accepted. */
866
+ OnSectionPicked(key) {
867
+ if (this.SectionPickerItems.some((i) => i.Key === key))
868
+ this.ChangeTab(key);
869
+ }
870
+ /**
871
+ * Phone defaults, applied at init and whenever the breakpoint is crossed: a run on Visualization or Analytics opens
872
+ * on the timeline instead, since those are desktop views (pan, zoom, charts).
873
+ */
874
+ ApplyPhoneDefaults(isPhone) {
875
+ this.IsPhone = isPhone;
876
+ if (isPhone && !this.SectionPickerItems.some((i) => i.Key === this.ActiveTab))
877
+ this.ActiveTab = 'timeline';
878
+ }
879
+ /**
880
+ * Re-reads the breakpoint and re-applies the phone defaults, so rotating a tablet or resizing
881
+ * below 768px on Visualization or Analytics lands on the timeline the picker names.
882
+ */
883
+ SyncPhoneViewport() {
884
+ this.ApplyPhoneDefaults(IsPhoneViewport());
885
+ this.cdr.markForCheck();
886
+ }
887
+ /** Copies this run's URL so it can be opened on a desktop. */
888
+ CopyPageLink() {
889
+ return this.CopyToClipboard(window.location.href);
890
+ }
839
891
  /** @deprecated Use {@link ActiveTab}. */
840
892
  get activeTab() {
841
893
  return this.ActiveTab;
@@ -1035,6 +1087,8 @@ let MJAIAgentRunFormComponentExtended = class MJAIAgentRunFormComponentExtended
1035
1087
  }
1036
1088
  async ngOnInit() {
1037
1089
  await super.ngOnInit();
1090
+ this.ApplyPhoneDefaults(IsPhoneViewport());
1091
+ this.stopPhoneWatch = WatchPhoneViewport(() => this.SyncPhoneViewport());
1038
1092
  if (this.record && this.record.ID) {
1039
1093
  await Promise.all([
1040
1094
  this.DataHelper.loadAgentRunData(this.record.ID),
@@ -1056,6 +1110,7 @@ let MJAIAgentRunFormComponentExtended = class MJAIAgentRunFormComponentExtended
1056
1110
  }
1057
1111
  ngOnDestroy() {
1058
1112
  super.ngOnDestroy();
1113
+ this.stopPhoneWatch();
1059
1114
  this.destroy$.next();
1060
1115
  this.destroy$.complete();
1061
1116
  this.clearWorkflowPoll();
@@ -1906,7 +1961,7 @@ let MJAIAgentRunFormComponentExtended = class MJAIAgentRunFormComponentExtended
1906
1961
  let _t;
1907
1962
  i0.ɵɵqueryRefresh(_t = i0.ɵɵloadQuery()) && (ctx.TimelineComponent = _t.first);
1908
1963
  i0.ɵɵqueryRefresh(_t = i0.ɵɵloadQuery()) && (ctx.AnalyticsComponent = _t.first);
1909
- } }, 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)", "FieldName", "AgentID", 1, "entity-link", 3, "click", "mjRecordLink", "DisplayName", "HandleClick"], [1, "fas", "fa-level-up-alt"], ["FieldName", "ParentRunID", 1, "parent-link", 3, "click", "mjRecordLink", "HandleClick"], ["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"], ["href", "javascript:void(0)", 1, "entity-link", 3, "click"], ["direction", "horizontal", 2, "height", "100%"], [3, "size"], [3, "itemSelected", "navigateToEntity", "aiAgentRunId", "dataHelper", "RunTree"], [3, "closePanel", "navigateToActionLog", "copyToClipboard", "SaveAsWorkflowRequested", "selectedTimelineItem", "Provider", "SavingWorkflow"], [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) {
1964
+ } }, standalone: false, features: [i0.ɵɵInheritDefinitionFeature], decls: 60, vars: 37, 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, "phone-section-picker", 3, "ActiveKeyChange", "Items", "ActiveKey"], [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", "timeline-tab", 2, "height", "100%"], [1, "tab-content", 2, "height", "100%"], [1, "tab-content"], ["href", "javascript:void(0)", "FieldName", "AgentID", 1, "entity-link", 3, "click", "mjRecordLink", "DisplayName", "HandleClick"], [1, "fas", "fa-level-up-alt"], ["FieldName", "ParentRunID", 1, "parent-link", 3, "click", "mjRecordLink", "HandleClick"], ["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"], ["href", "javascript:void(0)", 1, "entity-link", 3, "click"], [2, "height", "100%", 3, "direction"], [3, "size"], [3, "itemSelected", "navigateToEntity", "aiAgentRunId", "dataHelper", "RunTree"], [1, "phone-desktop-note"], ["mjButton", "", "variant", "flat", "size", "sm", "type", "button", 3, "click"], ["aria-hidden", "true", 1, "fas", "fa-link"], [3, "closePanel", "navigateToActionLog", "copyToClipboard", "SaveAsWorkflowRequested", "selectedTimelineItem", "Provider", "SavingWorkflow"], [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) {
1910
1965
  i0.ɵɵelementStart(0, "div", 1)(1, "div", 2)(2, "div", 3)(3, "div", 4)(4, "div", 5)(5, "div", 6);
1911
1966
  i0.ɵɵconditionalCreate(6, MJAIAgentRunFormComponentExtended_Conditional_6_Template, 1, 2, "img", 7);
1912
1967
  i0.ɵɵconditionalCreate(7, MJAIAgentRunFormComponentExtended_Conditional_7_Template, 1, 1, "i", 8);
@@ -1950,31 +2005,34 @@ let MJAIAgentRunFormComponentExtended = class MJAIAgentRunFormComponentExtended
1950
2005
  i0.ɵɵelementEnd();
1951
2006
  i0.ɵɵconditionalCreate(40, MJAIAgentRunFormComponentExtended_Conditional_40_Template, 9, 1, "div", 27);
1952
2007
  i0.ɵɵelementEnd();
1953
- i0.ɵɵelementStart(41, "div", 28)(42, "button", 29);
1954
- i0.ɵɵlistener("click", function MJAIAgentRunFormComponentExtended_Template_button_click_42_listener() { return ctx.changeTab("timeline"); });
1955
- i0.ɵɵelement(43, "i", 30);
1956
- i0.ɵɵtext(44, " Timeline ");
2008
+ i0.ɵɵelementStart(41, "mj-section-picker", 28);
2009
+ i0.ɵɵlistener("ActiveKeyChange", function MJAIAgentRunFormComponentExtended_Template_mj_section_picker_ActiveKeyChange_41_listener($event) { return ctx.OnSectionPicked($event); });
1957
2010
  i0.ɵɵelementEnd();
1958
- i0.ɵɵelementStart(45, "button", 29);
1959
- i0.ɵɵlistener("click", function MJAIAgentRunFormComponentExtended_Template_button_click_45_listener() { return ctx.changeTab("visualization"); });
1960
- i0.ɵɵelement(46, "i", 31);
1961
- i0.ɵɵtext(47, " Visualization ");
2011
+ i0.ɵɵelementStart(42, "div", 29)(43, "button", 30);
2012
+ i0.ɵɵlistener("click", function MJAIAgentRunFormComponentExtended_Template_button_click_43_listener() { return ctx.changeTab("timeline"); });
2013
+ i0.ɵɵelement(44, "i", 31);
2014
+ i0.ɵɵtext(45, " Timeline ");
1962
2015
  i0.ɵɵelementEnd();
1963
- i0.ɵɵelementStart(48, "button", 29);
1964
- i0.ɵɵlistener("click", function MJAIAgentRunFormComponentExtended_Template_button_click_48_listener() { return ctx.changeTab("analytics"); });
1965
- i0.ɵɵelement(49, "i", 32);
1966
- i0.ɵɵtext(50, " Analytics ");
2016
+ i0.ɵɵelementStart(46, "button", 30);
2017
+ i0.ɵɵlistener("click", function MJAIAgentRunFormComponentExtended_Template_button_click_46_listener() { return ctx.changeTab("visualization"); });
2018
+ i0.ɵɵelement(47, "i", 32);
2019
+ i0.ɵɵtext(48, " Visualization ");
1967
2020
  i0.ɵɵelementEnd();
1968
- i0.ɵɵelementStart(51, "button", 29);
1969
- i0.ɵɵlistener("click", function MJAIAgentRunFormComponentExtended_Template_button_click_51_listener() { return ctx.changeTab("details"); });
1970
- i0.ɵɵelement(52, "i", 33);
1971
- i0.ɵɵtext(53, " Details ");
2021
+ i0.ɵɵelementStart(49, "button", 30);
2022
+ i0.ɵɵlistener("click", function MJAIAgentRunFormComponentExtended_Template_button_click_49_listener() { return ctx.changeTab("analytics"); });
2023
+ i0.ɵɵelement(50, "i", 33);
2024
+ i0.ɵɵtext(51, " Analytics ");
2025
+ i0.ɵɵelementEnd();
2026
+ i0.ɵɵelementStart(52, "button", 30);
2027
+ i0.ɵɵlistener("click", function MJAIAgentRunFormComponentExtended_Template_button_click_52_listener() { return ctx.changeTab("details"); });
2028
+ i0.ɵɵelement(53, "i", 34);
2029
+ i0.ɵɵtext(54, " Details ");
1972
2030
  i0.ɵɵelementEnd()();
1973
- i0.ɵɵelementStart(54, "div", 34);
1974
- i0.ɵɵconditionalCreate(55, MJAIAgentRunFormComponentExtended_Conditional_55_Template, 5, 5, "div", 35);
1975
- i0.ɵɵconditionalCreate(56, MJAIAgentRunFormComponentExtended_Conditional_56_Template, 2, 1, "div", 35);
1976
- i0.ɵɵconditionalCreate(57, MJAIAgentRunFormComponentExtended_Conditional_57_Template, 2, 1, "div", 35);
1977
- i0.ɵɵconditionalCreate(58, MJAIAgentRunFormComponentExtended_Conditional_58_Template, 108, 48, "div", 36);
2031
+ i0.ɵɵelementStart(55, "div", 35);
2032
+ i0.ɵɵconditionalCreate(56, MJAIAgentRunFormComponentExtended_Conditional_56_Template, 11, 6, "div", 36);
2033
+ i0.ɵɵconditionalCreate(57, MJAIAgentRunFormComponentExtended_Conditional_57_Template, 2, 1, "div", 37);
2034
+ i0.ɵɵconditionalCreate(58, MJAIAgentRunFormComponentExtended_Conditional_58_Template, 2, 1, "div", 37);
2035
+ i0.ɵɵconditionalCreate(59, MJAIAgentRunFormComponentExtended_Conditional_59_Template, 108, 48, "div", 38);
1978
2036
  i0.ɵɵelementEnd()()();
1979
2037
  } if (rf & 2) {
1980
2038
  i0.ɵɵadvance(6);
@@ -2002,7 +2060,7 @@ let MJAIAgentRunFormComponentExtended = class MJAIAgentRunFormComponentExtended
2002
2060
  i0.ɵɵadvance();
2003
2061
  i0.ɵɵconditional(ctx.WorkflowStillRunning ? 23 : -1);
2004
2062
  i0.ɵɵadvance(9);
2005
- i0.ɵɵtextInterpolate(i0.ɵɵpipeBind2(33, 32, ctx.record.StartedAt, "medium"));
2063
+ i0.ɵɵtextInterpolate(i0.ɵɵpipeBind2(33, 34, ctx.record.StartedAt, "medium"));
2006
2064
  i0.ɵɵadvance(2);
2007
2065
  i0.ɵɵconditional(ctx.record.CompletedAt ? 34 : -1);
2008
2066
  i0.ɵɵadvance();
@@ -2017,6 +2075,8 @@ let MJAIAgentRunFormComponentExtended = class MJAIAgentRunFormComponentExtended
2017
2075
  i0.ɵɵconditional(ctx.record.EffortLevel ? 39 : -1);
2018
2076
  i0.ɵɵadvance();
2019
2077
  i0.ɵɵconditional(ctx.record.ConfigurationID ? 40 : -1);
2078
+ i0.ɵɵadvance();
2079
+ i0.ɵɵproperty("Items", ctx.SectionPickerItems)("ActiveKey", ctx.ActiveTab);
2020
2080
  i0.ɵɵadvance(2);
2021
2081
  i0.ɵɵclassProp("active", ctx.activeTab === "timeline");
2022
2082
  i0.ɵɵadvance(3);
@@ -2026,14 +2086,14 @@ let MJAIAgentRunFormComponentExtended = class MJAIAgentRunFormComponentExtended
2026
2086
  i0.ɵɵadvance(3);
2027
2087
  i0.ɵɵclassProp("active", ctx.activeTab === "details");
2028
2088
  i0.ɵɵadvance(4);
2029
- i0.ɵɵconditional(ctx.activeTab === "timeline" ? 55 : -1);
2089
+ i0.ɵɵconditional(ctx.activeTab === "timeline" ? 56 : -1);
2030
2090
  i0.ɵɵadvance();
2031
- i0.ɵɵconditional(ctx.activeTab === "visualization" ? 56 : -1);
2091
+ i0.ɵɵconditional(ctx.activeTab === "visualization" ? 57 : -1);
2032
2092
  i0.ɵɵadvance();
2033
- i0.ɵɵconditional(ctx.activeTab === "analytics" ? 57 : -1);
2093
+ i0.ɵɵconditional(ctx.activeTab === "analytics" ? 58 : -1);
2034
2094
  i0.ɵɵadvance();
2035
- i0.ɵɵconditional(ctx.activeTab === "details" ? 58 : -1);
2036
- } }, dependencies: [i1.NgClass, i2.NgControlStatus, i2.NgModel, i3.MJAccordionPanelComponent, i3.MJAccordionTitleDirective, i4.MjRecordLinkDirective, i5.CodeEditorComponent, i6.DeepDiffComponent, i7.SplitComponent, i7.SplitAreaComponent, i8.AIAgentRunTimelineComponent, i9.AIAgentRunAnalyticsComponent, i10.AIAgentRunStepDetailComponent, i11.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.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.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.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.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.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.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.tab-content[_ngcontent-%COMP%] mj-accordion-panel[_ngcontent-%COMP%] {\n display: block;\n margin-bottom: 8px;\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.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.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.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.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.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.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@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.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.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.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 margin-top: 0;\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.detail-pane-content[_ngcontent-%COMP%]:not(.with-tabs) .json-viewer[_ngcontent-%COMP%] {\n margin-top: 16px;\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}"] }); }
2095
+ i0.ɵɵconditional(ctx.activeTab === "details" ? 59 : -1);
2096
+ } }, dependencies: [i1.NgClass, i2.NgControlStatus, i2.NgModel, i3.MJSectionPickerComponent, i3.MJButtonDirective, i3.MJAccordionPanelComponent, i3.MJAccordionTitleDirective, i4.MjRecordLinkDirective, i5.CodeEditorComponent, i6.DeepDiffComponent, i7.SplitComponent, i7.SplitAreaComponent, i8.AIAgentRunTimelineComponent, i9.AIAgentRunAnalyticsComponent, i10.AIAgentRunStepDetailComponent, i11.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.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.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.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.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.phone-section-picker[_ngcontent-%COMP%], \n.phone-desktop-note[_ngcontent-%COMP%] {\n display: none;\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.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.tab-content[_ngcontent-%COMP%] mj-accordion-panel[_ngcontent-%COMP%] {\n display: block;\n margin-bottom: 8px;\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.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.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.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.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.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.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@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 \n .header-right[_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.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.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.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 margin-top: 0;\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.detail-pane-content[_ngcontent-%COMP%]:not(.with-tabs) .json-viewer[_ngcontent-%COMP%] {\n margin-top: 16px;\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}\n\n\n\n@media (max-width: 768px) {\n .tabs[_ngcontent-%COMP%] {\n display: none;\n }\n\n .phone-section-picker[_ngcontent-%COMP%] {\n display: block;\n flex-shrink: 0;\n padding: 4px 8px;\n border-bottom: 1px solid var(--mj-border-default);\n background: var(--mj-bg-surface-sunken);\n }\n\n .timeline-tab[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n }\n\n .timeline-tab[_ngcontent-%COMP%] > as-split[_ngcontent-%COMP%] {\n flex: 1 1 auto;\n min-height: 0;\n height: auto !important;\n }\n\n .phone-desktop-note[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n justify-content: space-between;\n gap: 8px;\n flex-shrink: 0;\n padding: 10px 16px;\n border-top: 1px solid var(--mj-border-default);\n background: var(--mj-bg-surface-sunken);\n color: var(--mj-text-muted);\n font-size: 13px;\n }\n\n .phone-desktop-note[_ngcontent-%COMP%] > span[_ngcontent-%COMP%] {\n min-width: 0;\n }\n\n .header-left[_ngcontent-%COMP%], \n .header-info[_ngcontent-%COMP%] {\n min-width: 0;\n }\n\n .meta-info[_ngcontent-%COMP%] {\n flex-wrap: wrap;\n }\n\n .run-id[_ngcontent-%COMP%] {\n overflow-wrap: anywhere;\n }\n}"] }); }
2037
2097
  };
2038
2098
  MJAIAgentRunFormComponentExtended = __decorate([
2039
2099
  RegisterClass(BaseFormComponent, 'MJ: AI Agent Runs')
@@ -2041,7 +2101,7 @@ MJAIAgentRunFormComponentExtended = __decorate([
2041
2101
  export { MJAIAgentRunFormComponentExtended };
2042
2102
  (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(MJAIAgentRunFormComponentExtended, [{
2043
2103
  type: Component,
2044
- 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)\"\n class=\"entity-link\"\n [mjRecordLink]=\"record\"\n FieldName=\"AgentID\"\n [DisplayName]=\"agent.Name\"\n [HandleClick]=\"false\"\n (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 [mjRecordLink]=\"record\"\n FieldName=\"ParentRunID\"\n [HandleClick]=\"false\"\n (click)=\"navigateToParentRun()\"\n 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 [Provider]=\"ProviderToUse\"\n [SavingWorkflow]=\"SavingWorkflow\"\n (closePanel)=\"closeJsonPanel()\"\n (navigateToActionLog)=\"navigateToActionLog($event)\"\n (copyToClipboard)=\"copyToClipboard($event)\"\n (SaveAsWorkflowRequested)=\"OnSaveAsWorkflowRequested($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 (ShowResultPanel) {\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"] }]
2104
+ 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)\"\n class=\"entity-link\"\n [mjRecordLink]=\"record\"\n FieldName=\"AgentID\"\n [DisplayName]=\"agent.Name\"\n [HandleClick]=\"false\"\n (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 [mjRecordLink]=\"record\"\n FieldName=\"ParentRunID\"\n [HandleClick]=\"false\"\n (click)=\"navigateToParentRun()\"\n 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 <!-- Phone: the strip becomes one button that opens the Sections sheet (Timeline, Details) -->\n <mj-section-picker class=\"phone-section-picker\"\n [Items]=\"SectionPickerItems\"\n [ActiveKey]=\"ActiveTab\"\n (ActiveKeyChange)=\"OnSectionPicked($event)\"></mj-section-picker>\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 timeline-tab\" style=\"height: 100%;\">\n <as-split [direction]=\"TimelineSplitDirection\" 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 [Provider]=\"ProviderToUse\"\n [SavingWorkflow]=\"SavingWorkflow\"\n (closePanel)=\"closeJsonPanel()\"\n (navigateToActionLog)=\"navigateToActionLog($event)\"\n (copyToClipboard)=\"copyToClipboard($event)\"\n (SaveAsWorkflowRequested)=\"OnSaveAsWorkflowRequested($event)\">\n </mj-ai-agent-run-step-detail>\n </as-split-area>\n }\n </as-split>\n <!-- Phone only: the desktop-only views are named, with a link to open the run there -->\n <div class=\"phone-desktop-note\">\n <span>Visualization and Analytics are desktop views for this run.</span>\n <button mjButton variant=\"flat\" size=\"sm\" type=\"button\" (click)=\"CopyPageLink()\">\n <i class=\"fas fa-link\" aria-hidden=\"true\"></i> Copy link\n </button>\n </div>\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 (ShowResultPanel) {\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/* Phone section picker and desktop-views note: hidden until the 768px rule below */\n.phone-section-picker,\n.phone-desktop-note {\n display: none;\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 /* With Plan Mode and \"Workflow still running\" both showing, the badges push Refresh off the edge */\n .header-right {\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\n/* Phone (375px): the tab strip becomes one section-picker button (Timeline, Details); the\n desktop-only views are named under the timeline with a link to open the run on a desktop. */\n@media (max-width: 768px) {\n .tabs {\n display: none;\n }\n\n .phone-section-picker {\n display: block;\n flex-shrink: 0;\n padding: 4px 8px;\n border-bottom: 1px solid var(--mj-border-default);\n background: var(--mj-bg-surface-sunken);\n }\n\n .timeline-tab {\n display: flex;\n flex-direction: column;\n }\n\n .timeline-tab > as-split {\n flex: 1 1 auto;\n min-height: 0;\n height: auto !important;\n }\n\n .phone-desktop-note {\n display: flex;\n align-items: center;\n justify-content: space-between;\n gap: 8px;\n flex-shrink: 0;\n padding: 10px 16px;\n border-top: 1px solid var(--mj-border-default);\n background: var(--mj-bg-surface-sunken);\n color: var(--mj-text-muted);\n font-size: 13px;\n }\n\n .phone-desktop-note > span {\n min-width: 0;\n }\n\n .header-left,\n .header-info {\n min-width: 0;\n }\n\n .meta-info {\n flex-wrap: wrap;\n }\n\n .run-id {\n overflow-wrap: anywhere;\n }\n}\n"] }]
2045
2105
  }], null, { TimelineComponent: [{
2046
2106
  type: ViewChild,
2047
2107
  args: [AIAgentRunTimelineComponent]
@@ -2049,5 +2109,5 @@ export { MJAIAgentRunFormComponentExtended };
2049
2109
  type: ViewChild,
2050
2110
  args: [AIAgentRunAnalyticsComponent]
2051
2111
  }] }); })();
2052
- (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassDebugInfo(MJAIAgentRunFormComponentExtended, { className: "MJAIAgentRunFormComponentExtended", filePath: "src/lib/custom/ai-agent-run/ai-agent-run.component.ts", lineNumber: 49 }); })();
2112
+ (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassDebugInfo(MJAIAgentRunFormComponentExtended, { className: "MJAIAgentRunFormComponentExtended", filePath: "src/lib/custom/ai-agent-run/ai-agent-run.component.ts", lineNumber: 50 }); })();
2053
2113
  //# sourceMappingURL=ai-agent-run.component.js.map