@memberjunction/ng-core-entity-forms 6.2.0-edge.5 → 6.2.0-edge.6

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 (145) hide show
  1. package/dist/lib/custom/AIAgentSessions/ai-agent-session-form.component.d.ts +2 -0
  2. package/dist/lib/custom/AIAgentSessions/ai-agent-session-form.component.d.ts.map +1 -1
  3. package/dist/lib/custom/AIAgentSessions/ai-agent-session-form.component.js +103 -95
  4. package/dist/lib/custom/AIAgentSessions/ai-agent-session-form.component.js.map +1 -1
  5. package/dist/lib/custom/AIAgents/ai-agent-form.component.d.ts +6 -0
  6. package/dist/lib/custom/AIAgents/ai-agent-form.component.d.ts.map +1 -1
  7. package/dist/lib/custom/AIAgents/ai-agent-form.component.js +6 -0
  8. package/dist/lib/custom/AIAgents/ai-agent-form.component.js.map +1 -1
  9. package/dist/lib/custom/AIPromptRuns/ai-prompt-run-form.component.d.ts +2 -0
  10. package/dist/lib/custom/AIPromptRuns/ai-prompt-run-form.component.d.ts.map +1 -1
  11. package/dist/lib/custom/AIPromptRuns/ai-prompt-run-form.component.js +2 -0
  12. package/dist/lib/custom/AIPromptRuns/ai-prompt-run-form.component.js.map +1 -1
  13. package/dist/lib/custom/AIPrompts/ai-prompt-form.component.d.ts +2 -0
  14. package/dist/lib/custom/AIPrompts/ai-prompt-form.component.d.ts.map +1 -1
  15. package/dist/lib/custom/AIPrompts/ai-prompt-form.component.js +21 -1
  16. package/dist/lib/custom/AIPrompts/ai-prompt-form.component.js.map +1 -1
  17. package/dist/lib/custom/Actions/action-form.component.d.ts +2 -0
  18. package/dist/lib/custom/Actions/action-form.component.d.ts.map +1 -1
  19. package/dist/lib/custom/Actions/action-form.component.js +29 -11
  20. package/dist/lib/custom/Actions/action-form.component.js.map +1 -1
  21. package/dist/lib/custom/EntityActions/entityaction.form.component.d.ts +2 -0
  22. package/dist/lib/custom/EntityActions/entityaction.form.component.d.ts.map +1 -1
  23. package/dist/lib/custom/EntityActions/entityaction.form.component.js +2 -0
  24. package/dist/lib/custom/EntityActions/entityaction.form.component.js.map +1 -1
  25. package/dist/lib/custom/MLModels/ml-model-view-models.d.ts +11 -4
  26. package/dist/lib/custom/MLModels/ml-model-view-models.d.ts.map +1 -1
  27. package/dist/lib/custom/MLModels/ml-model-view-models.js +14 -0
  28. package/dist/lib/custom/MLModels/ml-model-view-models.js.map +1 -1
  29. package/dist/lib/custom/MLModels/ps-model-detail.component.d.ts +15 -0
  30. package/dist/lib/custom/MLModels/ps-model-detail.component.d.ts.map +1 -1
  31. package/dist/lib/custom/MLModels/ps-model-detail.component.js +186 -92
  32. package/dist/lib/custom/MLModels/ps-model-detail.component.js.map +1 -1
  33. package/dist/lib/custom/Queries/query-form.component.d.ts +2 -0
  34. package/dist/lib/custom/Queries/query-form.component.d.ts.map +1 -1
  35. package/dist/lib/custom/Queries/query-form.component.js +2 -0
  36. package/dist/lib/custom/Queries/query-form.component.js.map +1 -1
  37. package/dist/lib/custom/Templates/templates-form.component.d.ts +19 -1
  38. package/dist/lib/custom/Templates/templates-form.component.d.ts.map +1 -1
  39. package/dist/lib/custom/Templates/templates-form.component.js +20 -27
  40. package/dist/lib/custom/Templates/templates-form.component.js.map +1 -1
  41. package/dist/lib/custom/Tests/entity-link-pill.component.d.ts.map +1 -1
  42. package/dist/lib/custom/Tests/entity-link-pill.component.js +14 -6
  43. package/dist/lib/custom/Tests/entity-link-pill.component.js.map +1 -1
  44. package/dist/lib/custom/ai-agent-run/ai-agent-run.component.d.ts.map +1 -1
  45. package/dist/lib/custom/ai-agent-run/ai-agent-run.component.js +121 -111
  46. package/dist/lib/custom/ai-agent-run/ai-agent-run.component.js.map +1 -1
  47. package/dist/lib/generated/Entities/MJAIAgentRun/mjaiagentrun.form.component.js +105 -103
  48. package/dist/lib/generated/Entities/MJAIAgentRun/mjaiagentrun.form.component.js.map +1 -1
  49. package/dist/lib/generated/Entities/MJAIAgentSession/mjaiagentsession.form.component.js +2 -2
  50. package/dist/lib/generated/Entities/MJAIAgentSession/mjaiagentsession.form.component.js.map +1 -1
  51. package/dist/lib/generated/Entities/MJCalendarEventLink/mjcalendareventlink.form.component.d.ts +10 -0
  52. package/dist/lib/generated/Entities/MJCalendarEventLink/mjcalendareventlink.form.component.d.ts.map +1 -0
  53. package/dist/lib/generated/Entities/MJCalendarEventLink/mjcalendareventlink.form.component.js +74 -0
  54. package/dist/lib/generated/Entities/MJCalendarEventLink/mjcalendareventlink.form.component.js.map +1 -0
  55. package/dist/lib/generated/Entities/MJCalendarSyncState/mjcalendarsyncstate.form.component.d.ts +10 -0
  56. package/dist/lib/generated/Entities/MJCalendarSyncState/mjcalendarsyncstate.form.component.d.ts.map +1 -0
  57. package/dist/lib/generated/Entities/MJCalendarSyncState/mjcalendarsyncstate.form.component.js +64 -0
  58. package/dist/lib/generated/Entities/MJCalendarSyncState/mjcalendarsyncstate.form.component.js.map +1 -0
  59. package/dist/lib/generated/Entities/MJCommunicationProvider/mjcommunicationprovider.form.component.d.ts.map +1 -1
  60. package/dist/lib/generated/Entities/MJCommunicationProvider/mjcommunicationprovider.form.component.js +62 -16
  61. package/dist/lib/generated/Entities/MJCommunicationProvider/mjcommunicationprovider.form.component.js.map +1 -1
  62. package/dist/lib/generated/Entities/MJCompanyIntegration/mjcompanyintegration.form.component.d.ts.map +1 -1
  63. package/dist/lib/generated/Entities/MJCompanyIntegration/mjcompanyintegration.form.component.js +28 -10
  64. package/dist/lib/generated/Entities/MJCompanyIntegration/mjcompanyintegration.form.component.js.map +1 -1
  65. package/dist/lib/generated/Entities/MJCompanyIntegrationObject/mjcompanyintegrationobject.form.component.d.ts +10 -0
  66. package/dist/lib/generated/Entities/MJCompanyIntegrationObject/mjcompanyintegrationobject.form.component.d.ts.map +1 -0
  67. package/dist/lib/generated/Entities/MJCompanyIntegrationObject/mjcompanyintegrationobject.form.component.js +189 -0
  68. package/dist/lib/generated/Entities/MJCompanyIntegrationObject/mjcompanyintegrationobject.form.component.js.map +1 -0
  69. package/dist/lib/generated/Entities/MJCompanyIntegrationObjectField/mjcompanyintegrationobjectfield.form.component.d.ts +10 -0
  70. package/dist/lib/generated/Entities/MJCompanyIntegrationObjectField/mjcompanyintegrationobjectfield.form.component.d.ts.map +1 -0
  71. package/dist/lib/generated/Entities/MJCompanyIntegrationObjectField/mjcompanyintegrationobjectfield.form.component.js +116 -0
  72. package/dist/lib/generated/Entities/MJCompanyIntegrationObjectField/mjcompanyintegrationobjectfield.form.component.js.map +1 -0
  73. package/dist/lib/generated/Entities/MJComponent/mjcomponent.form.component.d.ts.map +1 -1
  74. package/dist/lib/generated/Entities/MJComponent/mjcomponent.form.component.js +51 -35
  75. package/dist/lib/generated/Entities/MJComponent/mjcomponent.form.component.js.map +1 -1
  76. package/dist/lib/generated/Entities/MJContentFileType/mjcontentfiletype.form.component.d.ts.map +1 -1
  77. package/dist/lib/generated/Entities/MJContentFileType/mjcontentfiletype.form.component.js +36 -18
  78. package/dist/lib/generated/Entities/MJContentFileType/mjcontentfiletype.form.component.js.map +1 -1
  79. package/dist/lib/generated/Entities/MJContentItem/mjcontentitem.form.component.d.ts.map +1 -1
  80. package/dist/lib/generated/Entities/MJContentItem/mjcontentitem.form.component.js +74 -60
  81. package/dist/lib/generated/Entities/MJContentItem/mjcontentitem.form.component.js.map +1 -1
  82. package/dist/lib/generated/Entities/MJContentItemChunk/mjcontentitemchunk.form.component.d.ts.map +1 -1
  83. package/dist/lib/generated/Entities/MJContentItemChunk/mjcontentitemchunk.form.component.js +30 -32
  84. package/dist/lib/generated/Entities/MJContentItemChunk/mjcontentitemchunk.form.component.js.map +1 -1
  85. package/dist/lib/generated/Entities/MJContentSource/mjcontentsource.form.component.js +43 -35
  86. package/dist/lib/generated/Entities/MJContentSource/mjcontentsource.form.component.js.map +1 -1
  87. package/dist/lib/generated/Entities/MJContentType/mjcontenttype.form.component.js +21 -19
  88. package/dist/lib/generated/Entities/MJContentType/mjcontenttype.form.component.js.map +1 -1
  89. package/dist/lib/generated/Entities/MJDashboard/mjdashboard.form.component.d.ts.map +1 -1
  90. package/dist/lib/generated/Entities/MJDashboard/mjdashboard.form.component.js +45 -29
  91. package/dist/lib/generated/Entities/MJDashboard/mjdashboard.form.component.js.map +1 -1
  92. package/dist/lib/generated/Entities/MJDuplicateRun/mjduplicaterun.form.component.js +19 -17
  93. package/dist/lib/generated/Entities/MJDuplicateRun/mjduplicaterun.form.component.js.map +1 -1
  94. package/dist/lib/generated/Entities/MJEntity/mjentity.form.component.d.ts.map +1 -1
  95. package/dist/lib/generated/Entities/MJEntity/mjentity.form.component.js +128 -92
  96. package/dist/lib/generated/Entities/MJEntity/mjentity.form.component.js.map +1 -1
  97. package/dist/lib/generated/Entities/MJEntityAlternateBaseView/mjentityalternatebaseview.form.component.d.ts +10 -0
  98. package/dist/lib/generated/Entities/MJEntityAlternateBaseView/mjentityalternatebaseview.form.component.d.ts.map +1 -0
  99. package/dist/lib/generated/Entities/MJEntityAlternateBaseView/mjentityalternatebaseview.form.component.js +129 -0
  100. package/dist/lib/generated/Entities/MJEntityAlternateBaseView/mjentityalternatebaseview.form.component.js.map +1 -0
  101. package/dist/lib/generated/Entities/MJEntityDocument/mjentitydocument.form.component.d.ts.map +1 -1
  102. package/dist/lib/generated/Entities/MJEntityDocument/mjentitydocument.form.component.js +27 -9
  103. package/dist/lib/generated/Entities/MJEntityDocument/mjentitydocument.form.component.js.map +1 -1
  104. package/dist/lib/generated/Entities/MJFile/mjfile.form.component.d.ts.map +1 -1
  105. package/dist/lib/generated/Entities/MJFile/mjfile.form.component.js +30 -12
  106. package/dist/lib/generated/Entities/MJFile/mjfile.form.component.js.map +1 -1
  107. package/dist/lib/generated/Entities/MJIntegration/mjintegration.form.component.d.ts.map +1 -1
  108. package/dist/lib/generated/Entities/MJIntegration/mjintegration.form.component.js +26 -8
  109. package/dist/lib/generated/Entities/MJIntegration/mjintegration.form.component.js.map +1 -1
  110. package/dist/lib/generated/Entities/MJIntegrationObject/mjintegrationobject.form.component.d.ts.map +1 -1
  111. package/dist/lib/generated/Entities/MJIntegrationObject/mjintegrationobject.form.component.js +24 -6
  112. package/dist/lib/generated/Entities/MJIntegrationObject/mjintegrationobject.form.component.js.map +1 -1
  113. package/dist/lib/generated/Entities/MJIntegrationObjectField/mjintegrationobjectfield.form.component.d.ts.map +1 -1
  114. package/dist/lib/generated/Entities/MJIntegrationObjectField/mjintegrationobjectfield.form.component.js +25 -6
  115. package/dist/lib/generated/Entities/MJIntegrationObjectField/mjintegrationobjectfield.form.component.js.map +1 -1
  116. package/dist/lib/generated/Entities/MJQuery/mjquery.form.component.d.ts.map +1 -1
  117. package/dist/lib/generated/Entities/MJQuery/mjquery.form.component.js +73 -59
  118. package/dist/lib/generated/Entities/MJQuery/mjquery.form.component.js.map +1 -1
  119. package/dist/lib/generated/Entities/MJQueryEntity/mjqueryentity.form.component.js +10 -8
  120. package/dist/lib/generated/Entities/MJQueryEntity/mjqueryentity.form.component.js.map +1 -1
  121. package/dist/lib/generated/Entities/MJQueryParameter/mjqueryparameter.form.component.d.ts.map +1 -1
  122. package/dist/lib/generated/Entities/MJQueryParameter/mjqueryparameter.form.component.js +12 -4
  123. package/dist/lib/generated/Entities/MJQueryParameter/mjqueryparameter.form.component.js.map +1 -1
  124. package/dist/lib/generated/Entities/MJUser/mjuser.form.component.d.ts.map +1 -1
  125. package/dist/lib/generated/Entities/MJUser/mjuser.form.component.js +209 -137
  126. package/dist/lib/generated/Entities/MJUser/mjuser.form.component.js.map +1 -1
  127. package/dist/lib/generated/Entities/MJUserView/mjuserview.form.component.js +50 -38
  128. package/dist/lib/generated/Entities/MJUserView/mjuserview.form.component.js.map +1 -1
  129. package/dist/lib/generated/generated-forms.module.d.ts +446 -441
  130. package/dist/lib/generated/generated-forms.module.d.ts.map +1 -1
  131. package/dist/lib/generated/generated-forms.module.js +15 -0
  132. package/dist/lib/generated/generated-forms.module.js.map +1 -1
  133. package/dist/lib/panels/model-predictions/model-prediction.logic.d.ts +10 -0
  134. package/dist/lib/panels/model-predictions/model-prediction.logic.d.ts.map +1 -1
  135. package/dist/lib/panels/model-predictions/model-prediction.logic.js +15 -1
  136. package/dist/lib/panels/model-predictions/model-prediction.logic.js.map +1 -1
  137. package/dist/lib/panels/model-predictions/model-prediction.panel.d.ts +4 -0
  138. package/dist/lib/panels/model-predictions/model-prediction.panel.d.ts.map +1 -1
  139. package/dist/lib/panels/model-predictions/model-prediction.panel.js +77 -61
  140. package/dist/lib/panels/model-predictions/model-prediction.panel.js.map +1 -1
  141. package/dist/lib/shared/components/template-editor.component.d.ts +37 -0
  142. package/dist/lib/shared/components/template-editor.component.d.ts.map +1 -1
  143. package/dist/lib/shared/components/template-editor.component.js +424 -285
  144. package/dist/lib/shared/components/template-editor.component.js.map +1 -1
  145. package/package.json +48 -48
@@ -23,36 +23,40 @@ const _forTrack1 = ($index, $item) => $item.row.ID;
23
23
  const _forTrack2 = ($index, $item) => $item.ID;
24
24
  function MJAIAgentSessionFormComponentExtended_Conditional_0_Conditional_11_Template(rf, ctx) { if (rf & 1) {
25
25
  const _r3 = i0.ɵɵgetCurrentView();
26
- i0.ɵɵelementStart(0, "span", 10)(1, "a", 23);
26
+ i0.ɵɵelementStart(0, "span", 10)(1, "a", 45);
27
27
  i0.ɵɵlistener("click", function MJAIAgentSessionFormComponentExtended_Conditional_0_Conditional_11_Template_a_click_1_listener() { i0.ɵɵrestoreView(_r3); const ctx_r1 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r1.OpenEntityRecord("AI Agents", ctx_r1.record.AgentID)); });
28
28
  i0.ɵɵtext(2);
29
29
  i0.ɵɵelementEnd()();
30
30
  } if (rf & 2) {
31
31
  const ctx_r1 = i0.ɵɵnextContext(2);
32
- i0.ɵɵadvance(2);
32
+ i0.ɵɵadvance();
33
+ i0.ɵɵproperty("mjRecordLink", ctx_r1.record)("HandleClick", false);
34
+ i0.ɵɵadvance();
33
35
  i0.ɵɵtextInterpolate1(" ", ctx_r1.record.Agent || "Agent", " ");
34
36
  } }
35
37
  function MJAIAgentSessionFormComponentExtended_Conditional_0_Conditional_12_Template(rf, ctx) { if (rf & 1) {
36
38
  const _r4 = i0.ɵɵgetCurrentView();
37
- i0.ɵɵelement(0, "i", 45);
38
- i0.ɵɵelementStart(1, "span", 10)(2, "a", 23);
39
+ i0.ɵɵelement(0, "i", 46);
40
+ i0.ɵɵelementStart(1, "span", 10)(2, "a", 47);
39
41
  i0.ɵɵlistener("click", function MJAIAgentSessionFormComponentExtended_Conditional_0_Conditional_12_Template_a_click_2_listener() { i0.ɵɵrestoreView(_r4); const ctx_r1 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r1.OpenEntityRecord("AI Agents", ctx_r1.TargetAgentID)); });
40
42
  i0.ɵɵtext(3);
41
43
  i0.ɵɵelementEnd()();
42
44
  } if (rf & 2) {
43
45
  const ctx_r1 = i0.ɵɵnextContext(2);
44
- i0.ɵɵadvance(3);
46
+ i0.ɵɵadvance(2);
47
+ i0.ɵɵproperty("EntityName", "MJ: AI Agents")("RecordID", ctx_r1.TargetAgentID)("DisplayName", ctx_r1.TargetAgentName || "Target agent")("HandleClick", false);
48
+ i0.ɵɵadvance();
45
49
  i0.ɵɵtextInterpolate1(" ", ctx_r1.TargetAgentName || "Target agent", " ");
46
50
  } }
47
51
  function MJAIAgentSessionFormComponentExtended_Conditional_0_Conditional_15_Template(rf, ctx) { if (rf & 1) {
48
52
  const _r5 = i0.ɵɵgetCurrentView();
49
- i0.ɵɵelementStart(0, "span", 46);
53
+ i0.ɵɵelementStart(0, "span", 48);
50
54
  i0.ɵɵlistener("click", function MJAIAgentSessionFormComponentExtended_Conditional_0_Conditional_15_Template_span_click_0_listener() { i0.ɵɵrestoreView(_r5); const ctx_r1 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r1.NavigateToConversation()); });
51
55
  i0.ɵɵelement(1, "i", 40);
52
56
  i0.ɵɵelementStart(2, "span");
53
57
  i0.ɵɵtext(3);
54
58
  i0.ɵɵelementEnd();
55
- i0.ɵɵelement(4, "i", 47);
59
+ i0.ɵɵelement(4, "i", 49);
56
60
  i0.ɵɵelementEnd();
57
61
  } if (rf & 2) {
58
62
  const ctx_r1 = i0.ɵɵnextContext(2);
@@ -102,7 +106,7 @@ function MJAIAgentSessionFormComponentExtended_Conditional_0_Conditional_54_Temp
102
106
  i0.ɵɵelementStart(0, "div", 20)(1, "span", 21);
103
107
  i0.ɵɵtext(2, "Cost");
104
108
  i0.ɵɵelementEnd();
105
- i0.ɵɵelementStart(3, "span", 48);
109
+ i0.ɵɵelementStart(3, "span", 50);
106
110
  i0.ɵɵtext(4);
107
111
  i0.ɵɵpipe(5, "number");
108
112
  i0.ɵɵelementEnd()();
@@ -113,7 +117,7 @@ function MJAIAgentSessionFormComponentExtended_Conditional_0_Conditional_54_Temp
113
117
  } }
114
118
  function MJAIAgentSessionFormComponentExtended_Conditional_0_Conditional_62_Template(rf, ctx) { if (rf & 1) {
115
119
  const _r6 = i0.ɵɵgetCurrentView();
116
- i0.ɵɵelementStart(0, "a", 23);
120
+ i0.ɵɵelementStart(0, "a", 51);
117
121
  i0.ɵɵlistener("click", function MJAIAgentSessionFormComponentExtended_Conditional_0_Conditional_62_Template_a_click_0_listener() { i0.ɵɵrestoreView(_r6); const ctx_r1 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r1.OpenEntityRecord("AI Agents", ctx_r1.TargetAgentID)); });
118
122
  i0.ɵɵtext(1);
119
123
  i0.ɵɵelementEnd();
@@ -129,7 +133,7 @@ function MJAIAgentSessionFormComponentExtended_Conditional_0_Conditional_63_Temp
129
133
  } }
130
134
  function MJAIAgentSessionFormComponentExtended_Conditional_0_Conditional_77_Template(rf, ctx) { if (rf & 1) {
131
135
  const _r7 = i0.ɵɵgetCurrentView();
132
- i0.ɵɵelementStart(0, "a", 23);
136
+ i0.ɵɵelementStart(0, "a", 51);
133
137
  i0.ɵɵlistener("click", function MJAIAgentSessionFormComponentExtended_Conditional_0_Conditional_77_Template_a_click_0_listener() { i0.ɵɵrestoreView(_r7); const ctx_r1 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r1.OpenEntityRecord("MJ: AI Agent Sessions", ctx_r1.record.LastSessionID)); });
134
138
  i0.ɵɵtext(1, " Resumed from prior session ");
135
139
  i0.ɵɵelementEnd();
@@ -176,20 +180,20 @@ function MJAIAgentSessionFormComponentExtended_Conditional_0_Conditional_97_Temp
176
180
  i0.ɵɵproperty("Message", ctx_r1.LoadError);
177
181
  } }
178
182
  function MJAIAgentSessionFormComponentExtended_Conditional_0_Conditional_98_Conditional_0_Conditional_1_Template(rf, ctx) { if (rf & 1) {
179
- i0.ɵɵelement(0, "mj-empty-state", 50);
183
+ i0.ɵɵelement(0, "mj-empty-state", 53);
180
184
  } }
181
185
  function MJAIAgentSessionFormComponentExtended_Conditional_0_Conditional_98_Conditional_0_Conditional_2_For_2_Conditional_2_Template(rf, ctx) { if (rf & 1) {
182
- i0.ɵɵelement(0, "i", 55);
186
+ i0.ɵɵelement(0, "i", 58);
183
187
  } }
184
188
  function MJAIAgentSessionFormComponentExtended_Conditional_0_Conditional_98_Conditional_0_Conditional_2_For_2_Conditional_3_Template(rf, ctx) { if (rf & 1) {
185
189
  i0.ɵɵelement(0, "i", 7);
186
190
  } }
187
191
  function MJAIAgentSessionFormComponentExtended_Conditional_0_Conditional_98_Conditional_0_Conditional_2_For_2_Conditional_4_Template(rf, ctx) { if (rf & 1) {
188
- i0.ɵɵelement(0, "i", 56);
192
+ i0.ɵɵelement(0, "i", 59);
189
193
  } }
190
194
  function MJAIAgentSessionFormComponentExtended_Conditional_0_Conditional_98_Conditional_0_Conditional_2_For_2_Conditional_21_Template(rf, ctx) { if (rf & 1) {
191
- i0.ɵɵelementStart(0, "span", 64);
192
- i0.ɵɵelement(1, "i", 66);
195
+ i0.ɵɵelementStart(0, "span", 67);
196
+ i0.ɵɵelement(1, "i", 69);
193
197
  i0.ɵɵtext(2);
194
198
  i0.ɵɵpipe(3, "number");
195
199
  i0.ɵɵelementEnd();
@@ -199,8 +203,8 @@ function MJAIAgentSessionFormComponentExtended_Conditional_0_Conditional_98_Cond
199
203
  i0.ɵɵtextInterpolate1(" ", i0.ɵɵpipeBind2(3, 1, node_r9.tokens, "1.0-0"), " tok");
200
204
  } }
201
205
  function MJAIAgentSessionFormComponentExtended_Conditional_0_Conditional_98_Conditional_0_Conditional_2_For_2_Conditional_22_Template(rf, ctx) { if (rf & 1) {
202
- i0.ɵɵelementStart(0, "span", 64);
203
- i0.ɵɵelement(1, "i", 67);
206
+ i0.ɵɵelementStart(0, "span", 67);
207
+ i0.ɵɵelement(1, "i", 70);
204
208
  i0.ɵɵtext(2);
205
209
  i0.ɵɵpipe(3, "number");
206
210
  i0.ɵɵelementEnd();
@@ -211,31 +215,31 @@ function MJAIAgentSessionFormComponentExtended_Conditional_0_Conditional_98_Cond
211
215
  } }
212
216
  function MJAIAgentSessionFormComponentExtended_Conditional_0_Conditional_98_Conditional_0_Conditional_2_For_2_Template(rf, ctx) { if (rf & 1) {
213
217
  const _r8 = i0.ɵɵgetCurrentView();
214
- i0.ɵɵelementStart(0, "div", 53);
218
+ i0.ɵɵelementStart(0, "div", 56);
215
219
  i0.ɵɵlistener("click", function MJAIAgentSessionFormComponentExtended_Conditional_0_Conditional_98_Conditional_0_Conditional_2_For_2_Template_div_click_0_listener() { const node_r9 = i0.ɵɵrestoreView(_r8).$implicit; const ctx_r1 = i0.ɵɵnextContext(5); return i0.ɵɵresetView(ctx_r1.OpenEntityRecord(node_r9.entityName, node_r9.id)); });
216
- i0.ɵɵelementStart(1, "div", 54);
217
- i0.ɵɵconditionalCreate(2, MJAIAgentSessionFormComponentExtended_Conditional_0_Conditional_98_Conditional_0_Conditional_2_For_2_Conditional_2_Template, 1, 0, "i", 55)(3, MJAIAgentSessionFormComponentExtended_Conditional_0_Conditional_98_Conditional_0_Conditional_2_For_2_Conditional_3_Template, 1, 0, "i", 7)(4, MJAIAgentSessionFormComponentExtended_Conditional_0_Conditional_98_Conditional_0_Conditional_2_For_2_Conditional_4_Template, 1, 0, "i", 56);
220
+ i0.ɵɵelementStart(1, "div", 57);
221
+ i0.ɵɵconditionalCreate(2, MJAIAgentSessionFormComponentExtended_Conditional_0_Conditional_98_Conditional_0_Conditional_2_For_2_Conditional_2_Template, 1, 0, "i", 58)(3, MJAIAgentSessionFormComponentExtended_Conditional_0_Conditional_98_Conditional_0_Conditional_2_For_2_Conditional_3_Template, 1, 0, "i", 7)(4, MJAIAgentSessionFormComponentExtended_Conditional_0_Conditional_98_Conditional_0_Conditional_2_For_2_Conditional_4_Template, 1, 0, "i", 59);
218
222
  i0.ɵɵelementEnd();
219
- i0.ɵɵelementStart(5, "div", 57)(6, "div", 58)(7, "h4", 59);
223
+ i0.ɵɵelementStart(5, "div", 60)(6, "div", 61)(7, "h4", 62);
220
224
  i0.ɵɵtext(8);
221
225
  i0.ɵɵelementEnd();
222
- i0.ɵɵelementStart(9, "span", 60);
226
+ i0.ɵɵelementStart(9, "span", 63);
223
227
  i0.ɵɵtext(10);
224
228
  i0.ɵɵpipe(11, "date");
225
229
  i0.ɵɵelementEnd()();
226
- i0.ɵɵelementStart(12, "div", 61);
230
+ i0.ɵɵelementStart(12, "div", 64);
227
231
  i0.ɵɵtext(13);
228
232
  i0.ɵɵelementEnd();
229
- i0.ɵɵelementStart(14, "div", 62)(15, "span", 63);
233
+ i0.ɵɵelementStart(14, "div", 65)(15, "span", 66);
230
234
  i0.ɵɵelement(16, "i", 15);
231
235
  i0.ɵɵtext(17);
232
236
  i0.ɵɵelementEnd();
233
- i0.ɵɵelementStart(18, "span", 64);
234
- i0.ɵɵelement(19, "i", 65);
237
+ i0.ɵɵelementStart(18, "span", 67);
238
+ i0.ɵɵelement(19, "i", 68);
235
239
  i0.ɵɵtext(20);
236
240
  i0.ɵɵelementEnd();
237
- i0.ɵɵconditionalCreate(21, MJAIAgentSessionFormComponentExtended_Conditional_0_Conditional_98_Conditional_0_Conditional_2_For_2_Conditional_21_Template, 4, 4, "span", 64);
238
- i0.ɵɵconditionalCreate(22, MJAIAgentSessionFormComponentExtended_Conditional_0_Conditional_98_Conditional_0_Conditional_2_For_2_Conditional_22_Template, 4, 4, "span", 64);
241
+ i0.ɵɵconditionalCreate(21, MJAIAgentSessionFormComponentExtended_Conditional_0_Conditional_98_Conditional_0_Conditional_2_For_2_Conditional_21_Template, 4, 4, "span", 67);
242
+ i0.ɵɵconditionalCreate(22, MJAIAgentSessionFormComponentExtended_Conditional_0_Conditional_98_Conditional_0_Conditional_2_For_2_Conditional_22_Template, 4, 4, "span", 67);
239
243
  i0.ɵɵelementEnd()()();
240
244
  } if (rf & 2) {
241
245
  const node_r9 = ctx.$implicit;
@@ -266,8 +270,8 @@ function MJAIAgentSessionFormComponentExtended_Conditional_0_Conditional_98_Cond
266
270
  i0.ɵɵconditional(node_r9.cost != null && node_r9.cost > 0 ? 22 : -1);
267
271
  } }
268
272
  function MJAIAgentSessionFormComponentExtended_Conditional_0_Conditional_98_Conditional_0_Conditional_2_Template(rf, ctx) { if (rf & 1) {
269
- i0.ɵɵelementStart(0, "div", 51);
270
- i0.ɵɵrepeaterCreate(1, MJAIAgentSessionFormComponentExtended_Conditional_0_Conditional_98_Conditional_0_Conditional_2_For_2_Template, 23, 21, "div", 52, _forTrack0);
273
+ i0.ɵɵelementStart(0, "div", 54);
274
+ i0.ɵɵrepeaterCreate(1, MJAIAgentSessionFormComponentExtended_Conditional_0_Conditional_98_Conditional_0_Conditional_2_For_2_Template, 23, 21, "div", 55, _forTrack0);
271
275
  i0.ɵɵelementEnd();
272
276
  } if (rf & 2) {
273
277
  const ctx_r1 = i0.ɵɵnextContext(4);
@@ -275,8 +279,8 @@ function MJAIAgentSessionFormComponentExtended_Conditional_0_Conditional_98_Cond
275
279
  i0.ɵɵrepeater(ctx_r1.RunTree);
276
280
  } }
277
281
  function MJAIAgentSessionFormComponentExtended_Conditional_0_Conditional_98_Conditional_0_Template(rf, ctx) { if (rf & 1) {
278
- i0.ɵɵelementStart(0, "div", 49);
279
- i0.ɵɵconditionalCreate(1, MJAIAgentSessionFormComponentExtended_Conditional_0_Conditional_98_Conditional_0_Conditional_1_Template, 1, 0, "mj-empty-state", 50)(2, MJAIAgentSessionFormComponentExtended_Conditional_0_Conditional_98_Conditional_0_Conditional_2_Template, 3, 0, "div", 51);
282
+ i0.ɵɵelementStart(0, "div", 52);
283
+ i0.ɵɵconditionalCreate(1, MJAIAgentSessionFormComponentExtended_Conditional_0_Conditional_98_Conditional_0_Conditional_1_Template, 1, 0, "mj-empty-state", 53)(2, MJAIAgentSessionFormComponentExtended_Conditional_0_Conditional_98_Conditional_0_Conditional_2_Template, 3, 0, "div", 54);
280
284
  i0.ɵɵelementEnd();
281
285
  } if (rf & 2) {
282
286
  const ctx_r1 = i0.ɵɵnextContext(3);
@@ -284,10 +288,10 @@ function MJAIAgentSessionFormComponentExtended_Conditional_0_Conditional_98_Cond
284
288
  i0.ɵɵconditional(ctx_r1.RunTree.length === 0 ? 1 : 2);
285
289
  } }
286
290
  function MJAIAgentSessionFormComponentExtended_Conditional_0_Conditional_98_Conditional_1_Conditional_1_Template(rf, ctx) { if (rf & 1) {
287
- i0.ɵɵelement(0, "mj-empty-state", 68);
291
+ i0.ɵɵelement(0, "mj-empty-state", 71);
288
292
  } }
289
293
  function MJAIAgentSessionFormComponentExtended_Conditional_0_Conditional_98_Conditional_1_Conditional_2_For_20_Conditional_6_Template(rf, ctx) { if (rf & 1) {
290
- i0.ɵɵelementStart(0, "span", 74);
294
+ i0.ɵɵelementStart(0, "span", 77);
291
295
  i0.ɵɵtext(1);
292
296
  i0.ɵɵelementEnd();
293
297
  } if (rf & 2) {
@@ -315,30 +319,30 @@ function MJAIAgentSessionFormComponentExtended_Conditional_0_Conditional_98_Cond
315
319
  } }
316
320
  function MJAIAgentSessionFormComponentExtended_Conditional_0_Conditional_98_Conditional_1_Conditional_2_For_20_Template(rf, ctx) { if (rf & 1) {
317
321
  const _r10 = i0.ɵɵgetCurrentView();
318
- i0.ɵɵelementStart(0, "tr", 72);
322
+ i0.ɵɵelementStart(0, "tr", 75);
319
323
  i0.ɵɵlistener("click", function MJAIAgentSessionFormComponentExtended_Conditional_0_Conditional_98_Conditional_1_Conditional_2_For_20_Template_tr_click_0_listener() { const channel_r11 = i0.ɵɵrestoreView(_r10).$implicit; const ctx_r1 = i0.ɵɵnextContext(5); return i0.ɵɵresetView(ctx_r1.OpenEntityRecord("MJ: AI Agent Session Channels", channel_r11.row.ID)); });
320
- i0.ɵɵelementStart(1, "td")(2, "span", 73);
324
+ i0.ɵɵelementStart(1, "td")(2, "span", 76);
321
325
  i0.ɵɵelement(3, "i", 15);
322
326
  i0.ɵɵtext(4);
323
327
  i0.ɵɵelementEnd()();
324
328
  i0.ɵɵelementStart(5, "td");
325
- i0.ɵɵconditionalCreate(6, MJAIAgentSessionFormComponentExtended_Conditional_0_Conditional_98_Conditional_1_Conditional_2_For_20_Conditional_6_Template, 2, 2, "span", 74)(7, MJAIAgentSessionFormComponentExtended_Conditional_0_Conditional_98_Conditional_1_Conditional_2_For_20_Conditional_7_Template, 2, 0, "span", 31);
329
+ i0.ɵɵconditionalCreate(6, MJAIAgentSessionFormComponentExtended_Conditional_0_Conditional_98_Conditional_1_Conditional_2_For_20_Conditional_6_Template, 2, 2, "span", 77)(7, MJAIAgentSessionFormComponentExtended_Conditional_0_Conditional_98_Conditional_1_Conditional_2_For_20_Conditional_7_Template, 2, 0, "span", 31);
326
330
  i0.ɵɵelementEnd();
327
- i0.ɵɵelementStart(8, "td")(9, "span", 75);
331
+ i0.ɵɵelementStart(8, "td")(9, "span", 78);
328
332
  i0.ɵɵtext(10);
329
333
  i0.ɵɵelementEnd()();
330
- i0.ɵɵelementStart(11, "td", 76);
334
+ i0.ɵɵelementStart(11, "td", 79);
331
335
  i0.ɵɵtext(12);
332
336
  i0.ɵɵpipe(13, "date");
333
337
  i0.ɵɵelementEnd();
334
- i0.ɵɵelementStart(14, "td", 76);
338
+ i0.ɵɵelementStart(14, "td", 79);
335
339
  i0.ɵɵtext(15);
336
340
  i0.ɵɵpipe(16, "date");
337
341
  i0.ɵɵelementEnd();
338
- i0.ɵɵelementStart(17, "td", 76);
342
+ i0.ɵɵelementStart(17, "td", 79);
339
343
  i0.ɵɵconditionalCreate(18, MJAIAgentSessionFormComponentExtended_Conditional_0_Conditional_98_Conditional_1_Conditional_2_For_20_Conditional_18_Template, 2, 4)(19, MJAIAgentSessionFormComponentExtended_Conditional_0_Conditional_98_Conditional_1_Conditional_2_For_20_Conditional_19_Template, 2, 0, "span", 31);
340
344
  i0.ɵɵelementEnd();
341
- i0.ɵɵelementStart(20, "td", 77);
345
+ i0.ɵɵelementStart(20, "td", 80);
342
346
  i0.ɵɵtext(21);
343
347
  i0.ɵɵelementEnd()();
344
348
  } if (rf & 2) {
@@ -366,7 +370,7 @@ function MJAIAgentSessionFormComponentExtended_Conditional_0_Conditional_98_Cond
366
370
  i0.ɵɵtextInterpolate1(" ", channel_r11.row.SocketUrl || "\u2014", " ");
367
371
  } }
368
372
  function MJAIAgentSessionFormComponentExtended_Conditional_0_Conditional_98_Conditional_1_Conditional_2_Template(rf, ctx) { if (rf & 1) {
369
- i0.ɵɵelementStart(0, "div", 69)(1, "table", 70)(2, "thead")(3, "tr")(4, "th");
373
+ i0.ɵɵelementStart(0, "div", 72)(1, "table", 73)(2, "thead")(3, "tr")(4, "th");
370
374
  i0.ɵɵtext(5, "Channel");
371
375
  i0.ɵɵelementEnd();
372
376
  i0.ɵɵelementStart(6, "th");
@@ -388,7 +392,7 @@ function MJAIAgentSessionFormComponentExtended_Conditional_0_Conditional_98_Cond
388
392
  i0.ɵɵtext(17, "Socket");
389
393
  i0.ɵɵelementEnd()()();
390
394
  i0.ɵɵelementStart(18, "tbody");
391
- i0.ɵɵrepeaterCreate(19, MJAIAgentSessionFormComponentExtended_Conditional_0_Conditional_98_Conditional_1_Conditional_2_For_20_Template, 22, 16, "tr", 71, _forTrack1);
395
+ i0.ɵɵrepeaterCreate(19, MJAIAgentSessionFormComponentExtended_Conditional_0_Conditional_98_Conditional_1_Conditional_2_For_20_Template, 22, 16, "tr", 74, _forTrack1);
392
396
  i0.ɵɵelementEnd()()();
393
397
  } if (rf & 2) {
394
398
  const ctx_r1 = i0.ɵɵnextContext(4);
@@ -396,8 +400,8 @@ function MJAIAgentSessionFormComponentExtended_Conditional_0_Conditional_98_Cond
396
400
  i0.ɵɵrepeater(ctx_r1.Channels);
397
401
  } }
398
402
  function MJAIAgentSessionFormComponentExtended_Conditional_0_Conditional_98_Conditional_1_Template(rf, ctx) { if (rf & 1) {
399
- i0.ɵɵelementStart(0, "div", 49);
400
- i0.ɵɵconditionalCreate(1, MJAIAgentSessionFormComponentExtended_Conditional_0_Conditional_98_Conditional_1_Conditional_1_Template, 1, 0, "mj-empty-state", 68)(2, MJAIAgentSessionFormComponentExtended_Conditional_0_Conditional_98_Conditional_1_Conditional_2_Template, 21, 0, "div", 69);
403
+ i0.ɵɵelementStart(0, "div", 52);
404
+ i0.ɵɵconditionalCreate(1, MJAIAgentSessionFormComponentExtended_Conditional_0_Conditional_98_Conditional_1_Conditional_1_Template, 1, 0, "mj-empty-state", 71)(2, MJAIAgentSessionFormComponentExtended_Conditional_0_Conditional_98_Conditional_1_Conditional_2_Template, 21, 0, "div", 72);
401
405
  i0.ɵɵelementEnd();
402
406
  } if (rf & 2) {
403
407
  const ctx_r1 = i0.ɵɵnextContext(3);
@@ -405,16 +409,16 @@ function MJAIAgentSessionFormComponentExtended_Conditional_0_Conditional_98_Cond
405
409
  i0.ɵɵconditional(ctx_r1.Channels.length === 0 ? 1 : 2);
406
410
  } }
407
411
  function MJAIAgentSessionFormComponentExtended_Conditional_0_Conditional_98_Conditional_2_Conditional_1_Template(rf, ctx) { if (rf & 1) {
408
- i0.ɵɵelement(0, "mj-empty-state", 78);
412
+ i0.ɵɵelement(0, "mj-empty-state", 81);
409
413
  } }
410
414
  function MJAIAgentSessionFormComponentExtended_Conditional_0_Conditional_98_Conditional_2_Conditional_2_For_2_Conditional_2_Template(rf, ctx) { if (rf & 1) {
411
- i0.ɵɵelement(0, "i", 83);
415
+ i0.ɵɵelement(0, "i", 86);
412
416
  } }
413
417
  function MJAIAgentSessionFormComponentExtended_Conditional_0_Conditional_98_Conditional_2_Conditional_2_For_2_Conditional_3_Template(rf, ctx) { if (rf & 1) {
414
- i0.ɵɵelement(0, "i", 84);
418
+ i0.ɵɵelement(0, "i", 87);
415
419
  } }
416
420
  function MJAIAgentSessionFormComponentExtended_Conditional_0_Conditional_98_Conditional_2_Conditional_2_For_2_Conditional_4_Template(rf, ctx) { if (rf & 1) {
417
- i0.ɵɵelement(0, "i", 56);
421
+ i0.ɵɵelement(0, "i", 59);
418
422
  } }
419
423
  function MJAIAgentSessionFormComponentExtended_Conditional_0_Conditional_98_Conditional_2_Conditional_2_For_2_Conditional_7_Template(rf, ctx) { if (rf & 1) {
420
424
  i0.ɵɵtext(0);
@@ -429,16 +433,16 @@ function MJAIAgentSessionFormComponentExtended_Conditional_0_Conditional_98_Cond
429
433
  i0.ɵɵtextInterpolate1(" ", turn_r12.Agent || "Agent", " ");
430
434
  } }
431
435
  function MJAIAgentSessionFormComponentExtended_Conditional_0_Conditional_98_Conditional_2_Conditional_2_For_2_Template(rf, ctx) { if (rf & 1) {
432
- i0.ɵɵelementStart(0, "div", 81)(1, "div", 82);
433
- i0.ɵɵconditionalCreate(2, MJAIAgentSessionFormComponentExtended_Conditional_0_Conditional_98_Conditional_2_Conditional_2_For_2_Conditional_2_Template, 1, 0, "i", 83)(3, MJAIAgentSessionFormComponentExtended_Conditional_0_Conditional_98_Conditional_2_Conditional_2_For_2_Conditional_3_Template, 1, 0, "i", 84)(4, MJAIAgentSessionFormComponentExtended_Conditional_0_Conditional_98_Conditional_2_Conditional_2_For_2_Conditional_4_Template, 1, 0, "i", 56);
436
+ i0.ɵɵelementStart(0, "div", 84)(1, "div", 85);
437
+ i0.ɵɵconditionalCreate(2, MJAIAgentSessionFormComponentExtended_Conditional_0_Conditional_98_Conditional_2_Conditional_2_For_2_Conditional_2_Template, 1, 0, "i", 86)(3, MJAIAgentSessionFormComponentExtended_Conditional_0_Conditional_98_Conditional_2_Conditional_2_For_2_Conditional_3_Template, 1, 0, "i", 87)(4, MJAIAgentSessionFormComponentExtended_Conditional_0_Conditional_98_Conditional_2_Conditional_2_For_2_Conditional_4_Template, 1, 0, "i", 59);
434
438
  i0.ɵɵelementEnd();
435
- i0.ɵɵelementStart(5, "div", 85)(6, "div", 86);
439
+ i0.ɵɵelementStart(5, "div", 88)(6, "div", 89);
436
440
  i0.ɵɵconditionalCreate(7, MJAIAgentSessionFormComponentExtended_Conditional_0_Conditional_98_Conditional_2_Conditional_2_For_2_Conditional_7_Template, 1, 1)(8, MJAIAgentSessionFormComponentExtended_Conditional_0_Conditional_98_Conditional_2_Conditional_2_For_2_Conditional_8_Template, 1, 1);
437
- i0.ɵɵelementStart(9, "span", 87);
441
+ i0.ɵɵelementStart(9, "span", 90);
438
442
  i0.ɵɵtext(10);
439
443
  i0.ɵɵpipe(11, "date");
440
444
  i0.ɵɵelementEnd()();
441
- i0.ɵɵelementStart(12, "div", 88);
445
+ i0.ɵɵelementStart(12, "div", 91);
442
446
  i0.ɵɵtext(13);
443
447
  i0.ɵɵelementEnd()()();
444
448
  } if (rf & 2) {
@@ -454,8 +458,8 @@ function MJAIAgentSessionFormComponentExtended_Conditional_0_Conditional_98_Cond
454
458
  i0.ɵɵtextInterpolate(turn_r12.Message);
455
459
  } }
456
460
  function MJAIAgentSessionFormComponentExtended_Conditional_0_Conditional_98_Conditional_2_Conditional_2_Template(rf, ctx) { if (rf & 1) {
457
- i0.ɵɵelementStart(0, "div", 79);
458
- i0.ɵɵrepeaterCreate(1, MJAIAgentSessionFormComponentExtended_Conditional_0_Conditional_98_Conditional_2_Conditional_2_For_2_Template, 14, 11, "div", 80, _forTrack2);
461
+ i0.ɵɵelementStart(0, "div", 82);
462
+ i0.ɵɵrepeaterCreate(1, MJAIAgentSessionFormComponentExtended_Conditional_0_Conditional_98_Conditional_2_Conditional_2_For_2_Template, 14, 11, "div", 83, _forTrack2);
459
463
  i0.ɵɵelementEnd();
460
464
  } if (rf & 2) {
461
465
  const ctx_r1 = i0.ɵɵnextContext(4);
@@ -463,8 +467,8 @@ function MJAIAgentSessionFormComponentExtended_Conditional_0_Conditional_98_Cond
463
467
  i0.ɵɵrepeater(ctx_r1.Transcript);
464
468
  } }
465
469
  function MJAIAgentSessionFormComponentExtended_Conditional_0_Conditional_98_Conditional_2_Template(rf, ctx) { if (rf & 1) {
466
- i0.ɵɵelementStart(0, "div", 49);
467
- i0.ɵɵconditionalCreate(1, MJAIAgentSessionFormComponentExtended_Conditional_0_Conditional_98_Conditional_2_Conditional_1_Template, 1, 0, "mj-empty-state", 78)(2, MJAIAgentSessionFormComponentExtended_Conditional_0_Conditional_98_Conditional_2_Conditional_2_Template, 3, 0, "div", 79);
470
+ i0.ɵɵelementStart(0, "div", 52);
471
+ i0.ɵɵconditionalCreate(1, MJAIAgentSessionFormComponentExtended_Conditional_0_Conditional_98_Conditional_2_Conditional_1_Template, 1, 0, "mj-empty-state", 81)(2, MJAIAgentSessionFormComponentExtended_Conditional_0_Conditional_98_Conditional_2_Conditional_2_Template, 3, 0, "div", 82);
468
472
  i0.ɵɵelementEnd();
469
473
  } if (rf & 2) {
470
474
  const ctx_r1 = i0.ɵɵnextContext(3);
@@ -477,7 +481,7 @@ function MJAIAgentSessionFormComponentExtended_Conditional_0_Conditional_98_Cond
477
481
  } }
478
482
  function MJAIAgentSessionFormComponentExtended_Conditional_0_Conditional_98_Conditional_3_Conditional_25_Template(rf, ctx) { if (rf & 1) {
479
483
  const _r14 = i0.ɵɵgetCurrentView();
480
- i0.ɵɵelementStart(0, "a", 23);
484
+ i0.ɵɵelementStart(0, "a", 51);
481
485
  i0.ɵɵlistener("click", function MJAIAgentSessionFormComponentExtended_Conditional_0_Conditional_98_Conditional_3_Conditional_25_Template_a_click_0_listener() { i0.ɵɵrestoreView(_r14); const ctx_r1 = i0.ɵɵnextContext(4); return i0.ɵɵresetView(ctx_r1.OpenEntityRecord("MJ: Conversations", ctx_r1.record.ConversationID)); });
482
486
  i0.ɵɵtext(1);
483
487
  i0.ɵɵelementEnd();
@@ -493,7 +497,7 @@ function MJAIAgentSessionFormComponentExtended_Conditional_0_Conditional_98_Cond
493
497
  } }
494
498
  function MJAIAgentSessionFormComponentExtended_Conditional_0_Conditional_98_Conditional_3_Conditional_36_Template(rf, ctx) { if (rf & 1) {
495
499
  const _r15 = i0.ɵɵgetCurrentView();
496
- i0.ɵɵelementStart(0, "a", 23);
500
+ i0.ɵɵelementStart(0, "a", 51);
497
501
  i0.ɵɵlistener("click", function MJAIAgentSessionFormComponentExtended_Conditional_0_Conditional_98_Conditional_3_Conditional_36_Template_a_click_0_listener() { i0.ɵɵrestoreView(_r15); const ctx_r1 = i0.ɵɵnextContext(4); return i0.ɵɵresetView(ctx_r1.OpenEntityRecord("MJ: AI Agent Sessions", ctx_r1.record.LastSessionID)); });
498
502
  i0.ɵɵtext(1);
499
503
  i0.ɵɵelementEnd();
@@ -508,14 +512,14 @@ function MJAIAgentSessionFormComponentExtended_Conditional_0_Conditional_98_Cond
508
512
  i0.ɵɵelementEnd();
509
513
  } }
510
514
  function MJAIAgentSessionFormComponentExtended_Conditional_0_Conditional_98_Conditional_3_Conditional_55_ng_template_1_Template(rf, ctx) { if (rf & 1) {
511
- i0.ɵɵelement(0, "i", 96);
515
+ i0.ɵɵelement(0, "i", 99);
512
516
  i0.ɵɵtext(1, " Config (Session State JSON) ");
513
517
  } }
514
518
  function MJAIAgentSessionFormComponentExtended_Conditional_0_Conditional_98_Conditional_3_Conditional_55_Template(rf, ctx) { if (rf & 1) {
515
- i0.ɵɵelementStart(0, "mj-accordion-panel", 89);
516
- i0.ɵɵtemplate(1, MJAIAgentSessionFormComponentExtended_Conditional_0_Conditional_98_Conditional_3_Conditional_55_ng_template_1_Template, 2, 0, "ng-template", 90);
517
- i0.ɵɵelementStart(2, "div", 94);
518
- i0.ɵɵelement(3, "mj-code-editor", 95);
519
+ i0.ɵɵelementStart(0, "mj-accordion-panel", 92);
520
+ i0.ɵɵtemplate(1, MJAIAgentSessionFormComponentExtended_Conditional_0_Conditional_98_Conditional_3_Conditional_55_ng_template_1_Template, 2, 0, "ng-template", 93);
521
+ i0.ɵɵelementStart(2, "div", 97);
522
+ i0.ɵɵelement(3, "mj-code-editor", 98);
519
523
  i0.ɵɵelementEnd()();
520
524
  } if (rf & 2) {
521
525
  const ctx_r1 = i0.ɵɵnextContext(4);
@@ -525,67 +529,67 @@ function MJAIAgentSessionFormComponentExtended_Conditional_0_Conditional_98_Cond
525
529
  } }
526
530
  function MJAIAgentSessionFormComponentExtended_Conditional_0_Conditional_98_Conditional_3_Template(rf, ctx) { if (rf & 1) {
527
531
  const _r13 = i0.ɵɵgetCurrentView();
528
- i0.ɵɵelementStart(0, "div", 49)(1, "mj-accordion-panel", 89);
529
- i0.ɵɵtemplate(2, MJAIAgentSessionFormComponentExtended_Conditional_0_Conditional_98_Conditional_3_ng_template_2_Template, 2, 0, "ng-template", 90);
530
- i0.ɵɵelementStart(3, "div", 91)(4, "div", 92)(5, "label");
532
+ i0.ɵɵelementStart(0, "div", 52)(1, "mj-accordion-panel", 92);
533
+ i0.ɵɵtemplate(2, MJAIAgentSessionFormComponentExtended_Conditional_0_Conditional_98_Conditional_3_ng_template_2_Template, 2, 0, "ng-template", 93);
534
+ i0.ɵɵelementStart(3, "div", 94)(4, "div", 95)(5, "label");
531
535
  i0.ɵɵtext(6, "ID");
532
536
  i0.ɵɵelementEnd();
533
- i0.ɵɵelementStart(7, "span", 76);
537
+ i0.ɵɵelementStart(7, "span", 79);
534
538
  i0.ɵɵtext(8);
535
539
  i0.ɵɵelementEnd()();
536
- i0.ɵɵelementStart(9, "div", 92)(10, "label");
540
+ i0.ɵɵelementStart(9, "div", 95)(10, "label");
537
541
  i0.ɵɵtext(11, "Agent (Co-Agent)");
538
542
  i0.ɵɵelementEnd();
539
- i0.ɵɵelementStart(12, "span")(13, "a", 23);
543
+ i0.ɵɵelementStart(12, "span")(13, "a", 51);
540
544
  i0.ɵɵlistener("click", function MJAIAgentSessionFormComponentExtended_Conditional_0_Conditional_98_Conditional_3_Template_a_click_13_listener() { i0.ɵɵrestoreView(_r13); const ctx_r1 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r1.OpenEntityRecord("AI Agents", ctx_r1.record.AgentID)); });
541
545
  i0.ɵɵtext(14);
542
546
  i0.ɵɵelementEnd()()();
543
- i0.ɵɵelementStart(15, "div", 92)(16, "label");
547
+ i0.ɵɵelementStart(15, "div", 95)(16, "label");
544
548
  i0.ɵɵtext(17, "User");
545
549
  i0.ɵɵelementEnd();
546
- i0.ɵɵelementStart(18, "span")(19, "a", 23);
550
+ i0.ɵɵelementStart(18, "span")(19, "a", 51);
547
551
  i0.ɵɵlistener("click", function MJAIAgentSessionFormComponentExtended_Conditional_0_Conditional_98_Conditional_3_Template_a_click_19_listener() { i0.ɵɵrestoreView(_r13); const ctx_r1 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r1.OpenEntityRecord("Users", ctx_r1.record.UserID)); });
548
552
  i0.ɵɵtext(20);
549
553
  i0.ɵɵelementEnd()()();
550
- i0.ɵɵelementStart(21, "div", 92)(22, "label");
554
+ i0.ɵɵelementStart(21, "div", 95)(22, "label");
551
555
  i0.ɵɵtext(23, "Conversation");
552
556
  i0.ɵɵelementEnd();
553
557
  i0.ɵɵelementStart(24, "span");
554
558
  i0.ɵɵconditionalCreate(25, MJAIAgentSessionFormComponentExtended_Conditional_0_Conditional_98_Conditional_3_Conditional_25_Template, 2, 1, "a", 30)(26, MJAIAgentSessionFormComponentExtended_Conditional_0_Conditional_98_Conditional_3_Conditional_26_Template, 2, 0, "span");
555
559
  i0.ɵɵelementEnd()();
556
- i0.ɵɵelementStart(27, "div", 92)(28, "label");
560
+ i0.ɵɵelementStart(27, "div", 95)(28, "label");
557
561
  i0.ɵɵtext(29, "Status");
558
562
  i0.ɵɵelementEnd();
559
- i0.ɵɵelementStart(30, "span", 93);
563
+ i0.ɵɵelementStart(30, "span", 96);
560
564
  i0.ɵɵtext(31);
561
565
  i0.ɵɵelementEnd()();
562
- i0.ɵɵelementStart(32, "div", 92)(33, "label");
566
+ i0.ɵɵelementStart(32, "div", 95)(33, "label");
563
567
  i0.ɵɵtext(34, "Prior Session");
564
568
  i0.ɵɵelementEnd();
565
569
  i0.ɵɵelementStart(35, "span");
566
570
  i0.ɵɵconditionalCreate(36, MJAIAgentSessionFormComponentExtended_Conditional_0_Conditional_98_Conditional_3_Conditional_36_Template, 2, 1, "a", 30)(37, MJAIAgentSessionFormComponentExtended_Conditional_0_Conditional_98_Conditional_3_Conditional_37_Template, 2, 0, "span");
567
571
  i0.ɵɵelementEnd()();
568
- i0.ɵɵelementStart(38, "div", 92)(39, "label");
572
+ i0.ɵɵelementStart(38, "div", 95)(39, "label");
569
573
  i0.ɵɵtext(40, "Host Instance");
570
574
  i0.ɵɵelementEnd();
571
- i0.ɵɵelementStart(41, "span", 76);
575
+ i0.ɵɵelementStart(41, "span", 79);
572
576
  i0.ɵɵtext(42);
573
577
  i0.ɵɵelementEnd()();
574
- i0.ɵɵelementStart(43, "div", 92)(44, "label");
578
+ i0.ɵɵelementStart(43, "div", 95)(44, "label");
575
579
  i0.ɵɵtext(45, "Last Active At");
576
580
  i0.ɵɵelementEnd();
577
581
  i0.ɵɵelementStart(46, "span");
578
582
  i0.ɵɵtext(47);
579
583
  i0.ɵɵpipe(48, "date");
580
584
  i0.ɵɵelementEnd()();
581
- i0.ɵɵelementStart(49, "div", 92)(50, "label");
585
+ i0.ɵɵelementStart(49, "div", 95)(50, "label");
582
586
  i0.ɵɵtext(51, "Closed At");
583
587
  i0.ɵɵelementEnd();
584
588
  i0.ɵɵelementStart(52, "span");
585
589
  i0.ɵɵtext(53);
586
590
  i0.ɵɵpipe(54, "date");
587
591
  i0.ɵɵelementEnd()()()();
588
- i0.ɵɵconditionalCreate(55, MJAIAgentSessionFormComponentExtended_Conditional_0_Conditional_98_Conditional_3_Conditional_55_Template, 4, 4, "mj-accordion-panel", 89);
592
+ i0.ɵɵconditionalCreate(55, MJAIAgentSessionFormComponentExtended_Conditional_0_Conditional_98_Conditional_3_Conditional_55_Template, 4, 4, "mj-accordion-panel", 92);
589
593
  i0.ɵɵelementEnd();
590
594
  } if (rf & 2) {
591
595
  const ctx_r1 = i0.ɵɵnextContext(3);
@@ -615,10 +619,10 @@ function MJAIAgentSessionFormComponentExtended_Conditional_0_Conditional_98_Cond
615
619
  i0.ɵɵconditional(ctx_r1.record.Config_ ? 55 : -1);
616
620
  } }
617
621
  function MJAIAgentSessionFormComponentExtended_Conditional_0_Conditional_98_Template(rf, ctx) { if (rf & 1) {
618
- i0.ɵɵconditionalCreate(0, MJAIAgentSessionFormComponentExtended_Conditional_0_Conditional_98_Conditional_0_Template, 3, 1, "div", 49);
619
- i0.ɵɵconditionalCreate(1, MJAIAgentSessionFormComponentExtended_Conditional_0_Conditional_98_Conditional_1_Template, 3, 1, "div", 49);
620
- i0.ɵɵconditionalCreate(2, MJAIAgentSessionFormComponentExtended_Conditional_0_Conditional_98_Conditional_2_Template, 3, 1, "div", 49);
621
- i0.ɵɵconditionalCreate(3, MJAIAgentSessionFormComponentExtended_Conditional_0_Conditional_98_Conditional_3_Template, 56, 18, "div", 49);
622
+ i0.ɵɵconditionalCreate(0, MJAIAgentSessionFormComponentExtended_Conditional_0_Conditional_98_Conditional_0_Template, 3, 1, "div", 52);
623
+ i0.ɵɵconditionalCreate(1, MJAIAgentSessionFormComponentExtended_Conditional_0_Conditional_98_Conditional_1_Template, 3, 1, "div", 52);
624
+ i0.ɵɵconditionalCreate(2, MJAIAgentSessionFormComponentExtended_Conditional_0_Conditional_98_Conditional_2_Template, 3, 1, "div", 52);
625
+ i0.ɵɵconditionalCreate(3, MJAIAgentSessionFormComponentExtended_Conditional_0_Conditional_98_Conditional_3_Template, 56, 18, "div", 52);
622
626
  } if (rf & 2) {
623
627
  const ctx_r1 = i0.ɵɵnextContext(2);
624
628
  i0.ɵɵconditional(ctx_r1.ActiveTab === "runs" ? 0 : -1);
@@ -640,8 +644,8 @@ function MJAIAgentSessionFormComponentExtended_Conditional_0_Template(rf, ctx) {
640
644
  i0.ɵɵtext(9, "AI Agent Session");
641
645
  i0.ɵɵelementEnd();
642
646
  i0.ɵɵelementStart(10, "div", 9);
643
- i0.ɵɵconditionalCreate(11, MJAIAgentSessionFormComponentExtended_Conditional_0_Conditional_11_Template, 3, 1, "span", 10);
644
- i0.ɵɵconditionalCreate(12, MJAIAgentSessionFormComponentExtended_Conditional_0_Conditional_12_Template, 4, 1);
647
+ i0.ɵɵconditionalCreate(11, MJAIAgentSessionFormComponentExtended_Conditional_0_Conditional_11_Template, 3, 3, "span", 10);
648
+ i0.ɵɵconditionalCreate(12, MJAIAgentSessionFormComponentExtended_Conditional_0_Conditional_12_Template, 4, 5);
645
649
  i0.ɵɵelementStart(13, "span", 11);
646
650
  i0.ɵɵtext(14);
647
651
  i0.ɵɵelementEnd();
@@ -758,10 +762,12 @@ function MJAIAgentSessionFormComponentExtended_Conditional_0_Template(rf, ctx) {
758
762
  i0.ɵɵproperty("ngClass", ctx_r1.GetStatusIcon(ctx_r1.record.Status));
759
763
  i0.ɵɵadvance();
760
764
  i0.ɵɵtextInterpolate1(" ", ctx_r1.record.Status, " ");
761
- i0.ɵɵadvance(10);
765
+ i0.ɵɵadvance(9);
766
+ i0.ɵɵproperty("mjRecordLink", ctx_r1.record)("HandleClick", false);
767
+ i0.ɵɵadvance();
762
768
  i0.ɵɵtextInterpolate(ctx_r1.record.User);
763
769
  i0.ɵɵadvance(5);
764
- i0.ɵɵtextInterpolate(i0.ɵɵpipeBind2(35, 34, ctx_r1.record.__mj_CreatedAt, "medium"));
770
+ i0.ɵɵtextInterpolate(i0.ɵɵpipeBind2(35, 36, ctx_r1.record.__mj_CreatedAt, "medium"));
765
771
  i0.ɵɵadvance(2);
766
772
  i0.ɵɵconditional(ctx_r1.record.ClosedAt ? 36 : 37);
767
773
  i0.ɵɵadvance(6);
@@ -829,6 +835,8 @@ let MJAIAgentSessionFormComponentExtended = class MJAIAgentSessionFormComponentE
829
835
  }
830
836
  /** Sessions read best full-width, like the agent-run form. */
831
837
  getDefaultFormWidthMode() { return 'full-width'; }
838
+ /** Custom-layout form owns its entire body; suppress auto-filled relationship sections. */
839
+ get OwnsEntireFormBody() { return true; }
832
840
  async ngOnInit() {
833
841
  await super.ngOnInit();
834
842
  if (this.record?.ID) {
@@ -1146,11 +1154,11 @@ let MJAIAgentSessionFormComponentExtended = class MJAIAgentSessionFormComponentE
1146
1154
  });
1147
1155
  }
1148
1156
  static { this.ɵfac = /*@__PURE__*/ (() => { let ɵMJAIAgentSessionFormComponentExtended_BaseFactory; return function MJAIAgentSessionFormComponentExtended_Factory(__ngFactoryType__) { return (ɵMJAIAgentSessionFormComponentExtended_BaseFactory || (ɵMJAIAgentSessionFormComponentExtended_BaseFactory = i0.ɵɵgetInheritedFactory(MJAIAgentSessionFormComponentExtended)))(__ngFactoryType__ || MJAIAgentSessionFormComponentExtended); }; })(); }
1149
- static { this.ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: MJAIAgentSessionFormComponentExtended, selectors: [["mj-ai-agent-session-form"]], standalone: false, features: [i0.ɵɵInheritDefinitionFeature], decls: 1, vars: 1, consts: [[3, "Record", "FormComponent", "ToolbarConfig", "WidthMode"], [3, "Navigate", "DeleteRequested", "FavoriteToggled", "HistoryRequested", "ListManagementRequested", "Record", "FormComponent", "ToolbarConfig", "WidthMode"], [1, "record-form", "ai-agent-session-form"], [1, "header"], [1, "header-content"], [1, "header-left"], [1, "icon-wrapper"], [1, "fas", "fa-tower-broadcast"], [1, "header-info"], [1, "meta-info"], [1, "agent-name"], [1, "run-id"], ["title", "Open conversation in Chat app", 1, "conversation-pill"], [1, "header-right"], [1, "status-badge"], [1, "fas", 3, "ngClass"], [1, "header-actions"], ["title", "Refresh", 1, "btn-icon", 3, "click"], [1, "fas", "fa-sync-alt"], [1, "header-stats"], [1, "stat"], [1, "label"], [1, "value"], ["href", "javascript:void(0)", 1, "entity-link", 3, "click"], [1, "configuration-bar"], [1, "config-item"], [1, "fas", "fa-bullseye"], [1, "config-content"], [1, "config-label"], [1, "config-value"], ["href", "javascript:void(0)", 1, "entity-link"], [1, "muted"], [1, "fas", "fa-server"], [1, "config-value", "mono"], [1, "fas", "fa-link"], [1, "tabs"], [1, "tab", 3, "click"], [1, "fas", "fa-diagram-project"], [1, "tab-count"], [1, "fas", "fa-plug"], [1, "fas", "fa-comments"], [1, "fas", "fa-info-circle"], [1, "content-area"], ["text", "Loading session data...", "size", "medium"], ["Variant", "error", 3, "Message"], [1, "fas", "fa-arrow-right-long", "target-arrow"], ["title", "Open conversation in Chat app", 1, "conversation-pill", 3, "click"], [1, "fas", "fa-external-link-alt", "pill-action"], [1, "value", "success"], [1, "tab-content"], ["Icon", "fa-solid fa-diagram-project", "Title", "No Runs", "Message", "No agent runs have been recorded for this session yet."], [1, "run-tree"], ["title", "Open record", 1, "run-node", 3, "run-node--child", "margin-left"], ["title", "Open record", 1, "run-node", 3, "click"], [1, "run-marker"], [1, "fas", "fa-microchip"], [1, "fas", "fa-robot"], [1, "run-body"], [1, "run-headrow"], [1, "run-title"], [1, "run-time"], [1, "run-sub"], [1, "run-foot"], [1, "run-status"], [1, "run-chip"], [1, "fas", "fa-clock"], [1, "fas", "fa-coins"], [1, "fas", "fa-dollar-sign"], ["Icon", "fa-solid fa-plug", "Title", "No Channels", "Message", "No channel instances were attached to this session."], [1, "channels-grid-wrap"], [1, "channels-grid"], ["title", "Open record"], ["title", "Open record", 3, "click"], [1, "cell-strong"], [1, "transport-pill"], [1, "channel-status-pill"], [1, "mono"], [1, "mono", "socket-cell", 3, "title"], ["Icon", "fa-solid fa-comments", "Title", "No Transcript", "Message", "No conversation messages were stamped with this session."], [1, "transcript-thread"], [1, "turn", 3, "turn--user", "turn--error"], [1, "turn"], [1, "turn-avatar"], [1, "fas", "fa-user"], [1, "fas", "fa-triangle-exclamation"], [1, "turn-main"], [1, "turn-meta"], [1, "turn-time"], [1, "turn-bubble"], [3, "Expanded"], ["mjAccordionTitle", ""], [1, "details-grid"], [1, "detail-item"], [1, "status-badge", "small"], [1, "config-viewer"], [2, "height", "300px", "width", "100%", 3, "ngModel", "language", "readonly"], [1, "fas", "fa-code"]], template: function MJAIAgentSessionFormComponentExtended_Template(rf, ctx) { if (rf & 1) {
1150
- i0.ɵɵconditionalCreate(0, MJAIAgentSessionFormComponentExtended_Conditional_0_Template, 99, 37, "mj-record-form-container", 0);
1157
+ static { this.ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: MJAIAgentSessionFormComponentExtended, selectors: [["mj-ai-agent-session-form"]], standalone: false, features: [i0.ɵɵInheritDefinitionFeature], decls: 1, vars: 1, consts: [[3, "Record", "FormComponent", "ToolbarConfig", "WidthMode"], [3, "Navigate", "DeleteRequested", "FavoriteToggled", "HistoryRequested", "ListManagementRequested", "Record", "FormComponent", "ToolbarConfig", "WidthMode"], [1, "record-form", "ai-agent-session-form"], [1, "header"], [1, "header-content"], [1, "header-left"], [1, "icon-wrapper"], [1, "fas", "fa-tower-broadcast"], [1, "header-info"], [1, "meta-info"], [1, "agent-name"], [1, "run-id"], ["title", "Open conversation in Chat app", 1, "conversation-pill"], [1, "header-right"], [1, "status-badge"], [1, "fas", 3, "ngClass"], [1, "header-actions"], ["title", "Refresh", 1, "btn-icon", 3, "click"], [1, "fas", "fa-sync-alt"], [1, "header-stats"], [1, "stat"], [1, "label"], [1, "value"], ["href", "javascript:void(0)", "FieldName", "UserID", 1, "entity-link", 3, "click", "mjRecordLink", "HandleClick"], [1, "configuration-bar"], [1, "config-item"], [1, "fas", "fa-bullseye"], [1, "config-content"], [1, "config-label"], [1, "config-value"], ["href", "javascript:void(0)", 1, "entity-link"], [1, "muted"], [1, "fas", "fa-server"], [1, "config-value", "mono"], [1, "fas", "fa-link"], [1, "tabs"], [1, "tab", 3, "click"], [1, "fas", "fa-diagram-project"], [1, "tab-count"], [1, "fas", "fa-plug"], [1, "fas", "fa-comments"], [1, "fas", "fa-info-circle"], [1, "content-area"], ["text", "Loading session data...", "size", "medium"], ["Variant", "error", 3, "Message"], ["href", "javascript:void(0)", "FieldName", "AgentID", 1, "entity-link", 3, "click", "mjRecordLink", "HandleClick"], [1, "fas", "fa-arrow-right-long", "target-arrow"], ["href", "javascript:void(0)", "mjRecordLink", "", 1, "entity-link", 3, "click", "EntityName", "RecordID", "DisplayName", "HandleClick"], ["title", "Open conversation in Chat app", 1, "conversation-pill", 3, "click"], [1, "fas", "fa-external-link-alt", "pill-action"], [1, "value", "success"], ["href", "javascript:void(0)", 1, "entity-link", 3, "click"], [1, "tab-content"], ["Icon", "fa-solid fa-diagram-project", "Title", "No Runs", "Message", "No agent runs have been recorded for this session yet."], [1, "run-tree"], ["title", "Open record", 1, "run-node", 3, "run-node--child", "margin-left"], ["title", "Open record", 1, "run-node", 3, "click"], [1, "run-marker"], [1, "fas", "fa-microchip"], [1, "fas", "fa-robot"], [1, "run-body"], [1, "run-headrow"], [1, "run-title"], [1, "run-time"], [1, "run-sub"], [1, "run-foot"], [1, "run-status"], [1, "run-chip"], [1, "fas", "fa-clock"], [1, "fas", "fa-coins"], [1, "fas", "fa-dollar-sign"], ["Icon", "fa-solid fa-plug", "Title", "No Channels", "Message", "No channel instances were attached to this session."], [1, "channels-grid-wrap"], [1, "channels-grid"], ["title", "Open record"], ["title", "Open record", 3, "click"], [1, "cell-strong"], [1, "transport-pill"], [1, "channel-status-pill"], [1, "mono"], [1, "mono", "socket-cell", 3, "title"], ["Icon", "fa-solid fa-comments", "Title", "No Transcript", "Message", "No conversation messages were stamped with this session."], [1, "transcript-thread"], [1, "turn", 3, "turn--user", "turn--error"], [1, "turn"], [1, "turn-avatar"], [1, "fas", "fa-user"], [1, "fas", "fa-triangle-exclamation"], [1, "turn-main"], [1, "turn-meta"], [1, "turn-time"], [1, "turn-bubble"], [3, "Expanded"], ["mjAccordionTitle", ""], [1, "details-grid"], [1, "detail-item"], [1, "status-badge", "small"], [1, "config-viewer"], [2, "height", "300px", "width", "100%", 3, "ngModel", "language", "readonly"], [1, "fas", "fa-code"]], template: function MJAIAgentSessionFormComponentExtended_Template(rf, ctx) { if (rf & 1) {
1158
+ i0.ɵɵconditionalCreate(0, MJAIAgentSessionFormComponentExtended_Conditional_0_Template, 99, 39, "mj-record-form-container", 0);
1151
1159
  } if (rf & 2) {
1152
1160
  i0.ɵɵconditional(ctx.record ? 0 : -1);
1153
- } }, dependencies: [i1.NgClass, i2.NgControlStatus, i2.NgModel, i3.MJEmptyStateComponent, i3.MJAccordionPanelComponent, i3.MJAccordionTitleDirective, i4.MjRecordFormContainerComponent, i5.CodeEditorComponent, i6.LoadingComponent, i1.DecimalPipe, i1.DatePipe], styles: [".ai-agent-session-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}\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 align-items: center;\n gap: 12px;\n margin-top: 4px;\n font-size: 14px;\n color: var(--mj-text-muted);\n flex-wrap: wrap;\n}\n\n.agent-name[_ngcontent-%COMP%] {\n font-weight: 500;\n color: var(--mj-text-secondary);\n}\n\n.target-arrow[_ngcontent-%COMP%] {\n font-size: 10px;\n color: var(--mj-text-muted);\n}\n\n.run-id[_ngcontent-%COMP%] {\n font-family: monospace;\n font-size: 12px;\n opacity: 0.7;\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}\n\n.conversation-pill[_ngcontent-%COMP%] .pill-action[_ngcontent-%COMP%] {\n font-size: 9px;\n opacity: 0.6;\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=\"Active\"][_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=\"Idle\"][_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=\"Closed\"][_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.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 flex-wrap: wrap;\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.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 flex-wrap: wrap;\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.muted[_ngcontent-%COMP%] {\n color: var(--mj-text-muted);\n font-weight: 400;\n}\n\n.mono[_ngcontent-%COMP%] {\n font-family: monospace;\n font-size: 13px;\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.tab-count[_ngcontent-%COMP%] {\n font-size: 11px;\n font-weight: 600;\n padding: 1px 7px;\n border-radius: 10px;\n background: var(--mj-bg-surface-sunken);\n border: 1px solid var(--mj-border-default);\n color: var(--mj-text-secondary);\n}\n\n.tab.active[_ngcontent-%COMP%] .tab-count[_ngcontent-%COMP%] {\n background: color-mix(in srgb, var(--mj-brand-primary) 10%, var(--mj-bg-surface));\n border-color: color-mix(in srgb, var(--mj-brand-primary) 25%, transparent);\n color: var(--mj-brand-primary);\n}\n\n\n.content-area[_ngcontent-%COMP%] {\n flex: 1;\n min-height: 0;\n overflow: auto;\n background: var(--mj-bg-surface);\n}\n\n.tab-content[_ngcontent-%COMP%] {\n padding: 20px;\n}\n\n.tab-content[_ngcontent-%COMP%] mj-accordion-panel[_ngcontent-%COMP%] {\n display: block;\n margin-bottom: 8px;\n}\n\n\n.run-tree[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n gap: 12px;\n max-width: 1000px;\n}\n\n.run-node[_ngcontent-%COMP%] {\n display: flex;\n gap: 14px;\n align-items: flex-start;\n background: var(--mj-bg-surface);\n border: 1px solid var(--mj-border-default);\n border-radius: 12px;\n padding: 14px 18px;\n box-shadow: var(--mj-shadow-sm);\n cursor: pointer;\n transition: all 0.2s ease;\n}\n\n.run-node[_ngcontent-%COMP%]:hover {\n border-color: color-mix(in srgb, var(--mj-brand-primary) 40%, var(--mj-border-default));\n transform: translateX(2px);\n}\n\n.run-node--child[_ngcontent-%COMP%] {\n background: var(--mj-bg-surface-card);\n}\n\n.run-marker[_ngcontent-%COMP%] {\n width: 36px;\n height: 36px;\n flex-shrink: 0;\n border-radius: 50%;\n display: flex;\n align-items: center;\n justify-content: center;\n background: var(--mj-bg-surface);\n border: 2px solid var(--mj-border-strong);\n color: var(--mj-text-secondary);\n font-size: 14px;\n}\n\n.run-marker--coagent[_ngcontent-%COMP%] {\n border-color: var(--mj-brand-primary);\n color: var(--mj-brand-primary);\n}\n\n.run-marker--prompt[_ngcontent-%COMP%] {\n border-color: var(--mj-status-info);\n color: var(--mj-status-info);\n}\n\n.run-body[_ngcontent-%COMP%] {\n flex: 1;\n min-width: 0;\n}\n\n.run-headrow[_ngcontent-%COMP%] {\n display: flex;\n justify-content: space-between;\n align-items: center;\n gap: 12px;\n}\n\n.run-title[_ngcontent-%COMP%] {\n margin: 0;\n font-size: 15px;\n font-weight: 600;\n color: var(--mj-text-primary);\n}\n\n.run-time[_ngcontent-%COMP%] {\n font-size: 12px;\n font-family: monospace;\n color: var(--mj-text-muted);\n white-space: nowrap;\n}\n\n.run-sub[_ngcontent-%COMP%] {\n font-size: 13px;\n color: var(--mj-text-muted);\n margin-top: 2px;\n overflow: hidden;\n text-overflow: ellipsis;\n}\n\n.run-foot[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 10px;\n margin-top: 8px;\n flex-wrap: wrap;\n}\n\n.run-status[_ngcontent-%COMP%] {\n display: inline-flex;\n align-items: center;\n gap: 6px;\n padding: 2px 10px;\n border-radius: 12px;\n font-size: 11px;\n font-weight: 600;\n text-transform: uppercase;\n letter-spacing: 0.5px;\n background: var(--mj-bg-surface-sunken);\n color: var(--mj-text-secondary);\n}\n\n.run-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.run-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.run-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.run-status[data-status=\"Cancelled\"][_ngcontent-%COMP%], \n.run-status[data-status=\"AwaitingFeedback\"][_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.run-chip[_ngcontent-%COMP%] {\n display: inline-flex;\n align-items: center;\n gap: 5px;\n font-size: 12px;\n color: var(--mj-text-muted);\n background: var(--mj-bg-surface-sunken);\n border: 1px solid var(--mj-border-subtle);\n border-radius: 12px;\n padding: 2px 10px;\n}\n\n\n.channels-grid-wrap[_ngcontent-%COMP%] {\n border: 1px solid var(--mj-border-default);\n border-radius: 10px;\n overflow: auto;\n}\n\n.channels-grid[_ngcontent-%COMP%] {\n width: 100%;\n border-collapse: collapse;\n font-size: 13.5px;\n}\n\n.channels-grid[_ngcontent-%COMP%] th[_ngcontent-%COMP%] {\n text-align: left;\n padding: 10px 14px;\n font-size: 11px;\n text-transform: uppercase;\n letter-spacing: 0.5px;\n color: var(--mj-text-muted);\n background: var(--mj-bg-surface-sunken);\n border-bottom: 1px solid var(--mj-border-default);\n white-space: nowrap;\n}\n\n.channels-grid[_ngcontent-%COMP%] td[_ngcontent-%COMP%] {\n padding: 12px 14px;\n border-bottom: 1px solid var(--mj-border-subtle);\n color: var(--mj-text-secondary);\n vertical-align: middle;\n}\n\n.channels-grid[_ngcontent-%COMP%] tbody[_ngcontent-%COMP%] tr[_ngcontent-%COMP%] {\n cursor: pointer;\n transition: background 0.15s ease;\n}\n\n.channels-grid[_ngcontent-%COMP%] tbody[_ngcontent-%COMP%] tr[_ngcontent-%COMP%]:hover {\n background: var(--mj-bg-surface-hover);\n}\n\n.channels-grid[_ngcontent-%COMP%] tbody[_ngcontent-%COMP%] tr[_ngcontent-%COMP%]:last-child td[_ngcontent-%COMP%] {\n border-bottom: none;\n}\n\n.cell-strong[_ngcontent-%COMP%] {\n display: inline-flex;\n align-items: center;\n gap: 8px;\n font-weight: 600;\n color: var(--mj-text-primary);\n}\n\n.cell-strong[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n color: var(--mj-brand-primary);\n}\n\n.transport-pill[_ngcontent-%COMP%], \n.channel-status-pill[_ngcontent-%COMP%] {\n display: inline-flex;\n align-items: center;\n padding: 2px 10px;\n border-radius: 12px;\n font-size: 11px;\n font-weight: 600;\n text-transform: uppercase;\n letter-spacing: 0.5px;\n background: var(--mj-bg-surface-sunken);\n color: var(--mj-text-secondary);\n border: 1px solid var(--mj-border-default);\n}\n\n.transport-pill[data-transport=\"WebRTC\"][_ngcontent-%COMP%] {\n background: color-mix(in srgb, var(--mj-status-info) 12%, var(--mj-bg-surface));\n color: var(--mj-status-info);\n border-color: color-mix(in srgb, var(--mj-status-info) 25%, transparent);\n}\n\n.transport-pill[data-transport=\"WebSocket\"][_ngcontent-%COMP%] {\n background: color-mix(in srgb, var(--mj-brand-primary) 10%, var(--mj-bg-surface));\n color: var(--mj-brand-primary);\n border-color: color-mix(in srgb, var(--mj-brand-primary) 25%, transparent);\n}\n\n.channel-status-pill[data-status=\"Connected\"][_ngcontent-%COMP%] {\n background: color-mix(in srgb, var(--mj-status-success) 15%, var(--mj-bg-surface));\n color: var(--mj-status-success);\n border-color: color-mix(in srgb, var(--mj-status-success) 25%, transparent);\n}\n\n.channel-status-pill[data-status=\"Connecting\"][_ngcontent-%COMP%] {\n background: color-mix(in srgb, var(--mj-status-info) 15%, var(--mj-bg-surface));\n color: var(--mj-status-info);\n border-color: color-mix(in srgb, var(--mj-status-info) 25%, transparent);\n}\n\n.channel-status-pill[data-status=\"Paused\"][_ngcontent-%COMP%] {\n background: color-mix(in srgb, var(--mj-status-warning) 15%, var(--mj-bg-surface));\n color: var(--mj-status-warning);\n border-color: color-mix(in srgb, var(--mj-status-warning) 25%, transparent);\n}\n\n.socket-cell[_ngcontent-%COMP%] {\n max-width: 220px;\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n}\n\n\n.transcript-thread[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n gap: 16px;\n max-width: 860px;\n margin: 0 auto;\n}\n\n.turn[_ngcontent-%COMP%] {\n display: flex;\n gap: 12px;\n align-items: flex-start;\n}\n\n.turn--user[_ngcontent-%COMP%] {\n flex-direction: row-reverse;\n}\n\n.turn-avatar[_ngcontent-%COMP%] {\n width: 34px;\n height: 34px;\n flex-shrink: 0;\n border-radius: 50%;\n display: flex;\n align-items: center;\n justify-content: center;\n font-size: 13px;\n background: color-mix(in srgb, var(--mj-brand-primary) 12%, var(--mj-bg-surface));\n color: var(--mj-brand-primary);\n border: 1px solid color-mix(in srgb, var(--mj-brand-primary) 25%, transparent);\n}\n\n.turn--user[_ngcontent-%COMP%] .turn-avatar[_ngcontent-%COMP%] {\n background: var(--mj-bg-surface-sunken);\n color: var(--mj-text-secondary);\n border-color: var(--mj-border-default);\n}\n\n.turn--error[_ngcontent-%COMP%] .turn-avatar[_ngcontent-%COMP%] {\n background: color-mix(in srgb, var(--mj-status-error) 12%, var(--mj-bg-surface));\n color: var(--mj-status-error);\n border-color: color-mix(in srgb, var(--mj-status-error) 25%, transparent);\n}\n\n.turn-main[_ngcontent-%COMP%] {\n max-width: 70%;\n min-width: 0;\n}\n\n.turn--user[_ngcontent-%COMP%] .turn-main[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n align-items: flex-end;\n}\n\n.turn-meta[_ngcontent-%COMP%] {\n font-size: 12px;\n font-weight: 600;\n color: var(--mj-text-secondary);\n margin-bottom: 4px;\n display: flex;\n align-items: center;\n gap: 8px;\n}\n\n.turn-time[_ngcontent-%COMP%] {\n font-weight: 400;\n font-family: monospace;\n font-size: 11px;\n color: var(--mj-text-muted);\n}\n\n.turn-bubble[_ngcontent-%COMP%] {\n background: var(--mj-bg-surface-card);\n border: 1px solid var(--mj-border-default);\n border-radius: 12px;\n border-top-left-radius: 4px;\n padding: 10px 14px;\n font-size: 14px;\n line-height: 1.5;\n color: var(--mj-text-primary);\n white-space: pre-wrap;\n word-break: break-word;\n}\n\n.turn--user[_ngcontent-%COMP%] .turn-bubble[_ngcontent-%COMP%] {\n background: color-mix(in srgb, var(--mj-brand-primary) 8%, var(--mj-bg-surface));\n border-color: color-mix(in srgb, var(--mj-brand-primary) 20%, transparent);\n border-radius: 12px;\n border-top-right-radius: 4px;\n}\n\n.turn--error[_ngcontent-%COMP%] .turn-bubble[_ngcontent-%COMP%] {\n background: color-mix(in srgb, var(--mj-status-error) 8%, var(--mj-bg-surface));\n border-color: color-mix(in srgb, var(--mj-status-error) 25%, transparent);\n color: var(--mj-status-error-text);\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[_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.config-viewer[_ngcontent-%COMP%] {\n padding: 20px;\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 cursor: pointer;\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\n@media (max-width: 768px) {\n .header-content[_ngcontent-%COMP%] {\n flex-direction: column;\n gap: 16px;\n }\n\n .turn-main[_ngcontent-%COMP%] {\n max-width: 90%;\n }\n}"] }); }
1161
+ } }, dependencies: [i1.NgClass, i2.NgControlStatus, i2.NgModel, i3.MJEmptyStateComponent, i3.MJAccordionPanelComponent, i3.MJAccordionTitleDirective, i4.MjRecordFormContainerComponent, i4.MjRecordLinkDirective, i5.CodeEditorComponent, i6.LoadingComponent, i1.DecimalPipe, i1.DatePipe], styles: [".ai-agent-session-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}\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 align-items: center;\n gap: 12px;\n margin-top: 4px;\n font-size: 14px;\n color: var(--mj-text-muted);\n flex-wrap: wrap;\n}\n\n.agent-name[_ngcontent-%COMP%] {\n font-weight: 500;\n color: var(--mj-text-secondary);\n}\n\n.target-arrow[_ngcontent-%COMP%] {\n font-size: 10px;\n color: var(--mj-text-muted);\n}\n\n.run-id[_ngcontent-%COMP%] {\n font-family: monospace;\n font-size: 12px;\n opacity: 0.7;\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}\n\n.conversation-pill[_ngcontent-%COMP%] .pill-action[_ngcontent-%COMP%] {\n font-size: 9px;\n opacity: 0.6;\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=\"Active\"][_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=\"Idle\"][_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=\"Closed\"][_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.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 flex-wrap: wrap;\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.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 flex-wrap: wrap;\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.muted[_ngcontent-%COMP%] {\n color: var(--mj-text-muted);\n font-weight: 400;\n}\n\n.mono[_ngcontent-%COMP%] {\n font-family: monospace;\n font-size: 13px;\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.tab-count[_ngcontent-%COMP%] {\n font-size: 11px;\n font-weight: 600;\n padding: 1px 7px;\n border-radius: 10px;\n background: var(--mj-bg-surface-sunken);\n border: 1px solid var(--mj-border-default);\n color: var(--mj-text-secondary);\n}\n\n.tab.active[_ngcontent-%COMP%] .tab-count[_ngcontent-%COMP%] {\n background: color-mix(in srgb, var(--mj-brand-primary) 10%, var(--mj-bg-surface));\n border-color: color-mix(in srgb, var(--mj-brand-primary) 25%, transparent);\n color: var(--mj-brand-primary);\n}\n\n\n.content-area[_ngcontent-%COMP%] {\n flex: 1;\n min-height: 0;\n overflow: auto;\n background: var(--mj-bg-surface);\n}\n\n.tab-content[_ngcontent-%COMP%] {\n padding: 20px;\n}\n\n.tab-content[_ngcontent-%COMP%] mj-accordion-panel[_ngcontent-%COMP%] {\n display: block;\n margin-bottom: 8px;\n}\n\n\n.run-tree[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n gap: 12px;\n max-width: 1000px;\n}\n\n.run-node[_ngcontent-%COMP%] {\n display: flex;\n gap: 14px;\n align-items: flex-start;\n background: var(--mj-bg-surface);\n border: 1px solid var(--mj-border-default);\n border-radius: 12px;\n padding: 14px 18px;\n box-shadow: var(--mj-shadow-sm);\n cursor: pointer;\n transition: all 0.2s ease;\n}\n\n.run-node[_ngcontent-%COMP%]:hover {\n border-color: color-mix(in srgb, var(--mj-brand-primary) 40%, var(--mj-border-default));\n transform: translateX(2px);\n}\n\n.run-node--child[_ngcontent-%COMP%] {\n background: var(--mj-bg-surface-card);\n}\n\n.run-marker[_ngcontent-%COMP%] {\n width: 36px;\n height: 36px;\n flex-shrink: 0;\n border-radius: 50%;\n display: flex;\n align-items: center;\n justify-content: center;\n background: var(--mj-bg-surface);\n border: 2px solid var(--mj-border-strong);\n color: var(--mj-text-secondary);\n font-size: 14px;\n}\n\n.run-marker--coagent[_ngcontent-%COMP%] {\n border-color: var(--mj-brand-primary);\n color: var(--mj-brand-primary);\n}\n\n.run-marker--prompt[_ngcontent-%COMP%] {\n border-color: var(--mj-status-info);\n color: var(--mj-status-info);\n}\n\n.run-body[_ngcontent-%COMP%] {\n flex: 1;\n min-width: 0;\n}\n\n.run-headrow[_ngcontent-%COMP%] {\n display: flex;\n justify-content: space-between;\n align-items: center;\n gap: 12px;\n}\n\n.run-title[_ngcontent-%COMP%] {\n margin: 0;\n font-size: 15px;\n font-weight: 600;\n color: var(--mj-text-primary);\n}\n\n.run-time[_ngcontent-%COMP%] {\n font-size: 12px;\n font-family: monospace;\n color: var(--mj-text-muted);\n white-space: nowrap;\n}\n\n.run-sub[_ngcontent-%COMP%] {\n font-size: 13px;\n color: var(--mj-text-muted);\n margin-top: 2px;\n overflow: hidden;\n text-overflow: ellipsis;\n}\n\n.run-foot[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 10px;\n margin-top: 8px;\n flex-wrap: wrap;\n}\n\n.run-status[_ngcontent-%COMP%] {\n display: inline-flex;\n align-items: center;\n gap: 6px;\n padding: 2px 10px;\n border-radius: 12px;\n font-size: 11px;\n font-weight: 600;\n text-transform: uppercase;\n letter-spacing: 0.5px;\n background: var(--mj-bg-surface-sunken);\n color: var(--mj-text-secondary);\n}\n\n.run-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.run-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.run-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.run-status[data-status=\"Cancelled\"][_ngcontent-%COMP%], \n.run-status[data-status=\"AwaitingFeedback\"][_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.run-chip[_ngcontent-%COMP%] {\n display: inline-flex;\n align-items: center;\n gap: 5px;\n font-size: 12px;\n color: var(--mj-text-muted);\n background: var(--mj-bg-surface-sunken);\n border: 1px solid var(--mj-border-subtle);\n border-radius: 12px;\n padding: 2px 10px;\n}\n\n\n.channels-grid-wrap[_ngcontent-%COMP%] {\n border: 1px solid var(--mj-border-default);\n border-radius: 10px;\n overflow: auto;\n}\n\n.channels-grid[_ngcontent-%COMP%] {\n width: 100%;\n border-collapse: collapse;\n font-size: 13.5px;\n}\n\n.channels-grid[_ngcontent-%COMP%] th[_ngcontent-%COMP%] {\n text-align: left;\n padding: 10px 14px;\n font-size: 11px;\n text-transform: uppercase;\n letter-spacing: 0.5px;\n color: var(--mj-text-muted);\n background: var(--mj-bg-surface-sunken);\n border-bottom: 1px solid var(--mj-border-default);\n white-space: nowrap;\n}\n\n.channels-grid[_ngcontent-%COMP%] td[_ngcontent-%COMP%] {\n padding: 12px 14px;\n border-bottom: 1px solid var(--mj-border-subtle);\n color: var(--mj-text-secondary);\n vertical-align: middle;\n}\n\n.channels-grid[_ngcontent-%COMP%] tbody[_ngcontent-%COMP%] tr[_ngcontent-%COMP%] {\n cursor: pointer;\n transition: background 0.15s ease;\n}\n\n.channels-grid[_ngcontent-%COMP%] tbody[_ngcontent-%COMP%] tr[_ngcontent-%COMP%]:hover {\n background: var(--mj-bg-surface-hover);\n}\n\n.channels-grid[_ngcontent-%COMP%] tbody[_ngcontent-%COMP%] tr[_ngcontent-%COMP%]:last-child td[_ngcontent-%COMP%] {\n border-bottom: none;\n}\n\n.cell-strong[_ngcontent-%COMP%] {\n display: inline-flex;\n align-items: center;\n gap: 8px;\n font-weight: 600;\n color: var(--mj-text-primary);\n}\n\n.cell-strong[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n color: var(--mj-brand-primary);\n}\n\n.transport-pill[_ngcontent-%COMP%], \n.channel-status-pill[_ngcontent-%COMP%] {\n display: inline-flex;\n align-items: center;\n padding: 2px 10px;\n border-radius: 12px;\n font-size: 11px;\n font-weight: 600;\n text-transform: uppercase;\n letter-spacing: 0.5px;\n background: var(--mj-bg-surface-sunken);\n color: var(--mj-text-secondary);\n border: 1px solid var(--mj-border-default);\n}\n\n.transport-pill[data-transport=\"WebRTC\"][_ngcontent-%COMP%] {\n background: color-mix(in srgb, var(--mj-status-info) 12%, var(--mj-bg-surface));\n color: var(--mj-status-info);\n border-color: color-mix(in srgb, var(--mj-status-info) 25%, transparent);\n}\n\n.transport-pill[data-transport=\"WebSocket\"][_ngcontent-%COMP%] {\n background: color-mix(in srgb, var(--mj-brand-primary) 10%, var(--mj-bg-surface));\n color: var(--mj-brand-primary);\n border-color: color-mix(in srgb, var(--mj-brand-primary) 25%, transparent);\n}\n\n.channel-status-pill[data-status=\"Connected\"][_ngcontent-%COMP%] {\n background: color-mix(in srgb, var(--mj-status-success) 15%, var(--mj-bg-surface));\n color: var(--mj-status-success);\n border-color: color-mix(in srgb, var(--mj-status-success) 25%, transparent);\n}\n\n.channel-status-pill[data-status=\"Connecting\"][_ngcontent-%COMP%] {\n background: color-mix(in srgb, var(--mj-status-info) 15%, var(--mj-bg-surface));\n color: var(--mj-status-info);\n border-color: color-mix(in srgb, var(--mj-status-info) 25%, transparent);\n}\n\n.channel-status-pill[data-status=\"Paused\"][_ngcontent-%COMP%] {\n background: color-mix(in srgb, var(--mj-status-warning) 15%, var(--mj-bg-surface));\n color: var(--mj-status-warning);\n border-color: color-mix(in srgb, var(--mj-status-warning) 25%, transparent);\n}\n\n.socket-cell[_ngcontent-%COMP%] {\n max-width: 220px;\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n}\n\n\n.transcript-thread[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n gap: 16px;\n max-width: 860px;\n margin: 0 auto;\n}\n\n.turn[_ngcontent-%COMP%] {\n display: flex;\n gap: 12px;\n align-items: flex-start;\n}\n\n.turn--user[_ngcontent-%COMP%] {\n flex-direction: row-reverse;\n}\n\n.turn-avatar[_ngcontent-%COMP%] {\n width: 34px;\n height: 34px;\n flex-shrink: 0;\n border-radius: 50%;\n display: flex;\n align-items: center;\n justify-content: center;\n font-size: 13px;\n background: color-mix(in srgb, var(--mj-brand-primary) 12%, var(--mj-bg-surface));\n color: var(--mj-brand-primary);\n border: 1px solid color-mix(in srgb, var(--mj-brand-primary) 25%, transparent);\n}\n\n.turn--user[_ngcontent-%COMP%] .turn-avatar[_ngcontent-%COMP%] {\n background: var(--mj-bg-surface-sunken);\n color: var(--mj-text-secondary);\n border-color: var(--mj-border-default);\n}\n\n.turn--error[_ngcontent-%COMP%] .turn-avatar[_ngcontent-%COMP%] {\n background: color-mix(in srgb, var(--mj-status-error) 12%, var(--mj-bg-surface));\n color: var(--mj-status-error);\n border-color: color-mix(in srgb, var(--mj-status-error) 25%, transparent);\n}\n\n.turn-main[_ngcontent-%COMP%] {\n max-width: 70%;\n min-width: 0;\n}\n\n.turn--user[_ngcontent-%COMP%] .turn-main[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n align-items: flex-end;\n}\n\n.turn-meta[_ngcontent-%COMP%] {\n font-size: 12px;\n font-weight: 600;\n color: var(--mj-text-secondary);\n margin-bottom: 4px;\n display: flex;\n align-items: center;\n gap: 8px;\n}\n\n.turn-time[_ngcontent-%COMP%] {\n font-weight: 400;\n font-family: monospace;\n font-size: 11px;\n color: var(--mj-text-muted);\n}\n\n.turn-bubble[_ngcontent-%COMP%] {\n background: var(--mj-bg-surface-card);\n border: 1px solid var(--mj-border-default);\n border-radius: 12px;\n border-top-left-radius: 4px;\n padding: 10px 14px;\n font-size: 14px;\n line-height: 1.5;\n color: var(--mj-text-primary);\n white-space: pre-wrap;\n word-break: break-word;\n}\n\n.turn--user[_ngcontent-%COMP%] .turn-bubble[_ngcontent-%COMP%] {\n background: color-mix(in srgb, var(--mj-brand-primary) 8%, var(--mj-bg-surface));\n border-color: color-mix(in srgb, var(--mj-brand-primary) 20%, transparent);\n border-radius: 12px;\n border-top-right-radius: 4px;\n}\n\n.turn--error[_ngcontent-%COMP%] .turn-bubble[_ngcontent-%COMP%] {\n background: color-mix(in srgb, var(--mj-status-error) 8%, var(--mj-bg-surface));\n border-color: color-mix(in srgb, var(--mj-status-error) 25%, transparent);\n color: var(--mj-status-error-text);\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[_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.config-viewer[_ngcontent-%COMP%] {\n padding: 20px;\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 cursor: pointer;\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\n@media (max-width: 768px) {\n .header-content[_ngcontent-%COMP%] {\n flex-direction: column;\n gap: 16px;\n }\n\n .turn-main[_ngcontent-%COMP%] {\n max-width: 90%;\n }\n}"] }); }
1154
1162
  };
1155
1163
  MJAIAgentSessionFormComponentExtended = __decorate([
1156
1164
  RegisterClass(BaseFormComponent, 'MJ: AI Agent Sessions')
@@ -1158,7 +1166,7 @@ MJAIAgentSessionFormComponentExtended = __decorate([
1158
1166
  export { MJAIAgentSessionFormComponentExtended };
1159
1167
  (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(MJAIAgentSessionFormComponentExtended, [{
1160
1168
  type: Component,
1161
- args: [{ standalone: false, selector: 'mj-ai-agent-session-form', template: "@if (record) {\n<mj-record-form-container [Record]=\"record\" [FormComponent]=\"this\"\n [ToolbarConfig]=\"ToolbarConfig\"\n [WidthMode]=\"'full-width'\"\n (Navigate)=\"OnFormNavigate($event)\"\n (DeleteRequested)=\"OnDeleteRequested()\"\n (FavoriteToggled)=\"OnFavoriteToggled()\"\n (HistoryRequested)=\"OnHistoryRequested()\"\n (ListManagementRequested)=\"OnListManagementRequested()\">\n\n <div class=\"record-form ai-agent-session-form\">\n <!-- Header (mirrors the AI Agent Run form header) -->\n <div class=\"header\">\n <div class=\"header-content\">\n <div class=\"header-left\">\n <div class=\"icon-wrapper\">\n <i class=\"fas fa-tower-broadcast\"></i>\n </div>\n <div class=\"header-info\">\n <h2>AI Agent Session</h2>\n <div class=\"meta-info\">\n @if (record.AgentID) {\n <span class=\"agent-name\">\n <a href=\"javascript:void(0)\" class=\"entity-link\" (click)=\"OpenEntityRecord('AI Agents', record.AgentID)\">\n {{ record.Agent || 'Agent' }}\n </a>\n </span>\n }\n @if (TargetAgentID) {\n <i class=\"fas fa-arrow-right-long target-arrow\"></i>\n <span class=\"agent-name\">\n <a href=\"javascript:void(0)\" class=\"entity-link\" (click)=\"OpenEntityRecord('AI Agents', TargetAgentID)\">\n {{ TargetAgentName || 'Target agent' }}\n </a>\n </span>\n }\n <span class=\"run-id\">{{ ShortSessionId }}</span>\n @if (record.ConversationID) {\n <span class=\"conversation-pill\" (click)=\"NavigateToConversation()\" title=\"Open conversation in Chat app\">\n <i class=\"fas fa-comments\"></i>\n <span>{{ record.Conversation || 'Conversation' }}</span>\n <i class=\"fas fa-external-link-alt pill-action\"></i>\n </span>\n }\n </div>\n </div>\n </div>\n <div class=\"header-right\">\n <div class=\"status-badge\" [attr.data-status]=\"record.Status\">\n <i class=\"fas\" [ngClass]=\"GetStatusIcon(record.Status)\"></i>\n {{ record.Status }}\n </div>\n <div class=\"header-actions\">\n <button class=\"btn-icon\" (click)=\"RefreshData()\" title=\"Refresh\">\n <i class=\"fas fa-sync-alt\"></i>\n </button>\n </div>\n </div>\n </div>\n\n <div class=\"header-stats\">\n <div class=\"stat\">\n <span class=\"label\">User</span>\n <span class=\"value\">\n <a href=\"javascript:void(0)\" class=\"entity-link\" (click)=\"OpenEntityRecord('Users', record.UserID)\">{{ record.User }}</a>\n </span>\n </div>\n <div class=\"stat\">\n <span class=\"label\">Started</span>\n <span class=\"value\">{{ record.__mj_CreatedAt | date:'medium' }}</span>\n </div>\n @if (record.ClosedAt) {\n <div class=\"stat\">\n <span class=\"label\">Closed</span>\n <span class=\"value\">{{ record.ClosedAt | date:'medium' }}</span>\n </div>\n } @else {\n <div class=\"stat\">\n <span class=\"label\">Last Active</span>\n <span class=\"value\">{{ record.LastActiveAt | date:'medium' }}</span>\n </div>\n }\n <div class=\"stat\">\n <span class=\"label\">Duration</span>\n <span class=\"value\">{{ SessionDuration }}</span>\n </div>\n <div class=\"stat\">\n <span class=\"label\">Channels</span>\n <span class=\"value\">{{ Channels.length }}</span>\n </div>\n <div class=\"stat\">\n <span class=\"label\">Delegated Runs</span>\n <span class=\"value\">{{ DelegatedRunCount }}</span>\n </div>\n @if (SessionTokens != null && SessionTokens > 0) {\n <div class=\"stat\">\n <span class=\"label\">Tokens</span>\n <span class=\"value\">{{ SessionTokens | number:'1.0-0' }}</span>\n </div>\n }\n @if (SessionCost != null && SessionCost > 0) {\n <div class=\"stat\">\n <span class=\"label\">Cost</span>\n <span class=\"value success\">${{ SessionCost | number:'1.2-4' }}</span>\n </div>\n }\n </div>\n\n <!-- Config bar: target agent / host instance / continuation -->\n <div class=\"configuration-bar\">\n <div class=\"config-item\">\n <i class=\"fas fa-bullseye\"></i>\n <div class=\"config-content\">\n <div class=\"config-label\">Target Agent</div>\n <div class=\"config-value\">\n @if (TargetAgentID) {\n <a href=\"javascript:void(0)\" class=\"entity-link\" (click)=\"OpenEntityRecord('AI Agents', TargetAgentID)\">\n {{ TargetAgentName || 'Unknown' }}\n </a>\n } @else {\n <span class=\"muted\">None</span>\n }\n </div>\n </div>\n </div>\n <div class=\"config-item\">\n <i class=\"fas fa-server\"></i>\n <div class=\"config-content\">\n <div class=\"config-label\">Host Instance</div>\n <div class=\"config-value mono\">{{ record.HostInstanceID || '\u2014' }}</div>\n </div>\n </div>\n <div class=\"config-item\">\n <i class=\"fas fa-link\"></i>\n <div class=\"config-content\">\n <div class=\"config-label\">Continuation</div>\n <div class=\"config-value\">\n @if (record.LastSessionID) {\n <a href=\"javascript:void(0)\" class=\"entity-link\" (click)=\"OpenEntityRecord('MJ: AI Agent Sessions', record.LastSessionID)\">\n Resumed from prior session\n </a>\n } @else {\n <span class=\"muted\">None (new session)</span>\n }\n </div>\n </div>\n </div>\n </div>\n </div>\n\n <!-- Tabs -->\n <div class=\"tabs\">\n <button class=\"tab\" [class.active]=\"ActiveTab === 'runs'\" (click)=\"ChangeTab('runs')\">\n <i class=\"fas fa-diagram-project\"></i> Runs\n @if (RunTree.length > 0) { <span class=\"tab-count\">{{ RunTree.length }}</span> }\n </button>\n <button class=\"tab\" [class.active]=\"ActiveTab === 'channels'\" (click)=\"ChangeTab('channels')\">\n <i class=\"fas fa-plug\"></i> Channels\n @if (Channels.length > 0) { <span class=\"tab-count\">{{ Channels.length }}</span> }\n </button>\n <button class=\"tab\" [class.active]=\"ActiveTab === 'transcript'\" (click)=\"ChangeTab('transcript')\">\n <i class=\"fas fa-comments\"></i> Transcript\n @if (Transcript.length > 0) { <span class=\"tab-count\">{{ Transcript.length }}</span> }\n </button>\n <button class=\"tab\" [class.active]=\"ActiveTab === 'details'\" (click)=\"ChangeTab('details')\">\n <i class=\"fas fa-info-circle\"></i> Details\n </button>\n </div>\n\n <!-- Content -->\n <div class=\"content-area\">\n @if (Loading) {\n <mj-loading text=\"Loading session data...\" size=\"medium\"></mj-loading>\n } @else if (LoadError) {\n <mj-empty-state\n Variant=\"error\"\n [Message]=\"LoadError\" />\n } @else {\n\n <!-- Runs tab: the session's delegated run tree -->\n @if (ActiveTab === 'runs') {\n <div class=\"tab-content\">\n @if (RunTree.length === 0) {\n <mj-empty-state\n Icon=\"fa-solid fa-diagram-project\"\n Title=\"No Runs\"\n Message=\"No agent runs have been recorded for this session yet.\" />\n } @else {\n <div class=\"run-tree\">\n @for (node of RunTree; track node.id) {\n <div class=\"run-node\"\n [class.run-node--child]=\"node.depth > 0\"\n [style.margin-left.px]=\"node.depth * 36\"\n (click)=\"OpenEntityRecord(node.entityName, node.id)\"\n title=\"Open record\">\n <div class=\"run-marker\"\n [class.run-marker--coagent]=\"node.isCoAgentRun\"\n [class.run-marker--prompt]=\"node.kind === 'promptRun'\">\n @if (node.kind === 'promptRun') {\n <i class=\"fas fa-microchip\"></i>\n } @else if (node.isCoAgentRun) {\n <i class=\"fas fa-tower-broadcast\"></i>\n } @else {\n <i class=\"fas fa-robot\"></i>\n }\n </div>\n <div class=\"run-body\">\n <div class=\"run-headrow\">\n <h4 class=\"run-title\">{{ node.title }}</h4>\n <span class=\"run-time\">{{ node.startedAt | date:'h:mm:ss a' }}</span>\n </div>\n <div class=\"run-sub\">{{ node.subtitle }}</div>\n <div class=\"run-foot\">\n <span class=\"run-status\" [attr.data-status]=\"node.status\">\n <i class=\"fas\" [ngClass]=\"GetRunStatusIcon(node.status)\"></i> {{ node.status }}\n </span>\n <span class=\"run-chip\">\n <i class=\"fas fa-clock\"></i> {{ FormatDuration(node.startedAt, node.completedAt) }}\n </span>\n @if (node.tokens != null && node.tokens > 0) {\n <span class=\"run-chip\"><i class=\"fas fa-coins\"></i> {{ node.tokens | number:'1.0-0' }} tok</span>\n }\n @if (node.cost != null && node.cost > 0) {\n <span class=\"run-chip\"><i class=\"fas fa-dollar-sign\"></i> {{ node.cost | number:'1.2-4' }}</span>\n }\n </div>\n </div>\n </div>\n }\n </div>\n }\n </div>\n }\n\n <!-- Channels tab -->\n @if (ActiveTab === 'channels') {\n <div class=\"tab-content\">\n @if (Channels.length === 0) {\n <mj-empty-state\n Icon=\"fa-solid fa-plug\"\n Title=\"No Channels\"\n Message=\"No channel instances were attached to this session.\" />\n } @else {\n <div class=\"channels-grid-wrap\">\n <table class=\"channels-grid\">\n <thead>\n <tr>\n <th>Channel</th>\n <th>Transport</th>\n <th>Status</th>\n <th>Connected</th>\n <th>Last Active</th>\n <th>Disconnected</th>\n <th>Socket</th>\n </tr>\n </thead>\n <tbody>\n @for (channel of Channels; track channel.row.ID) {\n <tr (click)=\"OpenEntityRecord('MJ: AI Agent Session Channels', channel.row.ID)\" title=\"Open record\">\n <td>\n <span class=\"cell-strong\">\n <i class=\"fas\" [ngClass]=\"GetChannelIcon(channel.row.Channel)\"></i>\n {{ channel.row.Channel }}\n </span>\n </td>\n <td>\n @if (channel.transportType) {\n <span class=\"transport-pill\" [attr.data-transport]=\"channel.transportType\">{{ channel.transportType }}</span>\n } @else {\n <span class=\"muted\">\u2014</span>\n }\n </td>\n <td>\n <span class=\"channel-status-pill\" [attr.data-status]=\"channel.row.Status\">{{ channel.row.Status }}</span>\n </td>\n <td class=\"mono\">{{ channel.row.__mj_CreatedAt | date:'h:mm:ss a' }}</td>\n <td class=\"mono\">{{ channel.row.LastActiveAt | date:'h:mm:ss a' }}</td>\n <td class=\"mono\">\n @if (channel.row.DisconnectedAt) {\n {{ channel.row.DisconnectedAt | date:'h:mm:ss a' }}\n } @else {\n <span class=\"muted\">\u2014</span>\n }\n </td>\n <td class=\"mono socket-cell\" [title]=\"channel.row.SocketUrl || ''\">\n {{ channel.row.SocketUrl || '\u2014' }}\n </td>\n </tr>\n }\n </tbody>\n </table>\n </div>\n }\n </div>\n }\n\n <!-- Transcript tab -->\n @if (ActiveTab === 'transcript') {\n <div class=\"tab-content\">\n @if (Transcript.length === 0) {\n <mj-empty-state\n Icon=\"fa-solid fa-comments\"\n Title=\"No Transcript\"\n Message=\"No conversation messages were stamped with this session.\" />\n } @else {\n <div class=\"transcript-thread\">\n @for (turn of Transcript; track turn.ID) {\n <div class=\"turn\" [class.turn--user]=\"turn.Role === 'User'\" [class.turn--error]=\"turn.Role === 'Error'\">\n <div class=\"turn-avatar\">\n @if (turn.Role === 'User') {\n <i class=\"fas fa-user\"></i>\n } @else if (turn.Role === 'Error') {\n <i class=\"fas fa-triangle-exclamation\"></i>\n } @else {\n <i class=\"fas fa-robot\"></i>\n }\n </div>\n <div class=\"turn-main\">\n <div class=\"turn-meta\">\n @if (turn.Role === 'User') {\n {{ turn.User || 'User' }}\n } @else {\n {{ turn.Agent || 'Agent' }}\n }\n <span class=\"turn-time\">{{ turn.__mj_CreatedAt | date:'h:mm:ss a' }}</span>\n </div>\n <div class=\"turn-bubble\">{{ turn.Message }}</div>\n </div>\n </div>\n }\n </div>\n }\n </div>\n }\n\n <!-- Details tab -->\n @if (ActiveTab === 'details') {\n <div class=\"tab-content\">\n <mj-accordion-panel [Expanded]=\"true\">\n <ng-template mjAccordionTitle>\n <i class=\"fas fa-info-circle\"></i> Session Record\n </ng-template>\n <div class=\"details-grid\">\n <div class=\"detail-item\">\n <label>ID</label>\n <span class=\"mono\">{{ record.ID }}</span>\n </div>\n <div class=\"detail-item\">\n <label>Agent (Co-Agent)</label>\n <span>\n <a href=\"javascript:void(0)\" class=\"entity-link\" (click)=\"OpenEntityRecord('AI Agents', record.AgentID)\">\n {{ record.Agent || 'N/A' }}\n </a>\n </span>\n </div>\n <div class=\"detail-item\">\n <label>User</label>\n <span>\n <a href=\"javascript:void(0)\" class=\"entity-link\" (click)=\"OpenEntityRecord('Users', record.UserID)\">\n {{ record.User }}\n </a>\n </span>\n </div>\n <div class=\"detail-item\">\n <label>Conversation</label>\n <span>\n @if (record.ConversationID) {\n <a href=\"javascript:void(0)\" class=\"entity-link\" (click)=\"OpenEntityRecord('MJ: Conversations', record.ConversationID)\">\n {{ record.Conversation || record.ConversationID }}\n </a>\n } @else {\n <span>N/A</span>\n }\n </span>\n </div>\n <div class=\"detail-item\">\n <label>Status</label>\n <span class=\"status-badge small\" [attr.data-status]=\"record.Status\">{{ record.Status }}</span>\n </div>\n <div class=\"detail-item\">\n <label>Prior Session</label>\n <span>\n @if (record.LastSessionID) {\n <a href=\"javascript:void(0)\" class=\"entity-link\" (click)=\"OpenEntityRecord('MJ: AI Agent Sessions', record.LastSessionID)\">\n {{ record.LastSessionID }}\n </a>\n } @else {\n <span>None (root)</span>\n }\n </span>\n </div>\n <div class=\"detail-item\">\n <label>Host Instance</label>\n <span class=\"mono\">{{ record.HostInstanceID || 'N/A' }}</span>\n </div>\n <div class=\"detail-item\">\n <label>Last Active At</label>\n <span>{{ record.LastActiveAt | date:'medium' }}</span>\n </div>\n <div class=\"detail-item\">\n <label>Closed At</label>\n <span>{{ record.ClosedAt ? (record.ClosedAt | date:'medium') : 'Still open' }}</span>\n </div>\n </div>\n </mj-accordion-panel>\n\n @if (record.Config_) {\n <mj-accordion-panel [Expanded]=\"false\">\n <ng-template mjAccordionTitle>\n <i class=\"fas fa-code\"></i> Config (Session State JSON)\n </ng-template>\n <div class=\"config-viewer\">\n <mj-code-editor\n [ngModel]=\"PrettyConfig\"\n [language]=\"'json'\"\n [readonly]=\"true\"\n style=\"height: 300px; width: 100%;\">\n </mj-code-editor>\n </div>\n </mj-accordion-panel>\n }\n </div>\n }\n }\n </div>\n </div>\n</mj-record-form-container>\n}\n", styles: [".ai-agent-session-form {\n display: flex;\n flex-direction: column;\n height: 100%;\n min-height: 0;\n}\n\n/* \u2500\u2500 Header (mirrors the AI Agent Run form) \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 */\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}\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 align-items: center;\n gap: 12px;\n margin-top: 4px;\n font-size: 14px;\n color: var(--mj-text-muted);\n flex-wrap: wrap;\n}\n\n.agent-name {\n font-weight: 500;\n color: var(--mj-text-secondary);\n}\n\n.target-arrow {\n font-size: 10px;\n color: var(--mj-text-muted);\n}\n\n.run-id {\n font-family: monospace;\n font-size: 12px;\n opacity: 0.7;\n}\n\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}\n\n.conversation-pill .pill-action {\n font-size: 9px;\n opacity: 0.6;\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=\"Active\"] {\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=\"Idle\"] {\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=\"Closed\"] {\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.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 flex-wrap: wrap;\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.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 flex-wrap: wrap;\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.muted {\n color: var(--mj-text-muted);\n font-weight: 400;\n}\n\n.mono {\n font-family: monospace;\n font-size: 13px;\n}\n\n/* \u2500\u2500 Tabs \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 */\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.tab-count {\n font-size: 11px;\n font-weight: 600;\n padding: 1px 7px;\n border-radius: 10px;\n background: var(--mj-bg-surface-sunken);\n border: 1px solid var(--mj-border-default);\n color: var(--mj-text-secondary);\n}\n\n.tab.active .tab-count {\n background: color-mix(in srgb, var(--mj-brand-primary) 10%, var(--mj-bg-surface));\n border-color: color-mix(in srgb, var(--mj-brand-primary) 25%, transparent);\n color: var(--mj-brand-primary);\n}\n\n/* \u2500\u2500 Content area \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 */\n.content-area {\n flex: 1;\n min-height: 0;\n overflow: auto;\n background: var(--mj-bg-surface);\n}\n\n.tab-content {\n padding: 20px;\n}\n\n.tab-content mj-accordion-panel {\n display: block;\n margin-bottom: 8px;\n}\n\n/* \u2500\u2500 Run tree \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 */\n.run-tree {\n display: flex;\n flex-direction: column;\n gap: 12px;\n max-width: 1000px;\n}\n\n.run-node {\n display: flex;\n gap: 14px;\n align-items: flex-start;\n background: var(--mj-bg-surface);\n border: 1px solid var(--mj-border-default);\n border-radius: 12px;\n padding: 14px 18px;\n box-shadow: var(--mj-shadow-sm);\n cursor: pointer;\n transition: all 0.2s ease;\n}\n\n.run-node:hover {\n border-color: color-mix(in srgb, var(--mj-brand-primary) 40%, var(--mj-border-default));\n transform: translateX(2px);\n}\n\n.run-node--child {\n background: var(--mj-bg-surface-card);\n}\n\n.run-marker {\n width: 36px;\n height: 36px;\n flex-shrink: 0;\n border-radius: 50%;\n display: flex;\n align-items: center;\n justify-content: center;\n background: var(--mj-bg-surface);\n border: 2px solid var(--mj-border-strong);\n color: var(--mj-text-secondary);\n font-size: 14px;\n}\n\n.run-marker--coagent {\n border-color: var(--mj-brand-primary);\n color: var(--mj-brand-primary);\n}\n\n.run-marker--prompt {\n border-color: var(--mj-status-info);\n color: var(--mj-status-info);\n}\n\n.run-body {\n flex: 1;\n min-width: 0;\n}\n\n.run-headrow {\n display: flex;\n justify-content: space-between;\n align-items: center;\n gap: 12px;\n}\n\n.run-title {\n margin: 0;\n font-size: 15px;\n font-weight: 600;\n color: var(--mj-text-primary);\n}\n\n.run-time {\n font-size: 12px;\n font-family: monospace;\n color: var(--mj-text-muted);\n white-space: nowrap;\n}\n\n.run-sub {\n font-size: 13px;\n color: var(--mj-text-muted);\n margin-top: 2px;\n overflow: hidden;\n text-overflow: ellipsis;\n}\n\n.run-foot {\n display: flex;\n align-items: center;\n gap: 10px;\n margin-top: 8px;\n flex-wrap: wrap;\n}\n\n.run-status {\n display: inline-flex;\n align-items: center;\n gap: 6px;\n padding: 2px 10px;\n border-radius: 12px;\n font-size: 11px;\n font-weight: 600;\n text-transform: uppercase;\n letter-spacing: 0.5px;\n background: var(--mj-bg-surface-sunken);\n color: var(--mj-text-secondary);\n}\n\n.run-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.run-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.run-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.run-status[data-status=\"Cancelled\"],\n.run-status[data-status=\"AwaitingFeedback\"] {\n background: color-mix(in srgb, var(--mj-status-warning) 15%, var(--mj-bg-surface));\n color: var(--mj-status-warning);\n}\n\n.run-chip {\n display: inline-flex;\n align-items: center;\n gap: 5px;\n font-size: 12px;\n color: var(--mj-text-muted);\n background: var(--mj-bg-surface-sunken);\n border: 1px solid var(--mj-border-subtle);\n border-radius: 12px;\n padding: 2px 10px;\n}\n\n/* \u2500\u2500 Channels grid \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 */\n.channels-grid-wrap {\n border: 1px solid var(--mj-border-default);\n border-radius: 10px;\n overflow: auto;\n}\n\n.channels-grid {\n width: 100%;\n border-collapse: collapse;\n font-size: 13.5px;\n}\n\n.channels-grid th {\n text-align: left;\n padding: 10px 14px;\n font-size: 11px;\n text-transform: uppercase;\n letter-spacing: 0.5px;\n color: var(--mj-text-muted);\n background: var(--mj-bg-surface-sunken);\n border-bottom: 1px solid var(--mj-border-default);\n white-space: nowrap;\n}\n\n.channels-grid td {\n padding: 12px 14px;\n border-bottom: 1px solid var(--mj-border-subtle);\n color: var(--mj-text-secondary);\n vertical-align: middle;\n}\n\n.channels-grid tbody tr {\n cursor: pointer;\n transition: background 0.15s ease;\n}\n\n.channels-grid tbody tr:hover {\n background: var(--mj-bg-surface-hover);\n}\n\n.channels-grid tbody tr:last-child td {\n border-bottom: none;\n}\n\n.cell-strong {\n display: inline-flex;\n align-items: center;\n gap: 8px;\n font-weight: 600;\n color: var(--mj-text-primary);\n}\n\n.cell-strong i {\n color: var(--mj-brand-primary);\n}\n\n.transport-pill,\n.channel-status-pill {\n display: inline-flex;\n align-items: center;\n padding: 2px 10px;\n border-radius: 12px;\n font-size: 11px;\n font-weight: 600;\n text-transform: uppercase;\n letter-spacing: 0.5px;\n background: var(--mj-bg-surface-sunken);\n color: var(--mj-text-secondary);\n border: 1px solid var(--mj-border-default);\n}\n\n.transport-pill[data-transport=\"WebRTC\"] {\n background: color-mix(in srgb, var(--mj-status-info) 12%, var(--mj-bg-surface));\n color: var(--mj-status-info);\n border-color: color-mix(in srgb, var(--mj-status-info) 25%, transparent);\n}\n\n.transport-pill[data-transport=\"WebSocket\"] {\n background: color-mix(in srgb, var(--mj-brand-primary) 10%, var(--mj-bg-surface));\n color: var(--mj-brand-primary);\n border-color: color-mix(in srgb, var(--mj-brand-primary) 25%, transparent);\n}\n\n.channel-status-pill[data-status=\"Connected\"] {\n background: color-mix(in srgb, var(--mj-status-success) 15%, var(--mj-bg-surface));\n color: var(--mj-status-success);\n border-color: color-mix(in srgb, var(--mj-status-success) 25%, transparent);\n}\n\n.channel-status-pill[data-status=\"Connecting\"] {\n background: color-mix(in srgb, var(--mj-status-info) 15%, var(--mj-bg-surface));\n color: var(--mj-status-info);\n border-color: color-mix(in srgb, var(--mj-status-info) 25%, transparent);\n}\n\n.channel-status-pill[data-status=\"Paused\"] {\n background: color-mix(in srgb, var(--mj-status-warning) 15%, var(--mj-bg-surface));\n color: var(--mj-status-warning);\n border-color: color-mix(in srgb, var(--mj-status-warning) 25%, transparent);\n}\n\n.socket-cell {\n max-width: 220px;\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n}\n\n/* \u2500\u2500 Transcript \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 */\n.transcript-thread {\n display: flex;\n flex-direction: column;\n gap: 16px;\n max-width: 860px;\n margin: 0 auto;\n}\n\n.turn {\n display: flex;\n gap: 12px;\n align-items: flex-start;\n}\n\n.turn--user {\n flex-direction: row-reverse;\n}\n\n.turn-avatar {\n width: 34px;\n height: 34px;\n flex-shrink: 0;\n border-radius: 50%;\n display: flex;\n align-items: center;\n justify-content: center;\n font-size: 13px;\n background: color-mix(in srgb, var(--mj-brand-primary) 12%, var(--mj-bg-surface));\n color: var(--mj-brand-primary);\n border: 1px solid color-mix(in srgb, var(--mj-brand-primary) 25%, transparent);\n}\n\n.turn--user .turn-avatar {\n background: var(--mj-bg-surface-sunken);\n color: var(--mj-text-secondary);\n border-color: var(--mj-border-default);\n}\n\n.turn--error .turn-avatar {\n background: color-mix(in srgb, var(--mj-status-error) 12%, var(--mj-bg-surface));\n color: var(--mj-status-error);\n border-color: color-mix(in srgb, var(--mj-status-error) 25%, transparent);\n}\n\n.turn-main {\n max-width: 70%;\n min-width: 0;\n}\n\n.turn--user .turn-main {\n display: flex;\n flex-direction: column;\n align-items: flex-end;\n}\n\n.turn-meta {\n font-size: 12px;\n font-weight: 600;\n color: var(--mj-text-secondary);\n margin-bottom: 4px;\n display: flex;\n align-items: center;\n gap: 8px;\n}\n\n.turn-time {\n font-weight: 400;\n font-family: monospace;\n font-size: 11px;\n color: var(--mj-text-muted);\n}\n\n.turn-bubble {\n background: var(--mj-bg-surface-card);\n border: 1px solid var(--mj-border-default);\n border-radius: 12px;\n border-top-left-radius: 4px;\n padding: 10px 14px;\n font-size: 14px;\n line-height: 1.5;\n color: var(--mj-text-primary);\n white-space: pre-wrap;\n word-break: break-word;\n}\n\n.turn--user .turn-bubble {\n background: color-mix(in srgb, var(--mj-brand-primary) 8%, var(--mj-bg-surface));\n border-color: color-mix(in srgb, var(--mj-brand-primary) 20%, transparent);\n border-radius: 12px;\n border-top-right-radius: 4px;\n}\n\n.turn--error .turn-bubble {\n background: color-mix(in srgb, var(--mj-status-error) 8%, var(--mj-bg-surface));\n border-color: color-mix(in srgb, var(--mj-status-error) 25%, transparent);\n color: var(--mj-status-error-text);\n}\n\n/* \u2500\u2500 Details tab \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 */\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 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.config-viewer {\n padding: 20px;\n}\n\n/* \u2500\u2500 Shared entity link \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 */\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 cursor: pointer;\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/* \u2500\u2500 Responsive \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 */\n@media (max-width: 768px) {\n .header-content {\n flex-direction: column;\n gap: 16px;\n }\n\n .turn-main {\n max-width: 90%;\n }\n}\n"] }]
1169
+ args: [{ standalone: false, selector: 'mj-ai-agent-session-form', template: "@if (record) {\n<mj-record-form-container [Record]=\"record\" [FormComponent]=\"this\"\n [ToolbarConfig]=\"ToolbarConfig\"\n [WidthMode]=\"'full-width'\"\n (Navigate)=\"OnFormNavigate($event)\"\n (DeleteRequested)=\"OnDeleteRequested()\"\n (FavoriteToggled)=\"OnFavoriteToggled()\"\n (HistoryRequested)=\"OnHistoryRequested()\"\n (ListManagementRequested)=\"OnListManagementRequested()\">\n\n <div class=\"record-form ai-agent-session-form\">\n <!-- Header (mirrors the AI Agent Run form header) -->\n <div class=\"header\">\n <div class=\"header-content\">\n <div class=\"header-left\">\n <div class=\"icon-wrapper\">\n <i class=\"fas fa-tower-broadcast\"></i>\n </div>\n <div class=\"header-info\">\n <h2>AI Agent Session</h2>\n <div class=\"meta-info\">\n @if (record.AgentID) {\n <span class=\"agent-name\">\n <a href=\"javascript:void(0)\"\n class=\"entity-link\"\n [mjRecordLink]=\"record\"\n FieldName=\"AgentID\"\n [HandleClick]=\"false\"\n (click)=\"OpenEntityRecord('AI Agents', record.AgentID)\">\n {{ record.Agent || 'Agent' }}\n </a>\n </span>\n }\n @if (TargetAgentID) {\n <i class=\"fas fa-arrow-right-long target-arrow\"></i>\n <span class=\"agent-name\">\n <a href=\"javascript:void(0)\"\n class=\"entity-link\"\n mjRecordLink\n [EntityName]=\"'MJ: AI Agents'\"\n [RecordID]=\"TargetAgentID\"\n [DisplayName]=\"TargetAgentName || 'Target agent'\"\n [HandleClick]=\"false\"\n (click)=\"OpenEntityRecord('AI Agents', TargetAgentID)\">\n {{ TargetAgentName || 'Target agent' }}\n </a>\n </span>\n }\n <span class=\"run-id\">{{ ShortSessionId }}</span>\n @if (record.ConversationID) {\n <span class=\"conversation-pill\" (click)=\"NavigateToConversation()\" title=\"Open conversation in Chat app\">\n <i class=\"fas fa-comments\"></i>\n <span>{{ record.Conversation || 'Conversation' }}</span>\n <i class=\"fas fa-external-link-alt pill-action\"></i>\n </span>\n }\n </div>\n </div>\n </div>\n <div class=\"header-right\">\n <div class=\"status-badge\" [attr.data-status]=\"record.Status\">\n <i class=\"fas\" [ngClass]=\"GetStatusIcon(record.Status)\"></i>\n {{ record.Status }}\n </div>\n <div class=\"header-actions\">\n <button class=\"btn-icon\" (click)=\"RefreshData()\" title=\"Refresh\">\n <i class=\"fas fa-sync-alt\"></i>\n </button>\n </div>\n </div>\n </div>\n\n <div class=\"header-stats\">\n <div class=\"stat\">\n <span class=\"label\">User</span>\n <span class=\"value\">\n <a href=\"javascript:void(0)\"\n class=\"entity-link\"\n [mjRecordLink]=\"record\"\n FieldName=\"UserID\"\n [HandleClick]=\"false\"\n (click)=\"OpenEntityRecord('Users', record.UserID)\">{{ record.User }}</a>\n </span>\n </div>\n <div class=\"stat\">\n <span class=\"label\">Started</span>\n <span class=\"value\">{{ record.__mj_CreatedAt | date:'medium' }}</span>\n </div>\n @if (record.ClosedAt) {\n <div class=\"stat\">\n <span class=\"label\">Closed</span>\n <span class=\"value\">{{ record.ClosedAt | date:'medium' }}</span>\n </div>\n } @else {\n <div class=\"stat\">\n <span class=\"label\">Last Active</span>\n <span class=\"value\">{{ record.LastActiveAt | date:'medium' }}</span>\n </div>\n }\n <div class=\"stat\">\n <span class=\"label\">Duration</span>\n <span class=\"value\">{{ SessionDuration }}</span>\n </div>\n <div class=\"stat\">\n <span class=\"label\">Channels</span>\n <span class=\"value\">{{ Channels.length }}</span>\n </div>\n <div class=\"stat\">\n <span class=\"label\">Delegated Runs</span>\n <span class=\"value\">{{ DelegatedRunCount }}</span>\n </div>\n @if (SessionTokens != null && SessionTokens > 0) {\n <div class=\"stat\">\n <span class=\"label\">Tokens</span>\n <span class=\"value\">{{ SessionTokens | number:'1.0-0' }}</span>\n </div>\n }\n @if (SessionCost != null && SessionCost > 0) {\n <div class=\"stat\">\n <span class=\"label\">Cost</span>\n <span class=\"value success\">${{ SessionCost | number:'1.2-4' }}</span>\n </div>\n }\n </div>\n\n <!-- Config bar: target agent / host instance / continuation -->\n <div class=\"configuration-bar\">\n <div class=\"config-item\">\n <i class=\"fas fa-bullseye\"></i>\n <div class=\"config-content\">\n <div class=\"config-label\">Target Agent</div>\n <div class=\"config-value\">\n @if (TargetAgentID) {\n <a href=\"javascript:void(0)\" class=\"entity-link\" (click)=\"OpenEntityRecord('AI Agents', TargetAgentID)\">\n {{ TargetAgentName || 'Unknown' }}\n </a>\n } @else {\n <span class=\"muted\">None</span>\n }\n </div>\n </div>\n </div>\n <div class=\"config-item\">\n <i class=\"fas fa-server\"></i>\n <div class=\"config-content\">\n <div class=\"config-label\">Host Instance</div>\n <div class=\"config-value mono\">{{ record.HostInstanceID || '\u2014' }}</div>\n </div>\n </div>\n <div class=\"config-item\">\n <i class=\"fas fa-link\"></i>\n <div class=\"config-content\">\n <div class=\"config-label\">Continuation</div>\n <div class=\"config-value\">\n @if (record.LastSessionID) {\n <a href=\"javascript:void(0)\" class=\"entity-link\" (click)=\"OpenEntityRecord('MJ: AI Agent Sessions', record.LastSessionID)\">\n Resumed from prior session\n </a>\n } @else {\n <span class=\"muted\">None (new session)</span>\n }\n </div>\n </div>\n </div>\n </div>\n </div>\n\n <!-- Tabs -->\n <div class=\"tabs\">\n <button class=\"tab\" [class.active]=\"ActiveTab === 'runs'\" (click)=\"ChangeTab('runs')\">\n <i class=\"fas fa-diagram-project\"></i> Runs\n @if (RunTree.length > 0) { <span class=\"tab-count\">{{ RunTree.length }}</span> }\n </button>\n <button class=\"tab\" [class.active]=\"ActiveTab === 'channels'\" (click)=\"ChangeTab('channels')\">\n <i class=\"fas fa-plug\"></i> Channels\n @if (Channels.length > 0) { <span class=\"tab-count\">{{ Channels.length }}</span> }\n </button>\n <button class=\"tab\" [class.active]=\"ActiveTab === 'transcript'\" (click)=\"ChangeTab('transcript')\">\n <i class=\"fas fa-comments\"></i> Transcript\n @if (Transcript.length > 0) { <span class=\"tab-count\">{{ Transcript.length }}</span> }\n </button>\n <button class=\"tab\" [class.active]=\"ActiveTab === 'details'\" (click)=\"ChangeTab('details')\">\n <i class=\"fas fa-info-circle\"></i> Details\n </button>\n </div>\n\n <!-- Content -->\n <div class=\"content-area\">\n @if (Loading) {\n <mj-loading text=\"Loading session data...\" size=\"medium\"></mj-loading>\n } @else if (LoadError) {\n <mj-empty-state\n Variant=\"error\"\n [Message]=\"LoadError\" />\n } @else {\n\n <!-- Runs tab: the session's delegated run tree -->\n @if (ActiveTab === 'runs') {\n <div class=\"tab-content\">\n @if (RunTree.length === 0) {\n <mj-empty-state\n Icon=\"fa-solid fa-diagram-project\"\n Title=\"No Runs\"\n Message=\"No agent runs have been recorded for this session yet.\" />\n } @else {\n <div class=\"run-tree\">\n @for (node of RunTree; track node.id) {\n <div class=\"run-node\"\n [class.run-node--child]=\"node.depth > 0\"\n [style.margin-left.px]=\"node.depth * 36\"\n (click)=\"OpenEntityRecord(node.entityName, node.id)\"\n title=\"Open record\">\n <div class=\"run-marker\"\n [class.run-marker--coagent]=\"node.isCoAgentRun\"\n [class.run-marker--prompt]=\"node.kind === 'promptRun'\">\n @if (node.kind === 'promptRun') {\n <i class=\"fas fa-microchip\"></i>\n } @else if (node.isCoAgentRun) {\n <i class=\"fas fa-tower-broadcast\"></i>\n } @else {\n <i class=\"fas fa-robot\"></i>\n }\n </div>\n <div class=\"run-body\">\n <div class=\"run-headrow\">\n <h4 class=\"run-title\">{{ node.title }}</h4>\n <span class=\"run-time\">{{ node.startedAt | date:'h:mm:ss a' }}</span>\n </div>\n <div class=\"run-sub\">{{ node.subtitle }}</div>\n <div class=\"run-foot\">\n <span class=\"run-status\" [attr.data-status]=\"node.status\">\n <i class=\"fas\" [ngClass]=\"GetRunStatusIcon(node.status)\"></i> {{ node.status }}\n </span>\n <span class=\"run-chip\">\n <i class=\"fas fa-clock\"></i> {{ FormatDuration(node.startedAt, node.completedAt) }}\n </span>\n @if (node.tokens != null && node.tokens > 0) {\n <span class=\"run-chip\"><i class=\"fas fa-coins\"></i> {{ node.tokens | number:'1.0-0' }} tok</span>\n }\n @if (node.cost != null && node.cost > 0) {\n <span class=\"run-chip\"><i class=\"fas fa-dollar-sign\"></i> {{ node.cost | number:'1.2-4' }}</span>\n }\n </div>\n </div>\n </div>\n }\n </div>\n }\n </div>\n }\n\n <!-- Channels tab -->\n @if (ActiveTab === 'channels') {\n <div class=\"tab-content\">\n @if (Channels.length === 0) {\n <mj-empty-state\n Icon=\"fa-solid fa-plug\"\n Title=\"No Channels\"\n Message=\"No channel instances were attached to this session.\" />\n } @else {\n <div class=\"channels-grid-wrap\">\n <table class=\"channels-grid\">\n <thead>\n <tr>\n <th>Channel</th>\n <th>Transport</th>\n <th>Status</th>\n <th>Connected</th>\n <th>Last Active</th>\n <th>Disconnected</th>\n <th>Socket</th>\n </tr>\n </thead>\n <tbody>\n @for (channel of Channels; track channel.row.ID) {\n <tr (click)=\"OpenEntityRecord('MJ: AI Agent Session Channels', channel.row.ID)\" title=\"Open record\">\n <td>\n <span class=\"cell-strong\">\n <i class=\"fas\" [ngClass]=\"GetChannelIcon(channel.row.Channel)\"></i>\n {{ channel.row.Channel }}\n </span>\n </td>\n <td>\n @if (channel.transportType) {\n <span class=\"transport-pill\" [attr.data-transport]=\"channel.transportType\">{{ channel.transportType }}</span>\n } @else {\n <span class=\"muted\">\u2014</span>\n }\n </td>\n <td>\n <span class=\"channel-status-pill\" [attr.data-status]=\"channel.row.Status\">{{ channel.row.Status }}</span>\n </td>\n <td class=\"mono\">{{ channel.row.__mj_CreatedAt | date:'h:mm:ss a' }}</td>\n <td class=\"mono\">{{ channel.row.LastActiveAt | date:'h:mm:ss a' }}</td>\n <td class=\"mono\">\n @if (channel.row.DisconnectedAt) {\n {{ channel.row.DisconnectedAt | date:'h:mm:ss a' }}\n } @else {\n <span class=\"muted\">\u2014</span>\n }\n </td>\n <td class=\"mono socket-cell\" [title]=\"channel.row.SocketUrl || ''\">\n {{ channel.row.SocketUrl || '\u2014' }}\n </td>\n </tr>\n }\n </tbody>\n </table>\n </div>\n }\n </div>\n }\n\n <!-- Transcript tab -->\n @if (ActiveTab === 'transcript') {\n <div class=\"tab-content\">\n @if (Transcript.length === 0) {\n <mj-empty-state\n Icon=\"fa-solid fa-comments\"\n Title=\"No Transcript\"\n Message=\"No conversation messages were stamped with this session.\" />\n } @else {\n <div class=\"transcript-thread\">\n @for (turn of Transcript; track turn.ID) {\n <div class=\"turn\" [class.turn--user]=\"turn.Role === 'User'\" [class.turn--error]=\"turn.Role === 'Error'\">\n <div class=\"turn-avatar\">\n @if (turn.Role === 'User') {\n <i class=\"fas fa-user\"></i>\n } @else if (turn.Role === 'Error') {\n <i class=\"fas fa-triangle-exclamation\"></i>\n } @else {\n <i class=\"fas fa-robot\"></i>\n }\n </div>\n <div class=\"turn-main\">\n <div class=\"turn-meta\">\n @if (turn.Role === 'User') {\n {{ turn.User || 'User' }}\n } @else {\n {{ turn.Agent || 'Agent' }}\n }\n <span class=\"turn-time\">{{ turn.__mj_CreatedAt | date:'h:mm:ss a' }}</span>\n </div>\n <div class=\"turn-bubble\">{{ turn.Message }}</div>\n </div>\n </div>\n }\n </div>\n }\n </div>\n }\n\n <!-- Details tab -->\n @if (ActiveTab === 'details') {\n <div class=\"tab-content\">\n <mj-accordion-panel [Expanded]=\"true\">\n <ng-template mjAccordionTitle>\n <i class=\"fas fa-info-circle\"></i> Session Record\n </ng-template>\n <div class=\"details-grid\">\n <div class=\"detail-item\">\n <label>ID</label>\n <span class=\"mono\">{{ record.ID }}</span>\n </div>\n <div class=\"detail-item\">\n <label>Agent (Co-Agent)</label>\n <span>\n <a href=\"javascript:void(0)\" class=\"entity-link\" (click)=\"OpenEntityRecord('AI Agents', record.AgentID)\">\n {{ record.Agent || 'N/A' }}\n </a>\n </span>\n </div>\n <div class=\"detail-item\">\n <label>User</label>\n <span>\n <a href=\"javascript:void(0)\" class=\"entity-link\" (click)=\"OpenEntityRecord('Users', record.UserID)\">\n {{ record.User }}\n </a>\n </span>\n </div>\n <div class=\"detail-item\">\n <label>Conversation</label>\n <span>\n @if (record.ConversationID) {\n <a href=\"javascript:void(0)\" class=\"entity-link\" (click)=\"OpenEntityRecord('MJ: Conversations', record.ConversationID)\">\n {{ record.Conversation || record.ConversationID }}\n </a>\n } @else {\n <span>N/A</span>\n }\n </span>\n </div>\n <div class=\"detail-item\">\n <label>Status</label>\n <span class=\"status-badge small\" [attr.data-status]=\"record.Status\">{{ record.Status }}</span>\n </div>\n <div class=\"detail-item\">\n <label>Prior Session</label>\n <span>\n @if (record.LastSessionID) {\n <a href=\"javascript:void(0)\" class=\"entity-link\" (click)=\"OpenEntityRecord('MJ: AI Agent Sessions', record.LastSessionID)\">\n {{ record.LastSessionID }}\n </a>\n } @else {\n <span>None (root)</span>\n }\n </span>\n </div>\n <div class=\"detail-item\">\n <label>Host Instance</label>\n <span class=\"mono\">{{ record.HostInstanceID || 'N/A' }}</span>\n </div>\n <div class=\"detail-item\">\n <label>Last Active At</label>\n <span>{{ record.LastActiveAt | date:'medium' }}</span>\n </div>\n <div class=\"detail-item\">\n <label>Closed At</label>\n <span>{{ record.ClosedAt ? (record.ClosedAt | date:'medium') : 'Still open' }}</span>\n </div>\n </div>\n </mj-accordion-panel>\n\n @if (record.Config_) {\n <mj-accordion-panel [Expanded]=\"false\">\n <ng-template mjAccordionTitle>\n <i class=\"fas fa-code\"></i> Config (Session State JSON)\n </ng-template>\n <div class=\"config-viewer\">\n <mj-code-editor\n [ngModel]=\"PrettyConfig\"\n [language]=\"'json'\"\n [readonly]=\"true\"\n style=\"height: 300px; width: 100%;\">\n </mj-code-editor>\n </div>\n </mj-accordion-panel>\n }\n </div>\n }\n }\n </div>\n </div>\n</mj-record-form-container>\n}\n", styles: [".ai-agent-session-form {\n display: flex;\n flex-direction: column;\n height: 100%;\n min-height: 0;\n}\n\n/* \u2500\u2500 Header (mirrors the AI Agent Run form) \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 */\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}\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 align-items: center;\n gap: 12px;\n margin-top: 4px;\n font-size: 14px;\n color: var(--mj-text-muted);\n flex-wrap: wrap;\n}\n\n.agent-name {\n font-weight: 500;\n color: var(--mj-text-secondary);\n}\n\n.target-arrow {\n font-size: 10px;\n color: var(--mj-text-muted);\n}\n\n.run-id {\n font-family: monospace;\n font-size: 12px;\n opacity: 0.7;\n}\n\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}\n\n.conversation-pill .pill-action {\n font-size: 9px;\n opacity: 0.6;\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=\"Active\"] {\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=\"Idle\"] {\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=\"Closed\"] {\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.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 flex-wrap: wrap;\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.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 flex-wrap: wrap;\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.muted {\n color: var(--mj-text-muted);\n font-weight: 400;\n}\n\n.mono {\n font-family: monospace;\n font-size: 13px;\n}\n\n/* \u2500\u2500 Tabs \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 */\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.tab-count {\n font-size: 11px;\n font-weight: 600;\n padding: 1px 7px;\n border-radius: 10px;\n background: var(--mj-bg-surface-sunken);\n border: 1px solid var(--mj-border-default);\n color: var(--mj-text-secondary);\n}\n\n.tab.active .tab-count {\n background: color-mix(in srgb, var(--mj-brand-primary) 10%, var(--mj-bg-surface));\n border-color: color-mix(in srgb, var(--mj-brand-primary) 25%, transparent);\n color: var(--mj-brand-primary);\n}\n\n/* \u2500\u2500 Content area \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 */\n.content-area {\n flex: 1;\n min-height: 0;\n overflow: auto;\n background: var(--mj-bg-surface);\n}\n\n.tab-content {\n padding: 20px;\n}\n\n.tab-content mj-accordion-panel {\n display: block;\n margin-bottom: 8px;\n}\n\n/* \u2500\u2500 Run tree \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 */\n.run-tree {\n display: flex;\n flex-direction: column;\n gap: 12px;\n max-width: 1000px;\n}\n\n.run-node {\n display: flex;\n gap: 14px;\n align-items: flex-start;\n background: var(--mj-bg-surface);\n border: 1px solid var(--mj-border-default);\n border-radius: 12px;\n padding: 14px 18px;\n box-shadow: var(--mj-shadow-sm);\n cursor: pointer;\n transition: all 0.2s ease;\n}\n\n.run-node:hover {\n border-color: color-mix(in srgb, var(--mj-brand-primary) 40%, var(--mj-border-default));\n transform: translateX(2px);\n}\n\n.run-node--child {\n background: var(--mj-bg-surface-card);\n}\n\n.run-marker {\n width: 36px;\n height: 36px;\n flex-shrink: 0;\n border-radius: 50%;\n display: flex;\n align-items: center;\n justify-content: center;\n background: var(--mj-bg-surface);\n border: 2px solid var(--mj-border-strong);\n color: var(--mj-text-secondary);\n font-size: 14px;\n}\n\n.run-marker--coagent {\n border-color: var(--mj-brand-primary);\n color: var(--mj-brand-primary);\n}\n\n.run-marker--prompt {\n border-color: var(--mj-status-info);\n color: var(--mj-status-info);\n}\n\n.run-body {\n flex: 1;\n min-width: 0;\n}\n\n.run-headrow {\n display: flex;\n justify-content: space-between;\n align-items: center;\n gap: 12px;\n}\n\n.run-title {\n margin: 0;\n font-size: 15px;\n font-weight: 600;\n color: var(--mj-text-primary);\n}\n\n.run-time {\n font-size: 12px;\n font-family: monospace;\n color: var(--mj-text-muted);\n white-space: nowrap;\n}\n\n.run-sub {\n font-size: 13px;\n color: var(--mj-text-muted);\n margin-top: 2px;\n overflow: hidden;\n text-overflow: ellipsis;\n}\n\n.run-foot {\n display: flex;\n align-items: center;\n gap: 10px;\n margin-top: 8px;\n flex-wrap: wrap;\n}\n\n.run-status {\n display: inline-flex;\n align-items: center;\n gap: 6px;\n padding: 2px 10px;\n border-radius: 12px;\n font-size: 11px;\n font-weight: 600;\n text-transform: uppercase;\n letter-spacing: 0.5px;\n background: var(--mj-bg-surface-sunken);\n color: var(--mj-text-secondary);\n}\n\n.run-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.run-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.run-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.run-status[data-status=\"Cancelled\"],\n.run-status[data-status=\"AwaitingFeedback\"] {\n background: color-mix(in srgb, var(--mj-status-warning) 15%, var(--mj-bg-surface));\n color: var(--mj-status-warning);\n}\n\n.run-chip {\n display: inline-flex;\n align-items: center;\n gap: 5px;\n font-size: 12px;\n color: var(--mj-text-muted);\n background: var(--mj-bg-surface-sunken);\n border: 1px solid var(--mj-border-subtle);\n border-radius: 12px;\n padding: 2px 10px;\n}\n\n/* \u2500\u2500 Channels grid \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 */\n.channels-grid-wrap {\n border: 1px solid var(--mj-border-default);\n border-radius: 10px;\n overflow: auto;\n}\n\n.channels-grid {\n width: 100%;\n border-collapse: collapse;\n font-size: 13.5px;\n}\n\n.channels-grid th {\n text-align: left;\n padding: 10px 14px;\n font-size: 11px;\n text-transform: uppercase;\n letter-spacing: 0.5px;\n color: var(--mj-text-muted);\n background: var(--mj-bg-surface-sunken);\n border-bottom: 1px solid var(--mj-border-default);\n white-space: nowrap;\n}\n\n.channels-grid td {\n padding: 12px 14px;\n border-bottom: 1px solid var(--mj-border-subtle);\n color: var(--mj-text-secondary);\n vertical-align: middle;\n}\n\n.channels-grid tbody tr {\n cursor: pointer;\n transition: background 0.15s ease;\n}\n\n.channels-grid tbody tr:hover {\n background: var(--mj-bg-surface-hover);\n}\n\n.channels-grid tbody tr:last-child td {\n border-bottom: none;\n}\n\n.cell-strong {\n display: inline-flex;\n align-items: center;\n gap: 8px;\n font-weight: 600;\n color: var(--mj-text-primary);\n}\n\n.cell-strong i {\n color: var(--mj-brand-primary);\n}\n\n.transport-pill,\n.channel-status-pill {\n display: inline-flex;\n align-items: center;\n padding: 2px 10px;\n border-radius: 12px;\n font-size: 11px;\n font-weight: 600;\n text-transform: uppercase;\n letter-spacing: 0.5px;\n background: var(--mj-bg-surface-sunken);\n color: var(--mj-text-secondary);\n border: 1px solid var(--mj-border-default);\n}\n\n.transport-pill[data-transport=\"WebRTC\"] {\n background: color-mix(in srgb, var(--mj-status-info) 12%, var(--mj-bg-surface));\n color: var(--mj-status-info);\n border-color: color-mix(in srgb, var(--mj-status-info) 25%, transparent);\n}\n\n.transport-pill[data-transport=\"WebSocket\"] {\n background: color-mix(in srgb, var(--mj-brand-primary) 10%, var(--mj-bg-surface));\n color: var(--mj-brand-primary);\n border-color: color-mix(in srgb, var(--mj-brand-primary) 25%, transparent);\n}\n\n.channel-status-pill[data-status=\"Connected\"] {\n background: color-mix(in srgb, var(--mj-status-success) 15%, var(--mj-bg-surface));\n color: var(--mj-status-success);\n border-color: color-mix(in srgb, var(--mj-status-success) 25%, transparent);\n}\n\n.channel-status-pill[data-status=\"Connecting\"] {\n background: color-mix(in srgb, var(--mj-status-info) 15%, var(--mj-bg-surface));\n color: var(--mj-status-info);\n border-color: color-mix(in srgb, var(--mj-status-info) 25%, transparent);\n}\n\n.channel-status-pill[data-status=\"Paused\"] {\n background: color-mix(in srgb, var(--mj-status-warning) 15%, var(--mj-bg-surface));\n color: var(--mj-status-warning);\n border-color: color-mix(in srgb, var(--mj-status-warning) 25%, transparent);\n}\n\n.socket-cell {\n max-width: 220px;\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n}\n\n/* \u2500\u2500 Transcript \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 */\n.transcript-thread {\n display: flex;\n flex-direction: column;\n gap: 16px;\n max-width: 860px;\n margin: 0 auto;\n}\n\n.turn {\n display: flex;\n gap: 12px;\n align-items: flex-start;\n}\n\n.turn--user {\n flex-direction: row-reverse;\n}\n\n.turn-avatar {\n width: 34px;\n height: 34px;\n flex-shrink: 0;\n border-radius: 50%;\n display: flex;\n align-items: center;\n justify-content: center;\n font-size: 13px;\n background: color-mix(in srgb, var(--mj-brand-primary) 12%, var(--mj-bg-surface));\n color: var(--mj-brand-primary);\n border: 1px solid color-mix(in srgb, var(--mj-brand-primary) 25%, transparent);\n}\n\n.turn--user .turn-avatar {\n background: var(--mj-bg-surface-sunken);\n color: var(--mj-text-secondary);\n border-color: var(--mj-border-default);\n}\n\n.turn--error .turn-avatar {\n background: color-mix(in srgb, var(--mj-status-error) 12%, var(--mj-bg-surface));\n color: var(--mj-status-error);\n border-color: color-mix(in srgb, var(--mj-status-error) 25%, transparent);\n}\n\n.turn-main {\n max-width: 70%;\n min-width: 0;\n}\n\n.turn--user .turn-main {\n display: flex;\n flex-direction: column;\n align-items: flex-end;\n}\n\n.turn-meta {\n font-size: 12px;\n font-weight: 600;\n color: var(--mj-text-secondary);\n margin-bottom: 4px;\n display: flex;\n align-items: center;\n gap: 8px;\n}\n\n.turn-time {\n font-weight: 400;\n font-family: monospace;\n font-size: 11px;\n color: var(--mj-text-muted);\n}\n\n.turn-bubble {\n background: var(--mj-bg-surface-card);\n border: 1px solid var(--mj-border-default);\n border-radius: 12px;\n border-top-left-radius: 4px;\n padding: 10px 14px;\n font-size: 14px;\n line-height: 1.5;\n color: var(--mj-text-primary);\n white-space: pre-wrap;\n word-break: break-word;\n}\n\n.turn--user .turn-bubble {\n background: color-mix(in srgb, var(--mj-brand-primary) 8%, var(--mj-bg-surface));\n border-color: color-mix(in srgb, var(--mj-brand-primary) 20%, transparent);\n border-radius: 12px;\n border-top-right-radius: 4px;\n}\n\n.turn--error .turn-bubble {\n background: color-mix(in srgb, var(--mj-status-error) 8%, var(--mj-bg-surface));\n border-color: color-mix(in srgb, var(--mj-status-error) 25%, transparent);\n color: var(--mj-status-error-text);\n}\n\n/* \u2500\u2500 Details tab \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 */\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 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.config-viewer {\n padding: 20px;\n}\n\n/* \u2500\u2500 Shared entity link \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 */\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 cursor: pointer;\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/* \u2500\u2500 Responsive \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 */\n@media (max-width: 768px) {\n .header-content {\n flex-direction: column;\n gap: 16px;\n }\n\n .turn-main {\n max-width: 90%;\n }\n}\n"] }]
1162
1170
  }], null, null); })();
1163
1171
  (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassDebugInfo(MJAIAgentSessionFormComponentExtended, { className: "MJAIAgentSessionFormComponentExtended", filePath: "src/lib/custom/AIAgentSessions/ai-agent-session-form.component.ts", lineNumber: 118 }); })();
1164
1172
  //# sourceMappingURL=ai-agent-session-form.component.js.map